From 704a781a1e6a8ff1b7b6a2290c6bebafc73b9542 Mon Sep 17 00:00:00 2001 From: Tobi Ajila Date: Wed, 22 May 2024 11:45:43 -0400 Subject: [PATCH] Add cmdline opts to toggle extendedHCR Disable HCR by default. Add option to enabled it if needed. Add warning message to indicate a redefinition of retransformation failure caused by the lack of extended HCR support. Signed-off-by: Tobi Ajila --- runtime/nls/vmut/j9vmutil.nls | 7 + runtime/oti/j9consts.h | 1 + runtime/oti/jvminit.h | 2 + runtime/oti/util_api.h | 310 +++++++++--------- runtime/util/extendedHCR.c | 4 + runtime/util/hshelp.c | 74 +++-- runtime/vm/jvminit.c | 10 + .../playlist.xml | 1 + test/functional/JavaAgentTest/playlist.xml | 16 + .../SharedCPEntryInvokerTests/playlist.xml | 1 + .../doProtectedAccessCheck.xml | 8 +- .../jvmtitests/decompilationtests.xml | 2 +- .../jvmtitests/fieldwatchtests.xml | 13 +- .../cmdLineTests/jvmtitests/jvmtitests.xml | 4 +- .../jvmtitests/jvmtitests_Java11andUp.xml | 2 +- .../jvmtitests/jvmtitests_Java21andUp.xml | 2 +- .../jvmtitests/jvmtitests_extended.xml | 2 +- .../jvmtitests/jvmtitests_hcr.xml | 6 +- .../cmdLineTests/jvmtitests/playlist.xml | 1 + 19 files changed, 263 insertions(+), 203 deletions(-) diff --git a/runtime/nls/vmut/j9vmutil.nls b/runtime/nls/vmut/j9vmutil.nls index 8c38979cca4..0472e80253a 100644 --- a/runtime/nls/vmut/j9vmutil.nls +++ b/runtime/nls/vmut/j9vmutil.nls @@ -190,3 +190,10 @@ J9NLS_VMUTIL_RECEIVERCLASS_NOT_SAME_OR_SUBTYPE_OF_CURRENTCLASS.explanation=NOTAG J9NLS_VMUTIL_RECEIVERCLASS_NOT_SAME_OR_SUBTYPE_OF_CURRENTCLASS.system_action= J9NLS_VMUTIL_RECEIVERCLASS_NOT_SAME_OR_SUBTYPE_OF_CURRENTCLASS.user_response= # END NON-TRANSLATABLE + +J9NLS_VMUTIL_OPENJ9_EXTENDED_HCR_DISABLED_WARNING=Warning: Extended HCR is disabled, enable with -XX:+EnableExtendedHCR. +# START NON-TRANSLATABLE +J9NLS_VMUTIL_OPENJ9_EXTENDED_HCR_DISABLED_WARNING.explanation=This JVM disables extended HCR by default, this may cause JVMTI failures in extended capabilites are required. +J9NLS_VMUTIL_OPENJ9_EXTENDED_HCR_DISABLED_WARNING.system_action=None +J9NLS_VMUTIL_OPENJ9_EXTENDED_HCR_DISABLED_WARNING.user_response=Add -XX:+EnableExtendedHCR commandline option to enable extended HCR +# END NON-TRANSLATABLE diff --git a/runtime/oti/j9consts.h b/runtime/oti/j9consts.h index 1ba53b8f2f1..831b0225863 100644 --- a/runtime/oti/j9consts.h +++ b/runtime/oti/j9consts.h @@ -365,6 +365,7 @@ extern "C" { #define J9_EXTENDED_RUNTIME2_ALWAYS_KEEP_JNI_IDS 0x2000000 #define J9_EXTENDED_RUNTIME2_NEVER_KEEP_JNI_IDS 0x4000000 #define J9_EXTENDED_RUNTIME2_FFI_PROTO 0x8000000 +#define J9_EXTENDED_RUNTIME2_DISABLE_EXTENDED_HCR 0x10000000 #define J9_OBJECT_HEADER_AGE_DEFAULT 0xA /* OBJECT_HEADER_AGE_DEFAULT */ #define J9_OBJECT_HEADER_SHAPE_MASK 0xE /* OBJECT_HEADER_SHAPE_MASK */ diff --git a/runtime/oti/jvminit.h b/runtime/oti/jvminit.h index 989da82fbe8..e8178c5b529 100644 --- a/runtime/oti/jvminit.h +++ b/runtime/oti/jvminit.h @@ -419,6 +419,8 @@ enum INIT_STAGE { #define VMOPT_XXNOOPENJ9COMMANDLINEENV "-XX:-OpenJ9CommandLineEnv" #define VMOPT_XXCPULOADCOMPATIBILITY "-XX:+CpuLoadCompatibility" #define VMOPT_XXNOCPULOADCOMPATIBILITY "-XX:-CpuLoadCompatibility" +#define VMOPT_XXENABLEEXTENDEDHCR "-XX:+EnableExtendedHCR" +#define VMOPT_XXDISABLEEXTENDEDHCR "-XX:-EnableExtendedHCR" #if defined(J9VM_ZOS_3164_INTEROPERABILITY) #define VMOPT_XXENABLE3164INTEROPERABILITY "-XX:+Enable3164Interoperability" diff --git a/runtime/oti/util_api.h b/runtime/oti/util_api.h index 58481cc99a9..97532c41cca 100644 --- a/runtime/oti/util_api.h +++ b/runtime/oti/util_api.h @@ -158,7 +158,7 @@ compareUTF8Length(U_8* data1, UDATA length1, void* data2, UDATA length2); /** * @brief Returns TRUE if instanceClass can be cast to castClass, FALSE otherwise. * Updates the castClassCache. DO NOT call this without VM access. -* +* * @param *instanceClass * @param *castClass * @return IDATA @@ -194,19 +194,19 @@ getDefinedArgumentFromJavaVMInitArgs(JavaVMInitArgs *vmInitArgs, const char *def /* ---------------- divhelp.c ---------------- */ /** -* @brief Helper function called by VM interpreter, using pointers to +* @brief Helper function called by VM interpreter, using pointers to * values. Calculates quotient of 2 longs. * @param[in] *a Pointer to long dividend. * @param[in] *b Pointer to long divisor. * @param[out] *c Pointer to long quotient. * @return I_32 0. -* +* */ void helperLongDivideLong(I_64 *a, I_64 *b, I_64 *c); /** -* @brief Helper function called by VM interpreter, using +* @brief Helper function called by VM interpreter, using * pointers to values. Calculates the product of * 2 longs. * @param[in] *a Pointer to long multiplicand. @@ -218,7 +218,7 @@ void helperLongMultiplyLong(I_64 *a, I_64 *b, I_64 *c); /** -* @brief Helper function called by VM interpreter, using +* @brief Helper function called by VM interpreter, using * pointers to values. Calculates the remainder when * dividing 2 longs. * @param[in] *a Pointer to long dividend. @@ -237,7 +237,7 @@ void helperLongRemainderLong(I_64 *a, I_64 *b, I_64 *c); * @param[in] a Long dividend. * @param[in] b Long divisor. * @return Resulting long quotient. -* +* */ I_64 helperCLongDivideLong(I_64 a, I_64 b); @@ -248,7 +248,7 @@ I_64 helperCLongDivideLong(I_64 a, I_64 b); * @param[in] a Long multiplicand. * @param[in] b Long multiplier. * @return Resulting long product. -* +* */ I_64 helperCLongMultiplyLong(I_64 a, I_64 b); @@ -259,7 +259,7 @@ I_64 helperCLongMultiplyLong(I_64 a, I_64 b); * @param[in] a Long dividend. * @param[in] b Long divisor. * @return Resulting long remainder. -* +* */ I_64 helperCLongRemainderLong(I_64 a, I_64 b); @@ -311,7 +311,7 @@ pushEventFrame(J9VMThread * currentThread, UDATA wantVMAccess, UDATA jniRefSlots * @param method * @return U_8 * */ -U_8 * +U_8 * fetchMethodExtendedFlagsPointer(J9Method* method); @@ -439,75 +439,75 @@ UDATA methodIsFinalInObject(UDATA nameLength, U_8* name, UDATA sigLength, U_8* s #if (defined(J9VM_INTERP_FLOAT_SUPPORT)) /* File Level Build Flags */ /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts a double precision number to a * floating point value. * @param[in] *src Pointer to double value to be converted to floating point. * @param[out] *dst Pointer to the resulting floating point value. -* @return Void. -* +* @return Void. +* */ void helperConvertDoubleToFloat(jdouble *src, jfloat *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts a double precision number to an integer value. * @param[in] *src Pointer to double value to be converted to integer. * @param[out] *dst Pointer to the resulting integer value. -* @return Void. -* +* @return Void. +* */ void helperConvertDoubleToInteger(jdouble *src, I_32 *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts a double precision number to long value. * @param[in] *src Pointer to double value to be converted to long. * @param[out] *dst Pointer to the resulting long value. -* @return Void. -* +* @return Void. +* */ void helperConvertDoubleToLong(jdouble *src, I_64 *dst); /** -* @brief Helper function called by VM interpreter, using pointers -* to values. Converts floating point number to a double +* @brief Helper function called by VM interpreter, using pointers +* to values. Converts floating point number to a double * precision value. * @param[in] *src Pointer to floating point value to be converted to double. * @param[out] *dst Pointer to the resulting double value. -* @return Void. -* +* @return Void. +* */ void helperConvertFloatToDouble(jfloat *src, jdouble *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts floating point number to an integer value. * @param[in] *src Pointer to floating point value to be converted to integer. * @param[out] *dst Pointer to the resulting integer value. -* @return Void. -* +* @return Void. +* */ void helperConvertFloatToInteger(jfloat *src, I_32 *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts floating point number to long value. * @param[in] *src Pointer to floating point value to be converted to long. * @param[out] *dst Pointer to the resulting long value. -* @return Void. -* +* @return Void. +* */ void helperConvertFloatToLong(jfloat *src, I_64 *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts an integer number to double. * @param[in] *src Pointer to integer value to be converted to double. * @param[out] *dst Pointer to the resulting double value. @@ -518,7 +518,7 @@ void helperConvertIntegerToDouble(I_32 *src, jdouble *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts an integer number to floating point. * @param[in] *src Pointer to integer value to be converted to floating point. * @param[out] *dst Pointer to the resulting floating point value. @@ -529,7 +529,7 @@ void helperConvertIntegerToFloat(I_32 *src, jfloat *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts a long number to double precision. * @param[in] *src Pointer to long value to be converted to double. * @param[out] *dst Pointer to the resulting double value. @@ -540,7 +540,7 @@ void helperConvertLongToDouble(I_64 *src, jdouble *dst); /** -* @brief Helper function called by VM interpreter, using pointers +* @brief Helper function called by VM interpreter, using pointers * to values. Converts a long number to floating point. * @param[in] *src Pointer to long value to be converted to floating point. * @param[out] *dst Pointer to the resulting floating point value. @@ -553,21 +553,21 @@ void helperConvertLongToFloat(I_64 *src, jfloat *dst); /* ---------------- fltconv.c C-helpers---------------- */ /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a double number, -* converts it to floating point and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a double number, +* converts it to floating point and returns the * floating point value. * @param[in] src Double number to be converted to floating point. * @return Resulting floating point value. -* +* */ jfloat helperCConvertDoubleToFloat(jdouble src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a double number, -* converts it to an integer and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a double number, +* converts it to an integer and returns the * integer value. * @param[in] src Double number to be converted to an integer. * @return Resulting integer value. @@ -577,9 +577,9 @@ I_32 helperCConvertDoubleToInteger(jdouble src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a double number, -* converts it to a long and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a double number, +* converts it to a long and returns the * long value. * @param[in] src Double number to be converted to a long. * @return Resulting long value. @@ -589,9 +589,9 @@ I_64 helperCConvertDoubleToLong(jdouble src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a floating point number, -* converts it to a double and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a floating point number, +* converts it to a double and returns the * double value. * @param[in] src Floating point number to be converted to a double. * @return Resulting double value. @@ -601,9 +601,9 @@ jdouble helperCConvertFloatToDouble(jfloat src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a floating point number, -* converts it to an integer and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a floating point number, +* converts it to an integer and returns the * integer value. * @param[in] src Floating point number to be converted to an integer. * @return Resulting integer value. @@ -612,21 +612,21 @@ jdouble helperCConvertFloatToDouble(jfloat src); I_32 helperCConvertFloatToInteger(jfloat src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given floating point number, +* @brief Helper function called by JIT, using standard +* C-calling convention. Given floating point number, * converts it to long and returns the long value. * @param[in] a Floating point number to be converted to long. * @return Resulting long value. -* +* */ I_64 helperCConvertFloatToLong(jfloat src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a floating point number, -* converts it to a double and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a floating point number, +* converts it to a double and returns the * double value. * @param[in] src Floating point number to be converted to a double. * @return Resulting double value. @@ -636,9 +636,9 @@ jdouble helperCConvertIntegerToDouble(I_32 src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given an integer number, -* converts it to floating point and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given an integer number, +* converts it to floating point and returns the * floating point value. * @param[in] src Integer number to be converted to floating point. * @return Resulting floating point value. @@ -648,9 +648,9 @@ jfloat helperCConvertIntegerToFloat(I_32 src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a floating point number, -* converts it to a double and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a floating point number, +* converts it to a double and returns the * double value. * @param[in] src Floating point number to be converted to a double. * @return Resulting double value. @@ -660,9 +660,9 @@ jdouble helperCConvertLongToDouble(I_64 src); /** -* @brief Helper function called by JIT, using standard -* C-calling convention. Given a long number, -* converts it to floating point and returns the +* @brief Helper function called by JIT, using standard +* C-calling convention. Given a long number, +* converts it to floating point and returns the * floating point value. * @param[in] src The long number to be converted to floating point. * @return Resulting floating point value. @@ -817,7 +817,7 @@ void subDF(float f1, float f2, float *rp); #if (defined(J9VM_INTERP_FLOAT_SUPPORT)) /* File Level Build Flags */ /** -* @brief Helper function called by VM interpreter, using +* @brief Helper function called by VM interpreter, using * pointers to values. Given 2 pointers to double values, * returns flag indicating how the values compare. * @param[in] *a Pointer to double value. @@ -826,13 +826,13 @@ void subDF(float f1, float f2, float *rp); * 1 if a>b * -1 if ab * -1 if ab * -1 if ab * -1 if aextendedRuntimeFlags2, J9_EXTENDED_RUNTIME2_DISABLE_EXTENDED_HCR)) { + return FALSE; + } + /* If -Xfuture is specified, adhere strictly to the specification */ if (vm->runtimeFlags & J9_RUNTIME_XFUTURE) { diff --git a/runtime/util/hshelp.c b/runtime/util/hshelp.c index 09c4757674c..512beda38af 100644 --- a/runtime/util/hshelp.c +++ b/runtime/util/hshelp.c @@ -29,6 +29,7 @@ #include "util_api.h" #include "jni.h" #include "j9comp.h" +#include "j9vmutilnls.h" #include "vmaccess.h" #include "j9consts.h" #include "rommeth.h" @@ -102,6 +103,7 @@ static void jitEventAddMethod(J9VMThread * currentThread, J9JVMTIHCRJitEventData static void jitEventAddClass(J9VMThread * currentThread, J9JVMTIHCRJitEventData * eventData, J9Class * originalRAMClass, J9Class * replacementRAMClass); #endif static void swapClassesForFastHCR(J9Class *originalClass, J9Class *newClass); +static void emitExtendedHCRWarning(J9VMThread *currentThread); #undef J9HSHELP_DEBUG_SANITY_CHECK #define J9HSHELP_DEBUG 1 @@ -390,7 +392,7 @@ fixJNIMethodID(J9VMThread *currentThread, J9Method *oldMethod, J9Method *newMeth void **methodIDs = NULL; J9Method *equivalentMethod = NULL; BOOLEAN found = FALSE; - + currentClass = currentClass->replacedClass; methodIDs = currentClass->jniIDs; @@ -493,13 +495,13 @@ areSingleSlotConstantRefsIdentical(J9ROMConstantPoolItem * romCP1, U_32 index1, #define CALL_SITE_HEADER_OFFSET 2 static UDATA -isMethodHandleAField(UDATA cpType) +isMethodHandleAField(UDATA cpType) { return (cpType == MH_REF_GETFIELD) || (cpType == MH_REF_GETSTATIC) || (cpType == MH_REF_PUTSTATIC) || (cpType == MH_REF_PUTFIELD); } static U_16* -findBSMDataAtIndex(U_16* bsmData, U_16 bsmIndex) +findBSMDataAtIndex(U_16* bsmData, U_16 bsmIndex) { U_16 i = 0; for (i = 0; i < bsmIndex; i++) { @@ -510,7 +512,7 @@ findBSMDataAtIndex(U_16* bsmData, U_16 bsmIndex) } static U_32 -iterateToNextArgument(U_32 sigIndex, U_32 sigLength, U_8* sigData) +iterateToNextArgument(U_32 sigIndex, U_32 sigLength, U_8* sigData) { if (sigIndex >= sigLength) return sigIndex; @@ -526,10 +528,10 @@ iterateToNextArgument(U_32 sigIndex, U_32 sigLength, U_8* sigData) } /** - * Verify callsite equivalence. - * + * Verify callsite equivalence. + * * Structure of CallSiteData structure in ROM class (also see romclasswalk.c): - * + * * romClass->callSiteData : { * SRP callSiteNAS[romClass->callSiteCount]; // structures describing the resolved callsite. Note: SRP is 32 bits * U_16 callSiteBSMIndex[romClass->callSiteCount]; // map from callSiteIndex value to bootStrapMethodData index @@ -539,7 +541,7 @@ iterateToNextArgument(U_32 sigIndex, U_32 sigLength, U_8* sigData) * U_16 argument[argumentCount]; // The additional BSM arguments, these are constant pool indices. * } bootStrapMethodData[romClass->bsmCount]; * } - * + * */ static UDATA areCallSiteDataMethodsEquivalent(J9ROMClass* romClass1, UDATA callSiteIndex1, J9ROMClass* romClass2, UDATA callSiteIndex2) @@ -676,7 +678,7 @@ areDoubleSlotConstantRefsIdentical(J9ROMConstantPoolItem * romCP1, U_32 index1, /** * Compares two methods bytecode by bytecode to determine equivalence. - * + * * @param method1 first method to compare * @param romClass1 ROM class associated with method1 * @param method2 second method to compare @@ -702,7 +704,7 @@ areMethodsEquivalent(J9ROMMethod * method1, J9ROMClass * romClass1, J9ROMMethod * @return true if equivalent, false otherwise */ static UDATA -areMethodsEquivalentPropagateCallSites(J9ROMMethod * method1, J9Class *ramClass1, J9ROMMethod * method2, J9Class *ramClass2) +areMethodsEquivalentPropagateCallSites(J9ROMMethod * method1, J9Class *ramClass1, J9ROMMethod * method2, J9Class *ramClass2) { return areMethodsEquivalentSub(method1, ramClass1->romClass, ramClass1, method2, ramClass2->romClass, ramClass2); } @@ -712,7 +714,7 @@ areMethodsEquivalentPropagateCallSites(J9ROMMethod * method1, J9Class *ramClass1 * dynamic callsites are determined to be equivalent and RAM classes are not null, resolved * callsites will be propagated from ramClass1 to ramClass2. It is assumed that callsites will * be propagated from 1 (original) to 2 (new). - * + * * @param method1 first method to compare * @param romClass1 ROM class associated with method1 * @param ramClass1 RAM class associated with method1, must be provided to propagate callsites @@ -989,9 +991,9 @@ fixSubclassHierarchy(J9VMThread * currentThread, J9HashTable * classPairs) } superclass = GET_SUPERCLASS(replacementClass); - + /* Find the correct superclass. If the superclass of replacementClass - * was replaced itself, make sure we use the new superclass + * was replaced itself, make sure we use the new superclass */ exemplar.originalRAMClass = superclass; result = hashTableFind(classPairs, &exemplar); @@ -3146,6 +3148,8 @@ verifyFieldsAreSame(J9VMThread * currentThread, UDATA fieldType, J9ROMClass * or if (extensionsEnabled) { *extensionError = rc; rc = JVMTI_ERROR_NONE; + } else { + emitExtendedHCRWarning(currentThread); } } @@ -3252,6 +3256,7 @@ verifyMethodsAreSame(J9VMThread * currentThread, J9JVMTIClassPair * classPair, U rc = JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED; if (extensionsEnabled == 0) { /* In non-extended mode, this is really an error and we should bail out */ + emitExtendedHCRWarning(currentThread); goto done; } } @@ -3260,6 +3265,7 @@ verifyMethodsAreSame(J9VMThread * currentThread, J9JVMTIClassPair * classPair, U rc = JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED; if (extensionsEnabled == 0) { /* In non-extended mode, this is really an error and we should bail out */ + emitExtendedHCRWarning(currentThread); goto done; } } @@ -3341,6 +3347,7 @@ verifyMethodsAreSame(J9VMThread * currentThread, J9JVMTIClassPair * classPair, U /* If extensions are not enabled, treat any schema change as a real error */ if (extensionsEnabled == 0) { + emitExtendedHCRWarning(currentThread); return rc; } @@ -3360,7 +3367,7 @@ verifyRecordAttributesAreSame(J9ROMClass *originalROMClass, J9ROMClass *replacem { jvmtiError rc = JVMTI_ERROR_NONE; - /* Since retranformation is not allowed to change inheritance there's no need to consider + /* Since retranformation is not allowed to change inheritance there's no need to consider * one class being a record and one not. */ if (J9ROMCLASS_IS_RECORD(originalROMClass) && J9ROMCLASS_IS_RECORD(replacementROMClass)) { U_32 originalNumberOfRecords = getNumberOfRecordComponents(originalROMClass); @@ -3373,15 +3380,15 @@ verifyRecordAttributesAreSame(J9ROMClass *originalROMClass, J9ROMClass *replacem U_32 i = 0; /* Compare record components in order. For two records to be the same their record components - * must be in the same order. According to the spec: "Each component of the record must have - * exactly one corresponding entry in the + * must be in the same order. According to the spec: "Each component of the record must have + * exactly one corresponding entry in the * components array, in the order in which the components are declared." */ originalRecordComponent = recordComponentStartDo(originalROMClass); replacementRecordComponent = recordComponentStartDo(replacementROMClass); for (; i < originalNumberOfRecords; i++) { /* verify name and signature */ - if (!NAME_AND_SIG_IDENTICAL(originalRecordComponent, replacementRecordComponent, + if (!NAME_AND_SIG_IDENTICAL(originalRecordComponent, replacementRecordComponent, J9ROMRECORDCOMPONENTSHAPE_NAME, J9ROMRECORDCOMPONENTSHAPE_SIGNATURE) ) { rc = JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_ATTRIBUTE_CHANGED; @@ -3416,7 +3423,7 @@ verifyPermittedSubclassAttributeContentsMatch(J9ROMClass *originalROMClass, J9RO U_32 j = 0; BOOLEAN foundMatchingSubclass = FALSE; J9UTF8* originalSubclassNameUTF = permittedSubclassesNameAtIndex(originalPermittedSubclassesCountPtr, i); - + /* Find matching subclass name in replacement ROM class. The permitted subclasses are not required to be in the same order * as the original class. Assume the replacement subclass is in the same slot as original to try to improve speed. */ @@ -3474,10 +3481,10 @@ verifyClassesAreCompatible(J9VMThread * currentThread, jint class_count, J9JVMTI if (NULL == originalSuperclassName) { if (NULL != replacementSuperclassName) { - return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED; + return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED; } } else if (NULL == replacementSuperclassName) { - return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED; + return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED; } else if (!utfsAreIdentical(originalSuperclassName, replacementSuperclassName)) { return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED; } @@ -3488,7 +3495,7 @@ verifyClassesAreCompatible(J9VMThread * currentThread, jint class_count, J9JVMTI return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED; } - /* + /* * cannot add or remove a finalizer. If (FINALIZE_NEEDED || HAS_EMPTY_FINALIZE) has changed between * the original and new ROM class then the shape of the class will have to change. This can occur * if a finalizer has been added or removed. @@ -3503,9 +3510,9 @@ verifyClassesAreCompatible(J9VMThread * currentThread, jint class_count, J9JVMTI } } - /* - * cannot modify java.lang.Object to have a non-empty finalizer, java.lang.Object has a null - * for the superclass name + /* + * cannot modify java.lang.Object to have a non-empty finalizer, java.lang.Object has a null + * for the superclass name */ if (J9ROMCLASS_FINALIZE_NEEDED(originalROMClass) != J9ROMCLASS_FINALIZE_NEEDED(replacementROMClass)){ if (NULL == J9ROMCLASS_SUPERCLASSNAME(originalROMClass)){ @@ -3701,8 +3708,8 @@ reloadROMClasses(J9VMThread * currentThread, jint class_count, const jvmtiClassD } else if (J9_ARE_ALL_BITS_SET(originalRAMClass->classFlags, J9ClassIsAnonymous)) { options = options | J9_FINDCLASS_FLAG_ANON; loadData.classLoader = vm->anonClassLoader; - } - + } + /* Create the new ROM class */ loadData.classBeingRedefined = originalRAMClass; @@ -3824,7 +3831,7 @@ verifyNewClasses(J9VMThread * currentThread, jint class_count, J9JVMTIClassPair } } } - + verifyData->redefinedClasses = NULL; verifyData->redefinedClassesCount = 0; verifyData->vmStruct = NULL; @@ -4025,7 +4032,7 @@ addMethodEquivalence(J9VMThread * currentThread, J9Method * oldMethod, J9Method { J9JVMTIMethodEquivalence newEquivalence = {0}; jvmtiError rc = JVMTI_ERROR_NONE; - + /* Create the equivalence hash table if it does not already exist */ if (NULL == *methodEquivalences) { @@ -4067,7 +4074,7 @@ getMethodEquivalence(J9VMThread * currentThread, J9Method * method, J9HashTable { J9JVMTIMethodEquivalence* equivalence; J9JVMTIMethodEquivalence find = {0}; - + find.oldMethod = method; if (NULL != *methodEquivalences) { @@ -4221,4 +4228,13 @@ jitClassRedefineEvent(J9VMThread * currentThread, J9JVMTIHCRJitEventData * jitEv } } +static void +emitExtendedHCRWarning(J9VMThread *currentThread) +{ + if (J9_ARE_ALL_BITS_SET(currentThread->javaVM->extendedRuntimeFlags2, J9_EXTENDED_RUNTIME2_DISABLE_EXTENDED_HCR)) { + PORT_ACCESS_FROM_VMC(currentThread); + j9nls_printf(PORTLIB, J9NLS_WARNING, J9NLS_VMUTIL_OPENJ9_EXTENDED_HCR_DISABLED_WARNING); + } +} + #endif /* J9VM_INTERP_HOT_CODE_REPLACEMENT */ /* End File Level Build Flags */ diff --git a/runtime/vm/jvminit.c b/runtime/vm/jvminit.c index 1c1783539a7..ff2be1e1500 100644 --- a/runtime/vm/jvminit.c +++ b/runtime/vm/jvminit.c @@ -3708,6 +3708,7 @@ processVMArgsFromFirstToLast(J9JavaVM * vm) vm->extendedRuntimeFlags |= (UDATA)J9_EXTENDED_RUNTIME_CLASSLOADER_LOCKING_ENABLED | J9_EXTENDED_RUNTIME_REDUCE_CPU_MONITOR_OVERHEAD; /* enabled by default */ vm->extendedRuntimeFlags |= (UDATA)J9_EXTENDED_RUNTIME_ENABLE_CPU_MONITOR; /* Cpu monitoring is enabled by default */ vm->extendedRuntimeFlags |= (UDATA)J9_EXTENDED_RUNTIME_ALLOW_CONTENDED_FIELDS; /* Allow contended fields on bootstrap classes */ + vm->extendedRuntimeFlags2 |= J9_EXTENDED_RUNTIME2_DISABLE_EXTENDED_HCR; /* disable extended HCR by default */ if (J2SE_VERSION(vm) >= J2SE_V11) { vm->extendedRuntimeFlags |= (UDATA)J9_EXTENDED_RUNTIME_RESTRICT_IFA; /* Enable zAAP switching for Registered Natives and JVMTI callbacks by default in Java 9 and later. */ } @@ -4222,6 +4223,15 @@ processVMArgsFromFirstToLast(J9JavaVM * vm) vm->extendedRuntimeFlags2 |= J9_EXTENDED_RUNTIME2_CPU_LOAD_COMPATIBILITY; } } + { + IDATA enableExtendedHCR = FIND_AND_CONSUME_VMARG(EXACT_MATCH, VMOPT_XXENABLEEXTENDEDHCR, NULL); + IDATA disableExtendedHCR = FIND_AND_CONSUME_VMARG(EXACT_MATCH, VMOPT_XXDISABLEEXTENDEDHCR, NULL); + if (enableExtendedHCR > disableExtendedHCR) { + vm->extendedRuntimeFlags2 &= ~J9_EXTENDED_RUNTIME2_DISABLE_EXTENDED_HCR; + } else if (enableExtendedHCR < disableExtendedHCR) { + vm->extendedRuntimeFlags2 |= J9_EXTENDED_RUNTIME2_DISABLE_EXTENDED_HCR; + } + } #if defined(J9VM_OPT_JFR) { diff --git a/test/functional/IllegalAccessError_for_protected_method/playlist.xml b/test/functional/IllegalAccessError_for_protected_method/playlist.xml index 15a37267233..950df5a2159 100644 --- a/test/functional/IllegalAccessError_for_protected_method/playlist.xml +++ b/test/functional/IllegalAccessError_for_protected_method/playlist.xml @@ -24,6 +24,7 @@ IllegalAccessProtectedMethodTest $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)IllegalAccessProtectedMethod.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(P)$(TEST_RESROOT)$(D)IllegalAccessProtectedMethod.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) \ diff --git a/test/functional/JavaAgentTest/playlist.xml b/test/functional/JavaAgentTest/playlist.xml index 3b0847a17ce..c85a087c311 100644 --- a/test/functional/JavaAgentTest/playlist.xml +++ b/test/functional/JavaAgentTest/playlist.xml @@ -29,6 +29,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ @@ -58,6 +59,7 @@ Mode100 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ @@ -86,6 +88,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ @@ -116,6 +119,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED \ @@ -146,6 +150,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED \ @@ -181,6 +186,7 @@ Mode109 $(JAVA_COMMAND) $(JVM_OPTIONS) -Xgc:scvTenureAge=14,scvNoAdaptiveTenure \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED --add-exports=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED --add-exports=java.base/com.ibm.oti.vm=ALL-UNNAMED \ @@ -216,6 +222,7 @@ Mode550 $(JAVA_COMMAND) $(JVM_OPTIONS) -Xcheck:gc:all:all:abort \ + -XX:+EnableExtendedHCR \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-exports=java.base/jdk.internal.org.objectweb.asm.commons=ALL-UNNAMED --add-exports=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED --add-exports=java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED --add-exports=java.base/com.ibm.oti.vm=ALL-UNNAMED \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ @@ -252,6 +259,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames Cmvc196982 \ @@ -279,6 +287,7 @@ Mode100 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames RefreshGCCache_NoBCI_Test \ @@ -305,6 +314,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames RefreshGCCache_NoBCI_Test \ @@ -332,6 +342,7 @@ Mode100 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames RefreshGCCache_FastHCR_Test \ @@ -358,6 +369,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames RefreshGCCache_FastHCR_Test \ @@ -384,6 +396,7 @@ Mode100 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames RefreshGCCache_ExtendedHCR_Test \ @@ -410,6 +423,7 @@ Mode107 $(JAVA_COMMAND) $(JVM_OPTIONS) \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames RefreshGCCache_ExtendedHCR_Test \ @@ -436,6 +450,7 @@ Mode109 $(JAVA_COMMAND) $(JVM_OPTIONS) -Xgc:scvTenureAge=14,scvNoAdaptiveTenure \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames GCRetransformTest \ @@ -462,6 +477,7 @@ Mode550 $(JAVA_COMMAND) $(JVM_OPTIONS) -Xcheck:gc:all:all:abort \ + -XX:+EnableExtendedHCR \ -javaagent:$(Q)$(TEST_RESROOT)$(D)javaagenttest.jar$(Q) \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(LIB_DIR)$(D)asm-all.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) -testnames GCRetransformTest \ diff --git a/test/functional/SharedCPEntryInvokerTests/playlist.xml b/test/functional/SharedCPEntryInvokerTests/playlist.xml index df758abc95c..0ae4032d7fd 100644 --- a/test/functional/SharedCPEntryInvokerTests/playlist.xml +++ b/test/functional/SharedCPEntryInvokerTests/playlist.xml @@ -30,6 +30,7 @@ $(ADD_JVM_LIB_DIR_TO_LIBPATH) $(JAVA_COMMAND) $(JVM_OPTIONS) \ -agentlib:jvmtitest=test:rc001 \ + -XX:+EnableExtendedHCR \ -cp $(Q)$(RESOURCES_DIR)$(P)$(TESTNG)$(P)$(TEST_RESROOT)$(D)SharedCPEntryInvokerTests.jar$(P)$(LIB_DIR)$(D)asm-all.jar$(P)$(LIB_DIR)$(D)commons-cli.jar$(P)$(LIB_DIR)$(D)javassist.jar$(Q) \ org.testng.TestNG -d $(REPORTDIR) $(Q)$(TEST_RESROOT)$(D)testng.xml$(Q) \ -testnames SharedCPEntryInvokerTests \ diff --git a/test/functional/cmdLineTests/doProtectedAccessCheck/doProtectedAccessCheck.xml b/test/functional/cmdLineTests/doProtectedAccessCheck/doProtectedAccessCheck.xml index 1a07419a604..5b3f769146d 100644 --- a/test/functional/cmdLineTests/doProtectedAccessCheck/doProtectedAccessCheck.xml +++ b/test/functional/cmdLineTests/doProtectedAccessCheck/doProtectedAccessCheck.xml @@ -26,18 +26,18 @@ - + - $EXE$ -Xverify:doProtectedAccessCheck $JAR$ + $EXE$ -XX:+EnableExtendedHCR -Xverify:doProtectedAccessCheck $JAR$ java.lang.VerifyError retransformed A Unhandled Exception Exception: Processing dump event - + - $EXE$ $JAR$ + $EXE$ -XX:+EnableExtendedHCR $JAR$ retransformed A original A Unhandled Exception diff --git a/test/functional/cmdLineTests/jvmtitests/decompilationtests.xml b/test/functional/cmdLineTests/jvmtitests/decompilationtests.xml index 8c6ac61fa90..743b366135e 100644 --- a/test/functional/cmdLineTests/jvmtitests/decompilationtests.xml +++ b/test/functional/cmdLineTests/jvmtitests/decompilationtests.xml @@ -25,7 +25,7 @@ - + diff --git a/test/functional/cmdLineTests/jvmtitests/fieldwatchtests.xml b/test/functional/cmdLineTests/jvmtitests/fieldwatchtests.xml index b2531cbb315..2f43eba696a 100644 --- a/test/functional/cmdLineTests/jvmtitests/fieldwatchtests.xml +++ b/test/functional/cmdLineTests/jvmtitests/fieldwatchtests.xml @@ -26,38 +26,39 @@ + - $EXE$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,inhibitRecompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=0,traceFull,traceCG,log=unresolvedTrace.log) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ + $EXE$ $JVM_OPTS$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,inhibitRecompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=0,traceFull,traceCG,log=unresolvedTrace.log) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ - $EXE$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,inhibitRecompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=1,traceFull,traceCG,log=resolvedTrace.log) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ + $EXE$ $JVM_OPTS$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,inhibitRecompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=1,traceFull,traceCG,log=resolvedTrace.log) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ - $EXE$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=2,traceFull,traceCG,log=resolvedTrace.log) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ + $EXE$ $JVM_OPTS$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=2,traceFull,traceCG,log=resolvedTrace.log) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ - $EXE$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=2) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ + $EXE$ $JVM_OPTS$ -XX:+JITInlineWatches -Xjit:disableAsyncCompilation,dontInline={*jitme*},disableSuffixLogs,{*jitme*}(count=2) $AGENTLIB$=test:fw001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ - $EXE$ $AGENTLIB$=test:fw001 -XX:+JITInlineWatches -cp $Q$$JAR$$Q$ $TESTRUNNER$ + $EXE$ $JVM_OPTS$ $AGENTLIB$=test:fw001 -XX:+JITInlineWatches -cp $Q$$JAR$$Q$ $TESTRUNNER$ - $EXE$ $AGENTLIB$=test:fw001 -Xint -cp $Q$$JAR$$Q$ $TESTRUNNER$ + $EXE$ $JVM_OPTS$ $AGENTLIB$=test:fw001 -Xint -cp $Q$$JAR$$Q$ $TESTRUNNER$ diff --git a/test/functional/cmdLineTests/jvmtitests/jvmtitests.xml b/test/functional/cmdLineTests/jvmtitests/jvmtitests.xml index 6cddc41c950..68d72e42daa 100644 --- a/test/functional/cmdLineTests/jvmtitests/jvmtitests.xml +++ b/test/functional/cmdLineTests/jvmtitests/jvmtitests.xml @@ -32,7 +32,7 @@ --> - + @@ -348,7 +348,7 @@ $EXE$ $JVM_OPTS$ $AGENTLIB$=test:rbc001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ - + $EXE$ $JVM_OPTS$ $AGENTLIB$=test:nmr001 -cp $Q$$JAR$$Q$ $TESTRUNNER$ diff --git a/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java11andUp.xml b/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java11andUp.xml index 6db5424eb3f..078e62e254c 100644 --- a/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java11andUp.xml +++ b/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java11andUp.xml @@ -32,7 +32,7 @@ --> - + diff --git a/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java21andUp.xml b/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java21andUp.xml index 80b88c552cd..3a62f539926 100644 --- a/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java21andUp.xml +++ b/test/functional/cmdLineTests/jvmtitests/jvmtitests_Java21andUp.xml @@ -32,7 +32,7 @@ --> - + diff --git a/test/functional/cmdLineTests/jvmtitests/jvmtitests_extended.xml b/test/functional/cmdLineTests/jvmtitests/jvmtitests_extended.xml index 7ea6c74e58e..c46a850b98f 100644 --- a/test/functional/cmdLineTests/jvmtitests/jvmtitests_extended.xml +++ b/test/functional/cmdLineTests/jvmtitests/jvmtitests_extended.xml @@ -29,7 +29,7 @@ $TESTRUNNER$ testid=[TESTID] --> - + diff --git a/test/functional/cmdLineTests/jvmtitests/jvmtitests_hcr.xml b/test/functional/cmdLineTests/jvmtitests/jvmtitests_hcr.xml index 68c29fae333..028d51daa0b 100644 --- a/test/functional/cmdLineTests/jvmtitests/jvmtitests_hcr.xml +++ b/test/functional/cmdLineTests/jvmtitests/jvmtitests_hcr.xml @@ -25,7 +25,7 @@ - + @@ -132,7 +132,7 @@ $EXE$ $JVM_OPTS$ $AGENTLIB$=test:rc019b -cp $Q$$JAR$$Q$ $TESTRUNNER$ - + $EXE$ $JVM_OPTS$ $AGENTLIB$=test:rc020 -cp $Q$$JAR$$Q$ $TESTRUNNER$ @@ -147,7 +147,7 @@ $EXE$ $JVM_OPTS$ $EXTRA_Add_OPEN_OPTION$ $AGENTLIB$=test:rtc001 -Dsun.reflect.noInflation=true -cp $Q$$JAR$$Q$ $TESTRUNNER$ - + $EXE$ $JVM_OPTS$ $EXTRA_Add_OPEN_OPTION$ $AGENTLIB$=test:rtc002 -Dsun.reflect.noInflation=true -cp $Q$$JAR$$Q$ $TESTRUNNER$ diff --git a/test/functional/cmdLineTests/jvmtitests/playlist.xml b/test/functional/cmdLineTests/jvmtitests/playlist.xml index f5434c9699d..c3838484af2 100644 --- a/test/functional/cmdLineTests/jvmtitests/playlist.xml +++ b/test/functional/cmdLineTests/jvmtitests/playlist.xml @@ -437,6 +437,7 @@ -DTEST_ROOT=$(Q)$(TEST_RESROOT)$(Q) \ -DJAR=$(Q)$(TEST_RESROOT)$(D)jvmtitest.jar$(Q) \ -DEXE=$(SQ)$(JAVA_COMMAND) $(JVM_OPTIONS) -Xdump $(SQ) \ + -XX:+EnableExtendedHCR \ -DMODE_HINTS=$(Q)$(MODE_HINTS)$(Q) \ -jar $(CMDLINETESTER_JAR) \ -config $(Q)$(TEST_RESROOT)$(D)fieldwatchtests.xml$(Q) \