Tue, 08 Aug 2017 15:57:29 +0800
merge
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 #
23 # @test
24 # @bug 6888954
25 # @bug 8015884
26 # @summary exercise HotSpot error handling code
27 # @author John Coomes
28 # @run shell vmerrors.sh
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
47 ulimit -c 0 # no core files
49 i=1
50 rc=0
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='
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"
83 do
84 i2=$i
85 [ $i -lt 10 ] && i2=0$i
87 "$TESTJAVA/bin/java" $TESTVMOPTS -XX:+IgnoreUnrecognizedVMOptions \
88 -XX:-TransmitErrorReport \
89 -XX:ErrorHandlerTest=${i} -version > ${i2}.out 2>&1
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
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 $$
108 i=`expr $i + 1`
109 done
111 exit $rc