From patchwork Sat Oct 26 07:14:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: l00420122 X-Patchwork-Id: 35356 Received: (qmail 123378 invoked by alias); 26 Oct 2019 07:13:47 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 123362 invoked by uid 89); 26 Oct 2019 07:13:46 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy=HX-Languages-Length:2018 X-HELO: huawei.com From: liusirui To: CC: Subject: [PATCH v2 2/2] malloc: malloc_stats now also print heap info of main_arena Date: Sat, 26 Oct 2019 15:14:03 +0800 Message-ID: <1572074043-28091-2-git-send-email-liusirui@huawei.com> In-Reply-To: <1572074043-28091-1-git-send-email-liusirui@huawei.com> References: <1572074043-28091-1-git-send-email-liusirui@huawei.com> MIME-Version: 1.0 Before, malloc_stats only print heaps info of arenas except main_arena, now it can alos prints heap info of main_arena. --- malloc/arena.c | 28 ++++++++++++++++++++++------ malloc/malloc.c | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/malloc/arena.c b/malloc/arena.c index be5c9f9..a9361c6 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -411,16 +411,32 @@ dump_heap (heap_info *heap) { char *ptr; mchunkptr p; + mchunkptr top; + + if ((mstate)(heap + 1) != &main_arena) + { + fprintf (stderr, "Heap %p, size %10lx:\n", heap, (long) heap->size); + ptr = (heap->ar_ptr != (mstate) (heap + 1)) ? + (char *) (heap + 1) : (char *) (heap + 1) + sizeof (struct malloc_state); + top = heap->ar_ptr->top; + p = (mchunkptr) (((unsigned long) ptr + MALLOC_ALIGN_MASK) & + ~MALLOC_ALIGN_MASK); + } + else + { + if (((mstate) (heap + 1))->max_system_mem == 0) + return; + top = ((mstate) (heap + 1))->top; + ptr = (char*)top - (((mstate) (heap + 1))->max_system_mem - chunksize(top)); + p = (mchunkptr) (((unsigned long) ptr + MALLOC_ALIGN_MASK) & + ~MALLOC_ALIGN_MASK); + fprintf (stderr, "Heap %p, size %10lx:\n", p, (long)(((mstate) (heap + 1))->max_system_mem)); + } - fprintf (stderr, "Heap %p, size %10lx:\n", heap, (long) heap->size); - ptr = (heap->ar_ptr != (mstate) (heap + 1)) ? - (char *) (heap + 1) : (char *) (heap + 1) + sizeof (struct malloc_state); - p = (mchunkptr) (((unsigned long) ptr + MALLOC_ALIGN_MASK) & - ~MALLOC_ALIGN_MASK); for (;; ) { fprintf (stderr, "chunk %p size %10lx", p, (long) chunksize_nomask(p)); - if (p == top (heap->ar_ptr)) + if (p == top) { fprintf (stderr, " (top)\n"); break; diff --git a/malloc/malloc.c b/malloc/malloc.c index 351e95f..16a012e 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -4992,6 +4992,8 @@ __malloc_stats (void) } dump_heap (heap_ptr); } + else + dump_heap (((heap_info*)ar_ptr) - 1); #endif system_b += mi.arena; in_use_b += mi.uordblks;