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] 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
> 
> 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


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