LLVM 20.0.0git
Classes | Typedefs | Functions | Variables
llvm::gsym Namespace Reference

Classes

struct  CallSiteInfo
 
struct  CallSiteInfoCollection
 
class  CallSiteInfoLoader
 
struct  CUInfo
 
class  DwarfTransformer
 A class that transforms the DWARF in a DWARFContext into GSYM information by populating the GsymCreator object that it is constructed with. More...
 
struct  FileEntry
 Files in GSYM are contained in FileEntry structs where we split the directory and basename into two different strings in the string table. More...
 
class  FileWriter
 A simplified binary data writer class that doesn't require targets, target definitions, architectures, or require any other optional compile time libraries to be enabled via the build process. More...
 
struct  FunctionInfo
 Function information in GSYM files encodes information for one contiguous address range. More...
 
class  GsymCreator
 GsymCreator is used to emit GSYM data to a stand alone file or section within a file. More...
 
class  GsymReader
 GsymReader is used to read GSYM data from a file or buffer. More...
 
struct  Header
 The GSYM header. More...
 
struct  InlineInfo
 Inline information stores the name of the inline function along with an array of address ranges. More...
 
struct  LineEntry
 Line entries are used to encode the line tables in FunctionInfo objects. More...
 
class  LineTable
 LineTable class contains deserialized versions of line tables for each function's address ranges. More...
 
struct  LookupResult
 
struct  MergedFunctionsInfo
 
class  ObjectFileTransformer
 
class  OutputAggregator
 
struct  SourceLocation
 
struct  StringTable
 String tables in GSYM files are required to start with an empty string at offset zero. More...
 

Typedefs

using SourceLocations = std::vector< SourceLocation >
 

Functions

raw_ostreamoperator<< (raw_ostream &OS, const CallSiteInfo &CSI)
 
raw_ostreamoperator<< (raw_ostream &OS, const CallSiteInfoCollection &CSIC)
 
void skipRange (DataExtractor &Data, uint64_t &Offset)
 Skip an address range object in the specified data a the specified offset.
 
uint64_t skipRanges (DataExtractor &Data, uint64_t &Offset)
 Skip an address range object in the specified data a the specified offset.
 
bool operator== (const FunctionInfo &LHS, const FunctionInfo &RHS)
 
bool operator!= (const FunctionInfo &LHS, const FunctionInfo &RHS)
 
bool operator< (const FunctionInfo &LHS, const FunctionInfo &RHS)
 This sorting will order things consistently by address range first, but then followed by increasing levels of debug info like inline information and line tables.
 
raw_ostreamoperator<< (raw_ostream &OS, const FunctionInfo &R)
 
bool operator== (const Header &LHS, const Header &RHS)
 
raw_ostreamoperator<< (raw_ostream &OS, const llvm::gsym::Header &H)
 
bool operator== (const InlineInfo &LHS, const InlineInfo &RHS)
 
raw_ostreamoperator<< (raw_ostream &OS, const InlineInfo &FI)
 
raw_ostreamoperator<< (raw_ostream &OS, const LineEntry &LE)
 
bool operator== (const LineEntry &LHS, const LineEntry &RHS)
 
bool operator!= (const LineEntry &LHS, const LineEntry &RHS)
 
bool operator< (const LineEntry &LHS, const LineEntry &RHS)
 
raw_ostreamoperator<< (raw_ostream &OS, const gsym::LineTable &LT)
 
bool operator== (const SourceLocation &LHS, const SourceLocation &RHS)
 
raw_ostreamoperator<< (raw_ostream &OS, const SourceLocation &R)
 
bool operator== (const LookupResult &LHS, const LookupResult &RHS)
 
raw_ostreamoperator<< (raw_ostream &OS, const LookupResult &R)
 
bool operator== (const MergedFunctionsInfo &LHS, const MergedFunctionsInfo &RHS)
 
raw_ostreamoperator<< (raw_ostream &OS, const StringTable &S)
 
AddressRange decodeRange (DataExtractor &Data, uint64_t BaseAddr, uint64_t &Offset)
 AddressRange objects are encoded and decoded to be relative to a base address.
 
void encodeRange (const AddressRange &Range, FileWriter &O, uint64_t BaseAddr)
 
void decodeRanges (AddressRanges &Ranges, DataExtractor &Data, uint64_t BaseAddr, uint64_t &Offset)
 Address ranges are decoded and encoded to be relative to a base address.
 
