emanuelpeg / strongtalk

Automatically exported from code.google.com/p/strongtalk
0 stars 0 forks source link

another VM crash (compiler related) #30

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago

"Random test" crashes (with an access violation) deterministically
when the compiler is enabled. A problem with floats ?

Original issue reported on code.google.com by prunedt...@gmail.com on 25 Mar 2007 at 11:07

GoogleCodeExporter commented 9 years ago
Update: it doesn't crash when the C++ code is compiled without optimisations.

Original comment by prunedt...@gmail.com on 19 Apr 2007 at 8:50

GoogleCodeExporter commented 9 years ago
Fixed.

compiler optimisation has more aggressive allocation, and uses the persistence 
of EBX
accross pascal function calls. however some primitives don't abide to this
convention. This lead to crashes in the strongtalk compiler: primitive calls for
constant propagation corrupted local variables. I added temporary EBX backup in
primitive_desc::eval and a warning message for primitives that change EBX. It 
would
probably be judicious to make sure all primitives preserve EBX. 64bit floating 
point
(doubleOop) arithmetic primitives are a good exemple of primitives that 
triggered the
bug.

On a sidenote, a similar issue arises with call_delta (the entry point into
strongtalk code). The old assembly code didn't save ESI/EDI (required by C ABI) 
- The
catch here is that saving these registers on stack will crash 
scavenge/mark-sweep on
entry frames. A temporary solution is to ignore the entry frames stacks 
(there's no
oops in them anyway)

Original comment by prunedt...@gmail.com on 30 Apr 2007 at 7:28