mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 00:21:17 +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
3 changed files with 33 additions and 35 deletions
|
@ -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)
|
||||||
# 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"
|
||||||
|
|
|
@ -1,42 +1,7 @@
|
||||||
.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
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue