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@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" _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
