When LLVM_PROFILE_FILE is set incorrectly (e.g. multiple %c) and it falls back to use `default.profraw` name, but continuous mode is still set. This might cause signal bus in the following scenario. LLVM_PROFILE_FILE is set incorrectly (with "%c%c") for process A and B. Suppose A starts first and falls back to use `default.profraw` and mmaped its file content to memory. Later B starts and also falls back to use `default.profraw`, but it will truncate the file because online merging is disable when reseting to `default.profraw`. When A tries to update counter via mmaped memory, signal bus will occur. This fixes it by disabling continuous mode when reset to default.profraw.
22 lines
688 B
C
22 lines
688 B
C
// REQUIRES: darwin || linux
|
|
|
|
// Test when LLVM_PROFILE_FILE is set incorrectly, it should fall backs to use default.profraw without runtime error.
|
|
|
|
// Create & cd into a temporary directory.
|
|
// RUN: rm -rf %t.dir && mkdir -p %t.dir && cd %t.dir
|
|
// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -mllvm -runtime-counter-relocation=true -o %t.exe %s
|
|
// RUN: env LLVM_PROFILE_FILE="incorrect-profile-name%m%c%c.profraw" %run %t.exe
|
|
// RUN: ls -l | FileCheck %s
|
|
|
|
// CHECK: default.profraw
|
|
// CHECK-NOT: incorrect-profile-name.profraw
|
|
|
|
#include <stdio.h>
|
|
int f() { return 0; }
|
|
|
|
int main(int argc, char **argv) {
|
|
FILE *File = fopen("default.profraw", "w");
|
|
f();
|
|
return 0;
|
|
}
|