Support .debug_macro with Sun as (PR debug/49887)
Rainer Orth
ro@CeBiTec.Uni-Bielefeld.DE
Mon Aug 1 12:12:00 GMT 2011
As described in the PR, many gcc.dg/debug and g++.dg/debug tests were
failing on Solaris/SPARC with -gdwarf-2 -g3 and Sun as. This happens
because the signature symbols Sun as requires for the COMDAT groups are
emitted in TARGET_ASM_CODE_END, before *debug_hooks->finish runs which
creates new ones for .debug_macro. Fixed by moving the emission to
TARGET_ASM_FILE_END instead.
Bootstrapped without regressions on i386-pc-solaris2.11 and
sparc-sun-solaris2.11, installed on mainline.
Rainer
2011-07-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR debug/49887
* config/sol2.c (solaris_code_end): Rename to solaris_file_end.
* config/sol2-protos.h: Likewise.
* config/i386/i386.c (ix86_code_end) [TARGET_SOLARIS]: Don't call
solaris_code_end.
* config/i386/sol2.h [!USE_GAS] (TARGET_ASM_FILE_END): Redefine.
* config/sparc/sparc.c (sparc_file_end) [TARGET_SOLARIS]: Call
solaris_file_end.
* config/sparc/sol2.h (TARGET_ASM_CODE_END): Remove.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -8321,10 +8321,6 @@ ix86_code_end (void)
rtx xops[2];
int regno;
-#ifdef TARGET_SOLARIS
- solaris_code_end ();
-#endif
-
for (regno = AX_REG; regno <= SP_REG; regno++)
{
char name[32];
diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h
--- a/gcc/config/i386/sol2.h
+++ b/gcc/config/i386/sol2.h
@@ -160,6 +160,12 @@ along with GCC; see the file COPYING3.
#undef TARGET_ASM_NAMED_SECTION
#define TARGET_ASM_NAMED_SECTION i386_solaris_elf_named_section
+#ifndef USE_GAS
+/* Emit COMDAT group signature symbols for Sun as. */
+#undef TARGET_ASM_FILE_END
+#define TARGET_ASM_FILE_END solaris_file_end
+#endif
+
/* Unlike GNU ld, Sun ld doesn't coalesce .ctors.N/.dtors.N sections, so
inhibit their creation. Also cf. sparc/sysv4.h. */
#ifndef USE_GLD
diff --git a/gcc/config/sol2-protos.h b/gcc/config/sol2-protos.h
--- a/gcc/config/sol2-protos.h
+++ b/gcc/config/sol2-protos.h
@@ -1,6 +1,6 @@
/* Operating system specific prototypes to be used when targeting GCC for any
Solaris 2 system.
- Copyright 2004, 2007, 2010 Free Software Foundation, Inc.
+ Copyright 2004, 2007, 2010, 2011 Free Software Foundation, Inc.
This file is part of GCC.
@@ -23,4 +23,4 @@ extern void solaris_register_pragmas (vo
extern void solaris_output_init_fini (FILE *, tree);
extern void solaris_assemble_visibility (tree, int);
extern void solaris_elf_asm_comdat_section (const char *, unsigned int, tree);
-extern void solaris_code_end (void);
+extern void solaris_file_end (void);
diff --git a/gcc/config/sol2.c b/gcc/config/sol2.c
--- a/gcc/config/sol2.c
+++ b/gcc/config/sol2.c
@@ -228,7 +228,7 @@ solaris_elf_asm_comdat_section (const ch
for Sun as. With a few exceptions, this is already the case. To
identify the missing ones without changing the affected frontents,
remember the signature symbols and emit those not marked
- TREE_SYMBOL_REFERENCED in solaris_code_end. */
+ TREE_SYMBOL_REFERENCED in solaris_file_end. */
if (solaris_comdat_htab == NULL)
solaris_comdat_htab = htab_create_alloc (37, comdat_hash, comdat_eq, NULL,
xcalloc, free);
@@ -275,7 +275,7 @@ solaris_define_comdat_signature (void **
/* Emit unreferenced COMDAT group signature symbols for Sun as. */
void
-solaris_code_end (void)
+solaris_file_end (void)
{
if (solaris_comdat_htab == NULL)
return;
diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h
--- a/gcc/config/sparc/sol2.h
+++ b/gcc/config/sparc/sol2.h
@@ -314,10 +314,6 @@ along with GCC; see the file COPYING3.
#undef TARGET_ASM_NAMED_SECTION
#define TARGET_ASM_NAMED_SECTION sparc_solaris_elf_asm_named_section
-/* Emit COMDAT group signature symbols for Sun as. */
-#undef TARGET_ASM_CODE_END
-#define TARGET_ASM_CODE_END solaris_code_end
-
/* Sun as requires doublequoted section names on SPARC. While GNU as
supports that, too, we prefer the standard variant. */
#undef SECTION_NAME_FORMAT
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -10019,6 +10019,10 @@ sparc_file_end (void)
if (NEED_INDICATE_EXEC_STACK)
file_end_indicate_exec_stack ();
+
+#ifdef TARGET_SOLARIS
+ solaris_file_end ();
+#endif
}
#ifdef TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
More information about the Gcc-patches
mailing list