< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

  32 #include "compiler/compilerEvent.hpp"
  33 #include "compiler/compilerOracle.hpp"
  34 #include "compiler/disassembler.hpp"
  35 #include "compiler/oopMap.hpp"
  36 #include "interpreter/bytecodeStream.hpp"
  37 #include "interpreter/linkResolver.hpp"
  38 #include "interpreter/oopMapCache.hpp"
  39 #include "jfr/jfrEvents.hpp"
  40 #include "jvmci/jvmciCodeInstaller.hpp"
  41 #include "jvmci/jvmciCompilerToVM.hpp"
  42 #include "jvmci/jvmciRuntime.hpp"
  43 #include "logging/log.hpp"
  44 #include "logging/logTag.hpp"
  45 #include "memory/oopFactory.hpp"
  46 #include "memory/universe.hpp"
  47 #include "oops/constantPool.inline.hpp"
  48 #include "oops/instanceKlass.inline.hpp"
  49 #include "oops/instanceMirrorKlass.hpp"
  50 #include "oops/method.inline.hpp"
  51 #include "oops/objArrayKlass.inline.hpp"

  52 #include "oops/typeArrayOop.inline.hpp"
  53 #include "prims/jvmtiExport.hpp"
  54 #include "prims/methodHandles.hpp"
  55 #include "prims/nativeLookup.hpp"
  56 #include "runtime/arguments.hpp"
  57 #include "runtime/atomic.hpp"
  58 #include "runtime/deoptimization.hpp"
  59 #include "runtime/fieldDescriptor.inline.hpp"
  60 #include "runtime/frame.inline.hpp"
  61 #include "runtime/globals_extension.hpp"
  62 #include "runtime/interfaceSupport.inline.hpp"
  63 #include "runtime/jniHandles.inline.hpp"
  64 #include "runtime/keepStackGCProcessed.hpp"
  65 #include "runtime/reflection.hpp"
  66 #include "runtime/stackFrameStream.inline.hpp"
  67 #include "runtime/timerTrace.hpp"
  68 #include "runtime/vframe.inline.hpp"
  69 #include "runtime/vframe_hp.hpp"
  70 #if INCLUDE_JFR
  71 #include "jfr/jfr.hpp"

 488       }
 489     } else if (JVMCIENV->isa_HotSpotObjectConstantImpl(base_object)) {
 490       Handle base_oop = JVMCIENV->asConstant(base_object, JVMCI_CHECK_NULL);
 491       if (base_oop->is_a(vmClasses::Class_klass())) {
 492         if (offset == java_lang_Class::klass_offset()) {
 493           klass = java_lang_Class::as_Klass(base_oop());
 494         } else if (offset == java_lang_Class::array_klass_offset()) {
 495           klass = java_lang_Class::array_klass_acquire(base_oop());
 496         } else {
 497           base_desc = FormatBufferResource("[Class=%s]", java_lang_Class::as_Klass(base_oop())->signature_name());
 498           goto unexpected;
 499         }
 500       } else {
 501         if (!base_oop.is_null()) {
 502           base_desc = FormatBufferResource("[%s]", base_oop()->klass()->signature_name());
 503         }
 504         goto unexpected;
 505       }
 506     } else if (JVMCIENV->isa_HotSpotMethodData(base_object)) {
 507       jlong base_address = (intptr_t) JVMCIENV->asMethodData(base_object);
 508       klass = *((Klass**) (intptr_t) (base_address + offset));
 509       if (klass == nullptr || !klass->is_loader_alive()) {



 510         // Klasses in methodData might be concurrently unloading so return null in that case.
 511         return nullptr;
 512       }

 513     } else {
 514       goto unexpected;
 515     }
 516   } else {
 517     goto unexpected;
 518   }
 519 
 520   {
 521     if (klass == nullptr) {
 522       return nullptr;
 523     }
 524     JVMCIObject result = JVMCIENV->get_jvmci_type(klass, JVMCI_CHECK_NULL);
 525     return JVMCIENV->get_jobject(result);
 526   }
 527 
 528 unexpected:
 529   JVMCI_THROW_MSG_NULL(IllegalArgumentException,
 530                        err_msg("Unexpected arguments: %s%s " JLONG_FORMAT " %s",
 531                                JVMCIENV->klass_name(base_object), base_desc == nullptr ? "" : base_desc,
 532                                offset, compressed ? "true" : "false"));

  32 #include "compiler/compilerEvent.hpp"
  33 #include "compiler/compilerOracle.hpp"
  34 #include "compiler/disassembler.hpp"
  35 #include "compiler/oopMap.hpp"
  36 #include "interpreter/bytecodeStream.hpp"
  37 #include "interpreter/linkResolver.hpp"
  38 #include "interpreter/oopMapCache.hpp"
  39 #include "jfr/jfrEvents.hpp"
  40 #include "jvmci/jvmciCodeInstaller.hpp"
  41 #include "jvmci/jvmciCompilerToVM.hpp"
  42 #include "jvmci/jvmciRuntime.hpp"
  43 #include "logging/log.hpp"
  44 #include "logging/logTag.hpp"
  45 #include "memory/oopFactory.hpp"
  46 #include "memory/universe.hpp"
  47 #include "oops/constantPool.inline.hpp"
  48 #include "oops/instanceKlass.inline.hpp"
  49 #include "oops/instanceMirrorKlass.hpp"
  50 #include "oops/method.inline.hpp"
  51 #include "oops/objArrayKlass.inline.hpp"
  52 #include "oops/trainingData.hpp"
  53 #include "oops/typeArrayOop.inline.hpp"
  54 #include "prims/jvmtiExport.hpp"
  55 #include "prims/methodHandles.hpp"
  56 #include "prims/nativeLookup.hpp"
  57 #include "runtime/arguments.hpp"
  58 #include "runtime/atomic.hpp"
  59 #include "runtime/deoptimization.hpp"
  60 #include "runtime/fieldDescriptor.inline.hpp"
  61 #include "runtime/frame.inline.hpp"
  62 #include "runtime/globals_extension.hpp"
  63 #include "runtime/interfaceSupport.inline.hpp"
  64 #include "runtime/jniHandles.inline.hpp"
  65 #include "runtime/keepStackGCProcessed.hpp"
  66 #include "runtime/reflection.hpp"
  67 #include "runtime/stackFrameStream.inline.hpp"
  68 #include "runtime/timerTrace.hpp"
  69 #include "runtime/vframe.inline.hpp"
  70 #include "runtime/vframe_hp.hpp"
  71 #if INCLUDE_JFR
  72 #include "jfr/jfr.hpp"

 489       }
 490     } else if (JVMCIENV->isa_HotSpotObjectConstantImpl(base_object)) {
 491       Handle base_oop = JVMCIENV->asConstant(base_object, JVMCI_CHECK_NULL);
 492       if (base_oop->is_a(vmClasses::Class_klass())) {
 493         if (offset == java_lang_Class::klass_offset()) {
 494           klass = java_lang_Class::as_Klass(base_oop());
 495         } else if (offset == java_lang_Class::array_klass_offset()) {
 496           klass = java_lang_Class::array_klass_acquire(base_oop());
 497         } else {
 498           base_desc = FormatBufferResource("[Class=%s]", java_lang_Class::as_Klass(base_oop())->signature_name());
 499           goto unexpected;
 500         }
 501       } else {
 502         if (!base_oop.is_null()) {
 503           base_desc = FormatBufferResource("[%s]", base_oop()->klass()->signature_name());
 504         }
 505         goto unexpected;
 506       }
 507     } else if (JVMCIENV->isa_HotSpotMethodData(base_object)) {
 508       jlong base_address = (intptr_t) JVMCIENV->asMethodData(base_object);
 509       Klass* k = *((Klass**) (intptr_t) (base_address + offset));
 510       if (k == nullptr || k->class_loader_data() == nullptr || !TrainingData::is_klass_loaded(k)) {
 511         return nullptr;
 512       }
 513       if (!k->is_loader_alive()) {
 514         // Klasses in methodData might be concurrently unloading so return null in that case.
 515         return nullptr;
 516       }
 517       klass = k;
 518     } else {
 519       goto unexpected;
 520     }
 521   } else {
 522     goto unexpected;
 523   }
 524 
 525   {
 526     if (klass == nullptr) {
 527       return nullptr;
 528     }
 529     JVMCIObject result = JVMCIENV->get_jvmci_type(klass, JVMCI_CHECK_NULL);
 530     return JVMCIENV->get_jobject(result);
 531   }
 532 
 533 unexpected:
 534   JVMCI_THROW_MSG_NULL(IllegalArgumentException,
 535                        err_msg("Unexpected arguments: %s%s " JLONG_FORMAT " %s",
 536                                JVMCIENV->klass_name(base_object), base_desc == nullptr ? "" : base_desc,
 537                                offset, compressed ? "true" : "false"));
< prev index next >