1// REQUIRES: linux
2// RUN: %clang_profgen -Wl,--build-id=none -O2 -o %t %s
3// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
4// RUN: llvm-profdata show --binary-ids %t.profraw > %t.out
5// RUN: FileCheck %s --check-prefix=NO-BINARY-ID < %t.out
6// RUN: llvm-profdata merge -o %t.profdata %t.profraw
7
8// RUN: %clang_profgen -Wl,--build-id -O2 -o %t %s
9// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
10// RUN: llvm-profdata show --binary-ids %t.profraw > %t.profraw.out
11// RUN: FileCheck %s --check-prefix=BINARY-ID-RAW-PROF < %t.profraw.out
12
13// RUN: rm -rf %t.profdir
14// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
15// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
16// RUN: env LLVM_PROFILE_FILE=%t.profdir/default_%m.profraw %run %t
17// RUN: llvm-profdata show --binary-ids %t.profdir/default_*.profraw > %t.profraw.out
18// RUN: FileCheck %s --check-prefix=BINARY-ID-MERGE-PROF < %t.profraw.out
19
20// RUN: llvm-profdata merge -o %t.profdata %t.profdir/default_*.profraw
21// RUN: llvm-profdata show --binary-ids %t.profdata > %t.profdata.out
22// RUN: FileCheck %s --check-prefix=BINARY-ID-INDEXED-PROF < %t.profdata.out
23
24// Test raw profiles with shared libraries.
25// RUN: split-file %s %t.dir
26// RUN: %clang_profgen -Wl,--build-id -fpic -shared -O2 %t.dir/foo.c -o %t.dir/libfoo.so
27// RUN: %clang_profgen -Wl,--build-id -fpic -shared -O2 %t.dir/bar.c -o %t.dir/libbar.so
28// RUN: %clang_profgen -Wl,--build-id -O2 %t.dir/main.c %t.dir/libfoo.so %t.dir/libbar.so -o %t
29// RUN: env LLVM_PROFILE_FILE=%t.profraw LD_LIBRARY_PATH=%t.dir %run %t
30// RUN: llvm-profdata show --binary-ids %t.profraw > %t.profraw.out
31// RUN: llvm-profdata merge -o %t.profdata %t.profraw
32// RUN: FileCheck %s --check-prefix=BINARY-ID-SHARE-RAW-PROF < %t.profraw.out
33
34// RUN: llvm-profdata merge -o %t.profdata %t.profraw
35// RUN: llvm-profdata show --binary-ids %t.profdata > %t.profdata.out
36// RUN: FileCheck %s --check-prefix=BINARY-ID-SHARE-INDEXED-PROF < %t.profraw.out
37
38//--- foo.c
39void foo() {
40}
41
42//--- bar.c
43void bar() {
44}
45
46//--- main.c
47void foo();
48void bar();
49int main() {
50 foo();
51 bar();
52 return 0;
53}
54
55// NO-BINARY-ID: Instrumentation level: Front-end
56// NO-BINARY-ID-NEXT: Total functions: 3
57// NO-BINARY-ID-NEXT: Maximum function count: 1
58// NO-BINARY-ID-NEXT: Maximum internal block count: 0
59// NO-BINARY-ID-NOT: Binary IDs:
60
61// BINARY-ID-RAW-PROF: Instrumentation level: Front-end
62// BINARY-ID-RAW-PROF-NEXT: Total functions: 3
63// BINARY-ID-RAW-PROF-NEXT: Maximum function count: 1
64// BINARY-ID-RAW-PROF-NEXT: Maximum internal block count: 0
65// BINARY-ID-RAW-PROF-NEXT: Total number of blocks: 3
66// BINARY-ID-RAW-PROF-NEXT: Total count: 3
67// BINARY-ID-RAW-PROF-NEXT: Binary IDs:
68// BINARY-ID-RAW-PROF-NEXT: {{[0-9a-f]+}}
69
70// BINARY-ID-MERGE-PROF: Instrumentation level: Front-end
71// BINARY-ID-MERGE-PROF-NEXT: Total functions: 3
72// BINARY-ID-MERGE-PROF-NEXT: Maximum function count: 3
73// BINARY-ID-MERGE-PROF-NEXT: Maximum internal block count: 0
74// BINARY-ID-MERGE-PROF-NEXT: Total number of blocks: 3
75// BINARY-ID-MERGE-PROF-NEXT: Total count: 9
76// BINARY-ID-MERGE-PROF-NEXT: Binary IDs:
77// BINARY-ID-MERGE-PROF-NEXT: {{[0-9a-f]+}}
78
79// BINARY-ID-INDEXED-PROF: Instrumentation level: Front-end
80// BINARY-ID-INDEXED-PROF-NEXT: Total functions: 3
81// BINARY-ID-INDEXED-PROF-NEXT: Maximum function count: 3
82// BINARY-ID-INDEXED-PROF-NEXT: Maximum internal block count: 0
83// BINARY-ID-INDEXED-PROF-NEXT: Total number of blocks: 3
84// BINARY-ID-INDEXED-PROF-NEXT: Total count: 9
85// BINARY-ID-INDEXED-PROF-NEXT: Binary IDs:
86// BINARY-ID-INDEXED-PROF-NEXT: {{[0-9a-f]+}}
87
88// BINARY-ID-SHARE-RAW-PROF: Instrumentation level: Front-end
89// BINARY-ID-SHARE-RAW-PROF-NEXT: Total functions: 3
90// BINARY-ID-SHARE-RAW-PROF-NEXT: Maximum function count: 1
91// BINARY-ID-SHARE-RAW-PROF-NEXT: Maximum internal block count: 0
92// BINARY-ID-SHARE-RAW-PROF-NEXT: Total number of blocks: 3
93// BINARY-ID-SHARE-RAW-PROF-NEXT: Total count: 3
94// BINARY-ID-SHARE-RAW-PROF-NEXT: Binary IDs:
95// BINARY-ID-SHARE-RAW-PROF-NEXT: {{[0-9a-f]+}}
96// BINARY-ID-SHARE-RAW-PROF-NEXT: {{[0-9a-f]+}}
97// BINARY-ID-SHARE-RAW-PROF-NEXT: {{[0-9a-f]+}}
98
99// BINARY-ID-SHARE-INDEXED-PROF: Instrumentation level: Front-end
100// BINARY-ID-SHARE-INDEXED-PROF-NEXT: Total functions: 3
101// BINARY-ID-SHARE-INDEXED-PROF-NEXT: Maximum function count: 1
102// BINARY-ID-SHARE-INDEXED-PROF-NEXT: Maximum internal block count: 0
103// BINARY-ID-SHARE-INDEXED-PROF-NEXT: Total number of blocks: 3
104// BINARY-ID-SHARE-INDEXED-PROF-NEXT: Total count: 3
105// BINARY-ID-SHARE-INDEXED-PROF-NEXT: Binary IDs:
106// BINARY-ID-SHARE-INDEXED-PROF-NEXT: {{[0-9a-f]+}}
107// BINARY-ID-SHARE-INDEXED-PROF-NEXT: {{[0-9a-f]+}}
108// BINARY-ID-SHARE-INDEXED-PROF-NEXT: {{[0-9a-f]+}}
109

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of compiler-rt/test/profile/Linux/binary-id.c