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)