1# Copyright 2008-2015 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16standard_testfile .c inline-markers.c 17 18if {[prepare_for_testing $testfile.exp $testfile \ 19 [list $srcfile $srcfile2] {debug optimize=-O2}]} { 20 return -1 21} 22 23runto_main 24 25get_compiler_info 26get_debug_format 27if { [skip_inline_var_tests] } { 28 untested inline-bt.exp 29 return 30} 31 32set no_frames [skip_inline_frame_tests] 33 34set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile2}] 35gdb_breakpoint $srcfile2:$line1 36 37gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (1)" 38 39gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (2)" 40 41if { ! $no_frames } { 42 gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*main.*" \ 43 "backtrace from bar (2)" 44 gdb_test "up" "#1 .*func1 .* at .*" "up from bar (2)" 45 gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (2)" 46 gdb_test "info locals" "array = {.*}" "info locals above bar (2)" 47 48 set msg "info args above bar (2)" 49 gdb_test_multiple "info args" $msg { 50 -re "arg1 = $decimal\r\n$gdb_prompt $" { 51 pass $msg 52 } 53 -re "arg1 = <optimized out>\r\n$gdb_prompt $" { 54 # GCC 4.3 and later lose location information for arg1. GCC 4.2 is OK. 55 if { [test_compiler_info "gcc-4-3-*"] || [test_compiler_info "gcc-4-4-*"]} { 56 setup_xfail *-*-* 57 } 58 fail $msg 59 } 60 } 61} else { 62 gdb_test "up" "#1 .*main .* at .*" "up from bar (2)" 63 gdb_test "info locals" ".*arg1 = 0.*" "info locals above bar (2)" 64} 65 66# Make sure that locals on the stack are found. This is an array to 67# prevent it from living in a register. 68gdb_test "print array\[0\]" "\\\$$decimal = 0" "print local (2)" 69 70if { ! $no_frames } { 71 # Verify that we do not print out variables from the inlined 72 # function's caller. 73 gdb_test "print val" "No symbol \"val\" in current context\\." \ 74 "print out of scope local" 75} 76 77# Repeat the tests from a depth of two inlined functions, and with a 78# more interesting value in the local array. 79gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (3)" 80if { ! $no_frames } { 81 gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*func2.*#3 .*main.*" \ 82 "backtrace from bar (3)" 83 gdb_test "up" "#1 .*func1 .* at .*" "up from bar (3)" 84 gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (3)" 85 gdb_test "info locals" "array = {.*}" "info locals above bar (3)" 86 87 set msg "info args above bar (3)" 88 gdb_test_multiple "info args" $msg { 89 -re "arg1 = $decimal\r\n$gdb_prompt $" { 90 pass $msg 91 } 92 -re "arg1 = <optimized out>\r\n$gdb_prompt $" { 93 # GCC 4.3 and later lose location information for arg1. GCC 4.2 is OK. 94 if { [test_compiler_info "gcc-4-3-*"] || [test_compiler_info "gcc-4-4-*"]} { 95 setup_xfail *-*-* 96 } 97 fail $msg 98 } 99 } 100} else { 101 gdb_test "up" "#1 .*main .* at .*" "up from bar (3)" 102 gdb_test "info locals" ".*arg1 = 1.*" "info locals above bar (3a)" 103 gdb_test "info locals" ".*arg2 = 184.*" "info locals above bar (3b)" 104} 105 106gdb_test "print array\[0\]" "\\\$$decimal = 184" "print local (3)" 107