m68k: use PIC for Scrt1.o
authorAndreas Schwab <schwab@suse.de>
Tue, 8 Oct 2013 18:59:47 +0000 (20:59 +0200)
committerAndreas Schwab <schwab@suse.de>
Tue, 8 Oct 2013 19:02:23 +0000 (21:02 +0200)
ports/ChangeLog.m68k
ports/sysdeps/m68k/start.S

index 4f933c6..5bcd945 100644 (file)
@@ -1,3 +1,7 @@
+2013-10-08  Andreas Schwab  <schwab@suse.de>
+
+       * sysdeps/m68k/start.S [SHARED]: Use PIC.
+
 2013-09-20  Andreas Schwab  <schwab@linux-m68k.org>
 
        * sysdeps/m68k/ffs.c (__ffs): Define as hidden.
index a09896f..7ed96cf 100644 (file)
@@ -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.  */