hotspot/src/share/vm/jvmci/jvmciCodeInstaller.cpp
changeset 38678 06d6c40ce33b
parent 36842 8f0d0faa51e2
child 38692 54a84b7f3721
equal deleted inserted replaced
38677:1c1598b02874 38678:06d6c40ce33b
   179 
   179 
   180 void* CodeInstaller::record_metadata_reference(Handle constant, TRAPS) {
   180 void* CodeInstaller::record_metadata_reference(Handle constant, TRAPS) {
   181   /*
   181   /*
   182    * This method needs to return a raw (untyped) pointer, since the value of a pointer to the base
   182    * This method needs to return a raw (untyped) pointer, since the value of a pointer to the base
   183    * class is in general not equal to the pointer of the subclass. When patching metaspace pointers,
   183    * class is in general not equal to the pointer of the subclass. When patching metaspace pointers,
   184    * the compiler expects a direct pointer to the subclass (Klass*, Method* or Symbol*), not a
   184    * the compiler expects a direct pointer to the subclass (Klass* or Method*), not a pointer to the
   185    * pointer to the base class (Metadata* or MetaspaceObj*).
   185    * base class (Metadata* or MetaspaceObj*).
   186    */
   186    */
   187   oop obj = HotSpotMetaspaceConstantImpl::metaspaceObject(constant);
   187   oop obj = HotSpotMetaspaceConstantImpl::metaspaceObject(constant);
   188   if (obj->is_a(HotSpotResolvedObjectTypeImpl::klass())) {
   188   if (obj->is_a(HotSpotResolvedObjectTypeImpl::klass())) {
   189     Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(obj));
   189     Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(obj));
   190     assert(!HotSpotMetaspaceConstantImpl::compressed(constant), "unexpected compressed klass pointer %s @ " INTPTR_FORMAT, klass->name()->as_C_string(), p2i(klass));
   190     assert(!HotSpotMetaspaceConstantImpl::compressed(constant), "unexpected compressed klass pointer %s @ " INTPTR_FORMAT, klass->name()->as_C_string(), p2i(klass));
   195     Method* method = (Method*) (address) HotSpotResolvedJavaMethodImpl::metaspaceMethod(obj);
   195     Method* method = (Method*) (address) HotSpotResolvedJavaMethodImpl::metaspaceMethod(obj);
   196     assert(!HotSpotMetaspaceConstantImpl::compressed(constant), "unexpected compressed method pointer %s @ " INTPTR_FORMAT, method->name()->as_C_string(), p2i(method));
   196     assert(!HotSpotMetaspaceConstantImpl::compressed(constant), "unexpected compressed method pointer %s @ " INTPTR_FORMAT, method->name()->as_C_string(), p2i(method));
   197     int index = _oop_recorder->find_index(method);
   197     int index = _oop_recorder->find_index(method);
   198     TRACE_jvmci_3("metadata[%d of %d] = %s", index, _oop_recorder->metadata_count(), method->name()->as_C_string());
   198     TRACE_jvmci_3("metadata[%d of %d] = %s", index, _oop_recorder->metadata_count(), method->name()->as_C_string());
   199     return method;
   199     return method;
   200   } else if (obj->is_a(HotSpotSymbol::klass())) {
       
   201     Symbol* symbol = (Symbol*) (address) HotSpotSymbol::pointer(obj);
       
   202     assert(!HotSpotMetaspaceConstantImpl::compressed(constant), "unexpected compressed symbol pointer %s @ " INTPTR_FORMAT, symbol->as_C_string(), p2i(symbol));
       
   203     TRACE_jvmci_3("symbol = %s", symbol->as_C_string());
       
   204     return symbol;
       
   205   } else {
   200   } else {
   206     JVMCI_ERROR_NULL("unexpected metadata reference for constant of type %s", obj->klass()->signature_name());
   201     JVMCI_ERROR_NULL("unexpected metadata reference for constant of type %s", obj->klass()->signature_name());
   207   }
   202   }
   208 }
   203 }
   209 
   204