OpenGL works! Was: Re: GCJ and OpenGL under Win32
Ranjit Mathew
rmathew@gmail.com
Wed Jan 12 07:14:00 GMT 2005
Sal wrote:
> Tom Tromey wrote:
>>>>Sal> I finally figured the problem out. I rebuilt the SWT OpenGL dll with
>>Sal> mingw32, for some reason Sun's VM loads mangled names in JNI dlls and
>>Sal> GCJ doesn't.
>>>>That is strange, since we have special Windows code in our JNI
>>implementation to do the mangling. That is, if you mean mangling like
>>appending "@NNN" to the function name. Can you describe more what is
>>going wrong? What you expected, what the symbol names are, and what
>>they are after you recompiled?
I *think* I know what the problem is - the arguments'
size is not being computed correctly - it does not
affect Linux, but it does Win32.
The relevant code in gcc/java/expr.c is:
for (tem = method_args; tem != NULL_TREE; tem = TREE_CHAIN (tem))
{
int arg_bits = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (tem)));
#ifdef PARM_BOUNDARY
arg_bits = (((arg_bits + PARM_BOUNDARY - 1) / PARM_BOUNDARY)
* PARM_BOUNDARY);
#endif
args_size += (arg_bits / BITS_PER_UNIT);
args = tree_cons (NULL_TREE, tem, args);
}
I had written this a long time ago (GCC 3.2/3.3-ish)
when it *did* work correctly. In the current mainline,
I see that for an integer argument (i686-pc-linux-gnu),
TYPE_SIZE is 32, but TYPE_SIZE_UNIT is 4.
Have TYPE_SIZE and TYPE_SIZE_UNIT reversed their meanings
in recent times or was the original code wrong to
begin with?
I was an utter newbie to GCC at that time, so I could
very well have been grossly mistaken:
http://gcc.gnu.org/ml/java/2002-11/msg00373.html
Thanks,
Ranjit.
--
Ranjit Mathew Email: rmathew AT gmail DOT com
Bangalore, INDIA. Web: http://ranjitmathew.hostingzero.com/
More information about the Java
mailing list