http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47324
--- Comment #27 from Jack Howarth <howarth at nitro dot med.uc.edu> 2011-02-09
16:28:55 UTC ---
Ian,
Just using...
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c (revision 169978)
+++ gcc/dwarf2out.c (working copy)
@@ -474,8 +474,8 @@ static bool clobbers_queued_reg_save (co
static void dwarf2out_frame_debug_expr (rtx, const char *);
/* Support for complex CFA locations. */
-static void output_cfa_loc (dw_cfi_ref);
-static void output_cfa_loc_raw (dw_cfi_ref);
+static void output_cfa_loc (dw_cfi_ref, bool);
+static void output_cfa_loc_raw (dw_cfi_ref, bool);
static void get_cfa_from_loc_descr (dw_cfa_location *,
struct dw_loc_descr_struct *);
static struct dw_loc_descr_struct *build_cfa_loc
@@ -3317,7 +3317,7 @@ output_cfi (dw_cfi_ref cfi, dw_fde_ref f
case DW_CFA_def_cfa_expression:
case DW_CFA_expression:
- output_cfa_loc (cfi);
+ output_cfa_loc (cfi, for_eh);
break;
case DW_CFA_GNU_negative_offset_extended:
@@ -3422,7 +3422,7 @@ output_cfi_directive (dw_cfi_ref cfi)
case DW_CFA_def_cfa_expression:
case DW_CFA_expression:
fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
- output_cfa_loc_raw (cfi);
+ output_cfa_loc_raw (cfi, 1);
fputc ('\n', asm_out_file);
break;
@@ -5451,14 +5451,15 @@ output_loc_sequence_raw (dw_loc_descr_re
description based on a cfi entry with a complex address. */
static void
-output_cfa_loc (dw_cfi_ref cfi)
+output_cfa_loc (dw_cfi_ref cfi, bool for_eh)
{
dw_loc_descr_ref loc;
unsigned long size;
if (cfi->dw_cfi_opc == DW_CFA_expression)
{
- dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
+ unsigned long r = DWARF2_FRAME_REG_OUT
(cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
+ dw2_asm_output_data (1, r, NULL);
loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
}
else
@@ -5475,14 +5476,15 @@ output_cfa_loc (dw_cfi_ref cfi)
/* Similar, but used for .cfi_escape. */
static void
-output_cfa_loc_raw (dw_cfi_ref cfi)
+output_cfa_loc_raw (dw_cfi_ref cfi, bool for_eh)
{
dw_loc_descr_ref loc;
unsigned long size;
if (cfi->dw_cfi_opc == DW_CFA_expression)
{
- fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
+ unsigned long r = DWARF2_FRAME_REG_OUT
(cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
+ fprintf (asm_out_file, "%#lx,", r);
loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
}
else
still gives you the failures at -O3 -g for -m32.