Open GoogleCodeExporter opened 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
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
Original issue reported on code.google.com by
prunedt...@gmail.com
on 25 Mar 2007 at 11:07