From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20981 invoked by alias); 26 Apr 2011 08:24:25 -0000 Received: (qmail 20953 invoked by uid 22791); 26 Apr 2011 08:24:23 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RFC_ABUSE_POST X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 26 Apr 2011 08:24:00 +0000 Received: by vxk20 with SMTP id 20so423472vxk.0 for ; Tue, 26 Apr 2011 01:23:59 -0700 (PDT) Received: by 10.52.73.195 with SMTP id n3mr773586vdv.28.1303806168209; Tue, 26 Apr 2011 01:22:48 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.61.6 with HTTP; Tue, 26 Apr 2011 01:22:28 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Tue, 26 Apr 2011 08:24:00 -0000 Message-ID: Subject: Re: [PATCH] PR/12691 Add the inferior to Python exited event To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-04/txt/msg00468.txt.bz2 On Mon, Apr 25, 2011 at 2:19 PM, Tom Tromey wrote: > > >>>>> "Kevin" =3D=3D Kevin Pouget writes: > > Kevin> Following Tom's advise > Kevin> (http://sourceware.org/ml/gdb/2011-04/msg00116.html), here is a pa= tch > Kevin> which hooks the inferior to the `exited' event object > Kevin> let me know what you think about it > > It looks pretty good, but I think it needs a couple small changes. > > Kevin> + =A0if (evpy_add_attribute (exited_event, > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"inferior", > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0inferior_to_i= nferior_object (inf)) < 0) > Kevin> + =A0 =A0goto fail; > > This does not account for the possibility that > inferior_to_inferior_object could fail. =A0I think there has > to be a temporary object that is explicitly checked against NULL. done, it should only fail when the process runs out of space, so GDB must handle it somewhere else > Kevin> +gdb_test "continue" ".*event type: continue.* > Kevin> +.*event type: exit.* > Kevin> +.*exit code: 12.* > Kevin> +.*exit inf: 2.*" > > Pass a test name to gdb_test. right thanks, Kevin -- 2011-04-21 =A0Kevin Pouget =A0 =A0 =A0 =A0 =A0PR python/12691: Add the inferior to Python exited event =A0 =A0 =A0 =A0* python/py-exitedevent.c (create_exited_event_object): Add = inferior =A0 =A0 =A0 =A0to exited_event. =A0 =A0 =A0 =A0* python/py-event.h (emit_exited_event): Likewise =A0 =A0 =A0 =A0* python/-inferior.c (python_inferior_exit): Likewise 2011-04-21 =A0Kevin Pouget =A0 =A0 =A0 =A0 =A0PR python/12691: Add the inferior to Python exited event =A0 =A0 =A0 =A0* gdb.python/py-events.exp: Test the inferior attribute of e= xited =A0 =A0 =A0 =A0event with a fork. =A0 =A0 =A0 =A0* gdb.python/py-events.py: Print inferior number on exit. =A0 =A0 =A0 =A0* gdb.python/py-events.c: Fork the inferior. 2011-04-21 =A0Kevin Pouget =A0 =A0 =A0 =A0 =A0PR python/12691: Add the inferior to Python exited event =A0 =A0 =A0 =A0* gdb.texinfo (Events In Python): Describe exited inferior a= ttribute. -- diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index edcf5c2..6e06bde 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -22056,11 +22056,14 @@ inherited attribute refer to @code{gdb.ThreadEvent} above. =A0@item events.exited =A0Emits @code{events.ExitedEvent} which indicates that the inferior has ex= ited. -@code{events.ExitedEvent} has one attribute: +@code{events.ExitedEvent} has two attributes: =A0@table @code =A0@defivar ExitedEvent exit_code =A0An integer representing the exit code which the inferior has returned. =A0@end defivar +@defivar ExitedEvent inferior +A reference to the inferior which triggered the exited event. +@end defivar =A0@end table =A0@item events.stop diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h index bc95521..5ac73b4 100644 --- a/gdb/python/py-event.h +++ b/gdb/python/py-event.h @@ -104,7 +104,7 @@ typedef struct =A0} event_object; =A0extern int emit_continue_event (ptid_t ptid); -extern int emit_exited_event (LONGEST exit_code); +extern int emit_exited_event (LONGEST exit_code, struct inferior *inf); =A0extern int evpy_emit_event (PyObject *event, =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 eventregistry_object *registry); diff --git a/gdb/python/py-exitedevent.c b/gdb/python/py-exitedevent.c index 457a4fe..323bdd0 100644 --- a/gdb/python/py-exitedevent.c +++ b/gdb/python/py-exitedevent.c @@ -22,9 +22,10 @@ =A0static PyTypeObject exited_event_object_type; =A0PyObject * -create_exited_event_object (LONGEST exit_code) +create_exited_event_object (LONGEST exit_code, struct inferior *inf) =A0{ =A0=A0 PyObject *exited_event; +=A0 PyObject *inf_obj; =A0=A0 exited_event =3D create_event_object (&exited_event_object_type); @@ -35,6 +36,12 @@ create_exited_event_object (LONGEST exit_code) =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 "exit_code", =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 PyLong_FromLongLong (exit_code)) < 0) =A0=A0=A0=A0 goto fail; + +=A0 inf_obj =3D inferior_to_inferior_object (inf); +=A0 if (!inf_obj || evpy_add_attribute (exited_event, +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 "inferior", +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 inf_obj) < 0) +=A0=A0=A0 goto fail; =A0=A0 return exited_event; @@ -47,14 +54,14 @@ create_exited_event_object (LONGEST exit_code) =A0=A0=A0 will create a new Python exited event object.=A0 */ =A0int -emit_exited_event (LONGEST exit_code) +emit_exited_event (LONGEST exit_code, struct inferior *inf) =A0{ =A0=A0 PyObject *event; =A0=A0 if (evregpy_no_listeners_p (gdb_py_events.exited)) =A0=A0=A0=A0 return 0; -=A0 event =3D create_exited_event_object (exit_code); +=A0 event =3D create_exited_event_object (exit_code, inf); =A0=A0 if (event) =A0=A0=A0=A0 return evpy_emit_event (event, gdb_py_events.exited); diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index b9df394..19d45d7 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -123,7 +123,7 @@ python_inferior_exit (struct inferior *inf) =A0=A0 exit_code =3D status.value.integer; =A0=A0 if (exit_code >=3D 0 -=A0=A0=A0=A0=A0 && emit_exited_event (exit_code) < 0) +=A0=A0=A0=A0=A0 && emit_exited_event (exit_code, inf) < 0) =A0=A0=A0=A0 gdbpy_print_stack (); =A0=A0 do_cleanups (cleanup); diff --git a/gdb/testsuite/gdb.python/py-events.c b/gdb/testsuite/gdb.python/py-events.c index ceb697e..665ca51 100644 --- a/gdb/testsuite/gdb.python/py-events.c +++ b/gdb/testsuite/gdb.python/py-events.c @@ -17,6 +17,7 @@ =A0*/ =A0int second(){ +=A0 fork() ; =A0=A0 return 12; =A0} diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp index e5d6daf..cdf4ae6 100644 --- a/gdb/testsuite/gdb.python/py-events.exp +++ b/gdb/testsuite/gdb.python/py-events.exp @@ -42,6 +42,8 @@ if ![runto_main ] then { =A0=A0=A0=A0 return -1 =A0} +gdb_test_no_output "set detach-on-fork off" "Don't detach on fork" + =A0gdb_test "Test_Events" "Event testers registered." =A0gdb_breakpoint "first" @@ -56,4 +58,11 @@ all threads stopped" =A0#test exited event. =A0gdb_test "continue" ".*event type: continue.* =A0.*event type: exit.* -.*exit code: 12.*" +.*exit code: 12.* +.*exit inf: 1.*" "Inferior 1 terminated." + +gdb_test "inferior 2" ".*Switching to inferior 2.*" +gdb_test "continue" ".*event type: continue.* +.*event type: exit.* +.*exit code: 12.* +.*exit inf: 2.*" "Inferior 1 terminated." diff --git a/gdb/testsuite/gdb.python/py-events.py b/gdb/testsuite/gdb.python/py-events.py index 9f05b9f..b40f074 100644 --- a/gdb/testsuite/gdb.python/py-events.py +++ b/gdb/testsuite/gdb.python/py-events.py @@ -41,6 +41,7 @@ def exit_handler (event): =A0=A0=A0=A0 if (isinstance (event, gdb.ExitedEvent)): =A0=A0=A0=A0=A0=A0=A0=A0 print "event type: exit" =A0=A0=A0=A0 print "exit code: %d" % (event.exit_code) +=A0=A0=A0 print "exit inf: %d" % (event.inferior.num) =A0def continue_handler (event): =A0=A0=A0=A0 if (isinstance (event, gdb.ContinueEvent)): --