forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[XRay][tools] Fix an accounting bug in llvm-xray account
Summary: Before this patch, llvm-xray account will assume that thread stacks will not be empty. Unfortunately there are cases where an instrumented function will see a call to `fork()` which will cause the child process to not see the start of the function, but only see the end of the function. The tooling cannot assume that threads will always have perfect stacks, and so we change it to support this reality. Reviewers: dblaikie Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D31870 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312204 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
1 parent
33a7788
commit 72cfebd
Showing
2 changed files
with
60 additions
and
3 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#RUN: not llvm-xray account %s -o - -m %S/Inputs/simple-instrmap.yaml -d 2>&1 | FileCheck %s | ||
#RUN: llvm-xray account %s -k -o - -m %S/Inputs/simple-instrmap.yaml -d 2>&1 | FileCheck %s --check-prefix=KEEPGOING | ||
|
||
--- | ||
header: | ||
version: 1 | ||
type: 0 | ||
constant-tsc: true | ||
nonstop-tsc: true | ||
cycle-frequency: 0 | ||
records: | ||
# We simulate the case when, for whatever reason, we see that a thread's stack | ||
# is empty when we see an EXIT record. This can happen for example when an | ||
# instrumented function does a 'fork()', where the child process will not see | ||
# the entry record but see the exit record. This is completely valid data, | ||
# which should be handled with grace (i.e. we treat it as an error, but since | ||
# the llvm-xray account tool has an option to keep going, gives the user a | ||
# chance to retry). | ||
- { type: 0, func-id: 1, cpu: 1, thread: 1, kind: function-exit, tsc: 10000} | ||
... | ||
|
||
#CHECK: Error processing record: {{.*}} | ||
#CHECK-NEXT: Thread ID: 1 | ||
#CHECK-NEXT: (empty stack) | ||
#CHECK-NEXT: llvm-xray: Failed accounting function calls in file '{{.*}}'. | ||
|
||
#KEEPGOING: Error processing record: {{.*}} | ||
#KEEPGOING-NEXT: Thread ID: 1 | ||
#KEEPGOING-NEXT: (empty stack) |
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