about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--malloc/malloc.c260
1 files changed, 125 insertions, 135 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 92ad9f9ab3..1120d4df84 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -4986,162 +4986,154 @@ __posix_memalign (void **memptr, size_t alignment, size_t size)
 }
 weak_alias (__posix_memalign, posix_memalign)
 
-static inline void
-mi_arena (mstate ar_ptr,
-	  FILE *fp,
-	  size_t *total_nblocks,
-	  size_t *total_nfastblocks,
-	  size_t *total_avail,
-	  size_t *total_fastavail,
-	  size_t *total_system,
-	  size_t *total_max_system,
-	  size_t *total_aspace,
-	  size_t *total_aspace_mprotect)
+
+int
+malloc_info (int options, FILE *fp)
 {
-  int n = 0;
+  /* For now, at least.  */
+  if (options != 0)
+    return EINVAL;
 
-  fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
+  int n = 0;
+  size_t total_nblocks = 0;
+  size_t total_nfastblocks = 0;
+  size_t total_avail = 0;
+  size_t total_fastavail = 0;
+  size_t total_system = 0;
+  size_t total_max_system = 0;
+  size_t total_aspace = 0;
+  size_t total_aspace_mprotect = 0;
 
-  size_t nblocks = 0;
-  size_t nfastblocks = 0;
-  size_t avail = 0;
-  size_t fastavail = 0;
-  struct
+  void
+  mi_arena (mstate ar_ptr)
   {
-    size_t from;
-    size_t to;
-    size_t total;
-    size_t count;
-  } sizes[NFASTBINS + NBINS - 1];
-#define nsizes (sizeof (sizes) / sizeof (sizes[0]))
+    fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
 
-  mutex_lock (&ar_ptr->mutex);
-  for (size_t i = 0; i < NFASTBINS; ++i)
+    size_t nblocks = 0;
+    size_t nfastblocks = 0;
+    size_t avail = 0;
+    size_t fastavail = 0;
+    struct
     {
-      mchunkptr p = fastbin (ar_ptr, i);
-      if (p != NULL)
-        {
-          size_t nthissize = 0;
-          size_t thissize = chunksize (p);
+      size_t from;
+      size_t to;
+      size_t total;
+      size_t count;
+    } sizes[NFASTBINS + NBINS - 1];
+#define nsizes (sizeof (sizes) / sizeof (sizes[0]))
 
-          while (p != NULL)
-            {
-              ++nthissize;
-              p = p->fd;
-            }
+    mutex_lock (&ar_ptr->mutex);
 
-          fastavail += nthissize * thissize;
-          nfastblocks += nthissize;
-          sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
-          sizes[i].to = thissize;
-          sizes[i].count = nthissize;
-        }
-      else
-        sizes[i].from = sizes[i].to = sizes[i].count = 0;
+    for (size_t i = 0; i < NFASTBINS; ++i)
+      {
+        mchunkptr p = fastbin (ar_ptr, i);
+        if (p != NULL)
+          {
+            size_t nthissize = 0;
+            size_t thissize = chunksize (p);
 
-      sizes[i].total = sizes[i].count * sizes[i].to;
-    }
+            while (p != NULL)
+              {
+                ++nthissize;
+                p = p->fd;
+              }
 
+            fastavail += nthissize * thissize;
+            nfastblocks += nthissize;
+            sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
+            sizes[i].to = thissize;
+            sizes[i].count = nthissize;
+          }
+        else
+          sizes[i].from = sizes[i].to = sizes[i].count = 0;
 
-  mbinptr bin;
-  struct malloc_chunk *r;
+        sizes[i].total = sizes[i].count * sizes[i].to;
+      }
 
-  for (size_t i = 1; i < NBINS; ++i)
-    {
-      bin = bin_at (ar_ptr, i);
-      r = bin->fd;
-      sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
-      sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
-                                    = sizes[NFASTBINS - 1 + i].count = 0;
-
-      if (r != NULL)
-        while (r != bin)
-          {
-            ++sizes[NFASTBINS - 1 + i].count;
-            sizes[NFASTBINS - 1 + i].total += r->size;
-            sizes[NFASTBINS - 1 + i].from
-              = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
-            sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
-                                               r->size);
-
-            r = r->fd;
-          }
 
-      if (sizes[NFASTBINS - 1 + i].count == 0)
-        sizes[NFASTBINS - 1 + i].from = 0;
-      nblocks += sizes[NFASTBINS - 1 + i].count;
-      avail += sizes[NFASTBINS - 1 + i].total;
-    }
+    mbinptr bin;
+    struct malloc_chunk *r;
 
-  mutex_unlock (&ar_ptr->mutex);
+    for (size_t i = 1; i < NBINS; ++i)
+      {
+        bin = bin_at (ar_ptr, i);
+        r = bin->fd;
+        sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
+        sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
+                                        = sizes[NFASTBINS - 1 + i].count = 0;
+
+        if (r != NULL)
+          while (r != bin)
+            {
+              ++sizes[NFASTBINS - 1 + i].count;
+              sizes[NFASTBINS - 1 + i].total += r->size;
+              sizes[NFASTBINS - 1 + i].from
+                = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
+              sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
+                                                 r->size);
+
+              r = r->fd;
+            }
 
