diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 25 |
3 files changed, 16 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog index 86046af74d..a3a3d62f37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2007-08-16 Jakub Jelinek <jakub@redhat.com> + * 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. + * stdlib/bits/stdlib-ldbl.h (__strtold_internal): Remove. * wcsmbs/bits/wchar-ldbl.h (__wcstold_internal): Remove. 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) |