diff mbox series

[v2,for-2.12] gdbstub: send a termination packet instead of crashing gdb

Message ID 1521538773-30802-1-git-send-email-frederic.konrad@adacore.com
State New
Headers show
Series [v2,for-2.12] gdbstub: send a termination packet instead of crashing gdb | expand

Commit Message

KONRAD Frederic March 20, 2018, 9:39 a.m. UTC
Since the commit:
commit 4486e89c219c0d1b9bd8dfa0b1dd5b0d51ff2268
Author: Stefan Hajnoczi <stefanha@redhat.com>
Date:   Wed Mar 7 14:42:05 2018 +0000

    vl: introduce vm_shutdown()

GDB crashes when qemu exits (at least on sparc-softmmu):
Remote communication error.  Target disconnected.: Connection reset by peer.
Quitting: putpkt: write failed: Broken pipe.

So send a packet to exit GDB before we exit QEMU:
[Inferior 1 (Thread 0) exited normally]

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
---

Notes:
    V1 -> V2:
      * fix typos
      * mark the patch for-2.12

 gdbstub.c              | 7 +++++++
 include/exec/gdbstub.h | 2 ++
 vl.c                   | 2 ++
 3 files changed, 11 insertions(+)

Comments

KONRAD Frederic March 27, 2018, 9:31 a.m. UTC | #1
Peter, can this be cherry-picked in 2.12-rc1?

Thanks,
Fred

On 03/20/2018 10:39 AM, KONRAD Frederic wrote:
> Since the commit:
> commit 4486e89c219c0d1b9bd8dfa0b1dd5b0d51ff2268
> Author: Stefan Hajnoczi <stefanha@redhat.com>
> Date:   Wed Mar 7 14:42:05 2018 +0000
> 
>      vl: introduce vm_shutdown()
> 
> GDB crashes when qemu exits (at least on sparc-softmmu):
> Remote communication error.  Target disconnected.: Connection reset by peer.
> Quitting: putpkt: write failed: Broken pipe.
> 
> So send a packet to exit GDB before we exit QEMU:
> [Inferior 1 (Thread 0) exited normally]
> 
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
> ---
> 
> Notes:
>      V1 -> V2:
>        * fix typos
>        * mark the patch for-2.12
> 
>   gdbstub.c              | 7 +++++++
>   include/exec/gdbstub.h | 2 ++
>   vl.c                   | 2 ++
>   3 files changed, 11 insertions(+)
> 
> diff --git a/gdbstub.c b/gdbstub.c
> index f1d5148..a76b2fa 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -2052,6 +2052,13 @@ int gdbserver_start(const char *device)
>       return 0;
>   }
>   
> +void gdbserver_cleanup(void)
> +{
> +    if (gdbserver_state) {
> +        put_packet(gdbserver_state, "W00");
> +    }
> +}
> +
>   static void register_types(void)
>   {
>       type_register_static(&char_gdb_type_info);
> diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
> index 9aa7756..2e8a4b8 100644
> --- a/include/exec/gdbstub.h
> +++ b/include/exec/gdbstub.h
> @@ -103,6 +103,8 @@ int gdbserver_start(int);
>   int gdbserver_start(const char *port);
>   #endif
>   
> +void gdbserver_cleanup(void);
> +
>   /**
>    * gdb_has_xml:
>    * This is an ugly hack to cope with both new and old gdb.
> diff --git a/vl.c b/vl.c
> index 19340a3..cd8d5cb 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4725,6 +4725,8 @@ int main(int argc, char **argv, char **envp)
>   
>       main_loop();
>   
> +    gdbserver_cleanup();
> +
>       /* No more vcpu or device emulation activity beyond this point */
>       vm_shutdown();
>   
>
Peter Maydell March 27, 2018, 9:03 p.m. UTC | #2
On 27 March 2018 at 10:31, KONRAD Frederic <frederic.konrad@adacore.com> wrote:
> Peter, can this be cherry-picked in 2.12-rc1?
>
> Thanks,
> Fred
>
>
> On 03/20/2018 10:39 AM, KONRAD Frederic wrote:
>>
>> Since the commit:
>> commit 4486e89c219c0d1b9bd8dfa0b1dd5b0d51ff2268
>> Author: Stefan Hajnoczi <stefanha@redhat.com>
>> Date:   Wed Mar 7 14:42:05 2018 +0000
>>
>>      vl: introduce vm_shutdown()
>>
>> GDB crashes when qemu exits (at least on sparc-softmmu):
>> Remote communication error.  Target disconnected.: Connection reset by
>> peer.
>> Quitting: putpkt: write failed: Broken pipe.
>>
>> So send a packet to exit GDB before we exit QEMU:
>> [Inferior 1 (Thread 0) exited normally]
>>
>> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
>> Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
>> ---

Applied to master, thanks.

-- PMM
diff mbox series

Patch

diff --git a/gdbstub.c b/gdbstub.c
index f1d5148..a76b2fa 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2052,6 +2052,13 @@  int gdbserver_start(const char *device)
     return 0;
 }
 
+void gdbserver_cleanup(void)
+{
+    if (gdbserver_state) {
+        put_packet(gdbserver_state, "W00");
+    }
+}
+
 static void register_types(void)
 {
     type_register_static(&char_gdb_type_info);
diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
index 9aa7756..2e8a4b8 100644
--- a/include/exec/gdbstub.h
+++ b/include/exec/gdbstub.h
@@ -103,6 +103,8 @@  int gdbserver_start(int);
 int gdbserver_start(const char *port);
 #endif
 
+void gdbserver_cleanup(void);
+
 /**
  * gdb_has_xml:
  * This is an ugly hack to cope with both new and old gdb.
diff --git a/vl.c b/vl.c
index 19340a3..cd8d5cb 100644
--- a/vl.c
+++ b/vl.c
@@ -4725,6 +4725,8 @@  int main(int argc, char **argv, char **envp)
 
     main_loop();
 
+    gdbserver_cleanup();
+
     /* No more vcpu or device emulation activity beyond this point */
     vm_shutdown();