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>
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
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
jnz 0b
1: jmp 1b
+ .section .init.rodata, "a", @progbits
+
+int_msg:
+ .asciz "Unknown interrupt (cr2=%016lx)\n"
+hex_msg:
+ .asciz " %016lx"
/*** DESCRIPTOR TABLES ***/