OSDN Git Service

Add -h/-soname option.
authoriant <iant>
Fri, 4 Jan 2008 05:35:24 +0000 (05:35 +0000)
committeriant <iant>
Fri, 4 Jan 2008 05:35:24 +0000 (05:35 +0000)
gold/layout.cc
gold/options.cc
gold/options.h

index eebb26c..75aecfe 100644 (file)
@@ -1713,6 +1713,13 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
       odyn->add_string(elfcpp::DT_NEEDED, (*p)->soname());
     }
 
+  if (parameters->output_is_shared())
+    {
+      const char* soname = this->options_.soname();
+      if (soname != NULL)
+       odyn->add_string(elfcpp::DT_SONAME, soname);
+    }
+
   // FIXME: Support --init and --fini.
   Symbol* sym = symtab->lookup("_init");
   if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
index 20ddc6a..c3f1747 100644 (file)
@@ -399,6 +399,9 @@ options::Command_line_options::options[] =
                 NULL, TWO_DASHES, &General_options::set_export_dynamic),
   GENERAL_NOARG('\0', "eh-frame-hdr", N_("Create exception frame header"),
                 NULL, TWO_DASHES, &General_options::set_create_eh_frame_hdr),
+  GENERAL_ARG('h', "soname", N_("Set shared library name"),
+             N_("-h FILENAME, --soname FILENAME"), ONE_DASH,
+             &General_options::set_soname),
   GENERAL_ARG('I', "dynamic-linker", N_("Set dynamic linker path"),
              N_("-I PROGRAM, --dynamic-linker PROGRAM"), TWO_DASHES,
              &General_options::set_dynamic_linker),
@@ -528,6 +531,7 @@ const int options::Command_line_options::debug_options_size =
 
 General_options::General_options()
   : export_dynamic_(false),
+    soname_(NULL),
     dynamic_linker_(NULL),
     search_path_(),
     optimization_level_(0),
index cae1b1a..86d9bd7 100644 (file)
@@ -113,6 +113,11 @@ class General_options
   export_dynamic() const
   { return this->export_dynamic_; }
 
+  // -h: shared library name.
+  const char*
+  soname() const
+  { return this->soname_; }
+
   // -I: dynamic linker name.
   const char*
   dynamic_linker() const
@@ -311,6 +316,10 @@ class General_options
   { this->export_dynamic_ = true; }
 
   void
+  set_soname(const char* arg)
+  { this->soname_ = arg; }
+
+  void
   set_dynamic_linker(const char* arg)
   { this->dynamic_linker_ = arg; }
 
@@ -501,6 +510,7 @@ class General_options
   add_sysroot();
 
   bool export_dynamic_;
+  const char* soname_;
   const char* dynamic_linker_;
   Dir_list search_path_;
   int optimization_level_;