bionic: Stack pointer/signal race condition.
Move the stackpointer so a captured signal does not corrupt
stack variables needed for __thread_entry.
Change-Id: I3e1e7b94a6d7cd3a07081f849043262743aa8064
diff --git a/libc/arch-arm/bionic/clone.S b/libc/arch-arm/bionic/clone.S
index a95d2d6..7ff3d0d 100644
--- a/libc/arch-arm/bionic/clone.S
+++ b/libc/arch-arm/bionic/clone.S
@@ -30,8 +30,7 @@
ENTRY(__pthread_clone)
@ insert the args onto the new stack
- str r0, [r1, #-4]
- str r3, [r1, #-8]
+ stmdb r1!, {r0, r3}
@ do the system call
@ get flags
@@ -60,8 +59,7 @@
@ to the C __thread_entry function which does some setup and then
@ calls the thread's start function
- ldr r0, [sp, #-4]
- ldr r1, [sp, #-8]
+ pop {r0, r1}
mov r2, sp @ __thread_entry needs the TLS pointer
b __thread_entry