public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Revert HJL's G++ generates local references to linkonce
@ 2004-07-09  6:19 Andrew Pinski
  2004-07-09  7:15 ` Mark Mitchell
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Pinski @ 2004-07-09  6:19 UTC (permalink / raw)
  To: gcc-patches

The problem with HJL's patch to fix G++ generates local references to linkonce is
that it is wrong for targets which use the MAKE_DECL_ONE_ONLY target macro which I
think only *-darwin does.

I am only askinig reverting for the mainline as the 3.4 branch does not have the target
macro.

OK?


Thanks,
Andrew Pinski

ChangeLog:

	Revert:
	2004-07-07  H.J. Lu  <hongjiu.lu@intel.com>

        PR c++/16276
        * rtti.c (emit_tinfo_decl): Turn off DECL_ONE_ONLY if typeinfo
        is not public.

Patch:

Index: rtti.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/rtti.c,v
retrieving revision 1.186
diff -u -p -r1.186 rtti.c
--- rtti.c      7 Jul 2004 18:29:38 -0000       1.186
+++ rtti.c      9 Jul 2004 04:44:29 -0000
@@ -1461,11 +1461,7 @@ emit_tinfo_decl (tree decl)
   DECL_EXTERNAL (decl) = 0;
   TREE_PUBLIC (decl) = !non_public;
   if (non_public)
-    {
-      DECL_COMDAT (decl) = 0;
-      if (SUPPORTS_ONE_ONLY)
-       DECL_ONE_ONLY (decl) = 0;
-    }
+    DECL_COMDAT (decl) = 0;
 
   DECL_INITIAL (decl) = var_init;
   mark_used (decl);

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Revert HJL's G++ generates local references to linkonce
  2004-07-09  6:19 [PATCH] Revert HJL's G++ generates local references to linkonce Andrew Pinski
@ 2004-07-09  7:15 ` Mark Mitchell
  2004-07-13  0:37   ` Andrew Pinski
  0 siblings, 1 reply; 6+ messages in thread
From: Mark Mitchell @ 2004-07-09  7:15 UTC (permalink / raw)
  To: Andrew Pinski; +Cc: gcc-patches

Andrew Pinski wrote:

>The problem with HJL's patch to fix G++ generates local references to linkonce is
>that it is wrong for targets which use the MAKE_DECL_ONE_ONLY target macro which I
>think only *-darwin does.
>
>I am only askinig reverting for the mainline as the 3.4 branch does not have the target
>macro.
>
>OK?
>
OK.

Since I approved the original patch, I can approve its reversion too. :-)

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Revert HJL's G++ generates local references to linkonce
  2004-07-09  7:15 ` Mark Mitchell
@ 2004-07-13  0:37   ` Andrew Pinski
  2004-07-13  1:20     ` Mark Mitchell
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Pinski @ 2004-07-13  0:37 UTC (permalink / raw)
  To: Mark Mitchell; +Cc: Andrew Pinski, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 11148 bytes --]

> 
> Andrew Pinski wrote:
> 
> >The problem with HJL's patch to fix G++ generates local references to linkonce is
> >that it is wrong for targets which use the MAKE_DECL_ONE_ONLY target macro which I
> >think only *-darwin does.
> >
> >I am only askinig reverting for the mainline as the 3.4 branch does not have the target
> >macro.
> >
> >OK?
> >
> OK.
> 
> Since I approved the original patch, I can approve its reversion too. :-)

I figured out a better way of fixing this regression besides reverting the patch.
See <http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00878.html>.

Here is the updated patch which has been bootstrapped on powerpc-apple-darwin and fixes these
two regressions and also should fix the regressions on the other targets too unlike my previous patch
in the message above.

OK?

ChangLog:
	PR c++/16475
        * 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.
        * config/elfos.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/alpha/elf.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/i386/djgpp.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/mips/elf.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/mips/elf64.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/mips/iris5gld.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/mips/iris6gld.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/mmix/mmix.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * config/pa/som.h (MAKE_DECL_NON_ONE_ONLY): Declare.
        * doc/tm.texi (MAKE_DECL_NON_ONE_ONLY): Document.


cp/ChangeLog:
	PR c++/16475
        * 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	12 Jul 2004 20:39:08 -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.71
diff -u -p -r1.71 darwin.c
--- config/darwin.c	10 Jul 2004 05:54:26 -0000	1.71
+++ config/darwin.c	12 Jul 2004 20:39:08 -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.84
diff -u -p -r1.84 darwin.h
--- config/darwin.h	11 Jul 2004 00:23:39 -0000	1.84
+++ config/darwin.h	12 Jul 2004 20:39:08 -0000
@@ -335,6 +335,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: config/elfos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/elfos.h,v
retrieving revision 1.65
diff -u -p -r1.65 elfos.h
--- config/elfos.h	5 Jul 2004 19:49:13 -0000	1.65
+++ config/elfos.h	12 Jul 2004 20:39:08 -0000
@@ -213,6 +213,7 @@ Boston, MA 02111-1307, USA.  */
 #endif
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* Switch into a generic section.  */
 #define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
Index: config/alpha/elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/alpha/elf.h,v
retrieving revision 1.75
diff -u -p -r1.75 elf.h
--- config/alpha/elf.h	25 Dec 2003 15:17:34 -0000	1.75
+++ config/alpha/elf.h	12 Jul 2004 20:39:08 -0000
@@ -229,6 +229,7 @@ void FN (void)					\
 #define TARGET_ASM_SELECT_SECTION  default_elf_select_section
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* Define the strings used for the special svr4 .type and .size directives.
    These strings generally do not vary from one system running svr4 to
Index: config/i386/djgpp.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/djgpp.h,v
retrieving revision 1.48
diff -u -p -r1.48 djgpp.h
--- config/i386/djgpp.h	31 Jan 2004 02:06:57 -0000	1.48
+++ config/i386/djgpp.h	12 Jul 2004 20:39:08 -0000
@@ -196,3 +196,4 @@ while (0)
 /* Support for C++ templates.  */
 #undef MAKE_DECL_ONE_ONLY
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
Index: config/mips/elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/elf.h,v
retrieving revision 1.61
diff -u -p -r1.61 elf.h
--- config/mips/elf.h	31 Jan 2004 02:07:02 -0000	1.61
+++ config/mips/elf.h	12 Jul 2004 20:39:08 -0000
@@ -106,6 +106,7 @@ Boston, MA 02111-1307, USA.  */
  } while (0)
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* On elf, we *do* have support for the .init and .fini sections, and we
    can put stuff in there to be executed before and after `main'.  We let
Index: config/mips/elf64.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/elf64.h,v
retrieving revision 1.63
diff -u -p -r1.63 elf64.h
--- config/mips/elf64.h	31 Jan 2004 02:07:02 -0000	1.63
+++ config/mips/elf64.h	12 Jul 2004 20:39:08 -0000
@@ -91,6 +91,7 @@ Boston, MA 02111-1307, USA.  */
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
 
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 /* On elf, we *do* have support for the .init and .fini sections, and we
    can put stuff in there to be executed before and after `main'.  We let
    crtstuff.c and other files know this by defining the following symbols.
Index: config/mips/iris5gld.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/iris5gld.h,v
retrieving revision 1.1
diff -u -p -r1.1 iris5gld.h
--- config/mips/iris5gld.h	17 Feb 2004 20:42:53 -0000	1.1
+++ config/mips/iris5gld.h	12 Jul 2004 20:39:08 -0000
@@ -37,6 +37,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* The GNU linker supports one-only sections.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 #define INIT_SECTION_ASM_OP "\t.section\t.init,0x1,0x6,4,4"
 #define FINI_SECTION_ASM_OP "\t.section\t.fini,0x1,0x6,4,4"
@@ -73,3 +74,4 @@ Boston, MA 02111-1307, USA.  */
 
 /* The GNU linker supports one-only sections.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
Index: config/mips/iris6gld.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/iris6gld.h,v
retrieving revision 1.14
diff -u -p -r1.14 iris6gld.h
--- config/mips/iris6gld.h	17 Feb 2004 20:42:53 -0000	1.14
+++ config/mips/iris6gld.h	12 Jul 2004 20:39:08 -0000
@@ -55,6 +55,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* The GNU linker supports one-only sections.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 #define INIT_SECTION_ASM_OP "\t.section\t.init,0x1,0x6,4,4"
 #define FINI_SECTION_ASM_OP "\t.section\t.fini,0x1,0x6,4,4"
Index: config/mmix/mmix.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mmix/mmix.h,v
retrieving revision 1.65
diff -u -p -r1.65 mmix.h
--- config/mmix/mmix.h	9 Jul 2004 00:29:14 -0000	1.65
+++ config/mmix/mmix.h	12 Jul 2004 20:39:09 -0000
@@ -936,6 +936,7 @@ typedef struct { int regs; int lib; } CU
 
 #define MAKE_DECL_ONE_ONLY(DECL) \
  mmix_make_decl_one_only (DECL)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
  mmix_asm_output_labelref (STREAM, NAME)
Index: config/pa/som.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/pa/som.h,v
retrieving revision 1.47
diff -u -p -r1.47 som.h
--- config/pa/som.h	2 Nov 2003 01:01:24 -0000	1.47
+++ config/pa/som.h	12 Jul 2004 20:39:09 -0000
@@ -366,6 +366,7 @@ do {						\
 
 /* Use weak (secondary definitions) to make one only declarations.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* This is how we tell the assembler that a symbol is weak.  The SOM
    weak implementation uses the secondary definition (sdef) flag.
Index: cp/rtti.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/rtti.c,v
retrieving revision 1.187
diff -u -p -r1.187 rtti.c
--- cp/rtti.c	12 Jul 2004 16:06:35 -0000	1.187
+++ cp/rtti.c	12 Jul 2004 20:39:09 -0000
@@ -1463,7 +1463,13 @@ emit_tinfo_decl (tree decl)
     {
       DECL_COMDAT (decl) = 0;
       if (SUPPORTS_ONE_ONLY)
-	DECL_ONE_ONLY (decl) = 0;
+	{
+#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.338
diff -u -p -r1.338 tm.texi
--- doc/tm.texi	9 Jul 2004 22:42:43 -0000	1.338
+++ doc/tm.texi	12 Jul 2004 20:39:12 -0000
@@ -6728,6 +6728,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.


[-- Attachment #2: ASCII C program text --]
[-- Type: text/plain, Size: 9339 bytes --]

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	12 Jul 2004 20:39:08 -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.71
diff -u -p -r1.71 darwin.c
--- config/darwin.c	10 Jul 2004 05:54:26 -0000	1.71
+++ config/darwin.c	12 Jul 2004 20:39:08 -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.84
diff -u -p -r1.84 darwin.h
--- config/darwin.h	11 Jul 2004 00:23:39 -0000	1.84
+++ config/darwin.h	12 Jul 2004 20:39:08 -0000
@@ -335,6 +335,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: config/elfos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/elfos.h,v
retrieving revision 1.65
diff -u -p -r1.65 elfos.h
--- config/elfos.h	5 Jul 2004 19:49:13 -0000	1.65
+++ config/elfos.h	12 Jul 2004 20:39:08 -0000
@@ -213,6 +213,7 @@ Boston, MA 02111-1307, USA.  */
 #endif
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* Switch into a generic section.  */
 #define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
Index: config/alpha/elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/alpha/elf.h,v
retrieving revision 1.75
diff -u -p -r1.75 elf.h
--- config/alpha/elf.h	25 Dec 2003 15:17:34 -0000	1.75
+++ config/alpha/elf.h	12 Jul 2004 20:39:08 -0000
@@ -229,6 +229,7 @@ void FN (void)					\
 #define TARGET_ASM_SELECT_SECTION  default_elf_select_section
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* Define the strings used for the special svr4 .type and .size directives.
    These strings generally do not vary from one system running svr4 to
Index: config/i386/djgpp.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/djgpp.h,v
retrieving revision 1.48
diff -u -p -r1.48 djgpp.h
--- config/i386/djgpp.h	31 Jan 2004 02:06:57 -0000	1.48
+++ config/i386/djgpp.h	12 Jul 2004 20:39:08 -0000
@@ -196,3 +196,4 @@ while (0)
 /* Support for C++ templates.  */
 #undef MAKE_DECL_ONE_ONLY
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
Index: config/mips/elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/elf.h,v
retrieving revision 1.61
diff -u -p -r1.61 elf.h
--- config/mips/elf.h	31 Jan 2004 02:07:02 -0000	1.61
+++ config/mips/elf.h	12 Jul 2004 20:39:08 -0000
@@ -106,6 +106,7 @@ Boston, MA 02111-1307, USA.  */
  } while (0)
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* On elf, we *do* have support for the .init and .fini sections, and we
    can put stuff in there to be executed before and after `main'.  We let
Index: config/mips/elf64.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/elf64.h,v
retrieving revision 1.63
diff -u -p -r1.63 elf64.h
--- config/mips/elf64.h	31 Jan 2004 02:07:02 -0000	1.63
+++ config/mips/elf64.h	12 Jul 2004 20:39:08 -0000
@@ -91,6 +91,7 @@ Boston, MA 02111-1307, USA.  */
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
 
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 /* On elf, we *do* have support for the .init and .fini sections, and we
    can put stuff in there to be executed before and after `main'.  We let
    crtstuff.c and other files know this by defining the following symbols.