void encodeRanges (const AddressRanges &Ranges, FileWriter &O, uint64_t BaseAddr)
 

Variables

constexpr uint32_t GSYM_MAGIC = 0x4753594d
 
constexpr uint32_t GSYM_CIGAM = 0x4d595347
 
constexpr uint32_t GSYM_VERSION = 1
 
constexpr size_t GSYM_MAX_UUID_SIZE = 20
 

Typedef Documentation

◆ SourceLocations

using llvm::gsym::SourceLocations = typedef std::vector<SourceLocation>

Definition at line 36 of file LookupResult.h.

Function Documentation

◆ decodeRange()

AddressRange llvm::gsym::decodeRange ( DataExtractor Data,
uint64_t  BaseAddr,
uint64_t Offset 
)

AddressRange objects are encoded and decoded to be relative to a base address.

This will be the FunctionInfo's start address if the AddressRange is directly contained in a FunctionInfo, or a base address of the containing parent AddressRange or AddressRanges. This allows address ranges to be efficiently encoded using ULEB128 encodings as we encode the offset and size of each range instead of full addresses. This also makes encoded addresses easy to relocate as we just need to relocate one base address.

Definition at line 23 of file ExtractRanges.cpp.

References llvm::Data, llvm::Offset, and Size.

Referenced by decodeRanges().

◆ decodeRanges()

void llvm::gsym::decodeRanges ( AddressRanges Ranges,
DataExtractor Data,
uint64_t  BaseAddr,
uint64_t Offset 
)

Address ranges are decoded and encoded to be relative to a base address.

See the AddressRange comment for the encode and decode methods for full details.

Definition at line 41 of file ExtractRanges.cpp.

References llvm::Data, decodeRange(), and llvm::Offset.

Referenced by decode(), and lookup().

◆ encodeRange()

void llvm::gsym::encodeRange ( const AddressRange Range,
FileWriter O,
uint64_t  BaseAddr 
)

Definition at line 17 of file ExtractRanges.cpp.

References assert(), and Range.

Referenced by encodeRanges().

◆ encodeRanges()

void llvm::gsym::encodeRanges ( const AddressRanges Ranges,
FileWriter O,
uint64_t  BaseAddr 
)

Definition at line 32 of file ExtractRanges.cpp.

References encodeRange(), and Range.

Referenced by llvm::gsym::InlineInfo::encode().

◆ operator!=() [1/2]

bool llvm::gsym::operator!= ( const FunctionInfo LHS,
const FunctionInfo RHS 
)
inline

Definition at line 214 of file FunctionInfo.h.

References LHS, and RHS.

◆ operator!=() [2/2]

bool llvm::gsym::operator!= ( const LineEntry LHS,
const LineEntry RHS 
)
inline

Definition at line 39 of file LineEntry.h.

References LHS, and RHS.

◆ operator<() [1/2]

bool llvm::gsym::operator< ( const FunctionInfo LHS,
const FunctionInfo RHS 
)
inline

This sorting will order things consistently by address range first, but then followed by increasing levels of debug info like inline information and line tables.

We might end up with a FunctionInfo from debug info that will have the same range as one from the symbol table, but we want to quickly be able to sort and use the best version when creating the final GSYM file. This function compares the inline information as we have seen cases where LTO can generate a wide array of differing inline information, mostly due to messing up the address ranges for inlined functions, so the inline information with the most entries will appeear last. If the inline information match, either by both function infos not having any or both being exactly the same, we will then compare line tables. Comparing line tables allows the entry with the most line entries to appear last. This ensures we are able to save the FunctionInfo with the most debug info into the GSYM file.

Definition at line 231 of file FunctionInfo.h.

References LHS, and RHS.

◆ operator<() [2/2]

bool llvm::gsym::operator< ( const LineEntry LHS,
const LineEntry RHS 
)
inline

Definition at line 42 of file LineEntry.h.

References LHS, and RHS.

◆ operator<<() [1/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const CallSiteInfo CSI 
)

◆ operator<<() [2/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const CallSiteInfoCollection CSIC 
)

Definition at line 247 of file CallSiteInfo.cpp.

References llvm::gsym::CallSiteInfoCollection::CallSites, and OS.

◆ operator<<() [3/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const FunctionInfo R 
)

◆ operator<<() [4/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const gsym::LineTable LT 
)

