summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc')
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/clone.S8
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/clone.S25
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)