Alpha VM on Solaris UltraSPARC?

Lee Salzman lsalzman1 at cox.net
Fri Mar 11 15:43:44 PST 2005


The problem there is dispatchID is a 64 bit integer. However, GCC 
generates a particular 64 bit load store requires dispatchID to be 
aligned to an 8 byte address, which the Slate heap can't guarentee. You 
just need to replace the dispatchID stores with some sort of byte-wise 
store that GCC won't optimize into the aligned store.

Lee

Nick Forde wrote:

> I'm having some trouble running the slate alpha vm and bootstrap image
> on a Sun workstation - it core dumps loading the image. Should the vm
> run on this architecture?
>
> I've appended some debug information in case this is of use.
>
> Regards,
>
> Nick.
>
>
> $ uname -a
> SunOS 5.8 Generic_108528-29 sun4u sparc SUNW,Sun-Fire-880
>
> (gdb) where
> #0  0x0001d20c in ObjectPointer_dispatchTo_arity_above_ (name=582768, 
> arguments=0xc8148, n=1, resendMethod=0) at ../../../../../vm.c:2920
> #1  0x0001ddb4 in PSInterpreter_send_to_through_arity_withOptionals_ 
> (i=0xc8174, selector=582768, args=0xc8148, dispatchers=0xc8148, n=1, 
> opts=0x0)
>     at ../../../../../vm.c:3128
> #2  0x00025574 in PSInterpreter_sendMessage_withOptionals_ (i=0xc8174, 
> n=1, opts=0x0) at ../../../../../vm.c:1045
> #3  0x0001f4dc in PSInterpreter_interpret (i=0xc8174) at 
> ../../../../../vm.c:3495
> #4  0x00014600 in slateMain (argc=2, argv=0xffbef6fc) at ../boot.c:140
> #5  0x00016e00 in main (argc=2, argv=0xffbef6fc) at main.c:5
>
> (gdb) list
> 2915                else
> 2916                  obj = ObjectPointer_pointer(arg);
> 2917                map = obj -> map;
> 2918                if (!(map -> dispatchID == currentDispatchID))
> 2919                {
> 2920                  map -> dispatchID = currentDispatchID;
> 2921                  map -> visitedPositions = 0;
> 2922                }
> 2923                if (((map -> visitedPositions & (1 << index)) == 
> 0) && (((map -> flags & MapFlagRestrictDelegation) == 0) || 
> (restricted < 0)))
> 2924                {
>
> (gdb) p *obj
> $5 = {header = {isMarked = 1, idHash = 299, objectSize = 5, 
> objectFormat = 0}, map = 0xd1c14}
>
> (gdb) p *map
> $2 = {header = {isMarked = 1, idHash = 14101, objectSize = 9, 
> objectFormat = 2}, map = 0xd42bc, traits = 265112, flags = 1, 
> representative = 264808,
>   numDelegates = 7, numSlots = 1, slotTable = 0xd1c48, roleTable = 
> 0xd1c78, visitedPositions = 0, dispatchID = 0}
>
> (gdb) p map->dispatchID
> $1 = 0
>
> (gdb) p currentDispatchID
> $2 = 1
>
>




More information about the Slate mailing list