diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-08-16 19:44:26 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-08-16 19:44:26 +0000 |
commit | 91ddd9c44807742aba0fd255b0345bbb547e1d50 (patch) | |
tree | e53b85646dca01c2ab344e021e72d7cdba106701 /sysdeps | |
parent | 18915760ad84c8901767391f0633b189d7bf2cd3 (diff) | |
download | glibc-91ddd9c44807742aba0fd255b0345bbb547e1d50.tar.gz glibc-91ddd9c44807742aba0fd255b0345bbb547e1d50.tar.xz glibc-91ddd9c44807742aba0fd255b0345bbb547e1d50.zip |
* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone):
If the syscall fails, set errno to the actual returned error number rather than EINVAL. * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): If arguments are incorrect, set errno to EINVAL, if the syscall fails, set errno to the actual returned error number. * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): If the syscall fails, set errno to the actual returned error number rather than EINVAL. * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): If arguments are incorrect, set errno to EINVAL, if the syscall fails, set errno to the actual returned error number.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 25 |
2 files changed, 9 insertions, 24 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index 1e099cc97d..a64d8e519b 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -41,9 +41,9 @@ ENTRY (__clone) /* sanity check arguments */ orcc %i0,%g0,%g2 - be .Lerror + be .Leinval orcc %i1,%g0,%o1 - be .Lerror + be .Leinval mov %i2,%o0 /* The child_stack is the top of the stack, allocate one @@ -70,9 +70,11 @@ ENTRY (__clone) jmpl %i7 + 8, %g0 restore %o0,%g0,%o0 +.Leinval: + mov EINVAL, %o0 .Lerror: call HIDDEN_JUMPTARGET(__errno_location) - or %g0,EINVAL,%i0 + mov %o0, %i0 st %i0,[%o0] jmpl %i7 + 8, %g0 restore %g0,-1,%o0 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index b1dcc914b0..2bbbd80202 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -62,33 +62,16 @@ ENTRY (__clone) /* Do the system call */ set __NR_clone, %g1 ta 0x6d - bcs,pn %xcc, 99f + bcs,pn %xcc, 98f nop brnz,pn %o1, __thread_start nop jmpl %i7 + 8, %g0 restore %o0, %g0, %o0 -99: -#ifndef _LIBC_REENTRANT -#ifdef PIC - call 1f - sethi %hi(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7 -1: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7 - add %l7, %o7, %l7 - set EINVAL, %i0 - sethi %hi(errno), %g2 - or %g2, %lo(errno), %g2 - st %i0, [%l7+%g2] -#else - sethi %hi(errno), %g2 - set EINVAL, %i0 - st %i0, [%g2+%lo(errno)] -#endif -#else - call HIDDEN_JUMPTARGET(__errno_location) - nop +99: mov EINVAL, %o0 +98: call HIDDEN_JUMPTARGET(__errno_location) + mov %o0, %i0 st %i0, [%o0] -#endif jmpl %i7 + 8, %g0 restore %g0,-1,%o0 END(__clone) |