test/runtime/6888954/vmerrors.sh

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 5847
cc4f5f8d885e
child 6876
710a3c8b516e
child 7574
a51071796915
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

     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

mercurial