-  *total_nfastblocks += nfastblocks;
-  *total_fastavail += fastavail;
+        if (sizes[NFASTBINS - 1 + i].count == 0)
+          sizes[NFASTBINS - 1 + i].from = 0;
+        nblocks += sizes[NFASTBINS - 1 + i].count;
+        avail += sizes[NFASTBINS - 1 + i].total;
+      }
 
-  *total_nblocks += nblocks;
-  *total_avail += avail;
+    mutex_unlock (&ar_ptr->mutex);
 
-  for (size_t i = 0; i < nsizes; ++i)
-    if (sizes[i].count != 0 && i != NFASTBINS)
-      fprintf (fp, "							      \
-<size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
-               sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
+    total_nfastblocks += nfastblocks;
+    total_fastavail += fastavail;
 
-  if (sizes[NFASTBINS].count != 0)
-    fprintf (fp, "\
-<unsorted from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
-             sizes[NFASTBINS].from, sizes[NFASTBINS].to,
-             sizes[NFASTBINS].total, sizes[NFASTBINS].count);
+    total_nblocks += nblocks;
+    total_avail += avail;
 
-  *total_system += ar_ptr->system_mem;
-  *total_max_system += ar_ptr->max_system_mem;
+    for (size_t i = 0; i < nsizes; ++i)
+      if (sizes[i].count != 0 && i != NFASTBINS)
+        fprintf (fp, "							      \
+<size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+                 sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
 
-  fprintf (fp,
-           "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
-           "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
-           "<system type=\"current\" size=\"%zu\"/>\n"
-           "<system type=\"max\" size=\"%zu\"/>\n",
-           nfastblocks, fastavail, nblocks, avail,
-           ar_ptr->system_mem, ar_ptr->max_system_mem);
+    if (sizes[NFASTBINS].count != 0)
+      fprintf (fp, "\
+<unsorted from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+               sizes[NFASTBINS].from, sizes[NFASTBINS].to,
+               sizes[NFASTBINS].total, sizes[NFASTBINS].count);
 
-  if (ar_ptr != &main_arena)
-    {
-      heap_info *heap = heap_for_ptr (top (ar_ptr));
-      fprintf (fp,
-               "<aspace type=\"total\" size=\"%zu\"/>\n"
-               "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
-               heap->size, heap->mprotect_size);
-      *total_aspace += heap->size;
-      *total_aspace_mprotect += heap->mprotect_size;
-    }
-  else
-    {
-      fprintf (fp,
-               "<aspace type=\"total\" size=\"%zu\"/>\n"
-               "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
-               ar_ptr->system_mem, ar_ptr->system_mem);
-      *total_aspace += ar_ptr->system_mem;
-      *total_aspace_mprotect += ar_ptr->system_mem;
-    }
+    total_system += ar_ptr->system_mem;
+    total_max_system += ar_ptr->max_system_mem;
 
-  fputs ("</heap>\n", fp);
-}
+    fprintf (fp,
+             "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
+             "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
+             "<system type=\"current\" size=\"%zu\"/>\n"
+             "<system type=\"max\" size=\"%zu\"/>\n",
+             nfastblocks, fastavail, nblocks, avail,
+             ar_ptr->system_mem, ar_ptr->max_system_mem);
 
-int
-malloc_info (int options, FILE *fp)
-{
-  /* For now, at least.  */
-  if (options != 0)
-    return EINVAL;
+    if (ar_ptr != &main_arena)
+      {
+        heap_info *heap = heap_for_ptr (top (ar_ptr));
+        fprintf (fp,
+                 "<aspace type=\"total\" size=\"%zu\"/>\n"
+                 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+                 heap->size, heap->mprotect_size);
+        total_aspace += heap->size;
+        total_aspace_mprotect += heap->mprotect_size;
+      }
+    else
+      {
+        fprintf (fp,
+                 "<aspace type=\"total\" size=\"%zu\"/>\n"
+                 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+                 ar_ptr->system_mem, ar_ptr->system_mem);
+        total_aspace += ar_ptr->system_mem;
+        total_aspace_mprotect += ar_ptr->system_mem;
+      }
 
-  size_t total_nblocks = 0;
-  size_t total_nfastblocks = 0;
-  size_t total_avail = 0;
-  size_t total_fastavail = 0;
-  size_t total_system = 0;
-  size_t total_max_system = 0;
-  size_t total_aspace = 0;
-  size_t total_aspace_mprotect = 0;
+    fputs ("</heap>\n", fp);
+  }
 
   if (__malloc_initialized < 0)
     ptmalloc_init ();
@@ -5152,9 +5144,7 @@ malloc_info (int options, FILE *fp)
   mstate ar_ptr = &main_arena;
   do
     {
-      mi_arena (ar_ptr, fp, &total_nblocks, &total_nfastblocks, &total_avail,
-		&total_fastavail, &total_system, &total_max_system,
-		&total_aspace, &total_aspace_mprotect);
+      mi_arena (ar_ptr);
       ar_ptr = ar_ptr->next;
     }
   while (ar_ptr != &main_arena);