1# Copyright (C) 2015-2020 Free Software Foundation, Inc. 2# 3# Contributed by Intel Corp. <walfred.tedeschi@intel.com> 4# 5# This program is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 3 of the License, or 8# (at your option) any later version. 9# 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18# Testing handle setup together with boundary violation signals. 19# 20# Some states are not allowed as reported on the manual, as noprint 21# implies nostop, but nostop might print. 22# 23# Caveat: Setting the handle to nopass, ends up in a endless loop. 24 25if { ![istarget i?86-*-*] && ![istarget x86_64-*-* ] } { 26 verbose "Skipping x86 MPX tests." 27 return 28} 29 30standard_testfile 31 32if { ![supports_mpx_check_pointer_bounds] } { 33 return -1 34} 35 36set comp_flags "-mmpx -fcheck-pointer-bounds -I${srcdir}/../nat/" 37 38if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ 39 [list debug nowarnings additional_flags=${comp_flags}]] } { 40 return -1 41} 42 43if ![runto_main] { 44 untested "could not run to main" 45 return -1 46} 47 48gdb_test_multiple "print have_mpx ()" "have mpx" { 49 -re ".. = 1\r\n$gdb_prompt " { 50 pass "check whether processor supports MPX" 51 } 52 -re ".. = 0\r\n$gdb_prompt " { 53 verbose "processor does not support MPX; skipping MPX tests" 54 return 55 } 56} 57 58set violation [multi_line "Program received signal SIGSEGV, Segmentation fault" \ 59 "Upper bound violation while accessing address $hex" \ 60 "Bounds: \\\[lower = $hex, upper = $hex\\\]"] 61 62set segv_with_exit "Program received signal SIGSEGV,\ 63 Segmentation fault.*$inferior_exited_re.*" 64 65 66# Test handler for segmentation fault for: 67# print pass stop 68# 69set parameters "print pass stop" 70with_test_prefix "$parameters" { 71 if ![runto_main] { 72 fail "could not run to main" 73 return -1 74 } 75 76 gdb_test "handle SIGSEGV $parameters"\ 77 ".*SIGSEGV.*Yes.*Yes.*Yes.*Segmentation fault.*"\ 78 "set parameters" 79 80 gdb_test "continue" ".*$violation.*" "display" 81 82 gdb_test "where" ".*#0 $hex in upper.*"\ 83 "should be in upper" 84} 85 86# Test handler for segmentation fault for: 87# print pass nostop 88# 89set parameters "print pass nostop" 90with_test_prefix "$parameters" { 91 if ![runto_main] { 92 fail "could not run to main" 93 return -1 94 } 95 96 gdb_test "handle SIGSEGV $parameters"\ 97 ".*SIGSEGV.*No.*Yes.*Yes.*Segmentation fault.*"\ 98 "set parameters" 99 100 gdb_test "continue" ".*$segv_with_exit.*" "display" 101 102 gdb_test "where" "No stack." "no inferior" 103} 104 105# Test handler for segmentation fault for: 106# print nopass stop 107# 108set parameters "print nopass stop" 109with_test_prefix "$parameters" { 110 if ![runto_main] { 111 fail "could not run to main" 112 return -1 113 } 114 115 gdb_test "handle SIGSEGV $parameters"\ 116 ".*SIGSEGV.*Yes.*Yes.*No.*Segmentation fault.*"\ 117 "set parameters" 118 119 gdb_test "continue" ".*$violation.*" "display" 120 121 gdb_test "where" ".*#0 $hex in upper.*"\ 122 "should be in upper" 123} 124 125# Test handler for segmentation fault for: 126# print nopass stop 127# 128set parameters "noprint pass nostop" 129with_test_prefix "$parameters" { 130 if ![runto_main] { 131 fail "could not run to main" 132 return -1 133 } 134 135 gdb_test "handle SIGSEGV $parameters"\ 136 ".*SIGSEGV.*No.*No.*Yes.*Segmentation fault.*"\ 137 "set parameters" 138 139 gdb_test "continue" "Continuing\..*$inferior_exited_re.*"\ 140 "Display" 141 142 gdb_test "where" "No stack." "no inferior" 143} 144 145