about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-08-14 01:54:13 +0000
committerUlrich Drepper <drepper@redhat.com>1997-08-14 01:54:13 +0000
commitca34d7a7c77fa8dc823fd05439870e5a96610c5a (patch)
tree4b4057b8b919007f42caa4e1558bb9c5487976ae /sysdeps/unix/sysv/linux
parent0413b54c02d31cae62e8d13b3ee7ac109ceeff0e (diff)
downloadglibc-ca34d7a7c77fa8dc823fd05439870e5a96610c5a.tar.gz
glibc-ca34d7a7c77fa8dc823fd05439870e5a96610c5a.tar.xz
glibc-ca34d7a7c77fa8dc823fd05439870e5a96610c5a.zip
1997-08-14 03:14  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-minimal.c: Don't use relative #include paths.
	(malloc): Don't try to initialize _dl_pagesize, it already is.
	(__sigjmp_save, longjmp): Reformat.

	* sysdeps/generic/dl-sysdep.c: Implement _dl_show_auxv function to
	show content of auxiliary array.
	(_dl_sysdep_start): Remember start of auxiliary vector.
	* sysdeps/mach/hurd/dl-sysdep.c: (_dl_show_auxv): New dummy function.
	* elf/link.h: Add prototype for _dl_show_auxv.
	* elf/rtld.c (dl_main): Call _dl_show_auxv if LD_SHOW_AUXV envvar
	is present.

	* libio/iofdopen.c: Better prepare for use in libstdc++.
	* libio/iofflush.c: Likewise.
	* libio/iofgetpos.c: Likewise.
	* libio/iofgets.c: Likewise.
	* libio/iofopen.c: Likewise.
	* libio/iofputs.c: Likewise.
	* libio/iofread.c: Likewise.
	* libio/iofsetpos.c: Likewise.
	* libio/ioftell.c: Likewise.
	* libio/iofwrite.c: Likewise.
	* libio/iogetdelim.c: Likewise.
	* libio/iogets.c: Likewise.
	* libio/iopopen.c: Likewise.
	* libio/ioputs.c: Likewise.
	* libio/iosetbuffer.c: Likewise.
	* libio/iosetvbuf.c: Likewise.
	* libio/ioungetc.c: Likewise.
	* libio/iovsprintf.c: Likewise.
	* libio/iovsscanf.c: Likewise.

	* manual/creature.texi: Mention _XOPEN_SOURCE_EXTENDED in correct
	place.

	* manual/math.texi: Add comment to sincos decsription to say it's a
	GNU extension.
	Fix description of random function.

	* posix/fnmatch.h: Recognize Windog by _WINDOWS32 not WIN32.
	* posix/glob.c: Likewise.  Handle stupid system headers on SunOS.
	Add casts for all __alloca calls.
	* posix/glob.h: Recognize Windog by _WINDOWS32 not WIN32.
	Declare additional GLOB_* constants also if _GNU_SOURCE is defined.
	Patches by Paul D. Smith <psmith@BayNetworks.COM>.

	* stdio-common/_itoa.c: Don't use relateive #include paths.

	* sysdeps/i386/fpu/bits/mathinline.h: Enable optimizations even for
	gcc 2.7.
	(atan): Loading 1.0 from memory does not pay off.
	(asinh): Fix typo.

1997-08-13 09:44  Philip Blundell  <Philip.Blundell@pobox.com>

	* sysdeps/stub/accept.c: Use socklen_t where necessary.
	* sysdeps/stub/bind.c: Likewise.
	* sysdeps/stub/connect.c: Likewise.
	* sysdeps/stub/getsockname.c: Likewise.
	* sysdeps/stub/getsockopt.c: Likewise.
	* sysdeps/stub/recvfrom.c: Likewise.
	* sysdeps/stub/sendto.c: Likewise.
	* sysdeps/stub/setsockopt.c: Likewise.

