From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17251 invoked by alias); 11 Sep 2002 19:12:40 -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 17238 invoked from network); 11 Sep 2002 19:12:38 -0000 Received: from unknown (HELO smtp.hccnet.nl) (62.251.0.13) by sources.redhat.com with SMTP; 11 Sep 2002 19:12:38 -0000 Received: from charis.vernstok by smtp.hccnet.nl via fia16-123.dsl.hccnet.nl [62.251.123.16] with ESMTP id VAA15851 (8.8.8/1.13); Wed, 11 Sep 2002 21:12:36 +0200 (MET DST) Received: from jelmer by charis.vernstok with local (Exim 3.36 #1 (Debian)) id 17pCuC-0006My-00; Wed, 11 Sep 2002 21:12:04 +0200 Date: Wed, 11 Sep 2002 12:12:00 -0000 From: Jelmer Vernooij To: gdb-patches@sources.redhat.com Subject: [RFC] -symbol-info-symbol and -symbol-list-functions Message-ID: <20020911191204.GA24463@vernstok.dyndns.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="nFreZHaLTZJo0R7j" Content-Disposition: inline User-Agent: Mutt/1.4i X-Operating-System: Linux charis 2.4.18-686 X-SW-Source: 2002-09/txt/msg00185.txt.bz2 --nFreZHaLTZJo0R7j Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 499 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). Jelmer --nFreZHaLTZJo0R7j Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="gdb-mi-symbol.diff" Content-length: 5087 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; +} --nFreZHaLTZJo0R7j--