RISC-V: Search for mapping symbols from the last one found

With previous behaviour, multiple mapping symbols within the same
function would result in all the mapping symbols being searched.
This could slow down disassembly dramatically.

Multiple mapping symbols within a function can be a result of encoding
instructions as data, like sometimes seen in random instruction
generators.

opcodes/ChangeLog:

	* riscv-dis.c (riscv_search_mapping_symbol): Use last mapping
	symbol if it exists.
This commit is contained in:
Joseph Faulls 2024-05-15 06:59:58 +08:00 committed by Nelson Chu
parent da3ce5c46e
commit 7a7ec56c81

View File

@ -1076,11 +1076,9 @@ riscv_search_mapping_symbol (bfd_vma memaddr,
from_last_map_symbol = (last_map_symbol >= 0
&& info->stop_offset == last_stop_offset);
/* Start scanning at the start of the function, or wherever
we finished last time. */
n = info->symtab_pos + 1;
if (from_last_map_symbol && n >= last_map_symbol)
n = last_map_symbol;
/* Start scanning from wherever we finished last time, or the start
of the function. */
n = from_last_map_symbol ? last_map_symbol : info->symtab_pos + 1;
/* Find the suitable mapping symbol to dump. */
for (; n < info->symtab_size; n++)
@ -1105,9 +1103,7 @@ riscv_search_mapping_symbol (bfd_vma memaddr,
can pick up a text mapping symbol of a preceeding section. */
if (!found)
{
n = info->symtab_pos;
if (from_last_map_symbol && n >= last_map_symbol)
n = last_map_symbol;
n = from_last_map_symbol ? last_map_symbol : info->symtab_pos;
for (; n >= 0; n--)
{