< prev index next >
test/runtime/ReservedStack/ReservedStackTest.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2015, 2016, 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.
--- 1,7 ----
/*
! * Copyright (c) 2015, 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.
*** 110,119 ****
--- 110,121 ----
*
*/
import java.util.concurrent.locks.ReentrantLock;
import jdk.test.lib.Platform;
+ import jdk.test.lib.process.ProcessTools;
+ import jdk.test.lib.process.OutputAnalyzer;
public class ReservedStackTest {
static class ReentrantLockTest {
*** 195,212 ****
System.out.println("Framework got StackOverflowError at frame = " + counter);
System.out.println("Test started execution at frame = " + (counter - deframe));
String result = test.getResult();
// The feature is not fully implemented on all platforms,
// corruptions are still possible.
! boolean supportedPlatform =
! Platform.isAix() ||
! (Platform.isLinux() &&
! (Platform.isPPC() || Platform.isS390x() || Platform.isX64() ||
! Platform.isX86() || Platform.isAArch64())) ||
! Platform.isOSX() ||
! Platform.isSolaris();
! if (supportedPlatform && !result.contains("PASSED")) {
System.out.println(result);
throw new Error(result);
} else {
// Either the test passed or this platform is not supported.
// On not supported platforms, we only expect the VM to
--- 197,207 ----
System.out.println("Framework got StackOverflowError at frame = " + counter);
System.out.println("Test started execution at frame = " + (counter - deframe));
String result = test.getResult();
// The feature is not fully implemented on all platforms,
// corruptions are still possible.
! if (isSupportedPlatform && !result.contains("PASSED")) {
System.out.println(result);
throw new Error(result);
} else {
// Either the test passed or this platform is not supported.
// On not supported platforms, we only expect the VM to
*** 235,245 ****
test.run();
}
}
}
! public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
// Each iteration has to be executed by a new thread. The test
// relies on the random size area pushed by the VM at the beginning
// of the stack of each Java thread it creates.
Thread thread = new Thread(new RunWithSOEContext(new ReentrantLockTest(), 256));
--- 230,296 ----
test.run();
}
}
}
! public static boolean isAlwaysSupportedPlatform() {
! // Note: To date Aarch64 is the only platform that we don't statically
! // know if it supports the reserved stack area. This is because the
! // open Aarch64 port supports it and the Oracle arm64 port does not.
! return Platform.isAix() ||
! (Platform.isLinux() &&
! (Platform.isPPC() || Platform.isS390x() || Platform.isX64() ||
! Platform.isX86())) ||
! Platform.isOSX() ||
! Platform.isSolaris();
! }
!
! public static boolean isNeverSupportedPlatform() {
! return !isAlwaysSupportedPlatform() && !Platform.isAArch64();
! }
!
! public static boolean isSupportedPlatform;
!
! public static void initIsSupportedPlatform() throws Exception {
! // In order to dynamicaly determine if the platform supports the reserved
! // stack area, run with -XX:StackReservedPages=1 and see if we get the
! // expected warning message for platforms that don't support it.
! ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:StackReservedPages=1", "-version");
! OutputAnalyzer output = new OutputAnalyzer(pb.start());
! System.out.println("StackReservedPages=1 log: [" + output.getOutput() + "]");
! if (output.getExitValue() != 0) {
! String msg = "Could not launch with -XX:StackReservedPages=1: exit " + output.getExitValue();
! System.err.println("FAILED: " + msg);
! throw new RuntimeException(msg);
! }
!
! isSupportedPlatform = true;
! String matchStr = "Reserved Stack Area not supported on this platform";
! int match_idx = output.getOutput().indexOf(matchStr);
! if (match_idx >= 0) {
! isSupportedPlatform = false;
! }
!
! // Do a sanity check. Some platforms we know are always supported. Make sure
! // we didn't determine that one of those platforms is not supported.
! if (!isSupportedPlatform && isAlwaysSupportedPlatform()) {
! String msg = "This platform should be supported: " + Platform.getOsArch();
! System.err.println("FAILED: " + msg);
! throw new RuntimeException(msg);
! }
!
! // And some platforms we know are never supported. Make sure
! // we didn't determine that one of those platforms is supported.
! if (isSupportedPlatform && isNeverSupportedPlatform()) {
! String msg = "This platform should not be supported: " + Platform.getOsArch();
! System.err.println("FAILED: " + msg);
! throw new RuntimeException(msg);
! }
! }
!
! public static void main(String[] args) throws Exception {
! initIsSupportedPlatform();
for (int i = 0; i < 1000; i++) {
// Each iteration has to be executed by a new thread. The test
// relies on the random size area pushed by the VM at the beginning
// of the stack of each Java thread it creates.
Thread thread = new Thread(new RunWithSOEContext(new ReentrantLockTest(), 256));
< prev index next >