r619 - trunk/gcc

jim at linuxfromscratch.org jim at linuxfromscratch.org
Thu Aug 26 16:22:10 PDT 2004


Author: jim
Date: 2004-08-26 17:22:08 -0600 (Thu, 26 Aug 2004)
New Revision: 619

Added:
   trunk/gcc/gcc-3.4.1-linkonce-1.patch
Log:
Added: gcc-3.4.1-linkonce-1.patch

Added: trunk/gcc/gcc-3.4.1-linkonce-1.patch
===================================================================
--- trunk/gcc/gcc-3.4.1-linkonce-1.patch	2004-08-26 22:27:03 UTC (rev 618)
+++ trunk/gcc/gcc-3.4.1-linkonce-1.patch	2004-08-26 23:22:08 UTC (rev 619)
@@ -0,0 +1,356 @@
+Submitted By: Jim Gifford (patches at jg555 dot com)
+Date: 2004-08-20
+Initial Package Version: 3.4.1
+Origin: GCC - CVS
+Upstream Status: Applied
+Description: Fixes linkone/comdat issue
+	     Details of this patch can be found on the following link
+	     http://gcc.gnu.org/ml/gcc-patches/2004-08/msg00653.html	     
+ 
+diff -Naur gcc-3.4.1.orig/gcc/config/alpha/alpha.c gcc-3.4.1/gcc/config/alpha/alpha.c
+--- gcc-3.4.1.orig/gcc/config/alpha/alpha.c	2004-03-15 23:22:48.000000000 +0000
++++ gcc-3.4.1/gcc/config/alpha/alpha.c	2004-08-20 16:43:55.555528168 +0000
+@@ -10149,6 +10149,8 @@
+ # define TARGET_SECTION_TYPE_FLAGS unicosmk_section_type_flags
+ # undef TARGET_ASM_UNIQUE_SECTION
+ # define TARGET_ASM_UNIQUE_SECTION unicosmk_unique_section
++#undef TARGET_ASM_FUNCTION_RODATA_SECTION
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ # undef TARGET_ASM_GLOBALIZE_LABEL
+ # define TARGET_ASM_GLOBALIZE_LABEL hook_void_FILEptr_constcharptr
+ #endif
+diff -Naur gcc-3.4.1.orig/gcc/config/arm/pe.h gcc-3.4.1/gcc/config/arm/pe.h
+--- gcc-3.4.1.orig/gcc/config/arm/pe.h	2004-02-24 14:25:22.000000000 +0000
++++ gcc-3.4.1/gcc/config/arm/pe.h	2004-08-20 16:45:14.710494784 +0000
+@@ -97,6 +97,7 @@
+ #define MULTIPLE_SYMBOL_SPACES
+ 
+ #define TARGET_ASM_UNIQUE_SECTION arm_pe_unique_section
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ 
+ #define SUPPORTS_ONE_ONLY 1
+ 
+diff -Naur gcc-3.4.1.orig/gcc/config/avr/avr.c gcc-3.4.1/gcc/config/avr/avr.c
+--- gcc-3.4.1.orig/gcc/config/avr/avr.c	2004-03-13 06:38:12.000000000 +0000
++++ gcc-3.4.1/gcc/config/avr/avr.c	2004-08-20 16:45:48.609341376 +0000
+@@ -232,6 +232,8 @@
+ #define TARGET_ATTRIBUTE_TABLE avr_attribute_table
+ #undef TARGET_ASM_UNIQUE_SECTION
+ #define TARGET_ASM_UNIQUE_SECTION avr_unique_section
++#undef TARGET_ASM_FUNCTION_RODATA_SECTION
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ #undef TARGET_INSERT_ATTRIBUTES
+ #define TARGET_INSERT_ATTRIBUTES avr_insert_attributes
+ #undef TARGET_SECTION_TYPE_FLAGS
+diff -Naur gcc-3.4.1.orig/gcc/config/darwin.h gcc-3.4.1/gcc/config/darwin.h
+--- gcc-3.4.1.orig/gcc/config/darwin.h	2004-04-06 18:32:59.000000000 +0000
++++ gcc-3.4.1/gcc/config/darwin.h	2004-08-20 16:51:39.124055040 +0000
+@@ -682,6 +682,9 @@
+ #undef	TARGET_ASM_SELECT_RTX_SECTION
+ #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section
+ 
++#undef  TARGET_ASM_FUNCTION_RODATA_SECTION
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
++
+ #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)			\
+     do {								\
+ 	 if (FILE) {							\
+diff -Naur gcc-3.4.1.orig/gcc/config/i386/cygming.h gcc-3.4.1/gcc/config/i386/cygming.h
+--- gcc-3.4.1.orig/gcc/config/i386/cygming.h	2004-06-08 06:30:13.000000000 +0000
++++ gcc-3.4.1/gcc/config/i386/cygming.h	2004-08-20 16:44:53.359740592 +0000
+@@ -255,6 +255,7 @@
+ 
+ extern void i386_pe_unique_section (TREE, int);
+ #define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ 
+ #define SUPPORTS_ONE_ONLY 1
+ 
+diff -Naur gcc-3.4.1.orig/gcc/config/i386/i386-interix.h gcc-3.4.1/gcc/config/i386/i386-interix.h
+--- gcc-3.4.1.orig/gcc/config/i386/i386-interix.h	2004-01-31 06:18:20.000000000 +0000
++++ gcc-3.4.1/gcc/config/i386/i386-interix.h	2004-08-20 16:44:25.168026384 +0000
+@@ -344,6 +344,7 @@
+ 
+ extern void i386_pe_unique_section (tree, int);
+ #define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ 
+ #define SUPPORTS_ONE_ONLY 1
+ #endif /* 0 */
+diff -Naur gcc-3.4.1.orig/gcc/config/ip2k/ip2k.c gcc-3.4.1/gcc/config/ip2k/ip2k.c
+--- gcc-3.4.1.orig/gcc/config/ip2k/ip2k.c	2004-01-31 06:18:25.000000000 +0000
++++ gcc-3.4.1/gcc/config/ip2k/ip2k.c	2004-08-20 16:42:54.505809136 +0000
+@@ -98,6 +98,9 @@
+ #undef TARGET_ASM_UNIQUE_SECTION
+ #define TARGET_ASM_UNIQUE_SECTION unique_section
+ 
++#undef TARGET_ASM_FUNCTION_RODATA_SECTION
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
++
+ #undef TARGET_ATTRIBUTE_TABLE
+ #define TARGET_ATTRIBUTE_TABLE ip2k_attribute_table
+ 
+diff -Naur gcc-3.4.1.orig/gcc/config/mcore/mcore.c gcc-3.4.1/gcc/config/mcore/mcore.c
+--- gcc-3.4.1.orig/gcc/config/mcore/mcore.c	2004-01-31 06:18:29.000000000 +0000
++++ gcc-3.4.1/gcc/config/mcore/mcore.c	2004-08-20 16:42:02.558706296 +0000
+@@ -165,6 +165,8 @@
+ #define TARGET_ATTRIBUTE_TABLE 		mcore_attribute_table
+ #undef  TARGET_ASM_UNIQUE_SECTION
+ #define TARGET_ASM_UNIQUE_SECTION 	mcore_unique_section
++#undef  TARGET_ASM_FUNCTION_RODATA_SECTION
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ #undef  TARGET_ENCODE_SECTION_INFO
+ #define TARGET_ENCODE_SECTION_INFO 	mcore_encode_section_info
+ #undef  TARGET_STRIP_NAME_ENCODING
+diff -Naur gcc-3.4.1.orig/gcc/config/rs6000/xcoff.h gcc-3.4.1/gcc/config/rs6000/xcoff.h
+--- gcc-3.4.1.orig/gcc/config/rs6000/xcoff.h	2004-01-31 06:18:34.000000000 +0000
++++ gcc-3.4.1/gcc/config/rs6000/xcoff.h	2004-08-20 16:43:21.495706048 +0000
+@@ -172,6 +172,7 @@
+ #define TARGET_ASM_SELECT_SECTION  rs6000_xcoff_select_section
+ #define TARGET_ASM_SELECT_RTX_SECTION  rs6000_xcoff_select_rtx_section
+ #define TARGET_ASM_UNIQUE_SECTION  rs6000_xcoff_unique_section
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+ #define TARGET_STRIP_NAME_ENCODING  rs6000_xcoff_strip_name_encoding
+ #define TARGET_SECTION_TYPE_FLAGS  rs6000_xcoff_section_type_flags
+ 
+diff -Naur gcc-3.4.1.orig/gcc/doc/tm.texi gcc-3.4.1/gcc/doc/tm.texi
+--- gcc-3.4.1.orig/gcc/doc/tm.texi	2004-03-15 23:22:50.000000000 +0000
++++ gcc-3.4.1/gcc/doc/tm.texi	2004-08-20 16:48:56.569767048 +0000
+@@ -5933,6 +5933,15 @@
+ Whatever the actual target object format, this is often good enough.
+ @end deftypefn
+ 
++ at deftypefn {Target Hook} void TARGET_ASM_FUNCTION_RODATA_SECTION (tree @var{decl})
++Switches to a readonly data section associated with
++ at samp{DECL_SECTION_NAME (@var{decl})}.
++The default version of this function switches to @code{.gnu.linkonce.r.name}
++section if function's section is @code{.gnu.linkonce.t.name}, to
++ at code{.rodata.name} if function is in @code{.text.name} section
++and otherwise switches to the normal readonly data section.
++ at end deftypefn
++
+ @deftypefn {Target Hook} void TARGET_ASM_SELECT_RTX_SECTION (enum machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align})
+ Switches to the appropriate section for output of constant pool entry
+ @var{x} in @var{mode}.  You can assume that @var{x} is some kind of
+diff -Naur gcc-3.4.1.orig/gcc/final.c gcc-3.4.1/gcc/final.c
+--- gcc-3.4.1.orig/gcc/final.c	2004-01-18 22:39:57.000000000 +0000
++++ gcc-3.4.1/gcc/final.c	2004-08-20 16:41:02.706805168 +0000
+@@ -1881,7 +1881,7 @@
+ 		{
+ 		  int log_align;
+ 
+-		  readonly_data_section ();
++		  targetm.asm_out.function_rodata_section (current_function_decl);
+ 
+ #ifdef ADDR_VEC_ALIGN
+ 		  log_align = ADDR_VEC_ALIGN (NEXT_INSN (insn));
+diff -Naur gcc-3.4.1.orig/gcc/output.h gcc-3.4.1/gcc/output.h
+--- gcc-3.4.1.orig/gcc/output.h	2004-01-18 22:39:57.000000000 +0000
++++ gcc-3.4.1/gcc/output.h	2004-08-20 16:39:56.713837624 +0000
+@@ -500,6 +500,8 @@
+ 					  unsigned HOST_WIDE_INT, int);
+ extern void default_unique_section (tree, int);
+ extern void default_unique_section_1 (tree, int, int);
++extern void default_function_rodata_section (tree);
++extern void default_no_function_rodata_section (tree);
+ extern void default_select_rtx_section (enum machine_mode, rtx,
+ 					unsigned HOST_WIDE_INT);
+ extern void default_elf_select_rtx_section (enum machine_mode, rtx,
+diff -Naur gcc-3.4.1.orig/gcc/target-def.h gcc-3.4.1/gcc/target-def.h
+--- gcc-3.4.1.orig/gcc/target-def.h	2004-03-15 23:22:48.000000000 +0000
++++ gcc-3.4.1/gcc/target-def.h	2004-08-20 16:40:37.680609728 +0000
+@@ -78,6 +78,10 @@
+ #define TARGET_ASM_UNIQUE_SECTION default_unique_section
+ #endif
+ 
++#ifndef TARGET_ASM_FUNCTION_RODATA_SECTION
++#define TARGET_ASM_FUNCTION_RODATA_SECTION default_function_rodata_section
++#endif
++
+ #ifndef TARGET_ASM_SELECT_RTX_SECTION
+ #define TARGET_ASM_SELECT_RTX_SECTION default_select_rtx_section
+ #endif
+@@ -201,6 +205,7 @@
+ 			TARGET_ASM_SELECT_SECTION,		\
+ 			TARGET_ASM_SELECT_RTX_SECTION,		\
+ 			TARGET_ASM_UNIQUE_SECTION,		\
++			TARGET_ASM_FUNCTION_RODATA_SECTION,	\
+ 			TARGET_ASM_CONSTRUCTOR,			\
+ 			TARGET_ASM_DESTRUCTOR,                  \
+                         TARGET_ASM_OUTPUT_MI_THUNK,             \
+diff -Naur gcc-3.4.1.orig/gcc/target.h gcc-3.4.1/gcc/target.h
+--- gcc-3.4.1.orig/gcc/target.h	2004-03-15 23:22:48.000000000 +0000
++++ gcc-3.4.1/gcc/target.h	2004-08-20 16:41:29.460737952 +0000
+@@ -118,6 +118,10 @@
+        for SELECT_SECTION.  */
+     void (* unique_section) (tree, int);
+ 
++    /* Tell assembler to switch to the readonly data section associated
++       with function DECL.  */
++    void (* function_rodata_section) (tree); 
++
+     /* Output a constructor for a symbol with a given priority.  */
+     void (* constructor) (rtx, int);
+ 
+diff -Naur gcc-3.4.1.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc gcc-3.4.1/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc
+--- gcc-3.4.1.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-3.4.1/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc	2004-08-20 16:49:20.412142456 +0000
+@@ -0,0 +1,40 @@
++extern void
++bar (int x);
++
++inline void
++foo (int i)
++{
++  switch (i)
++    {
++    case 3:
++    case 5:
++    case 6:
++    case 9:
++    case 15:
++      bar (1);
++      break;
++    case 2:
++    case 4:
++    case 7:
++    case 10:
++    case 11:
++    case 12:
++      bar (2);
++      break;
++    case 0:
++    case 1:
++    case 8:
++    case 13:
++    case 16:
++      bar (3);
++      break;
++    case 14:
++      bar (4);
++      break;
++    default:
++      bar (5);
++      break;
++    }
++}
++
++void *fooaddr2 = (void *) foo;
+diff -Naur gcc-3.4.1.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4.C gcc-3.4.1/gcc/testsuite/g++.old-deja/g++.other/comdat4.C
+--- gcc-3.4.1.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-3.4.1/gcc/testsuite/g++.old-deja/g++.other/comdat4.C	2004-08-20 16:49:58.827302464 +0000
+@@ -0,0 +1,57 @@
++// PR c++/16276
++// { dg-do link }
++// { dg-additional-sources " comdat4-aux.cc" }
++// { dg-options "-O2" }
++
++extern void
++bar (int x);
++
++inline void
++foo (int i)
++{
++  switch (i)
++    {
++    case 3:
++    case 5:
++    case 6:
++    case 9:
++    case 15:
++      bar (1);
++      break;
++    case 2:
++    case 4:
++    case 7:
++    case 10:
++    case 11:
++    case 12:
++      bar (2);
++      break;
++    case 0:
++    case 1:
++    case 8:
++    case 13:
++    case 16:
++      bar (3);
++      break;
++    case 14:
++      bar (4);
++      break;
++    default:
++      bar (5);
++      break;
++    }
++}
++
++void *fooaddr = (void *) foo;
++
++void
++bar (int x)
++{
++  __asm __volatile ("" : : "r" (x));
++}
++
++int
++main (void)
++{
++  return 0;
++}
+diff -Naur gcc-3.4.1.orig/gcc/varasm.c gcc-3.4.1/gcc/varasm.c
+--- gcc-3.4.1.orig/gcc/varasm.c	2004-04-14 21:14:08.000000000 +0000
++++ gcc-3.4.1/gcc/varasm.c	2004-08-20 16:38:44.486817800 +0000
+@@ -535,6 +535,53 @@
+     text_section ();
+ }
+ 
++/* Switch to read-only data section associated with function DECL.  */
++
++void
++default_function_rodata_section (tree decl)
++{
++  if (decl != NULL_TREE && DECL_SECTION_NAME (decl))
++    {
++      const char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl));
++
++      /* For .gnu.linkonce.t.foo we want to use .gnu.linkonce.r.foo.  */
++      if (DECL_ONE_ONLY (decl) && strncmp (name, ".gnu.linkonce.t.", 16) == 0)
++	{
++	  size_t len = strlen (name) + 1;
++	  char *rname = alloca (len);
++
++	  memcpy (rname, name, len);
++	  rname[14] = 'r';
++	  named_section_flags (rname, SECTION_LINKONCE);
++	  return;
++	}
++      /* For .text.foo we want to use .rodata.foo.  */
++      else if (flag_function_sections && flag_data_sections
++	       && strncmp (name, ".text.", 6) == 0)
++	{
++	  size_t len = strlen (name) + 1;
++	  char *rname = alloca (len + 2);
++
++	  memcpy (rname, ".rodata", 7);
++	  memcpy (rname + 7, name + 5, len - 5);
++	  named_section_flags (rname, 0);
++	  return;
++	}
++    }
++
++  readonly_data_section ();
++}
++
++/* Switch to read-only data section associated with function DECL
++   for targets where that section should be always the single
++   readonly data section.  */
++
++void
++default_no_function_rodata_section (tree decl ATTRIBUTE_UNUSED)
++{
++  readonly_data_section ();
++}
++
+ /* Switch to section for variable DECL.  RELOC is the same as the
+    argument to SELECT_SECTION.  */
+ 




More information about the patches mailing list