提交 999c53be 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

#if 0 partially complete syscall/sysret code.

上级 0a6a7f01
...@@ -179,7 +179,6 @@ initseg(void) ...@@ -179,7 +179,6 @@ initseg(void)
extern void sysentry(void); extern void sysentry(void);
volatile struct desctr dtr; volatile struct desctr dtr;
struct cpu *c; struct cpu *c;
u64 star;
dtr.limit = sizeof(idt) - 1; dtr.limit = sizeof(idt) - 1;
dtr.base = (u64)idt; dtr.base = (u64)idt;
...@@ -193,12 +192,14 @@ initseg(void) ...@@ -193,12 +192,14 @@ initseg(void)
dtr.base = (u64)c->gdt; dtr.base = (u64)c->gdt;
lgdt((void *)&dtr.limit); lgdt((void *)&dtr.limit);
#if 0
// When executing a syscall instruction the CPU sets the SS selector // When executing a syscall instruction the CPU sets the SS selector
// to (star >> 32) + 8 and the CS selector to (star >> 32). // to (star >> 32) + 8 and the CS selector to (star >> 32).
// When executing a sysret instruction the CPU sets the SS selector // When executing a sysret instruction the CPU sets the SS selector
// to (star >> 48) + 8 and the CS selector to (star >> 48) + 16. // to (star >> 48) + 8 and the CS selector to (star >> 48) + 16.
star = ((((u64)UCSEG|0x3) - 16)<<48)|((u64)KCSEG<<32); u64 star = ((((u64)UCSEG|0x3) - 16)<<48)|((u64)KCSEG<<32);
writemsr(MSR_STAR, star); writemsr(MSR_STAR, star);
writemsr(MSR_LSTAR, (u64)&sysentry); writemsr(MSR_LSTAR, (u64)&sysentry);
writemsr(MSR_SFMASK, FL_TF); writemsr(MSR_SFMASK, FL_TF);
#endif
} }
...@@ -18,10 +18,12 @@ ...@@ -18,10 +18,12 @@
#define TRAPCODE(x) _TRAP(x, EC) #define TRAPCODE(x) _TRAP(x, EC)
.code64 .code64
#if 0
.globl sysentry .globl sysentry
.align 8 .align 8
sysentry: sysentry:
jmp sysentry jmp sysentry
#endif
trapcommon: trapcommon:
pushq %rdi pushq %rdi
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论