]> sourceware.org Git - glibc.git/commit
elf: Fix elf_get_dynamic_info definition
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 11 Oct 2021 19:01:49 +0000 (16:01 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 12 Oct 2021 16:25:43 +0000 (13:25 -0300)
commit4af6982e4c9fc465ffb7a54b794aaaa134241f05
tree0bd45a2f9ee0aaa1a5c4838132b90681ad47df6d
parentde82cb0da4b8fa5b3d56c457438d2568c67ab1b1
elf: Fix elf_get_dynamic_info definition

Before to 490e6c62aa31a8a ('elf: Avoid nested functions in the loader
[BZ #27220]'), elf_get_dynamic_info() was defined twice on rtld.c: on
the first dynamic-link.h include and later within _dl_start().  The
former definition did not define DONT_USE_BOOTSTRAP_MAP and it is used
on setup_vdso() (since it is a global definition), while the former does
define DONT_USE_BOOTSTRAP_MAP and it is used on loader self-relocation.

With the commit change, the function is now included and defined once
instead of defined as a nested function.  So rtld.c defines without
defining RTLD_BOOTSTRAP and it brokes at least powerpc32.

This patch fixes by moving the get-dynamic-info.h include out of
dynamic-link.h, which then the caller can corirectly set the expected
semantic by defining STATIC_PIE_BOOTSTRAP, RTLD_BOOTSTRAP, and/or
RESOLVE_MAP.

It also required to enable some asserts only for the loader bootstrap
to avoid issues when called from setup_vdso().

As a side note, this is another issues with nested functions: it is
not clear from pre-processed output (-E -dD) how the function will
be build and its semantic (since nested function will be local and
extra C defines may change it).

I checked on x86_64-linux-gnu (w/o --enable-static-pie),
i686-linux-gnu, powerpc64-linux-gnu, powerpc-linux-gnu-power4,
aarch64-linux-gnu, arm-linux-gnu, sparc64-linux-gnu, and
s390x-linux-gnu.

Reviewed-by: Fangrui Song <maskray@google.com>
elf/dl-conflict.c
elf/dl-load.c
elf/dl-reloc-static-pie.c
elf/dl-runtime.c
elf/dynamic-link.h
elf/get-dynamic-info.h
elf/rtld.c
elf/setup-vdso.h
sysdeps/arm/dl-machine.h
sysdeps/i386/dl-machine.h
sysdeps/x86_64/dl-machine.h
This page took 0.046832 seconds and 5 git commands to generate.