MODIFY_LDT

Section: Linux Programmer's Manual (2)
Updated: 2012-07-13
Index JM Home Page roff page
 

名前

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

書式

#include <sys/types.h>

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

: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。  

説明

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)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。


 

Index

名前
書式
説明
返り値
エラー
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 03:33:25 GMT, March 14, 2018