[lld] 0bd918c - Revert "[ELF] Add --dependency-file option"

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 31 01:13:38 PDT 2020


Author: Petr Hosek
Date: 2020-07-31T01:12:59-07:00
New Revision: 0bd918c828feb599b278c1876a33caa9c295be6a

URL: https://github.com/llvm/llvm-project/commit/0bd918c828feb599b278c1876a33caa9c295be6a
DIFF: https://github.com/llvm/llvm-project/commit/0bd918c828feb599b278c1876a33caa9c295be6a.diff

LOG: Revert "[ELF] Add --dependency-file option"

This reverts commit b4c7657ba602acde1c2ea5391c973949b9c3ce09 which
seems to be breaking certain bots with assertion error.

Added: 
    

Modified: 
    lld/ELF/Config.h
    lld/ELF/Driver.cpp
    lld/ELF/InputFiles.cpp
    lld/ELF/Options.td

Removed: 
    lld/test/ELF/dependency-file.s


################################################################################
diff  --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index 8eebecf3eb06..e74a4a0c5b22 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -11,7 +11,6 @@
 
 #include "lld/Common/ErrorHandler.h"
 #include "llvm/ADT/MapVector.h"
-#include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringSet.h"
 #include "llvm/BinaryFormat/ELF.h"
@@ -91,13 +90,11 @@ struct Configuration {
   uint8_t osabi = 0;
   uint32_t andFeatures = 0;
   llvm::CachePruningPolicy thinLTOCachePolicy;
-  llvm::SetVector<StringRef> dependencyFiles; // for --dependency-file
   llvm::StringMap<uint64_t> sectionStartMap;
   llvm::StringRef bfdname;
   llvm::StringRef chroot;
-  llvm::StringRef dependencyFile;
-  llvm::StringRef dwoDir;
   llvm::StringRef dynamicLinker;
+  llvm::StringRef dwoDir;
   llvm::StringRef entry;
   llvm::StringRef emulation;
   llvm::StringRef fini;

diff  --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 75aa89ff3c86..64a41ba77ba2 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -918,7 +918,6 @@ static void readConfigs(opt::InputArgList &args) {
   config->optimizeBBJumps =
       args.hasFlag(OPT_optimize_bb_jumps, OPT_no_optimize_bb_jumps, false);
   config->demangle = args.hasFlag(OPT_demangle, OPT_no_demangle, true);
-  config->dependencyFile = args.getLastArgValue(OPT_dependency_file);
   config->dependentLibraries = args.hasFlag(OPT_dependent_libraries, OPT_no_dependent_libraries, true);
   config->disableVerify = args.hasArg(OPT_disable_verify);
   config->discard = getDiscard(args);
@@ -1565,75 +1564,6 @@ static void handleLibcall(StringRef name) {
     sym->fetch();
 }
 
-// Handle --dependency-file=<path>. If that option is given, lld creates a
-// file at a given path with the following contents:
-//
-//   <output-file>: <input-file> ...
-//
-//   <input-file>:
-//
-// where <output-file> is a pathname of an output file and <input-file>
-// ... is a list of pathnames of all input files. `make` command can read a
-// file in the above format and interpret it as a dependency info. We write
-// phony targets for every <input-file> to avoid an error when that file is
-// removed.
-//
-// This option is useful if you want to make your final executable to depend
-// on all input files including system libraries. Here is why.
-//
-// When you write a Makefile, you usually write it so that the final
-// executable depends on all user-generated object files. Normally, you
-// don't make your executable to depend on system libraries (such as libc)
-// because you don't know the exact paths of libraries, even though system
-// libraries that are linked to your executable statically are technically a
-// part of your program. By using --dependency-file option, you can make
-// lld to dump dependency info so that you can maintain exact dependencies
-// easily.
-static void writeDependencyFile() {
-  std::error_code ec;
-  raw_fd_ostream os(config->dependencyFile, ec, sys::fs::F_None);
-  if (ec) {
-    error("cannot open " + config->dependencyFile + ": " + ec.message());
-    return;
-  }
-
-  // We use the same escape rules as Clang/GCC which are accepted by Make/Ninja:
-  // * A space is escaped by a backslash which itself must be escaped.
-  // * A hash sign is escaped by a single backslash.
-  // * $ is escapes as $$.
-  auto printFilename = [](raw_fd_ostream &os, StringRef filename) {
-    llvm::SmallString<256> nativePath;
-    llvm::sys::path::native(filename.str(), nativePath);
-    llvm::sys::path::remove_dots(nativePath, /*remove_dot_dot=*/true);
-    for (unsigned i = 0, e = nativePath.size(); i != e; ++i) {
-      if (nativePath[i] == '#') {
-        os << '\\';
-      } else if (nativePath[i] == ' ') {
-        os << '\\';
-        unsigned j = i;
-        while (j > 0 && nativePath[--j] == '\\')
-          os << '\\';
-      } else if (nativePath[i] == '$') {
-        os << '$';
-      }
-      os << nativePath[i];
-    }
-  };
-
-  os << config->outputFile << ":";
-  for (StringRef path : config->dependencyFiles) {
-    os << " \\\n ";
-    printFilename(os, path);
-  }
-  os << "\n";
-
-  for (StringRef path : config->dependencyFiles) {
-    os << "\n";
-    printFilename(os, path);
-    os << ":\n";
-  }
-}
-
 // Replaces common symbols with defined symbols reside in .bss sections.
 // This function is called after all symbol names are resolved. As a
 // result, the passes after the symbol resolution won't see any
@@ -2134,11 +2064,6 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &args) {
     return false;
   });
 
