Fix returning the name of the function containing the frame PC,
for the non-interrupted frames.  The symbol lookup code should
take use_prev_instr value into account, otherwise it could return
the name of the function adjacent to the caller.
---
 src/mi/Gget_proc_name.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/mi/Gget_proc_name.c b/src/mi/Gget_proc_name.c
index 7251c59..bc3d23d 100644
--- a/src/mi/Gget_proc_name.c
+++ b/src/mi/Gget_proc_name.c
@@ -100,7 +100,15 @@ unw_get_proc_name (unw_cursor_t *cursor, char *buf, size_t buf_len,
 		   unw_word_t *offp)
 {
   struct cursor *c = (struct cursor *) cursor;
-
-  return get_proc_name (tdep_get_as (c), tdep_get_ip (c), buf, buf_len, offp,
-			tdep_get_as_arg (c));
+  unw_word_t ip;
+  int error;
+
+  ip = tdep_get_ip (c);
+  if (c->dwarf.use_prev_instr)
+    --ip;
+  error = get_proc_name (tdep_get_as (c), ip, buf, buf_len, offp,
+			 tdep_get_as_arg (c));
+  if (c->dwarf.use_prev_instr && offp != NULL && error == 0)
+    *offp += 1;
+  return error;
 }
_______________________________________________
Libunwind-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/libunwind-devel

Reply via email to