[compiler-rt] r301003 - [tsan] Publish the TSan external API in tsan_interface.h

Kuba Mracek via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 21 10:25:47 PDT 2017


Author: kuba.brecka
Date: Fri Apr 21 12:25:47 2017
New Revision: 301003

URL: http://llvm.org/viewvc/llvm-project?rev=301003&view=rev
Log:
[tsan] Publish the TSan external API in tsan_interface.h

Let's make the TSan external API available and commented in the public header:

    void *__tsan_external_register_tag(const char *object_type);
    void __tsan_external_assign_tag(void *addr, void *tag);
    void __tsan_external_read(void *addr, void *caller_pc, void *tag);
    void __tsan_external_write(void *addr, void *caller_pc, void *tag);

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


Modified:
    compiler-rt/trunk/include/sanitizer/tsan_interface.h

Modified: compiler-rt/trunk/include/sanitizer/tsan_interface.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/tsan_interface.h?rev=301003&r1=301002&r2=301003&view=diff
==============================================================================
--- compiler-rt/trunk/include/sanitizer/tsan_interface.h (original)
+++ compiler-rt/trunk/include/sanitizer/tsan_interface.h Fri Apr 21 12:25:47 2017
@@ -114,6 +114,21 @@ void __tsan_mutex_post_signal(void *addr
 void __tsan_mutex_pre_divert(void *addr, unsigned flags);
 void __tsan_mutex_post_divert(void *addr, unsigned flags);
 
+// External race detection API.
+// Can be used by non-instrumented libraries to detect when their objects are
+// being used in an unsafe manner.
+//   - __tsan_external_read/__tsan_external_write annotates the logical reads
+//       and writes of the object at the specified address. 'caller_pc' should
+//       be the PC of the library user, which the library can obtain with e.g.
+//       `__builtin_return_address(0)`.
+//   - __tsan_external_register_tag registers a 'tag' with the specified name,
+//       which is later used in read/write annotations to denote the object type
+//   - __tsan_external_assign_tag can optionally mark a heap object with a tag
+void *__tsan_external_register_tag(const char *object_type);
+void __tsan_external_assign_tag(void *addr, void *tag);
+void __tsan_external_read(void *addr, void *caller_pc, void *tag);
+void __tsan_external_write(void *addr, void *caller_pc, void *tag);
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif




More information about the llvm-commits mailing list