183 lines
6.9 KiB
Diff
183 lines
6.9 KiB
Diff
--- gperftools-gperftools-2.7/src/libc_override_gcc_and_weak.h 2018-04-30 14:00:34.000000000 +0800
|
|
+++ gperftools-gperftools-2.7/src/libc_override_gcc_and_weak.h 2021-11-05 17:26:30.853784606 +0800
|
|
@@ -57,168 +57,7 @@
|
|
|
|
#define ALIAS(tc_fn) __attribute__ ((alias (#tc_fn), used))
|
|
|
|
-void* operator new(size_t size) CPP_BADALLOC ALIAS(tc_new);
|
|
-void operator delete(void* p) CPP_NOTHROW ALIAS(tc_delete);
|
|
-void* operator new[](size_t size) CPP_BADALLOC ALIAS(tc_newarray);
|
|
-void operator delete[](void* p) CPP_NOTHROW ALIAS(tc_deletearray);
|
|
-void* operator new(size_t size, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_new_nothrow);
|
|
-void* operator new[](size_t size, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_newarray_nothrow);
|
|
-void operator delete(void* p, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_delete_nothrow);
|
|
-void operator delete[](void* p, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray_nothrow);
|
|
-
|
|
-#if defined(ENABLE_SIZED_DELETE)
|
|
-
|
|
-void operator delete(void *p, size_t size) CPP_NOTHROW
|
|
- ALIAS(tc_delete_sized);
|
|
-void operator delete[](void *p, size_t size) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray_sized);
|
|
-
|
|
-#elif defined(ENABLE_DYNAMIC_SIZED_DELETE) && \
|
|
- (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
|
|
-
|
|
-static void delegate_sized_delete(void *p, size_t s) {
|
|
- (operator delete)(p);
|
|
-}
|
|
-
|
|
-static void delegate_sized_deletearray(void *p, size_t s) {
|
|
- (operator delete[])(p);
|
|
-}
|
|
-
|
|
-extern "C" __attribute__((weak))
|
|
-int tcmalloc_sized_delete_enabled(void);
|
|
-
|
|
-static bool sized_delete_enabled(void) {
|
|
- if (tcmalloc_sized_delete_enabled != 0) {
|
|
- return !!tcmalloc_sized_delete_enabled();
|
|
- }
|
|
-
|
|
- const char *flag = TCMallocGetenvSafe("TCMALLOC_ENABLE_SIZED_DELETE");
|
|
- return tcmalloc::commandlineflags::StringToBool(flag, false);
|
|
-}
|
|
-
|
|
-extern "C" {
|
|
-
|
|
-static void *resolve_delete_sized(void) {
|
|
- if (sized_delete_enabled()) {
|
|
- return reinterpret_cast<void *>(tc_delete_sized);
|
|
- }
|
|
- return reinterpret_cast<void *>(delegate_sized_delete);
|
|
-}
|
|
-
|
|
-static void *resolve_deletearray_sized(void) {
|
|
- if (sized_delete_enabled()) {
|
|
- return reinterpret_cast<void *>(tc_deletearray_sized);
|
|
- }
|
|
- return reinterpret_cast<void *>(delegate_sized_deletearray);
|
|
-}
|
|
-
|
|
-}
|
|
-
|
|
-void operator delete(void *p, size_t size) CPP_NOTHROW
|
|
- __attribute__((ifunc("resolve_delete_sized")));
|
|
-void operator delete[](void *p, size_t size) CPP_NOTHROW
|
|
- __attribute__((ifunc("resolve_deletearray_sized")));
|
|
-
|
|
-#else /* !ENABLE_SIZED_DELETE && !ENABLE_DYN_SIZED_DELETE */
|
|
-
|
|
-void operator delete(void *p, size_t size) CPP_NOTHROW
|
|
- ALIAS(tc_delete);
|
|
-void operator delete[](void *p, size_t size) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray);
|
|
-
|
|
-#endif /* !ENABLE_SIZED_DELETE && !ENABLE_DYN_SIZED_DELETE */
|
|
-
|
|
-#if defined(ENABLE_ALIGNED_NEW_DELETE)
|
|
-
|
|
-void* operator new(size_t size, std::align_val_t al)
|
|
- ALIAS(tc_new_aligned);
|
|
-void operator delete(void* p, std::align_val_t al) CPP_NOTHROW
|
|
- ALIAS(tc_delete_aligned);
|
|
-void* operator new[](size_t size, std::align_val_t al)
|
|
- ALIAS(tc_newarray_aligned);
|
|
-void operator delete[](void* p, std::align_val_t al) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray_aligned);
|
|
-void* operator new(size_t size, std::align_val_t al, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_new_aligned_nothrow);
|
|
-void* operator new[](size_t size, std::align_val_t al, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_newarray_aligned_nothrow);
|
|
-void operator delete(void* p, std::align_val_t al, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_delete_aligned_nothrow);
|
|
-void operator delete[](void* p, std::align_val_t al, const std::nothrow_t& nt) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray_aligned_nothrow);
|
|
-
|
|
-#if defined(ENABLE_SIZED_DELETE)
|
|
-
|
|
-void operator delete(void *p, size_t size, std::align_val_t al) CPP_NOTHROW
|
|
- ALIAS(tc_delete_sized_aligned);
|
|
-void operator delete[](void *p, size_t size, std::align_val_t al) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray_sized_aligned);
|
|
-
|
|
-#else /* defined(ENABLE_SIZED_DELETE) */
|
|
-
|
|
-#if defined(ENABLE_DYNAMIC_SIZED_DELETE) && \
|
|
- (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
|
|
-
|
|
-static void delegate_sized_aligned_delete(void *p, size_t s, std::align_val_t al) {
|
|
- (operator delete)(p, al);
|
|
-}
|
|
-
|
|
-static void delegate_sized_aligned_deletearray(void *p, size_t s, std::align_val_t al) {
|
|
- (operator delete[])(p, al);
|
|
-}
|
|
-
|
|
-extern "C" {
|
|
-
|
|
-static void *resolve_delete_sized_aligned(void) {
|
|
- if (sized_delete_enabled()) {
|
|
- return reinterpret_cast<void *>(tc_delete_sized_aligned);
|
|
- }
|
|
- return reinterpret_cast<void *>(delegate_sized_aligned_delete);
|
|
-}
|
|
-
|
|
-static void *resolve_deletearray_sized_aligned(void) {
|
|
- if (sized_delete_enabled()) {
|
|
- return reinterpret_cast<void *>(tc_deletearray_sized_aligned);
|
|
- }
|
|
- return reinterpret_cast<void *>(delegate_sized_aligned_deletearray);
|
|
-}
|
|
-
|
|
-}
|
|
-
|
|
-void operator delete(void *p, size_t size, std::align_val_t al) CPP_NOTHROW
|
|
- __attribute__((ifunc("resolve_delete_sized_aligned")));
|
|
-void operator delete[](void *p, size_t size, std::align_val_t al) CPP_NOTHROW
|
|
- __attribute__((ifunc("resolve_deletearray_sized_aligned")));
|
|
-
|
|
-#else /* defined(ENABLE_DYN_SIZED_DELETE) */
|
|
-
|
|
-void operator delete(void *p, size_t size, std::align_val_t al) CPP_NOTHROW
|
|
- ALIAS(tc_delete);
|
|
-void operator delete[](void *p, size_t size, std::align_val_t al) CPP_NOTHROW
|
|
- ALIAS(tc_deletearray);
|
|
-
|
|
-#endif /* defined(ENABLE_DYN_SIZED_DELETE) */
|
|
-
|
|
-#endif /* defined(ENABLE_SIZED_DELETE) */
|
|
-
|
|
-#endif /* defined(ENABLE_ALIGNED_NEW_DELETE) */
|
|
-
|
|
extern "C" {
|
|
- void* malloc(size_t size) __THROW ALIAS(tc_malloc);
|
|
- void free(void* ptr) __THROW ALIAS(tc_free);
|
|
- void* realloc(void* ptr, size_t size) __THROW ALIAS(tc_realloc);
|
|
- void* calloc(size_t n, size_t size) __THROW ALIAS(tc_calloc);
|
|
- void cfree(void* ptr) __THROW ALIAS(tc_cfree);
|
|
- void* memalign(size_t align, size_t s) __THROW ALIAS(tc_memalign);
|
|
- void* aligned_alloc(size_t align, size_t s) __THROW ALIAS(tc_memalign);
|
|
- void* valloc(size_t size) __THROW ALIAS(tc_valloc);
|
|
- void* pvalloc(size_t size) __THROW ALIAS(tc_pvalloc);
|
|
- int posix_memalign(void** r, size_t a, size_t s) __THROW
|
|
- ALIAS(tc_posix_memalign);
|
|
#ifndef __UCLIBC__
|
|
void malloc_stats(void) __THROW ALIAS(tc_malloc_stats);
|
|
#endif
|
|
--- gperftools-gperftools-2.7/src/tests/tcmalloc_unittest.cc 2018-04-30 14:00:34.000000000 +0800
|
|
+++ gperftools-gperftools-2.7/src/tests/tcmalloc_unittest.cc 2021-11-05 17:26:59.906356097 +0800
|
|
@@ -1300,7 +1300,7 @@ static int RunAllTests(int argc, char**
|
|
CHECK(p1 != NULL);
|
|
VerifyNewHookWasCalled();
|
|
VerifyDeleteHookWasCalled();
|
|
- cfree(p1); // synonym for free
|
|
+ tc_cfree(p1); // synonym for free
|
|
VerifyDeleteHookWasCalled();
|
|
|
|
if (kOSSupportsMemalign) {
|