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

symbolizer: cache each DWARF DIE's nextOffset and nextSiblingOffset #2111

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

oremanj
Copy link

@oremanj oremanj commented Dec 20, 2023

This avoids exponential growth in runtime when parsing deeply nested debug info. The scenario that would otherwise lead to exponential growth involves forEachChild() with an argument lambda that itself recurses into children. At each layer of depth, forEachChild() iterates over all indirect children (to skip them) and so does the argument lambda (to process the top-level ones and recurse on their children). So each top-level DIE is visited twice, each second-level is visited four times, each third-level one is visited eight times, and so on.

This avoids exponential growth in runtime when parsing deeply nested debug info. The scenario that would otherwise lead to exponential growth involves `forEachChild()` with an argument lambda that itself recurses into children. At each layer of depth, `forEachChild()` iterates over all indirect children (to skip them) and so does the argument lambda (to process the top-level ones and recurse on their children). So each top-level DIE is visited twice, each second-level is visited four times, each third-level one is visited eight times, and so on.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants