summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
authortimurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-02 20:10:38 +0000
committertimurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-02 20:10:38 +0000
commitae151055e77d7679c2d135cff3a2605332e335b3 (patch)
tree688d1c1899e8da334a646e3aa91f7b96bd2f0b3a /third_party
parent5a0635eda519261a46f8c7a9605c51137f8050e2 (diff)
downloadchromium_src-ae151055e77d7679c2d135cff3a2605332e335b3.zip
chromium_src-ae151055e77d7679c2d135cff3a2605332e335b3.tar.gz
chromium_src-ae151055e77d7679c2d135cff3a2605332e335b3.tar.bz2
Upgrade google-perftools to revision 77
This brings several bugfixes needed for turning on the heap leak checker inside tcmalloc. Unforked malloc_hook.cc for Linux This patch was prepared by Alexander Potapenko (cc'ed) and originally reviewed as http://codereview.chromium.org/339065 Review URL: http://codereview.chromium.org/340065 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30735 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party')
-rw-r--r--third_party/tcmalloc/config.h5
-rw-r--r--third_party/tcmalloc/config_linux.h9
-rw-r--r--third_party/tcmalloc/config_win.h3
-rw-r--r--third_party/tcmalloc/malloc_hook.cc502
-rw-r--r--third_party/tcmalloc/tcmalloc.gyp12
5 files changed, 18 insertions, 513 deletions
diff --git a/third_party/tcmalloc/config.h b/third_party/tcmalloc/config.h
index d24d37a..6155a86 100644
--- a/third_party/tcmalloc/config.h
+++ b/third_party/tcmalloc/config.h
@@ -6,6 +6,11 @@
#include "build/build_config.h"
+#define TC_VERSION_MAJOR 1
+#define TC_VERSION_MINOR 4
+#define TC_VERSION_PATCH ""
+#define TC_VERSION_STRING "google-perftools 1.4"
+
#if defined(OS_WIN)
#include "third_party/tcmalloc/config_win.h"
#elif defined(OS_LINUX)
diff --git a/third_party/tcmalloc/config_linux.h b/third_party/tcmalloc/config_linux.h
index b359ed5..398f303 100644
--- a/third_party/tcmalloc/config_linux.h
+++ b/third_party/tcmalloc/config_linux.h
@@ -79,6 +79,9 @@
/* define if the compiler implements namespaces */
#define HAVE_NAMESPACES 1
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
/* define if libc has program_invocation_name */
#define HAVE_PROGRAM_INVOCATION_NAME 1
@@ -167,13 +170,13 @@
#define PACKAGE_NAME "google-perftools"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "google-perftools 1.3"
+#define PACKAGE_STRING "google-perftools 1.4"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "google-perftools"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.3"
+#define PACKAGE_VERSION "1.4"
/* How to access the PC from a struct ucontext */
#define PC_FROM_UCONTEXT uc_mcontext.gregs[REG_RIP]
@@ -205,7 +208,7 @@
#define STL_NAMESPACE std
/* Version number of package */
-#define VERSION "1.3"
+#define VERSION "1.4"
/* C99 says: define this to get the PRI... macros from stdint.h */
#ifndef __STDC_FORMAT_MACROS
diff --git a/third_party/tcmalloc/config_win.h b/third_party/tcmalloc/config_win.h
index 9f4efa8..30daf4f 100644
--- a/third_party/tcmalloc/config_win.h
+++ b/third_party/tcmalloc/config_win.h
@@ -261,6 +261,9 @@
# define _WIN32_WINNT 0x0400
#endif
+// We want to make sure not to ever try to #include heap-checker.h
+#define NO_HEAP_CHECK 1
+
// TODO(csilvers): include windows/port.h in every relevant source file instead?
#include "windows/port.h"
diff --git a/third_party/tcmalloc/malloc_hook.cc b/third_party/tcmalloc/malloc_hook.cc
index 952ce2b..e69de29 100644
--- a/third_party/tcmalloc/malloc_hook.cc
+++ b/third_party/tcmalloc/malloc_hook.cc
@@ -1,502 +0,0 @@
-// Copyright (c) 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// ---
-// Author: Sanjay Ghemawat <opensource@google.com>
-
-#include <config.h>
-
-// Disable the glibc prototype of mremap(), as older versions of the
-// system headers define this function with only four arguments,
-// whereas newer versions allow an optional fifth argument:
-#ifdef HAVE_MMAP
-# define mremap glibc_mremap
-# include <sys/mman.h>
-# undef mremap
-#endif
-
-#include <algorithm>
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "malloc_hook-inl.h"
-#include <google/malloc_hook.h>
-
-// This #ifdef should almost never be set. Set NO_TCMALLOC_SAMPLES if
-// you're porting to a system where you really can't get a stacktrace.
-#ifdef NO_TCMALLOC_SAMPLES
- // We use #define so code compiles even if you #include stacktrace.h somehow.
-# define GetStackTrace(stack, depth, skip) (0)
-#else
-# include <google/stacktrace.h>
-#endif
-
-// __THROW is defined in glibc systems. It means, counter-intuitively,
-// "This function will never throw an exception." It's an optional
-// optimization tool, but we may need to use it to match glibc prototypes.
-#ifndef __THROW // I guess we're not on a glibc system
-# define __THROW // __THROW is just an optimization, so ok to make it ""
-#endif
-
-using std::copy;
-
-
-// Declarations of three default weak hook functions, that can be overridden by
-// linking-in a strong definition (as heap-checker.cc does)
-//
-// These default hooks let some other library we link in
-// to define strong versions of InitialMallocHook_New, InitialMallocHook_MMap,
-// InitialMallocHook_PreMMap, InitialMallocHook_PreSbrk, and
-// InitialMallocHook_Sbrk to have a chance to hook into the very first
-// invocation of an allocation function call, mmap, or sbrk.
-//
-// These functions are declared here as weak, and defined later, rather than a
-// more straightforward simple weak definition, as a workround for an icc
-// compiler issue ((Intel reference 290819). This issue causes icc to resolve
-// weak symbols too early, at compile rather than link time. By declaring it
-// (weak) here, then defining it below after its use, we can avoid the problem.
-//
-ATTRIBUTE_WEAK
-extern void InitialMallocHook_New(const void* ptr, size_t size);
-
-ATTRIBUTE_WEAK
-extern void InitialMallocHook_PreMMap(const void* start,
- size_t size,
- int protection,
- int flags,
- int fd,
- off_t offset);
-
-ATTRIBUTE_WEAK
-extern void InitialMallocHook_MMap(const void* result,
- const void* start,
- size_t size,
- int protection,
- int flags,
- int fd,
- off_t offset);
-
-ATTRIBUTE_WEAK
-extern void InitialMallocHook_PreSbrk(ptrdiff_t increment);
-
-ATTRIBUTE_WEAK
-extern void InitialMallocHook_Sbrk(const void* result, ptrdiff_t increment);
-
-namespace base { namespace internal {
-template<typename PtrT>
-PtrT AtomicPtr<PtrT>::Exchange(PtrT new_val) {
- base::subtle::MemoryBarrier(); // Release semantics.
- // Depending on the system, NoBarrier_AtomicExchange(AtomicWord*)
- // may have been defined to return an AtomicWord, Atomic32, or
- // Atomic64. We hide that implementation detail here with an
- // explicit cast. This prevents MSVC 2005, at least, from complaining.
- PtrT old_val = reinterpret_cast<PtrT>(static_cast<AtomicWord>(
- base::subtle::NoBarrier_AtomicExchange(
- &data_,
- reinterpret_cast<AtomicWord>(new_val))));
- base::subtle::MemoryBarrier(); // And acquire semantics.
- return old_val;
-}
-
-AtomicPtr<MallocHook::NewHook> new_hook_ = {
- reinterpret_cast<AtomicWord>(InitialMallocHook_New) };
-AtomicPtr<MallocHook::DeleteHook> delete_hook_ = { 0 };
-AtomicPtr<MallocHook::PreMmapHook> premmap_hook_ = {
- reinterpret_cast<AtomicWord>(InitialMallocHook_PreMMap) };
-AtomicPtr<MallocHook::MmapHook> mmap_hook_ = {
- reinterpret_cast<AtomicWord>(InitialMallocHook_MMap) };
-AtomicPtr<MallocHook::MunmapHook> munmap_hook_ = { 0 };
-AtomicPtr<MallocHook::MremapHook> mremap_hook_ = { 0 };
-AtomicPtr<MallocHook::PreSbrkHook> presbrk_hook_ = {
- reinterpret_cast<AtomicWord>(InitialMallocHook_PreSbrk) };
-AtomicPtr<MallocHook::SbrkHook> sbrk_hook_ = {
- reinterpret_cast<AtomicWord>(InitialMallocHook_Sbrk) };
-
-} } // namespace base::internal
-
-using base::internal::new_hook_;
-using base::internal::delete_hook_;
-using base::internal::premmap_hook_;
-using base::internal::mmap_hook_;
-using base::internal::munmap_hook_;
-using base::internal::mremap_hook_;
-using base::internal::presbrk_hook_;
-using base::internal::sbrk_hook_;
-
-
-// These are available as C bindings as well as C++, hence their
-// definition outside the MallocHook class.
-extern "C"
-MallocHook_NewHook MallocHook_SetNewHook(MallocHook_NewHook hook) {
- return new_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_DeleteHook MallocHook_SetDeleteHook(MallocHook_DeleteHook hook) {
- return delete_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_PreMmapHook MallocHook_SetPreMmapHook(MallocHook_PreMmapHook hook) {
- return premmap_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_MmapHook MallocHook_SetMmapHook(MallocHook_MmapHook hook) {
- return mmap_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_MunmapHook MallocHook_SetMunmapHook(MallocHook_MunmapHook hook) {
- return munmap_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_MremapHook MallocHook_SetMremapHook(MallocHook_MremapHook hook) {
- return mremap_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_PreSbrkHook MallocHook_SetPreSbrkHook(MallocHook_PreSbrkHook hook) {
- return presbrk_hook_.Exchange(hook);
-}
-
-extern "C"
-MallocHook_SbrkHook MallocHook_SetSbrkHook(MallocHook_SbrkHook hook) {
- return sbrk_hook_.Exchange(hook);
-}
-
-
-// The definitions of weak default malloc hooks (New, MMap, and Sbrk)
-// that self deinstall on their first call. This is entirely for
-// efficiency: the default version of these functions will be called a
-// maximum of one time. If these functions were a no-op instead, they'd
-// be called every time, costing an extra function call per malloc.
-//
-// However, this 'delete self' isn't safe in general -- it's possible
-// that this function will be called via a daisy chain. That is,
-// someone else might do
-// old_hook = MallocHook::SetNewHook(&myhook);
-// void myhook(void* ptr, size_t size) {
-// do_my_stuff();
-// old_hook(ptr, size); // daisy-chain the hooks
-// }
-// If old_hook is InitialMallocHook_New(), then this is broken code! --
-// after the first run it'll deregister not only InitialMallocHook_New()
-// but also myhook. To protect against that, InitialMallocHook_New()
-// makes sure it's the 'top-level' hook before doing the deregistration.
-// This means the daisy-chain case will be less efficient because the
-// hook will be called, and do an if check, for every new. Alas.
-// TODO(csilvers): add support for removing a hook from the middle of a chain.
-
-void InitialMallocHook_New(const void* ptr, size_t size) {
- if (MallocHook::GetNewHook() == &InitialMallocHook_New)
- MallocHook::SetNewHook(NULL);
-}
-
-void InitialMallocHook_PreMMap(const void* start,
- size_t size,
- int protection,
- int flags,
- int fd,
- off_t offset) {
- if (MallocHook::GetPreMmapHook() == &InitialMallocHook_PreMMap)
- MallocHook::SetPreMmapHook(NULL);
-}
-
-void InitialMallocHook_MMap(const void* result,
- const void* start,
- size_t size,
- int protection,
- int flags,
- int fd,
- off_t offset) {
- if (MallocHook::GetMmapHook() == &InitialMallocHook_MMap)
- MallocHook::SetMmapHook(NULL);
-}
-
-void InitialMallocHook_PreSbrk(ptrdiff_t increment) {
- if (MallocHook::GetPreSbrkHook() == &InitialMallocHook_PreSbrk)
- MallocHook::SetPreSbrkHook(NULL);
-}
-
-void InitialMallocHook_Sbrk(const void* result, ptrdiff_t increment) {
- if (MallocHook::GetSbrkHook() == &InitialMallocHook_Sbrk)
- MallocHook::SetSbrkHook(NULL);
-}
-
-DEFINE_ATTRIBUTE_SECTION_VARS(google_malloc);
-DECLARE_ATTRIBUTE_SECTION_VARS(google_malloc);
- // actual functions are in debugallocation.cc or tcmalloc.cc
-DEFINE_ATTRIBUTE_SECTION_VARS(malloc_hook);
-DECLARE_ATTRIBUTE_SECTION_VARS(malloc_hook);
- // actual functions are in this file, malloc_hook.cc, and low_level_alloc.cc
-
-#define ADDR_IN_ATTRIBUTE_SECTION(addr, name) \
- (reinterpret_cast<uintptr_t>(ATTRIBUTE_SECTION_START(name)) <= \
- reinterpret_cast<uintptr_t>(addr) && \
- reinterpret_cast<uintptr_t>(addr) < \
- reinterpret_cast<uintptr_t>(ATTRIBUTE_SECTION_STOP(name)))
-
-// Return true iff 'caller' is a return address within a function
-// that calls one of our hooks via MallocHook:Invoke*.
-// A helper for GetCallerStackTrace.
-static inline bool InHookCaller(const void* caller) {
- return ADDR_IN_ATTRIBUTE_SECTION(caller, google_malloc) ||
- ADDR_IN_ATTRIBUTE_SECTION(caller, malloc_hook);
- // We can use one section for everything except tcmalloc_or_debug
- // due to its special linkage mode, which prevents merging of the sections.
-}
-
-#undef ADDR_IN_ATTRIBUTE_SECTION
-
-static bool checked_sections = false;
-
-static inline void CheckInHookCaller() {
- if (!checked_sections) {
- INIT_ATTRIBUTE_SECTION_VARS(google_malloc);
- if (ATTRIBUTE_SECTION_START(google_malloc) ==
- ATTRIBUTE_SECTION_STOP(google_malloc)) {
- RAW_LOG(ERROR, "google_malloc section is missing, "
- "thus InHookCaller is broken!");
- }
- INIT_ATTRIBUTE_SECTION_VARS(malloc_hook);
- if (ATTRIBUTE_SECTION_START(malloc_hook) ==
- ATTRIBUTE_SECTION_STOP(malloc_hook)) {
- RAW_LOG(ERROR, "malloc_hook section is missing, "
- "thus InHookCaller is broken!");
- }
- checked_sections = true;
- }
-}
-
-// We can improve behavior/compactness of this function
-// if we pass a generic test function (with a generic arg)
-// into the implementations for GetStackTrace instead of the skip_count.
-extern "C" int MallocHook_GetCallerStackTrace(void** result, int max_depth,
- int skip_count) {
-#if defined(NO_TCMALLOC_SAMPLES)
- return 0;
-#elif !defined(HAVE_ATTRIBUTE_SECTION_START)
- // Fall back to GetStackTrace and good old but fragile frame skip counts.
- // Note: this path is inaccurate when a hook is not called directly by an
- // allocation function but is daisy-chained through another hook,
- // search for MallocHook::(Get|Set|Invoke)* to find such cases.
- return GetStackTrace(result, max_depth, skip_count + int(DEBUG_MODE));
- // due to -foptimize-sibling-calls in opt mode
- // there's no need for extra frame skip here then
-#else
- CheckInHookCaller();
- // MallocHook caller determination via InHookCaller works, use it:
- static const int kMaxSkip = 32 + 6 + 3;
- // Constant tuned to do just one GetStackTrace call below in practice
- // and not get many frames that we don't actually need:
- // currently max passsed max_depth is 32,
- // max passed/needed skip_count is 6
- // and 3 is to account for some hook daisy chaining.
- static const int kStackSize = kMaxSkip + 1;
- void* stack[kStackSize];
- int depth = GetStackTrace(stack, kStackSize, 1); // skip this function frame
- if (depth == 0) // silenty propagate cases when GetStackTrace does not work
- return 0;
- for (int i = 0; i < depth; ++i) { // stack[0] is our immediate caller
- if (InHookCaller(stack[i])) {
- RAW_VLOG(4, "Found hooked allocator at %d: %p <- %p",
- i, stack[i], stack[i+1]);
- i += 1; // skip hook caller frame
- depth -= i; // correct depth
- if (depth > max_depth) depth = max_depth;
- copy(stack + i, stack + i + depth, result);
- if (depth < max_depth && depth + i == kStackSize) {
- // get frames for the missing depth
- depth +=
- GetStackTrace(result + depth, max_depth - depth, 1 + kStackSize);
- }
- return depth;
- }
- }
- RAW_LOG(WARNING, "Hooked allocator frame not found, returning empty trace");
- // If this happens try increasing kMaxSkip
- // or else something must be wrong with InHookCaller,
- // e.g. for every section used in InHookCaller
- // all functions in that section must be inside the same library.
- return 0;
-#endif
-}
-
-// On Linux/x86, we override mmap/munmap/mremap/sbrk
-// and provide support for calling the related hooks.
-//
-// We define mmap() and mmap64(), which somewhat reimplements libc's mmap
-// syscall stubs. Unfortunately libc only exports the stubs via weak symbols
-// (which we're overriding with our mmap64() and mmap() wrappers) so we can't
-// just call through to them.
-
-
-#if defined(__linux) && \
- (defined(__i386__) || defined(__x86_64__) || defined(__PPC__))
-#include <unistd.h>
-#include <syscall.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include "base/linux_syscall_support.h"
-
-// The x86-32 case and the x86-64 case differ:
-// 32b has a mmap2() syscall, 64b does not.
-// 64b and 32b have different calling conventions for mmap().
-#if defined(__x86_64__) || defined(__PPC64__)
-
-static inline void* do_mmap64(void *start, size_t length,
- int prot, int flags,
- int fd, __off64_t offset) __THROW {
- return (void *)syscall(SYS_mmap, start, length, prot, flags, fd, offset);
-}
-
-#elif defined(__i386__) || defined(__PPC__)
-
-static inline void* do_mmap64(void *start, size_t length,
- int prot, int flags,
- int fd, __off64_t offset) __THROW {
- void *result;
-
- // Try mmap2() unless it's not supported
- static bool have_mmap2 = true;
- if (have_mmap2) {
- static int pagesize = 0;
- if (!pagesize) pagesize = getpagesize();
-
- // Check that the offset is page aligned
- if (offset & (pagesize - 1)) {
- result = MAP_FAILED;
- errno = EINVAL;
- goto out;
- }
-
- result = (void *)syscall(SYS_mmap2,
- start, length, prot, flags, fd, offset / pagesize);
- if (result != MAP_FAILED || errno != ENOSYS) goto out;
-
- // We don't have mmap2() after all - don't bother trying it in future
- have_mmap2 = false;
- }
-
- if (((off_t)offset) != offset) {
- // If we're trying to map a 64-bit offset, fail now since we don't
- // have 64-bit mmap() support.
- result = MAP_FAILED;
- errno = EINVAL;
- goto out;
- }
-
- {
- // Fall back to old 32-bit offset mmap() call
- // Old syscall interface cannot handle six args, so pass in an array
- int32 args[6] = { (int32) start, length, prot, flags, fd, (off_t) offset };
- result = (void *)syscall(SYS_mmap, args);
- }
- out:
- return result;
-}
-
-# endif
-
-#undef mmap
-
-// We use do_mmap64 abstraction to put MallocHook::InvokeMmapHook
-// calls right into mmap and mmap64, so that the stack frames in the caller's
-// stack are at the same offsets for all the calls of memory allocating
-// functions.
-
-// Put all callers of MallocHook::Invoke* in this module into
-// malloc_hook section,
-// so that MallocHook::GetCallerStackTrace can function accurately:
-extern "C" {
- void* mmap64(void *start, size_t length, int prot, int flags,
- int fd, __off64_t offset ) __THROW
- ATTRIBUTE_SECTION(malloc_hook);
- void* mmap(void *start, size_t length,int prot, int flags,
- int fd, off_t offset) __THROW
- ATTRIBUTE_SECTION(malloc_hook);
- int munmap(void* start, size_t length) __THROW
- ATTRIBUTE_SECTION(malloc_hook);
- void* mremap(void* old_addr, size_t old_size, size_t new_size,
- int flags, ...) __THROW
- ATTRIBUTE_SECTION(malloc_hook);
- void* sbrk(ptrdiff_t increment) __THROW
- ATTRIBUTE_SECTION(malloc_hook);
-}
-
-extern "C" void* mmap64(void *start, size_t length, int prot, int flags,
- int fd, __off64_t offset) __THROW {
- MallocHook::InvokePreMmapHook(start, length, prot, flags, fd, offset);
- void *result = do_mmap64(start, length, prot, flags, fd, offset);
- MallocHook::InvokeMmapHook(result, start, length, prot, flags, fd, offset);
- return result;
-}
-
-#if !defined(__USE_FILE_OFFSET64) || !defined(__REDIRECT_NTH)
-
-extern "C" void* mmap(void *start, size_t length, int prot, int flags,
- int fd, off_t offset) __THROW {
- MallocHook::InvokePreMmapHook(start, length, prot, flags, fd, offset);
- void *result = do_mmap64(start, length, prot, flags, fd,
- static_cast<size_t>(offset)); // avoid sign extension
- MallocHook::InvokeMmapHook(result, start, length, prot, flags, fd, offset);
- return result;
-}
-
-#endif
-
-extern "C" int munmap(void* start, size_t length) __THROW {
- MallocHook::InvokeMunmapHook(start, length);
- return syscall(SYS_munmap, start, length);
-}
-
-extern "C" void* mremap(void* old_addr, size_t old_size, size_t new_size,
- int flags, ...) __THROW {
- va_list ap;
- va_start(ap, flags);
- void *new_address = va_arg(ap, void *);
- va_end(ap);
- void* result = sys_mremap(old_addr, old_size, new_size, flags, new_address);
- MallocHook::InvokeMremapHook(result, old_addr, old_size, new_size, flags,
- new_address);
- return result;
-}
-
-// libc's version:
-extern "C" void* __sbrk(ptrdiff_t increment);
-
-extern "C" void* sbrk(ptrdiff_t increment) __THROW {
- MallocHook::InvokePreSbrkHook(increment);
- void *result = __sbrk(increment);
- MallocHook::InvokeSbrkHook(result, increment);
- return result;
-}
-
-#endif
diff --git a/third_party/tcmalloc/tcmalloc.gyp b/third_party/tcmalloc/tcmalloc.gyp
index fbb2750..dc14304 100644
--- a/third_party/tcmalloc/tcmalloc.gyp
+++ b/third_party/tcmalloc/tcmalloc.gyp
@@ -88,6 +88,8 @@
'tcmalloc/src/google/tcmalloc.h',
'tcmalloc/src/maybe_threads.cc',
'tcmalloc/src/maybe_threads.h',
+ 'tcmalloc/src/symbolize.cc',
+ 'tcmalloc/src/symbolize.h',
'tcmalloc/src/system-alloc.cc',
'tcmalloc/src/system-alloc.h',
'tcmalloc/src/tcmalloc.cc',
@@ -118,8 +120,6 @@
'tcmalloc.cc',
'win_allocator.cc',
- 'malloc_hook.cc',
-
# jemalloc files
'jemalloc/jemalloc.c',
'jemalloc/jemalloc.h',
@@ -171,6 +171,8 @@
'tcmalloc/src/base/vdso_support.h',
'tcmalloc/src/maybe_threads.cc',
'tcmalloc/src/maybe_threads.h',
+ 'tcmalloc/src/symbolize.cc',
+ 'tcmalloc/src/symbolize.h',
'tcmalloc/src/system-alloc.cc',
'tcmalloc/src/system-alloc.h',
@@ -192,9 +194,6 @@
'tcmalloc/src/profile-handler.cc',
'tcmalloc/src/profile-handler.h',
'tcmalloc/src/profiler.cc',
-
- # don't use linux forked versions
- 'malloc_hook.cc',
],
}],
['OS=="linux"', {
@@ -214,9 +213,6 @@
'jemalloc/ql.h',
'jemalloc/qr.h',
'jemalloc/rb.h',
-
- # TODO(willchan): Unfork linux.
- 'tcmalloc/src/malloc_hook.cc',
],
'cflags!': [
'-fvisibility=hidden',