• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/llvm-project/lldb/source/Plugins/DynamicLoader/wasm-DYLD/
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