[binutils-gdb] Error on ld output file name matching input file name
Alan Modra
amodra@sourceware.org
Tue Dec 7 05:44:38 GMT 2021
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=43908c16539f486d0b1afc43329bf59d1c3cdd20
commit 43908c16539f486d0b1afc43329bf59d1c3cdd20
Author: Alan Modra <amodra@gmail.com>
Date: Tue Dec 7 12:26:55 2021 +1030
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:
---
ld/ldlang.c | 16 ++++++++++++++++
ld/testsuite/ld-misc/just-symbols.exp | 2 +-
2 files changed, 17 insertions(+), 1 deletion(-)
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" "" \
"" \
More information about the Binutils-cvs
mailing list