From 972a35bdefc5d1f8d27cd43edb802a81bd9cc129 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Thu, 15 Jul 2021 23:34:35 -0700 Subject: [PATCH] [kernel] Add get_grandcaller debug function This should probably be replaced with a function taking the number of steps back, but this is quick and useful. --- src/kernel/debug.h | 1 + src/kernel/debug.s | 7 +++++++ 2 files changed, 8 insertions(+) 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