From: Frederic Riss Date: Mon, 28 Nov 2005 07:20:35 +0000 (+0000) Subject: * dwarf2-frame.c (execute_cfa_program): Don't access past the X-Git-Tag: gdb_6_4-20051202-release~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e199dc472f57d59f8a238ab1f7c7f089a3a06b6;p=thirdparty%2Fbinutils-gdb.git * dwarf2-frame.c (execute_cfa_program): Don't access past the allocated dwarf2_frame_state.initial.regs --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fe8dda46f5e..244d2b3e1d1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2005-11-25 Frederic Riss + + * dwarf2-frame.c (execute_cfa_program): Don't access past the + allocated dwarf2_frame_state.initial.regs. + 2005-11-22 Joel Brobecker * top.c (print_gdb_version): Update copyright year. diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index ef0d6266fd8..288f41d845e 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 {