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

Check for conflicting ranges in SourceLineResolver::Module::ParseStackInfo #50

Open
GoogleCodeExporter opened this issue Apr 29, 2015 · 1 comment

Comments

@GoogleCodeExporter
Copy link

I stuck a TODO in SourceLineResolver::Module::ParseStackInfo about
conflicting ranges.  My current thoughts on fixing this are to store
entries in the ContainedRangeMap with base (rva + code_size) and size
(code_size - prolog_size - epilog_size), and introduce the concept of a
"replacement key", which will be the rva.  In a ContainedRangeMap, one
entry may replace another (and inherit any preexisting children) if their
dimensions are identical and the new entry's replacement key is higher than
the existing entry's.  ContainedRangeMap::StoreRange should not return
false when inserting a new entry with identical dimensions to an existing
entry, it should return true but should only modify the map in accordance
with the replacement key.  This will also cover another case of duplication
I've found in dumped symbol files: when code is optimized such that
multiple functions compile to identical code and actually share the same
code, IDiaFrameData will still be present for each function, all completely
identical.

The current behavior of the ContainedRangeMap can be approximated under
this scheme by using a constant for the replacement key during each
StoreRange call.  The only difference is that the return value no longer
indicates whether an entry was stored.

Original issue reported on code.google.com by mmento...@gmail.com on 18 Oct 2006 at 1:17

@GoogleCodeExporter
Copy link
Author

Original comment by mmento...@gmail.com on 18 Oct 2006 at 1:42

  • Added labels: Component-Processor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant