1REQUIRES: x86_64-linux
2
3The input raw profile test has been generated from the following source code:
4
5```
6#include <stdlib.h>
7#include <string.h>
8int main(int argc, char **argv) {
9  char *x = (char *)malloc(10);
10  memset(x, 0, 10);
11  free(x);
12  x = (char *)malloc(10);
13  memset(x, 0, 10);
14  free(x);
15  return 0;
16}
17```
18
19The following commands were used to compile the source to a memprof instrumented
20executable and collect a raw binary format profile. Since the profile contains
21virtual addresses for the callstack, we do not expect the raw binary profile to
22be deterministic. The summary should be deterministic apart from changes to
23the shared libraries linked in which could change the number of segments
24recorded.
25
26```
27clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \
28      -fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \
29      -fno-optimize-sibling-calls -m64 -Wl,-build-id source.c -o basic.memprofexe
30
31env MEMPROF_OPTIONS=log_path=stdout ./rawprofile.out > basic.memprofraw
32```
33
34RUN: llvm-profdata show --memory %p/Inputs/basic.memprofraw --profiled-binary %p/Inputs/basic.memprofexe -o - | FileCheck %s
35
36We expect 2 MIB entries, 1 each for the malloc calls in the program. Any
37additional allocations which do not originate from the main binary are pruned.
38
39CHECK:  MemprofProfile:
40CHECK-NEXT:   Summary:
41CHECK-NEXT:     Version: 1
42CHECK-NEXT:     NumSegments: 9
43CHECK-NEXT:     NumMibInfo: 2
44CHECK-NEXT:     NumAllocFunctions: 1
45CHECK-NEXT:     NumStackOffsets: 2
46CHECK-NEXT:   Segments:
47CHECK-NEXT:   -
48CHECK-NEXT:     BuildId: <None>
49CHECK-NEXT:     Start: 0x200000
50CHECK-NEXT:     End: 0x298000
51CHECK-NEXT:     Offset: 0x0
52CHECK-NEXT:   -
53CHECK-NEXT:     BuildId: <None>
54CHECK-NEXT:     Start: 0x7FFFF7C7C000
55CHECK-NEXT:     End: 0x7FFFF7DC5000
56CHECK-NEXT:     Offset: 0x26000
57CHECK-NEXT:   -
58CHECK-NEXT:     BuildId: <None>
59CHECK-NEXT:     Start: 0x7FFFF7E1E000
60CHECK-NEXT:     End: 0x7FFFF7E30000
61CHECK-NEXT:     Offset: 0x3000
62CHECK-NEXT:   -
63CHECK-NEXT:     BuildId: <None>
64CHECK-NEXT:     Start: 0x7FFFF7E36000
65CHECK-NEXT:     End: 0x7FFFF7E38000
66CHECK-NEXT:     Offset: 0x1000
67CHECK-NEXT:   -
68CHECK-NEXT:     BuildId: <None>
69CHECK-NEXT:     Start: 0x7FFFF7E4A000
70CHECK-NEXT:     End: 0x7FFFF7EE5000
71CHECK-NEXT:     Offset: 0xF000
72CHECK-NEXT:   -
73CHECK-NEXT:     BuildId: <None>
74CHECK-NEXT:     Start: 0x7FFFF7F83000
75CHECK-NEXT:     End: 0x7FFFF7F87000
76CHECK-NEXT:     Offset: 0x3000
77CHECK-NEXT:   -
78CHECK-NEXT:     BuildId: <None>
79CHECK-NEXT:     Start: 0x7FFFF7F92000
80CHECK-NEXT:     End: 0x7FFFF7FA1000
81CHECK-NEXT:     Offset: 0x7000
82CHECK-NEXT:   -
83CHECK-NEXT:     BuildId: <None>
84CHECK-NEXT:     Start: 0x7FFFF7FD0000
85CHECK-NEXT:     End: 0x7FFFF7FD2000
86CHECK-NEXT:     Offset: 0x0
87CHECK-NEXT:   -
88CHECK-NEXT:     BuildId: <None>
89CHECK-NEXT:     Start: 0x7FFFF7FD3000
90CHECK-NEXT:     End: 0x7FFFF7FF3000
91CHECK-NEXT:     Offset: 0x1000
92CHECK-NEXT:   Records:
93CHECK-NEXT:   -
94CHECK-NEXT:     FunctionGUID: {{[0-9]+}}
95CHECK-NEXT:     AllocSites:
96CHECK-NEXT:     -
97CHECK-NEXT:       Callstack:
98CHECK-NEXT:       -
99CHECK-NEXT:         Function: {{[0-9]+}}
100CHECK-NEXT:         SymbolName: main
101CHECK-NEXT:         LineOffset: 1
102CHECK-NEXT:         Column: 21
103CHECK-NEXT:         Inline: 0
104CHECK-NEXT:       MemInfoBlock:
105CHECK-NEXT:         AllocCount: 1
106CHECK-NEXT:         TotalAccessCount: 2
107CHECK-NEXT:         MinAccessCount: 2
108CHECK-NEXT:         MaxAccessCount: 2
109CHECK-NEXT:         TotalSize: 10
110CHECK-NEXT:         MinSize: 10
111CHECK-NEXT:         MaxSize: 10
112CHECK-NEXT:         AllocTimestamp: 986
113CHECK-NEXT:         DeallocTimestamp: 986
114CHECK-NEXT:         TotalLifetime: 0
115CHECK-NEXT:         MinLifetime: 0
116CHECK-NEXT:         MaxLifetime: 0
117CHECK-NEXT:         AllocCpuId: 56
118CHECK-NEXT:         DeallocCpuId: 56
119CHECK-NEXT:         NumMigratedCpu: 0
120CHECK-NEXT:         NumLifetimeOverlaps: 0
121CHECK-NEXT:         NumSameAllocCpu: 0
122CHECK-NEXT:         NumSameDeallocCpu: 0
123CHECK-NEXT:         DataTypeId: {{[0-9]+}}
124CHECK-NEXT:     -
125CHECK-NEXT:       Callstack:
126CHECK-NEXT:       -
127CHECK-NEXT:         Function: {{[0-9]+}}
128CHECK-NEXT:         SymbolName: main
129CHECK-NEXT:         LineOffset: 5
130CHECK-NEXT:         Column: 15
131CHECK-NEXT:         Inline: 0
132CHECK-NEXT:       MemInfoBlock:
133CHECK-NEXT:         AllocCount: 1
134CHECK-NEXT:         TotalAccessCount: 2
135CHECK-NEXT:         MinAccessCount: 2
136CHECK-NEXT:         MaxAccessCount: 2
137CHECK-NEXT:         TotalSize: 10
138CHECK-NEXT:         MinSize: 10
139CHECK-NEXT:         MaxSize: 10
140CHECK-NEXT:         AllocTimestamp: 987
141CHECK-NEXT:         DeallocTimestamp: 987
142CHECK-NEXT:         TotalLifetime: 0
143CHECK-NEXT:         MinLifetime: 0
144CHECK-NEXT:         MaxLifetime: 0
145CHECK-NEXT:         AllocCpuId: 56
146CHECK-NEXT:         DeallocCpuId: 56
147CHECK-NEXT:         NumMigratedCpu: 0
148CHECK-NEXT:         NumLifetimeOverlaps: 0
149CHECK-NEXT:         NumSameAllocCpu: 0
150CHECK-NEXT:         NumSameDeallocCpu: 0
151CHECK-NEXT:         DataTypeId: {{[0-9]+}}
152