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/inline.memprofexe | FileCheck %s 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: FunctionGUID: 15505678318020221912 66CHECK-NEXT: AllocSites: 67CHECK-NEXT: - 68CHECK-NEXT: Callstack: 69CHECK-NEXT: - 70CHECK-NEXT: Function: 15505678318020221912 71CHECK-NEXT: LineOffset: 1 72CHECK-NEXT: Column: 15 73CHECK-NEXT: Inline: 1 74CHECK-NEXT: - 75CHECK-NEXT: Function: 6699318081062747564 76CHECK-NEXT: LineOffset: 0 77CHECK-NEXT: Column: 18 78CHECK-NEXT: Inline: 0 79CHECK-NEXT: - 80CHECK-NEXT: Function: 16434608426314478903 81CHECK-NEXT: LineOffset: 0 82CHECK-NEXT: Column: 19 83CHECK-NEXT: Inline: 0 84CHECK-NEXT: - 85CHECK-NEXT: Function: 15822663052811949562 86CHECK-NEXT: LineOffset: 1 87CHECK-NEXT: Column: 3 88CHECK-NEXT: Inline: 0 89CHECK-NEXT: MemInfoBlock: 90CHECK-NEXT: AllocCount: 1 91CHECK-NEXT: TotalAccessCount: 1 92CHECK-NEXT: MinAccessCount: 1 93CHECK-NEXT: MaxAccessCount: 1 94CHECK-NEXT: TotalSize: 1 95CHECK-NEXT: MinSize: 1 96CHECK-NEXT: MaxSize: 1 97CHECK-NEXT: AllocTimestamp: 894 98CHECK-NEXT: DeallocTimestamp: 894 99CHECK-NEXT: TotalLifetime: 0 100CHECK-NEXT: MinLifetime: 0 101CHECK-NEXT: MaxLifetime: 0 102CHECK-NEXT: AllocCpuId: 23 103CHECK-NEXT: DeallocCpuId: 23 104CHECK-NEXT: NumMigratedCpu: 0 105CHECK-NEXT: NumLifetimeOverlaps: 0 106CHECK-NEXT: NumSameAllocCpu: 0 107CHECK-NEXT: NumSameDeallocCpu: 0 108CHECK-NEXT: DataTypeId: {{[0-9]+}} 109CHECK-NEXT: - 110CHECK-NEXT: FunctionGUID: 6699318081062747564 111CHECK-NEXT: AllocSites: 112CHECK-NEXT: - 113CHECK-NEXT: Callstack: 114CHECK-NEXT: - 115CHECK-NEXT: Function: 15505678318020221912 116CHECK-NEXT: LineOffset: 1 117CHECK-NEXT: Column: 15 118CHECK-NEXT: Inline: 1 119CHECK-NEXT: - 120CHECK-NEXT: Function: 6699318081062747564 121CHECK-NEXT: LineOffset: 0 122CHECK-NEXT: Column: 18 123CHECK-NEXT: Inline: 0 124CHECK-NEXT: - 125CHECK-NEXT: Function: 16434608426314478903 126CHECK-NEXT: LineOffset: 0 127CHECK-NEXT: Column: 19 128CHECK-NEXT: Inline: 0 129CHECK-NEXT: - 130CHECK-NEXT: Function: 15822663052811949562 131CHECK-NEXT: LineOffset: 1 132CHECK-NEXT: Column: 3 133CHECK-NEXT: Inline: 0 134CHECK-NEXT: MemInfoBlock: 135CHECK-NEXT: AllocCount: 1 136CHECK-NEXT: TotalAccessCount: 1 137CHECK-NEXT: MinAccessCount: 1 138CHECK-NEXT: MaxAccessCount: 1 139CHECK-NEXT: TotalSize: 1 140CHECK-NEXT: MinSize: 1 141CHECK-NEXT: MaxSize: 1 142CHECK-NEXT: AllocTimestamp: 894 143CHECK-NEXT: DeallocTimestamp: 894 144CHECK-NEXT: TotalLifetime: 0 145CHECK-NEXT: MinLifetime: 0 146CHECK-NEXT: MaxLifetime: 0 147CHECK-NEXT: AllocCpuId: 23 148CHECK-NEXT: DeallocCpuId: 23 149CHECK-NEXT: NumMigratedCpu: 0 150CHECK-NEXT: NumLifetimeOverlaps: 0 151CHECK-NEXT: NumSameAllocCpu: 0 152CHECK-NEXT: NumSameDeallocCpu: 0 153CHECK-NEXT: DataTypeId: {{[0-9]+}} 154CHECK-NEXT: CallSites: 155CHECK-NEXT: - 156CHECK-NEXT: - 157CHECK-NEXT: Function: 15505678318020221912 158CHECK-NEXT: LineOffset: 1 159CHECK-NEXT: Column: 15 160CHECK-NEXT: Inline: 1 161CHECK-NEXT: - 162CHECK-NEXT: - 163CHECK-NEXT: Function: 6699318081062747564 164CHECK-NEXT: LineOffset: 0 165CHECK-NEXT: Column: 18 166CHECK-NEXT: Inline: 0 167CHECK-NEXT: - 168CHECK-NEXT: FunctionGUID: 15822663052811949562 169CHECK-NEXT: CallSites: 170CHECK-NEXT: - 171CHECK-NEXT: - 172CHECK-NEXT: Function: 15822663052811949562 173CHECK-NEXT: LineOffset: 1 174CHECK-NEXT: Column: 3 175CHECK-NEXT: Inline: 0 176CHECK-NEXT: - 177CHECK-NEXT: FunctionGUID: 16434608426314478903 178CHECK-NEXT: CallSites: 179CHECK-NEXT: - 180CHECK-NEXT: - 181CHECK-NEXT: Function: 16434608426314478903 182CHECK-NEXT: LineOffset: 0 183CHECK-NEXT: Column: 19 184CHECK-NEXT: Inline: 0 185