interpreter questions regarding memory model...Squeak for BeOS

Serg Koren Serg at VisualNewt.com
Sat Jan 24 22:37:57 UTC 1998


Hi Andreas,
Thanks for the response.  I'm using Metrowerks Codewarrior...I'll check 
to see if I can force signs off.  If the case is, that all the address math is
relative (which it would make sense for it to be so as you say), then I still
need to figure out why I'm getting an exception on incCompBody() while 
doing an initial GC. The 'realHeader' variable is blowing out where 
fwdBlock2 = 2177852.  Oh well guess I'll have to do more digging.

Thank you much for the response.
S

---- On Sat Jan 24 23:19:07 1998, Andreas Raab said ------

>Serg,
>
>> In my attempts at porting Squeak to BeOS I've run into a problem/issue 
>> that you may be able to shed some light on.  During the course of my 
>> initial attempts to read in the Squeak image into the interpreter, I got a 
>> PPC exception.  Looking into it I've discovered that the initial malloc 
>> was succeeding but the conversion of the unsigned char* to int was 
>failing due 
>> to BeOS's using 32bit addresses, with application memory starting 
>> at 0x80000000...the type conversion was failing with a negative value, 
>> which messed up all the succeeding memory calculations.
>
>Actually, this should not be a problem. Even if the memory address is
>negative, the computations should be done correctly (since number1 +
>number2 will be greater than number1 even if it is negative). I'd think
>that there should be some way to turn the sign check off, so that all is
>running correctly.
>
>> 1) Shouldn't the typecast be uint?  Memory addresses should never 
>be negative.
>
>You're right. Unfortunately, this would force a number of warnings at
>other locations (which don't matter as long as you can turn the sign
>check off).
>
>> 2) Under BeOS I'll probably have to use:
>> uint32 memStart = (uint32) memory;
>> What else will this affect off the top of your head(s) so I don't have 
>> to debug line by line ;-)
>
>Provided that your C compiler _does_ sign checking you'll run into a
>number of problems. All of the memory stuff is done in relation to
>memStart so the best way is probably to assure your C compiler to forget
>about sign checking. 
>
>> 3) I'm assuming the Smalltalk->c conversion code needs to take into 
>account 
>> 32 bit addresses.  Any hints on what I need to change?  And if I change 
>> this, this will break the portability issues dealing with the 
>inner interpreter; 
>> how best should I handle this?  Is this something you should be 
>worried about 
>> in your versions?
>
>As long as everything is done with the right data types (see those checks
>in the main() function of sqMacWindow.c, sqXWindow.c, and sqWin32Window.c)
>everything should work as expected. These basic assumptions are:
>* sizeof(int) = 4 
>* sizeof(double) = 8
>* sizeof(time_t) = 4
>
>Hope this helps,
>  Andreas
>
>-- 
>Linear algebra is your friend - Trigonometry is your enemy.
>+===== Andreas Raab ============= (raab at isg.cs.uni-magdeburg.de) =====+
>I Department of Simulation and Graphics      Phone: +49 391 671 8065  I
>I University of Magdeburg, Germany           Fax:   +49 391 671 1164  I
>+=============< http://isgwww.cs.uni-magdeburg.de/~raab >=============+
>

-------------------------------------------------
VisualNewt Software: http://www.VisualNewt.com/
Maker of Newt'sPaper(tm) the Premier Newton(R)
MessagePad(tm) News Reader.

-----------Sent by BeOS--------------------------





More information about the Squeak-dev mailing list