-
Notifications
You must be signed in to change notification settings - Fork 6.1k
8360219: [AIX] assert(locals_base >= l2) failed: bad placement #26643
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
base: master
Are you sure you want to change the base?
8360219: [AIX] assert(locals_base >= l2) failed: bad placement #26643
Conversation
👋 Welcome back rrich! A progress list of the required criteria for merging this PR into |
@reinrich This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 17 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
…nt_ijava_frame_abi.
02920b3
to
dbff110
Compare
It seems like relaxing the assert would allow us to silently overwrite part of a frame::top_ijava_frame_abi, which is only harmless if we are guaranteed to always treat that area as the smaller "parent" ABI past this point. Is there any way to determine if the ABI frame flavor is "top" or "parent" without adding something like a new "abi_frame_type" slot? |
It is harmless. The interpreted and nmethod calling conventions only use the smaller frame::java_abi (alias for parent_ijava_frame_abi). Calling the VM or other native code requires the full ABI.
I would not be aware of any way to determine the ABI type easily. I'm sure many people were looking for it since bugs caused by using the wrong type are painful. Even with a dedicated slot in dbg builds it would be hard to keep the correct type since there are many places where frames get resized. |
Thanks @reinrich . It looks good. |
Weaken assertion because it is too strict. While the interpreted caller sometimes has a
frame::top_ijava_frame_abi
it is sufficient to assert that the locals don't overlap with the smallerframe::parent_ijava_frame_abi
because only that's reserved for non-top frames (akaparent
frames).Tested on AIX and Linux ppc: Tier 1-4 of hotspot and jdk. All of langtools and jaxp. Renaissance Suite and SAP specific tests.
Details:
It cannot be assumed that the interpreted caller of the bottom interpreted frame (from a compiled deoptee frame) has a large
frame::top_ijava_frame_abi
. In an ordinary i2c call it would keep itsframe::top_ijava_frame_abi
(seecall_from_interpreter
) but when it was thawed then it'll have only aframe::java_abi
(alias for parent_ijava_frame_abi).There are diagrams commenting
ThawBase::new_stack_frame()
that show this.It's not easy to see it in the code though. Note that the frame size is calculated relative to hf's unextended_sp which includes frame::metadata_words which is the size of
java_abi
.Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/26643/head:pull/26643
$ git checkout pull/26643
Update a local copy of the PR:
$ git checkout pull/26643
$ git pull https://git.openjdk.org/jdk.git pull/26643/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 26643
View PR using the GUI difftool:
$ git pr show -t 26643
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/26643.diff
Using Webrev
Link to Webrev Comment