diff options
author | Hans-Peter Nilsson <hp@bitrange.com> | 2014-10-15 03:03:59 +0200 |
---|---|---|
committer | Hans-Peter Nilsson <hp@bitrange.com> | 2014-10-15 03:04:21 +0200 |
commit | bfa234344327776fb3b16e8bfd9c8de6ec73ae31 (patch) | |
tree | a0b2c562aca0683ae56024a46aa2e908c82441c9 | |
parent | ef1ab8e216a01d94a4cd23dc94363a78e2971b84 (diff) | |
download | gdb-bfa234344327776fb3b16e8bfd9c8de6ec73ae31.zip gdb-bfa234344327776fb3b16e8bfd9c8de6ec73ae31.tar.gz gdb-bfa234344327776fb3b16e8bfd9c8de6ec73ae31.tar.bz2 |
If "=" is the first character in a ldscript input file, force a sysroot prefix.
* ldlang.c (lang_add_input_file): If the first character in the
filename is '=', prepend the sysroot and force the context of that
input file to non-sysroot.
The "input_flags.sysrooted = 0" thing described in the comment is
covered by the testsuite part ("root-anchored =-prefixed script
inside"), but only observable for --with-sysroot configurations.
-rw-r--r-- | ld/ChangeLog | 3 | ||||
-rw-r--r-- | ld/ldlang.c | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index dd7c75e..49a0a66 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,8 @@ 2014-10-15 Hans-Peter Nilsson <hp@axis.com> + * ldlang.c (lang_add_input_file): If the first character in the + filename is '=', prepend the sysroot and force the context of that + input file to non-sysroot. * ld.texinfo (Options): When mentioning "=" and sysroot, mention that --sysroot controls it, not only through the configuration. (input files in linker scripts): When mentioning 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); } |