LLVM 20.0.0git
Classes | Macros | Functions | Variables
CoverageMappingReader.cpp File Reference
#include "llvm/ProfileData/Coverage/CoverageMappingReader.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/Wasm.h"
#include "llvm/Object/Archive.h"
#include "llvm/Object/Binary.h"
#include "llvm/Object/COFF.h"
#include "llvm/Object/Error.h"
#include "llvm/Object/MachOUniversal.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Object/Wasm.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/LEB128.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Triple.h"
#include <vector>

Go to the source code of this file.

Classes

struct  FilenameRange
 A range of filename indices. More...
 

Macros

#define DEBUG_TYPE   "coverage-mapping"
 

Functions

 STATISTIC (CovMapNumRecords, "The # of coverage function records")
 
 STATISTIC (CovMapNumUsedRecords, "The # of used coverage function records")
 
static bool shouldSkipSectionFirstByte (SectionRef &Section)
 Determine if we should skip the first byte of the section content.
 
static Expected< boolisCoverageMappingDummy (uint64_t Hash, StringRef Mapping)
 
template<typename T , llvm::endianness Endian>
static Error readCoverageMappingData (InstrProfSymtab &ProfileNames, StringRef CovMap, StringRef FuncRecords, std::vector< BinaryCoverageReader::ProfileMappingRecord > &Records, StringRef CompilationDir, std::vector< std::string > &Filenames)
 
static Expected< std::unique_ptr< BinaryCoverageReader > > loadTestingFormat (StringRef Data, StringRef CompilationDir)
 
static Expected< std::vector< SectionRef > > lookupSections (ObjectFile &OF, InstrProfSectKind IPSK)
 Find all sections that match IPSK name.
 
static Expected< std::pair< StringRef, uint64_t > > lookupAllocatableSection (ObjectFile &OF, InstrProfSectKind IPSK)
 Find a section that matches Name and is allocatable at runtime.
 
static Expected< std::unique_ptr< BinaryCoverageReader > > loadBinaryFormat (std::unique_ptr< Binary > Bin, StringRef Arch, StringRef CompilationDir="", object::BuildIDRef *BinaryID=nullptr)
 
static bool isArchSpecifierInvalidOrMissing (Binary *Bin, StringRef Arch)
 Determine whether Arch is invalid or empty, given Bin.
 

Variables

static const unsigned EncodingExpansionRegionBit
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "coverage-mapping"

Definition at line 45 of file CoverageMappingReader.cpp.

Function Documentation

◆ isArchSpecifierInvalidOrMissing()

static bool isArchSpecifierInvalidOrMissing ( Binary Bin,
StringRef  Arch 
)
static

Determine whether Arch is invalid or empty, given Bin.

Definition at line 1257 of file CoverageMappingReader.cpp.

References llvm::Bin.

Referenced by llvm::coverage::BinaryCoverageReader::create().

◆ isCoverageMappingDummy()

static Expected< bool > isCoverageMappingDummy ( uint64_t  Hash,
StringRef  Mapping 
)
static

◆ loadBinaryFormat()

static Expected< std::unique_ptr< BinaryCoverageReader > > loadBinaryFormat ( std::unique_ptr< Binary Bin,
StringRef  Arch,
StringRef  CompilationDir = "",
object::BuildIDRef BinaryID = nullptr 
)
static

◆ loadTestingFormat()

static Expected< std::unique_ptr< BinaryCoverageReader > > loadTestingFormat ( StringRef  Data,
StringRef  CompilationDir 
)
static

◆ lookupAllocatableSection()

static Expected< std::pair< StringRef, uint64_t > > lookupAllocatableSection ( ObjectFile OF,
InstrProfSectKind  IPSK 
)
static

Find a section that matches Name and is allocatable at runtime.

Returns the contents of the section and its start offset in the object file.

Definition at line 1091 of file CoverageMappingReader.cpp.

References Content, llvm::Data, llvm::wasm::DATA_SEGMENT, llvm::getInstrProfSectionName(), llvm::object::Binary::getTripleObjectFormat(), lookupSections(), llvm::coverage::malformed, Name, llvm::coverage::no_data_found, and shouldSkipSectionFirstByte().

Referenced by loadBinaryFormat().

◆ lookupSections()

static Expected< std::vector< SectionRef > > lookupSections ( ObjectFile OF,
InstrProfSectKind  IPSK 
)
static

Find all sections that match IPSK name.

There may be more than one if comdats are in use, e.g. for the __llvm_covfun section on ELF.

Definition at line 1054 of file CoverageMappingReader.cpp.

References llvm::getInstrProfSectionName(), llvm::object::Binary::getTripleObjectFormat(), N, Name, llvm::coverage::no_data_found, llvm::object::ObjectFile::sections(), and llvm::Expected< T >::takeError().

Referenced by loadBinaryFormat(), and lookupAllocatableSection().

◆ readCoverageMappingData()

template<typename T , llvm::endianness Endian>
static Error readCoverageMappingData ( InstrProfSymtab ProfileNames,
StringRef  CovMap,
StringRef  FuncRecords,
std::vector< BinaryCoverageReader::ProfileMappingRecord > &  Records,
StringRef  CompilationDir,
std::vector< std::string > &  Filenames 
)
static

◆ shouldSkipSectionFirstByte()

static bool shouldSkipSectionFirstByte ( SectionRef Section)
static

Determine if we should skip the first byte of the section content.

Definition at line 496 of file CoverageMappingReader.cpp.

References llvm::Triple::COFF, llvm::getInstrProfSectionName(), and llvm::object::ObjectFile::isRelocatableObject().

Referenced by llvm::InstrProfSymtab::create(), and lookupAllocatableSection().

◆ STATISTIC() [1/2]

STATISTIC ( CovMapNumRecords  ,
"The # of coverage function records"   
)

◆ STATISTIC() [2/2]

STATISTIC ( CovMapNumUsedRecords  ,
"The # of used coverage function records"   
)

Variable Documentation

◆ EncodingExpansionRegionBit

const unsigned EncodingExpansionRegionBit
static
Initial value:
= 1
static const unsigned EncodingTagBits

Definition at line 232 of file CoverageMappingReader.cpp.