2015-04-02 20:04 GMT+03:00 Jan Hubicka <hubi...@ucw.cz>:
>> Hi,
>>
>> With r221574 (https://gcc.gnu.org/ml/gcc-cvs/2015-03/msg00495.html) thunks 
>> don't get comdat groups assigned and this causes a failure in cgraph checker 
>> for instrumentation thunks.  It happens because instrumentation thunk may 
>> reference local symbol in comdat not being in comdat by itself.  This patch 
>> fixes the problem.  Doesn't affect not instrumented code.  Testing is in 
>> progress.  Does it look OK?
>>
>> Thanks,
>> Ilya
>> --
>> gcc/
>>
>> 2015-04-02  Ilya Enkovich  <ilya.enkov...@intel.com>
>>
>>       * ipa-comdats.c (ipa_comdats): Visit all instrumentation
>>       thunks to set proper comdat group.
>>
>> gcc/testsuite/
>>
>> 2015-04-02  Ilya Enkovich  <ilya.enkov...@intel.com>
>>
>>       * gcc.target/i386/mpx/chkp-thunk-comdat-1.cc: New.
>>       * gcc.target/i386/mpx/chkp-thunk-comdat-2.cc: New.
>>
>>
>> diff --git a/gcc/ipa-comdats.c b/gcc/ipa-comdats.c
>> index f349f9f..30bcad8 100644
>> --- a/gcc/ipa-comdats.c
>> +++ b/gcc/ipa-comdats.c
>> @@ -348,10 +348,9 @@ ipa_comdats (void)
>>      }
>>
>>    /* Finally assign symbols to the sections.  */
>> -
>> +  cgraph_node *fun;
>>    FOR_EACH_DEFINED_SYMBOL (symbol)
>>      {
>> -      struct cgraph_node *fun;
>>        symbol->aux = NULL;
>>        if (!symbol->get_comdat_group ()
>>         && !symbol->alias
>> @@ -388,6 +387,20 @@ ipa_comdats (void)
>>                  true);
>>       }
>>      }
>> +
>> +  /* Instrumentation thunks reference original node and thus
>> +     need to be in the same comdat group.  Otherwise we may
>> +     get a local instrumented symbol in a comdat group and
>> +     the referencing original node outside of it.  */
>> +  FOR_EACH_DEFINED_FUNCTION (fun)
>> +    if (fun->instrumentation_clone
>> +     && fun->instrumented_version
>> +     && !fun->instrumented_version->alias
>> +     && fun->get_comdat_group ()
>> +     && !fun->instrumented_version->get_comdat_group ())
>> +      fun->instrumented_version->call_for_symbol_and_aliases
>> +     (set_comdat_group_1, fun, true);
>
> I think you want to handle them same way as the aliases&thunks are handled.
> This fix is symptomatic: the code may assign them to different comdat groups
> and may propagate that furhter.

Currently ipa_comdats doesn't set comdat groups for thunks. At the
same time all references to local symbol should be within one comdat
group. That's why I need this fix. Assigning function and its
instrumentation thunks to different comdat groups would be an error
because both nodes represent the same function.

Thanks,
Ilya

>
> Honza

Reply via email to