LLDB mainline
|
Attempt to interpret the function's code if it does not require running the target. More...
#include "lldb/Expression/IRInterpreter.h"
Static Public Member Functions | |
static bool | CanInterpret (llvm::Module &module, llvm::Function &function, lldb_private::Status &error, const bool support_function_calls) |
static bool | Interpret (llvm::Module &module, llvm::Function &function, llvm::ArrayRef< lldb::addr_t > args, lldb_private::IRExecutionUnit &execution_unit, lldb_private::Status &error, lldb::addr_t stack_frame_bottom, lldb::addr_t stack_frame_top, lldb_private::ExecutionContext &exe_ctx, lldb_private::Timeout< std::micro > timeout) |
Static Private Member Functions | |
static bool | supportsFunction (llvm::Function &llvm_function, lldb_private::Status &err) |
Attempt to interpret the function's code if it does not require running the target.
In some cases, the IR for an expression can be evaluated entirely in the debugger, manipulating variables but not executing any code in the target. The IRInterpreter attempts to do this.
Definition at line 36 of file IRInterpreter.h.
|
static |
Definition at line 523 of file IRInterpreter.cpp.
References CanIgnoreCall(), CanResolveConstant(), error(), interpreter_internal_error, LLDB_LOGF, PrintType(), PrintValue(), too_many_functions_error, unsupported_opcode_error, and unsupported_operand_error.
Referenced by lldb_private::ClangExpressionParser::DoPrepareForExecution().
|
static |
Definition at line 684 of file IRInterpreter.cpp.
References InterpreterStackFrame::AssignValue(), bad_value_error, CanIgnoreCall(), lldb_private::Status::Clear(), lldb_private::ABI::CallArgument::data_up, lldb::eExpressionCompleted, error(), InterpreterStackFrame::EvaluateValue(), lldb_private::IRMemoryMap::Free(), lldb_private::IRMemoryMap::GetAllocSize(), lldb_private::WritableDataBuffer::GetBytes(), lldb_private::DataBufferHeap::GetByteSize(), lldb_private::Target::GetDebugger(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Value::GetScalar(), lldb_private::ExecutionContext::GetTargetPtr(), lldb_private::ExecutionContext::GetThreadPtr(), lldb_private::ExecutionContext::GetThreadRef(), lldb_private::ValueObject::GetValue(), lldb_private::ABI::CallArgument::HostPointer, interpreter_internal_error, interrupt_error, INTERRUPT_REQUESTED, lldb_private::Scalar::IsZero(), InterpreterStackFrame::Jump(), LLDB_INVALID_ADDRESS, LLDB_LOGF, InterpreterStackFrame::m_frame_process_address, InterpreterStackFrame::m_ie, InterpreterStackFrame::m_ii, InterpreterStackFrame::m_prev_bb, InterpreterStackFrame::m_values, InterpreterStackFrame::MakeArgument(), lldb_private::Scalar::MakeSigned(), lldb_private::Scalar::MakeUnsigned(), InterpreterStackFrame::Malloc(), memory_allocation_error, memory_read_error, memory_write_error, PrintValue(), lldb_private::IRMemoryMap::ReadMemory(), lldb_private::IRMemoryMap::ReadPointerFromMemory(), InterpreterStackFrame::ResolveValue(), lldb_private::Process::RunThreadPlan(), lldb_private::Process::SetRunningUserExpression(), lldb_private::Scalar::ShiftRightLogical(), lldb_private::ABI::CallArgument::size, lldb_private::Scalar::SLongLong(), lldb_private::Status::Success(), InterpreterStackFrame::SummarizeValue(), lldb_private::ABI::CallArgument::TargetValue, timeout_error, lldb_private::ABI::CallArgument::type, lldb_private::Scalar::ULongLong(), unsupported_opcode_error, UNUSED_IF_ASSERT_DISABLED, lldb_private::ABI::CallArgument::value, lldb_private::IRMemoryMap::WriteMemory(), and lldb_private::IRMemoryMap::WritePointerToMemory().
Referenced by lldb_private::LLVMUserExpression::DoExecute().
|
staticprivate |