Re: [RFC - Python] New ObjFile event

Kevin Pouget
2011-03-28T08:11:41Z

sorry, gdb/python/py-newobjfileevent.c has not been included in the
patch, here is its content:

-----
/* Python interface to new object file loading events.

Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.

This file is part of GDB.

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 "py-event.h"

static PyTypeObject new_objfile_event_object_type;

PyObject *
create_new_objfile_event_object (void)
{
return create_event_object (&new_objfile_event_object_type);
}

/* Callback function which notifies observers when a new objfile event occurs.
This function will create a new Python new_objfile event object.
Return -1 if emit fails. */

int
emit_new_objfile_event (struct objfile *objfile)
{
PyObject *event;

if (evregpy_no_listeners_p (gdb_py_events.newobjfile))
return 0;

event = create_new_objfile_event_object ();
if (event)
return evpy_emit_event (event, gdb_py_events.newobjfile);
return -1;
}

GDBPY_NEW_EVENT_TYPE (new_objfile,
"gdb.NewObjFileEvent",
"NewObjFileEvent",
"GDB new object file event object",
event_object_type,
static);
---

On Mon, Mar 28, 2011 at 4:06 AM, Kevin Pouget <kevin.pouget@gmail.com> wrote:
> Hello,
>
> following this discussion at
> http://sourceware.org/ml/gdb/2011-03/msg00136.html, I would like to
> suggest a patch for the Python event system. Based on the ''exited",
> "cont", ... events, this patch allows a python script to register an
> interest to the loading of new object files in the debuggee. GDB
> observer "observer_attach_new_objfile" is used to trigger the Python
> callback.
>
> This patch completes the auto-loading feature
> (http://sourceware.org/gdb/current/onlinedocs/gdb/objfile_002dgdb_002epy-file.html#objfile_002dgdb_002epy-file),
> and, likewise, allows Python's "gdb.current_objfile ()" to return the current
> object file.
>
> Here is an example of it utilization:
>
>> def obj_handler (event):
>>       if gdb.current_objfile () is not None:
>>               print "-->",gdb.current_objfile ().filename
>>       else:
>>               print "---------------->Cleanup"
>>
>> gdb.events.newobjfile.connect (obj_handler)
>
>
> There is still one thing I'm not happy with in the code, it's how to
> 'properly' access "gdbpy_current_objfile" ? I commented out "static"
> and declared it "extern" when I needed it, but that's certainly not
> the best way:
>
> gdb/python/python.c
> /*static*/ struct objfile *gdbpy_current_objfile;
> gdb/python/py-inferior.c
> extern struct objfile *gdbpy_current_objfile;
>
>
> please let me know what you thing about it
>
> Cordially,
>
> Kevin
>