Guard Getcpu in test.
authorMichael Lee <mzlee@fb.com>
Mon, 7 Mar 2016 15:41:07 +0000 (07:41 -0800)
committerFacebook Github Bot 9 <facebook-github-bot-9-bot@fb.com>
Mon, 7 Mar 2016 15:50:21 +0000 (07:50 -0800)
Summary:Guarding this the same way it is done in
detail/CacheLocality.cpp

Reviewed By: yfeldblum

Differential Revision: D3013288

fb-gh-sync-id: a1cc65cccc5cdf32339a739853c27a11ecd98ba0
shipit-source-id: a1cc65cccc5cdf32339a739853c27a11ecd98ba0

folly/configure.ac
folly/detail/CacheLocality.cpp
folly/test/CacheLocalityTest.cpp

index 2a815a0f273d30935c51ba9ff8014298900988bb..2b52035ad6e801ad8f1e97ae41c854c7b8ee7cb3 100644 (file)
@@ -252,6 +252,28 @@ if test "$folly_cv_lib_libatomic" = no; then
                   [Please install the GNU Atomic library])])
 fi
 
+AC_CACHE_CHECK(
+  [for liblinux-vdso support],
+  [folly_cv_lib_liblinux_vdso],
+  [AC_RUN_IFELSE(
+    [AC_LANG_PROGRAM[
+      #include <dlfcn.h>
+      int main() {
+        void *h = dlopen("linux-vdso.so.1", RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
+        if (h == nullptr) {
+          return -1;
+        }
+        dlclose(h);
+        return 0;
+      }
+    ]],
+    [folly_cv_lib_liblinux_vdso=yes],
+    [folly_cv_lib_liblinux_vdso=no])])
+
+if test "$folly_cv_lib_liblinux_vdso" = yes; then
+  AC_DEFINE([HAVE_LINUX_VDSO], [1], [Define to 1 if liblinux-vdso is available])
+fi
+
 AC_CACHE_CHECK(
   [for usable std::is_trivially_copyable],
   [folly_cv_decl_std_is_trivially_copyable],
index d174b6f5928e37dfcc60ad15da00c8ea8b211b96..e75120d6b39c2aa64863ef46a4304461ba4a96d0 100644 (file)
@@ -210,7 +210,7 @@ CacheLocality CacheLocality::uniform(size_t numCpus) {
 ////////////// Getcpu
 
 Getcpu::Func Getcpu::resolveVdsoFunc() {
-#if defined(_MSC_VER) || defined(__BIONIC__)
+#if !FOLLY_HAVE_LINUX_VDSO
   return nullptr;
 #else
   void* h = dlopen("linux-vdso.so.1", RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
index 40732ad89bdc081c6c77a54bbf20ac9732c5f0b0..eb600fe6fb4b827f69beda6bcffc5df31df3f6f6 100644 (file)
@@ -351,12 +351,14 @@ TEST(CacheLocality, FakeSysfs) {
   EXPECT_EQ(expected.localityIndexByCpu, parsed.localityIndexByCpu);
 }
 
+#if FOLLY_HAVE_LINUX_VDSO
 TEST(Getcpu, VdsoGetcpu) {
   unsigned cpu;
   Getcpu::resolveVdsoFunc()(&cpu, nullptr, nullptr);
 
   EXPECT_TRUE(cpu < CPU_SETSIZE);
 }
+#endif
 
 #ifdef FOLLY_TLS
 TEST(ThreadId, SimpleTls) {