mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
x86/boot: move some __high_start code and data into init sections
Half of __high_start is strictly for the BSP and will only be run once on boot. To complement 'start_secondary', create 'start_bsp' and move it into the init.text section. The interrupt handler 'ignore_int' is patched into the BSPs IDT, but fully replaced with real handlers early during boot. The BSPs IDT is used by APs until midway through start_secondary, but after the real handlers have been installed. Therefore, 'ignore_int' can move to init.text. Furthermore, its strings can move to init.rodata. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
9c8cd72fca
commit
7e510a7b87
1 file changed
+10
-4
@@ -29,7 +29,11 @@
|
||||
|
||||
test %ebx,%ebx
|
||||
jnz start_secondary
|
||||
jmp start_bsp
|
||||
|
||||
.section .init.text, "ax", @progbits
|
||||
|
||||
start_bsp:
|
||||
/* Initialise IDT with simple error defaults. */
|
||||
leaq ignore_int(%rip),%rcx
|
||||
movl %ecx,%eax
|
||||
@@ -55,10 +59,6 @@
|
||||
ud2 /* Force a panic (invalid opcode). */
|
||||
|
||||
/* This is the default interrupt handler. */
|
||||
int_msg:
|
||||
.asciz "Unknown interrupt (cr2=%016lx)\n"
|
||||
hex_msg:
|
||||
.asciz " %016lx"
|
||||
ignore_int:
|
||||
SAVE_ALL
|
||||
movq %cr2,%rsi
|
||||
@@ -75,6 +75,12 @@ ignore_int:
|
||||
jnz 0b
|
||||
1: jmp 1b
|
||||
|
||||
.section .init.rodata, "a", @progbits
|
||||
|
||||
int_msg:
|
||||
.asciz "Unknown interrupt (cr2=%016lx)\n"
|
||||
hex_msg:
|
||||
.asciz " %016lx"
|
||||
|
||||
/*** DESCRIPTOR TABLES ***/
|
||||
|
||||
|
||||