Add Unit::new_with_abbreviations() to allow the user to implement custom abbreviations cache #677
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I noticed that, on one binary, iterating over
.debug_info
units was slow because it re-parsed the same abbreviations multiple times. Adding a cache sped it up from 1.5 seconds to 0.37 seconds.This particular binary had 33109 compilation units with 5513 unique
debug_abbrev_offset
values, so eachAbbreviations
was parsed 6 times on average.Gimli's
AbbreviationsCache
was ineffective because:(In this case the abbreviations at offset 0 were used by only one unit, and all the reused abbreviations were at other offsets.)
This PR doesn't change
AbbreviationsCache
, but adds a trivial provision to allow the user to do their own caching of abbreviations. (A trivialHashMap
works fine in my case, but idk whether it would be good enough for all gimli users.)