* 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.
This commit is contained in:
Jakub Jelinek 2007-08-16 19:44:26 +00:00
parent 18915760ad
commit 91ddd9c448
3 changed files with 16 additions and 24 deletions

View File

@ -1,5 +1,12 @@
2007-08-16 Jakub Jelinek <jakub@redhat.com> 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. * stdlib/bits/stdlib-ldbl.h (__strtold_internal): Remove.
* wcsmbs/bits/wchar-ldbl.h (__wcstold_internal): Remove. * wcsmbs/bits/wchar-ldbl.h (__wcstold_internal): Remove.

View File

@ -41,9 +41,9 @@ ENTRY (__clone)
/* sanity check arguments */ /* sanity check arguments */
orcc %i0,%g0,%g2 orcc %i0,%g0,%g2
be .Lerror be .Leinval
orcc %i1,%g0,%o1 orcc %i1,%g0,%o1
be .Lerror be .Leinval
mov %i2,%o0 mov %i2,%o0
/* The child_stack is the top of the stack, allocate one /* The child_stack is the top of the stack, allocate one
@ -70,9 +70,11 @@ ENTRY (__clone)
jmpl %i7 + 8, %g0 jmpl %i7 + 8, %g0
restore %o0,%g0,%o0 restore %o0,%g0,%o0
.Leinval:
mov EINVAL, %o0
.Lerror: .Lerror:
call HIDDEN_JUMPTARGET(__errno_location) call HIDDEN_JUMPTARGET(__errno_location)
or %g0,EINVAL,%i0 mov %o0, %i0
st %i0,[%o0] st %i0,[%o0]
jmpl %i7 + 8, %g0 jmpl %i7 + 8, %g0
restore %g0,-1,%o0 restore %g0,-1,%o0

View File

@ -62,33 +62,16 @@ ENTRY (__clone)
/* Do the system call */ /* Do the system call */
set __NR_clone, %g1 set __NR_clone, %g1
ta 0x6d ta 0x6d
bcs,pn %xcc, 99f bcs,pn %xcc, 98f
nop nop
brnz,pn %o1, __thread_start brnz,pn %o1, __thread_start
nop nop
jmpl %i7 + 8, %g0 jmpl %i7 + 8, %g0
restore %o0, %g0, %o0 restore %o0, %g0, %o0
99: 99: mov EINVAL, %o0
#ifndef _LIBC_REENTRANT 98: call HIDDEN_JUMPTARGET(__errno_location)
#ifdef PIC mov %o0, %i0
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
st %i0, [%o0] st %i0, [%o0]
#endif
jmpl %i7 + 8, %g0 jmpl %i7 + 8, %g0
restore %g0,-1,%o0 restore %g0,-1,%o0
END(__clone) END(__clone)