[aarch64-port-dev ] Question about ISB usage in the aarch64 port

Yangfei (Felix) felix.yang at huawei.com
Tue Nov 12 07:36:57 UTC 2019


Hi,

  I am witnessing some SIGILL jvm crashes on my aarch64 platform.
  I looked at the ISB usage, especially this one: https://mail.openjdk.java.net/pipermail/aarch64-port-dev/2014-September/001376.html
  One of changes is adding one ISB after the native call returns:

1100 static void rt_call(MacroAssembler* masm, address dest, int gpargs, int fpargs, int type) {
1101   CodeBlob *cb = CodeCache::find_blob(dest);
1102   if (cb) {
1103     __ far_call(RuntimeAddress(dest));
1104   } else {
1105     assert((unsigned)gpargs < 256, "eek!");
1106     assert((unsigned)fpargs < 32, "eek!");
1107     __ lea(rscratch1, RuntimeAddress(dest));
1108     __ blr(rscratch1);
1109     __ maybe_isb();    < ========
1110   }
1111 }

  The rt_call function is used in generate_native_wrapper to make the JNI call.
  As I didn’t see the barrier for the ppc or arm port.  I would like to know more details here.  Does anyone still remember?
  Also the ISB is planted only in the else block.  I assume this is also necessary for the if block.  Correct?


Thanks for your help,
Felix


More information about the aarch64-port-dev mailing list