re PR go/47378 (ld warning linking with libgo.so: relocation bound to a symbol with...
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 8 Feb 2011 20:55:02 +0000 (20:55 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 8 Feb 2011 20:55:02 +0000 (20:55 +0000)
PR go/47378
Don't use protected visibility for type descriptors.

From-SVN: r169946

gcc/go/gofrontend/gogo-tree.cc

index ccd17c64edb1ea7ea3950c0fb9f34dc5fb4906a8..ec5f65ac24ea89eb1756aef12425d2f76f5e0c0d 100644 (file)
@@ -2633,26 +2633,14 @@ Gogo::build_type_descriptor_decl(const Type* type, Expression* initializer,
 
   DECL_INITIAL(decl) = constructor;
 
-  if (type_descriptor_location == TYPE_DESCRIPTOR_COMMON)
+  if (type_descriptor_location == TYPE_DESCRIPTOR_DEFINED)
+    TREE_PUBLIC(decl) = 1;
+  else
     {
+      gcc_assert(type_descriptor_location == TYPE_DESCRIPTOR_COMMON);
       make_decl_one_only(decl, DECL_ASSEMBLER_NAME(decl));
       resolve_unique_section(decl, 1, 0);
     }
-  else
-    {
-#ifdef OBJECT_FORMAT_ELF
-      // Give the decl protected visibility.  This avoids out-of-range
-      // references with shared libraries with the x86_64 small model
-      // when the type descriptor gets a COPY reloc into the main
-      // executable.  There is no need to have unique pointers to type
-      // descriptors, as the runtime code compares reflection strings
-      // if necessary.
-      DECL_VISIBILITY(decl) = VISIBILITY_PROTECTED;
-      DECL_VISIBILITY_SPECIFIED(decl) = 1;
-#endif
-
-      TREE_PUBLIC(decl) = 1;
-    }
 
   rest_of_decl_compilation(decl, 1, 0);
 }
@@ -2764,17 +2752,7 @@ Gogo::interface_method_table_for_type(const Interface_type* interface,
   // definition of the table.  Otherwise it is a comdat table which
   // may be defined in multiple packages.
   if (has_hidden_methods)
-    {
-#ifdef OBJECT_FORMAT_ELF
-      // Give the decl protected visibility.  This avoids out-of-range
-      // references with shared libraries with the x86_64 small model
-      // when the table gets a COPY reloc into the main executable.
-      DECL_VISIBILITY(decl) = VISIBILITY_PROTECTED;
-      DECL_VISIBILITY_SPECIFIED(decl) = 1;
-#endif
-
-      TREE_PUBLIC(decl) = 1;
-    }
+    TREE_PUBLIC(decl) = 1;
   else
     {
       make_decl_one_only(decl, DECL_ASSEMBLER_NAME(decl));