summaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorgeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-09 01:57:21 +0000
committergeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-09 01:57:21 +0000
commitdb3d4a188d036d41c962661feb272786e2dc58d1 (patch)
tree11e7f697d85ef54dbc47591bc4f45867fc164631 /gcc/dwarf2out.c
parent3a716efb64bce83cf718150fd1dce01f757b2df8 (diff)
downloadgcc-db3d4a188d036d41c962661feb272786e2dc58d1.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31858 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 5e09e4b9b2f..c363869a26b 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);