diff --git a/Userland/DevTools/Profiler/DisassemblyModel.cpp b/Userland/DevTools/Profiler/DisassemblyModel.cpp index eba347d5982..cabcd56e1f6 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 fb00aa7ebb3..adc8f20d62b 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; }; }