glibc/sysdeps/generic
Maciej W. Rozycki 10a446ddcc elf: Unify symbol address run-time calculation [BZ #19818]
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.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2018-04-04 23:09:37 +01:00
..
net Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
netinet generic if_ether.h: Fix build 2018-01-19 01:51:10 +01:00
nfs Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sys Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
_G_config.h Post-cleanup 2: minimize _G_config.h. 2018-02-07 10:10:32 -05:00
_itoa.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
a.out.h
abort-instr.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
aio_misc.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
allocalim.h Update. 2002-10-09 09:42:48 +00:00
asm-syntax.h
atomic-machine.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
c++-types.data Add placeholder c++-types.data and *.abilist files. 2015-02-13 15:41:34 -08:00
confstr.h
device-nrs.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dirstream.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-cache.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-dtprocnum.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-dtv.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-fcntl.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-fileid.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-fptr.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-hash.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-librecon.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-lookupcfg.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-machine.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-mman.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-osinfo.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-procinfo.c Dummy dl-procinfo.c file for platforms which don't have one. 2002-02-01 18:25:44 +00:00
dl-procinfo.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-procruntime.c ld.so: Add architecture specific fields 2017-11-13 08:02:52 -08:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dl-tls.h Update. 2002-02-07 04:08:19 +00:00
dl-unistd.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dwarf2.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
elide.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
eloop-threshold.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
entry.h Update. 2002-03-15 03:16:52 +00:00
errqueue.h
exit-thread.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fd_to_filename.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fips-private.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fix-fp-int-compare-invalid.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fix-fp-int-convert-overflow.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fix-int-fp-convert-zero.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
float128-abi.h Move some float128 symbol version definitions. 2017-10-16 22:04:42 +00:00
fork.h Update. 2002-10-01 00:05:23 +00:00
fpu_control.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
framestate.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
gcc-compat.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
gccframe.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
get-rounding-mode.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
gmp-mparam.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
hp-timing-common.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
hp-timing.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ifreq.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ifunc-init.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ifunc-sel.h Do not stack-protect ifunc resolvers [BZ #7065] 2016-12-26 10:08:41 +01:00
internal-signals.h Make sysdeps/generic/internal-signals.h less stubby. 2018-04-04 12:37:23 -04:00
intr-msg.h
inttypes.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ld.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
ldbl-classify-compat.h Move LDBL_CLASSIFY_COMPAT to its own header. 2018-02-01 21:01:00 +00:00
ldconfig.h Add support for the RISC-V-specific ELF flags 2018-01-25 10:06:19 -08:00
ldsodefs.h elf: Unify symbol address run-time calculation [BZ #19818] 2018-04-04 23:09:37 +01:00
libanl.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libBrokenLocale.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libc-lock.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libc-mmap.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libc-start.h hurd: Initialize TLS and libpthread before signal thread start 2018-03-25 00:52:39 +01:00
libc-tsd.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libc.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libcidn.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libcrypt.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libdl.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libm-alias-double.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-alias-float128.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-alias-float.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-alias-ldouble.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
libm-test-ulps
libm-test-ulps-name Do not hardcode platform names in manual/libm-err-tab.pl (bug 14139). 2016-11-04 16:49:06 +00:00
libm.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libnsl.abilist Add placeholder libnsl.abilist and libutil.abilist files 2016-03-07 00:49:36 +01:00
libnss_compat.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_db.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_dns.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_files.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_hesiod.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_nis.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libnss_nisplus.abilist Add missed zero length files in previous abilist commit. 2012-04-28 15:38:24 -04:00
libpthread.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libresolv.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
librt.abilist Simplify the abilist format 2015-11-06 13:58:53 +01:00
libutil.abilist Add placeholder libnsl.abilist and libutil.abilist files 2016-03-07 00:49:36 +01:00
link_map.h ld.so: Add architecture specific fields 2017-11-13 08:02:52 -08:00
linkmap.h Rename bits/linkmap.h to linkmap.h (bug 14912). 2015-09-04 19:44:27 +00:00
local-setxid.h * sysdeps/posix/spawni.c (__spawni): Use local_seteuid and 2006-06-04 22:17:06 +00:00
localplt.data ld.so: Introduce struct dl_exception 2017-08-10 16:54:57 +02:00
machine-gmon.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
machine-lock.h hurd: take __USE_EXTERN_INLINES into account and restrict inlines 2018-01-28 18:46:23 +01:00
machine-sp.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
Makefile Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
malloc-alignment.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
malloc-machine.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
malloc-sysdep.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math_ldbl_opt.h * math/math.h [__NO_LONG_DOUBLE_MATH] (__nldbl_nexttowardf): New 2006-01-14 12:10:44 +00:00
math_ldbl.h Allow direct use of math_ldbl.h in testsuite. 2017-02-25 10:40:48 -05:00
math_private_calls.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math_private.h Remove slow paths from exp 2018-02-12 11:33:33 +00:00
math-tests-arch.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math-tests.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math-type-macros-double.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math-type-macros-float128.h Add support for sqrt asm redirects 2018-03-15 19:21:35 +00:00
math-type-macros-float.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math-type-macros-ldouble.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
math-type-macros.h Remove all target specific __ieee754_sqrt(f/l) inlines 2018-03-15 19:21:36 +00:00
memcopy.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
memusage.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
nan-high-order-bit.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
not-cancel.h hurd: fix warnings 2018-01-27 16:45:10 +01:00
not-errno.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
nscd-types.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
pagecopy.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
paths.h generic paths.h: remove old paths from _PATH_STDPATH 2012-11-04 10:11:39 +01:00
profil-counter.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
pty-private.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
register-dump.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
rtld-lowlevel.h Jakub Jelinek <jakub@redhat.com> 2006-10-10 00:51:29 +00:00
safe-fatal.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
setjmpP.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sigcontextinfo.h Remove unused frame.h header, sigcontextinfo.h macros. 2018-03-22 16:40:51 +00:00
siglist.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sigset-cvt-mask.h hurd: fix warning 2018-01-27 16:45:55 +01:00
sigsetops.h hurd: fix warnings 2018-01-27 16:47:36 +01:00
stackguard-macros.h BZ #15754: Fix test case for ARM. 2013-09-23 01:44:38 -04:00
stackinfo.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
startup.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
stdint.h Define char16_t, char32_t consistently with uint_least16_t, uint_least32_t (bug 17979). 2018-02-07 20:33:55 +00:00
stdio-lock.h Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
string_private.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
symbol-hacks.h PLT avoidance for __stack_chk_fail [BZ #7065] 2016-12-26 10:11:05 +01:00
sysdep-cancel.h * elf/dl-sym.c (do_sym): Use RTLD_SINGLE_THREAD_P. 2006-10-29 21:46:32 +00:00
sysdep.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
thread_state.h hurd: add TLS support 2018-03-17 03:17:36 +01:00
tininess.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tls-macros.h * elf/tls-macros.h: #include_next <tls-macros.h> to get a sysdeps 2005-03-13 09:09:05 +00:00
tls.h hurd: add gscope support 2018-03-11 13:06:33 +01:00
tst-audit.h Move testsuite audit definitions to sysdeps tst-audit.h files. 2012-07-26 11:29:07 +00:00
tst-stack-align.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unsecvars.h Ignore and remove LD_HWCAP_MASK for AT_SECURE programs (bug #21209) 2017-03-07 20:52:04 +05:30
unwind-dw2-fde-glibc.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-dw2-fde.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-dw2-fde.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-dw2.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-pe.c Update. 2004-03-10 10:04:19 +00:00
unwind-pe.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind-resume.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
unwind.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
utmp-equal.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00