From ee417882e07277b2a36e7e61e6ef7edd96415b3f Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 4 Oct 2017 17:18:23 -0700 Subject: Don't use hidden visibility in libc.a with PIE on i386 On i386, when multi-arch is enabled, all external functions must be called via PIC PLT in PIE, which requires setting up EBX register, since they may be IFUNC functions. * config.h.in (NO_HIDDEN_EXTERN_FUNC_IN_PIE): New. * include/libc-symbols.h (__hidden_proto_hiddenattr): Add check for PIC and NO_HIDDEN_EXTERN_FUNC_IN_PIE. * sysdeps/i386/configure.ac (NO_HIDDEN_EXTERN_FUNC_IN_PIE): New AC_DEFINE if multi-arch is enabled. * sysdeps/i386/configure: Regenerated. --- include/libc-symbols.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/libc-symbols.h b/include/libc-symbols.h index e0d4dc3170..872626274b 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -507,6 +507,7 @@ for linking") #else # ifndef __ASSEMBLER__ # if !defined SHARED && IS_IN (libc) && !defined LIBC_NONSHARED \ + && (!defined PIC || !defined NO_HIDDEN_EXTERN_FUNC_IN_PIE) \ && !defined NO_HIDDEN # define __hidden_proto_hiddenattr(attrs...) \ __attribute__ ((visibility ("hidden"), ##attrs)) -- cgit v1.2.3