acadia/zion/common/stack_unwind.cpp

23 lines
530 B
C++

#include "common/stack_unwind.h"
#include "debug/debug.h"
namespace {
bool IsValid(uint64_t* rbp) { return rbp && *rbp != kStackBaseSentinel; }
} // namespace
void StackUnwind(uint64_t rbp) {
uint64_t depth_limit = 10;
dbgln("-- Begin Stack --");
uint64_t* rbp_ptr = reinterpret_cast<uint64_t*>(rbp);
while (IsValid(rbp_ptr) && depth_limit > 0) {
uint64_t rip = *(rbp_ptr + 1);
dbgln("RIP: {x}", rip);
rbp_ptr = reinterpret_cast<uint64_t*>(*rbp_ptr);
depth_limit--;
}
dbgln("-- End Stack --");
}