diff options
Diffstat (limited to 'arch/x86/realmode/rm/trampoline_64.S')
-rw-r--r-- | arch/x86/realmode/rm/trampoline_64.S | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/x86/realmode/rm/trampoline_64.S b/arch/x86/realmode/rm/trampoline_64.S index 66e26f088288..1b9e1bc1ac5e 100644 --- a/arch/x86/realmode/rm/trampoline_64.S +++ b/arch/x86/realmode/rm/trampoline_64.S | |||
@@ -125,4 +125,29 @@ ENTRY(startup_64) | |||
125 | # Now jump into the kernel using virtual addresses | 125 | # Now jump into the kernel using virtual addresses |
126 | jmpq *tr_start(%rip) | 126 | jmpq *tr_start(%rip) |
127 | 127 | ||
128 | .section ".rodata","a" | ||
129 | # Duplicate the global descriptor table | ||
130 | # so the kernel can live anywhere | ||
131 | .balign 16 | ||
132 | .globl tr_gdt | ||
133 | tr_gdt: | ||
134 | .short tr_gdt_end - tr_gdt - 1 # gdt limit | ||
135 | .long pa_tr_gdt | ||
136 | .short 0 | ||
137 | .quad 0x00cf9b000000ffff # __KERNEL32_CS | ||
138 | .quad 0x00af9b000000ffff # __KERNEL_CS | ||
139 | .quad 0x00cf93000000ffff # __KERNEL_DS | ||
140 | tr_gdt_end: | ||
141 | |||
142 | .bss | ||
143 | .balign PAGE_SIZE | ||
144 | GLOBAL(trampoline_pgd) .space PAGE_SIZE | ||
145 | |||
146 | .balign 8 | ||
147 | GLOBAL(trampoline_header) | ||
148 | tr_start: .space 8 | ||
149 | GLOBAL(tr_cr4) .space 4 | ||
150 | GLOBAL(tr_efer) .space 8 | ||
151 | END(trampoline_header) | ||
152 | |||
128 | #include "trampoline_common.S" | 153 | #include "trampoline_common.S" |