struct InlineInfo

Declaration

struct InlineInfo { /* full declaration omitted */ };

Description

Inline information stores the name of the inline function along with an array of address ranges. It also stores the call file and call line that called this inline function. This allows us to unwind inline call stacks back to the inline or concrete function that called this function. Inlined functions contained in this function are stored in the "Children" variable. All address ranges must be sorted and all address ranges of all children must be contained in the ranges of this function. Any clients that encode information will need to ensure the ranges are all contined correctly or lookups could fail. Add ranges in these objects must be contained in the top level FunctionInfo address ranges as well. ENCODING When saved to disk, the inline info encodes all ranges to be relative to a parent address range. This will be the FunctionInfo's start address if the InlineInfo is directly contained in a FunctionInfo, or a the start address of the containing parent InlineInfo's first "Ranges" member. 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 any encoded addresses easy to relocate as we just need to relocate the FunctionInfo's start address. - The AddressRanges member "Ranges" is encoded using an appropriate base address as described above. - UINT8 boolean value that specifies if the InlineInfo object has children. - UINT32 string table offset that points to the name of the inline function. - ULEB128 integer that specifies the file of the call site that called this function. - ULEB128 integer that specifies the source line of the call site that called this function. - if this object has children, enocode each child InlineInfo using the the first address range's start address as the base address.

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:60

Member Variables

public uint32_t Name
String table offset in the string table.
public uint32_t CallFile
1 based file index in the file table.
public uint32_t CallLine
Source line number.
public llvm::AddressRanges Ranges
public std::vector<InlineInfo> Children

Method Overview

  • public InlineInfo()
  • public void clear()
  • public static llvm::Expected<InlineInfo> decode(llvm::DataExtractor & Data, uint64_t BaseAddr)
  • public llvm::Error encode(llvm::gsym::FileWriter & O, uint64_t BaseAddr) const
  • public llvm::Optional<InlineArray> getInlineStack(uint64_t Addr) const
  • public bool isValid() const
  • public static llvm::Error lookup(const llvm::gsym::GsymReader & GR, llvm::DataExtractor & Data, uint64_t BaseAddr, uint64_t Addr, llvm::gsym::SourceLocations & SrcLocs)

Methods

InlineInfo()

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:67

void clear()

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:68

static llvm::Expected<InlineInfo> decode(
    llvm::DataExtractor& Data,
    uint64_t BaseAddr)

Description

Decode an InlineInfo object from a binary data stream.

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:151

Parameters

llvm::DataExtractor& Data
The binary stream to read the data from. This object must have the data for the InlineInfo object starting at offset zero. The data can contain more data than needed.
uint64_t BaseAddr
The base address to use when decoding all address ranges. This will be the FunctionInfo's start address if this object is directly contained in a FunctionInfo object, or the start address of the first address range in an InlineInfo object of this object is a child of another InlineInfo object.

Returns

An InlineInfo or an error describing the issue that was encountered during decoding.

llvm::Error encode(llvm::gsym::FileWriter& O,
                   uint64_t BaseAddr) const

Description

Encode this InlineInfo object into FileWriter stream.

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:167

Parameters

llvm::gsym::FileWriter& O
The binary stream to write the data to at the current file position.
uint64_t BaseAddr
The base address to use when encoding all address ranges. This will be the FunctionInfo's start address if this object is directly contained in a FunctionInfo object, or the start address of the first address range in an InlineInfo object of this object is a child of another InlineInfo object.

Returns

An error object that indicates success or failure or the encoding process.

llvm::Optional<InlineArray> getInlineStack(
    uint64_t Addr) const

Description

Lookup an address in the InlineInfo object This function is used to symbolicate an inline call stack and can turn one address in the program into one or more inline call stacks and have the stack trace show the original call site from non-inlined code.

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:136

Parameters

uint64_t Addr
the address to lookup

Returns

optional vector of InlineInfo objects that describe the inline call stack for a given address, false otherwise.

bool isValid() const

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:75

static llvm::Error lookup(
    const llvm::gsym::GsymReader& GR,
    llvm::DataExtractor& Data,
    uint64_t BaseAddr,
    uint64_t Addr,
    llvm::gsym::SourceLocations& SrcLocs)

Description

Lookup a single address within the inline info data. Clients have the option to decode an entire InlineInfo object (using InlineInfo::decode() ) or just find the matching inline info using this function. The benefit of using this function is that only the information needed for the lookup will be extracted, other info can be skipped and parsing can stop as soon as the deepest match is found. This allows symbolication tools to be fast and efficient and avoid allocation costs when doing lookups. This function will augment the SourceLocations array \a SrcLocs with any inline information that pertains to \a Addr. If no inline information exists for \a Addr, then \a SrcLocs will be left untouched. If there is inline information for \a Addr, then \a SrcLocs will be modifiied to contain the deepest most inline function's SourceLocation at index zero in the array and proceed up the the concrete function source file and line at the end of the array.

Declared at: llvm/include/llvm/DebugInfo/GSYM/InlineInfo.h:121

Parameters

const llvm::gsym::GsymReader& GR
The GSYM reader that contains the string and file table that will be used to fill in the source locations.
llvm::DataExtractor& Data
The binary stream to read the data from. This object must have the data for the LineTable object starting at offset zero. The data can contain more data than needed.
uint64_t BaseAddr
The base address to use when decoding the line table. This will be the FunctionInfo's start address and will be used to decode the correct addresses for the inline information.
uint64_t Addr
The address to lookup.
llvm::gsym::SourceLocations& SrcLocs
The inline source locations that matches \a Addr. This array must be initialized with the matching line entry from the line table upon entry. The name of the concrete function must be supplied since it will get pushed to the last SourceLocation entry and the inline information will fill in the source file and line from the inline information.

Returns

An error if the inline information is corrupt, or Error::success() for all other cases, even when no information is added to \a SrcLocs.