X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Foptions.cc;h=da30a6da22364fb7fd243457c95b9f69c5e84c0c;hb=7d9e3d985416edccb274f0c704901839234cf4a9;hp=58ac9cf9ac5210fa1a34d5f2535ceb03454d3291;hpb=819d6c3aea9aff8970d898f400a26d494caaf147;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/options.cc b/gold/options.cc index 58ac9cf9ac..da30a6da22 100644 --- a/gold/options.cc +++ b/gold/options.cc @@ -23,6 +23,7 @@ #include "gold.h" #include +#include #include #include #include @@ -220,6 +221,12 @@ parse_dirlist(const char*, const char* arg, Dir_list* retval) retval->push_back(Search_directory(arg, false)); } +void +parse_set(const char*, const char* arg, String_set* retval) +{ + retval->insert(std::string(arg)); +} + void parse_choices(const char* option_name, const char* arg, const char** retval, const char* choices[], int num_choices) @@ -262,9 +269,16 @@ General_options::parse_version(const char* opt, const char*, Command_line*) } void -General_options::parse_Bstatic(const char*, const char*, Command_line*) +General_options::parse_V(const char*, const char*, Command_line*) { - this->set_Bdynamic(false); + gold::print_version(true); + printf(_(" Supported targets:\n")); + std::vector supported_names; + gold::supported_target_names(&supported_names); + for (std::vector::const_iterator p = supported_names.begin(); + p != supported_names.end(); + ++p) + printf(" %s\n", *p); } void @@ -683,6 +697,13 @@ General_options::finalize() this->set_do_demangle(getenv("COLLECT_NO_DEMANGLE") == NULL); } + // -M is equivalent to "-Map -". + if (this->print_map() && !this->user_set_Map()) + { + this->set_Map("-"); + this->set_user_set_Map(); + } + // If --thread_count is specified, it applies to // --thread-count-{initial,middle,final}, though it doesn't override // them. @@ -709,10 +730,33 @@ General_options::finalize() program_name); #endif - // Even if they don't specify it, we add -L /lib and -L /usr/lib. - // FIXME: We should only do this when configured in native mode. - this->add_to_library_path_with_sysroot("/lib"); - this->add_to_library_path_with_sysroot("/usr/lib"); + if (this->user_set_Y()) + { + std::string s = this->Y(); + if (s.compare(0, 2, "P,") == 0) + s.erase(0, 2); + + size_t pos = 0; + size_t next_pos; + do + { + next_pos = s.find(':', pos); + size_t len = (next_pos == std::string::npos + ? next_pos + : next_pos - pos); + if (len != 0) + this->add_to_library_path_with_sysroot(s.substr(pos, len).c_str()); + pos = next_pos + 1; + } + while (next_pos != std::string::npos); + } + else + { + // Even if they don't specify it, we add -L /lib and -L /usr/lib. + // FIXME: We should only do this when configured in native mode. + this->add_to_library_path_with_sysroot("/lib"); + this->add_to_library_path_with_sysroot("/usr/lib"); + } // Normalize library_path() by adding the sysroot to all directories // in the path, as appropriate.