summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--purgatory/arch/x86_64/entry64.S10
1 files changed, 8 insertions, 2 deletions
diff --git a/purgatory/arch/x86_64/entry64.S b/purgatory/arch/x86_64/entry64.S
index 1ed6786..666023c 100644
--- a/purgatory/arch/x86_64/entry64.S
+++ b/purgatory/arch/x86_64/entry64.S
@@ -37,7 +37,11 @@ entry64:
movl %eax, %fs
movl %eax, %gs
- /* In 64bit mode the code segment is meaningless */
+ movq $stack_init, %rsp
+ pushq $0x10 /* CS */
+ pushq $new_cs_exit
+ lretq
+new_cs_exit:
/* Load the registers */
movq rax(%rip), %rax
@@ -93,8 +97,10 @@ gdt: /* 0x00 unusable segment
.word 0, 0, 0
/* 0x10 4GB flat code segment */
- .word 0xFFFF, 0x0000, 0x9A00, 0x00CF
+ .word 0xFFFF, 0x0000, 0x9A00, 0x00AF
/* 0x18 4GB flat data segment */
.word 0xFFFF, 0x0000, 0x9200, 0x00CF
gdt_end:
+stack: .quad 0, 0
+stack_init: