public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  archer-swagiaal-oguz: Remove registry pointer from event object.
@ 2010-12-15 22:00 swagiaal
  0 siblings, 0 replies; only message in thread
From: swagiaal @ 2010-12-15 22:00 UTC (permalink / raw)
  To: archer-commits

The branch, archer-swagiaal-oguz has been updated
       via  21c15f9139f7a6b5f2bebb5cbf895ab31368e149 (commit)
       via  34af33ae378c9c45124c2e011b853d4e7cc5f60d (commit)
       via  baa5576d4ba510b77550b3b27b7a1f0ecc1358c5 (commit)
       via  054c69e3fa2f589e40211af8f7f81c09605736be (commit)
       via  620442517ac8f238c9c6e2f9f547d8aabf919166 (commit)
      from  7508a202caa1d05f6ebb0df3c359f27f7ff2ce14 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 21c15f9139f7a6b5f2bebb5cbf895ab31368e149
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Wed Dec 15 14:48:38 2010 -0500

    Remove registry pointer from event object.

commit 34af33ae378c9c45124c2e011b853d4e7cc5f60d
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Wed Dec 15 14:09:10 2010 -0500

    Remove '_event' from event registry names.
    
    ..and '_stop' from event names and functions.

commit baa5576d4ba510b77550b3b27b7a1f0ecc1358c5
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Tue Dec 14 14:51:01 2010 -0500

    test and support non-stop mode.
    
    check non-stop flag and set the thread object when non-stop
    mode is on.

commit 054c69e3fa2f589e40211af8f7f81c09605736be
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Mon Dec 13 12:07:46 2010 -0500

    Fix sigfault on next event.
    
    GDB segfaulted whenever a next event occured. Thi is now fixed.

commit 620442517ac8f238c9c6e2f9f547d8aabf919166
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Mon Dec 13 09:28:41 2010 -0500

    Clean up development leftovers
    
    Remove event registries from inferior object

-----------------------------------------------------------------------

Summary of changes:
 gdb/python/py-breakpointstopevent.c                |    5 +-
 gdb/python/py-continueevent.c                      |    6 +-
 gdb/python/py-event.c                              |   39 +++++------
 gdb/python/py-event.h                              |   18 ++---
 gdb/python/py-exitedevent.c                        |    6 +-
 gdb/python/py-inferior.c                           |    6 --
 gdb/python/py-signalstopevent.c                    |    5 +-
 gdb/python/py-stopevent.c                          |   46 +++++++------
 gdb/python/py-stopevent.h                          |    7 +-
 gdb/testsuite/gdb.python/py-events-threads.c       |   49 ++++++++++++++
 .../{py-events.exp => py-events-threads.exp}       |   71 +++++++++++++-------
 gdb/testsuite/gdb.python/py-events.exp             |    3 +-
 gdb/testsuite/gdb.python/py-events.py              |   12 ++-
 13 files changed, 169 insertions(+), 104 deletions(-)
 create mode 100644 gdb/testsuite/gdb.python/py-events-threads.c
 copy gdb/testsuite/gdb.python/{py-events.exp => py-events-threads.exp} (54%)

First 500 lines of diff:
diff --git a/gdb/python/py-breakpointstopevent.c b/gdb/python/py-breakpointstopevent.c
index 41ba491..a635369 100644
--- a/gdb/python/py-breakpointstopevent.c
+++ b/gdb/python/py-breakpointstopevent.c
@@ -31,13 +31,12 @@ bp_stop_evpy_dealloc (PyObject *self)
 /* Create and initialize a BreakpointStopEvent object.  */
 
 breakpoint_stop_event_object *
-create_breakpoint_stop_event_object (struct bpstats *bs, PyObject *stopped_thread)
+create_breakpoint_event_object (struct bpstats *bs, PyObject *stopped_thread)
 {
   breakpoint_stop_event_object *breakpoint_stop_event_obj =
       (breakpoint_stop_event_object *)
       create_stop_event_object (&breakpoint_stop_event_object_type,
-                                BREAKPOINT,
-                                gdb_py_events->breakpoint_stop_event);
+                                BREAKPOINT);
 
   if (!breakpoint_stop_event_obj)
     return NULL;
diff --git a/gdb/python/py-continueevent.c b/gdb/python/py-continueevent.c
index 190334e..a649059 100644
--- a/gdb/python/py-continueevent.c
+++ b/gdb/python/py-continueevent.c
@@ -37,8 +37,7 @@ create_continue_event_object ()
 {
   return (continue_event_object *)
       create_event_object (&continue_event_object_type,
-                           "continue",
-                           gdb_py_events->continue_event);
+                           "continue");
 }
 
 /* Initialize the Python continue event code.  */
@@ -62,7 +61,8 @@ gdbpy_initialize_continue_event (void)
 void
 emit_continue_event (ptid_t ptid)
 {
-  evpy_emit_event ((event_object *) create_continue_event_object());
+  evpy_emit_event ((event_object *) create_continue_event_object(),
+                   gdb_py_events->cont);
 }
 
 static PyTypeObject continue_event_object_type =
diff --git a/gdb/python/py-event.c b/gdb/python/py-event.c
index 2c84be9..6c8d881 100644
--- a/gdb/python/py-event.c
+++ b/gdb/python/py-event.c
@@ -28,8 +28,7 @@ evpy_dealloc (PyObject *self)
 
 event_object *
 create_event_object (PyTypeObject *py_type,
-                     const char *event_type,
-                     eventregistry_object *registry)
+                     const char *event_type)
 {
   event_object *event_obj;
 
@@ -38,7 +37,6 @@ create_event_object (PyTypeObject *py_type,
     return NULL;
 
   event_obj->event_type = (PyStringObject *) PyString_FromString (event_type);
-  event_obj->registry = registry;
 
   return event_obj;
 }
@@ -81,27 +79,27 @@ gdbpy_initialize_py_events()
   gdb_py_events = PyObject_New (events_object,
                                 &events_object_type);
 
-  gdb_py_events->stop_event = create_eventregistry_object ();
-  gdb_py_events->breakpoint_stop_event = create_eventregistry_object ();
-  gdb_py_events->signal_stop_event = create_eventregistry_object ();
-  gdb_py_events->continue_event = create_eventregistry_object ();
-  gdb_py_events->exited_event = create_eventregistry_object ();
+  gdb_py_events->stop = create_eventregistry_object ();
+  gdb_py_events->breakpoint = create_eventregistry_object ();
+  gdb_py_events->signal = create_eventregistry_object ();
+  gdb_py_events->cont = create_eventregistry_object ();
+  gdb_py_events->exited = create_eventregistry_object ();
 
   PyDict_SetItemString (events_object_type.tp_dict,
-                        "stop_event",
-                        (PyObject *) gdb_py_events->stop_event);
+                        "stop",
+                        (PyObject *) gdb_py_events->stop);
   PyDict_SetItemString (events_object_type.tp_dict,
-                        "breakpoint_event",
-                        (PyObject *) gdb_py_events->breakpoint_stop_event);
+                        "breakpoint",
+                        (PyObject *) gdb_py_events->breakpoint);
   PyDict_SetItemString (events_object_type.tp_dict,
-                        "signal_event",
-                        (PyObject *) gdb_py_events->signal_stop_event);
+                        "signal",
+                        (PyObject *) gdb_py_events->signal);
   PyDict_SetItemString (events_object_type.tp_dict,
-                        "continue_event",
-                        (PyObject *) gdb_py_events->continue_event);
+                        "cont",
+                        (PyObject *) gdb_py_events->cont);
   PyDict_SetItemString (events_object_type.tp_dict,
-                        "exited_event",
-                        (PyObject *) gdb_py_events->exited_event);
+                        "exited",
+                        (PyObject *) gdb_py_events->exited);
 
   Py_INCREF (&events_object_type);
   PyModule_AddObject (gdb_module, "events", (PyObject *) &events_object_type);
@@ -122,13 +120,14 @@ gdbpy_initialize_event (void)
 /* Notify the list of listens that the given EVENT has occured.  */
 
 void
-evpy_emit_event (event_object *event)
+evpy_emit_event (event_object *event,
+                 eventregistry_object *registry)
 {
   PyObject *callback_list, *event_obj = (PyObject *) event;
   PyObject *callback_list_copy = NULL;
   Py_ssize_t i;
 
-  callback_list = (PyObject *) (event->registry->callbacks);
+  callback_list = (PyObject *) registry->callbacks;
 
   /* Create a copy of call back list and use that for
      notifying listeners to avoid skipping callbacks
diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h
index c4a34a1..a2ffdc4 100644
--- a/gdb/python/py-event.h
+++ b/gdb/python/py-event.h
@@ -28,8 +28,6 @@
 typedef struct
 {
   PyObject_HEAD
-  /* The registery of listeners to be notified about this event instance.   */
-  eventregistry_object *registry;
 
   PyObject *inferior_thread;
   PyStringObject *event_type;
@@ -39,11 +37,11 @@ typedef struct
 {
   PyObject_HEAD
 
-  eventregistry_object *stop_event;
-  eventregistry_object *breakpoint_stop_event;
-  eventregistry_object *signal_stop_event;
-  eventregistry_object *continue_event;
-  eventregistry_object *exited_event;
+  eventregistry_object *stop;
+  eventregistry_object *breakpoint;
+  eventregistry_object *signal;
+  eventregistry_object *cont;
+  eventregistry_object *exited;
 
 } events_object;
 
@@ -55,10 +53,10 @@ extern void emit_continue_event (ptid_t ptid);
 extern void emit_exited_event (thread_object *inferior_thread,
                                LONGEST *exit_code);
 
-extern void evpy_emit_event (event_object *event);
+extern void evpy_emit_event (event_object *event,
+                             eventregistry_object *registry);
 extern event_object * create_event_object (PyTypeObject *py_type,
-                                    const char *event_type,
-                                    eventregistry_object *registry);
+                                    const char *event_type);
 extern void evpy_dealloc (PyObject *self);
 
 #endif /* GDB_PY_EVENT_H */
diff --git a/gdb/python/py-exitedevent.c b/gdb/python/py-exitedevent.c
index 516ea29..ae92493 100644
--- a/gdb/python/py-exitedevent.c
+++ b/gdb/python/py-exitedevent.c
@@ -41,8 +41,7 @@ create_exited_event_object (thread_object *inferior_thread, LONGEST *exit_code)
 
   exited_event = (exited_event_object *)
       create_event_object (&exited_event_object_type,
-                           "exit",
-                           gdb_py_events->exited_event);
+                           "exit");
 
   if (!exited_event)
     return NULL;
@@ -72,7 +71,8 @@ void
 emit_exited_event (thread_object *inferior_thread, LONGEST *exit_code)
 {
   evpy_emit_event ((event_object *)
-                   create_exited_event_object (inferior_thread, exit_code));
+                   create_exited_event_object (inferior_thread, exit_code),
+                   gdb_py_events->exited);
 }
 
 /* Python function to get the exited event's exit code.  */
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index e14b5da..7d92a49 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -49,12 +49,6 @@ typedef struct
   /* Number of threads in the list.  */
   int nthreads;
 
-  eventregistry_object *stop_event;
-  eventregistry_object *breakpoint_stop_event;
-  eventregistry_object *signal_stop_event;
-  eventregistry_object *continue_event;
-  eventregistry_object *exited_event;
-
 } inferior_object;
 
 static PyTypeObject inferior_object_type;
diff --git a/gdb/python/py-signalstopevent.c b/gdb/python/py-signalstopevent.c
index de54da4..91ad99f 100644
--- a/gdb/python/py-signalstopevent.c
+++ b/gdb/python/py-signalstopevent.c
@@ -29,13 +29,12 @@ sig_stop_evpy_dealloc (PyObject *self)
 }
 
 signal_stop_event_object *
-create_signal_stop_event_object (const char *stop_signal)
+create_signal_event_object (const char *stop_signal)
 {
   signal_stop_event_object *signal_stop_event_obj =
       (signal_stop_event_object *)
       create_stop_event_object (&signal_stop_event_object_type,
-                                SIGNAL,
-                                gdb_py_events->signal_stop_event);
+                                SIGNAL);
 
   if (!signal_stop_event_obj)
     return NULL;
