diff options
author | Daniel Jacobowitz <drow@false.org> | 2005-04-08 12:10:21 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2005-04-08 12:10:21 +0000 |
commit | 0228dfb97d58a54af8758840101975bf92903133 (patch) | |
tree | 7d80619b9fdd8281ba055c3635617484a007eb16 /gdb | |
parent | 8f6277f5c0ba5af896745b5da1674493da61aa0d (diff) | |
download | gdb-0228dfb97d58a54af8758840101975bf92903133.zip gdb-0228dfb97d58a54af8758840101975bf92903133.tar.gz gdb-0228dfb97d58a54af8758840101975bf92903133.tar.bz2 |
* 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')
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/dwarf2-frame.c | 10 |
2 files changed, 18 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 30abadc..af02d97 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2005-04-08 Daniel Jacobowitz <dan@codesourcery.com> + + * 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. + 2005-04-05 Jim Blandy <jimb@redhat.com> Move construction of IA-32 vector types to i386-tdep.c. diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index 1ac1859..22b8ae6 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)); } |