These works for me, both Linux and Windows. 2006/11/22, Vladimir Ivanov <[EMAIL PROTECTED]>:
Is it a reason of classlib test faulires on the DRLVM? Test org.apache.harmony.luni.tests.java.lang.ClassLoaderTest FAILED Test org.apache.harmony.luni.tests.java.lang.ClassTest FAILEDThanks, Vladimir On 11/22/06, Alexey Varlamov <[EMAIL PROTECTED]> wrote: > > Yep, I did it again - commit without explaining/discussing enough... > > OK, on the matter now : the root cause of failed verification is > classloading failure, see the excerpt from trace below: > ----------------------------------------- > [0x590] classloader.loading : StartLoading class > org/eclipse/core/runtime/IStatus with loader 033C6460 > [0x590] class : collision error: class > org/eclipse/core/runtime/IStatus is defined second time > [0x590] class : Loading of org/eclipse/core/runtime/IStatus class > failed due to java/lang/LinkageError > [0x590] classloader : Failed loading class > org/eclipse/core/runtime/IStatus with loader 04278B78 > [0x590] root : vf_debug: verifying class > org/eclipse/core/internal/registry/RegistryProperties (method > getContextProperty(Ljava/lang/String;)Ljava/lang/String;) couldn't > load class "org/eclipse/core/runtime/IStatus" > [0x590] root : vf_debug: VerifyError: org/eclipse/core/runtime/IStatus > ----------------------------------------- > > Why this happens? The VM already have this class loaded and some > loader Ld is registered as defining loader for it. This registration > is basically done on VM side, in native loader structure, see also > discussion [1]. We had parallel registration mechanism on Java side, > in kernel j.l.ClassLoader, which actually remained from experimental > "Java class registry" implementation (which become obsolete after > [1]). It worked fine for classical delegation mechanism, but can be > easily bypassed if Ld overrides loadClass() method from scratch, > without referering to standard implementation super.loadClass(). You > can check it is the case here, Ld is > org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader. > So the key change is the following: > > protected final Class<?> findLoadedClass(String name) { > - return initiatedClasses.get(name); > + return VMClassRegistry.findLoadedClass(name, this); > } > > And remained part of commit is trivial clean up. > > Well, this sutiation raises several issues: > 1) Seems nobody tried running Eclipse since mid-October (after > resolving HARMONY-1688). There were some discussions around automated > Eclipse scenarios, AFAIR there are even some JIRA hanging for a while; > shouldn't we > revive this direction and integrate them in CC? > 2) Code for handling initiating loaders needs closer inspection, I > found some suspecting places. E.g. why CLassLoader::LookupClass() does > not look in a table of initiated classes, do we behave rigth in > regards to array classes, etc. > I recall Eugene Ostrovsky mentioned about some tests he did > inestigating RI behaviour, it would be nice if we have them in SVN. > > [1] http://article.gmane.org/gmane.comp.java.harmony.devel/15269 > > -- > Alexey > > > 2006/11/22, Geir Magnusson Jr. <[EMAIL PROTECTED]>: > > More than that, things just don't break by themselves. > > > > Alexey, please explain why you think this happened... > > > > geir > > > > > > > > Nathan Beyer wrote: > > > Yeah, I'd like to hear about what's going on here. The classloader > > > pieces of DRLVM are not quite obvious, at least not to me, from my > > > cursory look. > > > > > > -Nathan > > > > > > On 11/21/06, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote: > > >> Hang on - where did this come from and why? I'd like to understand > this > > >> before we accept it. > > >> > > >> geir > > >> > > >> > > >> [EMAIL PROTECTED] wrote: > > >> > Author: varlax > > >> > Date: Tue Nov 21 00:57:13 2006 > > >> > New Revision: 477583 > > >> > > > >> > URL: http://svn.apache.org/viewvc?view=rev&rev=477583 > > >> > Log: > > >> > Fixed Eclipse launching. The reason was in dangling remainders of > > >> Java class registry. > > >> > Tested on SUSE9, Win2003 > > >> > > > >> > Modified: > > >> > > > >> > harmony/enhanced/drlvm/trunk/vm/tests/kernel/java/lang/ClassLoaderTest.java > > >> > > >> > > > >> > harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java > > >> > > >> > > > >> > Modified: > > >> > harmony/enhanced/drlvm/trunk/vm/tests/kernel/java/lang/ClassLoaderTest.java > > >> > > >> > URL: > > >> > http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/kernel/java/lang/ClassLoaderTest.java?view=diff&rev=477583&r1=477582&r2=477583 > > >> > > >> > > > >> > ============================================================================== > > >> > > >> > --- > > >> > harmony/enhanced/drlvm/trunk/vm/tests/kernel/java/lang/ClassLoaderTest.java > > >> (original) > > >> > +++ > > >> > harmony/enhanced/drlvm/trunk/vm/tests/kernel/java/lang/ClassLoaderTest.java > > >> Tue Nov 21 00:57:13 2006 > > >> > @@ -706,9 +706,9 @@ > > >> > } > > >> > > > >> > /** > > >> > - * > > >> > + * FIXME invalid test: only VM can initiate loading class > > >> > */ > > >> > - public void test_findLoadedClass_Str_2() { > > >> > + public void te_st_findLoadedClass_Str_2() { > > >> > // TEST CASE #4: > > >> > try { > > >> > Class c = > > >> Class.forName("java.lang.ClassLoaderTest$7LCL", true, > > >> > @@ -915,7 +915,8 @@ > > >> > return 104; > > >> > } > > >> > } > > >> > - new a3().main(new String[] { "" }); > > >> > + // FIXME invalid test: only VM can initiate loading class > > >> > + //new a3().main(new String[] { "" }); > > >> > } > > >> > > > >> > > > >> > > > >> > Modified: > > >> > harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java > > >> > > >> > URL: > > >> > http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java?view=diff&rev=477583&r1=477582&r2=477583 > > >> > > >> > > > >> > ============================================================================== > > >> > > >> > --- > > >> > harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java > > >> (original) > > >> > +++ > > >> > harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java > > >> Tue Nov 21 00:57:13 2006 > > >> > @@ -107,12 +107,6 @@ > > >> > private final HashMap<String, Package> definedPackages; > > >> > > > >> > /** > > >> > - * The following mapping is used <String binaryClassName, > Class > > >> clazz>, where binaryClassName - class name, > > >> > - * clazz - corresponding class. > > >> > - */ > > >> > - private Hashtable<String, Class<?>> initiatedClasses = new > > >> Hashtable<String, Class<?>>(); > > >> > - > > >> > - /** > > >> > * package private to access from the java.lang.Class class. > > >> The following > > >> > * mapping is used <String name, Certificate[] certificates>, > > >> where name - > > >> > * the name of a package, certificates - array of > certificates. > > >> > @@ -461,7 +455,7 @@ > > >> > * @com.intel.drl.spec_ref > > >> > */ > > >> > protected final Class<?> findLoadedClass(String name) { > > >> > - return initiatedClasses.get(name); > > >> > + return VMClassRegistry.findLoadedClass(name, this); > > >> > } > > >> > > > >> > /** > > >> > @@ -547,7 +541,6 @@ > > >> > if (resolve) { > > >> > resolveClass(clazz); > > >> > } > > >> > - initiatedClasses.put(clazz.getName(), clazz); > > >> > return clazz; > > >> > } > > >> > > > >> > > > >> > > > >> > > > >> > > >
