* [RFC] Updated mi-cmd-symbol.c patch
@ 2002-09-13 13:00 Jelmer Vernooij
2002-09-14 5:46 ` Jelmer Vernooij
0 siblings, 1 reply; 4+ messages in thread
From: Jelmer Vernooij @ 2002-09-13 13:00 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 449 bytes --]
Hi again!
I've updated the mi-cmd-symbol patch and tried to incorporate the
given comments.
However, I was wondering whether making
-symbol-info-address, -symbol-locate and -symbol-info-symbol one
function would be useful? In the current patch they're just all three
using the same C function.
-symbol-type seems to already be somewhat implemented in
mi/mi-cmd-var.c - would implementing this function be desired?
Comments please ! :-)
Jelmer
[-- Attachment #2: gdb-mi-symbol.diff --]
[-- Type: text/plain, Size: 9578 bytes --]
diff -r -u gdb+dejagnu-20020907/gdb/Makefile.in gdb-jelmer/gdb/Makefile.in
--- gdb+dejagnu-20020907/gdb/Makefile.in 2002-09-02 20:09:06.000000000 +0200
+++ gdb-jelmer/gdb/Makefile.in 2002-09-11 20:22:30.000000000 +0200
@@ -165,12 +165,12 @@
mi-out.o mi-console.o \
mi-cmds.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
mi-cmd-disas.o \
- mi-main.o mi-parse.o mi-getopt.o
+ mi-main.o mi-parse.o mi-getopt.o mi-cmd-symbol.o
SUBDIR_MI_SRCS = \
mi/mi-out.c mi/mi-console.c \
mi/mi-cmds.c \
mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
- mi/mi-cmd-disas.c \
+ mi/mi-cmd-disas.c mi/mi-cmd-symbol.c \
mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
SUBDIR_MI_DEPS =
SUBDIR_MI_INITS = \
@@ -2411,6 +2411,10 @@
# Need to explicitly specify the compile rule as make will do nothing
# or try to compile the object file into the mi directory.
+mi-cmd-symbol.o: $(srcdir)/mi/mi-cmd-symbol.c $(defs_h) $(mi_cmds_h) \
+ $(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
+ $(mi_getopt_h) $(gdb_events_h) $(gdb_h)
+ $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-symbol.c
mi-cmd-break.o: $(srcdir)/mi/mi-cmd-break.c $(defs_h) $(mi_cmds_h) \
$(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \
$(mi_getopt_h) $(gdb_events_h) $(gdb_h)
diff -r -u gdb+dejagnu-20020907/gdb/mi/mi-cmds.c gdb-jelmer/gdb/mi/mi-cmds.c
--- gdb+dejagnu-20020907/gdb/mi/mi-cmds.c 2001-03-06 09:21:45.000000000 +0100
+++ gdb-jelmer/gdb/mi/mi-cmds.c 2002-09-13 21:48:08.000000000 +0200
@@ -109,17 +109,17 @@
{"stack-list-frames", 0, 0, mi_cmd_stack_list_frames},
{"stack-list-locals", 0, 0, mi_cmd_stack_list_locals},
{"stack-select-frame", 0, 0, mi_cmd_stack_select_frame},
- {"symbol-info-address", 0, 0},
- {"symbol-info-file", 0, 0},
- {"symbol-info-function", 0, 0},
- {"symbol-info-line", 0, 0},
- {"symbol-info-symbol", 0, 0},
- {"symbol-list-functions", 0, 0},
- {"symbol-list-types", 0, 0},
- {"symbol-list-variables", 0, 0},
- {"symbol-locate", 0, 0},
+ {"symbol-info-address", 0, 0, mi_cmd_symbol_locate},
+ {"symbol-info-file", 0, 0, mi_cmd_symbol_info_file},
+ {"symbol-info-function", 0, 0, mi_cmd_symbol_info_function},
+ {"symbol-info-line", 0, 0, mi_cmd_symbol_info_line},
+ {"symbol-info-symbol", 0, 0, mi_cmd_symbol_locate},
+ {"symbol-list-functions", 0, 0, mi_cmd_symbol_list_symbols},
+ {"symbol-list-types", 0, 0, mi_cmd_symbol_list_symbols},
+ {"symbol-list-variables", 0, 0, mi_cmd_symbol_list_symbols},
+ {"symbol-locate", 0, 0, mi_cmd_symbol_locate},
{"symbol-type", 0, 0},
- {"target-attach", 0, 0},
+ {"target-attach", "attach %s", 0},
{"target-compare-sections", 0, 0},
{"target-detach", "detach", 0},
{"target-download", 0, mi_cmd_target_download},
diff -r -u gdb+dejagnu-20020907/gdb/mi/mi-cmds.h gdb-jelmer/gdb/mi/mi-cmds.h
--- gdb+dejagnu-20020907/gdb/mi/mi-cmds.h 2001-03-06 09:21:45.000000000 +0100
+++ gdb-jelmer/gdb/mi/mi-cmds.h 2002-09-13 21:33:47.000000000 +0200
@@ -75,6 +75,12 @@
extern mi_cmd_args_ftype mi_cmd_exec_until;
extern mi_cmd_args_ftype mi_cmd_exec_interrupt;
extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
+extern mi_cmd_argv_ftype mi_cmd_symbol_info_file;
+extern mi_cmd_argv_ftype mi_cmd_symbol_info_function;
+extern mi_cmd_argv_ftype mi_cmd_symbol_info_line;
+extern mi_cmd_argv_ftype mi_cmd_symbol_info_symbol;
+extern mi_cmd_argv_ftype mi_cmd_symbol_list_symbols;
+extern mi_cmd_argv_ftype mi_cmd_symbol_locate;
extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;
extern mi_cmd_argv_ftype mi_cmd_stack_list_args;
extern mi_cmd_argv_ftype mi_cmd_stack_list_frames;
--- /dev/null 2002-08-29 13:57:56.000000000 +0200
+++ gdb-jelmer/gdb/mi/mi-cmd-symbol.c 2002-09-13 21:48:38.000000000 +0200
@@ -0,0 +1,212 @@
+/* MI Command Set - symbol query commands.
+ Copyright 2000, 2002 Free Software Foundation, Inc.
+ Contributed by Jelmer Vernooij
+
+ 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include "defs.h"
+#include "target.h"
+#include "frame.h"
+#include "value.h"
+#include "mi-cmds.h"
+#include "ui-out.h"
+#include "symtab.h"
+#include "linespec.h"
+
+static void
+print_symbol_info (struct symtab *symtab, struct symbol *sym,
+ struct minimal_symbol *msym)
+{
+ /* Strip off some C++ special symbols, like RTTI and global
+ * constructors/destructors. */
+ if ((sym != NULL && !STREQN (SYMBOL_NAME (sym), "__tf", 4)
+ && !STREQN (SYMBOL_NAME (sym), "_GLOBAL_", 8)) || msym != NULL)
+ {
+
+ ui_out_list_begin (uiout, "symbol");
+ if (sym)
+ {
+ if (symtab->filename)
+ ui_out_field_string (uiout, "file", symtab->filename);
+ ui_out_field_int (uiout, "line", SYMBOL_LINE (sym));
+ ui_out_field_string (uiout, "name", SYMBOL_SOURCE_NAME (sym));
+ if (SYMBOL_CLASS (sym) == LOC_BLOCK)
+ ui_out_field_core_addr (uiout, "address",
+ SYMBOL_BLOCK_VALUE (sym)->startaddr);
+ }
+ else if (msym)
+ {
+ ui_out_field_string (uiout, "name", SYMBOL_SOURCE_NAME (msym));
+ ui_out_field_core_addr (uiout, "address",
+ SYMBOL_VALUE_ADDRESS (msym));
+ }
+ ui_out_list_end (uiout);
+ }
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_info_line (char *command, char **argv, int argc)
+{
+ struct symtabs_and_lines sals;
+ char *args, **canonical;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_info_line: Usage: SYMBOL");
+
+ args = argv[0];
+
+ sals = decode_line_1 (&args, 1, NULL, 0, &canonical);
+
+ if (sals.nelts == 1)
+ {
+ ui_out_field_int (uiout, "line", sals.sals[0].line);
+ ui_out_field_string (uiout, "file", sals.sals[0].symtab->filename);
+ return MI_CMD_DONE;
+ }
+
+ error ("No such symbol");
+
+ return MI_CMD_DONE;
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_locate (char *command, char **argv, int argc)
+{
+ struct symtabs_and_lines sals;
+ struct symbol *sym;
+ struct minimal_symbol *msym;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_locate: Usage: SYMBOL");
+
+ sals = decode_line_spec (argv[0], 1);
+
+ if (sals.nelts != 1)
+ error ("No such symbol");
+
+ resolve_sal_pc (&sals.sals[0]);
+
+ sym = find_pc_function (sals.sals[0].pc);
+ msym = lookup_minimal_symbol_by_pc (sals.sals[0].pc);
+
+ print_symbol_info (sals.sals[0].symtab, sym, msym);
+
+ free (sals.sals);
+
+ return MI_CMD_DONE;
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_info_file (char *command, char **argv, int argc)
+{
+ struct symtab *st;
+ char *fullname;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_info_file: Usage: FILE");
+
+ st = lookup_symtab (argv[0]);
+
+ if (!st)
+ error ("No such source file");
+
+ if (st->fullname)
+ ui_out_field_string (uiout, "file", st->fullname);
+ else
+ ui_out_field_string (uiout, "file", symtab_to_filename (st));
+
+ return MI_CMD_DONE;
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_info_function (char *command, char **argv, int argc)
+{
+ char *function = "";
+ struct symtabs_and_lines sals;
+ struct symbol *sym;
+ struct minimal_symbol *msym;
+ char *args, **canonical;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_info_function: Usage: SYMBOL");
+
+ args = argv[0];
+
+ sals = decode_line_1 (&args, 1, NULL, 0, &canonical);
+
+ if (sals.nelts == 1)
+ {
+ resolve_sal_pc (&sals.sals[0]);
+ /* Try 'normal' symbol first */
+ if ((sym = find_pc_function (sals.sals[0].pc)))
+ {
+ function = SYMBOL_SOURCE_NAME (sym);
+ }
+ else if ((msym = lookup_minimal_symbol_by_pc (sals.sals[0].pc)))
+ {
+ function = SYMBOL_SOURCE_NAME (msym);
+ }
+
+ ui_out_field_string (uiout, "function", function);
+ return MI_CMD_DONE;
+ }
+
+ error ("No such symbol");
+ return MI_CMD_DONE;
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_list_symbols (char *command, char **argv, int argc)
+{
+ struct symbol_search *matches;
+ struct symbol_search *p;
+ struct cleanup *old_chain = NULL;
+ namespace_enum space = 0;
+ char *function_name;
+ if (argc > 1)
+ error ("%s: Usage: [FUNCTION]", command);
+
+ if (strcmp (command, "symbol-list-functions") == 0)
+ space = FUNCTIONS_NAMESPACE;
+ else if (strcmp (command, "symbol-list-types") == 0)
+ space = TYPES_NAMESPACE;
+ else if (strcmp (command, "symbol-list-variables") == 0)
+ space = VARIABLES_NAMESPACE;
+ else
+ error ("mi_cmd_symbol_list_symbols: Called for illegal command %s!",
+ command);
+
+ search_symbols (argv[0], space, 0, NULL, &matches);
+
+ if (matches != NULL)
+ old_chain = make_cleanup_free_search_symbols (matches);
+
+ ui_out_list_begin (uiout, "symbols");
+
+ for (p = matches; p; p = p->next)
+ {
+ print_symbol_info (p->symtab, p->symbol, p->msymbol);
+ }
+
+ ui_out_list_end (uiout);
+
+ if (matches)
+ do_cleanups (old_chain);
+
+ return MI_CMD_DONE;
+}
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [RFC] Updated mi-cmd-symbol.c patch 2002-09-13 13:00 [RFC] Updated mi-cmd-symbol.c patch Jelmer Vernooij @ 2002-09-14 5:46 ` Jelmer Vernooij 2002-09-14 8:13 ` Daniel Jacobowitz 0 siblings, 1 reply; 4+ messages in thread From: Jelmer Vernooij @ 2002-09-14 5:46 UTC (permalink / raw) To: gdb-patches Btw, is there currently any way to determine whether the output from gdb/mi comes from gdb/mi or from the program that's being debugged? The docs say that gdb prepends such lines with a '@' but that's not what gdb really does... Jelmer On Fri, Sep 13, 2002 at 09:59:41PM +0200, Jelmer Vernooij wrote about '[RFC] Updated mi-cmd-symbol.c patch': > I've updated the mi-cmd-symbol patch and tried to incorporate the > given comments. > However, I was wondering whether making > -symbol-info-address, -symbol-locate and -symbol-info-symbol one > function would be useful? In the current patch they're just all three > using the same C function. > -symbol-type seems to already be somewhat implemented in > mi/mi-cmd-var.c - would implementing this function be desired? > Comments please ! :-) > Jelmer > diff -r -u gdb+dejagnu-20020907/gdb/Makefile.in gdb-jelmer/gdb/Makefile.in > --- gdb+dejagnu-20020907/gdb/Makefile.in 2002-09-02 20:09:06.000000000 +0200 > +++ gdb-jelmer/gdb/Makefile.in 2002-09-11 20:22:30.000000000 +0200 > @@ -165,12 +165,12 @@ > mi-out.o mi-console.o \ > mi-cmds.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \ > mi-cmd-disas.o \ > - mi-main.o mi-parse.o mi-getopt.o > + mi-main.o mi-parse.o mi-getopt.o mi-cmd-symbol.o > SUBDIR_MI_SRCS = \ > mi/mi-out.c mi/mi-console.c \ > mi/mi-cmds.c \ > mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \ > - mi/mi-cmd-disas.c \ > + mi/mi-cmd-disas.c mi/mi-cmd-symbol.c \ > mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c > SUBDIR_MI_DEPS = > SUBDIR_MI_INITS = \ > @@ -2411,6 +2411,10 @@ > # Need to explicitly specify the compile rule as make will do nothing > # or try to compile the object file into the mi directory. > +mi-cmd-symbol.o: $(srcdir)/mi/mi-cmd-symbol.c $(defs_h) $(mi_cmds_h) \ > + $(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \ > + $(mi_getopt_h) $(gdb_events_h) $(gdb_h) > + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-symbol.c > mi-cmd-break.o: $(srcdir)/mi/mi-cmd-break.c $(defs_h) $(mi_cmds_h) \ > $(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \ > $(mi_getopt_h) $(gdb_events_h) $(gdb_h) > diff -r -u gdb+dejagnu-20020907/gdb/mi/mi-cmds.c gdb-jelmer/gdb/mi/mi-cmds.c > --- gdb+dejagnu-20020907/gdb/mi/mi-cmds.c 2001-03-06 09:21:45.000000000 +0100 > +++ gdb-jelmer/gdb/mi/mi-cmds.c 2002-09-13 21:48:08.000000000 +0200 > @@ -109,17 +109,17 @@ > {"stack-list-frames", 0, 0, mi_cmd_stack_list_frames}, > {"stack-list-locals", 0, 0, mi_cmd_stack_list_locals}, > {"stack-select-frame", 0, 0, mi_cmd_stack_select_frame}, > - {"symbol-info-address", 0, 0}, > - {"symbol-info-file", 0, 0}, > - {"symbol-info-function", 0, 0}, > - {"symbol-info-line", 0, 0}, > - {"symbol-info-symbol", 0, 0}, > - {"symbol-list-functions", 0, 0}, > - {"symbol-list-types", 0, 0}, > - {"symbol-list-variables", 0, 0}, > - {"symbol-locate", 0, 0}, > + {"symbol-info-address", 0, 0, mi_cmd_symbol_locate}, > + {"symbol-info-file", 0, 0, mi_cmd_symbol_info_file}, > + {"symbol-info-function", 0, 0, mi_cmd_symbol_info_function}, > + {"symbol-info-line", 0, 0, mi_cmd_symbol_info_line}, > + {"symbol-info-symbol", 0, 0, mi_cmd_symbol_locate}, > + {"symbol-list-functions", 0, 0, mi_cmd_symbol_list_symbols}, > + {"symbol-list-types", 0, 0, mi_cmd_symbol_list_symbols}, > + {"symbol-list-variables", 0, 0, mi_cmd_symbol_list_symbols}, > + {"symbol-locate", 0, 0, mi_cmd_symbol_locate}, > {"symbol-type", 0, 0}, > - {"target-attach", 0, 0}, > + {"target-attach", "attach %s", 0}, > {"target-compare-sections", 0, 0}, > {"target-detach", "detach", 0}, > {"target-download", 0, mi_cmd_target_download}, > diff -r -u gdb+dejagnu-20020907/gdb/mi/mi-cmds.h gdb-jelmer/gdb/mi/mi-cmds.h > --- gdb+dejagnu-20020907/gdb/mi/mi-cmds.h 2001-03-06 09:21:45.000000000 +0100 > +++ gdb-jelmer/gdb/mi/mi-cmds.h 2002-09-13 21:33:47.000000000 +0200 > @@ -75,6 +75,12 @@ > extern mi_cmd_args_ftype mi_cmd_exec_until; > extern mi_cmd_args_ftype mi_cmd_exec_interrupt; > extern mi_cmd_argv_ftype mi_cmd_gdb_exit; > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_file; > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_function; > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_line; > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_symbol; > +extern mi_cmd_argv_ftype mi_cmd_symbol_list_symbols; > +extern mi_cmd_argv_ftype mi_cmd_symbol_locate; > extern mi_cmd_argv_ftype mi_cmd_stack_info_depth; > extern mi_cmd_argv_ftype mi_cmd_stack_list_args; > extern mi_cmd_argv_ftype mi_cmd_stack_list_frames; > --- /dev/null 2002-08-29 13:57:56.000000000 +0200 > +++ gdb-jelmer/gdb/mi/mi-cmd-symbol.c 2002-09-13 21:48:38.000000000 +0200 > @@ -0,0 +1,212 @@ > +/* MI Command Set - symbol query commands. > + Copyright 2000, 2002 Free Software Foundation, Inc. > + Contributed by Jelmer Vernooij > + > + 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 2 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, write to the Free Software > + Foundation, Inc., 59 Temple Place - Suite 330, > + Boston, MA 02111-1307, USA. */ > + > +#include "defs.h" > +#include "target.h" > +#include "frame.h" > +#include "value.h" > +#include "mi-cmds.h" > +#include "ui-out.h" > +#include "symtab.h" > +#include "linespec.h" > + > +static void > +print_symbol_info (struct symtab *symtab, struct symbol *sym, > + struct minimal_symbol *msym) > +{ > + /* Strip off some C++ special symbols, like RTTI and global > + * constructors/destructors. */ > + if ((sym != NULL && !STREQN (SYMBOL_NAME (sym), "__tf", 4) > + && !STREQN (SYMBOL_NAME (sym), "_GLOBAL_", 8)) || msym != NULL) > + { > + > + ui_out_list_begin (uiout, "symbol"); > + if (sym) > + { > + if (symtab->filename) > + ui_out_field_string (uiout, "file", symtab->filename); > + ui_out_field_int (uiout, "line", SYMBOL_LINE (sym)); > + ui_out_field_string (uiout, "name", SYMBOL_SOURCE_NAME (sym)); > + if (SYMBOL_CLASS (sym) == LOC_BLOCK) > + ui_out_field_core_addr (uiout, "address", > + SYMBOL_BLOCK_VALUE (sym)->startaddr); > + } > + else if (msym) > + { > + ui_out_field_string (uiout, "name", SYMBOL_SOURCE_NAME (msym)); > + ui_out_field_core_addr (uiout, "address", > + SYMBOL_VALUE_ADDRESS (msym)); > + } > + ui_out_list_end (uiout); > + } > +} > + > +enum mi_cmd_result > +mi_cmd_symbol_info_line (char *command, char **argv, int argc) > +{ > + struct symtabs_and_lines sals; > + char *args, **canonical; > + > + if (argc != 1) > + error ("mi_cmd_symbol_info_line: Usage: SYMBOL"); > + > + args = argv[0]; > + > + sals = decode_line_1 (&args, 1, NULL, 0, &canonical); > + > + if (sals.nelts == 1) > + { > + ui_out_field_int (uiout, "line", sals.sals[0].line); > + ui_out_field_string (uiout, "file", sals.sals[0].symtab->filename); > + return MI_CMD_DONE; > + } > + > + error ("No such symbol"); > + > + return MI_CMD_DONE; > +} > + > +enum mi_cmd_result > +mi_cmd_symbol_locate (char *command, char **argv, int argc) > +{ > + struct symtabs_and_lines sals; > + struct symbol *sym; > + struct minimal_symbol *msym; > + > + if (argc != 1) > + error ("mi_cmd_symbol_locate: Usage: SYMBOL"); > + > + sals = decode_line_spec (argv[0], 1); > + > + if (sals.nelts != 1) > + error ("No such symbol"); > + > + resolve_sal_pc (&sals.sals[0]); > + > + sym = find_pc_function (sals.sals[0].pc); > + msym = lookup_minimal_symbol_by_pc (sals.sals[0].pc); > + > + print_symbol_info (sals.sals[0].symtab, sym, msym); > + > + free (sals.sals); > + > + return MI_CMD_DONE; > +} > + > +enum mi_cmd_result > +mi_cmd_symbol_info_file (char *command, char **argv, int argc) > +{ > + struct symtab *st; > + char *fullname; > + > + if (argc != 1) > + error ("mi_cmd_symbol_info_file: Usage: FILE"); > + > + st = lookup_symtab (argv[0]); > + > + if (!st) > + error ("No such source file"); > + > + if (st->fullname) > + ui_out_field_string (uiout, "file", st->fullname); > + else > + ui_out_field_string (uiout, "file", symtab_to_filename (st)); > + > + return MI_CMD_DONE; > +} > + > +enum mi_cmd_result > +mi_cmd_symbol_info_function (char *command, char **argv, int argc) > +{ > + char *function = ""; > + struct symtabs_and_lines sals; > + struct symbol *sym; > + struct minimal_symbol *msym; > + char *args, **canonical; > + > + if (argc != 1) > + error ("mi_cmd_symbol_info_function: Usage: SYMBOL"); > + > + args = argv[0]; > + > + sals = decode_line_1 (&args, 1, NULL, 0, &canonical); > + > + if (sals.nelts == 1) > + { > + resolve_sal_pc (&sals.sals[0]); > + /* Try 'normal' symbol first */ > + if ((sym = find_pc_function (sals.sals[0].pc))) > + { > + function = SYMBOL_SOURCE_NAME (sym); > + } > + else if ((msym = lookup_minimal_symbol_by_pc (sals.sals[0].pc))) > + { > + function = SYMBOL_SOURCE_NAME (msym); > + } > + > + ui_out_field_string (uiout, "function", function); > + return MI_CMD_DONE; > + } > + > + error ("No such symbol"); > + return MI_CMD_DONE; > +} > + > +enum mi_cmd_result > +mi_cmd_symbol_list_symbols (char *command, char **argv, int argc) > +{ > + struct symbol_search *matches; > + struct symbol_search *p; > + struct cleanup *old_chain = NULL; > + namespace_enum space = 0; > + char *function_name; > + if (argc > 1) > + error ("%s: Usage: [FUNCTION]", command); > + > + if (strcmp (command, "symbol-list-functions") == 0) > + space = FUNCTIONS_NAMESPACE; > + else if (strcmp (command, "symbol-list-types") == 0) > + space = TYPES_NAMESPACE; > + else if (strcmp (command, "symbol-list-variables") == 0) > + space = VARIABLES_NAMESPACE; > + else > + error ("mi_cmd_symbol_list_symbols: Called for illegal command %s!", > + command); > + > + search_symbols (argv[0], space, 0, NULL, &matches); > + > + if (matches != NULL) > + old_chain = make_cleanup_free_search_symbols (matches); > + > + ui_out_list_begin (uiout, "symbols"); > + > + for (p = matches; p; p = p->next) > + { > + print_symbol_info (p->symtab, p->symbol, p->msymbol); > + } > + > + ui_out_list_end (uiout); > + > + if (matches) > + do_cleanups (old_chain); > + > + return MI_CMD_DONE; > +} -- Jelmer Vernooij <jelmer@nl.linux.org> - http://nl.linux.org/~jelmer/ Development And Underdevelopment: http://library.thinkquest.org/C0110231/ Listening to Radio 3FM 14:43:13 up 23:43, 9 users, load average: 0.31, 0.46, 0.43 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC] Updated mi-cmd-symbol.c patch 2002-09-14 5:46 ` Jelmer Vernooij @ 2002-09-14 8:13 ` Daniel Jacobowitz 2002-09-16 13:36 ` Jelmer Vernooij 0 siblings, 1 reply; 4+ messages in thread From: Daniel Jacobowitz @ 2002-09-14 8:13 UTC (permalink / raw) To: Jelmer Vernooij; +Cc: gdb-patches Not when running natively. It's a known bug, although no one has really decided what to do about it. For instance, some programs simply require a terminal - we need some way to provide them a terminal, for graphical debuggers to use... On Sat, Sep 14, 2002 at 02:46:14PM +0200, Jelmer Vernooij wrote: > Btw, is there currently any way to determine whether the output from > gdb/mi comes from gdb/mi or from the program that's being debugged? > The docs say that gdb prepends such lines with a '@' but that's not > what gdb really does... > > Jelmer > > On Fri, Sep 13, 2002 at 09:59:41PM +0200, Jelmer Vernooij wrote about '[RFC] Updated mi-cmd-symbol.c patch': > > I've updated the mi-cmd-symbol patch and tried to incorporate the > > given comments. > > > However, I was wondering whether making > > -symbol-info-address, -symbol-locate and -symbol-info-symbol one > > function would be useful? In the current patch they're just all three > > using the same C function. > > > -symbol-type seems to already be somewhat implemented in > > mi/mi-cmd-var.c - would implementing this function be desired? > > > Comments please ! :-) > > > Jelmer > > > diff -r -u gdb+dejagnu-20020907/gdb/Makefile.in gdb-jelmer/gdb/Makefile.in > > --- gdb+dejagnu-20020907/gdb/Makefile.in 2002-09-02 20:09:06.000000000 +0200 > > +++ gdb-jelmer/gdb/Makefile.in 2002-09-11 20:22:30.000000000 +0200 > > @@ -165,12 +165,12 @@ > > mi-out.o mi-console.o \ > > mi-cmds.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \ > > mi-cmd-disas.o \ > > - mi-main.o mi-parse.o mi-getopt.o > > + mi-main.o mi-parse.o mi-getopt.o mi-cmd-symbol.o > > SUBDIR_MI_SRCS = \ > > mi/mi-out.c mi/mi-console.c \ > > mi/mi-cmds.c \ > > mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \ > > - mi/mi-cmd-disas.c \ > > + mi/mi-cmd-disas.c mi/mi-cmd-symbol.c \ > > mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c > > SUBDIR_MI_DEPS = > > SUBDIR_MI_INITS = \ > > @@ -2411,6 +2411,10 @@ > > # Need to explicitly specify the compile rule as make will do nothing > > # or try to compile the object file into the mi directory. > > > +mi-cmd-symbol.o: $(srcdir)/mi/mi-cmd-symbol.c $(defs_h) $(mi_cmds_h) \ > > + $(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \ > > + $(mi_getopt_h) $(gdb_events_h) $(gdb_h) > > + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-symbol.c > > mi-cmd-break.o: $(srcdir)/mi/mi-cmd-break.c $(defs_h) $(mi_cmds_h) \ > > $(ui_out_h) $(mi_out_h) $(breakpoint_h) $(gdb_string_h) \ > > $(mi_getopt_h) $(gdb_events_h) $(gdb_h) > > diff -r -u gdb+dejagnu-20020907/gdb/mi/mi-cmds.c gdb-jelmer/gdb/mi/mi-cmds.c > > --- gdb+dejagnu-20020907/gdb/mi/mi-cmds.c 2001-03-06 09:21:45.000000000 +0100 > > +++ gdb-jelmer/gdb/mi/mi-cmds.c 2002-09-13 21:48:08.000000000 +0200 > > @@ -109,17 +109,17 @@ > > {"stack-list-frames", 0, 0, mi_cmd_stack_list_frames}, > > {"stack-list-locals", 0, 0, mi_cmd_stack_list_locals}, > > {"stack-select-frame", 0, 0, mi_cmd_stack_select_frame}, > > - {"symbol-info-address", 0, 0}, > > - {"symbol-info-file", 0, 0}, > > - {"symbol-info-function", 0, 0}, > > - {"symbol-info-line", 0, 0}, > > - {"symbol-info-symbol", 0, 0}, > > - {"symbol-list-functions", 0, 0}, > > - {"symbol-list-types", 0, 0}, > > - {"symbol-list-variables", 0, 0}, > > - {"symbol-locate", 0, 0}, > > + {"symbol-info-address", 0, 0, mi_cmd_symbol_locate}, > > + {"symbol-info-file", 0, 0, mi_cmd_symbol_info_file}, > > + {"symbol-info-function", 0, 0, mi_cmd_symbol_info_function}, > > + {"symbol-info-line", 0, 0, mi_cmd_symbol_info_line}, > > + {"symbol-info-symbol", 0, 0, mi_cmd_symbol_locate}, > > + {"symbol-list-functions", 0, 0, mi_cmd_symbol_list_symbols}, > > + {"symbol-list-types", 0, 0, mi_cmd_symbol_list_symbols}, > > + {"symbol-list-variables", 0, 0, mi_cmd_symbol_list_symbols}, > > + {"symbol-locate", 0, 0, mi_cmd_symbol_locate}, > > {"symbol-type", 0, 0}, > > - {"target-attach", 0, 0}, > > + {"target-attach", "attach %s", 0}, > > {"target-compare-sections", 0, 0}, > > {"target-detach", "detach", 0}, > > {"target-download", 0, mi_cmd_target_download}, > > diff -r -u gdb+dejagnu-20020907/gdb/mi/mi-cmds.h gdb-jelmer/gdb/mi/mi-cmds.h > > --- gdb+dejagnu-20020907/gdb/mi/mi-cmds.h 2001-03-06 09:21:45.000000000 +0100 > > +++ gdb-jelmer/gdb/mi/mi-cmds.h 2002-09-13 21:33:47.000000000 +0200 > > @@ -75,6 +75,12 @@ > > extern mi_cmd_args_ftype mi_cmd_exec_until; > > extern mi_cmd_args_ftype mi_cmd_exec_interrupt; > > extern mi_cmd_argv_ftype mi_cmd_gdb_exit; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_file; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_function; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_line; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_info_symbol; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_list_symbols; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_locate; > > extern mi_cmd_argv_ftype mi_cmd_stack_info_depth; > > extern mi_cmd_argv_ftype mi_cmd_stack_list_args; > > extern mi_cmd_argv_ftype mi_cmd_stack_list_frames; > > --- /dev/null 2002-08-29 13:57:56.000000000 +0200 > > +++ gdb-jelmer/gdb/mi/mi-cmd-symbol.c 2002-09-13 21:48:38.000000000 +0200 > > @@ -0,0 +1,212 @@ > > +/* MI Command Set - symbol query commands. > > + Copyright 2000, 2002 Free Software Foundation, Inc. > > + Contributed by Jelmer Vernooij > > + > > + 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 2 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, write to the Free Software > > + Foundation, Inc., 59 Temple Place - Suite 330, > > + Boston, MA 02111-1307, USA. */ > > + > > +#include "defs.h" > > +#include "target.h" > > +#include "frame.h" > > +#include "value.h" > > +#include "mi-cmds.h" > > +#include "ui-out.h" > > +#include "symtab.h" > > +#include "linespec.h" > > + > > +static void > > +print_symbol_info (struct symtab *symtab, struct symbol *sym, > > + struct minimal_symbol *msym) > > +{ > > + /* Strip off some C++ special symbols, like RTTI and global > > + * constructors/destructors. */ > > + if ((sym != NULL && !STREQN (SYMBOL_NAME (sym), "__tf", 4) > > + && !STREQN (SYMBOL_NAME (sym), "_GLOBAL_", 8)) || msym != NULL) > > + { > > + > > + ui_out_list_begin (uiout, "symbol"); > > + if (sym) > > + { > > + if (symtab->filename) > > + ui_out_field_string (uiout, "file", symtab->filename); > > + ui_out_field_int (uiout, "line", SYMBOL_LINE (sym)); > > + ui_out_field_string (uiout, "name", SYMBOL_SOURCE_NAME (sym)); > > + if (SYMBOL_CLASS (sym) == LOC_BLOCK) > > + ui_out_field_core_addr (uiout, "address", > > + SYMBOL_BLOCK_VALUE (sym)->startaddr); > > + } > > + else if (msym) > > + { > > + ui_out_field_string (uiout, "name", SYMBOL_SOURCE_NAME (msym)); > > + ui_out_field_core_addr (uiout, "address", > > + SYMBOL_VALUE_ADDRESS (msym)); > > + } > > + ui_out_list_end (uiout); > > + } > > +} > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_info_line (char *command, char **argv, int argc) > > +{ > > + struct symtabs_and_lines sals; > > + char *args, **canonical; > > + > > + if (argc != 1) > > + error ("mi_cmd_symbol_info_line: Usage: SYMBOL"); > > + > > + args = argv[0]; > > + > > + sals = decode_line_1 (&args, 1, NULL, 0, &canonical); > > + > > + if (sals.nelts == 1) > > + { > > + ui_out_field_int (uiout, "line", sals.sals[0].line); > > + ui_out_field_string (uiout, "file", sals.sals[0].symtab->filename); > > + return MI_CMD_DONE; > > + } > > + > > + error ("No such symbol"); > > + > > + return MI_CMD_DONE; > > +} > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_locate (char *command, char **argv, int argc) > > +{ > > + struct symtabs_and_lines sals; > > + struct symbol *sym; > > + struct minimal_symbol *msym; > > + > > + if (argc != 1) > > + error ("mi_cmd_symbol_locate: Usage: SYMBOL"); > > + > > + sals = decode_line_spec (argv[0], 1); > > + > > + if (sals.nelts != 1) > > + error ("No such symbol"); > > + > > + resolve_sal_pc (&sals.sals[0]); > > + > > + sym = find_pc_function (sals.sals[0].pc); > > + msym = lookup_minimal_symbol_by_pc (sals.sals[0].pc); > > + > > + print_symbol_info (sals.sals[0].symtab, sym, msym); > > + > > + free (sals.sals); > > + > > + return MI_CMD_DONE; > > +} > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_info_file (char *command, char **argv, int argc) > > +{ > > + struct symtab *st; > > + char *fullname; > > + > > + if (argc != 1) > > + error ("mi_cmd_symbol_info_file: Usage: FILE"); > > + > > + st = lookup_symtab (argv[0]); > > + > > + if (!st) > > + error ("No such source file"); > > + > > + if (st->fullname) > > + ui_out_field_string (uiout, "file", st->fullname); > > + else > > + ui_out_field_string (uiout, "file", symtab_to_filename (st)); > > + > > + return MI_CMD_DONE; > > +} > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_info_function (char *command, char **argv, int argc) > > +{ > > + char *function = ""; > > + struct symtabs_and_lines sals; > > + struct symbol *sym; > > + struct minimal_symbol *msym; > > + char *args, **canonical; > > + > > + if (argc != 1) > > + error ("mi_cmd_symbol_info_function: Usage: SYMBOL"); > > + > > + args = argv[0]; > > + > > + sals = decode_line_1 (&args, 1, NULL, 0, &canonical); > > + > > + if (sals.nelts == 1) > > + { > > + resolve_sal_pc (&sals.sals[0]); > > + /* Try 'normal' symbol first */ > > + if ((sym = find_pc_function (sals.sals[0].pc))) > > + { > > + function = SYMBOL_SOURCE_NAME (sym); > > + } > > + else if ((msym = lookup_minimal_symbol_by_pc (sals.sals[0].pc))) > > + { > > + function = SYMBOL_SOURCE_NAME (msym); > > + } > > + > > + ui_out_field_string (uiout, "function", function); > > + return MI_CMD_DONE; > > + } > > + > > + error ("No such symbol"); > > + return MI_CMD_DONE; > > +} > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_list_symbols (char *command, char **argv, int argc) > > +{ > > + struct symbol_search *matches; > > + struct symbol_search *p; > > + struct cleanup *old_chain = NULL; > > + namespace_enum space = 0; > > + char *function_name; > > + if (argc > 1) > > + error ("%s: Usage: [FUNCTION]", command); > > + > > + if (strcmp (command, "symbol-list-functions") == 0) > > + space = FUNCTIONS_NAMESPACE; > > + else if (strcmp (command, "symbol-list-types") == 0) > > + space = TYPES_NAMESPACE; > > + else if (strcmp (command, "symbol-list-variables") == 0) > > + space = VARIABLES_NAMESPACE; > > + else > > + error ("mi_cmd_symbol_list_symbols: Called for illegal command %s!", > > + command); > > + > > + search_symbols (argv[0], space, 0, NULL, &matches); > > + > > + if (matches != NULL) > > + old_chain = make_cleanup_free_search_symbols (matches); > > + > > + ui_out_list_begin (uiout, "symbols"); > > + > > + for (p = matches; p; p = p->next) > > + { > > + print_symbol_info (p->symtab, p->symbol, p->msymbol); > > + } > > + > > + ui_out_list_end (uiout); > > + > > + if (matches) > > + do_cleanups (old_chain); > > + > > + return MI_CMD_DONE; > > +} > > > -- > Jelmer Vernooij <jelmer@nl.linux.org> - http://nl.linux.org/~jelmer/ > Development And Underdevelopment: http://library.thinkquest.org/C0110231/ > Listening to Radio 3FM > 14:43:13 up 23:43, 9 users, load average: 0.31, 0.46, 0.43 > -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC] Updated mi-cmd-symbol.c patch 2002-09-14 8:13 ` Daniel Jacobowitz @ 2002-09-16 13:36 ` Jelmer Vernooij 0 siblings, 0 replies; 4+ messages in thread From: Jelmer Vernooij @ 2002-09-16 13:36 UTC (permalink / raw) To: gdb-patches The 'normal' gdb has the option to specify a in and an out filedescriptor... Shouldn't there be such a thing for MI? Or maybe a fifo? Jelmer On Sat, Sep 14, 2002 at 11:14:06AM -0400, Daniel Jacobowitz wrote about 'Re: [RFC] Updated mi-cmd-symbol.c patch': > Not when running natively. It's a known bug, although no one has > really decided what to do about it. For instance, some programs simply > require a terminal - we need some way to provide them a terminal, for > graphical debuggers to use... > On Sat, Sep 14, 2002 at 02:46:14PM +0200, Jelmer Vernooij wrote: > > Btw, is there currently any way to determine whether the output from > > gdb/mi comes from gdb/mi or from the program that's being debugged? > > The docs say that gdb prepends such lines with a '@' but that's not > > what gdb really does... -- Jelmer Vernooij http://samba.org/~jelmer/ Samba Team http://www.samba.org/ Running ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2002-09-16 20:36 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2002-09-13 13:00 [RFC] Updated mi-cmd-symbol.c patch Jelmer Vernooij 2002-09-14 5:46 ` Jelmer Vernooij 2002-09-14 8:13 ` Daniel Jacobowitz 2002-09-16 13:36 ` Jelmer Vernooij
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox