Hi, Attached is an update to the tagged tuple support. It allows the verifier to accept method signatures containing tagged tuples. I.e. -Xverify:none is no longer required.
Mike.
diff -r f23a3c7f71ac tuple-tsig.patch --- a/tuple-tsig.patch Mon Jul 18 10:47:53 2011 -0700 +++ b/tuple-tsig.patch Sun Jul 24 21:52:54 2011 +0100 @@ -1,6 +1,6 @@ -diff -r a87a198b3630 make/docs/Makefile ---- a/make/docs/Makefile Sun Jun 19 15:58:35 2011 +0100 -+++ b/make/docs/Makefile Wed Jun 22 20:37:08 2011 +0100 +diff -r a2df16191b76 make/docs/Makefile +--- a/make/docs/Makefile Sun Jul 24 17:22:04 2011 +0100 ++++ b/make/docs/Makefile Sun Jul 24 21:44:30 2011 +0100 @@ -207,12 +207,7 @@ -keywords \ $(ADDITIONAL_JAVADOCFLAGS) @@ -15,9 +15,9 @@ # Draft used for non-fcs documents JDK_IS_FCS = false -diff -r a87a198b3630 make/sun/security/jgss/wrapper/Makefile ---- a/make/sun/security/jgss/wrapper/Makefile Sun Jun 19 15:58:35 2011 +0100 -+++ b/make/sun/security/jgss/wrapper/Makefile Wed Jun 22 20:37:08 2011 +0100 +diff -r a2df16191b76 make/sun/security/jgss/wrapper/Makefile +--- a/make/sun/security/jgss/wrapper/Makefile Sun Jul 24 17:22:04 2011 +0100 ++++ b/make/sun/security/jgss/wrapper/Makefile Sun Jul 24 21:44:30 2011 +0100 @@ -46,6 +46,10 @@ FILES_export = \ sun/security/jgss/wrapper/GSSLibStub.java @@ -29,9 +29,9 @@ # # Find native code # -diff -r a87a198b3630 make/sun/security/pkcs11/Makefile ---- a/make/sun/security/pkcs11/Makefile Sun Jun 19 15:58:35 2011 +0100 -+++ b/make/sun/security/pkcs11/Makefile Wed Jun 22 20:37:08 2011 +0100 +diff -r a2df16191b76 make/sun/security/pkcs11/Makefile +--- a/make/sun/security/pkcs11/Makefile Sun Jul 24 17:22:04 2011 +0100 ++++ b/make/sun/security/pkcs11/Makefile Sun Jul 24 21:44:30 2011 +0100 @@ -296,6 +296,10 @@ $(CP) $(PREBUILT_DIR)/pkcs11/sunpkcs11.jar $(JAR_DESTFILE) endif @@ -43,9 +43,9 @@ # ===================================================== # Support routines. -diff -r a87a198b3630 src/share/native/common/check_code.c ---- a/src/share/native/common/check_code.c Sun Jun 19 15:58:35 2011 +0100 -+++ b/src/share/native/common/check_code.c Wed Jun 22 20:37:08 2011 +0100 +diff -r a2df16191b76 src/share/native/common/check_code.c +--- a/src/share/native/common/check_code.c Sun Jul 24 17:22:04 2011 +0100 ++++ b/src/share/native/common/check_code.c Sun Jul 24 21:44:30 2011 +0100 @@ -426,6 +426,7 @@ static void pop_and_free(context_type *context); @@ -227,61 +227,20 @@ return result; } -@@ -3709,6 +3734,11 @@ - result = 'L'; - break; - -+ case '{': -+ case 'V': -+ case '}': -+ continue; -+ - case JVM_SIGNATURE_ARRAY: - array_depth++; - continue; /* only time we ever do the loop > 1 */ -@@ -4121,6 +4151,89 @@ +@@ -4121,6 +4146,107 @@ return args_size; } ++static enum signature_state { top, parameters, tuple_prefix, tuple_tag, tuple }; ++ +static const char* erase_signature(context_type *context, const char* signature) +{ + char* erased; + char* p; + char* e; -+ -+ int count = 0; -+ int isParameter = 0; -+ -+ for (p = signature; *p; p++) -+ { -+ switch (*p) -+ { -+ case 'V' : -+ if (!isParameter) { -+ count++; -+ } -+ break; -+ -+ case '{' : -+ case '}' : -+ break; -+ -+ case '(' : -+ isParameter++; -+ count++; -+ break; -+ -+ case ')' : -+ isParameter--; -+ count++; -+ break; -+ -+ default: -+ count++; -+ } -+ } -+ -+ isParameter = 0; ++ enum signature_state state = top; ++ int tuple_level = 0; ++ int count = strlen(signature); + + erased = (char*) malloc(sizeof(char) * (count + 1)); + if (erased == 0) { @@ -290,38 +249,85 @@ + + for (p = signature, e = erased; *p; p++) + { -+ switch (*p) ++ switch (state) + { -+ case 'V' : -+ if (!isParameter) -+ { -+ *e = *p; -+ e++; -+ } -+ break; ++ case top: ++ switch (*p) ++ { ++ case '(': ++ state = parameters; ++ break; ++ } ++ *e = *p; ++ e++; ++ break; + -+ case '}' : -+ case '{' : -+ break; ++ case parameters: ++ switch (*p) ++ { ++ case '{': ++ state = tuple_prefix; ++ tuple_level++; ++ break; + -+ case '(' : -+ isParameter++; -+ *e = *p; -+ e++; -+ break; ++ case ')': ++ *e = *p; ++ e++; ++ state = top; ++ break; + -+ case ')' : -+ isParameter--; -+ *e = *p; -+ e++; -+ break; ++ default: ++ *e = *p; ++ e++; ++ break; ++ } ++ break; + -+ default: -+ *e = *p; -+ e++; ++ case tuple_prefix: ++ switch (*p) ++ { ++ case 'V': ++ state = tuple; ++ break; ++ ++ case 'L': ++ state = tuple_tag; ++ break; ++ } ++ break; ++ ++ case tuple: ++ switch (*p) ++ { ++ case '{': ++ ++tuple_level; ++ state = tuple_prefix; ++ break; ++ ++ case '}': ++ if (--tuple_level == 0) { ++ state = parameters; ++ } ++ break; ++ ++ default: ++ *e = *p; ++ e++; ++ break; ++ } ++ break; ++ ++ case tuple_tag: ++ switch (*p) ++ { ++ case ';': ++ state = tuple; ++ break; ++ } ++ break; + } + } -+ ++ + return erased; +} +
diff -r e4194228baf7 tuple-tsig.patch --- a/tuple-tsig.patch Mon Jul 18 10:48:06 2011 -0700 +++ b/tuple-tsig.patch Sun Jul 24 21:53:07 2011 +0100 @@ -2,9 +2,9 @@ Summary: http://mail.openjdk.java.net/pipermail/mlvm-dev/2011-July/003639.html Contributed-by: mikeb2701 -diff -r b0ff3165cd05 make/linux/makefiles/gcc.make ---- a/make/linux/makefiles/gcc.make Sat Jul 16 13:06:16 2011 +0100 -+++ b/make/linux/makefiles/gcc.make Sun Jul 17 13:13:57 2011 +0100 +diff -r 0a0e7843f28f make/linux/makefiles/gcc.make +--- a/make/linux/makefiles/gcc.make Sun Jul 24 17:22:03 2011 +0100 ++++ b/make/linux/makefiles/gcc.make Sun Jul 24 21:42:57 2011 +0100 @@ -225,6 +225,8 @@ DEBUG_CFLAGS += -gstabs endif @@ -14,9 +14,9 @@ # DEBUG_BINARIES overrides everything, use full -g debug information ifeq ($(DEBUG_BINARIES), true) DEBUG_CFLAGS = -g -diff -r b0ff3165cd05 src/share/vm/classfile/classFileParser.cpp ---- a/src/share/vm/classfile/classFileParser.cpp Sat Jul 16 13:06:16 2011 +0100 -+++ b/src/share/vm/classfile/classFileParser.cpp Sun Jul 17 13:13:57 2011 +0100 +diff -r 0a0e7843f28f src/share/vm/classfile/classFileParser.cpp +--- a/src/share/vm/classfile/classFileParser.cpp Sun Jul 24 17:22:03 2011 +0100 ++++ b/src/share/vm/classfile/classFileParser.cpp Sun Jul 24 21:42:57 2011 +0100 @@ -1615,13 +1615,11 @@ verify_legal_method_modifiers(flags, is_interface, name, CHECK_(nullHandle)); } @@ -228,9 +228,9 @@ +} + + -diff -r b0ff3165cd05 src/share/vm/classfile/classFileParser.hpp ---- a/src/share/vm/classfile/classFileParser.hpp Sat Jul 16 13:06:16 2011 +0100 -+++ b/src/share/vm/classfile/classFileParser.hpp Sun Jul 17 13:13:57 2011 +0100 +diff -r 0a0e7843f28f src/share/vm/classfile/classFileParser.hpp +--- a/src/share/vm/classfile/classFileParser.hpp Sun Jul 24 17:22:03 2011 +0100 ++++ b/src/share/vm/classfile/classFileParser.hpp Sun Jul 24 21:42:57 2011 +0100 @@ -222,13 +222,14 @@ void verify_legal_field_name(Symbol* name, TRAPS); void verify_legal_method_name(Symbol* name, TRAPS); @@ -247,9 +247,9 @@ bool is_anonymous() { assert(EnableInvokeDynamic || _host_klass.is_null(), ""); -diff -r b0ff3165cd05 src/share/vm/prims/jvm.h ---- a/src/share/vm/prims/jvm.h Sat Jul 16 13:06:16 2011 +0100 -+++ b/src/share/vm/prims/jvm.h Sun Jul 17 13:13:57 2011 +0100 +diff -r 0a0e7843f28f src/share/vm/prims/jvm.h +--- a/src/share/vm/prims/jvm.h Sun Jul 24 17:22:03 2011 +0100 ++++ b/src/share/vm/prims/jvm.h Sun Jul 24 21:42:57 2011 +0100 @@ -1111,6 +1111,8 @@ #define JVM_SIGNATURE_SHORT 'S' #define JVM_SIGNATURE_VOID 'V' @@ -259,9 +259,9 @@ /* * A function defined by the byte-code verifier and called by the VM. -diff -r b0ff3165cd05 src/share/vm/runtime/globals.hpp ---- a/src/share/vm/runtime/globals.hpp Sat Jul 16 13:06:16 2011 +0100 -+++ b/src/share/vm/runtime/globals.hpp Sun Jul 17 13:13:57 2011 +0100 +diff -r 0a0e7843f28f src/share/vm/runtime/globals.hpp +--- a/src/share/vm/runtime/globals.hpp Sun Jul 24 17:22:03 2011 +0100 ++++ b/src/share/vm/runtime/globals.hpp Sun Jul 24 21:42:57 2011 +0100 @@ -3791,6 +3791,9 @@ product(uintx, StringTableSize, 1009, \ "Number of buckets in the interned String table") \ @@ -272,9 +272,9 @@ product(bool, UseVMInterruptibleIO, false, \ "(Unstable, Solaris-specific) Thread interrupt before or with " \ "EINTR for I/O operations results in OS_INTRPT. The default value"\ -diff -r b0ff3165cd05 src/share/vm/runtime/signature.cpp ---- a/src/share/vm/runtime/signature.cpp Sat Jul 16 13:06:16 2011 +0100 -+++ b/src/share/vm/runtime/signature.cpp Sun Jul 17 13:13:57 2011 +0100 +diff -r 0a0e7843f28f src/share/vm/runtime/signature.cpp +--- a/src/share/vm/runtime/signature.cpp Sun Jul 24 17:22:03 2011 +0100 ++++ b/src/share/vm/runtime/signature.cpp Sun Jul 24 21:42:57 2011 +0100 @@ -40,7 +40,7 @@ // Signature = "(" {Parameter} ")" ReturnType. // Parameter = FieldType. @@ -345,7 +345,7 @@ default : ShouldNotReachHere(); } } -@@ -445,7 +492,30 @@ +@@ -445,7 +492,41 @@ return -1; } } @@ -358,8 +358,19 @@ + } + + ++index; -+ if (index < limit && type[index] == 'V') { -+ for (index = index + 1; index < limit;) { ++ if (index < limit) { ++ ssize_t offset = -1; ++ if (type[index] == 'L') { ++ offset = is_valid_type(&type[index], limit - index); ++ } else if (type[index] == 'V') { ++ offset = 1; ++ } ++ ++ if (-1 == offset) { ++ return -1; ++ } ++ ++ for (index = index + offset; index < limit;) { + if (type[index] == '}') { + return index + 1; + } @@ -377,9 +388,9 @@ default: ; // fall through } return -1; -diff -r b0ff3165cd05 test/runtime/6804523/ClassTransformer.java +diff -r 0a0e7843f28f test/runtime/6804523/ClassTransformer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/test/runtime/6804523/ClassTransformer.java Sun Jul 17 13:13:57 2011 +0100 ++++ b/test/runtime/6804523/ClassTransformer.java Sun Jul 24 21:42:57 2011 +0100 @@ -0,0 +1,110 @@ +import static java.lang.System.arraycopy; + @@ -491,9 +502,9 @@ + transformer.transform("(JJ)J", "({Ljava/math/Rational;JJ})J"); + } +} -diff -r b0ff3165cd05 test/runtime/6804523/SimpleBoyerMoore.java +diff -r 0a0e7843f28f test/runtime/6804523/SimpleBoyerMoore.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/test/runtime/6804523/SimpleBoyerMoore.java Sun Jul 17 13:13:57 2011 +0100 ++++ b/test/runtime/6804523/SimpleBoyerMoore.java Sun Jul 24 21:42:57 2011 +0100 @@ -0,0 +1,114 @@ + + @@ -610,17 +621,17 @@ + } +} \ No newline at end of file -diff -r b0ff3165cd05 test/runtime/6804523/Test6804523.sh +diff -r 0a0e7843f28f test/runtime/6804523/Test6804523.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/test/runtime/6804523/Test6804523.sh Sun Jul 17 13:13:57 2011 +0100 -@@ -0,0 +1,19 @@ ++++ b/test/runtime/6804523/Test6804523.sh Sun Jul 24 21:42:57 2011 +0100 +@@ -0,0 +1,21 @@ +#!/bin/bash + +LOCATION=`dirname $0` + +if [ "$TEST_JAVA_HOME" == "" ] +then -+ TEST_JAVA_HOME=$LOCATION/../../../../build/linux-i586-debug/bin ++ TEST_JAVA_HOME=$LOCATION/../../../../build/linux-amd64-debug/bin +fi + +rm -f $LOCATION/*.class @@ -632,10 +643,12 @@ +$TEST_JAVA_HOME/java -cp $LOCATION ClassTransformer $LOCATION/TupleSignature.class $LOCATION/TestTupleSignature.class + +echo "Running..." -+$TEST_JAVA_HOME/java -Xverify:none -XX:+TupleSignatures TestTupleSignature -diff -r b0ff3165cd05 test/runtime/6804523/TestTupleSignature.java ++$TEST_JAVA_HOME/java -XX:+TupleSignatures TestTupleSignature ++#echo "run -XX:+TupleSignatures TestTupleSignature" ++#gdb $TEST_JAVA_HOME/java +diff -r 0a0e7843f28f test/runtime/6804523/TestTupleSignature.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/test/runtime/6804523/TestTupleSignature.java Sun Jul 17 13:13:57 2011 +0100 ++++ b/test/runtime/6804523/TestTupleSignature.java Sun Jul 24 21:42:57 2011 +0100 @@ -0,0 +1,24 @@ +public class TestTupleSignature { + @@ -661,9 +674,9 @@ + } + +} -diff -r b0ff3165cd05 test/runtime/6804523/TupleSignature.java +diff -r 0a0e7843f28f test/runtime/6804523/TupleSignature.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/test/runtime/6804523/TupleSignature.java Sun Jul 17 13:13:57 2011 +0100 ++++ b/test/runtime/6804523/TupleSignature.java Sun Jul 24 21:42:57 2011 +0100 @@ -0,0 +1,74 @@ +public class TupleSignature { + @@ -739,9 +752,9 @@ + return i + j; + } +} -diff -r b9a96402be9a tuple-tsig.patch +diff -r 0a0e7843f28f tuple-tsig.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tuple-tsig.patch Sun Jul 17 13:16:27 2011 +0100 ++++ b/tuple-tsig.patch Sun Jul 24 21:42:57 2011 +0100 @@ -0,0 +1,737 @@ +diff -r b0ff3165cd05 make/linux/makefiles/gcc.make +--- a/make/linux/makefiles/gcc.make Sat Jul 16 13:06:16 2011 +0100
_______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev