src/share/vm/prims/jvmtiTagMap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7093328 Sdiff src/share/vm/prims

src/share/vm/prims/jvmtiTagMap.cpp

Print this page
rev 3579 : 7093328: JVMTI: jvmtiPrimitiveFieldCallback always report 0's for static primitives
Reviewed-by: duke


1145     return 0;
1146   }
1147 
1148   // get the field map
1149   ClassFieldMap* field_map = ClassFieldMap::create_map_of_static_fields(k);
1150 
1151   // invoke the callback for each static primitive field
1152   for (int i=0; i<field_map->field_count(); i++) {
1153     ClassFieldDescriptor* field = field_map->field_at(i);
1154 
1155     // ignore non-primitive fields
1156     char type = field->field_type();
1157     if (!is_primitive_field_type(type)) {
1158       continue;
1159     }
1160     // one-to-one mapping
1161     jvmtiPrimitiveType value_type = (jvmtiPrimitiveType)type;
1162 
1163     // get offset and field value
1164     int offset = field->field_offset();
1165     address addr = (address)k + offset;
1166     jvalue value;
1167     copy_to_jvalue(&value, addr, value_type);
1168 
1169     // field index
1170     reference_info.field.index = field->field_index();
1171 
1172     // invoke the callback
1173     jint res = (*cb)(JVMTI_HEAP_REFERENCE_STATIC_FIELD,
1174                      &reference_info,
1175                      wrapper->klass_tag(),
1176                      wrapper->obj_tag_p(),
1177                      value,
1178                      value_type,
1179                      user_data);
1180     if (res & JVMTI_VISIT_ABORT) {
1181       delete field_map;
1182       return res;
1183     }
1184   }
1185 




1145     return 0;
1146   }
1147 
1148   // get the field map
1149   ClassFieldMap* field_map = ClassFieldMap::create_map_of_static_fields(k);
1150 
1151   // invoke the callback for each static primitive field
1152   for (int i=0; i<field_map->field_count(); i++) {
1153     ClassFieldDescriptor* field = field_map->field_at(i);
1154 
1155     // ignore non-primitive fields
1156     char type = field->field_type();
1157     if (!is_primitive_field_type(type)) {
1158       continue;
1159     }
1160     // one-to-one mapping
1161     jvmtiPrimitiveType value_type = (jvmtiPrimitiveType)type;
1162 
1163     // get offset and field value
1164     int offset = field->field_offset();
1165     address addr = (address)klass->java_mirror() + offset;
1166     jvalue value;
1167     copy_to_jvalue(&value, addr, value_type);
1168 
1169     // field index
1170     reference_info.field.index = field->field_index();
1171 
1172     // invoke the callback
1173     jint res = (*cb)(JVMTI_HEAP_REFERENCE_STATIC_FIELD,
1174                      &reference_info,
1175                      wrapper->klass_tag(),
1176                      wrapper->obj_tag_p(),
1177                      value,
1178                      value_type,
1179                      user_data);
1180     if (res & JVMTI_VISIT_ABORT) {
1181       delete field_map;
1182       return res;
1183     }
1184   }
1185 


src/share/vm/prims/jvmtiTagMap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File