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