From 4a7ca1fbfdd56d721c20bd1564b7bad6e2163645 Mon Sep 17 00:00:00 2001 From: Jiri Vanek Date: Mon, 26 Mar 2018 13:56:35 +0200 Subject: [PATCH] Update to aarch64-jdk8u162-b12 and aarch64-shenandoah-jdk8u162-b12 --- .gitignore | 2 + 8145913-pr3466-rh1498309.patch | 472 ------------------ 8168318-pr3466-rh1498320.patch | 31 -- 8170328-pr3466-rh1498321.patch | 33 -- 8181055-pr3394-rh1448880.patch | 115 ----- 8181419-pr3413-rh1463144.patch | 92 ---- 8181810-pr3466-rh1498319.patch | 66 --- ...tableStubs-gtest-fails-after-8174962.patch | 23 - ...8196136-correct-register-use-8195685.patch | 61 --- JDK-8196221-mistake-in-8195859.patch | 22 - java-1.8.0-openjdk.spec | 60 +-- rhbz_1540242.patch | 22 - rhbz_1540242_2.patch | 59 --- sources | 4 +- update_package.sh | 4 +- 15 files changed, 17 insertions(+), 1049 deletions(-) delete mode 100644 8145913-pr3466-rh1498309.patch delete mode 100644 8168318-pr3466-rh1498320.patch delete mode 100644 8170328-pr3466-rh1498321.patch delete mode 100644 8181055-pr3394-rh1448880.patch delete mode 100644 8181419-pr3413-rh1463144.patch delete mode 100644 8181810-pr3466-rh1498319.patch delete mode 100644 JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch delete mode 100644 JDK-8196136-correct-register-use-8195685.patch delete mode 100644 JDK-8196221-mistake-in-8195859.patch delete mode 100644 rhbz_1540242.patch delete mode 100644 rhbz_1540242_2.patch diff --git a/.gitignore b/.gitignore index 405bc66..072f2ef 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,5 @@ /aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b13.tar.xz /aarch64-port-jdk8u-aarch64-jdk8u161-b14.tar.xz /aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b14.tar.xz +/aarch64-port-jdk8u-aarch64-jdk8u162-b12.tar.xz +/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u162-b12.tar.xz diff --git a/8145913-pr3466-rh1498309.patch b/8145913-pr3466-rh1498309.patch deleted file mode 100644 index b4394f5..0000000 --- a/8145913-pr3466-rh1498309.patch +++ /dev/null @@ -1,472 +0,0 @@ -# HG changeset patch -# User mdoerr -# Date 1507750779 -3600 -# Wed Oct 11 20:39:39 2017 +0100 -# Node ID 92f0dbe76a13992cc27188e0f68e4b1771c7004a -# Parent 542c122b1d7d30c29189565248074aa28f21ae58 -8145913, PR3466, RH1498309: PPC64: add Montgomery multiply intrinsic -Reviewed-by: aph, goetz - -diff --git a/src/cpu/ppc/vm/assembler_ppc.hpp b/src/cpu/ppc/vm/assembler_ppc.hpp ---- openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp -+++ openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.hpp -@@ -1180,6 +1180,8 @@ - inline void mullw_( Register d, Register a, Register b); - inline void mulhw( Register d, Register a, Register b); - inline void mulhw_( Register d, Register a, Register b); -+ inline void mulhwu( Register d, Register a, Register b); -+ inline void mulhwu_(Register d, Register a, Register b); - inline void mulhd( Register d, Register a, Register b); - inline void mulhd_( Register d, Register a, Register b); - inline void mulhdu( Register d, Register a, Register b); -diff --git a/src/cpu/ppc/vm/assembler_ppc.inline.hpp b/src/cpu/ppc/vm/assembler_ppc.inline.hpp ---- openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp -+++ openjdk/hotspot/src/cpu/ppc/vm/assembler_ppc.inline.hpp -@@ -109,6 +109,8 @@ - inline void Assembler::mullw_( Register d, Register a, Register b) { emit_int32(MULLW_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(1)); } - inline void Assembler::mulhw( Register d, Register a, Register b) { emit_int32(MULHW_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); } - inline void Assembler::mulhw_( Register d, Register a, Register b) { emit_int32(MULHW_OPCODE | rt(d) | ra(a) | rb(b) | rc(1)); } -+inline void Assembler::mulhwu( Register d, Register a, Register b) { emit_int32(MULHWU_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); } -+inline void Assembler::mulhwu_(Register d, Register a, Register b) { emit_int32(MULHWU_OPCODE | rt(d) | ra(a) | rb(b) | rc(1)); } - inline void Assembler::mulhd( Register d, Register a, Register b) { emit_int32(MULHD_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); } - inline void Assembler::mulhd_( Register d, Register a, Register b) { emit_int32(MULHD_OPCODE | rt(d) | ra(a) | rb(b) | rc(1)); } - inline void Assembler::mulhdu( Register d, Register a, Register b) { emit_int32(MULHDU_OPCODE | rt(d) | ra(a) | rb(b) | rc(0)); } -diff --git a/src/cpu/ppc/vm/c2_init_ppc.cpp b/src/cpu/ppc/vm/c2_init_ppc.cpp ---- openjdk/hotspot/src/cpu/ppc/vm/c2_init_ppc.cpp -+++ openjdk/hotspot/src/cpu/ppc/vm/c2_init_ppc.cpp -@@ -45,4 +45,10 @@ - FLAG_SET_ERGO(bool, InsertEndGroupPPC64, true); - } - } -+ -+ if (OptimizeFill) { -+ warning("OptimizeFill is not supported on this CPU."); -+ FLAG_SET_DEFAULT(OptimizeFill, false); -+ } -+ - } -diff --git a/src/cpu/ppc/vm/sharedRuntime_ppc.cpp b/src/cpu/ppc/vm/sharedRuntime_ppc.cpp ---- openjdk/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp -+++ openjdk/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp -@@ -42,6 +42,8 @@ - #include "opto/runtime.hpp" - #endif - -+#include -+ - #define __ masm-> - - #ifdef PRODUCT -@@ -3269,3 +3271,245 @@ - return RuntimeStub::new_runtime_stub(name, &buffer, frame_complete, frame_size_in_bytes/wordSize, - oop_maps, true); - } -+ -+ -+//------------------------------Montgomery multiplication------------------------ -+// -+ -+// Subtract 0:b from carry:a. Return carry. -+static unsigned long -+sub(unsigned long a[], unsigned long b[], unsigned long carry, long len) { -+ long i = 0; -+ unsigned long tmp, tmp2; -+ __asm__ __volatile__ ( -+ "subfc %[tmp], %[tmp], %[tmp] \n" // pre-set CA -+ "mtctr %[len] \n" -+ "0: \n" -+ "ldx %[tmp], %[i], %[a] \n" -+ "ldx %[tmp2], %[i], %[b] \n" -+ "subfe %[tmp], %[tmp2], %[tmp] \n" // subtract extended -+ "stdx %[tmp], %[i], %[a] \n" -+ "addi %[i], %[i], 8 \n" -+ "bdnz 0b \n" -+ "addme %[tmp], %[carry] \n" // carry + CA - 1 -+ : [i]"+b"(i), [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2) -+ : [a]"r"(a), [b]"r"(b), [carry]"r"(carry), [len]"r"(len) -+ : "ctr", "xer", "memory" -+ ); -+ return tmp; -+} -+ -+// Multiply (unsigned) Long A by Long B, accumulating the double- -+// length result into the accumulator formed of T0, T1, and T2. -+inline void MACC(unsigned long A, unsigned long B, unsigned long &T0, unsigned long &T1, unsigned long &T2) { -+ unsigned long hi, lo; -+ __asm__ __volatile__ ( -+ "mulld %[lo], %[A], %[B] \n" -+ "mulhdu %[hi], %[A], %[B] \n" -+ "addc %[T0], %[T0], %[lo] \n" -+ "adde %[T1], %[T1], %[hi] \n" -+ "addze %[T2], %[T2] \n" -+ : [hi]"=&r"(hi), [lo]"=&r"(lo), [T0]"+r"(T0), [T1]"+r"(T1), [T2]"+r"(T2) -+ : [A]"r"(A), [B]"r"(B) -+ : "xer" -+ ); -+} -+ -+// As above, but add twice the double-length result into the -+// accumulator. -+inline void MACC2(unsigned long A, unsigned long B, unsigned long &T0, unsigned long &T1, unsigned long &T2) { -+ unsigned long hi, lo; -+ __asm__ __volatile__ ( -+ "mulld %[lo], %[A], %[B] \n" -+ "mulhdu %[hi], %[A], %[B] \n" -+ "addc %[T0], %[T0], %[lo] \n" -+ "adde %[T1], %[T1], %[hi] \n" -+ "addze %[T2], %[T2] \n" -+ "addc %[T0], %[T0], %[lo] \n" -+ "adde %[T1], %[T1], %[hi] \n" -+ "addze %[T2], %[T2] \n" -+ : [hi]"=&r"(hi), [lo]"=&r"(lo), [T0]"+r"(T0), [T1]"+r"(T1), [T2]"+r"(T2) -+ : [A]"r"(A), [B]"r"(B) -+ : "xer" -+ ); -+} -+ -+// Fast Montgomery multiplication. The derivation of the algorithm is -+// in "A Cryptographic Library for the Motorola DSP56000, -+// Dusse and Kaliski, Proc. EUROCRYPT 90, pp. 230-237". -+static void -+montgomery_multiply(unsigned long a[], unsigned long b[], unsigned long n[], -+ unsigned long m[], unsigned long inv, int len) { -+ unsigned long t0 = 0, t1 = 0, t2 = 0; // Triple-precision accumulator -+ int i; -+ -+ assert(inv * n[0] == -1UL, "broken inverse in Montgomery multiply"); -+ -+ for (i = 0; i < len; i++) { -+ int j; -+ for (j = 0; j < i; j++) { -+ MACC(a[j], b[i-j], t0, t1, t2); -+ MACC(m[j], n[i-j], t0, t1, t2); -+ } -+ MACC(a[i], b[0], t0, t1, t2); -+ m[i] = t0 * inv; -+ MACC(m[i], n[0], t0, t1, t2); -+ -+ assert(t0 == 0, "broken Montgomery multiply"); -+ -+ t0 = t1; t1 = t2; t2 = 0; -+ } -+ -+ for (i = len; i < 2*len; i++) { -+ int j; -+ for (j = i-len+1; j < len; j++) { -+ MACC(a[j], b[i-j], t0, t1, t2); -+ MACC(m[j], n[i-j], t0, t1, t2); -+ } -+ m[i-len] = t0; -+ t0 = t1; t1 = t2; t2 = 0; -+ } -+ -+ while (t0) { -+ t0 = sub(m, n, t0, len); -+ } -+} -+ -+// Fast Montgomery squaring. This uses asymptotically 25% fewer -+// multiplies so it should be up to 25% faster than Montgomery -+// multiplication. However, its loop control is more complex and it -+// may actually run slower on some machines. -+static void -+montgomery_square(unsigned long a[], unsigned long n[], -+ unsigned long m[], unsigned long inv, int len) { -+ unsigned long t0 = 0, t1 = 0, t2 = 0; // Triple-precision accumulator -+ int i; -+ -+ assert(inv * n[0] == -1UL, "broken inverse in Montgomery multiply"); -+ -+ for (i = 0; i < len; i++) { -+ int j; -+ int end = (i+1)/2; -+ for (j = 0; j < end; j++) { -+ MACC2(a[j], a[i-j], t0, t1, t2); -+ MACC(m[j], n[i-j], t0, t1, t2); -+ } -+ if ((i & 1) == 0) { -+ MACC(a[j], a[j], t0, t1, t2); -+ } -+ for (; j < i; j++) { -+ MACC(m[j], n[i-j], t0, t1, t2); -+ } -+ m[i] = t0 * inv; -+ MACC(m[i], n[0], t0, t1, t2); -+ -+ assert(t0 == 0, "broken Montgomery square"); -+ -+ t0 = t1; t1 = t2; t2 = 0; -+ } -+ -+ for (i = len; i < 2*len; i++) { -+ int start = i-len+1; -+ int end = start + (len - start)/2; -+ int j; -+ for (j = start; j < end; j++) { -+ MACC2(a[j], a[i-j], t0, t1, t2); -+ MACC(m[j], n[i-j], t0, t1, t2); -+ } -+ if ((i & 1) == 0) { -+ MACC(a[j], a[j], t0, t1, t2); -+ } -+ for (; j < len; j++) { -+ MACC(m[j], n[i-j], t0, t1, t2); -+ } -+ m[i-len] = t0; -+ t0 = t1; t1 = t2; t2 = 0; -+ } -+ -+ while (t0) { -+ t0 = sub(m, n, t0, len); -+ } -+} -+ -+// The threshold at which squaring is advantageous was determined -+// experimentally on an i7-3930K (Ivy Bridge) CPU @ 3.5GHz. -+// Doesn't seem to be relevant for Power8 so we use the same value. -+#define MONTGOMERY_SQUARING_THRESHOLD 64 -+ -+// Copy len longwords from s to d, word-swapping as we go. The -+// destination array is reversed. -+static void reverse_words(unsigned long *s, unsigned long *d, int len) { -+ d += len; -+ while(len-- > 0) { -+ d--; -+ unsigned long s_val = *s; -+ // Swap words in a longword on little endian machines. -+#ifdef VM_LITTLE_ENDIAN -+ s_val = (s_val << 32) | (s_val >> 32); -+#endif -+ *d = s_val; -+ s++; -+ } -+} -+ -+void SharedRuntime::montgomery_multiply(jint *a_ints, jint *b_ints, jint *n_ints, -+ jint len, jlong inv, -+ jint *m_ints) { -+ assert(len % 2 == 0, "array length in montgomery_multiply must be even"); -+ int longwords = len/2; -+ assert(longwords > 0, "unsupported"); -+ -+ // Make very sure we don't use so much space that the stack might -+ // overflow. 512 jints corresponds to an 16384-bit integer and -+ // will use here a total of 8k bytes of stack space. -+ int total_allocation = longwords * sizeof (unsigned long) * 4; -+ guarantee(total_allocation <= 8192, "must be"); -+ unsigned long *scratch = (unsigned long *)alloca(total_allocation); -+ -+ // Local scratch arrays -+ unsigned long -+ *a = scratch + 0 * longwords, -+ *b = scratch + 1 * longwords, -+ *n = scratch + 2 * longwords, -+ *m = scratch + 3 * longwords; -+ -+ reverse_words((unsigned long *)a_ints, a, longwords); -+ reverse_words((unsigned long *)b_ints, b, longwords); -+ reverse_words((unsigned long *)n_ints, n, longwords); -+ -+ ::montgomery_multiply(a, b, n, m, (unsigned long)inv, longwords); -+ -+ reverse_words(m, (unsigned long *)m_ints, longwords); -+} -+ -+void SharedRuntime::montgomery_square(jint *a_ints, jint *n_ints, -+ jint len, jlong inv, -+ jint *m_ints) { -+ assert(len % 2 == 0, "array length in montgomery_square must be even"); -+ int longwords = len/2; -+ assert(longwords > 0, "unsupported"); -+ -+ // Make very sure we don't use so much space that the stack might -+ // overflow. 512 jints corresponds to an 16384-bit integer and -+ // will use here a total of 6k bytes of stack space. -+ int total_allocation = longwords * sizeof (unsigned long) * 3; -+ guarantee(total_allocation <= 8192, "must be"); -+ unsigned long *scratch = (unsigned long *)alloca(total_allocation); -+ -+ // Local scratch arrays -+ unsigned long -+ *a = scratch + 0 * longwords, -+ *n = scratch + 1 * longwords, -+ *m = scratch + 2 * longwords; -+ -+ reverse_words((unsigned long *)a_ints, a, longwords); -+ reverse_words((unsigned long *)n_ints, n, longwords); -+ -+ if (len >= MONTGOMERY_SQUARING_THRESHOLD) { -+ ::montgomery_square(a, n, m, (unsigned long)inv, longwords); -+ } else { -+ ::montgomery_multiply(a, a, n, m, (unsigned long)inv, longwords); -+ } -+ -+ reverse_words(m, (unsigned long *)m_ints, longwords); -+} -diff --git a/src/cpu/ppc/vm/stubGenerator_ppc.cpp b/src/cpu/ppc/vm/stubGenerator_ppc.cpp ---- openjdk/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp -+++ openjdk/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp -@@ -2518,6 +2518,15 @@ - generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry, - &StubRoutines::_safefetchN_fault_pc, - &StubRoutines::_safefetchN_continuation_pc); -+ -+ if (UseMontgomeryMultiplyIntrinsic) { -+ StubRoutines::_montgomeryMultiply -+ = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_multiply); -+ } -+ if (UseMontgomerySquareIntrinsic) { -+ StubRoutines::_montgomerySquare -+ = CAST_FROM_FN_PTR(address, SharedRuntime::montgomery_square); -+ } - - if (UseAESIntrinsics) { - StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); -diff --git a/src/cpu/ppc/vm/templateInterpreter_ppc.cpp b/src/cpu/ppc/vm/templateInterpreter_ppc.cpp ---- openjdk/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp -+++ openjdk/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp -@@ -265,7 +265,7 @@ - __ cmpdi(CCR0, Rmdo, 0); - __ beq(CCR0, no_mdo); - -- // Increment backedge counter in the MDO. -+ // Increment invocation counter in the MDO. - const int mdo_bc_offs = in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); - __ lwz(Rscratch2, mdo_bc_offs, Rmdo); - __ addi(Rscratch2, Rscratch2, increment); -@@ -277,12 +277,12 @@ - } - - // Increment counter in MethodCounters*. -- const int mo_bc_offs = in_bytes(MethodCounters::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); -+ const int mo_ic_offs = in_bytes(MethodCounters::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset()); - __ bind(no_mdo); - __ get_method_counters(R19_method, R3_counters, done); -- __ lwz(Rscratch2, mo_bc_offs, R3_counters); -+ __ lwz(Rscratch2, mo_ic_offs, R3_counters); - __ addi(Rscratch2, Rscratch2, increment); -- __ stw(Rscratch2, mo_bc_offs, R3_counters); -+ __ stw(Rscratch2, mo_ic_offs, R3_counters); - __ load_const_optimized(Rscratch1, mask, R0); - __ and_(Rscratch1, Rscratch2, Rscratch1); - __ beq(CCR0, *overflow); -diff --git a/src/cpu/ppc/vm/vm_version_ppc.cpp b/src/cpu/ppc/vm/vm_version_ppc.cpp ---- openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp -+++ openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp -@@ -201,6 +201,12 @@ - FLAG_SET_DEFAULT(UseSHA512Intrinsics, false); - } - -+ if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) { -+ UseMontgomeryMultiplyIntrinsic = true; -+ } -+ if (FLAG_IS_DEFAULT(UseMontgomerySquareIntrinsic)) { -+ UseMontgomerySquareIntrinsic = true; -+ } - } - - void VM_Version::print_features() { -diff --git a/src/share/vm/opto/library_call.cpp b/src/share/vm/opto/library_call.cpp ---- openjdk/hotspot/src/share/vm/opto/library_call.cpp -+++ openjdk/hotspot/src/share/vm/opto/library_call.cpp -@@ -6205,11 +6205,21 @@ - Node* n_start = array_element_address(n, intcon(0), n_elem); - Node* m_start = array_element_address(m, intcon(0), m_elem); - -- Node* call = make_runtime_call(RC_LEAF, -- OptoRuntime::montgomeryMultiply_Type(), -- stubAddr, stubName, TypePtr::BOTTOM, -- a_start, b_start, n_start, len, inv, top(), -- m_start); -+ Node* call = NULL; -+ if (CCallingConventionRequiresIntsAsLongs) { -+ Node* len_I2L = ConvI2L(len); -+ call = make_runtime_call(RC_LEAF, -+ OptoRuntime::montgomeryMultiply_Type(), -+ stubAddr, stubName, TypePtr::BOTTOM, -+ a_start, b_start, n_start, len_I2L XTOP, inv, -+ top(), m_start); -+ } else { -+ call = make_runtime_call(RC_LEAF, -+ OptoRuntime::montgomeryMultiply_Type(), -+ stubAddr, stubName, TypePtr::BOTTOM, -+ a_start, b_start, n_start, len, inv, top(), -+ m_start); -+ } - set_result(m); - } - -@@ -6263,11 +6273,22 @@ - Node* n_start = array_element_address(n, intcon(0), n_elem); - Node* m_start = array_element_address(m, intcon(0), m_elem); - -- Node* call = make_runtime_call(RC_LEAF, -- OptoRuntime::montgomerySquare_Type(), -- stubAddr, stubName, TypePtr::BOTTOM, -- a_start, n_start, len, inv, top(), -- m_start); -+ Node* call = NULL; -+ if (CCallingConventionRequiresIntsAsLongs) { -+ Node* len_I2L = ConvI2L(len); -+ call = make_runtime_call(RC_LEAF, -+ OptoRuntime::montgomerySquare_Type(), -+ stubAddr, stubName, TypePtr::BOTTOM, -+ a_start, n_start, len_I2L XTOP, inv, top(), -+ m_start); -+ } else { -+ call = make_runtime_call(RC_LEAF, -+ OptoRuntime::montgomerySquare_Type(), -+ stubAddr, stubName, TypePtr::BOTTOM, -+ a_start, n_start, len, inv, top(), -+ m_start); -+ } -+ - set_result(m); - } - -diff --git a/src/share/vm/opto/runtime.cpp b/src/share/vm/opto/runtime.cpp ---- openjdk/hotspot/src/share/vm/opto/runtime.cpp -+++ openjdk/hotspot/src/share/vm/opto/runtime.cpp -@@ -1031,12 +1031,20 @@ - // create input type (domain) - int num_args = 7; - int argcnt = num_args; -+ if (CCallingConventionRequiresIntsAsLongs) { -+ argcnt++; // additional placeholder -+ } - const Type** fields = TypeTuple::fields(argcnt); - int argp = TypeFunc::Parms; - fields[argp++] = TypePtr::NOTNULL; // a - fields[argp++] = TypePtr::NOTNULL; // b - fields[argp++] = TypePtr::NOTNULL; // n -- fields[argp++] = TypeInt::INT; // len -+ if (CCallingConventionRequiresIntsAsLongs) { -+ fields[argp++] = TypeLong::LONG; // len -+ fields[argp++] = TypeLong::HALF; // placeholder -+ } else { -+ fields[argp++] = TypeInt::INT; // len -+ } - fields[argp++] = TypeLong::LONG; // inv - fields[argp++] = Type::HALF; - fields[argp++] = TypePtr::NOTNULL; // result -@@ -1055,11 +1063,19 @@ - // create input type (domain) - int num_args = 6; - int argcnt = num_args; -+ if (CCallingConventionRequiresIntsAsLongs) { -+ argcnt++; // additional placeholder -+ } - const Type** fields = TypeTuple::fields(argcnt); - int argp = TypeFunc::Parms; - fields[argp++] = TypePtr::NOTNULL; // a - fields[argp++] = TypePtr::NOTNULL; // n -- fields[argp++] = TypeInt::INT; // len -+ if (CCallingConventionRequiresIntsAsLongs) { -+ fields[argp++] = TypeLong::LONG; // len -+ fields[argp++] = TypeLong::HALF; // placeholder -+ } else { -+ fields[argp++] = TypeInt::INT; // len -+ } - fields[argp++] = TypeLong::LONG; // inv - fields[argp++] = Type::HALF; - fields[argp++] = TypePtr::NOTNULL; // result diff --git a/8168318-pr3466-rh1498320.patch b/8168318-pr3466-rh1498320.patch deleted file mode 100644 index 6ed9afb..0000000 --- a/8168318-pr3466-rh1498320.patch +++ /dev/null @@ -1,31 +0,0 @@ -# HG changeset patch -# User goetz -# Date 1477563748 -7200 -# Thu Oct 27 12:22:28 2016 +0200 -# Node ID 9b9d9e11c04d5e5f64829d34752e5c94b1c7d911 -# Parent 92f0dbe76a13992cc27188e0f68e4b1771c7004a -8168318, PR3466, RH1498320: PPC64: Use cmpldi instead of li/cmpld -Reviewed-by: goetz -Contributed-by: igor.nunes@eldorado.org.br - -diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad ---- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad -+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad -@@ -10571,6 +10571,17 @@ - ins_pipe(pipe_class_compare); - %} - -+instruct cmpP_reg_null(flagsReg crx, iRegP_N2P src1, immP_0or1 src2) %{ -+ match(Set crx (CmpP src1 src2)); -+ format %{ "CMPLDI $crx, $src1, $src2 \t// ptr" %} -+ size(4); -+ ins_encode %{ -+ // TODO: PPC port $archOpcode(ppc64Opcode_cmpl); -+ __ cmpldi($crx$$CondRegister, $src1$$Register, (int)((short)($src2$$constant & 0xFFFF))); -+ %} -+ ins_pipe(pipe_class_compare); -+%} -+ - // Used in postalloc expand. - instruct cmpP_reg_imm16(flagsReg crx, iRegPsrc src1, immL16 src2) %{ - // This match rule prevents reordering of node before a safepoint. diff --git a/8170328-pr3466-rh1498321.patch b/8170328-pr3466-rh1498321.patch deleted file mode 100644 index d8751ee..0000000 --- a/8170328-pr3466-rh1498321.patch +++ /dev/null @@ -1,33 +0,0 @@ -# HG changeset patch -# User mdoerr -# Date 1480079712 7200 -# Fri Nov 25 11:15:12 2016 -0200 -# Node ID 3c499a0ba92b1affb3f473c6502e374f4785aba9 -# Parent 9b9d9e11c04d5e5f64829d34752e5c94b1c7d911 -8170328, PR3466, RH1498321: PPC64: Use andis instead of lis/and -Reviewed-by: goetz, mdoerr -Contributed-by: Igor Nunes - -diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad ---- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad -+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad -@@ -8889,6 +8889,19 @@ - ins_pipe(pipe_class_default); - %} - -+// Left shifted Immediate And -+instruct andI_reg_immIhi16(iRegIdst dst, iRegIsrc src1, immIhi16 src2, flagsRegCR0 cr0) %{ -+ match(Set dst (AndI src1 src2)); -+ effect(KILL cr0); -+ format %{ "ANDIS $dst, $src1, $src2.hi" %} -+ size(4); -+ ins_encode %{ -+ // TODO: PPC port $archOpcode(ppc64Opcode_andis_); -+ __ andis_($dst$$Register, $src1$$Register, (int)((unsigned short)(($src2$$constant & 0xFFFF0000) >> 16))); -+ %} -+ ins_pipe(pipe_class_default); -+%} -+ - // Immediate And - instruct andI_reg_uimm16(iRegIdst dst, iRegIsrc src1, uimmI16 src2, flagsRegCR0 cr0) %{ - match(Set dst (AndI src1 src2)); diff --git a/8181055-pr3394-rh1448880.patch b/8181055-pr3394-rh1448880.patch deleted file mode 100644 index 593159d..0000000 --- a/8181055-pr3394-rh1448880.patch +++ /dev/null @@ -1,115 +0,0 @@ -# HG changeset patch -# User zgu -# Date 1496236768 14400 -# Wed May 31 09:19:28 2017 -0400 -# Node ID 8330ff7914ec54c46fd19300221f72d774423405 -# Parent 55a34e4962e10c822affe8f89273a87e84cade92 -8181055: PPC64: "mbind: Invalid argument" still seen after 8175813 -Summary: Use numa_interleave_memory v2 api when available -Reviewed-by: dholmes, shade - -diff -r 74c81011375b src/os/linux/vm/os_linux.cpp ---- openjdk/hotspot/src/os/linux/vm/os_linux.cpp Wed May 17 17:52:34 2017 -0400 -+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp Wed May 31 12:27:00 2017 -0400 -@@ -2819,11 +2819,8 @@ - extern "C" JNIEXPORT void numa_error(char *where) { } - extern "C" JNIEXPORT int fork1() { return fork(); } - -- --// If we are running with libnuma version > 2, then we should --// be trying to use symbols with versions 1.1 --// If we are running with earlier version, which did not have symbol versions, --// we should use the base version. -+// Handle request to load libnuma symbol version 1.1 (API v1). If it fails -+// load symbol from base version instead. - void* os::Linux::libnuma_dlsym(void* handle, const char *name) { - void *f = dlvsym(handle, name, "libnuma_1.1"); - if (f == NULL) { -@@ -2832,6 +2829,12 @@ - return f; - } - -+// Handle request to load libnuma symbol version 1.2 (API v2) only. -+// Return NULL if the symbol is not defined in this particular version. -+void* os::Linux::libnuma_v2_dlsym(void* handle, const char* name) { -+ return dlvsym(handle, name, "libnuma_1.2"); -+} -+ - bool os::Linux::libnuma_init() { - // sched_getcpu() should be in libc. - set_sched_getcpu(CAST_TO_FN_PTR(sched_getcpu_func_t, -@@ -2856,6 +2859,8 @@ - libnuma_dlsym(handle, "numa_tonode_memory"))); - set_numa_interleave_memory(CAST_TO_FN_PTR(numa_interleave_memory_func_t, - libnuma_dlsym(handle, "numa_interleave_memory"))); -+ set_numa_interleave_memory_v2(CAST_TO_FN_PTR(numa_interleave_memory_v2_func_t, -+ libnuma_v2_dlsym(handle, "numa_interleave_memory"))); - set_numa_set_bind_policy(CAST_TO_FN_PTR(numa_set_bind_policy_func_t, - libnuma_dlsym(handle, "numa_set_bind_policy"))); - set_numa_bitmask_isbitset(CAST_TO_FN_PTR(numa_bitmask_isbitset_func_t, -@@ -2975,6 +2980,7 @@ - os::Linux::numa_available_func_t os::Linux::_numa_available; - os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory; - os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory; -+os::Linux::numa_interleave_memory_v2_func_t os::Linux::_numa_interleave_memory_v2; - os::Linux::numa_set_bind_policy_func_t os::Linux::_numa_set_bind_policy; - os::Linux::numa_bitmask_isbitset_func_t os::Linux::_numa_bitmask_isbitset; - os::Linux::numa_distance_func_t os::Linux::_numa_distance; -diff -r 74c81011375b src/os/linux/vm/os_linux.hpp ---- openjdk/hotspot/src/os/linux/vm/os_linux.hpp Wed May 17 17:52:34 2017 -0400 -+++ openjdk/hotspot/src/os/linux/vm/os_linux.hpp Wed May 31 12:27:00 2017 -0400 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -190,6 +190,9 @@ - static void libpthread_init(); - static bool libnuma_init(); - static void* libnuma_dlsym(void* handle, const char* name); -+ // libnuma v2 (libnuma_1.2) symbols -+ static void* libnuma_v2_dlsym(void* handle, const char* name); -+ - // Minimum stack size a thread can be created with (allowing - // the VM to completely create the thread and enter user code) - static size_t min_stack_allowed; -@@ -250,6 +253,8 @@ - typedef int (*numa_available_func_t)(void); - typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node); - typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask); -+ typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask); -+ - typedef void (*numa_set_bind_policy_func_t)(int policy); - typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n); - typedef int (*numa_distance_func_t)(int node1, int node2); -@@ -261,6 +266,7 @@ - static numa_available_func_t _numa_available; - static numa_tonode_memory_func_t _numa_tonode_memory; - static numa_interleave_memory_func_t _numa_interleave_memory; -+ static numa_interleave_memory_v2_func_t _numa_interleave_memory_v2; - static numa_set_bind_policy_func_t _numa_set_bind_policy; - static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset; - static numa_distance_func_t _numa_distance; -@@ -275,6 +281,7 @@ - static void set_numa_available(numa_available_func_t func) { _numa_available = func; } - static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; } - static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; } -+ static void set_numa_interleave_memory_v2(numa_interleave_memory_v2_func_t func) { _numa_interleave_memory_v2 = func; } - static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; } - static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; } - static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; } -@@ -296,7 +303,10 @@ - return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1; - } - static void numa_interleave_memory(void *start, size_t size) { -- if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) { -+ // Use v2 api if available -+ if (_numa_interleave_memory_v2 != NULL && _numa_all_nodes_ptr != NULL) { -+ _numa_interleave_memory_v2(start, size, _numa_all_nodes_ptr); -+ } else if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) { - _numa_interleave_memory(start, size, _numa_all_nodes); - } - } - diff --git a/8181419-pr3413-rh1463144.patch b/8181419-pr3413-rh1463144.patch deleted file mode 100644 index c2c7fc6..0000000 --- a/8181419-pr3413-rh1463144.patch +++ /dev/null @@ -1,92 +0,0 @@ -# HG changeset patch -# User stuefe -# Date 1497865921 -7200 -# Mon Jun 19 11:52:01 2017 +0200 -# Node ID ca0c7b2783e0102468218589a062e7ac4736aae2 -# Parent 148a7d6c463ad1726bad8a9e8d5df191314d704b -8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results -Reviewed-by: sspitsyn, sgehwolf, clanger - -diff --git a/src/share/back/invoker.c b/src/share/back/invoker.c ---- openjdk/jdk/src/share/back/invoker.c -+++ openjdk/jdk/src/share/back/invoker.c -@@ -212,30 +212,6 @@ - } - - /* -- * Delete saved global references - if any - for: -- * - a potentially thrown Exception -- * - a returned refernce/array value -- * See invoker_doInvoke() and invoke* methods where global references -- * are being saved. -- */ --static void --deletePotentiallySavedGlobalRefs(JNIEnv *env, InvokeRequest *request) --{ -- /* Delete potentially saved return value */ -- if ((request->invokeType == INVOKE_CONSTRUCTOR) || -- (returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT)) || -- (returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY))) { -- if (request->returnValue.l != NULL) { -- tossGlobalRef(env, &(request->returnValue.l)); -- } -- } -- /* Delete potentially saved exception */ -- if (request->exception != NULL) { -- tossGlobalRef(env, &(request->exception)); -- } --} -- --/* - * Delete global argument references from the request which got put there before a - * invoke request was carried out. See fillInvokeRequest(). - */ -@@ -744,6 +720,7 @@ - jint id; - InvokeRequest *request; - jboolean detached; -+ jboolean mustReleaseReturnValue = JNI_FALSE; - - JDI_ASSERT(thread); - -@@ -787,6 +764,13 @@ - id = request->id; - exc = request->exception; - returnValue = request->returnValue; -+ -+ /* Release return value and exception references, but delay the release -+ * until after the return packet was sent. */ -+ mustReleaseReturnValue = request->invokeType == INVOKE_CONSTRUCTOR || -+ returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT) || -+ returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY); -+ - } - - /* -@@ -801,6 +785,12 @@ - */ - deleteGlobalArgumentRefs(env, request); - -+ /* From now on, do not access the request structure anymore -+ * for this request id, because once we give up the invokerLock it may -+ * be immediately reused by a new invoke request. -+ */ -+ request = NULL; -+ - /* - * Give up the lock before I/O operation - */ -@@ -821,7 +811,12 @@ - */ - eventHandler_lock(); // for proper lock order - debugMonitorEnter(invokerLock); -- deletePotentiallySavedGlobalRefs(env, request); -+ if (mustReleaseReturnValue && returnValue.l != NULL) { -+ tossGlobalRef(env, &returnValue.l); -+ } -+ if (exc != NULL) { -+ tossGlobalRef(env, &exc); -+ } - debugMonitorExit(invokerLock); - eventHandler_unlock(); - } diff --git a/8181810-pr3466-rh1498319.patch b/8181810-pr3466-rh1498319.patch deleted file mode 100644 index 4dba432..0000000 --- a/8181810-pr3466-rh1498319.patch +++ /dev/null @@ -1,66 +0,0 @@ -# HG changeset patch -# User mdoerr -# Date 1507752266 -3600 -# Wed Oct 11 21:04:26 2017 +0100 -# Node ID 5c00d5cd7677aec3549afe02e4f9de8dc7b20bef -# Parent 3c499a0ba92b1affb3f473c6502e374f4785aba9 -8181810, PR3466, RH1498319: PPC64: Leverage extrdi for bitfield extract -Reviewed-by: mdoerr, simonis -Contributed-by: Matthew Brandyberry - -diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad ---- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad -+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad -@@ -1,6 +1,6 @@ - // - // Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. --// Copyright 2012, 2014 SAP AG. All rights reserved. -+// Copyright (c) 2012, 2017 SAP SE. All rights reserved. - // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - // - // This code is free software; you can redistribute it and/or modify it -@@ -8610,6 +8610,44 @@ - ins_pipe(pipe_class_default); - %} - -+// Bitfield Extract: URShiftI + AndI -+instruct andI_urShiftI_regI_immI_immIpow2minus1(iRegIdst dst, iRegIsrc src1, immI src2, immIpow2minus1 src3) %{ -+ match(Set dst (AndI (URShiftI src1 src2) src3)); -+ -+ format %{ "EXTRDI $dst, $src1, shift=$src2, mask=$src3 \t// int bitfield extract" %} -+ size(4); -+ ins_encode %{ -+ // TODO: PPC port $archOpcode(ppc64Opcode_rldicl); -+ int rshift = ($src2$$constant) & 0x1f; -+ int length = log2_long(((jlong) $src3$$constant) + 1); -+ if (rshift + length > 32) { -+ // if necessary, adjust mask to omit rotated bits. -+ length = 32 - rshift; -+ } -+ __ extrdi($dst$$Register, $src1$$Register, length, 64 - (rshift + length)); -+ %} -+ ins_pipe(pipe_class_default); -+%} -+ -+// Bitfield Extract: URShiftL + AndL -+instruct andL_urShiftL_regL_immI_immLpow2minus1(iRegLdst dst, iRegLsrc src1, immI src2, immLpow2minus1 src3) %{ -+ match(Set dst (AndL (URShiftL src1 src2) src3)); -+ -+ format %{ "EXTRDI $dst, $src1, shift=$src2, mask=$src3 \t// long bitfield extract" %} -+ size(4); -+ ins_encode %{ -+ // TODO: PPC port $archOpcode(ppc64Opcode_rldicl); -+ int rshift = ($src2$$constant) & 0x3f; -+ int length = log2_long(((jlong) $src3$$constant) + 1); -+ if (rshift + length > 64) { -+ // if necessary, adjust mask to omit rotated bits. -+ length = 64 - rshift; -+ } -+ __ extrdi($dst$$Register, $src1$$Register, length, 64 - (rshift + length)); -+ %} -+ ins_pipe(pipe_class_default); -+%} -+ - instruct sxtI_reg(iRegIdst dst, iRegIsrc src) %{ - match(Set dst (ConvL2I (ConvI2L src))); - diff --git a/JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch b/JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch deleted file mode 100644 index a4f588c..0000000 --- a/JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch +++ /dev/null @@ -1,23 +0,0 @@ -# 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 deleted file mode 100644 index 9ad3b6f..0000000 --- a/JDK-8196136-correct-register-use-8195685.patch +++ /dev/null @@ -1,61 +0,0 @@ -# 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 -@@ -64,8 +64,8 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) { - - #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 - -@@ -74,13 +74,13 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) { - - // 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, InstanceKlass::vtable_length_offset() * wordSize)); -+ __ ldrw(rscratch1, Address(r16, InstanceKlass::vtable_length_offset() * wordSize)); - __ cmpw(rscratch1, vtable_index * vtableEntry::size()); - __ br(Assembler::GT, L); - __ enter(); -@@ -92,7 +92,7 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) { - } - #endif // PRODUCT - -- __ lookup_virtual_method(r19, vtable_index, rmethod); -+ __ lookup_virtual_method(r16, vtable_index, rmethod); - - if (DebugVtables) { - Label L; -@@ -145,9 +145,9 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) { - // rscratch2: CompiledICHolder - // 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/JDK-8196221-mistake-in-8195859.patch b/JDK-8196221-mistake-in-8195859.patch deleted file mode 100644 index d9975c9..0000000 --- a/JDK-8196221-mistake-in-8195859.patch +++ /dev/null @@ -1,22 +0,0 @@ -# HG changeset patch -# User adinn -# Date 1516984701 0 -# Fri Jan 26 16:38:21 2018 +0000 -# Node ID 2c35f60ad26425a6d1dd1071e8a5adde79154fe3 -# Parent e2a7856edfbaccebd36bf02674e39b1a53867241 -8196221: AArch64: Mistake in committed patch for JDK-8195859 -Summary: The wrong patch was committed for JDK-8195859 -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 -@@ -1050,7 +1050,7 @@ - } else { - vtable_offset_in_bytes += vtable_index.as_constant() * wordSize; - ldr(method_result, -- form_address(rscratch1, recv_klass, vtable_offset_in_bytes)); -+ form_address(rscratch1, recv_klass, vtable_offset_in_bytes, 0)); - } - } - diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index 974ea7f..6a20565 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -204,7 +204,7 @@ # note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there. %global project aarch64-port %global repo jdk8u -%global revision aarch64-jdk8u161-b14 +%global revision aarch64-jdk8u162-b12 # eg # jdk8u60-b27 -> jdk8u60 or # aarch64-jdk8u60-b27 -> aarch64-jdk8u60 (dont forget spec escape % by %%) %global whole_update %(VERSION=%{revision}; echo ${VERSION%%-*}) # eg jdk8u60 -> 60 or aarch64-jdk8u60 -> 60 @@ -937,7 +937,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%{?1} Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever} -Release: 9.%{buildver}%{?dist} +Release: 1.%{buildver}%{?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 @@ -963,7 +963,7 @@ URL: http://openjdk.java.net/ Source0: %{project}-%{repo}-%{revision}.tar.xz # Shenandoah HotSpot -Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b14.tar.xz +Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u162-b12.tar.xz # Custom README for -src subpackage Source2: README.src @@ -1076,34 +1076,7 @@ Patch400: 8154313.patch Patch526: 6260348-pr3066.patch # 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property" Patch538: 8061305-pr3335-rh1423421.patch - -# Patches upstream and appearing in 8u162 -# 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813 -Patch551: 8181055-pr3394-rh1448880.patch -# 8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results -Patch553: 8181419-pr3413-rh1463144.patch -# 8145913, PR3466, RH1498309: PPC64: add Montgomery multiply intrinsic -Patch556: 8145913-pr3466-rh1498309.patch -# 8168318, PR3466, RH1498320: PPC64: Use cmpldi instead of li/cmpld -Patch557: 8168318-pr3466-rh1498320.patch -# 8170328, PR3466, RH1498321: PPC64: Use andis instead of lis/and -Patch558: 8170328-pr3466-rh1498321.patch -# 8181810, PR3466, RH1498319: PPC64: Leverage extrdi for bitfield extract -Patch559: 8181810-pr3466-rh1498319.patch - -# Aarch64 build fixes after January 2018 CPU -# -# JDK-8195685 AArch64 cannot build with JDK-8174962 (already included in source tarball) -# JDK-8196136 AArch64: Correct register use in patch for JDK-8195685 -# JDK-8195859 AArch64: vtableStubs gtest fails after 8174962 -# JDK-8196221 AArch64: Mistake in committed patch for JDK-8195859 -Patch570: JDK-8196136-correct-register-use-8195685.patch -Patch571: JDK-8195859-vtableStubs-gtest-fails-after-8174962.patch -Patch572: JDK-8196221-mistake-in-8195859.patch - -Patch573: rhbz_1540242.patch -Patch574: rhbz_1540242_2.patch - + # Patches ineligible for 8u # 8043805: Allow using a system-installed libjpeg Patch201: system-libjpeg.patch @@ -1503,29 +1476,11 @@ sh %{SOURCE12} %patch526 %patch528 %patch538 -%patch551 -%patch553 %patch560 pushd openjdk/jdk %patch561 -p1 popd -# PPC64 updates -%patch556 -%patch557 -%patch558 -%patch559 - -pushd openjdk/hotspot -# Aarch64 build fixes after January 2018 CPU -%patch570 -p1 -%patch571 -p1 -%patch572 -p1 - -# Zero/AArch64 fix for RHBZ#1540242 -%patch573 -p1 -%patch574 -p1 -popd # RPM-only fixes %patch525 @@ -2158,6 +2113,13 @@ require "copy_jdk_configs.lua" %endif %changelog +* Wed Mar 21 2018 Andrew Hughes - 1:1.8.0.162-1.b12 +- Update to aarch64-jdk8u162-b12 and aarch64-shenandoah-jdk8u162-b12. +- Remove upstreamed patches for 8181055/PR3394/RH1448880, +- 8181419/PR3413/RH1463144, 8145913/PR3466/RH1498309, +- 8168318/PR3466/RH1498320, 8170328/PR3466/RR1498321 and +- 8181810/PR3466/RH1498319. + * Wed Mar 07 2018 Adam Williamson - 1:1.8.0.161-9.b14 - Rebuild to fix GCC 8 mis-compilation See https://da.gd/YJVwk ("GCC 8 ABI change on x86_64") diff --git a/rhbz_1540242.patch b/rhbz_1540242.patch deleted file mode 100644 index 687d499..0000000 --- a/rhbz_1540242.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp ---- a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp -+++ b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp -@@ -698,6 +698,7 @@ - - extern "C" { - int SpinPause() { -+ return 0; - } - - void _Copy_conjoint_jshorts_atomic(jshort* from, jshort* to, size_t count) { -diff --git a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp ---- a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp -+++ b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp -@@ -408,6 +408,7 @@ - - extern "C" { - int SpinPause() { -+ return 0; - } - - diff --git a/rhbz_1540242_2.patch b/rhbz_1540242_2.patch deleted file mode 100644 index 7842171..0000000 --- a/rhbz_1540242_2.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff --git a/src/cpu/aarch64/vm/assembler_aarch64.hpp b/src/cpu/aarch64/vm/assembler_aarch64.hpp ---- a/src/cpu/aarch64/vm/assembler_aarch64.hpp -+++ b/src/cpu/aarch64/vm/assembler_aarch64.hpp -@@ -2529,6 +2529,8 @@ - virtual RegisterOrConstant delayed_value_impl(intptr_t* delayed_value_addr, - Register tmp, - int offset) { -+ ShouldNotCallThis(); -+ return RegisterOrConstant(); - } - - // Stack overflow checking -diff --git a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp ---- a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp -+++ b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp -@@ -209,6 +209,7 @@ - - Address LIR_Assembler::as_Address_hi(LIR_Address* addr) { - ShouldNotReachHere(); -+ return Address(); - } - - Address LIR_Assembler::as_Address(LIR_Address* addr) { -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 -@@ -434,8 +434,8 @@ - void mov(Register dst, Address a); - - public: -- int push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); } -- int pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); } -+ void push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); } -+ void pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); } - - // Push and pop everything that might be clobbered by a native - // runtime call except rscratch1 and rscratch2. (They are always -diff --git a/src/cpu/aarch64/vm/nativeInst_aarch64.hpp b/src/cpu/aarch64/vm/nativeInst_aarch64.hpp ---- a/src/cpu/aarch64/vm/nativeInst_aarch64.hpp -+++ b/src/cpu/aarch64/vm/nativeInst_aarch64.hpp -@@ -220,6 +220,7 @@ - else if (is_ldr_literal_at(instruction_address())) - return(addr_at(4)); - assert(false, "Unknown instruction in NativeMovConstReg"); -+ return NULL; - } - - intptr_t data() const; -diff --git a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp ---- a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp -+++ b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp -@@ -472,6 +472,7 @@ - err.report_and_die(); - - ShouldNotReachHere(); -+ return true; // Mute compiler - } - - void os::Linux::init_thread_fpu_state(void) { diff --git a/sources b/sources index def4c19..696fdf0 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (systemtap-tapset-3.6.0pre02.tar.xz) = d59858bbe9e927bdf47711e3c71c88f93567596aea3e1736b33b436a7a2cb38af25a9b4b4224ca513454b3f2d0371d14e753176c1810d9745a7e4af8edae7fb8 -SHA512 (aarch64-port-jdk8u-aarch64-jdk8u161-b14.tar.xz) = f60836acdf2a38961e1f8299b4c5274f0201a0e365c37f107e8793640f691e6fef9a03daa0172aa192eddab6db86e9ea904aa0da2abd4d5a75aa147af59d715e -SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u161-b14.tar.xz) = da15dbe6c02233d5c172cf862090f335e499fde97dd3a93cd15d6011b7f27864b1af3c58d3677bcf2aef763c3ca60bc97c2223990133ec4d073e5a93fb969053 +SHA512 (aarch64-port-jdk8u-aarch64-jdk8u162-b12.tar.xz) = 5bb05e931a57c25c627fa0b588b74ab89e050e6d0a0b7073ba1d65aa3a3ee9f5d5e62e1fbfe3da55a472ecb3dad9cec3a6faf73b5d95b59bcefa2246caddcab3 +SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u162-b12.tar.xz) = 833a4516fc3b68fedb78feddd272d7f52e9af90aeebc3eb95aa4a86d69b4540e14ad73fdd913b7201c9663c2f136cfe3ec2e2d3b8d39cf1e99ec1c7711079740 diff --git a/update_package.sh b/update_package.sh index 433aae1..ab68e3a 100755 --- a/update_package.sh +++ b/update_package.sh @@ -31,7 +31,7 @@ if [ "x$REPO_NAME" = "x" ] ; then REPO_NAME="jdk8u" fi if [ "x$VERSION" = "x" ] ; then - VERSION="aarch64-jdk8u151-b12" + VERSION="aarch64-jdk8u162-b12" fi if [ "x$COMPRESSION" = "x" ] ; then @@ -109,7 +109,7 @@ if [ "x$VERSION" = "xtip" ] ; then VERSION="tip" else #hardcoding version for anything else except tip - VERSION="aarch64-shenandoah-jdk8u151-b12" + VERSION="aarch64-shenandoah-jdk8u162-b12" fi MAIN_REPO_NAME=$REPO_NAME REPO_NAME=jdk8u-shenandoah