From 647adc681238f8ed1638520f7e09ed8b56af55af Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 8 Aug 2024 23:52:00 +0200 Subject: [PATCH] [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 --- gdb/python/py-disasm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); }