Replace stub with real implementation.

This commit is contained in:
Ulrich Drepper 1998-07-27 17:54:21 +00:00
parent f69a3b40ff
commit e3ec78f5a3
1 changed files with 34 additions and 2 deletions

View File

@ -1,5 +1,6 @@
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. /* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Pat Beirne <patb@corelcomputer.com>
The GNU C Library is free software; you can redistribute it and/or 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 modify it under the terms of the GNU Library General Public License as
@ -27,7 +28,38 @@
.text .text
ENTRY(__clone) ENTRY(__clone)
/* Somebody needs to write this. */ @ sanity check args
cmp r0, #0
cmpne r1, #0
moveq r0, #-EINVAL
beq PLTJMP(syscall_error)
@ insert the args onto the new stack
sub r1, r1, #8
str r3, [r1, #4]
@ save the function pointer as the 0th element
str r0, [r1]
@ do the system call
@ get flags
mov r0, r2
@ new sp is already in r1
swi SYS_ify(clone)
cmp r0, #0
blt PLTJMP(syscall_error)
beq thread_start
@ else, thread was launched...
mov pc, lr
thread_start:
@ pick the function arg and call address off the stack and execute
ldr r0, [sp, #4]
mov lr, pc
ldr pc, [sp]
@ and we are done, passing the return value through r0
bl PLTJMP(_exit)
PSEUDO_END (__clone) PSEUDO_END (__clone)
weak_alias (__clone, clone) weak_alias (__clone, clone)