Movatterモバイル変換
[0]ホーム
This is the mail archive of thelibc-alpha@sourceware.orgmailing list for theglibc project.
Re: [PATCH] Add hidden visibility to internal function prototypes
On Thu, Aug 17, 2017 at 5:40 AM, H.J. Lu <hjl.tools@gmail.com> wrote:> On Thu, Aug 17, 2017 at 5:34 AM, Florian Weimer <fweimer@redhat.com> wrote:>> On 08/17/2017 02:22 PM, H.J. Lu wrote:>>> 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:>>>> This is for static linking, right?>>>> Is there a reason to restrict this to PIE builds? Why not use hidden>> visibility unconditionally?>>>> Yes, there is only used for static PIE build and we can replace> BUILD_PIE_DEFAULT with !defined SHARED. But it makes> no difference for non-PIE static build.>Here is the updated patch to add hidden visibility to internal functionprototypes used within libc.a.Tested on x86-64 and i686 with and without GCC defaulting to PIE.OK for master?-- H.J.
From 236f3b88f74d408d3ab925809da3bd6d8a995730 Mon Sep 17 00:00:00 2001From: "H.J. Lu" <hjl.tools@gmail.com>Date: Sun, 13 Aug 2017 07:37:34 -0700Subject: [PATCH] Add hidden visibility to internal function prototypesAdd hidden visibility to internal function prototypes to allow directaccess to internal functions within libc.a without using GOT when thecompiler defaults to -fPIE.Size comparison of elf/ldconfig when the compiler defaults to -fPIE:On x86-64: text data bss dec hexBefore: 619646 20132 5488 645266 9d892After : 619502 20132 5488 645122 9d802On i686: text data bss dec hexBefore: 550333 10748 3060 564141 89badAfter : 546453 10732 3060 560245 88c75* include/libc-symbols.h (__hidden_proto_hiddenattr): New forbuilding libc.a.(hidden_proto): Likewise.(hidden_tls_proto): Likewise.(__hidden_proto): Likewise.--- include/libc-symbols.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)diff --git a/include/libc-symbols.h b/include/libc-symbols.hindex 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__ */-- 2.13.5
[8]ページ先頭