diff options
-rw-r--r-- | gdb/dwarf2/abbrev.c | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/static-optimized-out.exp | 67 | ||||
-rw-r--r-- | gdb/testsuite/gdb.opt/main.c | 22 | ||||
-rw-r--r-- | gdb/testsuite/gdb.opt/static-optimized-out.c | 18 | ||||
-rw-r--r-- | gdb/testsuite/gdb.opt/static-optimized-out.exp | 49 |
5 files changed, 156 insertions, 9 deletions
diff --git a/gdb/dwarf2/abbrev.c b/gdb/dwarf2/abbrev.c index 1ebf8f6..3a429fd 100644 --- a/gdb/dwarf2/abbrev.c +++ b/gdb/dwarf2/abbrev.c @@ -162,7 +162,6 @@ abbrev_table::read (struct dwarf2_section_info *section, bool has_specification_or_origin = false; bool has_name = false; bool has_linkage_name = false; - bool has_location = false; bool has_external = false; /* Now read in declarations. */ @@ -217,11 +216,6 @@ abbrev_table::read (struct dwarf2_section_info *section, has_linkage_name = true; break; - case DW_AT_const_value: - case DW_AT_location: - has_location = true; - break; - case DW_AT_sibling: if (is_csize && cur_attr.form == DW_FORM_ref4) sibling_offset = size; @@ -296,9 +290,6 @@ abbrev_table::read (struct dwarf2_section_info *section, cur_abbrev->interesting = false; else if (!tag_interesting_for_index (cur_abbrev->tag)) cur_abbrev->interesting = false; - else if (!has_location && !has_specification_or_origin && !has_external - && cur_abbrev->tag == DW_TAG_variable) - cur_abbrev->interesting = false; else cur_abbrev->interesting = true; diff --git a/gdb/testsuite/gdb.dwarf2/static-optimized-out.exp b/gdb/testsuite/gdb.dwarf2/static-optimized-out.exp new file mode 100644 index 0000000..f3eff58 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/static-optimized-out.exp @@ -0,0 +1,67 @@ +# Copyright 2023 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/>. + +# Check that an optimized out static variable is printed the same independent +# of state of symtab expansion. See also gdb.opt/static-optimized-out.exp. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +require dwarf2_support + +standard_testfile main.c -dw.S + +# Make DWARF for the test. +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + cu {} { + compile_unit { + { + language @DW_LANG_C + } + } { + declare_labels integer_label + + integer_label: DW_TAG_base_type { + {DW_AT_byte_size 4 DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name integer} + } + + DW_TAG_variable { + {name var} + {type :$integer_label} + } + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +gdb_test "print var" " = <optimized out>" + +# Expand all symbol tables. +gdb_test_no_output "maint expand-symtabs" + +# Make sure we do an actual lookup rather than just returning the same as +# before. +gdb_test_no_output "maint flush symbol-cache" + +with_test_prefix "after expand-symtabs" { + gdb_test "print var" " = <optimized out>" +} diff --git a/gdb/testsuite/gdb.opt/main.c b/gdb/testsuite/gdb.opt/main.c new file mode 100644 index 0000000..c6beff7 --- /dev/null +++ b/gdb/testsuite/gdb.opt/main.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2023 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/>. */ + +int +main (void) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.opt/static-optimized-out.c b/gdb/testsuite/gdb.opt/static-optimized-out.c new file mode 100644 index 0000000..44287fb --- /dev/null +++ b/gdb/testsuite/gdb.opt/static-optimized-out.c @@ -0,0 +1,18 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2023 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/>. */ + +static int aaa; diff --git a/gdb/testsuite/gdb.opt/static-optimized-out.exp b/gdb/testsuite/gdb.opt/static-optimized-out.exp new file mode 100644 index 0000000..bd673b6 --- /dev/null +++ b/gdb/testsuite/gdb.opt/static-optimized-out.exp @@ -0,0 +1,49 @@ +# Copyright 2023 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/>. + +# Check that an optimized out static variable is printed the same independent +# of state of symtab expansion. See also gdb.dwarf2/static-optimized-out.exp. + +standard_testfile .c main.c + +set opts {} +lappend opts debug +lappend opts "optimize=-O2 -flto" + +if { [prepare_for_testing "failed to prepare" $testfile \ + [list $srcfile $srcfile2] $opts] } { + return -1 +} + +set val "" +gdb_test_multiple "print aaa" "" { + -re -wrap "^(?:\\$$decimal = )?(.*)" { + set val $expect_out(1,string) + } +} + +if { $val == "" } { + return +} + +# Expand all symbol tables. +gdb_test_no_output "maint expand-symtab" + +# Make sure we do an actual lookup rather than just returning the same as +# before. +gdb_test_no_output "maint flush symbol-cache" + +# Now check that we get the same result in both cases. +gdb_test "print aaa" [string_to_regexp $val] "consistency" |