1997-08-11  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* io/ftw.c (object_compare): Avoid memcmp when comparing scalar
	types.

1997-08-12  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* math/libm-test.c (cbrt_test): Add epsilon for long double to
	`cbrt (-0.001)'.

1997-08-11  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/stub/bits/string.h: Fix comment.

1997-08-01  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/Makefile (routines): Remove dl-version.
	(dl-routines): Add it here instead.  This removes dead code from
	libc.so.

1997-08-12 17:17  Wolfram Gloger  <wmglo@dent.med.uni-muenchen.de>

	* malloc/thread-m.h (thread_atfork, thread_atfork_static): New
	macros to encapsulate pthread_atfork's functionality.
	* malloc/malloc.c (ptmalloc_lock_all, ptmalloc_unlock_all): New
	functions, registered via thread_atfork in the initialization
	routine or via thread_atfork_static in global scope.  This
	ensures a consistent state of all locks across fork().

1997-08-11 23:00:32 1997  Mark Kettenis  <kettenis@phys.uva.nl>

	* login/programs/xtmp.c (compare_entry):
	Partially undo patch made by Klaus Espenlaub.  There
	was no xtmp/utmp typo.  Added comment to cclarify this.
	* login/programs/xtmp.h: Likewise.

	* posix/getopt.c: Recognize Windog by _WINDOWS32 not WIN32.
	Patch by Paul D. Smith <psmith@BayNetworks.COM>.

1997-08-12 13:51  Ulrich Drepper  <drepper@cygnus.com>

	* login/getutid.c: Rename to __getutid and make getutid and getutxid
	weak aliases.
	Patch by ir. Mark M._Kettenis <kettenis@phys.uva.nl>.

1997-08-11 23:55  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/Makefile [subdir=misc] (sysdep_headers):
	Add bits/mman.h.

1997-08-11 08:51:21 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* stdlib/fmtmsg.c (fmtmsg): Add static to
	__libc_once_define macro.

	* libc.map (__progname_full, __progname): Added.

1997-08-04 08:31  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/if_index.c (if_nametoindex): Return 0
	if SIOGIFINDEX is not defined.
	(if_indextoname): Initialize "result" to NULL.
	(if_nametoindex, if_nameindex): Fix ENOSYS setting.

1997-08-11 11:58  Richard Henderson  <rth@cygnus.com>

	Sparc ISO C 9x exception handling:
	* sysdeps/sparc/fpu/bits/mathdef.h: New file.
	* sysdeps/sparc/fpu/fclrexcpt.c: New file.
	* sysdeps/sparc/fpu/fegetenv.c: New file.
	* sysdeps/sparc/fpu/fegetround.c: New file.
	* sysdeps/sparc/fpu/feholdexcpt.c: New file.
	* sysdeps/sparc/fpu/fesetenv.c: New file.
	* sysdeps/sparc/fpu/fesetround.c: New file.
	* sysdeps/sparc/fpu/feupdateenv.c: New file.
	* sysdeps/sparc/fpu/fgetexcptflg.c: New file.
	* sysdeps/sparc/fpu/fraiseexcpt.c: New file.
	* sysdeps/sparc/fpu/fsetexcptflg.c: New file.
	* sysdeps/sparc/fpu/ftestexcept.c: New file.
	* sysdeps/sparc/sparc32/fpu/bits/fenv.h: New file.
	* sysdeps/sparc/sparc64/fpu/bits/fenv.h: New file.

1997-08-11 11:58  Richard Henderson  <rth@cygnus.com>

	Sparc64 merge:
	* configure.in: Change up subdirectories, rename sparc8->sparcv8.

	* csu/Makefile: Nuke need-nopic-initfini bits.  The problem was
	that sparc64 ld did not recognize pic relocs at all.

	* elf/dl-deps.c: Include <string.h>.
	* elf/do-rel.h (elf_dynamic_do_rel): Take reloc address and size
	directly instead of the DT names to get them from.
	* elf/dynamic-link.h (_ELF_DYNAMIC_DO_RELOC): New macro distilled
	from ELF_DYNAMIC_DO_REL{,A}.  Define a second version that accounts
	for the possibility that DT_RELA and DT_JMPPLT overlap, as such is
	the case on the Sparc.

	* elf/elf.h: Stub out Elf64_Ver*, and make them the same as the
	Elf32_Ver* bits.  The linker does not even know to differentiate
	between the word sizes.  Someone should examine this and figure
	out what the proper sizes of things should be for 64-bit hosts
	before the sparc64 libraries are distributed.

	* shlib-versions: Rename sparc64 ld.so to not conflict with sparc32
	on the same machine.

	Move old sysdeps/sparc contents to sysdeps/sparc/sparc32,
	rename sparc8 subdir to sparcv8, move sysdeps/sparc64 content to
	sysdeps/sparc/sparc64.  Same for sysdeps/unix/sysv/linux/sparc.

	* sysdeps/sparc/Implies: Do ieee754 here.
	* sysdeps/sparc/configure.in: Move from sparc32/.
	* sysdeps/sparc/sparc32/Implies: Do wordsize here.
	* sysdeps/sparc/sparc64/Implies: Likewise.

	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_load_address):
	Use uninitialized .got to find load address instead of AT_BASE, as
	the later does not exist when running ld.so directly.

	* sysdeps/sparc/sparc32/fpu/fpu_control.h: Move from ../.
	* sysdeps/sparc/sparc64/fpu/fpu_control.h: Likewise.

	* sysdeps/sparc/sparc32/udiv_qrnnd.S: Clean up PIC support.

	* sysdeps/sparc/sparc64/Makefile (sysdep_routines): Add s_finitel
	and s_signbitl for stdio.
	* sysdeps/sparc/sparc64/configure.in: Remove, we no longer need
	nopic_initfini.

	* sysdeps/sparc/sparc64/bsd-_setjmp.S: Remove.
	* sysdeps/sparc/sparc64/bsd-setjmp.S: Remove.
	* sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S: New empty file.
	* sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S: New empty file.
	* sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Add __longjmp alias.
	* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Add weak _setjmp
	and setjmp entry points.

	* sysdeps/sparc/sparc64/dl-machine.h: Finish real implementation.

	* sysdeps/sparc/sparc64/elf/crtbegin.S: Add copyright, fix PIC.
	* sysdeps/sparc/sparc64/elf/crtend.S: Likewise.

	* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h (struct sigaction):
	Fix sa_flags size for sparc64; add sa_restorer for kernel.

	* sysdeps/unix/sysv/linux/sparc/sparc64/brk.S: Fix PIC.
	* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise.

	* sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S: New file.

1997-08-10 18:29:08 1997  Mark Kettenis  <kettenis@phys.uva.nl>

	* login/login.c (login): Check for correct return value of
	utmpname.

1997-08-11 16:49  Ulrich Drepper  <drepper@cygnus.com>

	* time/tzset.c (__tzset_internal): Correctly handle TZ strings
	following incorrect old POSIX specs.
	Patch by Paul Eggert <eggert@twinsun.com>.

	* sysdeps/generic/bits/sigaction.h: Correct comment for SA_RESTART.
	* sysdeps/unix/bsd/osf/bits/sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/bits/sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h: Likewise.
	* sysdeps/unix/sysv/minix/bits/sigaction.h: Likewise.
	* sysdeps/unix/sysv/sysv4/bits/sigaction.h: Likewise.
	Reported by NIIBE Yutaka <gniibe@mri.co.jp>.

1997-08-09  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/math.texi: Define the macros @mul and @infinity and use
	them to format the multiplication and infinity signs.
	(FP Comparison Functions): Use @code, not @math, for C code
	examples.

	* elf/dl-profile.c: Add descriptions and implement reading of
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-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
49 files changed, 280 insertions, 117 deletions
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