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"));
|