This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2 1/2] elf: Unify symbol address run-time calculation [BZ #19818]



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>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]