about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-08-21 05:47:10 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-08-21 05:47:27 -0700
commit7c41b4a1315fc4415e468bbac94f77ecdb74f4c8 (patch)
tree87604a3ee6aa519b03f852d549e5b2706358f305
parent483d70687919ab42c3c6498a99e51b210e5f45ca (diff)
downloadglibc-7c41b4a1315fc4415e468bbac94f77ecdb74f4c8.tar.gz
glibc-7c41b4a1315fc4415e468bbac94f77ecdb74f4c8.tar.xz
glibc-7c41b4a1315fc4415e468bbac94f77ecdb74f4c8.zip
Enable hidden visibility in libc.a compiled with PIE
When building libc.a with PIE, enable hidden visibility to allow direct
access to definitions within libc.a without using GOT.

Size comparison of elf/ldconfig when the compiler defaults to -fPIE:

On x86-64:
        text	   data	    bss	    dec	    hex
Before: 619206	  20132	   5488	 644826	  9d6da
After : 619062	  20132	   5488	 644682	  9d64a
On i686:
        text	   data	    bss	    dec	    hex
Before: 556305	  10816	   3056	 570177	  8b341
After : 553688	  10756	   3056	 567500	  8a8cc

	* include/libc-symbols.h (attribute_hidden): Enable hidden
	visibility in libc.a compiled with PIE.
-rw-r--r--ChangeLog5
-rw-r--r--include/libc-symbols.h3
2 files changed, 7 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d25a8fd56c..e7ffb591b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2017-08-21  H.J. Lu  <hongjiu.lu@intel.com>
 
+	* include/libc-symbols.h (attribute_hidden): Enable hidden
+	visibility in libc.a compiled with PIE.
+
+2017-08-21  H.J. Lu  <hongjiu.lu@intel.com>
+
 	[BZ #18822]
 	* sysdeps/unix/sysv/linux/x86/libc-vdso.h (VDSO_SYMBOL(getcpu)):
 	Add attribute_hidden.
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index fe3ab81c51..d6a1c260f6 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -363,7 +363,8 @@ for linking")
   strong_alias(real, name)
 #endif
 
-#if defined SHARED || defined LIBC_NONSHARED
+#if defined SHARED || defined LIBC_NONSHARED \
+  || (BUILD_PIE_DEFAULT && IS_IN (libc))
 # define attribute_hidden __attribute__ ((visibility ("hidden")))
 #else
 # define attribute_hidden