summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/i386/clone.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/clone.S')
-rw-r--r--sysdeps/unix/sysv/linux/i386/clone.S14
1 files changed, 6 insertions, 8 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S
index 69243d5c8c..54524ec120 100644
--- a/sysdeps/unix/sysv/linux/i386/clone.S
+++ b/sysdeps/unix/sysv/linux/i386/clone.S
@@ -88,6 +88,7 @@ ENTRY (BP_SYM (__clone))
cfi_adjust_cfa_offset (4)
pushl %edi
cfi_adjust_cfa_offset (4)
+
movl TLS+12(%esp),%esi
cfi_rel_offset (esi, 4)
movl PTID+12(%esp),%edx
@@ -102,16 +103,14 @@ ENTRY (BP_SYM (__clone))
movl %ebx, (%ecx)
#endif
+ /* End FDE now, because in the child the unwind info will be
+ wrong. */
+ cfi_endproc
+
int $0x80
popl %edi
- cfi_adjust_cfa_offset (-4)
- cfi_restore (edi)
popl %esi
- cfi_adjust_cfa_offset (-4)
- cfi_restore (esi)
popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
test %eax,%eax
jl SYSCALL_ERROR_LABEL
@@ -131,10 +130,8 @@ L(haspid):
call *%ebx
#ifdef PIC
call L(here)
- cfi_adjust_cfa_offset (4)
L(here):
popl %ebx
- cfi_adjust_cfa_offset (-4)
addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx
#endif
movl %eax, %ebx
@@ -156,6 +153,7 @@ L(nomoregetpid):
.previous
#endif
+ cfi_startproc
PSEUDO_END (BP_SYM (__clone))
weak_alias (BP_SYM (__clone), BP_SYM (clone))