diff -ru CVS/classpath/java/io/DataInputStream.java updated/classpath/java/io/DataInputStream.java
--- CVS/classpath/java/io/DataInputStream.java	2010-06-18 19:32:52.000000000 +0400
+++ updated/classpath/java/io/DataInputStream.java	2010-06-18 19:35:06.000000000 +0400
@@ -1,5 +1,5 @@
 /* DataInputStream.java -- FilteredInputStream that implements DataInput
-   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2008
+   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2008, 2010
    Free Software Foundation
 
 This file is part of GNU Classpath.
@@ -60,7 +60,7 @@
 public class DataInputStream extends FilterInputStream implements DataInput
 {
   // Byte buffer, used to make primitive read calls more efficient.
-  byte[] buf = new byte [8];
+  private final byte[] buf = new byte [8];
 
   /**
    * This constructor initializes a new <code>DataInputStream</code>
@@ -722,22 +722,22 @@
 
   static int convertToInt (byte[] buf)
   {
-    return (((buf [0] & 0xff) << 24)
-            | ((buf [1] & 0xff) << 16)
-            | ((buf [2] & 0xff) << 8)
-            | (buf [3] & 0xff));
+    return (buf [0] << 24)
+	| ((buf [1] & 0xff) << 16)
+	| ((buf [2] & 0xff) << 8)
+         | (buf [3] & 0xff);
   }
 
   static long convertToLong (byte[] buf)
   {
-    return (((long)(buf [0] & 0xff) << 56) |
-            ((long)(buf [1] & 0xff) << 48) |
-            ((long)(buf [2] & 0xff) << 40) |
-            ((long)(buf [3] & 0xff) << 32) |
+    return ((long)((buf [0] << 24)
+                | ((buf [1] & 0xff) << 16)
+                | ((buf [2] & 0xff) << 8)
+                 | (buf [3] & 0xff)) << 32) |
             ((long)(buf [4] & 0xff) << 24) |
-            ((long)(buf [5] & 0xff) << 16) |
-            ((long)(buf [6] & 0xff) <<  8) |
-            ((long)(buf [7] & 0xff)));
+                 (((buf [5] & 0xff) << 16)
+                | ((buf [6] & 0xff) << 8)
+                 | (buf [7] & 0xff));
   }
 
   // FIXME: This method should be re-thought.  I suspect we have multiple
diff -ru CVS/classpath/java/io/ObjectInputStream.java updated/classpath/java/io/ObjectInputStream.java
--- CVS/classpath/java/io/ObjectInputStream.java	2010-06-18 19:33:12.000000000 +0400
+++ updated/classpath/java/io/ObjectInputStream.java	2010-06-18 19:35:06.000000000 +0400
@@ -1,5 +1,5 @@
 /* ObjectInputStream.java -- Class used to read serialized objects
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2008
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2008, 2010
    Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
@@ -208,7 +208,8 @@
     if (DEBUG)
       depth += 2;
 
-    if(dump) dumpElement("MARKER: 0x" + Integer.toHexString(marker) + " ");
+    if(DEBUG && dump) dumpElement("MARKER: 0x" +
+                                  Integer.toHexString(marker) + " ");
 
     try
       {
@@ -255,35 +256,35 @@
        case TC_BLOCKDATA:
        case TC_BLOCKDATALONG:
         {
-          if (marker == TC_BLOCKDATALONG)
-            { if(dump) dumpElementln("BLOCKDATALONG"); }
-          else
-            { if(dump) dumpElementln("BLOCKDATA"); }
+          if(DEBUG && dump) dumpElementln(marker == TC_BLOCKDATALONG ?
+                                          "BLOCKDATALONG" : "BLOCKDATA");
+          ret_val = null;
           readNextBlock(marker);
+          break;
         }
 
        case TC_NULL:
         {
-          if(dump) dumpElementln("NULL");
+          if(DEBUG && dump) dumpElementln("NULL");
           ret_val = null;
           break;
         }
 
        case TC_REFERENCE:
         {
-          if(dump) dumpElement("REFERENCE ");
+          if(DEBUG && dump) dumpElement("REFERENCE ");
           int oid = realInputStream.readInt();
-          if(dump) dumpElementln(Integer.toHexString(oid));
+          if(DEBUG && dump) dumpElementln(Integer.toHexString(oid));
           ret_val = lookupHandle(oid);
           if (!shared)
             throw new
-              InvalidObjectException("References can not be read unshared.");
+              InvalidObjectException("References can not be read unshared");
           break;
         }
 
        case TC_CLASS:
         {
-          if(dump) dumpElementln("CLASS");
+          if(DEBUG && dump) dumpElementln("CLASS");
           ObjectStreamClass osc = (ObjectStreamClass)readObject();
           Class clazz = osc.forClass();
           assignNewHandle(clazz,shared);
@@ -293,7 +294,7 @@
 
        case TC_PROXYCLASSDESC:
         {
-          if(dump) dumpElementln("PROXYCLASS");
+          if(DEBUG && dump) dumpElementln("PROXYCLASS");
           int n_intf = this.realInputStream.readInt();
           String[] intfs = new String[n_intf];
           for (int i = 0; i < n_intf; i++)
@@ -327,7 +328,7 @@
             {
               byte b = this.realInputStream.readByte();
               if (b != TC_ENDBLOCKDATA)
-                throw new IOException("Data annotated to class was not consumed." + b);
+                throw new IOException("Data annotated to class was not consumed: " + b);
             }
           else
             is_consumed = false;
@@ -345,7 +346,7 @@
             {
               byte b = this.realInputStream.readByte();
               if (b != TC_ENDBLOCKDATA)
-                throw new IOException("Data annotated to class was not consumed." + b);
+                throw new IOException("Data annotated to class was not consumed: " + b);
             }
           else
             is_consumed = false;
@@ -357,9 +358,9 @@
 
        case TC_STRING:
         {
-          if(dump) dumpElement("STRING=");
+          if(DEBUG && dump) dumpElement("STRING=");
           String s = this.realInputStream.readUTF();
-          if(dump) dumpElementln(s);
+          if(DEBUG && dump) dumpElementln(s);
           ret_val = processResolution(null, s, assignNewHandle(s,shared),
                                       shared);
           break;
@@ -367,9 +368,9 @@
 
        case TC_LONGSTRING:
         {
-          if(dump) dumpElement("STRING=");
+          if(DEBUG && dump) dumpElement("STRING=");
           String s = this.realInputStream.readUTFLong();
-          if(dump) dumpElementln(s);
+          if(DEBUG && dump) dumpElementln(s);
           ret_val = processResolution(null, s, assignNewHandle(s,shared),
                                       shared);
           break;
@@ -377,16 +378,17 @@
 
        case TC_ARRAY:
         {
-          if(dump) dumpElementln("ARRAY");
+          if(DEBUG && dump) dumpElementln("ARRAY");
           ObjectStreamClass osc = (ObjectStreamClass)readObject();
           Class componentType = osc.forClass().getComponentType();
-          if(dump) dumpElement("ARRAY LENGTH=");
+          if(DEBUG && dump) dumpElement("ARRAY LENGTH=");
           int length = this.realInputStream.readInt();
-          if(dump) dumpElementln (length + "; COMPONENT TYPE=" + componentType);
+          if(DEBUG && dump) dumpElementln (length + "; COMPONENT TYPE=" +
+                                           componentType);
           Object array = Array.newInstance(componentType, length);
           int handle = assignNewHandle(array,shared);
           readArrayElements(array, componentType);
-          if(dump)
+          if(DEBUG && dump)
             for (int i = 0, len = Array.getLength(array); i < len; i++)
               dumpElementln("  ELEMENT[" + i + "]=", Array.get(array, i));
           ret_val = processResolution(null, array, handle, shared);
@@ -395,13 +397,13 @@
 
        case TC_OBJECT:
         {
-          if(dump) dumpElementln("OBJECT");
+          if(DEBUG && dump) dumpElementln("OBJECT");
           ObjectStreamClass osc = (ObjectStreamClass)readObject();
           Class clazz = osc.forClass();
 
           if (!osc.realClassIsSerializable)
-            throw new NotSerializableException
-              (clazz + " is not Serializable, and thus cannot be deserialized.");
+            throw new NotSerializableException(clazz +
+                    " is not Serializable, and thus cannot be deserialized");
 
           if (osc.realClassIsExternalizable)
             {
@@ -422,7 +424,8 @@
                   setBlockDataMode(oldmode);
                   if (!oldmode)
                     if (this.realInputStream.readByte() != TC_ENDBLOCKDATA)
-                      throw new IOException("No end of block data seen for class with readExternal (ObjectInputStream) method.");
+                      throw new IOException("No end of block data seen for" +
+                        " class with readExternal (ObjectInputStream) method");
                 }
 
               ret_val = processResolution(osc, obj, handle,shared);
@@ -445,7 +448,8 @@
           for (int i = 0; i < hierarchy.length; i++)
           {
               this.currentObjectStreamClass = hierarchy[i];
-              if(dump) dumpElementln("Reading fields of " + this.currentObjectStreamClass.getName ());
+              if(DEBUG && dump) dumpElementln("Reading fields of " +
+                                  this.currentObjectStreamClass.getName ());
 
               // XXX: should initialize fields in classes in the hierarchy
               // that aren't in the stream
@@ -467,7 +471,7 @@
 
               if (this.currentObjectStreamClass.hasWriteMethod())
                 {
-                  if(dump) dumpElement("ENDBLOCKDATA? ");
+                  if(DEBUG && dump) dumpElement("ENDBLOCKDATA? ");
                   try
                     {
                       /* Read blocks until an end marker */
