Fwd: Kaffe runs(!) under VC++

Daniel.Veillard at w3.org Daniel.Veillard at w3.org
Sun Nov 2 10:47:53 PST 1997


[Repost after bounce, sender : Greg Stark <gsstark at mit.edu>]

Michael Gesundheit <mikeg at rocketmail.com> writes:
> java_lang_System_setOut0(_P_[0].p){}
> 
> This is an attempt to pass a jref (void *) as a
> parameter. The value which was passed is 0 even though
> the pointer is there !!. 
> 
> I don't have a clear explanation but I know the 
> following:
> 
> I added a local
> 
> void *vp = _P_[0].p;
> 
> and passed vp as a parameter. This works fine. Now the
> parameter is passed as expected.
> I did the same to all the functions in this file and
> kaffe runs!!

That sounds very broken, if you can narrow this down to a simple ANSI C file
that demonstrates this behaviour i suggest reporting it as a bug to Microsoft.
Of course you wouldn't get a bug fix unless you paid them for support. (Some
might suggest just switching to djgpp or gcc and returning VC++ for the money
you paid for it instead.)

I suspect this has to do with the broken i386/DOS memory models which use
various sized pointers memory segments. I know relatively little about this,
but i imagine putting it in a void* forces it to use a 32 bit pointer instead
of a 16 bit pointer or something like that.

> I did expirimented a little with union on Solaris and
> PC and found the following:
> 
> In PC when I write to any of the union elements the
> value appears in all of them in the least significant
> 4 bytes. (I wrote a pointer).
> On a sparc system if I wrote to a long long the value
> appear in the UPPER 4 bytes!!. 

This is called byte-order. it's exactly what you should expect. Kaffe has
presumably dealt with any byte-order dependencies since it already works under
chips of both varieties.

greg






More information about the kaffe mailing list