compiler: Put nointerface methods in unique sections.
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 28 Jan 2014 21:44:53 +0000 (21:44 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 28 Jan 2014 21:44:53 +0000 (21:44 +0000)
From-SVN: r207214

gcc/go/gofrontend/gogo.cc

index 6ecc6cd0f0f48a706189bcc4fc1b0e1279d53557..9739f289f4d243138528c81f596a9f52a0087dc9 100644 (file)
@@ -4094,12 +4094,19 @@ Function::get_or_make_decl(Gogo* gogo, Named_object* no)
       // 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_;
 }