#include #include // void _exit_with_stack_teardown(void* stackBase, int stackSize, int status) ENTRY(_exit_with_stack_teardown) // We can trash %ebx here since this call should never return. // 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 $__NR_munmap, %eax int $0x80 // If munmap failed, we ignore the failure and exit anyway. mov %edx, %ebx // status movl $__NR_exit, %eax int $0x80 // The exit syscall does not return. END(_exit_with_stack_teardown)