< prev index next >

src/cpu/aarch64/vm/aarch64.ad

Print this page
rev 9227 : 8143067: aarch64: guarantee failure in javac
Summary: Fix adrp going out of range during code relocation
Reviewed-by: duke

@@ -4396,11 +4396,11 @@
         assert(rtype == relocInfo::none, "unexpected reloc type");
         if (con < (address)(uintptr_t)os::vm_page_size()) {
           __ mov(dst_reg, con);
         } else {
           unsigned long offset;
-          __ adrp(dst_reg, con, offset);
+          __ far_adrp(dst_reg, con, offset);
           __ add(dst_reg, dst_reg, offset);
         }
       }
     }
   %}

@@ -4420,20 +4420,20 @@
   enc_class aarch64_enc_mov_poll_page(iRegP dst, immPollPage src) %{
     MacroAssembler _masm(&cbuf);
     address page = (address)$src$$constant;
     Register dst_reg = as_Register($dst$$reg);
     unsigned long off;
-    __ adrp(dst_reg, Address(page, relocInfo::poll_type), off);
+    __ far_adrp(dst_reg, Address(page, relocInfo::poll_type), off);
     assert(off == 0, "assumed offset == 0");
   %}
 
   enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{
     MacroAssembler _masm(&cbuf);
     address page = (address)$src$$constant;
     Register dst_reg = as_Register($dst$$reg);
     unsigned long off;
-    __ adrp(dst_reg, ExternalAddress(page), off);
+    __ far_adrp(dst_reg, ExternalAddress(page), off);
     assert(off == 0, "assumed offset == 0");
   %}
 
   enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{
     MacroAssembler _masm(&cbuf);
< prev index next >