298 public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class);
299
300 public final int jvmciCompileStateCanPostOnExceptionsOffset = getJvmciJvmtiCapabilityOffset("_jvmti_can_post_on_exceptions");
301 public final int jvmciCompileStateCanPopFrameOffset = getJvmciJvmtiCapabilityOffset("_jvmti_can_pop_frame");
302 public final int jvmciCompileStateCanAccessLocalVariablesOffset = getJvmciJvmtiCapabilityOffset("_jvmti_can_access_local_variables");
303
304 // Integer.MIN_VALUE if not available
305 private int getJvmciJvmtiCapabilityOffset(String name) {
306 int offset = getFieldOffset("JVMCICompileState::" + name, Integer.class, "jbyte", Integer.MIN_VALUE);
307 if (offset == Integer.MIN_VALUE) {
308 // JDK 12
309 offset = getFieldOffset("JVMCIEnv::" + name, Integer.class, "jbyte", Integer.MIN_VALUE);
310 }
311 return offset;
312 }
313
314 public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer");
315 public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor");
316 public final int javaThreadShouldPostOnExceptionsFlagOffset = getFieldOffset("JavaThread::_should_post_on_exceptions_flag", Integer.class, "int", Integer.MIN_VALUE);
317 public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop");
318 public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*");
319 public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int");
320 public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop");
321 public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*");
322 public final int doingUnsafeAccessOffset = getFieldOffset("JavaThread::_doing_unsafe_access", Integer.class, "bool", Integer.MAX_VALUE);
323 public final int javaThreadReservedStackActivationOffset = versioned.javaThreadReservedStackActivationOffset;
324 public final int jniEnvironmentOffset = getFieldOffset("JavaThread::_jni_environment", Integer.class, "JNIEnv", Integer.MIN_VALUE);
325
326 public boolean requiresReservedStackCheck(List<ResolvedJavaMethod> methods) {
327 if (enableStackReservedZoneAddress != 0 && methods != null) {
328 for (ResolvedJavaMethod method : methods) {
329 if (((HotSpotResolvedJavaMethod) method).hasReservedStackAccess()) {
330 return true;
331 }
332 }
333 }
334 return false;
335 }
336
337 /**
338 * An invalid value for {@link #rtldDefault}.
402 }
403
404 public int threadLastJavaPcOffset() {
405 return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset;
406 }
407
408 public int threadLastJavaFpOffset() {
409 assert osArch.equals("aarch64") || osArch.equals("amd64");
410 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*");
411 }
412
413 public int threadJavaFrameAnchorFlagsOffset() {
414 assert osArch.equals("sparc");
415 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int");
416 }
417
418 public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64);
419 public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64);
420 public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, intRequiredOnAMD64);
421
422 public final int osThreadInterruptedOffset = getFieldOffset("OSThread::_interrupted", Integer.class, "jint");
423
424 public final long markWordHashShift = getConstant(markWordField("hash_shift"), Long.class);
425
426 public final int biasedLockMaskInPlace = getConstant(markWordField("biased_lock_mask_in_place"), Integer.class);
427 public final int ageMaskInPlace = getConstant(markWordField("age_mask_in_place"), Integer.class);
428 public final int epochMaskInPlace = getConstant(markWordField("epoch_mask_in_place"), Integer.class);
429 public final long markWordHashMask = getConstant(markWordField("hash_mask"), Long.class);
430 public final long markWordHashMaskInPlace = getConstant(markWordField("hash_mask_in_place"), Long.class);
431
432 public final int unlockedMask = getConstant(markWordField("unlocked_value"), Integer.class);
433 public final int monitorMask = getConstant(markWordField("monitor_value"), Integer.class, -1);
434 public final int biasedLockPattern = getConstant(markWordField("biased_lock_pattern"), Integer.class);
435
436 // This field has no type in vmStructs.cpp
437 public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null, -1);
438 public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t", -1);
439 public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*", -1);
440 public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*", -1);
441 public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, "Thread*", -1);
442
697 public boolean areNullAllocationStubsAvailable() {
698 return newInstanceOrNullAddress != 0L;
699 }
700
701 /**
702 * Checks that HotSpot implements all or none of the allocate-or-null stubs.
703 */
704 private boolean checkNullAllocationStubs() {
705 if (newInstanceOrNullAddress == 0L) {
706 assert newArrayOrNullAddress == 0L;
707 assert newMultiArrayOrNullAddress == 0L;
708 assert dynamicNewInstanceOrNullAddress == 0L;
709 } else {
710 assert newArrayOrNullAddress != 0L;
711 assert newMultiArrayOrNullAddress != 0L;
712 assert dynamicNewInstanceOrNullAddress != 0L;
713 }
714 return true;
715 }
716
717 public final long threadIsInterruptedAddress = getAddress("JVMCIRuntime::thread_is_interrupted");
718 public final long vmMessageAddress = getAddress("JVMCIRuntime::vm_message");
719 public final long identityHashCodeAddress = getAddress("JVMCIRuntime::identity_hash_code");
720 public final long exceptionHandlerForPcAddress = getAddress("JVMCIRuntime::exception_handler_for_pc");
721 public final long monitorenterAddress = getAddress("JVMCIRuntime::monitorenter");
722 public final long monitorexitAddress = getAddress("JVMCIRuntime::monitorexit");
723 public final long notifyAddress = getAddress("JVMCIRuntime::object_notify", 0L);
724 public final long notifyAllAddress = getAddress("JVMCIRuntime::object_notifyAll", 0L);
725 public final long throwAndPostJvmtiExceptionAddress = getAddress("JVMCIRuntime::throw_and_post_jvmti_exception");
726 public final long throwKlassExternalNameExceptionAddress = getAddress("JVMCIRuntime::throw_klass_external_name_exception");
727 public final long throwClassCastExceptionAddress = getAddress("JVMCIRuntime::throw_class_cast_exception");
728 public final long logPrimitiveAddress = getAddress("JVMCIRuntime::log_primitive");
729 public final long logObjectAddress = getAddress("JVMCIRuntime::log_object");
730 public final long logPrintfAddress = getAddress("JVMCIRuntime::log_printf");
731 public final long vmErrorAddress = getAddress("JVMCIRuntime::vm_error");
732 public final long loadAndClearExceptionAddress = getAddress("JVMCIRuntime::load_and_clear_exception");
733 public final long writeBarrierPreAddress = getAddress("JVMCIRuntime::write_barrier_pre");
734 public final long writeBarrierPostAddress = getAddress("JVMCIRuntime::write_barrier_post");
735 public final long validateObject = getAddress("JVMCIRuntime::validate_object");
736
737 public final long testDeoptimizeCallInt = getAddress("JVMCIRuntime::test_deoptimize_call_int");
|
298 public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class);
299
300 public final int jvmciCompileStateCanPostOnExceptionsOffset = getJvmciJvmtiCapabilityOffset("_jvmti_can_post_on_exceptions");
301 public final int jvmciCompileStateCanPopFrameOffset = getJvmciJvmtiCapabilityOffset("_jvmti_can_pop_frame");
302 public final int jvmciCompileStateCanAccessLocalVariablesOffset = getJvmciJvmtiCapabilityOffset("_jvmti_can_access_local_variables");
303
304 // Integer.MIN_VALUE if not available
305 private int getJvmciJvmtiCapabilityOffset(String name) {
306 int offset = getFieldOffset("JVMCICompileState::" + name, Integer.class, "jbyte", Integer.MIN_VALUE);
307 if (offset == Integer.MIN_VALUE) {
308 // JDK 12
309 offset = getFieldOffset("JVMCIEnv::" + name, Integer.class, "jbyte", Integer.MIN_VALUE);
310 }
311 return offset;
312 }
313
314 public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer");
315 public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor");
316 public final int javaThreadShouldPostOnExceptionsFlagOffset = getFieldOffset("JavaThread::_should_post_on_exceptions_flag", Integer.class, "int", Integer.MIN_VALUE);
317 public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop");
318 public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*", Integer.MAX_VALUE);
319 public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int");
320 public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop");
321 public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*");
322 public final int doingUnsafeAccessOffset = getFieldOffset("JavaThread::_doing_unsafe_access", Integer.class, "bool", Integer.MAX_VALUE);
323 public final int javaThreadReservedStackActivationOffset = versioned.javaThreadReservedStackActivationOffset;
324 public final int jniEnvironmentOffset = getFieldOffset("JavaThread::_jni_environment", Integer.class, "JNIEnv", Integer.MIN_VALUE);
325
326 public boolean requiresReservedStackCheck(List<ResolvedJavaMethod> methods) {
327 if (enableStackReservedZoneAddress != 0 && methods != null) {
328 for (ResolvedJavaMethod method : methods) {
329 if (((HotSpotResolvedJavaMethod) method).hasReservedStackAccess()) {
330 return true;
331 }
332 }
333 }
334 return false;
335 }
336
337 /**
338 * An invalid value for {@link #rtldDefault}.
402 }
403
404 public int threadLastJavaPcOffset() {
405 return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset;
406 }
407
408 public int threadLastJavaFpOffset() {
409 assert osArch.equals("aarch64") || osArch.equals("amd64");
410 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*");
411 }
412
413 public int threadJavaFrameAnchorFlagsOffset() {
414 assert osArch.equals("sparc");
415 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int");
416 }
417
418 public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64);
419 public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64);
420 public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, intRequiredOnAMD64);
421
422 public final int osThreadInterruptedOffset = getFieldOffset("OSThread::_interrupted", Integer.class, "jint", Integer.MAX_VALUE);
423
424 public final long markWordHashShift = getConstant(markWordField("hash_shift"), Long.class);
425
426 public final int biasedLockMaskInPlace = getConstant(markWordField("biased_lock_mask_in_place"), Integer.class);
427 public final int ageMaskInPlace = getConstant(markWordField("age_mask_in_place"), Integer.class);
428 public final int epochMaskInPlace = getConstant(markWordField("epoch_mask_in_place"), Integer.class);
429 public final long markWordHashMask = getConstant(markWordField("hash_mask"), Long.class);
430 public final long markWordHashMaskInPlace = getConstant(markWordField("hash_mask_in_place"), Long.class);
431
432 public final int unlockedMask = getConstant(markWordField("unlocked_value"), Integer.class);
433 public final int monitorMask = getConstant(markWordField("monitor_value"), Integer.class, -1);
434 public final int biasedLockPattern = getConstant(markWordField("biased_lock_pattern"), Integer.class);
435
436 // This field has no type in vmStructs.cpp
437 public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null, -1);
438 public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t", -1);
439 public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*", -1);
440 public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*", -1);
441 public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, "Thread*", -1);
442
697 public boolean areNullAllocationStubsAvailable() {
698 return newInstanceOrNullAddress != 0L;
699 }
700
701 /**
702 * Checks that HotSpot implements all or none of the allocate-or-null stubs.
703 */
704 private boolean checkNullAllocationStubs() {
705 if (newInstanceOrNullAddress == 0L) {
706 assert newArrayOrNullAddress == 0L;
707 assert newMultiArrayOrNullAddress == 0L;
708 assert dynamicNewInstanceOrNullAddress == 0L;
709 } else {
710 assert newArrayOrNullAddress != 0L;
711 assert newMultiArrayOrNullAddress != 0L;
712 assert dynamicNewInstanceOrNullAddress != 0L;
713 }
714 return true;
715 }
716
717 public final long vmMessageAddress = getAddress("JVMCIRuntime::vm_message");
718 public final long identityHashCodeAddress = getAddress("JVMCIRuntime::identity_hash_code");
719 public final long exceptionHandlerForPcAddress = getAddress("JVMCIRuntime::exception_handler_for_pc");
720 public final long monitorenterAddress = getAddress("JVMCIRuntime::monitorenter");
721 public final long monitorexitAddress = getAddress("JVMCIRuntime::monitorexit");
722 public final long notifyAddress = getAddress("JVMCIRuntime::object_notify", 0L);
723 public final long notifyAllAddress = getAddress("JVMCIRuntime::object_notifyAll", 0L);
724 public final long throwAndPostJvmtiExceptionAddress = getAddress("JVMCIRuntime::throw_and_post_jvmti_exception");
725 public final long throwKlassExternalNameExceptionAddress = getAddress("JVMCIRuntime::throw_klass_external_name_exception");
726 public final long throwClassCastExceptionAddress = getAddress("JVMCIRuntime::throw_class_cast_exception");
727 public final long logPrimitiveAddress = getAddress("JVMCIRuntime::log_primitive");
728 public final long logObjectAddress = getAddress("JVMCIRuntime::log_object");
729 public final long logPrintfAddress = getAddress("JVMCIRuntime::log_printf");
730 public final long vmErrorAddress = getAddress("JVMCIRuntime::vm_error");
731 public final long loadAndClearExceptionAddress = getAddress("JVMCIRuntime::load_and_clear_exception");
732 public final long writeBarrierPreAddress = getAddress("JVMCIRuntime::write_barrier_pre");
733 public final long writeBarrierPostAddress = getAddress("JVMCIRuntime::write_barrier_post");
734 public final long validateObject = getAddress("JVMCIRuntime::validate_object");
735
736 public final long testDeoptimizeCallInt = getAddress("JVMCIRuntime::test_deoptimize_call_int");
|