aboutsummaryrefslogtreecommitdiff
path: root/ld/ldfile.c
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2020-04-22 16:20:02 +0100
committerNick Clifton <nickc@redhat.com>2020-04-22 16:20:02 +0100
commit161719466ac9ea5f186514312f6bce842181804f (patch)
tree8f5243eadc4f7266ca8362b1da384e9a9aa057c6 /ld/ldfile.c
parent31c89d6038f2658f5e06a762aa9e20e78e74651f (diff)
downloadgdb-161719466ac9ea5f186514312f6bce842181804f.zip
gdb-161719466ac9ea5f186514312f6bce842181804f.tar.gz
gdb-161719466ac9ea5f186514312f6bce842181804f.tar.bz2
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.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/ld/ldfile.c b/ld/ldfile.c
index d98429d..53112c8 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");