diff mbox

Go patch committed: Always put immutable structs in unique section

Message ID mcr38qsaqz4.fsf@iant-glaptop.roam.corp.google.com
State New
Headers show

Commit Message

Ian Lance Taylor Aug. 2, 2013, 6:26 p.m. UTC
The Go backend interfaces uses immutable structs for things like type
descriptors, map descriptors, and function descriptors.  These objects
must always be created for exported names in case they are referenced by
a different package, but this often does not happen.  This patch moves
them to unique sections so that linker GC can discard them a link time.
Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline and 4.8 branch.

Ian


2013-08-02  Ian Lance Taylor  <iant@google.com>

	* go-gcc.cc (immutable_struct_set_init): Always call
	resolve_unique_section.
diff mbox

Patch

Index: go-gcc.cc
===================================================================
--- go-gcc.cc	(revision 201222)
+++ go-gcc.cc	(working copy)
@@ -1521,10 +1521,11 @@  Gcc_backend::immutable_struct_set_init(B
 	TREE_PUBLIC(decl) = 1;
     }
   else
-    {
-      make_decl_one_only(decl, DECL_ASSEMBLER_NAME(decl));
-      resolve_unique_section(decl, 1, 0);
-    }
+    make_decl_one_only(decl, DECL_ASSEMBLER_NAME(decl));
+
+  // These variables are often unneeded in the final program, so put
+  // them in their own section so that linker GC can discard them.
+  resolve_unique_section(decl, 1, 1);
 
   rest_of_decl_compilation(decl, 1, 0);
 }