Revert "[lld][COFF] Add /linkreprofullpathrsp flag" (#174831)

Reverts llvm/llvm-project#165449 due to the new test failing in Linux
pre-commit CI.
This commit is contained in:
Jan Svoboda 2026-01-07 11:05:43 -08:00 committed by GitHub
parent 8c6d002b64
commit 671c5a0f02
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 13 additions and 105 deletions

View File

@ -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();

View File

@ -88,13 +88,11 @@ public:
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 @@ private:
//
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 @@ private:
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);

View File

@ -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",

View File

@ -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
------------------

View File

@ -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@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@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"