summaryrefslogtreecommitdiff
path: root/src/x86
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@freebsd.org>2014-06-28 23:28:09 +0300
committerArun Sharma <arun@sharma-home.net>2014-08-15 13:01:36 -0700
commit37235110037eed93c1b646995c7fe96d4e31a9a4 (patch)
treec18946cd4913a9a7a9e1d6a5a43d2d7dfa5b6537 /src/x86
parent85946d97660a79d9943d11edfe616ae68cf9d261 (diff)
downloadlibunwind-37235110037eed93c1b646995c7fe96d4e31a9a4.tar.gz
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.
Diffstat (limited to 'src/x86')
-rw-r--r--src/x86/Gos-freebsd.c1
-rw-r--r--src/x86/Gstep.c1
2 files changed, 2 insertions, 0 deletions
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;