mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-05 19:35:52 +03:00
revert commit fdfd175d46
This commit is contained in:
276
malloc/malloc.c
276
malloc/malloc.c
@@ -4986,146 +4986,6 @@ __posix_memalign (void **memptr, size_t alignment, size_t size)
|
|||||||
}
|
}
|
||||||
weak_alias (__posix_memalign, posix_memalign)
|
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 n = 0;
|
|
||||||
|
|
||||||
fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
|
|
||||||
|
|
||||||
size_t nblocks = 0;
|
|
||||||
size_t nfastblocks = 0;
|
|
||||||
size_t avail = 0;
|
|
||||||
size_t fastavail = 0;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
size_t from;
|
|
||||||
size_t to;
|
|
||||||
size_t total;
|
|
||||||
size_t count;
|
|
||||||
} sizes[NFASTBINS + NBINS - 1];
|
|
||||||
#define nsizes (sizeof (sizes) / sizeof (sizes[0]))
|
|
||||||
|
|
||||||
mutex_lock (&ar_ptr->mutex);
|
|
||||||
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);
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
sizes[i].total = sizes[i].count * sizes[i].to;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mbinptr bin;
|
|
||||||
struct malloc_chunk *r;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock (&ar_ptr->mutex);
|
|
||||||
|
|
||||||
*total_nfastblocks += nfastblocks;
|
|
||||||
*total_fastavail += fastavail;
|
|
||||||
|
|
||||||
*total_nblocks += nblocks;
|
|
||||||
*total_avail += avail;
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
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_system += ar_ptr->system_mem;
|
|
||||||
*total_max_system += ar_ptr->max_system_mem;
|
|
||||||
|
|
||||||
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 (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;
|
|
||||||
}
|
|
||||||
|
|
||||||
fputs ("</heap>\n", fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
malloc_info (int options, FILE *fp)
|
malloc_info (int options, FILE *fp)
|
||||||
@@ -5134,6 +4994,7 @@ malloc_info (int options, FILE *fp)
|
|||||||
if (options != 0)
|
if (options != 0)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
size_t total_nblocks = 0;
|
size_t total_nblocks = 0;
|
||||||
size_t total_nfastblocks = 0;
|
size_t total_nfastblocks = 0;
|
||||||
size_t total_avail = 0;
|
size_t total_avail = 0;
|
||||||
@@ -5143,6 +5004,137 @@ malloc_info (int options, FILE *fp)
|
|||||||
size_t total_aspace = 0;
|
size_t total_aspace = 0;
|
||||||
size_t total_aspace_mprotect = 0;
|
size_t total_aspace_mprotect = 0;
|
||||||
|
|
||||||
|
void
|
||||||
|
mi_arena (mstate ar_ptr)
|
||||||
|
{
|
||||||
|
fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
|
||||||
|
|
||||||
|
size_t nblocks = 0;
|
||||||
|
size_t nfastblocks = 0;
|
||||||
|
size_t avail = 0;
|
||||||
|
size_t fastavail = 0;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
size_t from;
|
||||||
|
size_t to;
|
||||||
|
size_t total;
|
||||||
|
size_t count;
|
||||||
|
} sizes[NFASTBINS + NBINS - 1];
|
||||||
|
#define nsizes (sizeof (sizes) / sizeof (sizes[0]))
|
||||||
|
|
||||||
|
mutex_lock (&ar_ptr->mutex);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
sizes[i].total = sizes[i].count * sizes[i].to;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mbinptr bin;
|
||||||
|
struct malloc_chunk *r;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_unlock (&ar_ptr->mutex);
|
||||||
|
|
||||||
|
total_nfastblocks += nfastblocks;
|
||||||
|
total_fastavail += fastavail;
|
||||||
|
|
||||||
|
total_nblocks += nblocks;
|
||||||
|
total_avail += avail;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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_system += ar_ptr->system_mem;
|
||||||
|
total_max_system += ar_ptr->max_system_mem;
|
||||||
|
|
||||||
|
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 (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;
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs ("</heap>\n", fp);
|
||||||
|
}
|
||||||
|
|
||||||
if (__malloc_initialized < 0)
|
if (__malloc_initialized < 0)
|
||||||
ptmalloc_init ();
|
ptmalloc_init ();
|
||||||
|
|
||||||
@@ -5152,9 +5144,7 @@ malloc_info (int options, FILE *fp)
|
|||||||
mstate ar_ptr = &main_arena;
|
mstate ar_ptr = &main_arena;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
mi_arena (ar_ptr, fp, &total_nblocks, &total_nfastblocks, &total_avail,
|
mi_arena (ar_ptr);
|
||||||
&total_fastavail, &total_system, &total_max_system,
|
|
||||||
&total_aspace, &total_aspace_mprotect);
|
|
||||||
ar_ptr = ar_ptr->next;
|
ar_ptr = ar_ptr->next;
|
||||||
}
|
}
|
||||||
while (ar_ptr != &main_arena);
|
while (ar_ptr != &main_arena);
|
||||||
|
Reference in New Issue
Block a user