a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
164 lines
5.3 KiB
Diff
164 lines
5.3 KiB
Diff
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
|
|
index 640998b..fb73e9d 100644
|
|
--- a/gdb/ChangeLog
|
|
+++ b/gdb/ChangeLog
|
|
@@ -1,3 +1,10 @@
|
|
+2009-02-03 Zoltan Varga <vargaz@gmail.com>
|
|
+
|
|
+ * cil-script.c python/python-cmd.c: Allow registration of pre/post hooks from
|
|
+ python.
|
|
+
|
|
+ * symfile.c (add_symbol_file_command): Comment out verbose messages.
|
|
+
|
|
2009-02-03 Thiago Jung Bauermann <bauerman@br.ibm.com>
|
|
|
|
* gdb/c-lang.c (c_get_string): Remove superfluous parenthesis from
|
|
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
|
|
index 835d29c..3941aa5 100644
|
|
--- a/gdb/cli/cli-script.c
|
|
+++ b/gdb/cli/cli-script.c
|
|
@@ -299,6 +299,13 @@ execute_user_command (struct cmd_list_element *c, char *args)
|
|
static int user_call_depth = 0;
|
|
extern int max_user_call_depth;
|
|
|
|
+ /* Might be a user defined command implemented in Python */
|
|
+ if (!c->user_commands && c->func)
|
|
+ {
|
|
+ (*c->func) (c, args, FALSE);
|
|
+ return;
|
|
+ }
|
|
+
|
|
old_chain = setup_user_args (args);
|
|
|
|
cmdlines = c->user_commands;
|
|
diff --git a/gdb/python/python-cmd.c b/gdb/python/python-cmd.c
|
|
index 61d5e5d..a3fbc08 100644
|
|
--- a/gdb/python/python-cmd.c
|
|
+++ b/gdb/python/python-cmd.c
|
|
@@ -339,7 +339,8 @@ gdbpy_parse_command_name (char *text, struct cmd_list_element ***base_list,
|
|
|
|
/* Object initializer; sets up gdb-side structures for command.
|
|
|
|
- Use: __init__(NAME, CMDCLASS, [COMPLETERCLASS, [PREFIX]]).
|
|
+ Use: __init__(NAME, CMDCLASS, [completerclass=COMPLETERCLASS, prefix=PREFIX,
|
|
+ pre_hook_of=PREHOOK_OF, post_hook_of=POSTHOOK_OF]).
|
|
|
|
NAME is the name of the command. It may consist of multiple words,
|
|
in which case the final word is the name of the new command, and
|
|
@@ -354,6 +355,11 @@ gdbpy_parse_command_name (char *text, struct cmd_list_element ***base_list,
|
|
|
|
If PREFIX is True, then this command is a prefix command.
|
|
|
|
+ PREHOOK_OF is the name of a gdb command this command becomes a
|
|
+ pre-execution hook of, same as if this command was defined using
|
|
+ "define hook-<cmdname>"
|
|
+ POSTHOOK_OF is the same for post-execution hooks.
|
|
+
|
|
The documentation for the command is taken from the doc string for
|
|
the python class.
|
|
|
|
@@ -362,15 +368,18 @@ static int
|
|
cmdpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|
{
|
|
cmdpy_object *obj = (cmdpy_object *) self;
|
|
- char *name;
|
|
+ char *name, *pre_hook_of = NULL, *post_hook_of = NULL;
|
|
int cmdtype;
|
|
int completetype = -1;
|
|
char *docstring = NULL;
|
|
volatile struct gdb_exception except;
|
|
struct cmd_list_element **cmd_list;
|
|
+ struct cmd_list_element *pre_hookc = NULL, *post_hookc = NULL;
|
|
char *cmd_name, *pfx_name;
|
|
PyObject *is_prefix = NULL;
|
|
int cmp;
|
|
+ static char *kwlist[] = {"name", "cmdclass", "completerclass", "prefix",
|
|
+ "pre_hook_of", "post_hook_of", NULL};
|
|
|
|
if (obj->command)
|
|
{
|
|
@@ -381,8 +390,9 @@ cmdpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|
return -1;
|
|
}
|
|
|
|
- if (! PyArg_ParseTuple (args, "si|iO", &name, &cmdtype,
|
|
- &completetype, &is_prefix))
|
|
+ if (! PyArg_ParseTupleAndKeywords (args, kwds, "si|iOss", kwlist, &name, &cmdtype,
|
|
+ &completetype, &is_prefix, &pre_hook_of,
|
|
+ &post_hook_of))
|
|
return -1;
|
|
|
|
if (cmdtype != no_class && cmdtype != class_run
|
|
@@ -402,6 +412,30 @@ cmdpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|
return -1;
|
|
}
|
|
|
|
+ if (pre_hook_of)
|
|
+ {
|
|
+ char *text = pre_hook_of;
|
|
+
|
|
+ pre_hookc = lookup_cmd_1 (&text, cmdlist, NULL, 1);
|
|
+ if (! pre_hookc)
|
|
+ {
|
|
+ PyErr_Format (PyExc_RuntimeError, _("command name given by pre_hook argument not found"));
|
|
+ return -1;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (post_hook_of)
|
|
+ {
|
|
+ char *text = post_hook_of;
|
|
+
|
|
+ post_hookc = lookup_cmd_1 (&text, cmdlist, NULL, 1);
|
|
+ if (! post_hookc)
|
|
+ {
|
|
+ PyErr_Format (PyExc_RuntimeError, _("command name given by post_hook argument not found"));
|
|
+ return -1;
|
|
+ }
|
|
+ }
|
|
+
|
|
cmd_name = gdbpy_parse_command_name (name, &cmd_list, &cmdlist);
|
|
if (! cmd_name)
|
|
return -1;
|
|
@@ -470,6 +504,18 @@ cmdpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|
cmd->func = cmdpy_function;
|
|
cmd->destroyer = cmdpy_destroyer;
|
|
|
|
+ if (pre_hookc)
|
|
+ {
|
|
+ pre_hookc->hook_pre = cmd;
|
|
+ cmd->hookee_pre = pre_hookc;
|
|
+ }
|
|
+
|
|
+ if (post_hookc)
|
|
+ {
|
|
+ post_hookc->hook_post = cmd;
|
|
+ cmd->hookee_post = post_hookc;
|
|
+ }
|
|
+
|
|
obj->command = cmd;
|
|
set_cmd_context (cmd, self);
|
|
set_cmd_completer (cmd, ((completetype == -1) ? cmdpy_completer
|
|
diff --git a/gdb/symfile.c b/gdb/symfile.c
|
|
index 14cb7b8..6d0bb40 100644
|
|
--- a/gdb/symfile.c
|
|
+++ b/gdb/symfile.c
|
|
@@ -2196,7 +2196,7 @@ add_symbol_file_command (char *args, int from_tty)
|
|
statements because hex_string returns a local static
|
|
string. */
|
|
|
|
- printf_unfiltered (_("add symbol table from file \"%s\" at\n"), filename);
|
|
+ /* printf_unfiltered (_("add symbol table from file \"%s\" at\n"), filename); */
|
|
section_addrs = alloc_section_addr_info (section_index);
|
|
make_cleanup (xfree, section_addrs);
|
|
for (i = 0; i < section_index; i++)
|
|
@@ -2211,7 +2211,7 @@ add_symbol_file_command (char *args, int from_tty)
|
|
entered on the command line. */
|
|
section_addrs->other[sec_num].name = sec;
|
|
section_addrs->other[sec_num].addr = addr;
|
|
- printf_unfiltered ("\t%s_addr = %s\n", sec, paddress (addr));
|
|
+ /* printf_unfiltered ("\t%s_addr = %s\n", sec, paddress (addr)); */
|
|
sec_num++;
|
|
|
|
/* The object's sections are initialized when a
|