diff --git a/runtime/bin/eventhandler_android.cc b/runtime/bin/eventhandler_android.cc
index 10e4818..a6bd764 100644
--- a/runtime/bin/eventhandler_android.cc
+++ b/runtime/bin/eventhandler_android.cc
@@ -401,9 +401,8 @@
 }
 
 void EventHandlerImplementation::Start(EventHandler* handler) {
-  int result =
-      Thread::Start("dart:io EventHandler", &EventHandlerImplementation::Poll,
-                    reinterpret_cast<uword>(handler));
+  int result = Thread::Start(&EventHandlerImplementation::Poll,
+                             reinterpret_cast<uword>(handler));
   if (result != 0) {
     FATAL1("Failed to start event handler thread %d", result);
   }
diff --git a/runtime/bin/eventhandler_fuchsia.cc b/runtime/bin/eventhandler_fuchsia.cc
index 1b4769b..a74f0c2 100644
--- a/runtime/bin/eventhandler_fuchsia.cc
+++ b/runtime/bin/eventhandler_fuchsia.cc
@@ -553,9 +553,8 @@
 }
 
 void EventHandlerImplementation::Start(EventHandler* handler) {
-  int result =
-      Thread::Start("dart:io EventHandler", &EventHandlerImplementation::Poll,
-                    reinterpret_cast<uword>(handler));
+  int result = Thread::Start(&EventHandlerImplementation::Poll,
+                             reinterpret_cast<uword>(handler));
   if (result != 0) {
     FATAL1("Failed to start event handler thread %d", result);
   }
diff --git a/runtime/bin/eventhandler_linux.cc b/runtime/bin/eventhandler_linux.cc
index 1a4283f..d02a49e 100644
--- a/runtime/bin/eventhandler_linux.cc
+++ b/runtime/bin/eventhandler_linux.cc
@@ -405,9 +405,8 @@
 }
 
 void EventHandlerImplementation::Start(EventHandler* handler) {
-  int result =
-      Thread::Start("dart:io EventHandler", &EventHandlerImplementation::Poll,
-                    reinterpret_cast<uword>(handler));
+  int result = Thread::Start(&EventHandlerImplementation::Poll,
+                             reinterpret_cast<uword>(handler));
   if (result != 0) {
     FATAL1("Failed to start event handler thread %d", result);
   }
diff --git a/runtime/bin/eventhandler_macos.cc b/runtime/bin/eventhandler_macos.cc
index 052e746..04abaac 100644
--- a/runtime/bin/eventhandler_macos.cc
+++ b/runtime/bin/eventhandler_macos.cc
@@ -464,8 +464,7 @@
 }
 
 void EventHandlerImplementation::Start(EventHandler* handler) {
-  int result = Thread::Start("dart:io EventHandler",
-                             &EventHandlerImplementation::EventHandlerEntry,
+  int result = Thread::Start(&EventHandlerImplementation::EventHandlerEntry,
                              reinterpret_cast<uword>(handler));
   if (result != 0) {
     FATAL1("Failed to start event handler thread %d", result);
diff --git a/runtime/bin/eventhandler_win.cc b/runtime/bin/eventhandler_win.cc
index e328f72..7b73b7e 100644
--- a/runtime/bin/eventhandler_win.cc
+++ b/runtime/bin/eventhandler_win.cc
@@ -301,8 +301,7 @@
     // Completing asynchronously through thread.
     pending_read_ = buffer;
     read_thread_starting_ = true;
-    int result = Thread::Start("dart:io ReadFile", ReadFileThread,
-                               reinterpret_cast<uword>(this));
+    int result = Thread::Start(ReadFileThread, reinterpret_cast<uword>(this));
     if (result != 0) {
       FATAL1("Failed to start read file thread %d", result);
     }
@@ -782,8 +781,7 @@
     // the events it puts on the IO completion port. The reference is
     // Released by DeleteIfClosed.
     Retain();
-    int result = Thread::Start("dart:io WriteFile", WriteFileThread,
-                               reinterpret_cast<uword>(this));
+    int result = Thread::Start(WriteFileThread, reinterpret_cast<uword>(this));
     if (result != 0) {
       FATAL1("Failed to start write file thread %d", result);
     }
@@ -1462,8 +1460,8 @@
 }
 
 void EventHandlerImplementation::Start(EventHandler* handler) {
-  int result = Thread::Start("dart:io EventHandler", EventHandlerEntry,
-                             reinterpret_cast<uword>(handler));
+  int result =
+      Thread::Start(EventHandlerEntry, reinterpret_cast<uword>(handler));
   if (result != 0) {
     FATAL1("Failed to start event handler thread %d", result);
   }
diff --git a/runtime/bin/file_system_watcher_macos.cc b/runtime/bin/file_system_watcher_macos.cc
index 635a8d1..53ca879 100644
--- a/runtime/bin/file_system_watcher_macos.cc
+++ b/runtime/bin/file_system_watcher_macos.cc
@@ -178,7 +178,7 @@
   FSEventsWatcher() : run_loop_(0) { Start(); }
 
   void Start() {
-    Thread::Start("dart:io FileWatcher", Run, reinterpret_cast<uword>(this));
+    Thread::Start(Run, reinterpret_cast<uword>(this));
     monitor_.Enter();
     while (run_loop_ == NULL) {
       monitor_.Wait(Monitor::kNoTimeout);
diff --git a/runtime/bin/process_android.cc b/runtime/bin/process_android.cc
index e23dadd..d379d2d 100644
--- a/runtime/bin/process_android.cc
+++ b/runtime/bin/process_android.cc
@@ -141,8 +141,7 @@
     }
 
     // Start thread that handles process exits when wait returns.
-    int result =
-        Thread::Start("dart:io Process.start", ExitCodeHandlerEntry, 0);
+    int result = Thread::Start(ExitCodeHandlerEntry, 0);
     if (result != 0) {
       FATAL1("Failed to start exit code handler worker thread %d", result);
     }
diff --git a/runtime/bin/process_fuchsia.cc b/runtime/bin/process_fuchsia.cc
index ac15292..6fd29a0 100644
--- a/runtime/bin/process_fuchsia.cc
+++ b/runtime/bin/process_fuchsia.cc
@@ -167,8 +167,7 @@
     }
 
     // Start thread that handles process exits when wait returns.
-    intptr_t result =
-        Thread::Start("dart:io Process.start", ExitCodeHandlerEntry, 0);
+    intptr_t result = Thread::Start(ExitCodeHandlerEntry, 0);
     if (result != 0) {
       FATAL1("Failed to start exit code handler worker thread %ld", result);
     }
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index 6dfc3aa..825bc1d 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -141,8 +141,7 @@
     }
 
     // Start thread that handles process exits when wait returns.
-    int result =
-        Thread::Start("dart:io Process.start", ExitCodeHandlerEntry, 0);
+    int result = Thread::Start(ExitCodeHandlerEntry, 0);
     if (result != 0) {
       FATAL1("Failed to start exit code handler worker thread %d", result);
     }
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc
index e8cb286..d83443a 100644
--- a/runtime/bin/process_macos.cc
+++ b/runtime/bin/process_macos.cc
@@ -140,8 +140,7 @@
     }
 
     // Start thread that handles process exits when wait returns.
-    int result =
-        Thread::Start("dart:io Process.start", ExitCodeHandlerEntry, 0);
+    int result = Thread::Start(ExitCodeHandlerEntry, 0);
     if (result != 0) {
       FATAL1("Failed to start exit code handler worker thread %d", result);
     }
diff --git a/runtime/bin/thread.h b/runtime/bin/thread.h
index 09c9743..8e31cb6 100644
--- a/runtime/bin/thread.h
+++ b/runtime/bin/thread.h
@@ -43,9 +43,7 @@
   // Start a thread running the specified function. Returns 0 if the
   // thread started successfuly and a system specific error code if
   // the thread failed to start.
-  static int Start(const char* name,
-                   ThreadStartFunction function,
-                   uword parameters);
+  static int Start(ThreadStartFunction function, uword parameters);
 
   static ThreadLocalKey CreateThreadLocal();
   static void DeleteThreadLocal(ThreadLocalKey key);
diff --git a/runtime/bin/thread_android.cc b/runtime/bin/thread_android.cc
index 2bef99c..4970240 100644
--- a/runtime/bin/thread_android.cc
+++ b/runtime/bin/thread_android.cc
@@ -58,17 +58,13 @@
 
 class ThreadStartData {
  public:
-  ThreadStartData(const char* name,
-                  Thread::ThreadStartFunction function,
-                  uword parameter)
-      : name_(name), function_(function), parameter_(parameter) {}
+  ThreadStartData(Thread::ThreadStartFunction function, uword parameter)
+      : function_(function), parameter_(parameter) {}
 
-  const char* name() const { return name_; }
   Thread::ThreadStartFunction function() const { return function_; }
   uword parameter() const { return parameter_; }
 
  private:
-  const char* name_;
   Thread::ThreadStartFunction function_;
   uword parameter_;
 
@@ -81,23 +77,17 @@
 static void* ThreadStart(void* data_ptr) {
   ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
 
-  const char* name = data->name();
   Thread::ThreadStartFunction function = data->function();
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
-
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
 
   return NULL;
 }
 
-int Thread::Start(const char* name,
-                  ThreadStartFunction function,
-                  uword parameter) {
+int Thread::Start(ThreadStartFunction function, uword parameter) {
   pthread_attr_t attr;
   int result = pthread_attr_init(&attr);
   RETURN_ON_PTHREAD_FAILURE(result);
@@ -108,7 +98,7 @@
   result = pthread_attr_setstacksize(&attr, Thread::GetMaxStackSize());
   RETURN_ON_PTHREAD_FAILURE(result);
 
-  ThreadStartData* data = new ThreadStartData(name, function, parameter);
+  ThreadStartData* data = new ThreadStartData(function, parameter);
 
   pthread_t tid;
   result = pthread_create(&tid, &attr, ThreadStart, data);
diff --git a/runtime/bin/thread_fuchsia.cc b/runtime/bin/thread_fuchsia.cc
index d71a1df..793e9c1 100644
--- a/runtime/bin/thread_fuchsia.cc
+++ b/runtime/bin/thread_fuchsia.cc
@@ -8,12 +8,8 @@
 #include "bin/thread.h"
 #include "bin/thread_fuchsia.h"
 
-#include <errno.h>     // NOLINT
-#include <sys/time.h>  // NOLINT
-#include <zircon/status.h>
-#include <zircon/syscalls.h>
-#include <zircon/threads.h>
-#include <zircon/types.h>
+#include <errno.h>         // NOLINT
+#include <sys/time.h>      // NOLINT
 
 #include "platform/assert.h"
 #include "platform/utils.h"
@@ -61,17 +57,13 @@
 
 class ThreadStartData {
  public:
-  ThreadStartData(const char* name,
-                  Thread::ThreadStartFunction function,
-                  uword parameter)
-      : name_(name), function_(function), parameter_(parameter) {}
+  ThreadStartData(Thread::ThreadStartFunction function, uword parameter)
+      : function_(function), parameter_(parameter) {}
 
-  const char* name() const { return name_; }
   Thread::ThreadStartFunction function() const { return function_; }
   uword parameter() const { return parameter_; }
 
  private:
-  const char* name_;
   Thread::ThreadStartFunction function_;
   uword parameter_;
 
@@ -84,24 +76,17 @@
 static void* ThreadStart(void* data_ptr) {
   ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
 
-  const char* name = data->name();
   Thread::ThreadStartFunction function = data->function();
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  zx_handle_t thread_handle = thrd_get_zx_handle(thrd_current());
-  zx_object_set_property(thread_handle, ZX_PROP_NAME, name, strlen(name) + 1);
-
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
 
   return NULL;
 }
 
-int Thread::Start(const char* name,
-                  ThreadStartFunction function,
-                  uword parameter) {
+int Thread::Start(ThreadStartFunction function, uword parameter) {
   pthread_attr_t attr;
   int result = pthread_attr_init(&attr);
   RETURN_ON_PTHREAD_FAILURE(result);
@@ -112,7 +97,7 @@
   result = pthread_attr_setstacksize(&attr, Thread::GetMaxStackSize());
   RETURN_ON_PTHREAD_FAILURE(result);
 
-  ThreadStartData* data = new ThreadStartData(name, function, parameter);
+  ThreadStartData* data = new ThreadStartData(function, parameter);
 
   pthread_t tid;
   result = pthread_create(&tid, &attr, ThreadStart, data);
diff --git a/runtime/bin/thread_linux.cc b/runtime/bin/thread_linux.cc
index 2b3a7e6..1140ed4 100644
--- a/runtime/bin/thread_linux.cc
+++ b/runtime/bin/thread_linux.cc
@@ -58,17 +58,13 @@
 
 class ThreadStartData {
  public:
-  ThreadStartData(const char* name,
-                  Thread::ThreadStartFunction function,
-                  uword parameter)
-      : name_(name), function_(function), parameter_(parameter) {}
+  ThreadStartData(Thread::ThreadStartFunction function, uword parameter)
+      : function_(function), parameter_(parameter) {}
 
-  const char* name() const { return name_; }
   Thread::ThreadStartFunction function() const { return function_; }
   uword parameter() const { return parameter_; }
 
  private:
-  const char* name_;
   Thread::ThreadStartFunction function_;
   uword parameter_;
 
@@ -81,23 +77,17 @@
 static void* ThreadStart(void* data_ptr) {
   ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
 
-  const char* name = data->name();
   Thread::ThreadStartFunction function = data->function();
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
-
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
 
   return NULL;
 }
 
-int Thread::Start(const char* name,
-                  ThreadStartFunction function,
-                  uword parameter) {
+int Thread::Start(ThreadStartFunction function, uword parameter) {
   pthread_attr_t attr;
   int result = pthread_attr_init(&attr);
   RETURN_ON_PTHREAD_FAILURE(result);
@@ -108,7 +98,7 @@
   result = pthread_attr_setstacksize(&attr, Thread::GetMaxStackSize());
   RETURN_ON_PTHREAD_FAILURE(result);
 
-  ThreadStartData* data = new ThreadStartData(name, function, parameter);
+  ThreadStartData* data = new ThreadStartData(function, parameter);
 
   pthread_t tid;
   result = pthread_create(&tid, &attr, ThreadStart, data);
diff --git a/runtime/bin/thread_macos.cc b/runtime/bin/thread_macos.cc
index d9ebb5e..6618ba8 100644
--- a/runtime/bin/thread_macos.cc
+++ b/runtime/bin/thread_macos.cc
@@ -52,17 +52,13 @@
 
 class ThreadStartData {
  public:
-  ThreadStartData(const char* name,
-                  Thread::ThreadStartFunction function,
-                  uword parameter)
-      : name_(name), function_(function), parameter_(parameter) {}
+  ThreadStartData(Thread::ThreadStartFunction function, uword parameter)
+      : function_(function), parameter_(parameter) {}
 
-  const char* name() const { return name_; }
   Thread::ThreadStartFunction function() const { return function_; }
   uword parameter() const { return parameter_; }
 
  private:
-  const char* name_;
   Thread::ThreadStartFunction function_;
   uword parameter_;
 
@@ -75,23 +71,17 @@
 static void* ThreadStart(void* data_ptr) {
   ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
 
-  const char* name = data->name();
   Thread::ThreadStartFunction function = data->function();
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
-
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
 
   return NULL;
 }
 
-int Thread::Start(const char* name,
-                  ThreadStartFunction function,
-                  uword parameter) {
+int Thread::Start(ThreadStartFunction function, uword parameter) {
   pthread_attr_t attr;
   int result = pthread_attr_init(&attr);
   RETURN_ON_PTHREAD_FAILURE(result);
@@ -102,7 +92,7 @@
   result = pthread_attr_setstacksize(&attr, Thread::GetMaxStackSize());
   RETURN_ON_PTHREAD_FAILURE(result);
 
-  ThreadStartData* data = new ThreadStartData(name, function, parameter);
+  ThreadStartData* data = new ThreadStartData(function, parameter);
 
   pthread_t tid;
   result = pthread_create(&tid, &attr, ThreadStart, data);
diff --git a/runtime/bin/thread_win.cc b/runtime/bin/thread_win.cc
index 402deba..cba3652 100644
--- a/runtime/bin/thread_win.cc
+++ b/runtime/bin/thread_win.cc
@@ -17,17 +17,13 @@
 
 class ThreadStartData {
  public:
-  ThreadStartData(const char* name,
-                  Thread::ThreadStartFunction function,
-                  uword parameter)
-      : name_(name), function_(function), parameter_(parameter) {}
+  ThreadStartData(Thread::ThreadStartFunction function, uword parameter)
+      : function_(function), parameter_(parameter) {}
 
-  const char* name() const { return name_; }
   Thread::ThreadStartFunction function() const { return function_; }
   uword parameter() const { return parameter_; }
 
  private:
-  const char* name_;
   Thread::ThreadStartFunction function_;
   uword parameter_;
 
@@ -40,24 +36,18 @@
 static unsigned int __stdcall ThreadEntry(void* data_ptr) {
   ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
 
-  const char* name = data->name();
   Thread::ThreadStartFunction function = data->function();
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  SetThreadDescription(GetCurrentThread(), reinterpret_cast<PCWSTR>(name));
-
   // Call the supplied thread start function handing it its parameters.
   function(parameter);
 
   return 0;
 }
 
-int Thread::Start(const char* name,
-                  ThreadStartFunction function,
-                  uword parameter) {
-  ThreadStartData* start_data = new ThreadStartData(name, function, parameter);
+int Thread::Start(ThreadStartFunction function, uword parameter) {
+  ThreadStartData* start_data = new ThreadStartData(function, parameter);
   uint32_t tid;
   uintptr_t thread = _beginthreadex(NULL, Thread::GetMaxStackSize(),
                                     ThreadEntry, start_data, 0, &tid);
diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc
index 093795d..e03d9b7 100644
--- a/runtime/vm/os_thread_android.cc
+++ b/runtime/vm/os_thread_android.cc
@@ -119,9 +119,6 @@
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
-
   // Create new OSThread object and set as TLS for new thread.
   OSThread* thread = OSThread::CreateOSThread();
   if (thread != NULL) {
diff --git a/runtime/vm/os_thread_fuchsia.cc b/runtime/vm/os_thread_fuchsia.cc
index d6fd956..b465e07 100644
--- a/runtime/vm/os_thread_fuchsia.cc
+++ b/runtime/vm/os_thread_fuchsia.cc
@@ -12,7 +12,9 @@
 #include <errno.h>  // NOLINT
 #include <zircon/status.h>
 #include <zircon/syscalls.h>
+#include <zircon/syscalls/object.h>
 #include <zircon/threads.h>
+#include <zircon/tls.h>
 #include <zircon/types.h>
 
 #include "platform/address_sanitizer.h"
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_linux.cc
index 0003ee2..8c9fa0f 100644
--- a/runtime/vm/os_thread_linux.cc
+++ b/runtime/vm/os_thread_linux.cc
@@ -121,9 +121,6 @@
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
-
   // Create new OSThread object and set as TLS for new thread.
   OSThread* thread = OSThread::CreateOSThread();
   if (thread != NULL) {
diff --git a/runtime/vm/os_thread_macos.cc b/runtime/vm/os_thread_macos.cc
index 7cf3923..0fff6fd 100644
--- a/runtime/vm/os_thread_macos.cc
+++ b/runtime/vm/os_thread_macos.cc
@@ -97,9 +97,6 @@
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  pthread_setname_np(pthread_self(), name);
-
   // Create new OSThread object and set as TLS for new thread.
   OSThread* thread = OSThread::CreateOSThread();
   if (thread != NULL) {
diff --git a/runtime/vm/os_thread_win.cc b/runtime/vm/os_thread_win.cc
index 7ef96fa..b1aed90 100644
--- a/runtime/vm/os_thread_win.cc
+++ b/runtime/vm/os_thread_win.cc
@@ -51,9 +51,6 @@
   uword parameter = data->parameter();
   delete data;
 
-  // Set the thread name.
-  SetThreadDescription(GetCurrentThread(), reinterpret_cast<PCWSTR>(name));
-
   // Create new OSThread object and set as TLS for new thread.
   OSThread* thread = OSThread::CreateOSThread();
   if (thread != NULL) {
