aarch64: add STO_AARCH64_VARIANT_PCS and DT_AARCH64_VARIANT_PCS
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Thu, 25 Apr 2019 12:46:01 +0000 (13:46 +0100)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Fri, 24 May 2019 14:05:57 +0000 (15:05 +0100)
commit2301ed1c9af1316b4bad3747d2b03f7d44940f87
treed0e4b1ec3ada8b6d28fc4ec5e53df73c46c26b1c
parent405b5bd86fbcfa9ad5e67e9cdc49dfcdaacf533c
aarch64: add STO_AARCH64_VARIANT_PCS and DT_AARCH64_VARIANT_PCS

The bottom 2 bits of st_other are used for visibility, the top 6 bits are
de facto reserved for processor specific use.  This patch defines a
bits to mark function symbols that follow a variant procedure call standard
with different register usage convention.

A dynamic tag is also defined that marks modules with R_<CLS>_JUMP_SLOT
relocations referencing symbols marked with STO_AARCH64_VARIANT_PCS.
This can be used by dynamic linkers that support lazy binding to decide
what registers need to be preserved during symbol resolution.

binutils/ChangeLog:

* readelf.c (get_aarch64_dynamic_type): Handle DT_AARCH64_VARIANT_PCS.
(get_aarch64_symbol_other): New, handles STO_AARCH64_VARIANT_PCS.
(get_symbol_other): Call get_aarch64_symbol_other.

include/ChangeLog:

* elf/aarch64.h (DT_AARCH64_VARIANT_PCS): Define.
(STO_AARCH64_VARIANT_PCS): Define.
binutils/ChangeLog
binutils/readelf.c
include/ChangeLog
include/elf/aarch64.h