From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4295 invoked by alias); 11 Sep 2002 20:54:06 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 4167 invoked from network); 11 Sep 2002 20:54:05 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 11 Sep 2002 20:54:05 -0000 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id NAA24531; Wed, 11 Sep 2002 13:43:09 -0700 (PDT) Message-ID: <3D7FAD68.BBB2E3C3@redhat.com> Date: Wed, 11 Sep 2002 13:54:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Elena Zannoni CC: Jelmer Vernooij , gdb-patches@sources.redhat.com Subject: Re: [RFC] -symbol-info-symbol and -symbol-list-functions References: <20020911191204.GA24463@vernstok.dyndns.org> <15743.43770.136057.80749@localhost.redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-09/txt/msg00190.txt.bz2 Elena Zannoni wrote: > > Jelmer Vernooij writes: > > Hi all! > > > > This is my first attempt to implement -symbol-info-symbol and > > -symbol-list-functions. > > > > It's not meant to be committed already, but I'm just wondering whether > > I'm using the correct functions, coding style and output. Should I > > really use search_symbols for these kinds of things? It seems a little > > inefficient to use a function that does regex matching when supplying > > a 'normal' symbol name (and it might have some issues as well with > > names that contain special regex characters). > > > > Thanks for your work. > I agree with Keith's comments, his suggestions are good ones. > > There is another thing I have noticed. The symbol-info-symbol command > is supposed to take an address as argument and return a symbol that is > located at the given address. Look at the implementation in > printcmd.c:sym_info(), and at the documentation in gdbmi.texinfo. I > think here you are just doing a search within functions only for a > symbol of a given name, if I read your code correctly. Hmmm, yeah -- "info symbol" already does that. > > Other than that, you are on the right track. As Keith points out, a > lot of these MI commands were 'inspired' by gdbtk, so it is generally > useful to look at how gdbtk solved the problem and what complications > it ran into. > > Elena > > > 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-11 20:46:06.000000000 +0200 > > @@ -113,8 +113,8 @@ > > {"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-info-symbol", 0, 0, mi_cmd_symbol_info_symbol}, > > + {"symbol-list-functions", 0, 0, mi_cmd_symbol_list_functions}, > > {"symbol-list-types", 0, 0}, > > {"symbol-list-variables", 0, 0}, > > {"symbol-locate", 0, 0}, > > 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-11 20:45:15.000000000 +0200 > > @@ -75,6 +75,8 @@ > > 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_symbol; > > +extern mi_cmd_argv_ftype mi_cmd_symbol_list_functions; > > 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-11 21:02:02.000000000 +0200 > > @@ -0,0 +1,83 @@ > > +/* 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" > > + > > +static void > > +print_symbol_search_info (struct symbol_search *matches) > > +{ > > + struct symbol_search *p; > > + > > + ui_out_list_begin (uiout, "symbols"); > > + > > + for (p = matches; p; p = p->next) > > + { > > + ui_out_list_begin (uiout, "symbol"); > > + if (p->msymbol == NULL) > > + { > > + ui_out_field_string (uiout, "file", p->symtab->filename); > > + ui_out_field_int (uiout, "line", p->symbol->line); > > + ui_out_field_string (uiout, "name", p->symbol->ginfo.name); > > + } > > + else > > + { > > + ui_out_field_string (uiout, "name", p->msymbol->ginfo.name); > > + } > > + ui_out_list_end (uiout); > > + } > > + > > + ui_out_list_end (uiout); > > +} > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_info_symbol (char *command, char **argv, int argc) > > +{ > > + struct symbol_search *matches; > > + if (argc != 1) > > + error ("mi_cmd_symbol_info_line: Usage: SYMBOL"); > > + > > + search_symbols (argv[0], FUNCTIONS_NAMESPACE, 0, NULL, &matches); > > + > > + print_symbol_search_info (matches); > > + > > + return MI_CMD_DONE; > > +} > > + > > + > > +enum mi_cmd_result > > +mi_cmd_symbol_list_functions (char *command, char **argv, int argc) > > +{ > > + struct symbol_search *matches; > > + if (argc != 0) > > + error ("mi_cmd_symbol_list_functions doesn't require any arguments"); > > + > > + search_symbols (NULL, FUNCTIONS_NAMESPACE, 0, NULL, &matches); > > + > > + print_symbol_search_info (matches); > > + > > + return MI_CMD_DONE; > > +}