src/share/vm/oops/method.hpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/oops/method.hpp Thu Feb 18 15:25:08 2016
--- new/src/share/vm/oops/method.hpp Thu Feb 18 15:25:08 2016
*** 91,102 ****
--- 91,100 ----
#ifndef PRODUCT
int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging)
#endif
// Entry point for calling both from and to the interpreter.
address _i2i_entry; // All-args-on-stack calling convention
// Adapter blob (i2c/c2i) for this Method*. Set once when method is linked.
AdapterHandlerEntry* _adapter;
// Entry point for calling from compiled code, to compiled code if it exists
// or else the interpreter.
volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry()
// The entry point for calling both from and to compiled code is
// "_code->entry_point()". Because of tiered compilation and de-opt, this
*** 135,144 ****
--- 133,143 ----
void set_constMethod(ConstMethod* xconst) { _constMethod = xconst; }
static address make_adapters(methodHandle mh, TRAPS);
volatile address from_compiled_entry() const { return (address)OrderAccess::load_ptr_acquire(&_from_compiled_entry); }
+ volatile address from_compiled_entry_no_trampoline() const;
volatile address from_interpreted_entry() const{ return (address)OrderAccess::load_ptr_acquire(&_from_interpreted_entry); }
// access flag
AccessFlags access_flags() const { return _access_flags; }
void set_access_flags(AccessFlags flags) { _access_flags = flags; }
*** 429,443 ****
--- 428,450 ----
address verified_code_entry();
bool check_code() const; // Not inline to avoid circular ref
nmethod* volatile code() const { assert( check_code(), "" ); return (nmethod *)OrderAccess::load_ptr_acquire(&_code); }
void clear_code(); // Clear out any compiled code
static void set_code(methodHandle mh, nmethod* code);
- void set_adapter_entry(AdapterHandlerEntry* adapter) { _adapter = adapter; }
+ constMethod()->set_adapter_entry(adapter);
+ }
+ void update_adapter_trampoline(AdapterHandlerEntry* adapter) {
+ constMethod()->update_adapter_trampoline(adapter);
+ }
+
address get_i2c_entry();
address get_c2i_entry();
address get_c2i_unverified_entry();
! AdapterHandlerEntry* adapter() { return _adapter; }
! AdapterHandlerEntry* adapter() const {
+ return constMethod()->adapter();
+ }
// setup entry points
void link_method(const methodHandle& method, TRAPS);
// clear entry points. Used by sharing code
void unlink_method();
*** 463,473 ****
--- 470,487 ----
void set_itable_index(int index) { _vtable_index = itable_index_max - index; assert(valid_itable_index(), ""); }
// interpreter entry
address interpreter_entry() const { return _i2i_entry; }
// Only used when first initialize so we can set _i2i_entry and _from_interpreted_entry
! void set_interpreter_entry(address entry) { _i2i_entry = entry; _from_interpreted_entry = entry; }
+ if (_i2i_entry != entry) {
+ _i2i_entry = entry;
+ }
+ if (_from_interpreted_entry != entry) {
+ _from_interpreted_entry = entry;
+ }
+ }
// native function (used for native methods only)
enum {
native_bind_event_is_interesting = true
};
src/share/vm/oops/method.hpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File