mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
ff908ebf86
Variables with a DW_AT_const_value but without a DW_AT_location were not getting added to the partial symbol table. They are added to the full symbol table, however, when the compilation unit's psymtabs are expanded. Before: (gdb) p one No symbol "one" in current context. (gdb) mt flush-symbol-cache (gdb) mt expand one.c (gdb) p one $1 = 1 After: (gdb) p one $1 = 1 To the user it's pretty strange, as depending on whether tab completion has forced expansion of all CUs or not the lookup might succeed, or not if the failure was already added to the symbol cache. This commit simply makes sure to add constants to the partial symbol tables. gdb/testsuite/ChangeLog: PR symtab/18148 * gdb.dwarf2/dw2-intercu.S (one, two): Add variables that have a const_value but not a location. * gdb.dwarf2/dw2-intercu.exp: Add tests that constants without location defined in non-main CUs are visible. gdb/ChangeLog: PR symtab/18148 * dwarf2read.c (struct partial_die_info): Add has_const_value member. (add_partial_symbol): Don't punt on symbols that have const_value attributes. (read_partial_die): Detect DW_AT_const_value.
50 lines
1.6 KiB
Plaintext
50 lines
1.6 KiB
Plaintext
# Copyright 2004-2015 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/>.
|
|
load_lib dwarf.exp
|
|
|
|
# Minimal DWARF-2 unit test
|
|
|
|
# This test can only be run on targets which support DWARF-2 and use gas.
|
|
if {![dwarf2_support]} {
|
|
return 0
|
|
}
|
|
|
|
standard_testfile .S
|
|
set dwarf_srcfile "file1.txt"
|
|
|
|
if {[prepare_for_testing_full $testfile.exp \
|
|
[list $testfile debug main.c debug $srcfile nodebug]]} {
|
|
return -1
|
|
}
|
|
|
|
set remote_dwarf_srcfile [gdb_remote_download host \
|
|
${srcdir}/${subdir}/${dwarf_srcfile}]
|
|
|
|
# This needs to be done first so that the CU for int2 gets expanded first.
|
|
# This exercises the case where the type for this die is hashed, but we
|
|
# need to perform the inter-cu lookup before looking the type up in the
|
|
# hash table.
|
|
gdb_test "ptype int2" "type = int2"
|
|
|
|
gdb_test_no_output "set listsize 1"
|
|
gdb_test "list func_cu1" "4\[ \t\]+File 1 Line 4"
|
|
|
|
gdb_test "ptype func_cu1" "type = int2 \\(\\)"
|
|
|
|
gdb_test "p one" "= 1"
|
|
gdb_test "p two" "= 2"
|
|
gdb_test "ptype one" "type = const int1"
|
|
gdb_test "ptype two" "type = const int2"
|