* i386nbsd-nat.c (i386nbsd_supply_pcb): Cast to 'gdb_byte *' in
[deliverable/binutils-gdb.git] / gdb / dwarf2-frame.c
index 1ac18598e64d4b3eeba120956e90f74789ebb5e0..a7d27a71bd8f37b4aab0b0c77c008be3e4e175fd 100644 (file)
@@ -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));
 }
 
@@ -811,7 +821,7 @@ static void
 dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
                            int regnum, int *optimizedp,
                            enum lval_type *lvalp, CORE_ADDR *addrp,
-                           int *realnump, void *valuep)
+                           int *realnump, gdb_byte *valuep)
 {
   struct gdbarch *gdbarch = get_frame_arch (next_frame);
   struct dwarf2_frame_cache *cache =
This page took 0.02423 seconds and 4 git commands to generate.