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/rw.c
|
||||||
${CMAKE_SOURCE_DIR}/chroma/system/serial.c
|
${CMAKE_SOURCE_DIR}/chroma/system/serial.c
|
||||||
${CMAKE_SOURCE_DIR}/chroma/system/pci.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/paging.c
|
||||||
${CMAKE_SOURCE_DIR}/chroma/system/memory/abstract_allocator.c
|
${CMAKE_SOURCE_DIR}/chroma/system/memory/abstract_allocator.c
|
||||||
${CMAKE_SOURCE_DIR}/chroma/system/memory/physmem.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)
|
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_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)
|
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/io.h>
|
||||||
#include <kernel/system/memory.h>
|
#include <kernel/system/memory.h>
|
||||||
#include <kernel/system/pci.h>
|
#include <kernel/system/pci.h>
|
||||||
|
#include <kernel/system/stack.h>
|
||||||
|
|
||||||
//Removed cause "wacky copyrighted stuff"
|
//Removed cause "wacky copyrighted stuff"
|
||||||
//#include <kernel/system/screen.h>
|
//#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