elf: Introduce the rtld-stubbed-symbols makefile variable

This generalizes a mechanism used for stack-protector support, so
that it can be applied to other symbols if required.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Florian Weimer 2020-02-07 20:06:32 +01:00
parent 9c7a58347b
commit abcc039d2e

View File

@ -484,21 +484,25 @@ $(objpfx)dl-allobjs.os: $(all-rtld-routines:%=$(objpfx)%.os)
# are compiled with special flags, and puts these modules into rtld-libc.a
# for us. Then we do the real link using rtld-libc.a instead of libc_pic.a.
# If the compiler can do SSP, build the mapfile with dummy __stack_chk_fail
# and __stack_chk_fail_local symbols defined, to prevent the real things
# being dragged into rtld even though rtld is never built with stack-
# protection.
# These symbols need to be stubbed out during symbol discovery because
# their implementation is provided differently in rtld, and the symbol
# discovery mechanism is not compatible with the libc implementation
# when compiled for libc.
rtld-stubbed-symbols =
# The GCC arguments that implement $(rtld-stubbed-symbols).
rtld-stubbed-symbols-args = \
$(patsubst %,-Wl$(comma)--defsym=%=0, $(rtld-stubbed-symbols))
ifeq ($(have-ssp),yes)
dummy-stack-chk-fail := -Wl,--defsym='__stack_chk_fail=0' \
-Wl,--defsym='__stack_chk_fail_local=0'
else
dummy-stack-chk-fail :=
# rtld is not built with the stack protector, so these references will
# go away in the rebuilds.
rtld-stubbed-symbols += __stack_chk_fail __stack_chk_fail_local
endif
$(objpfx)librtld.map: $(objpfx)dl-allobjs.os $(common-objpfx)libc_pic.a
@-rm -f $@T
$(reloc-link) -o $@.o $(dummy-stack-chk-fail) \
$(reloc-link) -o $@.o $(rtld-stubbed-symbols-args) \
'-Wl,-(' $^ -lgcc '-Wl,-)' -Wl,-Map,$@T
rm -f $@.o
mv -f $@T $@