From 37235110037eed93c1b646995c7fe96d4e31a9a4 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sat, 28 Jun 2014 23:28:09 +0300 Subject: Adjust use_prev_instr for syscall and frame-chain frames. Mark frames which are unwound with the frame-chain walker or syscall frame code, as non-interrupted. The return PC in the frame points to the instruction after the call. --- src/x86/Gos-freebsd.c | 1 + src/x86/Gstep.c | 1 + 2 files changed, 2 insertions(+) (limited to 'src/x86') diff --git a/src/x86/Gos-freebsd.c b/src/x86/Gos-freebsd.c index aafdfc9c..284148c2 100644 --- a/src/x86/Gos-freebsd.c +++ b/src/x86/Gos-freebsd.c @@ -140,6 +140,7 @@ unw_handle_signal_frame (unw_cursor_t *cursor) c->dwarf.loc[EIP] = DWARF_LOC (c->dwarf.cfa, 0); c->dwarf.loc[EAX] = DWARF_NULL_LOC; c->dwarf.cfa += 4; + c->dwarf.use_prev_instr = 1; } else { Debug (8, "Gstep: not handling frame format %d\n", c->sigcontext_format); abort(); diff --git a/src/x86/Gstep.c b/src/x86/Gstep.c index 0965db2f..fb1d6a26 100644 --- a/src/x86/Gstep.c +++ b/src/x86/Gstep.c @@ -88,6 +88,7 @@ unw_step (unw_cursor_t *cursor) c->dwarf.loc[EBP] = ebp_loc; c->dwarf.loc[EIP] = eip_loc; + c->dwarf.use_prev_instr = 1; } c->dwarf.ret_addr_column = EIP; -- cgit v1.2.1