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.
This commit is contained in:
Hans-Peter Nilsson 2014-10-15 03:03:59 +02:00
parent ef1ab8e216
commit bfa2343443
2 changed files with 23 additions and 0 deletions

View file

@ -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

View file

@ -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);
}