]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
[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)
commit647adc681238f8ed1638520f7e09ed8b56af55af
tree243fd6e7610f6e64cba0f098b8401090d82d7901
parentc45c3b4162148077765e94fd17d4481f18d6d44c
[gdb/python] Fix handling of ^C during disassembly

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