summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux-4.02/com32/lib/sys/exit.S
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux-4.02/com32/lib/sys/exit.S')
-rw-r--r--contrib/syslinux-4.02/com32/lib/sys/exit.S41
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