diff --git a/src/CodeGenerator.cpp b/src/CodeGenerator.cpp index c1e2dc6..3fd43e1 100644 --- a/src/CodeGenerator.cpp +++ b/src/CodeGenerator.cpp @@ -3,6 +3,7 @@ #include "settings.hpp" #include +#include using namespace std; @@ -161,7 +162,7 @@ static const char* ctx_of_dw_name(SimpleDwarf::MachineRegister reg) { void CodeGenerator::gen_of_reg(const SimpleDwarf::DwRegister& reg) { switch(reg.type) { case SimpleDwarf::DwRegister::REG_UNDEFINED: - os << "0"; // FIXME do better? + os << std::numeric_limits::max() << "ull"; break; case SimpleDwarf::DwRegister::REG_REGISTER: os << ctx_of_dw_name(reg.reg) diff --git a/stack_walker/stack_walker.cpp b/stack_walker/stack_walker.cpp index 0d8f3ef..f8feece 100644 --- a/stack_walker/stack_walker.cpp +++ b/stack_walker/stack_walker.cpp @@ -224,6 +224,9 @@ bool unwind_context(unwind_context_t& ctx) { uintptr_t tr_pc = ctx.rip - mmap_entry->beg; ctx = fde_func(ctx, tr_pc); + + if(ctx.rbp == 0 || ctx.rip + 1 == 0) + return false; return true; }