I386_GET_LDT(2)

名称
i386_get_ldt, i386_set_ldt - i386 プロセスごとのローカル記述子テーブルエントリを管理する

ライブラリ
libc

書式
<machine/segments.h> <machine/sysarch.h> int i386_get_ldt(int start_sel, union descriptor *descs, int num_sels) int i386_set_ldt(int start_sel, union descriptor *descs, int num_sels)

解説
i386_get_ldt() システムコールはプロセスの LDT の中にある i386 記述子のリストを返します。 i386_set_ldt() システムコールは現在のプロセスのための i386 記述子のリストを、 そのプロセスの LDT に設定します。 両方のルーチンは、開始するセレクタ番号の start_sel と、設定する記述子の入った、または記述子が返されるメモリの配列の descs および設定または返されるエントリ数の num_sels を受け取ります。

引数 descs は、 <i386/segments.h> で定義されている segment_descriptor または gate_descriptor であることができます。 これらの構成要素は、アーキテクチャに対応して ばらばらになったビットフィールドとして定義されているので、 それらを組み立てる際には注意を払う必要があります。

start_sel が LDT_AUTO_ALLOC で、 num_sels が 1 で、 descs によって指される記述子が正当である場合には、 i386_set_ldt() は記述子を割り当てて、そのセレクタ番号を返します。

num_descs が 1 で、 start_sels が有効で、 descs が NULL の場合には、 i386_set_ldt() はその記述子を開放します (後でまた再割り当てできるようにします)。

num_descs が 0 で、 start_sels が 0 で、 descs が NULL の場合には特別な場合として、 i386_set_ldt() は全ての記述子を開放します。

戻り値
正常に完了した場合、 i386_get_ldt() は現在 LDT 内にある記述子の数を返します。 i386_set_ldt() システムコールは最初のセレクタセットを返します。 記述子がカーネルによって割り当てられた場合には、その数が返されます。 そうでない場合は -1 が返され、エラーを示すためにグローバル変数 errno が設定されます。

エラー
i386_get_ldt() と i386_set_ldt() システムコールは次の場合に失敗します:

[EINVAL]
    start_sel または num_sels について不適切な値が使用されました。

[EACCES]
    呼び出し側が保護機構を欺くかまたは障害を起こす記述子を使おうとしました。

関連項目
i386 Microprocessor Programmer's Reference Manual, Intel

警告
これを使用してプロセスをまったくダメにすることができます。