Clear registers on handoff
This commit is contained in:
parent
6eb04c8c40
commit
02e846f1ab
1 changed files with 20 additions and 1 deletions
|
@ -87,7 +87,26 @@ void aurix_arch_handoff(void *kernel_entry, pagetable *pm, void *stack, uint32_t
|
||||||
"movq %[pml4], %%cr3\n"
|
"movq %[pml4], %%cr3\n"
|
||||||
"movq %[stack], %%rsp\n"
|
"movq %[stack], %%rsp\n"
|
||||||
"movq %[params], %%rdi\n"
|
"movq %[params], %%rdi\n"
|
||||||
"callq *%[entry]\n"
|
"movq %[entry], %%rsi\n"
|
||||||
|
|
||||||
|
// rsi = kernel entry point addr
|
||||||
|
// rdi = kernel parameters
|
||||||
|
"xor %%rax, %%rax\n"
|
||||||
|
"xor %%rbx, %%rbx\n"
|
||||||
|
"xor %%rcx, %%rcx\n"
|
||||||
|
"xor %%rdx, %%rdx\n"
|
||||||
|
//"xor %%rdi, %%rdi\n"
|
||||||
|
//"xor %%rsi, %%rsi\n"
|
||||||
|
"xor %%r8, %%r8\n"
|
||||||
|
"xor %%r9, %%r9\n"
|
||||||
|
"xor %%r10, %%r10\n"
|
||||||
|
"xor %%r11, %%r11\n"
|
||||||
|
"xor %%r12, %%r12\n"
|
||||||
|
"xor %%r13, %%r13\n"
|
||||||
|
"xor %%r14, %%r14\n"
|
||||||
|
"xor %%r15, %%r15\n"
|
||||||
|
|
||||||
|
"callq *%%rsi\n"
|
||||||
:: [gdtr]"g"(gdtr), [tss]"r"((uint16_t)__builtin_offsetof(struct gdt, tss)),
|
:: [gdtr]"g"(gdtr), [tss]"r"((uint16_t)__builtin_offsetof(struct gdt, tss)),
|
||||||
[idt]"g"(idtr),
|
[idt]"g"(idtr),
|
||||||
[pml4]"r"(pm), [stack]"r"(stack + stack_size),
|
[pml4]"r"(pm), [stack]"r"(stack + stack_size),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue