2002-11-07 Richard Henderson <rth@redhat.com>
authorRoland McGrath <roland@gnu.org>
Fri, 8 Nov 2002 02:18:45 +0000 (02:18 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 8 Nov 2002 02:18:45 +0000 (02:18 +0000)
* elf/tls-macros.h: Add alpha versions.
* sysdeps/alpha/dl-machine.h (elf_machine_rela): Handle TLS relocs.
* sysdeps/unix/alpha/sysdep.S: Support USE___THREAD.
* sysdeps/unix/alpha/sysdep.h: Likewise.  Add SYSCALL_ERROR_HANDLER.
* sysdeps/unix/sysv/linux/alpha/brk.S: Use it.
* sysdeps/unix/sysv/linux/alpha/clone.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/getitimer.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/getrusage.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/gettimeofday.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/select.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/setitimer.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/settimeofday.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/utimes.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/wait4.S: Likewise.
* sysdeps/unix/sysv/linux/alpha/clone.S: Add user_tid and tls args.

sysdeps/unix/sysv/linux/alpha/clone.S

index f1f6214..42df98a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
@@ -24,7 +24,9 @@
 #define _ERRNO_H       1
 #include <bits/errno.h>
 
-/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
+                      pid_t *tid, void *tls);
+ */
 
         .text
 ENTRY(__clone)
@@ -49,24 +51,29 @@ ENTRY(__clone)
        stq     a0,0(a1)
        stq     a3,8(a1)
 
-       /* Do the system call */
+       /* Shift the flags, tid and tls arguments into place; the
+          child_stack argument is already correct.  */
        mov     a2,a0
+       mov     a4,a2
+       mov     a5,a3
+
+       /* Do the system call.  */
        ldiq    v0,__NR_clone
        call_pal PAL_callsys
 
        bne     a3,$error
        beq     v0,thread_start
 
-       /* Successful return from the parent */
+       /* Successful return from the parent */
        ret
 
-       /* Something bad happened -- no child created */
+       /* Something bad happened -- no child created */
 $error:
 #ifndef PROF
        br      gp,1f
 1:     ldgp    gp,0(gp)
 #endif
-       jmp     zero,__syscall_error
+       SYSCALL_ERROR_HANDLER
 
        END(__clone)
 
@@ -85,11 +92,11 @@ thread_start:
        ldq     a0,8(sp)
        addq    sp,16,sp
 
-       /* Call the user's function */
+       /* Call the user's function */
        jsr     ra,(pv)
        ldgp    gp,0(ra)
 
-       /* Call _exit rather than doing it inline for breakpoint purposes */
+       /* Call _exit rather than doing it inline for breakpoint purposes */
        mov     v0,a0
        jsr     ra,_exit