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