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.