Index: config/mips/iris5gld.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/iris5gld.h,v
retrieving revision 1.1
diff -u -p -r1.1 iris5gld.h
--- config/mips/iris5gld.h	17 Feb 2004 20:42:53 -0000	1.1
+++ config/mips/iris5gld.h	12 Jul 2004 20:39:08 -0000
@@ -37,6 +37,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* The GNU linker supports one-only sections.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 #define INIT_SECTION_ASM_OP "\t.section\t.init,0x1,0x6,4,4"
 #define FINI_SECTION_ASM_OP "\t.section\t.fini,0x1,0x6,4,4"
@@ -73,3 +74,4 @@ Boston, MA 02111-1307, USA.  */
 
 /* The GNU linker supports one-only sections.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
Index: config/mips/iris6gld.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/iris6gld.h,v
retrieving revision 1.14
diff -u -p -r1.14 iris6gld.h
--- config/mips/iris6gld.h	17 Feb 2004 20:42:53 -0000	1.14
+++ config/mips/iris6gld.h	12 Jul 2004 20:39:08 -0000
@@ -55,6 +55,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* The GNU linker supports one-only sections.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 #define INIT_SECTION_ASM_OP "\t.section\t.init,0x1,0x6,4,4"
 #define FINI_SECTION_ASM_OP "\t.section\t.fini,0x1,0x6,4,4"
Index: config/mmix/mmix.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mmix/mmix.h,v
retrieving revision 1.65
diff -u -p -r1.65 mmix.h
--- config/mmix/mmix.h	9 Jul 2004 00:29:14 -0000	1.65
+++ config/mmix/mmix.h	12 Jul 2004 20:39:09 -0000
@@ -936,6 +936,7 @@ typedef struct { int regs; int lib; } CU
 
 #define MAKE_DECL_ONE_ONLY(DECL) \
  mmix_make_decl_one_only (DECL)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
  mmix_asm_output_labelref (STREAM, NAME)
Index: config/pa/som.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/pa/som.h,v
retrieving revision 1.47
diff -u -p -r1.47 som.h
--- config/pa/som.h	2 Nov 2003 01:01:24 -0000	1.47
+++ config/pa/som.h	12 Jul 2004 20:39:09 -0000
@@ -366,6 +366,7 @@ do {						\
 
 /* Use weak (secondary definitions) to make one only declarations.  */
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define MAKE_DECL_NON_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 0)
 
 /* This is how we tell the assembler that a symbol is weak.  The SOM
    weak implementation uses the secondary definition (sdef) flag.
Index: cp/rtti.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/rtti.c,v
retrieving revision 1.187
diff -u -p -r1.187 rtti.c
--- cp/rtti.c	12 Jul 2004 16:06:35 -0000	1.187
+++ cp/rtti.c	12 Jul 2004 20:39:09 -0000
@@ -1463,7 +1463,13 @@ emit_tinfo_decl (tree decl)
     {
       DECL_COMDAT (decl) = 0;
       if (SUPPORTS_ONE_ONLY)
-	DECL_ONE_ONLY (decl) = 0;
+	{
+#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.338
diff -u -p -r1.338 tm.texi
--- doc/tm.texi	9 Jul 2004 22:42:43 -0000	1.338
+++ doc/tm.texi	12 Jul 2004 20:39:12 -0000
@@ -6728,6 +6728,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.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Revert HJL's G++ generates local references to linkonce
  2004-07-13  0:37   ` Andrew Pinski
@ 2004-07-13  1:20     ` Mark Mitchell
  2004-07-13  2:27       ` Andrew Pinski
  0 siblings, 1 reply; 6+ messages in thread
From: Mark Mitchell @ 2004-07-13  1:20 UTC (permalink / raw)
  To: Andrew Pinski; +Cc: gcc-patches

Andrew Pinski wrote:

>>Andrew Pinski wrote:
>>
>>    
>>
>>>The problem with HJL's patch to fix G++ generates local references to linkonce is
>>>that it is wrong for targets which use the MAKE_DECL_ONE_ONLY target macro which I
>>>think only *-darwin does.
>>>
>>>I am only askinig reverting for the mainline as the 3.4 branch does not have the target
>>>macro.
>>>
>>>OK?
>>>
>>>      
>>>
>>OK.
>>
>>Since I approved the original patch, I can approve its reversion too. :-)
>>    
>>
>
>I figured out a better way of fixing this regression besides reverting the patch.
>See <http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00878.html>.
>
>Here is the updated patch which has been bootstrapped on powerpc-apple-darwin and fixes these
>two regressions and also should fix the regressions on the other targets too unlike my previous patch
>in the message above.
>
It seems to me like we ought to be able to determine  the linkage of a 
symbol before we start fiddling with it, now that we do compilation on a 
unit-at-a-time basis.  I can't find HJ's original test case anymore; 
would you point me at that?

And, in the mean time, would you like to revert HJ's patch until we 
figure out what we really want to do?

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Revert HJL's G++ generates local references to linkonce
  2004-07-13  1:20     ` Mark Mitchell
@ 2004-07-13  2:27       ` Andrew Pinski
  2004-07-13  5:56         ` Mark Mitchell
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Pinski @ 2004-07-13  2:27 UTC (permalink / raw)
  To: Mark Mitchell; +Cc: Andrew Pinski, gcc-patches

> >I figured out a better way of fixing this regression besides reverting the patch.
> >See <http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00878.html>.
> >
> >Here is the updated patch which has been bootstrapped on powerpc-apple-darwin and fixes these
> >two regressions and also should fix the regressions on the other targets too unlike my previous patch
> >in the message above.
> >
> It seems to me like we ought to be able to determine  the linkage of a 
> symbol before we start fiddling with it, now that we do compilation on a 
> unit-at-a-time basis.  I can't find HJ's original test case anymore; 
> would you point me at that?

He did not post the testcase until after posting the patch and getting the ok:
http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00637.html


> And, in the mean time, would you like to revert HJ's patch until we 
> figure out what we really want to do?

Ok, I reverted the patch for now.

Thanks,
Andrew Pinski

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Revert HJL's G++ generates local references to linkonce
  2004-07-13  2:27       ` Andrew Pinski
@ 2004-07-13  5:56         ` Mark Mitchell
  0 siblings, 0 replies; 6+ messages in thread
From: Mark Mitchell @ 2004-07-13  5:56 UTC (permalink / raw)
  To: Andrew Pinski; +Cc: gcc-patches

Andrew Pinski wrote:

>>>I figured out a better way of fixing this regression besides reverting the patch.
>>>See <http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00878.html>.
>>>
>>>Here is the updated patch which has been bootstrapped on powerpc-apple-darwin and fixes these
>>>two regressions and also should fix the regressions on the other targets too unlike my previous patch
>>>in the message above.
>>>
>>>      
>>>
>>It seems to me like we ought to be able to determine  the linkage of a 
>>symbol before we start fiddling with it, now that we do compilation on a 
>>unit-at-a-time basis.  I can't find HJ's original test case anymore; 
>>would you point me at that?
>>    
>>
>
>He did not post the testcase until after posting the patch and getting the ok:
>http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00637.html
>  
>
Thanks.

I don't see exactly what is wrong there, but the typeinfo variable 
should not be put into COMDAT in the first place, in that case.  (It's a 
pointer to an incomplete type, so special rules apply to the typeinfo 
object; it should have internal linkage.)

>>And, in the mean time, would you like to revert HJ's patch until we 
>>figure out what we really want to do?
>>    
>>
>
>Ok, I reverted the patch for now.
>  
>
Thanks!

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-07-12 22:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-07-09  6:19 [PATCH] Revert HJL's G++ generates local references to linkonce Andrew Pinski
2004-07-09  7:15 ` Mark Mitchell
2004-07-13  0:37   ` Andrew Pinski
2004-07-13  1:20     ` Mark Mitchell
2004-07-13  2:27       ` Andrew Pinski
2004-07-13  5:56         ` Mark Mitchell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).