Reapply DW_AT_low/high_pc patch:
authorEric Christopher <echristo@gmail.com>
Thu, 20 Mar 2014 19:16:16 +0000 (19:16 +0000)
committerEric Christopher <echristo@gmail.com>
Thu, 20 Mar 2014 19:16:16 +0000 (19:16 +0000)
commit8b97f004cbda4f4007dc2e295a1fccafed2d3c2c
treec4564b41469ceaa166713c2272c2c023609abe2a
parent0b087184cec3ec5435798c9b8cb297a94f0bff7e
Reapply DW_AT_low/high_pc patch:

    Use the range machinery for DW_AT_ranges and DW_AT_high/lo_pc.

    This commit moves us from a single range per subprogram to extending
    ranges if we are:

    a) In the same section, and
    b) In the same enclosing CU.

    This means we have more fine grained ranges for compile units, and fewer
    ranges overall when we have multiple functions in the same CU
    adjacent to each other in the object file.

    Also remove all of the earlier hacks around this functionality for
    function sections etc. Also update all of the testcases to take into
    account the merging functionality.

with a fix for location entries in the debug_loc section:

Make sure that debug loc entries are relative to the low_pc
of the compile unit. This means that when we only have a single
range that the offset should be just relative to the low_pc
of the unit, for multiple ranges for a CU this means that we'll be
relative to 0 which we emit along with DW_AT_ranges.

This mostly shows up with linked binaries, so add a testcase with
multiple CUs so that our location is going to be offset of a CU
with a non-zero low_pc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204377 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.h
test/DebugInfo/X86/cu-ranges.ll
test/DebugInfo/X86/debug-loc-offset.ll [new file with mode: 0644]
test/DebugInfo/X86/fission-cu.ll
test/DebugInfo/X86/low-pc-cu.ll
test/DebugInfo/X86/stmt-list-multiple-compile-units.ll
test/DebugInfo/cu-range-hole.ll
test/DebugInfo/cu-ranges.ll