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