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>
8
9__attribute__((always_inline))
10void qux(int x) {
11  char *ptr = malloc(x);
12  memset(ptr, 0, x);
13  free(ptr);
14}
15
16__attribute__((noinline))
17void foo(int x){ qux(x); }
18
19__attribute__((noinline))
20void bar(int x) { foo(x); }
21
22int main(int argc, char **argv) {
23  bar(argc);
24  return 0;
25}
26```
27
28Compile and run with the following commands:
29
30```
31bin/clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \
32          -fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \
33          -fno-optimize-sibling-calls -m64 -Wl,-build-id inline.c -o memprof-inline.exe
34
35env MEMPROF_OPTIONS=log_path=stdout ./memprof-inline.exe > inline.memprofraw
36```
37
38From a debug run we collect the name to guid mappings to ensure that the
39ordering we observe is as expected.
40
41```
42build-dbg/bin/llvm-profdata show --memory --debug-only=memprof \
43          inline.memprofraw --profiled-binary memprof-inline.exe
44
45FunctionName: qux GUID: 15505678318020221912
46FunctionName: foo GUID: 6699318081062747564
47FunctionName: bar GUID: 16434608426314478903
48FunctionName: main GUID: 15822663052811949562
49
50[..omit output here which is checked below..]
51```
52
53RUN: llvm-profdata show --memory %p/Inputs/inline.memprofraw --profiled-binary %p/Inputs/memprof-inline.exe
54
55CHECK:  MemprofProfile:
56CHECK-NEXT:  -
57CHECK-NEXT:  Header:
58CHECK-NEXT:    Version: 1
59CHECK-NEXT:    TotalSizeBytes: 880
60CHECK-NEXT:    NumSegments: 9
61CHECK-NEXT:    NumMibInfo: 2
62CHECK-NEXT:    NumStackOffsets: 2
63CHECK-NEXT:  Records:
64CHECK-NEXT:  -
65CHECK-NEXT:    Callstack:
66CHECK-NEXT:    -
67CHECK-NEXT:      Function: 15505678318020221912
68CHECK-NEXT:      LineOffset: 1
69CHECK-NEXT:      Column: 15
70CHECK-NEXT:      Inline: 0
71CHECK-NEXT:    -
72CHECK-NEXT:      Function: 6699318081062747564
73CHECK-NEXT:      LineOffset: 0
74CHECK-NEXT:      Column: 18
75CHECK-NEXT:      Inline: 1
76CHECK-NEXT:    -
77CHECK-NEXT:      Function: 16434608426314478903
78CHECK-NEXT:      LineOffset: 0
79CHECK-NEXT:      Column: 19
80CHECK-NEXT:      Inline: 0
81CHECK-NEXT:    -
82CHECK-NEXT:      Function: 15822663052811949562
83CHECK-NEXT:      LineOffset: 1
84CHECK-NEXT:      Column: 3
85CHECK-NEXT:      Inline: 0
86CHECK-NEXT:    MemInfoBlock:
87CHECK-NEXT:      AllocCount: 1
88CHECK-NEXT:      TotalAccessCount: 1
89CHECK-NEXT:      MinAccessCount: 1
90CHECK-NEXT:      MaxAccessCount: 1
91CHECK-NEXT:      TotalSize: 1
92CHECK-NEXT:      MinSize: 1
93CHECK-NEXT:      MaxSize: 1
94CHECK-NEXT:      AllocTimestamp: 894
95CHECK-NEXT:      DeallocTimestamp: 894
96CHECK-NEXT:      TotalLifetime: 0
97CHECK-NEXT:      MinLifetime: 0
98CHECK-NEXT:      MaxLifetime: 0
99CHECK-NEXT:      AllocCpuId: 23
100CHECK-NEXT:      DeallocCpuId: 23
101CHECK-NEXT:      NumMigratedCpu: 0
102CHECK-NEXT:      NumLifetimeOverlaps: 0
103CHECK-NEXT:      NumSameAllocCpu: 0
104CHECK-NEXT:      NumSameDeallocCpu: 0
105CHECK-NEXT:      DataTypeId: {{[0-9]+}}
106
107