Author: aurel32
Date: 2008-08-07 07:25:26 +0000 (Thu, 07 Aug 2008)
New Revision: 3039

Added:
   glibc-package/trunk/debian/patches/hppa/local-context.diff
   glibc-package/trunk/debian/patches/sparc/cvs-context.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
  * patches/sparc/cvs-context.diff: new patch from upstream to add
    getcontext(), setcontext(), makecontext() on Sparc.  Closes: #295173.
  * patches/hppa/local-context.diff: new patch from Helge Deller to add
    getcontext(), setcontext(), makecontext() on PARISC.  Closes: #492778.



Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog        2008-08-07 02:16:08 UTC (rev 
3038)
+++ glibc-package/trunk/debian/changelog        2008-08-07 07:25:26 UTC (rev 
3039)
@@ -6,6 +6,10 @@
   [ Aurelien Jarno ]
   * patches/mips/cvs-mknod.diff: new patch from upstream to allow > 255 minors
     on mips.  Closes: #493751.
+  * patches/sparc/cvs-context.diff: new patch from upstream to add
+    getcontext(), setcontext(), makecontext() on Sparc.  Closes: #295173.
+  * patches/hppa/local-context.diff: new patch from Helge Deller to add
+    getcontext(), setcontext(), makecontext() on PARISC.  Closes: #492778.
 
   [ Samuel Thibault ]
   * patches/hurd-i386/cvs-lock-memory-clobber.diff: new patch from upstream

Added: glibc-package/trunk/debian/patches/hppa/local-context.diff
===================================================================
--- glibc-package/trunk/debian/patches/hppa/local-context.diff                  
        (rev 0)
