diff --git a/gdb/ChangeLog b/gdb/ChangeLog index dc1bbfa81ff..bc8dd00e69f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-11-22 Simon Marchi + + * stack.c (iterate_over_block_locals): Add LOC_OPTIMIZED_OUT + case in switch. + 2017-11-22 Simon Marchi * varobj.h (DEF_VEC_P (varobj_p)): Remove. diff --git a/gdb/stack.c b/gdb/stack.c index 81032fc895c..6bd0d45c320 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1922,6 +1922,7 @@ iterate_over_block_locals (const struct block *b, case LOC_REGISTER: case LOC_STATIC: case LOC_COMPUTED: + case LOC_OPTIMIZED_OUT: if (SYMBOL_IS_ARGUMENT (sym)) break; if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 535cf1bf2e0..8ff11808476 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2017-11-22 Simon Marchi + + * gdb.opt/inline-locals.exp: Mark tests as KFAIL. + * gdb.dwarf2/info-locals-optimized-out.exp: New file. + * gdb.dwarf2/info-locals-optimized-out.c: New file. + 2017-11-22 Yao Qi * gdb.base/info-os.exp: Pass pthreads. diff --git a/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c b/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c new file mode 100644 index 00000000000..e3ae4cd6bcb --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c @@ -0,0 +1,23 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2017 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 . */ + +int +main (void) +{ + asm ("main_label: .globl main_label"); + return 0; +} diff --git a/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp b/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp new file mode 100644 index 00000000000..dd0a99b27b4 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp @@ -0,0 +1,74 @@ +# Copyright 2017 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 . + +# Test that "info locals" shows optimized out variables. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile .c ${gdb_test_file_name}-dw.S + +# Make some DWARF for the test. + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + global dwarf_regnum regname + + set buf_var [gdb_target_symbol buf] + + cu {} { + DW_TAG_compile_unit { + {DW_AT_name info-locals-optimized-out.c} + {DW_AT_comp_dir /tmp} + } { + declare_labels int_type_label + + # int + int_type_label: base_type { + {name "int"} + {encoding @DW_ATE_signed} + {byte_size 4 DW_FORM_sdata} + } + + DW_TAG_subprogram { + {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {DW_AT_external 1 flag} + } { + # A variable completely optimized out. + DW_TAG_variable { + {name "opt_out"} + {type :$int_type_label} + } + } + } + } +} + +if { [prepare_for_testing ${testfile}.exp ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Make sure "info locals" shows optimized out variables. +gdb_test "info locals" ".*opt_out = .*" "info local shows optimized out variable" diff --git a/gdb/testsuite/gdb.opt/inline-locals.exp b/gdb/testsuite/gdb.opt/inline-locals.exp index 76463a6e313..7245df79adb 100644 --- a/gdb/testsuite/gdb.opt/inline-locals.exp +++ b/gdb/testsuite/gdb.opt/inline-locals.exp @@ -43,6 +43,7 @@ if { ! $no_frames } { "backtrace from bar 2" gdb_test "up" "#1 .*func1 .* at .*" "up from bar 2" gdb_test "info frame" ".*inlined into frame.*" "func1 inlined 2" + setup_kfail "gdb/xyz" *-*-* gdb_test "info locals" "array = {.*}" "info locals above bar 2" set msg "info args above bar 2" @@ -82,6 +83,7 @@ if { ! $no_frames } { "backtrace from bar 3" gdb_test "up" "#1 .*func1 .* at .*" "up from bar 3" gdb_test "info frame" ".*inlined into frame.*" "func1 inlined 3" + setup_kfail "gdb/xyz" *-*-* gdb_test "info locals" "array = {.*}" "info locals above bar 3" set msg "info args above bar 3"