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 -no-pie \
30      source.c -o basic.memprofexe
31
32env MEMPROF_OPTIONS=log_path=stdout ./basic.memprofexe > basic.memprofraw
33```
34
35RUN: llvm-profdata show --memory %p/Inputs/basic.memprofraw --profiled-binary %p/Inputs/basic.memprofexe -o - | FileCheck %s
36
37We expect 2 MIB entries, 1 each for the malloc calls in the program. Any
38additional allocations which do not originate from the main binary are pruned.
39
40CHECK:  MemprofProfile:
41CHECK-NEXT:   Summary:
42CHECK-NEXT:     Version: 1
43CHECK-NEXT:     NumSegments: 9
44CHECK-NEXT:     NumMibInfo: 2
45CHECK-NEXT:     NumAllocFunctions: 1
46CHECK-NEXT:     NumStackOffsets: 2
47CHECK-NEXT:   Segments:
48CHECK-NEXT:   -
49CHECK-NEXT:     BuildId: <None>
50CHECK-NEXT:     Start: 0x200000
51CHECK-NEXT:     End: 0x298000
52CHECK-NEXT:     Offset: 0x0
53CHECK-NEXT:   -
54CHECK-NEXT:     BuildId: <None>
55CHECK-NEXT:     Start: 0x7FFFF7C7C000
56CHECK-NEXT:     End: 0x7FFFF7DC5000
57CHECK-NEXT:     Offset: 0x26000
58CHECK-NEXT:   -
59CHECK-NEXT:     BuildId: <None>
60CHECK-NEXT:     Start: 0x7FFFF7E1E000
61CHECK-NEXT:     End: 0x7FFFF7E30000
62CHECK-NEXT:     Offset: 0x3000
63CHECK-NEXT:   -
64CHECK-NEXT:     BuildId: <None>
65CHECK-NEXT:     Start: 0x7FFFF7E36000
66CHECK-NEXT:     End: 0x7FFFF7E38000
67CHECK-NEXT:     Offset: 0x1000
68CHECK-NEXT:   -
69CHECK-NEXT:     BuildId: <None>
70CHECK-NEXT:     Start: 0x7FFFF7E4A000
71CHECK-NEXT:     End: 0x7FFFF7EE5000
72CHECK-NEXT:     Offset: 0xF000
73CHECK-NEXT:   -
74CHECK-NEXT:     BuildId: <None>
75CHECK-NEXT:     Start: 0x7FFFF7F83000
76CHECK-NEXT:     End: 0x7FFFF7F87000
77CHECK-NEXT:     Offset: 0x3000
78CHECK-NEXT:   -
79CHECK-NEXT:     BuildId: <None>
80CHECK-NEXT:     Start: 0x7FFFF7F92000
81CHECK-NEXT:     End: 0x7FFFF7FA1000
82CHECK-NEXT:     Offset: 0x7000
83CHECK-NEXT:   -
84CHECK-NEXT:     BuildId: <None>
85CHECK-NEXT:     Start: 0x7FFFF7FD0000
86CHECK-NEXT:     End: 0x7FFFF7FD2000
87CHECK-NEXT:     Offset: 0x0
88CHECK-NEXT:   -
89CHECK-NEXT:     BuildId: <None>
90CHECK-NEXT:     Start: 0x7FFFF7FD3000
91CHECK-NEXT:     End: 0x7FFFF7FF3000
92CHECK-NEXT:     Offset: 0x1000
93CHECK-NEXT:   Records:
94CHECK-NEXT:   -
95CHECK-NEXT:     FunctionGUID: {{[0-9]+}}
96CHECK-NEXT:     AllocSites:
97CHECK-NEXT:     -
98CHECK-NEXT:       Callstack:
99CHECK-NEXT:       -
100CHECK-NEXT:         Function: {{[0-9]+}}
101CHECK-NEXT:         SymbolName: main
102CHECK-NEXT:         LineOffset: 1
103CHECK-NEXT:         Column: 21
104CHECK-NEXT:         Inline: 0
105CHECK-NEXT:       MemInfoBlock:
106CHECK-NEXT:         AllocCount: 1
107CHECK-NEXT:         TotalAccessCount: 2
108CHECK-NEXT:         MinAccessCount: 2
109CHECK-NEXT:         MaxAccessCount: 2
110CHECK-NEXT:         TotalSize: 10
111CHECK-NEXT:         MinSize: 10
112CHECK-NEXT:         MaxSize: 10
113CHECK-NEXT:         AllocTimestamp: 986
114CHECK-NEXT:         DeallocTimestamp: 986
115CHECK-NEXT:         TotalLifetime: 0
116CHECK-NEXT:         MinLifetime: 0
117CHECK-NEXT:         MaxLifetime: 0
118CHECK-NEXT:         AllocCpuId: 56
119CHECK-NEXT:         DeallocCpuId: 56
120CHECK-NEXT:         NumMigratedCpu: 0
121CHECK-NEXT:         NumLifetimeOverlaps: 0
122CHECK-NEXT:         NumSameAllocCpu: 0
123CHECK-NEXT:         NumSameDeallocCpu: 0
124CHECK-NEXT:         DataTypeId: {{[0-9]+}}
125CHECK-NEXT:     -
126CHECK-NEXT:       Callstack:
127CHECK-NEXT:       -
128CHECK-NEXT:         Function: {{[0-9]+}}
129CHECK-NEXT:         SymbolName: main
130CHECK-NEXT:         LineOffset: 5
131CHECK-NEXT:         Column: 15
132CHECK-NEXT:         Inline: 0
133CHECK-NEXT:       MemInfoBlock:
134CHECK-NEXT:         AllocCount: 1
135CHECK-NEXT:         TotalAccessCount: 2
136CHECK-NEXT:         MinAccessCount: 2
137CHECK-NEXT:         MaxAccessCount: 2
138CHECK-NEXT:         TotalSize: 10
139CHECK-NEXT:         MinSize: 10
140CHECK-NEXT:         MaxSize: 10
141CHECK-NEXT:         AllocTimestamp: 987
142CHECK-NEXT:         DeallocTimestamp: 987
143CHECK-NEXT:         TotalLifetime: 0
144CHECK-NEXT:         MinLifetime: 0
145CHECK-NEXT:         MaxLifetime: 0
146CHECK-NEXT:         AllocCpuId: 56
147CHECK-NEXT:         DeallocCpuId: 56
148CHECK-NEXT:         NumMigratedCpu: 0
149CHECK-NEXT:         NumLifetimeOverlaps: 0
150CHECK-NEXT:         NumSameAllocCpu: 0
151CHECK-NEXT:         NumSameDeallocCpu: 0
152CHECK-NEXT:         DataTypeId: {{[0-9]+}}
153