* options.h (class General_options): Add -init and -fini.
authorIan Lance Taylor <ian@airs.com>
Tue, 13 Oct 2009 21:23:00 +0000 (21:23 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 13 Oct 2009 21:23:00 +0000 (21:23 +0000)
* layout.cc (Layout::finish_dynamic_section): Emit
given init and fini functions.

gold/ChangeLog
gold/layout.cc
gold/options.h

index 6c5338379859290c0b024474fa597e022c356c7f..c39e44f16c93f049bac401e4797e1b82cf3de1f5 100644 (file)
@@ -1,3 +1,9 @@
+2009-10-13  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>
+
+       * options.h (class General_options): Add -init and -fini.
+       * layout.cc (Layout::finish_dynamic_section): Emit
+       given init and fini functions.
+
 2009-10-13  Sriraman Tallam  <tmsriram@google.com>
 
        * gc.h (gc_process_relocs): Check if icf is enabled using new
index 0e26116bcc84279730ce94ee34101d3399b0e945..d198ce24373cd27196fc1e02d2a240a42be00eb1 100644 (file)
@@ -3096,12 +3096,11 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
        odyn->add_string(elfcpp::DT_SONAME, soname);
     }
 
-  // FIXME: Support --init and --fini.
-  Symbol* sym = symtab->lookup("_init");
+  Symbol* sym = symtab->lookup(parameters->options().init());
   if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
     odyn->add_symbol(elfcpp::DT_INIT, sym);
 
-  sym = symtab->lookup("_fini");
+  sym = symtab->lookup(parameters->options().fini());
   if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
     odyn->add_symbol(elfcpp::DT_FINI, sym);
 
index f14582e00b440fa36ef69a09447c3e56742027f3..1a034423a72af36ff810d0893f08e96647de7cb8 100644 (file)
@@ -687,6 +687,9 @@ class General_options
              N_("Treat warnings as errors"),
              N_("Do not treat warnings as errors"));
 
+  DEFINE_string(fini, options::ONE_DASH, '\0', "_fini",
+                N_("Call SYMBOL at unload-time"), N_("SYMBOL"));
+
   DEFINE_string(soname, options::ONE_DASH, 'h', NULL,
                 N_("Set shared library name"), N_("FILENAME"));
 
@@ -714,6 +717,9 @@ class General_options
   DEFINE_special(incremental_unknown, options::TWO_DASHES, '\0',
                  N_("Use timestamps to check files (default)"), NULL);
 
+  DEFINE_string(init, options::ONE_DASH, '\0', "_init",
+                N_("Call SYMBOL at load-time"), N_("SYMBOL"));
+
   DEFINE_special(just_symbols, options::TWO_DASHES, '\0',
                  N_("Read only symbol values from FILE"), N_("FILE"));