summaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-05-21 00:07:08 +0000
committerUlrich Drepper <drepper@redhat.com>1997-05-21 00:07:08 +0000
commit57790ddd1570d9be99059caf8bcb5661795b68e4 (patch)
tree5c1fc5c1a97cdeb9496ce9c2606dd1b845532ef2 /sysdeps/unix
parentae62f3fd1a00bd20907ca9416f1e4b84215f3958 (diff)
Likewise tuck the thread data onto the new thread's stack.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/clone.S13
1 files changed, 10 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S
index 261bd81e57..aab4e590a5 100644
--- a/sysdeps/unix/sysv/linux/alpha/clone.S
+++ b/sysdeps/unix/sysv/linux/alpha/clone.S
@@ -42,9 +42,12 @@ ENTRY(__clone)
beq a0,$error /* no NULL function pointers */
beq a1,$error /* no NULL stack pointers */
+ /* Save the fn ptr and arg on the new stack. */
+ subq a1,16,a1
+ stq a0,0(a1)
+ stq a3,8(a1)
+
/* Do the system call */
- mov a0,pv /* get fn ptr out of the way */
- mov a3,a4 /* get fn arg out of the way */
mov a2,a0
ldiq v0,__NR_clone
call_pal PAL_callsys
@@ -73,8 +76,12 @@ thread_start:
mov zero,fp
.prologue 0
+ /* Load up the arguments. */
+ ldq pv,0(sp)
+ ldq a0,8(sp)
+ addq sp,16,sp
+
/* Call the user's function */
- mov a4,a0
jsr ra,(pv)
ldgp gp,0(ra)