Error on ld output file name matching input file name

It's not foolproof, for example we don't catch output to a linker
script, to a library specified with -l, or to an element of a thin
archive.

	* ldlang.c (open_output): Exit with error on output file matching
	an input file.
	* testsuite/ld-misc/just-symbols.exp: Adjust ld -r test to suit.
This commit is contained in:
Alan Modra 2021-12-07 12:26:55 +10:30
parent 21ce5fa063
commit 43908c1653
2 changed files with 17 additions and 1 deletions

View File

@ -3392,6 +3392,22 @@ lang_get_output_target (void)
static void
open_output (const char *name)
{
lang_input_statement_type *f;
char *out = lrealpath (name);
for (f = (void *) input_file_chain.head;
f != NULL;
f = f->next_real_file)
if (f->flags.real)
{
char *in = lrealpath (f->filename);
if (filename_cmp (in, out) == 0)
einfo (_("%F%P: input file '%s' is the same as output file\n"),
f->filename);
free (in);
}
free (out);
output_target = lang_get_output_target ();
/* Has the user requested a particular endianness on the command

View File

@ -44,7 +44,7 @@ run_ld_link_tests [list \
"" \
{just-symbols-0.s} \
{} \
"just-symbols-0.o"] \
"just-symbols-r"] \
[list "Executable for --just-symbols test" \
"$LDFLAGS -e 0 -T just-symbols.ld" "" \
"" \