--- a/jdk/make/lib/Lib-jdk.attach.gmk Fri May 08 13:26:07 2015 -0400
+++ b/jdk/make/lib/Lib-jdk.attach.gmk Sat May 09 07:35:16 2015 -0400
@@ -27,6 +27,12 @@
################################################################################
+ifeq ($(OPENJDK_TARGET_OS), windows)
+ # In (at least) VS2013 and later, -DPSAPI_VERSION=1 is needed to generate
+ # a binary that is compatible with windows versions older than 7/2008R2.
+ # See MSDN documentation for GetProcessMemoryInfo for more information.
+ LIBATTACH_CFLAGS := -DPSAPI_VERSION=1
+endif
$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH, \
LIBRARY := attach, \
@@ -35,7 +41,7 @@
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \
-I$(SUPPORT_OUTPUTDIR)/headers/jdk.attach \
- $(LIBJAVA_HEADER_FLAGS), \
+ $(LIBJAVA_HEADER_FLAGS) $(LIBATTACH_CFLAGS), \
CFLAGS_windows := /Gy, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libattach/mapfile-$(OPENJDK_TARGET_OS), \
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java Fri May 08 13:26:07 2015 -0400
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java Sat May 09 07:35:16 2015 -0400
@@ -241,7 +241,7 @@
* (using the zero-arg constructor) at the first invocation of this method.
* The list returned by the first invocation of this method is the list
* of providers. Subsequent invocations of this method return a list of the same
- * providers. The list is unmodifable.
+ * providers. The list is unmodifiable.
*
* @return A list of the installed attach providers.
*/
@@ -264,8 +264,8 @@
ThreadDeath td = (ThreadDeath)t;
throw td;
}
- // Ignore errors and exceptions
- System.err.println(t);
+ // Log errors and exceptions since we cannot return them
+ t.printStackTrace();
}
}
}
--- a/jdk/test/ProblemList.txt Fri May 08 13:26:07 2015 -0400
+++ b/jdk/test/ProblemList.txt Sat May 09 07:35:16 2015 -0400
@@ -385,4 +385,10 @@
# 8064572 8060736 8062938
sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all
+# 8079273
+demo/jvmti/hprof/CpuOldTest.java generic-all
+demo/jvmti/hprof/CpuTimesTest.java generic-all
+demo/jvmti/hprof/OptionsTest.java generic-all
+demo/jvmti/hprof/StackMapTableTest.java generic-all
+
############################################################################
--- a/jdk/test/com/sun/jdi/NoLaunchOptionTest.java Fri May 08 13:26:07 2015 -0400
+++ b/jdk/test/com/sun/jdi/NoLaunchOptionTest.java Sat May 09 07:35:16 2015 -0400
@@ -21,6 +21,10 @@
* questions.
*/
+import static jdk.testlibrary.Asserts.assertFalse;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+
/*
* @test NoLaunchOptionTest.java
* @bug 4554734 4724714
@@ -32,123 +36,20 @@
* @build VMConnection
* @run driver NoLaunchOptionTest
*/
-
-import java.net.ServerSocket;
-
public class NoLaunchOptionTest extends Object {
- private Process subprocess;
- private int subprocessStatus;
- private static final String CR = System.getProperty("line.separator");
- private static final int BUFFERSIZE = 4096;
- public static final int RETSTAT = 0;
- public static final int STDOUT = 1;
- public static final int STDERR = 2;
-
- /**
- * Run an arbitrary command and return the results to caller.
- *
- * @param an array of String containing the command
- * to run and any flags or parameters to the command.
- *
- * @return completion status, stderr and stdout as array of String
- * Look for:
- * return status in result[NoLaunchOptionTest.RETSTAT]
- * standard out in result[NoLaunchOptionTest.STDOUT]
- * standard err in result[NoLaunchOptionTest.STDERR]
- *
- */
- public String[] run (String[] cmdStrings) {
- StringBuffer stdoutBuffer = new StringBuffer();
- StringBuffer stderrBuffer = new StringBuffer();
-
- System.out.print(CR + "runCommand method about to execute: ");
- for (int iNdx = 0; iNdx < cmdStrings.length; iNdx++) {
- System.out.print(" ");
- System.out.print(cmdStrings[iNdx]);
- }
- System.out.println(CR);
- try {
- Process process = Runtime.getRuntime().exec(cmdStrings);
- /*
- * Gather up the output of the subprocess using non-blocking
- * reads so we can get both the subprocess stdout and the
- * subprocess stderr without overfilling any buffers.
- */
- java.io.BufferedInputStream is =
- new java.io.BufferedInputStream(process.getInputStream());
- int isLen = 0;
- byte[] isBuf = new byte[BUFFERSIZE];
-
- java.io.BufferedInputStream es =
- new java.io.BufferedInputStream(process.getErrorStream());
- int esLen = 0;
- byte[] esBuf = new byte[BUFFERSIZE];
-
- do {
- isLen = is.read(isBuf);
- if (isLen > 0) {
- stdoutBuffer.append(
- new String(isBuf, 0, isLen));
- }
- esLen = es.read(esBuf);
- if (esLen > 0) {
- stderrBuffer.append(
- new String(esBuf, 0, esLen));
- }
- } while ((isLen > -1) || (esLen > -1));
- try {
- process.waitFor();
- subprocessStatus = process.exitValue();
- process = null;
- } catch(java.lang.InterruptedException e) {
- System.err.println("InterruptedException: " + e);
- }
-
- } catch(java.io.IOException ex) {
- System.err.println("IO error: " + ex);
- }
- String[] result =
- new String[] {
- Integer.toString(subprocessStatus),
- stdoutBuffer.toString(),
- stderrBuffer.toString()
- };
-
- System.out.println(CR + "--- Return code was: " +
- CR + result[RETSTAT]);
- System.out.println(CR + "--- Return stdout was: " +
- CR + result[STDOUT]);
- System.out.println(CR + "--- Return stderr was: " +
- CR + result[STDERR]);
-
- return result;
- }
public static void main(String[] args) throws Exception {
- // find a free port
- ServerSocket ss = new ServerSocket(0);
- int port = ss.getLocalPort();
- ss.close();
- String address = String.valueOf(port);
+ String[] cmd = VMConnection.insertDebuggeeVMOptions(new String[] {
+ "-agentlib:jdwp=transport=dt_socket,address=5555," +
+ "onthrow=java.lang.ClassNotFoundException,suspend=n",
+ "NotAClass" });
- String javaExe = System.getProperty("java.home") +
- java.io.File.separator + "bin" +
- java.io.File.separator + "java";
- String targetClass = "NotAClass";
- String cmds [] = {javaExe,
- "-agentlib:jdwp=transport=dt_socket,address=" +
- address + "," +
- "onthrow=java.lang.ClassNotFoundException,suspend=n",
- targetClass};
- NoLaunchOptionTest myTest = new NoLaunchOptionTest();
- String results [] = myTest.run(VMConnection.insertDebuggeeVMOptions(cmds));
- if ((results[RETSTAT].equals("1")) &&
- (results[STDERR].contains("ERROR:"))) {
- System.out.println("Test passed: status = 1 with warning messages " +
- "is expected and normal for this test");
- } else {
- throw new Exception("Test failed: unspecified test failure");
- }
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(cmd);
+ OutputAnalyzer output = ProcessTools.executeProcess(pb);
+ System.out.println(output.getOutput());
+
+ assertFalse(output.getExitValue() == 0, "Exit code should not be 0");
+ output.shouldContain("ERROR: JDWP Specify launch=<command line> when using onthrow or onuncaught suboption");
}
}