+++ glibc-package/trunk/debian/patches/hppa/local-context.diff  2008-08-07 
07:25:26 UTC (rev 3039)
@@ -0,0 +1,491 @@
+diff -up ports/sysdeps/unix/sysv/linux/hppa/Makefile.org 
ports/sysdeps/unix/sysv/linux/hppa/Makefile
+--- ports/sysdeps/unix/sysv/linux/hppa/Makefile.org    2008-07-16 
19:41:29.000000000 +0200
++++ ports/sysdeps/unix/sysv/linux/hppa/Makefile        2008-07-16 
19:41:37.000000000 +0200
+@@ -1,2 +1,7 @@
+ # linux/hppa does not use -lmilli anymore
+ gnulib := -lgcc
++
++ifeq ($(subdir),stdlib)
++gen-as-const-headers += ucontext_i.sym
++endif
++
+diff -up ports/sysdeps/unix/sysv/linux/hppa/getcontext.S.org 
ports/sysdeps/unix/sysv/linux/hppa/getcontext.S
+--- ports/sysdeps/unix/sysv/linux/hppa/getcontext.S.org        2008-07-16 
19:52:11.000000000 +0200
++++ ports/sysdeps/unix/sysv/linux/hppa/getcontext.S    2008-07-18 
23:34:32.000000000 +0200
+@@ -0,0 +1,101 @@
++/* Get current user context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Helge Deller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++ENTRY(__getcontext)
++      /* Save the register.  */
++      stw     %r0, oR0(%r26)
++      stw     %r1, oR1(%r26)
++      stw     %r2, oR2(%r26)
++      stw     %r3, oR3(%r26)
++      stw     %r4, oR4(%r26)
++      stw     %r5, oR5(%r26)
++      stw     %r6, oR6(%r26)
++      stw     %r7, oR7(%r26)
++      stw     %r8, oR8(%r26)
++      stw     %r9, oR9(%r26)
++      stw     %r10, oR10(%r26)
++      stw     %r11, oR11(%r26)
++      stw     %r12, oR12(%r26)
++      stw     %r13, oR13(%r26)
++      stw     %r14, oR14(%r26)
++      stw     %r15, oR15(%r26)
++      stw     %r16, oR16(%r26)
++      stw     %r17, oR17(%r26)
++      stw     %r18, oR18(%r26)
++      stw     %r19, oR19(%r26)
++      stw     %r20, oR20(%r26)
++      stw     %r21, oR21(%r26)
++      stw     %r22, oR22(%r26)
++      stw     %r23, oR23(%r26)
++      stw     %r24, oR24(%r26)
++      stw     %r25, oR25(%r26)
++      stw     %r26, oR26(%r26)
++      stw     %r27, oR27(%r26)
++      stw     %r28, oR28(%r26)
++      stw     %r29, oR29(%r26)
++      ldo     -64(%sp), %r1   /* Calculate %sp in %r1.  */
++      stw     %r1, oR30(%r26) /* Save new %sp.  */
++      stw     %r31, oR31(%r26)
++
++      stw     %r0, oUC_FLAGS(%r26)
++      stw     %r0, oUC_LINK(%r26)
++      stw     %r1, oSS_SP(%r26)  /* New %sp.  */
++      stw     %r0, oSS_FLAGS(%r26)
++      stw     %r0, oSS_SIZE(%r26)
++
++      stw     %r0, oSC_FLAGS(%r26)
++
++      stw     %r0, oIASQ0(%r26)
++      stw     %r0, oIASQ1(%r26)
++      stw     %r0, oIAOQ0(%r26)
++      stw     %r0, oIAOQ1(%r26)
++      stw     %r0, oSAR(%r26)
++
++      /* Store floating-point regs.  */
++      /* fstd %fr0, oFP0(%r26)  */
++
++
++      /* Prologue */
++      stwm    %r4, 64(%r30)
++#ifdef PIC
++      stw     %r19, -32(%r30)
++#endif
++
++      /* Save the current signal mask.  */
++      /* sigprocmask(SIG_BLOCK, NULL, &ucp->uc_sigmask);  */
++      ldo     oSIGMASK(%r26), %r24
++      copy    %r0, %r25
++      bl      sigprocmask, %r2
++      ldi     SIG_BLOCK, %r26
++
++      /* Epilogue */
++      ldw     -84(%r30), %r2
++#ifdef PIC
++      ldw     -96(%r30), %r19
++#endif
++      bv      %r0(%r2)
++      ldwm    -64(%r30), %r4
++END(__getcontext)
++
++weak_alias (__getcontext, getcontext)
+diff -up ports/sysdeps/unix/sysv/linux/hppa/makecontext.c.org 
ports/sysdeps/unix/sysv/linux/hppa/makecontext.c
+--- ports/sysdeps/unix/sysv/linux/hppa/makecontext.c.org       2008-07-16 
21:41:02.000000000 +0200
++++ ports/sysdeps/unix/sysv/linux/hppa/makecontext.c   2008-07-16 
22:16:29.000000000 +0200
+@@ -0,0 +1,79 @@
++/* Create new context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Helge Deller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <libintl.h>
++#include <stdarg.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <sysdep.h>
++#include <ucontext.h>
++
++/* XXX: This implementation only handles integer arguments.  */
++
++void
++__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
++{
++  unsigned int *sp;
++  va_list ap;
++  int i;
++
++  if (argc > 8)
++    {
++      fprintf (stderr, _("\
++makecontext: does not know how to handle more than 8 arguments\n"));
++      exit (-1);
++    }
++
++  /* Generate room on stack for parameter if needed and uc_link.  */
++  sp = (unsigned int *) ucp->uc_stack.ss_sp;
++
++  /* Address to jump to.  */
++  ucp->uc_mcontext.sc_gr[2] = (unsigned long) func;
++
++  va_start (ap, argc);
++  /* Handle arguments.  */
++  for (i = 0; i < argc; ++i)
++    switch (i)
++      {
++      case 0:
++      case 1:
++      case 2:
++      case 3:
++              ucp->uc_mcontext.sc_gr[26-i] = va_arg (ap, int);
++      break;
++      case 4:
++      case 5:
++      case 6:
++      case 7:
++      if (sizeof(unsigned long) == 4) {
++              /* 32bit: put arg7-arg4 on stack.  */
++              sp[7-i] = va_arg (ap, int);
++      } else {
++              /* 64bit: r19-r22 are arg7-arg4.  */
++              ucp->uc_mcontext.sc_gr[22+4-i] = va_arg (ap, int);
++      }
++      break;
++      }
++  va_end (ap);
++
++}
++
++
++weak_alias(__makecontext, makecontext)
+diff -up ports/sysdeps/unix/sysv/linux/hppa/setcontext.S.org 
ports/sysdeps/unix/sysv/linux/hppa/setcontext.S
+--- ports/sysdeps/unix/sysv/linux/hppa/setcontext.S.org        2008-07-16 
22:29:10.000000000 +0200
++++ ports/sysdeps/unix/sysv/linux/hppa/setcontext.S    2008-07-18 
23:34:23.000000000 +0200
+@@ -0,0 +1,124 @@
++/* Install given context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Helge Deller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++
++ENTRY(__setcontext)
++      /* Prologue */
++      stwm    %r3, 64(%r30)
++#ifdef PIC
++      stw     %r19, -32(%r30)
++#endif
++
++      /* Save ucp.  */
++      copy    %r26, %r3
++
++L(_again):
++      /* Set the current signal mask.  */
++      /* sigprocmask(SIG_BLOCK, &ucp->uc_sigmask, NULL);  */
++      copy    %r0, %r24
++      ldo     oSIGMASK(%r3), %r25
++      bl      sigprocmask, %r2
++      ldi     SIG_SETMASK, %r26
++
++      comib,<> 0,%ret0,L(_error)
++      nop
++
++      /* Save %sp, %dp.  */
++      copy    %sp, %r4
++      copy    %dp, %r5
++      copy    %r19, %r6
++
++      /* Get the registers.  */
++      ldw     oR1(%r3), %r1
++      ldw     oR2(%r3), %r2
++      /* ldw  oR3(%r3), %r3 - used for ucp pointer.   */
++      /* ldw  oR4(%r3), %r4 - used for original %sp.  */
++      /* ldw  oR5(%r3), %r5 - used for %dp / %r27.    */
++      /* ldw  oR6(%r3), %r6 - used for %r19.          */
++      ldw     oR7(%r3), %r7
++      ldw     oR8(%r3), %r8
++      ldw     oR9(%r3), %r9
++      ldw     oR10(%r3), %r10
++      ldw     oR11(%r3), %r11
++      ldw     oR12(%r3), %r12
++      ldw     oR13(%r3), %r13
++      ldw     oR14(%r3), %r14
++      ldw     oR15(%r3), %r15
++      ldw     oR16(%r3), %r16
++      ldw     oR17(%r3), %r17
++      ldw     oR18(%r3), %r18
++      ldw     oR19(%r3), %r19
++      ldw     oR20(%r3), %r20
++      ldw     oR21(%r3), %r21
++      /* ldw  oR22(%r3), %r22 - dyncall arg.  */
++      ldw     oR23(%r3), %r23
++      ldw     oR24(%r3), %r24
++      ldw     oR25(%r3), %r25
++      ldw     oR26(%r3), %r26
++      ldw     oR27(%r3), %r27
++      ldw     oR28(%r3), %r28
++      ldw     oR29(%r3), %r29
++      ldw     oR30(%r3), %r30
++      ldw     oR31(%r3), %r31
++
++      /* Restore floating-point registers.  */
++      /* fldd oFP0(%r3),%fr0  */
++
++
++      /* Calculate new stack pointer.  */
++      ldw     oSS_SP(%r3), %sp
++      ldo     64(%sp), %sp
++
++      /* Call function.  */
++      copy    %r2, %r22
++      bl      $$dyncall, %r31
++      copy    %r31, %r2
++
++      /* We return here. Get new ucp in %r3, reload %sp.  */
++      ldw     oUC_LINK(%r3), %r3
++      copy    %r4, %sp
++      copy    %r5, %dp
++      copy    %r6, %r19
++
++      /* If ucp == NULL then exit().  */
++      comib,<> 0,%r3,L(_again)
++      nop
++
++      /* If we looped through all uc_link contexts, exit now.  */
++      bl      _exit, %r2
++      ldi     -1, %r26
++      
++
++L(_error):
++      /* Epilogue */
++      ldw     -84(%r30), %r2
++#ifdef PIC
++      ldw     -96(%r30), %r19
++#endif
++      bv      %r0(%r2)
++      ldwm    -64(%r30), %r3
++L(pseudo_end):
++PSEUDO_END(__setcontext)
++
++weak_alias(__setcontext, setcontext)
+diff -up ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c.org 
ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c
+--- ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c.org       2008-07-17 
00:37:11.000000000 +0200
++++ ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c   2008-07-18 
23:07:15.000000000 +0200
+@@ -0,0 +1,66 @@
++/* swap to new context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Helge Deller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <ucontext.h>
++
++extern int __getcontext (ucontext_t *ucp);
++extern int __setcontext (const ucontext_t *ucp);
++
++int
++__swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
++{
++  extern void __swapcontext_ret (void);
++
++  /* Save the current machine context to oucp.  */
++  __getcontext (oucp);
++
++  /* uc_flags helps to skip the __setcontext call on reactivation.  */
++  if (++oucp->uc_flags == 1) {
++      /* Temporarily save a few registers in r23-r26 which would be
++       * overwritten by setcontext(). Set up the jump to __swapcontext_ret,
++       * where the registers will be restored and then returned to the
++       * above uc_flags == 1 test.  */
++      oucp->uc_mcontext.sc_gr[20] = oucp->uc_mcontext.sc_gr[2];
++      oucp->uc_mcontext.sc_gr[2] = (unsigned long) __swapcontext_ret;
++      oucp->uc_mcontext.sc_gr[23] = oucp->uc_mcontext.sc_gr[3];
++      oucp->uc_mcontext.sc_gr[24] = oucp->uc_mcontext.sc_gr[4];
++      oucp->uc_mcontext.sc_gr[25] = oucp->uc_mcontext.sc_gr[5];
++      oucp->uc_mcontext.sc_gr[26] = oucp->uc_mcontext.sc_gr[6];
++
++      /* Restore the machine context in ucp.  */
++      __setcontext (ucp);
++  }
++  return 0;
++}
++
++asm ("                                                        \n\
++      .text                                           \n\
++      .type   __swapcontext_ret, #function            \n\
++__swapcontext_ret:                                    \n\
++      copy    %r23, %r3                               \n\
++      copy    %r24, %r4                               \n\
++      copy    %r25, %r5                               \n\
++      copy    %r26, %r6                               \n\
++      bv      0(%r20)                                 \n\
++      copy    %r0, %ret0                              \n\
++      .size   __swapcontext_ret, .-__swapcontext_ret  \n\
++     ");
++
++weak_alias (__swapcontext, swapcontext)
+diff -up ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym.org 
ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym
+--- ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym.org      2008-07-16 
19:27:46.000000000 +0200
++++ ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym  2008-07-18 
23:17:07.000000000 +0200
+@@ -0,0 +1,90 @@
++#include <stddef.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++
++--
++
++SIG_BLOCK
++SIG_SETMASK
++
++#define ucontext(member)      offsetof (ucontext_t, member)
++#define mcontext(member)      ucontext (uc_mcontext.member)
++#define mreg(reg)             mcontext (sc_gr[reg])
++
++oUC_FLAGS     ucontext (uc_flags)
++oUC_LINK      ucontext (uc_link)
++oSS_SP                ucontext (uc_stack.ss_sp)
++oSS_FLAGS     ucontext (uc_stack.ss_flags)
++oSS_SIZE      ucontext (uc_stack.ss_size)
++oSC_FLAGS     mcontext (sc_flags)
++oR0           mreg (0)
++oR1           mreg (1)
++oR2           mreg (2)
++oR3           mreg (3)
++oR4           mreg (4)
++oR5           mreg (5)
++oR6           mreg (6)
++oR7           mreg (7)
++oR8           mreg (8)
++oR9           mreg (9)
++oR10          mreg (10)
++oR11          mreg (11)
++oR12          mreg (12)
++oR13          mreg (13)
++oR14          mreg (14)
++oR15          mreg (15)
++oR16          mreg (16)
++oR17          mreg (17)
++oR18          mreg (18)
++oR19          mreg (19)
++oR20          mreg (20)
++oR21          mreg (21)
++oR22          mreg (22)
++oR23          mreg (23)
++oR24          mreg (24)
++oR25          mreg (25)
++oR26          mreg (26)
++oR27          mreg (27)
++oR28          mreg (28)
++oR29          mreg (29)
++oR30          mreg (30)
++oR31          mreg (31)
++oFPREGS               mcontext (sc_fr)
++oFP0          mcontext (sc_fr[0])
++oFP1          mcontext (sc_fr[1])
++oFP2          mcontext (sc_fr[2])
++oFP3          mcontext (sc_fr[3])
++oFP4          mcontext (sc_fr[4])
++oFP5          mcontext (sc_fr[5])
++oFP6          mcontext (sc_fr[6])
++oFP7          mcontext (sc_fr[7])
++oFP8          mcontext (sc_fr[8])
++oFP9          mcontext (sc_fr[9])
++oFP10         mcontext (sc_fr[10])
++oFP11         mcontext (sc_fr[11])
++oFP12         mcontext (sc_fr[12])
++oFP13         mcontext (sc_fr[13])
++oFP14         mcontext (sc_fr[14])
++oFP15         mcontext (sc_fr[15])
++oFP16         mcontext (sc_fr[16])
++oFP17         mcontext (sc_fr[17])
++oFP18         mcontext (sc_fr[18])
++oFP19         mcontext (sc_fr[19])
++oFP20         mcontext (sc_fr[20])
++oFP21         mcontext (sc_fr[21])
++oFP22         mcontext (sc_fr[22])
++oFP23         mcontext (sc_fr[23])
++oFP24         mcontext (sc_fr[24])
++oFP25         mcontext (sc_fr[25])
++oFP26         mcontext (sc_fr[26])
++oFP27         mcontext (sc_fr[27])
++oFP28         mcontext (sc_fr[28])
++oFP29         mcontext (sc_fr[29])
++oFP30         mcontext (sc_fr[30])
++oFP31         mcontext (sc_fr[31])
++oIASQ0                mcontext (sc_iasq[0])
++oIASQ1                mcontext (sc_iasq[1])
++oIAOQ0                mcontext (sc_iaoq[0])
++oIAOQ1                mcontext (sc_iaoq[1])
++oSAR          mcontext (sc_sar)
++oSIGMASK      ucontext (uc_sigmask)

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series   2008-08-07 02:16:08 UTC (rev 
3038)
+++ glibc-package/trunk/debian/patches/series   2008-08-07 07:25:26 UTC (rev 
3039)
@@ -75,6 +75,7 @@
 hppa/local-inlining.diff -p0
 hppa/local-linuxthreads.diff -p0
 hppa/local-linuxthreads-gscope.diff -p0
