-
Notifications
You must be signed in to change notification settings - Fork 5.8k
8295646: Ignore zero pairs in address descriptors read by dwarf parser #10758
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
Conversation
👋 Welcome back xlinzheng! A progress list of the required criteria for merging this PR into |
@zhengxiaolinX The following label will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
Hi Xiaolin
That's interesting that the emitted format is not compliant with the official DWARF spec. I've encountered such inconsistencies at other places as well where GCC does something differently. Anyways, in that case, your fix makes sense to read the entire set by taking the We could additionally assert that the real terminating entry is indeed Thanks, |
@zhengxiaolinX 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 92 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. As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@chhagedorn) but any other Committer may sponsor as well. ➡️ To flag this PR as ready for integration with the above commit message, type |
Thanks for your time for reviewing! In fact, before submitting this PR I had one assertion to assert when the new |
Related tests still pass on the three platforms. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could additionally assert that the real terminating entry is indeed
(0, 0)
as specified in the spec. But you need to check if that is the case on RISC-V.Thanks for your time for reviewing! In fact, before submitting this PR I had one assertion to assert when the new
is_terminating_entry()
returns true, we must encounter a pair of zero. Though I removed it at last because I wanted to fully mirror what Binutils is doing. Of course, I think the assertion is reasonable and on RISC-V it is the same case that the real terminating entry is a pair of 0. So going to add that assertion back.
Yeah, I think so, too - thanks for adding it back!
I may assume this one could go, with the approval from the code author himself? :-) /integrate |
@zhengxiaolinX |
Given that the change is small, I think it's okay. I've run some additional testing which looked good. /sponsor |
Going to push as commit 2634eff.
Your commit was automatically rebased without conflicts. |
@chhagedorn @zhengxiaolinX Pushed as commit 2634eff. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
RISC-V generates debuginfo like
Our dwarf parser (gdb's dwarf parser before this April is as well [1], which encountered the same issue on RISC-V) uses
address == 0 && size == 0
inis_terminating_entry()
to detect terminations of an arange section, which will early terminate parsing RISC-V's debuginfo at an "apparent terminator" described in [1] so that the result would not look correct with tests failures. The_header._unit_length
is read but not used and it is the real length that can determine the section's end, so we can use it to get the end position of a section instead ofaddress == 0 && size == 0
checks to fix this issue.Also, the reason why
readelf
has no such issue is it also uses the same approach to determine the end position. [2]Tests added along with the dwarf parser patch are all tested and passed on x86_64, aarch64, and riscv64.
Running a tier1 sanity test now.
Thanks,
Xiaolin
[1] bminor/binutils-gdb@1a7c41d
[2] https://github.com/bminor/binutils-gdb/blob/fd320c4c29c9a1915d24a68a167a5fd6d2c27e60/binutils/dwarf.c#L7594
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk pull/10758/head:pull/10758
$ git checkout pull/10758
Update a local copy of the PR:
$ git checkout pull/10758
$ git pull https://git.openjdk.org/jdk pull/10758/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 10758
View PR using the GUI difftool:
$ git pr show -t 10758
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/10758.diff