glibc-2.14 changed the _hook prototypes with a volatile pointer.
Submitted upstream:

http://code.google.com/p/chromium/issues/detail?id=86646

--- third_party/tcmalloc/chromium/src/tcmalloc.cc.orig	2011-06-18 10:29:01.407015864 +0200
+++ third_party/tcmalloc/chromium/src/tcmalloc.cc	2011-06-18 10:29:32.305013564 +0200
@@ -375,7 +375,7 @@ static void* tc_ptmalloc_malloc_hook(siz
   return tc_malloc(size);
 }
 
-void* (*__malloc_hook)(
+void* (* volatile __malloc_hook)(
     size_t size, const void* caller) = tc_ptmalloc_malloc_hook;
 
 static void* tc_ptmalloc_realloc_hook(
@@ -383,14 +383,14 @@ static void* tc_ptmalloc_realloc_hook(
   return tc_realloc(ptr, size);
 }
 
-void* (*__realloc_hook)(
+void* (* volatile __realloc_hook)(
     void* ptr, size_t size, const void* caller) = tc_ptmalloc_realloc_hook;
 
 static void tc_ptmalloc_free_hook(void* ptr, const void* caller) {
   tc_free(ptr);
 }
 
-void (*__free_hook)(void* ptr, const void* caller) = tc_ptmalloc_free_hook;
+void (* volatile __free_hook)(void* ptr, const void* caller) = tc_ptmalloc_free_hook;
 
 #endif
 
@@ -1584,7 +1584,7 @@ static void *MemalignOverride(size_t ali
   MallocHook::InvokeNewHook(result, size);
   return result;
 }
-void *(*__memalign_hook)(size_t, size_t, const void *) = MemalignOverride;
+void *(* volatile __memalign_hook)(size_t, size_t, const void *) = MemalignOverride;
 #endif  // #ifndef TCMALLOC_FOR_DEBUGALLOCATION
 
 // ---Double free() debugging implementation -----------------------------------
