aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/ELF.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@fb.com>2023-11-17 10:31:12 -0800
committerGitHub <noreply@github.com>2023-11-17 10:31:12 -0800
commit18eefc186d75f60c9a828e13a8379769eb5c1812 (patch)
tree95606f8445d7f63015c0fae704a85f5a9307c502 /llvm/lib/Object/ELF.cpp
parent94ce378ec051a120d640073b885fcd90f1cf10f8 (diff)
downloadllvm-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