]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* dwarf2-frame.c (execute_cfa_program): Don't access past the
authorFrederic Riss <frederic.riss@st.com>
Mon, 28 Nov 2005 07:20:35 +0000 (07:20 +0000)
committerFrederic Riss <frederic.riss@st.com>
Mon, 28 Nov 2005 07:20:35 +0000 (07:20 +0000)
allocated dwarf2_frame_state.initial.regs

gdb/ChangeLog
gdb/dwarf2-frame.c

index fe8dda46f5e4965dd40736000e9970b8eb3e33e5..244d2b3e1d1eccfb95b4afdefa7c02881826bbf0 100644 (file)
@@ -1,3 +1,8 @@
+2005-11-25 Frederic Riss <frederic.riss@st.com>
+
+       * dwarf2-frame.c (execute_cfa_program): Don't access past the
+       allocated dwarf2_frame_state.initial.regs.
+
 2005-11-22  Joel Brobecker  <brobecker@adacore.com>
 
        * top.c (print_gdb_version): Update copyright year.
index ef0d6266fd83179886f0bd21a584f06ec6a523e7..288f41d845e7af5f4b408678dd5f5940bcae5840 100644 (file)
@@ -294,7 +294,17 @@ execute_cfa_program (gdb_byte *insn_ptr, gdb_byte *insn_end,
          gdb_assert (fs->initial.reg);
          reg = insn & 0x3f;
          dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
-         fs->regs.reg[reg] = fs->initial.reg[reg];
+          if (reg < fs->initial.num_regs)
+            fs->regs.reg[reg] = fs->initial.reg[reg];
+          else
+            fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED;
+
+          if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED)
+            complaint (&symfile_complaints, _("\
+incomplete CFI data; DW_CFA_restore unspecified\n\
+register %s (#%d) at 0x%s"),
+                       REGISTER_NAME(DWARF2_REG_TO_REGNUM(reg)),
+                       DWARF2_REG_TO_REGNUM(reg), paddr (fs->pc));
        }
       else
        {