diff --git a/llvm/include/llvm/DebugInfo/LogicalView/Core/LVOptions.h b/llvm/include/llvm/DebugInfo/LogicalView/Core/LVOptions.h --- a/llvm/include/llvm/DebugInfo/LogicalView/Core/LVOptions.h +++ b/llvm/include/llvm/DebugInfo/LogicalView/Core/LVOptions.h @@ -511,7 +511,9 @@ void resolveGenericPatternMatch(T *Element, const U &Requests) { assert(Element && "Element must not be nullptr"); auto CheckPattern = [=]() -> bool { - return (Element->isNamed() && matchGenericPattern(Element->getName())) || + return (Element->isNamed() && + (matchGenericPattern(Element->getName()) || + matchGenericPattern(Element->getLinkageName()))) || (Element->isTyped() && matchGenericPattern(Element->getTypeName())); }; diff --git a/llvm/test/tools/llvm-debuginfo-analyzer/COFF/01-coff-select-logical-elements.test b/llvm/test/tools/llvm-debuginfo-analyzer/COFF/01-coff-select-logical-elements.test --- a/llvm/test/tools/llvm-debuginfo-analyzer/COFF/01-coff-select-logical-elements.test +++ b/llvm/test/tools/llvm-debuginfo-analyzer/COFF/01-coff-select-logical-elements.test @@ -68,3 +68,28 @@ ; TWO-EMPTY: ; TWO-NEXT: [001] {CompileUnit} 'test.cpp' ; TWO-NEXT: [004] {TypeAlias} 'INTEGER' -> 'int' + +; Select logical elements by matching linkage names. +; The following prints all symbols that +; contain "?foo@@YAHPEBHI_N@Z" in their linkage names, using a tab layout +; and given the number of matches. + +; RUN: llvm-debuginfo-analyzer --attribute=level \ +; RUN: --select=?foo@@YAHPEBHI_N@Z \ +; RUN: --report=list \ +; RUN: --print=symbols \ +; RUN: %p/Inputs/test-codeview-clang.o \ +; RUN: %p/Inputs/test-codeview-msvc.o 2>&1 | \ +; RUN: FileCheck --strict-whitespace -check-prefix=THREE %s + +; THREE: Logical View: +; THREE-NEXT: [000] {File} 'test-codeview-clang.o' +; THREE-EMPTY: +; THREE-NEXT: [001] {CompileUnit} 'test.cpp' +; THREE-NEXT: [002] {Function} extern not_inlined 'foo' -> 'int' +; THREE-EMPTY: +; THREE: Logical View: +; THREE-NEXT: [000] {File} 'test-codeview-msvc.o' +; THREE-EMPTY: +; THREE-NEXT: [001] {CompileUnit} 'test.cpp' +; THREE-NEXT: [002] {Function} extern not_inlined 'foo' -> 'int' diff --git a/llvm/test/tools/llvm-debuginfo-analyzer/DWARF/01-dwarf-select-logical-elements.test b/llvm/test/tools/llvm-debuginfo-analyzer/DWARF/01-dwarf-select-logical-elements.test --- a/llvm/test/tools/llvm-debuginfo-analyzer/DWARF/01-dwarf-select-logical-elements.test +++ b/llvm/test/tools/llvm-debuginfo-analyzer/DWARF/01-dwarf-select-logical-elements.test @@ -71,3 +71,28 @@ ; TWO-NEXT: [001] {CompileUnit} 'test.cpp' ; TWO-NEXT: [004] 4 {TypeAlias} 'INTEGER' -> 'int' ; TWO-NEXT: [004] 5 {Variable} 'CONSTANT' -> 'const INTEGER' + +; Select logical elements based on linkage names. +; The following prints all symbols that +; contain "_Z3fooPKijb" in their linkage names, using a tab layout +; and given the number of matches. + +; RUN: llvm-debuginfo-analyzer --attribute=level \ +; RUN: --select=_Z3fooPKijb \ +; RUN: --report=list \ +; RUN: --print=symbols \ +; RUN: %p/Inputs/pr-57040-test-dwarf-clang.o \ +; RUN: %p/Inputs/pr-57040-test-dwarf-gcc.o 2>&1 | \ +; RUN: FileCheck --strict-whitespace -check-prefix=THREE %s + +; THREE: Logical View: +; THREE-NEXT: [000] {File} 'pr-57040-test-dwarf-clang.o' +; THREE-EMPTY: +; THREE-NEXT: [001] {CompileUnit} 'test.cpp' +; THREE-NEXT: [002] 2 {Function} extern not_inlined 'foo' -> 'int' +; THREE-EMPTY: +; THREE: Logical View: +; THREE-NEXT: [000] {File} 'pr-57040-test-dwarf-gcc.o' +; THREE-EMPTY: +; THREE-NEXT: [001] {CompileUnit} 'test.cpp' +; THREE-NEXT: [002] 2 {Function} extern not_inlined 'foo' -> 'int'