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.