src/share/vm/code/relocInfo.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/code/relocInfo.cpp	Mon Oct 31 17:46:40 2016
--- new/src/share/vm/code/relocInfo.cpp	Mon Oct 31 17:46:40 2016

*** 563,580 **** --- 563,584 ---- void static_stub_Relocation::pack_data_to(CodeSection* dest) { short* p = (short*) dest->locs_end(); CodeSection* insts = dest->outer()->insts(); normalize_address(_static_call, insts); ! p = pack_1_int_to(p, scaled_offset(_static_call, insts->start())); ! jint is_aot = _is_aot ? 1 : 0; + p = pack_2_ints_to(p, scaled_offset(_static_call, insts->start()), is_aot); dest->set_locs_end((relocInfo*) p); } void static_stub_Relocation::unpack_data() { address base = binding()->section_start(CodeBuffer::SECT_INSTS); - jint offset = unpack_1_int(); + jint is_aot; + unpack_2_ints(offset, is_aot); _static_call = address_from_scaled_offset(offset, base); + _is_aot = (is_aot == 1); } void trampoline_stub_Relocation::pack_data_to(CodeSection* dest ) { short* p = (short*) dest->locs_end(); CodeSection* insts = dest->outer()->insts();
*** 794,811 **** --- 798,815 ---- CompiledIC* icache = CompiledIC_at(this); icache->set_to_clean(); } ! address opt_virtual_call_Relocation::static_stub(bool is_aot) { // search for the static stub who points back to this static call address static_call_addr = addr(); RelocIterator iter(code()); while (iter.next()) { if (iter.type() == relocInfo::static_stub_type) { static_stub_Relocation* stub_reloc = iter.static_stub_reloc(); ! if (stub_reloc->static_call() == static_call_addr && stub_reloc->is_aot() == is_aot) { return iter.addr(); } } } return NULL;
*** 830,852 **** --- 834,856 ---- _method_index = unpack_1_int(); } void static_call_Relocation::clear_inline_cache() { // Safe call site info ! CompiledStaticCall* handler = this->code()->compiledStaticCall_at(this); handler->set_to_clean(); } ! address static_call_Relocation::static_stub(bool is_aot) { // search for the static stub who points back to this static call address static_call_addr = addr(); RelocIterator iter(code()); while (iter.next()) { if (iter.type() == relocInfo::static_stub_type) { static_stub_Relocation* stub_reloc = iter.static_stub_reloc(); ! if (stub_reloc->static_call() == static_call_addr && stub_reloc->is_aot() == is_aot) { return iter.addr(); } } } return NULL;
*** 873,883 **** --- 877,887 ---- } void static_stub_Relocation::clear_inline_cache() { // Call stub is only used when calling the interpreted code. // It does not really need to be cleared, except that we want to clean out the methodoop. ! CompiledStaticCall::set_stub_to_clean(this); ! CompiledDirectStaticCall::set_stub_to_clean(this); } void external_word_Relocation::fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dest) { address target = _target;

src/share/vm/code/relocInfo.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File