Index: dirsearch.cc =================================================================== RCS file: /cvs/src/src/gold/dirsearch.cc,v retrieving revision 1.12 diff -u -r1.12 dirsearch.cc --- dirsearch.cc 11 Feb 2010 07:42:17 -0000 1.12 +++ dirsearch.cc 25 May 2011 05:10:20 -0000 @@ -241,8 +241,9 @@ // File_read::open. std::string -Dirsearch::find(const std::string& n1, const std::string& n2, - bool* is_in_sysroot, int* pindex) const +Dirsearch::find(const std::list &names, + bool* is_in_sysroot, int* pindex, + std::string *found_name) const { gold_assert(!this->token_.is_blocked()); gold_assert(*pindex >= 0); @@ -254,28 +255,20 @@ const Search_directory* p = &this->directories_->at(i); Dir_cache* pdc = caches->lookup(p->name().c_str()); gold_assert(pdc != NULL); - if (pdc->find(n1)) - { - *is_in_sysroot = p->is_in_sysroot(); - *pindex = i; - return p->name() + '/' + n1; - } - else - gold_debug(DEBUG_FILES, "Attempt to open %s/%s failed", - p->name().c_str(), n1.c_str()); - - if (!n2.empty()) + for (std::list::const_iterator n = names.begin(); + n != names.end(); ++n) { - if (pdc->find(n2)) + if (pdc->find(*n)) { *is_in_sysroot = p->is_in_sysroot(); - *pindex = i; - return p->name() + '/' + n2; + *pindex = i; + *found_name = *n; + return p->name() + '/' + *n; } else gold_debug(DEBUG_FILES, "Attempt to open %s/%s failed", - p->name().c_str(), n2.c_str()); - } + p->name().c_str(), (*n).c_str()); + } } *pindex = -2; Index: dirsearch.h =================================================================== RCS file: /cvs/src/src/gold/dirsearch.h,v retrieving revision 1.8 diff -u -r1.8 dirsearch.h --- dirsearch.h 25 Aug 2010 08:36:54 -0000 1.8 +++ dirsearch.h 25 May 2011 05:10:20 -0000 @@ -59,8 +59,8 @@ // and that value plus one may be used to find the next file with // the same name(s). std::string - find(const std::string&, const std::string& n2, bool* is_in_sysroot, - int* pindex) const; + find(const std::list &names, bool* is_in_sysroot, + int* pindex, std::string *found_name) const; // Return the blocker token which controls access. Task_token* Index: fileread.cc =================================================================== RCS file: /cvs/src/src/gold/fileread.cc,v retrieving revision 1.73 diff -u -r1.73 fileread.cc --- fileread.cc 12 Apr 2011 18:06:16 -0000 1.73 +++ fileread.cc 25 May 2011 05:10:20 -0000 @@ -986,34 +986,31 @@ else if (input_argument->is_lib() || input_argument->is_searched_file()) { - std::string n1, n2; + std::list names; if (input_argument->is_lib()) { - n1 = "lib"; - n1 += input_argument->name(); + std::string prefix = "lib"; + prefix += input_argument->name(); if (parameters->options().is_static() || !input_argument->options().Bdynamic()) - n1 += ".a"; + names.push_back(prefix + ".a"); else { - n2 = n1 + ".a"; - n1 += ".so"; + names.push_back(prefix + ".so"); + names.push_back(prefix + ".a"); } } else - n1 = input_argument->name(); + names.push_back(input_argument->name()); - if (Input_file::try_extra_search_path(pindex, input_argument, n1, - found_name, namep)) - return true; - - if (!n2.empty() && Input_file::try_extra_search_path(pindex, - input_argument, n2, - found_name, namep)) - return true; + for (std::list::iterator n = names.begin(); + n != names.end(); ++n) + if (Input_file::try_extra_search_path(pindex, input_argument, *n, + found_name, namep)) + return true; // It is not in the extra_search_path. - name = dirpath.find(n1, n2, is_in_sysroot, pindex); + name = dirpath.find(names, is_in_sysroot, pindex, found_name); if (name.empty()) { gold_error(_("cannot find %s%s"), @@ -1021,10 +1018,6 @@ input_argument->name()); return false; } - if (n2.empty() || name[name.length() - 1] == 'o') - *found_name = n1; - else - *found_name = n2; *namep = name; return true; } @@ -1041,15 +1034,14 @@ int index = *pindex; if (index > 0) --index; - name = dirpath.find(input_argument->name(), "", - is_in_sysroot, &index); + name = dirpath.find(std::list(1,input_argument->name()), + is_in_sysroot, &index, found_name); if (name.empty()) { gold_error(_("cannot find %s"), input_argument->name()); return false; } - *found_name = input_argument->name(); *namep = name; *pindex = index + 1; return true;