|
|
| version 1.2, 2004/01/13 16:37:42 | version 1.3, 2004/02/05 16:43:44 |
|---|---|
| Line 34 | Line 34 |
| extern "C" { | extern "C" { |
| #endif | #endif |
| typedef union { | |
| struct { | |
| WORD backlink; /* 元のタスクセレクタ値 */ | |
| struct { | |
| WORD sp; /* スタックポインタ */ | |
| WORD ss; /* スタックセグメント */ | |
| } stack[3]; /* 特権レベル 0-2 */ | |
| WORD ip; /* IP */ | |
| WORD flags; /* FLAGS */ | |
| WORD regs[8]; /* レジスタ */ | |
| WORD sreg[4]; /* セグメントレジスタ */ | |
| WORD ldt; /* タスク毎の LDT セレクタ値 */ | |
| } tss16; | |
| struct { | |
| REG32 backlink; /* REG16: 元のタスクセレクタ値 */ | |
| struct { | |
| REG32 sp; /* REG32: スタックポインタ */ | |
| REG32 ss; /* REG16: スタックセグメント */ | |
| } stack[3]; /* 特権レベル 0-2 */ | |
| REG32 cr3; /* REG32: タスク毎の CR3 */ | |
| REG32 ip; /* REG32: EIP */ | |
| REG32 flags; /* REG32: EFLAGS */ | |
| REG32 regs[8]; /* REG32: レジスタ */ | |
| REG32 sreg[6]; /* REG16: セグメントレジスタ */ | |
| REG32 ldt; /* REG16: タスク毎の LDT セレクタ値 */ | |
| WORD t; /* 最下位ビットが1のとき、タスク切替時 | |
| に割り込み番号1のフォールトを発生 */ | |
| WORD iobase; /* TSS 先頭から I/O 許可テーブルマップ | |
| までのバイト数 */ | |
| } tss32; | |
| } TASK_STATE_T; | |
| void load_tr(WORD selector); | void load_tr(WORD selector); |
| void get_stack_from_tss(DWORD pl, WORD* new_ss, DWORD* new_esp); | void get_stack_from_tss(DWORD pl, WORD* new_ss, DWORD* new_esp); |
| WORD get_link_selector_from_tss(); | WORD get_link_selector_from_tss(); |