Fix frame pointer calculation for symbol frames under libunwind, #123

This commit is contained in:
Jeremy 2024-05-19 16:36:07 -05:00
parent b2fe396d70
commit 4884c4e99b
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4

View File

@ -57,9 +57,16 @@ namespace detail {
if(skip) {
skip--;
} else {
// pc is the instruction after the `call`, adjust back to the previous instruction
// just a cast, signal safe
buffer[i] = to_frame_ptr(pc) - 1;
// thread and signal-safe
if(unw_is_signal_frame(&cursor)) {
// pc is the instruction that caused the signal
// just a cast, thread and signal safe
buffer[i] = to_frame_ptr(pc);
} else {
// pc is the instruction after the `call`, adjust back to the previous instruction
// just a cast, thread and signal safe
buffer[i] = to_frame_ptr(pc) - 1;
}
i++;
}
// thread and signal-safe as long as the cursor is in the local address space, which it is