スポンサーリンク

I386_GET_LDT(2) FreeBSD システムコールマニュアル I386_GET_LDT(2)

名称

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

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <machine/segments.h>
#include <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_selLDT_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

警告

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

FreeBSD 10.0 September 20, 1993 FreeBSD 10.0

スポンサーリンク