This repository was archived by the owner on Jan 17, 2025. It is now read-only.

Description
We now do not support hybrid PE files (ARM64EC). When sampling users hit an assert:
wperf.exe record -v -e l1i_cache -c 0 --timeout 7 -- workload.exe
deduced image name 'workload.exe'
deduced image PDB file 'workload.pdb'
pe_file 'workload.exe', args 'workload.exe'
workload.exe pid is 26636
================================
KERNEL32.DLL 0x000000007ffdd5540000 C:\WINDOWS\System32\KERNEL32.DLL
KERNELBASE.dll 0x000000007ffdd4240000 C:\WINDOWS\System32\KERNELBASE.dll
...
base address of 'workload.exe': 0x7ff6818f12f4, runtime delta: 0x7ff5418f0000
sampling ...... done!
=================
sample generated: 154
sample dropped : 0
sample drop rate: 0.00%
Sampling stopped, process pid=26636 exited with code 0x0000
Assertion failed: b.sec_idx, file C:\path\to\source\windowsperf\wperf\main.cpp, line 753
Additional documentation
Regarding the assert: a little investigation:
Debug prints:

Rerunning gives tons of lines like:
VCRUNTIME140.dll has no section index for #_SomeSymbolName
Workaround:

Note: The key thing is that vcruntime140.dll is an arm64X dll, and it has two “halves” – an arm64EC side, and arm64 native side. The assert was firing on symbols from the arm64EC side (you can tell because those methods are prefixed with #).
See: