diff options
author | David Blaikie <dblaikie@gmail.com> | 2018-12-17 08:27:19 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2018-12-17 08:27:19 +0000 |
commit | 884deed1b383b869b0e785a2fa5a823bfd4d00e3 (patch) | |
tree | cc875f5a30542bc9e5d7aca575d9cf96ef9ea708 | |
parent | cc5e6a72de590bff4f1e68b7271d9f82bc66b995 (diff) | |
download | bcm5719-llvm-884deed1b383b869b0e785a2fa5a823bfd4d00e3.tar.gz bcm5719-llvm-884deed1b383b869b0e785a2fa5a823bfd4d00e3.zip |
DebugInfo: Assume an absence of ranges or high_pc on a CU means the CU is empty (devoid of code addresses)
GCC emitted these unconditionally on/before 4.4/March 2012
Clang emitted these unconditionally on/before 3.5/March 2014
This improves performance when parsing CUs (especially those using split
DWARF) that contain no code ranges (such as the mini CUs that may be
created by ThinLTO importing - though generally they should be/are
avoided, especially for Split DWARF because it produces a lot of very
small CUs, which don't scale well in a bunch of other ways too
(including size)).
llvm-svn: 349333
-rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp | 21 | ||||
-rwxr-xr-x | llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 | bin | 9640 -> 17864 bytes | |||
-rwxr-xr-x | llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink | bin | 8668 -> 16288 bytes | |||
-rwxr-xr-x | llvm/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 | bin | 10693 -> 17200 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/test-inline.o | bin | 6040 -> 2968 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/test-parameters.o | bin | 5792 -> 2352 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/debuglineinfo.test | 53 | ||||
-rw-r--r-- | llvm/test/DebugInfo/llvm-symbolizer-split-dwarf-no-skel-address.test | 7 | ||||
-rw-r--r-- | llvm/test/DebugInfo/llvm-symbolizer.test | 20 |
9 files changed, 26 insertions, 75 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp index 48900e4b7a2..569512cb8f0 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp @@ -581,27 +581,6 @@ void DWARFUnit::collectAddressRanges(DWARFAddressRangesVector &CURanges) { } else WithColor::error() << "decoding address ranges: " << toString(CUDIERangesOrError.takeError()) << '\n'; - - // This function is usually called if there in no .debug_aranges section - // in order to produce a compile unit level set of address ranges that - // is accurate. If the DIEs weren't parsed, then we don't want all dies for - // all compile units to stay loaded when they weren't needed. So we can end - // up parsing the DWARF and then throwing them all away to keep memory usage - // down. - const bool ClearDIEs = extractDIEsIfNeeded(false) > 1; - getUnitDIE().collectChildrenAddressRanges(CURanges); - - // Collect address ranges from DIEs in .dwo if necessary. - bool DWOCreated = parseDWO(); - if (DWO) - DWO->collectAddressRanges(CURanges); - if (DWOCreated) - DWO.reset(); - - // Keep memory down by clearing DIEs if this generate function - // caused them to be parsed. - if (ClearDIEs) - clearDIEs(true); } void DWARFUnit::updateAddressDieMap(DWARFDie Die) { diff --git a/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 b/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 Binary files differindex 455dd1ce4fc..e3afa0f4288 100755 --- a/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 +++ b/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 diff --git a/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink b/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink Binary files differindex 8c08037ea37..9b513215f2b 100755 --- a/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink +++ b/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink diff --git a/llvm/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 b/llvm/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 Binary files differindex 99a448a7778..c952cff13de 100755 --- a/llvm/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 +++ b/llvm/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 diff --git a/llvm/test/DebugInfo/Inputs/test-inline.o b/llvm/test/DebugInfo/Inputs/test-inline.o Binary files differindex a650c91725d..93073a19c52 100644 --- a/llvm/test/DebugInfo/Inputs/test-inline.o +++ b/llvm/test/DebugInfo/Inputs/test-inline.o diff --git a/llvm/test/DebugInfo/Inputs/test-parameters.o b/llvm/test/DebugInfo/Inputs/test-parameters.o Binary files differindex 7f4b6702df2..3b887c45640 100644 --- a/llvm/test/DebugInfo/Inputs/test-parameters.o +++ b/llvm/test/DebugInfo/Inputs/test-parameters.o diff --git a/llvm/test/DebugInfo/debuglineinfo.test b/llvm/test/DebugInfo/debuglineinfo.test index 720ba12ed76..651bbe5a095 100644 --- a/llvm/test/DebugInfo/debuglineinfo.test +++ b/llvm/test/DebugInfo/debuglineinfo.test @@ -1,50 +1,19 @@ RUN: llvm-rtdyld -printline %p/Inputs/test-inline.o \ -RUN: | FileCheck %s -check-prefix TEST_INLINE +RUN: | FileCheck %s RUN: llvm-rtdyld -printdebugline %p/Inputs/test-inline.o \ -RUN: | FileCheck %s -check-prefix TEST_INLINE +RUN: | FileCheck %s RUN: llvm-rtdyld -printline %p/Inputs/test-parameters.o \ -RUN: | FileCheck %s -check-prefix TEST_PARAMETERS +RUN: | FileCheck %s RUN: llvm-rtdyld -printdebugline %p/Inputs/test-parameters.o \ -RUN: | FileCheck %s -check-prefix TEST_PARAMETERS +RUN: | FileCheck %s ; This test verifies that relocations are correctly applied to the ; .debug_line section and exercises DIContext::getLineInfoForAddressRange(). -; If relocations are not applied the first two functions will be reported as -; both starting at address zero in the; line number table. -TEST_INLINE: Function: _Z15test_parametersPfPA2_dR11char_structPPitm, Size = 170 -TEST_INLINE-NEXT: Line info @ 0: test-inline.cpp, line:33 -TEST_INLINE-NEXT: Line info @ 35: test-inline.cpp, line:34 -TEST_INLINE-NEXT: Line info @ 165: test-inline.cpp, line:35 -TEST_INLINE-NEXT: Function: _Z3foov, Size = 3 -TEST_INLINE-NEXT: Line info @ 0: test-inline.cpp, line:28 -TEST_INLINE-NEXT: Line info @ 2: test-inline.cpp, line:29 -TEST_INLINE-NEXT: Function: main, Size = 146 -TEST_INLINE-NEXT: Line info @ 0: test-inline.cpp, line:39 -TEST_INLINE-NEXT: Line info @ 21: test-inline.cpp, line:41 -TEST_INLINE-NEXT: Line info @ 39: test-inline.cpp, line:42 -TEST_INLINE-NEXT: Line info @ 60: test-inline.cpp, line:44 -TEST_INLINE-NEXT: Line info @ 80: test-inline.cpp, line:48 -TEST_INLINE-NEXT: Line info @ 90: test-inline.cpp, line:45 -TEST_INLINE-NEXT: Line info @ 95: test-inline.cpp, line:46 -TEST_INLINE-NEXT: Line info @ 114: test-inline.cpp, line:48 -TEST_INLINE-NEXT: Line info @ 141: test-inline.cpp, line:49 - -; This test checks the case where all code is in a single section. -TEST_PARAMETERS: Function: _Z15test_parametersPfPA2_dR11char_structPPitm, Size = 170 -TEST_PARAMETERS-NEXT: Line info @ 0: test-parameters.cpp, line:33 -TEST_PARAMETERS-NEXT: Line info @ 35: test-parameters.cpp, line:34 -TEST_PARAMETERS-NEXT: Line info @ 165: test-parameters.cpp, line:35 -TEST_PARAMETERS-NEXT: Function: _Z3foov, Size = 3 -TEST_PARAMETERS-NEXT: Line info @ 0: test-parameters.cpp, line:28 -TEST_PARAMETERS-NEXT: Line info @ 2: test-parameters.cpp, line:29 -TEST_PARAMETERS-NEXT: Function: main, Size = 146 -TEST_PARAMETERS-NEXT: Line info @ 0: test-parameters.cpp, line:39 -TEST_PARAMETERS-NEXT: Line info @ 21: test-parameters.cpp, line:41 -TEST_PARAMETERS-NEXT: Line info @ 39: test-parameters.cpp, line:42 -TEST_PARAMETERS-NEXT: Line info @ 60: test-parameters.cpp, line:44 -TEST_PARAMETERS-NEXT: Line info @ 80: test-parameters.cpp, line:48 -TEST_PARAMETERS-NEXT: Line info @ 90: test-parameters.cpp, line:45 -TEST_PARAMETERS-NEXT: Line info @ 95: test-parameters.cpp, line:46 -TEST_PARAMETERS-NEXT: Line info @ 114: test-parameters.cpp, line:48 -TEST_PARAMETERS-NEXT: Line info @ 141: test-parameters.cpp, line:49 +CHECK: Function: _Z2f1v, Size = 6 +CHECK-NEXT: Line info @ 0: test-inline.cpp, line:1 +CHECK-NEXT: Line info @ 4: test-inline.cpp, line:1 +CHECK-NEXT: Function: _Z2f2v, Size = 11 +CHECK-NEXT: Line info @ 0: test-inline.cpp, line:2 +CHECK-NEXT: Line info @ 4: test-inline.cpp, line:2 +CHECK-NEXT: Line info @ 9: test-inline.cpp, line:2 diff --git a/llvm/test/DebugInfo/llvm-symbolizer-split-dwarf-no-skel-address.test b/llvm/test/DebugInfo/llvm-symbolizer-split-dwarf-no-skel-address.test index b6c9ccc2d17..1b8da86f6d3 100644 --- a/llvm/test/DebugInfo/llvm-symbolizer-split-dwarf-no-skel-address.test +++ b/llvm/test/DebugInfo/llvm-symbolizer-split-dwarf-no-skel-address.test @@ -15,5 +15,8 @@ Compiled to assembly with clang, modified the skeleton CU to remove the high/low pc (& update the CU length field and abbrev to match) & then compile/objcopy to make the .o and .dwo. -CHECK: _Z2f2v -CHECK: test.cpp:2:51 +Ensure that the f2 inlined frame is not included - it's inefficient to have to +go and load all the debug info and search for the address ranges, so assume +that a lack of ranges on the CU means the CU covers no addresses. + +CHECK-NOT: _Z2f2v diff --git a/llvm/test/DebugInfo/llvm-symbolizer.test b/llvm/test/DebugInfo/llvm-symbolizer.test index a6a15491c20..5a5e06c3789 100644 --- a/llvm/test/DebugInfo/llvm-symbolizer.test +++ b/llvm/test/DebugInfo/llvm-symbolizer.test @@ -1,10 +1,10 @@ RUN: rm -rf %t RUN: mkdir -p %t -RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400559" > %t.input -RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64.debuglink 0x400559" >> %t.input -RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400436" >> %t.input -RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400528" >> %t.input -RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400586" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x40113f" > %t.input +RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64.debuglink 0x40113f" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x401020" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x40110e" >> %t.input +RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x401160" >> %t.input RUN: echo "%p/Inputs/dwarfdump-test2.elf-x86-64 0x4004e8" >> %t.input RUN: echo "%p/Inputs/dwarfdump-test2.elf-x86-64 0x4004f4" >> %t.input RUN: echo "%p/Inputs/dwarfdump-test4.elf-x86-64 0x62c" >> %t.input @@ -181,8 +181,8 @@ UNKNOWN-ARCH-NOT: main UNKNOWN-ARCH: ?? UNKNOWN-ARCH-NOT: main -RUN: echo "0x400559" > %t.input4 -RUN: echo "0x400436" >> %t.input4 +RUN: echo "0x40113f" > %t.input4 +RUN: echo "0x401020" >> %t.input4 RUN: llvm-symbolizer --obj %p/Inputs/dwarfdump-test.elf-x86-64 < %t.input4 \ RUN: | FileCheck %s --check-prefix=BINARY @@ -190,9 +190,9 @@ BINARY: main BINARY-NEXT: /tmp/dbginfo{{[/\\]}}dwarfdump-test.cc:16 BINARY: _start -RUN: echo "0x400720" > %t.input5 -RUN: echo "0x4004a0" >> %t.input5 -RUN: echo "0x4006f0" >> %t.input5 +RUN: echo "0x401140" > %t.input5 +RUN: echo "0x401020" >> %t.input5 +RUN: echo "0x401120" >> %t.input5 RUN: llvm-symbolizer --obj %p/Inputs/llvm-symbolizer-test.elf-x86-64 < %t.input5 \ RUN: | FileCheck %s --check-prefix=BINARY_C |