diff --git a/compiler-rt/test/profile/Linux/binary-id-debuginfod.c b/compiler-rt/test/profile/Linux/binary-id-debuginfod.c deleted file mode 100644 index 39a125b8c09f7..0000000000000 --- a/compiler-rt/test/profile/Linux/binary-id-debuginfod.c +++ /dev/null @@ -1,33 +0,0 @@ -// REQUIRES: linux, curl -// RUN: split-file %s %t -// RUN: %clang_profgen -Wl,--build-id=0x12345678 -fcoverage-mapping -O2 -shared %t/foo.c -o %t/libfoo.so -// RUN: %clang_profgen -Wl,--build-id=0xabcd1234 -fcoverage-mapping -O2 %t/main.c -L%t -lfoo -o %t.main -// RUN: rm -rf %t.profdir -// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw LD_LIBRARY_PATH=%t %run %t.main -// RUN: mkdir -p %t/buildid/12345678 %t/buildid/abcd1234 -// RUN: cp %t/libfoo.so %t/buildid/12345678/debuginfo -// RUN: cp %t.main %t/buildid/abcd1234/debuginfo -// RUN: llvm-profdata merge -o %t.profdata %t.profdir/default_*.profraw -// RUN: env DEBUGINFOD_URLS=file://%t llvm-cov show -instr-profile %t.profdata | FileCheck %s -// RUN: echo "bad" > %t/libfoo.so %t/buildid/12345678/debuginfo -// RUN: echo "bad" > %t/buildid/abcd1234/debuginfo -// RUN: env DEBUGINFOD_URLS=file://%t llvm-cov show -instr-profile %t.profdata -debuginfod=false %t.main | FileCheck %s --check-prefix=NODEBUGINFOD - -// CHECK: 1| 1|void foo(void) {} -// CHECK: 2| 1|void bar(void) {} -// CHECK: 3| 1|int main() { - -// NODEBUGINFOD-NOT: foo(void) {} -// NODEBUGINFOD: main - -//--- foo.c -void foo(void) {} - -//--- main.c -void foo(void); -void bar(void) {} -int main() { - foo(); - bar(); - return 0; -} diff --git a/compiler-rt/test/profile/Linux/binary-id-lookup.c b/compiler-rt/test/profile/Linux/binary-id-lookup.c deleted file mode 100644 index 9cc6648903e1d..0000000000000 --- a/compiler-rt/test/profile/Linux/binary-id-lookup.c +++ /dev/null @@ -1,32 +0,0 @@ -// REQUIRES: linux -// RUN: split-file %s %t -// RUN: %clang_profgen -Wl,--build-id=0x12345678 -fcoverage-mapping -O2 -shared %t/foo.c -o %t/libfoo.so -// RUN: %clang_profgen -Wl,--build-id=0xabcd1234 -fcoverage-mapping -O2 %t/main.c -L%t -lfoo -o %t.main -// RUN: rm -rf %t.profdir -// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw LD_LIBRARY_PATH=%t %run %t.main -// RUN: mkdir -p %t/.build-id/12 %t/.build-id/ab -// RUN: cp %t/libfoo.so %t/.build-id/12/345678.debug -// RUN: cp %t.main %t/.build-id/ab/cd1234.debug -// RUN: llvm-profdata merge -o %t.profdata %t.profdir/default_*.profraw -// RUN: llvm-cov show -instr-profile %t.profdata -debug-file-directory %t | FileCheck %s -// RUN: echo "bad" > %t/.build-id/ab/cd1234.debug -// RUN: llvm-cov show -instr-profile %t.profdata -debug-file-directory %t %t.main | FileCheck %s -// RUN: not llvm-cov show -instr-profile %t.profdata -debug-file-directory %t/empty 2>&1 | FileCheck %s --check-prefix=NODATA - -// CHECK: 1| 1|void foo(void) {} -// CHECK: 2| 1|void bar(void) {} -// CHECK: 3| 1|int main() { - -// NODATA: error: Failed to load coverage: '': No coverage data found - -//--- foo.c -void foo(void) {} - -//--- main.c -void foo(void); -void bar(void) {} -int main() { - foo(); - bar(); - return 0; -} diff --git a/compiler-rt/test/profile/Linux/lit.local.cfg.py b/compiler-rt/test/profile/Linux/lit.local.cfg.py index 9bb92b7f14fe6..98d79518b92aa 100644 --- a/compiler-rt/test/profile/Linux/lit.local.cfg.py +++ b/compiler-rt/test/profile/Linux/lit.local.cfg.py @@ -38,6 +38,3 @@ def is_gold_linker_available(): if root.host_os not in ['Linux'] or not is_gold_linker_available(): config.unsupported = True - -if config.have_curl: - config.available_features.add('curl') diff --git a/compiler-rt/test/profile/lit.site.cfg.py.in b/compiler-rt/test/profile/lit.site.cfg.py.in index a4e6509ce8424..bb81fb0c93f75 100644 --- a/compiler-rt/test/profile/lit.site.cfg.py.in +++ b/compiler-rt/test/profile/lit.site.cfg.py.in @@ -4,7 +4,6 @@ config.profile_lit_binary_dir = "@PROFILE_LIT_BINARY_DIR@" config.target_cflags = "@PROFILE_TEST_TARGET_CFLAGS@" config.target_arch = "@PROFILE_TEST_TARGET_ARCH@" -config.have_curl = @LLVM_ENABLE_CURL@ # Load common config for all compiler-rt lit tests. lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") diff --git a/llvm/docs/CommandGuide/llvm-cov.rst b/llvm/docs/CommandGuide/llvm-cov.rst index 495faa7201e18..319835de168a9 100644 --- a/llvm/docs/CommandGuide/llvm-cov.rst +++ b/llvm/docs/CommandGuide/llvm-cov.rst @@ -349,17 +349,6 @@ OPTIONS coverage >= high, red when coverage < low, and yellow otherwise. Both high and low should be between 0-100 and high > low. -.. option:: -debuginfod - -Use debuginfod to look up coverage mapping for binary IDs present in the profile -but not in any object given on the command line. Defaults to true if debuginfod -is compiled in and configured via the DEBUGINFOD_URLS environment variable. - -.. option:: -debug-file-directory= - -Provides local directories to search for objects corresponding to binary IDs in -the profile (as with debuginfod). Defaults to system build ID directories. - .. program:: llvm-cov report .. _llvm-cov-report: @@ -429,18 +418,6 @@ OPTIONS when binaries have been compiled with one of `-fcoverage-prefix-map` `-fcoverage-compilation-dir`, or `-ffile-compilation-dir`. -.. option:: -debuginfod - -Attempt to look up coverage mapping from objects using debuginfod. This is -attempted by default for binary IDs present in the profile but not provided on -the command line, so long as debuginfod is compiled in and configured via -DEBUGINFOD_URLS. - -.. option:: -debug-file-directory= - -Provides a directory to search for objects corresponding to binary IDs in the -profile. - .. program:: llvm-cov export .. _llvm-cov-export: @@ -515,15 +492,3 @@ OPTIONS Directory used as a base for relative coverage mapping paths. Only applicable when binaries have been compiled with one of `-fcoverage-prefix-map` `-fcoverage-compilation-dir`, or `-ffile-compilation-dir`. - -.. option:: -debuginfod - -Attempt to look up coverage mapping from objects using debuginfod. This is -attempted by default for binary IDs present in the profile but not provided on -the command line, so long as debuginfod is compiled in and configured via -DEBUGINFOD_URLS. - -.. option:: -debug-file-directory= - -Provides a directory to search for objects corresponding to binary IDs in the -profile. diff --git a/llvm/include/llvm/Debuginfod/Debuginfod.h b/llvm/include/llvm/Debuginfod/Debuginfod.h index ec7f5691dda4f..caece0e6fc194 100644 --- a/llvm/include/llvm/Debuginfod/Debuginfod.h +++ b/llvm/include/llvm/Debuginfod/Debuginfod.h @@ -38,13 +38,9 @@ namespace llvm { -/// Returns false if a debuginfod lookup can be determined to have no chance of -/// succeeding. -bool canUseDebuginfod(); - /// Finds default array of Debuginfod server URLs by checking DEBUGINFOD_URLS /// environment variable. -SmallVector getDefaultDebuginfodUrls(); +Expected> getDefaultDebuginfodUrls(); /// Finds a default local file caching directory for the debuginfod client, /// first checking DEBUGINFOD_CACHE_PATH. diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h index bdb7728624686..4d48308d5509e 100644 --- a/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h +++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h @@ -21,7 +21,6 @@ #include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator.h" #include "llvm/ADT/iterator_range.h" -#include "llvm/Object/BuildID.h" #include "llvm/ProfileData/InstrProf.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/Compiler.h" @@ -43,10 +42,6 @@ namespace llvm { class IndexedInstrProfReader; -namespace object { -class BuildIDFetcher; -} // namespace object - namespace coverage { class CoverageMappingReader; @@ -584,13 +579,6 @@ class CoverageMapping { ArrayRef> CoverageReaders, IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage); - // Load coverage records from file. - static Error - loadFromFile(StringRef Filename, StringRef Arch, StringRef CompilationDir, - IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage, - bool &DataFound, - SmallVectorImpl *FoundBinaryIDs = nullptr); - /// Add a function record corresponding to \p Record. Error loadFunctionRecord(const CoverageMappingRecord &Record, IndexedInstrProfReader &ProfileReader); @@ -616,8 +604,8 @@ class CoverageMapping { /// Ignores non-instrumented object files unless all are not instrumented. static Expected> load(ArrayRef ObjectFilenames, StringRef ProfileFilename, - ArrayRef Arches = std::nullopt, StringRef CompilationDir = "", - const object::BuildIDFetcher *BIDFetcher = nullptr); + ArrayRef Arches = std::nullopt, + StringRef CompilationDir = ""); /// The number of functions that couldn't have their profiles mapped. /// diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h index 326c1b0d33384..39c0045369be7 100644 --- a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h +++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h @@ -205,8 +205,7 @@ class BinaryCoverageReader : public CoverageMappingReader { static Expected>> create(MemoryBufferRef ObjectBuffer, StringRef Arch, SmallVectorImpl> &ObjectFileBuffers, - StringRef CompilationDir = "", - SmallVectorImpl *BinaryIDs = nullptr); + StringRef CompilationDir = ""); static Expected> createCoverageReaderFromBuffer(StringRef Coverage, diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp index 2b0710b536bae..026f118bbf5b5 100644 --- a/llvm/lib/Debuginfod/Debuginfod.cpp +++ b/llvm/lib/Debuginfod/Debuginfod.cpp @@ -55,11 +55,7 @@ static std::string buildIDToString(BuildIDRef ID) { return llvm::toHex(ID, /*LowerCase=*/true); } -bool canUseDebuginfod() { - return HTTPClient::isAvailable() && !getDefaultDebuginfodUrls().empty(); -} - -SmallVector getDefaultDebuginfodUrls() { +Expected> getDefaultDebuginfodUrls() { const char *DebuginfodUrlsEnv = std::getenv("DEBUGINFOD_URLS"); if (DebuginfodUrlsEnv == nullptr) return SmallVector(); @@ -130,8 +126,13 @@ Expected getCachedOrDownloadArtifact(StringRef UniqueKey, return CacheDirOrErr.takeError(); CacheDir = *CacheDirOrErr; + Expected> DebuginfodUrlsOrErr = + getDefaultDebuginfodUrls(); + if (!DebuginfodUrlsOrErr) + return DebuginfodUrlsOrErr.takeError(); + SmallVector &DebuginfodUrls = *DebuginfodUrlsOrErr; return getCachedOrDownloadArtifact(UniqueKey, UrlPath, CacheDir, - getDefaultDebuginfodUrls(), + DebuginfodUrls, getDefaultDebuginfodTimeout()); } @@ -158,8 +159,7 @@ class StreamedHTTPResponseHandler : public HTTPResponseHandler { Error StreamedHTTPResponseHandler::handleBodyChunk(StringRef BodyChunk) { if (!FileStream) { - unsigned Code = Client.responseCode(); - if (Code && Code != 200) + if (Client.responseCode() != 200) return Error::success(); Expected> FileStreamOrError = CreateStream(); @@ -259,8 +259,7 @@ Expected getCachedOrDownloadArtifact( if (Err) return std::move(Err); - unsigned Code = Client.responseCode(); - if (Code && Code != 200) + if (Client.responseCode() != 200) continue; // Return the path to the artifact on disk. diff --git a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp index 52cb577fef101..6113f78aeb4ee 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp @@ -17,7 +17,6 @@ #include "llvm/ADT/SmallBitVector.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Object/BuildID.h" #include "llvm/ProfileData/Coverage/CoverageMappingReader.h" #include "llvm/ProfileData/InstrProfReader.h" #include "llvm/Support/Debug.h" @@ -343,49 +342,10 @@ static Error handleMaybeNoDataFoundError(Error E) { }); } -Error CoverageMapping::loadFromFile( - StringRef Filename, StringRef Arch, StringRef CompilationDir, - IndexedInstrProfReader &ProfileReader, CoverageMapping &Coverage, - bool &DataFound, SmallVectorImpl *FoundBinaryIDs) { - auto CovMappingBufOrErr = MemoryBuffer::getFileOrSTDIN( - Filename, /*IsText=*/false, /*RequiresNullTerminator=*/false); - if (std::error_code EC = CovMappingBufOrErr.getError()) - return createFileError(Filename, errorCodeToError(EC)); - MemoryBufferRef CovMappingBufRef = - CovMappingBufOrErr.get()->getMemBufferRef(); - SmallVector, 4> Buffers; - - SmallVector BinaryIDs; - auto CoverageReadersOrErr = BinaryCoverageReader::create( - CovMappingBufRef, Arch, Buffers, CompilationDir, - FoundBinaryIDs ? &BinaryIDs : nullptr); - if (Error E = CoverageReadersOrErr.takeError()) { - E = handleMaybeNoDataFoundError(std::move(E)); - if (E) - return createFileError(Filename, std::move(E)); - return E; - } - - SmallVector, 4> Readers; - for (auto &Reader : CoverageReadersOrErr.get()) - Readers.push_back(std::move(Reader)); - if (FoundBinaryIDs && !Readers.empty()) { - llvm::append_range(*FoundBinaryIDs, - llvm::map_range(BinaryIDs, [](object::BuildIDRef BID) { - return object::BuildID(BID); - })); - } - DataFound |= !Readers.empty(); - if (Error E = loadFromReaders(Readers, ProfileReader, Coverage)) - return createFileError(Filename, std::move(E)); - return Error::success(); -} - Expected> CoverageMapping::load(ArrayRef ObjectFilenames, StringRef ProfileFilename, ArrayRef Arches, - StringRef CompilationDir, - const object::BuildIDFetcher *BIDFetcher) { + StringRef CompilationDir) { auto ProfileReaderOrErr = IndexedInstrProfReader::create(ProfileFilename); if (Error E = ProfileReaderOrErr.takeError()) return createFileError(ProfileFilename, std::move(E)); @@ -393,56 +353,35 @@ CoverageMapping::load(ArrayRef ObjectFilenames, auto Coverage = std::unique_ptr(new CoverageMapping()); bool DataFound = false; - auto GetArch = [&](size_t Idx) { - if (Arches.empty()) - return StringRef(); - if (Arches.size() == 1) - return Arches.front(); - return Arches[Idx]; - }; - - SmallVector FoundBinaryIDs; for (const auto &File : llvm::enumerate(ObjectFilenames)) { - if (Error E = - loadFromFile(File.value(), GetArch(File.index()), CompilationDir, - *ProfileReader, *Coverage, DataFound, &FoundBinaryIDs)) - return E; - } - - if (BIDFetcher) { - const auto &Compare = [](object::BuildIDRef A, object::BuildIDRef B) { - return StringRef(reinterpret_cast(A.data()), A.size()) < - StringRef(reinterpret_cast(B.data()), B.size()); - }; - std::vector ProfileBinaryIDs; - if (Error E = ProfileReader->readBinaryIds(ProfileBinaryIDs)) - return createFileError(ProfileFilename, std::move(E)); - llvm::sort(ProfileBinaryIDs, Compare); - std::unique(ProfileBinaryIDs.begin(), ProfileBinaryIDs.end(), Compare); - - SmallVector BinaryIDsToFetch; - if (!ProfileBinaryIDs.empty()) { - llvm::sort(FoundBinaryIDs, Compare); - std::unique(FoundBinaryIDs.begin(), FoundBinaryIDs.end(), Compare); - std::set_difference( - ProfileBinaryIDs.begin(), ProfileBinaryIDs.end(), - FoundBinaryIDs.begin(), FoundBinaryIDs.end(), - std::inserter(BinaryIDsToFetch, BinaryIDsToFetch.end()), Compare); + auto CovMappingBufOrErr = MemoryBuffer::getFileOrSTDIN( + File.value(), /*IsText=*/false, /*RequiresNullTerminator=*/false); + if (std::error_code EC = CovMappingBufOrErr.getError()) + return createFileError(File.value(), errorCodeToError(EC)); + StringRef Arch = Arches.empty() ? StringRef() : Arches[File.index()]; + MemoryBufferRef CovMappingBufRef = + CovMappingBufOrErr.get()->getMemBufferRef(); + SmallVector, 4> Buffers; + auto CoverageReadersOrErr = BinaryCoverageReader::create( + CovMappingBufRef, Arch, Buffers, CompilationDir); + if (Error E = CoverageReadersOrErr.takeError()) { + E = handleMaybeNoDataFoundError(std::move(E)); + if (E) + return createFileError(File.value(), std::move(E)); + // E == success (originally a no_data_found error). + continue; } - for (object::BuildIDRef BinaryID : BinaryIDsToFetch) { - std::optional PathOpt = BIDFetcher->fetch(BinaryID); - if (!PathOpt) - continue; - std::string Path = std::move(*PathOpt); - StringRef Arch = Arches.size() == 1 ? Arches.front() : StringRef(); - if (Error E = loadFromFile(Path, Arch, CompilationDir, *ProfileReader, - *Coverage, DataFound)) - return E; - } + SmallVector, 4> Readers; + for (auto &Reader : CoverageReadersOrErr.get()) + Readers.push_back(std::move(Reader)); + DataFound |= !Readers.empty(); + if (Error E = loadFromReaders(Readers, *ProfileReader, *Coverage)) + return createFileError(File.value(), std::move(E)); } - - if (!DataFound) + // If no readers were created, either no objects were provided or none of them + // had coverage data. Return an error in the latter case. + if (!DataFound && !ObjectFilenames.empty()) return createFileError( join(ObjectFilenames.begin(), ObjectFilenames.end(), ", "), make_error(coveragemap_error::no_data_found)); diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index d313864e2ddb8..41962ab24ff9c 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -954,8 +954,7 @@ static Expected> lookupSections(ObjectFile &OF, static Expected> loadBinaryFormat(std::unique_ptr Bin, StringRef Arch, - StringRef CompilationDir = "", - std::optional *BinaryID = nullptr) { + StringRef CompilationDir = "") { std::unique_ptr OF; if (auto *Universal = dyn_cast(Bin.get())) { // If we have a universal binary, try to look up the object for the @@ -1053,9 +1052,6 @@ loadBinaryFormat(std::unique_ptr Bin, StringRef Arch, FuncRecords = std::move(WritableBuffer); } - if (BinaryID) - *BinaryID = getBuildID(OF.get()); - return BinaryCoverageReader::createCoverageReaderFromBuffer( CoverageMapping, std::move(FuncRecords), std::move(ProfileNames), BytesInAddress, Endian, CompilationDir); @@ -1078,7 +1074,7 @@ Expected>> BinaryCoverageReader::create( MemoryBufferRef ObjectBuffer, StringRef Arch, SmallVectorImpl> &ObjectFileBuffers, - StringRef CompilationDir, SmallVectorImpl *BinaryIDs) { + StringRef CompilationDir) { std::vector> Readers; if (ObjectBuffer.getBuffer().startswith(TestingFormatMagic)) { @@ -1118,7 +1114,7 @@ BinaryCoverageReader::create( return BinaryCoverageReader::create( ArchiveOrErr.get()->getMemoryBufferRef(), Arch, ObjectFileBuffers, - CompilationDir, BinaryIDs); + CompilationDir); } } @@ -1131,8 +1127,7 @@ BinaryCoverageReader::create( return ChildBufOrErr.takeError(); auto ChildReadersOrErr = BinaryCoverageReader::create( - ChildBufOrErr.get(), Arch, ObjectFileBuffers, CompilationDir, - BinaryIDs); + ChildBufOrErr.get(), Arch, ObjectFileBuffers, CompilationDir); if (!ChildReadersOrErr) return ChildReadersOrErr.takeError(); for (auto &Reader : ChildReadersOrErr.get()) @@ -1151,14 +1146,10 @@ BinaryCoverageReader::create( return std::move(Readers); } - std::optional BinaryID; - auto ReaderOrErr = loadBinaryFormat(std::move(Bin), Arch, CompilationDir, - BinaryIDs ? &BinaryID : nullptr); + auto ReaderOrErr = loadBinaryFormat(std::move(Bin), Arch, CompilationDir); if (!ReaderOrErr) return ReaderOrErr.takeError(); Readers.push_back(std::move(ReaderOrErr.get())); - if (BinaryID) - BinaryIDs->push_back(*BinaryID); return std::move(Readers); } diff --git a/llvm/tools/llvm-cov/CMakeLists.txt b/llvm/tools/llvm-cov/CMakeLists.txt index 7acc87e08a9ef..300bbd0bc6dbd 100644 --- a/llvm/tools/llvm-cov/CMakeLists.txt +++ b/llvm/tools/llvm-cov/CMakeLists.txt @@ -21,5 +21,3 @@ add_llvm_tool(llvm-cov SourceCoverageViewText.cpp TestingSupport.cpp ) - -target_link_libraries(llvm-cov PRIVATE LLVMDebuginfod) diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp index 7366059cd242f..2b2eda5d85873 100644 --- a/llvm/tools/llvm-cov/CodeCoverage.cpp +++ b/llvm/tools/llvm-cov/CodeCoverage.cpp @@ -23,10 +23,6 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" -#include "llvm/Debuginfod/BuildIDFetcher.h" -#include "llvm/Debuginfod/Debuginfod.h" -#include "llvm/Debuginfod/HTTPClient.h" -#include "llvm/Object/BuildID.h" #include "llvm/ProfileData/Coverage/CoverageMapping.h" #include "llvm/ProfileData/InstrProfReader.h" #include "llvm/Support/CommandLine.h" @@ -183,8 +179,6 @@ class CodeCoverageTool { /// Allowlist from -name-allowlist to be used for filtering. std::unique_ptr NameAllowlist; - - std::unique_ptr BIDFetcher; }; } @@ -441,7 +435,7 @@ std::unique_ptr CodeCoverageTool::load() { ObjectFilename); auto CoverageOrErr = CoverageMapping::load(ObjectFilenames, PGOFilename, CoverageArches, - ViewOpts.CompilationDirectory, BIDFetcher.get()); + ViewOpts.CompilationDirectory); if (Error E = CoverageOrErr.takeError()) { error("Failed to load coverage: " + toString(std::move(E))); return nullptr; @@ -653,14 +647,6 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { cl::opt DebugDump("dump", cl::Optional, cl::desc("Show internal debug dump")); - cl::list DebugFileDirectory( - "debug-file-directory", - cl::desc("Directories to search for object files by build ID")); - cl::opt Debuginfod( - "debuginfod", cl::ZeroOrMore, - cl::desc("Use debuginfod to look up object files from profile"), - cl::init(canUseDebuginfod())); - cl::opt Format( "format", cl::desc("Output format for line-based coverage reports"), cl::values(clEnumValN(CoverageViewOptions::OutputFormat::Text, "text", @@ -763,18 +749,12 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { auto commandLineParser = [&, this](int argc, const char **argv) -> int { cl::ParseCommandLineOptions(argc, argv, "LLVM code coverage tool\n"); ViewOpts.Debug = DebugDump; - if (Debuginfod) { - HTTPClient::initialize(); - BIDFetcher = std::make_unique(DebugFileDirectory); - } else { - BIDFetcher = std::make_unique(DebugFileDirectory); - } if (!CovFilename.empty()) ObjectFilenames.emplace_back(CovFilename); for (const std::string &Filename : CovFilenames) ObjectFilenames.emplace_back(Filename); - if (ObjectFilenames.empty() && !Debuginfod && DebugFileDirectory.empty()) { + if (ObjectFilenames.empty()) { errs() << "No filenames specified!\n"; ::exit(1); } @@ -887,8 +867,10 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { } CoverageArches.emplace_back(Arch); } - if (CoverageArches.size() != 1 && - CoverageArches.size() != ObjectFilenames.size()) { + if (CoverageArches.size() == 1) + CoverageArches.insert(CoverageArches.end(), ObjectFilenames.size() - 1, + CoverageArches[0]); + if (CoverageArches.size() != ObjectFilenames.size()) { error("Number of architectures doesn't match the number of objects"); return 1; } diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 9979a26cf1154..930b132533cdd 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -3198,7 +3198,9 @@ int main(int argc, char **argv) { // Initialize debuginfod. const bool ShouldUseDebuginfodByDefault = - InputArgs.hasArg(OBJDUMP_build_id) || canUseDebuginfod(); + InputArgs.hasArg(OBJDUMP_build_id) || + (HTTPClient::isAvailable() && + !ExitOnErr(getDefaultDebuginfodUrls()).empty()); std::vector DebugFileDirectories = InputArgs.getAllArgValues(OBJDUMP_debug_file_directory); if (InputArgs.hasFlag(OBJDUMP_debuginfod, OBJDUMP_no_debuginfod, diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp index ed24e85502911..1b86134dda516 100644 --- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -443,7 +443,13 @@ int main(int argc, char **argv) { LLVMSymbolizer Symbolizer(Opts); - if (Args.hasFlag(OPT_debuginfod, OPT_no_debuginfod, canUseDebuginfod())) + // A debuginfod lookup could succeed if a HTTP client is available and at + // least one backing URL is configured. + bool ShouldUseDebuginfodByDefault = + HTTPClient::isAvailable() && + !ExitOnErr(getDefaultDebuginfodUrls()).empty(); + if (Args.hasFlag(OPT_debuginfod, OPT_no_debuginfod, + ShouldUseDebuginfodByDefault)) enableDebuginfod(Symbolizer, Args); if (Args.hasArg(OPT_filter_markup)) {