binutils-gdb/gdb/python
Pedro Alves 9ccabccd15 Python unwinder sniffer: PyExc_KeyboardInterrupt -> Quit
If you happen to press Ctrl-C while GDB is running the Python unwinder
machinery, the Ctrl-C is swallowed by the Python unwinder machinery.

For example, with:

 break foo
 commands
 > c
 > end

and

  while (1)
    foo ();

and then let the inferior hit "foo" repeatedly, sometimes Ctrl-C
results in:

~~~
  23        usleep (100);

  Breakpoint 2, foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);
  ^C
  Breakpoint 2, Python Exception <class 'KeyboardInterrupt'> <class 'KeyboardInterrupt'>:
  foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);

  Breakpoint 2, foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);

  Breakpoint 2, foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);
~~~

Notice the Python exception above.  The interesting thing here is that
GDB continues as if nothing happened, doesn't really stop and give
back control to the user.  Instead, the Ctrl-C aborted the Python
unwinder sniffer and GDB moved on to just use another unwinder.

Fix this by translating a PyExc_KeyboardInterrupt back into a Quit
exception once back in GDB.

This was exposed by the new gdb.base/bp-cmds-continue-ctrl-c.exp
testcase added later in the series.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

	* python/py-unwind.c (pyuw_sniffer): Translate
	PyExc_KeyboardInterrupt to a GDB Quit exception.
2017-11-16 18:44:44 +00:00
..
lib/gdb
py-all-events.def Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-arch.c
py-auto-load.c Constify add_info 2017-11-07 13:59:09 -07:00
py-block.c
py-bpevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-breakpoint.c Constify some linespec functions 2017-09-27 08:44:45 -06:00
py-cmd.c Constify execute_command 2017-11-07 13:59:09 -07:00
py-continueevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-event-types.def Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-event.c Small event ownership clean up in Python layer 2017-09-11 14:15:21 -06:00
py-event.h Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-events.h Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-evtregistry.c
py-evts.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-exitedevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-finishbreakpoint.c
py-frame.c Remove cleanups from find_frame_funname 2017-09-11 16:15:11 -06:00
py-framefilter.c
py-function.c
py-gdb-readline.c
py-inferior.c Add `thread_from_thread_handle' method to (Python) gdb.Inferior 2017-09-21 11:20:51 -07:00
py-infevents.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-infthread.c Make gdb.selected_thread().inferior return a new reference 2017-10-28 14:19:08 -04:00
py-instruction.c
py-instruction.h
py-lazy-string.c
py-linetable.c
py-newobjfileevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-objfile.c
py-param.c Constify add_setshow_* 2017-11-07 13:59:09 -07:00
py-prettyprint.c
py-progspace.c
py-record-btrace.c btrace: Store btrace_insn in an std::vector 2017-09-04 10:46:36 +02:00
py-record-btrace.h
py-record-full.c
py-record-full.h
py-record.c
py-record.h
py-ref.h
py-signalevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-stopevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-stopevent.h Small event ownership clean up in Python layer 2017-09-11 14:15:21 -06:00
py-symbol.c
py-symtab.c
py-threadevent.c Make it simpler to add events to Python 2017-09-11 14:15:22 -06:00
py-type.c Make cp_comp_to_string return a gdb::unique_xmalloc_ptr<char> 2017-08-09 15:04:32 +01:00
py-unwind.c Python unwinder sniffer: PyExc_KeyboardInterrupt -> Quit 2017-11-16 18:44:44 +00:00
py-utils.c
py-value.c Target FP: Handle interfaces to scripting languages 2017-11-06 16:00:47 +01:00
py-varobj.c Avoid some manual memory management in Python 2017-08-03 07:59:07 -06:00
py-xmethods.c
python-config.py
python-internal.h Add `thread_from_thread_handle' method to (Python) gdb.Inferior 2017-09-21 11:20:51 -07:00
python.c Add Python rbreak command. 2017-11-16 14:14:03 +00:00
python.h