< prev index next >
src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
Print this page
rev 9227 : 8143067: aarch64: guarantee failure in javac
Summary: Fix adrp going out of range during code relocation
Reviewed-by: duke
@@ -1750,11 +1750,11 @@
__ set_last_Java_frame(sp, noreg, (address)the_pc, rscratch1);
Label dtrace_method_entry, dtrace_method_entry_done;
{
unsigned long offset;
- __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
+ __ far_adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
__ ldrb(rscratch1, Address(rscratch1, offset));
__ cbnzw(rscratch1, dtrace_method_entry);
__ bind(dtrace_method_entry_done);
}
@@ -1927,11 +1927,11 @@
// check for safepoint operation in progress and/or pending suspend requests
Label safepoint_in_progress, safepoint_in_progress_done;
{
assert(SafepointSynchronize::_not_synchronized == 0, "fix this code");
unsigned long offset;
- __ adrp(rscratch1,
+ __ far_adrp(rscratch1,
ExternalAddress((address)SafepointSynchronize::address_of_state()),
offset);
__ ldrw(rscratch1, Address(rscratch1, offset));
__ cbnzw(rscratch1, safepoint_in_progress);
__ ldrw(rscratch1, Address(rthread, JavaThread::suspend_flags_offset()));
@@ -2000,11 +2000,11 @@
}
Label dtrace_method_exit, dtrace_method_exit_done;
{
unsigned long offset;
- __ adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
+ __ far_adrp(rscratch1, ExternalAddress((address)&DTraceMethodProbes), offset);
__ ldrb(rscratch1, Address(rscratch1, offset));
__ cbnzw(rscratch1, dtrace_method_exit);
__ bind(dtrace_method_exit_done);
}
< prev index next >