refactor(gdt): setTSS64 改用 gdt_entry64 整体写入 TSS 描述符
以 gdt_entry64*(&gdt[num]) 复用同一地址写入 16 字节,替代原先手写拆分 gdt[num]/gdt[num+1] 的方式;语义与字节布局均不变。
This commit is contained in:
1 parent
1c8d2e2c1d
commit
52728bc8da
1 file changed
+11
-12
+11
-12
@@ -128,15 +128,14 @@ def setGate(num: int, base: uint64, limit: uint32, access: uint8, gran: uint8):
|
||||
|
||||
def setTSS64(num: int, base: uint64, limit: uint32):
|
||||
global gdt
|
||||
gdt[num].limit_low = limit & 0xFFFF
|
||||
gdt[num].base_low = base & 0xFFFF
|
||||
gdt[num].base_middle = (base >> 16) & 0xFF
|
||||
gdt[num].access = 0x89
|
||||
gdt[num].granularity = (limit >> 16) & 0x0F
|
||||
gdt[num].base_high = (base >> 24) & 0xFF
|
||||
gdt[num + 1].limit_low = (base >> 32) & 0xFFFF
|
||||
gdt[num + 1].base_low = (base >> 48) & 0xFFFF
|
||||
gdt[num + 1].base_middle = 0
|
||||
gdt[num + 1].access = 0
|
||||
gdt[num + 1].granularity = 0
|
||||
gdt[num + 1].base_high = 0
|
||||
# 64 位 TSS 描述符占 16 字节(GDT 两项),复用同一地址按 gdt_entry64 整体写入:
|
||||
# 前 8 字节为常规描述符字段,后 8 字节为 base[63:32] + 保留 0
|
||||
e: gdt_entry64* = gdt_entry64*(&gdt[num])
|
||||
e.limit_low = limit & 0xFFFF
|
||||
e.base_low = base & 0xFFFF
|
||||
e.base_middle = (base >> 16) & 0xFF
|
||||
e.access = 0x89
|
||||
e.granularity = (limit >> 16) & 0x0F
|
||||
e.base_high = (base >> 24) & 0xFF
|
||||
e.base_upper = uint32(base >> 32)
|
||||
e.reserved = 0
|
||||
Reference in new issue
Block a user