Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update.
2003-12-18  Carlos O'Donell  <carlos@baldric.uwo.ca>

	* sysdeps/unix/sysv/linux/hppa/clone.S (__clone) [PIC]: Save PIC,
	reload PIC if we need to call __syscall_error, cleanup asm.
  • Loading branch information
Ulrich Drepper committed Dec 18, 2003
1 parent 592f26a commit 3434f15
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
@@ -1,3 +1,8 @@
2003-12-18 Carlos O'Donell <carlos@baldric.uwo.ca>

* sysdeps/unix/sysv/linux/hppa/clone.S (__clone) [PIC]: Save PIC,
reload PIC if we need to call __syscall_error, cleanup asm.

2003-12-17 Carlos O'Donell <carlos@baldric.uwo.ca>

* sysdeps/hppa/fpu/fclrexcpt.c (feclearexcept): Right shift
Expand Down
23 changes: 20 additions & 3 deletions sysdeps/unix/sysv/linux/hppa/clone.S
Expand Up @@ -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)
Expand All @@ -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
Expand Down

0 comments on commit 3434f15

Please sign in to comment.