src/hotspot/share/jvmci/jvmciCodeInstaller.hpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File open Cdiff src/hotspot/share/jvmci/jvmciCodeInstaller.hpp

src/hotspot/share/jvmci/jvmciCodeInstaller.hpp

Print this page

        

*** 22,33 **** --- 22,35 ---- */ #ifndef SHARE_JVMCI_JVMCICODEINSTALLER_HPP #define SHARE_JVMCI_JVMCICODEINSTALLER_HPP + #include "jvmci/jvmci.hpp" #include "jvmci/jvmciCompiler.hpp" #include "jvmci/jvmciEnv.hpp" + #include "jvmci/jvmciJavaClasses.hpp" #include "code/nativeInst.hpp" #if INCLUDE_AOT class RelocBuffer : public StackObj { enum { stack_size = 1024 };
*** 42,65 **** size_t _size; char _static_buffer[stack_size]; char *_buffer; }; class AOTOopRecorder : public OopRecorder { public: ! AOTOopRecorder(Arena* arena = NULL, bool deduplicate = false); virtual int find_index(Metadata* h); virtual int find_index(jobject h); int nr_meta_refs() const; jobject meta_element(int pos) const; private: void record_meta_ref(jobject ref, int index); GrowableArray<jobject>* _meta_refs; }; class CodeMetadata { public: CodeMetadata() {} --- 44,72 ---- size_t _size; char _static_buffer[stack_size]; char *_buffer; }; + class CodeInstaller; + class AOTOopRecorder : public OopRecorder { public: ! AOTOopRecorder(CodeInstaller* code_inst, Arena* arena = NULL, bool deduplicate = false); virtual int find_index(Metadata* h); virtual int find_index(jobject h); int nr_meta_refs() const; jobject meta_element(int pos) const; private: void record_meta_ref(jobject ref, int index); GrowableArray<jobject>* _meta_refs; + + CodeInstaller* _code_inst; }; + #endif // INCLUDE_AOT class CodeMetadata { public: CodeMetadata() {}
*** 69,81 **** int get_nr_pc_desc() const { return _nr_pc_desc; } u_char* get_scopes_desc() const { return _scopes_desc; } int get_scopes_size() const { return _nr_scopes_desc; } RelocBuffer* get_reloc_buffer() { return &_reloc_buffer; } - AOTOopRecorder* get_oop_recorder() { return _oop_recorder; } ExceptionHandlerTable* get_exception_table() { return _exception_table; } void set_pc_desc(PcDesc* desc, int count) { _pc_desc = desc; --- 76,89 ---- int get_nr_pc_desc() const { return _nr_pc_desc; } u_char* get_scopes_desc() const { return _scopes_desc; } int get_scopes_size() const { return _nr_scopes_desc; } + #if INCLUDE_AOT RelocBuffer* get_reloc_buffer() { return &_reloc_buffer; } AOTOopRecorder* get_oop_recorder() { return _oop_recorder; } + #endif ExceptionHandlerTable* get_exception_table() { return _exception_table; } void set_pc_desc(PcDesc* desc, int count) { _pc_desc = desc;
*** 85,97 **** --- 93,107 ---- void set_scopes(u_char* scopes, int size) { _scopes_desc = scopes; _nr_scopes_desc = size; } + #if INCLUDE_AOT void set_oop_recorder(AOTOopRecorder* recorder) { _oop_recorder = recorder; } + #endif void set_exception_table(ExceptionHandlerTable* table) { _exception_table = table; }
*** 101,115 **** int _nr_pc_desc; u_char* _scopes_desc; int _nr_scopes_desc; RelocBuffer _reloc_buffer; AOTOopRecorder* _oop_recorder; ExceptionHandlerTable* _exception_table; }; - #endif // INCLUDE_AOT /* * This class handles the conversion from a InstalledCode to a CodeBlob or an nmethod. */ class CodeInstaller : public StackObj { --- 111,126 ---- int _nr_pc_desc; u_char* _scopes_desc; int _nr_scopes_desc; + #if INCLUDE_AOT RelocBuffer _reloc_buffer; AOTOopRecorder* _oop_recorder; + #endif ExceptionHandlerTable* _exception_table; }; /* * This class handles the conversion from a InstalledCode to a CodeBlob or an nmethod. */ class CodeInstaller : public StackObj {
*** 141,168 **** INLINE_CONTIGUOUS_ALLOCATION_SUPPORTED = 23, INVOKE_INVALID = -1 }; Arena _arena; - jobject _data_section_handle; - jobject _data_section_patches_handle; - jobject _sites_handle; CodeOffsets _offsets; - jobject _code_handle; jint _code_size; jint _total_frame_size; jint _orig_pc_offset; jint _parameter_count; jint _constants_size; - #ifndef PRODUCT - jobject _comments_handle; - #endif bool _has_wide_vector; - jobject _word_kind_handle; MarkId _next_call_type; address _invoke_mark_pc; CodeSection* _instructions; --- 152,181 ---- INLINE_CONTIGUOUS_ALLOCATION_SUPPORTED = 23, INVOKE_INVALID = -1 }; Arena _arena; + JVMCIEnv* _jvmci_env; + + JVMCIPrimitiveArray _data_section_handle; + JVMCIObjectArray _data_section_patches_handle; + JVMCIObjectArray _sites_handle; + #ifndef PRODUCT + JVMCIObjectArray _comments_handle; + #endif + JVMCIPrimitiveArray _code_handle; + JVMCIObject _word_kind_handle; CodeOffsets _offsets; jint _code_size; jint _total_frame_size; jint _orig_pc_offset; jint _parameter_count; jint _constants_size; bool _has_wide_vector; MarkId _next_call_type; address _invoke_mark_pc; CodeSection* _instructions;
*** 180,255 **** static ConstantIntValue* _int_0_scope_value; static ConstantIntValue* _int_1_scope_value; static ConstantIntValue* _int_2_scope_value; static LocationValue* _illegal_value; ! jint pd_next_offset(NativeInstruction* inst, jint pc_offset, Handle method, TRAPS); ! void pd_patch_OopConstant(int pc_offset, Handle constant, TRAPS); ! void pd_patch_MetaspaceConstant(int pc_offset, Handle constant, TRAPS); ! void pd_patch_DataSectionReference(int pc_offset, int data_offset, TRAPS); ! void pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, TRAPS); ! void pd_relocate_JavaMethod(CodeBuffer &cbuf, Handle method, jint pc_offset, TRAPS); ! void pd_relocate_poll(address pc, jint mark, TRAPS); ! ! objArrayOop sites(); ! arrayOop code(); ! arrayOop data_section(); ! objArrayOop data_section_patches(); #ifndef PRODUCT ! objArrayOop comments(); #endif ! ! oop word_kind(); public: ! CodeInstaller(bool immutable_pic_compilation) : _arena(mtCompiler), _immutable_pic_compilation(immutable_pic_compilation) {} #if INCLUDE_AOT ! JVMCIEnv::CodeInstallResult gather_metadata(Handle target, Handle compiled_code, CodeMetadata& metadata, TRAPS); #endif ! JVMCIEnv::CodeInstallResult install(JVMCICompiler* compiler, Handle target, Handle compiled_code, CodeBlob*& cb, Handle installed_code, Handle speculation_log, TRAPS); static address runtime_call_target_address(oop runtime_call); ! static VMReg get_hotspot_reg(jint jvmciRegisterNumber, TRAPS); static bool is_general_purpose_reg(VMReg hotspotRegister); const OopMapSet* oopMapSet() const { return _debug_recorder->_oopmaps; } protected: ! Location::Type get_oop_type(Thread* thread, Handle value); ! ScopeValue* get_scope_value(Handle value, BasicType type, GrowableArray<ScopeValue*>* objects, ScopeValue* &second, TRAPS); ! MonitorValue* get_monitor_value(Handle value, GrowableArray<ScopeValue*>* objects, TRAPS); ! void* record_metadata_reference(CodeSection* section, address dest, Handle constant, TRAPS); #ifdef _LP64 ! narrowKlass record_narrow_metadata_reference(CodeSection* section, address dest, Handle constant, TRAPS); #endif // extract the fields of the HotSpotCompiledCode ! void initialize_fields(oop target, oop target_method, TRAPS); ! void initialize_dependencies(oop target_method, OopRecorder* oop_recorder, TRAPS); ! int estimate_stubs_size(TRAPS); // perform data and call relocation on the CodeBuffer ! JVMCIEnv::CodeInstallResult initialize_buffer(CodeBuffer& buffer, bool check_size, TRAPS); ! void assumption_NoFinalizableSubclass(Thread* thread, Handle assumption); ! void assumption_ConcreteSubtype(Thread* thread, Handle assumption); ! void assumption_LeafType(Thread* thread, Handle assumption); ! void assumption_ConcreteMethod(Thread* thread, Handle assumption); ! void assumption_CallSiteTargetValue(Thread* thread, Handle assumption); ! ! void site_Safepoint(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS); ! void site_Infopoint(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS); ! void site_Call(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS); ! void site_DataPatch(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS); ! void site_Mark(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS); ! void site_ExceptionHandler(jint pc_offset, Handle site); ! OopMap* create_oop_map(Handle debug_info, TRAPS); /** * Specifies the level of detail to record for a scope. */ enum ScopeMode { --- 193,280 ---- static ConstantIntValue* _int_0_scope_value; static ConstantIntValue* _int_1_scope_value; static ConstantIntValue* _int_2_scope_value; static LocationValue* _illegal_value; ! jint pd_next_offset(NativeInstruction* inst, jint pc_offset, JVMCIObject method, JVMCI_TRAPS); ! void pd_patch_OopConstant(int pc_offset, JVMCIObject constant, JVMCI_TRAPS); ! void pd_patch_MetaspaceConstant(int pc_offset, JVMCIObject constant, JVMCI_TRAPS); ! void pd_patch_DataSectionReference(int pc_offset, int data_offset, JVMCI_TRAPS); ! void pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, JVMCI_TRAPS); ! void pd_relocate_JavaMethod(CodeBuffer &cbuf, JVMCIObject method, jint pc_offset, JVMCI_TRAPS); ! void pd_relocate_poll(address pc, jint mark, JVMCI_TRAPS); ! ! JVMCIObjectArray sites() { return _sites_handle; } ! JVMCIPrimitiveArray code() { return _code_handle; } ! JVMCIPrimitiveArray data_section() { return _data_section_handle; } ! JVMCIObjectArray data_section_patches() { return _data_section_patches_handle; } #ifndef PRODUCT ! JVMCIObjectArray comments() { return _comments_handle; } #endif ! JVMCIObject word_kind() { return _word_kind_handle; } public: ! CodeInstaller(JVMCIEnv* jvmci_env, bool immutable_pic_compilation) : _arena(mtCompiler), _jvmci_env(jvmci_env), _immutable_pic_compilation(immutable_pic_compilation) {} #if INCLUDE_AOT ! JVMCI::CodeInstallResult gather_metadata(JVMCIObject target, JVMCIObject compiled_code, CodeMetadata& metadata, JVMCI_TRAPS); #endif ! JVMCI::CodeInstallResult install(JVMCICompiler* compiler, ! JVMCIObject target, ! JVMCIObject compiled_code, ! CodeBlob*& cb, ! JVMCIObject installed_code, ! FailedSpeculation** failed_speculations, ! char* speculations, ! int speculations_len, ! JVMCI_TRAPS); ! ! JVMCIEnv* jvmci_env() { return _jvmci_env; } ! JVMCIRuntime* runtime() { return _jvmci_env->runtime(); } static address runtime_call_target_address(oop runtime_call); ! static VMReg get_hotspot_reg(jint jvmciRegisterNumber, JVMCI_TRAPS); static bool is_general_purpose_reg(VMReg hotspotRegister); const OopMapSet* oopMapSet() const { return _debug_recorder->_oopmaps; } protected: ! Location::Type get_oop_type(JVMCIObject value); ! ScopeValue* get_scope_value(JVMCIObject value, BasicType type, GrowableArray<ScopeValue*>* objects, ScopeValue* &second, JVMCI_TRAPS); ! MonitorValue* get_monitor_value(JVMCIObject value, GrowableArray<ScopeValue*>* objects, JVMCI_TRAPS); ! void* record_metadata_reference(CodeSection* section, address dest, JVMCIObject constant, JVMCI_TRAPS); #ifdef _LP64 ! narrowKlass record_narrow_metadata_reference(CodeSection* section, address dest, JVMCIObject constant, JVMCI_TRAPS); #endif // extract the fields of the HotSpotCompiledCode ! void initialize_fields(JVMCIObject target, JVMCIObject compiled_code, JVMCI_TRAPS); ! void initialize_dependencies(JVMCIObject compiled_code, OopRecorder* oop_recorder, JVMCI_TRAPS); ! int estimate_stubs_size(JVMCI_TRAPS); // perform data and call relocation on the CodeBuffer ! JVMCI::CodeInstallResult initialize_buffer(CodeBuffer& buffer, bool check_size, JVMCI_TRAPS); ! void assumption_NoFinalizableSubclass(JVMCIObject assumption); ! void assumption_ConcreteSubtype(JVMCIObject assumption); ! void assumption_LeafType(JVMCIObject assumption); ! void assumption_ConcreteMethod(JVMCIObject assumption); ! void assumption_CallSiteTargetValue(JVMCIObject assumption, JVMCI_TRAPS); ! ! void site_Safepoint(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS); ! void site_Infopoint(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS); ! void site_Call(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS); ! void site_DataPatch(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS); ! void site_Mark(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS); ! void site_ExceptionHandler(jint pc_offset, JVMCIObject site); ! OopMap* create_oop_map(JVMCIObject debug_info, JVMCI_TRAPS); ! ! VMReg getVMRegFromLocation(JVMCIObject location, int total_frame_size, JVMCI_TRAPS); /** * Specifies the level of detail to record for a scope. */ enum ScopeMode {
*** 258,282 **** // Record a method, bci and JVM frame state FullFrame }; int map_jvmci_bci(int bci); ! void record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, bool return_oop, TRAPS); ! void record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, TRAPS) { ! record_scope(pc_offset, debug_info, scope_mode, false /* return_oop */, THREAD); } ! void record_scope(jint pc_offset, Handle position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, bool return_oop, TRAPS); ! void record_object_value(ObjectValue* sv, Handle value, GrowableArray<ScopeValue*>* objects, TRAPS); ! GrowableArray<ScopeValue*>* record_virtual_objects(Handle debug_info, TRAPS); int estimateStubSpace(int static_call_stubs); }; - /** - * Gets the Method metaspace object from a HotSpotResolvedJavaMethodImpl Java object. - */ - Method* getMethodFromHotSpotMethod(oop hotspot_method); - - - #endif // SHARE_JVMCI_JVMCICODEINSTALLER_HPP --- 283,301 ---- // Record a method, bci and JVM frame state FullFrame }; int map_jvmci_bci(int bci); ! ! void record_scope(jint pc_offset, JVMCIObject debug_info, ScopeMode scope_mode, bool return_oop, JVMCI_TRAPS); ! void record_scope(jint pc_offset, JVMCIObject debug_info, ScopeMode scope_mode, JVMCI_TRAPS) { ! record_scope(pc_offset, debug_info, scope_mode, false /* return_oop */, JVMCIENV); } ! void record_scope(jint pc_offset, JVMCIObject position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, bool return_oop, JVMCI_TRAPS); ! void record_object_value(ObjectValue* sv, JVMCIObject value, GrowableArray<ScopeValue*>* objects, JVMCI_TRAPS); ! GrowableArray<ScopeValue*>* record_virtual_objects(JVMCIObject debug_info, JVMCI_TRAPS); int estimateStubSpace(int static_call_stubs); }; #endif // SHARE_JVMCI_JVMCICODEINSTALLER_HPP
src/hotspot/share/jvmci/jvmciCodeInstaller.hpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File