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.
This commit is contained in:
H.J. Lu 2017-08-21 05:47:10 -07:00
parent 483d706879
commit 7c41b4a131
2 changed files with 7 additions and 1 deletions

View File

@ -1,3 +1,8 @@
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]

View File

@ -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