aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2013-10-08 20:59:47 +0200
committerAndreas Schwab <schwab@suse.de>2013-10-08 21:02:23 +0200
commited4c99394440533818babac9b8ba602e666ded7c (patch)
treed296aadbcdfb915854d57ff6f590bae781fc1511
parente7044ea76bd95f8adc0eab0b2bdcab7f51055b48 (diff)
downloadglibc-ed4c99394440533818babac9b8ba602e666ded7c.tar
glibc-ed4c99394440533818babac9b8ba602e666ded7c.tar.gz
glibc-ed4c99394440533818babac9b8ba602e666ded7c.tar.bz2
glibc-ed4c99394440533818babac9b8ba602e666ded7c.zip
m68k: use PIC for Scrt1.o
-rw-r--r--ports/ChangeLog.m68k4
-rw-r--r--ports/sysdeps/m68k/start.S21
2 files changed, 25 insertions, 0 deletions
diff --git a/ports/ChangeLog.m68k b/ports/ChangeLog.m68k
index 4f933c6f92..5bcd94541b 100644
--- a/ports/ChangeLog.m68k
+++ b/ports/ChangeLog.m68k
@@ -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.
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. */