< prev index next >

test/hotspot/jtreg/vmTestbase/nsk/jvmti/IterateThroughHeap/filter-tagged/HeapFilter.cpp

Print this page




  44 #define CLASS_TAG 4
  45 
  46 #define ENCODE_TAG(type, obj, fld) (((jlong)type)<<32 | ((jlong)obj)<<16 | (jlong)fld)
  47 #define DECODE_TYPE(tag) tag>>32
  48 #define DECODE_OBJECT(tag) ((tag>>16)&0xFFFF)
  49 #define DECODE_FIELD(tag) (tag&0xFFFF)
  50 
  51 #define TEST_OBJECTS_COUNT 2
  52 #define TAGGED_OBJECTS 1
  53 
  54 static long timeout = 0;
  55 static int filter_type = -1;
  56 
  57 // by default at least one object will be reported regardless to filter type
  58 static int expected_object_count = 1;
  59 static int reported_objects = 0;
  60 
  61 //expected values
  62 #define INT_ARRAY_LENGTH 2
  63 
  64 static jint TAGGED_STATIC_INT_VALUE = 0xC0DE01;
  65 static jint TAGGED_INT_VALUE = 0xC0DE02;
  66 static jint UNTAGGED_STATIC_INT_VALUE = 0xC0DE03;
  67 static jint UNTAGGED_INT_VALUE = 0xC0DE04;

  68 static jint TAGGED_INT_ARRAY_VALUE[] = {0xC0DE01,
  69                                                  0xC0DE01+1};
  70 static jint UNTAGGED_INT_ARRAY_VALUE[] = {0xC0DE03,
  71                                                    0xC0DE03+1};
  72 static const wchar_t *TAGGED_STRING_VALUE = L"I'm a tagged string";
  73 static const wchar_t *UNTAGGED_STRING_VALUE = L"I'm an untagged string";
  74 
  75 //kind of field
  76 #define TYPE_FIELD 1
  77 #define TYPE_ARRAY 2
  78 #define TYPE_STRING 4
  79 
  80 //field info
  81 typedef struct {
  82   char *name;
  83   char *signature;
  84   int found;
  85   int collected;
  86   int primitive;
  87   int expected;


 335 
 336     // Iterate over fields, collect info about it and tag non primitive fields.
 337     for (field = 0; field < objects_info[object].fields_count; field++) {
 338       jint modifiers;
 339       int is_static = 0;
 340       int is_primitive = 0;
 341       if (!NSK_JVMTI_VERIFY(jvmti->GetFieldName(targetClass,
 342                                                 targetFields[field],
 343                                                 &objects_info[object].fields[field].name,
 344                                                 &objects_info[object].fields[field].signature,
 345                                                 NULL)))
 346         return JNI_ERR;
 347       if (!NSK_JVMTI_VERIFY(jvmti->GetFieldModifiers(
 348               targetClass, targetFields[field], &modifiers))) {
 349         return JNI_ERR;
 350       }
 351       is_static = (modifiers & STATIC_FIELD) == STATIC_FIELD;
 352       if (is_primitive_type(objects_info[object].fields[field].signature)) {
 353         objects_info[object].fields[field].primitive = 1;
 354         is_primitive = 1;








 355       } else {
 356         jobject value;
 357         if (!NSK_JVMTI_VERIFY(jvmti->GetFieldModifiers(
 358                 targetClass, targetFields[field], &modifiers))) {
 359           return JNI_ERR;
 360         }
 361         if (is_static) {
 362           if (!NSK_VERIFY(NULL != (value = jni->GetStaticObjectField(
 363                   targetClass, targetFields[field])))) {
 364             return JNI_ERR;
 365           }
 366         } else {
 367           if (!NSK_VERIFY(NULL != (value = jni->GetObjectField(target, targetFields[field])))) {
 368             return JNI_ERR;
 369           }
 370         }
 371         if (tagged) {
 372           if (!NSK_JVMTI_VERIFY(jvmti->SetTag(value, ENCODE_TAG(FIELD_TAG,object,field)))) {
 373             return JNI_ERR;
 374           }




  44 #define CLASS_TAG 4
  45 
  46 #define ENCODE_TAG(type, obj, fld) (((jlong)type)<<32 | ((jlong)obj)<<16 | (jlong)fld)
  47 #define DECODE_TYPE(tag) tag>>32
  48 #define DECODE_OBJECT(tag) ((tag>>16)&0xFFFF)
  49 #define DECODE_FIELD(tag) (tag&0xFFFF)
  50 
  51 #define TEST_OBJECTS_COUNT 2
  52 #define TAGGED_OBJECTS 1
  53 
  54 static long timeout = 0;
  55 static int filter_type = -1;
  56 
  57 // by default at least one object will be reported regardless to filter type
  58 static int expected_object_count = 1;
  59 static int reported_objects = 0;
  60 
  61 //expected values
  62 #define INT_ARRAY_LENGTH 2
  63 
  64 static jint POISON = 0x1234;
  65 static jint TAGGED_STATIC_INT_VALUE = 0xC0DE01 + POISON;
  66 static jint TAGGED_INT_VALUE = 0xC0DE02 + POISON;
  67 static jint UNTAGGED_STATIC_INT_VALUE = 0xC0DE03 + POISON;
  68 static jint UNTAGGED_INT_VALUE = 0xC0DE04 + POISON;
  69 static jint TAGGED_INT_ARRAY_VALUE[] = {0xC0DE01,
  70                                                  0xC0DE01+1};
  71 static jint UNTAGGED_INT_ARRAY_VALUE[] = {0xC0DE03,
  72                                                    0xC0DE03+1};
  73 static const wchar_t *TAGGED_STRING_VALUE = L"I'm a tagged string";
  74 static const wchar_t *UNTAGGED_STRING_VALUE = L"I'm an untagged string";
  75 
  76 //kind of field
  77 #define TYPE_FIELD 1
  78 #define TYPE_ARRAY 2
  79 #define TYPE_STRING 4
  80 
  81 //field info
  82 typedef struct {
  83   char *name;
  84   char *signature;
  85   int found;
  86   int collected;
  87   int primitive;
  88   int expected;


 336 
 337     // Iterate over fields, collect info about it and tag non primitive fields.
 338     for (field = 0; field < objects_info[object].fields_count; field++) {
 339       jint modifiers;
 340       int is_static = 0;
 341       int is_primitive = 0;
 342       if (!NSK_JVMTI_VERIFY(jvmti->GetFieldName(targetClass,
 343                                                 targetFields[field],
 344                                                 &objects_info[object].fields[field].name,
 345                                                 &objects_info[object].fields[field].signature,
 346                                                 NULL)))
 347         return JNI_ERR;
 348       if (!NSK_JVMTI_VERIFY(jvmti->GetFieldModifiers(
 349               targetClass, targetFields[field], &modifiers))) {
 350         return JNI_ERR;
 351       }
 352       is_static = (modifiers & STATIC_FIELD) == STATIC_FIELD;
 353       if (is_primitive_type(objects_info[object].fields[field].signature)) {
 354         objects_info[object].fields[field].primitive = 1;
 355         is_primitive = 1;
 356         // Add POISON to all int fields to make the value opaque to the JIT compiler.
 357         if (is_static) {
 358           jint value = jni->GetStaticIntField(targetClass, targetFields[field]);
 359           jni->SetStaticIntField(targetClass, targetFields[field], value + POISON);
 360         } else {
 361           jint value = jni->GetIntField(target, targetFields[field]);
 362           jni->SetIntField(target, targetFields[field], value + POISON);
 363         }
 364       } else {
 365         jobject value;
 366         if (!NSK_JVMTI_VERIFY(jvmti->GetFieldModifiers(
 367                 targetClass, targetFields[field], &modifiers))) {
 368           return JNI_ERR;
 369         }
 370         if (is_static) {
 371           if (!NSK_VERIFY(NULL != (value = jni->GetStaticObjectField(
 372                   targetClass, targetFields[field])))) {
 373             return JNI_ERR;
 374           }
 375         } else {
 376           if (!NSK_VERIFY(NULL != (value = jni->GetObjectField(target, targetFields[field])))) {
 377             return JNI_ERR;
 378           }
 379         }
 380         if (tagged) {
 381           if (!NSK_JVMTI_VERIFY(jvmti->SetTag(value, ENCODE_TAG(FIELD_TAG,object,field)))) {
 382             return JNI_ERR;
 383           }


< prev index next >