LLDB mainline
lldb_private::IndirectCallEdge Class Reference

An indirect call site. More...

#include <Function.h>

Inheritance diagram for lldb_private::IndirectCallEdge:
[legend]

Public Member Functions

Call site related structures
 IndirectCallEdge (DWARFExpressionList call_target, AddrType caller_address_type, lldb::addr_t caller_address, bool is_tail_call, CallSiteParameterArray &&parameters)
 Construct a call edge using a DWARFExpression to identify the callee, and a return PC within the calling function to identify a specific call site.
SymbolContext GetCallee (ModuleList &images, ExecutionContext &exe_ctx) override
 Get the callee's definition, resolved against images.
Public Member Functions inherited from lldb_private::CallEdge
std::pair< AddrType, lldb::addr_t > GetCallerAddress (Function &caller, Target &target) const
 Return an address in the caller.
bool IsTailCall () const
llvm::ArrayRef< CallSiteParameter > GetCallSiteParameters () const
 Get the call site parameters available at this call edge.
std::pair< bool, lldb::addr_t > GetSortKey () const
 Non-tail-calls go first, sorted by the return address.
virtual ~CallEdge ()
lldb::addr_t GetReturnPCAddress (Function &caller, Target &target) const
 Get the load PC address of the instruction which executes after the call returns.

Private Attributes

DWARFExpressionList call_target

Additional Inherited Members

Public Types inherited from lldb_private::CallEdge
enum class  AddrType : uint8_t { Call , AfterCall }
Protected Member Functions inherited from lldb_private::CallEdge
lldb::addr_t GetUnresolvedReturnPCAddress () const
 Like GetReturnPCAddress, but returns an unresolved file address.
 CallEdge (AddrType caller_address_type, lldb::addr_t caller_address, bool is_tail_call, CallSiteParameterArray &&parameters)
static lldb::addr_t GetLoadAddress (lldb::addr_t unresolved_pc, Function &caller, Target &target)
 Helper that finds the load address of unresolved_pc, a file address which refers to an instruction within caller.
static SymbolContext ResolveCallee (const Address &addr)
 Find the function containing addr.

Detailed Description

An indirect call site.

Used to represent call sites where the address of the callee is not fixed, e.g. a call to a C++ virtual function (where the address is loaded out of a vtable), or a call to a function pointer in C.

Definition at line 348 of file Function.h.

Constructor & Destructor Documentation

◆ IndirectCallEdge()

IndirectCallEdge::IndirectCallEdge ( DWARFExpressionList call_target,
AddrType caller_address_type,
lldb::addr_t caller_address,
bool is_tail_call,
CallSiteParameterArray && parameters )

Construct a call edge using a DWARFExpression to identify the callee, and a return PC within the calling function to identify a specific call site.

Definition at line 204 of file Function.cpp.

References call_target, lldb_private::CallEdge::CallEdge(), lldb_private::CallEdge::caller_address, lldb_private::CallEdge::caller_address_type, lldb_private::CallEdge::is_tail_call, and lldb_private::CallEdge::parameters.

Member Function Documentation

◆ GetCallee()

SymbolContext IndirectCallEdge::GetCallee ( ModuleList & images,
ExecutionContext & exe_ctx )
overridevirtual

Get the callee's definition, resolved against images.

The result is never cached. A CallEdge is owned by a Module in the shared module cache, so it outlives any one Target, while the callee it resolves to depends on that Target's image list and dies with its own module. The returned symbol context anchors that module.

Note that this might lazily invoke the DWARF parser. A register context from the caller's activation is needed to find indirect call targets.

Implements lldb_private::CallEdge.

Definition at line 213 of file Function.cpp.

References call_target, error(), lldb_private::GetLog(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::ExecutionContext::GetRegisterContext(), lldb_private::ExecutionContext::GetTargetPtr(), LLDB_INVALID_ADDRESS, LLDB_LOG, LLDB_LOG_ERROR, lldb_private::CallEdge::ResolveCallee(), lldb_private::Target::ResolveLoadAddress(), and lldb_private::Step.

Member Data Documentation

◆ call_target

DWARFExpressionList lldb_private::IndirectCallEdge::call_target
private

Definition at line 363 of file Function.h.

Referenced by GetCallee(), and IndirectCallEdge().


The documentation for this class was generated from the following files: