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

Yangfei (Felix) felix.yang at huawei.com
Fri Nov 15 08:33:15 UTC 2019


Any comments on that?

I have posted some of the hs_err_log files here: http://cr.openjdk.java.net/~fyang/sigill-crashes.tar.bz2

Thanks,
Felix

From: Yangfei (Felix)
Sent: Tuesday, November 12, 2019 3:37 PM
To: aarch64-port-dev at openjdk.java.net
Subject: Question about ISB usage in the aarch64 port

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