On Wed, May 29, 2019 at 11:00:46AM +0100, Richard Sandiford wrote: > Szabolcs Nagy <szabolcs.n...@arm.com> 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 <szabolcs.n...@arm.com> > > > > * 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 <szabolcs.n...@arm.com> > > > > * 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.
OK with Richard's change suggested below. Thanks, James > > > 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