changeset 2618:2718234602c7

Update to 7u12 b09. 2013-01-16 Andrew John Hughes <gnu_andrew@member.fsf.org> * patches/hotspot/zero/6924259-string_offset.patch: Remove patch missed in last but one change. * Makefile.am: (OPENJDK_VERSION): Bump to b09. (CORBA_CHANGESET): Update to IcedTea7 forest head. (JAXP_CHANGESET): Likewise. (JAXWS_CHANGESET): Likewise. (JDK_CHANGESET): Likewise. (LANGTOOLS_CHANGESET): Likewise. (OPENJDK_CHANGESET): Likewise. (CORBA_SHA256SUM): Likewise. (JAXP_SHA256SUM): Likewise. (JAXWS_SHA256SUM): Likewise. (JDK_SHA256SUM): Likewise. (LANGTOOLS_SHA256SUM): Likewise. (OPENJDK_SHA256SUM): Likewise. (JAXWS): Fix paths, including both JAXWS and JAF. (JAXWS_COND): Removed. (OPENJDK_SOURCEPATH_DIRS): Add JAXWS source tree, required by new implementaton of java.lang.invoke that relies on the copy of ASM in the JAXWS tree. * hotspot.map: Update to IcedTea7 forest head. * patches/boot/ecj-diamond.patch, * patches/boot/ecj-multicatch.patch, * patches/boot/ecj-stringswitch.patch, * patches/boot/ecj-trywithresources.patch: Updated due to changes from the security patches and warning fixes in rmic.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Thu, 17 Jan 2013 00:37:19 +0000
parents bf3fe7bcc615
children e342c6b2cbc0
files ChangeLog Makefile.am hotspot.map patches/boot/ecj-diamond.patch patches/boot/ecj-multicatch.patch patches/boot/ecj-stringswitch.patch patches/boot/ecj-trywithresources.patch patches/hotspot/zero/6924259-string_offset.patch
diffstat 8 files changed, 941 insertions(+), 1140 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Jan 16 01:38:30 2013 +0000
+++ b/ChangeLog	Thu Jan 17 00:37:19 2013 +0000
@@ -1,3 +1,34 @@
+2013-01-16  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+	* patches/hotspot/zero/6924259-string_offset.patch:
+	Remove patch missed in last but one change.
+	* Makefile.am:
+	(OPENJDK_VERSION): Bump to b09.
+	(CORBA_CHANGESET): Update to IcedTea7 forest head.
+	(JAXP_CHANGESET): Likewise.
+	(JAXWS_CHANGESET): Likewise.
+	(JDK_CHANGESET): Likewise.
+	(LANGTOOLS_CHANGESET): Likewise.
+	(OPENJDK_CHANGESET): Likewise.
+	(CORBA_SHA256SUM): Likewise.
+	(JAXP_SHA256SUM): Likewise.
+	(JAXWS_SHA256SUM): Likewise.
+	(JDK_SHA256SUM): Likewise.
+	(LANGTOOLS_SHA256SUM): Likewise.
+	(OPENJDK_SHA256SUM): Likewise.
+	(JAXWS): Fix paths, including both JAXWS and JAF.
+	(JAXWS_COND): Removed.
+	(OPENJDK_SOURCEPATH_DIRS): Add JAXWS source tree,
+	required by new implementaton of java.lang.invoke
+	that relies on the copy of ASM in the JAXWS tree.
+	* hotspot.map: Update to IcedTea7 forest head.
+	* patches/boot/ecj-diamond.patch,
+	* patches/boot/ecj-multicatch.patch,
+	* patches/boot/ecj-stringswitch.patch,
+	* patches/boot/ecj-trywithresources.patch:
+	Updated due to changes from the security patches
+	and warning fixes in rmic.
+
 2013-01-16  Andrew John Hughes  <gnu_andrew@member.fsf.org>
 
 	* NEWS: Add 2.1.4, 2.2.4 and 2.3.4 release
--- a/Makefile.am	Wed Jan 16 01:38:30 2013 +0000
+++ b/Makefile.am	Thu Jan 17 00:37:19 2013 +0000
@@ -1,22 +1,22 @@
 # Dependencies
 
-OPENJDK_VERSION = b06
+OPENJDK_VERSION = b09
 JDK_UPDATE_VERSION = 12
 COMBINED_VERSION = $(JDK_UPDATE_VERSION)-$(OPENJDK_VERSION)
 
-CORBA_CHANGESET = 1fc876ad27f5
-JAXP_CHANGESET = b67573b17099
-JAXWS_CHANGESET = 8c8c122d0fa8
-JDK_CHANGESET = 880acd2bf8d1
-LANGTOOLS_CHANGESET = 698d52b36615
-OPENJDK_CHANGESET = 9b35dbaf2afa
+CORBA_CHANGESET = 679412ed11d5
+JAXP_CHANGESET = cba4d3377850
+JAXWS_CHANGESET = a7541d353428
+JDK_CHANGESET = bbfd732ae37d
+LANGTOOLS_CHANGESET = 31539542e9e5
+OPENJDK_CHANGESET = 2d1ddf672d61
 
-CORBA_SHA256SUM = 2945cef860c0a3e5af69ffe370ed762bb620db855f97e16efef5b639144e3d93
-JAXP_SHA256SUM = 4eb3f831cb486c81e16ac5d37b30e0e309ba8e2e8d4a400382ee4fa0790ca268
-JAXWS_SHA256SUM = 35e075fc9d4c9de7df8905cf3238e87a9388e4028ff984b494b7fb6c36fd17e1
-JDK_SHA256SUM = c6db11a2f5e90f37a37d65615d7e5ffa0e0e066e4eb303cc98e23ac245b3425d
-LANGTOOLS_SHA256SUM = 6ec950b34cb8cc1c6aa64e25b492952a3ba0a53370bb6e5d5431922fa940b506
-OPENJDK_SHA256SUM = c42c018e3f2a5037d9c07e98ffb8784a732c5e1ebd5bb18c3587ca0e8825b27b
+CORBA_SHA256SUM = 20b9840fa09f8e89a141cbe0b08794588f8534ba760cf08cee34feaea3018bc4
+JAXP_SHA256SUM = d04ae1702118dd42e5f7c3796dab0214a44f27b8381464536877cded732f6b77
+JAXWS_SHA256SUM = ada222989022c456d6ebd417891fb4b575d47da1134bd0ca631fb5deea7cbed8
+JDK_SHA256SUM = f3e534cabdf0892b8311133da977823bbecabab7cf5f8a5115ef4fd3b2f81b06
+LANGTOOLS_SHA256SUM = 7cc3816acebfeac0211161cc39472b38f87587f4d41fa3e153109e27df4c02c8
+OPENJDK_SHA256SUM = 43aef86d067f66f2cd3b6895cc166e056b05603ee585ba50b5a82d41e7924a16
 
 CACAO_VERSION = a567bcb7f589
 CACAO_SHA256SUM = d49f79debc131a5694cae6ab3ba2864e7f3249ee8d9dc09aae8afdd4dc6b09f9
@@ -73,7 +73,7 @@
 SOLARIS = openjdk-boot/jdk/src/solaris/classes
 LANGTOOLS = openjdk-boot/langtools/src/share/classes
 CORBA = openjdk-boot/corba/src/share/classes
-JAXWS = openjdk-boot/jaxws/sources/jaxws_src/src
+JAXWS = openjdk-boot/jaxws/src/share/jaxws_classes:openjdk-boot/jaxws/src/share/jaf_classes
 
 PULSE_JAVA_DIR = $(abs_top_srcdir)/pulseaudio
 PULSE_JAVA_NATIVE_SRCDIR = $(PULSE_JAVA_DIR)/src/native
@@ -85,16 +85,8 @@
 PULSE_JAVA_JAVA_SRCDIR = $(PULSE_JAVA_DIR)/src/java
 PULSE_JAVA_CLASS_DIR = $(PULSE_JAVA_BUILDDIR)/classes
 
-if DTDTYPE_QNAME
-JAXWS_COND = $(JAXWS)
-endif
-
-if LACKS_JAVAX_ANNOTATION_RESOURCE
-JAXWS_COND = $(JAXWS)
-endif
-
 OPENJDK_SOURCEPATH_DIRS = \
-        $(SHARE):$(SOLARIS):$(LANGTOOLS):$(CORBA):$(JAXWS_COND)
+        $(SHARE):$(SOLARIS):$(LANGTOOLS):$(CORBA):$(JAXWS)
 
 SOURCEPATH_DIRS = $(abs_top_srcdir)/generated:$(OPENJDK_SOURCEPATH_DIRS)
 
