aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/list-ambiguous0.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-09-20 16:12:54 +0100
committerPedro Alves <palves@redhat.com>2017-09-20 16:12:54 +0100
commite5f25bc5d6dba5a5c4dd36e08afd57e918c63dea (patch)
tree8a2b690a4cbd7af63cce3f8b276f32a8454a6218 /gdb/testsuite/gdb.base/list-ambiguous0.c
parent1b7fa39ed9678fded7264636c1e5cc14c6d6ebc6 (diff)
downloadbinutils-e5f25bc5d6dba5a5c4dd36e08afd57e918c63dea.zip
binutils-e5f25bc5d6dba5a5c4dd36e08afd57e918c63dea.tar.gz
binutils-e5f25bc5d6dba5a5c4dd36e08afd57e918c63dea.tar.bz2
Fix "list ambiguous_variable"
The "list" command allows specifying the name of variables as argument, not just functions, so that users can type "list a_global_variable". That support is a broken when it comes to ambiguous locations though. If there's more than one such global variable in the program, e.g., static globals in different compilation units, GDB ends up listing the source of the first variable it finds, only. linespec.c does find both symbol and minsym locations for all the globals. The problem is that it ends up merging all the resulting sals into one, because they all have address, zero. I.e., all sals end up with sal.pc == 0, so maybe_add_address returns false for all but the first. The zero addresses appear because: - in the minsyms case, linespec.c:minsym_found incorrectly treats all minsyms as if they were function/text symbols. In list mode we can end up with data symbols there, and we shouldn't be using find_pc_sect_line on data symbols. - in the debug symbols case, symbol_to_sal misses recording an address (sal.pc) for non-block, non-label symbols. gdb/ChangeLog: 2017-09-20 Pedro Alves <palves@redhat.com> * linespec.c (minsym_found): Handle non-text minsyms. (symbol_to_sal): Record a sal.pc for non-block, non-label symbols. gdb/testsuite/ChangeLog: 2017-09-20 Pedro Alves <palves@redhat.com> * gdb.base/list-ambiguous.exp (test_list_ambiguous_function): Rename to ... (test_list_ambiguous_symbol): ... this and add a symbol name parameter. Adjust. (test_list_ambiguous_function): Reimplement on top of test_list_ambiguous_symbol and also test listing ambiguous variables. * gdb.base/list-ambiguous0.c (ambiguous): Rename to ... (ambiguous_fun): ... this. (ambiguous_var): New. * gdb.base/list-ambiguous1.c (ambiguous): Rename to ... (ambiguous_fun): ... this. (ambiguous_var): New.
Diffstat (limited to 'gdb/testsuite/gdb.base/list-ambiguous0.c')
-rw-r--r--gdb/testsuite/gdb.base/list-ambiguous0.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.base/list-ambiguous0.c b/gdb/testsuite/gdb.base/list-ambiguous0.c
index 91f7fe9..afd9457 100644
--- a/gdb/testsuite/gdb.base/list-ambiguous0.c
+++ b/gdb/testsuite/gdb.base/list-ambiguous0.c
@@ -19,12 +19,13 @@
-/* This function is defined in both
+/* These symbols are defined in both
list-ambiguous0.c/list-ambiguous1.c files, in order to test
"list"'s behavior with ambiguous linespecs. */
-static void __attribute__ ((used)) ambiguous (void) {}
+static void __attribute__ ((used)) ambiguous_fun (void) {}
+static int ambiguous_var;