# HG changeset patch # User Andrew John Hughes # Date 1459995935 -3600 # Node ID 7fd913249ef596c7f39976c195c4274c5f8844b2 # Parent 83b5af0faf15c06c3a753012735a6b2074345d49 PR2916: Update CACAO drop to use the latest from cacao-staging 2016-04-06 Andrew John Hughes PR2916: Update CACAO drop to use the latest from cacao-staging * patches/cacao/pr2032.patch, * patches/cacao/pr2035-tempdir.patch, * patches/cacao/pr2349.patch, * patches/cacao/pr2776-cache_api.patch, * patches/cacao/pr2832-refactoring_error.patch, * patches/cacao/pr2908-missing_functions.patch, * patches/cacao/pr2910-8_support.patch: Removed as applied in new snapshot. * Makefile.am: (CACAO_VERSION): Bump to icedtea-3.0.0 changeset in gnu_andrew/cacao-staging repository. (CACAO_SHA256SUM): Likewise. (ICEDTEA_PATCHES): Remove patches applied upstream. (extract-cacao): Adapt to prefix of new snapshot. * NEWS: Updated. diff -r 83b5af0faf15 -r 7fd913249ef5 ChangeLog --- a/ChangeLog Wed Apr 06 17:49:46 2016 +0100 +++ b/ChangeLog Thu Apr 07 03:25:35 2016 +0100 @@ -1,3 +1,23 @@ +2016-04-06 Andrew John Hughes + + PR2916: Update CACAO drop to use the latest + from cacao-staging + * patches/cacao/pr2032.patch, + * patches/cacao/pr2035-tempdir.patch, + * patches/cacao/pr2349.patch, + * patches/cacao/pr2776-cache_api.patch, + * patches/cacao/pr2832-refactoring_error.patch, + * patches/cacao/pr2908-missing_functions.patch, + * patches/cacao/pr2910-8_support.patch: + Removed as applied in new snapshot. + * Makefile.am: + (CACAO_VERSION): Bump to icedtea-3.0.0 changeset + in gnu_andrew/cacao-staging repository. + (CACAO_SHA256SUM): Likewise. + (ICEDTEA_PATCHES): Remove patches applied upstream. + (extract-cacao): Adapt to prefix of new snapshot. + * NEWS: Updated. + 2016-04-05 Andrew John Hughes PR2910: Add rudimentary support for OpenJDK 8 diff -r 83b5af0faf15 -r 7fd913249ef5 Makefile.am --- a/Makefile.am Wed Apr 06 17:49:46 2016 +0100 +++ b/Makefile.am Thu Apr 07 03:25:35 2016 +0100 @@ -27,8 +27,10 @@ DROP_URL = http://icedtea.classpath.org/download/drops -CACAO_VERSION = c182f119eaad -CACAO_SHA256SUM = bf48f6b725a4dc0c936f6770a67ab4074c3bb35352d5de727368350d32549808 +# Drop is a snapshot of the changeset specified by CACAO_VERSION taken +# from the repository at https://bitbucket.org/gnu_andrew/cacao-staging +CACAO_VERSION = 900db2220376 +CACAO_SHA256SUM = eccda2d8bdf6a60347d5479b42143209f19c3731ef93666a3d12185f759165d8 CACAO_BASE_URL = $(DROP_URL)/cacao CACAO_SRC_ZIP = cacao-$(CACAO_VERSION).tar.xz CACAO_URL = $(CACAO_BASE_URL)/$(CACAO_SRC_ZIP) @@ -345,14 +347,7 @@ if BUILD_CACAO ICEDTEA_PATCHES += \ - patches/cacao/launcher.patch \ - patches/cacao/pr2032.patch \ - patches/cacao/pr2035-tempdir.patch \ - patches/cacao/pr2349.patch \ - patches/cacao/pr2776-cache_api.patch \ - patches/cacao/pr2832-refactoring_error.patch \ - patches/cacao/pr2908-missing_functions.patch \ - patches/cacao/pr2910-8_support.patch + patches/cacao/launcher.patch else if USING_CACAO ICEDTEA_PATCHES += @@ -1414,7 +1409,7 @@ then \ mkdir cacao ; \ $(TAR) xf $(CACAO_SRC_ZIP) -C cacao ; \ - dir=$$(basename cacao/cacao-*) ; \ + dir=$$(basename cacao/gnu*) ; \ mv -v cacao/$$dir cacao/cacao ; \ ln -s cacao cacao/$$dir ; \ fi diff -r 83b5af0faf15 -r 7fd913249ef5 NEWS --- a/NEWS Wed Apr 06 17:49:46 2016 +0100 +++ b/NEWS Thu Apr 07 03:25:35 2016 +0100 @@ -213,6 +213,7 @@ - PR2908: Add missing functions for CACAO OpenJDK JVM implementation - PR2909: Install CACAO in same way as JamVM - PR2910: Add rudimentary support for OpenJDK 8 class files to CACAO + - PR2916: Update CACAO drop to use the latest from cacao-staging New in release 2.6.3 (2015-11-13): diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2032.patch --- a/patches/cacao/pr2032.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -# HG changeset patch -# User Xerxes RĂ„nby -# Date 1414362363 -3600 -# Node ID ec6bd33b3e927738d1353e6e639e76f74d55635f -# Parent ea3c9a40d975430d1e9dcb598bf25b4bd7aec4ca -OpenJDK: Implement JVM_FindClassFromCaller - -8015256: Better class accessibility -Summary: Improve protection domain check in forName() - -* contrib/mapfile-vers-product: Export said function. -* src/native/vm/openjdk/jvm.cpp (JVM_FindClassFromCaller): Implement it. - -diff --git a/contrib/mapfile-vers-product b/contrib/mapfile-vers-product ---- cacao/cacao/contrib/mapfile-vers-product -+++ cacao/cacao/contrib/mapfile-vers-product -@@ -87,6 +87,7 @@ - JVM_Exit; - JVM_FillInStackTrace; - JVM_FindClassFromBootLoader; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindLibraryEntry; -diff --git a/src/native/vm/openjdk/jvm.cpp b/src/native/vm/openjdk/jvm.cpp ---- cacao/cacao/src/native/vm/openjdk/jvm.cpp -+++ cacao/cacao/src/native/vm/openjdk/jvm.cpp -@@ -655,6 +655,44 @@ - } - - -+/* JVM_FindClassFromCaller -+ * 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. -+ * -+ * Find a class with this name in this loader, -+ * using the caller's "protection domain". -+ */ -+ -+jclass JVM_FindClassFromCaller(JNIEnv* env, const char* name, jboolean init, jobject loader, jclass caller) -+{ -+ TRACEJVMCALLS(("JVM_FindClassFromCaller(name=%s, init=%d, loader=%p, caller=%p)", name, init, loader, caller)); -+ -+ Utf8String u = Utf8String::from_utf8(name); -+ classloader_t *cl = loader_hashtable_classloader_add((java_handle_t *) loader); -+ -+ /* XXX The caller's protection domain should be used during -+ the load_class_from_classloader but there is no specification or -+ unit-test in OpenJDK documenting the desired effect */ -+ -+ classinfo *c = load_class_from_classloader(u, cl); -+ -+ if (c == NULL) -+ return NULL; -+ -+ if (init) -+ if (!(c->state & CLASS_INITIALIZED)) -+ if (!initialize_class(c)) -+ return NULL; -+ -+ return (jclass) LLNI_classinfo_wrap(c); -+} -+ -+ - /* JVM_FindClassFromClassLoader */ - - jclass JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader, jboolean throwError) diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2035-tempdir.patch --- a/patches/cacao/pr2035-tempdir.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -diff -r 73c53a02de5d contrib/mapfile-vers-product ---- cacao/cacao/contrib/mapfile-vers-product Mon Jul 13 01:38:19 2015 +0100 -+++ cacao/cacao/contrib/mapfile-vers-product Mon Jul 13 10:44:59 2015 +0100 -@@ -161,6 +161,7 @@ - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; -+ JVM_GetTemporaryDirectory; - JVM_GetThreadStateNames; - JVM_GetThreadStateValues; - JVM_GetVersionInfo; -diff -r 73c53a02de5d src/native/vm/openjdk/jvm.cpp ---- cacao.orig/cacao/src/native/vm/openjdk/jvm.cpp Mon Jul 13 01:38:19 2015 +0100 -+++ cacao/cacao/src/native/vm/openjdk/jvm.cpp Mon Jul 13 10:21:20 2015 +0100 -@@ -3821,6 +3821,30 @@ - return -1; - } - -+/* -+ * Return the temporary directory that the VM uses for the attach -+ * and perf data files. -+ * -+ * It is important that this directory is well-known and the -+ * same for all VM instances. It cannot be affected by configuration -+ * variables such as java.io.tmpdir. -+ */ -+jstring JVM_GetTemporaryDirectory(JNIEnv *env) -+{ -+ TRACEJVMCALLS(("JVM_GetTemporaryDirectory(env=%p)", env)); -+ -+#if (defined(__LINUX__) || defined (__SOLARIS__) || \ -+ defined(__FREEBSD__) || defined (__DARWIN__)) -+ // This must be hard coded because it's the system's temporary -+ // directory not the java application's temp directory, ala java.io.tmpdir. -+ return JavaString::from_utf8("/tmp"); -+#else -+# error Not implemented for this OS. -+#endif -+ -+ return NULL; -+} -+ - } // extern "C" - - diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2349.patch --- a/patches/cacao/pr2349.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -diff -r c182f119eaad configure.ac ---- cacao/cacao/configure.ac Fri Dec 12 22:14:45 2014 +0100 -+++ cacao/cacao/configure.ac Thu May 14 03:34:48 2015 +0100 -@@ -678,7 +678,7 @@ - AC_CHECK_WITH_HPI_H - AC_CHECK_WITH_JMM_H - ;; -- openjdk7) -+ openjdk7 | openjdk8 ) - AC_CHECK_WITH_JVM_MD_H - AC_CHECK_WITH_JVM_H - AC_CHECK_WITH_JMM_H -@@ -693,7 +693,7 @@ - cldc1.1 | gnuclasspath) - AC_PROG_JAVAC - ;; -- openjdk | openjdk7) -+ openjdk | openjdk7 | openjdk8 ) - ;; - *) - AC_MSG_ERROR(unknown classpath configuration ${WITH_JAVA_RUNTIME_LIBRARY}) -diff -r c182f119eaad m4/disable-test-dependency-checks.m4 ---- cacao/cacao/m4/disable-test-dependency-checks.m4 Fri Dec 12 22:14:45 2014 +0100 -+++ cacao/cacao/m4/disable-test-dependency-checks.m4 Thu May 14 03:34:48 2015 +0100 -@@ -35,7 +35,7 @@ - cldc1.1 | gnuclasspath) - disable_test_dependency_checks=no - ;; -- openjdk | openjdk7) -+ openjdk | openjdk7 | openjdk8 ) - disable_test_dependency_checks=yes - ;; - *) -diff -r c182f119eaad m4/java-runtime-library.m4 ---- cacao/cacao/m4/java-runtime-library.m4 Fri Dec 12 22:14:45 2014 +0100 -+++ cacao/cacao/m4/java-runtime-library.m4 Thu May 14 03:34:48 2015 +0100 -@@ -26,7 +26,7 @@ - AC_DEFUN([AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY],[ - AC_MSG_CHECKING(which Java runtime library to use) - AC_ARG_WITH([java-runtime-library], -- [AS_HELP_STRING(--with-java-runtime-library=,specifies which type of classpath to use as Java runtime library (cldc1.1,gnuclasspath,openjdk,openjdk7) [[default=gnuclasspath]])], -+ [AS_HELP_STRING(--with-java-runtime-library=,specifies which type of classpath to use as Java runtime library (cldc1.1,gnuclasspath,openjdk,openjdk7,openjdk8) [[default=gnuclasspath]])], - [case "${withval}" in - cldc1.1) - WITH_JAVA_RUNTIME_LIBRARY=cldc1.1 -@@ -38,6 +38,15 @@ - AC_DEFINE([WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH], 1, [use GNU Classpath]) - AC_SUBST(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH) - ;; -+ openjdk8) -+ WITH_JAVA_RUNTIME_LIBRARY=openjdk8 -+ AC_DEFINE([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK], 1, [use OpenJDK's Java SE classes]) -+ AC_DEFINE([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_7], 1, [use OpenJDK's version 7]) -+ AC_DEFINE([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_8], 1, [use OpenJDK's version 8]) -+ AC_SUBST(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK) -+ AC_SUBST(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_7) -+ AC_SUBST(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_8) -+ ;; - openjdk7) - WITH_JAVA_RUNTIME_LIBRARY=openjdk7 - AC_DEFINE([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK], 1, [use OpenJDK's Java SE classes]) -@@ -60,8 +69,9 @@ - AC_MSG_RESULT(${WITH_JAVA_RUNTIME_LIBRARY}) - AM_CONDITIONAL([WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1], test x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xcldc1.1") - AM_CONDITIONAL([WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH], test x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xgnuclasspath") --AM_CONDITIONAL([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK], test x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk" -o x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk7") -+AM_CONDITIONAL([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK], test x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk" -o x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk7" -o x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk8") - AM_CONDITIONAL([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_7], test x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk7") -+AM_CONDITIONAL([WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_8], test x"${WITH_JAVA_RUNTIME_LIBRARY}" = "xopenjdk8") - ]) - - -diff -r c182f119eaad src/native/vm/openjdk/jvm.cpp ---- cacao/cacao/src/native/vm/openjdk/jvm.cpp Fri Dec 12 22:14:45 2014 +0100 -+++ cacao/cacao/src/native/vm/openjdk/jvm.cpp Thu May 14 03:34:48 2015 +0100 -@@ -3733,7 +3733,9 @@ - info->update_version = 0; - info->special_update_version = 0; - info->is_attach_supported = 0; -+#ifndef WITH_JAVA_RUNTIME_LIBRARY_OPENJDK_8 - info->is_kernel_jvm = 0; -+#endif - } - - diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2776-cache_api.patch --- a/patches/cacao/pr2776-cache_api.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ ---- cacao/cacao/src/native/vm/openjdk/jvm.cpp.old 2016-04-01 04:20:21.912052101 +0100 -+++ cacao/cacao/src/native/vm/openjdk/jvm.cpp 2016-04-01 04:50:05.054102464 +0100 -@@ -3882,6 +3882,32 @@ - - return NULL; - } -+/* JVM_GetResourceLookupCacheURLs */ -+ -+jobjectArray JVM_GetResourceLookupCacheURLs(JNIEnv *env, jobject loader) -+{ -+ TRACEJVMCALLS(("JVM_GetResourceLookupCacheURLs(env=%p, loader=%p)", env, loader)); -+ -+ return NULL; // tell OpenJDK 8 that the lookup cache API is unavailable -+} -+ -+/* JVM_GetResourceLookupCache */ -+ -+jintArray JVM_GetResourceLookupCache(JNIEnv *env, jobject loader, const char *resource_name) -+{ -+ TRACEJVMCALLS(("JVM_GetResourceLookupCacheURLs(env=%p, loader=%p, resource_name=%s)", env, loader, resource_name)); -+ -+ return NULL; // tell OpenJDK 8 that the lookup cache API is unavailable -+} -+ -+/* JVM_GetResourceLookupCache */ -+ -+jboolean JVM_KnownToNotExist(JNIEnv *env, jobject loader, const char *classname) -+{ -+ TRACEJVMCALLS(("JVM_GetResourceLookupCacheURLs(env=%p, loader=%p, classname=%s)", env, loader, classname)); -+ -+ return JNI_FALSE; // tell OpenJDK 8 we don't know whether it exists or not -+} - - } // extern "C" - ---- cacao/cacao/contrib/mapfile-vers-product.old 2016-04-01 04:20:21.884052574 +0100 -+++ cacao/cacao/contrib/mapfile-vers-product 2016-04-01 04:38:09.502110743 +0100 -@@ -153,6 +153,8 @@ - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameterAnnotations; -+ JVM_GetResourceLookupCacheURLs; -+ JVM_GetResourceLookupCache; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetSockName; -@@ -186,6 +188,7 @@ - JVM_IsSilentCompiler; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; -+ JVM_KnownToNotExist; - JVM_LatestUserDefinedLoader; - JVM_Listen; - JVM_LoadClass0; diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2832-refactoring_error.patch --- a/patches/cacao/pr2832-refactoring_error.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -# HG changeset patch -# User Stefan Ring -# Date 1453933756 -3600 -# Node ID 4982d429274b9498ad2629ea4f28566ed69e4775 -# Parent 1cef439b53ee701662059ae50874d55c7b5302d7 -PR195: Fix some oversights during a large macro cleanup in 1e9787c3484e - -diff --git cacao/cacao/src/vm/jit/verify/typecheck-common.cpp cacao/cacao/src/vm/jit/verify/typecheck-common.cpp ---- cacao/cacao/src/vm/jit/verify/typecheck-common.cpp -+++ cacao/cacao/src/vm/jit/verify/typecheck-common.cpp -@@ -281,7 +281,7 @@ - - dv->type = sv->type; - if (dv->type == TYPE_ADR) { -- dv->typeinfo = sv->typeinfo; -+ typeinfo_t::clone(sv->typeinfo, dv->typeinfo); - } - } - return true; -diff --git cacao/cacao/src/vm/jit/verify/typeinfo.cpp cacao/cacao/src/vm/jit/verify/typeinfo.cpp ---- cacao/cacao/src/vm/jit/verify/typeinfo.cpp -+++ cacao/cacao/src/vm/jit/verify/typeinfo.cpp -@@ -1674,6 +1674,7 @@ - classref_or_classinfo common; - classref_or_classinfo elementclass; - int dimension; -+ ArrayType new_elementtype; - bool changed; - typecheck_result r; - -@@ -1784,23 +1785,23 @@ - * interpret it as an array (same dim. as x) of Arraystubs. */ - if (x->dimension < src->dimension) { - dimension = x->dimension; -- elementtype = ARRAYTYPE_OBJECT; -+ new_elementtype = ARRAYTYPE_OBJECT; - elementclass.cls = pseudo_class_Arraystub; - } - else { - dimension = src->dimension; -- elementtype = src->elementtype; -+ new_elementtype = src->elementtype; - elementclass = src->elementclass; - } - - /* {The arrays are of the same dimension.} */ - -- if (x->elementtype != elementtype) { -+ if (x->elementtype != new_elementtype) { - /* Different element types are merged, so the resulting array - * type has one accessible dimension less. */ - if (--dimension == 0) { - common.cls = pseudo_class_Arraystub; -- elementtype = ARRAYTYPE_INT; -+ new_elementtype = ARRAYTYPE_INT; - elementclass.any = NULL; - } - else { -@@ -1810,14 +1811,14 @@ - return typecheck_FAIL; - } - -- elementtype = ARRAYTYPE_OBJECT; -+ new_elementtype = ARRAYTYPE_OBJECT; - elementclass.cls = pseudo_class_Arraystub; - } - } - else { - /* {The arrays have the same dimension and elementtype.} */ - -- if (elementtype == ARRAYTYPE_OBJECT) { -+ if (new_elementtype == ARRAYTYPE_OBJECT) { - /* The elements are references, so their respective - * types must be merged. - */ -@@ -1862,7 +1863,7 @@ - changed |= r; - - dimension = 0; -- elementtype = ARRAYTYPE_INT; -+ new_elementtype = ARRAYTYPE_INT; - elementclass.any = NULL; - } - -@@ -1876,8 +1877,8 @@ - this->dimension = dimension; - changed = true; - } -- if (this->elementtype != elementtype) { -- this->elementtype = elementtype; -+ if (elementtype != new_elementtype) { -+ elementtype = new_elementtype; - changed = true; - } - if (this->elementclass.any != elementclass.any) { -diff --git cacao/cacao/src/vm/resolve.cpp cacao/cacao/src/vm/resolve.cpp ---- cacao/cacao/src/vm/resolve.cpp -+++ cacao/cacao/src/vm/resolve.cpp -@@ -703,7 +703,7 @@ - - /* uninitialized objects are illegal here */ - -- if (subtinfo->is_primitive()) { -+ if (subtinfo->is_newobject()) { - exceptions_throw_verifyerror(refmethod, - "Invalid use of uninitialized object"); - return resolveFailed; diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2908-missing_functions.patch --- a/patches/cacao/pr2908-missing_functions.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -diff -Nru cacao.old/cacao/contrib/mapfile-vers-product cacao/cacao/contrib/mapfile-vers-product ---- cacao.old/cacao/contrib/mapfile-vers-product 2016-04-01 08:07:33.021538925 +0100 -+++ cacao/cacao/contrib/mapfile-vers-product 2016-04-01 08:08:19.576767011 +0100 -@@ -127,12 +127,14 @@ - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; -+ JVM_GetClassTypeAnnotations; - JVM_GetComponentType; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldAnnotations; - JVM_GetFieldIxModifiers; -+ JVM_GetFieldTypeAnnotations; - JVM_GetHostName; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; -@@ -153,6 +155,8 @@ - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameterAnnotations; -+ JVM_GetMethodParameters; -+ JVM_GetMethodTypeAnnotations; - JVM_GetResourceLookupCacheURLs; - JVM_GetResourceLookupCache; - JVM_GetPrimitiveArrayElement; -@@ -180,6 +184,7 @@ - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; -+ JVM_IsVMGeneratedMethodIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsNaN; -diff -Nru cacao.old/cacao/src/native/vm/openjdk/jvm.cpp cacao/cacao/src/native/vm/openjdk/jvm.cpp ---- cacao.old/cacao/src/native/vm/openjdk/jvm.cpp 2016-04-01 08:07:21.685726880 +0100 -+++ cacao/cacao/src/native/vm/openjdk/jvm.cpp 2016-04-01 08:08:01.225071294 +0100 -@@ -1110,6 +1110,15 @@ - return (jbyteArray) annotations; - } - -+/* JVM_GetClassTypeAnnotations */ -+ -+jbyteArray JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls) -+{ -+ TRACEJVMCALLS(("JVM_GetClassAnnotations(env=%p, cls=%p)", env, cls)); -+ -+ log_println("JVM_GetClassTypeAnnotations: IMPLEMENT ME!"); -+ return NULL; -+} - - /* JVM_GetFieldAnnotations */ - -@@ -1127,6 +1136,16 @@ - return (jbyteArray) jlrf.get_annotations(); - } - -+/* JVM_GetFieldTypeAnnotations */ -+ -+jbyteArray JVM_GetFieldTypeAnnotations(JNIEnv *env, jobject field) -+{ -+ TRACEJVMCALLS(("JVM_GetFieldTypeAnnotations(env=%p, field=%p)", env, field)); -+ -+ log_println("JVM_GetFieldTypeAnnotations: IMPLEMENT ME!"); -+ return NULL; -+} -+ - - /* JVM_GetMethodAnnotations */ - -@@ -1144,6 +1163,15 @@ - return (jbyteArray) jlrm.get_annotations(); - } - -+/* JVM_GetMethodTypeAnnotations */ -+ -+jbyteArray JVM_GetMethodTypeAnnotations(JNIEnv *env, jobject method) -+{ -+ TRACEJVMCALLS(("JVM_GetMethodTypeAnnotations(env=%p, method=%p)", env, method)); -+ -+ log_println("JVM_GetMethodTypeAnnotations: IMPLEMENT ME!"); -+ return NULL; -+} - - /* JVM_GetMethodDefaultAnnotationValue */ - -@@ -1178,6 +1206,14 @@ - return (jbyteArray) jlrm.get_parameterAnnotations(); - } - -+/* JVM_GetMethodParameters */ -+ -+jbyteArray JVM_GetMethodParameters(JNIEnv *env, jobject method) { -+ TRACEJVMCALLS(("JVM_GetMethodParameters(env=%p, method=%p)", env, method)); -+ -+ log_println("JVM_GetMethodParameters: IMPLEMENT ME!"); -+ return NULL; -+} - - /* JVM_GetClassDeclaredFields */ - -@@ -1864,6 +1900,14 @@ - return 0; - } - -+/* JVM_IsVMGeneratedMethodIx */ -+ -+jboolean JVM_IsVMGeneratedMethodIx(JNIEnv *env, jclass cls, int method_index) -+{ -+ log_println("JVM_IsVMGeneratedMethodIx: IMPLEMENT ME!"); -+ -+ return 0; -+} - - /* JVM_GetMethodIxNameUTF */ - diff -r 83b5af0faf15 -r 7fd913249ef5 patches/cacao/pr2910-8_support.patch --- a/patches/cacao/pr2910-8_support.patch Wed Apr 06 17:49:46 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -diff -r d38fca124cd9 src/vm/class.cpp ---- cacao.old/cacao/src/vm/class.cpp Mon Jul 13 13:34:45 2015 +0100 -+++ cacao/cacao/src/vm/class.cpp Wed Apr 06 01:47:19 2016 +0100 -@@ -673,17 +673,26 @@ - - void* class_getconstant(classinfo *c, u4 pos, ConstantPoolTag ctype) - { -+ return class_getconstant(c, pos, ctype, CONSTANT_UNUSED); -+} -+ -+void* class_getconstant(classinfo *c, u4 pos, ConstantPoolTag ctype, ConstantPoolTag ctype2) -+{ - // check index and type of constantpool entry - // (pos == 0 is caught by type comparison) -- -- if ((((int32_t)pos) >= c->cpcount) || (c->cptags[pos] != ctype)) { -+ bool typematch = (c->cptags[pos] == ctype || (ctype2 != CONSTANT_UNUSED && c->cptags[pos] == ctype2)); -+ if ((((int32_t)pos) >= c->cpcount) || !typematch) { - // this is the slow path, - // we can afford to repeat the separate checks for a better error message - - if ((pos == 0) || (((int32_t)pos) >= c->cpcount)) { - exceptions_throw_classformaterror(c, "Illegal constant pool index: %u", pos); -- } else if (c->cptags[pos] != ctype) { -- exceptions_throw_classformaterror(c, "Illegal constant pool type %u (expected %u)", ctype, c->cptags[pos]); -+ } else if (!typematch) { -+ if (ctype2 == CONSTANT_UNUSED) -+ exceptions_throw_classformaterror(c, "Illegal constant pool type %u (expected %u)", c->cptags[pos], ctype); -+ else -+ exceptions_throw_classformaterror(c, "Illegal constant pool type %u (expected %u or %u)", -+ c->cptags[pos], ctype, ctype2); - } - - assert(exceptions_get_exception()); -diff -r d38fca124cd9 src/vm/class.hpp ---- cacao.old/cacao/src/vm/class.hpp Mon Jul 13 13:34:45 2015 +0100 -+++ cacao/cacao/src/vm/class.hpp Wed Apr 06 01:47:19 2016 +0100 -@@ -196,6 +196,7 @@ - - /* retrieve constantpool element */ - void* class_getconstant(classinfo *c, u4 pos, ConstantPoolTag ctype); -+void* class_getconstant(classinfo *c, u4 pos, ConstantPoolTag ctype, ConstantPoolTag ctype2); - void* innerclass_getconstant(classinfo *c, u4 pos, ConstantPoolTag ctype); - - /* frees all resources used by the class */ -diff -r d38fca124cd9 src/vm/global.hpp ---- cacao.old/cacao/src/vm/global.hpp Mon Jul 13 13:34:45 2015 +0100 -+++ cacao/cacao/src/vm/global.hpp Wed Apr 06 01:47:19 2016 +0100 -@@ -142,13 +142,13 @@ - - /* some Java related defines **************************************************/ - --#define JAVA_VERSION "1.6.0" /* this version is supported by CACAO */ --#define CLASS_VERSION "51.0" -+#define JAVA_VERSION "1.8.0" /* this version is supported by CACAO */ -+#define CLASS_VERSION "52.0" - - /* Java class file constants **************************************************/ - - #define MAGIC 0xCAFEBABE --#define MAJOR_VERSION 51 -+#define MAJOR_VERSION 52 - #define MINOR_VERSION 0 - - -diff -r d38fca124cd9 src/vm/loader.cpp ---- cacao.old/cacao/src/vm/loader.cpp Mon Jul 13 13:34:45 2015 +0100 -+++ cacao/cacao/src/vm/loader.cpp Wed Apr 06 01:47:19 2016 +0100 -@@ -126,6 +126,7 @@ - - const ClassFileVersion ClassFileVersion::CACAO_VERSION(MAJOR_VERSION, MINOR_VERSION); - const ClassFileVersion ClassFileVersion::JDK_7(51, 0); -+const ClassFileVersion ClassFileVersion::JDK_8(52, 0); - - - /* loader_preinit ************************************************************** -@@ -1848,12 +1849,29 @@ - break; - - case REF_invokeVirtual: -+ fmi = (constant_FMIref*) class_getconstant(c, it->reference_index, CONSTANT_Methodref); -+ -+ if (!fmi) -+ return false; -+ -+ if (fmi->name == utf8::init || fmi->name == utf8::clinit) { -+ exceptions_throw_classformaterror(c, "Illegal method handle"); -+ return false; -+ } -+ break; -+ - case REF_invokeStatic: - case REF_invokeSpecial: -- fmi = (constant_FMIref*) class_getconstant(c, it->reference_index, CONSTANT_Methodref); -- -- if (!fmi) -+ if (c->version >= ClassFileVersion::JDK_8) { -+ fmi = (constant_FMIref*) class_getconstant(c, it->reference_index, -+ CONSTANT_Methodref, CONSTANT_InterfaceMethodref); -+ } else { -+ fmi = (constant_FMIref*) class_getconstant(c, it->reference_index, CONSTANT_Methodref); -+ } -+ -+ if (!fmi) { - return false; -+ } - - if (fmi->name == utf8::init || fmi->name == utf8::clinit) { - exceptions_throw_classformaterror(c, "Illegal method handle"); -diff -r d38fca124cd9 src/vm/loader.hpp ---- cacao.old/cacao/src/vm/loader.hpp Mon Jul 13 13:34:45 2015 +0100 -+++ cacao/cacao/src/vm/loader.hpp Wed Apr 06 01:47:19 2016 +0100 -@@ -116,6 +116,10 @@ - */ - static const ClassFileVersion JDK_7; - -+ /** -+ * The class file format version used by JDK 8 -+ */ -+ static const ClassFileVersion JDK_8; - - ClassFileVersion(uint16_t major, uint16_t minor = 0) : _majr(major), _minr(minor) {} - -@@ -141,6 +145,14 @@ - return (*this == v) || (*this < v); - } - -+ bool operator >(ClassFileVersion v) const { -+ return !(*this <= v); -+ } -+ -+ bool operator >=(ClassFileVersion v) const { -+ return (*this == v) || (*this > v); -+ } -+ - // we can't call these major/minor because GCC defines macros of that name - uint16_t majr() const { return _majr; } - uint16_t minr() const { return _minr; } -diff -r d38fca124cd9 src/vm/method.cpp ---- cacao.old/cacao/src/vm/method.cpp Mon Jul 13 13:34:45 2015 +0100 -+++ cacao/cacao/src/vm/method.cpp Wed Apr 06 01:47:19 2016 +0100 -@@ -252,7 +252,7 @@ - - if (i != 0 && i != ACC_PUBLIC && i != ACC_PRIVATE && i != ACC_PROTECTED) { - exceptions_throw_classformaterror(c, -- "Illegal method modifiers: 0x%X", -+ "Illegal method access modifiers: 0x%X", - m->flags); - return false; - } -@@ -261,18 +261,28 @@ - if ((m->flags & (ACC_FINAL | ACC_NATIVE | ACC_PRIVATE | - ACC_STATIC | ACC_STRICT | ACC_SYNCHRONIZED))) { - exceptions_throw_classformaterror(c, -- "Illegal method modifiers: 0x%X", -+ "Illegal abstract method modifiers: 0x%X", - m->flags); - return false; - } - } - - if (c->flags & ACC_INTERFACE) { -- if ((m->flags & (ACC_ABSTRACT | ACC_PUBLIC)) != (ACC_ABSTRACT | ACC_PUBLIC)) { -- exceptions_throw_classformaterror(c, -- "Illegal method modifiers: 0x%X", -- m->flags); -- return false; -+ if (c->version < ClassFileVersion::JDK_8) { -+ if ((m->flags & (ACC_ABSTRACT | ACC_PUBLIC)) != (ACC_ABSTRACT | ACC_PUBLIC)) { -+ exceptions_throw_classformaterror(c, -+ "Illegal interface method modifiers: 0x%X", -+ m->flags); -+ return false; -+ } -+ } else { -+ i = (m->flags & (ACC_PUBLIC | ACC_PRIVATE)); -+ if (i != ACC_PUBLIC && i != ACC_PRIVATE) { -+ exceptions_throw_classformaterror(c, -+ "Illegal JDK 8 interface method modifiers: 0x%X", -+ m->flags); -+ return false; -+ } - } - } -