> On Oct 30, 2024, at 19:59, Richard Sandiford <richard.sandif...@arm.com> 
> wrote:
> 
> Yangyu Chen <c...@cyyself.name> writes:
>> We forgot to apply DECL_EXTERNAL to __init_cpu_features_resolver decl. When
>> building with LTO, the linker cannot find the
>> __init_cpu_features_resolver.lto_priv* symbol, causing the link error.
>> 
>> This patch gets this fixed by adding DECL_EXTERNAL to the decl. To avoid used
>> but never defined warning for this symbol, we also mark TREE_PUBLIC to the 
>> decl.
>> We should also mark the decl having hidden visibility. And fix the attribute 
>> in
>> the same way for __aarch64_cpu_features identifier.
>> 
>> Minimal steps to reproduce the bug:
>> 
>> echo '__attribute__((target_clones("default", "aes"))) void func1() { }' > 
>> 1.c
>> echo '__attribute__((target_clones("default", "aes"))) void func2() { }' > 
>> 2.c
>> echo 'void func1();void func2();int main(){func1();func2();return 0;}' > 
>> main.c
>> gcc -flto -c 1.c 2.c
>> gcc -flto main.c 1.o 2.o
>> 
>> Fixes: 0cfde688e213 ("[aarch64] Add function multiversioning support")
>> 
>> gcc/ChangeLog:
>> 
>> * config/aarch64/aarch64.cc (dispatch_function_versions): Adding
>> DECL_EXTERNAL, TREE_PUBLIC and hidden DECL_VISIBILITY to
>> __init_cpu_features_resolver and __aarch64_cpu_features.
> 
> Thanks, LGTM.  I've tested this locally and was about to push, but then
> realised: since you've already contributed changes (great!), it probably
> wouldn't be acceptable to treat it as trivial for copyright purposes.
> Could you confirm that you're contributing under the DCO:
> https://gcc.gnu.org/dco.html ?  If so, could you repost with a
> Signed-off-by?
> 
> Sorry for the administrivia.

I added signed-off-by and revised to v4:

https://patchwork.sourceware.org/project/gcc/patch/tencent_f08be088f6b1e3152e508c63c870e31cd...@qq.com/

Since this is a fix patch, it should also be committed to the
releases/gcc-14 branch.

Thanks,
Yangyu Chen

> 
> Richard
> 
>> ---
>> gcc/config/aarch64/aarch64.cc | 7 +++++++
>> 1 file changed, 7 insertions(+)
>> 
>> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
>> index 5770491b30c..2b2d5b9e390 100644
>> --- a/gcc/config/aarch64/aarch64.cc
>> +++ b/gcc/config/aarch64/aarch64.cc
>> @@ -20437,6 +20437,10 @@ dispatch_function_versions (tree dispatch_decl,
>>   tree init_fn_id = get_identifier ("__init_cpu_features_resolver");
>>   tree init_fn_decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
>>   init_fn_id, init_fn_type);
>> +  DECL_EXTERNAL (init_fn_decl) = 1;
>> +  TREE_PUBLIC (init_fn_decl) = 1;
>> +  DECL_VISIBILITY (init_fn_decl) = VISIBILITY_HIDDEN;
>> +  DECL_VISIBILITY_SPECIFIED (init_fn_decl) = 1;
>>   tree arg1 = DECL_ARGUMENTS (dispatch_decl);
>>   tree arg2 = TREE_CHAIN (arg1);
>>   ifunc_cpu_init_stmt = gimple_build_call (init_fn_decl, 2, arg1, arg2);
>> @@ -20456,6 +20460,9 @@ dispatch_function_versions (tree dispatch_decl,
>> get_identifier ("__aarch64_cpu_features"),
>> global_type);
>>   DECL_EXTERNAL (global_var) = 1;
>> +  TREE_PUBLIC (global_var) = 1;
>> +  DECL_VISIBILITY (global_var) = VISIBILITY_HIDDEN;
>> +  DECL_VISIBILITY_SPECIFIED (global_var) = 1;
>>   tree mask_var = create_tmp_var (long_long_unsigned_type_node);
>> 
>>   tree component_expr = build3 (COMPONENT_REF, long_long_unsigned_type_node,


Reply via email to