diff --git a/gdb/python/py-stopevent.c b/gdb/python/py-stopevent.c
index cba4a4b..bdb7209 100644
--- a/gdb/python/py-stopevent.c
+++ b/gdb/python/py-stopevent.c
@@ -27,13 +27,11 @@ stop_evpy_dealloc (PyObject *self)
 
 stop_event_object *
 create_stop_event_object (PyTypeObject *py_type,
-                          enum stop_reason reason,
-                          eventregistry_object *registry)
+                          enum stop_reason reason)
 {
   stop_event_object *stop_event_obj =
       (stop_event_object *) create_event_object (py_type,
-                                                 "stop",
-                                                 registry);
+                                                 "stop");
 
   if (!stop_event_obj)
     return NULL;
@@ -85,31 +83,35 @@ emit_stop_event (struct bpstats *bs, const char *stop_signal)
   else
     stopped_thread = Py_None;
 
-  if (bs)
-    stop_event_obj =
-	(stop_event_object *)
-	create_breakpoint_stop_event_object (bs, stopped_thread);
+  // FIXME: Handle stop because of 'next' event
+  if (bs && bs->breakpoint_at)
+    {
+      stop_event_obj =
+	  (stop_event_object *)
+	  create_breakpoint_event_object (bs, stopped_thread);
+      evpy_emit_event ((event_object *) stop_event_obj,
+                       gdb_py_events->breakpoint);
+      return;
+    }
 
   /* Check if the signal is "Signal 0" or "Trace/breakpoint trap". */
   if ((strcmp (stop_signal, "0") != 0) && (strcmp (stop_signal, "SIGTRAP") != 0))
-    stop_event_obj =
-	(stop_event_object *)
-	create_signal_stop_event_object (stop_signal);
-
-  if (!stop_event_obj)
     {
-      inferior_thread = find_thread_object (inferior_ptid);
-
-      stop_event_obj = create_stop_event_object (&stop_event_object_type,
-                                                 UNKNOWN,
-                                                 gdb_py_events->stop_event);
-
-      evpy_emit_event ((event_object *) stop_event_obj);
+      stop_event_obj =
+	  (stop_event_object *)
+	  create_signaltop_event_object (stop_signal);
+      evpy_emit_event ((event_object *) stop_event_obj,
+                       gdb_py_events->signal);
       return;
     }
 
-  if (stop_event_obj)
-    evpy_emit_event ((event_object *) stop_event_obj);
+  /* If all fails emit an unknown stop event.  All event types should
+     be known and this should eventually be unused.  */
+  inferior_thread = find_thread_object (inferior_ptid);
+  stop_event_obj = create_stop_event_object (&stop_event_object_type,
+                                                 UNKNOWN);
+  evpy_emit_event ((event_object *) stop_event_obj,
+                       gdb_py_events->stop);
 }
 
 /* Python function to get the stop event's stop reason. */
diff --git a/gdb/python/py-stopevent.h b/gdb/python/py-stopevent.h
index 1d4103d..8392ac5 100644
--- a/gdb/python/py-stopevent.h
+++ b/gdb/python/py-stopevent.h
@@ -59,17 +59,16 @@ typedef struct
 } signal_stop_event_object;
 
 extern stop_event_object * create_stop_event_object (PyTypeObject *py_type,
-                                                    enum stop_reason reason,
-                                                    eventregistry_object *registry);
+                                                    enum stop_reason reason);
 extern void stop_evpy_dealloc (PyObject *self);
 
 extern void emit_stop_event (struct bpstats *bs,
                              const char *stop_signal);
 
 extern breakpoint_stop_event_object *
