[Qemu-devel] [PATCH v8 0/2] Qemu: gdbstub: fix vCont

Claudio Imbrenda posted 2 patches 7 years, 2 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1487092068-16562-1-git-send-email-imbrenda@linux.vnet.ibm.com
Test checkpatch passed
Test docker passed
Test s390x passed
cpus.c                  |  42 ++++++++++
gdbstub.c               | 209 +++++++++++++++++++++++++++++++++++++-----------
include/sysemu/sysemu.h |   2 +
vl.c                    |  30 +------
4 files changed, 207 insertions(+), 76 deletions(-)
[Qemu-devel] [PATCH v8 0/2] Qemu: gdbstub: fix vCont
Posted by Claudio Imbrenda 7 years, 2 months ago
This small patchset fixes the incorrect behaviour of the vCont command
in the gdb stub. 

The first patch, as suggested be Paolo, refactors some code. The most
visible change is that it moves vm_start to cpus.c 

The second one fixes the incorrect behaviour of the vCont command.
Previously, continuing or stepping a single thread (CPU) caused all
other CPUs to be started too, whereas the GDB specification clearly
states that without a default action all threads not explicitly
mentioned in the command should stay stopped.

So if the Qemu gdbstub receives a  vCont;c:1  packet, no other CPU
should be restarted except the first, and when a  vCont;s:1  is
received, the first CPU should be stepped without restarting the others.
With this patchset Qemu now behaves as expected.

See here for reference material about the packets: 
https://sourceware.org/gdb/current/onlinedocs/gdb/Packets.html
https://sourceware.org/gdb/onlinedocs/gdb/Packets.html

v7 -> v8
* fixed and added some comments
* fixed vCont a little bit for user mode
* use cpu->cpu_index directly when possible

v6 -> v7
* fixed description of patch 1 to reflect what is actually happening
  and improved description of patch 2
* removed leftover header declaration of resume_some_vcpus which had
  been removed a few versions ago
* fixed a compilation issue when compiling userspace-mode only
  (global variable max_cpus is not defined when not in system-mode)

v4 -> v6
* rebased on master after target-s390x was moved
* put qemu_clock_enable back into resume_all_vcpus
* improved the parsing function of the vCont packet
* added qemu_clock_enable to gdb_continue_partial

v3 -> v4
* rebased on v2.8.0-rc2, no changes needed

v2 -> v3
* removed resume_some_vcpus
* cleared up the code and simplified the implementation in light of the 
  clarification in the specification of the vCont packet

Claudio Imbrenda (2):
  move vm_start to cpus.c
  gdbstub: Fix vCont behaviour

 cpus.c                  |  42 ++++++++++
 gdbstub.c               | 209 +++++++++++++++++++++++++++++++++++++-----------
 include/sysemu/sysemu.h |   2 +
 vl.c                    |  30 +------
 4 files changed, 207 insertions(+), 76 deletions(-)

-- 
2.7.4


Re: [Qemu-devel] [PATCH v8 0/2] Qemu: gdbstub: fix vCont
Posted by Paolo Bonzini 7 years, 2 months ago
Thanks, I hope to send a pull request this week, including this patch.

Paolo

On 14/02/2017 18:07, Claudio Imbrenda wrote:
> This small patchset fixes the incorrect behaviour of the vCont command
> in the gdb stub. 
> 
> The first patch, as suggested be Paolo, refactors some code. The most
> visible change is that it moves vm_start to cpus.c 
> 
> The second one fixes the incorrect behaviour of the vCont command.
> Previously, continuing or stepping a single thread (CPU) caused all
> other CPUs to be started too, whereas the GDB specification clearly
> states that without a default action all threads not explicitly
> mentioned in the command should stay stopped.
> 
> So if the Qemu gdbstub receives a  vCont;c:1  packet, no other CPU
> should be restarted except the first, and when a  vCont;s:1  is
> received, the first CPU should be stepped without restarting the others.
> With this patchset Qemu now behaves as expected.
> 
> See here for reference material about the packets: 
> https://sourceware.org/gdb/current/onlinedocs/gdb/Packets.html
> https://sourceware.org/gdb/onlinedocs/gdb/Packets.html
> 
> v7 -> v8
> * fixed and added some comments
> * fixed vCont a little bit for user mode
> * use cpu->cpu_index directly when possible
> 
> v6 -> v7
> * fixed description of patch 1 to reflect what is actually happening
>   and improved description of patch 2
> * removed leftover header declaration of resume_some_vcpus which had
>   been removed a few versions ago
> * fixed a compilation issue when compiling userspace-mode only
>   (global variable max_cpus is not defined when not in system-mode)
> 
> v4 -> v6
> * rebased on master after target-s390x was moved
> * put qemu_clock_enable back into resume_all_vcpus
> * improved the parsing function of the vCont packet
> * added qemu_clock_enable to gdb_continue_partial
> 
> v3 -> v4
> * rebased on v2.8.0-rc2, no changes needed
> 
> v2 -> v3
> * removed resume_some_vcpus
> * cleared up the code and simplified the implementation in light of the 
>   clarification in the specification of the vCont packet
> 
> Claudio Imbrenda (2):
>   move vm_start to cpus.c
>   gdbstub: Fix vCont behaviour
> 
>  cpus.c                  |  42 ++++++++++
>  gdbstub.c               | 209 +++++++++++++++++++++++++++++++++++++-----------
>  include/sysemu/sysemu.h |   2 +
>  vl.c                    |  30 +------
>  4 files changed, 207 insertions(+), 76 deletions(-)
>