diff options
author | Andreas Schwab <schwab@suse.de> | 2013-10-08 20:59:47 +0200 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2013-10-08 21:02:23 +0200 |
commit | ed4c99394440533818babac9b8ba602e666ded7c (patch) | |
tree | d296aadbcdfb915854d57ff6f590bae781fc1511 /ports/sysdeps/m68k/start.S | |
parent | e7044ea76bd95f8adc0eab0b2bdcab7f51055b48 (diff) | |
download | glibc-ed4c99394440533818babac9b8ba602e666ded7c.tar.gz glibc-ed4c99394440533818babac9b8ba602e666ded7c.tar.xz glibc-ed4c99394440533818babac9b8ba602e666ded7c.zip |
m68k: use PIC for Scrt1.o
Diffstat (limited to 'ports/sysdeps/m68k/start.S')
-rw-r--r-- | ports/sysdeps/m68k/start.S | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/ports/sysdeps/m68k/start.S b/ports/sysdeps/m68k/start.S index a09896fdc0..7ed96cf910 100644 --- a/ports/sysdeps/m68k/start.S +++ b/ports/sysdeps/m68k/start.S @@ -52,6 +52,8 @@ NULL */ +#include <sysdep.h> + .text .globl _start .type _start,@function @@ -74,6 +76,24 @@ _start: pea (%a1) /* Push address of the shared library termination function. */ +#ifdef SHARED + /* Load PIC register. */ + LOAD_GOT (%a5) + + /* Push the address of our own entry points to `.fini' and + `.init'. */ + move.l __libc_csu_fini@GOT(%a5), -(%sp) + move.l __libc_csu_init@GOT(%a5), -(%sp) + + pea (%a0) /* Push second argument: argv. */ + move.l %d0, -(%sp) /* Push first argument: argc. */ + + move.l main@GOT(%a5), -(%sp) + + /* Call the user's main function, and exit with its value. But + let the libc call main. */ + jbsr __libc_start_main@PLT +#else /* Push the address of our own entry points to `.fini' and `.init'. */ pea __libc_csu_fini @@ -87,6 +107,7 @@ _start: /* Call the user's main function, and exit with its value. But let the libc call main. */ jbsr __libc_start_main +#endif illegal /* Crash if somehow `exit' does return. */ |