about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/alpha/bsd-_setjmp.S30
-rw-r--r--sysdeps/alpha/bsd-setjmp.S30
-rw-r--r--sysdeps/alpha/htonl.S28
-rw-r--r--sysdeps/alpha/htons.S28
-rw-r--r--sysdeps/alpha/memcpy.S276
-rw-r--r--sysdeps/alpha/s_copysign.S30
-rw-r--r--sysdeps/alpha/setjmp.S28
-rw-r--r--sysdeps/alpha/stpcpy.S31
-rw-r--r--sysdeps/alpha/strcat.S4
-rw-r--r--sysdeps/alpha/strcpy.S31
-rw-r--r--sysdeps/alpha/strncat.S31
-rw-r--r--sysdeps/alpha/w_sqrt.S12
-rw-r--r--sysdeps/generic/paths.h3
-rw-r--r--sysdeps/generic/sigset.h34
-rw-r--r--sysdeps/generic/utmpbits.h30
-rw-r--r--sysdeps/generic/waitstatus.h4
-rw-r--r--sysdeps/gnu/utmpbits.h31
-rw-r--r--sysdeps/posix/readv.c4
-rw-r--r--sysdeps/posix/sigblock.c52
-rw-r--r--sysdeps/posix/sigintr.c32
-rw-r--r--sysdeps/posix/signal.c29
-rw-r--r--sysdeps/posix/sigpause.c37
-rw-r--r--sysdeps/posix/sigsetmask.c36
-rw-r--r--sysdeps/posix/sigvec.c48
-rw-r--r--sysdeps/posix/sigwait.c16
-rw-r--r--sysdeps/posix/writev.c4
-rw-r--r--sysdeps/unix/execve.S30
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S33
-rw-r--r--sysdeps/unix/sysv/linux/alpha/clone.S29
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/llseek.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S37
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscall.S31
-rw-r--r--sysdeps/unix/sysv/linux/configure9
-rw-r--r--sysdeps/unix/sysv/linux/errnos.h1
-rw-r--r--sysdeps/unix/sysv/linux/getsysstats.c39
-rw-r--r--sysdeps/unix/sysv/linux/paths.h3
-rw-r--r--sysdeps/unix/sysv/linux/sigsuspend.c29
-rw-r--r--sysdeps/unix/sysv/linux/sparc/clone.S88
41 files changed, 605 insertions, 738 deletions
diff --git a/sysdeps/alpha/bsd-_setjmp.S b/sysdeps/alpha/bsd-_setjmp.S
index be7f6dd05f..1bb3e4ab37 100644
--- a/sysdeps/alpha/bsd-_setjmp.S
+++ b/sysdeps/alpha/bsd-_setjmp.S
@@ -1,21 +1,21 @@
 /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.  Alpha version.
-Copyright (C) 1994, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   Copyright (C) 1994, 1996 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
    We cannot do it in C because it must be a tail-call, so frame-unwinding
@@ -26,8 +26,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(_setjmp)
 	ldgp	$29,0($27)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 	bis	$31, $31, $17		/* Pass a second argument of zero.  */
diff --git a/sysdeps/alpha/bsd-setjmp.S b/sysdeps/alpha/bsd-setjmp.S
index 2b799613d7..cf5bf189de 100644
--- a/sysdeps/alpha/bsd-setjmp.S
+++ b/sysdeps/alpha/bsd-setjmp.S
@@ -1,21 +1,21 @@
 /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  Alpha version.
-Copyright (C) 1994, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   Copyright (C) 1994, 1996 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
    We cannot do it in C because it must be a tail-call, so frame-unwinding
@@ -26,8 +26,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(setjmp)
 	ldgp	$29, 0($27)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 	bis	$31, 1, $17		/* Pass a second argument of one.  */
diff --git a/sysdeps/alpha/htonl.S b/sysdeps/alpha/htonl.S
index 55d4f62bc7..c6e09f134f 100644
--- a/sysdeps/alpha/htonl.S
+++ b/sysdeps/alpha/htonl.S
@@ -1,28 +1,30 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
 ENTRY(__htonl)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/alpha/htons.S b/sysdeps/alpha/htons.S
index 743d3e2474..8d3aefe149 100644
--- a/sysdeps/alpha/htons.S
+++ b/sysdeps/alpha/htons.S
@@ -1,28 +1,30 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
 ENTRY(__htons)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/alpha/memcpy.S b/sysdeps/alpha/memcpy.S
