diff options
Diffstat (limited to 'contrib/syslinux-4.02/com32/lib/sys/exit.S')
-rw-r--r-- | contrib/syslinux-4.02/com32/lib/sys/exit.S | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/com32/lib/sys/exit.S b/contrib/syslinux-4.02/com32/lib/sys/exit.S new file mode 100644 index 0000000..2ab8012 --- /dev/null +++ b/contrib/syslinux-4.02/com32/lib/sys/exit.S @@ -0,0 +1,41 @@ +/* + * Implementation of _exit() for com32 based on c32entry.S + */ + .text + + .globl _Exit + .type _Exit, @function +_Exit: + /* Just fall through to _exit */ + .size _Exit, .-_Exit + + .globl _exit + .type _exit, @function +_exit: +#ifdef REGPARM + pushl %eax +#endif + + /* Run any destructors */ + movl $__dtors_start, %esi +2: + cmpl $__dtors_end, %esi + jae 1f + call *(%esi) + addl $4,%esi + jmp 2b + +1: +#ifdef REGPARM + popl %eax +#else + movl 4(%esp),%eax # Exit code in %eax = return value +#endif + movl (__entry_esp),%esp # Return stack pointer to entry value + ret # Return to termination address + .size _exit, .-_exit + + .data +__exit_handler: + .globl __exit_handler + .long _exit |