diff options
Diffstat (limited to 'lldb/include/lldb/Expression/IRInterpreter.h')
| -rw-r--r-- | lldb/include/lldb/Expression/IRInterpreter.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lldb/include/lldb/Expression/IRInterpreter.h b/lldb/include/lldb/Expression/IRInterpreter.h new file mode 100644 index 000000000000..6148093e718f --- /dev/null +++ b/lldb/include/lldb/Expression/IRInterpreter.h @@ -0,0 +1,55 @@ +//===-- IRInterpreter.h -----------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef liblldb_IRInterpreter_h_ +#define liblldb_IRInterpreter_h_ + +#include "lldb/Utility/ConstString.h" +#include "lldb/Utility/Stream.h" +#include "lldb/lldb-public.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/Pass.h" + +namespace llvm { +class Function; +class Module; +} + +namespace lldb_private { + +class ClangExpressionDeclMap; +class IRMemoryMap; +} + +/// \class IRInterpreter IRInterpreter.h "lldb/Expression/IRInterpreter.h" +/// 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. +class IRInterpreter { +public: + 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); + +private: + static bool supportsFunction(llvm::Function &llvm_function, + lldb_private::Status &err); +}; + +#endif |
