[COMMITTED] Run ld.so through check-localplt, check-textrel, and check-execstack.
Commit Message
Machine maintainers for alpha, ia64, m68k, microblaze, sparc32, and sparc64
should explicitly check to make sure the localplt.data updates are correct.
Machine maintainers for sh, mips, hppa, and tile should make sure that the
generic localplt.data is still correct for them. I made it the most generic
I could, and that matches x86_64.
This patch adds ld.so to the check-localplt, check-textrel, and check-execstack
tets. It is a result of some paranoia regarding the use of __strcpy vs. strcpy
in ld.so and realizing that check-localplt is not run for ld.so. For maximum
paranoia these tests should also run for the dynamic loader. Roland McGrath
and I both agreed, so I'm adding ld.so to these tests.
Verified for i386
Verified for x86_64
Verified for ppc32
Verified for ppc64
Verified for ppc64le
Verified for arm
Verified for aarch64
Verified for s390
Verified for s390x
Guessed for alpha
Guessed for ia64
Guessed for m68k
Guessed for microblaze
Guessed for sparc32
Guessed for sparc64
Defaults for sh
Defaults for mips
Defaults for hppa
Defaults for tile
Checked in.
2014-11-05 Carlos O'Donell <carlos@redhat.com>
* elf/Makefile (all-built-dso): Add $(common-objpfx)elf/ld.so.
(localplt-build-dso): Add elf/ld.so.
* sysdeps/unix/sysv/linux/i386/localplt.data: Add ___tls_get_addr
i.e. 3 underscore version, __libc_memalign, malloc, calloc, realloc,
and free for ld.so.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data: Add
__libc_memalign, malloc, calloc, realloc, and free for ld.so.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data:
Likewise.
* sysdeps/unix/sysv/linux/s390/localplt.data: Likewise.
* sysdeps/generic/localplt.data: Add __tls_get_addr i.e. 2 underscore
version, __libc_memalign, malloc, calloc, realloc and free for ld.so.
* sysdeps/unix/sysv/linux/aarch64/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/arm/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/alpha/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/ia64/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/m68k/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/microblaze/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data: Likewise.
---
Cheers,
Carlos.
@@ -904,7 +904,7 @@ CFLAGS-tst-pie2.c += $(pie-ccflag)
$(objpfx)tst-pie1: $(objpfx)tst-piemod1.so
ifeq (yes,$(build-shared))
-all-built-dso := $(common-objpfx)libc.so \
+all-built-dso := $(common-objpfx)elf/ld.so $(common-objpfx)libc.so \
$(filter-out $(common-objpfx)linkobj/libc.so, \
$(sort $(wildcard $(addprefix $(common-objpfx), \
*/lib*.so \
@@ -963,6 +963,7 @@ common-generated += $(all-built-dso:$(common-objpfx)%=%.jmprel)
localplt-built-dso := $(addprefix $(common-objpfx),\
libc.so \
+ elf/ld.so \
math/libm.so \
rt/librt.so \
dlfcn/libdl.so \
@@ -7,3 +7,12 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -12,3 +12,12 @@ libm.so: matherr
libm.so: __signbit
libm.so: __signbitf
libm.so: __signbitl
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -24,3 +24,12 @@ libm.so: matherr
# We used to offer inline functions that used this, so it must be exported.
# Ought to reorg things such that carg isn't thus forced to use a plt.
libm.so: __atan2
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -11,3 +11,12 @@ libm.so: __signbitf
libm.so: matherr
libpthread.so: __errno_location
libpthread.so: raise
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -5,3 +5,14 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader needs ___tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+# Note that it is triple underscore for ___tls_get_addr e.g. the alternate
+# ABI.
+ld.so: ___tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -6,3 +6,12 @@ libc.so: realloc
libm.so: matherr
libm.so: matherrf
libm.so: matherrl
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -6,3 +6,12 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -9,3 +9,12 @@ libm.so: __signbit
libm.so: __signbitf
libm.so: matherr
libpthread.so: __errno_location
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -5,3 +5,11 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader uses __libc_memalign internally to allocate aligned
+# TLS storage. The other malloc family of functions are expected to allow
+# user symbol interposition.
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -38,3 +38,11 @@ libm.so: __signbitl
libm.so: copysignl ?
libm.so: fabsl
libm.so: matherr
+# The dynamic loader uses __libc_memalign internally to allocate aligned
+# TLS storage. The other malloc family of functions are expected to allow
+# user symbol interposition.
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -4,3 +4,11 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader uses __libc_memalign internally to allocate aligned
+# TLS storage. The other malloc family of functions are expected to
+# allow user symbol interposition.
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -5,3 +5,11 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader uses __libc_memalign internally to allocate aligned
+# TLS storage. The other malloc family of functions are expected to allow
+# user symbol interposition.
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -15,3 +15,12 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
@@ -17,3 +17,12 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
+# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
+# internally to allocate aligned TLS storage. The other malloc family of
+# functions are expected to allow user symbol interposition.
+ld.so: __tls_get_addr
+ld.so: __libc_memalign
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free