---
src/dwarf/Gparser.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/dwarf/Gparser.c b/src/dwarf/Gparser.c
index ccb710a..22dc01e 100644
--- a/src/dwarf/Gparser.c
+++ b/src/dwarf/Gparser.c
@@ -750,13 +750,20 @@ apply_reg_state (struct dwarf_cursor *c, struct
dwarf_reg_state *rs)
break;
}
}
+
c->cfa = cfa;
- ret = dwarf_get (c, c->loc[c->ret_addr_column], &ip);
- if (ret < 0)
- return ret;
- c->ip = ip;
+ /* DWARF spec says undefined return address location means end of stack. */
+ if (DWARF_IS_NULL_LOC (c->loc[c->ret_addr_column]))
+ c->ip = 0;
+ else
+ {
+ ret = dwarf_get (c, c->loc[c->ret_addr_column], &ip);
+ if (ret < 0)
+ return ret;
+ c->ip = ip;
+ }
+
/* XXX: check for ip to be code_aligned */
-
if (c->ip == prev_ip && c->cfa == prev_cfa)
{
Dprintf ("%s: ip and cfa unchanged; stopping here (ip=0x%lx)\n",
_______________________________________________
Libunwind-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/libunwind-devel