aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoff Keating <geoffk@cygnus.com>2000-02-09 01:57:21 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2000-02-09 01:57:21 +0000
commit3f388b42b08a542ab952cfa494b059a2f6aa23a4 (patch)
tree11e7f697d85ef54dbc47591bc4f45867fc164631
parent5568fb48cc080bfcf8164b60e90f489130b0ea2e (diff)
downloadgcc-3f388b42b08a542ab952cfa494b059a2f6aa23a4.zip
gcc-3f388b42b08a542ab952cfa494b059a2f6aa23a4.tar.gz
gcc-3f388b42b08a542ab952cfa494b059a2f6aa23a4.tar.bz2
dwarf2.h (DW_CFA_GNU_negative_offset_extended): New constant.
* dwarf2.h (DW_CFA_GNU_negative_offset_extended): New constant. * dwarf2out.c (dwarf_cfi_name): Print name of new constant. (reg_save): Use DW_CFA_GNU_negative_offset_extended when needed. (output_cfi): Handle output of DW_CFA_GNU_negative_offset_extended. * frame.c (execute_cfa_insn): Handle DW_CFA_GNU_negative_offset_extended. From-SVN: r31858
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/dwarf2.h6
-rw-r--r--gcc/dwarf2out.c8
-rw-r--r--gcc/frame.c8
4 files changed, 28 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5020e42..4aab454 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2000-02-08 Geoff Keating <geoffk@cygnus.com>
+
+ * dwarf2.h (DW_CFA_GNU_negative_offset_extended): New constant.
+ * dwarf2out.c (dwarf_cfi_name): Print name of new constant.
+ (reg_save): Use DW_CFA_GNU_negative_offset_extended when needed.
+ (output_cfi): Handle output of DW_CFA_GNU_negative_offset_extended.
+ * frame.c (execute_cfa_insn): Handle
+ DW_CFA_GNU_negative_offset_extended.
+
2000-02-08 Richard Henderson <rth@cygnus.com>
* flow.c (tidy_fallthru_edges): Split out from ...
diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h
index ddbe1b8..d0ca245 100644
--- a/gcc/dwarf2.h
+++ b/gcc/dwarf2.h
@@ -1,6 +1,7 @@
/* Declarations and definitions of codes relating to the DWARF2 symbolic
debugging information format.
- Copyright (C) 1992, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1995, 1996, 1997, 2000
+ Free Software Foundation, Inc.
Contributed by Gary Funck (gary@intrepid.com). Derived from the
DWARF 1 implementation written by Ron Guilmette (rfg@monkeys.com).
@@ -501,7 +502,8 @@ enum dwarf_call_frame_info
/* GNU extensions */
DW_CFA_GNU_window_save = 0x2d,
- DW_CFA_GNU_args_size = 0x2e
+ DW_CFA_GNU_args_size = 0x2e,
+ DW_CFA_GNU_negative_offset_extended = 0x2f
};
#define DW_CIE_ID 0xffffffff
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 5e09e4b..c363869 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -643,6 +643,8 @@ dwarf_cfi_name (cfi_opc)
return "DW_CFA_GNU_window_save";
case DW_CFA_GNU_args_size:
return "DW_CFA_GNU_args_size";
+ case DW_CFA_GNU_negative_offset_extended:
+ return "DW_CFA_GNU_negative_offset_extended";
default:
return "DW_CFA_<unknown>";
@@ -872,7 +874,10 @@ reg_save (label, reg, sreg, offset)
offset /= DWARF_CIE_DATA_ALIGNMENT;
if (offset < 0)
- abort ();
+ {
+ cfi->dw_cfi_opc = DW_CFA_GNU_negative_offset_extended;
+ offset = -offset;
+ }
cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
}
else
@@ -1559,6 +1564,7 @@ output_cfi (cfi, fde)
break;
#endif
case DW_CFA_offset_extended:
+ case DW_CFA_GNU_negative_offset_extended:
case DW_CFA_def_cfa:
output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
fputc ('\n', asm_out_file);
diff --git a/gcc/frame.c b/gcc/frame.c
index dc5d3a9c9..79ba78a 100644
--- a/gcc/frame.c
+++ b/gcc/frame.c
@@ -795,6 +795,14 @@ execute_cfa_insn (void *p, struct frame_state_internal *state,
state->s.args_size = offset;
break;
+ case DW_CFA_GNU_negative_offset_extended:
+ p = decode_uleb128 (p, &reg);
+ p = decode_uleb128 (p, &offset);
+ offset *= info->data_align;
+ state->s.saved[reg] = REG_SAVED_OFFSET;
+ state->s.reg_or_offset[reg] = -offset;
+ break;
+
default:
abort ();
}