]> gcc.gnu.org Git - gcc.git/commitdiff
unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG.
authorRichard Henderson <rth@redhat.com>
Thu, 30 Sep 2004 08:21:27 +0000 (01:21 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 30 Sep 2004 08:21:27 +0000 (01:21 -0700)
        * unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG.
        * doc/tm.texi (DWARF_ZERO_REG): New.
        * config/alpha/alpha.c (alpha_sa_mask, alpha_expand_prologue,
        alpha_expand_epilogue): Revert 2003-09-30 change to store zero.
        * config/alpha/alpha.h (DWARF_ZERO_REG): New.

From-SVN: r88331

gcc/ChangeLog
gcc/config/alpha/alpha.c
gcc/config/alpha/alpha.h
gcc/doc/tm.texi
gcc/unwind-dw2.c

index 8f4b3964445db0e133d9b0faa64edb0a62135468..7dfe5e8a92092cdb3aac766cb8032a110008e8d8 100644 (file)
@@ -1,3 +1,12 @@
+2004-09-29  Richard Henderson  <rth@redhat.com>
+
+       * unwind-dw2.c (_Unwind_GetGR): Honor DWARF_ZERO_REG.
+       * doc/tm.texi (DWARF_ZERO_REG): New.
+
+       * config/alpha/alpha.c (alpha_sa_mask, alpha_expand_prologue,
+       alpha_expand_epilogue): Revert 2003-09-30 change to store zero.
+       * config/alpha/alpha.h (DWARF_ZERO_REG): New.
+
 2004-09-29  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * builtins.c (expand_builtin_strlen): Do not call emit_move_insn
index 114170b8b474793d41950694e080eb1551cf282f..b1de390bc5331a89c8e8beb1d2d26e2557043418 100644 (file)
@@ -5924,11 +5924,6 @@ alpha_sa_mask (unsigned long *imaskP, unsigned long *fmaskP)
            break;
          imask |= 1UL << regno;
        }
-
-      /* Glibc likes to use $31 as an unwind stopper for crt0.  To
-        avoid hackery in unwind-dw2.c, we need to actively store a
-        zero in the prologue of _Unwind_RaiseException et al.  */
-      imask |= 1UL << 31;
     }
 
   /* If any register spilled, then spill the return address also.  */
@@ -6451,14 +6446,6 @@ alpha_expand_prologue (void)
            reg_offset += 8;
          }
 
-      /* Store a zero if requested for unwinding.  */
-      if (imask & (1UL << 31))
-       {
-         emit_frame_store_1 (const0_rtx, sa_reg, sa_bias, reg_offset,
-                             gen_rtx_REG (Pmode, 31));
-         reg_offset += 8;
-       }
-
       for (i = 0; i < 31; i++)
        if (fmask & (1UL << i))
          {
@@ -6876,9 +6863,6 @@ alpha_expand_epilogue (void)
            reg_offset += 8;
          }
 
-      if (imask & (1UL << 31))
-       reg_offset += 8;
-
       for (i = 0; i < 31; ++i)
        if (fmask & (1UL << i))
          {
index 35d6f4ac3a1a66e4b8b8ebce2f2b9ef7bcde39be..fe3cedcb520b2cb377094a4be0e5059a5cb97398 100644 (file)
@@ -1183,6 +1183,7 @@ do {                                              \
 #define INCOMING_RETURN_ADDR_RTX  gen_rtx_REG (Pmode, 26)
 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26)
 #define DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (64)
+#define DWARF_ZERO_REG 31
 
 /* Describe how we implement __builtin_eh_return.  */
 #define EH_RETURN_DATA_REGNO(N)        ((N) < 4 ? (N) + 16 : INVALID_REGNUM)
index fc033ecc6913022195881ce1aef7ffdd91d4b092..f72713cee67521c3a1d7b59b08761fb34270c3ce 100644 (file)
@@ -2974,6 +2974,14 @@ general register, but an alternate column needs to be used for
 signal frames.
 @end defmac
 
+@defmac DWARF_ZERO_REG
+A C expression whose value is an integer giving a DWARF 2 register
+number that is considered to always have the value zero.  This should
+only be defined if the target has an architected zero register, and
+someone decided it was a good idea to use that register number to
+terminate the stack backtrace.  New ports should avoid this.
+@end defmac
+
 @defmac INCOMING_FRAME_SP_OFFSET
 A C expression whose value is an integer giving the offset, in bytes,
 from the value of the stack pointer register to the top of the stack
index 67b8d1cd0661e955b1fe9be7d115c37161ed85a9..baa4481c7471c4e287570d9b734e2f00319a033a 100644 (file)
@@ -125,6 +125,11 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index)
   int size;
   void *ptr;
 
+#ifdef DWARF_ZERO_REG
+  if (index == DWARF_ZERO_REG)
+    return 0;
+#endif
+
   index = DWARF_REG_TO_UNWIND_COLUMN (index);
   if (index >= (int) sizeof(dwarf_reg_size_table))
     abort ();
This page took 0.111138 seconds and 5 git commands to generate.