-2004-07-09 H.J. Lu <hongjiu.lu@intel.com>
+2004-12-03 H.J. Lu <hongjiu.lu@intel.com>
PR c++/16276
* configure.ac: Check if assembler supports COMDAT group.
* config/sparc/sysv4.h (TARGET_ASM_NAMED_SECTION): Define only
if HAVE_GAS_COMDAT_GROUP is not defined.
---- gcc/config.in.comdat 2004-07-09 17:37:29.000000000 -0700
-+++ gcc/config.in 2004-07-09 17:37:29.000000000 -0700
+--- gcc/config.in.comdat 2004-12-03 09:15:49.000000000 -0800
++++ gcc/config.in 2004-12-03 09:15:50.000000000 -0800
@@ -252,6 +252,9 @@
/* Define if your assembler supports .balign and .p2align. */
#undef HAVE_GAS_BALIGN_AND_P2ALIGN
#undef HAVE_GAS_FILDS_FISTS
--- gcc/config/arm/arm.c.comdat 2004-04-30 10:36:39.000000000 -0700
-+++ gcc/config/arm/arm.c 2004-07-09 17:37:29.000000000 -0700
++++ gcc/config/arm/arm.c 2004-12-03 09:15:50.000000000 -0800
@@ -13156,12 +13156,15 @@ static void
arm_elf_asm_named_section (const char *name, unsigned int flags)
{
}
#endif
--- gcc/config/sparc/sysv4.h.comdat 2003-06-17 17:03:32.000000000 -0700
-+++ gcc/config/sparc/sysv4.h 2004-07-09 17:37:29.000000000 -0700
++++ gcc/config/sparc/sysv4.h 2004-12-03 09:15:50.000000000 -0800
@@ -150,9 +150,13 @@ do { ASM_OUTPUT_ALIGN ((FILE), Pmode ==
#undef DTORS_SECTION_ASM_OP
#define DTORS_SECTION_ASM_OP "\t.section\t\".dtors\",#alloc,#write"
#undef ASM_OUTPUT_ALIGNED_BSS
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
---- gcc/configure.ac.comdat 2004-07-09 17:37:29.000000000 -0700
-+++ gcc/configure.ac 2004-07-09 17:37:29.000000000 -0700
-@@ -2070,6 +2070,13 @@ AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
+--- gcc/configure.ac.comdat 2004-12-03 09:15:49.000000000 -0800
++++ gcc/configure.ac 2004-12-03 09:22:29.000000000 -0800
+@@ -1913,8 +1913,12 @@ changequote(,)dnl
+ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \
+ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \
+ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \
+- -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p'`
++ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \
++ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p'`
+ ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
++ ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
++ ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
++ ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ if test 0"$ld_date" -lt 20020404; then
+ if test -n "$ld_date"; then
+ # If there was date string, but was earlier than 2002-04-04, fail
+@@ -1923,9 +1927,6 @@ changequote(,)dnl
+ # If there was no date string nor ld version number, something is wrong
+ gcc_cv_ld_hidden=no
+ else
+- ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
+- ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
+- ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ test -z "$ld_vers_patch" && ld_vers_patch=0
+ if test "$ld_vers_major" -lt 2; then
+ gcc_cv_ld_hidden=no
+@@ -2060,6 +2061,39 @@ AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
[`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
[Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
+gcc_GAS_CHECK_FEATURE(COMDAT group support, gcc_cv_as_comdat_group,
-+ [elf,2,15,91], [--fatal-warnings],
++ [elf,2,15,92], [--fatal-warnings],
+ [.section .text,"axG",@progbits,.foo,comdat])
++if test $gcc_cv_as_comdat_group = yes; then
++ gcc_cv_as_comdat_group_percent=no
++else
++ gcc_GAS_CHECK_FEATURE(COMDAT group support, gcc_cv_as_comdat_group_percent,
++ [elf,2,15,92], [--fatal-warnings],
++ [.section .text,"axG",%progbits,.foo,comdat])
++fi
++if test $in_tree_ld != yes && test x"$ld_vers" != x; then
++ comdat_group=yes
++ if test 0"$ld_date" -lt 20040727; then
++ if test -n "$ld_date"; then
++ # If there was date string, but was earlier than 2002-07-27, 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 15; then
++ comdat_group=no
++ elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 15 -a "$ld_vers_patch" -lt 92; 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
+AC_DEFINE_UNQUOTED(HAVE_GAS_COMDAT_GROUP,
-+ [`if test $gcc_cv_as_comdat_group = yes; then echo 1; else echo 0; fi`],
++ [`if test $gcc_cv_as_comdat_group = yes || test $gcc_cv_as_comdat_group_percent = yes; then echo 1; else echo 0; fi`],
+[Define 0/1 if your assembler supports COMDAT group.])
+
# Thread-local storage - the check is heavily parametrized.
conftest_s=
tls_first_major=
--- gcc/final.c.comdat 2004-02-23 13:24:09.000000000 -0800
-+++ gcc/final.c 2004-07-09 17:38:25.000000000 -0700
++++ gcc/final.c 2004-12-03 09:15:50.000000000 -0800
@@ -1881,7 +1881,12 @@ final_scan_insn (rtx insn, FILE *file, i
{
int log_align;
#ifdef ADDR_VEC_ALIGN
log_align = ADDR_VEC_ALIGN (NEXT_INSN (insn));
--- gcc/output.h.comdat 2004-03-26 09:25:41.000000000 -0800
-+++ gcc/output.h 2004-07-09 17:37:29.771404795 -0700
++++ gcc/output.h 2004-12-03 09:15:50.000000000 -0800
@@ -475,6 +475,9 @@ extern void no_asm_to_stream (FILE *);
#define SECTION_NOTYPE 0x80000 /* don't output @progbits */
#define SECTION_MACH_DEP 0x100000 /* subsequent bits reserved for target */
extern unsigned int get_named_section_flags (const char *);
extern bool set_named_section_flags (const char *, unsigned int);
extern void named_section_flags (const char *, unsigned int);
---- gcc/varasm.c.comdat 2004-04-16 16:59:51.000000000 -0700
-+++ gcc/varasm.c 2004-07-09 18:12:27.804157508 -0700
+--- gcc/varasm.c.comdat 2004-11-01 14:04:58.000000000 -0800
++++ gcc/varasm.c 2004-12-03 09:30:54.005496029 -0800
@@ -259,6 +259,35 @@ data_section (void)
}
}
/* Tell assembler to switch to read-only data section. This is normally
the text section. */
-@@ -4650,16 +4679,97 @@ default_no_named_section (const char *na
+@@ -4651,16 +4680,97 @@ default_no_named_section (const char *na
abort ();
}
+ sec = one [p [0] - 'b'];
+
+ if (sec)
-+ *group = p + 1;
++ *group = p + 2;
+ }
+ else if (p [2] == '.')
+ {
+ sec = ".debug_info";
+
+ if (sec)
-+ *group = p + 2;
++ *group = p + 3;
+ }
+ else if (strncmp (p, "sb2.", 4) == 0)
+ {
+ sec = ".sbss2";
-+ *group = p + 3;
++ *group = p + 4;
+ }
+
+ if (sec)
if (!(flags & SECTION_DEBUG))
*f++ = 'a';
-@@ -4675,9 +4785,17 @@ default_elf_asm_named_section (const cha
+@@ -4676,9 +4786,17 @@ default_elf_asm_named_section (const cha
*f++ = 'S';
if (flags & SECTION_TLS)
*f++ = 'T';
if (!(flags & SECTION_NOTYPE))
{
-@@ -4694,6 +4812,9 @@ default_elf_asm_named_section (const cha
+@@ -4695,6 +4813,9 @@ default_elf_asm_named_section (const cha
fprintf (asm_out_file, ",%d", flags & SECTION_ENTSIZE);
}