Status fields:
creation_ts: | 2010-10-18 19:56 |
---|---|
component: | jit |
version: | default branch |
rep_platform: | All |
op_sys: | All |
bug_status: | RESOLVED |
resolution: | FIXED |
reporter: | stefan@complang.tuwien.ac.at |
This affects mostly i386 and x86_64. For code patching to be (mostly) safe, two conditions must hold: 1. Instructions lengths of the patched-out and the new instruction must match. 2. The instruction must not cross a cache line boundary. The first condition is probably not violated anymore, but the second most certainly is.
Item 2 above should say: “The changed portion of an instruction must not cross a cache line boundary.” There are basically only two forms of patching: * replacing fences or barriers with NOPs – in this case the entire instruction is changed. * changing a 32 bit displacement inside the instruction – that’s what the rewording above aims at. This should be all done now for x86_64: http://mips.complang.tuwien.ac.at/hg/cacao/rev/80589ff39d14
It would need fixing on i386 as well, but I'll mark it resolved anyway as I don't care that much about (and passionately hate) i386.
Note to myself: I formulated the above criteria after reading this presentation: http://www.cgo.org/cgo2006/html/progslides/session2_talk3_maier.pdf ("Experiences with Multi-threading and Dynamic Class Loading in a Java Just-In-Time Compiler")