deleted file mode 100644
index 4ee9c115db..0000000000
--- a/sysdeps/alpha/memcpy.S
+++ /dev/null
@@ -1,276 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
-
-   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., 675 Mass Ave,
-   Cambridge, MA 02139, USA.  */
-
-
-/* This is the child of the C-with-inline-assembly memcpy posted by
-   Martin Ostermann (ost@comnets.rwth-aachen.de).
-
-   This is generally scheduled for the EV5, but whenever necessary and
-   possible, the autoswap slotting feature of the EV5 is used so that the
-   code lays out nicely for the EV4 as well.  */
-
-#include <alpha/regdef.h>
-
-	.set noreorder
-
-	.text
-
-	.ent copy_fwd_aligned
-copy_fwd_aligned:
-	.frame sp, 0, ra, 0
-	.prologue 0
-
-	/* Aligned forward copy main loop.  On entry to this basic block:
-	   t0 == source word waiting to be stored
-	   t2 == loop counter
-	   a0 == destination pointer
-	   a1 == source pointer
-	   a2 mod 8 == byte count in final word */
-	.align 4
-$fa_loop:
-	and	t2, 7, t1	# e0    :
-	beq	t1, 1f		# .. e1 :
-
-0:	stq_u	t0, 0(a0)	# e0    :
-	subq	t1, 1, t1	# .. e1 :
-	ldq_u	t0, 8(a1)	# e0    : copy up to seven words
-	addq	a0, 8, a0	# .. e1 :
-	addq	a1, 8, a1	# e0    :
-	bne	t1, 0b		# .. e1 :
-
-1:	bic	t2, 7, t2	# e0    :
-	beq	t2, $fa_tail	# .. e1 :
-
-2:	stq_u	t0, 0(a0)	# e0    :
-	addq	a0, 64, a0	# .. e1 :
-	ldq_u	t3, 8(a1)	# e0    : copy eight words as fast as we can
-	ldq_u	t4, 16(a1)	# .. e1 :
-	ldq_u	t5, 24(a1)	# e0    :
-	ldq_u	t6, 32(a1)	# .. e1 :
-	ldq_u	t7, 40(a1)	# e0    :
-	ldq_u	t8, 48(a1)	# .. e1 :
-	ldq_u	t9, 56(a1)	# e0    :
-	ldq_u	t0, 64(a1)	# .. e1 :
-	stq_u	t3, -56(a0)	# e0    :
-	subq	t2, 8, t2	# .. e1 :
-	stq_u	t4, -48(a0)	# e0    :
-	addq	a1, 64, a1	# .. e1 :
-	stq_u	t5, -40(a0)	# e0    :
-	stq_u	t6, -32(a0)	# e0    :
-	stq_u	t7, -24(a0)	# e0    :
-	stq_u	t8, -16(a0)	# e0    :
-	stq_u	t9, -8(a0)	# e0    :
-	bne	t2, 2b		# .. e1 :
-
-	/* Take care of a partial word tail.  */
-$fa_tail:
-	and	a2, 7, t3	# e0    :
-	bne	t3, 1f		# .. e1 (zdb)
-
-	/* Aligned copy, aligned tail, final store.  */
-	stq_u	t0, 0(a0)
-	ret
-
-1:	ldq_u	t1, 0(a0)	# e1    :
-	mskql	t0, a2, t0	# .. e1 :
-	mskqh	t1, a2, t1	# e0 (stall)
-	bis	t0, t1, t0	# e1    :
-	stq_u	t0, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-	/* This is the actual entry point to this function.  */
-	.align 3
-$fwd_aligned:
-	ldq_u	t0, 0(a1)	# e0    :
-	and	a0, 7, t3	# .. e1 :
-	addq	a2, t3, a2	# e0    :
-	subq	a2, 1, t2	# e1    :
-	sra	t2, 3, t2	# e0    :
-	beq	t3, $fa_loop	# .. e1 :
-
-	ldq_u	t1, 0(a0)	# e0    :
-	beq	t2, $fa_small	# .. e1 :
-	mskqh	t0, a0, t0	# e0    :
-	mskql	t1, a0, t3	# e0    :
-	bis	t0, t3, t0	# e0    :
-	br	$fa_loop	# .. e1 :
-
-	/* The move affects exactly one destination word.  */
-$fa_small:
-	mskqh	t0, a0, t0	# e0    :
-	and	a2, 7, t4	# .. e1 :
-	mskql	t1, a0, t3	# e0    :
-	bne	t4, 1f		# .. e1 :
-
-	or	t0, t3, t0	# e0    :
-	unop			#       :
-	stq_u	t0, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-1:	mskql	t0, a2, t0	# e0    :
-	mskqh	t1, a2, t1	# e0    :
-	or	t0, t3, t0	# e0    :
-	or	t0, t1, t0	# e1    :
-	stq_u	t0, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-	.end copy_fwd_aligned
-
-	.ent memcpy
-	.globl memcpy
-	.align 3
-memcpy:
-	.frame sp, 0, ra, 0
-#ifdef PROF
-	ldgp	gp, 0(ra)
-	lda	AT, _mcount
-	jsr	AT, (AT), _mcount
-	.prologue 1
-#else
-	.prologue 0
-#endif
-
-	mov	a0, v0
-	beq	a2, $zero_length
-
-	/* Are source and destination co-aligned?  */
-	xor	a0, a1, t0
-	unop
-	and	t0, 7, t0
-	beq	t0, $fwd_aligned
-	br	$fwd_unaligned
-
-	.end memcpy
-
-	.ent copy_fwd_unaligned
-copy_fwd_unaligned:
-	.frame sp, 0, ra, 0
-	.prologue 0
-
-	/* Unaligned forward copy main loop.  On entry to this basic block:
-	   t0 == source low word, unshifted
-	   t2 == loop counter
-	   t7 == last source byte + 1
-	   a0 == destination pointer
-	   a1 == source pointer
-	   a2 mod 8 == byte count in final word */
-	.align 4
-$fu_loop:
-	beq	t2, $fu_tail	# e1    :
-	blbc	t2, 0f		# e1    :
-
-	ldq_u	t1, 8(a1)	# e1    : copy one unaligned word
-	extql	t0, a1, t3	# .. e0 :
-	addq	a1, 8, a1	# e0    :
-	addq	a0, 8, a0	# .. e1 :
-	extqh	t1, a1, t4	# e0    :
-	subq	t2, 1, t2	# .. e1 :
-	mov	t1, t0		# e0    :
-	or	t3, t4, t3	# .. e1 :
-	stq_u	t3, -8(a0)	# e0    :
-	beq	t2, $fu_tail	# .. e1 :
-
-0:	ldq_u	t1, 8(a1)	# e1    : copy two unaligned words
-	extql	t0, a1, t3	# .. e0 :
-	ldq_u	t0, 16(a1)	# e0    :
-	subq	t2, 2, t2	# .. e1 :
-	extqh	t1, a1, t4	# e0    :
-	addq	a0, 16, a0	# .. e1 :
-	extql	t1, a1, t5	# e0    :
-	or	t3, t4, t3	# .. e1 :
-	extqh	t0, a1, t6	# e0    :
-	addq	a1, 16, a1	# .. e1 :
-	stq_u	t3, -16(a0)	# e0    :
-	or	t5, t6, t5	# .. e1 :
-	stq_u	t5, -8(a0)	# e0    :
-	bne	t2, 0b		# .. e1 :
-
-	/* Take care of a partial words tail.  */
-$fu_tail:
-	ldq_u	t4, -1(t7)	# e1    :
-	extql	t0, a1, t3	# .. e0 :
-	extqh	t4, a1, t4	# e0 (stall)
-	and	a2, 7, t5	# .. e1 :
-	or	t3, t4, t3	# e0    :
-	beq	t5, 1f		# .. e1 :
-
-	ldq_u	t1, 0(a0)	# e1    :
-	mskql	t3, a2, t3	# .. e0 :
-	mskqh	t1, a2, t1	# e0 (stall)
-	or	t1, t3, t3	# e1    :
-
-1:	stq_u	t3, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-	/* The entry point to the unaligned forward copy.  */
-	.align 3
-$fwd_unaligned:
-	ldq_u	t0, 0(a1)	# e0    : load initial bits of src
-	addq	a1, a2, t7	# .. e1 : record last byte + 1 of src
-	and	a0, 7, t3	# e0    : find dst misalignment
-	addq	a2, t3, a2	# e1    : find number of words affected
-	subq	a2, 1, t2	# e0    :
-	cmple	a2, 8, t4	# .. e1 : are we dealing with a small block?
-	subq	a1, t3, a1	# e0    :
-	bne	t4, $fu_small	# .. e1 :
-	srl	t2, 3, t2	# e0    :
-	beq	t3, $fu_loop	# .. e1 :
-
-	/* Take care of an unaligned dst head.  */
-	ldq_u	t5, 0(a0)	# e0    :
-	ldq_u	t1, 8(a1)	# .. e1 :
-	extql	t0, a1, t3	# e0    :
-	addq	a0, 8, a0	# .. e1 :
-	extqh	t1, a1, t4	# e0    :
-	addq	a1, 8, a1	# .. e1 :
-	mskql	t5, a0, t5	# e0    :
-	or	t3, t4, t3	# .. e1 :
-	mskqh	t3, a0, t3	# e0    :
-	subq	t2, 1, t2	# .. e1 :
-	or	t3, t5, t3	# e0    :
-	mov	t1, t0		# .. e1 :
-	stq_u	t3, -8(a0)	# e0    :
-	br	$fu_loop	# .. e1 :
-
-	/* The move affects exactly one destination word.  */
-	.align 3
-$fu_small:
-	ldq_u	t2, 0(a0)	# e1    :
-	extql	t0, a1, t3	# .. e0 :
-	ldq_u	t1, -1(t7)	# e0    :
-	and	a2, 7, t8	# .. e1 :
-	mskqh	t2, a2, t6	# e0    :
-	mskql	t2, a0, t5	# e0    :
-	extqh	t1, a1, t4	# e0    :
-	cmovne	t8, t6, t8	# .. e1 :
-	or	t3, t4, t3	# e0    :
-	or	t5, t8, t5	# .. e1 :
-	mskqh	t3, a0, t3	# e0    :
-	and	a2, 7, t8	# .. e1 :
-	mskql	t3, a2, t6	# e0    :
-	cmovne	t8, t6, t8	# e1    :
-	or	t3, t5, t3	# e0    :
-	unop			#       :
-	stq_u	t3, 0(a0)	# e0    :
-
-$zero_length:
-	ret			# .. e1 :
-
-	.end copy_fwd_unaligned
diff --git a/sysdeps/alpha/s_copysign.S b/sysdeps/alpha/s_copysign.S
index 739d3deb79..be5b1d07ac 100644
--- a/sysdeps/alpha/s_copysign.S
+++ b/sysdeps/alpha/s_copysign.S
@@ -1,29 +1,31 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by David Mosberger <davidm@azstarnet.com>
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1996.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
 ENTRY(__copysign)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/alpha/setjmp.S b/sysdeps/alpha/setjmp.S
index f57d49017e..4b2e147b15 100644
--- a/sysdeps/alpha/setjmp.S
+++ b/sysdeps/alpha/setjmp.S
@@ -1,20 +1,20 @@
 /* Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
@@ -24,8 +24,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY (__sigsetjmp)
 	ldgp	$29, 0($27)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/stpcpy.S b/sysdeps/alpha/stpcpy.S
index 9c2668b535..46b09d5ac5 100644
--- a/sysdeps/alpha/stpcpy.S
+++ b/sysdeps/alpha/stpcpy.S
@@ -1,22 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
 
-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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* Copy a null-terminated string from SRC to DST.  Return a pointer
    to the null-terminator in the source.  */
@@ -28,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(__stpcpy)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/strcat.S b/sysdeps/alpha/strcat.S
index e57259f51d..ddc15d9ca6 100644
--- a/sysdeps/alpha/strcat.S
+++ b/sysdeps/alpha/strcat.S
@@ -1,6 +1,6 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
    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
@@ -26,8 +26,10 @@
 ENTRY(strcat)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/strcpy.S b/sysdeps/alpha/strcpy.S
index 823476f750..24c827b10f 100644
--- a/sysdeps/alpha/strcpy.S
+++ b/sysdeps/alpha/strcpy.S
@@ -1,22 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
 
-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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* Copy a null-terminated string from SRC to DST.  Return a pointer
    to the null-terminator in the source.  */
@@ -28,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(strcpy)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/strncat.S b/sysdeps/alpha/strncat.S
index 089fba34d9..2c39cc0232 100644
--- a/sysdeps/alpha/strncat.S
+++ b/sysdeps/alpha/strncat.S
@@ -1,22 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
 
-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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* Append no more than COUNT characters from the null-terminated string SRC
    to the null-terminated string DST.  Always null-terminate the new DST.  */
@@ -28,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(strncat)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/w_sqrt.S b/sysdeps/alpha/w_sqrt.S
index b5c980e557..cf5ae097fd 100644
--- a/sysdeps/alpha/w_sqrt.S
+++ b/sysdeps/alpha/w_sqrt.S
@@ -1,8 +1,7 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@cs.arizona.edu).
-   Based on public-domain C source by Linus Torvalds.
-
    This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>, 1996.
+   Based on public-domain C source by Linus Torvalds.
 
    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
@@ -15,9 +14,9 @@
    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., 675 Mass Ave,
-   Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* This version is much faster than generic sqrt implementation, but
    it doesn't handle exceptional values or the inexact flag.  Don't use
@@ -25,6 +24,7 @@
 
 #ifndef _IEEE_FP
 
+#define _ERRNO_H
 #include <errnos.h>
 #include <sysdep.h>
 
diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h
index 12e12b3a99..a2ff426753 100644
--- a/sysdeps/generic/paths.h
+++ b/sysdeps/generic/paths.h
@@ -50,6 +50,7 @@
 #define	_PATH_DRUM	"/dev/drum"
 #define	_PATH_KMEM	"/dev/kmem"
 #define	_PATH_MAILDIR	"/var/mail"
+#define	_PATH_LASTLOG	"/var/log/lastlog"
 #define	_PATH_MAN	"/usr/man"
 #define	_PATH_MEM	"/dev/mem"
 #define	_PATH_MNTTAB    "/etc/fstab"
@@ -60,7 +61,9 @@
 #define	_PATH_SHELLS	"/etc/shells"
 #define	_PATH_TTY	"/dev/tty"
 #define	_PATH_UNIX	"/vmunix"
+#define	_PATH_UTMP	"/var/run/utmp"
 #define	_PATH_VI	"/usr/bin/vi"
+#define	_PATH_WTMP	"/var/log/wtmp"
 
 /* Provide trailing slash, since mostly used for building pathnames. */
 #define	_PATH_DEV	"/dev/"
diff --git a/sysdeps/generic/sigset.h b/sysdeps/generic/sigset.h
index 361d157bf5..a137d428c3 100644
--- a/sysdeps/generic/sigset.h
+++ b/sysdeps/generic/sigset.h
@@ -37,6 +37,10 @@ typedef unsigned long int __sigset_t;
 #if !defined (_SIGSET_H_fns) && defined (_SIGNAL_H)
 #define _SIGSET_H_fns 1
 
+#ifndef _EXTERN_INLINE
+#define _EXTERN_INLINE extern __inline
+#endif
+
 /* Return a mask that includes SIG only.  The cast to `sigset_t' avoids
    overflow if `sigset_t' is wider than `int'.  */
 #define	__sigmask(sig)	(((__sigset_t) 1) << ((sig) - 1))
@@ -44,38 +48,24 @@ typedef unsigned long int __sigset_t;
 #define	__sigemptyset(set)	((*(set) = (__sigset_t) 0), 0)
 #define	__sigfillset(set)	((*(set) = ~(__sigset_t) 0), 0)
 
-/* These functions must check for a bogus signal number.  We detect it by a
-   zero sigmask, since a number too low or too high will have shifted the 1
-   off the high end of the mask.  If we find an error, we punt to a random
-   call we know fails with EINVAL (kludge city!), so as to avoid referring
-   to `errno' in this file (sigh).  */
+/* These functions needn't check for a bogus signal number -- error
+   checking is done in the non __ versions.  */
 
 extern int __sigismember (__const __sigset_t *, int);
 extern int __sigaddset (__sigset_t *, int);
 extern int __sigdelset (__sigset_t *, int);
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
-#endif
 #define __SIGSETFN(NAME, BODY, CONST)					      \
   _EXTERN_INLINE int							      \
-  __##NAME (CONST __sigset_t *__set, int __sig)				      \
+  NAME (CONST __sigset_t *__set, int __sig)				      \
   {									      \
-    if (__sig < 1 || __sig > (int) sizeof (__sigset_t) * 8)		      \
-      {									      \
-	extern int raise (int);						      \
-	return raise (-1);						      \
-      }									      \
-    else								      \
-      {									      \
-	__sigset_t __mask = __sigmask (__sig);				      \
-	return BODY;							      \
-      }									      \
+    __sigset_t __mask = __sigmask (__sig);				      \
+    return BODY;							      \
   }
 
-__SIGSETFN (sigismember, (*__set & __mask) ? 1 : 0, __const)
-__SIGSETFN (sigaddset, ((*__set |= __mask), 0), )
-__SIGSETFN (sigdelset, ((*__set &= ~__mask), 0), )
+__SIGSETFN (__sigismember, (*__set & __mask) ? 1 : 0, __const)
+__SIGSETFN (__sigaddset, ((*__set |= __mask), 0), )
+__SIGSETFN (__sigdelset, ((*__set &= ~__mask), 0), )
 
 #undef __SIGSETFN
 
diff --git a/sysdeps/generic/utmpbits.h b/sysdeps/generic/utmpbits.h
index b3fb36ab4a..cbd3457bd4 100644
--- a/sysdeps/generic/utmpbits.h
+++ b/sysdeps/generic/utmpbits.h
@@ -1,31 +1,29 @@
 /* The `struct utmp' type, describing entries in the utmp file.  Generic/BSDish
-Copyright (C) 1993, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1996 Free Software Foundation, Inc.
 
-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 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.
+   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.  */
+   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 _UTMPBITS_H
 
 #define _UTMPBITS_H	1
 #include <features.h>
 
