diff options
Diffstat (limited to 'gold/script.cc')
-rw-r--r-- | gold/script.cc | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/gold/script.cc b/gold/script.cc index 950fa15..b003add 100644 --- a/gold/script.cc +++ b/gold/script.cc @@ -1166,20 +1166,14 @@ extern "C" void script_add_file(void* closurev, const char* name) { Parser_closure* closure = static_cast<Parser_closure*>(closurev); - std::string absname; - if (name[0] == '/') - { - absname = name; - } - else - { - // Prepend `dirname closure->filename()` to make the path absolute. - char *slash = strrchr(closure->filename(), '/'); - absname.assign(closure->filename(), - slash ? slash - closure->filename() + 1 : 0); - absname += name; - } - Input_file_argument file(absname.c_str(), false, closure->position_dependent_options()); + // In addition to checking the normal library search path, we also + // want to check in the script-directory. + const char *slash = strrchr(closure->filename(), '/'); + std::string script_directory(closure->filename(), + slash ? slash - closure->filename() + 1 : 0); + Input_file_argument file(name, false, + slash ? script_directory.c_str() : ".", + closure->position_dependent_options()); closure->inputs()->add_file(file); } |