[PATCH v2] aarch64: emit .variant_pcs for aarch64_vector_pcs symbol references
Szabolcs Nagy
Szabolcs.Nagy@arm.com
Tue Jun 4 13:52:00 GMT 2019
On 04/06/2019 13:21, Christophe Lyon wrote:
> On Mon, 3 Jun 2019 at 13:28, James Greenhalgh <james.greenhalgh@arm.com> wrote:
>>
>> On Wed, May 29, 2019 at 11:00:46AM +0100, Richard Sandiford wrote:
>>> Szabolcs Nagy <Szabolcs.Nagy@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.nagy@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.nagy@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.
>>
>
> Hi,
>
> Since this patch was committed (r271869), I've noticed regressions on aarch64:
> FAIL: gcc.dg/visibility-14.c scan-hidden hidden[ \t_]*foo
> FAIL: gcc.dg/visibility-15.c scan-hidden hidden[ \t_]*foo
> FAIL: gcc.dg/visibility-16.c scan-hidden hidden[ \t_]*foo
> FAIL: gcc.dg/visibility-17.c scan-hidden hidden[ \t_]*foo
> FAIL: gcc.dg/visibility-18.c scan-hidden hidden[ \t_]*foo
> FAIL: gcc.dg/visibility-19.c scan-hidden hidden[ \t_]*foo
> FAIL: gcc.dg/visibility-23.c scan-hidden hidden[ \t_]*foo
>
> Didn't you see them when you tested the patch?
sorry i missed these.
i broke asm visibility declarations for extern symbols,
i will have a fix soon.
>
> Thanks,
>
> Christophe
>
>
>> 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
More information about the Gcc-patches
mailing list