Problems with latest VM
Lee Salzman
lsalzman1 at cox.net
Sun Aug 8 11:21:08 PDT 2004
Try turning off global optimization in the function PSObjectHeap_pinCards and see
if things work. Please let us know ASAP!
Lee
On Sun, Aug 08, 2004 at 02:39:11PM +0200, Jaco van der Merwe wrote:
> Hi all,
>
> I've just downloaded the latest VM and slate sources. I compiled the VM with
> Visual C++. I made both a debug and a release build. The debug build VM
> seems to work (at least it loads the image without problems). However, the
> release build fails fairly early while loading the image with an unhandled
> signal message, after which the VM exits.
>
> The fact that the debug and release builds behave differently still
> indicates to me that the VM code accesses memory somewhere that is
> uninitialised, or not intended to be accessed. Therefore, although the debug
> build seems to run, it may be hiding the problem or just postponing it to
> many instructions later. I'm not sure how to proceed with debugging the
> unhandled signal case mostly because I don't understand the underlying
> mechanisms used in the vm. I'll appreciate it if someone can explain it to
> me. Then, maybe I'll be able to debug this case.
>
> Also, when compiling the sources the compiler generates the following
> warning which seems suspicious to me:
>
> vm.c(3021) : warning C4047: '=' : 'ObjectPointer *' differs in levels of
> indirection from 'ObjectPointer (*)[]'
>
> The offending line of code is as follows:
>
> vars = &lexicalContext->variables;
>
> where vars and lexicalContext are defined as follows:
>
> ObjectPointer * vars;
> struct LexicalContext * lexicalContext;
>
> and LexicalContext is as follows:
>
> struct LexicalContext {
> struct ObjectHeader header;
> struct Map * map;
> ObjectPointer traits;
> ObjectPointer unwindBlock;
> ObjectPointer variables[0];
> };
>
> This does not seem correct to me. Shouldn't the offending line of code read
> as follows?
>
> vars = lexicalContext->variables;
>
> Also, the following suspicious warning still remains. This has previously
> been reported by me and other people.
>
> file.c(136) : warning C4146: unary minus operator applied to unsigned
> type, result still unsigned
>
> The offending line of code is:
>
> PSObjectHeap_adjustAllOopsBy_ (CurrentMemory, - (unsigned)
> CurrentMemory -> memory);
>
> where the function signature is:
>
> unsigned long int PSObjectHeap_adjustAllOopsBy_(struct ObjectHeap * h,
> unsigned long int shiftAmountInBytes)
>
> Why give an explicit negative argument to a formal argument that is
> unsigned?
>
> Regards
>
> Jaco van der Merwe
>
More information about the Slate
mailing list