-  // Since we now have a complete set of input files, we can create
-  // a .d file to record build dependencies.
-  if (!config->dependencyFile.empty())
-    writeDependencyFile();
-
   // Now that the number of partitions is fixed, save a pointer to the main
   // partition.
   mainPart = &partitions[0];

diff  --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 79cc3c00cb2b..c142c00517cc 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -110,7 +110,6 @@ Optional<MemoryBufferRef> elf::readFile(StringRef path) {
     path = saver.save(config->chroot + path);
 
   log(path);
-  config->dependencyFiles.insert(path);
 
   auto mbOrErr = MemoryBuffer::getFile(path, -1, false);
   if (auto ec = mbOrErr.getError()) {

diff  --git a/lld/ELF/Options.td b/lld/ELF/Options.td
index 3a8c9e83b08e..c3c1309aca1a 100644
--- a/lld/ELF/Options.td
+++ b/lld/ELF/Options.td
@@ -132,9 +132,6 @@ defm demangle: B<"demangle",
     "Demangle symbol names (default)",
     "Do not demangle symbol names">;
 
-defm dependency_file: EEq<"dependency-file", "Write a dependency file">,
-  MetaVarName<"<path>">;
-
 def disable_new_dtags: F<"disable-new-dtags">,
   HelpText<"Disable new dynamic tags">;
 

diff  --git a/lld/test/ELF/dependency-file.s b/lld/test/ELF/dependency-file.s
deleted file mode 100644
index e7dbf9c7695f..000000000000
--- a/lld/test/ELF/dependency-file.s
+++ /dev/null
@@ -1,21 +0,0 @@
-# REQUIRES: x86
-# RUN: mkdir -p %t
-# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t/foo.o
-# RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o "%t/bar baz.o"
-# RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o "%t/#quux$.o"
-# RUN: ld.lld -o %t/foo.exe %t/foo.o %t/"bar baz.o" "%t/#quux$.o" --dependency-file=%t/foo.d
-# RUN: FileCheck --match-full-lines -DFILE=%t %s < %t/foo.d
-
-# CHECK:      [[FILE]]{{/|(\\)+}}foo.exe: \
-# CHECK-NEXT:   [[FILE]]{{/|(\\)+}}foo.o \
-# CHECK-NEXT:   [[FILE]]{{/|(\\)+}}bar\ baz.o \
-# CHECK-NEXT:   [[FILE]]{{/|(\\)+}}\#quux$$.o
-# CHECK-EMPTY:
-# CHECK-NEXT: [[FILE]]{{/|(\\)+}}foo.o:
-# CHECK-EMPTY:
-# CHECK-NEXT: [[FILE]]{{/|(\\)+}}bar\ baz.o:
-# CHECK-EMPTY:
-# CHECK-NEXT: [[FILE]]{{/|(\\)+}}\#quux$$.o:
-
-.global _start
-_start:


        


More information about the llvm-commits mailing list