Add Python support for GDB events.

2011-02-04  Sami Wagiaalla  <swagiaal@redhat.com>

	* gdb.python/py-evthreads.c: New file.
	* gdb.python/py-evthreads.exp: New file.
	* gdb.python/py-events.py: New file.
	* gdb.python/py-events.exp: New file.
	* gdb.python/py-events.c: New file.

2011-02-04  Sami Wagiaalla  <swagiaal@redhat.com>
                Oguz Kayral <oguzkayral@gmail.com>

	* python/py-inferior.c (python_on_normal_stop): New function.
	(python_on_resume): New function.
	(python_inferior_exit): New function.
	(gdbpy_initialize_inferior): Add normal_stop, target_resumed, and
	inferior_exit observers.
	* python/py-evtregistry.c: New file.
	* python/py-threadevent.c : New file.
	* python/py-event.c: New file.
	* python/py-evts.c: New file.
	* python/py-continueevent.c: New file.
	* python/py-bpevent.c: New file.
	* python/py-signalevent.c: New file.
	* python/py-exetiedevent.c: New file.
	* python/py-breakpoint.c (gdbpy_breakpoint_from_bpstats): New function.
	Move struct breakpoint_object from here...
	* python/python-internal.h: ... to here.
	* python/py-event.h: New file.
	* python/py-events.h: New file.
	* Makefile.in (SUBDIR_PYTHON_OBS): Add py-breakpointstopevent.o,
	py-continueevent.o, py-event.o, py-eventregistry.o, py-events.o,
	py-exitedevent.o, py-signalstopevent.o, and py-stopevent.o.
	(SUBDIR_PYTHON_SRCS): Add py-breakpointstopevent.c,
	py-continueevent.c, py-event.c, py-eventregistry.c, py-events.c,
	py-exitedevent.c, py-signalstopevent.c, and py-stopevent.c.
	Add build rules for all the above.
This commit is contained in:
Sami Wagiaalla 2011-02-04 21:54:16 +00:00
parent 9e0ac56407
commit 505500db28
9 changed files with 308 additions and 6 deletions

View file

@ -26,6 +26,9 @@
#include "python-internal.h"
#include "arch-utils.h"
#include "language.h"
#include "gdb_signals.h"
#include "py-event.h"
#include "py-stopevent.h"
struct threadlist_entry {
thread_object *thread_obj;
@ -73,6 +76,59 @@ static PyTypeObject membuf_object_type;
} \
} while (0)
static void
python_on_normal_stop (struct bpstats *bs, int print_frame)
{
struct cleanup *cleanup;
enum target_signal stop_signal;
if (!find_thread_ptid (inferior_ptid))
return;
stop_signal = inferior_thread ()->suspend.stop_signal;
cleanup = ensure_python_env (get_current_arch (), current_language);
if (emit_stop_event (bs, stop_signal) < 0)
gdbpy_print_stack ();
do_cleanups (cleanup);
}
static void
python_on_resume (ptid_t ptid)
{
struct cleanup *cleanup;
cleanup = ensure_python_env (get_current_arch (), current_language);
if (emit_continue_event (ptid) < 0)
gdbpy_print_stack ();
do_cleanups (cleanup);
}
static void
python_inferior_exit (struct inferior *inf)
{
struct cleanup *cleanup;
LONGEST exit_code = -1;
ptid_t ptidp;
struct target_waitstatus status;
cleanup = ensure_python_env (get_current_arch (), current_language);
get_last_target_status (&ptidp, &status);
exit_code = status.value.integer;
if (exit_code >= 0
&& emit_exited_event (exit_code) < 0)
gdbpy_print_stack ();
do_cleanups (cleanup);
}
/* Return a borrowed reference to the Python object of type Inferior
representing INFERIOR. If the object has already been created,
return it, otherwise, create it. Return NULL on failure. */
@ -108,8 +164,8 @@ inferior_to_inferior_object (struct inferior *inferior)
/* Finds the Python Inferior object for the given PID. Returns a
borrowed reference, or NULL if PID does not match any inferior
obect.
*/
object. */
PyObject *
find_inferior_object (int pid)
{
@ -590,6 +646,9 @@ gdbpy_initialize_inferior (void)
observer_attach_new_thread (add_thread_object);
observer_attach_thread_exit (delete_thread_object);
observer_attach_normal_stop (python_on_normal_stop);
observer_attach_target_resumed (python_on_resume);
observer_attach_inferior_exit (python_inferior_exit);
if (PyType_Ready (&membuf_object_type) < 0)
return;