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);
|