modify_ldt

NAME

modify_ldt - get or set ldt

SYNOPSIS

#include <sys/types.h>
 I int modify_ldt(int  func , void * ptr , unsigned long  bytecount );

DESCRIPTION

R modify_ldt () reads or writes the local descriptor table (ldt) for a process. The ldt is a per-process memory management table used by the i386 processor. For more information on this table, see an Intel 386 processor handbook.
When func is 0, R modify_ldt () reads the ldt into the memory pointed to by R ptr . The number of bytes read is the smaller of bytecount and the actual size of the ldt.
When func is 1, R modify_ldt () modifies one ldt entry. ptr points to a user_desc structure and bytecount must equal the size of this structure. The user_desc structure is defined in <asm/ldt.h> as:
struct user_desc {
    unsigned int  entry_number;
    unsigned long base_addr;
    unsigned int  limit;
    unsigned int  seg_32bit:1;
    unsigned int  contents:2;
    unsigned int  read_exec_only:1;
    unsigned int  limit_in_pages:1;
    unsigned int  seg_not_present:1;
    unsigned int  useable:1;
};
In Linux 2.4 and earlier, this structure was named R modify_ldt_ldt_s .

RETURN VALUE

On success, R modify_ldt () returns either the actual number of bytes read (for reading) or 0 (for writing). On failure, R modify_ldt () returns -1 and sets R errno to indicate the error.

ERRORS

EFAULT
ptr points outside the address space.
EINVAL
ptr is 0, or func is 1 and bytecount is not equal to the size of the structure R modify_ldt_ldt_s , or func is 1 and the new ldt entry has invalid values.
ENOSYS
func is neither 0 nor 1.

CONFORMING TO

This call is Linux specific and should not be used in programs intended to be portable.

NOTES

Glibc does not provide a wrapper for this system call; call it using syscall(2).

SEE ALSO

vm86(2)