feat: support resolve symbols in mini debug info(".gnu_debugdata") #3590
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.
Mini debug info is stored in a lzma-compressed section named ".gnu_debugdata" in elf. More information can be found in https://archive.fosdem.org/2020/schedule/event/debugging_mini/attachments/slides/4059/export/events/attachments/debugging_mini/slides/4059/fosdem2020_minidebuginfo_kkleine.pdf
When it fails to get symbol in ".symtab", it will try to find the ".gnu_debugdata" section, uncompressing it and read the data as another elf to get the real "symtab" and "dynsym". (note: even if ".dynsym" exists, ".gnu_debugdata" can store more symbols)
Unfortunately, the original
MMapedElfFile
can't accept an in-memory area as the data of elf file. To reuse the original code to get the symbols, some changes are made:a. the origin
struct MMapedElfFile
b. the new
struct InMemElfFile
, which is responsible to parse elf for the uncompressed .gnu_debugdata. The original MMapedElfFile also reuse this struct to read elf.interface ElfSymbolReader
, which is used bystruct SymbolTable
to get the symbol string.struct SymbolTableWithMiniDebugInfo
to combine symbols in original elf and mini debug elf.interface SymbolTableInterface
to abstract SymbolTable and SymbolTableWithMiniDebugInfo.