@@ -46,6 +46,9 @@ static void allSlotsInBytecodesDo (J9ROMClass* romClass, J9ROMMethod* method, J9
46
46
static void allSlotsInCPShapeDescriptionDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData );
47
47
static void allSlotsInCallSiteDataDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData );
48
48
static UDATA allSlotsInMethodParametersDataDo (J9ROMClass * romClass , U_8 * cursor , J9ROMClassWalkCallbacks * callbacks , void * userData );
49
+ #if defined(J9VM_OPT_METHOD_HANDLE )
50
+ static void allSlotsInVarHandleMethodTypeLookupTableDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData );
51
+ #endif /* defined(J9VM_OPT_METHOD_HANDLE) */
49
52
static void allSlotsInStaticSplitMethodRefIndexesDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData );
50
53
static void allSlotsInSpecialSplitMethodRefIndexesDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData );
51
54
static void allSlotsInSourceDebugExtensionDo (J9ROMClass * romClass , J9SourceDebugExtension * sde , J9ROMClassWalkCallbacks * callbacks , void * userData );
@@ -55,7 +58,7 @@ static void nullSectionCallback(J9ROMClass*, void*, UDATA, const char*, void*);
55
58
static BOOLEAN defaultValidateRangeCallback (J9ROMClass * , void * , UDATA , void * );
56
59
57
60
#define SLOT_CALLBACK (romClassPtr , slotType , structure , slotName ) callbacks->slotCallback(romClassPtr, slotType, &structure->slotName, #slotName, userData)
58
- /*
61
+ /*
59
62
* Walk all slots in the J9ROMClass, calling callback for each slot.
60
63
* Identify the type of slot using one of the J9ROM_ constants defined in the header file.
61
64
* Note that NAS and UTF8 slots are treated specially, since, as invariants, they may
@@ -236,6 +239,9 @@ void allSlotsInROMClassDo(J9ROMClass* romClass,
236
239
allSlotsInConstantPoolDo (romClass , callbacks , userData );
237
240
allSlotsInCallSiteDataDo (romClass , callbacks , userData );
238
241
allSlotsInOptionalInfoDo (romClass , callbacks , userData );
242
+ #if defined(J9VM_OPT_METHOD_HANDLE )
243
+ allSlotsInVarHandleMethodTypeLookupTableDo (romClass , callbacks , userData );
244
+ #endif /* defined(J9VM_OPT_METHOD_HANDLE) */
239
245
allSlotsInStaticSplitMethodRefIndexesDo (romClass , callbacks , userData );
240
246
allSlotsInSpecialSplitMethodRefIndexesDo (romClass , callbacks , userData );
241
247
}
@@ -328,15 +334,15 @@ static J9ROMMethod* allSlotsInROMMethodDo(J9ROMClass* romClass, J9ROMMethod* met
328
334
cursor += allSlotsInAnnotationDo (romClass , (U_32 * )cursor , "methodAnnotation" , callbacks , userData );
329
335
}
330
336
331
-
337
+
332
338
if (J9ROMMETHOD_HAS_PARAMETER_ANNOTATIONS (method )) {
333
339
cursor += allSlotsInAnnotationDo (romClass , (U_32 * )cursor , "parameterAnnotations" , callbacks , userData );
334
340
}
335
341
336
342
if (J9ROMMETHOD_HAS_DEFAULT_ANNOTATION (method )) {
337
343
cursor += allSlotsInAnnotationDo (romClass , (U_32 * )cursor , "defaultAnnotation" , callbacks , userData );
338
344
}
339
-
345
+
340
346
if (J9ROMMETHOD_HAS_METHOD_TYPE_ANNOTATIONS (extendedModifiers )) {
341
347
cursor += allSlotsInAnnotationDo (romClass , (U_32 * )cursor , "methodTypeAnnotations" , callbacks , userData );
342
348
}
@@ -362,7 +368,7 @@ static J9ROMMethod* allSlotsInROMMethodDo(J9ROMClass* romClass, J9ROMMethod* met
362
368
}
363
369
364
370
if (J9ROMMETHOD_HAS_METHOD_PARAMETERS (method )) {
365
-
371
+
366
372
cursor += allSlotsInMethodParametersDataDo (romClass , (U_8 * )cursor , callbacks , userData );
367
373
}
368
374
@@ -465,7 +471,7 @@ static void allSlotsInBytecodesDo(J9ROMClass* romClass, J9ROMMethod* method, J9R
465
471
BOOLEAN rangeValid ;
466
472
467
473
/* bytecodeSizeLow already walked */
468
- length = J9_BYTECODE_SIZE_FROM_ROM_METHOD (method );
474
+ length = J9_BYTECODE_SIZE_FROM_ROM_METHOD (method );
469
475
470
476
if (length == 0 ) return ;
471
477
pc = bytecodes = J9_BYTECODE_START_FROM_ROM_METHOD (method ); /* endian safe */
@@ -497,7 +503,7 @@ static void allSlotsInBytecodesDo(J9ROMClass* romClass, J9ROMMethod* method, J9R
497
503
callbacks -> slotCallback (romClass , J9ROM_U8 , pc , "bcArg8" , userData );
498
504
pc += 1 ;
499
505
break ;
500
-
506
+
501
507
/* Single 16-bit argument */
502
508
case JBinvokeinterface2 :
503
509
callbacks -> slotCallback (romClass , J9ROM_U8 , pc , "bcArg8" , userData );
@@ -618,7 +624,7 @@ static void allSlotsInBytecodesDo(J9ROMClass* romClass, J9ROMMethod* method, J9R
618
624
pc += 4 ;
619
625
}
620
626
break ;
621
-
627
+
622
628
623
629
case JBlookupswitch :
624
630
switch ((pc - bytecodes - 1 ) % 4 ) {
@@ -823,7 +829,7 @@ static void allSlotsInRecordDo(J9ROMClass* romClass, U_32* recordPointer, J9ROMC
823
829
callbacks -> sectionCallback (romClass , recordPointer , (UDATA )cursor - (UDATA )recordPointer , "recordInfo" , userData );
824
830
}
825
831
826
- static void
832
+ static void
827
833
allSlotsInPermittedSubclassesDo (J9ROMClass * romClass , U_32 * permittedSubclassesPointer , J9ROMClassWalkCallbacks * callbacks , void * userData )
828
834
{
829
835
BOOLEAN rangeValid = FALSE;
@@ -838,7 +844,7 @@ allSlotsInPermittedSubclassesDo(J9ROMClass* romClass, U_32* permittedSubclassesP
838
844
callbacks -> slotCallback (romClass , J9ROM_U32 , cursor , "permittedSubclassesCount" , userData );
839
845
cursor += 1 ;
840
846
permittedSubclassesCount = * permittedSubclassesPointer ;
841
-
847
+
842
848
for (; permittedSubclassesCount > 0 ; permittedSubclassesCount -- ) {
843
849
rangeValid = callbacks -> validateRangeCallback (romClass , cursor , sizeof (U_32 ), userData );
844
850
if (FALSE == rangeValid ) {
@@ -902,7 +908,7 @@ allSlotsInImplicitCreationAttributeDo(J9ROMClass* romClass, U_32* implicitCreati
902
908
/*
903
909
* See ROMClassWriter::writeOptionalInfo for illustration of the layout.
904
910
*/
905
- static void
911
+ static void
906
912
allSlotsInOptionalInfoDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData )
907
913
{
908
914
U_32 * optionalInfo ;
@@ -1019,7 +1025,30 @@ allSlotsInOptionalInfoDo(J9ROMClass* romClass, J9ROMClassWalkCallbacks* callback
1019
1025
callbacks -> sectionCallback (romClass , optionalInfo , (UDATA )cursor - (UDATA )optionalInfo , "optionalInfo" , userData );
1020
1026
}
1021
1027
1022
- static void
1028
+ #if defined(J9VM_OPT_METHOD_HANDLE )
1029
+ static void
1030
+ allSlotsInVarHandleMethodTypeLookupTableDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData )
1031
+ {
1032
+ U_32 count = romClass -> varHandleMethodTypeCount ;
1033
+
1034
+ if (count > 0 ) {
1035
+ U_16 * cursor = J9ROMCLASS_VARHANDLEMETHODTYPELOOKUPTABLE (romClass );
1036
+ BOOLEAN rangeValid = callbacks -> validateRangeCallback (romClass , cursor , count * sizeof (U_16 ), userData );
1037
+
1038
+ if (rangeValid ) {
1039
+ U_32 i = 0 ;
1040
+
1041
+ callbacks -> sectionCallback (romClass , cursor , count * sizeof (U_16 ), "varHandleMethodTypeLookupTable" , userData );
1042
+ for (i = 0 ; i < count ; i ++ ) {
1043
+ callbacks -> slotCallback (romClass , J9ROM_U16 , cursor , "cpIndex" , userData );
1044
+ cursor += 1 ;
1045
+ }
1046
+ }
1047
+ }
1048
+ }
1049
+ #endif /* defined(J9VM_OPT_METHOD_HANDLE) */
1050
+
1051
+ static void
1023
1052
allSlotsInStaticSplitMethodRefIndexesDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData )
1024
1053
{
1025
1054
U_16 count = romClass -> staticSplitMethodRefCount ;
@@ -1040,7 +1069,7 @@ allSlotsInStaticSplitMethodRefIndexesDo(J9ROMClass* romClass, J9ROMClassWalkCall
1040
1069
}
1041
1070
}
1042
1071
1043
- static void
1072
+ static void
1044
1073
allSlotsInSpecialSplitMethodRefIndexesDo (J9ROMClass * romClass , J9ROMClassWalkCallbacks * callbacks , void * userData )
1045
1074
{
1046
1075
U_16 count = romClass -> specialSplitMethodRefCount ;
@@ -1441,7 +1470,7 @@ static void allSlotsInCallSiteDataDo (J9ROMClass* romClass, J9ROMClassWalkCallba
1441
1470
* U_16 argument[argumentCount];
1442
1471
* } bootStrapMethodData[romClass->bsmCount];
1443
1472
* }
1444
- *
1473
+ *
1445
1474
* Note: SRP is 32 bits
1446
1475
*/
1447
1476
BOOLEAN rangeValid ;
0 commit comments