Merge changes I0a7e342d,Id9baa54a,Ib6f75a7c

* changes:
  fdtrack: print fdsan owner tag.
  fdtrack: make actually async safe.
  Move fdtrack APIs to LLNDK.
diff --git a/libc/bionic/fdtrack.cpp b/libc/bionic/fdtrack.cpp
index 38eb219..1123512 100644
--- a/libc/bionic/fdtrack.cpp
+++ b/libc/bionic/fdtrack.cpp
@@ -28,8 +28,7 @@
 
 #include <stdatomic.h>
 
-#include <android/fdtrack.h>
-
+#include <platform/bionic/fdtrack.h>
 #include <platform/bionic/reserved_signals.h>
 
 #include "private/bionic_fdtrack.h"
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index dddd84c..2ca4b21 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -1484,9 +1484,6 @@
   global:
     __mempcpy_chk;
     __tls_get_addr; # arm64
-    android_fdtrack_compare_exchange_hook;
-    android_fdtrack_get_enabled;
-    android_fdtrack_set_enabled;
     call_once;
     cnd_broadcast;
     cnd_destroy;
@@ -1755,6 +1752,9 @@
     __system_property_set_filename;
     __system_property_update;
     android_fdsan_get_fd_table;
+    android_fdtrack_compare_exchange_hook; # llndk
+    android_fdtrack_get_enabled; # llndk
+    android_fdtrack_set_enabled; # llndk
     android_net_res_stats_get_info_for_net;
     android_net_res_stats_aggregate;
     android_net_res_stats_get_usable_servers;
diff --git a/libc/include/android/fdtrack.h b/libc/platform/bionic/fdtrack.h
similarity index 100%
rename from libc/include/android/fdtrack.h
rename to libc/platform/bionic/fdtrack.h
diff --git a/libc/private/bionic_fdtrack.h b/libc/private/bionic_fdtrack.h
index ddf7249..174ba1d 100644
--- a/libc/private/bionic_fdtrack.h
+++ b/libc/private/bionic_fdtrack.h
@@ -31,7 +31,7 @@
 #include <sys/cdefs.h>
 #include <stdatomic.h>
 
-#include <android/fdtrack.h>
+#include "platform/bionic/fdtrack.h"
 
 #include "bionic/pthread_internal.h"
 #include "private/bionic_tls.h"
diff --git a/libfdtrack/fdtrack.cpp b/libfdtrack/fdtrack.cpp
index 7c4cfbf..831a50d 100644
--- a/libfdtrack/fdtrack.cpp
+++ b/libfdtrack/fdtrack.cpp
@@ -32,7 +32,8 @@
 #include <mutex>
 #include <vector>
 
-#include <android/fdtrack.h>
+#include <android/fdsan.h>
+#include <bionic/fdtrack.h>
 
 #include <android-base/no_destructor.h>
 #include <android-base/thread_annotations.h>
@@ -110,18 +111,32 @@
       continue;
     }
 
-    std::lock_guard<std::mutex> lock(entry->mutex);
+    if (!entry->mutex.try_lock()) {
+      async_safe_format_log(ANDROID_LOG_WARN, "fdtrack", "fd %d locked, skipping", fd);
+      continue;
+    }
+
     if (entry->backtrace.empty()) {
       continue;
     }
 
-    async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "fd %d:", fd);
+    uint64_t fdsan_owner = android_fdsan_get_owner_tag(fd);
+
+    if (fdsan_owner != 0) {
+      async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "fd %d: (owner = %#" PRIx64 ")", fd,
+                            fdsan_owner);
+    } else {
+      async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "fd %d: (unowned)", fd);
+    }
+
     const size_t frame_skip = 2;
     for (size_t i = frame_skip; i < entry->backtrace.size(); ++i) {
       auto& frame = entry->backtrace[i];
       async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "  %zu: %s+%" PRIu64, i - frame_skip,
                             frame.function_name.c_str(), frame.function_offset);
     }
+
+    entry->mutex.unlock();
   }
   android_fdtrack_set_enabled(prev);
 }
diff --git a/tests/fdtrack_test.cpp b/tests/fdtrack_test.cpp
index a616e6f..fca92ce 100644
--- a/tests/fdtrack_test.cpp
+++ b/tests/fdtrack_test.cpp
@@ -25,7 +25,7 @@
 #include <unistd.h>
 
 #if defined(__BIONIC__)
-#include <android/fdtrack.h>
+#include "platform/bionic/fdtrack.h"
 #endif
 
 #include <vector>