aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJoseph Faulls <Joseph.Faulls@imgtec.com>2024-05-15 06:59:58 +0800
committerNelson Chu <nelson@rivosinc.com>2024-05-15 07:01:54 +0800
commit7a7ec56c811f5c12dde96418e514a419e9ef43d0 (patch)
tree102216531f1e7a6dab6c9a206348b2f1b5586936 /opcodes
parentda3ce5c46e1d5a87f2d3cb90cbc1b67a3b8fbb34 (diff)
downloadbinutils-7a7ec56c811f5c12dde96418e514a419e9ef43d0.zip
binutils-7a7ec56c811f5c12dde96418e514a419e9ef43d0.tar.gz
binutils-7a7ec56c811f5c12dde96418e514a419e9ef43d0.tar.bz2
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.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/riscv-dis.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c
index 684098d3..e6596c4 100644
--- a/opcodes/riscv-dis.c
+++ b/opcodes/riscv-dis.c
@@ -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--)
{