提交 51edbe6a 编写于 作者: H H. Peter Anvin

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: NH. Peter Anvin <hpa@linux.intel.com>
Cc: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
上级 79603879
...@@ -63,4 +63,12 @@ ENTRY(trampoline_start) ...@@ -63,4 +63,12 @@ ENTRY(trampoline_start)
ENTRY(startup_32) # note: also used from wakeup_asm.S ENTRY(startup_32) # note: also used from wakeup_asm.S
jmp *%eax 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" #include "trampoline_common.S"
...@@ -125,4 +125,29 @@ ENTRY(startup_64) ...@@ -125,4 +125,29 @@ ENTRY(startup_64)
# Now jump into the kernel using virtual addresses # Now jump into the kernel using virtual addresses
jmpq *tr_start(%rip) 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" #include "trampoline_common.S"
.section ".rodata","a" .section ".rodata","a"
#ifdef CONFIG_X86_64
# Duplicate the global descriptor table
# so the kernel can live anywhere
.balign 16 .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 tr_idt: .fill 1, 6, 0
.bss .bss
.balign 4 .balign 4
GLOBAL(trampoline_status) .space 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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册