MODIFY_LDT

Section: Linux Programmer's Manual (2)
Updated: 2007-06-01
Index JM Home Page roff page
 

名前

modify_ldt - ldt を設定または取得する  

書式

#include <sys/types.h>

int modify_ldt(int func, void *ptr, unsigned long bytecount);
 

説明

modify_ldt() はプロセスのローカル・ディスクリプタ・テーブル (local descriptor table; ldt) を読み書きする。 ldt は i386 プロセッサで使用されるプロセスごとのメモリ管理テーブルである。 このテーブルに関してのより詳しい情報は Intel 386 processor handbook を 参照すること。

func が 0 ならば、 modify_ldt() は ldt を ptr が指しているメモリに読み込む。 読み込むバイト数は実際の ldt のサイズか bytecount より小さい方である。

func が 1 ならば、 modify_ldt() は ldt エントリの一つを変更する。 ptruser_desc 構造体を指し、 bytecount はこの構造体の大きさに等しくなければならない。

user_desc 構造体は <asm/ldt.h> で以下のように定義されている:


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;
};

Linux 2.4 以前では、この構造体は modify_ldt_ldt_s という名前であった。  

返り値

成功した場合は、 modify_ldt() は (読み込みの場合は) 実際に読み込んだバイト数、 または (書き込みの場合は) 0 を返す。 失敗した場合は modify_ldt() は -1 を返し、 errno をエラーを示す値に設定する。  

エラー

EFAULT
ptr がアドレス空間の外を指している。
EINVAL
ptr が 0 である、 または func が 1 で bytecountmodify_ldt_ldt_s 構造体のサイズと等しくないか、 func が 1 で新しい ldt エントリが無効な値である。
ENOSYS
func が 0 でも 1 でもない。
 

準拠

このコールは Linux 特有であり、移植を意図したプログラムでは 使用してはいけない。  

注意

glibc はこのシステムコールに対するラッパー関数を提供していない。 syscall(2) を使って呼び出すこと。  

関連項目

vm86(2)


 

Index

名前
書式
説明
返り値
エラー
準拠
注意
関連項目

This document was created by man2html, using the manual pages.
Time: 04:31:53 GMT, November 19, 2007