Created the framework for using different loadable panic handlers, loaded by the bootloader. Initial panic handler is panic.serial, which contains its own serial driver and stacktrace code. Other related changes: - Asserts are now based on the NMI handler - panic handlers get installed as the NMI interrupt handler - Changed symbol table generation: now use nm's own demangling and sorting, and include symbol size in the table - Move the linker script argument out of the kernel target, and into the kernel's specific module, so that other programs (ie, panic handlers) can use the kernel target as well - Some asm changes to boot.s to help GDB see stack frames - but this might not actually be all that useful - Renamed user_rsp to just rsp in cpu_state - everything in there is describing the 'user' state
19 lines
247 B
ArmAsm
19 lines
247 B
ArmAsm
%include "push_all.inc"
|
|
|
|
section .text
|
|
|
|
extern panic_handler
|
|
|
|
global _panic_entry
|
|
_panic_entry:
|
|
cli
|
|
push 0 ; NMI doesn't push an error code
|
|
push 2 ; NMI is int 2
|
|
push_all
|
|
mov rdx, rsp
|
|
|
|
mov rax, [rsp + REGS.rip]
|
|
push rax
|
|
|
|
jmp panic_handler
|