8211292: [TEST] convert com/sun/jdi/DeferredStepTest.sh test
authoramenkov
Tue, 09 Oct 2018 12:26:29 -0700
changeset 52059 9d5df3eb5cc4
parent 52058 3e5687d7d6b5
child 52060 3a2384b54b56
8211292: [TEST] convert com/sun/jdi/DeferredStepTest.sh test Reviewed-by: sspitsyn, jcbeyler
test/jdk/com/sun/jdi/DeferredStepTest.java
test/jdk/com/sun/jdi/DeferredStepTest.sh
test/jdk/com/sun/jdi/ShellScaffold.sh
test/jdk/com/sun/jdi/ZZZcleanup.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/DeferredStepTest.java	Tue Oct 09 12:26:29 2018 -0700
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4629548
+ * @summary Deferred StepRequests are lost in multithreaded debuggee
+ * @comment converted from test/jdk/com/sun/jdi/DeferredStepTest.sh
+ *
+ * @library /test/lib
+ * @build DeferredStepTest
+ * @run main/othervm DeferredStepTest
+ */
+
+import jdk.test.lib.Asserts;
+import jdk.test.lib.Utils;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+class DeferredStepTestTarg {
+    static class  jj1 implements Runnable {
+        public void  run() {
+            int count = 0;
+
+            for ( int ii = 0; ii < 10; ii++) {
+                int intInPotato04 = 666;
+                ++count;                        // @1 breakpoint
+                System.out.println("Thread: " + Thread.currentThread().getName());
+            }
+        }
+    }
+
+    static class jj2 implements Runnable {
+        public void run() {
+            int count2 = 0;
+
+            for (int ii = 0; ii < 10; ii++) {
+                String StringInPotato05 = "I am";
+                ++count2;                           // @2 breakpoint
+                System.out.println("Thread: " + Thread.currentThread().getName());
+            }
+        }
+    }
+
+    public static void  main(String argv[]) {
+        System.out.println("Version = " + System.getProperty("java.version"));
+
+        jj1 obj1 = new jj1();
+        jj2 obj2 = new jj2();
+        new Thread(obj1, "jj1").start();
+        new Thread(obj2, "jj2").start();
+    }
+}
+
+public class DeferredStepTest extends JdbTest {
+    public static void main(String argv[]) {
+        new DeferredStepTest().run();
+    }
+
+    private DeferredStepTest() {
+        super(DeferredStepTestTarg.class.getName());
+    }
+
+    private static class ThreadData {
+        int lastLine = -1;  // line of the last stop
+        int minLine = -1;   // min line (-1 means "not known yet")
+        int maxLine = -1;   // max line (-1 means "not known yet")
+    }
+
+    private Map<String, ThreadData> threadData = new HashMap<>();
+
+    private Pattern threadRegexp = Pattern.compile("^(.+)\\[\\d+\\].*");
+    private Pattern lineRegexp = Pattern.compile("^(\\d+)\\b.*", Pattern.MULTILINE);
+
+    // returns the 1st group of the pattern.
+    private String parse(Pattern p, String input) {
+        Matcher m = p.matcher(input);
+        if (!m.find()) {
+            throw new RuntimeException("Input '" + input + "' does not matches '" + p.pattern() + "'");
+        }
+        return m.group(1);
+    }
+
+    private void next() {
+        List<String> reply = jdb.command(JdbCommand.next());
+        /*
+         * Each "next" produces something like ("Breakpoint hit" line only if the line has BP)
+         *   Step completed:
+         *     Breakpoint hit: "thread=jj2", DeferredStepTestTarg$jj2.run(), line=74 bci=12
+         *     74                    ++count2;                           // @2 breakpoint
+         *     <empty line>
+         *     jj2[1]
+         */
+        // detect thread from the last line
+        String lastLine = reply.get(reply.size() - 1);
+        String threadName = parse(threadRegexp, lastLine);
+        String wholeReply = reply.stream().collect(Collectors.joining(Utils.NEW_LINE));
+        int lineNum = Integer.parseInt(parse(lineRegexp, wholeReply));
+
+        System.out.println("got: thread=" + threadName + ", line=" + lineNum);
+
+        ThreadData data = threadData.get(threadName);
+        if (data == null) {
+            data = new ThreadData();
+            threadData.put(threadName, data);
+        }
+        processThreadData(threadName, lineNum, data);
+    }
+
+    private void processThreadData(String threadName, int lineNum, ThreadData data) {
+        int lastLine = data.lastLine;
+        data.lastLine = lineNum;
+        if (lastLine < 0) {
+            // the 1st stop in the thread
+            return;
+        }
+        if (lineNum == lastLine + 1) {
+            // expected.
+            return;
+        }
+        if (lineNum < lastLine) {
+            // looks like step to the beginning of the cycle
+            if (data.minLine > 0) {
+                // minLine and maxLine are not set - verify
+                Asserts.assertEquals(lineNum, data.minLine, threadName + " - minLine");
+                Asserts.assertEquals(lastLine, data.maxLine, threadName + " - maxLine");
+            } else {
+                // set minLine/maxLine
+                data.minLine = lineNum;
+                data.maxLine = lastLine;
+            }
+            return;
+        }
+        throw new RuntimeException(threadName + " (line " + lineNum + ") - unexpected."
+                + " lastLine=" + lastLine + ", minLine=" + data.minLine + ", maxLine=" + data.maxLine);
+    }
+
+    @Override
+    protected void runCases() {
+        setBreakpoints(jdb, DeferredStepTestTarg.jj1.class.getName(),
+                getTestSourcePath("DeferredStepTest.java"), 1);
+        setBreakpoints(jdb, DeferredStepTestTarg.jj2.class.getName(),
+                getTestSourcePath("DeferredStepTest.java"), 2);
+
+        // Run to breakpoint #1
+        jdb.command(JdbCommand.run());
+
+        // 2 cycles with 4 lines each - maximum 80 stops
+        for (int i=0; i<50; i++) {
+            next();
+        }
+    }
+}
--- a/test/jdk/com/sun/jdi/DeferredStepTest.sh	Fri Oct 05 23:45:02 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#  @ test
-#  This is a manual test.  The script isn't smart enough
-#  to detect the correct ordering of the output since it
-#  is produced by multiple threads and can be interleaved
-#  in many different ways.
-#
-#  @bug 4629548
-#  @summary Deferred StepRequests are lost in multithreaded debuggee
-#  @author Jim Holmlund
-#
-#  @run shell/manual DeferredStepTest.sh
-
-#  Run this script to see the bug.  See comments at the end
-#  of the .java file for info on what the bug looks like.
-
-# These are variables that can be set to control execution
-
-#pkg=untitled7
-classname=DeferredStepTest
-#compileOptions=-g
-#java=java_g
-#mode=-Xcomp
-
-createJavaFile()
-{
-    cat <<EOF > $classname.java.1
-public class $classname {
-  static class  jj1 implements Runnable {
-    public void  run() {
-        int count = 0;
-
-        for ( int ii = 0; ii < 10; ii++) {  // line 6
-            int intInPotato04 = 666;        // line 7
-            ++count;                        // line 8; @1 breakpoint
-            System.out.println("Thread: " + Thread.currentThread().getName());  // line 9
-        }
-    }
-  }
-
-  static class jj2 implements Runnable {
-    public void run() {
-        int count2 = 0;
-
-        for (int ii = 0; ii < 10; ii++) {      // line 18
-            String StringInPotato05 = "I am";  // line 19
-            ++count2;                          // line 20; @1 breakpoint
-            System.out.println("Thread: " + Thread.currentThread().getName());  // line 21
-        }
-    }
-  }
-
-  public static void  main(String argv[]) {
-      System.out.println("Version = " + System.getProperty("java.version"));
-
-      jj1 aRP = new jj1();
-      jj2 asRP = new jj2();
-      new Thread(aRP,  "jj1 *").start();
-      new Thread(asRP, "jj2 **").start();
-//    new Thread(aRP,  "jj3 ***").start();
-//    new Thread(asRP, "jj4 ****").start();
-  }
-}
-
-/****************************
-To see this bug, do this
-
-  jdb DeferredStep
-  stop at DeferredStepTest$jj1:8
-  stop at DeferredStepTest$jj2:20
-  run
-  next
-  next
-   :
-
-********/
-
-EOF
-}
-
-#sleepcmd="sleep 2"
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
-   #set -x
-   # We can't use setBkpts because it can only set bkpts in one class :-(
-   #setBkpts @1
-   cmd stop at $classname'$jj1:8'
-   cmd stop at $classname'$jj2:20'
-   #cmd run; $sleepcmd
-   runToBkpt @1
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-   cmd next; $sleepcmd
-}
-
-mysetup()
-{
-    if [ -z "$TESTSRC" ] ; then
-        TESTSRC=.
-    fi
-
-    for ii in . $TESTSRC $TESTSRC/.. ; do
-        if [ -r "$ii/ShellScaffold.sh" ] ; then
-            . $ii/ShellScaffold.sh
-            break
-        fi
-    done
-}
-
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-cat <<EOF
-****************************************************************
-This test should be run and checked manually.
-
-If this works right, you should see StepEvents/Breakpoint events for lines
-   8, 9, 6, 7, 8, 9, 6, ....   for thread jj11
-and
-  20, 21, 18, 19, 20, 21, 18, ... for thread jj2
-
-Since both threads are running at the same time, these
-events can be intermixed.
-
-The bug is that you will frequently see step events missing.
-EG, you will see
-  8, 9, 8
-or
-  20, 21, 20, 21
-etc
-
-============================================================
-At some point you might get the msg 'Nothing suspended'
-This is bug:
-   4619349 Step Over fails in a multi threaded debuggee
-
-Kill the test and rerun it if this happens.
-****************************************************************
-
-EOF
-runit
-#jdbFailIfPresent "Nothing suspended"
-#pass
--- a/test/jdk/com/sun/jdi/ShellScaffold.sh	Fri Oct 05 23:45:02 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1221 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-#
-# jtreg runs this in a scratch dir.
-# It (and runregress -no) sets these env vars:
-#    TESTSRC:      The dir that contains this file
-#    TESTCLASSES:  Where .class files are compiled to
-#    TESTJAVA:     The jdk to run
-#
-# This is a 'library' script that is included by
-# shell script test cases that want to run a .java file as the debuggee
-# and use jdb as the debugger.  This file contains
-# several functions that support such a test.
-
-# The caller script can also set these shell vars before
-# including this file:
-#    pkg=<package name>       To use a package, define it here and put
-#                                package $pkg
-#                             in your java file
-#    classname=<classnam>     Omit this to use the default class name, 'shtest'.
-
-#    compileOptions=<string>  compile options for at least the first compile, 
-#                             eg, compileOptions=-g
-#    compileOptions2=<string> Options for the 2nd, ..., compile. compileOptions1
-#                             is used if this is not set.  To use no compile
-#                             options for the 2nd ... compiles, do 
-#                             compileOptions2=none
-#
-#    mode=-Xcomp or mode=-Xint to run in these modes.  These should not
-#                              really be used since the tests are normally
-#                              run in both modes.
-#    javacCmd=path-to-javac    to use a non-standard javac for compiling
-#    compileOptions=<string>   Options to pass to javac
-#
-# See RedefineException.sh as an example of a caller script.
-#
-# To do RedefineClasses operations, embed @1 tags in the .java
-# file to tell this script how to modify it to produce the 2nd
-# version of the .class file to be used in the redefine operation.
-# Here are examples of each editting tag and what change
-# it causes in the new file.  Note that blanks are not preserved
-# in these editing operations.
-#
-# @1 uncomment
-#  orig:   // @1 uncomment   gus = 89;
-#  new:         gus = 89;
-#
-# @1 commentout
-#  orig:   gus = 89      // @1 commentout
-#  new: // gus = 89      // @1 commentout
-#
-# @1 delete
-#  orig:  gus = 89      // @1 delete
-#  new:   entire line deleted
-#
-# @1 newline
-#  orig:  gus = 89;     // @1 newline gus++;
-#  new:   gus = 89;     //
-#         gus++;
-#
-# @1 replace
-#  orig:  gus = 89;     // @1 replace gus = 90;
-#  new:   gus = 90;
-#
-# The only other tag supported is @1 breakpoint.  The setbkpts function
-# sets bkpts at all lines that contain this string.
-# 
-# Currently, all these tags are start with @1.  It is envisioned that this script
-# could be ehanced to allow multiple cycles of redefines by allowing
-# @2, @3, ... tags.  IE, processing the @i tags in the ith version of
-# the file will produce the i+1th version of the file.
-# 
-# There are problem with jtreg leaving behind orphan java and jdb processes
-# when this script is run.  Sometimes, on some platforms, it just doesn't
-# get them all killed properly.
-# The solution is to put a magic word in the cmd lines of background java
-# and jdb processes this script launches.  We can then do the right kind
-# of ps cmds to find all these processes and kill them.  We do this by
-# trapping the completion of this script.
-#
-# An associated problem is that our trap handler (cleanup) doesn't
-# always get called when jtreg terminates a test.  This can leave tests
-# hanging but following tests should run ok because each test uses
-# unique names for the port and temp files (based on the PID returned
-# by $$).
-#
-# mks 6.2a on win 98 presents two problems:
-#   $! returns the PID as a negative number whereas ps returns
-#      it in the form 0xFFF....  This means our trick of 
-#      of using $! to get the PIDs of the jdb and debuggee processes
-#      doesn't work.  This will cause some error cases to fail
-#      with a jtreg timeout instead of failing more gracefully.
-#
-#   There is no form of the ps command that will show the whole
-#   cmd line.  Thus, the magic keyword trick doesn't work.  We
-#   resort to just killing java.exe and jdb.exes
-#
-# pid usage:
-#   debuggeepid: used in jdb process to detect if debuggee has died.
-#                - waitForDebuggeeMsg: fail if debuggee is gone
-#
-#   jdbpid:   dofail: used to detect if in main process or jdb process
-#             waitforfinish: quit if the jdb process is gone
-
-#killcmd=/bin/kill
-killcmd=kill
-
-# This can be increased if timing seems to be an issue.
-sleep_seconds=1
-timeout_factor=1
-if [ -n "$TESTTIMEOUTFACTOR" ] ; then
-  # convert float value to int
-  timeout_factor=$(echo $TESTTIMEOUTFACTOR | awk '{printf "%d\n", int($1)}')
-fi
-
-echo "ShellScaffold.sh: Running with timeout_factor = $timeout_factor" >& 2
-topPid=$$
-
-# Be careful to echo to >& in these general functions.
-# If they are called from the functions that are sending
-# cmds to jdb, then stdout is redirected to jdb.
-cleanup()
-{
-    if [ -r "$failFile" ] ; then
-        ls -l "$failFile" >&2
-        echo "<cleanup:_begin_failFile_contents>" >&2
-        cat "$failFile" >&2
-        echo "<cleanup:_end_failFile_contents>" >&2
-    fi
-
-    # Kill all processes that have our special
-    # keyword in their cmd line.
-    killOrphans cleanup $jdbKeyword
-    killOrphans cleanup $debuggeeKeyword
-}
-
-# Kill all processes with $2 in their cmd lines
-# Print a msg about this using $1 as the prefix
-killOrphans()
-{
-    str=$2
-
-    if [ -z "$isCygwin" ] ; then
-        toBeKilled=`$psCmd | $grep -v grep | $grep -i $str | awk '{print $1}' | tr '\n\r' '  '`
-    else
-        # The cygwin ps command doesn't show the options passed to a cmd.
-        # We will use jps to get the win PID of the command, and
-        # then use ps to find the cygwin pid to be killed.
-        # The form of a ps output line is
-        # ^   ddddd    dddd    dddd    dddd.*
-        # where the 4th digits are the win pid and the first 
-        # are the cygwin pid.
-        if [ -r "$jdk/bin/$jstack" ] ; then
-            winPid=`$jdk/bin/jps -v | $grep -i $str | sed -e 's@ .*@@'`
-            if [ ! -z "$winPid" ] ; then
-                # Here is a way to kill using a win cmd and the win PID.
-                #echo "$1: taskkill /F $winPid"  >& 2
-                #taskkill /F /PID $winPid
-
-                toBeKilled=`$psCmd | $grep -v grep | \
-                            $grep '^ +[0-9]+ +[0-9]+ +[0-9]+ +'"$winPid" |\
-                            awk '{print $1}' | tr '\n\r' '  '`
-            fi
-        else
-            # Well, too bad - we can't find what to kill.  
-            toBeKilled=
-        fi
-    fi
-
-    if [ ! -z "$toBeKilled" ] ; then
-        echo "$1: kill -9 $toBeKilled"  >& 2
-        kill -9 $toBeKilled
-    fi
-}
-
-# Returns 0 if $1 is the pid of a running process
-findPid()
-{
-    if [ -z "$1" ] ; then
-        return 1
-    fi
-
-    case "$osname" in
-        SunOS | AIX)
-            $psCmd | $grep '^ *'"$1 " > $devnull 2>&1
-            res=$?
-            ;;
-        Windows* | CYGWIN*)
-            # Don't use ps on cygwin since it sometimes misses
-            # some processes (!).
-            tasklist /NH | $grep " $1 " > $devnull 2>&1
-            res=$?
-            ;;
-       *)
-            #   Never use plain 'ps', which requires a "controlling terminal"
-            #     and will fail  with a "ps: no controlling terminal" error.
-            #     Running under 'rsh' will cause this ps error.
-            $psCmd -e | $grep '^ *'"$1 " > $devnull 2>&1
-            res=$?
-            ;;
-    esac
-    return $res
-}
-
-setup()
-{
-    failed=
-    # This is used to tag each java and jdb cmd we issue so
-    # we can kill them at the end of the run.
-
-    orphanKeyword=HANGINGJAVA-$$
-    debuggeeKeyword=${orphanKeyword}_DEB
-    jdbKeyword=${orphanKeyword}_JDB
-    baseArgs=-D${debuggeeKeyword}
-    if [ -z "$TESTCLASSES" ] ; then
-        echo "--Warning:  TESTCLASSES is not defined; using TESTCLASSES=."
-        echo "  You should run: "
-        echo "    runregress $0 -no"
-        echo "  or"
-        echo "    (setenv TESTCLASSES .; $0 $*)"
-        TESTCLASSES=.
-    fi
-    if [ ! -z "$TESTJAVA" ] ; then
-        jdk="$TESTJAVA"
-    else
-        echo "--Error: TESTJAVA must be defined as the pathname of a jdk to test."
-        exit 1
-    fi
-
-    ulimitCmd=
-    osname=`uname -s`
-    isCygwin=
-    case "$osname" in
-        Windows* | CYGWIN*)
-            devnull=NUL
-            case "$osname" in
-                CYGWIN*)
-                    isCygwin=1
-                    devnull=/dev/null
-                    ;;
-            esac
-
-            if [ -r $jdk/bin/dt_shmem.dll ] ; then
-                transport=dt_shmem
-                address=kkkk.$$
-            else
-                transport=dt_socket
-                address=
-            fi
-            baseArgs="$baseArgs -XX:-ShowMessageBoxOnError"
-            # jtreg puts \\s in TESTCLASSES and some uses, eg. echo
-            # treat them as control chars on mks (eg \t is tab)
-            # Oops; windows mks really seems to want this cat line
-            # to start in column 1
-            if [ -w "$Temp" ] ; then
-                tmpFile=$Temp/tmp.$$
-            elif [ -w "$TEMP" ] ; then
-                tmpFile=$TEMP/tmp.$$
-            else
-                tmpFile=tmp.$$
-            fi
-cat <<EOF >$tmpFile
-$TESTCLASSES
-EOF
-            TESTCLASSES=`cat $tmpFile | sed -e 's@\\\\@/@g'`
-            rm -f $tmpFile
-            # on mks
-            grep=egrep
-            psCmd=ps
-            jstack=jstack.exe
-            ;;
-       SunOS | Linux | Darwin | AIX)
-         transport=dt_socket
-         address=
-         devnull=/dev/null
-         grep=egrep
-         jstack=jstack
-         # On linux, core files take a long time, and can leave
-         # zombie processes
-         if [ "$osname" = SunOS ] ; then
-             # Experiments show Solaris '/usr/ucb/ps -axwww' and
-             # '/usr/bin/pgrep -f -l' provide the same small amount of the
-             # argv string (PRARGSZ=80 in /usr/include/sys/procfs.h)
-             #  1) This seems to have been working OK in ShellScaffold.
-             #  2) OpenSolaris does not provide /usr/ucb/ps, so use pgrep
-             #     instead
-             # The alternative would be to use /usr/bin/pargs [pid] to get
-             # all the args for a process, splice them back into one
-             # long string, then grep.
-             UU=`/usr/xpg4/bin/id -u -n`
-             psCmd="pgrep -f -l -U $UU"
-         else
-             ulimit -c 0
-             # See bug 6238593.
-             psCmd="ps axwww"
-         fi
-         ;;
-       *)
-         echo "--Error:  Unknown result from 'uname -s':  $osname"
-         exit 1
-         ;;
-    esac
-
-
-    tmpFileDir=$TESTCLASSES/aa$$
-    TESTCLASSES=$tmpFileDir
-
-    mkdir -p $tmpFileDir
-
-    # This must not contain 'jdb' or it shows up
-    # in grep of ps output for some platforms
-    jdbOutFile=$tmpFileDir/jxdbOutput.txt
-    rm -f $jdbOutFile
-    touch $jdbOutFile
-
-    debuggeeOutFile=$tmpFileDir/debuggeeOutput.txt
-    failFile=$tmpFileDir/testFailed
-    debuggeepidFile=$tmpFileDir/debuggeepid
-    rm -f $failFile $debuggeepidFile
-    if [ -f "$failFile" ]; then
-        echo "ERROR: unable to delete existing failFile:" >&2
-        ls -l "$failFile" >&2
-    fi
-
-    if [ -z "$pkg" ] ; then
-        pkgSlash=
-        pkgDot=
-        redefineSubdir=.
-    else
-        pkgSlash=$pkg/
-        pkgDot=$pkg.
-        redefineSubdir=$pkgSlash
-    fi
-    if [ -z "$classname" ] ; then
-        classname=shtest
-    fi
-
-    if [ -z "$java" ] ; then
-        java=java
-    fi
-
-    if [ -z "$jdb" ] ; then
-        jdb=$jdk/bin/jdb
-    fi
-
-####################################################3
-####################################################3
-####################################################3
-####################################################3
-#  sol:  this gets all processes killed but 
-#        no jstack
-#  linux same as above
-#  win mks:  No dice; processes still running
-    trap "cleanup" 0 1 2 3 4 6 9 10 15
-
-    jdbOptions="$jdbOptions -J-D${jdbKeyword}"
-}
-
-docompile()
-{
-    if [ "$compile" = 0 ] ; then
-        return
-    fi
-    saveDir=`pwd`
-    cd $tmpFileDir
-    rm -f *.java
-    createJavaFile $classname
-
-    # Compile two versions of the file, the original and with the
-    # indicated lines modified.
-    cp $classname.java.1 $classname.java
-    echo "--Compiling first version of `pwd`/$classname.java with options: $compileOptions"
-    # Result is in $pkgSlash$classname.class
-
-    if [ -z "$javacCmd" ] ; then
-        javacCmd=$jdk/bin/javac
-    fi
-
-    echo "compiling " `ls *.java`
-    $javacCmd $compileOptions -d . *.java
-    if [ $? != 0 ] ; then
-       dofail "First compile failed"
-    fi
-    if [ -r vers1 ] ; then
-        rm -rf vers1
-    fi
-    mkdir -p vers1
-    mv *.class vers1
-    if [ ! -z "$compileOptions2" ] ; then
-        if [ "$compileOptions2" = none ] ; then
-            compileOptions=
-        else
-            compileOptions=$compileOptions2
-        fi
-    fi
-
-    while [ 1 = 1 ] ; do
-        # Not really a loop; just a way to avoid goto
-        # by using breaks
-        sed -e '/@1 *delete/ d' \
-            -e 's! *// *@1 *uncomment!     !' \
-            -e 's!\(.*@1 *commentout\)!//\1!' \
-            -e 's/@1 *newline/\
-                 /' \
-            -e 's/.*@1 *replace//' \
-            $classname.java.1  >$classname.java
-
-        cmp -s $classname.java.1 $classname.java
-        if [ $? = 0 ] ; then
-            break
-        fi
-        echo 
-        echo "--Compiling second version of `pwd`/$classname.java with $compileOptions"
-        $javacCmd $compileOptions -d . $classname.java
-        if [ $? != 0 ] ; then
-            dofail "Second compile failed"
-        fi
-        if [ -r vers2 ] ; then
-            rm -rf vers2
-        fi
-        mkdir -p vers2
-        mv *.class vers2
-        mv $classname.java $classname.java.2
-        cp $classname.java.1 $classname.java
-
-        ###### Do the same for @2, and @3 allowing 3 redefines to occur.
-        ###### If I had more time to write sed cmds, I would do
-        ###### this in a loop.  But, I don't think we will ever need
-        ###### more than 3 redefines.
-        sed -e '/@2 *delete/ d' \
-            -e 's! *// *@2 *uncomment!     !' \
-            -e 's!\(.*@2 *commentout\)!//\1!' \
-            -e 's/@2 *newline/\
-                 /' \
-            -e 's/.*@2 *replace//' \
-            $classname.java.2 >$classname.java
-        cmp -s $classname.java.2 $classname.java
-        if [ $? = 0 ] ; then
-            break
-        fi
-        echo 
-        echo "--Compiling third version of `pwd`/$classname.java with $compileOptions"
-        $javacCmd $compileOptions -d . $classname.java
-        if [ $? != 0 ] ; then
-            dofail "Third compile failed"
-        fi
-        if [ -r vers3 ] ; then
-            rm -rf vers3
-        fi
-        mkdir -p vers3
-        mv *.class vers3
-        mv $classname.java $classname.java.3
-        cp $classname.java.1 $classname.java
-
-        ########
-        sed -e '/@3 *delete/ d' \
-            -e 's! *// *@3 *uncomment!     !' \
-            -e 's!\(.*@3 *commentout\)!//\1!' \
-            -e 's/@3 *newline/\
-                    /' \
-            -e 's/.*@3 *replace//' \
-            $classname.java.3 >$classname.java
-        cmp -s $classname.java.3 $classname.java
-        if [ $? = 0 ] ; then
-            break
-        fi
-        echo 
-        echo "--Compiling fourth version of `pwd`/$classname.java with $compileOptions"
-        $javacCmd $compileOptions -d . $classname.java
-        if [ $? != 0 ] ; then
-            dofail "fourth compile failed"
-        fi
-        if [ -r vers4 ] ; then
-            rm -rf vers4
-        fi
-        mkdir -p vers4
-        mv *.class vers4
-        mv $classname.java $classname.java.4
-        cp $classname.java.1 $classname.java
-        break
-        fgrep @4 $classname.java
-        if [ $? = 0 ] ; then
-            echo "--Error: @4 and above are not yet allowed"
-            exit 1
-        fi
-    done
-
-    cp vers1/* $redefineSubdir
-    cd $saveDir
-}
-
-# Send a cmd to jdb and wait for the jdb prompt to appear.
-# We don't want to allow > as a prompt because if the debuggee
-# runs for awhile after a command, jdb will show this prompt
-# but is not really ready to accept another command for the
-# debuggee - ie, a cont in this state will be ignored.
-# If it ever becomes necessary to send a jdb command before
-# a  main[10] form of prompt appears, then this
-# code will have to be modified.
-#
-# Specify $1 = allowExit to show that the command given
-# allows JDB to exit
-cmd()
-{
-    allowExit=
-    case "$1" in
-        allowExit)
-            allowExit="allowExit"
-            shift
-            ;;
-        exitJdb)
-            # Quit JDB only with this cmd() invocation
-            echo "--Sending cmd: quit" >& 2
-            echo quit
-            echo "--Quit cmd was sent" >& 2
-            # See 6562090. Maybe there is a way that the exit
-            # can cause jdb to not get the quit.
-            sleep 5
-
-            # The exit code value here doesn't matter since this function
-            # is called as part of a pipeline and it is not the last command
-            # in the pipeline.
-            exit 1
-            ;;
-    esac
-    command=$*
-
-    if [ -z "$command" ] ; then
-        dofail "Command can't be a null string. Test failure"
-    fi
-    if [ "$command" = "quit" -o "$command" = "exit" ] ; then
-        # We don't want the test to manually quit jdb,
-        # we will do it in the end automatically
-        dofail "It's not allowed to send quit or exit commands from the test"
-    fi
-    if [ -r "$failFile" ] ; then
-        # failFile exists, it's better to finish execution
-        dofinish "quit"
-    fi
-
-    # $jdbOutFile always exists here and is non empty
-    # because after starting jdb, we waited 
-    # for the prompt.
-    fileSize=`wc -c $jdbOutFile | awk '{ print $1 }'`
-    echo "--Sending cmd: " $command >&2
-
-    # jjh: We have a few intermittent failures here.
-    # It is as if every so often, jdb doesn't
-    # get the first cmd that is sent to it here.  
-    # (actually, I have seen it get the first cmd ok,
-    # but then not get some subsequent cmd).
-    # It seems like jdb really doesn't get the cmd; jdb's response
-    # does not appear in the jxdboutput file. It contains:
-    # main[1] 
-    # The application has been disconnected
-
-    # Is it possible
-    # that jdb got the cmd ok, but its response didn't make
-    # it to the jxdboutput file?  If so, why did 'The application
-    # has been disconnected' make it?
-
-    # This causes the following loop to timeout and the test to fail.
-    # The above echo works because the cmd (stop at ...)
-    # is in the System.err shown in the .jtr file.
-    # Also, the cmd is shown in the 'jdb never responded ...'
-    # msg output below after the timeout.
-    # And, we know jdb is started because the main[1] output is in the .jtr
-    # file.  And, we wouldn't have gotten here if mydojdbcmds hadn't
-    # seen the ].  
-    echo $command
-
-    # Now we have to wait for the next jdb prompt.  We wait for a pattern
-    # to appear in the last line of jdb output.  Normally, the prompt is
-    #
-    # 1) ^main[89] @
-    #
-    # where ^ means start of line, and @ means end of file with no end of line
-    # and 89 is the current command counter. But we have complications e.g.,
-    # the following jdb output can appear:
-    #
-    # 2) a[89] = 10
-    #
-    # The above form is an array assignment and not a prompt.
-    #
-    # 3) ^main[89] main[89] ...
-    #
-    # This occurs if the next cmd is one that causes no jdb output, e.g.,
-    # 'trace methods'.
-    #
-    # 4) ^main[89] [main[89]] .... > @
-    #
-    # jdb prints a > as a prompt after something like a cont.
-    # Thus, even though the above is the last 'line' in the file, it
-    # isn't the next prompt we are waiting for after the cont completes.
-    # HOWEVER, sometimes we see this for a cont command:
-    #
-    #   ^main[89] $
-    #      <lines output for hitting a bkpt>
-    #
-    # 5) ^main[89] > @
-    #
-    # i.e., the > prompt comes out AFTER the prompt we we need to wait for.
-    #
-    # So, how do we know when the next prompt has appeared??
-    # 1.  Search for 
-    #         main[89] $
-    #     This will handle cases 1, 2, 3
-    # 2.  This leaves cases 4 and 5.
-    #
-    # What if we wait for 4 more chars to appear and then search for
-    #
-    #    main[89] [>]$
-    #
-    # on the last line?
-    #
-    # a.  if we are currently at
-    #
-    #       ^main[89] main[89] @
-    #
-    #     and a 'trace methods comes in, we will wait until at least
-    #
-    #       ^main[89] main[89] main@
-    #
-    #     and then the search will find the new prompt when it completes.
-    #
-    # b.  if we are currently at
-    #
-    #       ^main[89] main[89] @
-    #
-    #     and the first form of cont comes in, then we will see
-    #
-    #       ^main[89] main[89] > $
-    #       ^x@
-    #
-    #     where x is the first char of the msg output when the bkpt is hit
-    #     and we will start our search, which will find the prompt
-    #     when it comes out after the bkpt output, with or without the
-    #     trailing >
-    #
-
-    # wait for 4 new chars to appear in the jdb output
-    count=0
-    desiredFileSize=`expr $fileSize + 4`
-    msg1=`echo At start: cmd/size/waiting : $command / $fileSize / \`date\``
-    timeLimit=`expr 60 * $timeout_factor`
-    while [ 1 = 1 ] ; do
-        newFileSize=`wc -c $jdbOutFile | awk '{ print $1 } '`
-        #echo jj: desired = $desiredFileSize, new = $newFileSize >& 2
-
-        done=`expr $newFileSize \>= $desiredFileSize`
-        if [ $done = 1 ] ; then
-            break
-        fi
-        sleep ${sleep_seconds}
-        count=`expr $count + ${sleep_seconds}`        
-        if [ $count -gt $timeLimit ] ; then
-            # record some debug info.
-            echo "--DEBUG: jdb $$ didn't respond to command in $count secs: $command" >& 2
-            echo "--DEBUG:" $msg1 >& 2
-            echo "--DEBUG: "done size/waiting : / $newFileSize  / `date` >& 2
-            echo "-- $jdbOutFile follows-------------------------------" >& 2
-            cat $jdbOutFile >& 2
-            echo "------------------------------------------" >& 2
-            dojstack
-            dofail "jdb never responded to command: $command"
-        fi
-    done
-    # Note that this assumes just these chars in thread names.
-    waitForJdbMsg '[a-zA-Z0-9_-][a-zA-Z0-9_-]*\[[1-9][0-9]*\] [ >]*$' 1 $allowExit
-}
-
-setBkpts()
-{
-    # Can set multiple bkpts, but only in one class.
-    # $1 is the bkpt name, eg, @1
-    allLines=`$grep -n "$1 *breakpoint" $tmpFileDir/$classname.java.1 | sed -e 's@^\([0-9]*\).*@\1@g'`
-    for ii in $allLines ; do
-        cmd "stop at $pkgDot$classname:$ii"
-    done
-}
-
-runToBkpt()
-{
-    # Don't pass allowExit here as we don't want JDB to unexpectedly exit
-    cmd run
-    # Don't need to do this - the above waits for the next prompt which comes out
-    # AFTER the Breakpoint hit message.
-    # Wait for jdb to hit the bkpt
-    #waitForJdbMsg "Breakpoint hit" 5
-}
-
-contToBkpt()
-{
-    # Don't pass allowExit here as we don't want JDB to unexpectedly exit
-    cmd cont
-    # Don't need to do this - the above waits for the next prompt which comes out
-    # AFTER the Breakpoint hit message.
-    # Wait for jdb to hit the bkpt
-    #waitForJdbMsg "Breakpoint hit" 5
-}
-
-
-# Wait until string $1 appears in the output file, within the last $2 lines
-# If $3 is allowExit, then don't fail if jdb exits before
-# the desired string appears.
-waitForJdbMsg()
-{
-    # This can be called from the jdb thread which doesn't
-    # have access to $debuggeepid, so we have to read it from the file.
-    nlines=$2
-    allowExit="$3"
-    myCount=0
-    timeLimit=`expr 40 * $timeout_factor`  # wait a max of this many secs for a response from a jdb command
-
-    while [ 1 = 1 ] ; do 
-        if [  -r $jdbOutFile ] ; then
-            # Something here causes jdb to complain about Unrecognized cmd on x86.
-            tail -$nlines $jdbOutFile | $grep -s "$1" > $devnull 2>&1
-            if [ $? = 0 ] ; then
-                # Found desired string
-                break
-            fi
-        fi
-        tail -2 $jdbOutFile | $grep -s "The application exited" > $devnull 2>&1
-        if [ $? = 0 ] ; then
-            # Found 'The application exited'
-            echo "--JDB finished: The application exited" >&2
-            if [ ! -z "$allowExit" ] ; then
-                # Exit is allowed
-                dofinish
-            fi
-            # Otherwise, it is an error if we don't find $1
-            if [  -r $jdbOutFile ] ; then 
-                tail -$nlines $jdbOutFile | $grep -s "$1" > $devnull 2>&1
-                if [ $? = 0 ] ; then
-                    break
-                fi
-            fi
-            dofail "JDB unexpectedly finished: Waited for jdb msg $1, but it never appeared"
-        fi
-
-        sleep ${sleep_seconds}
-        findPid $topPid
-        if [ $? != 0 ] ; then
-            echo "--Top process ($topPid) is dead.  We better die too" >&2
-            dojstack
-            exit 1
-        fi
-
-        myCount=`expr $myCount + ${sleep_seconds}`
-        if [ $myCount -gt $timeLimit ] ; then
-            echo "--Fail: waitForJdbMsg timed out after $timeLimit seconds, looking for /$1/, in $nlines lines; exiting" >> $failFile
-            echo "vv jdbOutFile  vvvvvvvvvvvvvvvvvvvvvvvvvvvv" >& 2
-            cat $jdbOutFile >& 2
-            echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" >& 2
-            dojstack
-            exit 1
-        fi
-    done
-
-}
-
-# Finishes JDB execution
-# Specify command to finish if it's needed
-dofinish()
-{
-    if [ ! -z "$*" ] ; then
-        echo "--Finish execution with sending \"$*\" command to JDB" >&2
-        cmd "exitJdb" "$*"
-    else
-        echo "--Finish without sending \"quit\" command to JDB" >&2
-    fi
-    exit 0
-}
-
-# $1 is the string to print.  If $2 exists,
-# it is the name of a file to print, ie, the name
-# of the file that contains the $1 string.
-dofail()
-{
-    if [ ! -z "$jdbpid" ] ; then
-        # we are in the main process instead of the jdb process
-        echo " " >> $failFile
-        echo "--Fail: main: $*" >> $failFile
-    else
-        # Kill the debuggee ; it could be hung so
-        # we want to get rid of it as soon as possible.
-        killOrphans "killing debuggee" $debuggeeKeyword
-        # Kill debugger, it could be hung
-        killOrphans "killing debugger" $jdbKeyword
-
-        echo " "  >>$failFile
-        echo "--Fail: $*" >> $failFile
-    fi
-    if [ ! -z "$2" ] ; then
-        echo  "---- contents of $2 follows -------" >> $failFile
-        cat "$2" >> $failFile
-        echo "---------------" >>$failFile
-    fi
-    exit 1
-}
-
-
-redefineClass()
-{
-    if [ -z "$1" ] ; then
-        vers=2
-    else
-        vers=`echo $1 | sed -e 's/@//'`
-        vers=`expr $vers + 1`
-    fi
-
-    cmd "redefine $pkgDot$classname $tmpFileDir/vers$vers/$classname.class"
-
-    cp $tmpFileDir/$classname.java.$vers \
-       $tmpFileDir/$classname.java
-}
-
-mydojdbCmds()
-{
-   # Wait for jdb to start before we start sending cmds
-   waitForJdbMsg ']' 1
-   # Send commands from the test
-   dojdbCmds
-   # Finish jdb with quit command
-   dofinish "quit"
-}
-
-startJdb()
-{
-    if [ ! -r "$jdb" -a ! -r "$jdb.exe" ] ; then
-        dofail "$jdb does not exist"
-    fi
-    echo
-    echo "--Starting jdb, address=$address"
-    if [ -z "$address" ] ; then
-       # Let jdb choose the port and write it to stdout
-       mydojdbCmds | $jdb $jdbOptions -listenany | tee $jdbOutFile &
-
-       while [ 1 ] ; do
-           lastLine=`$grep 'Listening at address' $jdbOutFile`
-           if [ ! -z "$lastLine" ] ; then
-               break
-           fi
-           sleep 1
-       done
-       # jjh: we got the address ok, and seemed to start the debuggee
-       address=`echo $lastLine | sed -e 's@.*: *@@'`
-    else
-       mydojdbCmds | $jdb $jdbOptions -listen $address | tee $jdbOutFile &
-    fi
-    #echo address = $address
-
-
-    # this gets the pid of tee, at least it does on solaris
-    jdbpid=$!
-
-    # This fails on linux because there is an entry for each thread in jdb
-    # so we get a list of numbers in jdbpid
-    # jdbpid=`$psCmd | $grep -v grep | $grep ${orphanKeyword}_JDB | awk '{print $1}'  | tr '\n\r' '  '`
-}
-
-startDebuggee()
-{
-    args="$TESTVMOPTS $TESTJAVAOPTS"
-
-    if [ ! -z "$args" ] ; then
-       echo "--Starting debuggee with args from TESTVMOPTS and/or TESTJAVAOPTS: $args"
-    else
-       echo "--Starting debuggee"
-    fi
-
-    debuggeepid=
-    waitForJdbMsg Listening 4
-
-    beOption="-agentlib:jdwp=transport=$transport,address=$address,server=n,suspend=y" 
-#   beOption="-Xdebug -Xrunjdwp:transport=$transport,address=$address,server=n,suspend=y"
-
-    thecmd="$jdk/bin/$java $mode -classpath $tmpFileDir $baseArgs $args \
-            -Djtreg.classDir=$TESTCLASSES \
-            -showversion \
-             $beOption \
-             $pkgDot$classname"
-    echo "Cmd: $thecmd"
-
-    sh -c "$thecmd | tee $debuggeeOutFile" &
-
-    # Note that the java cmd and the tee cmd will be children of
-    # the sh process.  We can use that to find them to kill them.
-    debuggeepid=$!
-
-    # Save this in a place where the jdb process can find it.
-    # Note that it is possible for the java cmd to abort during startup
-    # due to a bad classpath or whatever.
-    echo $debuggeepid > $debuggeepidFile
-}
-
-dojstack()
-{
-    if [ -r "$jdk/bin/$jstack" ] ; then
-        # If jstack exists, so will jps
-        # Show stack traces of jdb and debuggee as a possible debugging aid.
-        jdbCmd=`$jdk/bin/jps -v | $grep $jdbKeyword`
-        realJdbPid=`echo "$jdbCmd" | sed -e 's@ .*@@'`
-        if [ ! -z "$realJdbPid" ] ; then
-            echo "-- jdb process info ----------------------" >&2
-            echo "      $jdbCmd"                              >&2
-            echo "-- jdb threads: jstack $realJdbPid"         >&2
-            $jdk/bin/$jstack $realJdbPid                      >&2
-            echo "------------------------------------------" >&2
-            echo                                              >&2
-        fi
-        debuggeeCmd=`$jdk/bin/jps -v | $grep $debuggeeKeyword`
-        realDebuggeePid=`echo "$debuggeeCmd" | sed -e 's@ .*@@'`
-        if [ ! -z "$realDebuggeePid" ] ; then
-            echo "-- debuggee process info ----------------------" >&2
-            echo "      $debuggeeCmd"                              >&2
-            echo "-- debuggee threads: jstack $moption $realDebuggeePid" >&2
-            $jdk/bin/$jstack $realDebuggeePid                      >&2
-            echo "============================================="   >&2
-            echo                                                   >&2
-        fi
-    fi
-}
-
-waitForFinish()
-{
-    # This is the main process
-    # Wait for the jdb process to finish, or some error to occur
-
-    while [ 1 = 1 ] ; do
-        findPid $jdbpid
-        if [ $? != 0 ] ; then
-            break
-        fi
-
-        # (Don't use jdbFailIfPresent here since it is not safe 
-        # to call from different processes)
-        $grep -s 'Input stream closed' $jdbOutFile > $devnull 2>&1
-        if [ $? = 0 ] ; then
-            dofail "jdb input stream closed prematurely"
-        fi
-
-        # If a failure has occured, quit
-        if [ -r "$failFile" ] ; then
-            break
-        fi
-
-        sleep ${sleep_seconds}
-    done
-
-    # jdb exited because its input stream closed prematurely
-    # (Don't use jdbFailIfPresent here since it is not safe 
-    # to call from different processes)
-    $grep -s 'Input stream closed' $jdbOutFile > $devnull 2>&1
-    if [ $? = 0 ] ; then
-        dofail "jdb input stream closed prematurely"
-    fi
-
-    # It is necessary here to avoid the situation when JDB exited but
-    # mydojdbCmds() didn't finish because it waits for JDB message
-    # in waitForJdbMsg(), at the same time main process will finish
-    # the execution with no errors.
-    # To avoid that, wait for spawned processes to finish
-    case "$osname" in
-        SunOS)
-            # `wait` function doesn't work in Solaris shell as in bash,
-            # so create replacement that finds mydojdbCmds() shell process
-            # and waits for its finish
-            cmdsPid=
-            # get list of processes except main process with $topPid
-            processes=`$psCmd | $grep -v "$grep" | $grep -v $topPid | awk '{print $1}'`
-            for pid in $processes; do
-                # for each process grep its full args string for test name $0
-                # $0 contains full test name with path
-                pargs -l $pid 2>$devnull | $grep "$0" >$devnull 2>&1
-                if [ $? = 0 ] ; then
-                    cmdsPid=$pid
-                    break
-                fi
-            done
-            echo "--waitForFinish: Waiting for mydojdbCmds() to finish" >&2
-            while [ 1 = 1 ] ; do
-                findPid $cmdsPid
-                if [ $? != 0 ] ; then
-                    break
-                fi
-                sleep ${sleep_seconds}
-            done
-            ;;
-        *)
-            echo "--waitForFinish: Waiting for all processes to finish" >&2
-            wait
-            ;;
-    esac
-
-    if [ -r "$failFile" ] ; then
-        ls -l "$failFile" >&2
-        echo "<waitForFinish:_begin_failFile_contents>" >&2
-        cat "$failFile" >&2
-        echo "<waitForFinish:_end_failFile_contents>" >&2
-        exit 1
-    fi
-}
-
-# $1 is the filename, $2 is the string to look for,
-# $3 is the number of lines to search (from the end)
-grepForString()
-{
-    if [ -z "$3" ] ; then
-        theCmd=cat
-    else
-        theCmd="tail -$3"
-    fi
-
-    case "$2" in 
-    *\>*)
-        # Target string contains a '>' so we better not ignore it
-        $theCmd $1 | $grep -s "$2"  > $devnull 2>&1
-        stat="$?"
-        ;;
-    *)
-        # Target string does not contain a '>'.
-        # NOTE:  if $1 does not end with a new line, piping it to sed
-        # doesn't include the chars on the last line.  Detect this
-        # case, and add a new line.
-        theFile="$1"
-        if [ `tail -1 "$theFile" | wc -l | sed -e 's@ @@g'` = 0 ] ; then
-            # The target file doesn't end with a new line so we have
-            # add one to a copy of the target file so the sed command
-            # below can filter that last line.
-            cp "$theFile" "$theFile.tmp"
-            theFile="$theFile.tmp"
-            echo >> "$theFile"
-        fi
-
-        # See bug 6220903. Sometimes the jdb prompt chars ('> ') can
-        # get interleaved in the target file which can keep us from
-        # matching the target string.
-        $theCmd "$theFile" | sed -e 's@> @@g' -e 's@>@@g' \
-            | $grep -s "$2" > $devnull 2>&1
-        stat=$?
-        if [ "$theFile" != "$1" ]; then
-            # remove the copy of the target file
-            rm -f "$theFile"
-        fi
-        unset theFile
-    esac
-
-    return $stat
-}
-
-# $1 is the filename, $2 is the regexp to match and return,
-# $3 is the number of lines to search (from the end)
-matchRegexp()
-{
-    if [ -z "$3" ] ; then
-        theCmd=cat
-    else
-        theCmd="tail -$3"
-    fi
-
-    case "$2" in 
-    *\>*)
-        # Target string contains a '>' so we better not ignore it
-        res=`$theCmd $1 | sed -e "$2"`
-        ;;
-    *)
-        # Target string does not contain a '>'.
-        # NOTE:  if $1 does not end with a new line, piping it to sed
-        # doesn't include the chars on the last line.  Detect this
-        # case, and add a new line.
-        theFile="$1"
-        if [ `tail -1 "$theFile" | wc -l | sed -e 's@ @@g'` = 0 ] ; then
-            # The target file doesn't end with a new line so we have
-            # add one to a copy of the target file so the sed command
-            # below can filter that last line.
-            cp "$theFile" "$theFile.tmp"
-            theFile="$theFile.tmp"
-            echo >> "$theFile"
-        fi
-
-        # See bug 6220903. Sometimes the jdb prompt chars ('> ') can
-        # get interleaved in the target file which can keep us from
-        # matching the target string.
-        res=`$theCmd "$theFile" | sed -e 's@> @@g' -e 's@>@@g' \
-            | sed -e "$2"`
-        if [ "$theFile" != "$1" ]; then
-            # remove the copy of the target file
-            rm -f "$theFile"
-        fi
-        unset theFile
-    esac
-    return $res
-}
-
-# $1 is the filename, $2 is the string to look for,
-# $3 is the number of lines to search (from the end)
-failIfPresent()
-{
-    if [ -r "$1" ] ; then
-        grepForString "$1" "$2" "$3"
-        if [ $? = 0 ] ; then
-            dofail "Error output found: \"$2\" in $1" $1
-        fi
-    fi
-}
-
-# $1 is the filename, $2 is the string to look for
-# $3 is the number of lines to search (from the end)
-failIfNotPresent()
-{
-    if [ ! -r "$1" ] ; then
-        dofail "Required output \"$2\" not found in $1"
-    fi
-    grepForString "$1" "$2" "$3"
-    if [ $? != 0 ] ; then
-        dofail "Required output \"$2\" not found in $1" $1
-    fi
-
-}
-
-# fail if $1 is not in the jdb output
-# $2 is the number of lines to search (from the end)
-jdbFailIfNotPresent()
-{
-    failIfNotPresent $jdbOutFile "$1" $2
-}
-
-# fail if $1 is not in the debuggee output
-# $2 is the number of lines to search (from the end)
-debuggeeFailIfNotPresent()
-{
-    failIfNotPresent $debuggeeOutFile "$1" $2
-}
-
-# fail if $1 is in the jdb output
-# $2 is the number of lines to search (from the end)
-jdbFailIfPresent()
-{
-    failIfPresent $jdbOutFile "$1" $2
-}
-
-# fail if $1 is in the debuggee output
-# $2 is the number of lines to search (from the end)
-debuggeeFailIfPresent()
-{
-    failIfPresent $debuggeeOutFile "$1" $2
-}
-
-# match and return the output from the regexp $1 in the debuggee output
-# $2 is the number of lines to search (from the end)
-debuggeeMatchRegexp()
-{
-    matchRegexp $debuggeeOutFile "$1" $2
-}
-
-
-# This should really be named 'done' instead of pass.
-pass()
-{
-    if [ ! -r "$failFile" ] ; then
-        echo
-        echo "--Done: test passed"
-        exit 0
-    else
-        ls -l "$failFile" >&2
-        echo "<pass:_begin_failFile_contents>" >&2
-        cat "$failFile" >&2
-        echo "<pass:_end_failFile_contents>" >&2
-    fi
-}
-
-runit()
-{
-    setup
-    docompile
-    startJdb
-    startDebuggee
-    waitForFinish
-
-    # in hs_err file from 1.3.1
-    debuggeeFailIfPresent "Virtual Machine Error"
-
-    # in hs_err file from 1.4.2, 1.5:  An unexpected error
-    debuggeeFailIfPresent "An unexpected error"
-
-    # in hs_err file from 1.4.2, 1.5:  Internal error
-    debuggeeFailIfPresent "Internal error"
-
-
-    # Don't know how this arises
-    debuggeeFailIfPresent "An unexpected exception"
-
-    # Don't know how this arises
-    debuggeeFailIfPresent "Internal exception"
-}
--- a/test/jdk/com/sun/jdi/ZZZcleanup.sh	Fri Oct 05 23:45:02 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#  @test
-#  @bug 1234567
-#  @summary no bug
-#  @author Jim Holmlund
-#
-#  @run shell ZZZcleanup.sh
-
-#  This is run by jtreg after all other tests in
-#  this dir have run.  It kills any orphan
-#  processes that have  been left.
-#  If you can figure out a better way, let me know
-
-mysetup()
-{
-    if [ -z "$TESTSRC" ] ; then
-        TESTSRC=.
-    fi
-
-    for ii in . $TESTSRC $TESTSRC/.. ; do
-        if [ -r "$ii/ShellScaffold.sh" ] ; then
-            . $ii/ShellScaffold.sh 
-            break
-        fi
-    done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-setup
-pass