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
The crash is specific to the x86 platform running 64 bit with compressed references. The crash occurs in internalSendExceptionConstructor and analysis will find that one of the two class pointers has been sign extended. The incorrect value can be found in J9VMThread.floatTemp1 which is the storage location used to pass the value from jitThrowClassCastException to impl_jitClassCastException. The two classes are passed from the jit'd method body to jitThrowClassCastException on the stack. The variable class is passed with a push reg instruction while the constant class is passed with a push imm32 instruction. Unfortunately the latter sign extends the data, so if the constant class is allocated at an address greater or equal to 2GB we get an incorrect value on the stack.
An alternative encoding is used when running 64 bit non-compressed references which uses an 8 byte data snippet to hold the constant class pointer.
The text was updated successfully, but these errors were encountered:
The crash is specific to the x86 platform running 64 bit with compressed references. The crash occurs in internalSendExceptionConstructor and analysis will find that one of the two class pointers has been sign extended. The incorrect value can be found in J9VMThread.floatTemp1 which is the storage location used to pass the value from jitThrowClassCastException to impl_jitClassCastException. The two classes are passed from the jit'd method body to jitThrowClassCastException on the stack. The variable class is passed with a
push reg
instruction while the constant class is passed with apush imm32
instruction. Unfortunately the latter sign extends the data, so if the constant class is allocated at an address greater or equal to 2GB we get an incorrect value on the stack.An alternative encoding is used when running 64 bit non-compressed references which uses an 8 byte data snippet to hold the constant class pointer.
The text was updated successfully, but these errors were encountered: