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/LLDBLog.h"
18 #include "lldb/Utility/Log.h"
19 
20 using namespace lldb;
21 using namespace lldb_private;
22 using namespace lldb_private::wasm;
23 
24 LLDB_PLUGIN_DEFINE(DynamicLoaderWasmDYLD)
25 
26 DynamicLoaderWasmDYLD::DynamicLoaderWasmDYLD(Process *process)
27     : DynamicLoader(process) {}
28 
29 void DynamicLoaderWasmDYLD::Initialize() {
30   PluginManager::RegisterPlugin(GetPluginNameStatic(),
31                                 GetPluginDescriptionStatic(), CreateInstance);
32 }
33 
34 llvm::StringRef DynamicLoaderWasmDYLD::GetPluginDescriptionStatic() {
35   return "Dynamic loader plug-in that watches for shared library "
36          "loads/unloads in WebAssembly engines.";
37 }
38 
39 DynamicLoader *DynamicLoaderWasmDYLD::CreateInstance(Process *process,
40                                                      bool force) {
41   bool should_create = force;
42   if (!should_create) {
43     should_create =
44         (process->GetTarget().GetArchitecture().GetTriple().getArch() ==
45          llvm::Triple::wasm32);
46   }
47 
48   if (should_create)
49     return new DynamicLoaderWasmDYLD(process);
50 
51   return nullptr;
52 }
53 
54 void DynamicLoaderWasmDYLD::DidAttach() {
55   Log *log = GetLog(LLDBLog::DynamicLoader);
56   LLDB_LOGF(log, "DynamicLoaderWasmDYLD::%s()", __FUNCTION__);
57 
58   // Ask the process for the list of loaded WebAssembly modules.
59   auto error = m_process->LoadModules();
60   LLDB_LOG_ERROR(log, std::move(error), "Couldn't load modules: {0}");
61 }
62 
63 ThreadPlanSP DynamicLoaderWasmDYLD::GetStepThroughTrampolinePlan(Thread &thread,
64                                                                  bool stop) {
65   return ThreadPlanSP();
66 }
67