glibc/sysdeps
Szabolcs Nagy 82bc69c012 aarch64: handle STO_AARCH64_VARIANT_PCS
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-dtprocnum.h: New file.
	* sysdeps/aarch64/dl-machine.h (DT_AARCH64): Define.
	(elf_machine_runtime_setup): Handle DT_AARCH64_VARIANT_PCS.
	(elf_machine_lazy_rel): Check STO_AARCH64_VARIANT_PCS and bind such
	symbols at load time.
	* sysdeps/aarch64/linkmap.h (struct link_map_machine): Add variant_pcs.
2019-06-13 09:45:00 +01:00
..
aarch64 aarch64: handle STO_AARCH64_VARIANT_PCS 2019-06-13 09:45:00 +01:00
alpha alpha: Improve sysdeps/alpha/divqu.S and sysdeps/alpha/remqu.S 2019-04-01 16:00:37 +07:00
arm Break further lines before not after operators. 2019-02-26 15:01:50 +00:00
csky C-SKY: mark lr as undefined to stop unwinding 2019-03-11 09:51:14 +08:00
generic Add single-thread.h header 2019-05-14 08:41:15 -03:00
gnu Add UDP_GRO from Linux 5.0 to netinet/udp.h. 2019-03-25 13:16:46 +00:00
hppa Add some spaces before '('. 2019-02-27 13:55:45 +00:00
htl hurd: advertise *_setpshared as not supported 2019-01-02 22:21:34 +01:00
hurd Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
i386 Add and move fall-through comments in system-specific code. 2019-02-26 02:09:18 +00:00
ia64 Refactor hp-timing rtld usage 2019-03-22 17:30:44 -03:00
ieee754 math: Use wordsize-64 version for finite 2019-06-12 14:32:39 -03:00
init_array Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
m68k wcsmbs: optimize wcpcpy 2019-02-27 10:00:34 -03:00
mach misc: Add twalk_r function 2019-05-02 11:42:51 +02:00
microblaze Break more lines before not after operators. 2019-02-25 13:19:19 +00:00
mips Add and move fall-through comments in system-specific code. 2019-02-26 02:09:18 +00:00
nios2 Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
nptl x86: Remove arch-specific low level lock implementation 2019-05-14 08:48:02 -03:00
posix nss: Turn __nss_database_lookup into a compatibility symbol 2019-05-15 15:07:49 +02:00
powerpc powerpc: Remove optimized finite 2019-06-12 14:32:39 -03:00
pthread <semaphore.h>: Add nonnull attributes 2019-04-29 10:11:35 +02:00
riscv riscv: remove DL_RO_DYN_SECTION 2019-04-25 10:53:08 -07:00
s390 Fix iconv buffer handling with IGNORE error handler (bug #18830) 2019-06-04 14:03:04 +02:00
sh Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
sparc Refactor hp-timing rtld usage 2019-03-22 17:30:44 -03:00
unix Linux: Deprecate <sys/sysctl.h> and sysctl 2019-06-12 14:32:08 +02:00
wordsize-32 Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
wordsize-64 Update copyright dates with scripts/update-copyrights. 2019-01-01 00:11:28 +00:00
x86 Refactor hp-timing rtld usage 2019-03-22 17:30:44 -03:00
x86_64 wcsmbs: optimize wcscat 2019-02-27 10:00:37 -03:00