From 9dec707bd6fa59849c205db6f878f1b2cc2de536 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 26 Nov 2013 13:48:24 -0800 Subject: [PATCH] Fix _exit_with_stack_teardown for x86. Change-Id: Ife8f9c538c86f7c0017143015d5ee849a99b625b --- libc/arch-x86/bionic/_exit_with_stack_teardown.S | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libc/arch-x86/bionic/_exit_with_stack_teardown.S b/libc/arch-x86/bionic/_exit_with_stack_teardown.S index 9128f10d8..03a4be02b 100644 --- a/libc/arch-x86/bionic/_exit_with_stack_teardown.S +++ b/libc/arch-x86/bionic/_exit_with_stack_teardown.S @@ -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.