+#include <paths.h>
 #include <time.h>
 
-#define	_PATH_UTMP	"/var/run/utmp"
-#define	_PATH_WTMP	"/var/log/wtmp"
-#define	_PATH_LASTLOG	"/var/log/lastlog"
 
 #define	UT_NAMESIZE	8
 #define	UT_LINESIZE	8
diff --git a/sysdeps/generic/waitstatus.h b/sysdeps/generic/waitstatus.h
index 5cd8b318bb..4fbcbe87aa 100644
--- a/sysdeps/generic/waitstatus.h
+++ b/sysdeps/generic/waitstatus.h
@@ -37,8 +37,8 @@
 /* Nonzero if STATUS indicates termination by a signal.  */
 #ifdef	__GNUC__
 #define	__WIFSIGNALED(status)						      \
-  (__extension__ ({ int __stat = (status);				      \
-		    !__WIFSTOPPED(__stat) && !__WIFEXITED(__stat); }))
+  (__extension__ ({ int __status = (status);				      \
+		    !__WIFSTOPPED(__status) && !__WIFEXITED(__status); }))
 #else	/* Not GCC.  */
 #define	__WIFSIGNALED(status)	(!__WIFSTOPPED(status) && !__WIFEXITED(status))
 #endif	/* GCC.  */
diff --git a/sysdeps/gnu/utmpbits.h b/sysdeps/gnu/utmpbits.h
index 0dd55b59fa..37e4fb9acc 100644
--- a/sysdeps/gnu/utmpbits.h
+++ b/sysdeps/gnu/utmpbits.h
@@ -1,32 +1,30 @@
 /* The `struct utmp' type, describing entries in the utmp file.  GNU version.
-Copyright (C) 1993, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1996 Free Software Foundation, Inc.
 
-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 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.
+   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.  */
+   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 _UTMPBITS_H
 
 #define _UTMPBITS_H	1
 #include <features.h>
 
+#include <paths.h>
 #include <sys/time.h>
 #include <sys/types.h>
 
-#define _PATH_UTMP	"/var/run/utmp"
-#define _PATH_WTMP	"/var/log/wtmp"
-#define _PATH_LASTLOG	"/var/log/lastlog"
 
 #define UT_UNKNOWN	0	/* for ut_type field */
 
@@ -39,6 +37,7 @@ Boston, MA 02111-1307, USA.  */
 #define LOGIN_PROCESS	6
 #define USER_PROCESS	7
 #define DEAD_PROCESS	8
+#define ACCOUNTING	9
 
 #define UT_LINESIZE	32
 #define UT_NAMESIZE	32
diff --git a/sysdeps/posix/readv.c b/sysdeps/posix/readv.c
index 7566fe6c6b..878accaf92 100644
--- a/sysdeps/posix/readv.c
+++ b/sysdeps/posix/readv.c
@@ -30,12 +30,12 @@ ssize_t
 readv (fd, vector, count)
      int fd;
      const struct iovec *vector;
