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:
parent
8c6d002b64
commit
671c5a0f02
@ -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();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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
|
||||
------------------
|
||||
|
||||
@ -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"
|
||||
Loading…
x
Reference in New Issue
Block a user