[PATCH] RISC-V: Search for mapping symbols from the last one found
Nelson Chu
nelson@rivosinc.com
Tue May 14 00:34:39 GMT 2024
There is a similar (n >= last_map_symbol) check when we need to backtrace
searching,
https://github.com/bminor/binutils-gdb/blob/master/opcodes/riscv-dis.c#L1109,
should we also need to fix this?
diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c
index 684098d386a..e6596c47423 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--)
On Mon, May 6, 2024 at 11:12 PM Palmer Dabbelt <palmer@dabbelt.com> wrote:
> On Fri, 03 May 2024 05:56:47 PDT (-0700), Joseph.Faulls@imgtec.com wrote:
> > Ping. I know it's a small patch, but it sped up disassembly of my use
> case from 5 minutes to 5 seconds.
> > ________________________________
> > From: Joseph Faulls
> > Sent: Thursday, April 18, 2024 11:48 AM
> > To: binutils@sourceware.org <binutils@sourceware.org>
> > Cc: nelson@rivosinc.com <nelson@rivosinc.com>
> > Subject: [PATCH] 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.
> >
> > Note for reviewers:
> > I don't see why the previous check 'n >= last_map_symbol exists'. Why do
> we force starting from the start of the function if the last mapping symbol
> was found after it? If I'm missing something, please let me know!
>
> Sorry for being slow here. Nelson and I were talking a bit right before
> the weekend and it looks like this was just a bug, but it's very similar
> to what the Arm code does.
>
I guess that is because we ported the code from aarch64 at the beginning,
and then kept their code to fix the stuff probably this one,
https://github.com/bminor/binutils-gdb/commit/51457761649bab6868343b3da2258d73a62901f7.
But even applying Joseph's patch, the testcase from the above commit also
looks good, and I also passed the riscv-gnu-toolchain for the above changes
(two places use n >= last_map_symbol). So it seems no reason to keep the
(n >= last_map_symbol) checks for now.
Nelson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20240514/5e503c4a/attachment.htm>
More information about the Binutils
mailing list