diff options
author | Fangrui Song <maskray@google.com> | 2020-04-22 16:20:02 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2020-04-22 16:20:02 +0100 |
commit | 161719466ac9ea5f186514312f6bce842181804f (patch) | |
tree | 8f5243eadc4f7266ca8362b1da384e9a9aa057c6 /ld/ldfile.c | |
parent | 31c89d6038f2658f5e06a762aa9e20e78e74651f (diff) | |
download | binutils-gdb-161719466ac9ea5f186514312f6bce842181804f.tar.gz |
For relative paths in INPUT() and GROUP(), search the directory of the current linker script before searching other paths.
PR ld/25806
* ldlang.h (struct lang_input_statement_struct): Add extra_search_path.
* ldlang.c (current_input_file): New.
(ldirname): New.
(new_afile): Add from_filename parameter. Set extra_search_path.
(lang_add_input_file): Pass current_input_file to new_afile.
(load_symbols): Set current_input_file.
Diffstat (limited to 'ld/ldfile.c')
-rw-r--r-- | ld/ldfile.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/ld/ldfile.c b/ld/ldfile.c index d98429d7b88..53112c86947 100644 --- a/ld/ldfile.c +++ b/ld/ldfile.c @@ -416,7 +416,24 @@ ldfile_open_file (lang_input_statement_type *entry) search_arch_type *arch; bfd_boolean found = FALSE; - /* Try to open <filename><suffix> or lib<filename><suffix>.a */ + /* If extra_search_path is set, entry->filename is a relative path. + Search the directory of the current linker script before searching + other paths. */ + if (entry->extra_search_path) + { + char *path = concat (entry->extra_search_path, slash, entry->filename, + (const char *)0); + if (ldfile_try_open_bfd (path, entry)) + { + entry->filename = path; + entry->flags.search_dirs = FALSE; + return; + } + + free (path); + } + + /* Try to open <filename><suffix> or lib<filename><suffix>.a. */ for (arch = search_arch_head; arch != NULL; arch = arch->next) { found = ldfile_open_file_search (arch->name, entry, "lib", ".a"); |