Definition at line 284 of file LineTable.cpp.

References OS.

◆ operator<<() [5/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const InlineInfo FI 
)

Definition at line 20 of file InlineInfo.cpp.

References llvm::First, HEX32, II, OS, and Range.

◆ operator<<() [6/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const LineEntry LE 
)
inline

Definition at line 31 of file LineEntry.h.

References llvm::format(), HEX64, and OS.

◆ operator<<() [7/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const llvm::gsym::Header H 
)

Definition at line 23 of file Header.cpp.

References llvm::format_hex_no_prefix(), H, HEX16, HEX32, HEX64, HEX8, I, and OS.

◆ operator<<() [8/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const LookupResult R 
)

◆ operator<<() [9/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const SourceLocation R 
)

◆ operator<<() [10/10]

raw_ostream & llvm::gsym::operator<< ( raw_ostream OS,
const StringTable S 
)
inline

◆ operator==() [1/7]

bool llvm::gsym::operator== ( const FunctionInfo LHS,
const FunctionInfo RHS 
)
inline

Definition at line 210 of file FunctionInfo.h.

References LHS, llvm::operator==(), and RHS.

◆ operator==() [2/7]

bool llvm::gsym::operator== ( const Header LHS,
const Header RHS 
)

Definition at line 101 of file Header.cpp.

References LHS, memcmp, and RHS.

◆ operator==() [3/7]

bool llvm::gsym::operator== ( const InlineInfo LHS,
const InlineInfo RHS 
)
inline

Definition at line 180 of file InlineInfo.h.

References LHS, llvm::operator==(), and RHS.

◆ operator==() [4/7]

bool llvm::gsym::operator== ( const LineEntry LHS,
const LineEntry RHS 
)
inline

Definition at line 36 of file LineEntry.h.

References LHS, llvm::operator==(), and RHS.

◆ operator==() [5/7]

bool llvm::gsym::operator== ( const LookupResult LHS,
const LookupResult RHS 
)
inline

Definition at line 55 of file LookupResult.h.

References LHS, llvm::operator==(), and RHS.

◆ operator==() [6/7]

bool llvm::gsym::operator== ( const MergedFunctionsInfo LHS,
const MergedFunctionsInfo RHS 
)

References llvm::operator==().

◆ operator==() [7/7]

bool llvm::gsym::operator== ( const SourceLocation LHS,
const SourceLocation RHS 
)
inline

Definition at line 29 of file LookupResult.h.

References LHS, llvm::operator==(), and RHS.

◆ skipRange()

void llvm::gsym::skipRange ( DataExtractor Data,
uint64_t Offset 
)

Skip an address range object in the specified data a the specified offset.

Parameters
DataThe binary stream to read the data from.
OffsetThe byte offset within Data.

Definition at line 50 of file ExtractRanges.cpp.

References llvm::Data, and llvm::Offset.

Referenced by skipRanges().

◆ skipRanges()

uint64_t llvm::gsym::skipRanges ( DataExtractor Data,
uint64_t Offset 
)

Skip an address range object in the specified data a the specified offset.

Parameters
DataThe binary stream to read the data from.
OffsetThe byte offset within Data.
Returns
The number of address ranges that were skipped.

Definition at line 55 of file ExtractRanges.cpp.

References llvm::Data, I, llvm::Offset, and skipRange().

Referenced by skip().

Variable Documentation

◆ GSYM_CIGAM

constexpr uint32_t llvm::gsym::GSYM_CIGAM = 0x4d595347
constexpr

Definition at line 25 of file Header.h.

◆ GSYM_MAGIC

constexpr uint32_t llvm::gsym::GSYM_MAGIC = 0x4753594d
constexpr

Definition at line 24 of file Header.h.

Referenced by llvm::gsym::Header::checkForError(), and llvm::gsym::GsymCreator::encode().

◆ GSYM_MAX_UUID_SIZE

constexpr size_t llvm::gsym::GSYM_MAX_UUID_SIZE = 20
constexpr

Definition at line 27 of file Header.h.

Referenced by llvm::gsym::Header::checkForError(), and llvm::gsym::Header::decode().

◆ GSYM_VERSION

constexpr uint32_t llvm::gsym::GSYM_VERSION = 1
constexpr

Definition at line 26 of file Header.h.

Referenced by llvm::gsym::Header::checkForError(), and llvm::gsym::GsymCreator::encode().