This repository has been archived by the owner on Jul 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 180
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PR] Instrumentation: use TryLock for SimpleHashTable getter
Summary: This commit introduces TryLock usage for SimpleHashTable getter to avoid deadlock and relax syscalls usage which causes significant overhead in runtime. The old behavior left under -conservative-instrumentation option passed to instrumentation library. Also, this commit includes a corresponding test case: instrumentation of executable which performs indirect calls from common code and signal handler. Note: in case if TryLock was failed to acquire the lock - this indirect call will not be accounted in the resulting profile. Vasily Leonenko, Advanced Software Technology Lab, Huawei
- Loading branch information
1 parent
50023b9
commit 09adc38
Showing
5 changed files
with
109 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
/* Checks that BOLT correctly handles instrumentation of indirect calls | ||
* including case with indirect calls in signals handlers. | ||
*/ | ||
#include <signal.h> | ||
#include <stdio.h> | ||
#include <sys/types.h> | ||
#include <sys/wait.h> | ||
#include <unistd.h> | ||
|
||
int foo(int x) { return x + 1; } | ||
|
||
int bar(int (*fn)(int), int val) { return fn(val); } | ||
|
||
void sigHandler(int signum) { bar(foo, 3); } | ||
|
||
int main(int argc, char **argv) { | ||
long long i; | ||
pid_t pid, wpid; | ||
int wstatus; | ||
signal(SIGUSR1, sigHandler); | ||
pid = fork(); | ||
if (pid) { | ||
do { | ||
kill(pid, SIGUSR1); | ||
usleep(0); | ||
wpid = waitpid(pid, &wstatus, WNOHANG); | ||
} while (wpid == 0); | ||
printf("[parent]\n"); | ||
} else { | ||
for (i = 0; i < 100000; i++) { | ||
bar(foo, i % 10); | ||
} | ||
printf("[child]\n"); | ||
} | ||
return 0; | ||
} | ||
|
||
/* | ||
REQUIRES: system-linux && lit-max-individual-test-time | ||
RUN: %host_cc %cflags %s -o %t.exe -Wl,-q -pie -fpie | ||
RUN: llvm-bolt %t.exe -instrument -instrumentation-file=%t.fdata \ | ||
RUN: -instrumentation-wait-forks=1 -conservative-instrumentation \ | ||
RUN: -o %t.instrumented_conservative | ||
# Instrumented program needs to finish returning zero | ||
RUN: %t.instrumented_conservative | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
RUN: llvm-bolt %t.exe -instrument -instrumentation-file=%t.fdata \ | ||
RUN: -instrumentation-wait-forks=1 \ | ||
RUN: -o %t.instrumented | ||
# Instrumented program needs to finish returning zero | ||
RUN: %t.instrumented | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
# Test that the instrumented data makes sense | ||
RUN: llvm-bolt %t.exe -o %t.bolted -data %t.fdata \ | ||
RUN: -reorder-blocks=cache+ -reorder-functions=hfsort+ \ | ||
RUN: -print-only=interp -print-finalized | ||
RUN: %t.bolted | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
CHECK-OUTPUT: [child] | ||
CHECK-OUTPUT: [parent] | ||
*/ |