diff options
author | Frederic Riss <frederic.riss@st.com> | 2005-11-25 06:42:07 +0000 |
---|---|---|
committer | Frederic Riss <frederic.riss@st.com> | 2005-11-25 06:42:07 +0000 |
commit | 8b967bc86853d46696b8eb5a980fb5c032b54c8a (patch) | |
tree | bbf1df1c8d8a238803208c53b4d4ca02e18d3a84 /gdb/dwarf2-frame.c | |
parent | 1ee430f01d3c2787f2f6f80c3ec1132a02a8dc28 (diff) | |
download | gdb-8b967bc86853d46696b8eb5a980fb5c032b54c8a.tar.gz |
* dwarf2-frame.c: (execute_cfa_program): Don't access past the
allocated dwarf2_frame_state.initial.regs.
Diffstat (limited to 'gdb/dwarf2-frame.c')
-rw-r--r-- | gdb/dwarf2-frame.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index ef0d6266fd8..c65967fcff4 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -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 { |