[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