@@ -477,12 +481,13 @@
                           parseContent(writeMarker, shared);
                           writeMarker = this.realInputStream.readByte();
                         }
-                      if(dump) dumpElementln("yes");
+                      if(DEBUG && dump) dumpElementln("yes");
                     }
                   catch (EOFException e)
                     {
-                      throw (IOException) new IOException
-                        ("No end of block data seen for class with readObject (ObjectInputStream) method.").initCause(e);
+                      throw (IOException) new IOException("No end of block" +
+                        " data seen for class with readObject" +
+                        " (ObjectInputStream) method").initCause(e);
                     }
                 }
             }
@@ -498,16 +503,16 @@
         }
 
        case TC_RESET:
-        if(dump) dumpElementln("RESET");
+        if(DEBUG && dump) dumpElementln("RESET");
         clearHandles();
         ret_val = readObject();
         break;
 
        case TC_EXCEPTION:
         {
-          if(dump) dumpElement("EXCEPTION=");
+          if(DEBUG && dump) dumpElement("EXCEPTION=");
           Exception e = (Exception)readObject();
-          if(dump) dumpElementln(e.toString());
+          if(DEBUG && dump) dumpElementln(e.toString());
           clearHandles();
           throw new WriteAbortedException("Exception thrown during writing of stream", e);
         }
