153 lines
4.9 KiB
Plaintext
153 lines
4.9 KiB
Plaintext
REQUIRES: x86_64-linux
|
|
|
|
The input raw profile test has been generated from the following source code:
|
|
|
|
```
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
int main(int argc, char **argv) {
|
|
char *x = (char *)malloc(10);
|
|
memset(x, 0, 10);
|
|
free(x);
|
|
x = (char *)malloc(10);
|
|
memset(x, 0, 10);
|
|
free(x);
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
The following commands were used to compile the source to a memprof instrumented
|
|
executable and collect a raw binary format profile. Since the profile contains
|
|
virtual addresses for the callstack, we do not expect the raw binary profile to
|
|
be deterministic. The summary should be deterministic apart from changes to
|
|
the shared libraries linked in which could change the number of segments
|
|
recorded.
|
|
|
|
```
|
|
clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \
|
|
-fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \
|
|
-fno-optimize-sibling-calls -m64 -Wl,-build-id -no-pie \
|
|
source.c -o basic.memprofexe
|
|
|
|
env MEMPROF_OPTIONS=log_path=stdout ./basic.memprofexe > basic.memprofraw
|
|
```
|
|
|
|
RUN: llvm-profdata show --memory %p/Inputs/basic.memprofraw --profiled-binary %p/Inputs/basic.memprofexe -o - | FileCheck %s
|
|
|
|
We expect 2 MIB entries, 1 each for the malloc calls in the program. Any
|
|
additional allocations which do not originate from the main binary are pruned.
|
|
|
|
CHECK: MemprofProfile:
|
|
CHECK-NEXT: Summary:
|
|
CHECK-NEXT: Version: 1
|
|
CHECK-NEXT: NumSegments: 9
|
|
CHECK-NEXT: NumMibInfo: 2
|
|
CHECK-NEXT: NumAllocFunctions: 1
|
|
CHECK-NEXT: NumStackOffsets: 2
|
|
CHECK-NEXT: Segments:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x200000
|
|
CHECK-NEXT: End: 0x298000
|
|
CHECK-NEXT: Offset: 0x0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7C7C000
|
|
CHECK-NEXT: End: 0x7FFFF7DC5000
|
|
CHECK-NEXT: Offset: 0x26000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7E1E000
|
|
CHECK-NEXT: End: 0x7FFFF7E30000
|
|
CHECK-NEXT: Offset: 0x3000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7E36000
|
|
CHECK-NEXT: End: 0x7FFFF7E38000
|
|
CHECK-NEXT: Offset: 0x1000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7E4A000
|
|
CHECK-NEXT: End: 0x7FFFF7EE5000
|
|
CHECK-NEXT: Offset: 0xF000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7F83000
|
|
CHECK-NEXT: End: 0x7FFFF7F87000
|
|
CHECK-NEXT: Offset: 0x3000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7F92000
|
|
CHECK-NEXT: End: 0x7FFFF7FA1000
|
|
CHECK-NEXT: Offset: 0x7000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7FD0000
|
|
CHECK-NEXT: End: 0x7FFFF7FD2000
|
|
CHECK-NEXT: Offset: 0x0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x7FFFF7FD3000
|
|
CHECK-NEXT: End: 0x7FFFF7FF3000
|
|
CHECK-NEXT: Offset: 0x1000
|
|
CHECK-NEXT: Records:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: FunctionGUID: {{[0-9]+}}
|
|
CHECK-NEXT: AllocSites:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Callstack:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: {{[0-9]+}}
|
|
CHECK-NEXT: SymbolName: main
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 21
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: MemInfoBlock:
|
|
CHECK-NEXT: AllocCount: 1
|
|
CHECK-NEXT: TotalAccessCount: 2
|
|
CHECK-NEXT: MinAccessCount: 2
|
|
CHECK-NEXT: MaxAccessCount: 2
|
|
CHECK-NEXT: TotalSize: 10
|
|
CHECK-NEXT: MinSize: 10
|
|
CHECK-NEXT: MaxSize: 10
|
|
CHECK-NEXT: AllocTimestamp: 986
|
|
CHECK-NEXT: DeallocTimestamp: 986
|
|
CHECK-NEXT: TotalLifetime: 0
|
|
CHECK-NEXT: MinLifetime: 0
|
|
CHECK-NEXT: MaxLifetime: 0
|
|
CHECK-NEXT: AllocCpuId: 56
|
|
CHECK-NEXT: DeallocCpuId: 56
|
|
CHECK-NEXT: NumMigratedCpu: 0
|
|
CHECK-NEXT: NumLifetimeOverlaps: 0
|
|
CHECK-NEXT: NumSameAllocCpu: 0
|
|
CHECK-NEXT: NumSameDeallocCpu: 0
|
|
CHECK-NEXT: DataTypeId: {{[0-9]+}}
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Callstack:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: {{[0-9]+}}
|
|
CHECK-NEXT: SymbolName: main
|
|
CHECK-NEXT: LineOffset: 5
|
|
CHECK-NEXT: Column: 15
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: MemInfoBlock:
|
|
CHECK-NEXT: AllocCount: 1
|
|
CHECK-NEXT: TotalAccessCount: 2
|
|
CHECK-NEXT: MinAccessCount: 2
|
|
CHECK-NEXT: MaxAccessCount: 2
|
|
CHECK-NEXT: TotalSize: 10
|
|
CHECK-NEXT: MinSize: 10
|
|
CHECK-NEXT: MaxSize: 10
|
|
CHECK-NEXT: AllocTimestamp: 987
|
|
CHECK-NEXT: DeallocTimestamp: 987
|
|
CHECK-NEXT: TotalLifetime: 0
|
|
CHECK-NEXT: MinLifetime: 0
|
|
CHECK-NEXT: MaxLifetime: 0
|
|
CHECK-NEXT: AllocCpuId: 56
|
|
CHECK-NEXT: DeallocCpuId: 56
|
|
CHECK-NEXT: NumMigratedCpu: 0
|
|
CHECK-NEXT: NumLifetimeOverlaps: 0
|
|
CHECK-NEXT: NumSameAllocCpu: 0
|
|
CHECK-NEXT: NumSameDeallocCpu: 0
|
|
CHECK-NEXT: DataTypeId: {{[0-9]+}}
|