--- a/hotspot.map	Wed Jan 16 01:38:30 2013 +0000
+++ b/hotspot.map	Thu Jan 17 00:37:19 2013 +0000
@@ -1,1 +1,1 @@
-default http://icedtea.classpath.org/hg/icedtea7-forest/hotspot a57f19258524 334a0eedef7b45c624885460a214bf697154e6611ef5d6874d506c258db27a5d
+default http://icedtea.classpath.org/hg/icedtea7-forest/hotspot 7e12b7098f20 dc85dde54f736507e83f718a587020b89d5e6c532a33a18cabd17dedef5db80b
--- a/patches/boot/ecj-diamond.patch	Wed Jan 16 01:38:30 2013 +0000
+++ b/patches/boot/ecj-diamond.patch	Thu Jan 17 00:37:19 2013 +0000
@@ -6437,3 +6437,511 @@
          List<Thread> threads = new ArrayList<Thread>();
          for (int i = 0; i < threadCount; i++) {
              RandomCollector r = new RandomCollector();
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java openjdk-boot/jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java	2013-01-16 02:31:22.300240401 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java	2013-01-16 02:31:46.772630169 +0000
+@@ -78,9 +78,9 @@
+     /* indicate compatibility with JDK 1.1.x version of class */
+     private static final long serialVersionUID = 4666870661827494597L;
+     private Hashtable<String, Remote> bindings
+-        = new Hashtable<>(101);
++        = new Hashtable<String, Remote>(101);
+     private static Hashtable<InetAddress, InetAddress> allowedAccessCache
+-        = new Hashtable<>(3);
++        = new Hashtable<InetAddress, InetAddress>(3);
+     private static RegistryImpl registry;
+     private static ObjID id = new ObjID(ObjID.REGISTRY_ID);
+ 
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java	2013-01-16 02:31:22.308240528 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java	2013-01-16 02:37:55.086500471 +0000
+@@ -66,10 +66,10 @@
+ 
+     /** maps persistent IDs to activated remote objects */
+     private final Hashtable<ActivationID,ActiveEntry> active =
+-        new Hashtable<>();
++        new Hashtable<ActivationID,ActiveEntry>();
+     private boolean groupInactive = false;
+     private final ActivationGroupID groupID;
+-    private final List<ActivationID> lockedIDs = new ArrayList<>();
++    private final List<ActivationID> lockedIDs = new ArrayList<ActivationID>();
+ 
+     /**
+      * Creates a default activation group implementation.
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java	2013-01-16 02:31:22.316240656 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java	2013-01-16 02:38:14.518810403 +0000
+@@ -112,11 +112,11 @@
+      * garbage collected.
+      */
+     private static final HashMap<LoaderKey, LoaderEntry> loaderTable
+-        = new HashMap<>(5);
++        = new HashMap<LoaderKey, LoaderEntry>(5);
+ 
+     /** reference queue for cleared class loader entries */
+     private static final ReferenceQueue<Loader> refQueue
+-        = new ReferenceQueue<>();
++        = new ReferenceQueue<Loader>();
+ 
+     /*
+      * Disallow anyone from creating one of these.
+@@ -776,7 +776,7 @@
+ 
+     /** map from weak(key=string) to [URL[], soft(key)] */
+     private static final Map<String, Object[]> pathToURLsCache
+-        = new WeakHashMap<>(5);
++        = new WeakHashMap<String, Object[]>(5);
+ 
+     /**
+      * Convert an array of URL objects into a corresponding string
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/MarshalInputStream.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/MarshalInputStream.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/MarshalInputStream.java	2013-01-16 02:31:22.324240784 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/MarshalInputStream.java	2013-01-16 02:38:36.627163040 +0000
+@@ -65,14 +65,14 @@
+ 
+     /** table to hold sun classes to which access is explicitly permitted */
+     protected static Map<String, Class<?>> permittedSunClasses
+-        = new HashMap<>(3);
++        = new HashMap<String, Class<?>>(3);
+ 
+     /** if true, don't try superclass first in resolveClass() */
+     private boolean skipDefaultResolveClass = false;
+ 
+     /** callbacks to make when done() called: maps Object to Runnable */
+     private final Map<Object, Runnable> doneCallbacks
+-        = new HashMap<>(3);
++        = new HashMap<Object, Runnable>(3);
+ 
+     /**
+      * if true, load classes (if not available locally) only from the
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java	2013-01-16 02:31:22.336240974 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java	2013-01-16 02:39:03.071584874 +0000
+@@ -537,7 +537,7 @@
+         HashToMethod_Maps() {}
+ 
+         protected Map<Long,Method> computeValue(Class<?> remoteClass) {
+-            Map<Long,Method> map = new HashMap<>();
++            Map<Long,Method> map = new HashMap<Long,Method>();
+             for (Class<?> cl = remoteClass;
+                  cl != null;
+                  cl = cl.getSuperclass())
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/Util.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/Util.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/Util.java	2013-01-16 02:31:22.344241102 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/Util.java	2013-01-16 02:39:18.027823469 +0000
+@@ -207,7 +207,7 @@
+      * @throws  NullPointerException if remoteClass is null
+      */
+     private static Class<?>[] getRemoteInterfaces(Class<?> remoteClass) {
+-        ArrayList<Class<?>> list = new ArrayList<>();
++        ArrayList<Class<?>> list = new ArrayList<Class<?>>();
+         getRemoteInterfaces(list, remoteClass);
+         return list.toArray(new Class<?>[list.size()]);
+     }
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/WeakClassHashMap.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/WeakClassHashMap.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/WeakClassHashMap.java	2013-01-16 02:31:22.352241229 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/WeakClassHashMap.java	2013-01-16 02:39:39.284162590 +0000
+@@ -46,7 +46,7 @@
+  **/
+ public abstract class WeakClassHashMap<V> {
+ 
+-    private Map<Class<?>,ValueCell<V>> internalMap = new WeakHashMap<>();
++    private Map<Class<?>,ValueCell<V>> internalMap = new WeakHashMap<Class<?>,ValueCell<V>>();
+ 
+     protected WeakClassHashMap() { }
+ 
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/ConnectionInputStream.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/ConnectionInputStream.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/ConnectionInputStream.java	2013-01-16 02:31:22.360241357 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/ConnectionInputStream.java	2013-01-16 02:37:32.806145141 +0000
+@@ -43,7 +43,7 @@
+     private boolean dgcAckNeeded = false;
+ 
+     /** Hashtable mapping Endpoints to lists of LiveRefs to register */
+-    private Map<Endpoint, List<LiveRef>> incomingRefTable = new HashMap<>(5);
++    private Map<Endpoint, List<LiveRef>> incomingRefTable = new HashMap<Endpoint, List<LiveRef>>(5);
+ 
+     /** identifier for gc ack*/
+     private UID ackID;
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/DGCAckHandler.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/DGCAckHandler.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/DGCAckHandler.java	2013-01-16 02:31:22.368241485 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/DGCAckHandler.java	2013-01-16 02:36:17.440943411 +0000
+@@ -78,7 +78,7 @@
+         Collections.synchronizedMap(new HashMap<UID,DGCAckHandler>());
+ 
+     private final UID id;
+-    private List<Object> objList = new ArrayList<>(); // null if released
++    private List<Object> objList = new ArrayList<Object>(); // null if released
+     private Future<?> task = null;
+ 
+     /**
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/DGCClient.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/DGCClient.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/DGCClient.java	2013-01-16 02:31:22.380241675 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/DGCClient.java	2013-01-16 02:33:21.178134084 +0000
+@@ -176,9 +176,9 @@
+         private DGC dgc;
+ 
+         /** table of refs held for endpoint: maps LiveRef to RefEntry */
+-        private Map<LiveRef, RefEntry> refTable = new HashMap<>(5);
++        private Map<LiveRef, RefEntry> refTable = new HashMap<LiveRef, RefEntry>(5);
+         /** set of RefEntry instances from last (failed) dirty call */
+-        private Set<RefEntry> invalidRefs = new HashSet<>(5);
++        private Set<RefEntry> invalidRefs = new HashSet<RefEntry>(5);
+ 
+         /** true if this entry has been removed from the global table */
+         private boolean removed = false;
+@@ -200,12 +200,12 @@
+         private boolean interruptible = false;
+ 
+         /** reference queue for phantom references */
+-        private ReferenceQueue<LiveRef> refQueue = new ReferenceQueue<>();
++        private ReferenceQueue<LiveRef> refQueue = new ReferenceQueue<LiveRef>();
+         /** set of clean calls that need to be made */
+-        private Set<CleanRequest> pendingCleans = new HashSet<>(5);
++        private Set<CleanRequest> pendingCleans = new HashSet<CleanRequest>(5);
+ 
+         /** global endpoint table: maps Endpoint to EndpointEntry */
+-        private static Map<Endpoint,EndpointEntry> endpointTable = new HashMap<>(5);
++        private static Map<Endpoint,EndpointEntry> endpointTable = new HashMap<Endpoint,EndpointEntry>(5);
+         /** handle for GC latency request (for future cancellation) */
+         private static GC.LatencyRequest gcLatencyRequest = null;
+ 
+@@ -282,7 +282,7 @@
+                         refEntry = new RefEntry(refClone);
+                         refTable.put(refClone, refEntry);
+                         if (refsToDirty == null) {
+-                            refsToDirty = new HashSet<>(5);
++                            refsToDirty = new HashSet<RefEntry>(5);
+                         }
+                         refsToDirty.add(refEntry);
+                     }
+@@ -564,7 +564,7 @@
+                             needRenewal = true;
+                             if (!invalidRefs.isEmpty()) {
+                                 refsToDirty = invalidRefs;
+-                                invalidRefs = new HashSet<>(5);
++                                invalidRefs = new HashSet<RefEntry>(5);
+                             }
+                             sequenceNum = getNextSequenceNum();
+                         }
+@@ -603,12 +603,12 @@
+                 if (refEntry.isRefSetEmpty()) {
+                     if (refEntry.hasDirtyFailed()) {
+                         if (strongCleans == null) {
+-                            strongCleans = new HashSet<>(5);
++                            strongCleans = new HashSet<RefEntry>(5);
+                         }
+                         strongCleans.add(refEntry);
+                     } else {
+                         if (normalCleans == null) {
+-                            normalCleans = new HashSet<>(5);
++                            normalCleans = new HashSet<RefEntry>(5);
+                         }
+                         normalCleans.add(refEntry);
+                     }
+@@ -704,7 +704,7 @@
+             /** LiveRef value for this entry (not a registered instance) */
+             private LiveRef ref;
+             /** set of phantom references to registered instances */
+-            private Set<PhantomLiveRef> refSet = new HashSet<>(5);
++            private Set<PhantomLiveRef> refSet = new HashSet<PhantomLiveRef>(5);
+             /** true if a dirty call containing this ref has failed */
+             private boolean dirtyFailed = false;
+ 
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/DGCImpl.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/DGCImpl.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/DGCImpl.java	2013-01-16 02:31:22.388241803 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/DGCImpl.java	2013-01-16 02:36:08.824806043 +0000
+@@ -84,7 +84,7 @@
+     /** remote implementation of DGC interface for this VM */
+     private static DGCImpl dgc;
+     /** table that maps VMID to LeaseInfo */
+-    private Map<VMID,LeaseInfo> leaseTable = new HashMap<>();
++    private Map<VMID,LeaseInfo> leaseTable = new HashMap<VMID,LeaseInfo>();
+     /** checks for lease expiration */
+     private Future<?> checker = null;
+ 
+@@ -236,7 +236,7 @@
+         long time = System.currentTimeMillis();
+ 
+         /* List of vmids that need to be removed from the leaseTable */
+-        List<LeaseInfo> toUnregister = new ArrayList<>();
++        List<LeaseInfo> toUnregister = new ArrayList<LeaseInfo>();
+ 
+         /* Build a list of leaseInfo objects that need to have
+          * targets removed from their notifySet.  Remove expired
+@@ -313,7 +313,7 @@
+     private static class LeaseInfo {
+         VMID vmid;
+         long expiration;
+-        Set<Target> notifySet = new HashSet<>();
++        Set<Target> notifySet = new HashSet<Target>();
+ 
+         LeaseInfo(VMID vmid, long lease) {
+             this.vmid = vmid;
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/ObjectTable.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/ObjectTable.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/ObjectTable.java	2013-01-16 02:31:22.396241930 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/ObjectTable.java	2013-01-16 02:37:15.185864150 +0000
+@@ -62,9 +62,9 @@
+ 
+     /** tables mapping to Target, keyed from ObjectEndpoint and impl object */
+     private static final Map<ObjectEndpoint,Target> objTable =
+-        new HashMap<>();
++        new HashMap<ObjectEndpoint,Target>();
+     private static final Map<WeakRef,Target> implTable =
+-        new HashMap<>();
++        new HashMap<WeakRef,Target>();
+ 
+     /**
+      * lock guarding keepAliveCount, reaper, and gcLatencyRequest.
+@@ -79,7 +79,7 @@
+     private static Thread reaper = null;
+ 
+     /** queue notified when weak refs in the table are cleared */
+-    static final ReferenceQueue<Object> reapQueue = new ReferenceQueue<>();
++    static final ReferenceQueue<Object> reapQueue = new ReferenceQueue<Object>();
+ 
+     /** handle for GC latency request (for future cancellation) */
+     private static GC.LatencyRequest gcLatencyRequest = null;
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java	2013-01-16 02:31:22.404242057 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java	2013-01-16 02:34:03.586809842 +0000
+@@ -75,13 +75,13 @@
+ 
+     /** table of hosts successfully connected to and the factory used */
+     private Hashtable<String, RMISocketFactory> successTable =
+-        new Hashtable<>();
++        new Hashtable<String, RMISocketFactory>();
+ 
+     /** maximum number of hosts to remember successful connection to */
+     private static final int MaxRememberedHosts = 64;
+ 
+     /** list of the hosts in successTable in initial connection order */
+-    private Vector<String> hostList = new Vector<>(MaxRememberedHosts);
++    private Vector<String> hostList = new Vector<String>(MaxRememberedHosts);
+ 
+     /** default factory for initial use for direct socket connection */
+     protected RMISocketFactory initialFactory = new RMIDirectSocketFactory();
+@@ -96,7 +96,7 @@
+      * socket connection fails.
+      */
+     public RMIMasterSocketFactory() {
+-        altFactoryList = new Vector<>(2);
++        altFactoryList = new Vector<RMISocketFactory>(2);
+         boolean setFactories = false;
+ 
+         try {
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/Target.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/Target.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/Target.java	2013-01-16 02:31:22.412242185 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/Target.java	2013-01-16 02:36:35.937238312 +0000
+@@ -53,10 +53,10 @@
+     /** stub for remote object */
+     private final Remote stub;
+     /** set of clients that hold references to this target */
+-    private final Vector<VMID> refSet = new Vector<>();
++    private final Vector<VMID> refSet = new Vector<VMID>();
+     /** table that maps client endpoints to sequence numbers */
+     private final Hashtable<VMID, SequenceEntry> sequenceTable =
+-        new Hashtable<>(5);
++        new Hashtable<VMID, SequenceEntry>(5);
+     /** access control context in which target was created */
+     private final AccessControlContext acc;
+     /** context class loader in which target was created */
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java	2013-01-16 02:31:22.424242376 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java	2013-01-16 02:34:20.691082418 +0000
+@@ -85,7 +85,7 @@
+     private DataOutputStream dataOut;
+ 
+     /** table holding currently open connection IDs and related info */
+-    private Hashtable<Integer, MultiplexConnectionInfo> connectionTable = new Hashtable<>(7);
++    private Hashtable<Integer, MultiplexConnectionInfo> connectionTable = new Hashtable<Integer, MultiplexConnectionInfo>(7);
+ 
+     /** number of currently open connections */
+     private int numConnections = 0;
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPChannel.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPChannel.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPChannel.java	2013-01-16 02:31:22.432242504 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPChannel.java	2013-01-16 02:34:36.327331615 +0000
+@@ -64,7 +64,7 @@
+     private final TCPTransport tr;
+     /** list of cached connections */
+     private final List<TCPConnection> freeList =
+-        new ArrayList<>();
++        new ArrayList<TCPConnection>();
+     /** frees cached connections that have expired (guarded by freeList) */
+     private Future<?> reaper = null;
+ 
+@@ -480,7 +480,7 @@
+     private TCPTransport transport;
+ 
+     /** queue of connections to be accepted */
+-    private List<Connection> queue = new ArrayList<>();
++    private List<Connection> queue = new ArrayList<Connection>();
+ 
+     /** thread ID counter */
+     private static int threadNum = 0;
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java	2013-01-16 02:31:22.440242630 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java	2013-01-16 02:34:52.623591345 +0000
+@@ -148,7 +148,7 @@
+     // TBD: should this be a weak hash table?
+     private static final
+         Map<TCPEndpoint,LinkedList<TCPEndpoint>> localEndpoints =
+-        new HashMap<>();
++        new HashMap<TCPEndpoint,LinkedList<TCPEndpoint>>();
+ 
+     /**
+      * Create an endpoint for a specified host and port.
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java	2013-01-16 02:31:22.448242758 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java	2013-01-16 02:35:46.984457860 +0000
+@@ -120,7 +120,7 @@
+ 
+     /** client host for the current thread's connection */
+     private static final ThreadLocal<ConnectionHandler>
+-        threadConnectionHandler = new ThreadLocal<>();
++        threadConnectionHandler = new ThreadLocal<ConnectionHandler>();
+ 
+     /** endpoints for this transport */
+     private final LinkedList<TCPEndpoint> epList;
+@@ -130,7 +130,7 @@
+     private ServerSocket server = null;
+     /** table mapping endpoints to channels */
+     private final Map<TCPEndpoint,Reference<TCPChannel>> channelTable =
+-        new WeakHashMap<>();
++        new WeakHashMap<TCPEndpoint,Reference<TCPChannel>>();
+ 
+     static final RMISocketFactory defaultSocketFactory =
+         RMISocketFactory.getDefaultSocketFactory();
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/Transport.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/Transport.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/Transport.java	2013-01-16 02:31:22.456242886 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/Transport.java	2013-01-16 02:36:47.305419575 +0000
+@@ -62,7 +62,7 @@
+         Log.getLog("sun.rmi.transport.misc", "transport", Transport.logLevel);
+ 
+     /** References the current transport when a call is being serviced */
+-    private static final ThreadLocal<Transport> currentTransport = new ThreadLocal<>();
++    private static final ThreadLocal<Transport> currentTransport = new ThreadLocal<Transport>();
+ 
+     /** ObjID for DGCImpl */
+     private static final ObjID dgcID = new ObjID(ObjID.DGC_ID);
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/rmic/BatchEnvironment.java openjdk-boot/jdk/src/share/classes/sun/rmi/rmic/BatchEnvironment.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/rmic/BatchEnvironment.java	2013-01-16 14:03:24.004644191 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/rmic/BatchEnvironment.java	2013-01-16 14:04:14.265446248 +0000
+@@ -160,7 +160,7 @@
+     }
+ 
+     /** list of generated source files created in this environment */
+-    private Vector<File> generatedFiles = new Vector<>();
++    private Vector<File> generatedFiles = new Vector<File>();
+ 
+     /**
+      * Remember a generated source file generated so that it
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/rmic/Main.java openjdk-boot/jdk/src/share/classes/sun/rmi/rmic/Main.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/rmic/Main.java	2013-01-16 14:03:38.676878309 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/rmic/Main.java	2013-01-16 14:04:07.289334912 +0000
+@@ -184,7 +184,7 @@
+         destDir = null;
+         flags = F_WARNINGS;
+         tm = System.currentTimeMillis();
+-        classes = new Vector<>();
++        classes = new Vector<String>();
+         nowrite = false;
+         nocompile = false;
+         keepGenerated = false;
+@@ -192,7 +192,7 @@
+         if (generatorArgs == null) {
+             return false;
+         }
+-        generators = new Vector<>();
++        generators = new Vector<Generator>();
+ 
+         // Pre-process command line for @file arguments
+         try {
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/rmic/RMIGenerator.java openjdk-boot/jdk/src/share/classes/sun/rmi/rmic/RMIGenerator.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/rmic/RMIGenerator.java	2013-01-16 16:50:47.126498571 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/rmic/RMIGenerator.java	2013-01-16 16:51:10.246872404 +0000
+@@ -61,7 +61,7 @@
+  */
+ public class RMIGenerator implements RMIConstants, Generator {
+ 
+-    private static final Hashtable<String, Integer> versionOptions = new Hashtable<>();
++    private static final Hashtable<String, Integer> versionOptions = new Hashtable<String, Integer>();
+     static {
+         versionOptions.put("-v1.1", new Integer(STUB_VERSION_1_1));
+         versionOptions.put("-vcompat", new Integer(STUB_VERSION_FAT));
+@@ -651,7 +651,7 @@
+      * that no exceptions need to be caught.
+      */
+     private Vector<ClassDefinition> computeUniqueCatchList(ClassDeclaration[] exceptions) {
+-        Vector<ClassDefinition> uniqueList = new Vector<>();       // unique exceptions to catch
++        Vector<ClassDefinition> uniqueList = new Vector<ClassDefinition>();       // unique exceptions to catch
+ 
+         uniqueList.addElement(defRuntimeException);
+         uniqueList.addElement(defRemoteException);
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/rmi/rmid/ExecOptionPermission.java openjdk-boot/jdk/src/share/classes/com/sun/rmi/rmid/ExecOptionPermission.java
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/rmi/rmid/ExecOptionPermission.java	2013-01-16 23:35:20.034379856 +0000
++++ openjdk-boot/jdk/src/share/classes/com/sun/rmi/rmid/ExecOptionPermission.java	2013-01-16 23:44:22.819124371 +0000
+@@ -231,7 +231,7 @@
+          * Create an empty ExecOptionPermissionCollection.
+          */
+         public ExecOptionPermissionCollection() {
+-            permissions = new Hashtable<>(11);
++            permissions = new Hashtable<String, Permission>(11);
+             all_allowed = false;
+         }
+ 
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/rmi/rmid/ExecPermission.java openjdk-boot/jdk/src/share/classes/com/sun/rmi/rmid/ExecPermission.java
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/rmi/rmid/ExecPermission.java	2013-01-16 23:35:39.518693083 +0000
++++ openjdk-boot/jdk/src/share/classes/com/sun/rmi/rmid/ExecPermission.java	2013-01-16 23:44:07.314873946 +0000
+@@ -235,7 +235,7 @@
+          * Create an empty ExecPermissionCollection.
+          */
+         public ExecPermissionCollection() {
+-            permissions = new Vector<>();
++            permissions = new Vector<Permission>();
+         }
+ 
+         /**
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/Activation.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/Activation.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/Activation.java	2013-01-16 23:41:48.704634678 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/Activation.java	2013-01-16 23:43:38.474408088 +0000
+@@ -805,8 +805,8 @@
+         ActivationGroupDesc desc = null;
+         ActivationGroupID groupID = null;
+         long incarnation = 0;
+-        Map<ActivationID,ObjectEntry> objects = new HashMap<>();
+-        Set<ActivationID> restartSet = new HashSet<>();
++        Map<ActivationID,ObjectEntry> objects = new HashMap<ActivationID,ObjectEntry>();
++        Set<ActivationID> restartSet = new HashSet<ActivationID>();
+ 
+         transient ActivationInstantiator group = null;
+         transient int status = NORMAL;
+@@ -1359,7 +1359,7 @@
+         cmdenv = desc.getCommandEnvironment();
+ 
+         // argv is the literal command to exec
+-        List<String> argv = new ArrayList<>();
++        List<String> argv = new ArrayList<String>();
+ 
+         // Command name/path
+         argv.add((cmdenv != null && cmdenv.getCommandPath() != null)
+@@ -1964,7 +1964,7 @@
+             }
+ 
+             String log = null;
+-            List<String> childArgs = new ArrayList<>();
++            List<String> childArgs = new ArrayList<String>();
+ 
+             /*
+              * Parse arguments
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/CGIHandler.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/CGIHandler.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/CGIHandler.java	2013-01-16 23:36:11.307204093 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/CGIHandler.java	2013-01-16 23:43:11.741976248 +0000
+@@ -116,7 +116,7 @@
+     /* construct table mapping command strings to handlers */
+     private static Hashtable<String, CGICommandHandler> commandLookup;
+     static {
+-        commandLookup = new Hashtable<>();
++        commandLookup = new Hashtable<String, CGICommandHandler>();
+         for (int i = 0; i < commands.length; ++ i)
+             commandLookup.put(commands[i].getName(), commands[i]);
+     }
--- a/patches/boot/ecj-multicatch.patch	Wed Jan 16 01:38:30 2013 +0000
+++ b/patches/boot/ecj-multicatch.patch	Thu Jan 17 00:37:19 2013 +0000
@@ -335,3 +335,83 @@
                  String err = (name+": JVM has "+vmval+" which Java does not define");
                  // ignore exotic ops the JVM cares about; we just wont issue them
                  //System.err.println("warning: "+err);
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java	2013-01-16 03:05:55.869280923 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/ActivationGroupImpl.java	2013-01-16 03:07:23.334672142 +0000
+@@ -296,7 +296,16 @@
+             active.put(id, entry);
+             return entry.mobj;
+ 
+-        } catch (NoSuchMethodException | NoSuchMethodError e) {
++        } catch (NoSuchMethodException e) {
++            /* user forgot to provide activatable constructor?
++             * or code recompiled and user forgot to provide
++             *  activatable constructor?
++             */
++            throw new ActivationException
++                ("Activatable object must provide an activation"+
++                 " constructor", e );
++
++        } catch (NoSuchMethodError e) {
+             /* user forgot to provide activatable constructor?
+              * or code recompiled and user forgot to provide
+              *  activatable constructor?
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java	2013-01-16 03:05:55.877281050 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/LoaderHandler.java	2013-01-16 13:56:44.714207763 +0000
+@@ -261,11 +261,14 @@
+ 
+                     annotation = urlsToPath(urls);
+                 }
+-            } catch (SecurityException | IOException e) {
++            } catch (SecurityException e) {
+                 /*
+                  * SecurityException: If access was denied to the knowledge of
+                  * the class loader's URLs, fall back to the default behavior.
+                  *
++		 */
++            } catch (IOException e) {
++                /*
+                  * IOException: This shouldn't happen, although it is declared
+                  * to be thrown by openConnection() and getPermission().  If it
+                  * does happen, forget about this class loader's URLs and
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java	2013-01-16 03:05:55.885281177 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java	2013-01-16 03:08:26.639679256 +0000
+@@ -208,7 +208,9 @@
+ 
+             return initialSocket;
+ 
+-        } catch (UnknownHostException | NoRouteToHostException e) {
++        } catch (UnknownHostException e) {
++            initialFailure = e;
++        } catch (NoRouteToHostException e) {
+             initialFailure = e;
+         } catch (SocketException e) {
+             if (eagerHttpFallback) {
+@@ -273,7 +275,9 @@
+                 }
+                 // if connector ever does get socket, it won't be used
+                 connector.notUsed();
+-            } catch (UnknownHostException | NoRouteToHostException e) {
++            } catch (UnknownHostException e) {
++                initialFailure = e;
++            } catch (NoRouteToHostException e) {
+                 initialFailure = e;
+             } catch (SocketException e) {
+                 if (eagerHttpFallback) {
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java	2013-01-16 03:05:55.893281305 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/tcp/TCPEndpoint.java	2013-01-16 13:53:13.570765705 +0000
+@@ -623,7 +623,10 @@
+             try {
+                 TCPEndpoint.shedConnectionCaches();
+                 // REMIND: should we retry createSocket?
+-            } catch (OutOfMemoryError | Exception mem) {
++            } catch (OutOfMemoryError mem) {
++                // don't quit if out of memory
++                // or shed fails non-catastrophically
++            } catch (Exception mem) {
+                 // don't quit if out of memory
+                 // or shed fails non-catastrophically
+             }
--- a/patches/boot/ecj-stringswitch.patch	Wed Jan 16 01:38:30 2013 +0000
+++ b/patches/boot/ecj-stringswitch.patch	Thu Jan 17 00:37:19 2013 +0000
@@ -1,6 +1,6 @@
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
---- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java	2012-09-26 02:12:25.636743366 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java	2013-01-16 02:09:26.099209245 +0000
 @@ -350,19 +350,16 @@
              if (attrCommands != null) {
                  Object lkey = Attribute.keyForLookup(ctype, name);
@@ -32,8 +32,8 @@
              // Find canonical instance of the requested attribute.
              Attribute a = Attribute.lookup(Package.attrDefs, ctype, name);
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java
---- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java	2012-09-26 02:11:37.444030490 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java	2013-01-16 02:09:26.107209374 +0000
 @@ -73,16 +73,14 @@
          {
              // Non-standard, undocumented "--unpack" switch enables unpack mode.
@@ -91,8 +91,8 @@
  
          if (logFile != null && !logFile.equals("")) {
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java
---- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java	2012-09-26 02:11:37.444030490 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java	2013-01-16 02:09:26.111209439 +0000
 @@ -1116,30 +1116,25 @@
          // what is one of { Debug, Compile, Constant, Exceptions, InnerClasses }
          if (verbose > 0)
@@ -144,8 +144,8 @@
      }
  
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java
---- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java	2012-09-26 02:11:37.444030490 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java	2013-01-16 02:09:26.111209439 +0000
 @@ -64,17 +64,23 @@
  
      protected NTLM(String version) throws NTLMException {
@@ -181,9 +181,207 @@
          try {
              fac = SecretKeyFactory.getInstance ("DES");
              cipher = Cipher.getInstance ("DES/ECB/NoPadding");
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java
+--- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2013-01-16 02:15:12.124777065 +0000
+@@ -327,12 +327,11 @@
+                                      Object[] appendixResult) {
+         try {
+             if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
+-                switch (name) {
+-                case "invoke":
+-                    return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
+-                case "invokeExact":
+-                    return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
+-                }
++	      if ("invoke".equals(name)) {
++		return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
++	      } else if ("invokeExact".equals(name)) {
++		return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
++	      }
+             }
+         } catch (Throwable ex) {
+             if (ex instanceof LinkageError)
+@@ -395,104 +394,99 @@
+     static boolean isCallerSensitive(MemberName mem) {
+         assert(mem.isInvocable());
+         Class<?> defc = mem.getDeclaringClass();
+-        switch (mem.getName()) {
+-        case "doPrivileged":
++	String memName = mem.getName();
++	if ("doPrivileged".equals(memName)) {
+             return defc == java.security.AccessController.class;
+-        case "getUnsafe":
+-            return defc == sun.misc.Unsafe.class;
+-        case "lookup":
++        } else if ("getUnsafe".equals(memName)) {
++             return defc == sun.misc.Unsafe.class;
++	} else if ("lookup".equals(memName)) {
+             return defc == java.lang.invoke.MethodHandles.class;
+-        case "findStatic":
+-        case "findVirtual":
+-        case "findConstructor":
+-        case "findSpecial":
+-        case "findGetter":
+-        case "findSetter":
+-        case "findStaticGetter":
+-        case "findStaticSetter":
+-        case "bind":
+-        case "unreflect":
+-        case "unreflectSpecial":
+-        case "unreflectConstructor":
+-        case "unreflectGetter":
+-        case "unreflectSetter":
++	} else if ("findStatic".equals(memName) ||
++		   "findVirtual".equals(memName) || 
++		   "findConstructor".equals(memName) ||
++		   "findSpecial".equals(memName) ||
++		   "findGetter".equals(memName) ||
++		   "findSetter".equals(memName) ||
++		   "findStaticGetter".equals(memName) ||
++		   "findStaticSetter".equals(memName) ||
++		   "bind".equals(memName) ||
++		   "unreflect".equals(memName) ||
++		   "unreflectSpecial".equals(memName) ||
++		   "unreflectConstructor".equals(memName) ||
++		   "unreflectGetter".equals(memName) ||
++		   "unreflectSetter".equals(memName)) {
+             return defc == java.lang.invoke.MethodHandles.Lookup.class;
+-        case "invoke":
++        } else if ("invoke".equals(memName)) {
+             return defc == java.lang.reflect.Method.class;
+-        case "get":
+-        case "getBoolean":
+-        case "getByte":
+-        case "getChar":
+-        case "getShort":
+-        case "getInt":
+-        case "getLong":
+-        case "getFloat":
+-        case "getDouble":
+-        case "set":
+-        case "setBoolean":
+-        case "setByte":
+-        case "setChar":
+-        case "setShort":
+-        case "setInt":
+-        case "setLong":
+-        case "setFloat":
+-        case "setDouble":
++	} else if ("get".equals(memName) ||
++		   "getBoolean".equals(memName) ||
++		   "getByte".equals(memName) ||
++		   "getChar".equals(memName) ||
++		   "getShort".equals(memName) ||
++		   "getInt".equals(memName) ||
++		   "getFloat".equals(memName) ||
++		   "getDouble".equals(memName) ||
++		   "set".equals(memName) ||
++		   "setBoolean".equals(memName) ||
++		   "setByte".equals(memName) ||
++		   "setChar".equals(memName) ||
++		   "setShort".equals(memName) ||
++		   "setInt".equals(memName) ||
++		   "setLong".equals(memName) ||
++		   "setFloat".equals(memName) ||
++		   "setDouble".equals(memName)) {
+             return defc == java.lang.reflect.Field.class;
+-        case "newInstance":
++	} else if ("newInstance".equals(memName)) {
+             if (defc == java.lang.reflect.Constructor.class)  return true;
+             if (defc == java.lang.Class.class)  return true;
+-            break;
+-        case "forName":
+-        case "getClassLoader":
+-        case "getClasses":
+-        case "getFields":
+-        case "getMethods":
+-        case "getConstructors":
+-        case "getDeclaredClasses":
+-        case "getDeclaredFields":
+-        case "getDeclaredMethods":
+-        case "getDeclaredConstructors":
+-        case "getField":
+-        case "getMethod":
+-        case "getConstructor":
+-        case "getDeclaredField":
+-        case "getDeclaredMethod":
+-        case "getDeclaredConstructor":
++	} else if ("forName".equals(memName) ||
++		   "getClassLoader".equals(memName) ||
++		   "getClasses".equals(memName) ||
++		   "getFields".equals(memName) ||
++		   "getMethods".equals(memName) ||
++		   "getConstructors".equals(memName) ||
++		   "getDeclaredClasses".equals(memName) ||
++		   "getDeclaredFields".equals(memName) ||
++		   "getDeclaredMethods".equals(memName) ||
++		   "getDeclaredConstructors".equals(memName) ||
++		   "getField".equals(memName) ||
++		   "getMethod".equals(memName) ||
++		   "getConstructor".equals(memName) ||
++		   "getDeclaredField".equals(memName) ||
++		   "getDeclaredMethod".equals(memName) ||
++		   "getDeclaredConstructor".equals(memName)) {
+             return defc == java.lang.Class.class;
+-        case "getConnection":
+-        case "getDriver":
+-        case "getDrivers":
+-        case "deregisterDriver":
++	} else if ("getConnection".equals(memName) ||
++		   "getDriver".equals(memName) ||
++		   "getDrivers".equals(memName) ||
++		   "deregisterDriver".equals(memName)) {
+             return defc == java.sql.DriverManager.class;
+-        case "newUpdater":
++        } else if ("newUpdater".equals(memName)) {
+             if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class)  return true;
+             if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class)  return true;
+             if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class)  return true;
+-            break;
+-        case "getContextClassLoader":
++        } else if ("getContextClassLoader".equals(memName)) {
+             return defc == java.lang.Thread.class;
+-        case "getPackage":
+-        case "getPackages":
++        } else if ("getPackage".equals(memName) ||
++		   "getPackages".equals(memName)) {
+             return defc == java.lang.Package.class;
+-        case "getParent":
+-        case "getSystemClassLoader":
++        } else if ("getParent".equals(memName) ||
++		   "getSystemClassLoader".equals(memName)) {
+             return defc == java.lang.ClassLoader.class;
+-        case "load":
+-        case "loadLibrary":
++        } else if ("load".equals(memName) ||
++		   "loadLibrary".equals(memName)) {
+             if (defc == java.lang.Runtime.class)  return true;
+             if (defc == java.lang.System.class)  return true;
+-            break;
+-        case "getCallerClass":
++        } else if ("getCallerClass".equals(memName)) {
+             if (defc == sun.reflect.Reflection.class)  return true;
+             if (defc == java.lang.System.class)  return true;
+-            break;
+-        case "getCallerClassLoader":
++	} else if ("getCallerClassLoader".equals(memName)) {
+             return defc == java.lang.ClassLoader.class;
+-        case "getProxyClass":
+-        case "newProxyInstance":
++        } else if ("getProxyClass".equals(memName) ||
++		   "newProxyInstance".equals(memName)) {
+             return defc == java.lang.reflect.Proxy.class;
+-        case "getBundle":
+-        case "clearCache":
++        } else if ("getBundle".equals(memName) ||
++		   "clearCache".equals(memName)) {
+             return defc == java.util.ResourceBundle.class;
+         }
+         return false;
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java
---- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java	2012-09-26 02:11:37.444030490 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java	2013-01-16 02:09:26.115209504 +0000
 @@ -219,14 +219,16 @@
  
      private static
@@ -225,8 +423,8 @@
          }
          return null;
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java
---- openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java	2012-09-26 02:11:37.444030490 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java	2013-01-16 02:09:26.115209504 +0000
 @@ -119,24 +119,20 @@
          String optStr = (opts.length > 1 && opts[1] != null)
                  ? opts[1].trim()
@@ -264,8 +462,8 @@
  
      /*
 diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java
---- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2012-09-24 21:55:52.000000000 +0100
-+++ openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2012-09-26 02:11:37.444030490 +0100
+--- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2013-01-14 15:01:29.000000000 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2013-01-16 02:09:26.119209568 +0000
 @@ -378,19 +378,23 @@
              GE;         // ">="
  
@@ -303,171 +501,3 @@
                  }
  
                  throw new IllegalArgumentException(
-diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java
---- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2012-11-30 17:43:24.199320360 +0000
-+++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2012-12-03 17:54:57.757827289 +0000
-@@ -327,12 +327,11 @@
-                                      Object[] appendixResult) {
-         try {
-             if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
--                switch (name) {
--                case "invoke":
--                    return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
--                case "invokeExact":
--                    return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
--                }
-+	      if ("invoke".equals(name)) {
-+		return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
-+	      } else if ("invokeExact".equals(name)) {
-+		return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
-+	      }
-             }
-         } catch (Throwable ex) {
-             if (ex instanceof LinkageError)
-@@ -395,91 +394,82 @@
-     static boolean isCallerSensitive(MemberName mem) {
-         assert(mem.isInvocable());
-         Class<?> defc = mem.getDeclaringClass();
--        switch (mem.getName()) {
--        case "doPrivileged":
-+	String memName = mem.getName();
-+	if ("doPrivileged".equals(memName))
-             return defc == java.security.AccessController.class;
--        case "getUnsafe":
-+	else if ("getUnsafe".equals(memName)) 
-             return defc == sun.misc.Unsafe.class;
--        case "lookup":
-+        else if ("lookup".equals(memName)) 
-             return defc == java.lang.invoke.MethodHandles.class;
--        case "invoke":
-+        else if ("invoke".equals(memName)) 
-             return defc == java.lang.reflect.Method.class;
--        case "get":
--        case "getBoolean":
--        case "getByte":
--        case "getChar":
--        case "getShort":
--        case "getInt":
--        case "getLong":
--        case "getFloat":
--        case "getDouble":
--        case "set":
--        case "setBoolean":
--        case "setByte":
--        case "setChar":
--        case "setShort":
--        case "setInt":
--        case "setLong":
--        case "setFloat":
--        case "setDouble":
--            return defc == java.lang.reflect.Field.class;
--        case "newInstance":
-+        else if ("get".equals(memName) ||
-+	    "getBoolean".equals(memName) ||
-+	    "getByte".equals(memName) ||
-+	    "getChar".equals(memName) ||
-+	    "getShort".equals(memName) ||
-+	    "getInt".equals(memName) ||
-+	    "getLong".equals(memName) ||
-+	    "getFloat".equals(memName) ||
-+	    "getDouble".equals(memName) ||
-+	    "set".equals(memName) ||
-+	    "setBoolean".equals(memName) ||
-+	    "setByte".equals(memName) ||
-+	    "setChar".equals(memName) ||
-+	    "setShort".equals(memName) ||
-+	    "setInt".equals(memName) ||
-+	    "setLong".equals(memName) ||
-+	    "setFloat".equals(memName) ||
-+	    "setDouble".equals(memName))
-+	  return defc == java.lang.reflect.Field.class;
-+        else if ("newInstance".equals(memName)) {
-             if (defc == java.lang.reflect.Constructor.class)  return true;
-             if (defc == java.lang.Class.class)  return true;
--            break;
--        case "forName":
--        case "getClassLoader":
--        case "getClasses":
--        case "getFields":
--        case "getMethods":
--        case "getConstructors":
--        case "getDeclaredClasses":
--        case "getDeclaredFields":
--        case "getDeclaredMethods":
--        case "getDeclaredConstructors":
--        case "getField":
--        case "getMethod":
--        case "getConstructor":
--        case "getDeclaredField":
--        case "getDeclaredMethod":
--        case "getDeclaredConstructor":
-+	}
-+        else if ("forName".equals(memName) ||
-+		 "getClassLoader".equals(memName) ||
-+		 "getClasses".equals(memName) ||
-+		 "getFields".equals(memName) ||
-+		 "getMethods".equals(memName) ||
-+		 "getConstructors".equals(memName) ||
-+		 "getDeclaredClasses".equals(memName) ||
-+		 "getDeclaredFields".equals(memName) ||
-+		 "getDeclaredMethods".equals(memName) ||
-+		 "getDeclaredConstructors".equals(memName) ||
-+		 "getField".equals(memName) ||
-+		 "getMethod".equals(memName) ||
-+		 "getConstructor".equals(memName) ||
-+		 "getDeclaredField".equals(memName) ||
-+		 "getDeclaredMethod".equals(memName) ||
-+		 "getDeclaredConstructor".equals(memName))
-             return defc == java.lang.Class.class;
--        case "getConnection":
--        case "getDriver":
--        case "getDrivers":
--        case "deregisterDriver":
-+        else if ("getConnection".equals(memName) ||
-+		 "getDriver".equals(memName) ||
-+		 "getDrivers".equals(memName) ||
-+		 "deregisterDriver".equals(memName)) {
-             return defc == java.sql.DriverManager.class;
--        case "newUpdater":
-+        } else if ("newUpdater".equals(memName)) {
-             if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class)  return true;
-             if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class)  return true;
-             if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class)  return true;
--            break;
--        case "getContextClassLoader":
-+        } else if ("getContextClassLoader".equals(memName))
-             return defc == java.lang.Thread.class;
--        case "getPackage":
--        case "getPackages":
-+        else if ("getPackage".equals(memName) || "getPackages".equals(memName))
-             return defc == java.lang.Package.class;
--        case "getParent":
--        case "getSystemClassLoader":
-+        else if ("getParent".equals(memName) || "getSystemClassLoader".equals(memName))
-             return defc == java.lang.ClassLoader.class;
--        case "load":
--        case "loadLibrary":
-+        else if ("load".equals(memName) || "loadLibrary".equals(memName)) {
-             if (defc == java.lang.Runtime.class)  return true;
-             if (defc == java.lang.System.class)  return true;
--            break;
--        case "getCallerClass":
-+        } else if ("getCallerClass".equals(memName)) {
-             if (defc == sun.reflect.Reflection.class)  return true;
-             if (defc == java.lang.System.class)  return true;
--            break;
--        case "getCallerClassLoader":
-+        } else if ("getCallerClassLoader".equals(memName))
-             return defc == java.lang.ClassLoader.class;
--        case "getProxyClass":
--        case "newProxyInstance":
-+        else if ("getProxyClass".equals(memName) || "newProxyInstance".equals(memName))
-             return defc == java.lang.reflect.Proxy.class;
--        case "getBundle":
--        case "clearCache":
-+        else if ("getBundle".equals(memName) || "clearCache".equals(memName))
-             return defc == java.util.ResourceBundle.class;
--        }
-         return false;
-     }
- }
--- a/patches/boot/ecj-trywithresources.patch	Wed Jan 16 01:38:30 2013 +0000
+++ b/patches/boot/ecj-trywithresources.patch	Thu Jan 17 00:37:19 2013 +0000
@@ -1198,3 +1198,97 @@
          }
  
          public Object run() {
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java	2013-01-16 03:08:26.639679256 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/transport/proxy/RMIMasterSocketFactory.java	2013-01-16 13:59:47.925194291 +0000
+@@ -233,13 +233,14 @@
+                         proxyLog.log(Log.BRIEF,
+                             "trying with factory: " + factory);
+                     }
+-                    try (Socket testSocket =
+-                            factory.createSocket(host, port)) {
++		    Socket testSocket = null;
++                    try {
+                         // For HTTP connections, the output (POST request) must
+                         // be sent before we verify a successful connection.
+                         // So, sacrifice a socket for the sake of testing...
+                         // The following sequence should verify a successful
+                         // HTTP connection if no IOException is thrown.
++			testSocket = factory.createSocket(host, port);
+                         InputStream in = testSocket.getInputStream();
+                         int b = in.read(); // probably -1 for EOF...
+                     } catch (IOException ex) {
+@@ -249,6 +250,10 @@
+ 
+                         continue;
+                     }
++		    finally {
++			if (testSocket != null)
++			    testSocket.close();
++		    }
+                     proxyLog.log(Log.BRIEF, "factory succeeded");
+ 
+                     // factory succeeded, open new socket for caller's use
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/log/ReliableLog.java openjdk-boot/jdk/src/share/classes/sun/rmi/log/ReliableLog.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/log/ReliableLog.java	2013-01-16 23:38:17.177227257 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/log/ReliableLog.java	2013-01-16 23:41:03.015896389 +0000
+@@ -594,10 +594,16 @@
+         } else {
+             name = versionFile;
+         }
+-        try (FileOutputStream fos = new FileOutputStream(fName(name));
+-             DataOutputStream out = new DataOutputStream(fos)) {
++	FileOutputStream fos = null;
++	DataOutputStream out = null;
++        try {
++	    fos = new FileOutputStream(fName(name));
++	    out = new DataOutputStream(fos);
+             writeInt(out, version);
+-        }
++        } finally {
++	    if (out != null) out.close();
++	    if (fos != null) fos.close();
++	}
+     }
+ 
+     /**
+@@ -628,10 +634,13 @@
+      * @exception IOException If an I/O error has occurred.
+      */
+     private int readVersion(String name) throws IOException {
+-        try (DataInputStream in = new DataInputStream
+-                (new FileInputStream(name))) {
++	DataInputStream in = null;
++        try {
++	    in = new DataInputStream(new FileInputStream(name));
+             return in.readInt();
+-        }
++        } finally {
++	    if (in != null) in.close();
++	}
+     }
+ 
+     /**
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/Activation.java openjdk-boot/jdk/src/share/classes/sun/rmi/server/Activation.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/rmi/server/Activation.java	2013-01-16 23:37:20.528316758 +0000
++++ openjdk-boot/jdk/src/share/classes/sun/rmi/server/Activation.java	2013-01-16 23:41:48.704634678 +0000
+@@ -1233,13 +1233,16 @@
+                     PipeWriter.plugTogetherPair
+                         (child.getInputStream(), System.out,
+                          child.getErrorStream(), System.err);
+-                    try (MarshalOutputStream out =
+-                            new MarshalOutputStream(child.getOutputStream())) {
++		    MarshalOutputStream out = null;
++                    try {
++			out = new MarshalOutputStream(child.getOutputStream());
+                         out.writeObject(id);
+                         out.writeObject(desc);
+                         out.writeLong(incarnation);
+                         out.flush();
+-                    }
++                    } finally {
++			if (out != null) out.close();
++		    }
+ 
+ 
+                 } catch (IOException e) {
--- a/patches/hotspot/zero/6924259-string_offset.patch	Wed Jan 16 01:38:30 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,934 +0,0 @@
-# HG changeset patch
-# User kvn
-# Date 1337013360 25200
-# Node ID 3facbb14e873f14af743e05139e6e48b5890ffcc
-# Parent  ea3152ff2a498749bf5d889b247902f5d02915be
-6924259: Remove String.count/String.offset
-Summary: Allow a version of String class that doesn't have count and offset fields.
-Reviewed-by: never, coleenp
-
-diff --git a/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
---- openjdk/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
-+++ openjdk/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2012, 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
-@@ -238,9 +238,12 @@
- 
-   Register result = dst->as_register();
-   {
--    // Get a pointer to the first character of string0 in tmp0 and get string0.count in str0
--    // Get a pointer to the first character of string1 in tmp1 and get string1.count in str1
--    // Also, get string0.count-string1.count in o7 and get the condition code set
-+    // Get a pointer to the first character of string0 in tmp0
-+    //   and get string0.length() in str0
-+    // Get a pointer to the first character of string1 in tmp1
-+    //   and get string1.length() in str1
-+    // Also, get string0.length()-string1.length() in
-+    //   o7 and get the condition code set
-     // Note: some instructions have been hoisted for better instruction scheduling
- 
-     Register tmp0 = L0;
-@@ -248,27 +251,40 @@
-     Register tmp2 = L2;
- 
-     int  value_offset = java_lang_String:: value_offset_in_bytes(); // char array
--    int offset_offset = java_lang_String::offset_offset_in_bytes(); // first character position
--    int  count_offset = java_lang_String:: count_offset_in_bytes();
--
--    __ load_heap_oop(str0, value_offset, tmp0);
--    __ ld(str0, offset_offset, tmp2);
--    __ add(tmp0, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp0);
--    __ ld(str0, count_offset, str0);
--    __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2);
-+    if (java_lang_String::has_offset_field()) {
-+      int offset_offset = java_lang_String::offset_offset_in_bytes(); // first character position
-+      int  count_offset = java_lang_String:: count_offset_in_bytes();
-+      __ load_heap_oop(str0, value_offset, tmp0);
-+      __ ld(str0, offset_offset, tmp2);
-+      __ add(tmp0, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp0);
-+      __ ld(str0, count_offset, str0);
-+      __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2);
-+    } else {
-+      __ load_heap_oop(str0, value_offset, tmp1);
-+      __ add(tmp1, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp0);
-+      __ ld(tmp1, arrayOopDesc::length_offset_in_bytes(), str0);
-+    }
- 
-     // str1 may be null
-     add_debug_info_for_null_check_here(info);
- 
--    __ load_heap_oop(str1, value_offset, tmp1);
--    __ add(tmp0, tmp2, tmp0);
--
--    __ ld(str1, offset_offset, tmp2);
--    __ add(tmp1, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp1);
--    __ ld(str1, count_offset, str1);
--    __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2);
-+    if (java_lang_String::has_offset_field()) {
-+      int offset_offset = java_lang_String::offset_offset_in_bytes(); // first character position
-+      int  count_offset = java_lang_String:: count_offset_in_bytes();
-+      __ load_heap_oop(str1, value_offset, tmp1);
-+      __ add(tmp0, tmp2, tmp0);
-+
-+      __ ld(str1, offset_offset, tmp2);
-+      __ add(tmp1, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp1);
-+      __ ld(str1, count_offset, str1);
-+      __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2);
-+      __ add(tmp1, tmp2, tmp1);
-+    } else {
-+      __ load_heap_oop(str1, value_offset, tmp2);
-+      __ add(tmp2, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp1);
-+      __ ld(tmp2, arrayOopDesc::length_offset_in_bytes(), str1);
-+    }
-     __ subcc(str0, str1, O7);
--    __ add(tmp1, tmp2, tmp1);
-   }
- 
-   {
-@@ -302,7 +318,7 @@
-     // Shift base0 and base1 to the end of the arrays, negate limit
-     __ add(base0, limit, base0);
-     __ add(base1, limit, base1);
--    __ neg(limit);  // limit = -min{string0.count, strin1.count}
-+    __ neg(limit);  // limit = -min{string0.length(), string1.length()}
- 
-     __ lduh(base0, limit, chr0);
-     __ bind(Lloop);
-diff --git a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
---- openjdk/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
-+++ openjdk/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2012, 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
-@@ -505,19 +505,28 @@
- 
-   // Get addresses of first characters from both Strings
-   __ load_heap_oop(rsi, Address(rax, java_lang_String::value_offset_in_bytes()));
--  __ movptr       (rcx, Address(rax, java_lang_String::offset_offset_in_bytes()));
--  __ lea          (rsi, Address(rsi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
--
-+  if (java_lang_String::has_offset_field()) {
-+    __ movptr     (rcx, Address(rax, java_lang_String::offset_offset_in_bytes()));
-+    __ movl       (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
-+    __ lea        (rsi, Address(rsi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
-+  } else {
-+    __ movl       (rax, Address(rsi, arrayOopDesc::length_offset_in_bytes()));
-+    __ lea        (rsi, Address(rsi, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
-+  }
- 
-   // rbx, may be NULL
-   add_debug_info_for_null_check_here(info);
-   __ load_heap_oop(rdi, Address(rbx, java_lang_String::value_offset_in_bytes()));
--  __ movptr       (rcx, Address(rbx, java_lang_String::offset_offset_in_bytes()));
--  __ lea          (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
-+  if (java_lang_String::has_offset_field()) {
-+    __ movptr     (rcx, Address(rbx, java_lang_String::offset_offset_in_bytes()));
-+    __ movl       (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
-+    __ lea        (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
-+  } else {
-+    __ movl       (rbx, Address(rdi, arrayOopDesc::length_offset_in_bytes()));
-+    __ lea        (rdi, Address(rdi, arrayOopDesc::base_offset_in_bytes(T_CHAR)));
-+  }
- 
-   // compute minimum length (in rax) and difference of lengths (on top of stack)
--  __ movl  (rbx, Address(rbx, java_lang_String::count_offset_in_bytes()));
--  __ movl  (rax, Address(rax, java_lang_String::count_offset_in_bytes()));
-   __ mov   (rcx, rbx);
-   __ subptr(rbx, rax); // subtract lengths
-   __ push  (rbx);      // result
-diff --git a/src/share/vm/classfile/javaClasses.cpp b/src/share/vm/classfile/javaClasses.cpp
---- openjdk/hotspot/src/share/vm/classfile/javaClasses.cpp
-+++ openjdk/hotspot/src/share/vm/classfile/javaClasses.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
-@@ -143,7 +143,27 @@
- }
- 
- 
-+int java_lang_String::value_offset  = 0;
-+int java_lang_String::offset_offset = 0;
-+int java_lang_String::count_offset  = 0;
-+int java_lang_String::hash_offset   = 0;
-+
-+bool java_lang_String::initialized  = false;
-+
-+void java_lang_String::compute_offsets() {
-+  assert(!initialized, "offsets should be initialized only once");
-+
-+  klassOop k = SystemDictionary::String_klass();
-+  compute_offset(value_offset,           k, vmSymbols::value_name(),  vmSymbols::char_array_signature());
-+  compute_optional_offset(offset_offset, k, vmSymbols::offset_name(), vmSymbols::int_signature());
-+  compute_optional_offset(count_offset,  k, vmSymbols::count_name(),  vmSymbols::int_signature());
-+  compute_optional_offset(hash_offset,   k, vmSymbols::hash_name(),   vmSymbols::int_signature());
-+
-+  initialized = true;
-+}
-+
- Handle java_lang_String::basic_create(int length, bool tenured, TRAPS) {
-+  assert(initialized, "Must be initialized");
-   // Create the String object first, so there's a chance that the String
-   // and the char array it points to end up in the same cache line.
-   oop obj;
-@@ -2837,10 +2857,6 @@
- 
- 
- 
--int java_lang_String::value_offset;
--int java_lang_String::offset_offset;
--int java_lang_String::count_offset;
--int java_lang_String::hash_offset;
- int java_lang_Class::_klass_offset;
- int java_lang_Class::_array_klass_offset;
- int java_lang_Class::_resolved_constructor_offset;
-@@ -3000,12 +3016,6 @@
-   const int x = heapOopSize;
-   const int header = instanceOopDesc::base_offset_in_bytes();
- 
--  // Do the String Class
--  java_lang_String::value_offset  = java_lang_String::hc_value_offset  * x + header;
--  java_lang_String::offset_offset = java_lang_String::hc_offset_offset * x + header;
--  java_lang_String::count_offset  = java_lang_String::offset_offset + sizeof (jint);
--  java_lang_String::hash_offset   = java_lang_String::count_offset + sizeof (jint);
--
-   // Throwable Class
-   java_lang_Throwable::backtrace_offset  = java_lang_Throwable::hc_backtrace_offset  * x + header;
-   java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header;
-@@ -3200,9 +3210,13 @@
-   // java.lang.String
- 
-   CHECK_OFFSET("java/lang/String", java_lang_String, value, "[C");
--  CHECK_OFFSET("java/lang/String", java_lang_String, offset, "I");
--  CHECK_OFFSET("java/lang/String", java_lang_String, count, "I");
--  CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I");
-+  if (java_lang_String::has_offset_field()) {
-+    CHECK_OFFSET("java/lang/String", java_lang_String, offset, "I");
-+    CHECK_OFFSET("java/lang/String", java_lang_String, count, "I");
-+  }
-+  if (java_lang_String::has_hash_field()) {
-+    CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I");
-+  }
- 
-   // java.lang.Class
- 
-diff --git a/src/share/vm/classfile/javaClasses.hpp b/src/share/vm/classfile/javaClasses.hpp
---- openjdk/hotspot/src/share/vm/classfile/javaClasses.hpp
-+++ openjdk/hotspot/src/share/vm/classfile/javaClasses.hpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
-@@ -52,26 +52,36 @@
- 
- class java_lang_String : AllStatic {
-  private:
--  enum {
--    hc_value_offset  = 0,
--    hc_offset_offset = 1
--    //hc_count_offset = 2  -- not a word-scaled offset
--    //hc_hash_offset  = 3  -- not a word-scaled offset
--  };
--
-   static int value_offset;
-   static int offset_offset;
-   static int count_offset;
-   static int hash_offset;
- 
-+  static bool initialized;
-+
-   static Handle basic_create(int length, bool tenured, TRAPS);
-   static Handle basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS);
- 
--  static void set_value( oop string, typeArrayOop buffer) { string->obj_field_put(value_offset,  (oop)buffer); }
--  static void set_offset(oop string, int offset)          { string->int_field_put(offset_offset, offset); }
--  static void set_count( oop string, int count)           { string->int_field_put(count_offset,  count);  }
-+  static void set_value( oop string, typeArrayOop buffer) {
-+    assert(initialized, "Must be initialized");
-+    string->obj_field_put(value_offset,  (oop)buffer);
-+  }
-+  static void set_offset(oop string, int offset) {
-+    assert(initialized, "Must be initialized");
-+    if (offset_offset > 0) {
-+      string->int_field_put(offset_offset, offset);
-+    }
-+  }
-+  static void set_count( oop string, int count) {
-+    assert(initialized, "Must be initialized");
-+    if (count_offset > 0) {
-+      string->int_field_put(count_offset,  count);
-+    }
-+  }
- 
-  public:
-+  static void compute_offsets();
-+
-   // Instance creation
-   static Handle create_from_unicode(jchar* unicode, int len, TRAPS);
-   static Handle create_tenured_from_unicode(jchar* unicode, int len, TRAPS);
-@@ -82,23 +92,61 @@
-   static Handle create_from_platform_dependent_str(const char* str, TRAPS);
-   static Handle char_converter(Handle java_string, jchar from_char, jchar to_char, TRAPS);
- 
--  static int value_offset_in_bytes()  { return value_offset;  }
--  static int count_offset_in_bytes()  { return count_offset;  }
--  static int offset_offset_in_bytes() { return offset_offset; }
--  static int hash_offset_in_bytes()   { return hash_offset;   }
-+  static bool has_offset_field()  {
-+    assert(initialized, "Must be initialized");
-+    return (offset_offset > 0);
-+  }
-+
-+  static bool has_count_field()  {
-+    assert(initialized, "Must be initialized");
-+    return (count_offset > 0);
-+  }
-+
-+  static bool has_hash_field()  {
-+    assert(initialized, "Must be initialized");
-+    return (hash_offset > 0);
-+  }
-+
-+  static int value_offset_in_bytes()  {
-+    assert(initialized && (value_offset > 0), "Must be initialized");
-+    return value_offset;
-+  }
-+  static int count_offset_in_bytes()  {
-+    assert(initialized && (count_offset > 0), "Must be initialized");
-+    return count_offset;
-+  }
-+  static int offset_offset_in_bytes() {
-+    assert(initialized && (offset_offset > 0), "Must be initialized");
-+    return offset_offset;
-+  }
-+  static int hash_offset_in_bytes()   {
-+    assert(initialized && (hash_offset > 0), "Must be initialized");
-+    return hash_offset;
-+  }
- 
-   // Accessors
-   static typeArrayOop value(oop java_string) {
-+    assert(initialized && (value_offset > 0), "Must be initialized");
-     assert(is_instance(java_string), "must be java_string");
-     return (typeArrayOop) java_string->obj_field(value_offset);
-   }
-   static int offset(oop java_string) {
-+    assert(initialized, "Must be initialized");
-     assert(is_instance(java_string), "must be java_string");
--    return java_string->int_field(offset_offset);
-+    if (offset_offset > 0) {
-+      return java_string->int_field(offset_offset);
-+    } else {
-+      return 0;
-+    }
-   }
-   static int length(oop java_string) {
-+    assert(initialized, "Must be initialized");
-     assert(is_instance(java_string), "must be java_string");
--    return java_string->int_field(count_offset);
-+    if (count_offset > 0) {
-+      return java_string->int_field(count_offset);
-+    } else {
-+      return ((typeArrayOop)java_string->obj_field(value_offset))->length();
-+    }
-   }
-   static int utf8_length(oop java_string);
- 
-diff --git a/src/share/vm/classfile/systemDictionary.cpp b/src/share/vm/classfile/systemDictionary.cpp
---- openjdk/hotspot/src/share/vm/classfile/systemDictionary.cpp
-+++ openjdk/hotspot/src/share/vm/classfile/systemDictionary.cpp
-@@ -1971,6 +1971,9 @@
-   // first do Object, String, Class
-   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK);
- 
-+  // Calculate offsets for String and Class classes since they are loaded and
-+  // can be used after this point.
-+  java_lang_String::compute_offsets();
-   java_lang_Class::compute_offsets();
- 
-   // Fixup mirrors for classes loaded before java.lang.Class.
-diff --git a/src/share/vm/classfile/vmSymbols.hpp b/src/share/vm/classfile/vmSymbols.hpp
---- openjdk/hotspot/src/share/vm/classfile/vmSymbols.hpp
-+++ openjdk/hotspot/src/share/vm/classfile/vmSymbols.hpp
-@@ -339,6 +339,9 @@
-   template(park_event_name,                           "nativeParkEventPointer")                   \
-   template(cache_field_name,                          "cache")                                    \
-   template(value_name,                                "value")                                    \
-+  template(offset_name,                               "offset")                                   \
-+  template(count_name,                                "count")                                    \
-+  template(hash_name,                                 "hash")                                     \
-   template(frontCacheEnabled_name,                    "frontCacheEnabled")                        \
-   template(stringCacheEnabled_name,                   "stringCacheEnabled")                       \
-   template(numberOfLeadingZeros_name,                 "numberOfLeadingZeros")                     \
-diff --git a/src/share/vm/memory/dump.cpp b/src/share/vm/memory/dump.cpp
---- openjdk/hotspot/src/share/vm/memory/dump.cpp
-+++ openjdk/hotspot/src/share/vm/memory/dump.cpp
-@@ -78,8 +78,8 @@
-   void do_oop(oop* p) {
-     if (p != NULL) {
-       oop obj = *p;
--      if (obj->klass() == SystemDictionary::String_klass()) {
--
-+      if (obj->klass() == SystemDictionary::String_klass() &&
-+          java_lang_String::has_hash_field()) {
-         int hash = java_lang_String::hash_string(obj);
-         obj->int_field_put(hash_offset, hash);
-       }
-diff --git a/src/share/vm/opto/graphKit.cpp b/src/share/vm/opto/graphKit.cpp
---- openjdk/hotspot/src/share/vm/opto/graphKit.cpp
-+++ openjdk/hotspot/src/share/vm/opto/graphKit.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2012, 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
-@@ -3748,3 +3748,81 @@
-   final_sync(ideal);
- }
- #undef __
-+
-+
-+
-+Node* GraphKit::load_String_offset(Node* ctrl, Node* str) {
-+  if (java_lang_String::has_offset_field()) {
-+    int offset_offset = java_lang_String::offset_offset_in_bytes();
-+    const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
-+                                                       false, NULL, 0);
-+    const TypePtr* offset_field_type = string_type->add_offset(offset_offset);
-+    int offset_field_idx = C->get_alias_index(offset_field_type);
-+    return make_load(ctrl,
-+                     basic_plus_adr(str, str, offset_offset),
-+                     TypeInt::INT, T_INT, offset_field_idx);
-+  } else {
-+    return intcon(0);
-+  }
-+}
-+
-+Node* GraphKit::load_String_length(Node* ctrl, Node* str) {
-+  if (java_lang_String::has_count_field()) {
-+    int count_offset = java_lang_String::count_offset_in_bytes();
-+    const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
-+                                                       false, NULL, 0);
-+    const TypePtr* count_field_type = string_type->add_offset(count_offset);
-+    int count_field_idx = C->get_alias_index(count_field_type);
-+    return make_load(ctrl,
-+                     basic_plus_adr(str, str, count_offset),
-+                     TypeInt::INT, T_INT, count_field_idx);
-+  } else {
-+    return load_array_length(load_String_value(ctrl, str));
-+  }
-+}
-+
-+Node* GraphKit::load_String_value(Node* ctrl, Node* str) {
-+  int value_offset = java_lang_String::value_offset_in_bytes();
-+  const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
-+                                                     false, NULL, 0);
-+  const TypePtr* value_field_type = string_type->add_offset(value_offset);
-+  const TypeAryPtr*  value_type = TypeAryPtr::make(TypePtr::NotNull,
-+                                                   TypeAry::make(TypeInt::CHAR,TypeInt::POS),
-+                                                   ciTypeArrayKlass::make(T_CHAR), true, 0);
-+  int value_field_idx = C->get_alias_index(value_field_type);
-+  return make_load(ctrl, basic_plus_adr(str, str, value_offset),
-+                   value_type, T_OBJECT, value_field_idx);
-+}
-+
-+void GraphKit::store_String_offset(Node* ctrl, Node* str, Node* value) {
-+  int offset_offset = java_lang_String::offset_offset_in_bytes();
-+  const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
-+                                                     false, NULL, 0);
-+  const TypePtr* offset_field_type = string_type->add_offset(offset_offset);
-+  int offset_field_idx = C->get_alias_index(offset_field_type);
-+  store_to_memory(ctrl, basic_plus_adr(str, offset_offset),
-+                  value, T_INT, offset_field_idx);
-+}
-+
-+void GraphKit::store_String_value(Node* ctrl, Node* str, Node* value) {
-+  int value_offset = java_lang_String::value_offset_in_bytes();
-+  const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
-+                                                     false, NULL, 0);
-+  const TypePtr* value_field_type = string_type->add_offset(value_offset);
-+  const TypeAryPtr*  value_type = TypeAryPtr::make(TypePtr::NotNull,
-+                                                   TypeAry::make(TypeInt::CHAR,TypeInt::POS),
-+                                                   ciTypeArrayKlass::make(T_CHAR), true, 0);
-+  int value_field_idx = C->get_alias_index(value_field_type);
-+  store_to_memory(ctrl, basic_plus_adr(str, value_offset),
-+                  value, T_OBJECT, value_field_idx);
-+}
-+
-+void GraphKit::store_String_length(Node* ctrl, Node* str, Node* value) {
-+  int count_offset = java_lang_String::count_offset_in_bytes();
-+  const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
-+                                                     false, NULL, 0);
-+  const TypePtr* count_field_type = string_type->add_offset(count_offset);
-+  int count_field_idx = C->get_alias_index(count_field_type);
-+  store_to_memory(ctrl, basic_plus_adr(str, count_offset),
-+                  value, T_INT, count_field_idx);
-+}
-diff --git a/src/share/vm/opto/graphKit.hpp b/src/share/vm/opto/graphKit.hpp
---- openjdk/hotspot/src/share/vm/opto/graphKit.hpp
-+++ openjdk/hotspot/src/share/vm/opto/graphKit.hpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2012, 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
-@@ -781,6 +781,14 @@
-   Node* new_array(Node* klass_node, Node* count_val, int nargs,
-                   Node* *return_size_val = NULL);
- 
-+  // java.lang.String helpers
-+  Node* load_String_offset(Node* ctrl, Node* str);
-+  Node* load_String_length(Node* ctrl, Node* str);
-+  Node* load_String_value(Node* ctrl, Node* str);
-+  void store_String_offset(Node* ctrl, Node* str, Node* value);
-+  void store_String_length(Node* ctrl, Node* str, Node* value);
-+  void store_String_value(Node* ctrl, Node* str, Node* value);
-+
-   // Handy for making control flow
-   IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) {
-     IfNode* iff = new (C, 2) IfNode(ctrl, tst, prob, cnt);// New IfNode's
-diff --git a/src/share/vm/opto/library_call.cpp b/src/share/vm/opto/library_call.cpp
---- openjdk/hotspot/src/share/vm/opto/library_call.cpp
-+++ openjdk/hotspot/src/share/vm/opto/library_call.cpp
-@@ -147,7 +147,8 @@
-     return generate_method_call(method_id, true, false);
-   }
- 
--  Node* make_string_method_node(int opcode, Node* str1, Node* cnt1, Node* str2, Node* cnt2);
-+  Node* make_string_method_node(int opcode, Node* str1_start, Node* cnt1, Node* str2_start, Node* cnt2);
-+  Node* make_string_method_node(int opcode, Node* str1, Node* str2);
-   bool inline_string_compareTo();
-   bool inline_string_indexOf();
-   Node* string_indexOf(Node* string_object, ciTypeArray* target_array, jint offset, jint cache_i, jint md2_i);
-@@ -844,48 +845,45 @@
- 
- 
- //------------------------------make_string_method_node------------------------
--// Helper method for String intrinsic finctions.
--Node* LibraryCallKit::make_string_method_node(int opcode, Node* str1, Node* cnt1, Node* str2, Node* cnt2) {
--  const int value_offset  = java_lang_String::value_offset_in_bytes();
--  const int count_offset  = java_lang_String::count_offset_in_bytes();
--  const int offset_offset = java_lang_String::offset_offset_in_bytes();
--
-+// Helper method for String intrinsic functions. This version is called
-+// with str1 and str2 pointing to String object nodes.
-+//
-+Node* LibraryCallKit::make_string_method_node(int opcode, Node* str1, Node* str2) {
-   Node* no_ctrl = NULL;
- 
--  ciInstanceKlass* klass = env()->String_klass();
--  const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
--
--  const TypeAryPtr* value_type =
--        TypeAryPtr::make(TypePtr::NotNull,
--                         TypeAry::make(TypeInt::CHAR,TypeInt::POS),
--                         ciTypeArrayKlass::make(T_CHAR), true, 0);
--
--  // Get start addr of string and substring
--  Node* str1_valuea  = basic_plus_adr(str1, str1, value_offset);
--  Node* str1_value   = make_load(no_ctrl, str1_valuea, value_type, T_OBJECT, string_type->add_offset(value_offset));
--  Node* str1_offseta = basic_plus_adr(str1, str1, offset_offset);
--  Node* str1_offset  = make_load(no_ctrl, str1_offseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset));
-+  // Get start addr of string
-+  Node* str1_value   = load_String_value(no_ctrl, str1);
-+  Node* str1_offset  = load_String_offset(no_ctrl, str1);
-   Node* str1_start   = array_element_address(str1_value, str1_offset, T_CHAR);
- 
--  Node* str2_valuea  = basic_plus_adr(str2, str2, value_offset);
--  Node* str2_value   = make_load(no_ctrl, str2_valuea, value_type, T_OBJECT, string_type->add_offset(value_offset));
--  Node* str2_offseta = basic_plus_adr(str2, str2, offset_offset);
--  Node* str2_offset  = make_load(no_ctrl, str2_offseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset));
-+  // Get length of string 1
-+  Node* str1_len  = load_String_length(no_ctrl, str1);
-+
-+  Node* str2_value   = load_String_value(no_ctrl, str2);
-+  Node* str2_offset  = load_String_offset(no_ctrl, str2);
-   Node* str2_start   = array_element_address(str2_value, str2_offset, T_CHAR);
- 
-+  Node* str2_len = NULL;
-   Node* result = NULL;
-+
-   switch (opcode) {
-   case Op_StrIndexOf:
-+    // Get length of string 2
-+    str2_len = load_String_length(no_ctrl, str2);
-+
-     result = new (C, 6) StrIndexOfNode(control(), memory(TypeAryPtr::CHARS),
--                                       str1_start, cnt1, str2_start, cnt2);
-+                                 str1_start, str1_len, str2_start, str2_len);
-     break;
-   case Op_StrComp:
-+    // Get length of string 2
-+    str2_len = load_String_length(no_ctrl, str2);
-+
-     result = new (C, 6) StrCompNode(control(), memory(TypeAryPtr::CHARS),
--                                    str1_start, cnt1, str2_start, cnt2);
-+                                 str1_start, str1_len, str2_start, str2_len);
-     break;
-   case Op_StrEquals:
-     result = new (C, 5) StrEqualsNode(control(), memory(TypeAryPtr::CHARS),
--                                      str1_start, str2_start, cnt1);
-+                               str1_start, str2_start, str1_len);
-     break;
-   default:
-     ShouldNotReachHere();
-@@ -898,15 +896,42 @@
-   return _gvn.transform(result);
- }
- 
-+// Helper method for String intrinsic functions. This version is called
-+// with str1 and str2 pointing to char[] nodes, with cnt1 and cnt2 pointing
-+// to Int nodes containing the lenghts of str1 and str2.
-+//
-+Node* LibraryCallKit::make_string_method_node(int opcode, Node* str1_start, Node* cnt1, Node* str2_start, Node* cnt2) {
-+
-+  Node* result = NULL;
-+  switch (opcode) {
-+  case Op_StrIndexOf:
-+    result = new (C, 6) StrIndexOfNode(control(), memory(TypeAryPtr::CHARS),
-+                                 str1_start, cnt1, str2_start, cnt2);
-+    break;
-+  case Op_StrComp:
-+    result = new (C, 6) StrCompNode(control(), memory(TypeAryPtr::CHARS),
-+                                 str1_start, cnt1, str2_start, cnt2);
-+    break;
-+  case Op_StrEquals:
-+    result = new (C, 5) StrEqualsNode(control(), memory(TypeAryPtr::CHARS),
-+                                 str1_start, str2_start, cnt1);
-+    break;
-+  default:
-+    ShouldNotReachHere();
-+    return NULL;
-+  }
-+
-+  // All these intrinsics have checks.
-+  C->set_has_split_ifs(true); // Has chance for split-if optimization
-+
-+  return _gvn.transform(result);
-+}
-+
- //------------------------------inline_string_compareTo------------------------
- bool LibraryCallKit::inline_string_compareTo() {
- 
-   if (!Matcher::has_match_rule(Op_StrComp)) return false;
- 
--  const int value_offset = java_lang_String::value_offset_in_bytes();
--  const int count_offset = java_lang_String::count_offset_in_bytes();
--  const int offset_offset = java_lang_String::offset_offset_in_bytes();
--
-   _sp += 2;
-   Node *argument = pop();  // pop non-receiver first:  it was pushed second
-   Node *receiver = pop();
-@@ -923,18 +948,7 @@
-     return true;
-   }
- 
--  ciInstanceKlass* klass = env()->String_klass();
--  const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
--  Node* no_ctrl = NULL;
--
--  // Get counts for string and argument
--  Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset);
--  Node* receiver_cnt  = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
--
--  Node* argument_cnta = basic_plus_adr(argument, argument, count_offset);
--  Node* argument_cnt  = make_load(no_ctrl, argument_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
--
--  Node* compare = make_string_method_node(Op_StrComp, receiver, receiver_cnt, argument, argument_cnt);
-+  Node* compare = make_string_method_node(Op_StrComp, receiver, argument);
-   push(compare);
-   return true;
- }
-@@ -944,10 +958,6 @@
- 
-   if (!Matcher::has_match_rule(Op_StrEquals)) return false;
- 
--  const int value_offset = java_lang_String::value_offset_in_bytes();
--  const int count_offset = java_lang_String::count_offset_in_bytes();
--  const int offset_offset = java_lang_String::offset_offset_in_bytes();
--
-   int nargs = 2;
-   _sp += nargs;
-   Node* argument = pop();  // pop non-receiver first:  it was pushed second
-@@ -1001,24 +1011,31 @@
-     }
-   }
- 
--  const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
--
--  Node* no_ctrl = NULL;
--  Node* receiver_cnt;
--  Node* argument_cnt;
--
-   if (!stopped()) {
-+    const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
-+
-     // Properly cast the argument to String
-     argument = _gvn.transform(new (C, 2) CheckCastPPNode(control(), argument, string_type));
-     // This path is taken only when argument's type is String:NotNull.
-     argument = cast_not_null(argument, false);
- 
--    // Get counts for string and argument
--    Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset);
--    receiver_cnt  = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
--
--    Node* argument_cnta = basic_plus_adr(argument, argument, count_offset);
--    argument_cnt  = make_load(no_ctrl, argument_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
-+    Node* no_ctrl = NULL;
-+
-+    // Get start addr of receiver
-+    Node* receiver_val    = load_String_value(no_ctrl, receiver);
-+    Node* receiver_offset = load_String_offset(no_ctrl, receiver);
-+    Node* receiver_start = array_element_address(receiver_val, receiver_offset, T_CHAR);
-+
-+    // Get length of receiver
-+    Node* receiver_cnt  = load_String_length(no_ctrl, receiver);
-+
-+    // Get start addr of argument
-+    Node* argument_val   = load_String_value(no_ctrl, argument);
-+    Node* argument_offset = load_String_offset(no_ctrl, argument);
-+    Node* argument_start = array_element_address(argument_val, argument_offset, T_CHAR);
-+
-+    // Get length of argument
-+    Node* argument_cnt  = load_String_length(no_ctrl, argument);
- 
-     // Check for receiver count != argument count
-     Node* cmp = _gvn.transform( new(C, 3) CmpINode(receiver_cnt, argument_cnt) );
-@@ -1028,14 +1045,14 @@
-       phi->init_req(4, intcon(0));
-       region->init_req(4, if_ne);
-     }
--  }
--
--  // Check for count == 0 is done by mach node StrEquals.
--
--  if (!stopped()) {
--    Node* equals = make_string_method_node(Op_StrEquals, receiver, receiver_cnt, argument, argument_cnt);
--    phi->init_req(1, equals);
--    region->init_req(1, control());
-+
-+    // Check for count == 0 is done by assembler code for StrEquals.
-+
-+    if (!stopped()) {
-+      Node* equals = make_string_method_node(Op_StrEquals, receiver_start, receiver_cnt, argument_start, argument_cnt);
-+      phi->init_req(1, equals);
-+      region->init_req(1, control());
-+    }
-   }
- 
-   // post merge
-@@ -1133,20 +1150,9 @@
- 
-   const int nargs = 2; // number of arguments to push back for uncommon trap in predicate
- 
--  const int value_offset  = java_lang_String::value_offset_in_bytes();
--  const int count_offset  = java_lang_String::count_offset_in_bytes();
--  const int offset_offset = java_lang_String::offset_offset_in_bytes();
--
--  ciInstanceKlass* klass = env()->String_klass();
--  const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
--  const TypeAryPtr*  source_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::CHAR,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR), true, 0);
--
--  Node* sourceOffseta = basic_plus_adr(string_object, string_object, offset_offset);
--  Node* sourceOffset  = make_load(no_ctrl, sourceOffseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset));
--  Node* sourceCounta  = basic_plus_adr(string_object, string_object, count_offset);
--  Node* sourceCount   = make_load(no_ctrl, sourceCounta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
--  Node* sourcea       = basic_plus_adr(string_object, string_object, value_offset);
--  Node* source        = make_load(no_ctrl, sourcea, source_type, T_OBJECT, string_type->add_offset(value_offset));
-+  Node* source        = load_String_value(no_ctrl, string_object);
-+  Node* sourceOffset  = load_String_offset(no_ctrl, string_object);
-+  Node* sourceCount   = load_String_length(no_ctrl, string_object);
- 
-   Node* target = _gvn.transform( makecon(TypeOopPtr::make_from_constant(target_array, true)) );
-   jint target_length = target_array->length();
-@@ -1214,10 +1220,6 @@
- //------------------------------inline_string_indexOf------------------------
- bool LibraryCallKit::inline_string_indexOf() {
- 
--  const int value_offset  = java_lang_String::value_offset_in_bytes();
--  const int count_offset  = java_lang_String::count_offset_in_bytes();
--  const int offset_offset = java_lang_String::offset_offset_in_bytes();
--
-   _sp += 2;
-   Node *argument = pop();  // pop non-receiver first:  it was pushed second
-   Node *receiver = pop();
-@@ -1251,12 +1253,21 @@
-     Node*       result_phi = new (C, 4) PhiNode(result_rgn, TypeInt::INT);
-     Node* no_ctrl  = NULL;
- 
--    // Get counts for string and substr
--    Node* source_cnta = basic_plus_adr(receiver, receiver, count_offset);
--    Node* source_cnt  = make_load(no_ctrl, source_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
--
--    Node* substr_cnta = basic_plus_adr(argument, argument, count_offset);
--    Node* substr_cnt  = make_load(no_ctrl, substr_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
-+    // Get start addr of source string
-+    Node* source = load_String_value(no_ctrl, receiver);
-+    Node* source_offset = load_String_offset(no_ctrl, receiver);
-+    Node* source_start = array_element_address(source, source_offset, T_CHAR);
-+
-+    // Get length of source string
-+    Node* source_cnt  = load_String_length(no_ctrl, receiver);
-+
-+    // Get start addr of substring
-+    Node* substr = load_String_value(no_ctrl, argument);
-+    Node* substr_offset = load_String_offset(no_ctrl, argument);
-+    Node* substr_start = array_element_address(substr, substr_offset, T_CHAR);
-+
-+    // Get length of source string
-+    Node* substr_cnt  = load_String_length(no_ctrl, argument);
- 
-     // Check for substr count > string count
-     Node* cmp = _gvn.transform( new(C, 3) CmpINode(substr_cnt, source_cnt) );
-@@ -1279,7 +1290,7 @@
-     }
- 
-     if (!stopped()) {
--      result = make_string_method_node(Op_StrIndexOf, receiver, source_cnt, argument, substr_cnt);
-+      result = make_string_method_node(Op_StrIndexOf, source_start, source_cnt, substr_start, substr_cnt);
-       result_phi->init_req(1, result);
-       result_rgn->init_req(1, control());
-     }
-@@ -1304,11 +1315,19 @@
-     ciInstance* str = str_const->as_instance();
-     assert(str != NULL, "must be instance");
- 
--    ciObject* v = str->field_value_by_offset(value_offset).as_object();
--    int       o = str->field_value_by_offset(offset_offset).as_int();
--    int       c = str->field_value_by_offset(count_offset).as_int();
-+    ciObject* v = str->field_value_by_offset(java_lang_String::value_offset_in_bytes()).as_object();
-     ciTypeArray* pat = v->as_type_array(); // pattern (argument) character array
- 
-+    int o;
-+    int c;
-+    if (java_lang_String::has_offset_field()) {
-+      o = str->field_value_by_offset(java_lang_String::offset_offset_in_bytes()).as_int();
-+      c = str->field_value_by_offset(java_lang_String::count_offset_in_bytes()).as_int();
-+    } else {
-+      o = 0;
-+      c = pat->length();
-+    }
-+
-     // constant strings have no offset and count == length which
-     // simplifies the resulting code somewhat so lets optimize for that.
-     if (o != 0 || c != pat->length()) {
-diff --git a/src/share/vm/opto/stringopts.cpp b/src/share/vm/opto/stringopts.cpp
---- openjdk/hotspot/src/share/vm/opto/stringopts.cpp
-+++ openjdk/hotspot/src/share/vm/opto/stringopts.cpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2009, 2012, 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
-@@ -528,16 +528,6 @@
-   }
- 
-   // Collect the types needed to talk about the various slices of memory
--  const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
--                                                     false, NULL, 0);
--
--  const TypePtr* value_field_type = string_type->add_offset(java_lang_String::value_offset_in_bytes());
--  const TypePtr* offset_field_type = string_type->add_offset(java_lang_String::offset_offset_in_bytes());
--  const TypePtr* count_field_type = string_type->add_offset(java_lang_String::count_offset_in_bytes());
--
--  value_field_idx = C->get_alias_index(value_field_type);
--  count_field_idx = C->get_alias_index(count_field_type);
--  offset_field_idx = C->get_alias_index(offset_field_type);
-   char_adr_idx = C->get_alias_index(TypeAryPtr::CHARS);
- 
-   // For each locally allocated StringBuffer see if the usages can be
-@@ -1173,18 +1163,9 @@
- 
- Node* PhaseStringOpts::copy_string(GraphKit& kit, Node* str, Node* char_array, Node* start) {
-   Node* string = str;
--  Node* offset = kit.make_load(kit.control(),
--                               kit.basic_plus_adr(string, string, java_lang_String::offset_offset_in_bytes()),
--                               TypeInt::INT, T_INT, offset_field_idx);
--  Node* count = kit.make_load(kit.control(),
--                              kit.basic_plus_adr(string, string, java_lang_String::count_offset_in_bytes()),
--                              TypeInt::INT, T_INT, count_field_idx);
--  const TypeAryPtr*  value_type = TypeAryPtr::make(TypePtr::NotNull,
--                                                   TypeAry::make(TypeInt::CHAR,TypeInt::POS),
--                                                   ciTypeArrayKlass::make(T_CHAR), true, 0);
--  Node* value = kit.make_load(kit.control(),
--                              kit.basic_plus_adr(string, string, java_lang_String::value_offset_in_bytes()),
--                              value_type, T_OBJECT, value_field_idx);
-+  Node* offset = kit.load_String_offset(kit.control(), string);
-+  Node* count  = kit.load_String_length(kit.control(), string);
-+  Node* value  = kit.load_String_value (kit.control(), string);
- 
-   // copy the contents
-   if (offset->is_Con() && count->is_Con() && value->is_Con() && count->get_int() < unroll_string_copy_length) {
-@@ -1341,10 +1322,9 @@
-           arg = phi;
-           sc->set_argument(argi, arg);
-         }
--        //         Node* offset = kit.make_load(NULL, kit.basic_plus_adr(arg, arg, offset_offset),
--        //                                      TypeInt::INT, T_INT, offset_field_idx);
--        Node* count = kit.make_load(kit.control(), kit.basic_plus_adr(arg, arg, java_lang_String::count_offset_in_bytes()),
--                                    TypeInt::INT, T_INT, count_field_idx);
-+
-+        Node* count = kit.load_String_length(kit.control(), arg);
-+
-         length = __ AddI(length, count);
-         string_sizes->init_req(argi, NULL);
-         break;
-@@ -1435,12 +1415,11 @@
-   }
- 
-   // Intialize the string
--  kit.store_to_memory(kit.control(), kit.basic_plus_adr(result, java_lang_String::offset_offset_in_bytes()),
--                      __ intcon(0), T_INT, offset_field_idx);
--  kit.store_to_memory(kit.control(), kit.basic_plus_adr(result, java_lang_String::count_offset_in_bytes()),
--                      length, T_INT, count_field_idx);
--  kit.store_to_memory(kit.control(), kit.basic_plus_adr(result, java_lang_String::value_offset_in_bytes()),
--                      char_array, T_OBJECT, value_field_idx);
-+  if (java_lang_String::has_offset_field()) {
-+    kit.store_String_offset(kit.control(), result, __ intcon(0));
-+    kit.store_String_length(kit.control(), result, length);
-+  }
-+  kit.store_String_value(kit.control(), result, char_array);
- 
-   // hook up the outgoing control and result
-   kit.replace_call(sc->end(), result);
-diff --git a/src/share/vm/opto/stringopts.hpp b/src/share/vm/opto/stringopts.hpp
---- openjdk/hotspot/src/share/vm/opto/stringopts.hpp
-+++ openjdk/hotspot/src/share/vm/opto/stringopts.hpp
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2009, 2012, 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
-@@ -41,9 +41,6 @@
- 
-   // Memory slices needed for code gen
-   int char_adr_idx;
--  int value_field_idx;
--  int count_field_idx;
--  int offset_field_idx;
- 
-   // Integer.sizeTable - used for int to String conversion
-   ciField* size_table_field;