summaryrefslogtreecommitdiff
path: root/gcc/unwind-dw2.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-18 01:19:10 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-18 01:19:10 +0000
commitda72c08324c5eadcc5451ced9fc0a6c80f186517 (patch)
treec03bdda31c81403f3bcd5fcf610248b9f27ee02a /gcc/unwind-dw2.c
parent15d27402f51cf831d82aa31271f5c01855b4f2cf (diff)
downloadgcc-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.c4
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, &reg);
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;