< prev index next >

src/share/vm/jvmci/jvmciCodeInstaller.cpp

Print this page




 478     _buffer = NEW_C_HEAP_ARRAY(char, bytes, mtInternal);
 479   }
 480   _size = bytes;
 481 }
 482 
 483 JVMCIEnv::CodeInstallResult CodeInstaller::gather_metadata(Handle target, Handle compiled_code, CodeMetadata& metadata, TRAPS) {
 484   CodeBuffer buffer("JVMCI Compiler CodeBuffer for Metadata");
 485   jobject compiled_code_obj = JNIHandles::make_local(compiled_code());
 486   initialize_dependencies(JNIHandles::resolve(compiled_code_obj), NULL, CHECK_OK);
 487 
 488   // Get instructions and constants CodeSections early because we need it.
 489   _instructions = buffer.insts();
 490   _constants = buffer.consts();
 491 
 492   initialize_fields(target(), JNIHandles::resolve(compiled_code_obj), CHECK_OK);
 493   JVMCIEnv::CodeInstallResult result = initialize_buffer(buffer, CHECK_OK);
 494   if (result != JVMCIEnv::ok) {
 495     return result;
 496   }
 497 
 498   _debug_recorder->pcs_size(); // ehm, create the sentinel record
 499 
 500   assert(_debug_recorder->pcs_length() >= 2, "must be at least 2");
 501 
 502   metadata.set_pc_desc(_debug_recorder->pcs(), _debug_recorder->pcs_length());
 503   metadata.set_scopes(_debug_recorder->stream()->buffer(), _debug_recorder->data_size());
 504   metadata.set_exception_table(&_exception_handler_table);
 505 
 506   RelocBuffer* reloc_buffer = metadata.get_reloc_buffer();
 507 
 508   reloc_buffer->ensure_size(buffer.total_relocation_size());
 509   size_t size = (size_t) buffer.copy_relocations_to(reloc_buffer->begin(), (CodeBuffer::csize_t) reloc_buffer->size(), true);
 510   reloc_buffer->set_size(size);
 511   return JVMCIEnv::ok;
 512 }
 513 
 514 // constructor used to create a method
 515 JVMCIEnv::CodeInstallResult CodeInstaller::install(JVMCICompiler* compiler, Handle target, Handle compiled_code, CodeBlob*& cb, Handle installed_code, Handle speculation_log, TRAPS) {
 516   CodeBuffer buffer("JVMCI Compiler CodeBuffer");
 517   jobject compiled_code_obj = JNIHandles::make_local(compiled_code());
 518   OopRecorder* recorder = new OopRecorder(&_arena, true);




 478     _buffer = NEW_C_HEAP_ARRAY(char, bytes, mtInternal);
 479   }
 480   _size = bytes;
 481 }
 482 
 483 JVMCIEnv::CodeInstallResult CodeInstaller::gather_metadata(Handle target, Handle compiled_code, CodeMetadata& metadata, TRAPS) {
 484   CodeBuffer buffer("JVMCI Compiler CodeBuffer for Metadata");
 485   jobject compiled_code_obj = JNIHandles::make_local(compiled_code());
 486   initialize_dependencies(JNIHandles::resolve(compiled_code_obj), NULL, CHECK_OK);
 487 
 488   // Get instructions and constants CodeSections early because we need it.
 489   _instructions = buffer.insts();
 490   _constants = buffer.consts();
 491 
 492   initialize_fields(target(), JNIHandles::resolve(compiled_code_obj), CHECK_OK);
 493   JVMCIEnv::CodeInstallResult result = initialize_buffer(buffer, CHECK_OK);
 494   if (result != JVMCIEnv::ok) {
 495     return result;
 496   }
 497 
 498   _debug_recorder->pcs_size(); // create the sentinel record
 499 
 500   assert(_debug_recorder->pcs_length() >= 2, "must be at least 2");
 501 
 502   metadata.set_pc_desc(_debug_recorder->pcs(), _debug_recorder->pcs_length());
 503   metadata.set_scopes(_debug_recorder->stream()->buffer(), _debug_recorder->data_size());
 504   metadata.set_exception_table(&_exception_handler_table);
 505 
 506   RelocBuffer* reloc_buffer = metadata.get_reloc_buffer();
 507 
 508   reloc_buffer->ensure_size(buffer.total_relocation_size());
 509   size_t size = (size_t) buffer.copy_relocations_to(reloc_buffer->begin(), (CodeBuffer::csize_t) reloc_buffer->size(), true);
 510   reloc_buffer->set_size(size);
 511   return JVMCIEnv::ok;
 512 }
 513 
 514 // constructor used to create a method
 515 JVMCIEnv::CodeInstallResult CodeInstaller::install(JVMCICompiler* compiler, Handle target, Handle compiled_code, CodeBlob*& cb, Handle installed_code, Handle speculation_log, TRAPS) {
 516   CodeBuffer buffer("JVMCI Compiler CodeBuffer");
 517   jobject compiled_code_obj = JNIHandles::make_local(compiled_code());
 518   OopRecorder* recorder = new OopRecorder(&_arena, true);


< prev index next >