changeset 2601:04d2a30a17cf

Include latest security patches. 2013-06-27 Andrew John Hughes <gnu.andrew@member.fsf.org> * Makefile.am, (HOTSPOT_CHANGESET): Update to IcedTea7 2.2.9 tag, bringing in latest security patches. (CORBA_CHANGESET): Likewise. (JAXP_CHANGESET): Likewise. (JAXWS_CHANGESET): Likewise. (JDK_CHANGESET): Likewise. (LANGTOOLS_CHANGESET): Likewise. (OPENJDK_CHANGESET): Likewise. (HOTSPOT_SHA256SUM): Likewise. (CORBA_SHA256SUM): Likewise. (JAXP_SHA256SUM): Likewise. (JAXWS_SHA256SUM): Likewise. (JDK_SHA256SUM): Likewise. (LANGTOOLS_SHA256SUM): Likewise. (OPENJDK_SHA256SUM): Likewise. * patches/boot/ecj-diamond.patch, * patches/boot/ecj-multicatch.patch: Add new cases. * patches/boot/ecj-stringswitch.patch: Update MethodHandleNatives patch, including adding new case. * patches/boot/tobin.patch: Update following move from sun.awt.X11 to sun.awt.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Fri, 28 Jun 2013 02:33:43 +0100
parents 2f50c50bc1d0
children ad1e410826c5
files ChangeLog Makefile.am patches/boot/ecj-diamond.patch patches/boot/ecj-multicatch.patch patches/boot/ecj-stringswitch.patch patches/boot/tobin.patch
diffstat 6 files changed, 286 insertions(+), 131 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed May 01 00:04:40 2013 +0100
+++ b/ChangeLog	Fri Jun 28 02:33:43 2013 +0100
@@ -1,3 +1,31 @@
+2013-06-27  Andrew John Hughes  <gnu.andrew@member.fsf.org>
+
+	* Makefile.am,
+	(HOTSPOT_CHANGESET): Update to IcedTea7 2.2.9 tag,
+	bringing in latest security patches.
+	(CORBA_CHANGESET): Likewise.
+	(JAXP_CHANGESET): Likewise.
+	(JAXWS_CHANGESET): Likewise.
+	(JDK_CHANGESET): Likewise.
+	(LANGTOOLS_CHANGESET): Likewise.
+	(OPENJDK_CHANGESET): Likewise.
+	(HOTSPOT_SHA256SUM): Likewise.
+	(CORBA_SHA256SUM): Likewise.
+	(JAXP_SHA256SUM): Likewise.
+	(JAXWS_SHA256SUM): Likewise.
+	(JDK_SHA256SUM): Likewise.
+	(LANGTOOLS_SHA256SUM): Likewise.
+	(OPENJDK_SHA256SUM): Likewise.
+	* patches/boot/ecj-diamond.patch,
+	* patches/boot/ecj-multicatch.patch:
+	Add new cases.
+	* patches/boot/ecj-stringswitch.patch:
+	Update MethodHandleNatives patch, including
+	adding new case.
+	* patches/boot/tobin.patch:
+	Update following move from sun.awt.X11
+	to sun.awt.
+
 2013-05-01  Andrew John Hughes  <gnu.andrew@member.fsf.org>
 
 	* configure.ac: Bump to 2.2.9pre.
--- a/Makefile.am	Wed May 01 00:04:40 2013 +0100
+++ b/Makefile.am	Fri Jun 28 02:33:43 2013 +0100
@@ -4,21 +4,21 @@
 JDK_UPDATE_VERSION = 05
 COMBINED_VERSION = $(JDK_UPDATE_VERSION)-$(OPENJDK_VERSION)
 
