This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Don't use .gnu.linkonce with COMDAT
- From: "H. J. Lu" <hjl at lucon dot org>
- To: Julian Brown <julian at codesourcery dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>,Paul Brook <paul at codesourcery dot com>,Mark Mitchell <mark at codesourcery dot com>
- Date: Fri, 6 May 2005 10:04:00 -0700
- Subject: Re: [PATCH] Don't use .gnu.linkonce with COMDAT
- References: <427BA265.30608@codesourcery.com>
The patch?
H.J.
On Fri, May 06, 2005 at 05:59:17PM +0100, Julian Brown wrote:
> Hi,
>
> This is a combination of various patches to make COMDAT groups work
> better. The first is from the csl-arm branch:
>
> http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02497.html
>
> This stops .gnu.linkonce from being used on targets which have COMDAT
> groups.
>
> The next bit is new: rodata sections relating to text sections in COMDAT
> groups are now put into the same COMDAT group rather than being left
> stranded. i.e., a function put in a section:
>
> .section .text._Z3fooi,"axG",@progbits,_Z3fooi,comdat
>
> which generates a jump table for a switch statement, now has that table
> put into a section:
>
> .section .rodata._Z3fooi,"aG",@progbits,_Z3fooi,comdat
>
> rather than just .rodata. This fixes testcase
> g++.old-deja/g++.other/comdat4.C on x86_64 with the above bit applied.
>
> Thirdly, COMDAT groups have proven buggy on various platforms with
> various (older) binutils versions. The third part of the patch stops
> COMDAT groups from being used altogether when the linker version is less
> than 2.16. This is perhaps slightly too pessimistic (i.e., earlier
> versions might work OK), but I'm reasonably confident my testing has
> shown it to be about right. This is based on a patch from H.J. Lu which
> never seems to have been applied:
>
> http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02774.html
>
> Though the required version has been bumped by several. This will have
> the effect of disabling COMDAT on some setups where it is currently
> enabled. I have also renamed the macro HAVE_GAS_COMDAT_GROUP to just
> HAVE_COMDAT_GROUP to better indicate that it's not just an assembler
> feature that's being relied on.
>
> I have run tests on powerpc64-unknown-linux-gnu with c,c++ and
> x86_64-pc-linux-gnu with c,c++,java,objc, with binutils 2.16, with no
> regressions.
>
> OK to apply?
>
> ChangeLog:
>
> * gcc/configure.ac: Set ld_vers_major, ld_vers_minor and ld_vers_patch
> for GNU linker. Support linker version x.x.x.x.x. Require GNU linker
> 20050308/2.16.0 or newer for comdat group.
> * gcc/configure: Regenerated.
> * gcc/config.in: Regenerated.
> * gcc/varasm.c (default_function_rodata_section): Put .rodata section
> in COMDAT group when necessary.
> (default_elf_asm_named_section): Rename HAVE_GAS_COMDAT_GROUP to
> HAVE_COMDAT_GROUP.
> (default_unique_section_1): Don't use .gnu.linkonce when COMDAT is
> available.