mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
llvm-symbolizer: Handle function definitions nested within other functions
LLVM always puts function definition DIEs at the top level, but under some circumstances GCC does not (at least in this case with member functions of a function-local type). To ensure that doesn't appear as though the local type's member function is unduly inlined within the outer function - ensure the inline discovery DIE parent walk stops at the first DW_TAG_subprogram. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331291 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -415,11 +415,15 @@ DWARFUnit::getInlinedChainForAddress(uint64_t Address,
|
||||
DWARFDie SubroutineDIE =
|
||||
(DWO ? DWO.get() : this)->getSubroutineForAddress(Address);
|
||||
|
||||
while (SubroutineDIE) {
|
||||
if (SubroutineDIE.isSubroutineDIE())
|
||||
if (!SubroutineDIE)
|
||||
return;
|
||||
|
||||
while (!SubroutineDIE.isSubprogramDIE()) {
|
||||
if (SubroutineDIE.getTag() == DW_TAG_inlined_subroutine)
|
||||
InlinedChain.push_back(SubroutineDIE);
|
||||
SubroutineDIE = SubroutineDIE.getParent();
|
||||
}
|
||||
InlinedChain.push_back(SubroutineDIE);
|
||||
}
|
||||
|
||||
const DWARFUnitIndex &llvm::getDWARFUnitIndex(DWARFContext &Context,
|
||||
|
||||
Binary file not shown.
@@ -20,6 +20,7 @@ RUN: echo "%p/Inputs/macho-universal 0x1f84" >> %t.input
|
||||
RUN: echo "%p/Inputs/macho-universal:i386 0x1f67" >> %t.input
|
||||
RUN: echo "%p/Inputs/macho-universal:x86_64 0x100000f05" >> %t.input
|
||||
RUN: echo "%p/Inputs/llvm-symbolizer-dwo-test 0x400514" >> %t.input
|
||||
RUN: echo "%p/Inputs/llvm-symbolizer-local-mem-func-gcc.elf-x86-64 0x61a" >> %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
|
||||
@@ -127,6 +128,10 @@ CHECK: _Z3inci
|
||||
CHECK: main
|
||||
CHECK-NEXT: llvm-symbolizer-dwo-test.cc:11
|
||||
|
||||
CHECK-NOT: local_mem_func
|
||||
CHECK: _ZZ2f1vEN3foo14local_mem_funcEv
|
||||
CHECK-NEXT: {{.*}}local-mem-func.cpp:3:0
|
||||
|
||||
CHECK: main
|
||||
CHECK-NEXT: {{.*}}fission-ranges.cc:6
|
||||
|
||||
|
||||
Reference in New Issue
Block a user