This is the mail archive of the gcc@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]

Re: 21 GCC HEAD regressions, 2 new, with your patch on 2004-07-07T22:45:18Z.


> 
> It looks like we may need a undo_make_decl_one_only if we have to
> change our mind like that.

Yes and I was just creating one.
Here is the patch which fixes the problem for me on powerpc-apple-darwin.

OK? Bootstrapped on powerpc-apple-darwin.

I have not added to the other targets which need the macro also.
The C++ part and the other target support is needed for the 3.4 branch also.

Thanks,
Andrew Pinski

ChangLog:
	* config/darwin-protos.h (darwin_make_decl_non_one_only): Prototype.
	* config/darwin.c (darwin_make_decl_non_one_only): Declare.
	* config/darwin.h (MAKE_DECL_NON_ONE_ONLY): Declare.
	* doc/tm.texi (MAKE_DECL_NON_ONE_ONLY): Document.


cp/ChangeLog:
	* cp/rtti.c (emit_tinfo_decl): Call MAKE_DECL_NON_ONE_ONLY when
	making the decl non weak.


Index: config/darwin-protos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/darwin-protos.h,v
retrieving revision 1.35
diff -u -p -r1.35 darwin-protos.h
--- config/darwin-protos.h	19 May 2004 02:11:42 -0000	1.35
+++ config/darwin-protos.h	9 Jul 2004 05:54:57 -0000
@@ -85,6 +85,7 @@ extern void darwin_pragma_unused (struct
 extern void darwin_file_end (void);
 
 extern void darwin_make_decl_one_only (tree decl);
+extern void darwin_make_decl_non_one_only (tree decl);
 
 /* Expanded by EXTRA_SECTION_FUNCTIONS into varasm.o.  */
 extern void const_section (void);
Index: config/darwin.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/darwin.c,v
retrieving revision 1.70
diff -u -p -r1.70 darwin.c
--- config/darwin.c	8 Jul 2004 00:12:27 -0000	1.70
+++ config/darwin.c	9 Jul 2004 05:54:57 -0000
@@ -1142,6 +1142,14 @@ darwin_make_decl_one_only (tree decl)
 }
 
 void
+darwin_make_decl_non_one_only (tree decl)
+{
+  TREE_PUBLIC (decl) = 0;
+  DECL_ONE_ONLY (decl) = 0;
+  DECL_SECTION_NAME (decl) = NULL;
+}
+
+void
 machopic_select_section (tree exp, int reloc,
 			 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
 {
Index: config/darwin.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/darwin.h,v
retrieving revision 1.83
diff -u -p -r1.83 darwin.h
--- config/darwin.h	8 Jul 2004 00:12:27 -0000	1.83
+++ config/darwin.h	9 Jul 2004 05:54:57 -0000
@@ -336,6 +336,10 @@ do { text_section ();							\
 /* Making a symbols weak on Darwin requires more than just setting DECL_WEAK. */
 #define MAKE_DECL_ONE_ONLY(DECL) darwin_make_decl_one_only (DECL)
 
+/* Making a symbol non-weak again on Darwin requires more than just setting
+   DECL_WEAK. */
+#define MAKE_DECL_NON_ONE_ONLY(DECL) darwin_make_decl_non_one_only (DECL)
+
 /* Representation of linkonce symbols for the MACH-O assembler. Linkonce
    symbols must be given a special section *and* must be preceded by a 
    special assembler directive. */
Index: cp/rtti.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/rtti.c,v
retrieving revision 1.186
diff -u -p -r1.186 rtti.c
--- cp/rtti.c	7 Jul 2004 18:29:38 -0000	1.186
+++ cp/rtti.c	9 Jul 2004 05:54:57 -0000
@@ -1464,7 +1464,15 @@ emit_tinfo_decl (tree decl)
     {
       DECL_COMDAT (decl) = 0;
       if (SUPPORTS_ONE_ONLY)
-	DECL_ONE_ONLY (decl) = 0;
+        {
+	  if (DECL_ONE_ONLY (decl))
+	    {
+#ifdef MAKE_DECL_NON_ONE_ONLY
+	      MAKE_DECL_NON_ONE_ONLY (decl);
+#endif
+	      DECL_ONE_ONLY (decl) = 0;
+	    }
+	}
     }
 
   DECL_INITIAL (decl) = var_init;
Index: doc/tm.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v
retrieving revision 1.337
diff -u -p -r1.337 tm.texi
--- doc/tm.texi	5 Jul 2004 19:49:20 -0000	1.337
+++ doc/tm.texi	9 Jul 2004 05:54:58 -0000
@@ -6763,6 +6763,13 @@ section flags in the Microsoft Windows P
 requires changes to @var{decl}, such as putting it in a separate section.
 @end defmac
 
+@defmac MAKE_DECL_NON_ONE_ONLY (@var{decl})
+A C statement (sans semicolon) to mark @var{decl} to be emitted as a
+public symbol such that extra copies in multiple translation units will
+be not discarded by the linker.  This is used to revert the effects of
+the MAKE_DECL_ONE_ONLY macro.
+@end defmac
+
 @defmac SUPPORTS_ONE_ONLY
 A C expression which evaluates to true if the target supports one-only
 semantics.


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