mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-26 11:28:28 +00:00
x86, realmode: Move not-common bits out of trampoline_common.S
Move the bits that aren't actually common out of trampoline_common.S and into the arch-specific files. Furthermore, make sure the page directory is first in the .bss section for trampoline_64.S in order to not waste an entire page of memory. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Cc: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
This commit is contained in:
parent
796038799a
commit
51edbe6a2f
@ -63,4 +63,12 @@ ENTRY(trampoline_start)
|
||||
ENTRY(startup_32) # note: also used from wakeup_asm.S
|
||||
jmp *%eax
|
||||
|
||||
.bss
|
||||
.balign 8
|
||||
GLOBAL(trampoline_header)
|
||||
tr_start: .space 4
|
||||
tr_gdt_pad: .space 2
|
||||
tr_gdt: .space 6
|
||||
END(trampoline_header)
|
||||
|
||||
#include "trampoline_common.S"
|
||||
|
@ -125,4 +125,29 @@ ENTRY(startup_64)
|
||||
# Now jump into the kernel using virtual addresses
|
||||
jmpq *tr_start(%rip)
|
||||
|
||||
.section ".rodata","a"
|
||||
# Duplicate the global descriptor table
|
||||
# so the kernel can live anywhere
|
||||
.balign 16
|
||||
.globl tr_gdt
|
||||
tr_gdt:
|
||||
.short tr_gdt_end - tr_gdt - 1 # gdt limit
|
||||
.long pa_tr_gdt
|
||||
.short 0
|
||||
.quad 0x00cf9b000000ffff # __KERNEL32_CS
|
||||
.quad 0x00af9b000000ffff # __KERNEL_CS
|
||||
.quad 0x00cf93000000ffff # __KERNEL_DS
|
||||
tr_gdt_end:
|
||||
|
||||
.bss
|
||||
.balign PAGE_SIZE
|
||||
GLOBAL(trampoline_pgd) .space PAGE_SIZE
|
||||
|
||||
.balign 8
|
||||
GLOBAL(trampoline_header)
|
||||
tr_start: .space 8
|
||||
GLOBAL(tr_cr4) .space 4
|
||||
GLOBAL(tr_efer) .space 8
|
||||
END(trampoline_header)
|
||||
|
||||
#include "trampoline_common.S"
|
||||
|
@ -1,42 +1,7 @@
|
||||
.section ".rodata","a"
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
# Duplicate the global descriptor table
|
||||
# so the kernel can live anywhere
|
||||
.balign 16
|
||||
.globl tr_gdt
|
||||
tr_gdt:
|
||||
.short tr_gdt_end - tr_gdt - 1 # gdt limit
|
||||
.long pa_tr_gdt
|
||||
.short 0
|
||||
.quad 0x00cf9b000000ffff # __KERNEL32_CS
|
||||
.quad 0x00af9b000000ffff # __KERNEL_CS
|
||||
.quad 0x00cf93000000ffff # __KERNEL_DS
|
||||
tr_gdt_end:
|
||||
#endif
|
||||
|
||||
.balign 4
|
||||
tr_idt: .fill 1, 6, 0
|
||||
|
||||
.bss
|
||||
|
||||
.balign 4
|
||||
GLOBAL(trampoline_status) .space 4
|
||||
|
||||
.balign 8
|
||||
GLOBAL(trampoline_header)
|
||||
#ifdef CONFIG_X86_32
|
||||
tr_start: .space 4
|
||||
tr_gdt_pad: .space 2
|
||||
tr_gdt: .space 6
|
||||
#else
|
||||
tr_start: .space 8
|
||||
GLOBAL(tr_cr4) .space 4
|
||||
GLOBAL(tr_efer) .space 8
|
||||
#endif
|
||||
END(trampoline_header)
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
.balign PAGE_SIZE
|
||||
GLOBAL(trampoline_pgd) .space PAGE_SIZE
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user