Enable thread annotations for std::mutex

Turn on c++ library support for clang thread safety annotations.  This
will allow using std::mutex and related classes directly for
synchronization.

Bug: 22322814
Test: build
Change-Id: Ib8eda18a1f4f0d7a6f99c4d1b1438293b8e22de6
diff --git a/build/Android.bp b/build/Android.bp
index cd9d74a..b1553c7 100644
--- a/build/Android.bp
+++ b/build/Android.bp
@@ -70,6 +70,8 @@
         "-DART_STACK_OVERFLOW_GAP_mips64=16384",
         "-DART_STACK_OVERFLOW_GAP_x86=8192",
         "-DART_STACK_OVERFLOW_GAP_x86_64=8192",
+        // Enable thread annotations for std::mutex, etc.
+        "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
     ],
 
     target: {
diff --git a/runtime/openjdkjvmti/ti_monitor.cc b/runtime/openjdkjvmti/ti_monitor.cc
index b827683..645faea 100644
--- a/runtime/openjdkjvmti/ti_monitor.cc
+++ b/runtime/openjdkjvmti/ti_monitor.cc
@@ -54,7 +54,7 @@
   JvmtiMonitor() : owner_(nullptr), count_(0) {
   }
 
-  static bool Destroy(art::Thread* self, JvmtiMonitor* monitor) {
+  static bool Destroy(art::Thread* self, JvmtiMonitor* monitor) NO_THREAD_SAFETY_ANALYSIS {
     // Check whether this thread holds the monitor, or nobody does.
     art::Thread* owner_thread = monitor->owner_.load(std::memory_order_relaxed);
     if (owner_thread != nullptr && self != owner_thread) {
@@ -71,7 +71,7 @@
     return true;
   }
 
-  void MonitorEnter(art::Thread* self) {
+  void MonitorEnter(art::Thread* self) NO_THREAD_SAFETY_ANALYSIS {
     // Check for recursive enter.
     if (IsOwner(self)) {
       count_++;
@@ -86,7 +86,7 @@
     count_ = 1;
   }
 
-  bool MonitorExit(art::Thread* self) {
+  bool MonitorExit(art::Thread* self) NO_THREAD_SAFETY_ANALYSIS {
     if (!IsOwner(self)) {
       return false;
     }