X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/43866e378188c25dd1e2208016ab3cbeb086ae6c..b36670cedae0009469e8ee117453de831de64a6b:/iokit/Kernel/IOKitDebug.cpp diff --git a/iokit/Kernel/IOKitDebug.cpp b/iokit/Kernel/IOKitDebug.cpp index 54e70a468..06c6e1030 100644 --- a/iokit/Kernel/IOKitDebug.cpp +++ b/iokit/Kernel/IOKitDebug.cpp @@ -3,22 +3,19 @@ * * @APPLE_LICENSE_HEADER_START@ * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. * * @APPLE_LICENSE_HEADER_END@ */ @@ -29,6 +26,8 @@ * */ +#include + #include #include #include @@ -38,19 +37,25 @@ #include #include -extern "C" { - -SInt64 gIOKitDebug #ifdef IOKITDEBUG - = IOKITDEBUG +#define DEBUG_INIT_VALUE IOKITDEBUG +#else +#define DEBUG_INIT_VALUE 0 #endif -; + +SInt64 gIOKitDebug = DEBUG_INIT_VALUE; +SYSCTL_QUAD(_debug, OID_AUTO, iokit, CTLFLAG_RW, &gIOKitDebug, "boot_arg io"); + int debug_malloc_size; int debug_iomalloc_size; +vm_size_t debug_iomallocpageable_size; int debug_container_malloc_size; // int debug_ivars_size; // in OSObject.cpp +extern "C" { + + void IOPrintPlane( const IORegistryPlane * plane ) { IORegistryEntry * next; @@ -84,6 +89,61 @@ void IOPrintPlane( const IORegistryPlane * plane ) iter->release(); } +void dbugprintf(char *fmt, ...); +void db_dumpiojunk( const IORegistryPlane * plane ); + +void db_piokjunk(void) { + + dbugprintf("\nDT plane:\n"); + db_dumpiojunk( gIODTPlane ); + dbugprintf("\n\nService plane:\n"); + db_dumpiojunk( gIOServicePlane ); + dbugprintf("\n\n" + "ivar kalloc() 0x%08x\n" + "malloc() 0x%08x\n" + "containers kalloc() 0x%08x\n" + "IOMalloc() 0x%08x\n" + "----------------------------------------\n", + debug_ivars_size, + debug_malloc_size, + debug_container_malloc_size, + debug_iomalloc_size + ); + +} + + +void db_dumpiojunk( const IORegistryPlane * plane ) +{ + IORegistryEntry * next; + IORegistryIterator * iter; + OSOrderedSet * all; + char format[] = "%xxxs"; + IOService * service; + + iter = IORegistryIterator::iterateOver( plane ); + + all = iter->iterateAll(); + if( all) { + dbugprintf("Count %d\n", all->getCount() ); + all->release(); + } else dbugprintf("Empty\n"); + + iter->reset(); + while( (next = iter->getNextObjectRecursive())) { + sprintf( format + 1, "%ds", 2 * next->getDepth( plane )); + dbugprintf( format, ""); + dbugprintf( "%s", next->getName( plane )); + if( (next->getLocation( plane ))) + dbugprintf("@%s", next->getLocation( plane )); + dbugprintf(" getMetaClass()->getClassName()); + if( (service = OSDynamicCast(IOService, next))) + dbugprintf(", busy %ld", service->getBusyState()); + dbugprintf( ">\n"); + } + iter->release(); +} + void IOPrintMemory( void ) { @@ -150,8 +210,9 @@ bool IOKitDiagnostics::serialize(OSSerialize *s) const updateOffset( dict, debug_ivars_size, "Instance allocation" ); updateOffset( dict, debug_container_malloc_size, "Container allocation" ); updateOffset( dict, debug_iomalloc_size, "IOMalloc allocation" ); + updateOffset( dict, debug_iomallocpageable_size, "Pageable allocation" ); - dict->setObject( "Classes", OSMetaClass::getClassDictionary() ); + OSMetaClass::serializeClassDictionary(dict); ok = dict->serialize( s );