* sysdeps/unix/sysv/linux/alpha/init-first.h,
sysdeps/unix/sysv/linux/m68k/init-first.h,
sysdeps/unix/sysv/linux/i386/init-first.h: New files.
* sysdeps/unix/sysv/linux/init-first.c: Use platform-dependent
init-first.h to make abstract machine dependent parts of
initialization.
--- /dev/null
+/* 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" \
+ #NAME ":\n\t" \
+ "ldgp $29, 0($27)\n\t" \
+ ".prologue 1\n\t" \
+ "mov $30, $16\n\t" \
+ "br $31, " #INIT "..ng");
--- /dev/null
+/* 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" \
+ "pea %sp@(4)\n\t" \
+ "jbsr " #INIT "\n\t" \
+ "addq #4,%sp\n\t" \
+ "rts");