363 public final int fieldInfoInitvalIndexOffset = getConstant("FieldInfo::initval_index_offset", Integer.class); 364 public final int fieldInfoLowPackedOffset = getConstant("FieldInfo::low_packed_offset", Integer.class); 365 public final int fieldInfoHighPackedOffset = getConstant("FieldInfo::high_packed_offset", Integer.class); 366 public final int fieldInfoFieldSlots = getConstant("FieldInfo::field_slots", Integer.class); 367 368 public final int fieldInfoTagSize = getConstant("FIELDINFO_TAG_SIZE", Integer.class); 369 370 public final int jvmAccMonitorMatch = getConstant("JVM_ACC_MONITOR_MATCH", Integer.class); 371 public final int jvmAccHasMonitorBytecodes = getConstant("JVM_ACC_HAS_MONITOR_BYTECODES", Integer.class); 372 public final int jvmAccHasFinalizer = getConstant("JVM_ACC_HAS_FINALIZER", Integer.class); 373 public final int jvmAccFieldInternal = getConstant("JVM_ACC_FIELD_INTERNAL", Integer.class); 374 public final int jvmAccFieldStable = getConstant("JVM_ACC_FIELD_STABLE", Integer.class); 375 public final int jvmAccFieldHasGenericSignature = getConstant("JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE", Integer.class); 376 public final int jvmAccWrittenFlags = getConstant("JVM_ACC_WRITTEN_FLAGS", Integer.class); 377 public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class); 378 379 public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer"); 380 public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor"); 381 public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop"); 382 public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*"); 383 public final int javaThreadDirtyCardQueueOffset = getFieldOffset("JavaThread::_dirty_card_queue", Integer.class, "DirtyCardQueue"); 384 public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int"); 385 public final int javaThreadSatbMarkQueueOffset = getFieldOffset("JavaThread::_satb_mark_queue", Integer.class); 386 public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop"); 387 public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*"); 388 public final int javaThreadReservedStackActivationOffset = getFieldOffset("JavaThread::_reserved_stack_activation", Integer.class, "address", intNotPresentInJDK8); 389 390 /** 391 * An invalid value for {@link #rtldDefault}. 392 */ 393 public static final long INVALID_RTLD_DEFAULT_HANDLE = 0xDEADFACE; 394 395 /** 396 * Address of the library lookup routine. The C signature of this routine is: 397 * 398 * <pre> 399 * void* (const char *filename, char *ebuf, int ebuflen) 400 * </pre> 401 */ 402 public final long dllLoad = getAddress("os::dll_load"); 403 404 /** 405 * Address of the library lookup routine. The C signature of this routine is: 438 } 439 440 public int threadLastJavaPcOffset() { 441 return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset; 442 } 443 444 public int threadLastJavaFpOffset() { 445 assert osArch.equals("aarch64") || osArch.equals("amd64"); 446 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*"); 447 } 448 449 public int threadJavaFrameAnchorFlagsOffset() { 450 assert osArch.equals("sparc"); 451 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int"); 452 } 453 454 public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64); 455 public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64); 456 public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, intRequiredOnAMD64); 457 458 private final int dirtyCardQueueBufferOffset = isJDK8 ? getFieldOffset("PtrQueue::_buf", Integer.class, "void**") : getConstant("dirtyCardQueueBufferOffset", Integer.class); 459 private final int dirtyCardQueueIndexOffset = isJDK8 ? getFieldOffset("PtrQueue::_index", Integer.class, "size_t") : getConstant("dirtyCardQueueIndexOffset", Integer.class); 460 461 private final int satbMarkQueueBufferOffset = getConstant("satbMarkQueueBufferOffset", Integer.class, intNotPresentInJDK8); 462 private final int satbMarkQueueIndexOffset = getConstant("satbMarkQueueIndexOffset", Integer.class, intNotPresentInJDK8); 463 private final int satbMarkQueueActiveOffset = isJDK8 ? getFieldOffset("PtrQueue::_active", Integer.class, "bool") : getConstant("satbMarkQueueActiveOffset", Integer.class, intNotPresentInJDK8); 464 465 public final int osThreadInterruptedOffset = getFieldOffset("OSThread::_interrupted", Integer.class, "jint"); 466 467 public final long markOopDescHashShift = getConstant("markOopDesc::hash_shift", Long.class); 468 469 public final int biasedLockMaskInPlace = getConstant("markOopDesc::biased_lock_mask_in_place", Integer.class); 470 public final int ageMaskInPlace = getConstant("markOopDesc::age_mask_in_place", Integer.class); 471 public final int epochMaskInPlace = getConstant("markOopDesc::epoch_mask_in_place", Integer.class); 472 public final long markOopDescHashMask = getConstant("markOopDesc::hash_mask", Long.class); 473 public final long markOopDescHashMaskInPlace = getConstant("markOopDesc::hash_mask_in_place", Long.class); 474 475 public final int unlockedMask = getConstant("markOopDesc::unlocked_value", Integer.class); 476 public final int monitorMask = getConstant("markOopDesc::monitor_value", Integer.class, -1); 477 public final int biasedLockPattern = getConstant("markOopDesc::biased_lock_pattern", Integer.class); 478 479 // This field has no type in vmStructs.cpp 480 public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null, -1); 481 public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t", -1); 482 public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*", -1); 483 public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*", -1); 484 558 public final int logOfHRGrainBytes = getFieldValue("HeapRegion::LogOfHRGrainBytes", Integer.class, "int"); 559 560 public final byte dirtyCardValue = jdkVersion >= 11 ? getConstant("CardTable::dirty_card", Byte.class) 561 : (jdkVersion > 8 ? getConstant("CardTableModRefBS::dirty_card", Byte.class) : getFieldValue("CompilerToVM::Data::dirty_card", Byte.class, "int")); 562 public final byte g1YoungCardValue = jdkVersion >= 11 ? getConstant("G1CardTable::g1_young_gen", Byte.class) 563 : (jdkVersion > 8 ? getConstant("G1SATBCardTableModRefBS::g1_young_gen", Byte.class) : getFieldValue("CompilerToVM::Data::g1_young_card", Byte.class, "int")); 564 565 public final long cardtableStartAddress = getFieldValue("CompilerToVM::Data::cardtable_start_address", Long.class, "jbyte*"); 566 public final int cardtableShift = getFieldValue("CompilerToVM::Data::cardtable_shift", Integer.class, "int"); 567 568 /** 569 * This is the largest stack offset encodeable in an OopMapValue. Offsets larger than this will 570 * throw an exception during code installation. 571 */ 572 public final int maxOopMapStackOffset = getFieldValueWithAlternate("CompilerToVM::Data::_max_oop_map_stack_offset", "JVMCIRuntime::max_oop_map_stack_offset", Integer.class, "int"); 573 574 public final long safepointPollingAddress = getFieldValue("os::_polling_page", Long.class, "address"); 575 576 // G1 Collector Related Values. 577 578 public int g1CardQueueIndexOffset() { 579 return javaThreadDirtyCardQueueOffset + dirtyCardQueueIndexOffset; 580 } 581 582 public int g1CardQueueBufferOffset() { 583 return javaThreadDirtyCardQueueOffset + dirtyCardQueueBufferOffset; 584 } 585 586 public int g1SATBQueueMarkingOffset() { 587 return javaThreadSatbMarkQueueOffset + satbMarkQueueActiveOffset; 588 } 589 590 public int g1SATBQueueIndexOffset() { 591 return javaThreadSatbMarkQueueOffset + (isJDK8 ? dirtyCardQueueIndexOffset : satbMarkQueueIndexOffset); 592 } 593 594 public int g1SATBQueueBufferOffset() { 595 return javaThreadSatbMarkQueueOffset + (isJDK8 ? dirtyCardQueueBufferOffset : satbMarkQueueBufferOffset); 596 } 597 598 public final int klassOffset = getFieldValue("java_lang_Class::_klass_offset", Integer.class, "int"); 599 public final int arrayKlassOffset = getFieldValue("java_lang_Class::_array_klass_offset", Integer.class, "int"); 600 601 public final int basicLockSize = getFieldValue("CompilerToVM::Data::sizeof_BasicLock", Integer.class, "int"); 602 public final int basicLockDisplacedHeaderOffset = getFieldOffset("BasicLock::_displaced_header", Integer.class, "markOop"); 603 604 public final int threadPollingPageOffset = getFieldOffset("Thread::_polling_page", Integer.class, "address", -1); 605 public final int threadAllocatedBytesOffset = getFieldOffset("Thread::_allocated_bytes", Integer.class, "jlong"); 606 607 public final int tlabRefillWasteIncrement = getFlag("TLABWasteIncrement", Integer.class); 608 609 private final int threadLocalAllocBufferStartOffset = getFieldOffset("ThreadLocalAllocBuffer::_start", Integer.class, "HeapWord*"); 610 private final int threadLocalAllocBufferEndOffset = getFieldOffset("ThreadLocalAllocBuffer::_end", Integer.class, "HeapWord*"); 611 private final int threadLocalAllocBufferTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_top", Integer.class, "HeapWord*"); 612 private final int threadLocalAllocBufferPfTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_pf_top", Integer.class, "HeapWord*"); 613 private final int threadLocalAllocBufferSlowAllocationsOffset = getFieldOffset("ThreadLocalAllocBuffer::_slow_allocations", Integer.class, "unsigned"); 614 private final int threadLocalAllocBufferFastRefillWasteOffset = getFieldOffset("ThreadLocalAllocBuffer::_fast_refill_waste", Integer.class, "unsigned"); 615 private final int threadLocalAllocBufferNumberOfRefillsOffset = getFieldOffset("ThreadLocalAllocBuffer::_number_of_refills", Integer.class, "unsigned"); 616 private final int threadLocalAllocBufferRefillWasteLimitOffset = getFieldOffset("ThreadLocalAllocBuffer::_refill_waste_limit", Integer.class, "size_t"); | 363 public final int fieldInfoInitvalIndexOffset = getConstant("FieldInfo::initval_index_offset", Integer.class); 364 public final int fieldInfoLowPackedOffset = getConstant("FieldInfo::low_packed_offset", Integer.class); 365 public final int fieldInfoHighPackedOffset = getConstant("FieldInfo::high_packed_offset", Integer.class); 366 public final int fieldInfoFieldSlots = getConstant("FieldInfo::field_slots", Integer.class); 367 368 public final int fieldInfoTagSize = getConstant("FIELDINFO_TAG_SIZE", Integer.class); 369 370 public final int jvmAccMonitorMatch = getConstant("JVM_ACC_MONITOR_MATCH", Integer.class); 371 public final int jvmAccHasMonitorBytecodes = getConstant("JVM_ACC_HAS_MONITOR_BYTECODES", Integer.class); 372 public final int jvmAccHasFinalizer = getConstant("JVM_ACC_HAS_FINALIZER", Integer.class); 373 public final int jvmAccFieldInternal = getConstant("JVM_ACC_FIELD_INTERNAL", Integer.class); 374 public final int jvmAccFieldStable = getConstant("JVM_ACC_FIELD_STABLE", Integer.class); 375 public final int jvmAccFieldHasGenericSignature = getConstant("JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE", Integer.class); 376 public final int jvmAccWrittenFlags = getConstant("JVM_ACC_WRITTEN_FLAGS", Integer.class); 377 public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class); 378 379 public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer"); 380 public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor"); 381 public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop"); 382 public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*"); 383 public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int"); 384 public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop"); 385 public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*"); 386 public final int javaThreadReservedStackActivationOffset = getFieldOffset("JavaThread::_reserved_stack_activation", Integer.class, "address", intNotPresentInJDK8); 387 388 /** 389 * An invalid value for {@link #rtldDefault}. 390 */ 391 public static final long INVALID_RTLD_DEFAULT_HANDLE = 0xDEADFACE; 392 393 /** 394 * Address of the library lookup routine. The C signature of this routine is: 395 * 396 * <pre> 397 * void* (const char *filename, char *ebuf, int ebuflen) 398 * </pre> 399 */ 400 public final long dllLoad = getAddress("os::dll_load"); 401 402 /** 403 * Address of the library lookup routine. The C signature of this routine is: 436 } 437 438 public int threadLastJavaPcOffset() { 439 return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset; 440 } 441 442 public int threadLastJavaFpOffset() { 443 assert osArch.equals("aarch64") || osArch.equals("amd64"); 444 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*"); 445 } 446 447 public int threadJavaFrameAnchorFlagsOffset() { 448 assert osArch.equals("sparc"); 449 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int"); 450 } 451 452 public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64); 453 public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64); 454 public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, intRequiredOnAMD64); 455 456 public final int osThreadInterruptedOffset = getFieldOffset("OSThread::_interrupted", Integer.class, "jint"); 457 458 public final long markOopDescHashShift = getConstant("markOopDesc::hash_shift", Long.class); 459 460 public final int biasedLockMaskInPlace = getConstant("markOopDesc::biased_lock_mask_in_place", Integer.class); 461 public final int ageMaskInPlace = getConstant("markOopDesc::age_mask_in_place", Integer.class); 462 public final int epochMaskInPlace = getConstant("markOopDesc::epoch_mask_in_place", Integer.class); 463 public final long markOopDescHashMask = getConstant("markOopDesc::hash_mask", Long.class); 464 public final long markOopDescHashMaskInPlace = getConstant("markOopDesc::hash_mask_in_place", Long.class); 465 466 public final int unlockedMask = getConstant("markOopDesc::unlocked_value", Integer.class); 467 public final int monitorMask = getConstant("markOopDesc::monitor_value", Integer.class, -1); 468 public final int biasedLockPattern = getConstant("markOopDesc::biased_lock_pattern", Integer.class); 469 470 // This field has no type in vmStructs.cpp 471 public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null, -1); 472 public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t", -1); 473 public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*", -1); 474 public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*", -1); 475 549 public final int logOfHRGrainBytes = getFieldValue("HeapRegion::LogOfHRGrainBytes", Integer.class, "int"); 550 551 public final byte dirtyCardValue = jdkVersion >= 11 ? getConstant("CardTable::dirty_card", Byte.class) 552 : (jdkVersion > 8 ? getConstant("CardTableModRefBS::dirty_card", Byte.class) : getFieldValue("CompilerToVM::Data::dirty_card", Byte.class, "int")); 553 public final byte g1YoungCardValue = jdkVersion >= 11 ? getConstant("G1CardTable::g1_young_gen", Byte.class) 554 : (jdkVersion > 8 ? getConstant("G1SATBCardTableModRefBS::g1_young_gen", Byte.class) : getFieldValue("CompilerToVM::Data::g1_young_card", Byte.class, "int")); 555 556 public final long cardtableStartAddress = getFieldValue("CompilerToVM::Data::cardtable_start_address", Long.class, "jbyte*"); 557 public final int cardtableShift = getFieldValue("CompilerToVM::Data::cardtable_shift", Integer.class, "int"); 558 559 /** 560 * This is the largest stack offset encodeable in an OopMapValue. Offsets larger than this will 561 * throw an exception during code installation. 562 */ 563 public final int maxOopMapStackOffset = getFieldValueWithAlternate("CompilerToVM::Data::_max_oop_map_stack_offset", "JVMCIRuntime::max_oop_map_stack_offset", Integer.class, "int"); 564 565 public final long safepointPollingAddress = getFieldValue("os::_polling_page", Long.class, "address"); 566 567 // G1 Collector Related Values. 568 569 public final int g1SATBQueueMarkingOffset = getConstant("G1ThreadLocalData::satb_mark_queue_active_offset", Integer.class); 570 public final int g1SATBQueueIndexOffset = getConstant("G1ThreadLocalData::satb_mark_queue_index_offset", Integer.class); 571 public final int g1SATBQueueBufferOffset = getConstant("G1ThreadLocalData::satb_mark_queue_buffer_offset", Integer.class); 572 public final int g1CardQueueIndexOffset = getConstant("G1ThreadLocalData::dirty_card_queue_index_offset", Integer.class); 573 public final int g1CardQueueBufferOffset = getConstant("G1ThreadLocalData::dirty_card_queue_buffer_offset", Integer.class); 574 575 public final int klassOffset = getFieldValue("java_lang_Class::_klass_offset", Integer.class, "int"); 576 public final int arrayKlassOffset = getFieldValue("java_lang_Class::_array_klass_offset", Integer.class, "int"); 577 578 public final int basicLockSize = getFieldValue("CompilerToVM::Data::sizeof_BasicLock", Integer.class, "int"); 579 public final int basicLockDisplacedHeaderOffset = getFieldOffset("BasicLock::_displaced_header", Integer.class, "markOop"); 580 581 public final int threadPollingPageOffset = getFieldOffset("Thread::_polling_page", Integer.class, "address", -1); 582 public final int threadAllocatedBytesOffset = getFieldOffset("Thread::_allocated_bytes", Integer.class, "jlong"); 583 584 public final int tlabRefillWasteIncrement = getFlag("TLABWasteIncrement", Integer.class); 585 586 private final int threadLocalAllocBufferStartOffset = getFieldOffset("ThreadLocalAllocBuffer::_start", Integer.class, "HeapWord*"); 587 private final int threadLocalAllocBufferEndOffset = getFieldOffset("ThreadLocalAllocBuffer::_end", Integer.class, "HeapWord*"); 588 private final int threadLocalAllocBufferTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_top", Integer.class, "HeapWord*"); 589 private final int threadLocalAllocBufferPfTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_pf_top", Integer.class, "HeapWord*"); 590 private final int threadLocalAllocBufferSlowAllocationsOffset = getFieldOffset("ThreadLocalAllocBuffer::_slow_allocations", Integer.class, "unsigned"); 591 private final int threadLocalAllocBufferFastRefillWasteOffset = getFieldOffset("ThreadLocalAllocBuffer::_fast_refill_waste", Integer.class, "unsigned"); 592 private final int threadLocalAllocBufferNumberOfRefillsOffset = getFieldOffset("ThreadLocalAllocBuffer::_number_of_refills", Integer.class, "unsigned"); 593 private final int threadLocalAllocBufferRefillWasteLimitOffset = getFieldOffset("ThreadLocalAllocBuffer::_refill_waste_limit", Integer.class, "size_t"); |