diff --git a/buildenv/jenkins/common/build.groovy b/buildenv/jenkins/common/build.groovy index 16dcbc1dec3..439731c5889 100644 --- a/buildenv/jenkins/common/build.groovy +++ b/buildenv/jenkins/common/build.groovy @@ -113,17 +113,17 @@ def checkout_pullrequest() { // Cannot depend on a change from the same repo as the source repo def SOURCE_REPO_MESSAGE switch (params.ghprbGhRepository) { - case "eclipse/openj9-omr": + case ~/.*\/openj9-omr/: omr_bool = true OMR_PR = params.ghprbPullId SOURCE_REPO_MESSAGE = "PullRequest source repo appears to be OpenJ9-OMR" break - case "eclipse/openj9": + case ~/.*\/openj9/: openj9_bool = true OPENJ9_PR = params.ghprbPullId SOURCE_REPO_MESSAGE = "PullRequest source repo appears to be OpenJ9" break - case ~/ibmruntimes(.*)/: + case ~/.*openj9-openjdk-jdk.*/: openjdk_bool = true OPENJDK_PR = params.ghprbPullId SOURCE_REPO_MESSAGE = "PullRequest source repo appears to be OpenJDK" @@ -198,7 +198,7 @@ def checkout_pullrequest() { checkout_pullrequest(OPENJDK_PR, "ibmruntimes/openj9-openjdk-jdk${JDK_REPO_SUFFIX}") } - sh "bash ./get_source.sh ${EXTRA_GETSOURCE_OPTIONS}" + sh "bash ./get_source.sh ${EXTRA_GETSOURCE_OPTIONS} ${OPENJ9_REPO_OPTION} ${OPENJ9_BRANCH_OPTION} ${OPENJ9_SHA_OPTION} ${OMR_REPO_OPTION} ${OMR_BRANCH_OPTION} ${OMR_SHA_OPTION}" // Checkout dependent PRs, if any were specified if (openj9_bool) { @@ -225,6 +225,8 @@ def checkout_pullrequest(ID, REPO) { fetchRef("pull/${ID}/merge", "pr/${ID}/merge" ) checkoutRef ("pr/${ID}/merge") } catch (e) { + // If merge ref doesn't exist, checkout PR base branch. + // Not going to fix this to work for internal PRs. def JSONFILE = "" def BASEREF = "" def URL = "https://api.github.com/repos/${REPO}/pulls/${ID}" diff --git a/buildenv/jenkins/common/pipeline-functions.groovy b/buildenv/jenkins/common/pipeline-functions.groovy index 832f2a8bf6b..94964005bb1 100644 --- a/buildenv/jenkins/common/pipeline-functions.groovy +++ b/buildenv/jenkins/common/pipeline-functions.groovy @@ -714,14 +714,19 @@ def setup_pull_request_single_comment(parsedComment) { // Setup JDK VERSIONS switch (ghprbGhRepository) { case ~/.*openj9-openjdk-jdk.*/: + // /openj9-openjdk-jdk(-zos)? def tmp_version = ghprbGhRepository.substring(ghprbGhRepository.indexOf('-jdk')+4) if ("${tmp_version}" == "") { tmp_version = 'next' } + if (tmp_version.contains('-')) { + // Strip off '-zos' + tmp_version = tmp_version.substring(0, tmp_version.indexOf('-')) + } RELEASES.add(tmp_version) minCommentSize = 3 break - case "eclipse/openj9": + case ~/.*\/openj9(-omr)?/: def tmpVersions = parsedComment[3+offset].tokenize(',') tmpVersions.each { version -> echo "VERSION:'${version}'" diff --git a/buildenv/jenkins/jobs/pipelines/Pipeline-Build-Test-All.groovy b/buildenv/jenkins/jobs/pipelines/Pipeline-Build-Test-All.groovy index 0eceb1c9399..1e91e76db81 100644 --- a/buildenv/jenkins/jobs/pipelines/Pipeline-Build-Test-All.groovy +++ b/buildenv/jenkins/jobs/pipelines/Pipeline-Build-Test-All.groovy @@ -135,7 +135,8 @@ SHORT_NAMES = ['all' : ['ppc64le_linux','ppc64le_linux_xl','s390x_linux','s390x_ 'osxxl' : ['x86-64_mac_xl'], 'alinux64' : ['aarch64_linux'], 'alinux64xl' : ['aarch64_linux_xl'], - 'alinux64largeheap' : ['aarch64_linux_xl']] + 'alinux64largeheap' : ['aarch64_linux_xl'], + 'zos' : ['s390x_zos']] // Initialize all PARAMETERS (params) to Groovy Variables even if they are not passed echo "Initialize all PARAMETERS..." @@ -191,14 +192,14 @@ echo "SCM_REPO:'${SCM_REPO}'" SCM_BRANCH = 'refs/heads/master' if (params.SCM_BRANCH) { SCM_BRANCH = params.SCM_BRANCH -} else if (ghprbPullId && ghprbGhRepository == 'eclipse/openj9') { +} else if (ghprbPullId && ghprbGhRepository ==~ /.*\/openj9/) { SCM_BRANCH = sha1 } echo "SCM_BRANCH:'${SCM_BRANCH}'" SCM_REFSPEC = '' if (params.SCM_REFSPEC) { SCM_REFSPEC = params.SCM_REFSPEC -} else if (ghprbPullId && ghprbGhRepository == 'eclipse/openj9') { +} else if (ghprbPullId && ghprbGhRepository ==~ /.*\/openj9/) { SCM_REFSPEC = "+refs/pull/${ghprbPullId}/merge:refs/remotes/origin/pr/${ghprbPullId}/merge" } echo "SCM_REFSPEC:'${SCM_REFSPEC}'" diff --git a/buildenv/jenkins/variables/defaults.yml b/buildenv/jenkins/variables/defaults.yml index 5c8898be894..1532c9cc64f 100644 --- a/buildenv/jenkins/variables/defaults.yml +++ b/buildenv/jenkins/variables/defaults.yml @@ -183,8 +183,7 @@ ppc64le_linux: node_labels: build: 'ci.role.build && hw.arch.ppc64le && sw.os.ubuntu' extra_configure_options: - 8: '--enable-jitserver' - 11: '--enable-jitserver' + all: '--enable-jitserver' build_env: vars: 'PATH+GCC7=/usr/local/gcc-7.5.0/bin LD_LIBRARY_PATH=/usr/local/gcc-7.5.0/lib64:$LD_LIBRARY_PATH' #========================================# @@ -199,10 +198,8 @@ ppc64le_linux_xl: extends: ['ppc64le_linux', 'largeheap'] excluded_tests: 8: - - sanity.openjdk - special.system 11: - - sanity.openjdk - special.system #========================================# # Linux PPCLE 64bits Compressed Pointers /w JITSERVER @@ -237,10 +234,7 @@ s390x_linux: s390x_linux_xl: extends: ['s390x_linux', 'largeheap'] excluded_tests: - 8: - - sanity.openjdk - 11: - - sanity.openjdk + 11: - special.system #========================================# # Linux S390 64bits Compressed Pointers /w JITSERVER @@ -253,10 +247,10 @@ s390x_linux_jit: ppc64_aix: extends: ['debuginfo', 'freemarker', 'openjdk_reference_repo', 'openssl'] boot_jdk: - 8: '/usr/java7' - 11: '/usr/java11_64' - 14: '/usr/java13_64' - next: '/usr/java13_64' + 8: '/opt/java7' + 11: '/opt/java11_64' + 14: '/opt/java13_64' + next: '/opt/java13_64' release: all: 'aix-ppc64-server-release' 8: 'aix-ppc64-normal-server-release' @@ -276,10 +270,6 @@ ppc64_aix: 14: 'PATH+XLC=/opt/IBM/xlC/16.1.0/bin:/opt/IBM/xlc/16.1.0/bin CC=xlclang CXX=xlclang++' next: 'PATH+XLC=/opt/IBM/xlC/16.1.0/bin:/opt/IBM/xlc/16.1.0/bin CC=xlclang CXX=xlclang++' excluded_tests: - 8: - - sanity.openjdk - 11: - - sanity.openjdk - special.system #========================================# # Linux x86 64bits Compressed Pointers @@ -298,8 +288,7 @@ x86-64_linux: node_labels: build: 'ci.role.build && hw.arch.x86 && sw.os.cent.6' extra_configure_options: - 8: '--enable-jitserver' - 11: '--enable-jitserver' + all: '--enable-jitserver' build_env: cmd: 'source /home/jenkins/set_gcc7.5.0_env' vars: 'OPENJ9_JAVA_OPTIONS=-Xdump:system+java:events=systhrow,filter=java/lang/ClassCastException,request=exclusive+prepwalk+preempt' @@ -323,10 +312,7 @@ x86-64_linux_xl: extends: ['x86-64_linux', 'largeheap'] excluded_tests: 8: - - sanity.openjdk - special.system - 11: - - sanity.openjdk #========================================# # Linux x86 64bits Compressed Pointers / Valhalla #========================================# @@ -375,10 +361,7 @@ x86-64_windows: build_env: vars: 'PATH+TOOLS=/cygdrive/c/openjdk/LLVM64/bin:/cygdrive/c/openjdk/nasm-2.13.03' excluded_tests: - 8: - - sanity.openjdk 11: - - sanity.openjdk - special.system #========================================# # Windows x86 64bits Large Heap @@ -405,10 +388,7 @@ x86-32_windows: 8: 'PATH+TOOLS=/cygdrive/c/openjdk/LLVM32/bin:/cygdrive/c/openjdk/nasm-2.13.03' excluded_tests: 8: - - sanity.openjdk - special.system - 11: - - sanity.openjdk #========================================# # OSX x86 64bits Compressed Pointers #========================================# @@ -436,10 +416,7 @@ x86-64_mac: all: 'OPENJ9_JAVA_OPTIONS=-Xdump:system+java:events=systhrow,filter=java/lang/ClassCastException,request=exclusive+prepwalk+preempt' 8: 'MACOSX_DEPLOYMENT_TARGET=10.9.0 SDKPATH=/Users/jenkins/Xcode4/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk' excluded_tests: - 8: - - sanity.openjdk 11: - - sanity.openjdk - special.system #========================================# # OSX x86 64bits Large Heap diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITRegMap.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITRegMap.java index 1a371bd5e29..bdf8fdabe84 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITRegMap.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITRegMap.java @@ -429,7 +429,10 @@ public class JITRegMap { 0x11, /* jit_r17 */ 0x12, /* jit_r18 */ 0x13, /* jit_r19 */ - 0x14 /* jit_r20 */ + 0x14, /* jit_r20 */ + 0x1D, /* jit_r29 */ + 0x1E, /* jit_r30 */ + 0x1F /* jit_r31 */ }; jitCalleeSavedRegisterList = new int[] { diff --git a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITStackWalker.java b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITStackWalker.java index 24e97352919..4c050e71682 100644 --- a/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITStackWalker.java +++ b/debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/stackwalker/JITStackWalker.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2019 IBM Corp. and others + * Copyright (c) 2009, 2020 IBM Corp. and others * * This program and the accompanying materials are made available under * the terms of the Eclipse Public License 2.0 which accompanies this @@ -293,10 +293,6 @@ public FrameCallbackResult jitWalkStackFrames(WalkState walkState) walkState.arg0EA = walkState.i2jState.a0(); returnSP = walkState.i2jState.returnSP(); walkState.previousFrameFlags = new UDATA(0); - if (returnSP.anyBitsIn(J9_STACK_FLAGS_ARGS_ALIGNED)) { - swPrintf(walkState, 2, "I2J args were copied for alignment"); - walkState.previousFrameFlags = new UDATA(J9_STACK_FLAGS_JIT_ARGS_ALIGNED); - } walkState.walkSP = returnSP.untag(3L); swPrintf(walkState, 2, "I2J values: PC = {0}, A0 = {1}, walkSP = {2}, literals = {3}, JIT PC = {4}, pcAddress = {5}, decomp = {6}", walkState.pc.getHexAddress(), diff --git a/doc/compiler/memory/MemoryManager.md b/doc/compiler/memory/MemoryManager.md index 6c77fe5a334..7bb8bf0899f 100644 --- a/doc/compiler/memory/MemoryManager.md +++ b/doc/compiler/memory/MemoryManager.md @@ -1,5 +1,5 @@ - ^os.zos,^arch.aarch64 + ^os.zos extended @@ -82,7 +82,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti -Dtest.list=$(Q)TestCallsites$(Q) -DADDITIONALEXPORTS=$(ADDEXPORTS_JDKASM_UNNAMED) -f $(Q)$(TEST_RESROOT)$(D)tck_ddrext.xml$(Q); \ $(TEST_STATUS) - ^os.zos,^arch.aarch64 + ^os.zos extended @@ -118,7 +118,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti -Dtest.list=$(Q)TestJITExt$(Q) -DADDITIONALEXPORTS=$(ADDEXPORTS_JDKASM_UNNAMED) -DEXTRADUMPOPT=$(Q)-Xjit:count=0$(Q) -f $(Q)$(TEST_RESROOT)$(D)tck_ddrext.xml$(Q); \ $(TEST_STATUS) - ^os.zos,^arch.aarch64 + ^os.zos extended diff --git a/test/functional/JIT_Test/playlist.xml b/test/functional/JIT_Test/playlist.xml index 8a25b29267a..4fe5fb9f7a8 100644 --- a/test/functional/JIT_Test/playlist.xml +++ b/test/functional/JIT_Test/playlist.xml @@ -511,7 +511,7 @@ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(TEST_RESROOT)$(D)jitt.jar$(Q) \ -DSERVER_EXE=$(Q)$(TEST_JDK_BIN)$(D)jitserver$(Q) \ -DCLIENT_EXE=$(JAVA_COMMAND) \ - -DCLIENT_PROGRAM=$(SQ)$(JVM_OPTIONS) -cp $(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(TEST_RESROOT)$(D)jitt.jar -DjarTesterArgs=$(TEST_RESROOT)$(D)jitt.jar org.testng.TestNG -d $(REPORTDIR)$(D)client $(TEST_RESROOT)$(D)testng.xml -testnames JarTesterTest -groups $(TEST_GROUP) -excludegroups $(DEFAULT_EXCLUDE)$(SQ) \ + -DCLIENT_PROGRAM=$(SQ)$(JVM_OPTIONS) -cp $(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(TEST_RESROOT)$(D)jitt.jar -DjarTesterArgs=$(Q)-loopforever $(TEST_RESROOT)$(D)jitt.jar$(Q) org.testng.TestNG -d $(REPORTDIR)$(D)client $(TEST_RESROOT)$(D)testng.xml -testnames JarTesterTest -groups $(TEST_GROUP) -excludegroups $(DEFAULT_EXCLUDE)$(SQ) \ org.testng.TestNG \ -d $(REPORTDIR) \ $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) \ @@ -523,7 +523,6 @@ echo $(Q)$(TEST_JDK_BIN)$(D)jitserver doesn't exist; assuming this JDK does not support JITServer and trivially passing the test.$(Q); \ fi; \ $(TEST_STATUS) - https://github.com/eclipse/openj9/issues/8806 os.linux,arch.x86,bits.64 sanity diff --git a/test/functional/JIT_Test/src/jit/test/jar/ZipTester.java b/test/functional/JIT_Test/src/jit/test/jar/ZipTester.java index 99ada9e786c..5049be8c8ee 100644 --- a/test/functional/JIT_Test/src/jit/test/jar/ZipTester.java +++ b/test/functional/JIT_Test/src/jit/test/jar/ZipTester.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2001, 2018 IBM Corp. and others + * Copyright (c) 2001, 2020 IBM Corp. and others * * This program and the accompanying materials are made available under * the terms of the Eclipse Public License 2.0 which accompanies this @@ -37,11 +37,16 @@ */ public class ZipTester { private static Logger logger = Logger.getLogger(ZipTester.class); - public static final String CLASS_FILTER_TAG = "-class:"; + public static final String TAG_PREFIX = "-"; + public static final String LOOP_FOREVER_TAG = TAG_PREFIX + "loopforever"; + public static final String CLASS_FILTER_TAG = TAG_PREFIX + "class:"; public static final String CLASS_FILTER_SUBSTRING = "substring"; public static final String CLASS_FILTER = CLASS_FILTER_TAG + CLASS_FILTER_SUBSTRING; public static final String ZIP_NAMES = "zip1 zip2 ..."; + public static final String LOOP_FOREVER_HELPER = + LOOP_FOREVER_TAG + + " --> loop forever (until the JVM is terminated)"; public static final String CLASS_FILTER_HELPER = CLASS_FILTER + " --> load classes whose names contain " @@ -53,23 +58,31 @@ public class ZipTester { public static void main(String args[]) { new ZipTester().run(args); } - + public void run(String args[]) { if (args.length < 1 || args[0].isEmpty()) { printUsageText(); Assert.fail(); } - String classFilter = args[0]; + String classFilter = ""; + boolean loopForever = false; int zipFilenameIndex = 0; - if (!classFilter.startsWith(CLASS_FILTER_TAG)) - classFilter = ""; - else { - classFilter = classFilter.substring(CLASS_FILTER_TAG.length()); - zipFilenameIndex = 1; + + while (args[zipFilenameIndex].startsWith(TAG_PREFIX)) { + if (args[zipFilenameIndex].startsWith(CLASS_FILTER_TAG)) + classFilter = classFilter.substring(CLASS_FILTER_TAG.length()); + else if (args[zipFilenameIndex].equals(LOOP_FOREVER_TAG)) + loopForever = true; + zipFilenameIndex++; } - process(classFilter, args, zipFilenameIndex); + if (loopForever) + logger.info(LOOP_FOREVER_TAG + " was specified; test will run continuously until the JVM is terminated."); + + do { + process(classFilter, args, zipFilenameIndex); + } while (loopForever); } public String getClassName() { @@ -123,6 +136,7 @@ protected String getGenericCommandline() { } protected void printGenericCommandlineExplanation() { + logger.debug("\t" + LOOP_FOREVER_HELPER); logger.debug("\t" + CLASS_FILTER_HELPER); logger.debug("\t" + JAR_NAMES_HELPER); } diff --git a/test/functional/JIT_Test/src/jit/test/jitserver/JITServerTest.java b/test/functional/JIT_Test/src/jit/test/jitserver/JITServerTest.java index 32fdddfed20..650c9deef55 100644 --- a/test/functional/JIT_Test/src/jit/test/jitserver/JITServerTest.java +++ b/test/functional/JIT_Test/src/jit/test/jitserver/JITServerTest.java @@ -25,6 +25,7 @@ import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.Scanner; +import java.util.ArrayList; import java.io.File; import java.io.IOException; import java.io.FileNotFoundException; @@ -79,8 +80,15 @@ public class JITServerTest { logger.info("Chose random port for server: " + randomPort + ", set " + SERVER_PORT_ENV_VAR_NAME + " in your env to override."); } - clientBuilder = new ProcessBuilder(String.join(" ", CLIENT_EXE, "-XX:+UseJITServer", portOption, CLIENT_PROGRAM).split(" +")); - serverBuilder = new ProcessBuilder(String.join(" ", SERVER_EXE, portOption).split(" +")); + // This handy regex pattern uses positive lookahead to match a string containing either zero or an even number of " (double quote) characters. + // If a character is followed by this pattern it means that the character itself is not in a quoted string, otherwise it would be followed by + // an odd number of " characters. Note that this doesn't handle ' (single quote) characters. + final String QUOTES_LOOKAHEAD_PATTERN = "(?=([^\"]*\"[^\"]*\")*[^\"]*$)"; + // We want to split the client program string on whitespace, unless the space appears in a quoted string. + final String SPLIT_ARGS_PATTERN = "\\s+" + QUOTES_LOOKAHEAD_PATTERN; + clientBuilder = new ProcessBuilder(stripQuotesFromEachArg(String.join(" ", CLIENT_EXE, "-XX:+UseJITServer", portOption, CLIENT_PROGRAM).split(SPLIT_ARGS_PATTERN))); + serverBuilder = new ProcessBuilder(stripQuotesFromEachArg(String.join(" ", SERVER_EXE, portOption).split(SPLIT_ARGS_PATTERN))); + // Redirect stderr to stdout, one log for each of the client and server is sufficient. clientBuilder.redirectErrorStream(true); serverBuilder.redirectErrorStream(true); @@ -89,14 +97,23 @@ public class JITServerTest { serverBuilder.environment().compute("TR_Options", (k, v) -> v != null && !v.isEmpty() ? String.join(",", v, JIT_LOG_ENV_OPTION) : JIT_LOG_ENV_OPTION); } + private static String[] stripQuotesFromEachArg(String[] args) { + for (int i = 0; i < args.length; ++i) { + args[i] = args[i].replaceAll("\"", ""); + } + return args; + } + private static void dumpProcessLog(final ProcessBuilder b) { File log = b.redirectOutput().file(); try { + final String topAndBottom = "////////////////////////////////////////////////////////////////////////"; + final String leftMargin = "//// "; Scanner s = new Scanner(log); - System.err.println("Dumping the contents of log file: " + log.getAbsolutePath() + "\n"); + System.err.println("Dumping the contents of log file: " + log.getAbsolutePath() + "\n" + topAndBottom); while (s.hasNextLine()) - System.err.println(s.nextLine()); - System.err.println(""); + System.err.println(leftMargin + s.nextLine()); + System.err.println(topAndBottom); } catch (FileNotFoundException e) { System.err.println("Attempted to dump the log file '" + log.getAbsolutePath() + "' but it was not found.\n" + e.getMessage()); @@ -117,21 +134,26 @@ private static void destroyAndCheckProcess(final Process p, final ProcessBuilder // The process may exit normally before we can destroy it so we have to accept two possible return values. if ((exitValue != SUCCESS_RETURN_VALUE) && (exitValue != SIGTERM_RETURN_VALUE)) { - System.err.println("Expected a return value of " + SUCCESS_RETURN_VALUE + " or " + SIGTERM_RETURN_VALUE + ", got " + exitValue + " instead."); + final String errorText = "Expected an exit value of " + SUCCESS_RETURN_VALUE + " or " + SIGTERM_RETURN_VALUE + ", got " + exitValue + " instead."; + System.err.println(errorText); dumpProcessLog(builder); - AssertJUnit.fail(); + AssertJUnit.fail(errorText); } } private static Process startProcess(final ProcessBuilder builder, final String name) throws IOException, InterruptedException { - logger.info("Starting " + name + " with command line:\n" + String.join(" ", builder.command())); + // Wrap any arguments containing whitespace in quotes for display (we have to make a copy of ProcessBuilder.command() to avoid modifying our PB's commands). + ArrayList command = new ArrayList(builder.command()); + command.replaceAll(s -> s.matches("\\S+") ? s : "\"" + s + "\""); + logger.info("Starting " + name + " with command line:\n" + String.join(" ", command)); logger.info("With stdout/stderr redirected to:\n" + builder.redirectOutput().file().getAbsolutePath()); final Process p = builder.start(); // We expect these processes to be fairly long running; if they exit almost immediately abort the test. if (p.waitFor(PROCESS_START_WAIT_TIME_MS, TimeUnit.MILLISECONDS)) { - System.err.println("Failed to start " + name); + final String errorText = "Failed to properly start " + name + ", it terminated prematurely with exit value: " + p.exitValue(); + System.err.println(errorText); dumpProcessLog(builder); - AssertJUnit.fail(); + AssertJUnit.fail(errorText); } return p; } diff --git a/test/functional/JLM_Tests/playlist.xml b/test/functional/JLM_Tests/playlist.xml index 64780d3e681..0ec0cc86520 100644 --- a/test/functional/JLM_Tests/playlist.xml +++ b/test/functional/JLM_Tests/playlist.xml @@ -1,7 +1,7 @@ + ^os.zos,bits.64,^arch.aarch64 extended diff --git a/test/functional/Valhalla/src/org/openj9/test/lworld/ValueTypeTests.java b/test/functional/Valhalla/src/org/openj9/test/lworld/ValueTypeTests.java index 1a218e7c9aa..b8bc0303457 100644 --- a/test/functional/Valhalla/src/org/openj9/test/lworld/ValueTypeTests.java +++ b/test/functional/Valhalla/src/org/openj9/test/lworld/ValueTypeTests.java @@ -569,41 +569,372 @@ static public void testWithFieldOnNonExistentClass() throws Throwable { } catch (NoClassDefFoundError e) {} } - /* - * TODO: behaviour of the test between two valueTypes will depend on the new spec(not finalized) - * - * Test ifacmp on value class - * - * class TestIfacmpOnValueClass {} - * - * - * @Test(priority=2) - * static public void TestIfacmpOnValueClass() throws Throwable { - * int x = 0; - * int y = 0; - * - * Object valueType = makePoint2D.invoke(x, y); - * Object refType = (Object) x; - * - * Assert.assertFalse((valueType == refType), "An identity (==) comparison that contains a valueType should always return false"); - * - * Assert.assertFalse((refType == valueType), "An identity (==) comparison that contains a valueType should always return false"); - * - * Assert.assertFalse((valueType == valueType), "An identity (==) comparison that contains a valueType should always return false"); - * - * Assert.assertTrue((refType == refType), "An identity (==) comparison on the same refType should always return true"); - * - * Assert.assertTrue((valueType != refType), "An identity (!=) comparison that contains a valueType should always return true"); - * - * Assert.assertTrue((refType != valueType), "An identity (!=) comparison that contains a valueType should always return true"); - * - * Assert.assertTrue((valueType != valueType), "An identity (!=) comparison that contains a valueType should always return true"); - * - * Assert.assertFalse((refType != refType), "An identity (!=) comparison on the same refType should always return false"); - * } - */ + + @Test(priority=2) + static public void testBasicACMPTestOnIdentityTypes() throws Throwable { + + Object identityType1 = new String(); + Object identityType2 = new String(); + Object nullPointer = null; + + /* sanity test on identity classes */ + Assert.assertTrue((identityType1 == identityType1), "An identity (==) comparison on the same identityType should always return true"); + + Assert.assertFalse((identityType2 == identityType1), "An identity (==) comparison on different identityTypes should always return false"); + + Assert.assertFalse((identityType2 == nullPointer), "An identity (==) comparison on different identityTypes should always return false"); + + Assert.assertTrue((nullPointer == nullPointer), "An identity (==) comparison on the same identityType should always return true"); + + Assert.assertFalse((identityType1 != identityType1), "An identity (!=) comparison on the same identityType should always return false"); + + Assert.assertTrue((identityType2 != identityType1), "An identity (!=) comparison on different identityTypes should always return true"); + + Assert.assertTrue((identityType2 != nullPointer), "An identity (!=) comparison on different identityTypes should always return true"); + + Assert.assertFalse((nullPointer != nullPointer), "An identity (!=) comparison on the same identityType should always return false"); + + } + + @Test(priority=2) + static public void testBasicACMPTestOnValueTypes() throws Throwable { + Object valueType1 = makePoint2D.invoke(1, 2); + Object valueType2 = makePoint2D.invoke(1, 2); + Object newValueType = makePoint2D.invoke(2, 1); + Object identityType = new String(); + Object nullPointer = null; + + Assert.assertTrue((valueType1 == valueType1), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((valueType1 == valueType2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((valueType1 == newValueType), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((valueType1 == identityType), "A substitutability (==) test on different value with identity type should always return false"); + + Assert.assertFalse((valueType1 == nullPointer), "A substitutability (==) test on different value with null pointer should always return false"); + + Assert.assertFalse((valueType1 != valueType1), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((valueType1 != valueType2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((valueType1 != newValueType), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((valueType1 != identityType), "A substitutability (!=) test on different value with identity type should always return true"); + + Assert.assertTrue((valueType1 != nullPointer), "A substitutability (!=) test on different value with null pointer should always return true"); + } + + @Test(priority=4) + static public void testACMPTestOnFastSubstitutableValueTypes() throws Throwable { + Object valueType1 = createTriangle2D(defaultTrianglePositions); + Object valueType2 = createTriangle2D(defaultTrianglePositions); + Object newValueType = createTriangle2D(defaultTrianglePositionsNew); + Object identityType = new String(); + Object nullPointer = null; + + Assert.assertTrue((valueType1 == valueType1), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((valueType1 == valueType2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((valueType1 == newValueType), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((valueType1 == identityType), "A substitutability (==) test on different value with identity type should always return false"); + + Assert.assertFalse((valueType1 == nullPointer), "A substitutability (==) test on different value with null pointer should always return false"); + + Assert.assertFalse((valueType1 != valueType1), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((valueType1 != valueType2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((valueType1 != newValueType), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((valueType1 != identityType), "A substitutability (!=) test on different value with identity type should always return true"); + + Assert.assertTrue((valueType1 != nullPointer), "A substitutability (!=) test on different value with null pointer should always return true"); + } + + @Test(priority=3) + static public void testACMPTestOnFastSubstitutableValueTypesVer2() throws Throwable { + /* these VTs will have array refs */ + String fields[] = {"x:I", "y:I", "z:I", "arr:[Ljava/lang/Object;"}; + Class fastSubVT = ValueTypeGenerator.generateValueClass("FastSubVT", fields); + + MethodHandle makeFastSubVT = lookup.findStatic(fastSubVT, "makeValue", MethodType.methodType(fastSubVT, int.class, int.class, int.class, Object[].class)); + + Object[] arr = {"foo", "bar", "baz"}; + Object[] arr2 = {"foozo", "barzo", "bazzo"}; + Object valueType1 = makeFastSubVT.invoke(1, 2, 3, arr); + Object valueType2 = makeFastSubVT.invoke(1, 2, 3, arr); + Object newValueType = makeFastSubVT.invoke(3, 2, 1, arr2); + Object identityType = new String(); + Object nullPointer = null; + + Assert.assertTrue((valueType1 == valueType1), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((valueType1 == valueType2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((valueType1 == newValueType), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((valueType1 == identityType), "A substitutability (==) test on different value with identity type should always return false"); + + Assert.assertFalse((valueType1 == nullPointer), "A substitutability (==) test on different value with null pointer should always return false"); + + Assert.assertFalse((valueType1 != valueType1), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((valueType1 != valueType2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((valueType1 != newValueType), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((valueType1 != identityType), "A substitutability (!=) test on different value with identity type should always return true"); + + Assert.assertTrue((valueType1 != nullPointer), "A substitutability (!=) test on different value with null pointer should always return true"); + } + + @Test(priority=3) + static public void testACMPTestOnRecursiveValueTypes() throws Throwable { + String fields[] = {"l:J", "next:Ljava/lang/Object;", "i:I"}; + Class nodeClass = ValueTypeGenerator.generateValueClass("Node", fields); + MethodHandle makeNode = lookup.findStatic(nodeClass, "makeValue", MethodType.methodType(nodeClass, long.class, Object.class, int.class)); + + Object list1 = makeNode.invoke(3, null, 3); + Object list2 = makeNode.invoke(3, null, 3); + Object list3sameAs1 = makeNode.invoke(3, null, 3); + Object list4 = makeNode.invoke(3, null, 3); + Object list5null = makeNode.invoke(3, null, 3); + Object list6null = makeNode.invoke(3, null, 3); + Object list7obj = makeNode.invoke(3, new Object(), 3); + Object list8str = makeNode.invoke(3, "foo", 3); + Object identityType = new String(); + Object nullPointer = null; + + for (int i = 0; i < 100; i++) { + list1 = makeNode.invoke(3, list1, i); + list2 = makeNode.invoke(3, list2, i + 1); + list3sameAs1 = makeNode.invoke(3, list3sameAs1, i); + } + for (int i = 0; i < 50; i++) { + list4 = makeNode.invoke(3, list4, i); + } + + Assert.assertTrue((list1 == list1), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((list5null == list5null), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((list1 == list3sameAs1), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertTrue((list5null == list6null), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((list1 == list2), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((list1 == list4), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((list1 == list5null), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((list1 == list7obj), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((list1 == list8str), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((list7obj == list8str), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((list1 == identityType), "A substitutability (==) test on different value with identity type should always return false"); + + Assert.assertFalse((list1 == nullPointer), "A substitutability (==) test on different value with null pointer should always return false"); + + Assert.assertFalse((list1 != list1), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((list5null != list5null), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((list1 != list3sameAs1), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertFalse((list5null != list6null), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((list1 != list2), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((list1 != list4), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((list1 != list5null), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((list1 != list7obj), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((list1 != list8str), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((list7obj != list8str), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((list1 != identityType), "A substitutability (!=) test on different value with identity type should always return true"); + + Assert.assertTrue((list1 != nullPointer), "A substitutability (!=) test on different value with null pointer should always return true"); + + } + + @Test(priority=3) + static public void testACMPTestOnValueFloat() throws Throwable { + Object float1 = makeValueFloat.invoke(1.1f); + Object float2 = makeValueFloat.invoke(-1.1f); + Object float3 = makeValueFloat.invoke(12341.112341234f); + Object float4sameAs1 = makeValueFloat.invoke(1.1f); + Object nan = makeValueFloat.invoke(Float.NaN); + Object nan2 = makeValueFloat.invoke(Float.NaN); + Object positiveZero = makeValueFloat.invoke(0.0f); + Object negativeZero = makeValueFloat.invoke(-0.0f); + Object positiveInfinity = makeValueFloat.invoke(Float.POSITIVE_INFINITY); + Object negativeInfinity = makeValueFloat.invoke(Float.NEGATIVE_INFINITY); + + Assert.assertTrue((float1 == float1), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((float1 == float4sameAs1), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertTrue((nan == nan2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((float1 == float2), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 == float3), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 == nan), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 == positiveZero), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 == negativeZero), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 == positiveInfinity), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 == negativeInfinity), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((positiveInfinity == negativeInfinity), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((positiveZero == negativeZero), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((float1 != float1), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((float1 != float4sameAs1), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertFalse((nan != nan2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((float1 != float2), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((float1 != float3), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((float1 != nan), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((float1 != positiveZero), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((float1 != negativeZero), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((float1 != positiveInfinity), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((float1 != negativeInfinity), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((positiveInfinity != negativeInfinity), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((positiveZero != negativeZero), "A substitutability (!=) test on different value should always return true"); + + } + + @Test(priority=3) + static public void testACMPTestOnValueDouble() throws Throwable { + Object double1 = makeValueDouble.invoke(1.1d); + Object double2 = makeValueDouble.invoke(-1.1d); + Object double3 = makeValueDouble.invoke(12341.112341234d); + Object double4sameAs1 = makeValueDouble.invoke(1.1d); + Object nan = makeValueDouble.invoke(Double.NaN); + Object nan2 = makeValueDouble.invoke(Double.NaN); + Object positiveZero = makeValueDouble.invoke(0.0f); + Object negativeZero = makeValueDouble.invoke(-0.0f); + Object positiveInfinity = makeValueDouble.invoke(Double.POSITIVE_INFINITY); + Object negativeInfinity = makeValueDouble.invoke(Double.NEGATIVE_INFINITY); + + Assert.assertTrue((double1 == double1), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((double1 == double4sameAs1), "A substitutability (==) test on different value the same contents should always return true"); - /* + Assert.assertTrue((nan == nan2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((double1 == double2), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 == double3), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 == nan), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 == positiveZero), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 == negativeZero), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 == positiveInfinity), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 == negativeInfinity), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((positiveInfinity == negativeInfinity), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((positiveZero == negativeZero), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((double1 != double1), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((double1 != double4sameAs1), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertFalse((nan != nan2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((double1 != double2), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((double1 != double3), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((double1 != nan), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((double1 != positiveZero), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((double1 != negativeZero), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((double1 != positiveInfinity), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((double1 != negativeInfinity), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((positiveInfinity != negativeInfinity), "A substitutability (!=) test on different value should always return true"); + + Assert.assertTrue((positiveZero != negativeZero), "A substitutability (!=) test on different value should always return true"); + } + + @Test(priority=6) + static public void testACMPTestOnAssortedValues() throws Throwable { + Object assortedValueWithLongAlignment = createAssorted(makeAssortedValueWithLongAlignment, typeWithLongAlignmentFields); + Object assortedValueWithLongAlignment2 = createAssorted(makeAssortedValueWithLongAlignment, typeWithLongAlignmentFields); + Object assortedValueWithLongAlignment3 = createAssorted(makeAssortedValueWithLongAlignment, typeWithLongAlignmentFields); + assortedValueWithLongAlignment3 = checkFieldAccessMHOfAssortedType(assortedValueWithLongAlignmentGetterAndWither, assortedValueWithLongAlignment3, typeWithLongAlignmentFields, true); + + Object assortedValueWithObjectAlignment = createAssorted(makeAssortedValueWithObjectAlignment, typeWithObjectAlignmentFields); + Object assortedValueWithObjectAlignment2 = createAssorted(makeAssortedValueWithObjectAlignment, typeWithObjectAlignmentFields); + Object assortedValueWithObjectAlignment3 = createAssorted(makeAssortedValueWithObjectAlignment, typeWithObjectAlignmentFields); + assortedValueWithObjectAlignment3 = checkFieldAccessMHOfAssortedType(assortedValueWithObjectAlignmentGetterAndWither, assortedValueWithObjectAlignment3, typeWithObjectAlignmentFields, true); + + Assert.assertTrue((assortedValueWithLongAlignment == assortedValueWithLongAlignment), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((assortedValueWithObjectAlignment == assortedValueWithObjectAlignment), "A substitutability (==) test on the same value should always return true"); + + Assert.assertTrue((assortedValueWithLongAlignment == assortedValueWithLongAlignment2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertTrue((assortedValueWithObjectAlignment == assortedValueWithObjectAlignment2), "A substitutability (==) test on different value the same contents should always return true"); + + Assert.assertFalse((assortedValueWithLongAlignment == assortedValueWithLongAlignment3), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((assortedValueWithLongAlignment == assortedValueWithObjectAlignment), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((assortedValueWithObjectAlignment == assortedValueWithObjectAlignment3), "A substitutability (==) test on different value should always return false"); + + Assert.assertFalse((assortedValueWithLongAlignment != assortedValueWithLongAlignment), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((assortedValueWithObjectAlignment != assortedValueWithObjectAlignment), "A substitutability (!=) test on the same value should always return false"); + + Assert.assertFalse((assortedValueWithLongAlignment != assortedValueWithLongAlignment2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertFalse((assortedValueWithObjectAlignment != assortedValueWithObjectAlignment2), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((assortedValueWithLongAlignment != assortedValueWithLongAlignment3), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((assortedValueWithLongAlignment != assortedValueWithObjectAlignment), "A substitutability (!=) test on different value the same contents should always return false"); + + Assert.assertTrue((assortedValueWithObjectAlignment != assortedValueWithObjectAlignment3), "A substitutability (!=) test on different value the same contents should always return false"); + + } + + /* * Test monitorEnter on valueType * * class TestMonitorEnterOnValueType { @@ -1916,7 +2247,7 @@ static void initializeStaticFields(Class clazz, MethodHandle[][] getterAndSetter } } - static void checkFieldAccessMHOfAssortedType(MethodHandle[][] fieldAccessMHs, Object instance, String[] fields, + static Object checkFieldAccessMHOfAssortedType(MethodHandle[][] fieldAccessMHs, Object instance, String[] fields, boolean ifValue) throws Throwable { for (int i = 0; i < fields.length; i++) { @@ -2017,6 +2348,7 @@ static void checkFieldAccessMHOfAssortedType(MethodHandle[][] fieldAccessMHs, Ob break; } } + return instance; } static void checkFieldAccessMHOfStaticType(MethodHandle[][] fieldAccessMHs, String[] fields) diff --git a/test/functional/cmdLineTests/callsitedbgddrext/playlist.xml b/test/functional/cmdLineTests/callsitedbgddrext/playlist.xml index 2559f32df9f..65ef9b74c04 100644 --- a/test/functional/cmdLineTests/callsitedbgddrext/playlist.xml +++ b/test/functional/cmdLineTests/callsitedbgddrext/playlist.xml @@ -92,7 +92,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti -config $(Q)$(TEST_RESROOT)$(D)callsiteddrtests.xml$(Q) -plats all,$(PLATFORM),$(VARIATION) -nonZeroExitWhenError; \ ${TEST_STATUS} - ^os.zos,^arch.aarch64 + ^os.zos sanity diff --git a/test/functional/cmdLineTests/classesdbgddrext/playlist.xml b/test/functional/cmdLineTests/classesdbgddrext/playlist.xml index f032eca516a..14afc36b3af 100644 --- a/test/functional/cmdLineTests/classesdbgddrext/playlist.xml +++ b/test/functional/cmdLineTests/classesdbgddrext/playlist.xml @@ -64,7 +64,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti -xlist $(Q)$(TEST_RESROOT)$(D)dbgextddrtests_excludes.xml$(Q) -nonZeroExitWhenError; \ ${TEST_STATUS} - ^os.zos,^arch.aarch64 + ^os.zos extended diff --git a/test/functional/cmdLineTests/modularityddrtests/playlist.xml b/test/functional/cmdLineTests/modularityddrtests/playlist.xml index ee27b92be9b..f56883a2867 100644 --- a/test/functional/cmdLineTests/modularityddrtests/playlist.xml +++ b/test/functional/cmdLineTests/modularityddrtests/playlist.xml @@ -39,7 +39,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti -outputLimit 1000 -explainExcludes -nonZeroExitWhenError; \ ${TEST_STATUS} - ^os.zos,^arch.aarch64 + ^os.zos extended diff --git a/test/functional/cmdLineTests/shrcdbgddrext/playlist.xml b/test/functional/cmdLineTests/shrcdbgddrext/playlist.xml index 1fb1b81bd2b..7f39b3ec44d 100644 --- a/test/functional/cmdLineTests/shrcdbgddrext/playlist.xml +++ b/test/functional/cmdLineTests/shrcdbgddrext/playlist.xml @@ -40,7 +40,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti -config $(Q)$(TEST_RESROOT)$(D)shrcdbgextddrtests.xml$(Q) -plats all,$(PLATFORM),$(VARIATION) -nonZeroExitWhenError; \ ${TEST_STATUS} - ^os.zos,^arch.aarch64 + ^os.zos extended