-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[LLDB] Add DynamicLoaderWasmDYLD plugin for WebAssembly debugging
Add a dynamic loader plug-in class for WebAssembly modules. Differential Revision: https://reviews.llvm.org/D72751
- Loading branch information
1 parent
aedc196
commit c112190
Showing
16 changed files
with
464 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
add_lldb_library(lldbPluginDynamicLoaderWasmDYLD PLUGIN | ||
DynamicLoaderWasmDYLD.cpp | ||
|
||
LINK_LIBS | ||
lldbCore | ||
lldbTarget | ||
LINK_COMPONENTS | ||
Support | ||
) |
70 changes: 70 additions & 0 deletions
70
lldb/source/Plugins/DynamicLoader/wasm-DYLD/DynamicLoaderWasmDYLD.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
//===-- DynamicLoaderWasmDYLD.cpp -----------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "DynamicLoaderWasmDYLD.h" | ||
|
||
#include "Plugins/ObjectFile/wasm/ObjectFileWasm.h" | ||
#include "lldb/Core/Module.h" | ||
#include "lldb/Core/PluginManager.h" | ||
#include "lldb/Core/Section.h" | ||
#include "lldb/Target/Process.h" | ||
#include "lldb/Target/Target.h" | ||
#include "lldb/Utility/Log.h" | ||
|
||
using namespace lldb; | ||
using namespace lldb_private; | ||
using namespace lldb_private::wasm; | ||
|
||
LLDB_PLUGIN_DEFINE(DynamicLoaderWasmDYLD) | ||
|
||
DynamicLoaderWasmDYLD::DynamicLoaderWasmDYLD(Process *process) | ||
: DynamicLoader(process) {} | ||
|
||
void DynamicLoaderWasmDYLD::Initialize() { | ||
PluginManager::RegisterPlugin(GetPluginNameStatic(), | ||
GetPluginDescriptionStatic(), CreateInstance); | ||
} | ||
|
||
ConstString DynamicLoaderWasmDYLD::GetPluginNameStatic() { | ||
static ConstString g_plugin_name("wasm-dyld"); | ||
return g_plugin_name; | ||
} | ||
|
||
const char *DynamicLoaderWasmDYLD::GetPluginDescriptionStatic() { | ||
return "Dynamic loader plug-in that watches for shared library " | ||
"loads/unloads in WebAssembly engines."; | ||
} | ||
|
||
DynamicLoader *DynamicLoaderWasmDYLD::CreateInstance(Process *process, | ||
bool force) { | ||
bool should_create = force; | ||
if (!should_create) { | ||
should_create = | ||
(process->GetTarget().GetArchitecture().GetTriple().getArch() == | ||
llvm::Triple::wasm32); | ||
} | ||
|
||
if (should_create) | ||
return new DynamicLoaderWasmDYLD(process); | ||
|
||
return nullptr; | ||
} | ||
|
||
void DynamicLoaderWasmDYLD::DidAttach() { | ||
Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER)); | ||
LLDB_LOGF(log, "DynamicLoaderWasmDYLD::%s()", __FUNCTION__); | ||
|
||
// Ask the process for the list of loaded WebAssembly modules. | ||
auto error = m_process->LoadModules(); | ||
LLDB_LOG_ERROR(log, std::move(error), "Couldn't load modules: {0}"); | ||
} | ||
|
||
ThreadPlanSP DynamicLoaderWasmDYLD::GetStepThroughTrampolinePlan(Thread &thread, | ||
bool stop) { | ||
return ThreadPlanSP(); | ||
} |
48 changes: 48 additions & 0 deletions
48
lldb/source/Plugins/DynamicLoader/wasm-DYLD/DynamicLoaderWasmDYLD.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
//===-- DynamicLoaderWasmDYLD.h ---------------------------------*- C++ -*-===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef liblldb_Plugins_DynamicLoaderWasmDYLD_h_ | ||
#define liblldb_Plugins_DynamicLoaderWasmDYLD_h_ | ||
|
||
#include "lldb/Target/DynamicLoader.h" | ||
|
||
namespace lldb_private { | ||
namespace wasm { | ||
|
||
class DynamicLoaderWasmDYLD : public DynamicLoader { | ||
public: | ||
DynamicLoaderWasmDYLD(Process *process); | ||
|
||
static void Initialize(); | ||
static void Terminate() {} | ||
|
||
static ConstString GetPluginNameStatic(); | ||
static const char *GetPluginDescriptionStatic(); | ||
|
||
static DynamicLoader *CreateInstance(Process *process, bool force); | ||
|
||
/// DynamicLoader | ||
/// \{ | ||
void DidAttach() override; | ||
void DidLaunch() override {} | ||
Status CanLoadImage() override { return Status(); } | ||
lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread, | ||
bool stop) override; | ||
/// \} | ||
|
||
/// PluginInterface protocol. | ||
/// \{ | ||
ConstString GetPluginName() override { return GetPluginNameStatic(); } | ||
uint32_t GetPluginVersion() override { return 1; } | ||
/// \} | ||
}; | ||
|
||
} // namespace wasm | ||
} // namespace lldb_private | ||
|
||
#endif // liblldb_Plugins_DynamicLoaderWasmDYLD_h_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.