-     size_t count;
+     int count;
 {
   char *buffer;
   size_t bytes;
   int bytes_read;
-  register size_t i;
+  int i;
 
   /* Find the total number of bytes to be read.  */
   bytes = 0;
diff --git a/sysdeps/posix/sigblock.c b/sysdeps/posix/sigblock.c
index 411a952bc3..777710b08a 100644
--- a/sysdeps/posix/sigblock.c
+++ b/sysdeps/posix/sigblock.c
@@ -1,53 +1,55 @@
-/* Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 1994, 1995, 1996 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <ansidecl.h>
 #include <errno.h>
 #include <signal.h>
 
 /* Block signals in MASK, returning the old mask.  */
 int
-DEFUN(__sigblock, (mask), int mask)
+__sigblock (mask)
+     int mask;
 {
   register int sig;
   sigset_t set, oset;
 
-  if (__sigemptyset(&set) < 0)
+  if (__sigemptyset (&set) < 0)
     return -1;
-  
+
   if (sizeof (mask) == sizeof (set))
     *(int *) &set = mask;
+  else if (sizeof (unsigned long int) == sizeof (set))
+    *(unsigned long int *) &set = (unsigned int) mask;
   else
     for (sig = 1; sig < NSIG; ++sig)
-      if ((mask & sigmask(sig)) &&
-	  __sigaddset(&set, sig) < 0)
+      if ((mask & sigmask (sig)) && __sigaddset (&set, sig) < 0)
 	return -1;
 
-  if (sigprocmask(SIG_BLOCK, &set, &oset) < 0)
+  if (sigprocmask (SIG_BLOCK, &set, &oset) < 0)
     return -1;
 
-  mask = 0;
   if (sizeof (mask) == sizeof (oset))
     mask = *(int *) &oset;
+  else if (sizeof (unsigned long int) == sizeof (oset))
+    mask = *(unsigned long int*) &oset;
   else
-    for (sig = 1; sig < NSIG; ++sig)
-      if (__sigismember(&oset, sig))
-	mask |= sigmask(sig);
+    for (sig = 1, mask = 0; sig < NSIG; ++sig)
+      if (__sigismember (&oset, sig))
+	mask |= sigmask (sig);
 
   return mask;
 }
diff --git a/sysdeps/posix/sigintr.c b/sysdeps/posix/sigintr.c
index 37914e997d..25bc5ab56b 100644
--- a/sysdeps/posix/sigintr.c
+++ b/sysdeps/posix/sigintr.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1992, 1994, 1996 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <stddef.h>
 #include <signal.h>
diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c
index 9a8d2de0e4..ce93116075 100644
--- a/sysdeps/posix/signal.c
+++ b/sysdeps/posix/signal.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <errno.h>
 #include <signal.h>
@@ -31,7 +31,8 @@ signal (sig, handler)
 {
   struct sigaction act, oact;
 
-  if (handler == SIG_ERR)
+  /* Check signal extents to protect __sigismember.  */
+  if (handler == SIG_ERR || sig < 1 || sig >= NSIG)
     {
       __set_errno (EINVAL);
       return SIG_ERR;
diff --git a/sysdeps/posix/sigpause.c b/sysdeps/posix/sigpause.c
index 97716d352b..020a46b120 100644
--- a/sysdeps/posix/sigpause.c
+++ b/sysdeps/posix/sigpause.c
@@ -1,29 +1,29 @@
-/* Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 92, 94, 95, 96 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <ansidecl.h>
 #include <errno.h>
 #include <signal.h>
 
 /* Set the mask of blocked signals to MASK,
    wait for a signal to arrive, and then restore the mask.  */
 int
-DEFUN(__sigpause, (mask), int mask)
+__sigpause (mask)
+     int mask;
 {
   sigset_t set;
   int sig;
@@ -33,10 +33,11 @@ DEFUN(__sigpause, (mask), int mask)
 
   if (sizeof (mask) == sizeof (set))
     *(int *) &set = mask;
+  else if (sizeof (unsigned long int) == sizeof (set))
+    *(unsigned long int *) &set = (unsigned int) mask;
   else
     for (sig = 1; sig < NSIG; ++sig)
-      if ((mask & sigmask(sig)) &&
-	  __sigaddset(&set, sig) < 0)
+      if ((mask & sigmask (sig)) && __sigaddset (&set, sig) < 0)
 	return -1;
 
   return sigsuspend (&set);
diff --git a/sysdeps/posix/sigsetmask.c b/sysdeps/posix/sigsetmask.c
index 87756278ad..034719870d 100644
--- a/sysdeps/posix/sigsetmask.c
+++ b/sysdeps/posix/sigsetmask.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <errno.h>
 #include <signal.h>
@@ -31,20 +31,22 @@ __sigsetmask (int mask)
 
   if (sizeof (mask) == sizeof (set))
     *(int *) &set = mask;
+  else if (sizeof (unsigned long int) == sizeof (set))
+    *(unsigned long int *) &set = (unsigned int) mask;
   else
     for (sig = 1; sig < NSIG; ++sig)
-      if ((mask & sigmask(sig)) &&
-	  __sigaddset (&set, sig) < 0)
+      if ((mask & sigmask (sig)) && __sigaddset (&set, sig) < 0)
 	return -1;
 
   if (__sigprocmask (SIG_SETMASK, &set, &oset) < 0)
     return -1;
 
-  mask = 0;
   if (sizeof (mask) == sizeof (oset))
     mask = *(int *) &oset;
+  else if (sizeof (unsigned long int) == sizeof (oset))
+    mask = *(unsigned long int *) &oset;
   else
-    for (sig = 1; sig < NSIG; ++sig)
+    for (sig = 1, mask = 0; sig < NSIG; ++sig)
       if (__sigismember (&oset, sig))
 	mask |= sigmask (sig);
 
diff --git a/sysdeps/posix/sigvec.c b/sysdeps/posix/sigvec.c
index 7e9aeb368e..59d30f2d29 100644
--- a/sysdeps/posix/sigvec.c
+++ b/sysdeps/posix/sigvec.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 <signal.h>
 #include <errno.h>
@@ -54,19 +54,19 @@ convert_mask (set, mask)
   register int sig;
 
   if (sizeof (*set) == sizeof (mask))
+    *(int *) set = mask;
+  else if (sizeof (*set) == sizeof (unsigned long int))
+    *(unsigned long int *) set = (unsigned int) mask;
+  else
     {
-      *(int *) set = mask;
-      return 0;
-    }
-
-  if (__sigemptyset (set) < 0)
-    return -1;
-
-  for (sig = 1; sig < NSIG; ++sig)
-    if (mask & sigmask (sig))
-      if (__sigaddset (set, sig) < 0)
+      if (__sigemptyset (set) < 0)
 	return -1;
 
+      for (sig = 1; sig < NSIG; ++sig)
+	if ((mask & sigmask (sig)) && __sigaddset (set, sig) < 0)
+	  return -1;
+    }
+
   return 0;
 }
 
@@ -135,6 +135,8 @@ __sigvec (sig, vec, ovec)
 
       if (sizeof (int) == sizeof (sigset_t))
 	mask = *(int *) &old.sa_mask;
+      else if (sizeof (unsigned long int) == sizeof (sigset_t))
+	mask = *(unsigned long int *) &old.sa_mask;
       else
 	for (i = 1; i < NSIG; ++i)
 	  if (__sigismember(&old.sa_mask, i))
diff --git a/sysdeps/posix/sigwait.c b/sysdeps/posix/sigwait.c
index 0cd5f80fda..2e70eef568 100644
--- a/sysdeps/posix/sigwait.c
+++ b/sysdeps/posix/sigwait.c
@@ -42,38 +42,38 @@ __sigwait (const sigset_t *set, int *sig)
   int this;
 
   /* Prepare set.  */
-  sigfillset (&tmp_mask);
+  __sigfillset (&tmp_mask);
 
   /* Unblock all signals in the SET and register our nice handler.  */
   action.sa_handler = ignore_signal;
   action.sa_flags = 0;
-  sigfillset (&action.sa_mask);		/* Block all signals for handler.  */
+  __sigfillset (&action.sa_mask);	/* Block all signals for handler.  */
 
   /* Make sure we recognize error conditions by setting WAS_SIG to a
      value which does not describe a legal signal number.  */
   was_sig = -1;
 
   for (this = 0; this < NSIG; ++this)
-    if (sigismember (set, this))
+    if (__sigismember (set, this))
       {
 	/* Unblock this signal.  */
-	sigdelset (&tmp_mask, this);
+	__sigdelset (&tmp_mask, this);
 
 	/* Register temporary action handler.  */
-	if (sigaction (this, &action, &saved[this]) != 0)
+	if (__sigaction (this, &action, &saved[this]) != 0)
 	  goto restore_handler;
       }
 
   /* Now we can wait for signals.  */
-  sigsuspend (&tmp_mask);
+  __sigsuspend (&tmp_mask);
 
  restore_handler:
   save_errno = errno;
 
   while (--this >= 0)
-    if (sigismember (set, this))
+    if (__sigismember (set, this))
       /* We ignore errors here since we must restore all handlers.  */
-      sigaction (this, &saved[this], NULL);
+      __sigaction (this, &saved[this], NULL);
 
   __set_errno (save_errno);
 
diff --git a/sysdeps/posix/writev.c b/sysdeps/posix/writev.c
index 06306ad209..2f0572f837 100644
--- a/sysdeps/posix/writev.c
+++ b/sysdeps/posix/writev.c
@@ -30,12 +30,12 @@ ssize_t
 writev (fd, vector, count)
      int fd;
      const struct iovec *vector;
-     size_t count;
+     int count;
 {
   char *buffer;
   register char *bp;
   size_t bytes, to_copy;
-  register size_t i;
+  int i;
 
   /* Find the total number of bytes to be written.  */
   bytes = 0;
diff --git a/sysdeps/unix/execve.S b/sysdeps/unix/execve.S
index 5d48bc63d8..0e578e23cf 100644
--- a/sysdeps/unix/execve.S
+++ b/sysdeps/unix/execve.S
@@ -1,20 +1,20 @@
-/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 92, 93, 95, 96 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
@@ -28,6 +28,6 @@ Cambridge, MA 02139, USA.  */
 
 SYSCALL__ (execve, 3)
 	ret
-PSEUDO_END(execve)
+PSEUDO_END(__execve)
 
 weak_alias (__execve, execve)
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 0e87d09142..fcfb76c08f 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -5,7 +5,7 @@ endif
 ifeq ($(subdir), misc)
 sysdep_routines += sysctl clone
 
-sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
+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 syscall-list.h sys/sysmacros.h sys/procfs.h \
 		  sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
index d31d9e9b4d..3d9f6dca5f 100644
--- a/sysdeps/unix/sysv/linux/alpha/brk.S
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -1,24 +1,25 @@
 /* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
-   Contributed by Brendan Kehoe (brendan@zen.org).
+   This file is part of the GNU C Library.
+   Contributed by Brendan Kehoe <brendan@zen.org>, 1993.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* __brk is a special syscall under Linux since it never returns an
-error.  Instead, the error condition is indicated by returning the old
-break value (instead of the new, requested one).  */
+   error.  Instead, the error condition is indicated by returning the old
+   break value (instead of the new, requested one).  */
 
 #include <sysdep.h>
 #define _ERRNO_H
@@ -39,8 +40,10 @@ __curbrk: .skip 8
 LEAF(__brk, 0)
 	ldgp	gp, 0(t12)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S
index 9dbf3034c9..03ecddc727 100644
--- a/sysdeps/unix/sysv/linux/alpha/clone.S
+++ b/sysdeps/unix/sysv/linux/alpha/clone.S
@@ -1,20 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* clone() is even more special than fork() as it mucks with stacks
    and invokes a function in the right context after its all over.  */
@@ -33,8 +34,10 @@ ENTRY(__clone)
 	stq	a4,0(sp)
 	stq	a5,8(sp)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
index 1176a2730f..dbc25bcbf3 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@azstarnet.com).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
@@ -26,8 +27,10 @@ LEAF(__ieee_get_fp_control, 16)
 #ifdef PROF
 	ldgp	gp, 0(pv)
 	lda	sp, -16(sp)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	lda	sp, -16(sp)
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
index aa761ecaca..8486cfaa3a 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@azstarnet.com).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
@@ -24,8 +25,10 @@ LEAF(__ieee_set_fp_control, 16)
 #ifdef PROF
 	ldgp	gp, 0(sp)
 	lda	sp, -16(sp)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	lda	sp, -16(sp)
diff --git a/sysdeps/unix/sysv/linux/alpha/llseek.S b/sysdeps/unix/sysv/linux/alpha/llseek.S
index 45fb349236..a2e644c161 100644
--- a/sysdeps/unix/sysv/linux/alpha/llseek.S
+++ b/sysdeps/unix/sysv/linux/alpha/llseek.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@cs.arizona.edu).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* For compatibility only: a "long" is 64 bits on the Alpha, so
    llseek() isn't really needed.  But there are some programs out
