This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v2 1/2] elf: Unify symbol address run-time calculation [BZ #19818]
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Wed, 7 Mar 2018 17:23:05 -0300
- Subject: Re: [PATCH v2 1/2] elf: Unify symbol address run-time calculation [BZ #19818]
- Authentication-results: sourceware.org; auth=none
- References: <alpine.DEB.2.00.1802201804140.3553@tp.orcam.me.uk> <alpine.DEB.2.00.1802201811500.3553@tp.orcam.me.uk>
On 20/02/2018 15:37, Maciej W. Rozycki wrote:
> Wrap symbol address run-time calculation into a macro and use it
> throughout, replacing inline calculations.
>
> There are a couple of variants, most of them different in a functionally
> insignificant way. Most calculations are right following RESOLVE_MAP,
> at which point either the map or the symbol returned can be checked for
> validity as the macro sets either both or neither. In some places both
> the symbol and the map has to be checked however.
>
> My initial implementation therefore always checked both, however that
> resulted in code larger by as much as 0.3%, as many places know from
> elsewhere that no check is needed. I have decided the size growth was
> unacceptable.
>
> Having looked closer I realized that it's the map that is the culprit.
> Therefore I have modified LOOKUP_VALUE_ADDRESS to accept an additional
> boolean argument telling it to access the map without checking it for
> validity. This in turn has brought quite nice results, with new code
> actually being smaller for i686, and MIPS o32, n32 and little-endian n64
> targets, unchanged in size for x86-64 and, unusually, marginally larger
> for big-endian MIPS n64, as follows:
>
> i686:
> text data bss dec hex filename
> 152255 4052 192 156499 26353 ld-2.27.9000-base.so
> 152159 4052 192 156403 262f3 ld-2.27.9000-elf-symbol-value.so
> MIPS/o32/el:
> text data bss dec hex filename
> 142906 4396 260 147562 2406a ld-2.27.9000-base.so
> 142890 4396 260 147546 2405a ld-2.27.9000-elf-symbol-value.so
> MIPS/n32/el:
> text data bss dec hex filename
> 142267 4404 260 146931 23df3 ld-2.27.9000-base.so
> 142171 4404 260 146835 23d93 ld-2.27.9000-elf-symbol-value.so
> MIPS/n64/el:
> text data bss dec hex filename
> 149835 7376 408 157619 267b3 ld-2.27.9000-base.so
> 149787 7376 408 157571 26783 ld-2.27.9000-elf-symbol-value.so
> MIPS/o32/eb:
> text data bss dec hex filename
> 142870 4396 260 147526 24046 ld-2.27.9000-base.so
> 142854 4396 260 147510 24036 ld-2.27.9000-elf-symbol-value.so
> MIPS/n32/eb:
> text data bss dec hex filename
> 142019 4404 260 146683 23cfb ld-2.27.9000-base.so
> 141923 4404 260 146587 23c9b ld-2.27.9000-elf-symbol-value.so
> MIPS/n64/eb:
> text data bss dec hex filename
> 149763 7376 408 157547 2676b ld-2.27.9000-base.so
> 149779 7376 408 157563 2677b ld-2.27.9000-elf-symbol-value.so
> x86-64:
> text data bss dec hex filename
> 148462 6452 400 155314 25eb2 ld-2.27.9000-base.so
> 148462 6452 400 155314 25eb2 ld-2.27.9000-elf-symbol-value.so
>
> [BZ #19818]
> * sysdeps/generic/ldsodefs.h (LOOKUP_VALUE_ADDRESS): Add `set'
> parameter.
> (SYMBOL_ADDRESS): New macro.
> [!ELF_FUNCTION_PTR_IS_SPECIAL] (DL_SYMBOL_ADDRESS): Use
> SYMBOL_ADDRESS for symbol address calculation.
> * elf/dl-runtime.c (_dl_fixup): Likewise.
> (_dl_profile_fixup): Likewise.
> * elf/dl-symaddr.c (_dl_symbol_address): Likewise.
> * elf/rtld.c (dl_main): Likewise.
> * sysdeps/aarch64/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/arm/dl-machine.h (elf_machine_rel): Likewise.
> (elf_machine_rela): Likewise.
> * sysdeps/hppa/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/hppa/dl-symaddr.c (_dl_symbol_address): Likewise.
> * sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
> (elf_machine_rela): Likewise.
> * sysdeps/ia64/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/microblaze/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/mips/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
> Likewise.
> (elf_machine_reloc): Likewise.
> (elf_machine_got_rel): Likewise.
> * sysdeps/mips/dl-trampoline.c (__dl_runtime_resolve): Likewise.
> * sysdeps/nios2/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela):
> Likewise.
> * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela):
> Likewise.
> * sysdeps/riscv/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela):
> Likewise.
> * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela):
> Likewise.
> * sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela):
> Likewise.
> * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela):
> Likewise.
> * sysdeps/tile/dl-machine.h (elf_machine_rela): Likewise.
> * sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>