From 4379535e3f50f245e50f7820a80d81cc91b38c5f Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Wed, 11 Mar 2015 02:30:51 +0000 Subject: InstrProf: Teach llvm-cov to handle universal binaries when given -arch llvm-svn: 231902 --- llvm/tools/llvm-cov/CodeCoverage.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'llvm/tools/llvm-cov/CodeCoverage.cpp') diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp index cf8ab337..b4a0584 100644 --- a/llvm/tools/llvm-cov/CodeCoverage.cpp +++ b/llvm/tools/llvm-cov/CodeCoverage.cpp @@ -20,6 +20,7 @@ #include "SourceCoverageView.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" +#include "llvm/ADT/Triple.h" #include "llvm/ProfileData/CoverageMapping.h" #include "llvm/ProfileData/InstrProfReader.h" #include "llvm/Support/CommandLine.h" @@ -87,6 +88,7 @@ public: LoadedSourceFiles; bool CompareFilenamesOnly; StringMap RemappedFilenames; + llvm::Triple::ArchType CoverageArch; }; } @@ -193,7 +195,8 @@ CodeCoverageTool::createSourceFileView(StringRef SourceFile, } std::unique_ptr CodeCoverageTool::load() { - auto CoverageOrErr = CoverageMapping::load(ObjectFilename, PGOFilename); + auto CoverageOrErr = CoverageMapping::load(ObjectFilename, PGOFilename, + CoverageArch); if (std::error_code EC = CoverageOrErr.getError()) { colored_ostream(errs(), raw_ostream::RED) << "error: Failed to load coverage: " << EC.message(); @@ -242,6 +245,9 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { cl::desc( "File with the profile data obtained after an instrumented run")); + cl::opt Arch( + "arch", cl::desc("architecture of the coverage mapping binary")); + cl::opt DebugDump("dump", cl::Optional, cl::desc("Show internal debug dump")); @@ -322,6 +328,16 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { Filters.push_back(std::unique_ptr(StatFilterer)); } + if (Arch.empty()) + CoverageArch = llvm::Triple::ArchType::UnknownArch; + else { + CoverageArch = Triple(Arch).getArch(); + if (CoverageArch == llvm::Triple::ArchType::UnknownArch) { + errs() << "error: Unknown architecture: " << Arch << "\n"; + return 1; + } + } + for (const auto &File : InputSourceFiles) { SmallString<128> Path(File); if (!CompareFilenamesOnly) -- cgit v1.1