Add basic stack unwinding functionality
This commit is contained in:
parent
91063e12d2
commit
1cb5c671f7
|
@ -19,6 +19,7 @@ SET(src_files
|
|||
${CMAKE_SOURCE_DIR}/chroma/system/rw.c
|
||||
${CMAKE_SOURCE_DIR}/chroma/system/serial.c
|
||||
${CMAKE_SOURCE_DIR}/chroma/system/pci.c
|
||||
${CMAKE_SOURCE_DIR}/chroma/system/memory/stack.c
|
||||
${CMAKE_SOURCE_DIR}/chroma/system/memory/paging.c
|
||||
${CMAKE_SOURCE_DIR}/chroma/system/memory/abstract_allocator.c
|
||||
${CMAKE_SOURCE_DIR}/chroma/system/memory/physmem.c
|
||||
|
@ -53,5 +54,5 @@ set_property(SOURCE ${src_no_sse} PROPERTY COMPILE_FLAGS -mgeneral-regs-only)
|
|||
add_executable(kernel)
|
||||
|
||||
target_sources(kernel PUBLIC ${src_preamble} PUBLIC ${src_files} PUBLIC ${src_no_sse} PUBLIC ${lib_files} PUBLIC ${CMAKE_SOURCE_DIR}/font.o PUBLIC ${src_epilogue})
|
||||
target_compile_options(kernel PRIVATE -ffreestanding -O2 -Wall -Wextra -Wall -Werror -pedantic -fPIC -fno-exceptions )
|
||||
target_compile_options(kernel PRIVATE -ffreestanding -O0 -Wall -Wextra -Wall -Werror -pedantic -fPIC -fno-exceptions -fno-omit-frame-pointer -mno-red-zone -fno-stack-protector )
|
||||
target_link_options(kernel PRIVATE -T linker.ld -ffreestanding -O2 -nostdlib -nostartfiles -lgcc)
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <kernel/system/io.h>
|
||||
#include <kernel/system/memory.h>
|
||||
#include <kernel/system/pci.h>
|
||||
#include <kernel/system/stack.h>
|
||||
|
||||
//Removed cause "wacky copyrighted stuff"
|
||||
//#include <kernel/system/screen.h>
|
||||
|
|
15
chroma/inc/kernel/system/stack.h
Normal file
15
chroma/inc/kernel/system/stack.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/************************
|
||||
*** Team Kitty, 2020 ***
|
||||
*** Chroma ***
|
||||
***********************/
|
||||
|
||||
typedef struct stackframe {
|
||||
struct stackframe* rbp;
|
||||
size_t rip;
|
||||
} stackframe_t;
|
||||
|
||||
void StackTrace(size_t cycles);
|
29
chroma/system/memory/stack.c
Normal file
29
chroma/system/memory/stack.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include <kernel/chroma.h>
|
||||
/************************
|
||||
*** Team Kitty, 2020 ***
|
||||
*** Chroma ***
|
||||
***********************/
|
||||
|
||||
/*
|
||||
* This file aims to implement stack unwinding
|
||||
* to trace faulty functions.
|
||||
*
|
||||
* I was in the middle of debugging a jump to null
|
||||
* when i started creating this, so there will be a
|
||||
* lot of functionality here left over from that
|
||||
* initial goal, probably...
|
||||
*
|
||||
* //TODO: Rework this to allow unwinding function parameters on call.
|
||||
*/
|
||||
|
||||
void StackTrace(size_t cycles) {
|
||||
struct stackframe* stack;
|
||||
|
||||
__asm__ __volatile__ ("mov %%rbp, %[dest]" : [dest] "=r" (stack) : :);
|
||||
SerialPrintf("[Trace] Beginning stack trace. RBP is currently 0x%p\r\n", stack);
|
||||
for(size_t frame = 0; stack != 0 && frame < cycles; ++frame) {
|
||||
SerialPrintf("[Trace] 0x%p \r\n", stack->rip);
|
||||
stack = stack->rbp;
|
||||
}
|
||||
SerialPrintf("[Trace] Stack trace over.\r\n");
|
||||
}
|
Loading…
Reference in New Issue
Block a user