RFR: AArch64: 8203699 java/lang/invoke/SpecialInterfaceCall fails with SIGILL on aarch64

Aleksey Shipilev shade at redhat.com
Fri May 25 14:34:21 UTC 2018


On 05/25/2018 11:01 AM, Andrew Haley wrote:
> On 05/25/2018 01:40 AM, White, Derek wrote:
>> OK, fine. Although I see no pragmatic reason to spend more time on
>> polishing this code, and forcing reviewers to re-review and re-test. I assume
>> you have tested the new change?
> 
> OK, but if you've not committed it yet please move this comment next
> to the instruction:
> 
>   // Get super_klass value into r0 (even if it was in r5 or r2).

Haven't pushed yet, just retested. Is this what you want?

diff -r 5f4f5b52ee39 src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Fri May 25 15:34:45 2018 +0530
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Fri May 25 16:34:13 2018 +0200
@@ -1224,7 +1224,6 @@
   assert(sub_klass != r0, "killed reg"); // killed by mov(r0, super)
   assert(sub_klass != r2, "killed reg"); // killed by lea(r2, &pst_counter)

-  // Get super_klass value into r0 (even if it was in r5 or r2).
   RegSet pushed_registers;
   if (!IS_A_TEMP(r2))    pushed_registers += r2;
   if (!IS_A_TEMP(r5))    pushed_registers += r5;
@@ -1235,6 +1234,11 @@

   push(pushed_registers, sp);

+  // Get super_klass value into r0 (even if it was in r5 or r2).
+  if (super_klass != r0) {
+    mov(r0, super_klass);
+  }
+
 #ifndef PRODUCT
   mov(rscratch2, (address)&SharedRuntime::_partial_subtype_ctr);
   Address pst_counter_addr(rscratch2);

-Aleksey



More information about the hotspot-dev mailing list