• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
19 using namespace lldb;
20 using namespace lldb_private;
21 using namespace lldb_private::wasm;
22 
LLDB_PLUGIN_DEFINE(DynamicLoaderWasmDYLD)23 LLDB_PLUGIN_DEFINE(DynamicLoaderWasmDYLD)
24 
25 DynamicLoaderWasmDYLD::DynamicLoaderWasmDYLD(Process *process)
26     : DynamicLoader(process) {}
27 
Initialize()28 void DynamicLoaderWasmDYLD::Initialize() {
29   PluginManager::RegisterPlugin(GetPluginNameStatic(),
30                                 GetPluginDescriptionStatic(), CreateInstance);
31 }
32 
GetPluginNameStatic()33 ConstString DynamicLoaderWasmDYLD::GetPluginNameStatic() {
34   static ConstString g_plugin_name("wasm-dyld");
35   return g_plugin_name;
36 }
37 
GetPluginDescriptionStatic()38 const char *DynamicLoaderWasmDYLD::GetPluginDescriptionStatic() {
39   return "Dynamic loader plug-in that watches for shared library "
40          "loads/unloads in WebAssembly engines.";
41 }
42 
CreateInstance(Process * process,bool force)43 DynamicLoader *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 
DidAttach()58 void 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 
GetStepThroughTrampolinePlan(Thread & thread,bool stop)67 ThreadPlanSP DynamicLoaderWasmDYLD::GetStepThroughTrampolinePlan(Thread &thread,
68                                                                  bool stop) {
69   return ThreadPlanSP();
70 }
71