diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-08-21 05:47:10 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-08-21 05:47:27 -0700 |
commit | 7c41b4a1315fc4415e468bbac94f77ecdb74f4c8 (patch) | |
tree | 87604a3ee6aa519b03f852d549e5b2706358f305 | |
parent | 483d70687919ab42c3c6498a99e51b210e5f45ca (diff) | |
download | glibc-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | include/libc-symbols.h | 3 |
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 |