This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH]: Fix comdat et al. on sparc


We have target override for sparc to handle the fact that Sun
Solaris's assembler only understands "#alloc" instead of "a", etc. for
section attributes.  (even more bizarrely, the Solaris x86 assembler
understands the standard single-letter mnemonics)

GAS understands all of the standard section attribute specifiers
used in the generic varasm.c code just fine, even on sparc.

Because of this override we were missing support several things
including .comdat, and this breaks things seriously once
gnu_unique_object starts getting used.  There was even a hack
living in the sparc override attempting to handle SECTION_MERGE.

The correct fix is to elide this override entirely when using GAS.

I've checked this into trunk, plus gcc-4.3 and gcc-4.4 branches.

2010-01-24  David S. Miller  <davem@davemloft.net>

	* gcc/config/sparc/sysv4.h (TARGET_ASM_NAMED_SECTION): Only
	define if not using GAS.
	* gcc/config/sparc/sparc.c (sparc_elf_asm_named_section):
	Likewise.  Delete SECTION_MERGE code, which is only applicable
	when using GAS.

diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 4b904b4..d0a5d2b 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -368,7 +368,7 @@ static int save_or_restore_regs (int, int, rtx, int, int);
 static void emit_save_or_restore_regs (int);
 static void sparc_asm_function_prologue (FILE *, HOST_WIDE_INT);
 static void sparc_asm_function_epilogue (FILE *, HOST_WIDE_INT);
-#ifdef OBJECT_FORMAT_ELF
+#if defined (OBJECT_FORMAT_ELF) && !defined (HAVE_GNU_AS)
 static void sparc_elf_asm_named_section (const char *, unsigned int, tree);
 #endif
 
@@ -7986,19 +7986,11 @@ sparc_profile_hook (int labelno)
     }
 }
 
-#ifdef OBJECT_FORMAT_ELF
+#if defined (OBJECT_FORMAT_ELF) && !defined (HAVE_GNU_AS)
 static void
 sparc_elf_asm_named_section (const char *name, unsigned int flags,
 			     tree decl)
 {
-  if (flags & SECTION_MERGE)
-    {
-      /* entsize cannot be expressed in this section attributes
-	 encoding style.  */
-      default_elf_asm_named_section (name, flags, decl);
-      return;
-    }
-
   fprintf (asm_out_file, "\t.section\t\"%s\"", name);
 
   if (!(flags & SECTION_DEBUG))
diff --git a/gcc/config/sparc/sysv4.h b/gcc/config/sparc/sysv4.h
index edfe59b..fa04985 100644
--- a/gcc/config/sparc/sysv4.h
+++ b/gcc/config/sparc/sysv4.h
@@ -1,5 +1,6 @@
 /* Target definitions for GNU compiler for SPARC running System V.4
-   Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998, 2000, 2002, 2007, 2009
+   Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998, 2000, 2002, 2007, 2009,
+   2010
    Free Software Foundation, Inc.
    Contributed by Ron Guilmette (rfg@monkeys.com).
 
@@ -126,9 +127,11 @@ do { ASM_OUTPUT_ALIGN ((FILE), Pmode == SImode ? 2 : 3);		\
 #undef DTORS_SECTION_ASM_OP
 #define DTORS_SECTION_ASM_OP    "\t.section\t\".dtors\",#alloc,#write"
 
+#ifndef HAVE_GNU_AS
 /* Switch into a generic section.  */
 #undef TARGET_ASM_NAMED_SECTION
 #define TARGET_ASM_NAMED_SECTION  sparc_elf_asm_named_section
+#endif
 
 #undef ASM_OUTPUT_ALIGNED_BSS
 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]