This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Add hidden visibility to internal function prototypes
On Mon, Aug 21, 2017 at 10:59 AM, Joseph Myers <joseph@codesourcery.com> wrote:
> The commit
>
> commit 568ff4296c72534e49c8d9c83c33f3a0069cccc7
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date: Mon Aug 21 05:50:38 2017 -0700
>
> Add hidden visibility to internal function prototypes
>
> breaks the build of the testsuite for many platforms:
>
> https://sourceware.org/ml/libc-testresults/2017-q3/msg00300.html
>
> The errors are of the following form, building math/atest-exp:
>
> [...]
> /scratch/jmyers/glibc-bot/build/glibcs/aarch64-linux-gnu/glibc/stdlib/rshift.o: In function `__mpn_rshift':
> /scratch/jmyers/glibc-bot/build/glibcs/aarch64-linux-gnu/glibc-src/stdlib/rshift.c:45: undefined reference to `__assert_fail'
> /scratch/jmyers/glibc-bot/install/compilers/aarch64-linux-gnu/lib/gcc/aarch64-glibc-linux-gnu/7.2.1/../../../../aarch64-glibc-linux-gnu/bin/ld: /scratch/jmyers/glibc-bot/build/glibcs/aarch64-linux-gnu/glibc/math/atest-exp: hidden symbol `__assert_fail' isn't defined
> /scratch/jmyers/glibc-bot/install/compilers/aarch64-linux-gnu/lib/gcc/aarch64-glibc-linux-gnu/7.2.1/../../../../aarch64-glibc-linux-gnu/bin/ld: final link failed: Bad value
>
> This test is using various objects from the build of libc. Some of
> those objects contain references to __assert_fail. Because those
> references are hidden, they cannot refer to __assert_fail from
> libc.so. Given the tests using internal objects those symbols in
> libc.a can't safely be made hidden, so this patch reverts the problem
> commit until any alternative approach that doesn't break the build can
> be found.
Can't these link against libc.so instead of libc.a?
> Committed (having tested on aarch64 with build-many-glibcs.py that this
> fixes the build).
>
> diff --git a/ChangeLog b/ChangeLog
> index b0f3a17..0e0ab13 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,14 @@
> 2017-08-21 Joseph Myers <joseph@codesourcery.com>
>
> + Revert:
> + 2017-08-21 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.
> +
> [BZ #21973]
> * sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S: Remove file.
> * sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S: Likewise.
> diff --git a/include/libc-symbols.h b/include/libc-symbols.h
> index fe3571a..d6a1c26 100644
> --- a/include/libc-symbols.h
> +++ b/include/libc-symbols.h
> @@ -513,20 +513,8 @@ for linking")
> # endif
> #else
> # ifndef __ASSEMBLER__
> -# 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
> +# define hidden_proto(name, attrs...)
> +# define hidden_tls_proto(name, attrs...)
> # else
> # define HIDDEN_JUMPTARGET(name) JUMPTARGET(name)
> # endif /* Not __ASSEMBLER__ */
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
--
H.J.