Issue with multiple threads using remote protocol on riscv32

"Denio, Mike via Gdb" <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
I am seeing an issue with the remote protocol  on GDB with multiple threads on a riscv32 using the continue command. Not sure if it's a bug or just me, but it may be me as I am new to GDB.

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) set *0x10000000=1
(gdb) c -a&

The problem is that the "c -a&" is implemented by a 'vCont;c:1' followed by a 'vCont;c', essentially telling thread 1 to continue twice, causing it to skip over a break.

Am I interpreting the commands incorrectly or am I sending GDB something incorrect that is confusing it?

Thanks,
Mike

---[ Remote Log ]------------------

'+'                     --->
'qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+' --->
                        <--- '+$hwbreak+;vContSupported+;QStartNoAckMode+;QNonStop+;PacketSize=410#e3'
'+'                     --->
'vMustReplyEmpty'       --->
                        <--- '+$#00'
'+'                     --->
'QStartNoAckMode'       --->
                        <--- '+$OK#9a'
'+'                     --->
'!'                     --->
                        <--- '$OK#9a'
'Hg0'                   --->
                        <--- '$OK#9a'
'QNonStop:1'            --->
                        <--- '$OK#9a'
'qfThreadInfo'          --->
                        <--- '$m1,2#fc'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'qAttached'             --->
                        <--- '$1#31'
'qTStatus'              --->
                        <--- '$#00'
'?'                     --->
                        <--- '$OK#9a'
'vCont?'                --->
                        <--- '$vCont;c;C;s;t#83'
'vCont;t:2'             --->
                        <--- '$OK#9a'
                        <--- '%Stop:T00thread:2;#b3'
'qSymbol::'             --->
                        <--- '$OK#9a'
'vStopped'              --->
                        <--- '$OK#9a'
'Hg2'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#80'
'qOffsets'              --->
                        <--- '$#00'
'qSymbol::'             --->
                        <--- '$OK#9a'
'vCont;c'               --->
                        <--- '$OK#9a'

(gdb) interrupt -a

'vCont;t'               --->
                        <--- '$OK#9a'
                        <--- '%Stop:T00thread:1;#b2'
'vStopped'              --->
                        <--- '$T00thread:2;#d3'
'vStopped'              --->
                        <--- '$OK#9a'
'Hg1'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#80'
'qfThreadInfo'          --->
                        <--- '$m1,2#fc'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'Hg2'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#80'
'qfThreadInfo'          --->
                       <--- '$m1,2#fc'
'qsThreadInfo'          --->
                        <--- '$l#6c'

(gdb) set *0x10000000 = 1

'X10000000,0:'          --->
                        <--- '$#00'
'M10000000,4:01000000'  --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#80'
'Hg1'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#80'

(gdb) c -a&

'vCont;c:1'             --->
                        <--- '$OK#9a'
                        <--- '%Stop:T05thread:1;#b7' // THIS STOP IS LOST BECAUSE GDB IMMEDIATELY TELLS THREAD 1 TO CONTINUE
'vCont;c'               --->
                        <--- '$OK#9a'
'vStopped'              --->
                        <--- '$OK#9a'
                        <--- '%Stop:T05thread:2;#b8'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000002084000800041000200400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000#a5'
'qfThreadInfo'          --->
                        <--- '$m1,2#fc'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'vStopped'              --->
                        <--- '$OK#9a'
'Hg2'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#80'
'qfThreadInfo'          --->
                        <--- '$m1,2#fc'
'qsThreadInfo'          --->
                        <--- '$l#6c'
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.