1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
--- trunk/src/third_party/tcmalloc/chromium/src/tcmalloc.cc 2011/06/21 07:36:46 89799
+++ trunk/src/third_party/tcmalloc/chromium/src/tcmalloc.cc 2011/06/21 07:37:01 89800
@@ -150,6 +150,13 @@
# define WIN32_DO_PATCHING 1
#endif
+// GLibc 2.14+ requires the hook functions be declared volatile, based on the
+// value of the define __MALLOC_HOOK_VOLATILE. For compatibility with
+// older/non-GLibc implementations, provide an empty definition.
+#if !defined(__MALLOC_HOOK_VOLATILE)
+#define __MALLOC_HOOK_VOLATILE
+#endif
+
using std::max;
using tcmalloc::PageHeap;
using tcmalloc::SizeMap;
@@ -403,7 +410,7 @@
return tc_malloc(size);
}
-void* (*__malloc_hook)(
+void* (*__MALLOC_HOOK_VOLATILE __malloc_hook)(
size_t size, const void* caller) = tc_ptmalloc_malloc_hook;
static void* tc_ptmalloc_realloc_hook(
@@ -411,14 +418,14 @@
return tc_realloc(ptr, size);
}
-void* (*__realloc_hook)(
+void* (*__MALLOC_HOOK_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 (*__MALLOC_HOOK_VOLATILE __free_hook)(void* ptr, const void* caller) = tc_ptmalloc_free_hook;
#endif
@@ -1757,7 +1764,7 @@
MallocHook::InvokeNewHook(result, size);
return result;
}
-void *(*__memalign_hook)(size_t, size_t, const void *) = MemalignOverride;
+void *(*__MALLOC_HOOK_VOLATILE __memalign_hook)(size_t, size_t, const void *) = MemalignOverride;
#endif // #ifndef TCMALLOC_FOR_DEBUGALLOCATION
// ---Double free() debugging implementation -----------------------------------
|