summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux')
-rw-r--r--libc/sysdeps/linux/i386/clone.S16
1 files changed, 11 insertions, 5 deletions
diff --git a/libc/sysdeps/linux/i386/clone.S b/libc/sysdeps/linux/i386/clone.S
index 259982230..35a4e5b7f 100644
--- a/libc/sysdeps/linux/i386/clone.S
+++ b/libc/sysdeps/linux/i386/clone.S
@@ -51,19 +51,19 @@ __clone:
/* no NULL function pointers */
movl FUNC(%esp),%ecx
#ifdef __PIC__
- jecxz __syscall_error
+ jecxz __error
#else
testl %ecx,%ecx
- jz __syscall_error
+ jz __error
#endif
/* no NULL stack pointers */
movl STACK(%esp),%ecx
#ifdef __PIC__
- jecxz __syscall_error
+ jecxz __error
#else
testl %ecx,%ecx
- jz __syscall_error
+ jz __error
#endif
/* Insert the argument onto the new stack. Make sure the new
@@ -96,7 +96,7 @@ __clone:
popl %ebx
test %eax,%eax
- jl __syscall_error
+ jl __error
jz .Lthread_start
ret
@@ -114,6 +114,12 @@ __clone:
movl $__NR_exit, %eax
int $0x80
+/* Need to indirect jump to syscall error
+ * or we end up with TEXTREL's
+ */
+__error:
+ jmp __syscall_error
+
.size __clone,.-__clone
.weak clone