1 # Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 2 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 # 4 # This code is free software; you can redistribute it and/or modify it 5 # under the terms of the GNU General Public License version 2 only, as 6 # published by the Free Software Foundation. 7 # 8 # This code is distributed in the hope that it will be useful, but WITHOUT 9 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 11 # version 2 for more details (a copy is included in the LICENSE file that 12 # accompanied this code). 13 # 14 # You should have received a copy of the GNU General Public License version 15 # 2 along with this work; if not, write to the Free Software Foundation, 16 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 17 # 18 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 19 # or visit www.oracle.com if you need additional information or have any 20 # questions. 21 # 22 23 # @test 24 # @bug 6888954 25 # @bug 8015884 26 # @summary exercise HotSpot error handling code 27 # @author John Coomes 28 # @run shell vmerrors.sh 29 30 # Repeatedly invoke java with a command-line option that causes HotSpot to 31 # produce an error report and terminate just after initialization. Each 32 # invocation is identified by a small integer, <n>, which provokes a different 33 # error (assertion failure, guarantee failure, fatal error, etc.). The output 34 # from stdout/stderr is written to <n>.out and the hs_err_pidXXX.log file is 35 # renamed to <n>.log. 36 # 37 # The automated checking done by this script is minimal. When updating the 38 # fatal error handler it is more useful to run it manually or to use the -retain 39 # option with the jtreg so that test directories are not removed automatically. 40 # To run stand-alone: 41 # 42 # TESTJAVA=/java/home/dir 43 # TESTVMOPTS=... 44 # export TESTJAVA TESTVMOPTS 45 # sh test/runtime/6888954/vmerrors.sh 46 47 ulimit -c 0 # no core files 48 49 i=1 50 rc=0 51 52 assert_re='(assert|guarantee)[(](str|num).*failed: *' 53 # for bad_data_ptr_re: 54 # EXCEPTION_ACCESS_VIOLATION - Win-* 55 # SIGILL - MacOS X 56 # SIGSEGV - Linux-*, Solaris SPARC-*, Solaris X86-* 57 # 58 bad_data_ptr_re='(SIGILL|SIGSEGV|EXCEPTION_ACCESS_VIOLATION).* at pc=' 59 # 60 # for bad_func_ptr_re: 61 # EXCEPTION_ACCESS_VIOLATION - Win-* 62 # SIGBUS - Solaris SPARC-64 63 # SIGSEGV - Linux-*, Solaris SPARC-32, Solaris X86-* 64 # 65 # Note: would like to use "pc=0x00*0f," in the pattern, but Solaris SPARC-* 66 # gets its signal at a PC in test_error_handler(). 67 # 68 bad_func_ptr_re='(SIGBUS|SIGSEGV|EXCEPTION_ACCESS_VIOLATION).* at pc=' 69 guarantee_re='guarantee[(](str|num).*failed: *' 70 fatal_re='fatal error: *' 71 tail_1='.*expected null' 72 tail_2='.*num=' 73 74 for re in \ 75 "${assert_re}${tail_1}" "${assert_re}${tail_2}" \ 76 "${guarantee_re}${tail_1}" "${guarantee_re}${tail_2}" \ 77 "${fatal_re}${tail_1}" "${fatal_re}${tail_2}" \ 78 "${fatal_re}.*truncated" "ChunkPool::allocate" \ 79 "ShouldNotCall" "ShouldNotReachHere" \ 80 "Unimplemented" "$bad_data_ptr_re" \ 81 "$bad_func_ptr_re" 82 83 do 84 i2=$i 85 [ $i -lt 10 ] && i2=0$i 86 87 "$TESTJAVA/bin/java" $TESTVMOPTS -XX:+IgnoreUnrecognizedVMOptions \ 88 -XX:-TransmitErrorReport \ 89 -XX:ErrorHandlerTest=${i} -version > ${i2}.out 2>&1 90 91 # If ErrorHandlerTest is ignored (product build), stop. 92 # 93 # Using the built-in variable $! to get the pid does not work reliably on 94 # windows; use a wildcard instead. 95 mv hs_err_pid*.log ${i2}.log || exit $rc 96 97 for f in ${i2}.log ${i2}.out 98 do 99 egrep -- "$re" $f > $$ 100 if [ $? -ne 0 ] 101 then 102 echo "ErrorHandlerTest=$i failed ($f)" 103 rc=1 104 fi 105 done 106 rm -f $$ 107 108 i=`expr $i + 1` 109 done 110 111 exit $rc