Hi, On Tue, 2002-02-05 at 22:08, Tom Tromey wrote: > > Using the runtime verifier in this situation would be hard, because > you'd have to convince libgcj to load the bytecode for various java.* > classes, which are preloaded.
The attached program tries to do it anyway. And I get a lot of verify errors when using this verifier on classes generated with jikes 1.15. But as you can see from the attached output I also got a lot of other errors that indicate that libgcj doesn't like what I am doing :) Besides Object, Class and ClassLoader I had to remove the following classes since they seemed to completely hang the verifier! java/lang/reflect/Proxy*.class java/util/AbstractMap\$1.class java/util/AbstractMap\$3.class java/util/Collections$7.class java/util/Collections\$7.class java/util/Collections$SingletonMap.class java/util/Collections\$SingletonMap.class java/util/Collections\$SynchronizedMap.class java/util/WeakHashMap\$WeakEntrySet.class java/util/zip/DeflaterHuffman.class java/util/TreeMap\$SubMap.class java/text/RuleBasedCollator.class gnu/java/awt/peer/gtk/GtkComponentPeer.class I am going to play a bit more with this to see if I can see were some of the other errors come from to better understand what libgcj is doing and wether I am not feeding you completely bogus data. Cheers, Mark
import java.io.*; public class VerifyClass extends ClassLoader { public static void main(String args[]) { if (args.length == 1) { System.out.println("Verifying: " + args[0]); try { new VerifyClass().verify(args[0]); } catch (IOException ioe) { System.err.println(ioe); } } else System.out.println("argument must be a class file"); } void verify(String classFile) throws IOException { InputStream is = new FileInputStream(classFile); ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buf = new byte[2048]; int read = is.read(buf); while(read > 0) { os.write(buf, 0, read); read = is.read(buf); } byte[] data = os.toByteArray(); try { Class c = defineClass(data, 0, data.length); resolveClass(c); } catch(Error e) { System.err.println(e); } } }
java.lang.VerifyError: verification failed at PC 31 in java.lang.String:toCharArray(()[C): incompatible type on stack java.lang.VerifyError: verification failed at PC 18 in java.io.ObjectInputStream:resolveClass((Ljava.io.ObjectStreamClass;)Ljava.lang.Class;): incompatible type on stack java.lang.IncompatibleClassChangeError: java.util.RandomAccessSubList java.lang.IncompatibleClassChangeError: java.util.Hashtable$HashEntry java.lang.VerifyError: verification failed at PC 224 in java.util.TimeZone:getTimeZone((Ljava.lang.String;)Ljava.util.TimeZone;): incompatible return type java.lang.VerifyError: verification failed at PC 106 in java.util.ResourceBundle:tryBundle((Ljava.lang.String;Ljava.util.Locale;Ljava.lang.ClassLoader;Ljava.util.ResourceBundle;Ljava.util.HashMap;)Ljava.util.ResourceBundle;): incompatible type on stack java.lang.VerifyError: verification failed at PC 165 in java.util.Calendar:getInstance((Ljava.util.TimeZone;Ljava.util.Locale;)Ljava.util.Calendar;): incompatible return type java.lang.IncompatibleClassChangeError: java.util.HashMap$HashEntry java.lang.IncompatibleClassChangeError: java.util.Collections$3 java.lang.IncompatibleClassChangeError: java.util.Collections$4 java.lang.IncompatibleClassChangeError: java.util.Collections$5 java.lang.IncompatibleClassChangeError: java.util.Collections$6 java.lang.VerifyError: verification failed at PC 8 in java.util.Collections$SingletonSet:iterator(()Ljava.util.Iterator;): incompatible return type java.lang.IncompatibleClassChangeError: java.util.Collections$SynchronizedList java.lang.IncompatibleClassChangeError: java.util.Collections$SynchronizedRandomAccessList java.lang.IncompatibleClassChangeError: java.util.Collections$SynchronizedListIterator java.lang.IncompatibleClassChangeError: java.util.Collections$SynchronizedSet java.lang.IncompatibleClassChangeError: java.util.Collections$SynchronizedSortedMap java.lang.IncompatibleClassChangeError: java.util.Collections$SynchronizedSortedSet java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableList java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableRandomAccessList java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableListIterator java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableSet java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableSortedMap java.lang.IncompatibleClassChangeError: java.util.Collections$UnmodifiableSortedSet java.lang.IncompatibleClassChangeError: java.util.zip.ZipFile java.lang.IncompatibleClassChangeError: java.util.zip.ZipOutputStream java.lang.IncompatibleClassChangeError: java.util.zip.DeflaterEngine java.lang.IncompatibleClassChangeError: java.util.zip.DeflaterPending java.lang.InternalError: unexpected exception during linking: java.lang.ClassNotFoundException: java.util.zip.DeflaterHuffman java.lang.InternalError: unexpected exception during linking: java.lang.ClassNotFoundException: java.util.zip.DeflaterHuffman java.lang.IncompatibleClassChangeError: java.util.zip.ZipInputStream java.lang.IncompatibleClassChangeError: java.util.zip.GZIPInputStream java.lang.IncompatibleClassChangeError: java.util.zip.GZIPOutputStream java.lang.IncompatibleClassChangeError: java.util.LinkedHashMap$LinkedHashEntry java.lang.IncompatibleClassChangeError: java.util.TreeMap$Node java.lang.VerifyError: verification failed at PC 54 in java.net.InetAddress:checkCacheFor((Ljava.lang.String;)[Ljava.net.InetAddress;): array required java.lang.VerifyError: verification failed at PC 82 in java.net.URLDecoder:decode((Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;): array type expected java.lang.VerifyError: verification failed at PC 7 in java.security.Policy:<clinit>(()V): incompatible type on stack java.lang.VerifyError: verification failed at PC 47 in java.security.KeyPairGenerator:getInstance((Ljava.lang.String;Ljava.lang.String;Ljava.security.Provider;)Ljava.security.KeyPairGenerator;): incompatible type on stack java.lang.VerifyError: verification failed at PC 47 in java.security.Signature:getInstance((Ljava.lang.String;Ljava.lang.String;Ljava.security.Provider;)Ljava.security.Signature;): incompatible type on stack java.lang.VerifyError: verification failed at PC 37 in java.security.Identity:hashCode(()I): incompatible type on stack java.lang.VerifyError: verification failed at PC 321 in java.text.DateFormat:computeInstance((IILjava.util.Locale;ZZ)Ljava.text.DateFormat;): incompatible return type java.lang.VerifyError: verification failed at PC 58 in java.text.NumberFormat:computeInstance((Ljava.util.Locale;Ljava.lang.String;Ljava.lang.String;)Ljava.text.NumberFormat;): incompatible return type java.lang.VerifyError: verification failed at PC 961 in java.text.SimpleDateFormat:parse((Ljava.lang.String;Ljava.text.ParsePosition;)Ljava.util.Date;): array type expected java.lang.VerifyError: verification failed at PC 163 in java.text.AttributedString:<init>((Ljava.text.AttributedCharacterIterator;II[Ljava.text.AttributedCharacterIterator$Attribute;)V): incompatible type on stack java.lang.VerifyError: verification failed at PC 20 in java.text.BreakIterator:getCharacterInstance((Ljava.util.Locale;)Ljava.text.BreakIterator;): incompatible return type java.lang.VerifyError: verification failed at PC 28 in java.text.Collator:getInstance((Ljava.util.Locale;)Ljava.text.Collator;): incompatible return type java.lang.VerifyError: verification failed at PC 18 in java.awt.image.ColorModel:getRGBdefault(()Ljava.awt.image.ColorModel;): incompatible return type java.lang.InternalError: unexpected exception during linking: java.lang.NullPointerException java.lang.VerifyError: verification failed at PC 34 in java.awt.Component:getGraphicsConfigurationImpl(()Ljava.awt.GraphicsConfiguration;): incompatible type on stack java.lang.IncompatibleClassChangeError: java.awt.Container$GfxPaintVisitor java.lang.IncompatibleClassChangeError: java.awt.Container$GfxPrintVisitor java.lang.IncompatibleClassChangeError: java.awt.Container$GfxPaintAllVisitor java.lang.IncompatibleClassChangeError: java.awt.Container$GfxPrintAllVisitor java.lang.VerifyError: verification failed at PC 2 in java.awt.geom.RectangularShape:setFrame((Ljava.awt.geom.Rectangle2D;)V): incompatible type on stack java.lang.InternalError: unexpected exception during linking: java.lang.NullPointerException java.lang.VerifyError: verification failed at PC 2 in java.awt.Window:<init>((Ljava.awt.Frame;)V): incompatible type on stack java.lang.VerifyError: verification failed at PC 12 in java.beans.beancontext.BeanContextChildSupport:<init>((Ljava.beans.beancontext.BeanContextChild;)V): incompatible type on stack java.lang.VerifyError: verification failed at PC 7 in java.rmi.server.RMISocketFactory:<clinit>(()V): incompatible type on stack java.lang.VerifyError: verification failed at PC 20 in java.rmi.server.ObjID:<init>(()V): incompatible type on stack java.lang.LinkageError: class gnu.java.io.decode.Decoder already loaded java.lang.LinkageError: class gnu.java.io.decode.Decoder already loaded java.lang.LinkageError: class gnu.java.io.decode.Decoder already loaded java.lang.LinkageError: class gnu.java.io.decode.Decoder already loaded java.lang.LinkageError: class gnu.java.io.decode.Decoder already loaded java.lang.LinkageError: class gnu.java.io.encode.Encoder already loaded java.lang.LinkageError: class gnu.java.io.encode.Encoder already loaded java.lang.LinkageError: class gnu.java.io.encode.Encoder already loaded java.lang.LinkageError: class gnu.java.io.encode.Encoder already loaded java.lang.LinkageError: class gnu.java.io.encode.Encoder already loaded java.lang.InternalError: unexpected exception during linking: java.lang.NullPointerException java.lang.InternalError: unexpected exception during linking: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: unexpected exception during linking: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkToggleButtonPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.LinkageError: class gnu.java.awt.peer.gtk.GtkGenericPeer already loaded java.lang.LinkageError: class gnu.java.awt.peer.gtk.GtkGenericPeer already loaded java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkContainerPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkContainerPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkContainerPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkContainerPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkContainerPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkToggleButtonPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkContainerPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class null: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkTextComponentPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: Unexpected exception while defining class gnu.java.awt.peer.gtk.GtkTextComponentPeer: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.InternalError: unexpected exception during linking: java.lang.ClassNotFoundException: gnu.java.awt.peer.gtk.GtkComponentPeer java.lang.VerifyError: verification failed at PC 43 in gnu.java.rmi.server.UnicastConnectionManager:getInstance((Ljava.lang.String;ILjava.rmi.server.RMIClientSocketFactory;)Lgnu.java.rmi.server.UnicastConnectionManager;): incompatible type on stack java.lang.InternalError: unexpected exception during linking: java.lang.NullPointerException java.lang.InternalError: unexpected exception during linking: java.lang.NullPointerException