This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Revised display-linkage-name
- From: Keith Seitz <keiths at redhat dot com>
- To: Michael Eager <eager at eagerm dot com>
- Cc: "gdb-patches at sourceware dot org ml" <gdb-patches at sourceware dot org>
- Date: Mon, 22 Jul 2013 14:55:06 -0700
- Subject: Re: [PATCH] Revised display-linkage-name
- References: <519D086A dot 50105 at eagerm dot com> <51BF47DB dot 6070709 at eagerm dot com> <51DD891D dot 7090009 at eagerm dot com> <51DF3F97 dot 90805 at redhat dot com> <51E07263 dot 6080605 at eagerm dot com> <51E6E797 dot 30709 at eagerm dot com> <51ED705A dot 5000601 at redhat dot com> <51ED90E3 dot 30801 at eagerm dot com>
On 07/22/2013 01:06 PM, Michael Eager wrote:
On 07/22/13 10:48, Keith Seitz wrote:
On 07/17/2013 11:51 AM, Michael Eager wrote:
void
+annotate_linkage_name (void)
+{
+ if (annotation_level == 2)
+ printf_filtered (("\n\032\032linkage_name\n"));
+}
+
This is still missing a (trivial) comment. [IIRC, we require comments
for *all* functions, even if
they are pretty trivial.]
The Changelog contains
* annotate.c (annotate_linkage_name): New.
* annotate.h (annotate_linkage_name): New decl.
Is something else needed?
Yes, all functions need a comment, e.g.,
/* Emit an annotation for a symbol's linkage name. */
void
annotate_linkage_name (void)
{
/* ... */
}
I believe that the attached updated patch addresses all of your comments.
Pretty much. Just two really minor nits:
diff --git a/gdb/annotate.c b/gdb/annotate.c
index ccba5fe..84edeac 100644
--- a/gdb/annotate.c
+++ b/gdb/annotate.c
@@ -582,6 +582,13 @@ breakpoint_changed (struct breakpoint *b)
}
void
+annotate_linkage_name (void)
+{
+ if (annotation_level == 2)
+ printf_filtered (("\n\032\032linkage_name\n"));
+}
You know about this one already. :-)
diff --git a/gdb/testsuite/gdb.cp/display-linkage-name.exp b/gdb/testsuite/gdb.cp/display-linkage-name.exp
new file mode 100644
index 0000000..19c6191
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/display-linkage-name.exp
@@ -0,0 +1,114 @@
+# Copyright 2013 Free Software Foundation, Inc.
+
+# 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 3 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, see<http://www.gnu.org/licenses/>.
+
+# This file was written by Michael Eager (eager@eagercon.com).
+
+if { [skip_cplus_tests] } { continue }
+
+standard_testfile .cc
+
+if {[get_compiler_info "c++"]} {
+ return -1
+}
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] } {
+ return -1
+}
+
+# set break at functions
+
+set bp1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if {![gdb_breakpoint "foo"]} {
+ fail "set breakpoint foo"
+}
+
+if {![gdb_breakpoint "fun_with_a_long_name"]} {
+ fail "set breakpoint fun_with_a_long_name"
+}
+
+########################
+# Test with display-linkage-name off
+
+gdb_test_no_output "set display-linkage-name off" ""
You can omit the trailing quotes. gdb_test_no_output will then use the
command name. Fortunately, this is only used once so the test's name is
unique.
+
+gdb_test "info break" \
+ "Num Type\[ \]+Disp Enb Address\[\t \]+What.*
+1\[\t \]+breakpoint keep y.* in foo(.*) at .*$srcfile:$bp1.*
+2\[\t \]+breakpoint keep y.* in fun_with_a_long_name(.*) at .*$srcfile:$bp2.*" \
+ "info breakpoint - display off"
+
+gdb_run_cmd
+set test "break at fun_with_a_long_name"
+gdb_continue_to_breakpoint "fun_with_a_long_name (.*) at.*$srcfile.$bp2"
+
+set bttable "#0 foo (.*) at.*\[\r\n\]"
+append bttable "#1 $hex in fun_with_a_long_name (.*) at .*$srcfile:.*\[\r\n\]"
+append bttable "#2 $hex in goo (.*) at .*$srcfile:.*\[\r\n\]"
+append bttable "#3 $hex in main (.*) at .*$srcfile:.*"
+
+gdb_test "backtrace" $bttable "backtrace - display off"
+
+########################
+# Test with display-linkage-name on
+
+gdb_test_no_output "set display-linkage-name on" ""
Likewise.
+
+gdb_test "info break" \
+ "Num Type\[ \]+Disp Enb Address\[\t \]+What.*
+1\[\t \]+breakpoint keep y.* in foo(.*) \\\[_Z3fooPKc\\\] at .*$srcfile:$bp1.*
+2\[\t \]+breakpoint keep y.* in fun_with_a_long_name(.*) \\\[_Z20fun_with_a_long_\.\.\.\\\] at .*$srcfile:$bp2.*" \
+ "info breakpoint - display on"
+
+gdb_run_cmd
+set test "break at fun_with_a_long_name - display on"
+gdb_continue_to_breakpoint "fun_with_a_long_name \\\[_Z20fun_with_a_long_...\\\] (.*) at.*$srcfile.$bp2"
+
+set bttable "#0 foo \\\[_Z3fooPKc\\\] (.*) at.*\[\r\n\]"
+append bttable "#1 $hex in fun_with_a_long_name \\\[_Z20fun_with_a_long_\.\.\.\\\] (.*) at .*$srcfile:.*\[\r\n\]"
+append bttable "#2 $hex in goo \\\[_Z3goov\\\] (.*) at .*$srcfile:.*\[\r\n\]"
+append bttable "#3 $hex in main (.*) at .*$srcfile:.*"
+
+gdb_test "backtrace" $bttable "backtrace - display on"
+
+########################
+# Test set/show display-linkage-name-len
+
+gdb_test "show display-linkage-name-len" \
+ "Length of linkage names \\(symbol used by linker\\) to be displayed is 20."
NOTE 1 (see below)
+
+gdb_test_no_output "set display-linkage-name-len 10" ""
+
Likewise.
+gdb_test "show display-linkage-name-len" \
+ "Length of linkage names \\(symbol used by linker\\) to be displayed is 10."
NOTE 2: These two tests output the same test name. You should supply the
(optional) third parameter to gdb_test (MESSAGE) to uniquely identify
this test. [You could simply use "show display-linkage-name-len 20" and
"show display-linkage-name-len 10".]
For future reference, you can use:
$ make check RUNTESTFLAGS="my-test.exp"
$ cat testsuite/gdb.sum | grep "PASS" | sort | uniq -c | sort -n
to determine whether all the test names in your test file are unique. I
apologize, I missed this earlier.
+
+gdb_test "info break" \
+ "Num Type\[ \]+Disp Enb Address\[\t \]+What.*
+1\[\t \]+breakpoint keep y.* in foo(.*) \\\[_Z3fooPKc\\\] at .*$srcfile:$bp1.*
+2\[\t \]+breakpoint keep y.* in fun_with_a_long_name(.*) \\\[_Z20fun_wi\.\.\.\\\] at .*$srcfile:$bp2.*" \
+ "info breakpoint - display 10"
+
+gdb_run_cmd
+set test "break at fun_with_a_long_name - display 10"
+gdb_continue_to_breakpoint "fun_with_a_long_name \\\[_Z20fun_wi\.\.\.\\\] (.*) at .*$srcfile:$bp2"
+
+set bttable "#0 foo \\\[_Z3fooPKc\\\] (.*) at.*\[\r\n\]"
+append bttable "#1 $hex in fun_with_a_long_name \\\[_Z20fun_wi\.\.\.\\\] (.*) at .*$srcfile:.*\[\r\n\]"
+append bttable "#2 $hex in goo \\\[_Z3goov\\\] (.*) at .*$srcfile:.*\[\r\n\]"
+append bttable "#3 $hex in main (.*) at .*$srcfile:.*"
+
+gdb_test "backtrace" $bttable "backtrace - display 10"
+
diff --git a/gdb/top.c b/gdb/top.c
index 46faaa7..c0f6f25 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -287,6 +287,29 @@ quit_cover (void)
quit_command ((char *) 0, 0);
}
#endif /* defined SIGHUP */
+
+/* Flag for whether we want to print linkage name for functions.
+ Length of linkage name to print. */
+
+int display_linkage_name = 0; /* Default is no. */
+int display_linkage_name_len = 20; /* Default is first 20 chars. */
+
+static void
+show_display_linkage_name (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ fprintf_filtered (file, _("\
+Whether to display linkage name (symbol used by linker) of functions is %s.\n"),
+ value);
+}
+static void
+show_display_linkage_name_len (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ fprintf_filtered (file, _("\
+Length of linkage names (symbol used by linker) to be displayed is %s.\n"),
+ value);
+}
As silly as it seems, these two new functions need a comment.
/* Line number we are currently in, in a file which is being sourced. */
/* NOTE 1999-04-29: This variable will be static again, once we modify
@@ -1809,7 +1832,22 @@ Use \"on\" to enable the notification, and \"off\" to disable it."),
When set, GDB uses the specified path to search for data files."),
set_gdb_datadir, NULL,
&setlist,
- &showlist);
+ &showlist);
+
+ add_setshow_boolean_cmd ("display-linkage-name", class_support, &display_linkage_name, _("\
+Set whether to display linkage name (symbol used by linker) for functions."), _("\
+Show whether to display linkage name (symbol used by linker) for functions."), NULL,
+ NULL,
+ show_display_linkage_name,
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("display-linkage-name-len", class_support, &display_linkage_name_len, _("\
+Set number of characters of linkage name to display."), _("\
+Show number of characters of linkage name to display."), NULL,
+ NULL,
+ show_display_linkage_name_len,
+ &setlist, &showlist);
+
}
void
After you fix those trivial things, I don't think there is anything more
for me to review. You've already got documentation approval from Eli, so
all that's left is a global maintainer's stamp of approval.
Keith