Skip to content
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

Display correct line numbers for multiple .text sections #63

Merged
merged 4 commits into from
May 21, 2024

Conversation

AetiasHax
Copy link
Contributor

Object files with multiple .text sections currently display incorrect line numbers. This is because we are storing line info by mapping an address to a line number, not taking section index into consideration.

DWARF 2.0+ supports multiple .text sections by defining multiple "sequences", where each sequence starts from address 0 and correlates to one .text section. I've implemented support for this, by iterating to the next code section whenever a sequence ends. This means the line info is now mapping section index, to address, to line number.

From what I've read, DWARF does not define how it correlates a sequence to a section. I've made an assumption and believe that the first sequence should correlate to the first code section, and so on.

I haven't tested this on all the architectures that objdiff supports, but I'd be happy to do so if anyone can provide some object files.

AetiasHax and others added 3 commits May 20, 2024 20:50
# Conflicts:
#	objdiff-core/src/arch/x86.rs
- Properly handles multiple sections
  in DWARF 1
- line_info moved into ObjSection
- DWARF 2 parser no longer errors with
  no .text section
- Both parsers properly skip empty
  sections
@encounter
Copy link
Owner

Thanks for this! I committed a few changes that cleans things up and fixes the issue for DWARF 1 as well. This code is a little tricky when dealing with objects that are either 1. missing a .text section but still have a .line section or 2. have empty .text section(s). So my changes are aimed at making sure the logic is solid in those cases. Could you retest with your DWARF 2 objects?

@encounter
Copy link
Owner

I'm gonna go ahead and merge this for a 2.0.0 alpha release.

@encounter encounter merged commit f5b5a61 into encounter:main May 21, 2024
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants