diff options
author | James E Wilson <wilson@specifixinc.com> | 2005-10-31 15:39:29 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 2005-10-31 15:39:29 -0800 |
commit | eef251429872ed54c253be0acea8abea9ec0c1fc (patch) | |
tree | 1750a8260ed0fb478184d26706f4e513e5695b5b /gcc/dwarf2out.c | |
parent | e5f9a909f1b40be029ac2285fac82d8ab13e3c20 (diff) | |
download | gcc-eef251429872ed54c253be0acea8abea9ec0c1fc.zip gcc-eef251429872ed54c253be0acea8abea9ec0c1fc.tar.gz gcc-eef251429872ed54c253be0acea8abea9ec0c1fc.tar.bz2 |
Restore old AT_frame_base code for targets that don't use dwarf2 unwind info.
Partial fix.
PR debug/24444
* dwarf2out.c (convert_cfa_to_loc_list): Put inside DWARF2_UNWIND_INFO
ifdef. Put ifdefs around call in gen_subprogram_die.
(compute_frame_pointer_to_cfa_displacement): Likewise.
(gen_subprogram_die): Restore old code for when DWARF2_UNWIND_INFO is
not defined.
From-SVN: r106299
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 8a5c4c2..d780914 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -10290,6 +10290,7 @@ tree_add_const_value_attribute (dw_die_ref var_die, tree decl) add_const_value_attribute (var_die, rtl); } +#ifdef DWARF2_UNWIND_INFO /* Convert the CFI instructions for the current function into a location list. This is used for DW_AT_frame_base when we targeting a dwarf2 consumer that does not support the dwarf3 DW_OP_call_frame_cfa. */ @@ -10381,6 +10382,7 @@ compute_frame_pointer_to_cfa_displacement (void) frame_pointer_cfa_offset = -offset; } +#endif /* Generate a DW_AT_name attribute given some string value to be included as the value of the attribute. */ @@ -11606,6 +11608,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde); #endif +#ifdef DWARF2_UNWIND_INFO /* We define the "frame base" as the function's CFA. This is more convenient for several reasons: (1) It's stable across the prologue and epilogue, which makes it better than just a frame pointer, @@ -11632,6 +11635,17 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) debugger about. We'll need to adjust all frame_base references by this displacement. */ compute_frame_pointer_to_cfa_displacement (); +#else + /* For targets which support DWARF2, but not DWARF2 call-frame info, + we just use the stack pointer or frame pointer. */ + /* ??? Should investigate getting better info via callbacks, or else + by interpreting the IA-64 unwind info. */ + { + rtx fp_reg + = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx; + add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg)); + } +#endif if (cfun->static_chain_decl) add_AT_location_description (subr_die, DW_AT_static_link, |