< prev index next >

src/cpu/aarch32/vm/relocInfo_aarch32.cpp

Print this page
rev 8069 : 8164652: aarch32: C1 port

*** 30,48 **** #include "nativeInst_aarch32.hpp" #include "oops/oop.inline.hpp" #include "runtime/safepoint.hpp" void Relocation::pd_set_data_value(address x, intptr_t o, bool verify_only) { ! if (verify_only) ! return; ! ! int bytes = 0; NativeInstruction *ni = NativeInstruction::from(addr()); if (ni->is_mov_const_reg()) { NativeMovConstReg *nm = NativeMovConstReg::from(addr()); ! nm->set_data((uintptr_t) x); bytes = nm->next_instruction_address() - nm->addr(); } else { ShouldNotReachHere(); } --- 30,49 ---- #include "nativeInst_aarch32.hpp" #include "oops/oop.inline.hpp" #include "runtime/safepoint.hpp" void Relocation::pd_set_data_value(address x, intptr_t o, bool verify_only) { ! int bytes; NativeInstruction *ni = NativeInstruction::from(addr()); if (ni->is_mov_const_reg()) { NativeMovConstReg *nm = NativeMovConstReg::from(addr()); ! if (verify_only) { ! assert(nm->data() == (intptr_t) x, "instructions must match"); ! return; ! } ! nm->set_data((intptr_t) x); bytes = nm->next_instruction_address() - nm->addr(); } else { ShouldNotReachHere(); }
*** 57,84 **** adj = -( addr() - orig_addr ); } NativeInstruction *ni = NativeInstruction::from(addr()); ! if (ni->is_call()) { return NativeCall::from(addr())->destination(); ! } else if (ni->is_jump()) { return NativeJump::from(addr())->jump_destination(); } ShouldNotReachHere(); - - return NULL; } void Relocation::pd_set_call_destination(address x) { assert(addr() != x, "call instruction in an infinite loop"); // FIXME what's wrong to _generate_ loop? NativeInstruction *ni = NativeInstruction::from(addr()); ! if (ni->is_call()) { NativeCall::from(addr())->set_destination(x); ! } else if (ni->is_jump()) { NativeJump::from(addr())->set_jump_destination(x); } else { ShouldNotReachHere(); } --- 58,95 ---- adj = -( addr() - orig_addr ); } NativeInstruction *ni = NativeInstruction::from(addr()); ! // Checking from shortest encoding size to longets, ! // to avoid access beyond CodeCache boundary ! if (NativeImmCall::is_at(addr())) { ! return NativeImmCall::from(addr())->destination() + adj; ! } else if (NativeImmJump::is_at(addr())) { ! return NativeImmJump::from(addr())->destination() + adj; ! } else if (NativeCall::is_at(addr())) { return NativeCall::from(addr())->destination(); ! } else if (NativeJump::is_at(addr())) { return NativeJump::from(addr())->jump_destination(); } ShouldNotReachHere(); } void Relocation::pd_set_call_destination(address x) { assert(addr() != x, "call instruction in an infinite loop"); // FIXME what's wrong to _generate_ loop? NativeInstruction *ni = NativeInstruction::from(addr()); ! // Checking from shortest encoding size to longets, ! // to avoid access beyond CodeCache boundary ! if (NativeImmCall::is_at(addr())) { ! NativeImmCall::from(addr())->set_destination(x); ! } else if (NativeImmJump::is_at(addr())) { ! NativeImmJump::from(addr())->set_destination(x); ! } else if (NativeCall::is_at(addr())) { NativeCall::from(addr())->set_destination(x); ! } else if (NativeJump::is_at(addr())) { NativeJump::from(addr())->set_jump_destination(x); } else { ShouldNotReachHere(); }
< prev index next >