summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-08-13 07:37:34 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-08-16 11:34:53 -0700
commit362d54c511c7668185ac6a37fb6d2042f9783567 (patch)
treeac54842744642bf8a6ac956e7895eb93f2441af6
parent1760087874d21119ea4aa0f4624ea9a32fff84f9 (diff)
downloadglibc-hjl/pie/hidden.tar.gz
Add hidden visibility to internal function prototypeshjl/pie/hidden
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 the compiler defaulting to -fPIE. (hidden_proto): Likewise. (hidden_tls_proto): Likewise. (__hidden_proto): Likewise.
-rw-r--r--include/libc-symbols.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index d6a1c260f6..6c75a6f012 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 BUILD_PIE_DEFAULT && 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__ */