From: Alan Modra Date: Tue, 7 Dec 2021 01:56:55 +0000 (+1030) Subject: Error on ld output file name matching input file name X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=43908c16539f486d0b1afc43329bf59d1c3cdd20;p=binutils-gdb.git 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. --- diff --git a/ld/ldlang.c b/ld/ldlang.c index acd90fa8f42..64a8f602093 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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 diff --git a/ld/testsuite/ld-misc/just-symbols.exp b/ld/testsuite/ld-misc/just-symbols.exp index 510291473ca..6cfbd34eda9 100644 --- a/ld/testsuite/ld-misc/just-symbols.exp +++ b/ld/testsuite/ld-misc/just-symbols.exp @@ -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" "" \ "" \