-HOTSPOT_CHANGESET = 168d05b42b89
-CORBA_CHANGESET = 529355376925
-JAXP_CHANGESET = 839055d03a54
-JAXWS_CHANGESET = c7ac0744f92f
-JDK_CHANGESET = 1a455d17b871
-LANGTOOLS_CHANGESET = ae5ba074188d
-OPENJDK_CHANGESET = 1a406488fe33
+HOTSPOT_CHANGESET = 89a7d38e2e31
+CORBA_CHANGESET = 4fdf74f61b48
+JAXP_CHANGESET = 5ce90e84aa21
+JAXWS_CHANGESET = 5942fdde2af6
+JDK_CHANGESET = 25f39684638a
+LANGTOOLS_CHANGESET = 1c14c3a8ea14
+OPENJDK_CHANGESET = 0cc24300e6de
 
-HOTSPOT_SHA256SUM = 873651a61cffe2e37f16bf6e6558e2d72fd7a9a50319fd83e3854710ba9eea65
-CORBA_SHA256SUM = b4f0eca0f37b581ace14f24b5aea2db99321e027c4bc2a044b9c796d45804a07
-JAXP_SHA256SUM = cb1007e7c9bdfc1a12d85dbc31adc2fb33ef4f6e0e36efda95ad3ba80556289b
-JAXWS_SHA256SUM = b12a65e8793065da0f4243f2b1029e9e1c6c15611612aeb5d8c45f1e58a91875
-JDK_SHA256SUM = 829ed69c856e7eb344a15f3f3d06166bc6627a6eb5ceec0ccef6ae742ec3d9e6
-LANGTOOLS_SHA256SUM = 8193a0309874143e10e8002d8c5fcf10aefc012af74d8a3bb4416611dfe9fb7f
-OPENJDK_SHA256SUM = 196845c4edcf0d82ed72661b381c83f2d0e6e0d4b8952e002decd3483280388e
+HOTSPOT_SHA256SUM = 895802e8e5d3661ef9ed7f8530a595c899f056faf73b4cfa7d603777ba8f28f0
+CORBA_SHA256SUM = 01da9cb128138afa48f9d17e800f90d1fea54db876551fe10145f4aaac01b0b3
+JAXP_SHA256SUM = 479516db3d57f1cf6ec67c26229fb70f59499a6794b90cbabb4c47d930d13229
+JAXWS_SHA256SUM = 535c443eb71aead164a9e790f368c8424a51190d25027847820a6705bee3ff72
+JDK_SHA256SUM = 858fa92c115de0aa917622d2e173604f53c3c8bd75119622d1711485c695f430
+LANGTOOLS_SHA256SUM = b6b53a5f89c046abd8f38d0b4626611ca688c1de7cbdc2e52790d9aebd7dacf3
+OPENJDK_SHA256SUM = 070c32f4126887949b2363a4379a367d7fc7f1c0ffa4d782f430c3e39a2961e9
 
 CACAO_VERSION = a567bcb7f589
 CACAO_SHA256SUM = d49f79debc131a5694cae6ab3ba2864e7f3249ee8d9dc09aae8afdd4dc6b09f9
--- a/patches/boot/ecj-diamond.patch	Wed May 01 00:04:40 2013 +0100
+++ b/patches/boot/ecj-diamond.patch	Fri Jun 28 02:33:43 2013 +0100
@@ -6215,3 +6215,63 @@
          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/java/io/ObjectStreamClass.java openjdk-boot/jdk/src/share/classes/java/io/ObjectStreamClass.java
