OSDN Git Service

Fix _exit_with_stack_teardown for x86.
authorElliott Hughes <enh@google.com>
Tue, 26 Nov 2013 21:48:24 +0000 (13:48 -0800)
committerElliott Hughes <enh@google.com>
Tue, 26 Nov 2013 21:48:24 +0000 (13:48 -0800)
Change-Id: Ife8f9c538c86f7c0017143015d5ee849a99b625b

libc/arch-x86/bionic/_exit_with_stack_teardown.S

index 9128f10..03a4be0 100644 (file)
@@ -3,12 +3,13 @@
 
 // void _exit_with_stack_teardown(void* stackBase, size_t stackSize, int status)
 ENTRY(_exit_with_stack_teardown)
-    // We can trash %ebx here since this call should never return.
+    // We can trash registers because this function never returns.
     // We can also take advantage of the fact that the linux syscall trap
     // handler saves all the registers, so we don't need a stack to keep
     // the status argument for exit while doing the munmap.
     mov     4(%esp), %ebx             // stackBase
     mov     8(%esp), %ecx             // stackSize
+    mov     12(%esp), %edx            // Also copy 'status' off the stack we're about to unmap.
     mov     $__NR_munmap, %eax
     int     $0x80
     // If munmap failed, we ignore the failure and exit anyway.