[compiler-rt] bce9102 - Revert "[llvm-cov] Look up object files using debuginfod"
Douglas Yung via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 25 19:12:42 PST 2023
Author: Douglas Yung
Date: 2023-01-25T19:11:08-08:00
New Revision: bce910242e7269446683cfcaffd3ebf5281a9125
URL: https://github.com/llvm/llvm-project/commit/bce910242e7269446683cfcaffd3ebf5281a9125
DIFF: https://github.com/llvm/llvm-project/commit/bce910242e7269446683cfcaffd3ebf5281a9125.diff
LOG: Revert "[llvm-cov] Look up object files using debuginfod"
This reverts commit efbc8bb18eda63007216ad0cb5a8de04963eddd5.
This change is causing failures when detecting curl on several build bots:
- https://lab.llvm.org/buildbot/#/builders/247/builds/884
- https://lab.llvm.org/buildbot/#/builders/231/builds/7688
- https://lab.llvm.org/buildbot/#/builders/121/builds/27389
- https://lab.llvm.org/buildbot/#/builders/230/builds/8464
- https://lab.llvm.org/buildbot/#/builders/57/builds/24209
- https://lab.llvm.org/buildbot/#/builders/127/builds/42722
Added:
Modified:
compiler-rt/test/profile/Linux/lit.local.cfg.py
compiler-rt/test/profile/lit.site.cfg.py.in
llvm/docs/CommandGuide/llvm-cov.rst
llvm/include/llvm/Debuginfod/Debuginfod.h
llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h
llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
llvm/lib/Debuginfod/Debuginfod.cpp
llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
llvm/tools/llvm-cov/CMakeLists.txt
llvm/tools/llvm-cov/CodeCoverage.cpp
llvm/tools/llvm-objdump/llvm-objdump.cpp
llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
Removed:
compiler-rt/test/profile/Linux/binary-id-debuginfod.c
compiler-rt/test/profile/Linux/binary-id-lookup.c
################################################################################
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=<dir>
-
-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=<dir>
-
-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=<dir>
-
-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<StringRef> getDefaultDebuginfodUrls();
+Expected<SmallVector<StringRef>> 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<std::unique_ptr<CoverageMappingReader>> 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<object::BuildID> *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<std::unique_ptr<CoverageMapping>>
load(ArrayRef<StringRef> ObjectFilenames, StringRef ProfileFilename,
- ArrayRef<StringRef> Arches = std::nullopt, StringRef CompilationDir = "",
- const object::BuildIDFetcher *BIDFetcher = nullptr);
+ ArrayRef<StringRef> 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<std::vector<std::unique_ptr<BinaryCoverageReader>>>
create(MemoryBufferRef ObjectBuffer, StringRef Arch,
SmallVectorImpl<std::unique_ptr<MemoryBuffer>> &ObjectFileBuffers,
- StringRef CompilationDir = "",
- SmallVectorImpl<object::BuildIDRef> *BinaryIDs = nullptr);
+ StringRef CompilationDir = "");
static Expected<std::unique_ptr<BinaryCoverageReader>>
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<StringRef> getDefaultDebuginfodUrls() {
+Expected<SmallVector<StringRef>> getDefaultDebuginfodUrls() {
const char *DebuginfodUrlsEnv = std::getenv("DEBUGINFOD_URLS");
if (DebuginfodUrlsEnv == nullptr)
return SmallVector<StringRef>();
@@ -130,8 +126,13 @@ Expected<std::string> getCachedOrDownloadArtifact(StringRef UniqueKey,
return CacheDirOrErr.takeError();
CacheDir = *CacheDirOrErr;
+ Expected<SmallVector<StringRef>> DebuginfodUrlsOrErr =
+ getDefaultDebuginfodUrls();
+ if (!DebuginfodUrlsOrErr)
+ return DebuginfodUrlsOrErr.takeError();
+ SmallVector<StringRef> &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<std::unique_ptr<CachedFileStream>> FileStreamOrError =
CreateStream();
@@ -259,8 +259,7 @@ Expected<std::string> 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<object::BuildID> *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<std::unique_ptr<MemoryBuffer>, 4> Buffers;
-
- SmallVector<object::BuildIDRef> 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<std::unique_ptr<CoverageMappingReader>, 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<std::unique_ptr<CoverageMapping>>
CoverageMapping::load(ArrayRef<StringRef> ObjectFilenames,
StringRef ProfileFilename, ArrayRef<StringRef> 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<StringRef> ObjectFilenames,
auto Coverage = std::unique_ptr<CoverageMapping>(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<object::BuildID> 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<const char *>(A.data()), A.size()) <
- StringRef(reinterpret_cast<const char *>(B.data()), B.size());
- };
- std::vector<object::BuildID> 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<object::BuildIDRef> BinaryIDsToFetch;
- if (!ProfileBinaryIDs.empty()) {
- llvm::sort(FoundBinaryIDs, Compare);
- std::unique(FoundBinaryIDs.begin(), FoundBinaryIDs.end(), Compare);
- std::set_
diff erence(
- 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<std::unique_ptr<MemoryBuffer>, 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<std::string> 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<std::unique_ptr<CoverageMappingReader>, 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<CoverageMapError>(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<std::vector<SectionRef>> lookupSections(ObjectFile &OF,
static Expected<std::unique_ptr<BinaryCoverageReader>>
loadBinaryFormat(std::unique_ptr<Binary> Bin, StringRef Arch,
- StringRef CompilationDir = "",
- std::optional<object::BuildIDRef> *BinaryID = nullptr) {
+ StringRef CompilationDir = "") {
std::unique_ptr<ObjectFile> OF;
if (auto *Universal = dyn_cast<MachOUniversalBinary>(Bin.get())) {
// If we have a universal binary, try to look up the object for the
@@ -1053,9 +1052,6 @@ loadBinaryFormat(std::unique_ptr<Binary> 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<std::vector<std::unique_ptr<BinaryCoverageReader>>>
BinaryCoverageReader::create(
MemoryBufferRef ObjectBuffer, StringRef Arch,
SmallVectorImpl<std::unique_ptr<MemoryBuffer>> &ObjectFileBuffers,
- StringRef CompilationDir, SmallVectorImpl<object::BuildIDRef> *BinaryIDs) {
+ StringRef CompilationDir) {
std::vector<std::unique_ptr<BinaryCoverageReader>> 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<object::BuildIDRef> 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<SpecialCaseList> NameAllowlist;
-
- std::unique_ptr<object::BuildIDFetcher> BIDFetcher;
};
}
@@ -441,7 +435,7 @@ std::unique_ptr<CoverageMapping> 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<bool> DebugDump("dump", cl::Optional,
cl::desc("Show internal debug dump"));
- cl::list<std::string> DebugFileDirectory(
- "debug-file-directory",
- cl::desc("Directories to search for object files by build ID"));
- cl::opt<bool> Debuginfod(
- "debuginfod", cl::ZeroOrMore,
- cl::desc("Use debuginfod to look up object files from profile"),
- cl::init(canUseDebuginfod()));
-
cl::opt<CoverageViewOptions::OutputFormat> 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<DebuginfodFetcher>(DebugFileDirectory);
- } else {
- BIDFetcher = std::make_unique<object::BuildIDFetcher>(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<std::string> 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)) {
More information about the llvm-commits
mailing list