From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18240 invoked by alias); 3 Apr 2015 17:13:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 18229 invoked by uid 89); 3 Apr 2015 17:13:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: atrey.karlin.mff.cuni.cz Received: from atrey.karlin.mff.cuni.cz (HELO atrey.karlin.mff.cuni.cz) (195.113.26.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 03 Apr 2015 17:12:59 +0000 Received: by atrey.karlin.mff.cuni.cz (Postfix, from userid 4018) id CD4DC81F26; Fri, 3 Apr 2015 19:12:56 +0200 (CEST) Date: Fri, 03 Apr 2015 17:13:00 -0000 From: Jan Hubicka To: Ilya Enkovich Cc: Jan Hubicka , gcc-patches Subject: Re: [PATCH, CHKP] Fix ipa-comdats for instrumentation thunks Message-ID: <20150403171256.GQ21276@atrey.karlin.mff.cuni.cz> References: <20150402154507.GD6244@msticlxl57.ims.intel.com> <20150402170423.GC21276@atrey.karlin.mff.cuni.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes X-SW-Source: 2015-04/txt/msg00137.txt.bz2 > 2015-04-02 20:04 GMT+03:00 Jan Hubicka : > >> 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 > >> > >> * ipa-comdats.c (ipa_comdats): Visit all instrumentation > >> thunks to set proper comdat group. > >> > >> gcc/testsuite/ > >> > >> 2015-04-02 Ilya Enkovich > >> > >> * 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 I see, that is a bug. It is supposed to keep thunks in the same section as their target (thunks doesn't really work across sections on some target, like PPC, because there is no way to produce a tailcall) Does the following fix the problem? Index: ipa-comdats.c =================================================================== --- ipa-comdats.c (revision 221857) +++ ipa-comdats.c (working copy) @@ -377,12 +377,12 @@ fprintf (dump_file, "To group: %s\n", IDENTIFIER_POINTER (group)); } if (is_a (symbol)) - dyn_cast (symbol)->call_for_symbol_and_aliases + dyn_cast (symbol)->call_for_symbol_thunks_and_aliases (set_comdat_group_1, *comdat_head_map.get (group), true); else - symbol->call_for_symbol_and_aliases + symbol->call_for_symbol_thunks_and_aliases (set_comdat_group, *comdat_head_map.get (group), true); > 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