803b8bd
2006-12-30  Andrew Cagney <cagney@redhat.com>
803b8bd
	    Jan Kratochvil  <jan.kratochvil@redhat.com>
803b8bd
803b8bd
	* dwarf2-frame.c (execute_cfa_program): New support of
803b8bd
	`DW_CFA_GNU_negative_offset_extended'.
803b8bd
803b8bd
803b8bd
Index: ./gdb/dwarf2-frame.c
803b8bd
===================================================================
803b8bd
RCS file: /cvs/src/src/gdb/dwarf2-frame.c,v
803b8bd
retrieving revision 1.64
803b8bd
diff -u -p -r1.64 dwarf2-frame.c
803b8bd
--- ./gdb/dwarf2-frame.c	28 Nov 2006 17:28:29 -0000	1.64
803b8bd
+++ ./gdb/dwarf2-frame.c	30 Dec 2006 18:24:58 -0000
803b8bd
@@ -555,6 +555,15 @@ bad CFI data; mismatched DW_CFA_restore_
803b8bd
 	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
803b8bd
 	      break;
803b8bd
 
803b8bd
+	    case DW_CFA_GNU_negative_offset_extended:
803b8bd
+	      insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
803b8bd
+	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &offset);
803b8bd
+	      offset *= fs->data_align;
803b8bd
+	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
803b8bd
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
803b8bd
+	      fs->regs.reg[reg].loc.offset = -offset;
803b8bd
+	      break;
803b8bd
+
803b8bd
 	    default:
803b8bd
 	      internal_error (__FILE__, __LINE__, _("Unknown CFI encountered."));
803b8bd
 	    }