src/hotspot/share/jvmci/jvmciEnv.cpp
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
parent 55005 9b70ebd131b4
child 58679 9c3209ff7550
equal deleted inserted replaced
58677:13588c901957 58678:9cf78a70fa4f
    35 #include "runtime/jniHandles.inline.hpp"
    35 #include "runtime/jniHandles.inline.hpp"
    36 #include "runtime/javaCalls.hpp"
    36 #include "runtime/javaCalls.hpp"
    37 #include "jvmci/jniAccessMark.inline.hpp"
    37 #include "jvmci/jniAccessMark.inline.hpp"
    38 #include "jvmci/jvmciRuntime.hpp"
    38 #include "jvmci/jvmciRuntime.hpp"
    39 
    39 
    40 JVMCICompileState::JVMCICompileState(CompileTask* task, int system_dictionary_modification_counter):
    40 JVMCICompileState::JVMCICompileState(CompileTask* task):
    41   _task(task),
    41   _task(task),
    42   _system_dictionary_modification_counter(system_dictionary_modification_counter),
       
    43   _retryable(true),
    42   _retryable(true),
    44   _failure_reason(NULL),
    43   _failure_reason(NULL),
    45   _failure_reason_on_C_heap(false) {
    44   _failure_reason_on_C_heap(false) {
    46   // Get Jvmti capabilities under lock to get consistent values.
    45   // Get Jvmti capabilities under lock to get consistent values.
    47   MutexLocker mu(JvmtiThreadState_lock);
    46   MutexLocker mu(JvmtiThreadState_lock);
       
    47   _jvmti_redefinition_count             = JvmtiExport::redefinition_count();
    48   _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint() ? 1 : 0;
    48   _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint() ? 1 : 0;
    49   _jvmti_can_access_local_variables     = JvmtiExport::can_access_local_variables() ? 1 : 0;
    49   _jvmti_can_access_local_variables     = JvmtiExport::can_access_local_variables() ? 1 : 0;
    50   _jvmti_can_post_on_exceptions         = JvmtiExport::can_post_on_exceptions() ? 1 : 0;
    50   _jvmti_can_post_on_exceptions         = JvmtiExport::can_post_on_exceptions() ? 1 : 0;
    51   _jvmti_can_pop_frame                  = JvmtiExport::can_pop_frame() ? 1 : 0;
    51   _jvmti_can_pop_frame                  = JvmtiExport::can_pop_frame() ? 1 : 0;
    52 }
    52 }
    53 
    53 
    54 bool JVMCICompileState::jvmti_state_changed() const {
    54 bool JVMCICompileState::jvmti_state_changed() const {
       
    55   // Some classes were redefined
       
    56   if (jvmti_redefinition_count() != JvmtiExport::redefinition_count()) {
       
    57     return true;
       
    58   }
    55   if (!jvmti_can_access_local_variables() &&
    59   if (!jvmti_can_access_local_variables() &&
    56       JvmtiExport::can_access_local_variables()) {
    60       JvmtiExport::can_access_local_variables()) {
    57     return true;
    61     return true;
    58   }
    62   }
    59   if (!jvmti_can_hotswap_or_post_breakpoint() &&
    63   if (!jvmti_can_hotswap_or_post_breakpoint() &&
  1109 JVMCIObject JVMCIEnv::get_jvmci_type(const JVMCIKlassHandle& klass, JVMCI_TRAPS) {
  1113 JVMCIObject JVMCIEnv::get_jvmci_type(const JVMCIKlassHandle& klass, JVMCI_TRAPS) {
  1110   JVMCIObject type;
  1114   JVMCIObject type;
  1111   if (klass.is_null()) {
  1115   if (klass.is_null()) {
  1112     return type;
  1116     return type;
  1113   }
  1117   }
  1114 #ifdef INCLUDE_ALL_GCS
       
  1115     if (UseG1GC) {
       
  1116       // The klass might have come from a weak location so enqueue
       
  1117       // the Class to make sure it's noticed by G1
       
  1118       G1SATBCardTableModRefBS::enqueue(klass()->java_mirror());
       
  1119     }
       
  1120 #endif  // Klass* don't require tracking as Metadata*
       
  1121 
  1118 
  1122   jlong pointer = (jlong) klass();
  1119   jlong pointer = (jlong) klass();
  1123   JavaThread* THREAD = JavaThread::current();
  1120   JavaThread* THREAD = JavaThread::current();
  1124   JVMCIObject signature = create_string(klass->signature_name(), JVMCI_CHECK_(JVMCIObject()));
  1121   JVMCIObject signature = create_string(klass->signature_name(), JVMCI_CHECK_(JVMCIObject()));
  1125   jboolean exception = false;
  1122   jboolean exception = false;
  1366     assert(HotSpotJVMCI::DirectHotSpotObjectConstantImpl::is_instance(this, constant), "wrong type");
  1363     assert(HotSpotJVMCI::DirectHotSpotObjectConstantImpl::is_instance(this, constant), "wrong type");
  1367     oop obj = HotSpotJVMCI::DirectHotSpotObjectConstantImpl::object(this, HotSpotJVMCI::resolve(constant));
  1364     oop obj = HotSpotJVMCI::DirectHotSpotObjectConstantImpl::object(this, HotSpotJVMCI::resolve(constant));
  1368     return Handle(THREAD, obj);
  1365     return Handle(THREAD, obj);
  1369   } else if (isa_IndirectHotSpotObjectConstantImpl(constant)) {
  1366   } else if (isa_IndirectHotSpotObjectConstantImpl(constant)) {
  1370     jlong object_handle = get_IndirectHotSpotObjectConstantImpl_objectHandle(constant);
  1367     jlong object_handle = get_IndirectHotSpotObjectConstantImpl_objectHandle(constant);
       
  1368     if (object_handle == 0L) {
       
  1369       JVMCI_THROW_MSG_(NullPointerException, "Foreign object reference has been cleared", Handle());
       
  1370     }
  1371     oop result = resolve_handle(object_handle);
  1371     oop result = resolve_handle(object_handle);
  1372     if (result == NULL) {
  1372     if (result == NULL) {
  1373       JVMCI_THROW_MSG_(InternalError, "Constant was unexpectedly NULL", Handle());
  1373       JVMCI_THROW_MSG_(InternalError, "Constant was unexpectedly NULL", Handle());
  1374     }
  1374     }
  1375     return Handle(THREAD, result);
  1375     return Handle(THREAD, result);