]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.c (rs6000_init_dwarf_reg_sizes_extra): Ensure that altivec registers are corre...
authorIain Sandoe <iain@codesourcery.com>
Sun, 29 Sep 2013 19:34:58 +0000 (19:34 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Sun, 29 Sep 2013 19:34:58 +0000 (19:34 +0000)
gcc:

* config/rs6000/rs6000.c (rs6000_init_dwarf_reg_sizes_extra): Ensure
that altivec registers are correctly sized on Darwin.

From-SVN: r203018

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 57edfbbd924fc08d062e6eb2417633b868d539c3..543d6018f65c0bd5e13736aeb05e6284e11f376d 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-29  Iain Sandoe  <iain@codesourcery.com>
+
+       * config/rs6000/rs6000.c (rs6000_init_dwarf_reg_sizes_extra): Ensure
+       that altivec registers are correctly sized on Darwin.
+
 2013-09-29  Iain Sandoe  <iain@codesourcery.com>
 
        * config/t-darwin (darwin.o, darwin-c.o, darwin-f.o,
index 4197687c083ef986d106452d4b395948b5952e69..763847c0854d4926ead8dac3eddcc5350106ba8c 100644 (file)
@@ -29050,6 +29050,27 @@ rs6000_init_dwarf_reg_sizes_extra (tree address)
          emit_move_insn (adjust_address (mem, mode, offset), value);
        }
     }
+
+  if (TARGET_MACHO && ! TARGET_ALTIVEC)
+    {
+      int i;
+      enum machine_mode mode = TYPE_MODE (char_type_node);
+      rtx addr = expand_expr (address, NULL_RTX, VOIDmode, EXPAND_NORMAL);
+      rtx mem = gen_rtx_MEM (BLKmode, addr);
+      rtx value = gen_int_mode (16, mode);
+
+      /* On Darwin, libgcc may be built to run on both G3 and G4/5.
+        The unwinder still needs to know the size of Altivec registers.  */
+
+      for (i = FIRST_ALTIVEC_REGNO; i < LAST_ALTIVEC_REGNO+1; i++)
+       {
+         int column = DWARF_REG_TO_UNWIND_COLUMN (i);
+         HOST_WIDE_INT offset
+           = DWARF_FRAME_REGNUM (column) * GET_MODE_SIZE (mode);
+
+         emit_move_insn (adjust_address (mem, mode, offset), value);
+       }
+    }
 }
 
 /* Map internal gcc register numbers to DWARF2 register numbers.  */