diff options
author | Greg Clayton <gclayton@fb.com> | 2023-11-17 10:31:12 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-17 10:31:12 -0800 |
commit | 18eefc186d75f60c9a828e13a8379769eb5c1812 (patch) | |
tree | 95606f8445d7f63015c0fae704a85f5a9307c502 /llvm/lib/Object/ELF.cpp | |
parent | 94ce378ec051a120d640073b885fcd90f1cf10f8 (diff) | |
download | llvm-18eefc186d75f60c9a828e13a8379769eb5c1812.zip llvm-18eefc186d75f60c9a828e13a8379769eb5c1812.tar.gz llvm-18eefc186d75f60c9a828e13a8379769eb5c1812.tar.bz2 |
Modify llvm-gsymutil lookups to handle overlapping ranges correctly. (#72350)
llvm-gsymutil allows address ranges to overlap. There was a bug where if
we had debug info for a function with a range like [0x100-0x200) and a
symbol at the same start address yet with a larger range like
[0x100-0x300), we would randomly get either only information from the
first or second entry. This could cause lookups to fail due to the way
the binary search worked.
This patch makes sure that when lookups happen we find the first address
table entry that can match an address, and also ensures that we always
select the first FunctionInfo that could match. FunctionInfo entries are
sorted such that the most debug info rich entries come first. And if we
have two ranges that have the same start address, the smaller range
comes first and the larger one comes next. This patch also adds the
ability to iterate over all function infos with the same start address
to always find a range that contains the address.
Added a unit test to test this functionality that failed prior to this
fix and now succeeds.
Also fix an issue when dumping an entire GSYM file that has duplicate address entries where it used to always print out the binary search match for the FunctionInfo, not the actual data for the address index.
Diffstat (limited to 'llvm/lib/Object/ELF.cpp')
0 files changed, 0 insertions, 0 deletions