[llvm-branch-commits] [lld] 7f72145 - Revert "[lld][COFF] Add /linkreprofullpathrsp flag (#165449)"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Jan 7 10:47:13 PST 2026


Author: Jan Svoboda
Date: 2026-01-07T10:47:09-08:00
New Revision: 7f72145d80765961f94686a698472db9ba3aae28

URL: https://github.com/llvm/llvm-project/commit/7f72145d80765961f94686a698472db9ba3aae28
DIFF: https://github.com/llvm/llvm-project/commit/7f72145d80765961f94686a698472db9ba3aae28.diff

LOG: Revert "[lld][COFF] Add /linkreprofullpathrsp flag (#165449)"

This reverts commit 28d2772a8d1a907f2f9dc135224e1fa31ccad243.

Added: 
    

Modified: 
    lld/COFF/Driver.cpp
    lld/COFF/Driver.h
    lld/COFF/Options.td
    lld/docs/ReleaseNotes.rst

Removed: 
    lld/test/COFF/linkreprofullpathrsp.test


################################################################################
diff  --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index a5ce5829eadab..121cb32c5f095 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -340,26 +340,7 @@ void LinkerDriver::addBuffer(std::unique_ptr<MemoryBuffer> mb,
   }
 }
 
-void LinkerDriver::handleReproFile(StringRef path, InputOpt inputOpt) {
-  if (!reproFile)
-    return;
-
-  *reproFile << '"';
-  if (inputOpt == InputOpt::DefaultLib)
-    *reproFile << "/defaultlib:";
-  else if (inputOpt == InputOpt::WholeArchive)
-    *reproFile << "/wholearchive:";
-
-  SmallString<128> absPath = path;
-  std::error_code ec = sys::fs::make_absolute(absPath);
-  if (ec)
-    Err(ctx) << "cannot find absolute path for reproFile for " << absPath
-             << ": " << ec.message();
-  sys::path::remove_dots(absPath, true);
-  *reproFile << absPath << "\"\n";
-}
-
-void LinkerDriver::enqueuePath(StringRef path, bool lazy, InputOpt inputOpt) {
+void LinkerDriver::enqueuePath(StringRef path, bool wholeArchive, bool lazy) {
   auto future = std::make_shared<std::future<MBErrPair>>(
       createFutureForFile(std::string(path)));
   std::string pathStr = std::string(path);
@@ -397,11 +378,8 @@ void LinkerDriver::enqueuePath(StringRef path, bool lazy, InputOpt inputOpt) {
         Err(ctx) << msg;
       else
         Err(ctx) << msg << "; did you mean '" << nearest << "'";
-    } else {
-      handleReproFile(pathStr, inputOpt);
-      ctx.driver.addBuffer(std::move(mb), inputOpt == InputOpt::WholeArchive,
-                           lazy);
-    }
+    } else
+      ctx.driver.addBuffer(std::move(mb), wholeArchive, lazy);
   });
 }
 
@@ -450,9 +428,10 @@ void LinkerDriver::enqueueArchiveMember(const Archive::Child &c,
                                         StringRef parentName) {
 
   auto reportBufferError = [=](Error &&e) {
-    StringRef childName = CHECK(
-        c.getName(), "could not get child name for archive " + parentName +
-                         " while loading symbol " + toCOFFString(ctx, sym));
+    StringRef childName =
+      CHECK(c.getName(),
+            "could not get child name for archive " + parentName +
+            " while loading symbol " + toCOFFString(ctx, sym));
     Fatal(ctx) << "could not get the buffer for the member defining symbol "
                << &sym << ": " << parentName << "(" << childName
                << "): " << std::move(e);
@@ -558,7 +537,7 @@ void LinkerDriver::parseDirectives(InputFile *file) {
       break;
     case OPT_defaultlib:
       if (std::optional<StringRef> path = findLibIfNew(arg->getValue()))
-        enqueuePath(*path, false, InputOpt::DefaultLib);
+        enqueuePath(*path, false, false);
       break;
     case OPT_entry:
       if (!arg->getValue()[0])
@@ -1659,15 +1638,6 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
       }
     }
   }
