| # Copyright 2008-2018 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/>. |
| |
| standard_testfile .c inline-markers.c |
| |
| if {[prepare_for_testing "failed to prepare" $testfile \ |
| [list $srcfile $srcfile2] {debug additional_flags=-Winline}]} { |
| return -1 |
| } |
| |
| runto_main |
| |
| get_compiler_info |
| get_debug_format |
| if { [skip_inline_var_tests] } { |
| untested inline-bt.exp |
| return |
| } |
| |
| set no_frames [skip_inline_frame_tests] |
| |
| set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile2}] |
| gdb_breakpoint $srcfile2:$line1 |
| |
| gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar 1" |
| |
| gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar 2" |
| |
| if { ! $no_frames } { |
| gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*main.*" \ |
| "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" |
| gdb_test_multiple "info args" $msg { |
| -re "arg1 = $decimal\r\n$gdb_prompt $" { |
| pass $msg |
| } |
| -re "arg1 = <optimized out>\r\n$gdb_prompt $" { |
| # GCC 4.3 and later lose location information for arg1. GCC 4.2 is OK. |
| if { [test_compiler_info "gcc-4-3-*"] || [test_compiler_info "gcc-4-4-*"]} { |
| setup_xfail *-*-* |
| } |
| fail $msg |
| } |
| } |
| } else { |
| gdb_test "up" "#1 .*main .* at .*" "up from bar 2" |
| gdb_test "info locals" ".*arg1 = 0.*" "info locals above bar 2" |
| } |
| |
| # Make sure that locals on the stack are found. This is an array to |
| # prevent it from living in a register. |
| gdb_test "print array\[0\]" "\\\$$decimal = 0" "print local 2" |
| |
| if { ! $no_frames } { |
| # Verify that we do not print out variables from the inlined |
| # function's caller. |
| gdb_test "print val" "No symbol \"val\" in current context\\." \ |
| "print out of scope local" |
| } |
| |
| # Repeat the tests from a depth of two inlined functions, and with a |
| # more interesting value in the local array. |
| gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar 3" |
| if { ! $no_frames } { |
| gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*func2.*#3 .*main.*" \ |
| "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" |
| gdb_test_multiple "info args" $msg { |
| -re "arg1 = $decimal\r\n$gdb_prompt $" { |
| pass $msg |
| } |
| -re "arg1 = <optimized out>\r\n$gdb_prompt $" { |
| # GCC 4.3 and later lose location information for arg1. GCC 4.2 is OK. |
| if { [test_compiler_info "gcc-4-3-*"] || [test_compiler_info "gcc-4-4-*"]} { |
| setup_xfail *-*-* |
| } |
| fail $msg |
| } |
| } |
| } else { |
| gdb_test "up" "#1 .*main .* at .*" "up from bar 3" |
| gdb_test "info locals" ".*arg1 = 1.*" "info locals above bar (3a)" |
| gdb_test "info locals" ".*arg2 = 184.*" "info locals above bar (3b)" |
| } |
| |
| gdb_test "print array\[0\]" "\\\$$decimal = 184" "print local 3" |