[PATCH 3/7] Add GLIBC_ABI_DT_RELR for DT_RELR support

Joseph Myers joseph@codesourcery.com
Fri Feb 4 20:10:54 GMT 2022


On Fri, 4 Feb 2022, H.J. Lu via Libc-alpha wrote:

> In my cover letter, I said
> 
> Binutils 2.38 supports DT_RELR on x86 with the -z report-relative-reloc
> option.  When DT_RELR is enabled, ld adds a GLIBC_ABI_DT_RELR symbol
> version dependency on libc.so to outputs.  The DT_RELR support is enabled
> in ld.so only if the linker supports -z report-relative-reloc option.
> 
> and the first patch has
> 
>  # define ELF_DYNAMIC_RELOCATE(map, scope, lazy, consider_profile, skip_ifunc) \
>    do {       \
>      int edr_lazy = elf_machine_runtime_setup ((map), (scope), (lazy),       \
>         (consider_profile));       \
>      ELF_DYNAMIC_DO_REL ((map), (scope), edr_lazy, skip_ifunc);       \
>      ELF_DYNAMIC_DO_RELA ((map), (scope), edr_lazy, skip_ifunc);
>       \
> +    if (HAVE_DT_RELR && ((map) != &GL(dl_rtld_map) || DO_RTLD_BOOTSTRAP))     \
> +      ELF_DYNAMIC_DO_RELR (map);       \
>    } while (0)
> 
> If HAVE_DT_RELR is 0, DT_RELR is disabled.

It's important that glibc 2.36 supports the same executables and shared 
libraries on a given platform, independent of the binutils version used to 
build glibc.  If any build of glibc 2.36 for some platform supports RELR 
relocations, all builds of it for that platform must support such 
relocations.

That means that configure tests for linker support can *only* affect 
whether glibc is built to *use* such relocations itself - not whether it 
supports loading executables and shared libraries that use them.

(You could also increase the minimum linker version for building glibc for 
a given platform, but the RELR support is too recent for it to be a good 
idea to make the minimum version new enough to include RELR support.)

-- 
Joseph S. Myers
joseph@codesourcery.com


More information about the Libc-alpha mailing list