This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, CHKP] Fix ipa-comdats for instrumentation thunks


> 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.enkovich@intel.com>
> 
> 	* ipa-comdats.c (ipa_comdats): Visit all instrumentation
> 	thunks to set proper comdat group.
> 
> gcc/testsuite/
> 
> 2015-04-02  Ilya Enkovich  <ilya.enkovich@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.

Honza


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]