summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/DevTools/Profiler/DisassemblyModel.cpp2
-rw-r--r--Userland/Libraries/LibX86/ELFSymbolProvider.h8
2 files changed, 6 insertions, 4 deletions
diff --git a/Userland/DevTools/Profiler/DisassemblyModel.cpp b/Userland/DevTools/Profiler/DisassemblyModel.cpp
index eba347d598..cabcd56e1f 100644
--- a/Userland/DevTools/Profiler/DisassemblyModel.cpp
+++ b/Userland/DevTools/Profiler/DisassemblyModel.cpp
@@ -87,7 +87,7 @@ DisassemblyModel::DisassemblyModel(Profile& profile, ProfileNode& node)
auto symbol_offset_from_function_start = node.address() - base_address - symbol->value();
auto view = symbol.value().raw_data().substring_view(symbol_offset_from_function_start);
- X86::ELFSymbolProvider symbol_provider(*elf);
+ X86::ELFSymbolProvider symbol_provider(*elf, base_address);
X86::SimpleInstructionStream stream((const u8*)view.characters_without_null_termination(), view.length());
X86::Disassembler disassembler(stream);
diff --git a/Userland/Libraries/LibX86/ELFSymbolProvider.h b/Userland/Libraries/LibX86/ELFSymbolProvider.h
index fb00aa7ebb..adc8f20d62 100644
--- a/Userland/Libraries/LibX86/ELFSymbolProvider.h
+++ b/Userland/Libraries/LibX86/ELFSymbolProvider.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020, the SerenityOS developers.
+ * Copyright (c) 2020-2021, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -13,17 +13,19 @@ namespace X86 {
class ELFSymbolProvider final : public SymbolProvider {
public:
- ELFSymbolProvider(const ELF::Image& elf)
+ ELFSymbolProvider(const ELF::Image& elf, FlatPtr base_address = 0)
: m_elf(elf)
+ , m_base_address(base_address)
{
}
virtual String symbolicate(FlatPtr address, u32* offset = nullptr) const override
{
- return m_elf.symbolicate(address, offset);
+ return m_elf.symbolicate(address - m_base_address, offset);
}
private:
const ELF::Image& m_elf;
+ FlatPtr m_base_address;
};
}