Question on RiscV GDB remote protocol command 'T' in all-stop mode

"Denio, Mike via Gdb" <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
I have my GDB server running pretty will in non-stop mode. I have very little use for all-stop mode, other than I was considering using it for a pseudo "lock-step" mode where all my threads start and stop simultaneously. The issue I have is when all threads stop, what thread I should report as stopped?

Here is my inclination:
- Report the "current" thread if it is at a breakpoint
- Else report any other thread that is at a breakpoint
- Else report the "current" thread if nothing at a breakpoint

The issue I have is that I don't have a sure-fire way to know which thread GDB believes to be the current thread. The only 'Hc' command I get is 'Hc-1'. On the vCont, no thread is specified for continue (although there is for step). And finally, I have verified that the most recent 'Hg' does not always match the current thread when 'vCont' is sent.

The only command that seems to work is 'T'. When I swap threads using the thread command in GDB, I get a 'T' command with the current thread number. However, this does not match the definition of the 'T' command, which is "Find out if the thread thread-id is alive".

Below is a snippet of some GBD commands and the resulting server log. You can see that when I do "i threads", GDB puts a little '*' next to thread 3, which is the current thread. The only way for my server to track the current thread is via the 'T' command. Is this a safe way do to it, or is there another way?

Thanks,
Mike

GDB Log:
==================== 
(gdb) tar ext :9999
Remote debugging using :9999
startup () at r5_tests/c_test/boot.S:12
12        lui  x1, 0x70000          // LUI loads upper 20 bits of address (point to virtual DMA)
(gdb) thread 3 
[Switching to thread 3 (Thread 3)]
#0  startup () at r5_tests/c_test/boot.S:14
14        bne  x1, x0, endz         // Jump to IDLE if not core 0
(gdb) c&
Continuing.
(gdb) interrupt
(gdb) 
Thread 3 received signal SIGINT, Interrupt.
startup () at r5_tests/c_test/boot.S:14
14        bne  x1, x0, endz         // Jump to IDLE if not core 0
i threads
  Id   Target Id                 Frame 
  1    Thread 1 (ACTIVE) startup () at r5_tests/c_test/boot.S:12
  2    Thread 2 (ACTIVE) startup () at r5_tests/c_test/boot.S:13
* 3    Thread 3 (ACTIVE) startup () at r5_tests/c_test/boot.S:14
  4    Thread 4 (ACTIVE) startup () at r5_tests/c_test/boot.S:15
(gdb) c&
Continuing.
(gdb) interrupt
(gdb) 
Thread 3 received signal SIGINT, Interrupt.
startup () at r5_tests/c_test/boot.S:14
14        bne  x1, x0, endz         // Jump to IDLE if not core 0


GDB Remote Server Log:
====================
Bound to port 9999
New connection
'+'                     --->
'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:0'            --->
                        <--- '$OK#9a'
'qTStatus'              --->
                        <--- '$#00'
'?'                     --->
                        <--- '$T00thread:1;#d2'
'qfThreadInfo'          --->
                        <--- '$m1,2,3,4#bb'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'qAttached'             --->
                        <--- '$1#31'
'Hc-1'                  --->
                        <--- '$OK#9a'
'qOffsets'              --->
                        <--- '$#00'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'qfThreadInfo'          --->
                        <--- '$m1,2,3,4#bb'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'qSymbol::'             --->
                        <--- '$OK#9a'
'T3'                    --->
                        <--- '$OK#9a'
'Hg3'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'vCont?'                --->
                        <--- '$vCont;c;C;s;t#83'
'vCont;c'               --->
'Ctrl-C'                --->
                        <--- '$T02thread:3;#d6'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'qfThreadInfo'          --->
                        <--- '$m1,2,3,4#bb'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'qfThreadInfo'          --->
                        <--- '$m1,2,3,4#bb'
'qsThreadInfo'          --->
                        <--- '$l#6c'
'qThreadExtraInfo,1'    --->
                        <--- '$414354495645#a9'
'qThreadExtraInfo,2'    --->
                        <--- '$414354495645#aa'
'qThreadExtraInfo,3'    --->
                        <--- '$414354495645#ab'
'qThreadExtraInfo,4'    --->
                        <--- '$414354495645#ac'
'Hg1'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'Hg2'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'Hg4'                   --->
                        <--- '$OK#9a'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'vCont;c'               --->
'Ctrl-C'                --->
                        <--- '$T02thread:3;#d6'
'g'                     --->
                        <--- '$0000000000000000000000000000000000000000000000000000000000...'
'qfThreadInfo'          --->
                        <--- '$m1,2,3,4#bb'
'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.