Add -h/-soname option.

This commit is contained in:
Ian Lance Taylor 2008-01-04 05:35:24 +00:00
parent 1bedcac52a
commit fced7afdce
3 changed files with 21 additions and 0 deletions

View 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())

View 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),

View 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
@ -310,6 +315,10 @@ class General_options
set_export_dynamic()
{ 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_;