Index: third_party/tcmalloc/chromium/src/thread_cache.cc |
diff --git a/third_party/tcmalloc/chromium/src/thread_cache.cc b/third_party/tcmalloc/chromium/src/thread_cache.cc |
index 765786ff40302004b1b128bc38ebcafdf8309d58..cc03b65c00723fcf8d141440544336c05481e5f1 100644 |
--- a/third_party/tcmalloc/chromium/src/thread_cache.cc |
+++ b/third_party/tcmalloc/chromium/src/thread_cache.cc |
@@ -64,7 +64,15 @@ int ThreadCache::thread_heap_count_ = 0; |
ThreadCache* ThreadCache::next_memory_steal_ = NULL; |
#ifdef HAVE_TLS |
__thread ThreadCache* ThreadCache::threadlocal_heap_ |
-# ifdef HAVE___ATTRIBUTE__ |
+// This code links against pyautolib.so, which causes dlopen() on that shared |
+// object to fail when -fprofile-generate is used with it. Ideally pyautolib.so |
+// should not link against this code. There is a bug filed for that: |
+// http://code.google.com/p/chromium/issues/detail?id=124489 |
+// For now the workaround is to pass in -DPGO_GENERATE when building Chrome for |
+// instrumentation (-fprofile-generate). |
+// For all non-instrumentation builds, this define will not be set and the |
+// performance benefit of "intial-exec" will be achieved. |
+#if defined(HAVE___ATTRIBUTE__) && !defined(PGO_GENERATE) |
__attribute__ ((tls_model ("initial-exec"))) |
# endif |
; |