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
29 lines
689 B
C
29 lines
689 B
C
#pragma once
|
|
/// \file debug.h
|
|
/// Debugging utilities
|
|
|
|
#include <stdint.h>
|
|
|
|
struct cpu_state;
|
|
|
|
extern "C" {
|
|
uintptr_t get_rsp();
|
|
uintptr_t get_rip();
|
|
uintptr_t get_caller();
|
|
uintptr_t get_grandcaller();
|
|
uintptr_t get_frame(int frame);
|
|
uintptr_t get_gsbase();
|
|
void _halt();
|
|
}
|
|
|
|
extern size_t __counter_syscall_enter;
|
|
extern size_t __counter_syscall_sysret;
|
|
|
|
void print_regs(const cpu_state ®s);
|
|
void print_stack(const cpu_state ®s);
|
|
|
|
#define print_regL(name, value) cons->printf(" %s: %016lx", name, (value));
|
|
#define print_regM(name, value) cons->printf(" %s: %016lx", name, (value));
|
|
#define print_regR(name, value) cons->printf(" %s: %016lx\n", name, (value));
|
|
|