diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-18 01:19:10 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-18 01:19:10 +0000 |
commit | da72c08324c5eadcc5451ced9fc0a6c80f186517 (patch) | |
tree | c03bdda31c81403f3bcd5fcf610248b9f27ee02a /gcc/unwind-dw2.c | |
parent | 15d27402f51cf831d82aa31271f5c01855b4f2cf (diff) | |
download | gcc-da72c08324c5eadcc5451ced9fc0a6c80f186517.tar.gz |
* dwarf2out.c (dw_cfi_oprnd_struct): Reduce dw_cfi_reg_num to int.
(lookup_cfa_1): Apply data alignment to DW_CFA_def_cfa_offset_sf
and DW_CFA_def_cfa_sf.
(def_cfa_1): Use DW_CFA_def_cfa_offset_sf with negative values.
(dbx_reg_number): Don't assert particular registers here.
(based_loc_descr): ... do it here instead. Fold in ...
(eliminate_reg_to_offset): ... this function.
(compute_frame_pointer_to_cfa_displacement): Fold in the effects
of eliminate_reg_to_offset; use FRAME_POINTER_CFA_OFFSET.
* unwind-dw2.c (execute_cfa_program): Apply data align factor
to DW_CFA_def_cfa_offset_sf and DW_CFA_def_cfa_sf.
* function.c (instantiate_new_reg): Use FRAME_POINTER_CFA_OFFSET.
(instantiate_virtual_regs): Likewise.
* var-tracking.c (adjust_stack_reference): Likewise.
* doc/tm.texi (FRAME_POINTER_CFA_OFFSET): New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107154 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/unwind-dw2.c')
-rw-r--r-- | gcc/unwind-dw2.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index 4626ec6d84c..930f02f3799 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -902,7 +902,7 @@ execute_cfa_program (const unsigned char *insn_ptr, insn_ptr += utmp; break; - /* From the 2.1 draft. */ + /* From the dwarf3 draft. */ case DW_CFA_offset_extended_sf: insn_ptr = read_uleb128 (insn_ptr, ®); insn_ptr = read_sleb128 (insn_ptr, &stmp); @@ -916,10 +916,12 @@ execute_cfa_program (const unsigned char *insn_ptr, insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset); fs->cfa_how = CFA_REG_OFFSET; + fs->cfa_offset *= fs->data_align; break; case DW_CFA_def_cfa_offset_sf: insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset); + fs->cfa_offset *= fs->data_align; /* cfa_how deliberately not set. */ break; |