glibc/sysdeps/aarch64
Szabolcs Nagy 4163c382f0 aarch64: handle STO_AARCH64_VARIANT_PCS
Backport of commit 82bc69c012838a381c4167c156a06f4598f34227
and commit 30ba0375464f34e4bf8129f3d3dc14d0c09add17
without using DT_AARCH64_VARIANT_PCS for optimizing the symbol table check.
This is needed so the internal abi between ld.so and libc.so is unchanged.

Avoid lazy binding of symbols that may follow a variant PCS with different
register usage convention from the base PCS.

Currently the lazy binding entry code does not preserve all the registers
required for AdvSIMD and SVE vector calls.  Saving and restoring all
registers unconditionally may break existing binaries, even if they never
use vector calls, because of the larger stack requirement for lazy
resolution, which can be significant on an SVE system.

The solution is to mark all symbols in the symbol table that may follow
a variant PCS so the dynamic linker can handle them specially.  In this
patch such symbols are always resolved at load time, not lazily.

So currently LD_AUDIT for variant PCS symbols are not supported, for that
the _dl_runtime_profile entry needs to be changed e.g. to unconditionally
save/restore all registers (but pass down arg and retval registers to
pltentry/exit callbacks according to the base PCS).

This patch also removes a __builtin_expect from the modified code because
the branch prediction hint did not seem useful.

	* sysdeps/aarch64/dl-machine.h (elf_machine_lazy_rel): Check
	STO_AARCH64_VARIANT_PCS and bind such symbols at load time.
2019-07-12 10:14:12 +01:00
..
bits Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
fpu Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
multiarch [AArch64] Add ifunc support for Ares 2019-01-09 10:35:34 +00:00
nptl Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
Implies Remove sysdeps/aarch64/soft-fp directory. 2018-05-22 17:23:34 +00:00
Makefile Remove sysdeps/aarch64/soft-fp directory. 2018-05-22 17:23:34 +00:00
Versions Relocate AArch64 from ports to libc. 2014-02-11 11:36:00 +00:00
__longjmp.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
abort-instr.h Relocate AArch64 from ports to libc. 2014-02-11 11:36:00 +00:00
atomic-machine.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
bsd-_setjmp.S Relocate AArch64 from ports to libc. 2014-02-11 11:36:00 +00:00
bsd-setjmp.S Relocate AArch64 from ports to libc. 2014-02-11 11:36:00 +00:00
configure Require autoconf 2.69 2014-09-29 07:53:36 -07:00
configure.ac Relocate AArch64 from ports to libc. 2014-02-11 11:36:00 +00:00
crti.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
crtn.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-link.sym Relocate AArch64 from ports to libc. 2014-02-11 11:36:00 +00:00
dl-machine.h aarch64: handle STO_AARCH64_VARIANT_PCS 2019-07-12 10:14:12 +01:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-tls.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-tlsdesc.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-tlsdesc.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-trampoline.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
dl-tunables.list Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
e_sqrtl.c Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
jmpbuf-offsets.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
jmpbuf-unwind.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
ldsodefs.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
libc-tls.c Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
libm-test-ulps Add new exp and exp2 implementations 2018-09-05 16:22:00 +01:00
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
linkmap.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
machine-gmon.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
math-tests-trap.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
mcount.c Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
memchr.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
memcmp.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
memcpy.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
memmove.S This is an optimized memcpy/memmove for AArch64. Copies are split into 3 main 2016-06-20 17:41:33 +01:00
memset-reg.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
memset.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
memusage.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
preconfigure Remove relro configure test. 2014-06-27 16:51:22 +00:00
rawmemchr.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
setjmp.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
sfp-machine.h Remove sysdeps/aarch64/soft-fp directory. 2018-05-22 17:23:34 +00:00
sotruss-lib.c Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
stackinfo.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
start.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
stpcpy.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strchr.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strchrnul.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strcmp.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strcpy.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
string_private.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strlen.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strncmp.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strnlen.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
strrchr.S Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
sysdep.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
tls-macros.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
tlsdesc.c Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
tlsdesc.sym aarch64: Use explicit offsets in _dl_tlsdesc_dynamic 2016-12-02 16:52:57 +01:00
tst-audit.h Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00