mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-27 04:41:02 +08:00
Replace stub with real implementation.
This commit is contained in:
parent
f69a3b40ff
commit
e3ec78f5a3
@ -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.
|
||||
Contributed by Pat Beirne <patb@corelcomputer.com>
|
||||
|
||||
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
|
||||
@ -27,7 +28,38 @@
|
||||
|
||||
.text
|
||||
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)
|
||||
|
||||
weak_alias (__clone, clone)
|
||||
|
Loading…
Reference in New Issue
Block a user