From 60d8a8debca24e948acd101d859879fadd9a9ae8e146d378a9654351043741c1 Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Tue, 4 Nov 2014 19:39:11 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/Java:Factory/java-1_8_0-openjdk?expand=0&rev=40 --- 04d6681092ca.tar.bz2 | 3 + 076b1f38a5cc.tar.bz2 | 3 - 1053aeab6b12.tar.bz2 | 3 - 1b3abbeee961.tar.bz2 | 3 - 1f5248bc0714.tar.bz2 | 3 - 337fb10bc4da.tar.bz2 | 3 - 375a3a3256d0.tar.bz2 | 3 + 3ac6832f7901.tar.bz2 | 3 - 3e6d3c8810ee.tar.bz2 | 3 + 69b84370397f.tar.bz2 | 3 - 6b93bf9ea3ea.tar.bz2 | 3 + a6d92ff8b962.tar.bz2 | 3 - aarch64-jdk8u40-b09_b10.patch | 1371 --------------------------------- b0cde44bdbfd.tar.bz2 | 3 + c3a4729c70fa.tar.bz2 | 3 - d78fb9203a27.tar.bz2 | 3 + e7560bceb36a.tar.bz2 | 3 + f5c47f0074b4.tar.bz2 | 3 + fb8db1363920.tar.bz2 | 3 + java-1_8_0-openjdk.changes | 9 + java-1_8_0-openjdk.spec | 25 +- 21 files changed, 46 insertions(+), 1413 deletions(-) create mode 100644 04d6681092ca.tar.bz2 delete mode 100644 076b1f38a5cc.tar.bz2 delete mode 100644 1053aeab6b12.tar.bz2 delete mode 100644 1b3abbeee961.tar.bz2 delete mode 100644 1f5248bc0714.tar.bz2 delete mode 100644 337fb10bc4da.tar.bz2 create mode 100644 375a3a3256d0.tar.bz2 delete mode 100644 3ac6832f7901.tar.bz2 create mode 100644 3e6d3c8810ee.tar.bz2 delete mode 100644 69b84370397f.tar.bz2 create mode 100644 6b93bf9ea3ea.tar.bz2 delete mode 100644 a6d92ff8b962.tar.bz2 delete mode 100644 aarch64-jdk8u40-b09_b10.patch create mode 100644 b0cde44bdbfd.tar.bz2 delete mode 100644 c3a4729c70fa.tar.bz2 create mode 100644 d78fb9203a27.tar.bz2 create mode 100644 e7560bceb36a.tar.bz2 create mode 100644 f5c47f0074b4.tar.bz2 create mode 100644 fb8db1363920.tar.bz2 diff --git a/04d6681092ca.tar.bz2 b/04d6681092ca.tar.bz2 new file mode 100644 index 0000000..135827f --- /dev/null +++ b/04d6681092ca.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75f4e94674e021e1d1342d4cfc20f1317c88673b22d982de9e1e6b8dcb416c5a +size 8020345 diff --git a/076b1f38a5cc.tar.bz2 b/076b1f38a5cc.tar.bz2 deleted file mode 100644 index 905fe9f..0000000 --- a/076b1f38a5cc.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c85a790e49cb105077c35a64e2309da971779581d6863d53791e43ea69dfd46 -size 2679991 diff --git a/1053aeab6b12.tar.bz2 b/1053aeab6b12.tar.bz2 deleted file mode 100644 index ccbd8c5..0000000 --- a/1053aeab6b12.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0daeea9e2b1b6c1d6da4b78dfb48a5f5708556ee4aaea24594abded8b37f09c5 -size 395359 diff --git a/1b3abbeee961.tar.bz2 b/1b3abbeee961.tar.bz2 deleted file mode 100644 index 0a74664..0000000 --- a/1b3abbeee961.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e14556e4b72da49d135717c0e8b37c67f7062604a2561f858df9b95c1ef22104 -size 7723010 diff --git a/1f5248bc0714.tar.bz2 b/1f5248bc0714.tar.bz2 deleted file mode 100644 index b8765dc..0000000 --- a/1f5248bc0714.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:17382fb6b9207555b23ff97424e765ec32b7efbb0c4da1afe1e6071d2924e723 -size 2728575 diff --git a/337fb10bc4da.tar.bz2 b/337fb10bc4da.tar.bz2 deleted file mode 100644 index fb9b432..0000000 --- a/337fb10bc4da.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99c9b9dcd235cce986804ca1cb8beb4d274ab58cdff4964adb0c5b57df48acba -size 2529174 diff --git a/375a3a3256d0.tar.bz2 b/375a3a3256d0.tar.bz2 new file mode 100644 index 0000000..2c8a505 --- /dev/null +++ b/375a3a3256d0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10f2ff0a6b2eb39a302a8213f58d24211474e5d1e3388f0afc252a60600b2ef6 +size 2650633 diff --git a/3ac6832f7901.tar.bz2 b/3ac6832f7901.tar.bz2 deleted file mode 100644 index 949c87e..0000000 --- a/3ac6832f7901.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d55516ac8d1f34d5a0e933eeecdd0e62a9c4b8c5c7baf1c7d24b895a22a626bf -size 8012765 diff --git a/3e6d3c8810ee.tar.bz2 b/3e6d3c8810ee.tar.bz2 new file mode 100644 index 0000000..0e1de0e --- /dev/null +++ b/3e6d3c8810ee.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39032cacc16e733f2d53e454ff31639d008284724e3e7b624b8e8cbce21a83e2 +size 395423 diff --git a/69b84370397f.tar.bz2 b/69b84370397f.tar.bz2 deleted file mode 100644 index a494b52..0000000 --- a/69b84370397f.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:43c24a99b6050d07cec0fc9c87c94d38b676e6d9fd47f1498787c2e655358cf5 -size 2364515 diff --git a/6b93bf9ea3ea.tar.bz2 b/6b93bf9ea3ea.tar.bz2 new file mode 100644 index 0000000..0ad544e --- /dev/null +++ b/6b93bf9ea3ea.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:842bd31ac5bf0626e7757735f38642073fc84e9dd7af11631857f63548ce2fc7 +size 7725935 diff --git a/a6d92ff8b962.tar.bz2 b/a6d92ff8b962.tar.bz2 deleted file mode 100644 index 654d4c4..0000000 --- a/a6d92ff8b962.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:679c7d67f5d9c9183892502d03362e798698294e79b1f63a0f565e2ae459cc7d -size 1018872 diff --git a/aarch64-jdk8u40-b09_b10.patch b/aarch64-jdk8u40-b09_b10.patch deleted file mode 100644 index cbd7d8e..0000000 --- a/aarch64-jdk8u40-b09_b10.patch +++ /dev/null @@ -1,1371 +0,0 @@ ---- hotspot/make/bsd/makefiles/mapfile-vers-debug 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/make/bsd/makefiles/mapfile-vers-debug 2014-10-16 18:26:51.011957985 +0200 -@@ -82,6 +82,7 @@ - _JVM_EnableCompiler - _JVM_Exit - _JVM_FillInStackTrace -+ _JVM_FindClassFromCaller - _JVM_FindClassFromClass - _JVM_FindClassFromClassLoader - _JVM_FindClassFromBootLoader ---- hotspot/make/bsd/makefiles/mapfile-vers-product 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/make/bsd/makefiles/mapfile-vers-product 2014-10-16 18:26:51.011957985 +0200 -@@ -82,6 +82,7 @@ - _JVM_EnableCompiler - _JVM_Exit - _JVM_FillInStackTrace -+ _JVM_FindClassFromCaller - _JVM_FindClassFromClass - _JVM_FindClassFromClassLoader - _JVM_FindClassFromBootLoader ---- hotspot/make/linux/makefiles/mapfile-vers-debug 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/make/linux/makefiles/mapfile-vers-debug 2014-10-16 18:26:51.011957985 +0200 -@@ -84,6 +84,7 @@ - JVM_EnableCompiler; - JVM_Exit; - JVM_FillInStackTrace; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindClassFromBootLoader; ---- hotspot/make/linux/makefiles/mapfile-vers-product 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/make/linux/makefiles/mapfile-vers-product 2014-10-16 18:26:51.011957985 +0200 -@@ -84,6 +84,7 @@ - JVM_EnableCompiler; - JVM_Exit; - JVM_FillInStackTrace; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindClassFromBootLoader; ---- hotspot/make/solaris/makefiles/mapfile-vers 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/make/solaris/makefiles/mapfile-vers 2014-10-16 18:26:51.012957962 +0200 -@@ -84,6 +84,7 @@ - JVM_EnableCompiler; - JVM_Exit; - JVM_FillInStackTrace; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindClassFromBootLoader; ---- hotspot/src/share/vm/c1/c1_LIRGenerator.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/c1/c1_LIRGenerator.cpp 2014-10-16 18:26:51.013957939 +0200 -@@ -2082,14 +2082,14 @@ - LIR_Opr base_op = base.result(); - LIR_Opr index_op = idx.result(); - #ifndef _LP64 -- if (x->base()->type()->tag() == longTag) { -+ if (base_op->type() == T_LONG) { - base_op = new_register(T_INT); - __ convert(Bytecodes::_l2i, base.result(), base_op); - } - if (x->has_index()) { -- if (x->index()->type()->tag() == longTag) { -+ if (index_op->type() == T_LONG) { - LIR_Opr long_index_op = index_op; -- if (x->index()->type()->is_constant()) { -+ if (index_op->is_constant()) { - long_index_op = new_register(T_LONG); - __ move(index_op, long_index_op); - } -@@ -2104,14 +2104,14 @@ - assert(!x->has_index() || index_op->type() == T_INT, "index should be an int"); - #else - if (x->has_index()) { -- if (x->index()->type()->tag() == intTag) { -- if (!x->index()->type()->is_constant()) { -+ if (index_op->type() == T_INT) { -+ if (!index_op->is_constant()) { - index_op = new_register(T_LONG); - __ convert(Bytecodes::_i2l, idx.result(), index_op); - } - } else { -- assert(x->index()->type()->tag() == longTag, "must be"); -- if (x->index()->type()->is_constant()) { -+ assert(index_op->type() == T_LONG, "must be"); -+ if (index_op->is_constant()) { - index_op = new_register(T_LONG); - __ move(idx.result(), index_op); - } -@@ -2192,12 +2192,12 @@ - LIR_Opr index_op = idx.result(); - - #ifndef _LP64 -- if (x->base()->type()->tag() == longTag) { -+ if (base_op->type() == T_LONG) { - base_op = new_register(T_INT); - __ convert(Bytecodes::_l2i, base.result(), base_op); - } - if (x->has_index()) { -- if (x->index()->type()->tag() == longTag) { -+ if (index_op->type() == T_LONG) { - index_op = new_register(T_INT); - __ convert(Bytecodes::_l2i, idx.result(), index_op); - } -@@ -2207,7 +2207,7 @@ - assert(!x->has_index() || (index_op->type() == T_INT && !index_op->is_constant()), "index should be an non-constant int"); - #else - if (x->has_index()) { -- if (x->index()->type()->tag() == intTag) { -+ if (index_op->type() == T_INT) { - index_op = new_register(T_LONG); - __ convert(Bytecodes::_i2l, idx.result(), index_op); - } ---- hotspot/src/share/vm/classfile/classFileParser.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/classFileParser.cpp 2014-10-16 18:26:51.015957893 +0200 -@@ -2830,6 +2830,11 @@ - "bootstrap_method_index %u has bad constant type in class file %s", - bootstrap_method_index, - CHECK); -+ -+ guarantee_property((operand_fill_index + 1 + argument_count) < operands->length(), -+ "Invalid BootstrapMethods num_bootstrap_methods or num_bootstrap_arguments value in class file %s", -+ CHECK); -+ - operands->at_put(operand_fill_index++, bootstrap_method_index); - operands->at_put(operand_fill_index++, argument_count); - -@@ -2847,7 +2852,6 @@ - } - - assert(operand_fill_index == operands->length(), "exact fill"); -- assert(ConstantPool::operand_array_length(operands) == attribute_array_length, "correct decode"); - - u1* current_end = cfs->current(); - guarantee_property(current_end == current_start + attribute_byte_length, ---- hotspot/src/share/vm/classfile/classLoader.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/classLoader.cpp 2014-10-16 18:26:51.016957871 +0200 -@@ -90,6 +90,7 @@ - typedef jboolean (JNICALL *ReadEntry_t)(jzfile *zip, jzentry *entry, unsigned char *buf, char *namebuf); - typedef jboolean (JNICALL *ReadMappedEntry_t)(jzfile *zip, jzentry *entry, unsigned char **buf, char *namebuf); - typedef jzentry* (JNICALL *GetNextEntry_t)(jzfile *zip, jint n); -+typedef jint (JNICALL *Crc32_t)(jint crc, const jbyte *buf, jint len); - - static ZipOpen_t ZipOpen = NULL; - static ZipClose_t ZipClose = NULL; -@@ -98,6 +99,7 @@ - static ReadMappedEntry_t ReadMappedEntry = NULL; - static GetNextEntry_t GetNextEntry = NULL; - static canonicalize_fn_t CanonicalizeEntry = NULL; -+static Crc32_t Crc32 = NULL; - - // Globals - -@@ -810,9 +812,11 @@ - ReadEntry = CAST_TO_FN_PTR(ReadEntry_t, os::dll_lookup(handle, "ZIP_ReadEntry")); - ReadMappedEntry = CAST_TO_FN_PTR(ReadMappedEntry_t, os::dll_lookup(handle, "ZIP_ReadMappedEntry")); - GetNextEntry = CAST_TO_FN_PTR(GetNextEntry_t, os::dll_lookup(handle, "ZIP_GetNextEntry")); -+ Crc32 = CAST_TO_FN_PTR(Crc32_t, os::dll_lookup(handle, "ZIP_CRC32")); - - // ZIP_Close is not exported on Windows in JDK5.0 so don't abort if ZIP_Close is NULL -- if (ZipOpen == NULL || FindEntry == NULL || ReadEntry == NULL || GetNextEntry == NULL) { -+ if (ZipOpen == NULL || FindEntry == NULL || ReadEntry == NULL || -+ GetNextEntry == NULL || Crc32 == NULL) { - vm_exit_during_initialization("Corrupted ZIP library", path); - } - -@@ -822,6 +826,11 @@ - // This lookup only works on 1.3. Do not check for non-null here - } - -+int ClassLoader::crc32(int crc, const char* buf, int len) { -+ assert(Crc32 != NULL, "ZIP_CRC32 is not found"); -+ return (*Crc32)(crc, (const jbyte*)buf, len); -+} -+ - // PackageInfo data exists in order to support the java.lang.Package - // class. A Package object provides information about a java package - // (version, vendor, etc.) which originates in the manifest of the jar ---- hotspot/src/share/vm/classfile/classLoader.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/classLoader.hpp 2014-10-16 18:26:51.016957871 +0200 -@@ -228,6 +228,7 @@ - // to avoid confusing the zip library - static bool get_canonical_path(const char* orig, char* out, int len); - public: -+ static int crc32(int crc, const char* buf, int len); - static bool update_class_path_entry_list(const char *path, - bool check_for_duplicates, - bool throw_exception=true); ---- hotspot/src/share/vm/classfile/stackMapFrame.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/stackMapFrame.cpp 2014-10-16 18:26:51.016957871 +0200 -@@ -148,7 +148,7 @@ - VerificationType* from, VerificationType* to, int32_t len, TRAPS) const { - int32_t i = 0; - for (i = 0; i < len; i++) { -- if (!to[i].is_assignable_from(from[i], verifier(), THREAD)) { -+ if (!to[i].is_assignable_from(from[i], verifier(), false, THREAD)) { - break; - } - } -@@ -245,7 +245,7 @@ - } - VerificationType top = _stack[--_stack_size]; - bool subtype = type.is_assignable_from( -- top, verifier(), CHECK_(VerificationType::bogus_type())); -+ top, verifier(), false, CHECK_(VerificationType::bogus_type())); - if (!subtype) { - verifier()->verify_error( - ErrorContext::bad_type(_offset, stack_top_ctx(), -@@ -265,7 +265,7 @@ - return VerificationType::bogus_type(); - } - bool subtype = type.is_assignable_from(_locals[index], -- verifier(), CHECK_(VerificationType::bogus_type())); -+ verifier(), false, CHECK_(VerificationType::bogus_type())); - if (!subtype) { - verifier()->verify_error( - ErrorContext::bad_type(_offset, -@@ -288,14 +288,14 @@ - "get long/double overflows locals"); - return; - } -- bool subtype = type1.is_assignable_from(_locals[index], verifier(), CHECK); -+ bool subtype = type1.is_assignable_from(_locals[index], verifier(), false, CHECK); - if (!subtype) { - verifier()->verify_error( - ErrorContext::bad_type(_offset, - TypeOrigin::local(index, this), TypeOrigin::implicit(type1)), - "Bad local variable type"); - } else { -- subtype = type2.is_assignable_from(_locals[index + 1], verifier(), CHECK); -+ subtype = type2.is_assignable_from(_locals[index + 1], verifier(), false, CHECK); - if (!subtype) { - /* Unreachable? All local store routines convert a split long or double - * into a TOP during the store. So we should never end up seeing an ---- hotspot/src/share/vm/classfile/stackMapFrame.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/stackMapFrame.hpp 2014-10-16 18:26:51.017957848 +0200 -@@ -234,7 +234,7 @@ - if (_stack_size != 0) { - VerificationType top = _stack[_stack_size - 1]; - bool subtype = type.is_assignable_from( -- top, verifier(), CHECK_(VerificationType::bogus_type())); -+ top, verifier(), false, CHECK_(VerificationType::bogus_type())); - if (subtype) { - --_stack_size; - return top; -@@ -249,9 +249,9 @@ - assert(type2.is_long() || type2.is_double(), "must be long/double_2"); - if (_stack_size >= 2) { - VerificationType top1 = _stack[_stack_size - 1]; -- bool subtype1 = type1.is_assignable_from(top1, verifier(), CHECK); -+ bool subtype1 = type1.is_assignable_from(top1, verifier(), false, CHECK); - VerificationType top2 = _stack[_stack_size - 2]; -- bool subtype2 = type2.is_assignable_from(top2, verifier(), CHECK); -+ bool subtype2 = type2.is_assignable_from(top2, verifier(), false, CHECK); - if (subtype1 && subtype2) { - _stack_size -= 2; - return; ---- hotspot/src/share/vm/classfile/verificationType.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/verificationType.cpp 2014-10-16 18:26:51.017957848 +0200 -@@ -42,7 +42,8 @@ - } - - bool VerificationType::is_reference_assignable_from( -- const VerificationType& from, ClassVerifier* context, TRAPS) const { -+ const VerificationType& from, ClassVerifier* context, -+ bool from_field_is_protected, TRAPS) const { - instanceKlassHandle klass = context->current_class(); - if (from.is_null()) { - // null is assignable to any reference -@@ -62,9 +63,11 @@ - Handle(THREAD, klass->protection_domain()), true, CHECK_false); - KlassHandle this_class(THREAD, obj); - -- if (this_class->is_interface()) { -- // We treat interfaces as java.lang.Object, including -- // java.lang.Cloneable and java.io.Serializable -+ if (this_class->is_interface() && (!from_field_is_protected || -+ from.name() != vmSymbols::java_lang_Object())) { -+ // If we are not trying to access a protected field or method in -+ // java.lang.Object then we treat interfaces as java.lang.Object, -+ // including java.lang.Cloneable and java.io.Serializable. - return true; - } else if (from.is_object()) { - Klass* from_class = SystemDictionary::resolve_or_fail( -@@ -76,7 +79,8 @@ - VerificationType comp_this = get_component(context, CHECK_false); - VerificationType comp_from = from.get_component(context, CHECK_false); - if (!comp_this.is_bogus() && !comp_from.is_bogus()) { -- return comp_this.is_assignable_from(comp_from, context, CHECK_false); -+ return comp_this.is_assignable_from(comp_from, context, -+ from_field_is_protected, CHECK_false); - } - } - return false; ---- hotspot/src/share/vm/classfile/verificationType.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/verificationType.hpp 2014-10-16 18:26:51.017957848 +0200 -@@ -265,7 +265,8 @@ - // is assignable to another. Returns true if one can assign 'from' to - // this. - bool is_assignable_from( -- const VerificationType& from, ClassVerifier* context, TRAPS) const { -+ const VerificationType& from, ClassVerifier* context, -+ bool from_field_is_protected, TRAPS) const { - if (equals(from) || is_bogus()) { - return true; - } else { -@@ -286,7 +287,9 @@ - return from.is_integer(); - default: - if (is_reference() && from.is_reference()) { -- return is_reference_assignable_from(from, context, CHECK_false); -+ return is_reference_assignable_from(from, context, -+ from_field_is_protected, -+ CHECK_false); - } else { - return false; - } -@@ -308,7 +311,8 @@ - private: - - bool is_reference_assignable_from( -- const VerificationType&, ClassVerifier*, TRAPS) const; -+ const VerificationType&, ClassVerifier*, bool from_field_is_protected, -+ TRAPS) const; - }; - - #endif // SHARE_VM_CLASSFILE_VERIFICATIONTYPE_HPP ---- hotspot/src/share/vm/classfile/verifier.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/classfile/verifier.cpp 2014-10-16 18:26:51.018957825 +0200 -@@ -1737,7 +1737,7 @@ - VerificationType throwable = - VerificationType::reference_type(vmSymbols::java_lang_Throwable()); - bool is_subclass = throwable.is_assignable_from( -- catch_type, this, CHECK_VERIFY(this)); -+ catch_type, this, false, CHECK_VERIFY(this)); - if (!is_subclass) { - // 4286534: should throw VerifyError according to recent spec change - verify_error(ErrorContext::bad_type(handler_pc, -@@ -2192,7 +2192,7 @@ - stack_object_type = current_type(); - } - is_assignable = target_class_type.is_assignable_from( -- stack_object_type, this, CHECK_VERIFY(this)); -+ stack_object_type, this, false, CHECK_VERIFY(this)); - if (!is_assignable) { - verify_error(ErrorContext::bad_type(bci, - current_frame->stack_top_ctx(), -@@ -2219,7 +2219,7 @@ - // It's protected access, check if stack object is assignable to - // current class. - is_assignable = current_type().is_assignable_from( -- stack_object_type, this, CHECK_VERIFY(this)); -+ stack_object_type, this, true, CHECK_VERIFY(this)); - if (!is_assignable) { - verify_error(ErrorContext::bad_type(bci, - current_frame->stack_top_ctx(), -@@ -2492,7 +2492,7 @@ - instanceKlassHandle mh(THREAD, m->method_holder()); - if (m->is_protected() && !mh->is_same_class_package(_klass())) { - bool assignable = current_type().is_assignable_from( -- objectref_type, this, CHECK_VERIFY(this)); -+ objectref_type, this, true, CHECK_VERIFY(this)); - if (!assignable) { - verify_error(ErrorContext::bad_type(bci, - TypeOrigin::cp(new_class_index, objectref_type), -@@ -2667,11 +2667,11 @@ - bool have_imr_indirect = cp->tag_at(index).value() == JVM_CONSTANT_InterfaceMethodref; - if (!current_class()->is_anonymous()) { - subtype = ref_class_type.is_assignable_from( -- current_type(), this, CHECK_VERIFY(this)); -+ current_type(), this, false, CHECK_VERIFY(this)); - } else { - VerificationType host_klass_type = - VerificationType::reference_type(current_class()->host_klass()->name()); -- subtype = ref_class_type.is_assignable_from(host_klass_type, this, CHECK_VERIFY(this)); -+ subtype = ref_class_type.is_assignable_from(host_klass_type, this, false, CHECK_VERIFY(this)); - - // If invokespecial of IMR, need to recheck for same or - // direct interface relative to the host class -@@ -2715,7 +2715,7 @@ - VerificationType top = current_frame->pop_stack(CHECK_VERIFY(this)); - VerificationType hosttype = - VerificationType::reference_type(current_class()->host_klass()->name()); -- bool subtype = hosttype.is_assignable_from(top, this, CHECK_VERIFY(this)); -+ bool subtype = hosttype.is_assignable_from(top, this, false, CHECK_VERIFY(this)); - if (!subtype) { - verify_error( ErrorContext::bad_type(current_frame->offset(), - current_frame->stack_top_ctx(), -@@ -2740,7 +2740,7 @@ - // It's protected access, check if stack object is - // assignable to current class. - bool is_assignable = current_type().is_assignable_from( -- stack_object_type, this, CHECK_VERIFY(this)); -+ stack_object_type, this, true, CHECK_VERIFY(this)); - if (!is_assignable) { - if (ref_class_type.name() == vmSymbols::java_lang_Object() - && stack_object_type.is_array() -@@ -2923,7 +2923,7 @@ - "Method expects a return value"); - return; - } -- bool match = return_type.is_assignable_from(type, this, CHECK_VERIFY(this)); -+ bool match = return_type.is_assignable_from(type, this, false, CHECK_VERIFY(this)); - if (!match) { - verify_error(ErrorContext::bad_type(bci, - current_frame->stack_top_ctx(), TypeOrigin::signature(return_type)), ---- hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp 2014-10-16 18:26:51.019957802 +0200 -@@ -2733,10 +2733,12 @@ - } - } - --void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl) { -- assert(fl->count() == 0, "Precondition."); -- assert(word_sz < CompactibleFreeListSpace::IndexSetSize, -- "Precondition"); -+// Used by par_get_chunk_of_blocks() for the chunks from the -+// indexed_free_lists. Looks for a chunk with size that is a multiple -+// of "word_sz" and if found, splits it into "word_sz" chunks and add -+// to the free list "fl". "n" is the maximum number of chunks to -+// be added to "fl". -+bool CompactibleFreeListSpace:: par_get_chunk_of_blocks_IFL(size_t word_sz, size_t n, AdaptiveFreeList* fl) { - - // We'll try all multiples of word_sz in the indexed set, starting with - // word_sz itself and, if CMSSplitIndexedFreeListBlocks, try larger multiples, -@@ -2817,11 +2819,15 @@ - Mutex::_no_safepoint_check_flag); - ssize_t births = _indexedFreeList[word_sz].split_births() + num; - _indexedFreeList[word_sz].set_split_births(births); -- return; -+ return true; - } - } -+ return found; - } -- // Otherwise, we'll split a block from the dictionary. -+} -+ -+FreeChunk* CompactibleFreeListSpace::get_n_way_chunk_to_split(size_t word_sz, size_t n) { -+ - FreeChunk* fc = NULL; - FreeChunk* rem_fc = NULL; - size_t rem; -@@ -2832,16 +2838,12 @@ - fc = dictionary()->get_chunk(MAX2(n * word_sz, _dictionary->min_size()), - FreeBlockDictionary::atLeast); - if (fc != NULL) { -- _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk -- dictionary()->dict_census_update(fc->size(), -- true /*split*/, -- false /*birth*/); - break; - } else { - n--; - } - } -- if (fc == NULL) return; -+ if (fc == NULL) return NULL; - // Otherwise, split up that block. - assert((ssize_t)n >= 1, "Control point invariant"); - assert(fc->is_free(), "Error: should be a free block"); -@@ -2863,10 +2865,14 @@ - // dictionary and return, leaving "fl" empty. - if (n == 0) { - returnChunkToDictionary(fc); -- assert(fl->count() == 0, "We never allocated any blocks"); -- return; -+ return NULL; - } - -+ _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk -+ dictionary()->dict_census_update(fc->size(), -+ true /*split*/, -+ false /*birth*/); -+ - // First return the remainder, if any. - // Note that we hold the lock until we decide if we're going to give - // back the remainder to the dictionary, since a concurrent allocation -@@ -2899,7 +2905,24 @@ - _indexedFreeList[rem].return_chunk_at_head(rem_fc); - smallSplitBirth(rem); - } -- assert((ssize_t)n > 0 && fc != NULL, "Consistency"); -+ assert(n * word_sz == fc->size(), -+ err_msg("Chunk size " SIZE_FORMAT " is not exactly splittable by " -+ SIZE_FORMAT " sized chunks of size " SIZE_FORMAT, -+ fc->size(), n, word_sz)); -+ return fc; -+} -+ -+void CompactibleFreeListSpace:: par_get_chunk_of_blocks_dictionary(size_t word_sz, size_t targetted_number_of_chunks, AdaptiveFreeList* fl) { -+ -+ FreeChunk* fc = get_n_way_chunk_to_split(word_sz, targetted_number_of_chunks); -+ -+ if (fc == NULL) { -+ return; -+ } -+ -+ size_t n = fc->size() / word_sz; -+ -+ assert((ssize_t)n > 0, "Consistency"); - // Now do the splitting up. - // Must do this in reverse order, so that anybody attempting to - // access the main chunk sees it as a single free block until we -@@ -2947,6 +2970,20 @@ - assert(fl->tail()->next() == NULL, "List invariant."); - } - -+void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl) { -+ assert(fl->count() == 0, "Precondition."); -+ assert(word_sz < CompactibleFreeListSpace::IndexSetSize, -+ "Precondition"); -+ -+ if (par_get_chunk_of_blocks_IFL(word_sz, n, fl)) { -+ // Got it -+ return; -+ } -+ -+ // Otherwise, we'll split a block from the dictionary. -+ par_get_chunk_of_blocks_dictionary(word_sz, n, fl); -+} -+ - // Set up the space's par_seq_tasks structure for work claiming - // for parallel rescan. See CMSParRemarkTask where this is currently used. - // XXX Need to suitably abstract and generalize this and the next ---- hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp 2014-10-16 18:26:51.020957780 +0200 -@@ -172,6 +172,20 @@ - // list of size "word_sz", and must now be decremented. - void par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl); - -+ // Used by par_get_chunk_of_blocks() for the chunks from the -+ // indexed_free_lists. -+ bool par_get_chunk_of_blocks_IFL(size_t word_sz, size_t n, AdaptiveFreeList* fl); -+ -+ // Used by par_get_chunk_of_blocks_dictionary() to get a chunk -+ // evenly splittable into "n" "word_sz" chunks. Returns that -+ // evenly splittable chunk. May split a larger chunk to get the -+ // evenly splittable chunk. -+ FreeChunk* get_n_way_chunk_to_split(size_t word_sz, size_t n); -+ -+ // Used by par_get_chunk_of_blocks() for the chunks from the -+ // dictionary. -+ void par_get_chunk_of_blocks_dictionary(size_t word_sz, size_t n, AdaptiveFreeList* fl); -+ - // Allocation helper functions - // Allocate using a strategy that takes from the indexed free lists - // first. This allocation strategy assumes a companion sweeping ---- hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-10-16 18:26:51.022957734 +0200 -@@ -2343,6 +2343,7 @@ - case GCCause::_gc_locker: return GCLockerInvokesConcurrent; - case GCCause::_java_lang_system_gc: return ExplicitGCInvokesConcurrent; - case GCCause::_g1_humongous_allocation: return true; -+ case GCCause::_update_allocation_context_stats_inc: return true; - default: return false; - } - } ---- hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp 2014-10-16 18:26:51.022957734 +0200 -@@ -95,8 +95,9 @@ - assert(!_should_initiate_conc_mark || - ((_gc_cause == GCCause::_gc_locker && GCLockerInvokesConcurrent) || - (_gc_cause == GCCause::_java_lang_system_gc && ExplicitGCInvokesConcurrent) || -- _gc_cause == GCCause::_g1_humongous_allocation), -- "only a GC locker, a System.gc() or a hum allocation induced GC should start a cycle"); -+ _gc_cause == GCCause::_g1_humongous_allocation || -+ _gc_cause == GCCause::_update_allocation_context_stats_inc), -+ "only a GC locker, a System.gc(), stats update or a hum allocation induced GC should start a cycle"); - - if (_word_size > 0) { - // An allocation has been requested. So, try to do that first. ---- hotspot/src/share/vm/gc_interface/gcCause.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/gc_interface/gcCause.cpp 2014-10-16 18:26:51.023957711 +0200 -@@ -54,7 +54,8 @@ - case _wb_young_gc: - return "WhiteBox Initiated Young GC"; - -- case _update_allocation_context_stats: -+ case _update_allocation_context_stats_inc: -+ case _update_allocation_context_stats_full: - return "Update Allocation Context Stats"; - - case _no_gc: ---- hotspot/src/share/vm/gc_interface/gcCause.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/gc_interface/gcCause.hpp 2014-10-16 18:26:51.023957711 +0200 -@@ -47,7 +47,8 @@ - _heap_inspection, - _heap_dump, - _wb_young_gc, -- _update_allocation_context_stats, -+ _update_allocation_context_stats_inc, -+ _update_allocation_context_stats_full, - - /* implementation independent, but reserved for GC use */ - _no_gc, ---- hotspot/src/share/vm/interpreter/linkResolver.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/interpreter/linkResolver.cpp 2014-10-16 18:26:51.024957688 +0200 -@@ -246,6 +246,12 @@ - // Ignore overpasses so statics can be found during resolution - Method* result_oop = klass->uncached_lookup_method(name, signature, Klass::skip_overpass); - -+ if (klass->oop_is_array()) { -+ // Only consider klass and super klass for arrays -+ result = methodHandle(THREAD, result_oop); -+ return; -+ } -+ - // JDK 8, JVMS 5.4.3.4: Interface method resolution should - // ignore static and non-public methods of java.lang.Object, - // like clone, finalize, registerNatives. -@@ -290,6 +296,11 @@ - result = methodHandle(THREAD, super_klass->uncached_lookup_method(name, signature, Klass::normal)); - } - -+ if (klass->oop_is_array()) { -+ // Only consider klass and super klass for arrays -+ return; -+ } -+ - if (result.is_null()) { - Array* default_methods = InstanceKlass::cast(klass())->default_methods(); - if (default_methods != NULL) { -@@ -546,7 +557,7 @@ - // 2. lookup method in resolved klass and its super klasses - lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, true, false, CHECK); - -- if (resolved_method.is_null()) { // not found in the class hierarchy -+ if (resolved_method.is_null() && !resolved_klass->oop_is_array()) { // not found in the class hierarchy - // 3. lookup method in all the interfaces implemented by the resolved klass - lookup_method_in_interfaces(resolved_method, resolved_klass, method_name, method_signature, CHECK); - -@@ -559,6 +570,7 @@ - CLEAR_PENDING_EXCEPTION; - } - } -+ } - - if (resolved_method.is_null()) { - // 4. method lookup failed -@@ -569,7 +581,6 @@ - method_signature), - nested_exception); - } -- } - - // 5. access checks, access checking may be turned off when calling from within the VM. - if (check_access) { -@@ -634,9 +645,11 @@ - // JDK8: also look for static methods - lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, false, true, CHECK); - -- if (resolved_method.is_null()) { -+ if (resolved_method.is_null() && !resolved_klass->oop_is_array()) { - // lookup method in all the super-interfaces - lookup_method_in_interfaces(resolved_method, resolved_klass, method_name, method_signature, CHECK); -+ } -+ - if (resolved_method.is_null()) { - // no method found - ResourceMark rm(THREAD); -@@ -645,7 +658,6 @@ - method_name, - method_signature)); - } -- } - - if (check_access) { - // JDK8 adds non-public interface methods, and accessability check requirement -@@ -776,7 +788,7 @@ - } - - // Resolve instance field -- KlassHandle sel_klass(THREAD, InstanceKlass::cast(resolved_klass())->find_field(field, sig, &fd)); -+ KlassHandle sel_klass(THREAD, resolved_klass->find_field(field, sig, &fd)); - // check if field exists; i.e., if a klass containing the field def has been selected - if (sel_klass.is_null()) { - ResourceMark rm(THREAD); ---- hotspot/src/share/vm/memory/filemap.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/memory/filemap.cpp 2014-10-16 18:26:51.024957688 +0200 -@@ -314,7 +314,6 @@ - fail_continue("The shared archive file has the wrong version."); - return false; - } -- _file_offset = (long)n; - - size_t info_size = _header->_paths_misc_info_size; - _paths_misc_info = NEW_C_HEAP_ARRAY_RETURN_NULL(char, info_size, mtClass); -@@ -330,6 +329,14 @@ - return false; - } - -+ size_t len = lseek(fd, 0, SEEK_END); -+ struct FileMapInfo::FileMapHeader::space_info* si = -+ &_header->_space[MetaspaceShared::mc]; -+ if (si->_file_offset >= len || len - si->_file_offset < si->_used) { -+ fail_continue("The shared archive file has been truncated."); -+ return false; -+ } -+ - _file_offset += (long)n; - return true; - } -@@ -430,6 +437,7 @@ - si->_capacity = capacity; - si->_read_only = read_only; - si->_allow_exec = allow_exec; -+ si->_crc = ClassLoader::crc32(0, base, (jint)size); - write_bytes_aligned(base, (int)size); - } - -@@ -454,14 +462,15 @@ - // Align file position to an allocation unit boundary. - - void FileMapInfo::align_file_position() { -- long new_file_offset = align_size_up(_file_offset, os::vm_allocation_granularity()); -+ size_t new_file_offset = align_size_up(_file_offset, -+ os::vm_allocation_granularity()); - if (new_file_offset != _file_offset) { - _file_offset = new_file_offset; - if (_file_open) { - // Seek one byte back from the target and write a byte to insure - // that the written file is the correct length. - _file_offset -= 1; -- if (lseek(_fd, _file_offset, SEEK_SET) < 0) { -+ if (lseek(_fd, (long)_file_offset, SEEK_SET) < 0) { - fail_stop("Unable to seek.", NULL); - } - char zero = 0; -@@ -568,6 +577,19 @@ - return base; - } - -+bool FileMapInfo::verify_region_checksum(int i) { -+ if (!VerifySharedSpaces) { -+ return true; -+ } -+ const char* buf = _header->_space[i]._base; -+ size_t sz = _header->_space[i]._used; -+ int crc = ClassLoader::crc32(0, buf, (jint)sz); -+ if (crc != _header->_space[i]._crc) { -+ fail_continue("Checksum verification failed."); -+ return false; -+ } -+ return true; -+} - - // Unmap a memory region in the address space. - -@@ -628,15 +650,33 @@ - return true; - } - --bool FileMapInfo::FileMapHeader::validate() { -- if (_version != current_version()) { -- FileMapInfo::fail_continue("The shared archive file is the wrong version."); -- return false; -+int FileMapInfo::FileMapHeader::compute_crc() { -+ char* header = data(); -+ // start computing from the field after _crc -+ char* buf = (char*)&_crc + sizeof(int); -+ size_t sz = data_size() - (buf - header); -+ int crc = ClassLoader::crc32(0, buf, (jint)sz); -+ return crc; -+} -+ -+int FileMapInfo::compute_header_crc() { -+ return _header->compute_crc(); - } -+ -+bool FileMapInfo::FileMapHeader::validate() { - if (_magic != (int)0xf00baba2) { - FileMapInfo::fail_continue("The shared archive file has a bad magic number."); - return false; - } -+ if (VerifySharedSpaces && compute_crc() != _crc) { -+ fail_continue("Header checksum verification failed."); -+ return false; -+ } -+ if (_version != current_version()) { -+ FileMapInfo::fail_continue("The shared archive file is the wrong version."); -+ -+ return false; -+ } - char header_version[JVM_IDENT_MAX]; - get_header_version(header_version); - if (strncmp(_jvm_ident, header_version, JVM_IDENT_MAX-1) != 0) { ---- hotspot/src/share/vm/memory/filemap.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/memory/filemap.hpp 2014-10-16 18:26:51.024957688 +0200 -@@ -61,7 +61,7 @@ - - bool _file_open; - int _fd; -- long _file_offset; -+ size_t _file_offset; - - private: - static SharedClassPathEntry* _classpath_entry_table; -@@ -87,12 +87,14 @@ - } - - int _magic; // identify file type. -+ int _crc; // header crc checksum. - int _version; // (from enum, above.) - size_t _alignment; // how shared archive should be aligned - int _obj_alignment; // value of ObjectAlignmentInBytes - - struct space_info { -- int _file_offset; // sizeof(this) rounded to vm page size -+ int _crc; // crc checksum of the current space -+ size_t _file_offset; // sizeof(this) rounded to vm page size - char* _base; // copy-on-write base address - size_t _capacity; // for validity checking - size_t _used; // for setting space top on read -@@ -135,6 +137,7 @@ - - virtual bool validate(); - virtual void populate(FileMapInfo* info, size_t alignment); -+ int compute_crc(); - }; - - FileMapHeader * _header; -@@ -153,6 +156,8 @@ - ~FileMapInfo(); - - static int current_version() { return _current_version; } -+ int compute_header_crc(); -+ void set_header_crc(int crc) { _header->_crc = crc; } - void populate_header(size_t alignment); - bool validate_header(); - void invalidate(); -@@ -181,6 +186,7 @@ - void write_bytes_aligned(const void* buffer, int count); - char* map_region(int i); - void unmap_region(int i); -+ bool verify_region_checksum(int i); - void close(); - bool is_open() { return _file_open; } - ReservedSpace reserve_shared_memory(); ---- hotspot/src/share/vm/memory/metaspaceShared.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/memory/metaspaceShared.cpp 2014-10-16 18:26:51.025957665 +0200 -@@ -607,6 +607,7 @@ - - // Pass 2 - write data. - mapinfo->open_for_write(); -+ mapinfo->set_header_crc(mapinfo->compute_header_crc()); - mapinfo->write_header(); - mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true); - mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false); -@@ -936,9 +937,13 @@ - - // Map each shared region - if ((_ro_base = mapinfo->map_region(ro)) != NULL && -+ mapinfo->verify_region_checksum(ro) && - (_rw_base = mapinfo->map_region(rw)) != NULL && -+ mapinfo->verify_region_checksum(rw) && - (_md_base = mapinfo->map_region(md)) != NULL && -+ mapinfo->verify_region_checksum(md) && - (_mc_base = mapinfo->map_region(mc)) != NULL && -+ mapinfo->verify_region_checksum(mc) && - (image_alignment == (size_t)max_alignment()) && - mapinfo->validate_classpath_entry_table()) { - // Success (no need to do anything) ---- hotspot/src/share/vm/oops/arrayKlass.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/oops/arrayKlass.cpp 2014-10-16 18:26:51.025957665 +0200 -@@ -64,6 +64,13 @@ - return NULL; - } - -+// find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined -+Klass* ArrayKlass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { -+ // There are no fields in an array klass but look to the super class (Object) -+ assert(super(), "super klass must be present"); -+ return super()->find_field(name, sig, fd); -+} -+ - Method* ArrayKlass::uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const { - // There are no methods in an array klass but the super class (Object) has some - assert(super(), "super klass must be present"); ---- hotspot/src/share/vm/oops/arrayKlass.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/oops/arrayKlass.hpp 2014-10-16 18:26:51.026957643 +0200 -@@ -28,6 +28,7 @@ - #include "memory/universe.hpp" - #include "oops/klass.hpp" - -+class fieldDescriptor; - class klassVtable; - - // ArrayKlass is the abstract baseclass for all array classes -@@ -85,6 +86,9 @@ - virtual oop multi_allocate(int rank, jint* sizes, TRAPS); - objArrayOop allocate_arrayArray(int n, int length, TRAPS); - -+ // find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined -+ Klass* find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; -+ - // Lookup operations - Method* uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const; - ---- hotspot/src/share/vm/oops/klass.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/oops/klass.cpp 2014-10-16 18:26:51.026957643 +0200 -@@ -130,6 +130,15 @@ - return is_subclass_of(k); - } - -+Klass* Klass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { -+#ifdef ASSERT -+ tty->print_cr("Error: find_field called on a klass oop." -+ " Likely error: reflection method does not correctly" -+ " wrap return value in a mirror object."); -+#endif -+ ShouldNotReachHere(); -+ return NULL; -+} - - Method* Klass::uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const { - #ifdef ASSERT ---- hotspot/src/share/vm/oops/klass.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/oops/klass.hpp 2014-10-16 18:26:51.026957643 +0200 -@@ -90,6 +90,7 @@ - class klassVtable; - class ParCompactionManager; - class KlassSizeStats; -+class fieldDescriptor; - - class Klass : public Metadata { - friend class VMStructs; -@@ -441,6 +442,7 @@ - virtual void initialize(TRAPS); - // lookup operation for MethodLookupCache - friend class MethodLookupCache; -+ virtual Klass* find_field(Symbol* name, Symbol* signature, fieldDescriptor* fd) const; - virtual Method* uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const; - public: - Method* lookup_method(Symbol* name, Symbol* signature) const { ---- hotspot/src/share/vm/prims/jvm.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/prims/jvm.cpp 2014-10-16 18:26:51.027957620 +0200 -@@ -808,6 +808,7 @@ - return (jclass) JNIHandles::make_local(env, k->java_mirror()); - JVM_END - -+// Not used; JVM_FindClassFromCaller replaces this. - JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, - jboolean init, jobject loader, - jboolean throwError)) -@@ -834,6 +835,42 @@ - return result; - JVM_END - -+// Find a class with this name in this loader, using the caller's protection domain. -+JVM_ENTRY(jclass, JVM_FindClassFromCaller(JNIEnv* env, const char* name, -+ jboolean init, jobject loader, -+ jclass caller)) -+ JVMWrapper2("JVM_FindClassFromCaller %s throws ClassNotFoundException", name); -+ // Java libraries should ensure that name is never null... -+ if (name == NULL || (int)strlen(name) > Symbol::max_length()) { -+ // It's impossible to create this class; the name cannot fit -+ // into the constant pool. -+ THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name); -+ } -+ -+ TempNewSymbol h_name = SymbolTable::new_symbol(name, CHECK_NULL); -+ -+ oop loader_oop = JNIHandles::resolve(loader); -+ oop from_class = JNIHandles::resolve(caller); -+ oop protection_domain = NULL; -+ // If loader is null, shouldn't call ClassLoader.checkPackageAccess; otherwise get -+ // NPE. Put it in another way, the bootstrap class loader has all permission and -+ // thus no checkPackageAccess equivalence in the VM class loader. -+ // The caller is also passed as NULL by the java code if there is no security -+ // manager to avoid the performance cost of getting the calling class. -+ if (from_class != NULL && loader_oop != NULL) { -+ protection_domain = java_lang_Class::as_Klass(from_class)->protection_domain(); -+ } -+ -+ Handle h_loader(THREAD, loader_oop); -+ Handle h_prot(THREAD, protection_domain); -+ jclass result = find_class_from_class_loader(env, h_name, init, h_loader, -+ h_prot, false, THREAD); -+ -+ if (TraceClassResolution && result != NULL) { -+ trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result))); -+ } -+ return result; -+JVM_END - - JVM_ENTRY(jclass, JVM_FindClassFromClass(JNIEnv *env, const char *name, - jboolean init, jclass from)) -@@ -4007,10 +4044,15 @@ - - // Shared JNI/JVM entry points ////////////////////////////////////////////////////////////// - --jclass find_class_from_class_loader(JNIEnv* env, Symbol* name, jboolean init, Handle loader, Handle protection_domain, jboolean throwError, TRAPS) { -+jclass find_class_from_class_loader(JNIEnv* env, Symbol* name, jboolean init, -+ Handle loader, Handle protection_domain, -+ jboolean throwError, TRAPS) { - // Security Note: - // The Java level wrapper will perform the necessary security check allowing -- // us to pass the NULL as the initiating class loader. -+ // us to pass the NULL as the initiating class loader. The VM is responsible for -+ // the checkPackageAccess relative to the initiating class loader via the -+ // protection_domain. The protection_domain is passed as NULL by the java code -+ // if there is no security manager in 3-arg Class.forName(). - Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL); - - KlassHandle klass_handle(THREAD, klass); ---- hotspot/src/share/vm/prims/jvm.h 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/prims/jvm.h 2014-10-16 18:26:51.028957597 +0200 -@@ -420,6 +420,19 @@ - JVM_FindClassFromBootLoader(JNIEnv *env, const char *name); - - /* -+ * Find a class from a given class loader. Throws ClassNotFoundException. -+ * name: name of class -+ * init: whether initialization is done -+ * loader: class loader to look up the class. This may not be the same as the caller's -+ * class loader. -+ * caller: initiating class. The initiating class may be null when a security -+ * manager is not installed. -+ */ -+JNIEXPORT jclass JNICALL -+JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init, -+ jobject loader, jclass caller); -+ -+/* - * Find a class from a given class. - */ - JNIEXPORT jclass JNICALL ---- hotspot/src/share/vm/runtime/arguments.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/runtime/arguments.cpp 2014-10-16 18:26:51.029957574 +0200 -@@ -2455,6 +2455,10 @@ - warning("The VM option CICompilerCountPerCPU overrides CICompilerCount."); - } - -+#ifdef COMPILER1 -+ status &= verify_interval(SafepointPollOffset, 0, os::vm_page_size() - BytesPerWord, "SafepointPollOffset"); -+#endif -+ - return status; - } - -@@ -3708,6 +3712,11 @@ - return JNI_ENOMEM; - } - -+ // Set up VerifySharedSpaces -+ if (FLAG_IS_DEFAULT(VerifySharedSpaces) && SharedArchiveFile != NULL) { -+ VerifySharedSpaces = true; -+ } -+ - // Delay warning until here so that we've had a chance to process - // the -XX:-PrintWarnings flag - if (needs_hotspotrc_warning) { ---- hotspot/src/share/vm/runtime/globals.hpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/runtime/globals.hpp 2014-10-16 18:26:51.030957551 +0200 -@@ -1166,11 +1166,11 @@ - "Prevent spurious or premature wakeups from object.wait " \ - "(Solaris only)") \ - \ -- product(intx, NativeMonitorTimeout, -1, "(Unstable)") \ -+ experimental(intx, NativeMonitorTimeout, -1, "(Unstable)") \ - \ -- product(intx, NativeMonitorFlags, 0, "(Unstable)") \ -+ experimental(intx, NativeMonitorFlags, 0, "(Unstable)") \ - \ -- product(intx, NativeMonitorSpinLimit, 20, "(Unstable)") \ -+ experimental(intx, NativeMonitorSpinLimit, 20, "(Unstable)") \ - \ - develop(bool, UsePthreads, false, \ - "Use pthread-based instead of libthread-based synchronization " \ -@@ -3787,6 +3787,10 @@ - product(bool, UseSharedSpaces, true, \ - "Use shared spaces for metadata") \ - \ -+ product(bool, VerifySharedSpaces, false, \ -+ "Verify shared spaces (false for default archive, true for " \ -+ "archive specified by -XX:SharedArchiveFile)") \ -+ \ - product(bool, RequireSharedSpaces, false, \ - "Require shared spaces for metadata") \ - \ ---- hotspot/src/share/vm/runtime/reflection.cpp 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/src/share/vm/runtime/reflection.cpp 2014-10-16 18:26:51.031957528 +0200 -@@ -484,7 +484,7 @@ - ik = InstanceKlass::cast(hc); - - // There's no way to make a host class loop short of patching memory. -- // Therefore there cannot be a loop here unles there's another bug. -+ // Therefore there cannot be a loop here unless there's another bug. - // Still, let's check for it. - assert(--inf_loop_check > 0, "no host_klass loop"); - } -@@ -553,7 +553,8 @@ - if (access.is_protected()) { - if (!protected_restriction) { - // See if current_class (or outermost host class) is a subclass of field_class -- if (host_class->is_subclass_of(field_class)) { -+ // An interface may not access protected members of j.l.Object -+ if (!host_class->is_interface() && host_class->is_subclass_of(field_class)) { - if (access.is_static() || // static fields are ok, see 6622385 - current_class == resolved_class || - field_class == resolved_class || ---- hotspot/test/compiler/osr/TestRangeCheck.java 1970-01-01 01:00:00.000000000 +0100 -+++ hotspot/test/compiler/osr/TestRangeCheck.java 2014-10-16 18:26:51.031957528 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * Copyright (c) 2014, 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 -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+/* -+ * @test TestRangeCheck -+ * @bug 8054883 -+ * @summary Tests that range check is not skipped -+ */ -+ -+public class TestRangeCheck { -+ public static void main(String args[]) { -+ try { -+ test(); -+ throw new AssertionError("Expected ArrayIndexOutOfBoundsException was not thrown"); -+ } catch (ArrayIndexOutOfBoundsException e) { -+ System.out.println("Expected ArrayIndexOutOfBoundsException was thrown"); -+ } -+ } -+ -+ private static void test() { -+ int arr[] = new int[1]; -+ int result = 1; -+ -+ // provoke OSR compilation -+ for (int i = 0; i < Integer.MAX_VALUE; i++) { -+ } -+ -+ if (result > 0 && arr[~result] > 0) { -+ arr[~result] = 0; -+ } -+ } -+} ---- hotspot/test/gc/class_unloading/AllocateBeyondMetaspaceSize.java 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/test/gc/class_unloading/AllocateBeyondMetaspaceSize.java 1970-01-01 01:00:00.000000000 +0100 -@@ -1,59 +0,0 @@ --/* -- * Copyright (c) 2014, 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 -- * under the terms of the GNU General Public License version 2 only, as -- * published by the Free Software Foundation. -- * -- * This code is distributed in the hope that it will be useful, but WITHOUT -- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- * version 2 for more details (a copy is included in the LICENSE file that -- * accompanied this code). -- * -- * You should have received a copy of the GNU General Public License version -- * 2 along with this work; if not, write to the Free Software Foundation, -- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -- * -- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -- * or visit www.oracle.com if you need additional information or have any -- * questions. -- */ -- --import sun.hotspot.WhiteBox; -- --class AllocateBeyondMetaspaceSize { -- public static Object dummy; -- -- public static void main(String [] args) { -- if (args.length != 2) { -- throw new IllegalArgumentException("Usage: "); -- } -- -- long metaspaceSize = Long.parseLong(args[0]); -- long youngGenSize = Long.parseLong(args[1]); -- -- run(metaspaceSize, youngGenSize); -- } -- -- private static void run(long metaspaceSize, long youngGenSize) { -- WhiteBox wb = WhiteBox.getWhiteBox(); -- -- long allocationBeyondMetaspaceSize = metaspaceSize * 2; -- long metaspace = wb.allocateMetaspace(null, allocationBeyondMetaspaceSize); -- -- triggerYoungGC(youngGenSize); -- -- wb.freeMetaspace(null, metaspace, metaspace); -- } -- -- private static void triggerYoungGC(long youngGenSize) { -- long approxAllocSize = 32 * 1024; -- long numAllocations = 2 * youngGenSize / approxAllocSize; -- -- for (long i = 0; i < numAllocations; i++) { -- dummy = new byte[(int)approxAllocSize]; -- } -- } --} ---- hotspot/test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java 2014-10-16 18:26:51.032957506 +0200 -@@ -26,7 +26,7 @@ - * @key gc - * @bug 8049831 - * @library /testlibrary /testlibrary/whitebox -- * @build TestCMSClassUnloadingEnabledHWM AllocateBeyondMetaspaceSize -+ * @build TestCMSClassUnloadingEnabledHWM - * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run driver TestCMSClassUnloadingEnabledHWM - * @summary Test that -XX:-CMSClassUnloadingEnabled will trigger a Full GC when more than MetaspaceSize metadata is allocated. -@@ -34,9 +34,11 @@ - - import com.oracle.java.testlibrary.OutputAnalyzer; - import com.oracle.java.testlibrary.ProcessTools; -- -+import java.lang.management.GarbageCollectorMXBean; -+import java.lang.management.ManagementFactory; - import java.util.ArrayList; - import java.util.Arrays; -+import sun.hotspot.WhiteBox; - - public class TestCMSClassUnloadingEnabledHWM { - private static long MetaspaceSize = 32 * 1024 * 1024; -@@ -47,15 +49,18 @@ - "-Xbootclasspath/a:.", - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", -+ "-Xmx128m", -+ "-XX:CMSMaxAbortablePrecleanTime=1", -+ "-XX:CMSWaitDuration=50", - "-XX:MetaspaceSize=" + MetaspaceSize, - "-Xmn" + YoungGenSize, - "-XX:+UseConcMarkSweepGC", - "-XX:" + (enableUnloading ? "+" : "-") + "CMSClassUnloadingEnabled", - "-XX:+PrintHeapAtGC", - "-XX:+PrintGCDetails", -- "AllocateBeyondMetaspaceSize", -- "" + MetaspaceSize, -- "" + YoungGenSize); -+ "-XX:+PrintGCTimeStamps", -+ TestCMSClassUnloadingEnabledHWM.AllocateBeyondMetaspaceSize.class.getName(), -+ "" + MetaspaceSize); - return new OutputAnalyzer(pb.start()); - } - -@@ -87,5 +92,37 @@ - testWithCMSClassUnloading(); - testWithoutCMSClassUnloading(); - } -+ -+ public static class AllocateBeyondMetaspaceSize { -+ public static void main(String [] args) throws Exception { -+ if (args.length != 1) { -+ throw new IllegalArgumentException("Usage: "); -+ } -+ -+ WhiteBox wb = WhiteBox.getWhiteBox(); -+ -+ // Allocate past the MetaspaceSize limit. -+ long metaspaceSize = Long.parseLong(args[0]); -+ long allocationBeyondMetaspaceSize = metaspaceSize * 2; -+ long metaspace = wb.allocateMetaspace(null, allocationBeyondMetaspaceSize); -+ -+ // Wait for at least one GC to occur. The caller will parse the log files produced. -+ GarbageCollectorMXBean cmsGCBean = getCMSGCBean(); -+ while (cmsGCBean.getCollectionCount() == 0) { -+ Thread.sleep(100); -+ } -+ -+ wb.freeMetaspace(null, metaspace, metaspace); -+ } -+ -+ private static GarbageCollectorMXBean getCMSGCBean() { -+ for (GarbageCollectorMXBean gcBean : ManagementFactory.getGarbageCollectorMXBeans()) { -+ if (gcBean.getObjectName().toString().equals("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep")) { -+ return gcBean; -+ } -+ } -+ return null; -+ } -+ } - } - ---- hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java 2014-10-13 11:53:11.000000000 +0200 -+++ hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java 2014-10-16 18:26:51.032957506 +0200 -@@ -26,7 +26,7 @@ - * @key gc - * @bug 8049831 - * @library /testlibrary /testlibrary/whitebox -- * @build TestG1ClassUnloadingHWM AllocateBeyondMetaspaceSize -+ * @build TestG1ClassUnloadingHWM - * @run main ClassFileInstaller sun.hotspot.WhiteBox - * @run driver TestG1ClassUnloadingHWM - * @summary Test that -XX:-ClassUnloadingWithConcurrentMark will trigger a Full GC when more than MetaspaceSize metadata is allocated. -@@ -34,9 +34,9 @@ - - import com.oracle.java.testlibrary.OutputAnalyzer; - import com.oracle.java.testlibrary.ProcessTools; -- - import java.util.ArrayList; - import java.util.Arrays; -+import sun.hotspot.WhiteBox; - - public class TestG1ClassUnloadingHWM { - private static long MetaspaceSize = 32 * 1024 * 1024; -@@ -53,7 +53,7 @@ - "-XX:" + (enableUnloading ? "+" : "-") + "ClassUnloadingWithConcurrentMark", - "-XX:+PrintHeapAtGC", - "-XX:+PrintGCDetails", -- "AllocateBeyondMetaspaceSize", -+ TestG1ClassUnloadingHWM.AllocateBeyondMetaspaceSize.class.getName(), - "" + MetaspaceSize, - "" + YoungGenSize); - return new OutputAnalyzer(pb.start()); -@@ -87,5 +87,36 @@ - testWithG1ClassUnloading(); - testWithoutG1ClassUnloading(); - } -+ -+ public static class AllocateBeyondMetaspaceSize { -+ public static Object dummy; -+ -+ public static void main(String [] args) throws Exception { -+ if (args.length != 2) { -+ throw new IllegalArgumentException("Usage: "); -+ } -+ -+ WhiteBox wb = WhiteBox.getWhiteBox(); -+ -+ // Allocate past the MetaspaceSize limit -+ long metaspaceSize = Long.parseLong(args[0]); -+ long allocationBeyondMetaspaceSize = metaspaceSize * 2; -+ long metaspace = wb.allocateMetaspace(null, allocationBeyondMetaspaceSize); -+ -+ long youngGenSize = Long.parseLong(args[1]); -+ triggerYoungGCs(youngGenSize); -+ -+ wb.freeMetaspace(null, metaspace, metaspace); -+ } -+ -+ public static void triggerYoungGCs(long youngGenSize) { -+ long approxAllocSize = 32 * 1024; -+ long numAllocations = 2 * youngGenSize / approxAllocSize; -+ -+ for (long i = 0; i < numAllocations; i++) { -+ dummy = new byte[(int)approxAllocSize]; -+ } -+ } -+ } - } - diff --git a/b0cde44bdbfd.tar.bz2 b/b0cde44bdbfd.tar.bz2 new file mode 100644 index 0000000..be69682 --- /dev/null +++ b/b0cde44bdbfd.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:703b9962a6611ed23428f238f65a14e2a2c7b87d105c0e8fef2936d8db4cfb1d +size 2728533 diff --git a/c3a4729c70fa.tar.bz2 b/c3a4729c70fa.tar.bz2 deleted file mode 100644 index 0369a3f..0000000 --- a/c3a4729c70fa.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a42342472c49db156952249e85c95d6e62f744925bf508b7621e3dd696bde2f2 -size 45298580 diff --git a/d78fb9203a27.tar.bz2 b/d78fb9203a27.tar.bz2 new file mode 100644 index 0000000..b1cf60b --- /dev/null +++ b/d78fb9203a27.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9621c2a6ae21a2ad9d8744b17cd2e2c29c594661fd4cf7d96731f7bae7d5368e +size 2528651 diff --git a/e7560bceb36a.tar.bz2 b/e7560bceb36a.tar.bz2 new file mode 100644 index 0000000..9a13f36 --- /dev/null +++ b/e7560bceb36a.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c4630bbdaf80d9cb34903ee36e09700f737077a622455699ec36b0df0257e11 +size 2364871 diff --git a/f5c47f0074b4.tar.bz2 b/f5c47f0074b4.tar.bz2 new file mode 100644 index 0000000..335f4b3 --- /dev/null +++ b/f5c47f0074b4.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad19b15fdd52214f3138c07dd918342058d29212eda88d683a7f3efe1e5d9c1 +size 1018996 diff --git a/fb8db1363920.tar.bz2 b/fb8db1363920.tar.bz2 new file mode 100644 index 0000000..2cc7976 --- /dev/null +++ b/fb8db1363920.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26769bc7d1b52b09e63b83471d7873c2f5bde73782003811839dc1e508f87f4b +size 45348988 diff --git a/java-1_8_0-openjdk.changes b/java-1_8_0-openjdk.changes index 599d57e..f0fc4c1 100644 --- a/java-1_8_0-openjdk.changes +++ b/java-1_8_0-openjdk.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Tue Nov 4 19:25:03 UTC 2014 - fstrba@suse.com + +- Upgrade to upstream tag jdk8u40-b12 + * Unstable snapshot in view of jdk8u40 release + * aarch64 hotspot merged to the level of jdk8u40-b12 +- Remove unneeded aarch64-jdk8u40-b09_b10.patch: + * the aarch64 hotspot merge contains all the changes + ------------------------------------------------------------------- Wed Oct 29 08:38:44 UTC 2014 - fstrba@suse.com diff --git a/java-1_8_0-openjdk.spec b/java-1_8_0-openjdk.spec index af5188d..38916f2 100644 --- a/java-1_8_0-openjdk.spec +++ b/java-1_8_0-openjdk.spec @@ -30,20 +30,20 @@ %global archname %{name} # Standard JPackage naming and versioning defines. %global updatever 40 -%global buildver b10 +%global buildver b12 %global root_project jdk8u %global root_repository jdk8u -%global root_revision 1053aeab6b12 -%global corba_revision a6d92ff8b962 -%global hotspot_revision 1b3abbeee961 -%global jaxp_revision 1f5248bc0714 -%global jaxws_revision 337fb10bc4da -%global jdk_revision c3a4729c70fa -%global langtools_revision 69b84370397f -%global nashorn_revision 076b1f38a5cc +%global root_revision 3e6d3c8810ee +%global corba_revision f5c47f0074b4 +%global hotspot_revision 6b93bf9ea3ea +%global jaxp_revision b0cde44bdbfd +%global jaxws_revision d78fb9203a27 +%global jdk_revision fb8db1363920 +%global langtools_revision e7560bceb36a +%global nashorn_revision 375a3a3256d0 %global aarch64_project aarch64-port %global aarch64_repository jdk8 -%global aarch64_hotspot_revision 3ac6832f7901 +%global aarch64_hotspot_revision 04d6681092ca %global icedtea_sound_version 1.0.1 # priority must be 6 digits in total %global priority 180%{updatever} @@ -194,8 +194,6 @@ Source14: TestCryptoLevel.java Source100: config.guess Source101: config.sub # RPM/distribution specific patches -# Bring the aarch64 hotspot tarball from b09 to b10 manually -Patch1: aarch64-jdk8u40-b09_b10.patch # RHBZ 1015432 Patch2: 1015432.patch # Restrict access to java-atk-wrapper classes @@ -495,9 +493,6 @@ rm -rvf jdk/src/share/native/sun/java2d/cmm/lcms/lcms2* %patch204 -p1 %patch205 -p1 -%ifarch %{aarch64} -%patch1 -%endif %patch2 -p1 %patch3 -p1 %patch4 -p1