PatchworkOS
Loading...
Searching...
No Matches
panic.c File Reference
#include <kernel/log/panic.h>
#include <kernel/cpu/cpu.h>
#include <kernel/cpu/interrupt.h>
#include <kernel/cpu/port.h>
#include <kernel/cpu/regs.h>
#include <kernel/cpu/smp.h>
#include <kernel/log/log.h>
#include <kernel/mem/pmm.h>
#include <kernel/mem/vmm.h>
#include <kernel/sched/thread.h>
#include <kernel/sched/timer.h>
#include <kernel/version.h>
#include <boot/boot_info.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
#include <sys/math.h>
#include <sys/proc.h>

Go to the source code of this file.

Functions

static bool panic_is_valid_stack_frame (void *ptr)
 
static bool panic_is_valid_address (uintptr_t addr)
 
static const char * panic_resolve_symbol (uintptr_t addr, uintptr_t *offset)
 
static const char * panic_get_exception_name (uint64_t vector)
 
static void panic_registers (const interrupt_frame_t *frame)
 
static void panic_print_stack_dump (const interrupt_frame_t *frame)
 
static void panic_print_trace_address (uintptr_t addr)
 
static void panic_direct_stack_trace (void)
 
void panic_stack_trace (const interrupt_frame_t *frame)
 Print a stack trace from a interrupt frame.
 
void panic_symbols_init (const boot_kernel_t *kernel)
 Initialize panic symbols from the bootloader-provided kernel information.
 
void panic (const interrupt_frame_t *frame, const char *format,...)
 Panic the kernel, printing a message and halting.
 

Variables

uint64_t _kernelStart
 
uint64_t _kernelEnd
 
static list_t symbols = LIST_CREATE(symbols)
 
static bool symbolsLoaded = false
 
static char panicBuffer [LOG_MAX_BUFFER] = {0}
 
static atomic_uint32_t panicCpudId = ATOMIC_VAR_INIT(PANIC_NO_CPU_ID)
 

Function Documentation

◆ panic_direct_stack_trace()

static void panic_direct_stack_trace ( void  )
static

Definition at line 246 of file panic.c.

References LOG_PANIC, NULL, panic_is_valid_stack_frame(), PANIC_MAX_STACK_FRAMES, and panic_print_trace_address().

Referenced by panic().

◆ panic_get_exception_name()

static const char * panic_get_exception_name ( uint64_t  vector)
static

Definition at line 113 of file panic.c.

Referenced by panic().

◆ panic_is_valid_address()

static bool panic_is_valid_address ( uintptr_t  addr)
static

◆ panic_is_valid_stack_frame()

static bool panic_is_valid_stack_frame ( void *  ptr)
static

◆ panic_print_stack_dump()

static void panic_print_stack_dump ( const interrupt_frame_t frame)
static

Definition at line 168 of file panic.c.

References LOG_PANIC, panic_is_valid_address(), and interrupt_frame_t::rsp.

Referenced by panic().

◆ panic_print_trace_address()

static void panic_print_trace_address ( uintptr_t  addr)
static

◆ panic_registers()

◆ panic_resolve_symbol()

static const char * panic_resolve_symbol ( uintptr_t  addr,
uintptr_t offset 
)
static

Variable Documentation

◆ _kernelEnd

uint64_t _kernelEnd
extern

Referenced by panic().

◆ _kernelStart

uint64_t _kernelStart
extern

Referenced by panic().

◆ panicBuffer

char panicBuffer[LOG_MAX_BUFFER] = {0}
static

Definition at line 31 of file panic.c.

Referenced by panic().

◆ panicCpudId

atomic_uint32_t panicCpudId = ATOMIC_VAR_INIT(PANIC_NO_CPU_ID)
static

Definition at line 33 of file panic.c.

Referenced by panic().

◆ symbols

list_t symbols = LIST_CREATE(symbols)
static

Definition at line 29 of file panic.c.

Referenced by panic_resolve_symbol(), and panic_symbols_init().

◆ symbolsLoaded

bool symbolsLoaded = false
static

Definition at line 30 of file panic.c.

Referenced by panic_resolve_symbol(), and panic_symbols_init().