|
LLDB mainline
|
An indirect call site. More...
#include <Function.h>
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 &¶meters) | |
| 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 &¶meters) | |
| 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. | |
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.
| 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.
|
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.
|
private |
Definition at line 363 of file Function.h.
Referenced by GetCallee(), and IndirectCallEdge().