diff --git a/src/kernel/debug.h b/src/kernel/debug.h index 7bcdc82..58e62ad 100644 --- a/src/kernel/debug.h +++ b/src/kernel/debug.h @@ -10,6 +10,7 @@ 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(); diff --git a/src/kernel/debug.s b/src/kernel/debug.s index 421695c..f86130b 100644 --- a/src/kernel/debug.s +++ b/src/kernel/debug.s @@ -14,6 +14,13 @@ get_caller: mov rax, [rbp+8] ret +global get_grandcaller +get_grandcaller: + ; No prelude - don't touch rsp or rbp + mov rax, [rbp] + mov rax, [rax+8] + ret + global get_gsbase get_gsbase: rdgsbase rax