summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDean Michael Berris <dberris@google.com>2018-07-11 07:14:27 +0000
committerDean Michael Berris <dberris@google.com>2018-07-11 07:14:27 +0000
commit2b21d99e40a4c999ddb13c858b66800ec17cf24f (patch)
tree9e1f65d76ee3f27f99b94f1fe90ce076be975dc0 /lib
parenta23f2b1f37752905e78ef7a8480da2d1b45b64dc (diff)
[XRay] basic mode PID and TID always fetch
Summary: XRayRecords now includes a PID field. Basic handlers fetch pid and tid each time they are called instead of caching the value. Added a testcase that calls fork and checks if the child TID is different from the parent TID to verify that the processes' TID are different in the trace. Reviewers: dberris, Maknee Reviewed By: dberris, Maknee Subscribers: kpw, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D49025 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@336769 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/xray/xray_basic_logging.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/xray/xray_basic_logging.cc b/lib/xray/xray_basic_logging.cc
index 138679dd9..529fde8d5 100644
--- a/lib/xray/xray_basic_logging.cc
+++ b/lib/xray/xray_basic_logging.cc
@@ -60,7 +60,6 @@ struct alignas(64) ThreadLocalData {
size_t StackSize = 0;
size_t StackEntries = 0;
int Fd = -1;
- tid_t TID = 0;
};
static pthread_key_t PThreadKey;
@@ -119,7 +118,6 @@ static ThreadLocalData &getThreadLocalData() XRAY_NEVER_INSTRUMENT {
Report("Not initializing TLD since ThreadBufferSize == 0.\n");
return false;
}
- TLD.TID = GetTid();
pthread_setspecific(PThreadKey, &TLD);
TLD.Fd = getGlobalFd();
TLD.InMemoryBuffer = reinterpret_cast<XRayRecord *>(
@@ -227,7 +225,8 @@ void InMemoryRawLog(int32_t FuncId, XRayEntryType Type,
R.RecordType = RecordTypes::NORMAL;
R.CPU = CPU;
R.TSC = TSC;
- R.TId = TLD.TID;
+ R.TId = GetTid();
+ R.PId = internal_getpid();
R.Type = Type;
R.FuncId = FuncId;
auto FirstEntry = reinterpret_cast<XRayRecord *>(TLD.InMemoryBuffer);
@@ -274,7 +273,8 @@ void InMemoryRawLogWithArg(int32_t FuncId, XRayEntryType Type, uint64_t Arg1,
XRayArgPayload R;
R.RecordType = RecordTypes::ARG_PAYLOAD;
R.FuncId = FuncId;
- R.TId = TLD.TID;
+ R.TId = GetTid();
+ R.PId = internal_getpid();
R.Arg = Arg1;
internal_memcpy(FirstEntry + TLD.BufferOffset, &R, sizeof(R));
if (++TLD.BufferOffset == BuffLen) {
@@ -334,12 +334,12 @@ static void TLDDestructor(void *P) XRAY_NEVER_INSTRUMENT {
if (TLD.ShadowStack)
InternalFree(TLD.ShadowStack);
if (Verbosity())
- Report("Cleaned up log for TID: %d\n", TLD.TID);
+ Report("Cleaned up log for TID: %d\n", GetTid());
});
if (TLD.Fd == -1 || TLD.BufferOffset == 0) {
if (Verbosity())
- Report("Skipping buffer for TID: %d; Fd = %d; Offset = %llu\n", TLD.TID,
+ Report("Skipping buffer for TID: %d; Fd = %d; Offset = %llu\n", GetTid(),
TLD.Fd, TLD.BufferOffset);
return;
}