src/share/vm/aot/aotCodeHeap.cpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File hotspot Cdiff src/share/vm/aot/aotCodeHeap.cpp

src/share/vm/aot/aotCodeHeap.cpp

Print this page

        

*** 49,68 **** return symbol; } Klass* AOTCodeHeap::get_klass_from_got(const char* klass_name, int klass_len, const Method* method) { AOTKlassData* klass_data = (AOTKlassData*)_lib->load_symbol(klass_name); ! Klass* k = (Klass*)_metaspace_got[klass_data->_got_index]; if (k == NULL) { Thread* thread = Thread::current(); k = lookup_klass(klass_name, klass_len, method, thread); // Note, exceptions are cleared. if (k == NULL) { fatal("Shared file %s error: klass %s should be resolved already", _lib->name(), klass_name); vm_exit(1); } ! _metaspace_got[klass_data->_got_index] = k; } return k; } Klass* AOTCodeHeap::lookup_klass(const char* name, int len, const Method* method, Thread* thread) { --- 49,68 ---- return symbol; } Klass* AOTCodeHeap::get_klass_from_got(const char* klass_name, int klass_len, const Method* method) { AOTKlassData* klass_data = (AOTKlassData*)_lib->load_symbol(klass_name); ! Klass* k = (Klass*)_klasses_got[klass_data->_got_index]; if (k == NULL) { Thread* thread = Thread::current(); k = lookup_klass(klass_name, klass_len, method, thread); // Note, exceptions are cleared. if (k == NULL) { fatal("Shared file %s error: klass %s should be resolved already", _lib->name(), klass_name); vm_exit(1); } ! _klasses_got[klass_data->_got_index] = k; } return k; } Klass* AOTCodeHeap::lookup_klass(const char* name, int len, const Method* method, Thread* thread) {
*** 200,211 **** AOTLib::AOTLib(void* handle, const char* name, int dso_id) : _valid(true), _dl_handle(handle), _dso_id(dso_id) { _name = (const char*) strdup(name); // Verify that VM runs with the same parameters as AOT tool. ! _config = (AOTConfiguration*) load_symbol("JVM.config"); ! _header = (AOTHeader*) load_symbol("JVM.header"); verify_config(); if (!_valid && PrintAOT) { tty->print("%7d ", (int) tty->time_stamp().milliseconds()); --- 200,211 ---- AOTLib::AOTLib(void* handle, const char* name, int dso_id) : _valid(true), _dl_handle(handle), _dso_id(dso_id) { _name = (const char*) strdup(name); // Verify that VM runs with the same parameters as AOT tool. ! _config = (AOTConfiguration*) load_symbol("A.config"); ! _header = (AOTHeader*) load_symbol("A.header"); verify_config(); if (!_valid && PrintAOT) { tty->print("%7d ", (int) tty->time_stamp().milliseconds());
*** 222,256 **** _class_count = _lib->header()->_class_count; _method_count = _lib->header()->_method_count; // Collect metaspace info: names -> address in .got section ! _metaspace_names = (const char*) _lib->load_symbol("JVM.meta.names"); ! _method_metadata = (address) _lib->load_symbol("JVM.meth.metadata"); ! _methods_offsets = (address) _lib->load_symbol("JVM.methods.offsets"); ! _klasses_offsets = (address) _lib->load_symbol("JVM.kls.offsets"); ! _dependencies = (address) _lib->load_symbol("JVM.kls.dependencies"); ! _code_space = (address) _lib->load_symbol("JVM.text"); // First cell is number of elements. ! _metaspace_got = (Metadata**) _lib->load_symbol("JVM.meta.got"); ! _metaspace_got_size = _lib->header()->_metaspace_got_size; ! _metadata_got = (Metadata**) _lib->load_symbol("JVM.metadata.got"); _metadata_got_size = _lib->header()->_metadata_got_size; ! _oop_got = (oop*) _lib->load_symbol("JVM.oop.got"); _oop_got_size = _lib->header()->_oop_got_size; // Collect stubs info ! _stubs_offsets = (int*) _lib->load_symbol("JVM.stubs.offsets"); // code segments table ! _code_segments = (address) _lib->load_symbol("JVM.code.segments"); // method state ! _method_state = (jlong*) _lib->load_symbol("JVM.meth.state"); // Create a table for mapping classes _classes = NEW_C_HEAP_ARRAY(AOTClass, _class_count, mtCode); memset(_classes, 0, _class_count * sizeof(AOTClass)); --- 222,256 ---- _class_count = _lib->header()->_class_count; _method_count = _lib->header()->_method_count; // Collect metaspace info: names -> address in .got section ! _metaspace_names = (const char*) _lib->load_symbol("A.meta.names"); ! _method_metadata = (address) _lib->load_symbol("A.meth.metadata"); ! _methods_offsets = (address) _lib->load_symbol("A.meth.offsets"); ! _klasses_offsets = (address) _lib->load_symbol("A.kls.offsets"); ! _dependencies = (address) _lib->load_symbol("A.kls.dependencies"); ! _code_space = (address) _lib->load_symbol("A.text"); // First cell is number of elements. ! _klasses_got = (Metadata**) _lib->load_symbol("A.kls.got"); ! _klasses_got_size = _lib->header()->_klasses_got_size; ! _metadata_got = (Metadata**) _lib->load_symbol("A.meta.got"); _metadata_got_size = _lib->header()->_metadata_got_size; ! _oop_got = (oop*) _lib->load_symbol("A.oop.got"); _oop_got_size = _lib->header()->_oop_got_size; // Collect stubs info ! _stubs_offsets = (int*) _lib->load_symbol("A.stubs.offsets"); // code segments table ! _code_segments = (address) _lib->load_symbol("A.code.segments"); // method state ! _method_state = (jlong*) _lib->load_symbol("A.meth.state"); // Create a table for mapping classes _classes = NEW_C_HEAP_ARRAY(AOTClass, _class_count, mtCode); memset(_classes, 0, _class_count * sizeof(AOTClass));
*** 340,351 **** const Klass* arr_klass = Universe::typeArrayKlassObj(t); AOTKlassData* klass_data = (AOTKlassData*) os::dll_lookup(_lib->dl_handle(), arr_klass->signature_name()); if (klass_data != NULL) { // Set both GOT cells, resolved and initialized klass pointers. // _got_index points to second cell - resolved klass pointer. ! _metaspace_got[klass_data->_got_index-1] = (Metadata*)arr_klass; // Initialized ! _metaspace_got[klass_data->_got_index ] = (Metadata*)arr_klass; // Resolved if (PrintAOT) { tty->print_cr("[Found %s in %s]", arr_klass->internal_name(), _lib->name()); } } } --- 340,351 ---- const Klass* arr_klass = Universe::typeArrayKlassObj(t); AOTKlassData* klass_data = (AOTKlassData*) os::dll_lookup(_lib->dl_handle(), arr_klass->signature_name()); if (klass_data != NULL) { // Set both GOT cells, resolved and initialized klass pointers. // _got_index points to second cell - resolved klass pointer. ! _klasses_got[klass_data->_got_index-1] = (Metadata*)arr_klass; // Initialized ! _klasses_got[klass_data->_got_index ] = (Metadata*)arr_klass; // Resolved if (PrintAOT) { tty->print_cr("[Found %s in %s]", arr_klass->internal_name(), _lib->name()); } } }
*** 713,723 **** log_trace(aot, class, load)("found %s in %s for classloader %p tid=" INTPTR_FORMAT, ik->internal_name(), _lib->name(), ik->class_loader_data(), p2i(thread)); aot_class->_classloader = ik->class_loader_data(); // Set klass's Resolve (second) got cell. ! _metaspace_got[klass_data->_got_index] = ik; // Initialize global symbols of the DSO to the corresponding VM symbol values. link_global_lib_symbols(); int methods_offset = klass_data->_compiled_methods_offset; --- 713,723 ---- log_trace(aot, class, load)("found %s in %s for classloader %p tid=" INTPTR_FORMAT, ik->internal_name(), _lib->name(), ik->class_loader_data(), p2i(thread)); aot_class->_classloader = ik->class_loader_data(); // Set klass's Resolve (second) got cell. ! _klasses_got[klass_data->_got_index] = ik; // Initialize global symbols of the DSO to the corresponding VM symbol values. link_global_lib_symbols(); int methods_offset = klass_data->_compiled_methods_offset;
*** 821,836 **** AOTCompiledMethod* aot = _code_to_aot[index]._aot; aot->do_oops(f); } } ! // Scan only metaspace_got cells which should have only Klass*, // metadata_got cells are scanned only for alive AOT methods // by AOTCompiledMethod::metadata_do(). void AOTCodeHeap::got_metadata_do(void f(Metadata*)) { ! for (int i = 1; i < _metaspace_got_size; i++) { ! Metadata** p = &_metaspace_got[i]; Metadata* md = *p; if (md == NULL) continue; // skip non-oops if (Metaspace::contains(md)) { f(md); } else { --- 821,836 ---- AOTCompiledMethod* aot = _code_to_aot[index]._aot; aot->do_oops(f); } } ! // Scan only klasses_got cells which should have only Klass*, // metadata_got cells are scanned only for alive AOT methods // by AOTCompiledMethod::metadata_do(). void AOTCodeHeap::got_metadata_do(void f(Metadata*)) { ! for (int i = 1; i < _klasses_got_size; i++) { ! Metadata** p = &_klasses_got[i]; Metadata* md = *p; if (md == NULL) continue; // skip non-oops if (Metaspace::contains(md)) { f(md); } else {
src/share/vm/aot/aotCodeHeap.cpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File