about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/i386/init-first.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/init-first.h')
-rw-r--r--sysdeps/unix/sysv/linux/i386/init-first.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/init-first.h b/sysdeps/unix/sysv/linux/i386/init-first.h
new file mode 100644
index 0000000000..f42d7f2533
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/init-first.h
@@ -0,0 +1,13 @@
+/* This fragment is invoked in the stack context of program start.
+   Its job is to set up a pointer to argc as an argument, pass
+   control to `INIT', and, if necessary, clean up after the call
+   to leave the stack in the same condition it was found in.  */
+
+#define SYSDEP_CALL_INIT(NAME, INIT)	\
+    asm(".globl " #NAME "\n\t"		\
+	#NAME ":\n\t"			\
+	"lea 4(%esp), %eax\n\t"		\
+	"pushl %eax\n\t"		\
+	"call " #INIT "\n\t"		\
+	"popl %eax\n\t"			\
+	"ret");