-create_breakpoint_stop_event_object (struct bpstats *bs,
+create_breakpoint_event_object (struct bpstats *bs,
                                      PyObject *stopped_thread);
 extern signal_stop_event_object *
-create_signal_stop_event_object (const char *stop_signal);
+create_signal_event_object (const char *stop_signal);
 
 #endif /* GDB_PY_STOPEVENT_H */
diff --git a/gdb/testsuite/gdb.python/py-events-threads.c b/gdb/testsuite/gdb.python/py-events-threads.c
new file mode 100644
index 0000000..2560bd7
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-events-threads.c
@@ -0,0 +1,49 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see  <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdio.h>
+#include <pthread.h>
+#include <unistd.h>
+
+pthread_t thread2_id;
+pthread_t thread3_id;
+
+void* thread3 (void* d)
+{
+  int count3 = 0;
+  count3++;
+  return NULL;
+}
+
+void* thread2 (void* d)
+{
+  int count2 = 0;
+  count2++;
+  return NULL;
+}
+
+int main (){
+
+  pthread_create (&thread2_id, NULL, thread2, NULL);
+  pthread_create (&thread3_id, NULL, thread3, NULL);
+
+  int count1 = 0; // stop1
+  count1++;
+
+  return 12;
+}
diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events-threads.exp
similarity index 54%
copy from gdb/testsuite/gdb.python/py-events.exp
copy to gdb/testsuite/gdb.python/py-events-threads.exp
index 12fa9c0..8cd621b 100644
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events-threads.exp
@@ -24,14 +24,13 @@ if $tracelevel then {
 
 load_lib gdb-python.exp
 
-set testfile "py-events"
+set testfile "py-events-threads"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
-set pyfile ${srcdir}/${subdir}/${testfile}.py
+set pyfile ${srcdir}/${subdir}/py-events.py
 
-if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
-    return -1
-}
+gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}
+clean_restart $testfile
 
 if { [skip_python_tests] } { continue }
 
@@ -40,28 +39,50 @@ gdb_check_python_config
 
 gdb_test_no_output "python execfile ('${pyfile}')" ""
 
-if ![runto_main ] then {
-    fail "Can't run to main"
-    return -1
-}
-
 gdb_test "Test_Events" "Event testers registered."
+gdb_test_no_output "set non-stop on"
+gdb_test_no_output "set target-async on"
+
+gdb_breakpoint "main"
+gdb_breakpoint "thread2"
+gdb_breakpoint "thread3"
+    
+send_gdb "run\n"
+gdb_expect {
+    -re "event type: stop.*
+.*stop reason: breakpoint.*
+.*breakpoint number: 1.*
+.*thread num: 1.*" { 
+        pass "reached breakpoint 1"
+    }
+    timeout {
+	    fail "did not reach breakpoint 1"
+	}
+}
 
-gdb_breakpoint "first"
-
-# Test continue event and breakpoint stop event
-gdb_test "continue" ".*event type: continue.*
-.*event type: stop.*
+send_gdb "next\n"
+gdb_expect {
+    -re "event type: stop.*
 .*stop reason: breakpoint.*
-.*breakpoint number: 2.*"
+.*breakpoint number: 2.*
+.*thread num: 2.*" { 
+        pass "reached breakpoint 2"
+    }
+    timeout {
+	    fail "did not reach breakpoint 2"
+	}
+}
 
-#test signal event.
-gdb_test "continue" ".*event type: continue.*
-.*event type: stop.*
-.*stop reason: signal.*
-.*stop signal: SIGSEGV.*"
+send_gdb "next\n"
+gdb_expect {
+    -re "event type: stop.*
+.*stop reason: breakpoint.*
+.*breakpoint number: 3.*
+.*thread num: 3.*" { 
+        pass "reached breakpoint 3"
+    }
+    timeout {
+	    fail "did not reach breakpoint 3"
+	}
+}
 
-#test exited event.
-gdb_test "continue" ".*event type: continue.*
-.*event type: exit.*
-.*exit code: .*"
diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp
index 12fa9c0..ab83cba 100644
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events.exp
@@ -53,7 +53,8 @@ gdb_breakpoint "first"
 gdb_test "continue" ".*event type: continue.*
 .*event type: stop.*
 .*stop reason: breakpoint.*
-.*breakpoint number: 2.*"
+.*breakpoint number: 2.*
+all threads stopped"
 
 #test signal event.
 gdb_test "continue" ".*event type: continue.*
diff --git a/gdb/testsuite/gdb.python/py-events.py b/gdb/testsuite/gdb.python/py-events.py
index 51cdeb0..fdaea59 100644
--- a/gdb/testsuite/gdb.python/py-events.py
+++ b/gdb/testsuite/gdb.python/py-events.py


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-12-15 22:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-15 22:00 [SCM] archer-swagiaal-oguz: Remove registry pointer from event object swagiaal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).