-
Notifications
You must be signed in to change notification settings - Fork 396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix a problem caused by #5653 #5717
Comments
Can't say I'm familiar with MemoryReference as I don't see how the fix doesn't also end up with a memory reference But, one fix I see that uses only 2 MemoryReferences is having the encoding of the MemoryReference inserting an Another solution is changing the MemoryReference constructor to not generate the snippet and generate it when we actually encode the MemoryReference and know that its in use, but I don't think it's safe to do for this next delivery. |
Looking at the code in question, I'm not 100% sure if it's even valid to get there when performing a store to an unresolved symref. That code is only meant to handle stores known not to be volatile and I can't think of any situations where we would create a store to a symref that's unresolved but not marked as volatile. Regardless, as this is a ppc32-only problem and the code in question is undergoing a lot of changes right now as part of #5652 which would result in any fix being undone if that PR is merged, I'm not inclined to treat this issue as a priority myself at the moment. If this is an issue for the upcoming OpenJ9/IBM SDK releases, you can probably revert #5653 in the release branches used by those projects as a temporary fix. The optimization this was meant to fix had to be disabled later for other reasons and so isn't currently active (see #5684 and #5685). I'm not sure whether the @rmnattas The reason the old code would end up creating a MemoryReference with an index register and an offset is because |
Thanks @aviansie-ben for your response. It really helps! The issue does affect upcoming OpenJ9 and IBM SDK releases.
Interestingly, it's exactly what happens in this case: unresolved symbol is not a volatile (not sure why yet). |
As discussed in eclipse-omr#5717, this fix uses a temp memory reference that is not used in an instr. When the symbol is unresolved the MemRef constructor creates an UnresolvedDataSnippet that does not have an address in mainline code to return to. Which causes an assert to fail. Fix is safe to remove as the reverseStore path is temporarily disabled (eclipse-omr#5685) This reverts commit 9b282a1. Signed-off-by: Abdulrahman Alattas <rmnattas@gmail.com>
As discussed in eclipse-omr/omr#5717, this fix uses a temp memory reference that is not used in an instr. When the symbol is unresolved the MemRef constructor creates an UnresolvedDataSnippet that does not have an address in mainline code to return to. Which causes an assert to fail. Fix is safe to remove as the reverseStore path is temporarily disabled (eclipse-omr/omr#5685) This reverts commit 9b282a1. Signed-off-by: Abdulrahman Alattas <rmnattas@gmail.com>
As discussed in eclipse-omr/omr#5717, this fix uses a temp memory reference that is not used in an instr. When the symbol is unresolved the MemRef constructor creates an UnresolvedDataSnippet that does not have an address in mainline code to return to. Which causes an assert to fail. Fix is safe to remove as the reverseStore path is temporarily disabled (eclipse-omr/omr#5685) This reverts commit 9b282a1. Signed-off-by: Abdulrahman Alattas <rmnattas@gmail.com>
#5653 caused a problem on a 32-bit Power platform because it created a MemoryReference to unresolved symbol that was never used. The memory reference constructor created an UnresolvedData snippet that did not have an address in the code to return to. That caused an ASSERT. We need to find a safe fix asap.
@aviansie-ben @rmnattas @AlenBadel @pshipton
The text was updated successfully, but these errors were encountered: