1# Copyright (C) 2010-2019 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 16# This file is part of the GDB testsuite. It tests automagic loading of 17# scripts specified in the .debug_gdb_scripts section. 18 19# This test can only be run on targets which support ELF and use gas. 20# For now pick a sampling of likely targets. 21if {![istarget *-*-linux*] 22 && ![istarget *-*-gnu*] 23 && ![istarget *-*-elf*] 24 && ![istarget *-*-openbsd*] 25 && ![istarget arm*-*-eabi*] 26 && ![istarget arm*-*-symbianelf*] 27 && ![istarget powerpc-*-eabi*]} { 28 verbose "Skipping py-section-script.exp because of lack of support." 29 return 30} 31 32standard_testfile 33 34# Make this available to gdb before the program starts, it is 35# automagically loaded by gdb. 36set remote_python_file [gdb_remote_download host \ 37 ${srcdir}/${subdir}/${testfile}.py] 38 39set quoted_name "\"$remote_python_file\"" 40 41if {[build_executable $testfile.exp $testfile $srcfile \ 42 [list debug \ 43 additional_flags=-I${srcdir}/../../include \ 44 additional_flags=-DSCRIPT_FILE=$quoted_name]] == -1} { 45 return -1 46} 47 48# Start with a fresh gdb. 49gdb_exit 50gdb_start 51 52# Skip all tests if Python scripting is not enabled. 53if { [skip_python_tests] } { continue } 54 55gdb_reinitialize_dir $srcdir/$subdir 56 57# Try first with a restrictive safe-path. 58 59gdb_test_no_output "set auto-load safe-path /restricted" \ 60 "set restricted auto-load safe-path" 61gdb_load ${binfile} 62 63# Verify gdb did not load the scripts. 64set test_name "verify scripts not loaded" 65gdb_test_multiple "info auto-load python-scripts" "$test_name" { 66 -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" { 67 fail "$test_name" 68 } 69 -re "No.*${testfile}.py.*No.*inlined-script.*$gdb_prompt $" { 70 pass "$test_name" 71 } 72} 73 74# Try again with a working safe-path. 75 76gdb_exit 77gdb_start 78gdb_reinitialize_dir $srcdir/$subdir 79 80gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \ 81 "set auto-load safe-path" 82gdb_load ${binfile} 83 84# Verify gdb loaded each script and they appear once in the list. 85set test_name "verify scripts loaded" 86gdb_test_multiple "info auto-load python-scripts" "$test_name" { 87 -re "${testfile}.py.*${testfile}.py.*$gdb_prompt $" { 88 fail "$test_name" 89 } 90 -re "inlined-script.*inlined-script.*$gdb_prompt $" { 91 fail "$test_name" 92 } 93 -re "Yes.*${testfile}.py.*Yes.*inlined-script.*$gdb_prompt $" { 94 pass "$test_name" 95 } 96} 97 98# Again, with a regexp this time. 99gdb_test "info auto-load python-scripts ${testfile}" "Yes.*${testfile}.py.*" 100 101# Again, with a regexp that matches no scripts. 102gdb_test "info auto-load python-scripts no-script-matches-this" \ 103 "No auto-load scripts matching no-script-matches-this." 104 105if ![runto_main] { 106 perror "couldn't run to main" 107 return 108} 109 110gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \ 111 ".*Breakpoint.*" 112gdb_test "continue" ".*Breakpoint.*" 113 114gdb_test "print ss" " = a=<1> b=<2>" 115 116gdb_test "test-cmd 1 2 3" "test-cmd output, arg = 1 2 3" 117 118 119# eu-strip creates NOBITS .debug_gdb_scripts sections in the debug files. 120# Make sure those are ignored silently. 121 122with_test_prefix "sepdebug" { 123 gdb_exit 124 125 set result [catch "exec eu-strip -g -f ${binfile}.debug ${binfile}" output] 126 verbose "result is $result" 127 verbose "output is $output" 128 if {$result != 0 || $output != ""} { 129 unsupported "cannot produce separate debug info files" 130 return 131 } 132 133 gdb_start 134 gdb_reinitialize_dir $srcdir/$subdir 135 136 gdb_test_no_output "set auto-load safe-path ${remote_python_file}:${binfile}" \ 137 "set auto-load safe-path" 138 set test "load sepdebug" 139 gdb_test_multiple "file $binfile" $test { 140 -re "\r\nwarning: Invalid entry in \\.debug_gdb_scripts section.*\r\n$gdb_prompt $" { 141 fail $test 142 } 143 -re "\r\n$gdb_prompt $" { 144 pass $test 145 } 146 } 147 148 # Again, with a regexp this time. 149 gdb_test "info auto-load python-scripts ${testfile}" "Yes.*${testfile}.py.*" 150 151 # Again, with a regexp that matches no scripts. 152 gdb_test "info auto-load python-scripts no-script-matches-this" \ 153 "No auto-load scripts matching no-script-matches-this." 154} 155