]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
RISC-V: Search for mapping symbols from the last one found
authorJoseph Faulls <Joseph.Faulls@imgtec.com>
Tue, 14 May 2024 22:59:58 +0000 (06:59 +0800)
committerNelson Chu <nelson@rivosinc.com>
Tue, 14 May 2024 23:01:54 +0000 (07:01 +0800)
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.

opcodes/riscv-dis.c

index 684098d386a83b7aa00d2a21683014b704f97039..e6596c47423b832d5f885480dec198ec9f33fcaa 100644 (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--)
        {