This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug bootstrap/26053] New: Misdetection of COMDAT group support with GNU as and non-GNU ld
- From: "gcc-bugzilla at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 31 Jan 2006 22:29:28 -0000
- Subject: [Bug bootstrap/26053] New: Misdetection of COMDAT group support with GNU as and non-GNU ld
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
When configuring the 4.1 branch (I haven't tried this on mainline yet since
I only recently found a workaround for PR target/24334) on IRIX 6.5 with
GNU as 2.16.1 and the SGI MIPSpro ld, libstdc++.so fails to link:
ld32: FATAL 2 : Internal: at ../../ld/section_type.c In load_info() unknown
section type
collect2: ld returned 1 exit status
make[5]: *** [libstdc++.la] Error 1
While the error message could be clearer ;-), this is obviously due to e.g.
allocator-inst.o:
**** SECTION HEADER TABLE ****
[No] Type Addr Offset Size Name
Link Info Adralgn Entsize Flags
[1] 0x11 0 0x34 0x8 .group
43 0x25 0x4 0x4 0x00000000
(excerpt of elfdump -h output): Section Type 0x11 (obviously unknown to
elfdump) is SHT_GROUP. While the version of GNU as used obviously supports
COMDAT group, the native ld does not.
It turns out that the test in gcc/configure.ac for COMDAT group support is
wrong if using GNU as with a non-GNU ld:
if test $in_tree_ld != yes && test x"$ld_vers" != x; then
comdat_group=yes
if test 0"$ld_date" -lt 20050308; then
if test -n "$ld_date"; then
# If there was date string, but was earlier than 2005-03-08, fail
comdat_group=no
elif test "$ld_vers_major" -lt 2; then
comdat_group=no
elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 16; then
comdat_group=no
fi
fi
if test $comdat_group = no; then
gcc_cv_as_comdat_group=no
gcc_cv_as_comdat_group_percent=no
fi
fi
For non-in_tree_ld and non-GNU ld (i.e. $ld_vers empty), only
gcc_cv_as_comdat_group* results from above this section are used, but
instead for non-GNU ld, no COMDAT group support should be assumed.
It may be that e.g. the Solaris 10+ ld does support this, but we either
need a configure check for this or statically define this in configure.ac
if it is hard/impossible to check at configure time.
This triggers only with GNU as 2.16.1, since 2.15 on IRIX 6 SEGVs with
gas COMDAT group tests, thus GNU as isn't known to support COMDAT group in
2.15.
Environment:
System: IRIX sculptor 6.5 10060437 IP32
host: mips-sgi-irix6.5
build: mips-sgi-irix6.5
target: mips-sgi-irix6.5
configured with: /vol/gcc/src/gcc-4.1-branch-dist/configure --prefix=/vol/gcc
--with-local-prefix=/vol/gcc --disable-nls --with-gnu-as
--with-as=/vol/gcc/lib/gas-2.16.1 --enable-libgcj --disable-multilib
--with-gmp-dir=/vol/gnu/obj/gmp-4.1.3
--with-mpfr-dir=/vol/gnu/obj/gmp-4.1.3/mpfr
--enable-languages=c,c++,fortran,java,objc,ada
How-To-Repeat:
Bootstrap the 4.1 branch (mainline is almost certainly affected as well) as
described above.
------- Comment #1 from ro at techfak dot uni-bielefeld dot de 2006-01-31 22:29 -------
Fix:
The following patch allowed a bootstrap on the 4.1 branch to finish
successfully:
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac (revision 110450)
+++ gcc/configure.ac (working copy)
@@ -2175,10 +2175,13 @@ if test $in_tree_ld != yes && test x"$ld
comdat_group=no
fi
fi
- if test $comdat_group = no; then
- gcc_cv_as_comdat_group=no
- gcc_cv_as_comdat_group_percent=no
- fi
+else
+ # assume linkers other than GNU ld don't support COMDAT group
+ comdat_group=no
+fi
+if test $comdat_group = no; then
+ gcc_cv_as_comdat_group=no
+ gcc_cv_as_comdat_group_percent=no
fi
AC_DEFINE_UNQUOTED(HAVE_COMDAT_GROUP,
[`if test $gcc_cv_as_comdat_group = yes || test
$gcc_cv_as_comdat_group_percent = yes; then echo 1; else echo 0; fi`],
I need to test this on mainline and properly submit to gcc-patches.
--
Summary: Misdetection of COMDAT group support with GNU as and
non-GNU ld
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: bootstrap
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ro at techfak dot uni-bielefeld dot de
GCC build triplet: mips-sgi-irix6.5
GCC host triplet: mips-sgi-irix6.5
GCC target triplet: mips-sgi-irix6.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26053