aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2009-10-13 21:23:00 +0000
committerIan Lance Taylor <ian@airs.com>2009-10-13 21:23:00 +0000
commitc658516291815dcfa19290644b366d8261c3fab9 (patch)
treea66b4d6debe1fc45789995366d26434bd07bf1c3
parent032ce4e9e37bd92e928352fca78b1eee3bb41fdd (diff)
downloadgdb-c658516291815dcfa19290644b366d8261c3fab9.zip
gdb-c658516291815dcfa19290644b366d8261c3fab9.tar.gz
gdb-c658516291815dcfa19290644b366d8261c3fab9.tar.bz2
* options.h (class General_options): Add -init and -fini.
* layout.cc (Layout::finish_dynamic_section): Emit given init and fini functions.
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/layout.cc5
-rw-r--r--gold/options.h6
3 files changed, 14 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 6c53383..c39e44f 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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
diff --git a/gold/layout.cc b/gold/layout.cc
index 0e26116..d198ce2 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -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);
diff --git a/gold/options.h b/gold/options.h
index f14582e..1a03442 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -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"));