[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