Path: blob/main/contrib/llvm-project/lldb/source/Expression/ExpressionParser.cpp
39587 views
//===-- ExpressionParser.cpp ----------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Expression/ExpressionParser.h"9#include "lldb/Expression/DiagnosticManager.h"10#include "lldb/Expression/IRExecutionUnit.h"11#include "lldb/Target/ExecutionContext.h"12#include "lldb/Target/ThreadPlanCallFunction.h"1314using namespace lldb;15using namespace lldb_private;1617Status ExpressionParser::PrepareForExecution(18addr_t &func_addr, addr_t &func_end,19std::shared_ptr<IRExecutionUnit> &execution_unit_sp,20ExecutionContext &exe_ctx, bool &can_interpret,21ExecutionPolicy execution_policy) {22Status status =23DoPrepareForExecution(func_addr, func_end, execution_unit_sp, exe_ctx,24can_interpret, execution_policy);25if (status.Success() && exe_ctx.GetProcessPtr() && exe_ctx.HasThreadScope())26status = RunStaticInitializers(execution_unit_sp, exe_ctx);2728return status;29}3031Status32ExpressionParser::RunStaticInitializers(IRExecutionUnitSP &execution_unit_sp,33ExecutionContext &exe_ctx) {34Status err;3536if (!execution_unit_sp.get()) {37err.SetErrorString(38"can't run static initializers for a NULL execution unit");39return err;40}4142if (!exe_ctx.HasThreadScope()) {43err.SetErrorString("can't run static initializers without a thread");44return err;45}4647std::vector<addr_t> static_initializers;4849execution_unit_sp->GetStaticInitializers(static_initializers);5051for (addr_t static_initializer : static_initializers) {52EvaluateExpressionOptions options;5354ThreadPlanSP call_static_initializer(new ThreadPlanCallFunction(55exe_ctx.GetThreadRef(), Address(static_initializer), CompilerType(),56llvm::ArrayRef<addr_t>(), options));5758DiagnosticManager execution_errors;59ExpressionResults results =60exe_ctx.GetThreadRef().GetProcess()->RunThreadPlan(61exe_ctx, call_static_initializer, options, execution_errors);6263if (results != eExpressionCompleted) {64err.SetErrorStringWithFormat("couldn't run static initializer: %s",65execution_errors.GetString().c_str());66return err;67}68}6970return err;71}727374