From 6d48b6724dbe49753f36f234d6d18a0c5a4db8f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Holz?= Date: Wed, 3 Jan 2024 16:25:40 +0100 Subject: [PATCH] LibELF: Ignore mapping symbols when symbolicating RISC-V ELFs --- Userland/Libraries/LibELF/Image.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibELF/Image.cpp b/Userland/Libraries/LibELF/Image.cpp index 98c3170508..fa71e01e12 100644 --- a/Userland/Libraries/LibELF/Image.cpp +++ b/Userland/Libraries/LibELF/Image.cpp @@ -421,12 +421,13 @@ Optional Image::find_symbol(FlatPtr address, u32* out_offset) con NEVER_INLINE void Image::sort_symbols() const { m_sorted_symbols.ensure_capacity(symbol_count()); - bool const is_aarch64 = header().e_machine == EM_AARCH64; - for_each_symbol([this, is_aarch64](auto const& symbol) { - // The AArch64 ABI marks the boundaries of literal pools in a function with $x/$d. + bool const is_aarch64_or_riscv = header().e_machine == EM_AARCH64 || header().e_machine == EM_RISCV; + for_each_symbol([this, is_aarch64_or_riscv](auto const& symbol) { + // The AArch64 and RISC-V ABIs mark the boundaries of literal pools in a function with $x/$d. // https://github.com/ARM-software/abi-aa/blob/2023q1-release/aaelf64/aaelf64.rst#mapping-symbols + // https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#mapping-symbol // Skip them so we don't accidentally print these instead of function names. - if (is_aarch64 && (symbol.name().starts_with("$x"sv) || symbol.name().starts_with("$d"sv))) + if (is_aarch64_or_riscv && (symbol.name().starts_with("$x"sv) || symbol.name().starts_with("$d"sv))) return; // STT_SECTION has the same address as the first function in the section, but shows up as the empty string. if (symbol.type() == STT_SECTION)