(__clone) [PIC]: Save PIC, reload PIC if we need to call __syscall_error,

cleanup asm.
This commit is contained in:
Ulrich Drepper 2003-12-18 06:05:03 +00:00
parent c1f024c3e1
commit 46bf1d81a4
1 changed files with 20 additions and 3 deletions

View File

@ -42,6 +42,11 @@ ENTRY(__clone)
stwm %arg0,64(%arg1)
stw %arg3,-60(%arg1)
/* Save the PIC register. */
#ifdef PIC
stw %r19,-32(%sr0, %sp) /* parent */
#endif
/* Do the system call */
copy %arg2,%arg0
ble 0x100(%sr2,%r0)
@ -53,19 +58,31 @@ ENTRY(__clone)
comib,=,n 0,%ret0,thread_start
/* Successful return from the parent */
/* Successful return from the parent
No need to restore the PIC register,
since we return immediately. */
bv %r0(%rp)
nop
/* Something bad happened -- no child created */
.Lerror:
/* Restore the PIC register on error */
#ifdef PIC
ldw -32(%sr0, %sp), %r19 /* parent */
#endif
b __syscall_error
sub %r0,%ret0,%arg0
thread_start:
/* Load up the arguments. */
ldw -60(%sp),%arg0
ldw -64(%sp),%r22
ldw -60(%sr0, %sp),%arg0
ldw -64(%sr0, %sp),%r22
/* $$dyncall fixes childs PIC register */
/* Call the user's function */
bl $$dyncall,%r31