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.

Reply via email to