@@ -515,11 +520,11 @@
        case TC_ENUM:
          {
            /* TC_ENUM classDesc newHandle enumConstantName */
-           if (dump)
+           if (DEBUG && dump)
              dumpElementln("ENUM=");
            ObjectStreamClass osc = (ObjectStreamClass) readObject();
            String constantName = (String) readObject();
-           if (dump)
+           if (DEBUG && dump)
              dumpElementln("CONSTANT NAME = " + constantName);
            Class clazz = osc.forClass();
            Enum instance = Enum.valueOf(clazz, constantName);
@@ -612,15 +617,16 @@
   protected ObjectStreamClass readClassDescriptor()
     throws ClassNotFoundException, IOException
   {
-    if(dump) dumpElement("CLASSDESC NAME=");
+    if(DEBUG && dump) dumpElement("CLASSDESC NAME=");
     String name = this.realInputStream.readUTF();
-    if(dump) dumpElement(name + "; UID=");
+    if(DEBUG && dump) dumpElement(name + "; UID=");
     long uid = this.realInputStream.readLong ();
-    if(dump) dumpElement(Long.toHexString(uid) + "; FLAGS=");
+    if(DEBUG && dump) dumpElement(Long.toHexString(uid) + "; FLAGS=");
     byte flags = this.realInputStream.readByte ();
-    if(dump) dumpElement(Integer.toHexString(flags) + "; FIELD COUNT=");
+    if(DEBUG && dump) dumpElement(Integer.toHexString(flags) +
+                                  "; FIELD COUNT=");
     short field_count = this.realInputStream.readShort();
-    if(dump) dumpElementln(Short.toString(field_count));
+    if(DEBUG && dump) dumpElementln(Short.toString(field_count));
     ObjectStreamField[] fields = new ObjectStreamField[field_count];
     ObjectStreamClass osc = new ObjectStreamClass(name, uid,
                                                   flags, fields);
@@ -628,11 +634,11 @@
 
     for (int i = 0; i < field_count; i++)
       {
-        if(dump) dumpElement("  TYPE CODE=");
+        if(DEBUG && dump) dumpElement("  TYPE CODE=");
         char type_code = (char)this.realInputStream.readByte();
-        if(dump) dumpElement(type_code + "; FIELD NAME=");
+        if(DEBUG && dump) dumpElement(type_code + "; FIELD NAME=");
         String field_name = this.realInputStream.readUTF();
-        if(dump) dumpElementln(field_name);
+        if(DEBUG && dump) dumpElementln(field_name);
         String class_name;
 
         // If the type code is an array or an object we must
@@ -765,8 +771,9 @@
                              newfieldmapping, 0, fieldmapping.length);
             fieldmapping = newfieldmapping;
           }
-        fieldmapping[map_idx++] = stream_field;
-        fieldmapping[map_idx++] = real_field;
+        fieldmapping[map_idx] = stream_field;
+        fieldmapping[map_idx + 1] = real_field;
+        map_idx += 2;
       }
     osc.fieldMapping = fieldmapping;
 
