Fix unwinding through x86-64 __bionic_clone.

x86-64 needs these CFI directives to stop unwinding here.
I've also cleaned up the assembler a little, and made x86 and x86-64
a little more alike.

Bug: 15195760
Change-Id: I40f92c007843c29c933bb6876fe2b4611e1b946b
diff --git a/libc/arch-x86/bionic/__bionic_clone.S b/libc/arch-x86/bionic/__bionic_clone.S
index 7c972de..672512c 100644
--- a/libc/arch-x86/bionic/__bionic_clone.S
+++ b/libc/arch-x86/bionic/__bionic_clone.S
@@ -25,8 +25,8 @@
         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 @@
         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
diff --git a/libc/arch-x86_64/bionic/__bionic_clone.S b/libc/arch-x86_64/bionic/__bionic_clone.S
index db7d05c..7fe44a2 100644
--- a/libc/arch-x86_64/bionic/__bionic_clone.S
+++ b/libc/arch-x86_64/bionic/__bionic_clone.S
@@ -45,17 +45,23 @@
         # 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 @@
         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