A dynamic linker with lazy binding support may need to handle variant PCS function symbols specially, so an ELF symbol table marking was introduced for such symbols. Global symbol references and definitions that follow the vector PCS are marked in the generated assembly and then the STO_AARCH64_VARIANT_PCS st_other flag is set on the symbol in the object file. 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. For details about the ELF ABI and rationale see https://gcc.gnu.org/ml/gcc/2019-05/msg00185.html gcc/ChangeLog: 2019-05-22 Szabolcs Nagy * 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: 2019-05-22 Szabolcs Nagy * gcc.target/aarch64/pcs_attribute-2.c: New test. * gcc.target/aarch64/pcs_attribute.c: Require .variant_pcs support. * gcc.target/aarch64/torture/simd-abi-1.c: Likewise. * gcc.target/aarch64/torture/simd-abi-3.c: Likewise. * gcc.target/aarch64/torture/simd-abi-4.c: Likewise. * gcc.target/aarch64/torture/simd-abi-5.c: Likewise. * gcc.target/aarch64/torture/simd-abi-6.c: Likewise. * gcc.target/aarch64/torture/simd-abi-7.c: Likewise. * lib/target-supports.exp (check_effective_target_aarch64_variant_pcs): New.