Szabolcs Nagy <[email protected]> writes:
> v2:
> - use aarch64_simd_decl_p to check for aarch64_vector_pcs.
> - emit the .variant_pcs directive even for local functions.
> - don't require .variant_pcs asm support in compile only tests.
> - add weakref tests.
>
> 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:
>
> 2019-05-28 Szabolcs Nagy <[email protected]>
>
> * 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-28 Szabolcs Nagy <[email protected]>
>
> * 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.
LGTM, but an AArch64 maintainer will need to approve.
> diff --git a/gcc/testsuite/gcc.target/aarch64/torture/simd-abi-4.c
> b/gcc/testsuite/gcc.target/aarch64/torture/simd-abi-4.c
> index e399690f364..80ebd955e10 100644
> --- a/gcc/testsuite/gcc.target/aarch64/torture/simd-abi-4.c
> +++ b/gcc/testsuite/gcc.target/aarch64/torture/simd-abi-4.c
> @@ -1,4 +1,5 @@
> /* dg-do run */
> +/* { dg-require-effective-target aarch64_variant_pcs } */
> /* { dg-additional-options "-std=c99" } */
Not your problem of course, but mind fixing the dg-do markup while
you're there? It should be
/* { dg-do run } */
instead. As things stand, the test only gets compiled, not run.
Thanks,
Richard