Re: Step causes GDB to spin in infinite loop when PC doesn't change

Luis Machado via Gdb
2022-03-18T17:28:47Z

Hi,

On 3/18/22 16:33, Denio, Mike via Gdb wrote:
> I am seeing an issue with the remote protocol on GDB with multiple threads on a riscv32 using the step command. Not sure if it's a bug or just me, but it seems like a legitimate bug.
>
> I am using a custom server. The behavior is the same on both GDB 11.1 and 11.2.
>
> This GDB was configured as follows:
> configure --host=x86_64-pc-linux-gnu --target=riscv32-unknown-elf
> --with-auto-load-dir=$debugdir:$datadir/auto-load
> --with-auto-load-safe-path=$debugdir:$datadir/auto-load
> --with-expat
> --with-gdb-datadir=/usr/local/share/gdb (relocatable)
> --with-jit-reader-dir=/usr/local/lib/gdb (relocatable)
> --without-libunwind-ia64
> --with-lzma
> --without-babeltrace
> --without-intel-pt
> --with-mpfr
> --without-xxhash
> --with-python=/usr
> --with-python-libdir=/usr/lib
> --without-debuginfod
> --without-guile
> --disable-source-highlight
> --with-separate-debug-dir=/usr/local/lib/debug (relocatable)
>
> I am running in non-stop mode. A full log of the test is at the end of the email. The GDB commands I execute after connecting are:
> (gdb) interrupt -a
> (gdb) s
>
> The problem is that my code starts off in an infinite loop (endz: jal x0,endz), with the cores basically waiting for an interrupt. If I execute a 'step' command, GDB will basically keep sending "vCont;s:2" in an infinite loop, until the PC addr of thread 2 changes. It also occurs if I fall into an infinite loop while stepping. It doesn't need to be the first instruction.

That's what the step/next commands are designed to do. GDB will keep
stepping until it sees a line change. I suppose a "continue" command
here would be more appropriate, as GDB will send it once and keep
waiting for the outcome. stepi/nexti would be undesirable given they
will stop after a single instruction.