-  // Handle /linkreprofullpathrsp
-  if (auto *arg = args.getLastArg(OPT_linkreprofullpathrsp)) {
-    std::error_code ec;
-    reproFile = std::make_unique<raw_fd_ostream>(arg->getValue(), ec);
-    if (ec) {
-      Err(ctx) << "cannot open " << arg->getValue() << ": " << ec.message();
-      reproFile.reset();
-    }
-  }
 
   if (!args.hasArg(OPT_INPUT, OPT_wholearchive_file)) {
     if (args.hasArg(OPT_deffile))
@@ -2310,13 +2280,11 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
         break;
       case OPT_wholearchive_file:
         if (std::optional<StringRef> path = findFileIfNew(arg->getValue()))
-          enqueuePath(*path, inLib, InputOpt::WholeArchive);
+          enqueuePath(*path, true, inLib);
         break;
       case OPT_INPUT:
         if (std::optional<StringRef> path = findFileIfNew(arg->getValue()))
-          enqueuePath(*path, inLib,
-                      isWholeArchive(*path) ? InputOpt::WholeArchive
-                                            : InputOpt::None);
+          enqueuePath(*path, isWholeArchive(*path), inLib);
         break;
       default:
         // Ignore other options.
@@ -2356,7 +2324,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   // addWinSysRootLibSearchPaths(), which is why they are in a separate loop.
   for (auto *arg : args.filtered(OPT_defaultlib))
     if (std::optional<StringRef> path = findLibIfNew(arg->getValue()))
-      enqueuePath(*path, false, InputOpt::DefaultLib);
+      enqueuePath(*path, false, false);
   run();
   if (errorCount())
     return;
@@ -2922,9 +2890,6 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   if (config->showTiming)
     ctx.rootTimer.print();
 
-  // Clean up /linkreprofullpathrsp file
-  reproFile.reset();
-
   if (config->timeTraceEnabled) {
     // Manually stop the topmost "COFF link" scope, since we're shutting down.
     timeTraceProfilerEnd();

diff  --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h
index e0c447cfc7f80..14710d5853bcf 100644
--- a/lld/COFF/Driver.h
+++ b/lld/COFF/Driver.h
@@ -88,13 +88,11 @@ class LinkerDriver {
   void enqueueArchiveMember(const Archive::Child &c, const Archive::Symbol &sym,
                             StringRef parentName);
 
-  enum class InputOpt { None, DefaultLib, WholeArchive };
-  void enqueuePDB(StringRef Path) { enqueuePath(Path, false); }
+  void enqueuePDB(StringRef Path) { enqueuePath(Path, false, false); }
 
   MemoryBufferRef takeBuffer(std::unique_ptr<MemoryBuffer> mb);
 
-  void enqueuePath(StringRef path, bool lazy,
-                   InputOpt inputOpt = InputOpt::None);
+  void enqueuePath(StringRef path, bool wholeArchive, bool lazy);
 
   // Returns a list of chunks of selected symbols.
   std::vector<Chunk *> getChunks() const;
@@ -140,10 +138,6 @@ class LinkerDriver {
   //
   std::string getImportName(bool asLib);
 
-  // Write fullly resolved path to repro file if /linkreprofullpathrsp
-  // is specified.
-  void handleReproFile(StringRef path, InputOpt inputOpt);
-
   void createImportLibrary(bool asLib);
 
   // Used by the resolver to parse .drectve section contents.
@@ -199,9 +193,6 @@ class LinkerDriver {
   int sdkMajor = 0;
   llvm::SmallString<128> windowsSdkLibPath;
 
-  // For linkreprofullpathrsp
-  std::unique_ptr<llvm::raw_fd_ostream> reproFile;
-
   // Functions below this line are defined in DriverUtils.cpp.
 
   void printHelp(const char *argv0);

diff  --git a/lld/COFF/Options.td b/lld/COFF/Options.td
index 32e55f57fb696..2e790baa5a00c 100644
--- a/lld/COFF/Options.td
+++ b/lld/COFF/Options.td
@@ -75,9 +75,6 @@ def link : F<"link">, HelpText<"Ignored for compatibility">;
 def linkrepro : Joined<["/", "-", "/?", "-?"], "linkrepro:">,
     MetaVarName<"directory">,
     HelpText<"Write repro.tar containing inputs and command to reproduce link">;
-def linkreprofullpathrsp : Joined<["/", "-", "/?", "-?"], "linkreprofullpathrsp:">,
-    MetaVarName<"directory">,
-    HelpText<"Write .rsp file containing inputs used to link with full paths">;
 def lldignoreenv : F<"lldignoreenv">,
     HelpText<"Ignore environment variables like %LIB%">;
 def lldltocache : P<"lldltocache",

diff  --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst
index d26c5dbb2a694..31958c65c18aa 100644
--- a/lld/docs/ReleaseNotes.rst
+++ b/lld/docs/ReleaseNotes.rst
@@ -40,8 +40,6 @@ COFF Improvements
 
 * ``/fat-lto-objects`` addded to support FatLTO. Without ``/fat-lto-objects`` or with ``/fat-lto-objects:no``, LLD will link LLVM FatLTO objects using the relocatable object file.
   (`#165529 <https://github.com/llvm/llvm-project/pull/165529>`_)
-* ``/linkreprofullpathrsp`` prints the full path to each object passed to the link line to a file.
-  (`#165449 <https://github.com/llvm/llvm-project/pull/165449>`_)
 
 MinGW Improvements
 ------------------

diff  --git a/lld/test/COFF/linkreprofullpathrsp.test b/lld/test/COFF/linkreprofullpathrsp.test
deleted file mode 100644
index 09d7b821ac9bb..0000000000000
--- a/lld/test/COFF/linkreprofullpathrsp.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# REQUIRES: x86
-
-# RUN: rm -rf %t.dir %t.obj
-# RUN: yaml2obj %p/Inputs/hello32.yaml -o %t.obj
-# RUN: yaml2obj %p/Inputs/empty.yaml -o %t.archive.obj
-# RUN: rm -f %t.archive.lib
-# RUN: llvm-ar rcs %t.archive.lib %t.archive.obj
-# RUN: llvm-pdbutil yaml2pdb %S/Inputs/pdb-type-server-simple-ts.yaml -pdb %t.pdb
-
-
-Test link.exe-style /linkreprofullpathrsp: flag.
-# RUN: mkdir -p %t.dir/build1
-# RUN: cd %t.dir/build1
-# RUN: lld-link %t.obj %p/Inputs/std32.lib /subsystem:console /defaultlib:%p/Inputs/library.lib \
-# RUN:  /libpath:%p/Inputs /defaultlib:std64.lib ret42.lib /entry:main at 0 /linkreprofullpathrsp:%t.rsp \
-# RUN:  /wholearchive:%t.archive.lib /out:%t.exe %t.pdb
-# RUN: FileCheck %s --check-prefix=RSP -DT=%t -DP=%p < %t.rsp
-
-# RUN: lld-link @%t.rsp /out:%t2.exe /entry:main at 0
-# RUN: 
diff  %t.exe %t2.exe
-
-# RSP: "[[T]].obj"
-# RSP-NEXT: "[[P]]{{[/\\]}}Inputs{{[/\\]}}std32.lib"
-# RSP-NEXT: "[[P]]{{[/\\]}}Inputs{{[/\\]}}ret42.lib"
-# RSP-NEXT: "/wholearchive:[[T]].archive.lib"
-# RSP-NEXT: "[[T]].pdb"
-# RSP-NEXT: "/defaultlib:[[P]]{{[/\\]}}Inputs{{[/\\]}}library.lib"
-# RSP-NEXT: "/defaultlib:[[P]]{{[/\\]}}Inputs{{[/\\]}}std64.lib"
-
-#--- drectve.s
-        .section .drectve, "yn"
-        .ascii "/defaultlib:std32"
-
-#--- archive.s
-	.text
-	.intel_syntax noprefix
-	.globl	exportfn3
-	.p2align	4
-exportfn3:
-	ret
-
-	.section	.drectve,"yni"
-	.ascii	" /EXPORT:exportfn3"


        


More information about the llvm-branch-commits mailing list