]> granicus.if.org Git - llvm/commitdiff
Revert "DebugInfo: Assume an absence of ranges or high_pc on a CU means the CU is...
authorEric Liu <ioeric@google.com>
Mon, 17 Dec 2018 14:14:40 +0000 (14:14 +0000)
committerEric Liu <ioeric@google.com>
Mon, 17 Dec 2018 14:14:40 +0000 (14:14 +0000)
This reverts commit r349333. It caused internal test to fail. I have
sent more information to the author.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349353 91177308-0d34-0410-b5e6-96231b3b80d8

lib/DebugInfo/DWARF/DWARFUnit.cpp
test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64
test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink
test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64
test/DebugInfo/Inputs/test-inline.o
test/DebugInfo/Inputs/test-parameters.o
test/DebugInfo/debuglineinfo.test
test/DebugInfo/llvm-symbolizer-split-dwarf-no-skel-address.test
test/DebugInfo/llvm-symbolizer.test

index 569512cb8f0951952a19982bbedfa82ff8da86ef..48900e4b7a28947f85d42488029d0b97ad7b8abb 100644 (file)
@@ -581,6 +581,27 @@ 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) {
index e3afa0f4288a1c087fc1926cc9a689afb0a00166..455dd1ce4fc2c7551f1d39207fb5561286cd71a0 100755 (executable)
Binary files a/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 and b/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 differ
index 9b513215f2bcf7bc2a33db6d967612d86e4c7945..8c08037ea3717323779d6bf12602355d851fe717 100755 (executable)
Binary files a/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink and b/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.debuglink differ
index c952cff13dea72375b2e86f449d193220d5a7a24..99a448a7778997c1fbae59a6d4dd975d341fa3ac 100755 (executable)
Binary files a/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 and b/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 differ
index 93073a19c5225c00afd9a8c9292ae6ca16bd00ef..a650c91725d9db5504757fd91472e301e59bf2b1 100644 (file)
Binary files a/test/DebugInfo/Inputs/test-inline.o and b/test/DebugInfo/Inputs/test-inline.o differ
index 3b887c45640d1b9b4d8cedf7de94febeba8df505..7f4b6702df2e76c0c55d422b425972714b824276 100644 (file)
Binary files a/test/DebugInfo/Inputs/test-parameters.o and b/test/DebugInfo/Inputs/test-parameters.o differ
index 651bbe5a09552455593a8d9480f03822a8700245..720ba12ed7614b481e5d8054b8224ae1a8f11872 100644 (file)
@@ -1,19 +1,50 @@
 RUN: llvm-rtdyld -printline %p/Inputs/test-inline.o \
-RUN:   | FileCheck %s
+RUN:   | FileCheck %s -check-prefix TEST_INLINE
 RUN: llvm-rtdyld -printdebugline %p/Inputs/test-inline.o \
-RUN:   | FileCheck %s
+RUN:   | FileCheck %s -check-prefix TEST_INLINE
 RUN: llvm-rtdyld -printline %p/Inputs/test-parameters.o \
-RUN:   | FileCheck %s
+RUN:   | FileCheck %s -check-prefix TEST_PARAMETERS
 RUN: llvm-rtdyld -printdebugline %p/Inputs/test-parameters.o \
-RUN:   | FileCheck %s
+RUN:   | FileCheck %s -check-prefix TEST_PARAMETERS
 
 ; 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
index 1b8da86f6d3cb7ac5fc0148d4803a7a1ef1be791..b6c9ccc2d170c1f567d2c73d478e18dfee83d7f8 100644 (file)
@@ -15,8 +15,5 @@ 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.
 
-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
+CHECK: _Z2f2v
+CHECK: test.cpp:2:51
index 5a5e06c378962f8d2d3f38c79b269817edb5c0dc..a6a15491c205d00b254d2f22b6bab018edde49fe 100644 (file)
@@ -1,10 +1,10 @@
 RUN: rm -rf %t
 RUN: mkdir -p %t
-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-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-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 "0x40113f" > %t.input4
-RUN: echo "0x401020" >> %t.input4
+RUN: echo "0x400559" > %t.input4
+RUN: echo "0x400436" >> %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 "0x401140" > %t.input5
-RUN: echo "0x401020" >> %t.input5
-RUN: echo "0x401120" >> %t.input5
+RUN: echo "0x400720" > %t.input5
+RUN: echo "0x4004a0" >> %t.input5
+RUN: echo "0x4006f0" >> %t.input5
 RUN: llvm-symbolizer --obj %p/Inputs/llvm-symbolizer-test.elf-x86-64 < %t.input5 \
 RUN:   | FileCheck %s --check-prefix=BINARY_C