hotspot/test/runtime/6888954/vmerrors.sh
changeset 33202 643e2fbeccc3
parent 33060 5e522d8ea16c
parent 33201 0729c02cb845
child 33231 a6d6dd711998
equal deleted inserted replaced
33060:5e522d8ea16c 33202:643e2fbeccc3
     1 # Copyright (c) 2013, 2015, 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 if [ "${TESTSRC}" = "" ]
       
    48 then
       
    49   TESTSRC=${PWD}
       
    50   echo "TESTSRC not set.  Using "${TESTSRC}" as default"
       
    51 fi
       
    52 echo "TESTSRC=${TESTSRC}"
       
    53 
       
    54 ## Adding common setup Variables for running shell tests.
       
    55 . ${TESTSRC}/../../test_env.sh
       
    56 
       
    57 ulimit -c 0 # no core files
       
    58 
       
    59 i=1
       
    60 rc=0
       
    61 
       
    62 assert_re='(assert|guarantee)[(](str|num).*failed: *'
       
    63 # for bad_data_ptr_re:
       
    64 # EXCEPTION_ACCESS_VIOLATION - Win-*
       
    65 # SIGILL - MacOS X
       
    66 # SIGSEGV - Linux-*, Solaris SPARC-*, Solaris X86-*
       
    67 #
       
    68 bad_data_ptr_re='(SIGILL|SIGSEGV|EXCEPTION_ACCESS_VIOLATION).* at pc='
       
    69 #
       
    70 # for bad_func_ptr_re:
       
    71 # EXCEPTION_ACCESS_VIOLATION - Win-*
       
    72 # SIGBUS - Solaris SPARC-64
       
    73 # SIGSEGV - Linux-*, Solaris SPARC-32, Solaris X86-*
       
    74 # SIGILL - Aix
       
    75 #
       
    76 # Note: would like to use "pc=0x00*0f," in the pattern, but Solaris SPARC-*
       
    77 # gets its signal at a PC in test_error_handler().
       
    78 #
       
    79 bad_func_ptr_re='(SIGBUS|SIGSEGV|SIGILL|EXCEPTION_ACCESS_VIOLATION).* at pc='
       
    80 guarantee_re='guarantee[(](str|num).*failed: *'
       
    81 fatal_re='fatal error: *'
       
    82 tail_1='.*expected null'
       
    83 tail_2='.*num='
       
    84 
       
    85 for re in                                                 \
       
    86     "${assert_re}${tail_1}"    "${assert_re}${tail_2}"    \
       
    87     "${guarantee_re}${tail_1}" "${guarantee_re}${tail_2}" \
       
    88     "${fatal_re}${tail_1}"     "${fatal_re}${tail_2}"     \
       
    89     "${fatal_re}.*truncated"   "ChunkPool::allocate"      \
       
    90     "ShouldNotCall"            "ShouldNotReachHere"       \
       
    91     "Unimplemented"            "$bad_data_ptr_re"         \
       
    92     "$bad_func_ptr_re"
       
    93 
       
    94 do
       
    95     i2=$i
       
    96     [ $i -lt 10 ] && i2=0$i
       
    97 
       
    98     "$TESTJAVA/bin/java" $TESTOPTS -XX:+IgnoreUnrecognizedVMOptions \
       
    99         -XX:-TransmitErrorReport -XX:-CreateMinidumpOnCrash \
       
   100         -XX:ErrorHandlerTest=${i} -version > ${i2}.out 2>&1
       
   101 
       
   102     # If ErrorHandlerTest is ignored (product build), stop.
       
   103     #
       
   104     # Using the built-in variable $! to get the pid does not work reliably on
       
   105     # windows; use a wildcard instead.
       
   106     mv hs_err_pid*.log ${i2}.log || exit $rc
       
   107 
       
   108     for f in ${i2}.log ${i2}.out
       
   109     do
       
   110         egrep -- "$re" $f > $$
       
   111         if [ $? -ne 0 ]
       
   112         then
       
   113             echo "ErrorHandlerTest=$i failed ($f)"
       
   114             rc=1
       
   115         fi
       
   116     done
       
   117     rm -f $$
       
   118 
       
   119     i=`expr $i + 1`
       
   120 done
       
   121 
       
   122 exit $rc