--- old/src/share/vm/prims/jvmtiTagMap.cpp Fri Mar 18 14:59:03 2011 +++ new/src/share/vm/prims/jvmtiTagMap.cpp Fri Mar 18 14:59:03 2011 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "jvmtifiles/jvmtiEnv.hpp" +#include "oops/instanceMirrorKlass.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline2.hpp" #include "prims/jvmtiEventController.hpp" @@ -2594,6 +2595,11 @@ if (o->is_klass()) { klassOop k = (klassOop)o; o = Klass::cast(k)->java_mirror(); + if (o == NULL) { + // Classes without mirrors don't correspond to real Java + // classes so just ignore them. + return; + } } else { // SystemDictionary::always_strong_oops_do reports the application @@ -2834,10 +2840,10 @@ // verify that a static oop field is in range static inline bool verify_static_oop(instanceKlass* ik, - klassOop k, int offset) { - address obj_p = (address)k + offset; - address start = (address)ik->start_of_static_fields(); - address end = start + (ik->static_oop_field_size() * heapOopSize); + oop mirror, int offset) { + address obj_p = (address)mirror + offset; + address start = (address)instanceMirrorKlass::start_of_static_fields(mirror); + address end = start + (java_lang_Class::static_oop_field_count(mirror) * heapOopSize); assert(end >= start, "sanity check"); if (obj_p >= start && obj_p < end) { @@ -2938,8 +2944,8 @@ ClassFieldDescriptor* field = field_map->field_at(i); char type = field->field_type(); if (!is_primitive_field_type(type)) { - oop fld_o = k->obj_field(field->field_offset()); - assert(verify_static_oop(ik, k, field->field_offset()), "sanity check"); + oop fld_o = mirror->obj_field(field->field_offset()); + assert(verify_static_oop(ik, mirror, field->field_offset()), "sanity check"); if (fld_o != NULL) { int slot = field->field_index(); if (!CallbackInvoker::report_static_field_reference(mirror, fld_o, slot)) {