Szabolcs Nagy <szabolcs.n...@arm.com> writes:
> On 28/05/2019 16:01, Szabolcs Nagy wrote:
>> 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.
>> 
>
> i'd like to backport this and follow up fixes to the gcc-9 branch,
> see attached patch.

OK.  I agree this makes sense since vector PCS functions were a new
feature in GCC 9 and since not backporting it could lead to silent
wrong code.

Richard

Reply via email to