diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-08-22 13:49:14 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2017-08-22 13:50:28 +0200 |
commit | 8d2ec553295a16ca94fe0285d6307e3b00a402d6 (patch) | |
tree | 6063f386c50d86e8b3608f95a4c86732d8406fc9 | |
parent | a4d57b79478f214cdf535eb941abdd71e0071edc (diff) | |
download | glibc-8d2ec553295a16ca94fe0285d6307e3b00a402d6.tar.gz glibc-8d2ec553295a16ca94fe0285d6307e3b00a402d6.tar.xz glibc-8d2ec553295a16ca94fe0285d6307e3b00a402d6.zip |
Add hidden visibility to internal function prototypes
Add hidden visibility to internal function prototypes to allow direct access to internal functions within libc.a without using GOT when the compiler defaults to -fPIE. Size comparison of elf/ldconfig when the compiler defaults to -fPIE: On x86-64: text data bss dec hex Before: 619646 20132 5488 645266 9d892 After : 619502 20132 5488 645122 9d802 On i686: text data bss dec hex Before: 550333 10748 3060 564141 89bad After : 546453 10732 3060 560245 88c75 * include/libc-symbols.h (__hidden_proto_hiddenattr): New for building libc.a. (hidden_proto): Likewise. (hidden_tls_proto): Likewise. (__hidden_proto): Likewise. (Reapplied after the revert in df1deda60050cc8a68156cf6c81ad42363647a29.)
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | include/libc-symbols.h | 16 |
2 files changed, 22 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 753257810b..53fdcb496a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2017-08-22 H.J. Lu <hongjiu.lu@intel.com> + + * include/libc-symbols.h (__hidden_proto_hiddenattr): New for + building libc.a. + (hidden_proto): Likewise. + (hidden_tls_proto): Likewise. + (__hidden_proto): Likewise. + 2017-08-22 Florian Weimer <fweimer@redhat.com> math: Statically link tests of internal functionality. diff --git a/include/libc-symbols.h b/include/libc-symbols.h index d6a1c260f6..fe3571af52 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -513,8 +513,20 @@ for linking") # endif #else # ifndef __ASSEMBLER__ -# define hidden_proto(name, attrs...) -# define hidden_tls_proto(name, attrs...) +# if !defined SHARED && IS_IN (libc) && !defined LIBC_NONSHARED \ + && !defined NO_HIDDEN +# define __hidden_proto_hiddenattr(attrs...) \ + __attribute__ ((visibility ("hidden"), ##attrs)) +# define hidden_proto(name, attrs...) \ + __hidden_proto (name, , name, ##attrs) +# define hidden_tls_proto(name, attrs...) \ + __hidden_proto (name, __thread, name, ##attrs) +# define __hidden_proto(name, thread, internal, attrs...) \ + extern thread __typeof (name) name __hidden_proto_hiddenattr (attrs); +# else +# define hidden_proto(name, attrs...) +# define hidden_tls_proto(name, attrs...) +# endif # else # define HIDDEN_JUMPTARGET(name) JUMPTARGET(name) # endif /* Not __ASSEMBLER__ */ |