am 50b79530: Merge "Fix unwinding through x86-64 __bionic_clone."
* commit '50b79530c6fea6d47d54edf6f351dcbd7d87ab6a': Fix unwinding through x86-64 __bionic_clone.
This commit is contained in:
commit
a271b97773
@ -25,8 +25,8 @@ ENTRY(__bionic_clone)
|
||||
int $0x80
|
||||
|
||||
# Check result.
|
||||
cmpl $0, %eax
|
||||
je .L_bc_child
|
||||
testl %eax, %eax
|
||||
jz .L_bc_child
|
||||
jg .L_bc_parent
|
||||
|
||||
# An error occurred, so set errno and return -1.
|
||||
@ -44,7 +44,7 @@ ENTRY(__bionic_clone)
|
||||
hlt
|
||||
|
||||
.L_bc_parent:
|
||||
# we're the parent; nothing to do.
|
||||
# We're the parent; nothing to do.
|
||||
.L_bc_return:
|
||||
popl %edi
|
||||
popl %esi
|
||||
|
@ -45,17 +45,23 @@ ENTRY(__bionic_clone)
|
||||
# Make the system call.
|
||||
movl $__NR_clone, %eax
|
||||
syscall
|
||||
testl %eax, %eax
|
||||
jns 1f
|
||||
|
||||
# Check result.
|
||||
testq %rax, %rax
|
||||
jz .L_bc_child
|
||||
jg .L_bc_parent
|
||||
|
||||
# An error occurred, set errno and return -1.
|
||||
negl %eax
|
||||
movl %eax, %edi
|
||||
call __set_errno
|
||||
orl $-1, %eax
|
||||
jmp 2f
|
||||
1:
|
||||
jnz 2f
|
||||
ret
|
||||
|
||||
.L_bc_child:
|
||||
# We don't want anyone to unwind past this point.
|
||||
.cfi_undefined %rip
|
||||
.cfi_undefined %rbp
|
||||
|
||||
# We're in the child now, so call __bionic_clone_entry
|
||||
# with the arguments from the child stack moved into
|
||||
@ -64,7 +70,9 @@ ENTRY(__bionic_clone)
|
||||
popq %rsi # arg
|
||||
call __bionic_clone_entry
|
||||
hlt
|
||||
2:
|
||||
|
||||
.L_bc_parent:
|
||||
# We're the parent; nothing to do.
|
||||
ret
|
||||
END(__bionic_clone)
|
||||
.hidden __bionic_clone
|
||||
|
Loading…
x
Reference in New Issue
Block a user