aarch64: emit .variant_pcs for aarch64_vector_pcs symbol references
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Mon, 3 Jun 2019 13:50:53 +0000 (13:50 +0000)
committerSzabolcs Nagy <nsz@gcc.gnu.org>
Mon, 3 Jun 2019 13:50:53 +0000 (13:50 +0000)
commitb07fc91cc47769f1fdabf31a3c8f942caf49d873
treed2e8c1b20e35eb49d15f47cbea6df83c80483f66
parentbf5824f9282b88c2f94d76b2999a790252d0df9d
aarch64: emit .variant_pcs for aarch64_vector_pcs symbol references

A dynamic linker with lazy binding support may need to handle vector PCS
function symbols specially, so an ELF symbol table marking was
introduced for such symbols.

Function symbol references and definitions that follow the vector PCS
are marked in the generated assembly with .variant_pcs and then the
STO_AARCH64_VARIANT_PCS st_other flag is set on the symbol in the object
file.  The marking is propagated to the dynamic symbol table by the
static linker so a dynamic linker can handle such symbols specially.

For this to work, the assembler, the static linker and the dynamic
linker has to be updated on a system.  Old assembler does not support
the new .variant_pcs directive, so a toolchain with old binutils won't
be able to compile code that references vector PCS symbols.

gcc/ChangeLog:

* config/aarch64/aarch64-protos.h (aarch64_asm_output_alias): Declare.
(aarch64_asm_output_external): Declare.
* config/aarch64/aarch64.c (aarch64_asm_output_variant_pcs): New.
(aarch64_declare_function_name): Call aarch64_asm_output_variant_pcs.
(aarch64_asm_output_alias): New.
(aarch64_asm_output_external): New.
* config/aarch64/aarch64.h (ASM_OUTPUT_DEF_FROM_DECLS): Define.
(ASM_OUTPUT_EXTERNAL): Define.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/pcs_attribute-2.c: New test.
* gcc.target/aarch64/torture/simd-abi-4.c: Check .variant_pcs support.
* lib/target-supports.exp (check_effective_target_aarch64_variant_pcs):
New.

From-SVN: r271869
gcc/ChangeLog
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/pcs_attribute-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/torture/simd-abi-4.c
gcc/testsuite/lib/target-supports.exp