| 438 | } |
| 439 | |
| 440 | void VMStructs::resolveOffsets() { |
| 441 | if (VM::isOpenJ9() || VM::isZing()) { |
| 442 | return; |
| 443 | } |
| 444 | |
| 445 | JVMFlag* cjc = JVMFlag::find("CheckJNICalls"); |
| 446 | if (cjc != NULL && !cjc->get() && _klass_offset_addr != NULL) { |
| 447 | // Create a synthetic fieldID to access VMKlass from jclass instance |
| 448 | _klass = (jfieldID)(uintptr_t)(*_klass_offset_addr << 2 | 2); |
| 449 | } |
| 450 | |
| 451 | JVMFlag* ccp = JVMFlag::find("UseCompressedClassPointers"); |
| 452 | if (ccp != NULL && ccp->get() && _narrow_klass_base_addr != NULL && _narrow_klass_shift_addr != NULL) { |
| 453 | _narrow_klass_base = *_narrow_klass_base_addr; |
| 454 | _narrow_klass_shift = *_narrow_klass_shift_addr; |
| 455 | } |
| 456 | |
| 457 | JVMFlag* coh = JVMFlag::find("UseCompactObjectHeaders"); |
| 458 | if (coh != NULL && coh->get()) { |
| 459 | _compact_object_headers = true; |
| 460 | } |
| 461 | |
| 462 | _has_class_names = _klass_name_offset >= 0 |
| 463 | && (_compact_object_headers ? (_markword_klass_shift >= 0 && _markword_monitor_value == MONITOR_BIT) |
| 464 | : _oop_klass_offset >= 0) |
| 465 | && (_symbol_length_offset >= 0 || _symbol_length_and_refcount_offset >= 0) |
| 466 | && _symbol_body_offset >= 0; |
| 467 | |
| 468 | _has_method_structs = _jmethod_ids_offset >= 0 |
| 469 | && _nmethod_method_offset >= 0 |
| 470 | && _nmethod_entry_offset != -1 |
| 471 | && _nmethod_state_offset >= 0 |
| 472 | && _method_constmethod_offset >= 0 |
| 473 | && _method_code_offset >= 0 |
| 474 | && _constmethod_constants_offset >= 0 |
| 475 | && _constmethod_idnum_offset >= 0 |
| 476 | && _constmethod_size >= 0 |
| 477 | && _pool_holder_offset >= 0; |
| 478 | |
| 479 | _has_compiler_structs = _comp_env_offset >= 0 |
| 480 | && _comp_task_offset >= 0 |
| 481 | && _comp_method_offset >= 0; |
| 482 | |
| 483 | if (VM::hotspot_version() == 8) { |
| 484 | _lock_func = (LockFunc)_libjvm->findSymbol("_ZN7Monitor28lock_without_safepoint_checkEv"); |
| 485 | _unlock_func = (LockFunc)_libjvm->findSymbol("_ZN7Monitor6unlockEv"); |
| 486 | _has_class_loader_data = _class_loader_data_offset >= 0 |
| 487 | && _class_loader_data_next_offset == sizeof(uintptr_t) * 8 + 8 |
| 488 | && _methods_offset >= 0 |
| 489 | && _klass != NULL |
| 490 | && _lock_func != NULL |
| 491 | && _unlock_func != NULL; |
| 492 | } |
| 493 | |
| 494 | #if defined(__x86_64__) || defined(__i386__) |
| 495 | _interpreter_frame_bcp_offset = VM::hotspot_version() >= 11 ? -8 : VM::hotspot_version() == 8 ? -7 : 0; |
| 496 | #elif defined(__aarch64__) |
| 497 | _interpreter_frame_bcp_offset = VM::hotspot_version() >= 11 ? -9 : VM::hotspot_version() == 8 ? -7 : 0; |
nothing calls this directly
no test coverage detected