From: Tom de Vries Date: Thu, 8 Aug 2024 21:52:00 +0000 (+0200) Subject: [gdb/python] Fix handling of ^C during disassembly X-Git-Tag: gdb-16-branchpoint~1208 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=647adc681238f8ed1638520f7e09ed8b56af55af;p=thirdparty%2Fbinutils-gdb.git [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 : ^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 [1] https://sourceware.org/pipermail/gdb-patches/2024-July/210798.html --- diff --git a/gdb/python/py-disasm.c b/gdb/python/py-disasm.c index 87fea26c2b2..9b9b509748d 100644 --- a/gdb/python/py-disasm.c +++ b/gdb/python/py-disasm.c @@ -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 (-1); }