[DWARF parser] Fix broken address ranges construction.
authorAlexey Samsonov <vonosmas@gmail.com>
Thu, 12 Jun 2014 23:58:49 +0000 (23:58 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Thu, 12 Jun 2014 23:58:49 +0000 (23:58 +0000)
commit740a75968a1ffc246c8f54a83cdaffe4d0cb3494
treec610bf20dc92ed8fbe1bb5aec4e1e2fc81752568
parent9a81e280565355e0a8fb23f080eb730a315460d8
[DWARF parser] Fix broken address ranges construction.

Previous algorithm for constructing [Address ranges]->[Compile Units]
mapping was wrong. It somewhat relied on the assumption that address ranges
for different compile units may not overlap. It is not so.
For example, two compile units may contain the definition of the same
linkonce_odr function. These definitions will be merged at link-time,
resulting in equivalent .debug_ranges entries for both these units

Instead of sorting and merging original address ranges (from .debug_ranges
and .debug_aranges), implement a different approach: save endpoints
of all ranges, and then use a sweep-line approach to construct
the desired mapping. If we find that certain address maps to
several compilation units, we just pick any of them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210860 91177308-0d34-0410-b5e6-96231b3b80d8
lib/DebugInfo/DWARFDebugAranges.cpp
lib/DebugInfo/DWARFDebugAranges.h
test/DebugInfo/Inputs/arange-overlap.cc [new file with mode: 0644]
test/DebugInfo/Inputs/arange-overlap.elf-x86_64 [new file with mode: 0755]
test/DebugInfo/llvm-symbolizer.test