xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-function.cpp (revision 599ca7165edcf7d226bd658c450801044b46ce7c)
18a64d80aSDavid Spickett // REQUIRES: lld
28a64d80aSDavid Spickett 
38a64d80aSDavid Spickett // RUN: %clang %s -g -c -o %t.o --target=x86_64-pc-linux -gno-pubnames
48a64d80aSDavid Spickett // RUN: ld.lld %t.o -o %t
58a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
68a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
78a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
88a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
98a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
108a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL %s
118a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
128a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
13f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN3bar3baz3fooEv --find=function --function-flags=full %t | \
14f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-NAMESPACE %s
15f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN4sbar3fooEi --find=function --function-flags=full %t | \
16f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-METHOD %s
178a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
188a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
198a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
208a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
218a64d80aSDavid Spickett //
228a64d80aSDavid Spickett // RUN: %clang %s -g -c -o %t --target=x86_64-apple-macosx
238a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
248a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
258a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
268a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
278a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
28f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL %s
298a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
308a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
31f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN3bar3baz3fooEv --find=function --function-flags=full %t | \
32f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-NAMESPACE %s
33f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN4sbar3fooEi --find=function --function-flags=full %t | \
34f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-METHOD %s
358a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
368a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
37*599ca716SPavel Labath // RUN: lldb-test symbols --compiler-context=ClassOrStruct:sbar,Function:foo -language=c++ -find=function -function-flags=method %t | \
38fa928458SAdrian Prantl // RUN:   FileCheck --check-prefix=COMPILER-CONTEXT %s
398a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
408a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
418a64d80aSDavid Spickett 
428a64d80aSDavid Spickett // RUN: %clang %s -c -o %t.o --target=x86_64-pc-linux -gdwarf-5 -gpubnames
438a64d80aSDavid Spickett // RUN: ld.lld %t.o -o %t
448a64d80aSDavid Spickett // RUN: llvm-readobj --sections %t | FileCheck %s --check-prefix NAMES
458a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
468a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
478a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
488a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
498a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
50f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL %s
518a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
528a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
53f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN3bar3baz3fooEv --find=function --function-flags=full %t | \
54f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-NAMESPACE %s
55f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN4sbar3fooEi --find=function --function-flags=full %t | \
56f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-METHOD %s
578a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
588a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
598a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
608a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
618a64d80aSDavid Spickett 
62a7e27260SFangrui Song /// Test a per-module index built by lld.
63a7e27260SFangrui Song // RUN: ld.lld --debug-names %t.o -o %t
64a7e27260SFangrui Song // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
65a7e27260SFangrui Song // RUN:   FileCheck --check-prefix=BASE %s
66a7e27260SFangrui Song 
678a64d80aSDavid Spickett // NAMES: Name: .debug_names
688a64d80aSDavid Spickett 
698a64d80aSDavid Spickett // BASE: Found 4 functions:
708a64d80aSDavid Spickett // BASE-DAG: name = "foo()", mangled = "_Z3foov"
718a64d80aSDavid Spickett // BASE-DAG: name = "foo(int)", mangled = "_Z3fooi"
728a64d80aSDavid Spickett // BASE-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv"
738a64d80aSDavid Spickett // BASE-DAG: name = "bar::baz::foo()", mangled = "_ZN3bar3baz3fooEv"
748a64d80aSDavid Spickett 
758a64d80aSDavid Spickett // METHOD: Found 3 functions:
768a64d80aSDavid Spickett // METHOD-DAG: name = "sbar::foo()", mangled = "_ZN4sbar3fooEv"
778a64d80aSDavid Spickett // METHOD-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
788a64d80aSDavid Spickett // METHOD-DAG: name = "ffbar()::sbaz::foo()", mangled = "_ZZ5ffbarvEN4sbaz3fooEv"
798a64d80aSDavid Spickett 
808a64d80aSDavid Spickett // FULL: Found 0 functions:
818a64d80aSDavid Spickett 
828a64d80aSDavid Spickett // FULL-MANGLED: Found 1 functions:
838a64d80aSDavid Spickett // FULL-MANGLED-DAG: name = "foo(int)", mangled = "_Z3fooi"
848a64d80aSDavid Spickett 
85f968bd77SJaroslav Sevcik // FULL-MANGLED-NAMESPACE: Found 1 functions:
86f968bd77SJaroslav Sevcik // FULL-MANGLED-NAMESPACE-DAG: name = "bar::baz::foo()", mangled = "_ZN3bar3baz3fooEv"
87f968bd77SJaroslav Sevcik 
88f968bd77SJaroslav Sevcik // FULL-MANGLED-METHOD: Found 1 functions:
89f968bd77SJaroslav Sevcik // FULL-MANGLED-METHOD-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
90f968bd77SJaroslav Sevcik 
918a64d80aSDavid Spickett // CONTEXT: Found 1 functions:
9249504674SAdrian Prantl // CONTEXT-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv", decl_context = {Namespace(bar)}
938a64d80aSDavid Spickett 
94fa928458SAdrian Prantl // COMPILER-CONTEXT: Found 2 functions:
95fa928458SAdrian Prantl // COMPILER-CONTEXT-DAG: name = "sbar::foo()", mangled = "_ZN4sbar3fooEv"
96fa928458SAdrian Prantl // COMPILER-CONTEXT-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
97fa928458SAdrian Prantl 
988a64d80aSDavid Spickett // EMPTY: Found 0 functions:
998a64d80aSDavid Spickett 
foo()1008a64d80aSDavid Spickett void foo() {}
foo(int)1018a64d80aSDavid Spickett void foo(int) {}
1028a64d80aSDavid Spickett 
1038a64d80aSDavid Spickett namespace bar {
1048a64d80aSDavid Spickett int context;
foo()1058a64d80aSDavid Spickett void foo() {}
1068a64d80aSDavid Spickett namespace baz {
foo()1078a64d80aSDavid Spickett void foo() {}
1088a64d80aSDavid Spickett } // namespace baz
1098a64d80aSDavid Spickett } // namespace bar
1108a64d80aSDavid Spickett 
1118a64d80aSDavid Spickett struct foo {};
fbar(struct foo)1128a64d80aSDavid Spickett void fbar(struct foo) {}
1138a64d80aSDavid Spickett 
Foo()1148a64d80aSDavid Spickett void Foo() {}
1158a64d80aSDavid Spickett 
1168a64d80aSDavid Spickett struct sbar {
1178a64d80aSDavid Spickett   void foo();
1188a64d80aSDavid Spickett   static void foo(int);
1198a64d80aSDavid Spickett };
foo()1208a64d80aSDavid Spickett void sbar::foo() {}
foo(int)1218a64d80aSDavid Spickett void sbar::foo(int) {}
1228a64d80aSDavid Spickett 
ffbar()1238a64d80aSDavid Spickett void ffbar() {
1248a64d80aSDavid Spickett   struct sbaz {
1258a64d80aSDavid Spickett     void foo() {}
1268a64d80aSDavid Spickett   };
1278a64d80aSDavid Spickett   sbaz a;
1288a64d80aSDavid Spickett   a.foo();
1298a64d80aSDavid Spickett }
1308a64d80aSDavid Spickett 
_start()1318a64d80aSDavid Spickett extern "C" void _start() {}
132