LLDB
mainline
llvm-project
lldb
source
Plugins
Architecture
Wasm
ArchitectureWasm.cpp
Go to the documentation of this file.
1
//===----------------------------------------------------------------------===//
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 "
Plugins/Architecture/Wasm/ArchitectureWasm.h
"
10
#include "
lldb/Core/PluginManager.h
"
11
#include "
lldb/Symbol/Symbol.h
"
12
#include "
lldb/Symbol/SymbolContext.h
"
13
#include "
lldb/Utility/ArchSpec.h
"
14
15
using namespace
lldb_private
;
16
using namespace
lldb
;
17
18
LLDB_PLUGIN_DEFINE
(
ArchitectureWasm
)
19
20
void
ArchitectureWasm
::
Initialize
() {
21
PluginManager::RegisterPlugin
(
GetPluginNameStatic
(),
22
"WebAssembly-specific algorithms"
,
23
&
ArchitectureWasm::Create
);
24
}
25
26
void
ArchitectureWasm::Terminate
() {
27
PluginManager::UnregisterPlugin
(&
ArchitectureWasm::Create
);
28
}
29
30
std::unique_ptr<Architecture>
ArchitectureWasm::Create
(
const
ArchSpec
&arch) {
31
llvm::Triple::ArchType machine = arch.
GetMachine
();
32
if
(machine != llvm::Triple::wasm32 && machine != llvm::Triple::wasm64)
33
return
nullptr
;
34
return
std::unique_ptr<Architecture>(
new
ArchitectureWasm
());
35
}
36
37
Address
ArchitectureWasm::SkipFunctionHeader
(
Address
addr)
const
{
38
// The header is recorded as the symbol's prologue.
39
SymbolContext
sc;
40
addr.
CalculateSymbolContext
(&sc, eSymbolContextSymbol);
41
if
(!sc.
symbol
)
42
return
addr;
43
44
const
uint32_t header_size = sc.
symbol
->
GetPrologueByteSize
();
45
if
(!header_size)
46
return
addr;
47
48
const
addr_t
symbol_addr = sc.
symbol
->
GetAddress
().
GetFileAddress
();
49
const
addr_t
this_addr = addr.
GetFileAddress
();
50
if
(this_addr < symbol_addr || this_addr >= symbol_addr + header_size)
51
return
addr;
52
53
addr.
Slide
(symbol_addr + header_size - this_addr);
54
return
addr;
55
}
ArchSpec.h
ArchitectureWasm.h
PluginManager.h
LLDB_PLUGIN_DEFINE
#define LLDB_PLUGIN_DEFINE(PluginName)
Definition
PluginManager.h:45
SymbolContext.h
Symbol.h
lldb_private::Address
A section + offset based address class.
Definition
Address.h:62
lldb_private::Address::CalculateSymbolContext
uint32_t CalculateSymbolContext(SymbolContext *sc, lldb::SymbolContextItem resolve_scope=lldb::eSymbolContextEverything) const
Reconstruct a symbol context from an address.
Definition
Address.cpp:819
lldb_private::Address::Slide
bool Slide(int64_t offset)
Definition
Address.h:446
lldb_private::Address::GetFileAddress
lldb::addr_t GetFileAddress() const
Get the file address.
Definition
Address.cpp:281
lldb_private::ArchSpec
An architecture specification class.
Definition
ArchSpec.h:32
lldb_private::ArchSpec::GetMachine
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
Definition
ArchSpec.cpp:881
lldb_private::ArchitectureWasm
Definition
ArchitectureWasm.h:16
lldb_private::ArchitectureWasm::SkipFunctionHeader
Address SkipFunctionHeader(Address addr) const override
A WebAssembly function begins with a local variable declaration header that is part of the function b...
Definition
ArchitectureWasm.cpp:37
lldb_private::ArchitectureWasm::Create
static std::unique_ptr< Architecture > Create(const ArchSpec &arch)
Definition
ArchitectureWasm.cpp:30
lldb_private::ArchitectureWasm::Initialize
static void Initialize()
Definition
ArchitectureWasm.cpp:20
lldb_private::ArchitectureWasm::ArchitectureWasm
ArchitectureWasm()=default
lldb_private::ArchitectureWasm::Terminate
static void Terminate()
Definition
ArchitectureWasm.cpp:26
lldb_private::ArchitectureWasm::GetPluginNameStatic
static llvm::StringRef GetPluginNameStatic()
Definition
ArchitectureWasm.h:18
lldb_private::PluginManager::RegisterPlugin
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ABICreateInstance create_callback)
Definition
PluginManager.cpp:716
lldb_private::PluginManager::UnregisterPlugin
static bool UnregisterPlugin(ABICreateInstance create_callback)
Definition
PluginManager.cpp:722
lldb_private::SymbolContext
Defines a symbol context baton that can be handed other debug core functions.
Definition
SymbolContext.h:37
lldb_private::SymbolContext::symbol
Symbol * symbol
The Symbol for a given query.
Definition
SymbolContext.h:340
lldb_private::Symbol::GetAddress
Address GetAddress() const
Definition
Symbol.h:89
lldb_private::Symbol::GetPrologueByteSize
uint32_t GetPrologueByteSize()
Definition
Symbol.cpp:313
lldb_private
A class that represents a running process on the host machine.
Definition
SBAddressRange.h:14
lldb
Definition
SBAddress.h:15
lldb::addr_t
uint64_t addr_t
Definition
lldb-types.h:80
Generated on
for LLDB by
1.14.0