Incorrect Java methods called from CNI
Andrew Haley
aph@redhat.com
Tue May 11 20:27:00 GMT 2004
Bryce McKinlay writes:
> Dave Menendez wrote:
>
> > movl (%eax), %edx
> > addl 56,ドル %edx
> > movl -12(%ebp), %eax
> > movl %eax, (%esp)
> > movl (%edx), %eax
> > call *%eax
> >
> >
> >
> Looks like this is the call in question. Its offseting the vtable
> pointer by 56 bytes.
>
> Heres the vtable, run through c++filt, cleaned up a bit, and with byte
> offsets added:
>
> -8 .long 0
> -4 .long 0
> 0 .long Classification.class$
> 4 .long -37748735
> 8 .long java.lang.Object.finalize()
> 12 .long hashCode()
> 16 .long equals(java.lang.Object)
> 20 .long toString()
> 24 .long clone()
> 28 .long addClassificationListener(ClassificationListener)
> 32 .long fireClassificationChange()
> 36 .long getNumberOfListeners()
> 40 .long isImmutable()
> 44 .long removeAllListeners()
> 48 .long removeClassificationListener(ClassificationListener)
> 52 .long getClassification()
> 56 .long add(Marking)
> 60 .long clear()
> 64 .long clearMarkings()
> 68 .long combine(Classification)
> 72 .long compareTo(Classification)
> 76 .long contains(java.lang.Object)
>
> So, its obviously going to call add() - the offset to call clear()
> should be 60. For some reason, the C++ compiler's idea of where the
> method is in the vtable doesn't match the Java compiler's. Can you post
> the relavent portions of the .h file for this class, and the method
> declarations from the Java source code (not the code itself, just the
> name & access modifiers etc)?
Another possibility is that the superclass .h file for
AbstractClassificationModel is not correct. g++ -save-temps will tell
us, one way or another.
Andrew.
More information about the Java
mailing list