From 92784b072f34c5f3100e68f270015d124116e2b7 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Fri, 28 Jun 2019 23:34:17 +0200 Subject: [PATCH 1/2] mmt: dump mmap regions inside mmt_bsearch --- mmt/mmt_trace.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mmt/mmt_trace.c b/mmt/mmt_trace.c index 1a09ff9585..cde715e6f3 100644 --- a/mmt/mmt_trace.c +++ b/mmt/mmt_trace.c @@ -306,6 +306,12 @@ static noinline struct mmt_mmap_data *mmt_bsearch(Addr addr) struct mmt_mmap_data *region; int tmp; +#ifdef MMT_DEBUG_VERBOSE + mmt_bin_flush(); + VG_(printf)("searching entry for: %p\n", (void*)addr); + verify_state(); +#endif + if (UNLIKELY(mmt_last_region < 0)) { add_neg(0, (Addr)-1); From c86266b92ea833e1932388e71249667db4b7b66d Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Sat, 29 Jun 2019 02:01:44 +0200 Subject: [PATCH 2/2] mmt: fix mmap tracking if second last entry is deleted code assumes there is only one negative entry if there is just one positive one --- mmt/mmt_trace.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mmt/mmt_trace.c b/mmt/mmt_trace.c index cde715e6f3..f1c0263dc7 100644 --- a/mmt/mmt_trace.c +++ b/mmt/mmt_trace.c @@ -503,6 +503,23 @@ void mmt_free_region(struct mmt_mmap_data *m) (mmt_last_region - idx) * sizeof(struct mmt_mmap_data)); VG_(memset)(&mmt_mmaps[mmt_last_region--], 0, sizeof(struct mmt_mmap_data)); + /* if we only have one reagion, delete 0-x negative region */ + if (mmt_last_region == 0) { + Bool found; + do { + found = False; + for (i = 0; i < neg_regions_number; ++i) + { + struct negative_region *neg = &neg_regions[i]; + if (neg->end != (Addr)-1) { + remove_neg_region(i); + found = True; + break; + } + } + } while (found); + } + /* if we are releasing last used region, then zero cache */ if (m == last_used_region) last_used_region = &null_region;