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.
FunctionGetCallee (ModuleList &images, ExecutionContext &exe_ctx) override
 Get the callee's definition.
Public Member Functions inherited from lldb_private::CallEdge
std::pair< AddrType, lldb::addr_tGetCallerAddress (Function &caller, Target &target) const
 Return an address in the caller.
bool IsTailCall () const
llvm::ArrayRef< CallSiteParameterGetCallSiteParameters () const
 Get the call site parameters available at this call edge.
std::pair< bool, lldb::addr_tGetSortKey () 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.

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 363 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 210 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()

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

Get the callee's definition.

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 219 of file Function.cpp.

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

Member Data Documentation

◆ call_target

DWARFExpressionList lldb_private::IndirectCallEdge::call_target
private

Definition at line 377 of file Function.h.

Referenced by GetCallee(), and IndirectCallEdge().


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