+patches/hppa/local-context.diff -p0
 
 hurd-i386/local-dl-dynamic-weak.diff 
 hurd-i386/local-enable-ldconfig.diff -p0
@@ -135,6 +136,7 @@
 sh4/local-fpscr_values.diff -p0
 sh4/cvs-nptl-private-futexes.diff -p0
 
+sparc/cvs-context.diff -p1
 sparc/local-fork.diff -p0
 sparc/local-sparcv9-target.diff -p0
 sparc/submitted-timing.diff 

Added: glibc-package/trunk/debian/patches/sparc/cvs-context.diff
===================================================================
--- glibc-package/trunk/debian/patches/sparc/cvs-context.diff                   
        (rev 0)
+++ glibc-package/trunk/debian/patches/sparc/cvs-context.diff   2008-08-07 
07:25:26 UTC (rev 3039)
@@ -0,0 +1,532 @@
+2008-05-01  David S. Miller  <[EMAIL PROTECTED]>
+ 
+       * sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym: New file.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/Makefile [$(subdir) = stdlib]:
+       (gen-as-const-headers): Add it.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S: New file.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S: Likewise.
+       
+diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile 
b/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile
+index cd1b3fb..8f7e76b 100644
+--- a/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile
++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile
+@@ -2,6 +2,10 @@ asm-CPPFLAGS = -D__ASSEMBLY__
+ ASFLAGS-.os += -fPIC
+ LD += -melf32_sparc
+ 
++ifeq ($(subdir),stdlib)
++gen-as-const-headers += ucontext_i.sym
++endif
++
+ # When I get this to work, this is the right thing
+ ifeq ($(subdir),elf)
+ CFLAGS-rtld.c += -mcpu=v8
+diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S 
b/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S
+new file mode 100644
+index 0000000..f8664a7
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S
+@@ -0,0 +1,85 @@
++/* Save current context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by David S. Miller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++
++#include "ucontext_i.h"
++
++/*  int __getcontext (ucontext_t *ucp)
++
++  Saves the machine context in UCP such that when it is activated,
++  it appears as if __getcontext() returned again.
++
++  This implementation is intended to be used for *synchronous* context
++  switches only.  Therefore, it does not have to save anything
++  other than the PRESERVED state.  */
++
++
++ENTRY(__getcontext)
++      save    %sp, -112, %sp
++      st      %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PSR]
++
++      /* In reality, we only use the GREG_PC value when setting
++         or swapping contexts.  But we fill in NPC for completeness.  */
++      add     %i7, 8, %o0
++      st      %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PC]
++      add     %o0, 4, %o0
++      st      %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_NPC]
++
++      rd      %y, %o1
++      st      %o1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y]
++
++      st      %g1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G1]
++      st      %g2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2]
++      st      %g3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3]
++      st      %g4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4]
++      st      %g5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5]
++      st      %g6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6]
++      st      %g7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7]
++
++      mov     SIG_BLOCK, %o0
++      clr     %o1
++      add     %i0, UC_SIGMASK, %o2
++      mov     8, %o3
++      mov     __NR_rt_sigprocmask, %g1
++      ta      0x10
++
++      /* Zero, success, return value.  */
++      st      %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O0]
++      st      %i1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1]
++      st      %i2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2]
++      st      %i3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3]
++      st      %i4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4]
++      st      %i5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5]
++      st      %i6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6]
++      st      %i7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O7]
++
++      st      %g0, [%i0 + UC_MCONTEXT + MC_GWINS]
++
++      /* Do not save FPU state, it is volatile across calls.  */
++      stb     %g0, [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN]
++
++      st      %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_ID]
++      st      %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_PTR]
++      jmpl    %i7 + 8, %g0
++       restore %g0, %g0, %o0
++END(__getcontext)
++
++weak_alias (__getcontext, getcontext)
+diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c 
b/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c
+new file mode 100644
+index 0000000..9b48dad
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c
+@@ -0,0 +1,93 @@
++/* Create new context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by David S. Miller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++#include <stdarg.h>
++#include <stdint.h>
++#include <ucontext.h>
++
++/* Sets up the outgoing arguments and the program counter for a user
++   context for the requested function call.
++
++   Returning to the correct parent context is pretty simple on
++   Sparc.  We only need to link up the register windows correctly.
++   Since global registers are clobbered by calls, we need not be
++   concernred about those, and thus is all could be worked out without
++   using a trampoline.
++
++   Except that we must deal with the signal mask, thus a trampoline
++   is unavoidable. 32-bit stackframe layout:
++            +-----------------------------------------+
++            | 7th and further parameters              |
++            +-----------------------------------------+
++            | backup storage for initial 6 parameters |
++            +-----------------------------------------+
++            | struct return pointer                   |
++            +-----------------------------------------+
++            | 8 incoming registers                    |
++            +-----------------------------------------+
++            | 8 local registers                       |
++     %sp -->  +-----------------------------------------+
++
++*/
++
++void
++__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
++{
++  extern void __start_context (void);
++  unsigned long int *sp;
++  va_list ap;
++  int i;
++
++  sp = (unsigned long int *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
++  sp -= 16 + 7 + argc;
++  sp = (unsigned long int *) (((uintptr_t) sp) & ~(8 - 1));
++
++  for (i = 0; i < 8; i++)
++    sp[i + 8] = ucp->uc_mcontext.gregs[REG_O0 + i];
++
++  /* The struct return pointer is essentially unused, so we can
++     place the link there.  */
++  sp[16] = (unsigned long int) ucp->uc_link;
++
++  va_start (ap, argc);
++
++  /* Fill in outgoing arguments, including those which will
++     end up being passed on the stack.  */
++  for (i = 0; i < argc; i++)
++    {
++      unsigned long int arg = va_arg (ap, unsigned long int);
++      if (i < 6)
++      ucp->uc_mcontext.gregs[REG_O0 + i] = arg;
++      else
++      sp[i + 23] = arg;
++    }
++
++  va_end (ap);
++
++  ucp->uc_mcontext.gregs[REG_O6] = (unsigned long int) sp;
++
++  ucp->uc_mcontext.gregs[REG_O7] = ((unsigned long int) __start_context) - 8;
++
++  ucp->uc_mcontext.gregs[REG_PC] = (unsigned long int) func;
++  ucp->uc_mcontext.gregs[REG_nPC] = ucp->uc_mcontext.gregs[REG_PC] + 4;
++}
++
++weak_alias (__makecontext, makecontext)
+diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S 
b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S
+new file mode 100644
+index 0000000..33e40ac
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S
+@@ -0,0 +1,119 @@
++/* Install given context.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by David S. Miller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++#include <sys/trap.h>
++
++#include "ucontext_i.h"
++
++
++/*  int __setcontext (const ucontext_t *ucp)
++
++  Restores the machine context in UCP and thereby resumes execution
++  in that context.
++
++  This implementation is intended to be used for *synchronous* context
++  switches only.  Therefore, it does not have to restore anything
++  other than the PRESERVED state.  */
++
++ENTRY(__setcontext)
++      save    %sp, -112, %sp
++
++      mov     SIG_SETMASK, %o0
++      add     %i0, UC_SIGMASK, %o1
++      clr     %o2
++      mov     8, %o3
++      mov     __NR_rt_sigprocmask, %g1
++      ta      0x10
++
++      /* This is a bit on the expensive side, and we could optimize
++         the unwind similar to how the 32-bit sparc longjmp code
++         does if performance of this routine really matters.  */
++      ta      ST_FLUSH_WINDOWS
++
++      ldub    [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN], %g1
++      cmp     %g1, 0
++      be      1f
++       nop
++      ld      [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_FSR], %fsr
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D0], %f0
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D2], %f2
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D4], %f4
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D6], %f6
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D8], %f8
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D10], %f10
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D12], %f12
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D14], %f14
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D16], %f16
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D18], %f18
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D20], %f20
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D22], %f22
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D24], %f24
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D26], %f26
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D28], %f28
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D30], %f30
++1:
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y], %g1
++      wr      %g1, 0x0, %y
++
++      /* We specifically do not restore %g1 since we need it here as
++         a temporary.  */
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2], %g2
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3], %g3
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4], %g4
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5], %g5
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6], %g6
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7], %g7
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1], %i1
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2], %i2
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3], %i3
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4], %i4
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5], %i5
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6], %i6
++      restore
++      ld      [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O7], %o7
++      ld      [%o0 + UC_MCONTEXT + MC_GREGS + GREG_PC], %g1
++      jmpl    %g1, %g0
++       ld     [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O0], %o0
++END(__setcontext)
++
++weak_alias (__setcontext, setcontext)
++
++/* This is the helper code which gets called if a function which is
++   registered with 'makecontext' returns.  In this case we have to
++   install the context listed in the uc_link element of the context
++   'makecontext' manipulated at the time of the 'makecontext' call.
++   If the pointer is NULL the process must terminate.  */
++
++ENTRY(__start_context)
++      ld      [%sp + (16 * 4)], %g1
++      cmp     %g1, 0
++      be,a    1f
++       clr    %o0
++      call    __setcontext
++       mov    %g1, %o0
++      /* If this returns (which can happen if the syscall fails) we'll
++         exit the program with the return error value (-1).  */
++1:    call    exit
++       nop
++      /* The 'exit' call should never return.  In case it does cause
++         the process to terminate.  */
++      unimp
++END(__start_context)
+diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S 
b/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S
+new file mode 100644
+index 0000000..1547466
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S
+@@ -0,0 +1,119 @@
++/* Save current context and install the given one.
++   Copyright (C) 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by David S. Miller <[EMAIL PROTECTED]>, 2008.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++#include <sys/trap.h>
++
++#include "ucontext_i.h"
++
++
++/* int __swapcontext (ucontext_t *oucp, const ucontext_t *ucp);
++
++  Saves the machine context in oucp such that when it is activated,
++  it appears as if __swapcontext() returned again, restores the
++  machine context in ucp and thereby resumes execution in that
++  context.
++
++  This implementation is intended to be used for *synchronous* context
++  switches only.  Therefore, it does not have to save anything
++  other than the PRESERVED state.  */
++
++ENTRY(__swapcontext)
++      save    %sp, -112, %sp
++      ta      ST_FLUSH_WINDOWS
++      st      %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PSR]
++      add     %i7, 8, %o0
++      st      %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PC]
++      add     %o0, 4, %o0
++      st      %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_NPC]
++      rd      %y, %o1
++      st      %o1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y]
++      st      %g1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G1]
++      st      %g2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2]
++      st      %g3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3]
++      st      %g4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4]
++      st      %g5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5]
++      st      %g6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6]
++      st      %g7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7]
++      st      %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O0]
++      st      %i1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1]
++      st      %i2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2]
++      st      %i3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3]
++      st      %i4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4]
++      st      %i5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5]
++      st      %i6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6]
++      st      %i7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O7]
++      st      %g0, [%i0 + UC_MCONTEXT + MC_GWINS]
++      stb     %g0, [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN]
++      st      %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_ID]
++      st      %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_PTR]
++
++      mov     SIG_SETMASK, %o0
++      add     %i1, UC_SIGMASK, %o1
++      add     %i0, UC_SIGMASK, %o2
++      mov     8, %o3
++      mov     __NR_rt_sigprocmask, %g1
++      ta      0x10
++
++      mov     %i1, %i0
++      ldub    [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN], %g1
++      cmp     %g1, 0
++      be      1f
++       nop
++      ld      [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_FSR], %fsr
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D0], %f0
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D2], %f2
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D4], %f4
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D6], %f6
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D8], %f8
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D10], %f10
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D12], %f12
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D14], %f14
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D16], %f16
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D18], %f18
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D20], %f20
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D22], %f22
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D24], %f24
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D26], %f26
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D28], %f28
++      ldd     [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D30], %f30
++1:
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y], %g1
++      wr      %g1, 0x0, %y
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2], %g2
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3], %g3
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4], %g4
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5], %g5
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6], %g6
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7], %g7
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1], %i1
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2], %i2
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3], %i3
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4], %i4
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5], %i5
++      ld      [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6], %i6
++      restore
++      ld      [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O7], %o7
++      ld      [%o0 + UC_MCONTEXT + MC_GREGS + GREG_PC], %g1
++      jmpl    %g1, %g0
++       ld     [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O0], %o0
++END(__swapcontext)
++
++weak_alias (__swapcontext, swapcontext)
+diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym 
b/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
+new file mode 100644
+index 0000000..544030c
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
+@@ -0,0 +1,61 @@
++#include <stddef.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++
++--
++
++SIG_BLOCK
++SIG_SETMASK
++
++UC_FLAGS      offsetof (ucontext_t, uc_flags)
++UC_LINK               offsetof (ucontext_t, uc_link)
++UC_SIGMASK    offsetof (ucontext_t, uc_sigmask)
++UC_STACK      offsetof (ucontext_t, uc_stack)
++UC_MCONTEXT   offsetof (ucontext_t, uc_mcontext)
++MC_GREGS      offsetof (mcontext_t, gregs)
++MC_GWINS      offsetof (mcontext_t, gwins)
++MC_FPREGS     offsetof (mcontext_t, fpregs)
++MC_XRS                offsetof (mcontext_t, xrs)
++MC_FILLER     offsetof (mcontext_t, filler)
++GREG_PSR      (REG_PSR * sizeof(greg_t))
++GREG_PC               (REG_PC * sizeof(greg_t))
++GREG_NPC      (REG_nPC * sizeof(greg_t))
++GREG_Y                (REG_Y * sizeof(greg_t))
++GREG_G1               (REG_G1 * sizeof(greg_t))
++GREG_G2               (REG_G2 * sizeof(greg_t))
++GREG_G3               (REG_G3 * sizeof(greg_t))
++GREG_G4               (REG_G4 * sizeof(greg_t))
++GREG_G5               (REG_G5 * sizeof(greg_t))
++GREG_G6               (REG_G6 * sizeof(greg_t))
++GREG_G7               (REG_G7 * sizeof(greg_t))
++GREG_O0               (REG_O0 * sizeof(greg_t))
++GREG_O1               (REG_O1 * sizeof(greg_t))
++GREG_O2               (REG_O2 * sizeof(greg_t))
++GREG_O3               (REG_O3 * sizeof(greg_t))
++GREG_O4               (REG_O4 * sizeof(greg_t))
++GREG_O5               (REG_O5 * sizeof(greg_t))
++GREG_O6               (REG_O6 * sizeof(greg_t))
++GREG_O7               (REG_O7 * sizeof(greg_t))
++FPU_D0                offsetof (fpregset_t, fpu_fr.fpu_dregs[0])
++FPU_D2                offsetof (fpregset_t, fpu_fr.fpu_dregs[1])
++FPU_D4                offsetof (fpregset_t, fpu_fr.fpu_dregs[2])
++FPU_D6                offsetof (fpregset_t, fpu_fr.fpu_dregs[3])
++FPU_D8                offsetof (fpregset_t, fpu_fr.fpu_dregs[4])
++FPU_D10               offsetof (fpregset_t, fpu_fr.fpu_dregs[5])
++FPU_D12               offsetof (fpregset_t, fpu_fr.fpu_dregs[6])
++FPU_D14               offsetof (fpregset_t, fpu_fr.fpu_dregs[7])
++FPU_D16               offsetof (fpregset_t, fpu_fr.fpu_dregs[8])
++FPU_D18               offsetof (fpregset_t, fpu_fr.fpu_dregs[9])
++FPU_D20               offsetof (fpregset_t, fpu_fr.fpu_dregs[10])
++FPU_D22               offsetof (fpregset_t, fpu_fr.fpu_dregs[11])
++FPU_D24               offsetof (fpregset_t, fpu_fr.fpu_dregs[12])
++FPU_D26               offsetof (fpregset_t, fpu_fr.fpu_dregs[13])
++FPU_D28               offsetof (fpregset_t, fpu_fr.fpu_dregs[14])
++FPU_D30               offsetof (fpregset_t, fpu_fr.fpu_dregs[15])
++FPU_Q         offsetof (fpregset_t, fpu_q)
++FPU_FSR               offsetof (fpregset_t, fpu_fsr)
++FPU_QCNT      offsetof (fpregset_t, fpu_qcnt)
++FPU_Q_ENTRY_SZ        offsetof (fpregset_t, fpu_q_entrysize)
++FPU_EN                offsetof (fpregset_t, fpu_en)
++XRS_ID                offsetof (xrs_t, xrs_id)
++XRS_PTR               offsetof (xrs_t, xrs_ptr)


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to