diff --git a/Avoid-static-initialization-of-pprof-path-for-symbol.patch b/Avoid-static-initialization-of-pprof-path-for-symbol.patch deleted file mode 100644 index 5b1c261dfb7d3975f2f2ee6349206cc5b5160a05..0000000000000000000000000000000000000000 --- a/Avoid-static-initialization-of-pprof-path-for-symbol.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 893bff51bcf220b724a812d340d878b5fb8ce911 Mon Sep 17 00:00:00 2001 -From: Aliaksey Kandratsenka -Date: Sun, 26 Aug 2018 11:35:44 -0700 -Subject: [PATCH 23/39] Avoid static initialization of pprof path for - symbolization. - -This is one of the things that chrome's fork fixes, but with c++11 we -can do it even nicer. Proposed fix is to use c++11 local static -variable to ensure that pprof path is initialized once on as-needed -basis. ---- - src/symbolize.cc | 20 +++++++++++--------- - 1 file changed, 11 insertions(+), 9 deletions(-) - -diff --git a/src/symbolize.cc b/src/symbolize.cc -index 88609ff..4c71010 100755 ---- a/src/symbolize.cc -+++ b/src/symbolize.cc -@@ -67,15 +67,17 @@ - using std::string; - using tcmalloc::DumpProcSelfMaps; // from sysinfo.h - -- --DEFINE_string(symbolize_pprof, -- EnvToString("PPROF_PATH", "pprof"), -- "Path to pprof to call for reporting function names."); -- --// heap_profile_table_pprof may be referenced after destructors are -+// pprof may be used after destructors are - // called (since that's when leak-checking is done), so we make - // a more-permanent copy that won't ever get destroyed. --static string* g_pprof_path = new string(FLAGS_symbolize_pprof); -+static char* get_pprof_path() { -+ static char* result = ([] () { -+ string pprof_string = EnvToString("PPROF_PATH", "pprof"); -+ return strdup(pprof_string.c_str()); -+ })(); -+ -+ return result; -+} - - // Returns NULL if we're on an OS where we can't get the invocation name. - // Using a static var is ok because we're not called from a thread. -@@ -144,7 +146,7 @@ int SymbolTable::Symbolize() { - PrintError("Cannot figure out the name of this executable (argv0)"); - return 0; - } -- if (access(g_pprof_path->c_str(), R_OK) != 0) { -+ if (access(get_pprof_path(), R_OK) != 0) { - PrintError("Cannot find 'pprof' (is PPROF_PATH set correctly?)"); - return 0; - } -@@ -206,7 +208,7 @@ int SymbolTable::Symbolize() { - unsetenv("HEAPPROFILE"); - unsetenv("HEAPCHECK"); - unsetenv("PERFTOOLS_VERBOSE"); -- execlp(g_pprof_path->c_str(), g_pprof_path->c_str(), -+ execlp(get_pprof_path(), get_pprof_path(), - "--symbols", argv0, NULL); - _exit(3); // if execvp fails, it's bad news for us - } --- -1.8.3.1 - diff --git a/Disable-large-allocation-report-by-default.patch b/Disable-large-allocation-report-by-default.patch deleted file mode 100644 index e70c553128d380d3bd6a8a3f1d382421d8e52fdc..0000000000000000000000000000000000000000 --- a/Disable-large-allocation-report-by-default.patch +++ /dev/null @@ -1,70 +0,0 @@ -From fe87ffb7ea5a7c6ce4dea45222331716907ddbf4 Mon Sep 17 00:00:00 2001 -From: Junhao Li -Date: Sun, 20 May 2018 13:45:32 -0400 -Subject: [PATCH] Disable large allocation report by default - -Fixes issue #360. - -[alkondratenko@gmail.com: adjusted commit message a bit] -[alkondratenko@gmail.com: adjusted configure help message] -Signed-off-by: Aliaksey Kandratsenka ---- - configure.ac | 9 +++++++++ - src/tcmalloc.cc | 4 ++++ - 2 files changed, 13 insertions(+) - -diff --git a/configure.ac b/configure.ac -index 497103e..7b5e710 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -653,6 +653,15 @@ AC_COMPILE_IFELSE( - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) - -+# Disable large allocation report by default. -+AC_ARG_ENABLE([large-alloc-report], -+ [AS_HELP_STRING([--enable-large-alloc-report], -+ [report very large allocations to stderr])], -+ [enable_large_alloc_report="$enableval"], -+ [enable_large_alloc_report=no]) -+AS_IF([test "x$enable_large_alloc_report" = xyes], -+ [AC_DEFINE([ENABLE_LARGE_ALLOC_REPORT], 1, [report large allocation])]) -+ - # Write generated configuration file - AC_CONFIG_FILES([Makefile - src/gperftools/tcmalloc.h src/windows/gperftools/tcmalloc.h]) -diff --git a/src/tcmalloc.cc b/src/tcmalloc.cc -index 7b18ddb..48d4530 100644 ---- a/src/tcmalloc.cc -+++ b/src/tcmalloc.cc -@@ -1272,9 +1272,11 @@ void* handle_oom(malloc_fn retry_fn, - - // Copy of FLAGS_tcmalloc_large_alloc_report_threshold with - // automatic increases factored in. -+#ifdef ENABLE_LARGE_ALLOC_REPORT - static int64_t large_alloc_threshold = - (kPageSize > FLAGS_tcmalloc_large_alloc_report_threshold - ? kPageSize : FLAGS_tcmalloc_large_alloc_report_threshold); -+#endif - - static void ReportLargeAlloc(Length num_pages, void* result) { - StackTrace stack; -@@ -1295,6 +1297,7 @@ static void ReportLargeAlloc(Length num_pages, void* result) { - - // Must be called with the page lock held. - inline bool should_report_large(Length num_pages) { -+#ifdef ENABLE_LARGE_ALLOC_REPORT - const int64 threshold = large_alloc_threshold; - if (threshold > 0 && num_pages >= (threshold >> kPageShift)) { - // Increase the threshold by 1/8 every time we generate a report. -@@ -1303,6 +1306,7 @@ inline bool should_report_large(Length num_pages) { - ? threshold + threshold/8 : 8ll<<30); - return true; - } -+#endif - return false; - } - --- -1.8.3.1 - diff --git a/Drop-not-very-portable-and-not-very-useful-unwind-be.patch b/Drop-not-very-portable-and-not-very-useful-unwind-be.patch deleted file mode 100644 index ab4c4848149cd9a200854341c16767fc4b0e332f..0000000000000000000000000000000000000000 --- a/Drop-not-very-portable-and-not-very-useful-unwind-be.patch +++ /dev/null @@ -1,196 +0,0 @@ -From 630c9ce77822212a4ce3ee92afabbec0eea0f94b Mon Sep 17 00:00:00 2001 -From: Aliaksey Kandratsenka -Date: Sun, 7 Oct 2018 08:17:04 -0700 -Subject: [PATCH] Drop not very portable and not very useful unwind benchmark. - ---- - Makefile.am | 8 ---- - benchmark/getcontext_light.cc | 60 ----------------------------- - benchmark/unwind_bench.cc | 89 ------------------------------------------- - 3 files changed, 157 deletions(-) - delete mode 100644 benchmark/getcontext_light.cc - delete mode 100644 benchmark/unwind_bench.cc - -diff --git a/Makefile.am b/Makefile.am -index c79227a..1f52d3d 100755 ---- a/Makefile.am -+++ b/Makefile.am -@@ -881,14 +881,6 @@ malloc_bench_shared_full_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) $(NO_BUILTI - malloc_bench_shared_full_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) - malloc_bench_shared_full_LDADD = librun_benchmark.la libtcmalloc.la $(PTHREAD_LIBS) - --if !OSX --noinst_PROGRAMS += unwind_bench --unwind_bench_SOURCES = benchmark/unwind_bench.cc benchmark/getcontext_light.cc --unwind_bench_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) $(NO_BUILTIN_CXXFLAGS) --unwind_bench_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) --unwind_bench_LDADD = librun_benchmark.la libtcmalloc.la $(PTHREAD_LIBS) --endif !OSX -- - endif WITH_HEAP_PROFILER_OR_CHECKER - - binary_trees_SOURCES = benchmark/binary_trees.cc -diff --git a/benchmark/getcontext_light.cc b/benchmark/getcontext_light.cc -deleted file mode 100644 -index e8ff8b3..0000000 ---- a/benchmark/getcontext_light.cc -+++ /dev/null -@@ -1,60 +0,0 @@ --#include --#include -- --extern "C" void getcontext_light(ucontext_t *ctx); -- --// clang's built-in asm cannot handle .set directives --#if defined(__GNUC__) && !defined(__llvm__) && defined(__x86_64) && defined(_LP64) -- --#define R(r) offsetof(ucontext_t, uc_mcontext.gregs[r]) -- --static __attribute__((used)) --void getcontext_tramp(ucontext_t *ctx) { -- __asm__ __volatile__(".set oRBX, %c0\n" -- ".set oRBP, %c1\n" -- ".set oR12, %c2\n" -- ".set oR13, %c3\n" -- ".set oR14, %c4\n" -- ".set oR15, %c5\n" -- ".set oRIP, %c6\n" -- ".set oRSP, %c7\n" -- : : -- "p" (R(REG_RBX)), -- "p" (R(REG_RBP)), -- "p" (R(REG_R12)), -- "p" (R(REG_R13)), -- "p" (R(REG_R14)), -- "p" (R(REG_R15)), -- "p" (R(REG_RIP)), -- "p" (R(REG_RSP))); -- getcontext_light(ctx); --} -- --__asm__(".pushsection .text; .globl getcontext_light\n" -- ".type getcontext_light, @function\n" --"getcontext_light:\n" -- "\t.cfi_startproc\n" -- "\tmovq %rbx, oRBX(%rdi)\n" -- "\tmovq %rbp, oRBP(%rdi)\n" -- "\tmovq %r12, oR12(%rdi)\n" -- "\tmovq %r13, oR13(%rdi)\n" -- "\tmovq %r14, oR14(%rdi)\n" -- "\tmovq %r15, oR14(%rdi)\n" -- -- "\tmovq (%rsp), %rcx\n" -- "\tmovq %rcx, oRIP(%rdi)\n" -- "\tleaq 8(%rsp), %rcx\n" /* Exclude the return address. */ -- "\tmovq %rcx, oRSP(%rdi)\n" -- "\tret\n" -- ".cfi_endproc\n" -- ".size getcontext_light, .-getcontext_light\n" -- ".popsection\n" -- ); -- --#else -- --extern "C" void getcontext_light(ucontext_t *ctx) { -- getcontext(ctx); --} -- --#endif -diff --git a/benchmark/unwind_bench.cc b/benchmark/unwind_bench.cc -deleted file mode 100644 -index 9c4e2f8..0000000 ---- a/benchmark/unwind_bench.cc -+++ /dev/null -@@ -1,89 +0,0 @@ --// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- --#include "config.h" -- --#include "base/basictypes.h" --#include "gperftools/stacktrace.h" -- --#include --#include --#include --#include --#if HAVE_LIBUNWIND_H --#include --#endif -- --#include "run_benchmark.h" -- --extern "C" void getcontext_light(ucontext_t *ctx); -- --#define MAX_FRAMES 1024 --static void *frames[MAX_FRAMES]; -- --enum measure_mode { -- MODE_NOOP, -- MODE_WITH_CONTEXT, -- MODE_WITHOUT_CONTEXT --}; -- --static int ATTRIBUTE_NOINLINE measure_unwind(int maxlevel, int mode) { -- int n; -- -- if (mode == MODE_NOOP) -- return 0; -- -- if (mode == MODE_WITH_CONTEXT) { -- ucontext_t uc; -- getcontext_light(&uc); -- n = GetStackTraceWithContext(frames, MAX_FRAMES, 0, &uc); -- } else { -- n = GetStackTrace(frames, MAX_FRAMES, 0); -- } -- if (n < maxlevel) { -- fprintf(stderr, "Expected at least %d frames, got %d\n", maxlevel, n); -- abort(); -- } -- return 0; --} -- --static int ATTRIBUTE_NOINLINE frame_forcer(int rv) { -- return rv; --} -- --static int ATTRIBUTE_NOINLINE f1(int level, int maxlevel, int mode) { -- if (level == maxlevel) -- return frame_forcer(measure_unwind(maxlevel, mode)); -- return frame_forcer(f1(level + 1, maxlevel, mode)); --} -- --static void bench_unwind_no_op(long iterations, uintptr_t param) { -- do { -- f1(0, param, MODE_NOOP); -- iterations -= param; -- } while (iterations > 0); --} -- --static void bench_unwind_context(long iterations, uintptr_t param) { -- do { -- f1(0, param, MODE_WITH_CONTEXT); -- iterations -= param; -- } while (iterations > 0); --} -- --static void bench_unwind_no_context(long iterations, uintptr_t param) { -- do { -- f1(0, param, MODE_WITHOUT_CONTEXT); -- iterations -= param; -- } while (iterations > 0); --} -- --int main(void) { -- report_benchmark("unwind_no_op", bench_unwind_no_op, 100); -- report_benchmark("unwind_context", bench_unwind_context, 100); -- report_benchmark("unwind_no_context", bench_unwind_no_context, 100); -- --//// TODO: somehow this fails at linking step. Figure out why this is missing --// #if HAVE_LIBUNWIND_H --// unw_set_caching_policy(unw_local_addr_space, UNW_CACHE_PER_THREAD); --// #endif -- return 0; --} --- -1.8.3.1 - diff --git a/Fix-incompatible-aliasing-warnings.patch b/Fix-incompatible-aliasing-warnings.patch deleted file mode 100644 index 2c912fe1d1ad368fe5ff24637e4a85eeb6957817..0000000000000000000000000000000000000000 --- a/Fix-incompatible-aliasing-warnings.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 71c8cedacafe700e662c008b65f5064b23426070 Mon Sep 17 00:00:00 2001 -From: Aliaksey Kandratsenka -Date: Sun, 5 Aug 2018 18:54:01 -0700 -Subject: [PATCH 19/39] Fix incompatible aliasing warnings - -We aliased functions with different signatures and gcc now correctly -gives warning for that. Originally gcc 5 same code merging feature -caused us to alias more than necessary, but I am not able to reproduce -this problem anymore. So we're now aliasing only compatible functions. ---- - src/libc_override_gcc_and_weak.h | 8 ++++---- - src/tcmalloc.cc | 16 ---------------- - 2 files changed, 4 insertions(+), 20 deletions(-) - -diff --git a/src/libc_override_gcc_and_weak.h b/src/libc_override_gcc_and_weak.h -index 6875164..bb99b69 100644 ---- a/src/libc_override_gcc_and_weak.h -+++ b/src/libc_override_gcc_and_weak.h -@@ -126,9 +126,9 @@ void operator delete[](void *p, size_t size) CPP_NOTHROW - #else /* !ENABLE_SIZED_DELETE && !ENABLE_DYN_SIZED_DELETE */ - - void operator delete(void *p, size_t size) CPP_NOTHROW -- ALIAS(tc_delete); -+ ALIAS(tc_delete_sized); - void operator delete[](void *p, size_t size) CPP_NOTHROW -- ALIAS(tc_deletearray); -+ ALIAS(tc_deletearray_sized); - - #endif /* !ENABLE_SIZED_DELETE && !ENABLE_DYN_SIZED_DELETE */ - -@@ -197,9 +197,9 @@ void operator delete[](void *p, size_t size, std::align_val_t al) CPP_NOTHROW - #else /* defined(ENABLE_DYN_SIZED_DELETE) */ - - void operator delete(void *p, size_t size, std::align_val_t al) CPP_NOTHROW -- ALIAS(tc_delete); -+ ALIAS(tc_delete_sized_aligned); - void operator delete[](void *p, size_t size, std::align_val_t al) CPP_NOTHROW -- ALIAS(tc_deletearray); -+ ALIAS(tc_deletearray_sized_aligned); - - #endif /* defined(ENABLE_DYN_SIZED_DELETE) */ - -diff --git a/src/tcmalloc.cc b/src/tcmalloc.cc -index 37c1440..b320b30 100644 ---- a/src/tcmalloc.cc -+++ b/src/tcmalloc.cc -@@ -1998,9 +1998,6 @@ TC_ALIAS(tc_free); - // (via ::operator delete(ptr, nothrow)). - // But it's really the same as normal delete, so we just do the same thing. - extern "C" PERFTOOLS_DLL_DECL void tc_delete_nothrow(void* p, const std::nothrow_t&) PERFTOOLS_NOTHROW --#ifdef TC_ALIAS --TC_ALIAS(tc_free); --#else - { - if (PREDICT_FALSE(!base::internal::delete_hooks_.empty())) { - tcmalloc::invoke_hooks_and_free(p); -@@ -2008,7 +2005,6 @@ TC_ALIAS(tc_free); - } - do_free(p); - } --#endif - - extern "C" PERFTOOLS_DLL_DECL void* tc_newarray(size_t size) - #ifdef TC_ALIAS -@@ -2080,33 +2076,21 @@ extern "C" PERFTOOLS_DLL_DECL void* tc_new_aligned_nothrow(size_t size, std::ali - } - - extern "C" PERFTOOLS_DLL_DECL void tc_delete_aligned(void* p, std::align_val_t) PERFTOOLS_NOTHROW --#ifdef TC_ALIAS --TC_ALIAS(tc_delete); --#else - { - free_fast_path(p); - } --#endif - - // There is no easy way to obtain the actual size used by do_memalign to allocate aligned storage, so for now - // just ignore the size. It might get useful in the future. - extern "C" PERFTOOLS_DLL_DECL void tc_delete_sized_aligned(void* p, size_t size, std::align_val_t align) PERFTOOLS_NOTHROW --#ifdef TC_ALIAS --TC_ALIAS(tc_delete); --#else - { - free_fast_path(p); - } --#endif - - extern "C" PERFTOOLS_DLL_DECL void tc_delete_aligned_nothrow(void* p, std::align_val_t, const std::nothrow_t&) PERFTOOLS_NOTHROW --#ifdef TC_ALIAS --TC_ALIAS(tc_delete); --#else - { - free_fast_path(p); - } --#endif - - extern "C" PERFTOOLS_DLL_DECL void* tc_newarray_aligned(size_t size, std::align_val_t align) - #ifdef TC_ALIAS --- -1.8.3.1 - diff --git a/Fix-mmap-region-iteration-while-no-regions-are-recor.patch b/Fix-mmap-region-iteration-while-no-regions-are-recor.patch deleted file mode 100644 index 87897b3cf3bd6673f69e730f8294d8b3ae835739..0000000000000000000000000000000000000000 --- a/Fix-mmap-region-iteration-while-no-regions-are-recor.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 1de76671d478e848f0dd210e00df43bfa463ca9f Mon Sep 17 00:00:00 2001 -From: Gabriel Marin -Date: Thu, 4 Oct 2018 22:52:35 +0000 -Subject: [PATCH 31/39] Fix mmap region iteration while no regions are - recorded. - -If no mmap regions are recorded, iteration failed since the RegionSet -(std::set) object is not initialized. - -Original CL https://codereview.chromium.org/14769008 - -Reviewed-on: https://chromium-review.googlesource.com/c/1130807 ---- - src/memory_region_map.cc | 19 +++++++++++++------ - src/memory_region_map.h | 3 +++ - 2 files changed, 16 insertions(+), 6 deletions(-) - mode change 100755 => 100644 src/memory_region_map.cc - -diff --git a/src/memory_region_map.cc b/src/memory_region_map.cc -old mode 100755 -new mode 100644 -index 841d6f3..06b6fb0 ---- a/src/memory_region_map.cc -+++ b/src/memory_region_map.cc -@@ -234,6 +234,9 @@ void MemoryRegionMap::Init(int max_stack_depth, bool use_buckets) { - memset(bucket_table_, 0, table_bytes); - num_buckets_ = 0; - } -+ if (regions_ == NULL) { // init regions_ -+ InitRegionSetLocked(); -+ } - Unlock(); - RAW_VLOG(10, "MemoryRegionMap Init done"); - } -@@ -536,6 +539,15 @@ void MemoryRegionMap::RestoreSavedBucketsLocked() { - } - } - -+inline void MemoryRegionMap::InitRegionSetLocked() { -+ RAW_VLOG(12, "Initializing region set"); -+ regions_ = regions_rep.region_set(); -+ recursive_insert = true; -+ new (regions_) RegionSet(); -+ HandleSavedRegionsLocked(&DoInsertRegionLocked); -+ recursive_insert = false; -+} -+ - inline void MemoryRegionMap::InsertRegionLocked(const Region& region) { - RAW_CHECK(LockIsHeld(), "should be held (by this thread)"); - // We can be called recursively, because RegionSet constructor -@@ -556,12 +568,7 @@ inline void MemoryRegionMap::InsertRegionLocked(const Region& region) { - saved_regions[saved_regions_count++] = region; - } else { // not a recusrive call - if (regions_ == NULL) { // init regions_ -- RAW_VLOG(12, "Initializing region set"); -- regions_ = regions_rep.region_set(); -- recursive_insert = true; -- new(regions_) RegionSet(); -- HandleSavedRegionsLocked(&DoInsertRegionLocked); -- recursive_insert = false; -+ InitRegionSetLocked(); - } - recursive_insert = true; - // Do the actual insertion work to put new regions into regions_: -diff --git a/src/memory_region_map.h b/src/memory_region_map.h -index ec388e1..f774994 100644 ---- a/src/memory_region_map.h -+++ b/src/memory_region_map.h -@@ -362,6 +362,9 @@ class MemoryRegionMap { - // table where all buckets eventually should be. - static void RestoreSavedBucketsLocked(); - -+ // Initialize RegionSet regions_. -+ inline static void InitRegionSetLocked(); -+ - // Wrapper around DoInsertRegionLocked - // that handles the case of recursive allocator calls. - inline static void InsertRegionLocked(const Region& region); --- -1.8.3.1 - diff --git a/Fix-page_heap_test-flakiness.patch b/Fix-page_heap_test-flakiness.patch deleted file mode 100644 index c3c97a4632db58bd8f0aba7ed267365df563f368..0000000000000000000000000000000000000000 --- a/Fix-page_heap_test-flakiness.patch +++ /dev/null @@ -1,194 +0,0 @@ -From f2bca77aed83107197abadee0652c39e2c4c73d3 Mon Sep 17 00:00:00 2001 -From: Brian Silverman -Date: Thu, 9 Aug 2018 16:33:39 -0700 -Subject: [PATCH 21/39] Fix page_heap_test flakiness - -After 71fa9f87 (use 2-level page map for 48-bit addresses), there is a -potential for allocs of additional leaves in the middle of the test. -With ASLR enabled on amd64 (without TCMALLOC_SMALL_BUT_SLOW), this -results in the test failing sometimes (< 1% of the time). Instead, make -sure all those leaves are allocated before deciding on the baseline heap -usage in the test. ---- - src/tests/page_heap_test.cc | 79 ++++++++++++++++++++++++++++++++------------- - 1 file changed, 56 insertions(+), 23 deletions(-) - -diff --git a/src/tests/page_heap_test.cc b/src/tests/page_heap_test.cc -index e82a1da..3caacc0 100644 ---- a/src/tests/page_heap_test.cc -+++ b/src/tests/page_heap_test.cc -@@ -6,9 +6,13 @@ - // be found in the LICENSE file. - - #include "config_for_unittests.h" -+ -+#include -+ -+#include -+ - #include "page_heap.h" - #include "system-alloc.h" --#include - #include "base/logging.h" - #include "common.h" - -@@ -39,33 +43,63 @@ static void CheckStats(const tcmalloc::PageHeap* ph, - } - - static void TestPageHeap_Stats() { -- tcmalloc::PageHeap* ph = new tcmalloc::PageHeap(); -+ std::unique_ptr ph(new tcmalloc::PageHeap()); - - // Empty page heap -- CheckStats(ph, 0, 0, 0); -+ CheckStats(ph.get(), 0, 0, 0); - - // Allocate a span 's1' - tcmalloc::Span* s1 = ph->New(256); -- CheckStats(ph, 256, 0, 0); -+ CheckStats(ph.get(), 256, 0, 0); - - // Split span 's1' into 's1', 's2'. Delete 's2' - tcmalloc::Span* s2 = ph->Split(s1, 128); - ph->Delete(s2); -- CheckStats(ph, 256, 128, 0); -+ CheckStats(ph.get(), 256, 128, 0); - - // Unmap deleted span 's2' - ph->ReleaseAtLeastNPages(1); -- CheckStats(ph, 256, 0, 128); -+ CheckStats(ph.get(), 256, 0, 128); - - // Delete span 's1' - ph->Delete(s1); -- CheckStats(ph, 256, 128, 128); -+ CheckStats(ph.get(), 256, 128, 128); -+} - -- delete ph; -+// The number of kMaxPages-sized Spans we will allocate and free during the -+// tests. -+// We will also do twice this many kMaxPages/2-sized ones. -+static constexpr int kNumberMaxPagesSpans = 10; -+ -+// Allocates all the last-level page tables we will need. Doing this before -+// calculating the base heap usage is necessary, because otherwise if any of -+// these are allocated during the main test it will throw the heap usage -+// calculations off and cause the test to fail. -+static void AllocateAllPageTables() { -+ // Make a separate PageHeap from the main test so the test can start without -+ // any pages in the lists. -+ std::unique_ptr ph(new tcmalloc::PageHeap()); -+ tcmalloc::Span *spans[kNumberMaxPagesSpans * 2]; -+ for (int i = 0; i < kNumberMaxPagesSpans; ++i) { -+ spans[i] = ph->New(kMaxPages); -+ EXPECT_NE(spans[i], NULL); -+ } -+ for (int i = 0; i < kNumberMaxPagesSpans; ++i) { -+ ph->Delete(spans[i]); -+ } -+ for (int i = 0; i < kNumberMaxPagesSpans * 2; ++i) { -+ spans[i] = ph->New(kMaxPages >> 1); -+ EXPECT_NE(spans[i], NULL); -+ } -+ for (int i = 0; i < kNumberMaxPagesSpans * 2; ++i) { -+ ph->Delete(spans[i]); -+ } - } - - static void TestPageHeap_Limit() { -- tcmalloc::PageHeap* ph = new tcmalloc::PageHeap(); -+ AllocateAllPageTables(); -+ -+ std::unique_ptr ph(new tcmalloc::PageHeap()); - - CHECK_EQ(kMaxPages, 1 << (20 - kPageShift)); - -@@ -77,25 +111,26 @@ static void TestPageHeap_Limit() { - while((s = ph->New(kMaxPages)) == NULL) { - FLAGS_tcmalloc_heap_limit_mb++; - } -- FLAGS_tcmalloc_heap_limit_mb += 9; -+ FLAGS_tcmalloc_heap_limit_mb += kNumberMaxPagesSpans - 1; - ph->Delete(s); - // We are [10, 11) mb from the limit now. - } - - // Test AllocLarge and GrowHeap first: - { -- tcmalloc::Span * spans[10]; -- for (int i=0; i<10; ++i) { -+ tcmalloc::Span * spans[kNumberMaxPagesSpans]; -+ for (int i=0; iNew(kMaxPages); - EXPECT_NE(spans[i], NULL); - } - EXPECT_EQ(ph->New(kMaxPages), NULL); - -- for (int i=0; i<10; i += 2) { -+ for (int i=0; iDelete(spans[i]); - } - -- tcmalloc::Span *defragmented = ph->New(5 * kMaxPages); -+ tcmalloc::Span *defragmented = -+ ph->New(kNumberMaxPagesSpans / 2 * kMaxPages); - - if (HaveSystemRelease) { - // EnsureLimit should release deleted normal spans -@@ -109,15 +144,15 @@ static void TestPageHeap_Limit() { - EXPECT_TRUE(ph->CheckExpensive()); - } - -- for (int i=1; i<10; i += 2) { -+ for (int i=1; iDelete(spans[i]); - } - } - - // Once again, testing small lists this time (twice smaller spans): - { -- tcmalloc::Span * spans[20]; -- for (int i=0; i<20; ++i) { -+ tcmalloc::Span * spans[kNumberMaxPagesSpans * 2]; -+ for (int i=0; iNew(kMaxPages >> 1); - EXPECT_NE(spans[i], NULL); - } -@@ -125,12 +160,12 @@ static void TestPageHeap_Limit() { - tcmalloc::Span * lastHalf = ph->New(kMaxPages >> 1); - EXPECT_EQ(ph->New(kMaxPages >> 1), NULL); - -- for (int i=0; i<20; i += 2) { -+ for (int i=0; iDelete(spans[i]); - } - -- for(Length len = kMaxPages >> 2; len < 5 * kMaxPages; len = len << 1) -- { -+ for (Length len = kMaxPages >> 2; -+ len < kNumberMaxPagesSpans / 2 * kMaxPages; len = len << 1) { - if(len <= kMaxPages >> 1 || HaveSystemRelease) { - tcmalloc::Span *s = ph->New(len); - EXPECT_NE(s, NULL); -@@ -140,7 +175,7 @@ static void TestPageHeap_Limit() { - - EXPECT_TRUE(ph->CheckExpensive()); - -- for (int i=1; i<20; i += 2) { -+ for (int i=1; iDelete(spans[i]); - } - -@@ -148,8 +183,6 @@ static void TestPageHeap_Limit() { - ph->Delete(lastHalf); - } - } -- -- delete ph; - } - - } // namespace --- -1.8.3.1 - diff --git a/Fix-uninitialized-memory-use-in-sampler_test.patch b/Fix-uninitialized-memory-use-in-sampler_test.patch deleted file mode 100644 index f3237c24de9bb362c757111d267c9210ed9ee415..0000000000000000000000000000000000000000 --- a/Fix-uninitialized-memory-use-in-sampler_test.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0b588e7490eac4ef37b59c9265f1f3f05f4bb27c Mon Sep 17 00:00:00 2001 -From: Brian Silverman -Date: Tue, 31 Jul 2018 15:53:47 -0700 -Subject: [PATCH 05/39] Fix uninitialized memory use in sampler_test - -Sampler's documentation states the following: - C++03 requires that types stored in TLS be POD. As a result, you must - initialize these members to {0, 0, false} before using this class! - -However, the test code wasn't doing that. MemorySanitizer and -UndefinedBehaviorSanitizer both failed because of it. ---- - src/tests/sampler_test.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/tests/sampler_test.cc b/src/tests/sampler_test.cc -index e0d24d4..9a55b70 100755 ---- a/src/tests/sampler_test.cc -+++ b/src/tests/sampler_test.cc -@@ -361,7 +361,7 @@ double StandardDeviationsErrorInSample( - } - - TEST(Sampler, LargeAndSmallAllocs_CombinedTest) { -- tcmalloc::Sampler sampler; -+ tcmalloc::Sampler sampler{0, 0, false}; - sampler.Init(1); - int counter_big = 0; - int counter_small = 0; --- -1.8.3.1 - diff --git a/Format-and-fix-out-of-bound-access-in-CpuProfilerSwi.patch b/Format-and-fix-out-of-bound-access-in-CpuProfilerSwi.patch deleted file mode 100644 index d2f8c4366cabf3d1acaa2e708e13611d3c788af1..0000000000000000000000000000000000000000 --- a/Format-and-fix-out-of-bound-access-in-CpuProfilerSwi.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 8dd304035848e780372a5a4bb1afac2b2d20bc43 Mon Sep 17 00:00:00 2001 -From: Aliaksey Kandratsenka -Date: Sun, 5 Aug 2018 19:52:11 -0700 -Subject: [PATCH 18/39] Format and fix out of bound access in CpuProfilerSwitch - -GCC was giving warning on snprintf and it hinted at base_profile_name -and full_profile_name not being long enough. - -Fix is to ensure base_profile_name is long enough for PATH_MAX and -that full_profile_name is enough longer to fit extra chars. ---- - src/profiler.cc | 49 +++++++++++++++++++++++-------------------------- - 1 file changed, 23 insertions(+), 26 deletions(-) - -diff --git a/src/profiler.cc b/src/profiler.cc -index f4f5990..3bd0ed9 100644 ---- a/src/profiler.cc -+++ b/src/profiler.cc -@@ -144,34 +144,31 @@ class CpuProfiler { - // number is defined in the environment variable CPUPROFILESIGNAL. - static void CpuProfilerSwitch(int signal_number) - { -- bool static started = false; -- static unsigned profile_count = 0; -- static char base_profile_name[1024] = "\0"; -- -- if (base_profile_name[0] == '\0') { -- if (!GetUniquePathFromEnv("CPUPROFILE", base_profile_name)) { -- RAW_LOG(FATAL,"Cpu profiler switch is registered but no CPUPROFILE is defined"); -- return; -- } -- } -- if (!started) -- { -- char full_profile_name[1024]; -- -- snprintf(full_profile_name, sizeof(full_profile_name), "%s.%u", -- base_profile_name, profile_count++); -- -- if(!ProfilerStart(full_profile_name)) -- { -- RAW_LOG(FATAL, "Can't turn on cpu profiling for '%s': %s\n", -- full_profile_name, strerror(errno)); -- } -+ static unsigned profile_count; -+ static char base_profile_name[PATH_MAX]; -+ static bool started = false; -+ -+ if (base_profile_name[0] == '\0') { -+ if (!GetUniquePathFromEnv("CPUPROFILE", base_profile_name)) { -+ RAW_LOG(FATAL,"Cpu profiler switch is registered but no CPUPROFILE is defined"); -+ return; - } -- else -- { -- ProfilerStop(); -+ } -+ -+ if (!started) { -+ char full_profile_name[PATH_MAX + 16]; -+ -+ snprintf(full_profile_name, sizeof(full_profile_name), "%s.%u", -+ base_profile_name, profile_count++); -+ -+ if(!ProfilerStart(full_profile_name)) { -+ RAW_LOG(FATAL, "Can't turn on cpu profiling for '%s': %s\n", -+ full_profile_name, strerror(errno)); - } -- started = !started; -+ } else { -+ ProfilerStop(); -+ } -+ started = !started; - } - - // Profile data structure singleton: Constructor will check to see if --- -1.8.3.1 - diff --git a/Use-initial-exec-TLS-model-for-all-thread-local-vari.patch b/Use-initial-exec-TLS-model-for-all-thread-local-vari.patch deleted file mode 100644 index 90a8dd72382636e53e5bec4c78ee53577fd4d4d1..0000000000000000000000000000000000000000 --- a/Use-initial-exec-TLS-model-for-all-thread-local-vari.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 1e36ed705548ae2a5170bb00dfee0954b8ef76de Mon Sep 17 00:00:00 2001 -From: Romain Geissler -Date: Tue, 29 Jan 2019 18:31:19 +0000 -Subject: [PATCH 38/39] Use initial exec TLS model for all thread local - variables from thread_cache.cc - -This avoids a deadlock when a library which is being dlopen'ed creates -as part of its static constructors a thread which quickly need to call -malloc. We are still in the dlopen call (so with some internal glibc -mutex taken) when the thread executes code and later needs to call -malloc which in term calls tls_get_addr_tail, which wait for the dlopen -mutex to be unlocked. If later the dlopen'ing thread also calls malloc -as part of its constructors, we are in a deadlock. - -Fix is similar to -https://github.com/gperftools/gperftools/commit/7852eeb75b9375cf52a7da01be044da6e915dd08 - -Stack of the dlopening thread: - #0 0x00007fd5406ca93c in __lll_lock_wait () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libpthread.so.0 - #1 0x00007fd5406c45a5 in pthread_mutex_lock () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libpthread.so.0 - ... proprietary code in the stack - #9 0x00007fd5074f0367 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at src/ClientImpl.cpp:15 - #10 0x00007fd5074f06d7 in _GLOBAL__sub_I_ClientImpl.cpp(void) () at src/ClientImpl.cpp:85 - #11 0x00007fd50757aa46 in __do_global_ctors_aux () - #12 0x00007fd5073e985f in _init () from ... - #13 0x00007fd53bf9dec8 in ?? () from ... - #14 0x00007fd54d637a5d in call_init.part () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #15 0x00007fd54d637bab in _dl_init () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #16 0x00007fd54d63c160 in dl_open_worker () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #17 0x00007fd54d637944 in _dl_catch_error () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #18 0x00007fd54d63b7d9 in _dl_open () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #19 0x00007fd54d61f2b9 in dlopen_doit () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libdl.so.2 - #20 0x00007fd54d637944 in _dl_catch_error () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #21 0x00007fd54d61f889 in _dlerror_run () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libdl.so.2 - #22 0x00007fd54d61f351 in dlopen@@GLIBC_2.2.5 () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libdl.so.2 - -Stack of the newly created thread calling tls_get_addr_tail: - #0 0x00007fd5406ca93c in __lll_lock_wait () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libpthread.so.0 - #1 0x00007fd5406c4622 in pthread_mutex_lock () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libpthread.so.0 - #2 0x00007fd54d63a2ed in tls_get_addr_tail () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/ld-linux-x86-64.so.2 - #3 0x00007fd53fee877d in tcmalloc::ThreadCache::CreateCacheIfNecessary () at src/thread_cache.cc:344 - #4 0x00007fd53fecb4ab in tcmalloc::ThreadCache::GetCache () at src/thread_cache.h:437 - #5 0x00007fd53fefeccb in (anonymous namespace)::do_malloc (size=56) at src/tcmalloc.cc:1354 - #6 tcmalloc::do_allocate_full (size=56) at src/tcmalloc.cc:1762 - #7 tcmalloc::allocate_full_cpp_throw_oom (size=56) at src/tcmalloc.cc:1776 - #8 0x00007fd53ff01b80 in tcmalloc::dispatch_allocate_full (size=56) at src/tcmalloc.cc:1785 - #9 malloc_fast_path (size=56) at src/tcmalloc.cc:1845 - #10 tc_new (size=56) at src/tcmalloc.cc:1980 - ... proprietary code in the stack - #26 0x00007fd5406c1ef4 in start_thread () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libpthread.so.0 - #27 0x00007fd5403ba01d in clone () from /data3/mwrep/rgeissler/core.tls/opt/1A/toolchain/x86_64-2.6.32-v2/lib64/libc.so.6 ---- - src/thread_cache.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/thread_cache.cc b/src/thread_cache.cc -index 6d2f832..97f3ffe 100644 ---- a/src/thread_cache.cc -+++ b/src/thread_cache.cc -@@ -334,7 +334,7 @@ ThreadCache* ThreadCache::CreateCacheIfNecessary() { - - bool seach_condition = true; - #ifdef HAVE_TLS -- static __thread ThreadCache** current_heap_ptr; -+ static __thread ThreadCache** current_heap_ptr ATTR_INITIAL_EXEC; - if (tsd_inited_) { - // In most common case we're avoiding expensive linear search - // through all heaps (see below). Working TLS enables faster --- -1.8.3.1 - diff --git a/Use-standard-conforming-alignof-in-debugallocation.c.patch b/Use-standard-conforming-alignof-in-debugallocation.c.patch deleted file mode 100644 index 2bd431ab7ff8fa3872a9937cc6f0b56d24c2f639..0000000000000000000000000000000000000000 --- a/Use-standard-conforming-alignof-in-debugallocation.c.patch +++ /dev/null @@ -1,29 +0,0 @@ -From c41688bf20186723367b560ceb539b2330951ddb Mon Sep 17 00:00:00 2001 -From: Aliaksey Kandratsenka -Date: Sun, 5 Aug 2018 20:39:07 -0700 -Subject: [PATCH 20/39] Use standard-conforming alignof in debugallocation.cc - -Clang was giving warning that alignof() is extension. So -we're now doing alignof of decltype. ---- - src/debugallocation.cc | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/debugallocation.cc b/src/debugallocation.cc -index 7c438f2..39dea5a 100644 ---- a/src/debugallocation.cc -+++ b/src/debugallocation.cc -@@ -1152,8 +1152,8 @@ static union { - - REGISTER_MODULE_INITIALIZER(debugallocation, { - #if (__cplusplus >= 201103L) -- COMPILE_ASSERT(alignof(debug_malloc_implementation_space) >= alignof(DebugMallocImplementation), -- debug_malloc_implementation_space_is_not_properly_aligned); -+ static_assert(alignof(decltype(debug_malloc_implementation_space)) >= alignof(DebugMallocImplementation), -+ "DebugMallocImplementation is expected to need just word alignment"); - #endif - // Either we or valgrind will control memory management. We - // register our extension if we're the winner. Otherwise let --- -1.8.3.1 - diff --git a/benchmark-use-angle-brackets-to-include-ucontext.h.patch b/benchmark-use-angle-brackets-to-include-ucontext.h.patch deleted file mode 100644 index 27ac30285081a013a5ee1a267749d378b340f20e..0000000000000000000000000000000000000000 --- a/benchmark-use-angle-brackets-to-include-ucontext.h.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 3af509d4f91aa1fae3f8caeb17b158f20e9b5e59 Mon Sep 17 00:00:00 2001 -From: Gabriel Marin -Date: Tue, 17 Jul 2018 18:28:01 -0700 -Subject: [PATCH 13/39] benchmark: use angle brackets to include ucontext.h - -Using quotes for a system header file fails a presubmit check in Chromium. ---- - benchmark/unwind_bench.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/benchmark/unwind_bench.cc b/benchmark/unwind_bench.cc -index f919fc0..9c4e2f8 100644 ---- a/benchmark/unwind_bench.cc -+++ b/benchmark/unwind_bench.cc -@@ -7,7 +7,7 @@ - #include - #include - #include --#include "sys/ucontext.h" -+#include - #if HAVE_LIBUNWIND_H - #include - #endif --- -1.8.3.1 - diff --git a/don-t-try-to-mark-rsp-as-clobbered-in-linux-syscall-.patch b/don-t-try-to-mark-rsp-as-clobbered-in-linux-syscall-.patch deleted file mode 100644 index 170567f33e2b899328d54780d60cd6147084e668..0000000000000000000000000000000000000000 --- a/don-t-try-to-mark-rsp-as-clobbered-in-linux-syscall-.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 9e5b1628737c67b4587f937164572774592978c4 Mon Sep 17 00:00:00 2001 -From: Aliaksey Kandratsenka -Date: Sun, 10 Feb 2019 12:46:18 -0800 -Subject: [PATCH 39/39] don't try to mark rsp as clobbered in linux syscall - support - -rsp is not actually clobbered by that code and later gccs actually (correctly) bark -at it. - -Fixed issue #1076. ---- - src/base/linux_syscall_support.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/base/linux_syscall_support.h b/src/base/linux_syscall_support.h -index 13aa415..199061a 100644 ---- a/src/base/linux_syscall_support.h -+++ b/src/base/linux_syscall_support.h -@@ -1485,7 +1485,7 @@ struct kernel_stat { - "d"(LSS_SYSCALL_ARG(parent_tidptr)), - "r"(LSS_SYSCALL_ARG(newtls)), - "r"(LSS_SYSCALL_ARG(child_tidptr)) -- : "rsp", "memory", "r8", "r10", "r11", "rcx"); -+ : "memory", "r8", "r10", "r11", "rcx"); - } - LSS_RETURN(int, __res); - } --- -1.8.3.1 - diff --git a/gperftools-2.7.90.tar.gz b/gperftools-2.7.90.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..bda59742a2b1a66f5d7e5d82ce0839534620cbc1 Binary files /dev/null and b/gperftools-2.7.90.tar.gz differ diff --git a/gperftools-2.7.tar.gz b/gperftools-2.7.tar.gz deleted file mode 100644 index e0a82a2c5eea24758a1671cdef59bbf411623727..0000000000000000000000000000000000000000 Binary files a/gperftools-2.7.tar.gz and /dev/null differ diff --git a/gperftools.spec b/gperftools.spec index e497ccfedb81de693e0da03ff5d5e660fc90d070..fd222932ff190be55cd7ba740f08c06a51ef2798 100644 --- a/gperftools.spec +++ b/gperftools.spec @@ -1,25 +1,11 @@ Name: gperftools -Version: 2.7 -Release: 7 +Version: 2.7.90 +Release: 1 Summary: high-performance malloc and performance analysis tools License: BSD URL: https://github.com/gperftools/gperftools Source0: https://github.com/gperftools/gperftools/releases/download/%{name}-%{version}/%{name}-%{version}.tar.gz -Patch1: Disable-large-allocation-report-by-default.patch -Patch2: Fix-uninitialized-memory-use-in-sampler_test.patch -Patch3: benchmark-use-angle-brackets-to-include-ucontext.h.patch -Patch4: Format-and-fix-out-of-bound-access-in-CpuProfilerSwi.patch -Patch5: Fix-incompatible-aliasing-warnings.patch -Patch6: Use-standard-conforming-alignof-in-debugallocation.c.patch -Patch7: Fix-page_heap_test-flakiness.patch -Patch8: Avoid-static-initialization-of-pprof-path-for-symbol.patch -Patch9: Fix-mmap-region-iteration-while-no-regions-are-recor.patch -Patch10: Drop-not-very-portable-and-not-very-useful-unwind-be.patch -Patch11: undef-mmap64-function.patch -Patch12: Use-initial-exec-TLS-model-for-all-thread-local-vari.patch -Patch13: don-t-try-to-mark-rsp-as-clobbered-in-linux-syscall-.patch - Patch9000: issue-1122-fix-bus-error-on-aarch64.patch BuildRequires: autoconf automake gcc-c++ gdb @@ -112,6 +98,9 @@ make %{_mandir}/man1/*.1.gz %changelog +* Fri Apr 24 2020 liusirui - 2.7.90-1 +- update to 2.7.90 + * Thu Mar 19 2020 yuxiangyang - 2.7-7 - fix build src.rpm error diff --git a/undef-mmap64-function.patch b/undef-mmap64-function.patch deleted file mode 100644 index 729665238bf485f7906e69fc3d9fdf50dac62ae2..0000000000000000000000000000000000000000 --- a/undef-mmap64-function.patch +++ /dev/null @@ -1,44 +0,0 @@ -From e9ab4c53041ac62feefbbb076d326e9a77dd1567 Mon Sep 17 00:00:00 2001 -From: Fabrice Fontaine -Date: Sun, 7 Oct 2018 18:12:03 +0200 -Subject: [PATCH 34/39] undef mmap64 function -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -mmap64 can already been defined and as a result the following error is -raised: - -In file included from src/malloc_hook.cc:686:0: -src/malloc_hook_mmap_linux.h: In function ‘void* mmap(void*, size_t, int, int, int, off_t)’: -src/malloc_hook_mmap_linux.h:173:18: error: redefinition of ‘void* mmap(void*, size_t, int, int, int, off_t)’ - extern "C" void* mmap(void *start, size_t length, int prot, int flags, - ^~~~ -In file included from src/malloc_hook.cc:41:0: -src/malloc_hook_mmap_linux.h:159:18: note: ‘void* mmap(void*, size_t, int, int, int, off_t)’ previously defined here - extern "C" void* mmap64(void *start, size_t length, int prot, int flags, - ^ -Makefile:4874: recipe for target 'src/libtcmalloc_minimal_internal_la-malloc_hook.lo' failed - -Signed-off-by: Fabrice Fontaine ---- - src/malloc_hook_mmap_linux.h | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/malloc_hook_mmap_linux.h b/src/malloc_hook_mmap_linux.h -index 0eec895..34de715 100644 ---- a/src/malloc_hook_mmap_linux.h -+++ b/src/malloc_hook_mmap_linux.h -@@ -137,7 +137,8 @@ static inline void* do_mmap64(void *start, size_t length, - // malloc_hook section, - // so that MallocHook::GetCallerStackTrace can function accurately: - --// Make sure mmap doesn't get #define'd away by -+// Make sure mmap64 and mmap doesn't get #define'd away by -+# undef mmap64 - # undef mmap - - extern "C" { --- -1.8.3.1 -