#include "llvm/MC/MCPseudoProbe.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/PseudoProbe.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCAssembler.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCFragment.h"
#include "llvm/MC/MCObjectFileInfo.h"
#include "llvm/MC/MCObjectStreamer.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/LEB128.h"
#include "llvm/Support/MD5.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <limits>
#include <memory>
#include <sstream>
#include <vector>
#define DEBUG_TYPE …
usingnamespacellvm;
usingnamespacesupport;
#ifndef NDEBUG
int MCPseudoProbeTable::DdgPrintIndent = 0;
#endif
static const MCExpr *buildSymbolDiff(MCObjectStreamer *MCOS, const MCSymbol *A,
const MCSymbol *B) { … }
uint64_t MCDecodedPseudoProbe::getGuid() const { … }
void MCPseudoProbe::emit(MCObjectStreamer *MCOS,
const MCPseudoProbe *LastProbe) const { … }
void MCPseudoProbeInlineTree::addPseudoProbe(
const MCPseudoProbe &Probe, const MCPseudoProbeInlineStack &InlineStack) { … }
void MCPseudoProbeInlineTree::emit(MCObjectStreamer *MCOS,
const MCPseudoProbe *&LastProbe) { … }
void MCPseudoProbeSections::emit(MCObjectStreamer *MCOS) { … }
void MCPseudoProbeTable::emit(MCObjectStreamer *MCOS) { … }
static StringRef getProbeFNameForGUID(const GUIDProbeFunctionMap &GUID2FuncMAP,
uint64_t GUID) { … }
void MCPseudoProbeFuncDesc::print(raw_ostream &OS) { … }
void MCDecodedPseudoProbe::getInlineContext(
SmallVectorImpl<MCPseudoProbeFrameLocation> &ContextStack,
const GUIDProbeFunctionMap &GUID2FuncMAP) const { … }
std::string MCDecodedPseudoProbe::getInlineContextStr(
const GUIDProbeFunctionMap &GUID2FuncMAP) const { … }
static const char *PseudoProbeTypeStr[3] = …;
void MCDecodedPseudoProbe::print(raw_ostream &OS,
const GUIDProbeFunctionMap &GUID2FuncMAP,
bool ShowName) const { … }
template <typename T> ErrorOr<T> MCPseudoProbeDecoder::readUnencodedNumber() { … }
template <typename T> ErrorOr<T> MCPseudoProbeDecoder::readUnsignedNumber() { … }
template <typename T> ErrorOr<T> MCPseudoProbeDecoder::readSignedNumber() { … }
ErrorOr<StringRef> MCPseudoProbeDecoder::readString(uint32_t Size) { … }
bool MCPseudoProbeDecoder::buildGUID2FuncDescMap(const uint8_t *Start,
std::size_t Size) { … }
template <bool IsTopLevelFunc>
bool MCPseudoProbeDecoder::buildAddress2ProbeMap(
MCDecodedPseudoProbeInlineTree *Cur, uint64_t &LastAddr,
const Uint64Set &GuidFilter, const Uint64Map &FuncStartAddrs,
const uint32_t CurChildIndex) { … }
template <bool IsTopLevelFunc>
bool MCPseudoProbeDecoder::countRecords(bool &Discard, uint32_t &ProbeCount,
uint32_t &InlinedCount,
const Uint64Set &GuidFilter) { … }
bool MCPseudoProbeDecoder::buildAddress2ProbeMap(
const uint8_t *Start, std::size_t Size, const Uint64Set &GuidFilter,
const Uint64Map &FuncStartAddrs) { … }
void MCPseudoProbeDecoder::printGUID2FuncDescMap(raw_ostream &OS) { … }
void MCPseudoProbeDecoder::printProbeForAddress(raw_ostream &OS,
uint64_t Address) { … }
void MCPseudoProbeDecoder::printProbesForAllAddresses(raw_ostream &OS) { … }
const MCDecodedPseudoProbe *
MCPseudoProbeDecoder::getCallProbeForAddr(uint64_t Address) const { … }
const MCPseudoProbeFuncDesc *
MCPseudoProbeDecoder::getFuncDescForGUID(uint64_t GUID) const { … }
void MCPseudoProbeDecoder::getInlineContextForProbe(
const MCDecodedPseudoProbe *Probe,
SmallVectorImpl<MCPseudoProbeFrameLocation> &InlineContextStack,
bool IncludeLeaf) const { … }
const MCPseudoProbeFuncDesc *MCPseudoProbeDecoder::getInlinerDescForProbe(
const MCDecodedPseudoProbe *Probe) const { … }