< 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 >