components/llvm/patches/022-google-test-harness-22643565.patch
author xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
Tue, 12 Jul 2016 19:50:03 -0700
changeset 6403 9d25dbe7eb71
parent 5434 9f55c805ce9d
permissions -rw-r--r--
23209274 Upgrade libsigsegv to 2.10

# - 22643565 - llvm's Google test harness needs some attention
# For upstream - maytbe.
--- utils/unittest/googletest/src/gtest-port.cc	2013-11-18 16:57:56.000000000 -0800
+++ utils/unittest/googletest/src/gtest-port.cc	2016-02-01 11:34:55.170628325 -0800
@@ -51,6 +51,13 @@
 # include <mach/vm_map.h>
 #endif  // GTEST_OS_MAC
 
+#if GTEST_OS_SOLARIS
+# include <strings.h>
+# include <sys/types.h>
+# include <dirent.h>
+# include <unistd.h>
+#endif
+
 #include "gtest/gtest-spi.h"
 #include "gtest/gtest-message.h"
 #include "gtest/internal/gtest-internal.h"
@@ -101,9 +108,36 @@
 #else
 
 size_t GetThreadCount() {
+  size_t NumThreads = 1U;
+
+#if GTEST_OS_SOLARIS
+  char lwpdir[PATH_MAX+1];
+  (void) std::memset(lwpdir, 0, sizeof(lwpdir));
+  (void) std::sprintf(lwpdir, "/proc/%i/lwp/", static_cast<int>(getpid()));
+
+  struct dirent *DE;
+  DIR *D = ::opendir(lwpdir);
+  if (!D)
+    return NumThreads;
+
+  while ((DE = ::readdir(D)) != NULL) {
+    if (DE->d_name[0] == '.') {
+      if ((DE->d_name[1] == '\0') ||
+          ((DE->d_name[1] == '.') && (DE->d_name[2] == '\0')))
+        continue;
+    }
+
+    NumThreads =
+      static_cast<size_t>(std::max<int>(NumThreads, std::atoi(DE->d_name)));
+  }
+
+  ::rewinddir(D);
+  ::closedir(D);
+#endif
+
   // There's no portable way to detect the number of threads, so we just
   // return 0 to indicate that we cannot detect it.
-  return 0;
+  return NumThreads;
 }
 
 #endif  // GTEST_OS_MAC
--- utils/unittest/googletest/include/gtest/internal/gtest-port.h	2014-02-19 07:18:30.000000000 -0800
+++ utils/unittest/googletest/include/gtest/internal/gtest-port.h	2016-02-01 11:15:20.899289723 -0800
@@ -238,7 +238,7 @@
 # endif  // ANDROID
 #elif defined __MVS__
 # define GTEST_OS_ZOS 1
-#elif defined(__sun) && defined(__SVR4)
+#elif (defined(__sun) || defined(__sun__)) && defined(__SVR4)
 # define GTEST_OS_SOLARIS 1
 #elif defined(_AIX)
 # define GTEST_OS_AIX 1