Patchwork gdbstub: Do not kill target in system emulation mode

login
register
mail settings
Submitter Jan Kiszka
Date March 6, 2012, 5:32 p.m.
Message ID <4F564A33.2080500@siemens.com>
Download mbox | patch
Permalink /patch/144984/
State New
Headers show

Comments

Jan Kiszka - March 6, 2012, 5:32 p.m.
Too many VM kittens were killed since 7d03f82f81. Another one just died
under my fat fingers.

When you quit a kgdb session, does the Linux kernel power off? Or when
you terminate gdb attached to a hardware debugger, does your board
vanish in space? No.

So let's stop terminating QEMU when the gdbstub receives a kill commando
in system emulation mode. Real termination can still be achieved via
"monitor quit". We keep the behavior for user mode emulation which is
arguably more like a gdbserver scenario.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 gdbstub.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
Blue Swirl - March 11, 2012, 4:08 p.m.
Thanks, applied. I've been an accidental killer myself countless times.

On Tue, Mar 6, 2012 at 17:32, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> Too many VM kittens were killed since 7d03f82f81. Another one just died
> under my fat fingers.
>
> When you quit a kgdb session, does the Linux kernel power off? Or when
> you terminate gdb attached to a hardware debugger, does your board
> vanish in space? No.
>
> So let's stop terminating QEMU when the gdbstub receives a kill commando
> in system emulation mode. Real termination can still be achieved via
> "monitor quit". We keep the behavior for user mode emulation which is
> arguably more like a gdbserver scenario.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  gdbstub.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/gdbstub.c b/gdbstub.c
> index 7d470b6..ef95ac2 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -2062,9 +2062,11 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
>             goto unknown_command;
>         }
>     case 'k':
> +#ifdef CONFIG_USER_ONLY
>         /* Kill the target */
>         fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
>         exit(0);
> +#endif
>     case 'D':
>         /* Detach packet */
>         gdb_breakpoint_remove_all();
> --
> 1.7.3.4
>

Patch

diff --git a/gdbstub.c b/gdbstub.c
index 7d470b6..ef95ac2 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2062,9 +2062,11 @@  static int gdb_handle_packet(GDBState *s, const char *line_buf)
             goto unknown_command;
         }
     case 'k':
+#ifdef CONFIG_USER_ONLY
         /* Kill the target */
         fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
         exit(0);
+#endif
     case 'D':
         /* Detach packet */
         gdb_breakpoint_remove_all();