Browse Source

* dwarf2-frame.c (execute_cfa_program): Move DWA_CFA_nop before

DW_CFA_def_cfa_exporession.  Add support for
DW_CFA_offset_extendend_sf, DW_CFA_def_cfa_sf and
DW_CFA_def_cfa_offset_sf.  This should fix PR backtrace/1391.
cagney_bigcore-20040122-branch
Mark Kettenis 23 years ago
parent
commit
a850449234
  1. 7
      gdb/ChangeLog
  2. 24
      gdb/dwarf2-frame.c

7
gdb/ChangeLog

@ -1,3 +1,10 @@
2004-01-18 Mark Kettenis <kettenis@gnu.org>
* dwarf2-frame.c (execute_cfa_program): Move DWA_CFA_nop before
DW_CFA_def_cfa_exporession. Add support for
DW_CFA_offset_extendend_sf, DW_CFA_def_cfa_sf and
DW_CFA_def_cfa_offset_sf. This should fix PR backtrace/1391.
2004-01-18 Andrew Cagney <cagney@redhat.com>
* ocd.c: Update copyright.

24
gdb/dwarf2-frame.c

@ -432,6 +432,9 @@ execute_cfa_program (unsigned char *insn_ptr, unsigned char *insn_end,
/* cfa_how deliberately not set. */
break;
case DW_CFA_nop:
break;
case DW_CFA_def_cfa_expression:
insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_exp_len);
fs->cfa_exp = insn_ptr;
@ -449,7 +452,26 @@ execute_cfa_program (unsigned char *insn_ptr, unsigned char *insn_end,
insn_ptr += utmp;
break;
case DW_CFA_nop:
case DW_CFA_offset_extended_sf:
insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
offset += fs->data_align;
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
fs->regs.reg[reg].loc.offset = offset;
break;
case DW_CFA_def_cfa_sf:
insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_reg);
insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
fs->cfa_offset = offset * fs->data_align;
fs->cfa_how = CFA_REG_OFFSET;
break;
case DW_CFA_def_cfa_offset_sf:
insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
fs->cfa_offset = offset * fs->data_align;
/* cfa_how deliberately not set. */
break;
case DW_CFA_GNU_args_size:

Loading…
Cancel
Save