diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/init-first.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/init-first.h | 13 |
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"); |