@@ -871,7 +878,8 @@
     String name = osc.getName();
     try
       {
-        return Class.forName(name, true, currentLoader());
+        return Class.forName(name, true,
+                             VMStackWalker.firstNonNullClassLoader());
       }
     catch(ClassNotFoundException x)
       {
@@ -901,11 +909,11 @@
   /**
    * Returns the most recent user defined ClassLoader on the execution stack
    * or null if none is found.
-   */
+   * /
   private ClassLoader currentLoader()
   {
     return VMStackWalker.firstNonNullClassLoader();
-  }
+  }*/
 
   /**
    * Lookup a class stored in the local hashtable. If it is not
@@ -970,7 +978,7 @@
   protected Class<?> resolveProxyClass(String[] intfs)
     throws IOException, ClassNotFoundException
   {
-    ClassLoader cl = currentLoader();
+    ClassLoader cl = VMStackWalker.firstNonNullClassLoader();
 
     Class<?>[] clss = new Class<?>[intfs.length];
     if(cl == null)
@@ -1027,11 +1035,11 @@
   protected void readStreamHeader()
     throws IOException, StreamCorruptedException
   {
-    if(dump) dumpElement("STREAM MAGIC ");
+    if(DEBUG && dump) dumpElement("STREAM MAGIC ");
     if (this.realInputStream.readShort() != STREAM_MAGIC)
       throw new StreamCorruptedException("Invalid stream magic number");
 
-    if(dump) dumpElementln("STREAM VERSION ");
+    if(DEBUG && dump) dumpElementln("STREAM VERSION ");
     if (this.realInputStream.readShort() != STREAM_VERSION)
       throw new StreamCorruptedException("Invalid stream version number");
   }
@@ -1394,9 +1402,8 @@
             return defvalue;
 
           int off = field.getOffset();
-
-          return (char)(((prim_field_data[off++] & 0xFF) << 8)
-                        | (prim_field_data[off] & 0xFF));
+          return (char)((prim_field_data[off] << 8)
+                        | (prim_field_data[off + 1] & 0xFF));
         }
 
         public byte get(String name, byte defvalue)
@@ -1419,9 +1426,8 @@
             return defvalue;
 
           int off = field.getOffset();
-
-          return (short)(((prim_field_data[off++] & 0xFF) << 8)
-                         | (prim_field_data[off] & 0xFF));
+          return (short)((prim_field_data[off] << 8)
+                         | (prim_field_data[off + 1] & 0xFF));
         }
 
         public int get(String name, int defvalue)
@@ -1433,11 +1439,10 @@
             return defvalue;
 
           int off = field.getOffset();
-
-          return ((prim_field_data[off++] & 0xFF) << 24)
-            | ((prim_field_data[off++] & 0xFF) << 16)
-            | ((prim_field_data[off++] & 0xFF) << 8)
-            | (prim_field_data[off] & 0xFF);
+          return (prim_field_data[off] << 24)
+            | ((prim_field_data[off + 1] & 0xFF) << 16)
+            | ((prim_field_data[off + 2] & 0xFF) << 8)
+            | (prim_field_data[off + 3] & 0xFF);
         }
 
         public long get(String name, long defvalue)
@@ -1449,15 +1454,14 @@
             return defvalue;
 
           int off = field.getOffset();
-
-          return (long)(((prim_field_data[off++] & 0xFFL) << 56)
-                        | ((prim_field_data[off++] & 0xFFL) << 48)
-                        | ((prim_field_data[off++] & 0xFFL) << 40)
-                        | ((prim_field_data[off++] & 0xFFL) << 32)
-                        | ((prim_field_data[off++] & 0xFF) << 24)
-                        | ((prim_field_data[off++] & 0xFF) << 16)
-                        | ((prim_field_data[off++] & 0xFF) << 8)
-                        | (prim_field_data[off] & 0xFF));
+          return ((long)((prim_field_data [off] << 24)
+                      | ((prim_field_data [off + 1] & 0xff) << 16)
+                      | ((prim_field_data [off + 2] & 0xff) << 8)
+                       | (prim_field_data [off + 3] & 0xff)) << 32) |
+                  ((long)(prim_field_data [off + 4] & 0xff) << 24) |
+                       (((prim_field_data [off + 5] & 0xff) << 16)
+                      | ((prim_field_data [off + 6] & 0xff) << 8)
+                       | (prim_field_data [off + 7] & 0xff));
         }
 
         public float get(String name, float defvalue)
@@ -1469,11 +1473,10 @@
             return defvalue;
 
           int off = field.getOffset();
-
-          return Float.intBitsToFloat(((prim_field_data[off++] & 0xFF) << 24)
-                                      | ((prim_field_data[off++] & 0xFF) << 16)
-                                      | ((prim_field_data[off++] & 0xFF) << 8)
-                                      | (prim_field_data[off] & 0xFF));
+          return Float.intBitsToFloat((prim_field_data[off] << 24)
+                        | ((prim_field_data[off + 1] & 0xFF) << 16)
+                        | ((prim_field_data[off + 2] & 0xFF) << 8)
+                        | (prim_field_data[off + 3] & 0xFF));
         }
 
         public double get(String name, double defvalue)
@@ -1485,16 +1488,15 @@
             return defvalue;
 
           int off = field.getOffset();
-
-          return Double.longBitsToDouble
-            ( (long) (((prim_field_data[off++] & 0xFFL) << 56)
-                      | ((prim_field_data[off++] & 0xFFL) << 48)
-                      | ((prim_field_data[off++] & 0xFFL) << 40)
-                      | ((prim_field_data[off++] & 0xFFL) << 32)
-                      | ((prim_field_data[off++] & 0xFF) << 24)
-                      | ((prim_field_data[off++] & 0xFF) << 16)
-                      | ((prim_field_data[off++] & 0xFF) << 8)
-                      | (prim_field_data[off] & 0xFF)));
+          return Double.longBitsToDouble(
+                   ((long)((prim_field_data [off] << 24)
+                        | ((prim_field_data [off + 1] & 0xff) << 16)
+                        | ((prim_field_data [off + 2] & 0xff) << 8)
+                         | (prim_field_data [off + 3] & 0xff)) << 32) |
+                    ((long)(prim_field_data [off + 4] & 0xff) << 24) |
+                         (((prim_field_data [off + 5] & 0xff) << 16)
+                        | ((prim_field_data [off + 6] & 0xff) << 8)
+                         | (prim_field_data [off + 7] & 0xff)));
         }
 
         public Object get(String name, Object defvalue)
@@ -1667,13 +1669,13 @@
   {
     Pair<Boolean,Object> result = handles.get(handle);
     if (result == null)
-      throw new StreamCorruptedException("The handle, " +
+      throw new StreamCorruptedException("The handle " +
                                          Integer.toHexString(handle) +
-                                         ", is invalid.");
+                                         " is invalid");
     if (!result.getLeft())
-      throw new InvalidObjectException("The handle, " +
+      throw new InvalidObjectException("The handle " +
                                        Integer.toHexString(handle) +
-                                       ", is not shared.");
+                                       " is not shared");
     return result.getRight();
   }
 
@@ -1745,7 +1747,7 @@
     byte marker = this.realInputStream.readByte();
     while (marker == TC_RESET)
       {
-        if(dump) dumpElementln("RESET");
+        if(DEBUG && dump) dumpElementln("RESET");
         clearHandles();
         marker = this.realInputStream.readByte();
       }
@@ -1756,19 +1758,20 @@
   {
     if (marker == TC_BLOCKDATA)
       {
-        if(dump) dumpElement("BLOCK DATA SIZE=");
+        if(DEBUG && dump) dumpElement("BLOCK DATA SIZE=");
         this.blockDataBytes = this.realInputStream.readUnsignedByte();
-        if(dump) dumpElementln (Integer.toString(this.blockDataBytes));
+        if(DEBUG && dump) dumpElementln(Integer.toString(this.blockDataBytes));
       }
     else if (marker == TC_BLOCKDATALONG)
       {
-        if(dump) dumpElement("BLOCK DATA LONG SIZE=");
+        if(DEBUG && dump) dumpElement("BLOCK DATA LONG SIZE=");
         this.blockDataBytes = this.realInputStream.readInt();
-        if(dump) dumpElementln (Integer.toString(this.blockDataBytes));
+        if(DEBUG && dump) dumpElementln (Integer.toString(this.blockDataBytes));
       }
     else
       {
-        throw new EOFException("Attempt to read primitive data, but no data block is active.");
+        throw new EOFException(
+          "Attempt to read primitive data, but no data block is active");
       }
 
     if (this.blockData.length < this.blockDataBytes)
@@ -1879,7 +1882,7 @@
             {
               boolean value =
                 read_value ? this.realInputStream.readBoolean() : false;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setBooleanField(obj, value);
@@ -1889,7 +1892,7 @@
             {
               byte value =
                 read_value ? this.realInputStream.readByte() : 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setByteField(obj, value);
@@ -1899,7 +1902,7 @@
             {
               char value =
                 read_value ? this.realInputStream.readChar(): 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setCharField(obj, value);
@@ -1909,7 +1912,7 @@
             {
               double value =
                 read_value ? this.realInputStream.readDouble() : 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setDoubleField(obj, value);
@@ -1919,7 +1922,7 @@
             {
               float value =
                 read_value ? this.realInputStream.readFloat() : 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setFloatField(obj, value);
@@ -1929,7 +1932,7 @@
             {
               int value =
                 read_value ? this.realInputStream.readInt() : 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setIntField(obj, value);
@@ -1939,7 +1942,7 @@
             {
               long value =
                 read_value ? this.realInputStream.readLong() : 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setLongField(obj, value);
@@ -1949,7 +1952,7 @@
             {
               short value =
                 read_value ? this.realInputStream.readShort() : 0;
-              if (dump && read_value && set_value)
+              if (DEBUG && dump && read_value && set_value)
                 dumpElementln("  " + field_name + ": " + value);
               if (set_value)
                 real_field.setShortField(obj, value);
diff -ru CVS/classpath/java/io/ObjectOutputStream.java updated/classpath/java/io/ObjectOutputStream.java
--- CVS/classpath/java/io/ObjectOutputStream.java	2010-06-18 19:33:26.000000000 +0400
+++ updated/classpath/java/io/ObjectOutputStream.java	2010-06-18 19:40:34.000000000 +0400
@@ -1,5 +1,5 @@
 /* ObjectOutputStream.java -- Class used to write serialized objects
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2010
    Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
@@ -246,14 +246,14 @@
   {
     if (useSubclassMethod)
       {
-        if (dump)
+        if (DEBUG && dump)
           dumpElementln ("WRITE OVERRIDE: " + obj);
 
         writeObjectOverride(obj);
         return;
       }
 
-    if (dump)
+    if (DEBUG && dump)
       dumpElementln ("WRITE: ", obj);
 
     depth += 2;
@@ -292,7 +292,7 @@
                     writeObject (osc);
                   }
                 else
-                  {System.err.println("1");
+                  { //System.err.println("1");
                     realOutput.writeByte(TC_PROXYCLASSDESC);
                     Class[] intfs = cl.getInterfaces();
                     realOutput.writeInt(intfs.length);
@@ -431,18 +431,18 @@
                     fieldsAlreadyWritten = false;
                     if (currentObjectStreamClass.hasWriteMethod())
                       {
-                        if (dump)
+                        if (DEBUG && dump)
                           dumpElementln ("WRITE METHOD CALLED FOR: ", obj);
                         setBlockDataMode(true);
                         callWriteMethod(obj, currentObjectStreamClass);
                         setBlockDataMode(false);
                         realOutput.writeByte(TC_ENDBLOCKDATA);
-                        if (dump)
+                        if (DEBUG && dump)
                           dumpElementln ("WRITE ENDBLOCKDATA FOR: ", obj);
                       }
                     else
                       {
-                        if (dump)
+                        if (DEBUG && dump)
                           dumpElementln ("WRITE FIELDS CALLED FOR: ", obj);
                         writeFields(obj, currentObjectStreamClass);
                       }
@@ -481,8 +481,8 @@
         catch (IOException ioe)
           {
             StreamCorruptedException ex =
-              new StreamCorruptedException
-              (ioe + " thrown while exception was being written to stream.");
+              new StreamCorruptedException(ioe +
+                    " thrown while exception was being written to stream");
             if (DEBUG)
               {
                 ex.printStackTrace(System.out);
@@ -499,7 +499,7 @@
         setBlockDataMode(old_mode);
         depth -= 2;
 
-        if (dump)
+        if (DEBUG && dump)
           dumpElementln ("END: ", obj);
       }
   }
@@ -667,11 +667,11 @@
   public void useProtocolVersion(int version) throws IOException
   {
     if (version != PROTOCOL_VERSION_1 && version != PROTOCOL_VERSION_2)
-      throw new IllegalArgumentException("Invalid protocol version requested.");
+      throw new IllegalArgumentException("Invalid protocol version requested");
 
     if (nextOID != baseWireHandle)
       throw new IllegalStateException("Protocol version cannot be changed "
-                                      + "after serialization started.");
+                                      + "after serialization started");
 
     protocolVersion = version;
   }
@@ -1052,8 +1052,8 @@
 
           checkType(field, 'C');
           int off = field.getOffset();
-          prim_field_data[off++] = (byte)(value >>> 8);
-          prim_field_data[off] = (byte)value;
+          prim_field_data[off] = (byte)(value >>> 8);
+          prim_field_data[off + 1] = (byte)value;
         }
 
         public void put(String name, double value)
@@ -1063,14 +1063,16 @@
           checkType(field, 'D');
           int off = field.getOffset();
           long l_value = Double.doubleToLongBits (value);
-          prim_field_data[off++] = (byte)(l_value >>> 52);
-          prim_field_data[off++] = (byte)(l_value >>> 48);
-          prim_field_data[off++] = (byte)(l_value >>> 40);
-          prim_field_data[off++] = (byte)(l_value >>> 32);
-          prim_field_data[off++] = (byte)(l_value >>> 24);
-          prim_field_data[off++] = (byte)(l_value >>> 16);
-          prim_field_data[off++] = (byte)(l_value >>> 8);
-          prim_field_data[off] = (byte)l_value;
+          int v = (int) (l_value >>> 32);
+          prim_field_data[off] = (byte)(v >>> 24);
+          prim_field_data[off + 1] = (byte)(v >>> 16);
+          prim_field_data[off + 2] = (byte)(v >>> 8);
+          prim_field_data[off + 3] = (byte)v;
+          v = (int) l_value;
+          prim_field_data[off + 4] = (byte)(v >>> 24);
+          prim_field_data[off + 5] = (byte)(v >>> 16);
+          prim_field_data[off + 6] = (byte)(v >>> 8);
+          prim_field_data[off + 7] = (byte)v;
         }
 
         public void put(String name, float value)
@@ -1080,10 +1082,10 @@
           checkType(field, 'F');
           int off = field.getOffset();
           int i_value = Float.floatToIntBits(value);
-          prim_field_data[off++] = (byte)(i_value >>> 24);
-          prim_field_data[off++] = (byte)(i_value >>> 16);
-          prim_field_data[off++] = (byte)(i_value >>> 8);
-          prim_field_data[off] = (byte)i_value;
+          prim_field_data[off] = (byte)(i_value >>> 24);
+          prim_field_data[off + 1] = (byte)(i_value >>> 16);
+          prim_field_data[off + 2] = (byte)(i_value >>> 8);
+          prim_field_data[off + 3] = (byte)i_value;
         }
 
         public void put(String name, int value)
@@ -1091,10 +1093,10 @@
           ObjectStreamField field = getField(name);
           checkType(field, 'I');
           int off = field.getOffset();
-          prim_field_data[off++] = (byte)(value >>> 24);
-          prim_field_data[off++] = (byte)(value >>> 16);
-          prim_field_data[off++] = (byte)(value >>> 8);
-          prim_field_data[off] = (byte)value;
+          prim_field_data[off] = (byte)(value >>> 24);
+          prim_field_data[off + 1] = (byte)(value >>> 16);
+          prim_field_data[off + 2] = (byte)(value >>> 8);
+          prim_field_data[off + 3] = (byte)value;
         }
 
         public void put(String name, long value)
@@ -1102,14 +1104,16 @@
           ObjectStreamField field = getField(name);
           checkType(field, 'J');
           int off = field.getOffset();
-          prim_field_data[off++] = (byte)(value >>> 52);
-          prim_field_data[off++] = (byte)(value >>> 48);
-          prim_field_data[off++] = (byte)(value >>> 40);
-          prim_field_data[off++] = (byte)(value >>> 32);
-          prim_field_data[off++] = (byte)(value >>> 24);
-          prim_field_data[off++] = (byte)(value >>> 16);
-          prim_field_data[off++] = (byte)(value >>> 8);
-          prim_field_data[off] = (byte)value;
+          int v = (int) (value >>> 32);
+          prim_field_data[off] = (byte)(v >>> 24);
+          prim_field_data[off + 1] = (byte)(v >>> 16);
+          prim_field_data[off + 2] = (byte)(v >>> 8);
+          prim_field_data[off + 3] = (byte)v;
+          v = (int) value;
+          prim_field_data[off + 4] = (byte)(v >>> 24);
+          prim_field_data[off + 5] = (byte)(v >>> 16);
+          prim_field_data[off + 6] = (byte)(v >>> 8);
+          prim_field_data[off + 7] = (byte)v;
         }
 
         public void put(String name, short value)
@@ -1117,8 +1121,8 @@
           ObjectStreamField field = getField(name);
           checkType(field, 'S');
           int off = field.getOffset();
-          prim_field_data[off++] = (byte)(value >>> 8);
-          prim_field_data[off] = (byte)value;
+          prim_field_data[off] = (byte)(value >>> 8);
+          prim_field_data[off + 1] = (byte)value;
         }
 
         public void put(String name, Object value)
diff -ru CVS/classpath/java/io/ObjectStreamClass.java updated/classpath/java/io/ObjectStreamClass.java
--- CVS/classpath/java/io/ObjectStreamClass.java	2010-06-18 19:33:44.000000000 +0400
+++ updated/classpath/java/io/ObjectStreamClass.java	2010-06-18 19:35:06.000000000 +0400
@@ -1,6 +1,7 @@
 /* ObjectStreamClass.java -- Class used to write class information
    about serialized objects.
-   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2010
+   Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -195,7 +196,7 @@
    */
   public String toString()
   {
-    return "java.io.ObjectStreamClass< " + name + ", " + uid + " >";
+    return name + ": static final long serialVersionUID = " + uid + "L;";
   }
 
   // Returns true iff the class that this ObjectStreamClass represents
@@ -312,7 +313,8 @@
    * already set UID is found.
    */
   void setClass(Class cl, ObjectStreamClass superClass) throws InvalidClassException
-  {hierarchy = null;
+  {
+    hierarchy = null;
     this.clazz = cl;
 
     cacheMethods();
@@ -534,7 +536,7 @@
     return package1.equals(package2);
   }
 
-  final static Class[] noArgs = new Class[0];
+  private static final Class[] noArgs = new Class[0];
 
   private static Method findAccessibleMethod(String name, Class from)
   {
@@ -581,10 +583,12 @@
       || (l == ClassLoader.getSystemClassLoader() /* application loader */);
   }
 
-  static Hashtable methodCache = new Hashtable();
+  private static final Hashtable methodCache = new Hashtable();
 
-  static final Class[] readObjectSignature  = { ObjectInputStream.class };
-  static final Class[] writeObjectSignature = { ObjectOutputStream.class };
+  private static final Class[] readObjectSignature
+    = { ObjectInputStream.class };
+  private static final Class[] writeObjectSignature
+    = { ObjectOutputStream.class };
 
   private void cacheMethods()
   {
@@ -769,7 +773,7 @@
     calculateOffsets();
   }
 
-  static Hashtable uidCache = new Hashtable();
+  private static final Hashtable uidCache = new Hashtable();
 
   // Returns the serial version UID defined by class, or if that
   // isn't present, calculates value of serial version UID.
@@ -892,10 +896,13 @@
 
     data_out.writeUTF(cl.getName());
 
-    int modifiers = cl.getModifiers();
     // just look at interesting bits
-    modifiers = modifiers & (Modifier.ABSTRACT | Modifier.FINAL
-                             | Modifier.INTERFACE | Modifier.PUBLIC);
+    int modifiers = cl.getModifiers() & (Modifier.ABSTRACT | Modifier.FINAL
+                                      | Modifier.INTERFACE | Modifier.PUBLIC);
+    Method[] methods = cl.getDeclaredMethods();
+    if ((modifiers & Modifier.INTERFACE) != 0)
+      modifiers = methods.length > 0 ? modifiers | Modifier.ABSTRACT :
+                   modifiers & ~Modifier.ABSTRACT;
     data_out.writeInt(modifiers);
 
     // Pretend that an array has no interfaces, because when array
@@ -953,7 +960,6 @@
       }
 
     Method method;
-    Method[] methods = cl.getDeclaredMethods();
     Arrays.sort(methods, memberComparator);
     for (int i = 0; i < methods.length; i++)
       {
@@ -1033,7 +1039,7 @@
         {
             try
             {
-                final Constructor c = clazz.getConstructor(new Class[0]);
+                final Constructor c = clazz.getConstructor(noArgs);
 
                 AccessController.doPrivileged(new PrivilegedAction()
                 {
@@ -1068,13 +1074,11 @@
 
   public static final ObjectStreamField[] NO_FIELDS = {};
 
-  private static Hashtable<Class,ObjectStreamClass> classLookupTable
+  private static final Hashtable<Class,ObjectStreamClass> classLookupTable
     = new Hashtable<Class,ObjectStreamClass>();
   private static final NullOutputStream nullOutputStream = new NullOutputStream();
   private static final Comparator interfaceComparator = new InterfaceComparator();
   private static final Comparator memberComparator = new MemberComparator();
-  private static final
-    Class[] writeMethodArgTypes = { java.io.ObjectOutputStream.class };
 
   private ObjectStreamClass superClass;
   private Class<?> clazz;
