From 9a4f3cb275b148f11850ca24c8ff245990ee327d Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 22 Apr 2016 21:32:59 +0000 Subject: [PATCH] llvm-symbolizer: prefer .dwo contents over fission-gmlt-like-data when .dwo file is present Rather than relying on the gmlt-like data emitted into the .o/executable which only contains the simple name of any inlined functions, use the .dwo file if present. Test symbolication with/without a .dwo, and the old test that was testing behavior when no gmlt-like data was present. (I haven't included a test of non-gmlt-like data + no .dwo (that would be akin to symbolication with no debug info) but we could add one for completeness) The test was simplified a bit to be a little clearer (unoptimized, force inline, using a function call as the inlined entity) and regenerated with ToT clang. For the no-gmlt-like-data case, I modified Clang back to its old behavior temporarily & the .dwo file is identical so it is shared between the two executables. llvm-svn: 267227 --- llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp | 19 ++++------ llvm/test/DebugInfo/Inputs/split-dwarf-test | Bin 9379 -> 9208 bytes .../DebugInfo/Inputs/split-dwarf-test-nogmlt | Bin 0 -> 9128 bytes .../test/DebugInfo/Inputs/split-dwarf-test.cc | 13 ++++--- .../DebugInfo/Inputs/split-dwarf-test.dwo | Bin 1609 -> 1377 bytes llvm/test/DebugInfo/llvm-symbolizer.test | 34 +++++++++++++----- 6 files changed, 40 insertions(+), 26 deletions(-) create mode 100755 llvm/test/DebugInfo/Inputs/split-dwarf-test-nogmlt diff --git a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp index fdc9da3fbaeb..0430265ae74e 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp @@ -378,19 +378,14 @@ DWARFUnit::getInlinedChainForAddress(uint64_t Address) { // First, find a subprogram that contains the given address (the root // of inlined chain). const DWARFUnit *ChainCU = nullptr; - const DWARFDebugInfoEntryMinimal *SubprogramDIE = - getSubprogramForAddress(Address); - if (SubprogramDIE) { + const DWARFDebugInfoEntryMinimal *SubprogramDIE; + // Try to look for subprogram DIEs in the DWO file. + parseDWO(); + if (DWO) { + if ((SubprogramDIE = DWO->getUnit()->getSubprogramForAddress(Address))) + ChainCU = DWO->getUnit(); + } else if ((SubprogramDIE = getSubprogramForAddress(Address))) ChainCU = this; - } else { - // Try to look for subprogram DIEs in the DWO file. - parseDWO(); - if (DWO.get()) { - SubprogramDIE = DWO->getUnit()->getSubprogramForAddress(Address); - if (SubprogramDIE) - ChainCU = DWO->getUnit(); - } - } // Get inlined chain rooted at this subprogram DIE. if (!SubprogramDIE) diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-test b/llvm/test/DebugInfo/Inputs/split-dwarf-test index a4411129a9b677d643c68bd8991f8a4d69a5a7b8..4d6aa0cd98a34dbda578f74b1174b56542859fad 100755 GIT binary patch literal 9208 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 literal 9379 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 b@u%p(lmAbGZEF5cSHNGS7x%mZP(<-hi4fr^ literal 0 HcmV?d00001 diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-test.cc b/llvm/test/DebugInfo/Inputs/split-dwarf-test.cc index 5ed56f94b362..b41423dd8159 100644 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-test.cc +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-test.cc @@ -1,13 +1,16 @@ -int foo(int a) { - return a + 1; +void f1() { } -int main(int argc, char *argv[]) { - return foo(argc); +inline __attribute__((always_inline)) void f2() { + f1(); +} + +int main() { + f2(); } // Build instructions: -// 1) clang++ -### -O2 -gsplit-dwarf.cc split-dwarf-test.cc -o split-dwarf-test +// 1) clang++ -### -gsplit-dwarf split-dwarf-test.cc -o split-dwarf-test // 2) Replace the value "-fdebug-compilation-dir" flag to "Output" // (this is the temp directory used by lit). // 3) Manually run clang-cc1, objcopy and ld invocations. diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo b/llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo index 74183a4b622fbce4e7163fdc4b8ca37026265aff..588374d7d21e1830d12b1bee2dfa67ce640322c4 100644 GIT binary patch literal 1377 zcmbtUO>fgc5S_JSC&dDkMo2{n$%j^Ik>WOvs2Yk)T8S^I2TlmMBu-)nQ^%&Zo2rKj z;a|cLaiTXaT=)%$JHLYqGxnNT8zT-(G@hCF-t3O;jo&>ydL%Ihg)y*TQ57h_p0vpO zS=xsyP>1-f?Ydpq8*}#ibCujxKhEfC8WS0I~sPK-X{#gK;U>J#CRvxec9GM!e8o zqD)-}DwHPsVJGKjgS*Dl7HY}v(!tes3l$&G*n)4 zVJdK9Kh>pA!XNdQ{J#btIkJM0PH%(PYbCsD|Dlo#s`lfp{|xfd-R3QF<;3(HswN?v R-;A)M41CBXoW3Z6{RX0Yev<$I literal 1609 zcmbtUOKTHR6h3!ec}!Gd7A8nB3&j@ckXW$R$22NR3+loLt%8KfWReb~Gi7E>shiLU zTF`~i{~@?@Be-Ys{R<&nibqf1?dzyiossD#wK#F=vVdC%5tr)1E?xY5bS!EB2(8f zlgoCRaF%PhGPRr_00oSznYcK^nw5Bqb^Qr;(kV|Xlup1Z8n6eJ*RKzqAas4NzF=H3 z8ui(W&Bf;8(j0_a12>xQZd*ZbK61jyux)5RUFi9~3#h>LBCuf7ay_tuzD;Tf_J$QC zSC1O63*`8_CO%Gt8I&f<63TTHy82rvD=7C+9-tgUkpM3d82f#k8W`cuW@L5HMnPgX zQm^ZDp7-0X*Yl0;whu-UM>|_im<6m(Cvb*Y1RG?-fp2F+%(nerFLa{6+6-LJiD|gh z|DV&?BEBD?Rg1^(1YG1^z`Tf2$ycE+4MpxXOo$k9)B2BTA-5v;KH`Km1l}Get_gTr zpW0`> %t.input RUN: echo "%p/Inputs/fission-ranges.elf-x86_64 0x720" >> %t.input RUN: echo "%p/Inputs/arange-overlap.elf-x86_64 0x714" >> %t.input RUN: cp %p/Inputs/split-dwarf-test.dwo %T -RUN: echo "%p/Inputs/split-dwarf-test 0x4004d0" >> %t.input -RUN: echo "%p/Inputs/split-dwarf-test 0x4004c0" >> %t.input +RUN: echo "%p/Inputs/split-dwarf-test 0x4005d4" >> %t.input +RUN: echo "%p/Inputs/split-dwarf-test 0x4005c4" >> %t.input RUN: echo "%p/Inputs/cross-cu-inlining.x86_64-macho.o 0x17" >> %t.input RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false \ -RUN: --default-arch=i386 < %t.input | FileCheck %s +RUN: --default-arch=i386 < %t.input | FileCheck --check-prefix=CHECK --check-prefix=SPLIT --check-prefix=DWO %s + +Ensure we get the same results in the absence of gmlt-like data in the executable but the presence of a .dwo file + +RUN: echo "%p/Inputs/split-dwarf-test-nogmlt 0x4005d4" >> %t.input +RUN: echo "%p/Inputs/split-dwarf-test-nogmlt 0x4005c4" >> %t.input +RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false \ +RUN: --default-arch=i386 < %t.input | FileCheck --check-prefix=SPLIT --check-prefix=DWO %s + +Ensure we get gmlt like results in the absence of a .dwo file but the presence of gmlt-like data in the executable + +RUN: rm %T/split-dwarf-test.dwo +RUN: echo "%p/Inputs/split-dwarf-test 0x4005d4" >> %t.input +RUN: echo "%p/Inputs/split-dwarf-test 0x4005c4" >> %t.input +RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false \ +RUN: --default-arch=i386 < %t.input | FileCheck --check-prefix=SPLIT --check-prefix=NODWO %s CHECK: main CHECK-NEXT: /tmp/dbginfo{{[/\\]}}dwarfdump-test.cc:16 @@ -102,13 +117,14 @@ CHECK-NEXT: {{.*}}fission-ranges.cc:6 CHECK: _ZN1S3bazEv CHECK-NEXT: {{.*}}arange-overlap.cc:6 -CHECK: _Z3fooi -CHECK-NEXT: {{.*}}split-dwarf-test.cc -CHECK-NEXT: main -CHECK-NEXT: {{.*}}split-dwarf-test.cc +DWO: _Z2f2v +NODWO: {{^f2$}} +SPLIT-NEXT: {{.*}}split-dwarf-test.cc +SPLIT-NEXT: main +SPLIT-NEXT: {{.*}}split-dwarf-test.cc -CHECK: _Z3fooi -CHECK-NEXT: {{.*}}split-dwarf-test.cc +SPLIT: _Z2f1v +SPLIT-NEXT: {{.*}}split-dwarf-test.cc ; func has been inlined into main by LTO. Check that the symbolizer is able ; to resolve the cross-cu reference and retrieve func's name