From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20443 invoked by alias); 29 Jan 2013 14:40:50 -0000 Received: (qmail 20341 invoked by uid 22791); 29 Jan 2013 14:40:48 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,KHOP_SPAMHAUS_DROP,KHOP_THREADED,RDNS_DYNAMIC,TW_BG,T_FILL_THIS_FORM_SHORT X-Spam-Check-By: sourceware.org Received: from host-82-135-62-35.customer.m-online.net (HELO mail.embedded-brains.de) (82.135.62.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 29 Jan 2013 14:40:36 +0000 Received: by mail.embedded-brains.de (Postfix, from userid 65534) id 1EFBC652CFD; Tue, 29 Jan 2013 15:40:33 +0100 (CET) Received: from [192.168.96.64] (eb0024.eb.z [192.168.96.64]) by mail.embedded-brains.de (Postfix) with ESMTP id 2F5C6652166 for ; Tue, 29 Jan 2013 15:40:33 +0100 (CET) Message-ID: <5107DF61.8030205@embedded-brains.de> Date: Tue, 29 Jan 2013 14:40:00 -0000 From: Sebastian Huber User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: Re: [Patch] Potential fix for PR55033 References: <5086C507.5080905@embedded-brains.de> <20121024145004.GZ3263@bubble.grove.modra.org> In-Reply-To: <20121024145004.GZ3263@bubble.grove.modra.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-IsSubscribed: yes 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 X-SW-Source: 2013-01/txt/msg01389.txt.bz2 Hello, is it possible to integrate this patch into the GCC 4.8 release? On 10/24/2012 04:50 PM, Alan Modra wrote: > On Tue, Oct 23, 2012 at 06:25:43PM +0200, Sebastian Huber wrote: >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55033 >> >> This patch fixes my problem, but I am absolutely not sure if this is the >> right way. > [snip] > > This is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9571 all over again. > > IMHO your patch is not wrong, but a better idea is that if we've used > categorize_decl_for_section to choose a section name, then we ought to > also use categorize_decl_for_section to choose section flags. > > My original fix for pr9571 was to pass the decl down to > get_named_section. > http://gcc.gnu.org/ml/gcc-patches/2004-11/msg02487.html > That hit the assert in get_named_section when building libgfortran for > ia64, and my knee-jerk patch to fix that was to simply satisfy the > assert. After looking at all the target section_type_flags functions, > I believe the following is what I should have done way back then. > Bootstrapped and regression tested powerpc64-linux. > > * varasm.c (default_elf_select_section): Move !DECL_P check.. > (get_named_section): ..to here before calling get_section_name. > Adjust assertion. > (default_section_type_flags): Add DECL_P check. > * config/i386/winnt.c (i386_pe_section_type_flags): Likewise. > * config/rs6000/rs6000.c (rs6000_xcoff_section_type_flags): Likewise. > > Index: gcc/varasm.c > =================================================================== > --- gcc/varasm.c (revision 192660) > +++ gcc/varasm.c (working copy) > @@ -403,12 +403,16 @@ get_named_section (tree decl, const char *name, in > { > unsigned int flags; > > - gcc_assert (!decl || DECL_P (decl)); > if (name == NULL) > - name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); > + { > + gcc_assert (decl && DECL_P (decl) && DECL_SECTION_NAME (decl)); > + name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); > + } > > flags = targetm.section_type_flags (decl, name, reloc); > > + if (decl && !DECL_P (decl)) > + decl = NULL_TREE; > return get_section (name, flags, decl); > } > > @@ -5943,7 +5947,7 @@ default_section_type_flags (tree decl, const char > flags |= SECTION_RELRO; > } > > - if (decl && DECL_ONE_ONLY (decl)) > + if (decl && DECL_P (decl) && DECL_ONE_ONLY (decl)) > flags |= SECTION_LINKONCE; > > if (decl && TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl)) > @@ -6299,8 +6303,6 @@ default_elf_select_section (tree decl, int reloc, > gcc_unreachable (); > } > > - if (!DECL_P (decl)) > - decl = NULL_TREE; > return get_named_section (decl, sname, reloc); > } > > Index: gcc/config/i386/winnt.c > =================================================================== > --- gcc/config/i386/winnt.c (revision 192660) > +++ gcc/config/i386/winnt.c (working copy) > @@ -476,7 +476,7 @@ i386_pe_section_type_flags (tree decl, const char > flags |= SECTION_PE_SHARED; > } > > - if (decl && DECL_ONE_ONLY (decl)) > + if (decl && DECL_P (decl) && DECL_ONE_ONLY (decl)) > flags |= SECTION_LINKONCE; > > /* See if we already have an entry for this section. */ > Index: gcc/config/rs6000/rs6000.c > =================================================================== > --- gcc/config/rs6000/rs6000.c (revision 192660) > +++ gcc/config/rs6000/rs6000.c (working copy) > @@ -25689,7 +25689,7 @@ rs6000_xcoff_section_type_flags (tree decl, const > unsigned int flags = default_section_type_flags (decl, name, reloc); > > /* Align to at least UNIT size. */ > - if (flags & SECTION_CODE || !decl) > + if ((flags & SECTION_CODE) != 0 || !decl || !DECL_P (decl)) > align = MIN_UNITS_PER_WORD; > else > /* Increase alignment of large objects if not already stricter. */ > -- Sebastian Huber, embedded brains GmbH Address : Dornierstr. 4, D-82178 Puchheim, Germany Phone : +49 89 189 47 41-16 Fax : +49 89 189 47 41-09 E-Mail : sebastian.huber@embedded-brains.de PGP : Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.