diff mbox

Go patch committed: Put nointerface methods in unique sections

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

Commit Message

Ian Lance Taylor Jan. 28, 2014, 9:44 p.m. UTC
This patch to the Go frontend puts nointerface methods in unique
sections.  A method marked nointerface may not be needed in the final
link, and putting it in a unique section makes it possible for the
linker to discard it if possible.  Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian
diff mbox

Patch

diff -r e6c55d1cd62b go/gogo.cc
--- a/go/gogo.cc	Fri Jan 24 14:47:58 2014 -0800
+++ b/go/gogo.cc	Tue Jan 28 13:42:48 2014 -0800
@@ -4094,12 +4094,19 @@ 
       // stack splitting for the thunk.
       bool disable_split_stack = this->is_recover_thunk_;
 
+      // This should go into a unique section if that has been
+      // requested elsewhere, or if this is a nointerface function.
+      // We want to put a nointerface function into a unique section
+      // because there is a good chance that the linker garbage
+      // collection can discard it.
+      bool in_unique_section = this->in_unique_section_ || this->nointerface_;
+
       Btype* functype = this->type_->get_backend_fntype(gogo);
       this->fndecl_ =
           gogo->backend()->function(functype, no->get_id(gogo), asm_name,
                                     is_visible, false, is_inlinable,
-                                    disable_split_stack,
-                                    this->in_unique_section_, this->location());
+                                    disable_split_stack, in_unique_section,
+				    this->location());
     }
   return this->fndecl_;
 }