about summary refs log tree commit diff
path: root/src/ldso
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-10-15 17:38:54 -0400
committerRich Felker <dalias@aerifal.cx>2015-10-15 17:38:54 -0400
commitbc9b6ea0df6a820878d9ac538b2b852fec367d41 (patch)
tree6f966b7886387368e9c8b72eb8dc074866bd30a0 /src/ldso
parent797899802d5623a6ec05663c997a30e03dc27421 (diff)
downloadmusl-bc9b6ea0df6a820878d9ac538b2b852fec367d41.tar.gz
musl-bc9b6ea0df6a820878d9ac538b2b852fec367d41.tar.xz
musl-bc9b6ea0df6a820878d9ac538b2b852fec367d41.zip
fix visibility mismatch in dynamic linker stage 2 function definition
since commits 2907afb8dbd4c1d34825c3c9bd2b41564baca210 and
6fc30c2493fcfedec89e45088bea87766a1e3286, __dls2 is no longer called
via symbol lookup, but instead uses relative addressing that needs to
be resolved at link time. on some linker versions, and/or if
-Bsymbolic-functions is not used, the linker may leave behind a
dynamic relocation, which is not suitable for bootstrapping the
dynamic linker, if the reference to __dls2 is marked hidden but the
definition is not actually hidden. correcting the definition to use
hidden visibility fixes the problem.

the static-PIE entry point rcrt1 was likewise affected and is also
fixed by this patch.
Diffstat (limited to 'src/ldso')
-rw-r--r--src/ldso/dynlink.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index cab30089..8025116f 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -1330,6 +1330,7 @@ static void update_tls_size()
  * linker itself, but some of the relocations performed may need to be
  * replaced later due to copy relocations in the main program. */
 
+__attribute__((__visibility__("hidden")))
 void __dls2(unsigned char *base, size_t *sp)
 {
 	if (DL_FDPIC) {