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
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev