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:
parent
ef1ab8e216
commit
bfa2343443
@ -1,5 +1,8 @@
|
|||||||
2014-10-15 Hans-Peter Nilsson <hp@axis.com>
|
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
|
* ld.texinfo (Options): When mentioning "=" and sysroot, mention
|
||||||
that --sysroot controls it, not only through the configuration.
|
that --sysroot controls it, not only through the configuration.
|
||||||
(input files in linker scripts): When mentioning
|
(input files in linker scripts): When mentioning
|
||||||
|
20
ld/ldlang.c
20
ld/ldlang.c
@ -1118,6 +1118,26 @@ lang_add_input_file (const char *name,
|
|||||||
lang_input_file_enum_type file_type,
|
lang_input_file_enum_type file_type,
|
||||||
const char *target)
|
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);
|
return new_afile (name, file_type, target, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user