+--- openjdk-boot.orig/jdk/src/share/classes/java/io/ObjectStreamClass.java	2013-06-27 16:06:42.289384018 +0100
++++ openjdk-boot/jdk/src/share/classes/java/io/ObjectStreamClass.java	2013-06-27 16:07:06.489768521 +0100
+@@ -1164,7 +1164,7 @@
+             end = end.getSuperclass();
+         }
+ 
+-        HashSet<String> oscNames = new HashSet<>(3);
++        HashSet<String> oscNames = new HashSet<String>(3);
+ 
+         for (ObjectStreamClass d = this; d != null; d = d.superDesc) {
+             if (oscNames.contains(d.name)) {
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/font/CreatedFontTracker.java openjdk-boot/jdk/src/share/classes/sun/font/CreatedFontTracker.java
+--- openjdk-boot.orig/jdk/src/share/classes/sun/font/CreatedFontTracker.java	2013-06-27 16:06:53.297558922 +0100
++++ openjdk-boot/jdk/src/share/classes/sun/font/CreatedFontTracker.java	2013-06-27 16:07:32.294178507 +0100
+@@ -106,7 +106,7 @@
+      * Note that this only applies to createFont() from an InputStream object.
+      */
+     private static class TempFileDeletionHook {
+-        private static HashMap<File, OutputStream> files = new HashMap<>();
++        private static HashMap<File, OutputStream> files = new HashMap<File, OutputStream>();
+ 
+         private static Thread t = null;
+         static void init() {
+diff --git a/src/share/classes/com/sun/media/sound/AbstractLine.java b/src/share/classes/com/sun/media/sound/AbstractLine.java
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/media/sound/AbstractLine.java
++++ openjdk-boot/jdk/src/share/classes/com/sun/media/sound/AbstractLine.java
+@@ -54,7 +54,7 @@
+      * Contains event dispatcher per thread group.
+      */
+     private static final Map<ThreadGroup, EventDispatcher> dispatchers =
+-            new WeakHashMap<>();
++      new WeakHashMap<ThreadGroup, EventDispatcher>();
+ 
+     /**
+      * Constructs a new AbstractLine.
+diff --git a/src/share/classes/com/sun/media/sound/RealTimeSequencer.java b/src/share/classes/com/sun/media/sound/RealTimeSequencer.java
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java
++++ openjdk-boot/jdk/src/share/classes/com/sun/media/sound/RealTimeSequencer.java
+@@ -59,7 +59,7 @@
+      * dispatcher instance with a factory in EventDispatcher
+      */
+     private static final Map<ThreadGroup, EventDispatcher> dispatchers =
+-            new WeakHashMap<>();
++      new WeakHashMap<ThreadGroup, EventDispatcher>();
+ 
+     /**
+      * All RealTimeSequencers share this info object.
+diff -Nru openjdk-boot.orig/jdk/src/solaris/classes/sun/nio/ch/SctpNet.java openjdk-boot/jdk/src/solaris/classes/sun/nio/ch/SctpNet.java
+--- openjdk-boot.orig/jdk/src/solaris/classes/sun/nio/ch/SctpNet.java	2013-06-27 20:05:19.200970932 +0100
++++ openjdk-boot/jdk/src/solaris/classes/sun/nio/ch/SctpNet.java	2013-06-27 20:05:33.857203747 +0100
+@@ -113,7 +113,7 @@
+             SocketAddress[] saa)
+     {
+          SecurityManager sm = System.getSecurityManager();
+-         Set<SocketAddress> set = new HashSet<>(saa.length);
++         Set<SocketAddress> set = new HashSet<SocketAddress>(saa.length);
+          for (SocketAddress sa : saa) {
+              set.add(getRevealedLocalAddress(sa, sm));
+          }
--- a/patches/boot/ecj-multicatch.patch	Wed May 01 00:04:40 2013 +0100
+++ b/patches/boot/ecj-multicatch.patch	Fri Jun 28 02:33:43 2013 +0100
@@ -205,3 +205,54 @@
              throw new InternalError(e.toString());
          } catch (InvocationTargetException e) {
              Throwable t = e.getCause();
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java openjdk-boot/jdk/src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java
+--- openjdk-boot.orig/jdk/src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java	2013-06-27 15:56:57.456088537 +0100
++++ openjdk-boot/jdk/src/share/classes/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java	2013-06-27 16:02:12.857102777 +0100
+@@ -402,7 +402,13 @@
+                         try {
+                             ServerNotifForwarder.checkMBeanPermission(this.mBeanServer,
+                                                       candidate.getObjectName(),"addNotificationListener");
+-                        } catch (InstanceNotFoundException | SecurityException e) {
++                        } catch (InstanceNotFoundException e) {
++                            if (logger.debugOn()) {
++                                logger.debug("fetchNotifications", "candidate: " + candidate + " skipped. exception " + e);
++                            }
++                            ++nextSeq;
++                            continue;
++                        } catch (SecurityException e) {
+                             if (logger.debugOn()) {
+                                 logger.debug("fetchNotifications", "candidate: " + candidate + " skipped. exception " + e);
+                             }
+diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/ProcessBuilder.java openjdk-boot/jdk/src/share/classes/java/lang/ProcessBuilder.java
+--- openjdk-boot.orig/jdk/src/share/classes/java/lang/ProcessBuilder.java	2013-06-27 15:56:27.295609027 +0100
++++ openjdk-boot/jdk/src/share/classes/java/lang/ProcessBuilder.java	2013-06-27 16:00:59.631938678 +0100
+@@ -1024,10 +1024,10 @@
+                                      dir,
+                                      redirects,
+                                      redirectErrorStream);
+-        } catch (IOException | IllegalArgumentException e) {
++        } catch (IOException e) {
+             String exceptionInfo = ": " + e.getMessage();
+             Throwable cause = e;
+-            if ((e instanceof IOException) && security != null) {
++            if (security != null) {
+                 // Can not disclose the fail reason for read-protected files.
+                 try {
+                     security.checkRead(prog);
+@@ -1039,6 +1039,16 @@
+             // It's much easier for us to create a high-quality error
+             // message than the low-level C code which found the problem.
+             throw new IOException(
++                "Cannot run program \"" + prog + "\""
++                + (dir == null ? "" : " (in directory \"" + dir + "\")")
++                + exceptionInfo,
++                cause);
++        } catch (IllegalArgumentException e) {
++            String exceptionInfo = ": " + e.getMessage();
++            Throwable cause = e;
++            // It's much easier for us to create a high-quality error
++            // message than the low-level C code which found the problem.
++            throw new IOException(
+                 "Cannot run program \"" + prog + "\""
+                 + (dir == null ? "" : " (in directory \"" + dir + "\")")
+                 + exceptionInfo,
--- a/patches/boot/ecj-stringswitch.patch	Wed May 01 00:04:40 2013 +0100
+++ b/patches/boot/ecj-stringswitch.patch	Fri Jun 28 02:33:43 2013 +0100
@@ -302,59 +302,29 @@
  
                  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	2013-01-14 22:25:02.000000000 +0000
-+++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2013-01-15 02:19:34.315049222 +0000
-@@ -411,111 +411,106 @@
-     static boolean isCallerSensitive(MemberName mem) {
-         if (!mem.isInvocable())  return false;  // fields are not caller sensitive
-         Class<?> defc = mem.getDeclaringClass();
--        switch (mem.getName()) {
+--- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2013-06-21 21:46:14.000000000 +0100
++++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2013-06-26 02:23:21.025257579 +0100
+@@ -421,110 +421,105 @@
+     // this method is also called by test/sun/reflect/CallerSensitiveFinder
+     // to validate the hand-maintained list
+     private static boolean isCallerSensitiveMethod(Class<?> defc, String method) {
+-        switch (method) {
 -        case "doPrivileged":
 -        case "doPrivilegedWithCombiner":
-+	String memName = mem.getName();
-+	if ("doPrivileged".equals(memName) ||
-+	    "doPrivilegedWithCombiner".equals(memName)) {
++	if ("doPrivileged".equals(method) ||
++	    "doPrivilegedWithCombiner".equals(method)) {
              return defc == java.security.AccessController.class;
 -        case "checkMemberAccess":
-+	} else if ("checkMemberAccess".equals(memName)) {
-             return canBeCalledVirtual(mem, java.lang.SecurityManager.class);
++	} else if ("checkMemberAccess".equals(method)) {
+             return defc == java.lang.SecurityManager.class;
 -        case "getUnsafe":
-+        } else if ("getUnsafe".equals(memName)) {
++        } else if ("getUnsafe".equals(method)) {
              return defc == sun.misc.Unsafe.class;
 -        case "lookup":
-+	} else if ("lookup".equals(memName)) {
++	} else if ("lookup".equals(method)) {
              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)) {
++	} else if ("invoke".equals(method)) {
              return defc == java.lang.reflect.Method.class;
 -        case "get":
 -        case "getBoolean":
@@ -374,33 +344,37 @@
 -        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)) {
++	} else if ("get".equals(method) ||
++		   "getBoolean".equals(method) ||
++		   "getByte".equals(method) ||
++		   "getChar".equals(method) ||
++		   "getShort".equals(method) ||
++		   "getInt".equals(method) ||
++		   "getLong".equals(method) ||
++		   "getFloat".equals(method) ||
++		   "getDouble".equals(method) ||
++		   "set".equals(method) ||
++		   "setBoolean".equals(method) ||
++		   "setByte".equals(method) ||
++		   "setChar".equals(method) ||
++		   "setShort".equals(method) ||
++		   "setInt".equals(method) ||
++		   "setLong".equals(method) ||
++		   "setFloat".equals(method) ||
++		   "setDouble".equals(method)) {
              return defc == java.lang.reflect.Field.class;
 -        case "newInstance":
-+	} else if ("newInstance".equals(memName)) {
++	} else if ("newInstance".equals(method)) {
              if (defc == java.lang.reflect.Constructor.class)  return true;
              if (defc == java.lang.Class.class)  return true;
 -            break;
+-        case "getFields":
++	} else if ("getFields".equals(method)) {
+             return defc == java.lang.Class.class ||
+                    defc == javax.sql.rowset.serial.SerialJavaObject.class;
 -        case "forName":
 -        case "getClassLoader":
 -        case "getClasses":
--        case "getFields":
 -        case "getMethods":
 -        case "getConstructors":
 -        case "getDeclaredClasses":
@@ -413,81 +387,117 @@
 -        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)) {
+-        case "getEnclosingClass":
+-        case "getEnclosingMethod":
+-        case "getEnclosingConstructor":
++	} else if ("forName".equals(method) ||
++		   "getClassLoader".equals(method) ||
++		   "getClasses".equals(method) ||
++		   "getFields".equals(method) ||
++		   "getMethods".equals(method) ||
++		   "getConstructors".equals(method) ||
++		   "getDeclaredClasses".equals(method) ||
++		   "getDeclaredFields".equals(method) ||
++		   "getDeclaredMethods".equals(method) ||
++		   "getDeclaredConstructors".equals(method) ||
++		   "getField".equals(method) ||
++		   "getMethod".equals(method) ||
++		   "getConstructor".equals(method) ||
++		   "getDeclaredField".equals(method) ||
++		   "getDeclaredMethod".equals(method) ||
++		   "getDeclaredConstructor".equals(method) ||
++		   "getEnclosingClass".equals(method) ||
++		   "getEnclosingMethod".equals(method) ||
++		   "getEnclosingConstructor".equals(method)) {
              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)) {
++	} else if ("getConnection".equals(method) ||
++		   "getDriver".equals(method) ||
++		   "getDrivers".equals(method) ||
++		   "deregisterDriver".equals(method)) {
              return defc == java.sql.DriverManager.class;
+-
 -        case "newUpdater":
-+        } else if ("newUpdater".equals(memName)) {
++        } else if ("newUpdater".equals(method)) {
              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 canBeCalledVirtual(mem, java.lang.Thread.class);
++        } else if ("getContextClassLoader".equals(method)) {
+             return defc == java.lang.Thread.class;
 -        case "getPackage":
 -        case "getPackages":
-+        } else if ("getPackage".equals(memName) ||
-+		   "getPackages".equals(memName)) {
++        } else if ("getPackage".equals(method) ||
++		   "getPackages".equals(method)) {
              return defc == java.lang.Package.class;
 -        case "getParent":
 -        case "getSystemClassLoader":
-+        } else if ("getParent".equals(memName) ||
-+		   "getSystemClassLoader".equals(memName)) {
++        } else if ("getParent".equals(method) ||
++		   "getSystemClassLoader".equals(method)) {
              return defc == java.lang.ClassLoader.class;
 -        case "load":
 -        case "loadLibrary":
-+        } else if ("load".equals(memName) ||
-+		   "loadLibrary".equals(memName)) {
++        } else if ("load".equals(method) ||
++		   "loadLibrary".equals(method)) {
              if (defc == java.lang.Runtime.class)  return true;
              if (defc == java.lang.System.class)  return true;
 -            break;
 -        case "getCallerClass":
-+        } else if ("getCallerClass".equals(memName)) {
++        } else if ("getCallerClass".equals(method)) {
              if (defc == sun.reflect.Reflection.class)  return true;
              if (defc == java.lang.System.class)  return true;
 -            break;
 -        case "getCallerClassLoader":
-+	} else if ("getCallerClassLoader".equals(memName)) {
++	} else if ("getCallerClassLoader".equals(method)) {
              return defc == java.lang.ClassLoader.class;
 -        case "registerAsParallelCapable":
-+        } else if ("registerAsParallelCapable".equals(memName)) {
-             return canBeCalledVirtual(mem, java.lang.ClassLoader.class);
++        } else if ("registerAsParallelCapable".equals(method)) {
+             return defc == java.lang.ClassLoader.class;
 -        case "getProxyClass":
 -        case "newProxyInstance":
-+        } else if ("getProxyClass".equals(memName) ||
-+		   "newProxyInstance".equals(memName)) {
++        } else if ("getProxyClass".equals(method) ||
++		   "newProxyInstance".equals(method)) {
              return defc == java.lang.reflect.Proxy.class;
 -        case "asInterfaceInstance":
-+        } else if ("asInterfaceInstance".equals(memName)) {
++        } else if ("asInterfaceInstance".equals(method)) {
              return defc == java.lang.invoke.MethodHandleProxies.class;
 -        case "getBundle":
 -        case "clearCache":
-+        } else if ("getBundle".equals(memName) ||
-+		   "clearCache".equals(memName)) {
++        } else if ("getBundle".equals(method) ||
++		   "clearCache".equals(method)) {
              return defc == java.util.ResourceBundle.class;
+-        case "getType":
++        } else if ("getType".equals(method)) {
+             return defc == java.io.ObjectStreamField.class;
+-        case "forClass":
++        } else if ("forClass".equals(method)) {
+             return defc == java.io.ObjectStreamClass.class;
+-        case "getLogger":
++        } else if ("getLogger".equals(method)) {
+             return defc == java.util.logging.Logger.class;
+-        case "getAnonymousLogger":
++        } else if ("getAnonymousLogger".equals(method)) {
+             return defc == java.util.logging.Logger.class;
          }
          return false;
+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-06-27 16:08:36.739202429 +0100
++++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2013-06-27 16:40:02.673171484 +0100
+@@ -528,10 +528,10 @@
+     private static boolean canBeCalledVirtual(MemberName mem) {
+         assert(mem.isInvocable());
+         Class<?> defc = mem.getDeclaringClass();
+-        switch (mem.getName()) {
+-        case "checkMemberAccess":
++	String memName = mem.getName();
++	if ("checkMemberAccess".equals(memName)) {
+             return canBeCalledVirtual(mem, java.lang.SecurityManager.class);
+-        case "getContextClassLoader":
++        } else if ("getContextClassLoader".equals(memName)) {
+             return canBeCalledVirtual(mem, java.lang.Thread.class);
+         }
+         return false;
--- a/patches/boot/tobin.patch	Wed May 01 00:04:40 2013 +0100
+++ b/patches/boot/tobin.patch	Fri Jun 28 02:33:43 2013 +0100
@@ -1,38 +1,44 @@
-diff -Nru ../openjdk.orig/openjdk-boot/jdk/make/sun/xawt/Makefile openjdk-boot/jdk/make/sun/xawt/Makefile
---- ../openjdk.orig/openjdk-boot/jdk/make/sun/xawt/Makefile	2009-10-30 16:49:39.000000000 +0000
-+++ openjdk-boot/jdk/make/sun/xawt/Makefile	2009-10-30 16:59:16.000000000 +0000
-@@ -294,11 +294,7 @@
+diff -Nru openjdk-boot.orig/jdk/make/sun/awt/Makefile openjdk-boot/jdk/make/sun/awt/Makefile
+--- openjdk-boot.orig/jdk/make/sun/awt/Makefile	2013-06-25 16:52:46.810177400 +0100
++++ openjdk-boot/jdk/make/sun/awt/Makefile	2013-06-25 16:54:43.856035962 +0100
+@@ -245,16 +245,12 @@
+    $(ICONPATH)/security-icon-yellow48.png
  
  TEMPDIR_CLASSES = $(TEMPDIR)/classes
+-   
++
+ generated.clean:
+ 	$(RM) -r $(GEN_DIR)/*.java
+ 	$(RM) -r $(TEMPDIR)/.gen_icons   
  
--$(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java
+-$(TEMPDIR_CLASSES)/sun/awt/ToBin.class: ToBin.java
 -	@$(prep-target)
 -	$(BOOT_JAVAC_CMD) -d $(TEMPDIR_CLASSES) $<
 -
--$(TEMPDIR)/.gen_icons: $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class $(ICONS)
+-$(TEMPDIR)/.gen_icons: $(TEMPDIR_CLASSES)/sun/awt/ToBin.class $(ICONS)
 +$(TEMPDIR)/.gen_icons: $(ICONS)
  	$(prep-target)
  	for i in $(ICONS); do \
              filename=`basename $$i`; \
-@@ -308,20 +304,14 @@
- 	    $(ECHO) "package sun.awt.X11;" >> $$classname ; \
- 	    $(ECHO) "public class XAWTIcon32_$$name {" >> $$classname; \
- 	    $(ECHO) "public static int[] $$name = { " >> $$classname;  \
+@@ -264,20 +260,14 @@
+ 	    $(ECHO) "package sun.awt;" >> $$classname ; \
+ 	    $(ECHO) "public class AWTIcon32_$$name {" >> $$classname; \
+ 	    $(ECHO) "public final static int[] $$name = { " >> $$classname;  \
 -	    $(CAT) $$i | \
 -	      $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES)  \
 -		-Djava.awt.headless=true \
--		sun.awt.X11.ToBin >> $$classname; \
+-		sun.awt.ToBin >> $$classname; \
 +	    $(ECHO) "0,0" >> $$classname ;  \
  	    $(ECHO) "}; }" >> $$classname;  \
-             classname=$(GEN_DIR)/XAWTIcon64_$$name.java; \
+             classname=$(GEN_DIR)/AWTIcon64_$$name.java; \
  	    $(RM) $$classname; \
- 	    $(ECHO) "package sun.awt.X11;" >> $$classname ; \
- 	    $(ECHO) "public class XAWTIcon64_$$name {" >> $$classname; \
- 	    $(ECHO) "public static long[] $$name = { " >> $$classname;  \
+ 	    $(ECHO) "package sun.awt;" >> $$classname ; \
+ 	    $(ECHO) "public class AWTIcon64_$$name {" >> $$classname; \
+ 	    $(ECHO) "public final static long[] $$name = { " >> $$classname;  \
 -	    $(CAT) $$i | \
 -	      $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES)  \
 -		-Djava.awt.headless=true \
--		sun.awt.X11.ToBin >> $$classname; \
+-		sun.awt.ToBin >> $$classname; \
 +	    $(ECHO) "0,0" >> $$classname ;  \
  	    $(ECHO) "}; }" >> $$classname;  \
  	done