1
2
3
4
5
6
7
8
9
10 #include <asm/purgatory.h>
11
12 .text
13 .globl purgatory_start
14 .balign 16
15 purgatory_start:
16 .code64
17
18
19 lgdt gdt(%rip)
20
21
22 movl $0x18, %eax
23 movl %eax, %ds
24 movl %eax, %es
25 movl %eax, %ss
26 movl %eax, %fs
27 movl %eax, %gs
28
29
30 leaq lstack_end(%rip), %rsp
31
32
33 call purgatory
34 jmp entry64
35
36 .section ".rodata"
37 .balign 16
38 gdt:
39
40
41
42 .word gdt_end - gdt - 1
43 .quad gdt
44 .word 0, 0, 0
45
46
47 .word 0xFFFF, 0x0000, 0x9A00, 0x00AF
48
49
50 .word 0xFFFF, 0x0000, 0x9200, 0x00CF
51 gdt_end:
52
53 .bss
54 .balign 4096
55 lstack:
56 .skip 4096
57 lstack_end: