equal
deleted
inserted
replaced
305 address ptr = (address)(_pc_start + i); |
305 address ptr = (address)(_pc_start + i); |
306 int a_byte = (*ptr) & 0xFF; |
306 int a_byte = (*ptr) & 0xFF; |
307 assert(a_byte == *start++, "should be the same code"); |
307 assert(a_byte == *start++, "should be the same code"); |
308 } |
308 } |
309 #endif |
309 #endif |
310 } else if (_id == load_mirror_id) { |
310 } else if (_id == load_mirror_id || _id == load_appendix_id) { |
311 // produce a copy of the load mirror instruction for use by the being initialized case |
311 // produce a copy of the load mirror instruction for use by the being initialized case |
312 #ifdef ASSERT |
312 #ifdef ASSERT |
313 address start = __ pc(); |
313 address start = __ pc(); |
314 #endif |
314 #endif |
315 AddressLiteral addrlit(NULL, oop_Relocation::spec(_index)); |
315 AddressLiteral addrlit(NULL, oop_Relocation::spec(_index)); |
382 relocInfo::relocType reloc_type = relocInfo::none; |
382 relocInfo::relocType reloc_type = relocInfo::none; |
383 switch (_id) { |
383 switch (_id) { |
384 case access_field_id: target = Runtime1::entry_for(Runtime1::access_field_patching_id); break; |
384 case access_field_id: target = Runtime1::entry_for(Runtime1::access_field_patching_id); break; |
385 case load_klass_id: target = Runtime1::entry_for(Runtime1::load_klass_patching_id); reloc_type = relocInfo::metadata_type; break; |
385 case load_klass_id: target = Runtime1::entry_for(Runtime1::load_klass_patching_id); reloc_type = relocInfo::metadata_type; break; |
386 case load_mirror_id: target = Runtime1::entry_for(Runtime1::load_mirror_patching_id); reloc_type = relocInfo::oop_type; break; |
386 case load_mirror_id: target = Runtime1::entry_for(Runtime1::load_mirror_patching_id); reloc_type = relocInfo::oop_type; break; |
|
387 case load_appendix_id: target = Runtime1::entry_for(Runtime1::load_appendix_patching_id); reloc_type = relocInfo::oop_type; break; |
387 default: ShouldNotReachHere(); |
388 default: ShouldNotReachHere(); |
388 } |
389 } |
389 __ bind(call_patch); |
390 __ bind(call_patch); |
390 |
391 |
391 if (CommentedAssembly) { |
392 if (CommentedAssembly) { |
395 __ delayed()->nop(); |
396 __ delayed()->nop(); |
396 assert(_patch_info_offset == (patch_info_pc - __ pc()), "must not change"); |
397 assert(_patch_info_offset == (patch_info_pc - __ pc()), "must not change"); |
397 ce->add_call_info_here(_info); |
398 ce->add_call_info_here(_info); |
398 __ br(Assembler::always, false, Assembler::pt, _patch_site_entry); |
399 __ br(Assembler::always, false, Assembler::pt, _patch_site_entry); |
399 __ delayed()->nop(); |
400 __ delayed()->nop(); |
400 if (_id == load_klass_id || _id == load_mirror_id) { |
401 if (_id == load_klass_id || _id == load_mirror_id || _id == load_appendix_id) { |
401 CodeSection* cs = __ code_section(); |
402 CodeSection* cs = __ code_section(); |
402 address pc = (address)_pc_start; |
403 address pc = (address)_pc_start; |
403 RelocIterator iter(cs, pc, pc + 1); |
404 RelocIterator iter(cs, pc, pc + 1); |
404 relocInfo::change_reloc_info_for_address(&iter, (address) pc, reloc_type, relocInfo::none); |
405 relocInfo::change_reloc_info_for_address(&iter, (address) pc, reloc_type, relocInfo::none); |
405 |
406 |