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.
This commit is contained in:
Severin Gehwolf 2018-01-26 14:22:37 +01:00
parent 4ba5fbc2d0
commit 513dcf1e83
4 changed files with 129 additions and 21 deletions

View File

@ -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
}

View File

@ -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));
}
}

View File

@ -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;

View File

@ -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 <sgehwolf@redhat.com> - 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 <sgehwolf@redhat.com> - 1:9.0.4.11-3
- Add Aarch64 patch for 8195685. Broken Aarch64 after 9.0.4.