diff options
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 5960e5c..c4da07f 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -1118,6 +1118,26 @@ lang_add_input_file (const char *name, lang_input_file_enum_type file_type, const char *target) { + if (name != NULL && *name == '=') + { + lang_input_statement_type *ret; + char *sysrooted_name + = concat (ld_sysroot, name + 1, (const char *) NULL); + + /* We've now forcibly prepended the sysroot, making the input + file independent of the context. Therefore, temporarily + force a non-sysrooted context for this statement, so it won't + get the sysroot prepended again when opened. (N.B. if it's a + script, any child nodes with input files starting with "/" + will be handled as "sysrooted" as they'll be found to be + within the sysroot subdirectory.) */ + unsigned int outer_sysrooted = input_flags.sysrooted; + input_flags.sysrooted = 0; + ret = new_afile (sysrooted_name, file_type, target, TRUE); + input_flags.sysrooted = outer_sysrooted; + return ret; + } + return new_afile (name, file_type, target, TRUE); } |