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