This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] -symbol-info-symbol and -symbol-list-functions


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;
>  > +}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]