MCPcopy Create free account
hub / github.com/async-profiler/async-profiler / resolveOffsets

Method resolveOffsets

src/vmStructs.cpp:440–566  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

438}
439
440void 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;

Callers

nothing calls this directly

Calls 2

findSymbolMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected