< prev index next >
src/share/vm/code/nmethod.hpp
Print this page
@@ -124,10 +124,16 @@
// Shared fields for all nmethod's
Method* _method;
int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method
jmethodID _jmethod_id; // Cache of method()->jmethod_id()
+#if INCLUDE_JVMCI
+ // Needed to keep nmethods alive that are not the default nmethod for the associated Method.
+ oop _jvmci_installed_code;
+ oop _speculation_log;
+#endif
+
// To support simple linked-list chaining of nmethods:
nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head
union {
// Used by G1 to chain nmethods.
@@ -271,11 +277,16 @@
int frame_size,
OopMapSet* oop_maps,
ExceptionHandlerTable* handler_table,
ImplicitExceptionTable* nul_chk_table,
AbstractCompiler* compiler,
- int comp_level);
+ int comp_level
+#if INCLUDE_JVMCI
+ , Handle installed_code,
+ Handle speculation_log
+#endif
+ );
// helper methods
void* operator new(size_t size, int nmethod_size, int comp_level) throw();
const char* reloc_string_for(u_char* begin, u_char* end);
@@ -307,11 +318,16 @@
int frame_size,
OopMapSet* oop_maps,
ExceptionHandlerTable* handler_table,
ImplicitExceptionTable* nul_chk_table,
AbstractCompiler* compiler,
- int comp_level);
+ int comp_level
+#if INCLUDE_JVMCI
+ , Handle installed_code = Handle(),
+ Handle speculation_log = Handle()
+#endif
+ );
static nmethod* new_native_nmethod(methodHandle method,
int compile_id,
CodeBuffer *code_buffer,
int vep_offset,
@@ -330,10 +346,11 @@
bool is_java_method() const { return !method()->is_native(); }
bool is_native_method() const { return method()->is_native(); }
bool is_osr_method() const { return _entry_bci != InvocationEntryBci; }
bool is_compiled_by_c1() const;
+ bool is_compiled_by_jvmci() const;
bool is_compiled_by_c2() const;
bool is_compiled_by_shark() const;
// boundaries for different parts
address consts_begin () const { return header_begin() + _consts_offset ; }
@@ -580,10 +597,18 @@
bool can_convert_to_zombie();
// Evolution support. We make old (discarded) compiled methods point to new Method*s.
void set_method(Method* method) { _method = method; }
+#if INCLUDE_JVMCI
+ oop jvmci_installed_code() { return _jvmci_installed_code ; }
+ char* jvmci_installed_code_name(char* buf, size_t buflen);
+ void set_jvmci_installed_code(oop installed_code) { _jvmci_installed_code = installed_code; }
+ oop speculation_log() { return _speculation_log ; }
+ void set_speculation_log(oop speculation_log) { _speculation_log = speculation_log; }
+#endif
+
// GC support
void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);
// The parallel versions are used by G1.
bool do_unloading_parallel(BoolObjectClosure* is_alive, bool unloading_occurred);
void do_unloading_parallel_postponed(BoolObjectClosure* is_alive, bool unloading_occurred);
@@ -637,11 +662,11 @@
void copy_scopes_data(address buffer, int size);
// Deopt
// Return true is the PC is one would expect if the frame is being deopted.
bool is_deopt_pc (address pc) { return is_deopt_entry(pc) || is_deopt_mh_entry(pc); }
- bool is_deopt_entry (address pc) { return pc == deopt_handler_begin(); }
+ bool is_deopt_entry (address pc);
bool is_deopt_mh_entry(address pc) { return pc == deopt_mh_handler_begin(); }
// Accessor/mutator for the original pc of a frame before a frame was deopted.
address get_original_pc(const frame* fr) { return *orig_pc_addr(fr); }
void set_original_pc(const frame* fr, address pc) { *orig_pc_addr(fr) = pc; }
< prev index next >