1c1121908SPaolo Severini //===-- DynamicLoaderWasmDYLD.cpp -----------------------------------------===// 2c1121908SPaolo Severini // 3c1121908SPaolo Severini // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4c1121908SPaolo Severini // See https://llvm.org/LICENSE.txt for license information. 5c1121908SPaolo Severini // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6c1121908SPaolo Severini // 7c1121908SPaolo Severini //===----------------------------------------------------------------------===// 8c1121908SPaolo Severini 9c1121908SPaolo Severini #include "DynamicLoaderWasmDYLD.h" 10c1121908SPaolo Severini 11c1121908SPaolo Severini #include "Plugins/ObjectFile/wasm/ObjectFileWasm.h" 12c1121908SPaolo Severini #include "lldb/Core/Module.h" 13c1121908SPaolo Severini #include "lldb/Core/PluginManager.h" 14c1121908SPaolo Severini #include "lldb/Core/Section.h" 15c1121908SPaolo Severini #include "lldb/Target/Process.h" 16c1121908SPaolo Severini #include "lldb/Target/Target.h" 17c1121908SPaolo Severini #include "lldb/Utility/Log.h" 18c1121908SPaolo Severini 19c1121908SPaolo Severini using namespace lldb; 20c1121908SPaolo Severini using namespace lldb_private; 21c1121908SPaolo Severini using namespace lldb_private::wasm; 22c1121908SPaolo Severini 23c1121908SPaolo Severini LLDB_PLUGIN_DEFINE(DynamicLoaderWasmDYLD) 24c1121908SPaolo Severini 25c1121908SPaolo Severini DynamicLoaderWasmDYLD::DynamicLoaderWasmDYLD(Process *process) 26c1121908SPaolo Severini : DynamicLoader(process) {} 27c1121908SPaolo Severini 28c1121908SPaolo Severini void DynamicLoaderWasmDYLD::Initialize() { 29c1121908SPaolo Severini PluginManager::RegisterPlugin(GetPluginNameStatic(), 30c1121908SPaolo Severini GetPluginDescriptionStatic(), CreateInstance); 31c1121908SPaolo Severini } 32c1121908SPaolo Severini 336fa1b4ffSPavel Labath llvm::StringRef DynamicLoaderWasmDYLD::GetPluginDescriptionStatic() { 34c1121908SPaolo Severini return "Dynamic loader plug-in that watches for shared library " 35c1121908SPaolo Severini "loads/unloads in WebAssembly engines."; 36c1121908SPaolo Severini } 37c1121908SPaolo Severini 38c1121908SPaolo Severini DynamicLoader *DynamicLoaderWasmDYLD::CreateInstance(Process *process, 39c1121908SPaolo Severini bool force) { 40c1121908SPaolo Severini bool should_create = force; 41c1121908SPaolo Severini if (!should_create) { 42c1121908SPaolo Severini should_create = 43c1121908SPaolo Severini (process->GetTarget().GetArchitecture().GetTriple().getArch() == 44c1121908SPaolo Severini llvm::Triple::wasm32); 45c1121908SPaolo Severini } 46c1121908SPaolo Severini 47c1121908SPaolo Severini if (should_create) 48c1121908SPaolo Severini return new DynamicLoaderWasmDYLD(process); 49c1121908SPaolo Severini 50c1121908SPaolo Severini return nullptr; 51c1121908SPaolo Severini } 52c1121908SPaolo Severini 53c1121908SPaolo Severini void DynamicLoaderWasmDYLD::DidAttach() { 54*a007a6d8SPavel Labath Log *log = GetLog(LLDBLog::DynamicLoader); 55c1121908SPaolo Severini LLDB_LOGF(log, "DynamicLoaderWasmDYLD::%s()", __FUNCTION__); 56c1121908SPaolo Severini 57c1121908SPaolo Severini // Ask the process for the list of loaded WebAssembly modules. 58c1121908SPaolo Severini auto error = m_process->LoadModules(); 59c1121908SPaolo Severini LLDB_LOG_ERROR(log, std::move(error), "Couldn't load modules: {0}"); 60c1121908SPaolo Severini } 61c1121908SPaolo Severini 62c1121908SPaolo Severini ThreadPlanSP DynamicLoaderWasmDYLD::GetStepThroughTrampolinePlan(Thread &thread, 63c1121908SPaolo Severini bool stop) { 64c1121908SPaolo Severini return ThreadPlanSP(); 65c1121908SPaolo Severini } 66