@@ -26,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(llseek)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
index 83d331fef0..f476ed595f 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
+++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@cs.arizona.edu).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* sigsuspend is a special syscall since it needs to dereference the
    sigset.  */
@@ -23,11 +24,13 @@ Cambridge, MA 02139, USA.  */
 
 	.text
 
-LEAF(sigsuspend, 0)
+LEAF(__sigsuspend, 0)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
@@ -46,4 +49,6 @@ error:
 #endif
 	jmp	zero, __syscall_error
 
-	END(sigsuspend)
+	END(__sigsuspend)
+
+weak_alias(__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S
index 81043c2cdb..75e1260aea 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscall.S
+++ b/sysdeps/unix/sysv/linux/alpha/syscall.S
@@ -1,20 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@azstarnet.com).
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1996.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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>
 
@@ -44,8 +45,10 @@ Cambridge, MA 02139, USA.  */
 LEAF(__syscall, 0)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
@@ -69,4 +72,6 @@ error:
 #endif
 	jmp	zero, __syscall_error
 
+END(__syscall)
+
 weak_alias(__syscall, syscall)
diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
index 5e83d4411d..2592c6c8c8 100644
--- a/sysdeps/unix/sysv/linux/configure
+++ b/sysdeps/unix/sysv/linux/configure
@@ -43,3 +43,12 @@ Linux 2.0.10 or later.  This check uses <linux/version.h>, so
 make sure that file was built correctly when installing the kernel header
 files." 1>&2; exit 1; }
 fi
+
+# The Linux filesystem standard prescribes where to place "essential"
+# files.  I.e., when the installation prefix is "/usr" we have to place
+# shared library objects and the configuation files on the root partition
+# in /lib and /etc.
+if test "$prefix" = "/usr"; then
+  libc_cv_slibdir="/lib"
+  libc_cv_sysconfdir="/etc"
+fi
diff --git a/sysdeps/unix/sysv/linux/errnos.h b/sysdeps/unix/sysv/linux/errnos.h
index 53a2ec053d..982477c8f3 100644
--- a/sysdeps/unix/sysv/linux/errnos.h
+++ b/sysdeps/unix/sysv/linux/errnos.h
@@ -37,6 +37,7 @@ __set_errno (int __err)
 {
   return *__errno_location () = errno = __err;
 }
+#    define __set_errno __set_errno
 #   else /* !_LIBC_REENTRANT */
 #    define __set_errno(val) errno = (val)
 #   endif /* _LIBC_REENTRANT */
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index d37ca8c80f..2b855c7a84 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -1,23 +1,24 @@
 /* getsysstats - Determine various system internal values, Linux version.
-Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-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.  */
-
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   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 <alloca.h>
 #include <errno.h>
 #include <mntent.h>
 #include <paths.h>
diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h
index 2905e9effd..6751c0d4a9 100644
--- a/sysdeps/unix/sysv/linux/paths.h
+++ b/sysdeps/unix/sysv/linux/paths.h
@@ -49,6 +49,7 @@
 #define	_PATH_DEVNULL	"/dev/null"
 #define	_PATH_DRUM	"/dev/drum"
 #define	_PATH_KMEM	"/dev/kmem"
+#define _PATH_LASTLOG	"/var/log/lastlog"
 #define	_PATH_MAILDIR	"/var/spool/mail"
 #define	_PATH_MAN	"/usr/man"
 #define	_PATH_MEM	"/dev/mem"
@@ -60,7 +61,9 @@
 #define	_PATH_SHELLS	"/etc/shells"
 #define	_PATH_TTY	"/dev/tty"
 #define	_PATH_UNIX	"/vmlinux"
+#define _PATH_UTMP	"/var/run/utmp"
 #define	_PATH_VI	"/usr/bin/vi"
+#define _PATH_WTMP	"/var/log/wtmp"
 
 /* Provide trailing slash, since mostly used for building pathnames. */
 #define	_PATH_DEV	"/dev/"
diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c
index 1aeda8224a..8b3d2519ce 100644
--- a/sysdeps/unix/sysv/linux/sigsuspend.c
+++ b/sysdeps/unix/sysv/linux/sigsuspend.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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.  */
+   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 <signal.h>
 #include <stddef.h>
@@ -25,8 +25,9 @@ extern int __syscall_sigsuspend (int, unsigned long, unsigned long);
 /* Change the set of blocked signals to SET,
    wait until a signal arrives, and restore the set of blocked signals.  */
 int
-sigsuspend (set)
+__sigsuspend (set)
      const sigset_t *set;
 {
   return __syscall_sigsuspend (0, 0, *set);
 }
+weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/sparc/clone.S b/sysdeps/unix/sysv/linux/sparc/clone.S
new file mode 100644
index 0000000000..875dcba64a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/clone.S
@@ -0,0 +1,88 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+   Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
+
+   FIXME:	Currently only 6 parameters can be passsed
+	        to the clone function.
+		
+   based on code written for the Intel by Richard 
+   Henderson (rth@tamu.edu)
+	
+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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+/* clone() is even more special than fork() as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+	
+#include <asm/errno.h>
+#include <asm/unistd.h>
+
+/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */
+
+	.text
+	.align	4
+	.globl	__libc_clone
+	.type	__libc_clone,@function
+	.weak	clone
+	__clone = __libc_clone
+	clone   = __libc_clone
+__libc_clone:	
+	save	%sp,-96,%sp
+	/* sanity check arguments */
+	tst	%i0
+	be	__clone_syscall_error
+	tst	%i1
+	be	__clone_syscall_error
+	cmp	%i3,0
+	bl	__clone_syscall_error
+        nop
+
+	/* Flush the register windows */
+	ta	3
+
+	/* Parameters for system call */	
+	mov	%i1,%o1
+	mov	%i2,%o0
+
+	/* parameters that are on the stack for routine */
+#define P(x) 0x5c+(x*4)
+	ld	[%fp+P(0)],%o2
+	ld	[%fp+P(1)],%o3
+	ld	[%fp+P(2)],%o4
+	ld	[%fp+P(3)],%o5
+	/* Do the system call */
+	set	__NR_clone,%g1
+	ta	0x10
+	bcs	__clone_syscall_error
+	tst	%o1
+	bne	__thread_start
+	nop
+	mov	%o0,%i0
+	ret
+	restore
+	
+__clone_syscall_error:
+	call	__errno_location
+	set	EINVAL,%i0
+	st	%i0,[%o0]
+	mov	-1,%i0
+	ret
+	restore
+
+__thread_start:
+	mov	%i5,%o1
+	call	%i0
+	mov	%i4,%o0
+	call	_exit,0
+	nop