[lld] [llvm] [DTLTO][LLD][ELF] Support bitcode members of thin archives (PR #149425)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 23 06:33:08 PDT 2025
================
@@ -1753,6 +1754,36 @@ static uint8_t getOsAbi(const Triple &t) {
}
}
+// For DTLTO, bitcode member names must be valid paths to files on disk.
+// For thin archives, resolve `memberPath` relative to the archive's location.
+// Returns true if adjusted; false otherwise. Non-thin archives are unsupported.
+static bool dtltoAdjustMemberPathIfThinArchive(Ctx &ctx, StringRef archivePath,
+ std::string &memberPath) {
+ assert(!archivePath.empty() && !ctx.arg.dtltoDistributor.empty());
+
+ // Read the archive header to determine if it's a thin archive.
+ auto bufferOrErr =
+ MemoryBuffer::getFileSlice(archivePath, sizeof(ThinArchiveMagic) - 1, 0);
+ if (std::error_code ec = bufferOrErr.getError()) {
+ ErrAlways(ctx) << "cannot open " << archivePath << ": " << ec.message();
+ return false;
+ }
+
+ if (!bufferOrErr->get()->getBuffer().starts_with(ThinArchiveMagic))
+ return false;
+
+ SmallString<64> resolvedPath;
----------------
bd1976bris wrote:
Done. I used `SmallString<128>`.
https://github.com/llvm/llvm-project/pull/149425
More information about the llvm-commits
mailing list