about summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/bsd/osf/bits/sigaction.h8
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/bits/sigaction.h24
-rw-r--r--sysdeps/unix/sysv/linux/bits/sigaction.h26
-rw-r--r--sysdeps/unix/sysv/linux/if_index.c17
-rw-r--r--sysdeps/unix/sysv/linux/m68k/bits/mman.h75
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/sigaction.h28
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/sigaction.h29
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/Dist (renamed from sysdeps/unix/sysv/linux/sparc/Dist)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/Makefile (renamed from sysdeps/unix/sysv/linux/sparc/Makefile)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S (renamed from sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/bits/mman.h (renamed from sysdeps/unix/sysv/linux/sparc/bits/mman.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/brk.c (renamed from sysdeps/unix/sysv/linux/sparc/brk.c)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (renamed from sysdeps/unix/sysv/linux/sparc/clone.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/fork.S (renamed from sysdeps/unix/sysv/linux/sparc/fork.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h (renamed from sysdeps/unix/sysv/linux/sparc/init-first.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h (renamed from sysdeps/unix/sysv/linux/sparc/kernel_stat.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S (renamed from sysdeps/unix/sysv/linux/sparc/pipe.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h (renamed from sysdeps/unix/sysv/linux/sparc/profil-counter.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c (renamed from sysdeps/unix/sysv/linux/sparc/sigaction.c)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/socket.S (renamed from sysdeps/unix/sysv/linux/sparc/socket.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S (renamed from sysdeps/unix/sysv/linux/sparc/syscall.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list (renamed from sysdeps/unix/sysv/linux/sparc/syscalls.list)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.S (renamed from sysdeps/unix/sysv/linux/sparc/sysdep.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (renamed from sysdeps/unix/sysv/linux/sparc/sysdep.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/Dist (renamed from sysdeps/unix/sysv/linux/sparc64/Dist)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/Makefile (renamed from sysdeps/unix/sysv/linux/sparc64/Makefile)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S (renamed from sysdeps/unix/sysv/linux/sparc64/__longjmp.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bits/mman.h (renamed from sysdeps/unix/sysv/linux/sparc64/bits/mman.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h (renamed from sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h (renamed from sysdeps/unix/sysv/linux/sparc64/bits/types.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/brk.S (renamed from sysdeps/unix/sysv/linux/sparc64/brk.S)6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (renamed from sysdeps/unix/sysv/linux/sparc64/clone.S)10
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/fork.S (renamed from sysdeps/unix/sysv/linux/sparc64/fork.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S (renamed from sysdeps/unix/sysv/linux/sparc64/getcontext.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h (renamed from sysdeps/unix/sysv/linux/sparc64/init-first.h)50
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h (renamed from sysdeps/unix/sysv/linux/sparc64/kernel_stat.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S (renamed from sysdeps/unix/sysv/linux/sparc64/longjmp.S)2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S (renamed from sysdeps/unix/sysv/linux/sparc64/pipe.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h (renamed from sysdeps/unix/sysv/linux/sparc64/profil-counter.h)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S (renamed from sysdeps/unix/sysv/linux/sparc64/setcontext.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S (renamed from sysdeps/unix/sysv/linux/sparc64/setjmp.S)19
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S (renamed from sysdeps/unix/sysv/linux/sparc64/sigjmp.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S39
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (renamed from sysdeps/unix/sysv/linux/sparc64/syscalls.list)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.S (renamed from sysdeps/unix/sysv/linux/sparc64/sysdep.S)0
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h (renamed from sysdeps/unix/sysv/linux/sparc64/sysdep.h)68
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h (renamed from sysdeps/unix/sysv/linux/sparc64/ucontext.h)0
-rw-r--r--sysdeps/unix/sysv/minix/bits/sigaction.h16
-rw-r--r--sysdeps/unix/sysv/sysv4/bits/sigaction.h12
52 files changed, 298 insertions, 135 deletions
diff --git a/sysdeps/unix/bsd/osf/bits/sigaction.h b/sysdeps/unix/bsd/osf/bits/sigaction.h
index df400d4aaa..56e28a04fb 100644
--- a/sysdeps/unix/bsd/osf/bits/sigaction.h
+++ b/sysdeps/unix/bsd/osf/bits/sigaction.h
@@ -1,5 +1,5 @@
 /* Structure and constant definitions for sigaction et al.  OSF/1 version.
-   Copyright (C) 1993, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Brendan Kehoe (brendan@zen.org).
 
@@ -33,9 +33,9 @@ struct sigaction
 
 /* Bits in `sa_flags'.  */
 #ifdef	__USE_BSD
-#define	SA_ONSTACK	0x1	/* Take signal on signal stack.  */
-#define	SA_RESTART	0x2	/* Don't restart syscall on signal return.  */
-#define	SA_DISABLE	0x4	/* Disable alternate signal stack.  */
+# define SA_ONSTACK	0x1	/* Take signal on signal stack.  */
+# define SA_RESTART	0x2	/* Restart syscall on signal return.  */
+# define SA_DISABLE	0x4	/* Disable alternate signal stack.  */
 #endif
 #define	SA_NOCLDSTOP	0x4	/* Don't send SIGCHLD when children stop.  */
 
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index ed9ae873fd..ea1ab49fd4 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -11,7 +11,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \
 		  sys/module.h sys/io.h sys/klog.h sys/kdaemon.h \
 		  sys/user.h sys/sysmacros.h sys/procfs.h \
 		  sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h \
-		  sys/quota.h sys/fsuid.h
+		  sys/quota.h sys/fsuid.h bits/mman.h
 
 install-others += $(inst_includedir)/bits/syscall.h
 
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h
index e2e97bd70c..f28b6f256c 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h
@@ -31,21 +31,21 @@ struct sigaction
   };
 
 /* Bits in `sa_flags'.  */
-#define	SA_NOCLDSTOP 0x00000004	/* Don't send SIGCHLD when children stop.  */
+#define	SA_NOCLDSTOP  0x00000004 /* Don't send SIGCHLD when children stop.  */
 #ifdef __USE_MISC
-#define SA_STACK     0x00000001	/* Use signal stack by using `sa_restorer'.  */
-#define SA_RESTART   0x00000002	/* Don't restart syscall on signal return.  */
-#define SA_INTERRUPT 0x20000000	/* Historical no-op.  */
-#define SA_NOMASK    0x00000008	/* Don't automatically block the signal when
-				   its handler is being executed.  */
-#define SA_ONESHOT   0x00000010	/* Reset to SIG_DFL on entry to handler.  */
+# define SA_STACK     0x00000001 /* Use signal stack by using `sa_restorer'. */
+# define SA_RESTART   0x00000002 /* Restart syscall on signal return.  */
+# define SA_INTERRUPT 0x20000000 /* Historical no-op.  */
+# define SA_NOMASK    0x00000008 /* Don't automatically block the signal
+				    when its handler is being executed.  */
+# define SA_ONESHOT   0x00000010 /* Reset to SIG_DFL on entry to handler.  */
 
 /* Some aliases for the SA_ constants.  */
-#define SA_NODEFER	SA_NOMASK
-#define SA_RESETHAND	SA_ONESHOT
+# define SA_NODEFER   SA_NOMASK
+# define SA_RESETHAND SA_ONESHOT
 #endif
 
 /* Values for the HOW argument to `sigprocmask'.  */
-#define	SIG_BLOCK	1	/* Block signals.  */
-#define	SIG_UNBLOCK	2	/* Unblock signals.  */
-#define	SIG_SETMASK	3	/* Set the set of blocked signals.  */
+#define	SIG_BLOCK     1		 /* Block signals.  */
+#define	SIG_UNBLOCK   2		 /* Unblock signals.  */
+#define	SIG_SETMASK   3		 /* Set the set of blocked signals.  */
diff --git a/sysdeps/unix/sysv/linux/bits/sigaction.h b/sysdeps/unix/sysv/linux/bits/sigaction.h
index 13a6a03248..247b53499e 100644
--- a/sysdeps/unix/sysv/linux/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/bits/sigaction.h
@@ -1,5 +1,5 @@
 /* The proper definitions for Linux's sigaction.
-   Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -34,21 +34,21 @@ struct sigaction
   };
 
 /* Bits in `sa_flags'.  */
-#define	SA_NOCLDSTOP 1		/* Don't send SIGCHLD when children stop.  */
+#define	SA_NOCLDSTOP  1		 /* Don't send SIGCHLD when children stop.  */
 #ifdef __USE_MISC
-#define SA_STACK     0x08000000	/* Use signal stack by using `sa_restorer'.  */
-#define SA_RESTART   0x10000000	/* Don't restart syscall on signal return.  */
-#define SA_INTERRUPT 0x20000000	/* Historical no-op.  */
-#define SA_NODEFER   0x40000000	/* Don't automatically block the signal when
-				   its handler is being executed.  */
-#define SA_RESETHAND 0x80000000	/* Reset to SIG_DFL on entry to handler.  */
+# define SA_STACK     0x08000000 /* Use signal stack by using `sa_restorer'. */
+# define SA_RESTART   0x10000000 /* Restart syscall on signal return.  */
+# define SA_INTERRUPT 0x20000000 /* Historical no-op.  */
+# define SA_NODEFER   0x40000000 /* Don't automatically block the signal when
+				    its handler is being executed.  */
+# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler.  */
 
 /* Some aliases for the SA_ constants.  */
-#define SA_NOMASK	SA_NODEFER
-#define SA_ONESHOT	SA_RESETHAND
+# define SA_NOMASK    SA_NODEFER
+# define SA_ONESHOT   SA_RESETHAND
 #endif
 
 /* Values for the HOW argument to `sigprocmask'.  */
-#define	SIG_BLOCK	0	/* Block signals.  */
-#define	SIG_UNBLOCK	1	/* Unblock signals.  */
-#define	SIG_SETMASK	2	/* Set the set of blocked signals.  */
+#define	SIG_BLOCK     0		 /* Block signals.  */
+#define	SIG_UNBLOCK   1		 /* Unblock signals.  */
+#define	SIG_SETMASK   2		 /* Set the set of blocked signals.  */
diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
index f64fe1e1ca..615a81d14a 100644
--- a/sysdeps/unix/sysv/linux/if_index.c
+++ b/sysdeps/unix/sysv/linux/if_index.c
@@ -68,20 +68,21 @@ if_nametoindex (const char *ifname)
 {
 #ifndef SIOGIFINDEX
   __set_errno (ENOSYS);
+  return 0;
 #else
   struct ifreq ifr;
-  int rc;
   int fd = opensock ();
 
   if (fd < 0)
     return 0;
 
   strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
-  rc = ioctl (fd, SIOGIFINDEX, &ifr);
-  if (rc < 0)
+  if (ioctl (fd, SIOGIFINDEX, &ifr) < 0)
     {
+      int saved_errno = errno;
       close (fd);
-      __set_errno (rc == -EINVAL ? ENOSYS : -rc);
+      if (saved_errno == EINVAL)
+	__set_errno (ENOSYS);
       return 0;
     }
   close (fd);
@@ -109,7 +110,6 @@ if_nameindex (void)
   __set_errno (ENOSYS);
   return NULL;
 #else
-  int rc;
   int fd = opensock ();
   struct ifconf ifc;
   unsigned int rq_ifs = 4, nifs, i;
@@ -153,12 +153,13 @@ if_nameindex (void)
 	  goto jump;
 	}
       strcpy (idx[i].if_name, ifr->ifr_name);
-      rc = ioctl (fd, SIOGIFINDEX, ifr);
-      if (rc < 0)
+      if (ioctl (fd, SIOGIFINDEX, ifr) < 0)
 	{
+	  int saved_errno = errno;
 	  free (idx);
 	  idx = NULL;
-	  __set_errno (rc == -EINVAL ? ENOSYS : -rc);
+	  if (saved_errno == EINVAL)
+	    __set_errno (ENOSYS);
 	  goto jump;
 	}
       idx[i].if_index = ifr->ifr_ifindex;
diff --git a/sysdeps/unix/sysv/linux/m68k/bits/mman.h b/sysdeps/unix/sysv/linux/m68k/bits/mman.h
new file mode 100644
index 0000000000..d6c29d2176
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/m68k/bits/mman.h
@@ -0,0 +1,75 @@
+/* Definitions for POSIX memory map inerface.  Linux/m68k version.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never include this file directly.  Use <sys/mman.h> instead"
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ	0x1		/* Page can be read.  */
+#define PROT_WRITE	0x2		/* Page can be written.  */
+#define PROT_EXEC	0x4		/* Page can be executed.  */
+#define PROT_NONE	0x0		/* Page can not be accessed.  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED	0x01		/* Share changes.  */
+#define MAP_PRIVATE	0x02		/* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE	0
+# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
+# define MAP_ANON	MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN	0x0100		/* Stack-like segment.  */
+# define MAP_DENYWRITE	0x0800		/* ETXTBSY */
+# define MAP_EXECUTABLE	0x1000		/* Mark it as an executable.  */
+# define MAP_LOCKED	0x2000		/* Lock the mapping.  */
+# define MAP_NORESERVE	0x4000		/* Don't check for reservations.  */
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC	1		/* Sync memory asynchronously.  */
+#define MS_SYNC		4		/* Synchronous memory sync.  */
+#define MS_INVALIDATE	2		/* Invalidate the caches.  */
+
+/* Flags for `mlockall'.  */
+#define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
+#define MCL_FUTURE	2		/* Lock all additions to address
+					   space.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE	1
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
index 66c58cc540..d6f70f2a2e 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
@@ -39,24 +39,24 @@ struct sigaction
   };
 
 /* Bits in `sa_flags'.  */
-#define	SA_NOCLDSTOP 1		/* Don't send SIGCHLD when children stop.  */
+#define	SA_NOCLDSTOP  1		 /* Don't send SIGCHLD when children stop.  */
 #ifdef __USE_MISC
-#define SA_STACK     0x08000000	/* Use signal stack by using `sa_restorer'.  */
-#define SA_RESTART   0x10000000	/* Don't restart syscall on signal return.  */
-#define SA_INTERRUPT 0x20000000	/* Historical no-op.  */
-#define SA_NODEFER   0x40000000	/* Don't automatically block the signal when
-				   its handler is being executed.  */
-#define SA_RESETHAND 0x80000000	/* Reset to SIG_DFL on entry to handler.  */
+# define SA_STACK     0x08000000 /* Use signal stack by using `sa_restorer'. */
+# define SA_RESTART   0x10000000 /* Restart syscall on signal return.  */
+# define SA_INTERRUPT 0x20000000 /* Historical no-op.  */
+# define SA_NODEFER   0x40000000 /* Don't automatically block the signal when
+				    its handler is being executed.  */
+# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler.  */
 
 /* Some aliases for the SA_ constants.  */
-#define SA_NOMASK	SA_NODEFER
-#define SA_ONESHOT	SA_RESETHAND
+# define SA_NOMASK    SA_NODEFER
+# define SA_ONESHOT   SA_RESETHAND
 #endif
 
 /* Values for the HOW argument to `sigprocmask'.  */
-#define SIG_NOP		0	/* 0 is unused to catch errors */
-#define	SIG_BLOCK	1	/* Block signals.  */
-#define	SIG_UNBLOCK	2	/* Unblock signals.  */
-#define	SIG_SETMASK	3	/* Set the set of blocked signals.  */
-#define SIG_SETMASK32	256	/* Goodie from SGI for BSD compatibility:
+#define SIG_NOP	      0		/* 0 is unused to catch errors */
+#define	SIG_BLOCK     1		/* Block signals.  */
+#define	SIG_UNBLOCK   2		/* Unblock signals.  */
+#define	SIG_SETMASK   3		/* Set the set of blocked signals.  */
+#define SIG_SETMASK32 256	/* Goodie from SGI for BSD compatibility:
 				   set only the low 32 bit of the sigset.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
index 19aa7e39cb..13471995b9 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h
@@ -27,26 +27,29 @@ struct sigaction
     __sigset_t sa_mask;
 
     /* Special flags.  */
-    unsigned int sa_flags;
+    unsigned long sa_flags;
+
+    /* Not used by Linux/Sparc yet.  */
+    void (*sa_restorer)(void);
   };
 
 
 /* Bits in `sa_flags'.  */
-#define	SA_NOCLDSTOP 0x00000008	/* Don't send SIGCHLD when children stop.  */
+#define	SA_NOCLDSTOP 0x00000008  /* Don't send SIGCHLD when children stop.  */
 #ifdef __USE_MISC
-#define SA_STACK     0x00000001	/* Use signal stack by using `sa_restorer'.  */
-#define SA_RESTART   0x00000002	/* Don't restart syscall on signal return.  */
-#define SA_INTERRUPT 0x00000010	/* Historical no-op.  */
-#define SA_NOMASK    0x00000020	/* Don't automatically block the signal when
-				   its handler is being executed.  */
-#define SA_ONESHOT   0x00000004	/* Reset to SIG_DFL on entry to handler.  */
+# define SA_STACK     0x00000001 /* Use signal stack by using `sa_restorer'. */
+# define SA_RESTART   0x00000002 /* Restart syscall on signal return.  */
+# define SA_INTERRUPT 0x00000010 /* Historical no-op.  */
+# define SA_NOMASK    0x00000020 /* Don't automatically block the signal when
+				    its handler is being executed.  */
+# define SA_ONESHOT   0x00000004 /* Reset to SIG_DFL on entry to handler.  */
 
 /* Some aliases for the SA_ constants.  */
-#define SA_NODEFER	SA_NOMASK
-#define SA_RESETHAND	SA_ONESHOT
+# define SA_NODEFER   SA_NOMASK
+# define SA_RESETHAND SA_ONESHOT
 #endif
 
 /* Values for the HOW argument to `sigprocmask'.  */
-#define	SIG_BLOCK	1	/* Block signals.  */
-#define	SIG_UNBLOCK	2	/* Unblock signals.  */
-#define	SIG_SETMASK	4	/* Set the set of blocked signals.  */
+#define	SIG_BLOCK     1		 /* Block signals.  */
+#define	SIG_UNBLOCK   2		 /* Unblock signals.  */
+#define	SIG_SETMASK   4		 /* Set the set of blocked signals.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/Dist b/sysdeps/unix/sysv/linux/sparc/sparc32/Dist
index 9729f0709b..9729f0709b 100644
--- a/sysdeps/unix/sysv/linux/sparc/Dist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/Dist
diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile
index 4cbd3bd004..4cbd3bd004 100644
--- a/sysdeps/unix/sysv/linux/sparc/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile
diff --git a/sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S b/sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S
index a639511f3e..a639511f3e 100644
--- a/sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/sparc32/bits/mman.h
index 3e7f2900fa..3e7f2900fa 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/bits/mman.h
diff --git a/sysdeps/unix/sysv/linux/sparc/brk.c b/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c
index 8f079bf444..8f079bf444 100644
--- a/sysdeps/unix/sysv/linux/sparc/brk.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c
diff --git a/sysdeps/unix/sysv/linux/sparc/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
index 64735e9dbc..64735e9dbc 100644
--- a/sysdeps/unix/sysv/linux/sparc/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
diff --git a/sysdeps/unix/sysv/linux/sparc/fork.S b/sysdeps/unix/sysv/linux/sparc/sparc32/fork.S
index 951ab4981b..951ab4981b 100644
--- a/sysdeps/unix/sysv/linux/sparc/fork.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/fork.S
diff --git a/sysdeps/unix/sysv/linux/sparc/init-first.h b/sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h
index 39822fc595..39822fc595 100644
--- a/sysdeps/unix/sysv/linux/sparc/init-first.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h
diff --git a/sysdeps/unix/sysv/linux/sparc/kernel_stat.h b/sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h
index 91f02f4e20..91f02f4e20 100644
--- a/sysdeps/unix/sysv/linux/sparc/kernel_stat.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h
diff --git a/sysdeps/unix/sysv/linux/sparc/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S
index 4c50656d6c..4c50656d6c 100644
--- a/sysdeps/unix/sysv/linux/sparc/pipe.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S
diff --git a/sysdeps/unix/sysv/linux/sparc/profil-counter.h b/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h
index 1bd06482c9..1bd06482c9 100644
--- a/sysdeps/unix/sysv/linux/sparc/profil-counter.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h
diff --git a/sysdeps/unix/sysv/linux/sparc/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
index d39eb7cc76..d39eb7cc76 100644
--- a/sysdeps/unix/sysv/linux/sparc/sigaction.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
diff --git a/sysdeps/unix/sysv/linux/sparc/socket.S b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S
index bdfc2fcc6d..bdfc2fcc6d 100644
--- a/sysdeps/unix/sysv/linux/sparc/socket.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S
diff --git a/sysdeps/unix/sysv/linux/sparc/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S
index 3921ca52dc..3921ca52dc 100644
--- a/sysdeps/unix/sysv/linux/sparc/syscall.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S
diff --git a/sysdeps/unix/sysv/linux/sparc/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
index 7883d70719..7883d70719 100644
--- a/sysdeps/unix/sysv/linux/sparc/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.S b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.S
index 7e9023901b..7e9023901b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sysdep.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.S
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
index 0e5a8cd218..0e5a8cd218 100644
--- a/sysdeps/unix/sysv/linux/sparc/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
diff --git a/sysdeps/unix/sysv/linux/sparc64/Dist b/sysdeps/unix/sysv/linux/sparc/sparc64/Dist
index e770e20eb9..e770e20eb9 100644
--- a/sysdeps/unix/sysv/linux/sparc64/Dist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Dist
diff --git a/sysdeps/unix/sysv/linux/sparc64/Makefile b/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
index c4d83226a2..c4d83226a2 100644
--- a/sysdeps/unix/sysv/linux/sparc64/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
diff --git a/sysdeps/unix/sysv/linux/sparc64/__longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S
index 3107179fdc..3107179fdc 100644
--- a/sysdeps/unix/sysv/linux/sparc64/__longjmp.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S
diff --git a/sysdeps/unix/sysv/linux/sparc64/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/mman.h
index 3e7f2900fa..3e7f2900fa 100644
--- a/sysdeps/unix/sysv/linux/sparc64/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/mman.h
diff --git a/sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h
index ab850e5301..ab850e5301 100644
--- a/sysdeps/unix/sysv/linux/sparc64/bits/setjmp.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h
diff --git a/sysdeps/unix/sysv/linux/sparc64/bits/types.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h
index 222967881f..222967881f 100644
--- a/sysdeps/unix/sysv/linux/sparc64/bits/types.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h
diff --git a/sysdeps/unix/sysv/linux/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
index 87412e095a..abdd7e6604 100644
--- a/sysdeps/unix/sysv/linux/sparc64/brk.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
@@ -40,10 +40,10 @@ __curbrk: .skip 8
 ENTRY(__brk)
 	save	%sp, -160, %sp
 #ifdef PIC
-1:	rd	%pc, %g1
+1:	call	2f
 	sethi	%hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
-	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
-	add	%l7, %g1, %l7
+2:	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+	add	%l7, %o7, %l7
 #endif
 
 	LOADSYSCALL(brk)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S
new file mode 100644
index 0000000000..4e6a2da560
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S
@@ -0,0 +1 @@
+/* _setjmp is in setjmp.S  */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S
new file mode 100644
index 0000000000..1da848d2f1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S
@@ -0,0 +1 @@
+/* setjmp is in setjmp.S  */
diff --git a/sysdeps/unix/sysv/linux/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
index fe38bf4ab7..a5cb1a4c4a 100644
--- a/sysdeps/unix/sysv/linux/sparc64/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
@@ -54,10 +54,10 @@ __libc_clone:
 	 restore
 99:
 #ifdef PIC
-	rd	%pc, %g1
+	call	1f
 	sethi	%hi(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7
-	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7
-	add	%l7, %g1, %l7
+1:	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7
+	add	%l7, %o7, %l7
 	set	EINVAL, %i0
 	sethi	%hi(errno), %g2
 	or	%g2, %lo(errno), %g2
@@ -76,7 +76,7 @@ __libc_clone:
 	mov	-1,%i0
 	ret
 	 restore
-	.size __libc_clone,.-__libc_clone
+	.size __libc_clone, .-__libc_clone
 
 	.type __thread_start,@function
 __thread_start:
@@ -86,4 +86,4 @@ __thread_start:
 	 mov	%l3,%o0
 	call	_exit,0
 	 nop
-	.size __thread_start,.-__thread_start
+	.size __thread_start, .-__thread_start
diff --git a/sysdeps/unix/sysv/linux/sparc64/fork.S b/sysdeps/unix/sysv/linux/sparc/sparc64/fork.S
index c735da5a44..c735da5a44 100644
--- a/sysdeps/unix/sysv/linux/sparc64/fork.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/fork.S
diff --git a/sysdeps/unix/sysv/linux/sparc64/getcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S
index 05b06269e4..05b06269e4 100644
--- a/sysdeps/unix/sysv/linux/sparc64/getcontext.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S
diff --git a/sysdeps/unix/sysv/linux/sparc64/init-first.h b/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h
index f7fad7f87f..3e27c6dcf7 100644
--- a/sysdeps/unix/sysv/linux/sparc64/init-first.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h
@@ -33,33 +33,33 @@
 	.global " #NAME "
 	.type " #NAME ",@function
 " #NAME ":
-	save	%sp, -64, %sp
-1:	rd	%pc, %g1
+	save	%sp, -128, %sp
+1:	call	11f
 	sethi	%hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
-	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+11:	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
 	add	%l7, %o7, %l7
 	/* Are we a dynamic libc being loaded into a static program?  */
-	sethi	%hi(_dl_starting_up), %g2
-	or	%g2, %lo(_dl_starting_up), %g2
-	ld	[%l7+%g2], %g2
-	brz,pn	%g2, 3f
-	 sethi	%hi(__libc_multiple_libcs), %g3
-	ld	[%g2], %g2
-	subcc	%g0, %g2, %g0
-	subc	%g0, -1, %g2
-3:	or	%g3, %lo(__libc_multiple_libcs), %g3
-	ld	[%l7+%g3], %g3
-	st	%g2, [%g3]
+	sethi	%hi(_dl_starting_up), %l2
+	or	%l2, %lo(_dl_starting_up), %l2
+	ldx	[%l7+%l2], %l2
+	brz,pn	%l2, 3f
+	 sethi	%hi(__libc_multiple_libcs), %l3
+	ld	[%l2], %l4
+	mov	%g0, %l2
+	movrz	%l4, 1, %l2
+3:	or	%l3, %lo(__libc_multiple_libcs), %l3
+	ldx	[%l7+%l3], %l3
+	st	%l2, [%l3]
 	/* If so, argc et al are in %o0-%o2 already.  Otherwise, load them.  */
-	brnz,pn	%g2, " #INIT "
+	brnz,pn	%l2, " #INIT "
 	 restore
-	ld	[%sp+" __S(STACK_BIAS) "+22*8], %o0
+	ldx	[%sp+" __S(STACK_BIAS) "+22*8], %o0
 	add	%sp, " __S(STACK_BIAS) "+23*8, %o1
 	sll	%o0, 3, %o2
 	add	%o2, %o1, %o2
-	add	%o2, 8, %o2
-	ba,a	" #INIT "
-	.size "#NAME " .-" #NAME);
+	ba	" #INIT "
+	 add	%o2, 8, %o2
+	.size "#NAME ", .-" #NAME);
 
 #else
 
@@ -73,15 +73,15 @@
 	or	%g2, %lo(_dl_starting_up), %g2
 	brz,pt	%g2, 3f
 	 sethi	%hi(__libc_multiple_libcs), %g3
-	ld	[%g4+%g2], %g2
-	subcc	%g0, %g2, %g0
-	subc	%g0, -1, %g2
-3:	add	%g3, %g4, %g3
-	st	%g2, [%g3+%lo(__libc_multiple_libcs)]
+	ld	[%g4+%g2], %g1
+	mov	%g0, %g2
+	movrz	%g1, 1, %g2
+3:	or	%g3, %lo(__libc_multiple_libcs), %g3
+	st	%g2, [%g3+%g4]
 	/* If so, argc et al are in %o0-%o2 already.  Otherwise, load them.  */
 	brnz,pn	%g2, " #INIT "
 	 nop
-	ld	[%sp+" __S(STACK_BIAS) "+22*8], %o0
+	ldx	[%sp+" __S(STACK_BIAS) "+22*8], %o0
 	add	%sp, " __S(STACK_BIAS) "+23*8, %o1
 	sll	%o0, 3, %o2
 	add	%o2, %o1, %o2
diff --git a/sysdeps/unix/sysv/linux/sparc64/kernel_stat.h b/sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h
index fcb752e3ec..fcb752e3ec 100644
--- a/sysdeps/unix/sysv/linux/sparc64/kernel_stat.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h
diff --git a/sysdeps/unix/sysv/linux/sparc64/longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
index c81b10495e..c4563776b6 100644
--- a/sysdeps/unix/sysv/linux/sparc64/longjmp.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
@@ -42,3 +42,5 @@ ENTRY(longjmp)
 	ta	0x6f
 
 END(longjmp)
+
+strong_alias(longjmp, __longjmp)
diff --git a/sysdeps/unix/sysv/linux/sparc64/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
index 82ff4eae3c..82ff4eae3c 100644
--- a/sysdeps/unix/sysv/linux/sparc64/pipe.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
diff --git a/sysdeps/unix/sysv/linux/sparc64/profil-counter.h b/sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h
index 6a3f0a291a..6a3f0a291a 100644
--- a/sysdeps/unix/sysv/linux/sparc64/profil-counter.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h
diff --git a/sysdeps/unix/sysv/linux/sparc64/setcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S
index 2968b65633..2968b65633 100644
--- a/sysdeps/unix/sysv/linux/sparc64/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S
diff --git a/sysdeps/unix/sysv/linux/sparc64/setjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S
index 8b88b49ac4..fcc5cb5a48 100644
--- a/sysdeps/unix/sysv/linux/sparc64/setjmp.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S
@@ -27,10 +27,29 @@
 #define O_gregs			32
 #define O_g1			(O_gregs + 4*8)
 
+/* int _setjmp(jmp_buf) */
+
+.weak _setjmp
+ENTRY(_setjmp)
+
+	ba	__sigsetjmp_local
+	 set	0, %o1
+
+END(setjmp)
+
+/* int setjmp(jmp_buf) */
+
+.weak setjmp
+ENTRY(setjmp)
+
+	set	1, %o1
+
+END(setjmp)
 
 /* int __sigsetjmp(jmp_buf, savemask)  */
 
 ENTRY(__sigsetjmp)
+__sigsetjmp_local:
 
 	/* Record whether the user is intending to save the sigmask.  */
 	st	%o1, [%o0 + O_mask_was_saved]
diff --git a/sysdeps/unix/sysv/linux/sparc64/sigjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S
index 940ccbcf68..940ccbcf68 100644
--- a/sysdeps/unix/sysv/linux/sparc64/sigjmp.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S
new file mode 100644
index 0000000000..30dace5903
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S
@@ -0,0 +1,39 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+	.text
+
+ENTRY (syscall)
+
+	mov	%o0,%g1
+	mov	%o1,%o0
+	mov	%o2,%o1
+	mov	%o3,%o2
+	mov	%o4,%o3
+	mov	%o5,%o4
+
+	ta	0x11
+
+	bcc,pt %xcc,1f
+	 nop
+	SYSCALL_ERROR_HANDLER
+
+1:	retl
+
+PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index 66ba470994..66ba470994 100644
--- a/sysdeps/unix/sysv/linux/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
diff --git a/sysdeps/unix/sysv/linux/sparc64/sysdep.S b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.S
index 736578083c..736578083c 100644
--- a/sysdeps/unix/sysv/linux/sparc64/sysdep.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.S
diff --git a/sysdeps/unix/sysv/linux/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
index f01c1f43cd..c880e4a2dc 100644
--- a/sysdeps/unix/sysv/linux/sparc64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
@@ -44,43 +44,65 @@
 	.type name,@function;
 
 #ifdef PIC
-#define SYSCALL_ERROR_HANDLER1(R)					\
+# ifdef _LIBC_REENTRANT
+#  define SYSCALL_ERROR_HANDLER						\
 	.global C_SYMBOL_NAME(errno);					\
 	.type C_SYMBOL_NAME(errno),@object;				\
-0:	rd %pc,%g1;							\
-	sethi %hi(_GLOBAL_OFFSET_TABLE_-(0b-.)),%g2;			\
-	add %g2,%lo(_GLOBAL_OFFSET_TABLE_-(0b-.)),%g2;			\
-	add %g2,%g1,%g1;						\
-	sethi %hi(errno),%g2;						\
-	add %g2,%lo(errno),%g2;						\
-	ldx [%g1+%g2],%g2;						\
-	st R,[%g2]
+	save %sp,-160,%sp;						\
+  101:	call 102f;							\
+	sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2;			\
+  102:	or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2;			\
+	sethi %hi(errno),%i1;						\
+	add %g2,%o7,%l7;						\
+	or %i1,%lo(errno),%i1;						\
+	ldx [%l7+%i1],%g2;						\
+	st %i0,[%g2];							\
+	call __errno_location;						\
+	 nop;								\
+	st %i0,[%o0];							\
+	sub %g0,1,%i0;							\
+	jmpl %i7+8, %g0;						\
+	 restore
+# else
+#  define SYSCALL_ERROR_HANDLER						\
+	.global C_SYMBOL_NAME(errno);					\
+	.type C_SYMBOL_NAME(errno),@object;				\
+	mov %o7,%g3;							\
+  101:	call 102f;							\
+	sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2;			\
+  102:	or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2;			\
+	sethi %hi(errno),%o1;						\
+	add %g2,%o7,%l7;						\
+	or %o1,%lo(errno),%o1;						\
+	mov %g3,%o7;							\
+	ldx [%l7+%o1],%g2;						\
+	st %o0,[%g2]
+# endif
 #else
-#define SYSCALL_ERROR_HANDLER1(R)					\
+# ifdef _LIBC_REENTRANT
+#  define SYSCALL_ERROR_HANDLER						\
 	.global C_SYMBOL_NAME(errno);					\
 	.type C_SYMBOL_NAME(errno),@object;				\
+	save %sp,-160,%sp;						\
 	sethi %hi(errno),%g1;						\
-	add %g1,%g4,%g1;						\
-	st R,[%g1+%lo(errno)]
-#endif
-
-#ifdef _LIBC_REENTRANT
-#define SYSCALL_ERROR_HANDLER						\
-	.global C_SYMBOL_NAME(__errno_location);			\
-        .type C_SYMBOL_NAME(__errno_location),@function;		\
-	save %sp,-128,%sp;						\
-	SYSCALL_ERROR_HANDLER1(%i0);					\
+	or %g1,%lo(errno),%g1;						\
+	st %i0,[%g1+%g4];						\
 	call __errno_location;						\
 	 nop;								\
 	st %i0,[%o0];							\
 	sub %g0,1,%i0;							\
 	jmpl %i7+8, %g0;						\
 	 restore
-#else
-#define SYSCALL_ERROR_HANDLER						\
-	SYSCALL_ERROR_HANDLER1(%o0);					\
+# else
+#  define SYSCALL_ERROR_HANDLER						\
+	.global C_SYMBOL_NAME(errno);					\
+	.type C_SYMBOL_NAME(errno),@object;				\
+	sethi %hi(errno),%g1;						\
+	or %g1,%lo(errno),%g1;						\
+	st %i0,[%g1+%g4];						\
 	retl;								\
 	 sub %g0,1,%i0
+# endif
 #endif
 
 #define PSEUDO(name, syscall_name, args)				\
diff --git a/sysdeps/unix/sysv/linux/sparc64/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h
index 160e2fc43a..160e2fc43a 100644
--- a/sysdeps/unix/sysv/linux/sparc64/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h
diff --git a/sysdeps/unix/sysv/minix/bits/sigaction.h b/sysdeps/unix/sysv/minix/bits/sigaction.h
index 5bf5985c51..732befc630 100644
--- a/sysdeps/unix/sysv/minix/bits/sigaction.h
+++ b/sysdeps/unix/sysv/minix/bits/sigaction.h
@@ -31,14 +31,14 @@ struct sigaction
 
 /* Bits in `sa_flags'.  */
 #ifdef	__USE_MISC
-#define	SA_ONSTACK	0x1	/* Take signal on signal stack.  */
-#define	SA_RESETHAND	0x2	/* Reset signal handler when signal caught.  */
-#define	SA_NODEFER	0x4	/* Don't block signal while catching it.  */
-#define	SA_RESTART	0x8	/* Don't restart syscall on signal return.  */
-#define	SA_SIGINFO	0x10	/* Extended signal handling.  */
-#define	SA_NOCLDWAIT	0x20	/* Don't create zombies.  */
-#define	SA_COMPAT	0x80	/* Internal flag for old signal catchers.  */
-#define	SA_DISABLE	0x100	/* Disable alternate signal stack.  */
+# define SA_ONSTACK	0x1	/* Take signal on signal stack.  */
+# define SA_RESETHAND	0x2	/* Reset signal handler when signal caught.  */
+# define SA_NODEFER	0x4	/* Don't block signal while catching it.  */
+# define SA_RESTART	0x8	/* Restart syscall on signal return.  */
+# define SA_SIGINFO	0x10	/* Extended signal handling.  */
+# define SA_NOCLDWAIT	0x20	/* Don't create zombies.  */
+# define SA_COMPAT	0x80	/* Internal flag for old signal catchers.  */
+# define SA_DISABLE	0x100	/* Disable alternate signal stack.  */
 #endif
 #define	SA_NOCLDSTOP	0x40	/* Don't send SIGCHLD when children stop.  */
 
diff --git a/sysdeps/unix/sysv/sysv4/bits/sigaction.h b/sysdeps/unix/sysv/sysv4/bits/sigaction.h
index 3a2ffb2e10..ce3ab5e60c 100644
--- a/sysdeps/unix/sysv/sysv4/bits/sigaction.h
+++ b/sysdeps/unix/sysv/sysv4/bits/sigaction.h
@@ -35,13 +35,13 @@ struct sigaction
 
 /* Bits in `sa_flags'.  */
 #ifdef __USE_MISC
-#define	SA_ONSTACK	0x1	/* Take signal on signal stack.  */
-#define SA_RESETHAND	0x2	/* Reset to SIG_DFL on entry to handler.  */
-#define	SA_RESTART	0x4	/* Don't restart syscall on signal return.  */
-#define SA_SIGINFO	0x8	/* Provide additional info to the handler.  */
-#define SA_NODEFER	0x10	/* Don't automatically block the signal when
+# define SA_ONSTACK	0x1	/* Take signal on signal stack.  */
+# define SA_RESETHAND	0x2	/* Reset to SIG_DFL on entry to handler.  */
+# define SA_RESTART	0x4	/* Restart syscall on signal return.  */
+# define SA_SIGINFO	0x8	/* Provide additional info to the handler.  */
+# define SA_NODEFER	0x10	/* Don't automatically block the signal when
 				   its handler is being executed.  */
-#define SA_NOCLDWAIT	0x10000	/* Don't save zombie processes.  */
+# define SA_NOCLDWAIT	0x10000	/* Don't save zombie processes.  */
 #endif
 #define	SA_NOCLDSTOP	0x20000	/* Don't send SIGCHLD when children stop.  */