http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47324

--- Comment #32 from Jack Howarth <howarth at nitro dot med.uc.edu> 2011-02-10 
14:38:22 UTC ---
(In reply to comment #31)

I don't see how we can directly use DWARF2_FRAME_REG_OUT in
output_loc_operands, except as a template for the desired register changes. How
about this strategy for that part of the patch?


@@ -5291,16 +5291,44 @@ output_loc_operands (dw_loc_descr_ref lo
 /* Output a sequence of location operations.  */

 static void
-output_loc_sequence (dw_loc_descr_ref loc)
+output_loc_sequence (dw_loc_descr_ref loc, bool for_eh)
 {
+  unsigned int dw_op;
   for (; loc != NULL; loc = loc->dw_loc_next)
     {
       /* Output the opcode.  */
-      dw2_asm_output_data (1, loc->dw_loc_opc,
-               "%s", dwarf_stack_op_name (loc->dw_loc_opc));
+      dw_op = loc->dw_loc_opc; 
+      if (for_eh)
+         switch (dw_op)
+           {
+       case DW_OP_reg4:
+        dw_op = DW_OP_reg5;
+       case DW_OP_reg5:
+        dw_op = DW_OP_reg4
+       case DW_OP_reg11:
+            dw_op = DW_OP_reg12;
+       case DW_OP_reg12:
+        dw_op = DW_OP_reg13;
+           case DW_OP_reg13:
+        dw_op = DW_OP_reg14;
+       case DW_OP_reg14:
+        dw_op = DW_OP_reg15; 
+       case DW_OP_reg15:
+        dw_op = DW_OP_reg16;
+       case DW_OP_reg16:
+        dw_op = DW_OP_reg17;
+       case DW_OP_reg17:
+        dw_op = DW_OP_reg18;
+       case DW_OP_reg18:
+        dw_op = DW_OP_reg19;
+       default:
+        ;
+           }
+        dw2_asm_output_data (1, loc->dw_loc_opc,
+                "%s", dwarf_stack_op_name (dw_op));

       /* Output the operand(s) (if any).  */
-      output_loc_operands (loc);
+      output_loc_operands (loc, for_eh);
     }
 }

Reply via email to