Make the heap debug functions available when USE_SLAB_ALLOCATOR_FOR_MALLOC is
enabled as well. As this heap implementation is still used for the port heap (as it handles B_NO_LOCK areas) those are still useful. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42278 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -305,9 +305,6 @@ get_caller()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_page(heap_page *page)
|
dump_page(heap_page *page)
|
||||||
{
|
{
|
||||||
@@ -379,12 +376,14 @@ dump_allocator(heap_allocator *heap, bool areas, bool bins)
|
|||||||
static int
|
static int
|
||||||
dump_heap_list(int argc, char **argv)
|
dump_heap_list(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#if !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
||||||
if (argc == 2 && strcmp(argv[1], "grow") == 0) {
|
if (argc == 2 && strcmp(argv[1], "grow") == 0) {
|
||||||
// only dump dedicated grow heap info
|
// only dump dedicated grow heap info
|
||||||
kprintf("dedicated grow heap:\n");
|
kprintf("dedicated grow heap:\n");
|
||||||
dump_allocator(sGrowHeap, true, true);
|
dump_allocator(sGrowHeap, true, true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool stats = false;
|
bool stats = false;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
@@ -401,9 +400,13 @@ dump_heap_list(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (heapAddress == 0) {
|
if (heapAddress == 0) {
|
||||||
|
#if !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
||||||
// dump default kernel heaps
|
// dump default kernel heaps
|
||||||
for (uint32 i = 0; i < sHeapCount; i++)
|
for (uint32 i = 0; i < sHeapCount; i++)
|
||||||
dump_allocator(sHeaps[i], !stats, !stats);
|
dump_allocator(sHeaps[i], !stats, !stats);
|
||||||
|
#else
|
||||||
|
print_debugger_command_usage(argv[0]);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
// dump specified heap
|
// dump specified heap
|
||||||
dump_allocator((heap_allocator*)(addr_t)heapAddress, !stats, !stats);
|
dump_allocator((heap_allocator*)(addr_t)heapAddress, !stats, !stats);
|
||||||
@@ -431,10 +434,22 @@ dump_allocations(int argc, char **argv)
|
|||||||
|
|
||||||
size_t totalSize = 0;
|
size_t totalSize = 0;
|
||||||
uint32 totalCount = 0;
|
uint32 totalCount = 0;
|
||||||
|
#if !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
||||||
for (uint32 heapIndex = 0; heapIndex < sHeapCount; heapIndex++) {
|
for (uint32 heapIndex = 0; heapIndex < sHeapCount; heapIndex++) {
|
||||||
heap_allocator *heap = sHeaps[heapIndex];
|
heap_allocator *heap = sHeaps[heapIndex];
|
||||||
if (heapAddress != 0)
|
if (heapAddress != 0)
|
||||||
heap = (heap_allocator *)(addr_t)heapAddress;
|
heap = (heap_allocator *)(addr_t)heapAddress;
|
||||||
|
#else
|
||||||
|
while (true) {
|
||||||
|
heap_allocator *heap = (heap_allocator *)(addr_t)heapAddress;
|
||||||
|
if (heap == NULL) {
|
||||||
|
print_debugger_command_usage(argv[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// go through all the pages in all the areas
|
// go through all the pages in all the areas
|
||||||
heap_area *area = heap->all_areas;
|
heap_area *area = heap->all_areas;
|
||||||
@@ -824,8 +839,6 @@ dump_allocations_per_caller(int argc, char **argv)
|
|||||||
|
|
||||||
#endif // KERNEL_HEAP_LEAK_CHECK
|
#endif // KERNEL_HEAP_LEAK_CHECK
|
||||||
|
|
||||||
#endif // !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
|
||||||
|
|
||||||
|
|
||||||
#if PARANOID_HEAP_VALIDATION
|
#if PARANOID_HEAP_VALIDATION
|
||||||
static void
|
static void
|
||||||
@@ -2054,7 +2067,7 @@ heap_init(addr_t base, size_t size)
|
|||||||
"argument, only allocations matching the team ID, thread ID, caller\n"
|
"argument, only allocations matching the team ID, thread ID, caller\n"
|
||||||
"address or allocated address given in the second argument are printed.\n"
|
"address or allocated address given in the second argument are printed.\n"
|
||||||
"If the optional argument \"stats\" is specified, only the allocation\n"
|
"If the optional argument \"stats\" is specified, only the allocation\n"
|
||||||
"counts and no individual allocations are printed\n", 0);
|
"counts and no individual allocations are printed.\n", 0);
|
||||||
add_debugger_command_etc("allocations_per_caller",
|
add_debugger_command_etc("allocations_per_caller",
|
||||||
&dump_allocations_per_caller,
|
&dump_allocations_per_caller,
|
||||||
"Dump current heap allocations summed up per caller",
|
"Dump current heap allocations summed up per caller",
|
||||||
@@ -2189,7 +2202,22 @@ heap_init_post_thread()
|
|||||||
|
|
||||||
resume_thread(sHeapGrowThread);
|
resume_thread(sHeapGrowThread);
|
||||||
|
|
||||||
#endif // !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
#else // !USE_SLAB_ALLOCATOR_FOR_MALLOC
|
||||||
|
|
||||||
|
// set up some debug commands
|
||||||
|
add_debugger_command_etc("heap", &dump_heap_list,
|
||||||
|
"Dump infos about a specific heap",
|
||||||
|
"[\"stats\"] <heap>\n"
|
||||||
|
"Dump infos about the specified kernel heap. If \"stats\" is given\n"
|
||||||
|
"as the argument, currently only the heap count is printed.\n", 0);
|
||||||
|
#if !KERNEL_HEAP_LEAK_CHECK
|
||||||
|
add_debugger_command_etc("allocations", &dump_allocations,
|
||||||
|
"Dump current heap allocations",
|
||||||
|
"[\"stats\"] <heap>\n"
|
||||||
|
"If the optional argument \"stats\" is specified, only the allocation\n"
|
||||||
|
"counts and no individual allocations are printed.\n", 0);
|
||||||
|
#endif // KERNEL_HEAP_LEAK_CHECK
|
||||||
|
#endif // USE_SLAB_ALLOCATOR_FOR_MALLOC
|
||||||
|
|
||||||
// run the deferred deleter roughly once a second
|
// run the deferred deleter roughly once a second
|
||||||
if (register_kernel_daemon(deferred_deleter, NULL, 10) != B_OK)
|
if (register_kernel_daemon(deferred_deleter, NULL, 10) != B_OK)
|
||||||
|
|||||||
Reference in New Issue
Block a user