llvm / llvm/llvm-project

Malformed instrumentation profile data can occur in some WebAssembly binaries

Open
#192,833 1 comment 0 reactions 0 assignees View on GitHub
backend:WebAssembly PGO
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

This is a minimal repro discussed in #172023.

```c
// foo.c
extern void bar(void);

void foo(void) {
bar();
}
```

```c
// bar.c
void bar(void) {}
```

Use emscripten:
```
emcc -c bar.c -g -fprofile-instr-generate -fcoverage-mapping -o bar.o
emar rcs libbar.a bar.o
emcc foo.c libbar.a -g -fprofile-instr-generate -fcoverage-mapping -sSTANDALONE_WASM=1 -Wl,--gc-sections,--no-entry -o x.wasm
llvm-cov export --object x.wasm --empty-profile
error: failed to load coverage: 'x.wasm': malformed instrumentation profile data: function name is empty
error: could not load coverage information
```

Use clang:
```c
// instr-prof.c
int __llvm_profile_runtime = 0;
```
```
clang -fprofile-instr-generate -fcoverage-mapping instr-prof.c foo.c bar.c -c -target wasm32-unknown-unknown
wasm-ld instr-prof.o foo.o --start-lib bar.o --end-lib --gc-sections --no-entry -o x.wasm
llvm-cov export --object x.wasm --empty-profile
error: failed to load coverage: 'x.wasm': malformed instrumentation profile data: function name is empty
error: could not load coverage information
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.