summaryrefslogtreecommitdiff
path: root/gdb/dwarf2-frame.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2005-04-08 12:10:21 +0000
committerDaniel Jacobowitz <dan@debian.org>2005-04-08 12:10:21 +0000
commit0e313f95c7a08384ab0275cd6f3c55f9a58142a1 (patch)
treeb4a4a36b6d3f4aeec362d99ccd841e4a6a83959b /gdb/dwarf2-frame.c
parenta518b0f7174de7aa19bcaa745c6c8dc38a2278e6 (diff)
downloadgdb-0e313f95c7a08384ab0275cd6f3c55f9a58142a1.tar.gz
* dwarf2-frame.c (struct dwarf2_frame_cache): New field
undefined_retaddr. (dwarf2_frame_cache): Initialize undefined_retaddr. (dwarf2_frame_this_id): Return an invalid frame ID if undefined_retaddr.
Diffstat (limited to 'gdb/dwarf2-frame.c')
-rw-r--r--gdb/dwarf2-frame.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
index 1ac18598e64..22b8ae6f2f5 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -610,6 +610,9 @@ struct dwarf2_frame_cache
/* DWARF Call Frame Address. */
CORE_ADDR cfa;
+ /* Set if the return address column was marked as undefined. */
+ int undefined_retaddr;
+
/* Saved registers, indexed by GDB register number, not by DWARF
register number. */
struct dwarf2_frame_state_reg *reg;
@@ -791,6 +794,10 @@ incomplete CFI data; unspecified registers (e.g., %s) at 0x%s"),
}
}
+ if (fs->retaddr_column < fs->regs.num_regs
+ && fs->regs.reg[fs->retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
+ cache->undefined_retaddr = 1;
+
do_cleanups (old_chain);
*this_cache = cache;
@@ -804,6 +811,9 @@ dwarf2_frame_this_id (struct frame_info *next_frame, void **this_cache,
struct dwarf2_frame_cache *cache =
dwarf2_frame_cache (next_frame, this_cache);
+ if (cache->undefined_retaddr)
+ return;
+
(*this_id) = frame_id_build (cache->cfa, frame_func_unwind (next_frame));
}