mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-27 06:54:30 +00: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. llvm-svn: 331291
This commit is contained in:
parent
a2ad8c4bc8
commit
58ea9af54e
@ -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,
|
||||
|
BIN
test/DebugInfo/Inputs/llvm-symbolizer-local-mem-func-gcc.elf-x86-64
Executable file
BIN
test/DebugInfo/Inputs/llvm-symbolizer-local-mem-func-gcc.elf-x86-64
Executable file
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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user