linux-unwind.h: Update copyright years.
authorUros Bizjak <uros@gcc.gnu.org>
Tue, 20 Dec 2011 08:46:38 +0000 (09:46 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 20 Dec 2011 08:46:38 +0000 (09:46 +0100)
* config/alpha/linux-unwind.h: Update copyright years.
(MD_FROB_UPDATE_CONTEXT): New define.
(alpha_frob_update_context): New function.

From-SVN: r182522

libgcc/ChangeLog
libgcc/config/alpha/linux-unwind.h

index 8ad0c99..6461ad6 100644 (file)
@@ -1,3 +1,9 @@
+2011-12-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/alpha/linux-unwind.h: Update copyright years.
+       (MD_FROB_UPDATE_CONTEXT): New define.
+       (alpha_frob_update_context): New function.
+
 2011-12-17  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * config.host (mips*-sde-elf*, mipsisa64sr71k-*-elf*): Add to
@@ -6,7 +12,7 @@
 2011-12-15  Iain Sandoe  <iains@gcc.gnu.org>
 
        * config/rs6000/darwin-world.S (toplevel): Make it clear that this
-       function is not used for PPC64.  
+       function is not used for PPC64.
        (save_world): Amend comments.  Update the VRsave mask to reflect the
        saved regs.
        (rest_world): Update comments, do not  clobber r10, do not use r8.
@@ -65,7 +71,7 @@
        (__deregister_frame_info, __cxa_finalize, _Jv_RegisterClasses,
        pthread_default_stacksize_np): Likewise.
        * config/pa/t-stublib (LIBGCCSTUB_OBJS): Add new objects and rules.
-       
+
 2011-11-29  DJ Delorie  <dj@redhat.com>
 
        * config.host (rl78-*-elf): New case.
 
        * config/arm/lib1funcs.asm (udivsi3): Add support for divide
        functions.
-       (aeabi_uidivmod): Likewise.     
+       (aeabi_uidivmod): Likewise.
        (umodsi3): Likewise.
        (divsi3): Likewise.
        (aeabi_idivmod): Likewise.
index 629d557..4c811dc 100644 (file)
@@ -1,5 +1,5 @@
 /* DWARF2 EH unwinding support for Alpha Linux.
-   Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2009, 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -36,16 +36,17 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
 {
   unsigned int *pc = context->ra;
   struct sigcontext *sc;
-  long new_cfa, i;
+  long new_cfa;
+  int i;
 
   if (pc[0] != 0x47fe0410              /* mov $30,$16 */
-      || pc[2] != 0x00000083           /* callsys */)
+      || pc[2] != 0x00000083)          /* callsys */
     return _URC_END_OF_STACK;
   if (context->cfa == 0)
     return _URC_END_OF_STACK;
   if (pc[1] == 0x201f0067)             /* lda $0,NR_sigreturn */
     sc = context->cfa;
-  else if (pc[1] == 0x201f015f)        /* lda $0,NR_rt_sigreturn */
+  else if (pc[1] == 0x201f015f)                /* lda $0,NR_rt_sigreturn */
     {
       struct rt_sigframe {
        struct siginfo info;
@@ -55,6 +56,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
     }
   else
     return _URC_END_OF_STACK;
+
   new_cfa = sc->sc_regs[30];
   fs->regs.cfa_how = CFA_REG_OFFSET;
   fs->regs.cfa_reg = 30;
@@ -63,13 +65,13 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
     {
       fs->regs.reg[i].how = REG_SAVED_OFFSET;
       fs->regs.reg[i].loc.offset
-       = (long)&sc->sc_regs[i] - new_cfa;
+       = (long) &sc->sc_regs[i] - new_cfa;
     }
   for (i = 0; i < 31; ++i)
     {
       fs->regs.reg[i+32].how = REG_SAVED_OFFSET;
       fs->regs.reg[i+32].loc.offset
-       = (long)&sc->sc_fpregs[i] - new_cfa;
+       = (long) &sc->sc_fpregs[i] - new_cfa;
     }
   fs->regs.reg[64].how = REG_SAVED_OFFSET;
   fs->regs.reg[64].loc.offset = (long)&sc->sc_pc - new_cfa;
@@ -78,3 +80,20 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
 
   return _URC_NO_REASON;
 }
+
+#define MD_FROB_UPDATE_CONTEXT alpha_frob_update_context
+
+/* Fix up for signal handlers that don't have S flag set.  */
+
+static void
+alpha_frob_update_context (struct _Unwind_Context *context,
+                          _Unwind_FrameState *fs ATTRIBUTE_UNUSED)
+{
+  unsigned int *pc = context->ra;
+
+  if (pc[0] == 0x47fe0410              /* mov $30,$16 */
+      && pc[2] == 0x00000083           /* callsys */
+      && (pc[1] == 0x201f0067          /* lda $0,NR_sigreturn */
+         || pc[1] == 0x201f015f))      /* lda $0,NR_rt_sigreturn */
+    _Unwind_SetSignalFrame (context, 1);
+}