diff --git a/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp b/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp index 4a9b119e5dad08..d7519998c67e89 100644 --- a/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp +++ b/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp @@ -174,6 +174,11 @@ Error SymbolizableObjectFile::addSymbol(const SymbolRef &Symbol, if (Type != ELF::STT_NOTYPE && Type != ELF::STT_FUNC && Type != ELF::STT_OBJECT && Type != ELF::STT_GNU_IFUNC) return Error::success(); + // Some STT_NOTYPE symbols are not desired. This excludes STT_SECTION and + // ARM mapping symbols. + uint32_t Flags = cantFail(Symbol.getFlags()); + if (Flags & SymbolRef::SF_FormatSpecific) + return Error::success(); } else if (SymbolType != SymbolRef::ST_Function && SymbolType != SymbolRef::ST_Data) { return Error::success(); diff --git a/llvm/test/DebugInfo/Symbolize/ELF/arm-mapping-symbol.s b/llvm/test/DebugInfo/Symbolize/ELF/arm-mapping-symbol.s new file mode 100644 index 00000000000000..810ae4f5b8bd91 --- /dev/null +++ b/llvm/test/DebugInfo/Symbolize/ELF/arm-mapping-symbol.s @@ -0,0 +1,19 @@ +# REQUIRES: arm-registered-target +## Ignore ARM mapping symbols (with a prefix of $a, $d or $t). + +# RUN: llvm-mc -filetype=obj -triple=armv7-none-linux %s -o %t +# RUN: llvm-symbolizer --obj=%t 4 8 | FileCheck %s +# RUN: llvm-mc -filetype=obj -triple=thumbv7-none-linux %s -o %tthumb +# RUN: llvm-symbolizer --obj=%tthumb 4 8 | FileCheck %s + +# CHECK: foo +# CHECK-NEXT: ??:0:0 +# CHECK-EMPTY: +# CHECK-NEXT: foo +# CHECK-NEXT: ??:0:0 + +.globl foo +foo: + .word 32 + nop + .word 32