From 513dcf1e83756af0f255f94cf290ac75edd15bc9 Mon Sep 17 00:00:00 2001 From: Severin Gehwolf Date: Fri, 26 Jan 2018 14:22:37 +0100 Subject: [PATCH] Update AArch64 patch series (3) from upstream. There was a crasher bug introduced with 8195685 and in turn fixed with 8196136. 8195859 is a fix also introduced with 8195685. --- ...DK-8195685-cannot-build-with-8174962.patch | 47 ++++++++------ ...tableStubs-gtest-fails-after-8174962.patch | 23 +++++++ ...8196136-correct-register-use-8195685.patch | 61 +++++++++++++++++++ java-9-openjdk.spec | 19 +++++- 4 files changed, 129 insertions(+), 21 deletions(-) rename 8195685.jdk9.patch => JDK-8195685-cannot-build-with-8174962.patch (90%) create mode 100644 JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch create mode 100644 JDK-8196136-correct-register-use-8195685.patch diff --git a/8195685.jdk9.patch b/JDK-8195685-cannot-build-with-8174962.patch similarity index 90% rename from 8195685.jdk9.patch rename to JDK-8195685-cannot-build-with-8174962.patch index 6e7077a..8a34b35 100644 --- a/8195685.jdk9.patch +++ b/JDK-8195685-cannot-build-with-8174962.patch @@ -1,6 +1,15 @@ -diff -r bb73b31e70e3 src/cpu/aarch64/vm/macroAssembler_aarch64.cpp ---- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Tue Dec 19 15:25:42 2017 -0800 -+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Fri Jan 19 17:02:15 2018 +0000 +# HG changeset patch +# User aph +# Date 1516971866 -3600 +# Fri Jan 26 14:04:26 2018 +0100 +# Node ID a8b7d1fd5884bcfe816df11f16dd71aec7bdacdb +# Parent f6418daf023ea194db63519e3d13ca6c252028ed +8195685: AArch64: AArch64 cannot build with JDK-8174962 +Reviewed-by: adinn, njian + +diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp ++++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp @@ -927,8 +927,12 @@ RegisterOrConstant itable_index, Register method_result, @@ -50,9 +59,9 @@ diff -r bb73b31e70e3 src/cpu/aarch64/vm/macroAssembler_aarch64.cpp } // virtual method calling -diff -r bb73b31e70e3 src/cpu/aarch64/vm/macroAssembler_aarch64.hpp ---- a/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp Tue Dec 19 15:25:42 2017 -0800 -+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp Fri Jan 19 17:02:15 2018 +0000 +diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp +--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp ++++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp @@ -870,7 +870,8 @@ RegisterOrConstant itable_index, Register method_result, @@ -63,9 +72,9 @@ diff -r bb73b31e70e3 src/cpu/aarch64/vm/macroAssembler_aarch64.hpp // virtual method calling // n.b. x86 allows RegisterOrConstant for vtable_index -diff -r bb73b31e70e3 src/cpu/aarch64/vm/templateTable_aarch64.cpp ---- a/src/cpu/aarch64/vm/templateTable_aarch64.cpp Tue Dec 19 15:25:42 2017 -0800 -+++ b/src/cpu/aarch64/vm/templateTable_aarch64.cpp Fri Jan 19 17:02:15 2018 +0000 +diff --git a/src/cpu/aarch64/vm/templateTable_aarch64.cpp b/src/cpu/aarch64/vm/templateTable_aarch64.cpp +--- a/src/cpu/aarch64/vm/templateTable_aarch64.cpp ++++ b/src/cpu/aarch64/vm/templateTable_aarch64.cpp @@ -3279,11 +3279,11 @@ transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); @@ -111,9 +120,9 @@ diff -r bb73b31e70e3 src/cpu/aarch64/vm/templateTable_aarch64.cpp __ lookup_interface_method(// inputs: rec. class, interface, itable index r3, r0, rmethod, // outputs: method, scan temp. reg -diff -r bb73b31e70e3 src/cpu/aarch64/vm/vtableStubs_aarch64.cpp ---- a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp Tue Dec 19 15:25:42 2017 -0800 -+++ b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp Fri Jan 19 17:02:15 2018 +0000 +diff --git a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp +--- a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp ++++ b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp @@ -29,6 +29,7 @@ #include "code/vtableStubs.hpp" #include "interp_masm_aarch64.hpp" @@ -149,10 +158,14 @@ diff -r bb73b31e70e3 src/cpu/aarch64/vm/vtableStubs_aarch64.cpp assert(VtableStub::receiver_location() == j_rarg0->as_VMReg(), "receiver expected in j_rarg0"); // get receiver klass (also an implicit null-check) address npe_addr = __ pc(); -+ __ load_klass(recv_klass_reg, j_rarg0); - +- - // Most registers are in use; we'll use r0, rmethod, r10, r11 - __ load_klass(r10, j_rarg0); +- +- Label throw_icce; ++ __ load_klass(recv_klass_reg, j_rarg0); + +- // Get Method* and entrypoint for compiler + // Receiver subtype check against REFC. + // Destroys recv_klass_reg value. + __ lookup_interface_method(// inputs: rec. class, interface @@ -161,10 +174,7 @@ diff -r bb73b31e70e3 src/cpu/aarch64/vm/vtableStubs_aarch64.cpp + recv_klass_reg, temp_reg, + L_no_such_interface, + /*return_method=*/false); - -- Label throw_icce; -- -- // Get Method* and entrypoint for compiler ++ + // Get selected method from declaring class and itable index + __ load_klass(recv_klass_reg, j_rarg0); // restore recv_klass_reg __ lookup_interface_method(// inputs: rec. class, interface, itable index @@ -284,3 +294,4 @@ diff -r bb73b31e70e3 src/cpu/aarch64/vm/vtableStubs_aarch64.cpp + // b throw_ICCE_entry } + diff --git a/JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch b/JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch new file mode 100644 index 0000000..a4f588c --- /dev/null +++ b/JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch @@ -0,0 +1,23 @@ +# HG changeset patch +# User adinn +# Date 1516891647 0 +# Thu Jan 25 14:47:27 2018 +0000 +# Node ID e321560ac819c05274c59f46f5cc28ccfd4b38ec +# Parent 77baeab90732e7cfb6eb1b754a768a197bca1ab5 +8195859: AArch64: vtableStubs gtest fails after 8174962 +Summary: gtest vtableStubs introduced by 8174962 fails on AArch64 with an invalid insn encoding +Reviewed-by: duke + +diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp ++++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +@@ -1049,7 +1049,8 @@ + ldr(method_result, Address(method_result, vtable_offset_in_bytes)); + } else { + vtable_offset_in_bytes += vtable_index.as_constant() * wordSize; +- ldr(method_result, Address(recv_klass, vtable_offset_in_bytes)); ++ ldr(method_result, ++ form_address(rscratch1, recv_klass, vtable_offset_in_bytes)); + } + } + diff --git a/JDK-8196136-correct-register-use-8195685.patch b/JDK-8196136-correct-register-use-8195685.patch new file mode 100644 index 0000000..dbdc223 --- /dev/null +++ b/JDK-8196136-correct-register-use-8195685.patch @@ -0,0 +1,61 @@ +# HG changeset patch +# User adinn +# Date 1516881392 0 +# Thu Jan 25 11:56:32 2018 +0000 +# Node ID 51d97ee431ff04f126c436b25dc75de7e0d2d4dd +# Parent 2da4a52715d837b639edcfe37c66e5428c023abd +8196136: AArch64: Correct register use in patch for JDK-8195685 +Summary: itable stubs must not use java argument registers as scratch registers +Reviewed-by: aph + +diff --git a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp +--- a/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp ++++ b/src/cpu/aarch64/vm/vtableStubs_aarch64.cpp +@@ -63,8 +63,8 @@ + + #ifndef PRODUCT + if (CountCompiledCalls) { +- __ lea(r19, ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr())); +- __ incrementw(Address(r19)); ++ __ lea(r16, ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr())); ++ __ incrementw(Address(r16)); + } + #endif + +@@ -73,13 +73,13 @@ + + // get receiver klass + address npe_addr = __ pc(); +- __ load_klass(r19, j_rarg0); ++ __ load_klass(r16, j_rarg0); + + #ifndef PRODUCT + if (DebugVtables) { + Label L; + // check offset vs vtable length +- __ ldrw(rscratch1, Address(r19, Klass::vtable_length_offset())); ++ __ ldrw(rscratch1, Address(r16, Klass::vtable_length_offset())); + __ cmpw(rscratch1, vtable_index * vtableEntry::size()); + __ br(Assembler::GT, L); + __ enter(); +@@ -91,7 +91,7 @@ + } + #endif // PRODUCT + +- __ lookup_virtual_method(r19, vtable_index, rmethod); ++ __ lookup_virtual_method(r16, vtable_index, rmethod); + + if (DebugVtables) { + Label L; +@@ -145,9 +145,9 @@ + // j_rarg0: Receiver + + +- // Most registers are in use; we'll use r0, rmethod, r10, r11 ++ // Most registers are in use; we'll use r16, rmethod, r10, r11 + const Register recv_klass_reg = r10; +- const Register holder_klass_reg = r0; // declaring interface klass (DECC) ++ const Register holder_klass_reg = r16; // declaring interface klass (DECC) + const Register resolved_klass_reg = rmethod; // resolved interface klass (REFC) + const Register temp_reg = r11; + const Register icholder_reg = rscratch2; diff --git a/java-9-openjdk.spec b/java-9-openjdk.spec index 46137bf..ef605f2 100644 --- a/java-9-openjdk.spec +++ b/java-9-openjdk.spec @@ -853,7 +853,7 @@ Provides: java-%{javaver}-%{origin}-accessiblity = %{epoch}:%{version}-%{release Name: java-%{majorver}-%{origin} Version: %{newjavaver}.%{buildver} -Release: 3%{?dist} +Release: 4%{?dist} # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons, # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -932,8 +932,15 @@ Patch104: bootcycle_jobs.patch Patch400: ppc_stack_overflow_fix.patch Patch401: aarch64BuildFailure.patch -# Fix for: Aarch64 fails to build in 9.0.4+11 (January 2018 CPU) -Patch402: 8195685.jdk9.patch + +# Fix AArch64 build issues which got introduced with 9.0.4+11 (January 2018 CPU) +# +# JDK-8195685 AArch64 cannot build with JDK-8174962 +# JDK-8196136 AArch64: Correct register use in patch for JDK-8195685 +# JDK-8195859 AArch64: vtableStubs gtest fails after 8174962 +Patch402: JDK-8195685-cannot-build-with-8174962.patch +Patch403: JDK-8196136-correct-register-use-8195685.patch +Patch404: JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch # Non-OpenJDK fixes Patch1000: enableCommentedOutSystemNss.patch @@ -1244,6 +1251,8 @@ sh %{SOURCE12} %patch401 -p1 pushd hotspot %patch402 -p1 +%patch403 -p1 +%patch404 -p1 popd popd # openjdk @@ -1828,6 +1837,10 @@ require "copy_jdk_configs.lua" %changelog +* Fri Jan 26 2018 Severin Gehwolf - 1:9.0.4.11-4 +- Update AArch64 patch series (3) from upstream which fix + FTBFS on AArch64 post-January CPU. + * Mon Jan 22 2018 Severin Gehwolf - 1:9.0.4.11-3 - Add Aarch64 patch for 8195685. Broken Aarch64 after 9.0.4.