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