]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/python] Fix handling of ^C during disassembly
authorTom de Vries <tdevries@suse.de>
Thu, 8 Aug 2024 21:52:00 +0000 (23:52 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 8 Aug 2024 21:52:00 +0000 (23:52 +0200)
Inspired by the trigger patch I used here [1], I tried this in
gdbpy_print_insn:
...
   /* Call into the registered disassembler to (possibly) perform the
      disassembly.  */
+  set_quit_flag ();
   PyObject *insn_disas_obj = (PyObject *) disasm_info;
   gdbpy_ref<> result (PyObject_CallFunctionObjArgs (hook.get (),
                                                    insn_disas_obj,
...
and with test-case gdb.python/py-disasm-exec.exp ran into:
...
(gdb) disassemble test^M
Dump of assembler code for function test:^M
   0x00000000004101ac <+0>:     Python Exception <class 'KeyboardInterrupt'>: ^M
^M
unknown disassembler error (error = -1)^M
(gdb)
...

This is incorrect, the KeyboardInterrupt should propagate and interrupt the
command.

Fix this by using gdbpy_print_stack_or_quit instead of gdbpy_print_stack in
gdbpy_print_insn, giving us instead:
...
(gdb) disassemble test^M
Dump of assembler code for function test:^M
   0x00000000004101ac <+0>:     ^M
Quit^M
(gdb)
...

Tested on aarch64-linux.

Approved-By: Andrew Burgess <aburgess@redhat.com>
[1] https://sourceware.org/pipermail/gdb-patches/2024-July/210798.html

gdb/python/py-disasm.c

index 87fea26c2b275ef2280b428c09e161a5c360c5ce..9b9b509748d963abd8a9686a2bd5547f2bb6b5ae 100644 (file)
@@ -1306,7 +1306,7 @@ gdbpy_print_insn (struct gdbarch *gdbarch, CORE_ADDR memaddr,
        }
       else
        {
-         gdbpy_print_stack ();
+         gdbpy_print_stack_or_quit ();
          return std::optional<int> (-1);
        }