* [PATCH] mi-symbol-*
@ 2002-11-05 12:46 Jelmer Vernooij
2002-11-05 22:56 ` Eli Zaretskii
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Jelmer Vernooij @ 2002-11-05 12:46 UTC (permalink / raw)
To: gdb-patches; +Cc: Andrew Cagney, Elena Zannoni
[-- Attachment #1: Type: text/plain, Size: 385 bytes --]
Hi!
Here's the latest version of my mi-symbol-* patch. I received the copyright
assignment I signed back today from the FSF, signed by Bradly Kuhn.
Anything else I should do before the patch gets in and who will put it
in?
Thanks,
Jelmer
--
Jelmer Vernooij <jelmer@nl.linux.org> - http://nl.linux.org/~jelmer/
18:04:45 up 3 days, 10:58, 9 users, load average: 0.13, 0.54, 0.50
[-- Attachment #2: gdb-mi-symbol-4.diff --]
[-- Type: text/plain, Size: 18347 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/gdbmi.texinfo gdb-jelmer/gdb/mi/gdbmi.texinfo
--- gdb+dejagnu-20020907/gdb/mi/gdbmi.texinfo 2002-06-17 19:30:57.000000000 +0200
+++ gdb-jelmer/gdb/mi/gdbmi.texinfo 2002-09-25 20:07:32.000000000 +0200
@@ -97,8 +97,8 @@
@heading Acknowledgments
-In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs and
-Elena Zannoni.
+In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs,
+Jelmer Vernooij and Elena Zannoni.
@menu
* GDB/MI Command Syntax::
@@ -355,7 +355,7 @@
the output received from @sc{gdb/mi}.
@subsubheading Target Stop
-@c Ummm... There is no "-stop" command. This assumes async, no?
+@c Ummm... There is no "-stop" command. This assumes async, no?
Here's an example of stopping the inferior process:
@example
@@ -2366,10 +2366,12 @@
used without arguments, clears @value{GDBN}'s symbol table info. No output is
produced, except for a completion notification.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{symbol-file}.
+
@subsubheading Example
@smallexample
@@ -2858,13 +2860,19 @@
Describe where @var{symbol} is stored.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{info address}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-address main
+^done,symbol=@{file="bla.c",line="16",name="main",address="0x0804842c"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-file} Command
@findex -symbol-info-file
@@ -2872,19 +2880,25 @@
@subsubheading Synopsis
@example
- -symbol-info-file
+ -symbol-info-file @var{file}
@end example
-Show the file for the symbol.
+Show the full path to the source file @var{file}.
+
@subsubheading @value{GDBN} Command
There's no equivalent @value{GDBN} command. @code{gdbtk} has
@samp{gdb_find_file}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-file bla.c
+^done,file="/home/jelmer/bla.c"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-function} Command
@findex -symbol-info-function
@@ -2892,18 +2906,24 @@
@subsubheading Synopsis
@example
- -symbol-info-function
+ -symbol-info-function @var{symbol}
@end example
-Show which function the symbol lives in.
+Show which function the @var{symbol} lives in.
+
@subsubheading @value{GDBN} Command
@samp{gdb_get_function} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-function *0x0804842d
+^done,function="main"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-line} Command
@findex -symbol-info-line
@@ -2911,19 +2931,25 @@
@subsubheading Synopsis
@example
- -symbol-info-line
+ -symbol-info-line @var{symbol}
@end example
-Show the core addresses of the code for a source line.
+Show the line and file that contains @var{symbol}
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} comamnd is @samp{info line}.
@code{gdbtk} has the @samp{gdb_get_line} and @samp{gdb_get_file} commands.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-line main
+^done,line="17",file="bla.c"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-symbol} Command
@findex -symbol-info-symbol
@@ -2931,18 +2957,24 @@
@subsubheading Synopsis
@example
- -symbol-info-symbol @var{addr}
+ -symbol-info-symbol @var{symbol}
@end example
-Describe what symbol is at location @var{addr}.
+Give details about @var{symbol}.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{info symbol}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-symbol function_a
+^done,symbol=@{file="bla.c",line="6",name="function_a",address="0x080483f0"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-list-functions} Command
@findex -symbol-list-functions
@@ -2950,19 +2982,27 @@
@subsubheading Synopsis
@example
- -symbol-list-functions
+ -symbol-list-functions @var{pattern}
@end example
-List the functions in the executable.
+List functions in the executable. If @var{pattern} is specified,
+list all functions that match @var{pattern}; otherwise, list
+all functions.
+
@subsubheading @value{GDBN} Command
@samp{info functions} in @value{GDBN}, @samp{gdb_listfunc} and
@samp{gdb_search} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-list-functions funct.*
+^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="14",name="function_a",address="0x080483d0"@},symbol=@{file="./gdb.mi/symbol.c",line="19",name="function_b",address="0x080483dc"@}]
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-list-types} Command
@findex -symbol-list-types
@@ -2970,10 +3010,13 @@
@subsubheading Synopsis
@example
- -symbol-list-types
+ -symbol-list-types @var{pattern}
@end example
-List all the type names.
+List type names. If @var{pattern} is specified,
+list all types that match @var{pattern}; otherwise, list
+all types.
+
@subsubheading @value{GDBN} Command
@@ -2981,7 +3024,12 @@
@samp{gdb_search} in @code{gdbtk}.
@subsubheading Example
-N.A.
+@smallexample
+(@value{GDBP})
+-symbol-list-types .*int$
+^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="0",name="complex int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long long int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long long unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="short int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="short unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="unsigned int"@}]
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-list-variables} Command
@@ -2990,18 +3038,26 @@
@subsubheading Synopsis
@example
- -symbol-list-variables
+ -symbol-list-variables @var{pattern}
@end example
-List all the global and static variable names.
+List global and static variable names. If @var{pattern} is specified,
+list all variables that match @var{pattern}; otherwise, list
+all variables.
+
@subsubheading @value{GDBN} Command
@samp{info variables} in @value{GDBN}, @samp{gdb_search} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-list-variables glob
+^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="23",name="global_a"@},symbol=@{file="./gdb.mi/symbol.c",line="23",name="global_b"@},symbol=@{file="./gdb.mi/symbol.c",line="24",name="global_c"@},symbol=@{file="./gdb.mi/symbol.c",line="25",name="global_d"@}]
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-locate} Command
@findex -symbol-locate
@@ -3009,16 +3065,24 @@
@subsubheading Synopsis
@example
- -symbol-locate
+ -symbol-locate @var{symbol}
@end example
+Show details for @var{symbol}
+
+
@subsubheading @value{GDBN} Command
@samp{gdb_loc} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-locate function_b
+^done,symbol=@{file="./gdb.mi/symbol.c",line="19",name="function_b",address="0x080483dc"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-type} Command
@findex -symbol-type
@@ -3031,6 +3095,7 @@
Show type of @var{variable}.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{ptype}, @code{gdbtk} has
@@ -3056,13 +3121,19 @@
Attach to a process @var{pid} or a file @var{file} outside of @value{GDBN}.
+
@subsubheading @value{GDBN} command
The corresponding @value{GDBN} command is @samp{attach}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-target-attach 20666
+^done,thread-id="0",frame=@{addr="0x400bc991",func="nanosleep",args=[],from="/lib/libc.so.6"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-target-compare-sections} Command
@findex -target-compare-sections
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-17 18:29:39.000000000 +0200
@@ -0,0 +1,222 @@
+/* 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_tuple_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_tuple_end (uiout);
+ }
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_info_line (char *command, char **argv, int argc)
+{
+ struct symtabs_and_lines sals;
+ struct cleanup *old_chain;
+ 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);
+
+ old_chain = make_cleanup (xfree, sals.sals);
+
+ 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;
+ }
+
+ do_cleanups(old_chain);
+
+ error ("mi_cmd_symbol_info_line: 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;
+ struct cleanup *old_chain;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_locate: Usage: SYMBOL");
+
+ sals = decode_line_spec (argv[0], 1);
+ old_chain = make_cleanup( xfree, sals.sals);
+
+ if (sals.nelts != 1)
+ error ("mi_cmd_symbol_locate: 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);
+
+ do_cleanups(old_chain);
+
+ 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 ("mi_cmd_symbol_info_file: 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;
+ struct cleanup *old_chain;
+ 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);
+ old_chain = make_cleanup( xfree, sals.sals);
+
+ 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;
+ }
+ do_cleanups(old_chain);
+
+ error ("mi_cmd_symbol_info_function: 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] 9+ messages in thread
* Re: [PATCH] mi-symbol-*
2002-11-05 12:46 [PATCH] mi-symbol-* Jelmer Vernooij
@ 2002-11-05 22:56 ` Eli Zaretskii
2003-02-01 22:08 ` Jelmer Vernooij
` (2 more replies)
2002-11-07 9:04 ` Elena Zannoni
2003-04-28 20:23 ` Jelmer Vernooij
2 siblings, 3 replies; 9+ messages in thread
From: Eli Zaretskii @ 2002-11-05 22:56 UTC (permalink / raw)
To: Jelmer Vernooij; +Cc: gdb-patches, Andrew Cagney, Elena Zannoni
On Tue, 5 Nov 2002, Jelmer Vernooij wrote:
> Here's the latest version of my mi-symbol-* patch.
Thanks!
The documentation patch is approved, but please take care of these minor
problems before it is committed:
- Please break all lines inside @smallexample that are longer than 64
characters, otherwise they will produce warnings from TeX and ugly
results in the printed manual. (You can tell in a note that the
broken line is one long line.)
- Why did you add so many empty lines? IMHO, this produces unpleasant
results, both in the on-line (Info and HTML) and printed formats.
- Where you say "pattern", please add that the pattern is a regular
expression.
Finally, I think the addition of this new feature needs to be mentioned
in NEWS.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mi-symbol-*
2002-11-05 12:46 [PATCH] mi-symbol-* Jelmer Vernooij
2002-11-05 22:56 ` Eli Zaretskii
@ 2002-11-07 9:04 ` Elena Zannoni
2003-04-28 20:23 ` Jelmer Vernooij
2 siblings, 0 replies; 9+ messages in thread
From: Elena Zannoni @ 2002-11-07 9:04 UTC (permalink / raw)
To: Jelmer Vernooij; +Cc: gdb-patches, Andrew Cagney, Elena Zannoni
Jelmer Vernooij writes:
> Hi!
>
> Here's the latest version of my mi-symbol-* patch. I received the copyright
> assignment I signed back today from the FSF, signed by Bradly Kuhn.
> Anything else I should do before the patch gets in and who will put it
> in?
>
I think we are getting closer, but there is still some work to be done.
Every new command in the mi should have test cases.
See below for specific comments.
> Thanks,
>
> Jelmer
>
> --
> Jelmer Vernooij <jelmer@nl.linux.org> - http://nl.linux.org/~jelmer/
> 18:04:45 up 3 days, 10:58, 9 users, load average: 0.13, 0.54, 0.50
> 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/gdbmi.texinfo gdb-jelmer/gdb/mi/gdbmi.texinfo
> --- gdb+dejagnu-20020907/gdb/mi/gdbmi.texinfo 2002-06-17 19:30:57.000000000 +0200
> +++ gdb-jelmer/gdb/mi/gdbmi.texinfo 2002-09-25 20:07:32.000000000 +0200
> @@ -97,8 +97,8 @@
>
> @heading Acknowledgments
>
> -In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs and
> -Elena Zannoni.
> +In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs,
> +Jelmer Vernooij and Elena Zannoni.
>
> @menu
> * GDB/MI Command Syntax::
> @@ -355,7 +355,7 @@
> the output received from @sc{gdb/mi}.
>
> @subsubheading Target Stop
> -@c Ummm... There is no "-stop" command. This assumes async, no?
> +@c Ummm... There is no "-stop" command. This assumes async, no?
> Here's an example of stopping the inferior process:
>
> @example
> @@ -2366,10 +2366,12 @@
> used without arguments, clears @value{GDBN}'s symbol table info. No output is
> produced, except for a completion notification.
>
> +
> @subsubheading @value{GDBN} Command
>
> The corresponding @value{GDBN} command is @samp{symbol-file}.
>
> +
> @subsubheading Example
>
> @smallexample
> @@ -2858,13 +2860,19 @@
>
> Describe where @var{symbol} is stored.
>
> +
> @subsubheading @value{GDBN} Command
>
> The corresponding @value{GDBN} command is @samp{info address}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-info-address main
> +^done,symbol=@{file="bla.c",line="16",name="main",address="0x0804842c"@}
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-info-file} Command
> @findex -symbol-info-file
> @@ -2872,19 +2880,25 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-info-file
> + -symbol-info-file @var{file}
> @end example
>
> -Show the file for the symbol.
> +Show the full path to the source file @var{file}.
> +
>
> @subsubheading @value{GDBN} Command
>
> There's no equivalent @value{GDBN} command. @code{gdbtk} has
> @samp{gdb_find_file}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-info-file bla.c
> +^done,file="/home/jelmer/bla.c"
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-info-function} Command
> @findex -symbol-info-function
> @@ -2892,18 +2906,24 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-info-function
> + -symbol-info-function @var{symbol}
> @end example
>
> -Show which function the symbol lives in.
> +Show which function the @var{symbol} lives in.
> +
>
> @subsubheading @value{GDBN} Command
>
> @samp{gdb_get_function} in @code{gdbtk}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-info-function *0x0804842d
> +^done,function="main"
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-info-line} Command
> @findex -symbol-info-line
> @@ -2911,19 +2931,25 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-info-line
> + -symbol-info-line @var{symbol}
> @end example
>
> -Show the core addresses of the code for a source line.
> +Show the line and file that contains @var{symbol}
> +
>
> @subsubheading @value{GDBN} Command
>
> The corresponding @value{GDBN} comamnd is @samp{info line}.
> @code{gdbtk} has the @samp{gdb_get_line} and @samp{gdb_get_file} commands.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-info-line main
> +^done,line="17",file="bla.c"
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-info-symbol} Command
> @findex -symbol-info-symbol
> @@ -2931,18 +2957,24 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-info-symbol @var{addr}
> + -symbol-info-symbol @var{symbol}
> @end example
>
> -Describe what symbol is at location @var{addr}.
> +Give details about @var{symbol}.
> +
>
> @subsubheading @value{GDBN} Command
>
> The corresponding @value{GDBN} command is @samp{info symbol}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-info-symbol function_a
> +^done,symbol=@{file="bla.c",line="6",name="function_a",address="0x080483f0"@}
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-list-functions} Command
> @findex -symbol-list-functions
> @@ -2950,19 +2982,27 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-list-functions
> + -symbol-list-functions @var{pattern}
> @end example
>
> -List the functions in the executable.
> +List functions in the executable. If @var{pattern} is specified,
> +list all functions that match @var{pattern}; otherwise, list
> +all functions.
> +
>
> @subsubheading @value{GDBN} Command
>
> @samp{info functions} in @value{GDBN}, @samp{gdb_listfunc} and
> @samp{gdb_search} in @code{gdbtk}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-list-functions funct.*
> +^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="14",name="function_a",address="0x080483d0"@},symbol=@{file="./gdb.mi/symbol.c",line="19",name="function_b",address="0x080483dc"@}]
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-list-types} Command
> @findex -symbol-list-types
> @@ -2970,10 +3010,13 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-list-types
> + -symbol-list-types @var{pattern}
> @end example
>
> -List all the type names.
> +List type names. If @var{pattern} is specified,
> +list all types that match @var{pattern}; otherwise, list
> +all types.
> +
>
> @subsubheading @value{GDBN} Command
>
> @@ -2981,7 +3024,12 @@
> @samp{gdb_search} in @code{gdbtk}.
>
> @subsubheading Example
> -N.A.
> +@smallexample
> +(@value{GDBP})
> +-symbol-list-types .*int$
> +^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="0",name="complex int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long long int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long long unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="short int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="short unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="unsigned int"@}]
> +(@value{GDBP})
> +@end smallexample
>
>
> @subheading The @code{-symbol-list-variables} Command
> @@ -2990,18 +3038,26 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-list-variables
> + -symbol-list-variables @var{pattern}
> @end example
>
> -List all the global and static variable names.
> +List global and static variable names. If @var{pattern} is specified,
> +list all variables that match @var{pattern}; otherwise, list
> +all variables.
> +
>
> @subsubheading @value{GDBN} Command
>
> @samp{info variables} in @value{GDBN}, @samp{gdb_search} in @code{gdbtk}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-list-variables glob
> +^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="23",name="global_a"@},symbol=@{file="./gdb.mi/symbol.c",line="23",name="global_b"@},symbol=@{file="./gdb.mi/symbol.c",line="24",name="global_c"@},symbol=@{file="./gdb.mi/symbol.c",line="25",name="global_d"@}]
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-locate} Command
> @findex -symbol-locate
> @@ -3009,16 +3065,24 @@
> @subsubheading Synopsis
>
> @example
> - -symbol-locate
> + -symbol-locate @var{symbol}
> @end example
>
> +Show details for @var{symbol}
> +
> +
> @subsubheading @value{GDBN} Command
>
> @samp{gdb_loc} in @code{gdbtk}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-symbol-locate function_b
> +^done,symbol=@{file="./gdb.mi/symbol.c",line="19",name="function_b",address="0x080483dc"@}
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-symbol-type} Command
> @findex -symbol-type
> @@ -3031,6 +3095,7 @@
>
> Show type of @var{variable}.
>
> +
> @subsubheading @value{GDBN} Command
>
> The corresponding @value{GDBN} command is @samp{ptype}, @code{gdbtk} has
> @@ -3056,13 +3121,19 @@
>
> Attach to a process @var{pid} or a file @var{file} outside of @value{GDBN}.
>
> +
> @subsubheading @value{GDBN} command
>
> The corresponding @value{GDBN} command is @samp{attach}.
>
> -@subsubheading Example
> -N.A.
>
> +@subsubheading Example
> +@smallexample
> +(@value{GDBP})
> +-target-attach 20666
> +^done,thread-id="0",frame=@{addr="0x400bc991",func="nanosleep",args=[],from="/lib/libc.so.6"@}
> +(@value{GDBP})
> +@end smallexample
>
> @subheading The @code{-target-compare-sections} Command
> @findex -target-compare-sections
> 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},
If there are several commands that map to the same function, then the
interface needs a redesign. However I think that the initial intent of
these commands was to have them print different things. It is a bit
hard to implement commands w/o having a clear idea of how the GUI will
end up using them. The initial idea was that the symbol-info-address
would take a symbol name as argument, and print information about his
location, while symbol-info-symbol would take an address as argument
and print the name of the symbol located at that
address. symbol-locate would instead return the "source code" location
of a symbol. It is similar to a function that gdbtk uses to recenter
the source window around the current PC, for instance.
> + {"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},
I would prefer if these 3 command map to 3 different wrapper
functions, instead of trying to decide the behavior based on the
command used, you could set up a variable, and pass that into the main
worker function.
> + {"symbol-locate", 0, 0, mi_cmd_symbol_locate},
See comment above.
> {"symbol-type", 0, 0},
> - {"target-attach", 0, 0},
> + {"target-attach", "attach %s", 0},
Sorry, no. It is not that simple, see the thread:
http://sources.redhat.com/ml/gdb-patches/2002-10/msg00288.html
> {"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-17 18:29:39.000000000 +0200
> @@ -0,0 +1,222 @@
> +/* 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_tuple_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_tuple_end (uiout);
> + }
> +}
> +
> +enum mi_cmd_result
> +mi_cmd_symbol_info_line (char *command, char **argv, int argc)
> +{
> + struct symtabs_and_lines sals;
> + struct cleanup *old_chain;
> + 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);
> +
> + old_chain = make_cleanup (xfree, sals.sals);
> +
> + 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;
> + }
> +
> + do_cleanups(old_chain);
> +
> + error ("mi_cmd_symbol_info_line: No such symbol");
> +
> + return MI_CMD_DONE;
> +}
> +
Info_line should return the core addr ranges for a given line number.
You instead have implemented a different behavior: given a line number
name, print the line number which we just gave as input, and the file name.
Also in the usage and error messages, the use of the word 'symbol' is a bit
inappropriate, because the argument of the command is not a symbol name.
> +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;
> + struct cleanup *old_chain;
> +
> + if (argc != 1)
> + error ("mi_cmd_symbol_locate: Usage: SYMBOL");
> +
> + sals = decode_line_spec (argv[0], 1);
> + old_chain = make_cleanup( xfree, sals.sals);
> +
> + if (sals.nelts != 1)
> + error ("mi_cmd_symbol_locate: 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);
> +
> + do_cleanups(old_chain);
> +
> + 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");
> +
No, the argument is a symbol, it returns the file name.
> + st = lookup_symtab (argv[0]);
> +
this is wrong also, argv[0] is a symbol name, not a filename.
> + if (!st)
> + error ("mi_cmd_symbol_info_file: 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;
> + struct cleanup *old_chain;
> + 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);
this one could be ok, but there is contradictory information in the
current documentation. It was documented as taking a symbol and
returning the function where the symbol is in, however it suggest that
it should provide the functionality that a gdbtk function
provides. That gdbtk function however takes a linespec as argument.
I think this mi command needs to be revisited.
So, wait until the issue is cleared.
> + old_chain = make_cleanup( xfree, sals.sals);
> +
> + 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;
> + }
> + do_cleanups(old_chain);
> +
> + error ("mi_cmd_symbol_info_function: 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);
> + }
> +
I am not sure that this implementation is really useful. I tried a
'info symbols' for a simple program, and it returned every symbol that
is included in the executable, i.e. a very very long list. gdbtk has
changed this to search for the symbols in a given file. Again, this
is probably something that should be revisited for the interface.
Unless we force a regexp as argument, but I don't really know what
would be more useful for a GUI.
> + ui_out_list_end (uiout);
> +
> + if (matches)
> + do_cleanups (old_chain);
> +
> + return MI_CMD_DONE;
> +}
Elena
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mi-symbol-*
2002-11-05 22:56 ` Eli Zaretskii
@ 2003-02-01 22:08 ` Jelmer Vernooij
2003-02-11 17:08 ` Jelmer Vernooij
2003-02-18 18:45 ` Jelmer Vernooij
2 siblings, 0 replies; 9+ messages in thread
From: Jelmer Vernooij @ 2003-02-01 22:08 UTC (permalink / raw)
To: Eli Zaretskii, Elena Zannoni; +Cc: gdb-patches, Andrew Cagney
On Wed, Nov 06, 2002 at 08:56:23AM +0200, Eli Zaretskii wrote about 'Re: [PATCH] mi-symbol-*':
> The documentation patch is approved, but please take care of these minor
> problems before it is committed:
>
> - Please break all lines inside @smallexample that are longer than 64
> characters, otherwise they will produce warnings from TeX and ugly
> results in the printed manual. (You can tell in a note that the
> broken line is one long line.)
>
> - Why did you add so many empty lines? IMHO, this produces unpleasant
> results, both in the on-line (Info and HTML) and printed formats.
>
> - Where you say "pattern", please add that the pattern is a regular
> expression.
All fixed; is the update ok?
On Thu, Nov 07, 2002 at 11:59:52AM -0500, Elena Zannoni wrote about 'Re: [PATCH] mi-symbol-*':
> Info_line should return the core addr ranges for a given line number.
> You instead have implemented a different behavior: given a line number
> name, print the line number which we just gave as input, and the file name.
> Also in the usage and error messages, the use of the word 'symbol' is a bit
> inappropriate, because the argument of the command is not a symbol name.
Is there any documentation about the internals of gdb and what the
various terms mean? I do have some knowledge of how executables are
structured, but I don't know any details or specific terms.
> > +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;
> > + struct cleanup *old_chain;
> > + 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);
>
> this one could be ok, but there is contradictory information in the
> current documentation. It was documented as taking a symbol and
> returning the function where the symbol is in, however it suggest that
> it should provide the functionality that a gdbtk function
> provides. That gdbtk function however takes a linespec as argument.
>
> I think this mi command needs to be revisited.
> So, wait until the issue is cleared.
Any news on the interface?
Thanks,
Jelmer
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mi-symbol-*
2002-11-05 22:56 ` Eli Zaretskii
2003-02-01 22:08 ` Jelmer Vernooij
@ 2003-02-11 17:08 ` Jelmer Vernooij
2003-02-18 18:45 ` Jelmer Vernooij
2 siblings, 0 replies; 9+ messages in thread
From: Jelmer Vernooij @ 2003-02-11 17:08 UTC (permalink / raw)
To: Eli Zaretskii, Elena Zannoni; +Cc: gdb-patches, Andrew Cagney
On Thu, Nov 07, 2002 at 11:59:52AM -0500, Elena Zannoni wrote about 'Re: [PATCH] mi-symbol-*':
> Info_line should return the core addr ranges for a given line number.
> You instead have implemented a different behavior: given a line number
> name, print the line number which we just gave as input, and the file name.
> Also in the usage and error messages, the use of the word 'symbol' is a bit
> inappropriate, because the argument of the command is not a symbol name.
Is there any documentation about the internals of gdb and what the
various terms mean? I do have some knowledge of how executables are
structured, but I don't know any details or specific terms.
> > +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;
> > + struct cleanup *old_chain;
> > + 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);
>
> this one could be ok, but there is contradictory information in the
> current documentation. It was documented as taking a symbol and
> returning the function where the symbol is in, however it suggest that
> it should provide the functionality that a gdbtk function
> provides. That gdbtk function however takes a linespec as argument.
>
> I think this mi command needs to be revisited.
> So, wait until the issue is cleared.
Any news on the interface?
Thanks,
Jelmer
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mi-symbol-*
2002-11-05 22:56 ` Eli Zaretskii
2003-02-01 22:08 ` Jelmer Vernooij
2003-02-11 17:08 ` Jelmer Vernooij
@ 2003-02-18 18:45 ` Jelmer Vernooij
2 siblings, 0 replies; 9+ messages in thread
From: Jelmer Vernooij @ 2003-02-18 18:45 UTC (permalink / raw)
To: Eli Zaretskii, Elena Zannoni; +Cc: gdb-patches, Andrew Cagney
On Wed, Nov 06, 2002 at 08:56:23AM +0200, Eli Zaretskii wrote about 'Re: [PATCH] mi-symbol-*':
> The documentation patch is approved, but please take care of these minor
> problems before it is committed:
>
> - Please break all lines inside @smallexample that are longer than 64
> characters, otherwise they will produce warnings from TeX and ugly
> results in the printed manual. (You can tell in a note that the
> broken line is one long line.)
>
> - Why did you add so many empty lines? IMHO, this produces unpleasant
> results, both in the on-line (Info and HTML) and printed formats.
>
> - Where you say "pattern", please add that the pattern is a regular
> expression.
All fixed; is the update ok?
On Thu, Nov 07, 2002 at 11:59:52AM -0500, Elena Zannoni wrote about 'Re: [PATCH] mi-symbol-*':
> Info_line should return the core addr ranges for a given line number.
> You instead have implemented a different behavior: given a line number
> name, print the line number which we just gave as input, and the file name.
> Also in the usage and error messages, the use of the word 'symbol' is a bit
> inappropriate, because the argument of the command is not a symbol name.
Is there any documentation about the internals of gdb and what the
various terms mean? I do have some knowledge of how executables are
structured, but I don't know any details or specific terms.
> > +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;
> > + struct cleanup *old_chain;
> > + 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);
>
> this one could be ok, but there is contradictory information in the
> current documentation. It was documented as taking a symbol and
> returning the function where the symbol is in, however it suggest that
> it should provide the functionality that a gdbtk function
> provides. That gdbtk function however takes a linespec as argument.
>
> I think this mi command needs to be revisited.
> So, wait until the issue is cleared.
Any news on the interface?
Thanks,
Jelmer
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mi-symbol-*
2002-11-05 12:46 [PATCH] mi-symbol-* Jelmer Vernooij
2002-11-05 22:56 ` Eli Zaretskii
2002-11-07 9:04 ` Elena Zannoni
@ 2003-04-28 20:23 ` Jelmer Vernooij
2 siblings, 0 replies; 9+ messages in thread
From: Jelmer Vernooij @ 2003-04-28 20:23 UTC (permalink / raw)
To: gdb-patches; +Cc: Andrew Cagney, Elena Zannoni
[-- Attachment #1: Type: text/plain, Size: 302 bytes --]
Hi,
Sorry for the long delay, I've been busy with other projects. I'll try
providing the patch in smaller piece.
Any comments on the current patch?
Jelmer
--
Jelmer Vernooij <jelmer@nl.linux.org> - http://nl.linux.org/~jelmer/
21:10:41 up 1 day, 2:07, 10 users, load average: 0.08, 0.04, 0.17
[-- Attachment #2: gdb-mi-symbol-4a.diff --]
[-- Type: text/x-diff, Size: 9408 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/gdbmi.texinfo gdb-jelmer/gdb/mi/gdbmi.texinfo
--- gdb+dejagnu-20020907/gdb/mi/gdbmi.texinfo 2002-06-17 19:30:57.000000000 +0200
+++ gdb-jelmer/gdb/mi/gdbmi.texinfo 2002-09-25 20:07:32.000000000 +0200
@@ -97,8 +97,8 @@
@heading Acknowledgments
-In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs and
-Elena Zannoni.
+In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs,
+Jelmer Vernooij and Elena Zannoni.
@menu
* GDB/MI Command Syntax::
@@ -2892,18 +2906,24 @@
@subsubheading Synopsis
@example
- -symbol-info-function
+ -symbol-info-function @var{symbol}
@end example
-Show which function the symbol lives in.
+Show which function the @var{symbol} lives in.
+
@subsubheading @value{GDBN} Command
@samp{gdb_get_function} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-function *0x0804842d
+^done,function="main"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-line} Command
@findex -symbol-info-line
@@ -2911,19 +2931,25 @@
@subsubheading Synopsis
@example
- -symbol-info-line
+ -symbol-info-line @var{symbol}
@end example
-Show the core addresses of the code for a source line.
+Show the line and file that contains @var{symbol}
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} comamnd is @samp{info line}.
@code{gdbtk} has the @samp{gdb_get_line} and @samp{gdb_get_file} commands.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-line main
+^done,line="17",file="bla.c"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-symbol} Command
@findex -symbol-info-symbol
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-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-type", 0, 0},
{"target-attach", 0, 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_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-17 18:29:39.000000000 +0200
@@ -0,0 +1,222 @@
+/* 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_tuple_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_tuple_end (uiout);
+ }
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_info_line (char *command, char **argv, int argc)
+{
+ struct symtabs_and_lines sals;
+ struct cleanup *old_chain;
+ 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);
+
+ old_chain = make_cleanup (xfree, sals.sals);
+
+ 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;
+ }
+
+ do_cleanups(old_chain);
+
+ error ("mi_cmd_symbol_info_line: No such symbol");
+
+ 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 ("mi_cmd_symbol_info_file: 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;
+ struct cleanup *old_chain;
+ 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);
+ old_chain = make_cleanup( xfree, sals.sals);
+
+ 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;
+ }
+ do_cleanups(old_chain);
+
+ error ("mi_cmd_symbol_info_function: No such symbol");
+ return MI_CMD_DONE;
+}
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH] mi-symbol-*
@ 2003-02-19 6:06 Zaretskii Eli
0 siblings, 0 replies; 9+ messages in thread
From: Zaretskii Eli @ 2003-02-19 6:06 UTC (permalink / raw)
To: Jelmer Vernooij, Elena Zannoni; +Cc: gdb-patches, Andrew Cagney
This message was scanned for viruses and other malicious code by PrivaWall.
This mail was sent from ELTA SYS LTD.
> From: Jelmer Vernooij [mailto:jelmer@nl.linux.org]
> Sent: Tuesday, February 18, 2003 8:45 PM
>
> On Wed, Nov 06, 2002 at 08:56:23AM +0200, Eli Zaretskii wrote
> about 'Re: [PATCH] mi-symbol-*':
> > The documentation patch is approved, but please take care
> of these minor
> > problems before it is committed:
> >
> > - Please break all lines inside @smallexample that are
> longer than 64
> > characters, otherwise they will produce warnings from TeX and
ugly
> > results in the printed manual. (You can tell in a note that the
> > broken line is one long line.)
> >
> > - Why did you add so many empty lines? IMHO, this produces >>
unpleasant
> > results, both in the on-line (Info and HTML) and printed formats.
> >
> > - Where you say "pattern", please add that the pattern is a
regular
> > expression.
> All fixed; is the update ok?
Perhaps it is; but I didn't see the fixed patch. Did I miss something?
This message is processed by the PrivaWall Email Security Server.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] mi-symbol-*
@ 2002-11-02 9:35 Jelmer Vernooij
0 siblings, 0 replies; 9+ messages in thread
From: Jelmer Vernooij @ 2002-11-02 9:35 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 363 bytes --]
Hi!
Here's the latest version of my mi-symbol-* patch. I received the copyright
assignment I signed back today from the FSF, signed by Bradly Kuhn.
Anything else I should do before the patch gets in ?
Thanks,
Jelmer
--
Jelmer Vernooij <jelmer@nl.linux.org> - http://nl.linux.org/~jelmer/
18:04:45 up 3 days, 10:58, 9 users, load average: 0.13, 0.54, 0.50
[-- Attachment #2: gdb-mi-symbol-4.diff --]
[-- Type: text/plain, Size: 18347 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/gdbmi.texinfo gdb-jelmer/gdb/mi/gdbmi.texinfo
--- gdb+dejagnu-20020907/gdb/mi/gdbmi.texinfo 2002-06-17 19:30:57.000000000 +0200
+++ gdb-jelmer/gdb/mi/gdbmi.texinfo 2002-09-25 20:07:32.000000000 +0200
@@ -97,8 +97,8 @@
@heading Acknowledgments
-In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs and
-Elena Zannoni.
+In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs,
+Jelmer Vernooij and Elena Zannoni.
@menu
* GDB/MI Command Syntax::
@@ -355,7 +355,7 @@
the output received from @sc{gdb/mi}.
@subsubheading Target Stop
-@c Ummm... There is no "-stop" command. This assumes async, no?
+@c Ummm... There is no "-stop" command. This assumes async, no?
Here's an example of stopping the inferior process:
@example
@@ -2366,10 +2366,12 @@
used without arguments, clears @value{GDBN}'s symbol table info. No output is
produced, except for a completion notification.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{symbol-file}.
+
@subsubheading Example
@smallexample
@@ -2858,13 +2860,19 @@
Describe where @var{symbol} is stored.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{info address}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-address main
+^done,symbol=@{file="bla.c",line="16",name="main",address="0x0804842c"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-file} Command
@findex -symbol-info-file
@@ -2872,19 +2880,25 @@
@subsubheading Synopsis
@example
- -symbol-info-file
+ -symbol-info-file @var{file}
@end example
-Show the file for the symbol.
+Show the full path to the source file @var{file}.
+
@subsubheading @value{GDBN} Command
There's no equivalent @value{GDBN} command. @code{gdbtk} has
@samp{gdb_find_file}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-file bla.c
+^done,file="/home/jelmer/bla.c"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-function} Command
@findex -symbol-info-function
@@ -2892,18 +2906,24 @@
@subsubheading Synopsis
@example
- -symbol-info-function
+ -symbol-info-function @var{symbol}
@end example
-Show which function the symbol lives in.
+Show which function the @var{symbol} lives in.
+
@subsubheading @value{GDBN} Command
@samp{gdb_get_function} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-function *0x0804842d
+^done,function="main"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-line} Command
@findex -symbol-info-line
@@ -2911,19 +2931,25 @@
@subsubheading Synopsis
@example
- -symbol-info-line
+ -symbol-info-line @var{symbol}
@end example
-Show the core addresses of the code for a source line.
+Show the line and file that contains @var{symbol}
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} comamnd is @samp{info line}.
@code{gdbtk} has the @samp{gdb_get_line} and @samp{gdb_get_file} commands.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-line main
+^done,line="17",file="bla.c"
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-info-symbol} Command
@findex -symbol-info-symbol
@@ -2931,18 +2957,24 @@
@subsubheading Synopsis
@example
- -symbol-info-symbol @var{addr}
+ -symbol-info-symbol @var{symbol}
@end example
-Describe what symbol is at location @var{addr}.
+Give details about @var{symbol}.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{info symbol}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-info-symbol function_a
+^done,symbol=@{file="bla.c",line="6",name="function_a",address="0x080483f0"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-list-functions} Command
@findex -symbol-list-functions
@@ -2950,19 +2982,27 @@
@subsubheading Synopsis
@example
- -symbol-list-functions
+ -symbol-list-functions @var{pattern}
@end example
-List the functions in the executable.
+List functions in the executable. If @var{pattern} is specified,
+list all functions that match @var{pattern}; otherwise, list
+all functions.
+
@subsubheading @value{GDBN} Command
@samp{info functions} in @value{GDBN}, @samp{gdb_listfunc} and
@samp{gdb_search} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-list-functions funct.*
+^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="14",name="function_a",address="0x080483d0"@},symbol=@{file="./gdb.mi/symbol.c",line="19",name="function_b",address="0x080483dc"@}]
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-list-types} Command
@findex -symbol-list-types
@@ -2970,10 +3010,13 @@
@subsubheading Synopsis
@example
- -symbol-list-types
+ -symbol-list-types @var{pattern}
@end example
-List all the type names.
+List type names. If @var{pattern} is specified,
+list all types that match @var{pattern}; otherwise, list
+all types.
+
@subsubheading @value{GDBN} Command
@@ -2981,7 +3024,12 @@
@samp{gdb_search} in @code{gdbtk}.
@subsubheading Example
-N.A.
+@smallexample
+(@value{GDBP})
+-symbol-list-types .*int$
+^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="0",name="complex int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long long int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long long unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="long unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="short int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="short unsigned int"@},symbol=@{file="./gdb.mi/symbol.c",line="0",name="unsigned int"@}]
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-list-variables} Command
@@ -2990,18 +3038,26 @@
@subsubheading Synopsis
@example
- -symbol-list-variables
+ -symbol-list-variables @var{pattern}
@end example
-List all the global and static variable names.
+List global and static variable names. If @var{pattern} is specified,
+list all variables that match @var{pattern}; otherwise, list
+all variables.
+
@subsubheading @value{GDBN} Command
@samp{info variables} in @value{GDBN}, @samp{gdb_search} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-list-variables glob
+^done,symbols=[symbol=@{file="./gdb.mi/symbol.c",line="23",name="global_a"@},symbol=@{file="./gdb.mi/symbol.c",line="23",name="global_b"@},symbol=@{file="./gdb.mi/symbol.c",line="24",name="global_c"@},symbol=@{file="./gdb.mi/symbol.c",line="25",name="global_d"@}]
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-locate} Command
@findex -symbol-locate
@@ -3009,16 +3065,24 @@
@subsubheading Synopsis
@example
- -symbol-locate
+ -symbol-locate @var{symbol}
@end example
+Show details for @var{symbol}
+
+
@subsubheading @value{GDBN} Command
@samp{gdb_loc} in @code{gdbtk}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-symbol-locate function_b
+^done,symbol=@{file="./gdb.mi/symbol.c",line="19",name="function_b",address="0x080483dc"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-symbol-type} Command
@findex -symbol-type
@@ -3031,6 +3095,7 @@
Show type of @var{variable}.
+
@subsubheading @value{GDBN} Command
The corresponding @value{GDBN} command is @samp{ptype}, @code{gdbtk} has
@@ -3056,13 +3121,19 @@
Attach to a process @var{pid} or a file @var{file} outside of @value{GDBN}.
+
@subsubheading @value{GDBN} command
The corresponding @value{GDBN} command is @samp{attach}.
-@subsubheading Example
-N.A.
+@subsubheading Example
+@smallexample
+(@value{GDBP})
+-target-attach 20666
+^done,thread-id="0",frame=@{addr="0x400bc991",func="nanosleep",args=[],from="/lib/libc.so.6"@}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-target-compare-sections} Command
@findex -target-compare-sections
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-17 18:29:39.000000000 +0200
@@ -0,0 +1,222 @@
+/* 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_tuple_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_tuple_end (uiout);
+ }
+}
+
+enum mi_cmd_result
+mi_cmd_symbol_info_line (char *command, char **argv, int argc)
+{
+ struct symtabs_and_lines sals;
+ struct cleanup *old_chain;
+ 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);
+
+ old_chain = make_cleanup (xfree, sals.sals);
+
+ 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;
+ }
+
+ do_cleanups(old_chain);
+
+ error ("mi_cmd_symbol_info_line: 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;
+ struct cleanup *old_chain;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_locate: Usage: SYMBOL");
+
+ sals = decode_line_spec (argv[0], 1);
+ old_chain = make_cleanup( xfree, sals.sals);
+
+ if (sals.nelts != 1)
+ error ("mi_cmd_symbol_locate: 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);
+
+ do_cleanups(old_chain);
+
+ 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 ("mi_cmd_symbol_info_file: 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;
+ struct cleanup *old_chain;
+ 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);
+ old_chain = make_cleanup( xfree, sals.sals);
+
+ 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;
+ }
+ do_cleanups(old_chain);
+
+ error ("mi_cmd_symbol_info_function: 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] 9+ messages in thread
end of thread, other threads:[~2003-04-28 19:15 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-05 12:46 [PATCH] mi-symbol-* Jelmer Vernooij
2002-11-05 22:56 ` Eli Zaretskii
2003-02-01 22:08 ` Jelmer Vernooij
2003-02-11 17:08 ` Jelmer Vernooij
2003-02-18 18:45 ` Jelmer Vernooij
2002-11-07 9:04 ` Elena Zannoni
2003-04-28 20:23 ` Jelmer Vernooij
-- strict thread matches above, loose matches on Subject: below --
2003-02-19 6:06 Zaretskii Eli
2002-11-02 9:35 Jelmer Vernooij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox