Bug#432541: eclipse-cdt FTBFS with gcj-4.2

Andrew Haley aph at redhat.com
Tue Mar 4 14:55:36 UTC 2008


Andrew Haley wrote:
> Michael Koch wrote:
>> On Sun, Mar 02, 2008 at 12:01:03PM +0000, Andrew Haley wrote:
>>> Michael Koch wrote:
>>>> On Sun, Mar 02, 2008 at 10:35:28AM +0000, Andrew Haley wrote:
>>>>> And what was the reason?  I need to know.
>>>> !ENTRY org.eclipse.osgi 4 0 2008-03-02 12:38:50.196
>>>> !MESSAGE Application error
>>>> !STACK 1
>>>> java.lang.ClassNotFoundException: org.eclipse.core.runtime.Plugin
>>>>    at 
>>>> org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:402) 
>>>>
>>>>    at 
>>>> org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:347) 
>>>>
>>>> make: *** [build-stamp] Fehler 13
>>>>
>>>> The only small strange thing is that org.eclipse.core.runtime.Plugin 
>>>> and
>>>> org.eclipse.core.runtime.Platform are in the same Jar. This must be 
>>>> some
>>>> OSGi issue. At least I know now where to start debugging.
>>> Oh, right, so you *don't* actually know what the cause of this is.  
>>> Me either, but
>>> I'm debugging it at the moment.
>>
>> Yeah, yesterday I thought it was just a missing jar file. Today I took a
>> closer look at at it...
>>
>>> gcj should not distinguish between natively compiled code and bytecode.
>>> The fact that it makes a difference must be a bug.
>>
>> Sounds like it. Can I somehow help? I know this is a hard case and
>> currently cant think of a simpler testcase.
> 
> OK, I've found it.  The ClassNotFoundException is thrown from a security 
> check
> in libgcj.  We are calling Method m1 from method m0, and m1's class loader
> is different from m0's class loader.  We have to check that for every arg
> in m1, the actual type is the same in both m1.loader and m0.loader.
> 
> The method in question is 
> org.eclipse.core.runtime.Platform.getPlugin(String), which returns an 
> instance of org.eclipse.core.runtime.Plugin.  It gets this
> by calling org.eclipse.core.internal.plugins.PluginDescriptor.getPlugin().

To be clear: the two class loaders being checked are those of

  interface org.eclipse.core.runtime.IPluginDescriptor

and

  class org.eclipse.core.runtime.Platform

Tromey: are you quite sure we should be checking the class loader
of the interface type instead of the class loader of the method we're
invoking?

Andrew.





More information about the pkg-java-maintainers mailing list