Fwd: [compiler-rt] r372730 - [TSAN] Add read/write range interface functions with PC

Joachim Protze via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 24 05:08:31 PDT 2019


Commit message bounced.


-------- Forwarded Message --------
Subject: [compiler-rt] r372730 - [TSAN] Add read/write range interface 
functions with PC
Date: Tue, 24 Sep 2019 11:19:02 +0000
From: Joachim Protze <protze at itc.rwth-aachen.de>
To: llvm-commits at lists.llvm.org

Author: jprotze
Date: Tue Sep 24 04:19:02 2019
New Revision: 372730

URL: http://llvm.org/viewvc/llvm-project?rev=372730&view=rev
Log:
[TSAN] Add read/write range interface functions with PC

Adding annotation function variants __tsan_write_range_pc and
__tsan_read_range_pc to annotate ranged access to memory while providing a
program counter for the access.

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

Added:
     compiler-rt/trunk/test/tsan/race_range_pc.cc
Modified:
     compiler-rt/trunk/lib/tsan/rtl/tsan_interface.h
     compiler-rt/trunk/lib/tsan/rtl/tsan_interface_inl.h

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interface.h
URL: 
http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface.h?rev=372730&r1=372729&r2=372730&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interface.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interface.h Tue Sep 24 04:19:02 2019
@@ -94,6 +94,11 @@ void __tsan_read_range(void *addr, unsig
  SANITIZER_INTERFACE_ATTRIBUTE
  void __tsan_write_range(void *addr, unsigned long size);
  +SANITIZER_INTERFACE_ATTRIBUTE
+void __tsan_read_range_pc(void *addr, unsigned long size, void *pc); 
// NOLINT
+SANITIZER_INTERFACE_ATTRIBUTE
+void __tsan_write_range_pc(void *addr, unsigned long size, void *pc); 
// NOLINT
+
  // User may provide function that would be called right when TSan detects
  // an error. The argument 'report' is an opaque pointer that can be 
used to
  // gather additional information using other TSan report API functions.

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interface_inl.h
URL: 
http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface_inl.h?rev=372730&r1=372729&r2=372730&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interface_inl.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interface_inl.h Tue Sep 24 
04:19:02 2019
@@ -122,3 +122,11 @@ void __tsan_read_range(void *addr, uptr
  void __tsan_write_range(void *addr, uptr size) {
    MemoryAccessRange(cur_thread(), CALLERPC, (uptr)addr, size, true);
  }
+
+void __tsan_read_range_pc(void *addr, uptr size, void *pc) {
+  MemoryAccessRange(cur_thread(), (uptr)pc, (uptr)addr, size, false);
+}
+
+void __tsan_write_range_pc(void *addr, uptr size, void *pc) {
+  MemoryAccessRange(cur_thread(), (uptr)pc, (uptr)addr, size, true);
+}

Added: compiler-rt/trunk/test/tsan/race_range_pc.cc
URL: 
http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/race_range_pc.cc?rev=372730&view=auto
==============================================================================
--- compiler-rt/trunk/test/tsan/race_range_pc.cc (added)
+++ compiler-rt/trunk/test/tsan/race_range_pc.cc Tue Sep 24 04:19:02 2019
@@ -0,0 +1,40 @@
+// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
+// This test fails on powerpc64 big endian.
+// The Tsan report is returning wrong information about
+// the location of the race.
+// XFAIL: powerpc64-unknown-linux-gnu
+
+#include "test.h"
+
+typedef unsigned long uptr;
+extern "C" void __tsan_read_range_pc(uptr addr, uptr size, uptr pc);
+extern "C" void __tsan_write_range_pc(uptr addr, uptr size, uptr pc);
+
+void foobar() {
+}
+
+void barbaz() {
+}
+
+void *Thread(void *p) {
+  barrier_wait(&barrier);
+  __tsan_read_range_pc((uptr)p, 32, (uptr)foobar + kPCInc);
+  return 0;
+}
+
+int main() {
+  barrier_init(&barrier, 2);
+  int a[128];
+  pthread_t th;
+  pthread_create(&th, 0, Thread, (void*)a);
+  __tsan_write_range_pc((uptr)(a+2), 32, (uptr)barbaz + kPCInc);
+  barrier_wait(&barrier);
+  pthread_join(th, 0);
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK: WARNING: ThreadSanitizer: data race
+// CHECK:     #0 foobar
+// CHECK:     #0 barbaz
+// CHECK: DONE



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5327 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190924/5056fd38/attachment.bin>


More information about the llvm-commits mailing list