[compiler-rt] r294166 - [XRay][compiler-rt] Use gettid instead of getpid in FDR mode.

Dean Michael Berris via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 5 17:48:21 PST 2017

Author: dberris
Date: Sun Feb  5 19:48:21 2017
New Revision: 294166

URL: http://llvm.org/viewvc/llvm-project?rev=294166&view=rev
[XRay][compiler-rt] Use gettid instead of getpid in FDR mode.

This was pointed out that FDR mode didn't quite put the thread ID in the
buffers, but instead would write down the parent process ID.

Reviewers: pelikan, rSerge

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D29484


Modified: compiler-rt/trunk/lib/xray/xray_fdr_logging.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/xray/xray_fdr_logging.cc?rev=294166&r1=294165&r2=294166&view=diff
--- compiler-rt/trunk/lib/xray/xray_fdr_logging.cc (original)
+++ compiler-rt/trunk/lib/xray/xray_fdr_logging.cc Sun Feb  5 19:48:21 2017
@@ -20,6 +20,7 @@
 #include <cassert>
 #include <cstring>
 #include <memory>
+#include <sys/syscall.h>
 #include <sys/time.h>
 #include <time.h>
 #include <unistd.h>
@@ -200,8 +201,8 @@ void setupNewBuffer(const BufferQueue::B
     auto &NewBuffer = *reinterpret_cast<MetadataRecord *>(&Records[0]);
     NewBuffer.Type = RecordType::Metadata;
     NewBuffer.RecordKind = MetadataRecord::RecordKinds::NewBuffer;
-    pid_t Pid = getpid();
-    std::memcpy(&NewBuffer.Data, &Pid, sizeof(pid_t));
+    pid_t Tid = syscall(SYS_gettid);
+    std::memcpy(&NewBuffer.Data, &Tid, sizeof(pid_t));
   // Also write the WalltimeMarker record.

More information about the llvm-commits mailing list