update from main archive 961119 libc-961126
authordrepper <drepper>
Wed, 20 Nov 1996 03:45:24 +0000 (03:45 +0000)
committerdrepper <drepper>
Wed, 20 Nov 1996 03:45:24 +0000 (03:45 +0000)
14 files changed:
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/alpha/brk.S
sysdeps/unix/sysv/linux/alpha/clone.S
sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
sysdeps/unix/sysv/linux/alpha/llseek.S
sysdeps/unix/sysv/linux/alpha/sigsuspend.S
sysdeps/unix/sysv/linux/alpha/syscall.S
sysdeps/unix/sysv/linux/configure
sysdeps/unix/sysv/linux/errnos.h
sysdeps/unix/sysv/linux/getsysstats.c
sysdeps/unix/sysv/linux/paths.h
sysdeps/unix/sysv/linux/sigsuspend.c
sysdeps/unix/sysv/linux/sparc/clone.S [new file with mode: 0644]

index 0e87d09..fcfb76c 100644 (file)
@@ -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
index d31d9e9..3d9f6dc 100644 (file)
@@ -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
 
index 9dbf303..03ecddc 100644 (file)
@@ -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
 
index 1176a27..dbc25bc 100644 (file)
@@ -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)
index aa761ec..8486cfa 100644 (file)
@@ -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)
index 45fb349..a2e644c 100644 (file)
@@ -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
index 83d331f..f476ed5 100644 (file)
@@ -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)
index 81043c2..75e1260 100644 (file)
@@ -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)
index 5e83d44..2592c6c 100644 (file)
@@ -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
index 53a2ec0..982477c 100644 (file)
@@ -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 */
index d37ca8c..2b855c7 100644 (file)
@@ -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>
index 2905e9e..6751c0d 100644 (file)
@@ -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/"
index 1aeda82..8b3d251 100644 (file)
@@ -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 (file)
index 0000000..875dcba
--- /dev/null
@@ -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