You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 issue reported on code.google.com by
[email protected]
on 25 Mar 2007 at 11:07The text was updated successfully, but these errors were encountered: