about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox-gentoo@diac24.net>2010-09-12 09:38:44 -0400
committerMike Frysinger <vapier@gentoo.org>2015-09-18 13:09:57 -0400
commit3ee578690f35942f41926cc2d98e25b3d0d08c71 (patch)
tree749681ccd7fa4aa3949f186c2cd356fe29a97eb5
parent020167a4ce53f7dd8d5b1912a42163bd1077e6c5 (diff)
downloadglibc-3ee578690f35942f41926cc2d98e25b3d0d08c71.tar.gz
glibc-3ee578690f35942f41926cc2d98e25b3d0d08c71.tar.xz
glibc-3ee578690f35942f41926cc2d98e25b3d0d08c71.zip
arm: setjmp/longjmp: fix PIC vs SHARED thinkos
The logic in setjmp/__longjmp incorrectly uses "PIC" to figure out
whether the code is going into a shared library when it should be
using "SHARED".  If you build glibc with a gcc version that has PIE
enabled by default, then the code will try to use symbols that are
only in the shared library.

URL: https://bugs.gentoo.org/336914
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/arm/__longjmp.S2
-rw-r--r--sysdeps/arm/setjmp.S2
3 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 72605d4631..764af43e1e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-18  David Lamparter  <equinox-gentoo@diac24.net>
+
+	* sysdeps/arm/setjmp.S: Change PIC to SHARED.
+	* sysdeps/arm/__longjmp.S: Likewise
+
 2015-09-18  Wilco Dijkstra  <wdijkstr@arm.com>
 
 	* sysdeps/ieee754/dbl-64/s_signbit.c (__signbit):
diff --git a/sysdeps/arm/__longjmp.S b/sysdeps/arm/__longjmp.S
index fc60a5d424..1033e134cd 100644
--- a/sysdeps/arm/__longjmp.S
+++ b/sysdeps/arm/__longjmp.S
@@ -81,7 +81,7 @@ ENTRY (__longjmp)
 		    C_SYMBOL_NAME(_rtld_local_ro) \
 		    + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
 # else
-#  ifdef PIC
+#  ifdef SHARED
 	LDR_GLOBAL (a4, a3, C_SYMBOL_NAME(_rtld_global_ro), \
 		    RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
 #  else
diff --git a/sysdeps/arm/setjmp.S b/sysdeps/arm/setjmp.S
index e44beb45a8..be0a4ecba8 100644
--- a/sysdeps/arm/setjmp.S
+++ b/sysdeps/arm/setjmp.S
@@ -62,7 +62,7 @@ ENTRY (__sigsetjmp)
 		    C_SYMBOL_NAME(_rtld_local_ro) \
 		    + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
 # else
-#  ifdef PIC
+#  ifdef SHARED
 	LDR_GLOBAL (a3, a4, C_SYMBOL_NAME(_rtld_global_ro), \
 		    RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
 #  else