aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorJames E Wilson <wilson@specifixinc.com>2005-10-31 15:39:29 -0800
committerJim Wilson <wilson@gcc.gnu.org>2005-10-31 15:39:29 -0800
commiteef251429872ed54c253be0acea8abea9ec0c1fc (patch)
tree1750a8260ed0fb478184d26706f4e513e5695b5b /gcc/dwarf2out.c
parente5f9a909f1b40be029ac2285fac82d8ab13e3c20 (diff)
downloadgcc-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.c14
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,