|
|
1.1 ! root 1: ## ! 2: # Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: # ! 4: # @APPLE_LICENSE_HEADER_START@ ! 5: # ! 6: # Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: # Reserved. This file contains Original Code and/or Modifications of ! 8: # Original Code as defined in and that are subject to the Apple Public ! 9: # Source License Version 1.1 (the "License"). You may not use this file ! 10: # except in compliance with the License. Please obtain a copy of the ! 11: # License at http://www.apple.com/publicsource and read it before using ! 12: # this file. ! 13: # ! 14: # The Original Code and all software distributed under the License are ! 15: # distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: # EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: # INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: # FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: # License for the specific language governing rights and limitations ! 20: # under the License. ! 21: # ! 22: # @APPLE_LICENSE_HEADER_END@ ! 23: ## ! 24: ! 25: # ! 26: # .gdbinit for kernel debugging ! 27: # ! 28: # Created and Maintained by : ! 29: # Umesh Vaishampayan ([email protected]) ! 30: # ! 31: # Contributions from: ! 32: # Conrad Minshall ([email protected]) ! 33: # Eryk Vershen, Tom Mason ! 34: # ! 35: ! 36: # Set prettyprinting of structures ! 37: set print pretty ! 38: # Set printing of unions interior to structures ! 39: set print union ! 40: ! 41: # Unlimited page size. ! 42: set height 0 ! 43: ! 44: # ! 45: # Macros to print stacktrace on PPC ! 46: # Typical usage : ! 47: # kstack <thread-addr> ! 48: # tstack ! 49: # tstack ! 50: # ... ! 51: # ! 52: # For the active_thread(), following would be slightly faster ! 53: # ststack ! 54: # tstack ! 55: # tstack ! 56: # .... ! 57: # ! 58: define kstack ! 59: set $s=(thread_t)$arg0 ! 60: if (($s->kernel_stack) == 0) ! 61: echo "no kernel stack\n" ! 62: else ! 63: if $arg0 == cpu_data->active_thread ! 64: ststack ! 65: else ! 66: set $f=((struct ppc_kernel_state *)(($s->kernel_stack)+0x3f94))->r1 ! 67: p/x $f ! 68: x/i ((struct ppc_kernel_state *)(($s->kernel_stack)+0x3f94))->lr ! 69: end ! 70: end ! 71: end ! 72: document kstack ! 73: Start a stack backtrace for the thread passed in as first argument ! 74: must be called before calling 'tstack' ! 75: (for PPC only) ! 76: end ! 77: ! 78: define ststack ! 79: set $f=(long*)*$r1 ! 80: p/x $f ! 81: x/i *($f+2)-4 ! 82: end ! 83: document ststack ! 84: Start a stack backtrace for the active_thread() ! 85: must be called before calling 'tstack' ! 86: (for PPC only) ! 87: end ! 88: ! 89: define tstack ! 90: if (*(long*)$f) != 0 ! 91: set $f=*(long*)$f ! 92: p/x $f ! 93: x/i *($f+8)-4 ! 94: else ! 95: echo end of stack\n ! 96: end ! 97: end ! 98: document tstack ! 99: Print top of the stack and pop a frame ! 100: must be called after 'kstack' or 'ststack' ! 101: (for PPC only) ! 102: end ! 103: ! 104: # ! 105: # Other stack related macros ! 106: # ! 107: ! 108: define tsaved ! 109: p/x *(struct ppc_saved_state *)($f+0x90) ! 110: end ! 111: document tsaved ! 112: Print the saved state for the current frame. ! 113: must be used after 'tstack' or 'kstack' or ststack'. ! 114: end ! 115: ! 116: # ! 117: # Macros to print addresses as various structures ! 118: # ! 119: define pcb ! 120: p *(pcb_t)$arg0 ! 121: end ! 122: document pcb ! 123: Print first argument as a pcb_t. ! 124: end ! 125: ! 126: define pth ! 127: p *(thread_t)$arg0 ! 128: end ! 129: document pth ! 130: Print first argument as a thread_t. ! 131: end ! 132: ! 133: define pswapf ! 134: p *((thread_t)$arg0)->swap_func ! 135: end ! 136: document pswapf ! 137: Print the swap_func of a thread ! 138: end ! 139: ! 140: define pta ! 141: p *(task_t)$arg0 ! 142: end ! 143: document pta ! 144: Print first argument as a task_t. ! 145: end ! 146: ! 147: define dmapent ! 148: echo " map_entry" ! 149: p $arg0 ! 150: echo " start " ! 151: p ((vm_map_entry_t)$arg0)->links.start ! 152: echo " end " ! 153: p ((vm_map_entry_t)$arg0)->links.end ! 154: if ( $arg0->is_a_map != 0) ! 155: echo " object is a map"\n ! 156: echo " share" ! 157: p $arg0->object.share_map ! 158: echo " offset" ! 159: p $arg0->offset ! 160: end ! 161: if ( $arg0->is_shared != 0) ! 162: echo " region is shared"\n ! 163: end ! 164: if ( $arg0->is_sub_map != 0) ! 165: echo " object is a sub map"\n ! 166: end ! 167: if ( $arg0->copy_on_write != 0) ! 168: echo " data is copy on write"\n ! 169: end ! 170: if ( $arg0->in_transition != 0) ! 171: echo " Entry is being changed"\n ! 172: end ! 173: if ( $arg0->needs_wakeup != 0) ! 174: echo " Waiters on in_transition"\n ! 175: end ! 176: if ( $arg0->needs_copy != 0) ! 177: echo " object needs to be copied"\n ! 178: end ! 179: echo " protection " ! 180: p ((vm_map_entry_t)$arg0)->protection ! 181: echo " max protection " ! 182: p ((vm_map_entry_t)$arg0)->max_protection ! 183: echo " inheritance " ! 184: p ((vm_map_entry_t)$arg0)->inheritance ! 185: echo " wired count " ! 186: p ((vm_map_entry_t)$arg0)->wired_count ! 187: echo " user_wired_count " ! 188: p ((vm_map_entry_t)$arg0)->user_wired_count ! 189: end ! 190: document dmapent ! 191: Pretty print the first argument as a vm_map_entry_t. ! 192: end ! 193: ! 194: define dmap ! 195: set $vmmapptr=$arg0 ! 196: set $iter=0 ! 197: if (((vm_map_t)$vmmapptr)->is_main_map != 0) ! 198: echo " this is a main map"\n ! 199: end ! 200: echo " start " ! 201: p ((vm_map_t)$vmmapptr)->hdr.links.start ! 202: echo " end " ! 203: p ((vm_map_t)$vmmapptr)->hdr.links.end ! 204: if ((vm_map_t)$vmmapptr->entries_pageable != 0) ! 205: echo " map entries are pageable"\n ! 206: else ! 207: echo " map entries are NOT pageable"\n ! 208: end ! 209: echo " size " ! 210: p ((vm_map_t)$vmmapptr)->size ! 211: echo " pmap " ! 212: p ((vm_map_t)$vmmapptr)->pmap ! 213: set $mapentptr=$vmmapptr->hdr.links.next ! 214: echo " number of map entries " ! 215: p ((vm_map_t)$vmmapptr)->hdr.nentries ! 216: while ($iter < ((vm_map_t)$arg0)->hdr.nentries) ! 217: echo \n ! 218: echo " entry " ! 219: p $iter ! 220: dmapent $mapentptr ! 221: set $mapentptr=((vm_map_entry_t)$mapentptr)->links.next ! 222: set $iter=$iter+1 ! 223: end ! 224: end ! 225: document dmap ! 226: Pretty print the first argument as a vm_map_t. ! 227: end ! 228: ! 229: # ! 230: # List all the tasks. ! 231: # Print interesting information in the following order : ! 232: # Name of the task [task->proc->p_comm] ! 233: # The task [task] ! 234: # map [task->map] ! 235: # ! 236: define tasks ! 237: set $numtasks=default_pset->task_count ! 238: set $iter=0 ! 239: set $taskptr=default_pset->tasks.next ! 240: while ($iter < $numtasks) ! 241: if ((((struct task *)($taskptr))->proc) != 0) ! 242: p (char *)(((struct task *)($taskptr))->proc->p_comm) ! 243: p $taskptr ! 244: p ((struct task *)($taskptr))->map ! 245: end ! 246: set $taskptr=((struct task *)($taskptr))->pset_tasks.next ! 247: set $iter=$iter+1 ! 248: end ! 249: end ! 250: document tasks ! 251: Print all the tasks and maps associated with each one of them. ! 252: end ! 253: ! 254: # ! 255: # List all the threads. ! 256: # Print interesting information in the following order : ! 257: # Name of the task [thread->task->proc->p_comm] ! 258: # The thread [thread] ! 259: # ! 260: define threads ! 261: set $numthreads=default_pset->thread_count ! 262: set $iter=0 ! 263: set $threadptr=default_pset->threads.next ! 264: while ($iter < $numthreads) ! 265: if ((((struct thread *)($threadptr))->task->proc) != 0) ! 266: p (char *)(((struct thread *)($threadptr))->task->proc->p_comm) ! 267: p $threadptr ! 268: end ! 269: set $threadptr=((struct thread *)($threadptr))->pset_threads.next ! 270: set $iter=$iter+1 ! 271: end ! 272: end ! 273: document threads ! 274: Print all the threads and name of the task associated with each one of them. ! 275: end ! 276: ! 277: # ! 278: # List all the threads with a nonzero value of kernel_stack. ! 279: # Print interesting information in the following order : ! 280: # Name of the task [thread->task->proc->p_comm] ! 281: # The thread [thread] ! 282: # ! 283: define kstackthreads ! 284: set $numthreads=default_pset->thread_count ! 285: set $iter=0 ! 286: set $threadptr=default_pset->threads.next ! 287: while ($iter < $numthreads) ! 288: if ((((struct thread *)($threadptr))->kernel_stack) != 0) ! 289: if ((((struct thread *)($threadptr))->task->proc) != 0) ! 290: p (char *)(((struct thread *)($threadptr))->task->proc->p_comm) ! 291: p $threadptr ! 292: end ! 293: end ! 294: set $threadptr=((struct thread *)($threadptr))->pset_threads.next ! 295: set $iter=$iter+1 ! 296: end ! 297: end ! 298: document kstackthreads ! 299: Print all the threads with nonzero kernel_stack value, ! 300: and name of the task associated with each one of them. ! 301: end ! 302: ! 303: # ! 304: # List all the threads with a nonzero value of wait_event. ! 305: # Print interesting information in the following order : ! 306: # Name of the task [thread->task->proc->p_comm] ! 307: # The thread [thread] ! 308: # The wait event [thread->wait_event] ! 309: # The wait message [thread->wait_mesg] ! 310: # ! 311: define waitthreads ! 312: set $numthreads=default_pset->thread_count ! 313: set $iter=0 ! 314: set $threadptr=default_pset->threads.next ! 315: while ($iter < $numthreads) ! 316: if ((((struct thread *)($threadptr))->wait_event) != 0) ! 317: p (char *)(((struct thread *)($threadptr))->task->proc->p_comm) ! 318: p $threadptr ! 319: p ((struct thread *)($threadptr))->wait_event ! 320: p ((struct thread *)($threadptr))->wait_mesg ! 321: end ! 322: set $threadptr=((struct thread *)($threadptr))->pset_threads.next ! 323: set $iter=$iter+1 ! 324: end ! 325: end ! 326: document waitthreads ! 327: Print all the threads with nonzero wait_event value, ! 328: and name of the task associated with each one of them. ! 329: Also print wait_event and wait_mesg. ! 330: end ! 331: ! 332: define setRegFromSaved ! 333: set $s_pc=(long)$pc ! 334: set $s_lr=(long)$lr ! 335: set $s_r1=(long)$r1 ! 336: set $s_r13=(long)$r13 ! 337: set $s_r14=(long)$r14 ! 338: set $s_r15=(long)$r15 ! 339: set $s_r16=(long)$r16 ! 340: set $s_r17=(long)$r17 ! 341: set $s_r18=(long)$r18 ! 342: set $s_r19=(long)$r19 ! 343: set $s_r20=(long)$r20 ! 344: set $s_r21=(long)$r21 ! 345: set $s_r22=(long)$r22 ! 346: set $s_r23=(long)$r23 ! 347: set $s_r24=(long)$r24 ! 348: set $s_r25=(long)$r25 ! 349: set $s_r26=(long)$r26 ! 350: set $s_r27=(long)$r27 ! 351: set $s_r28=(long)$r28 ! 352: set $s_r29=(long)$r29 ! 353: set $s_r30=(long)$r30 ! 354: set $s_r31=(long)$r31 ! 355: x/i $s_pc ! 356: end ! 357: ! 358: define printReg ! 359: printf "pc\t0x%x\n", $s_pc ! 360: printf "lr\t0x%x\n", $s_lr ! 361: printf "r1\t0x%x\n", $s_r1 ! 362: printf "r13\t0x%x\n", $s_r13 ! 363: printf "r14\t0x%x\n", $s_r14 ! 364: printf "r15\t0x%x\n", $s_r15 ! 365: printf "r16\t0x%x\n", $s_r16 ! 366: printf "r17\t0x%x\n", $s_r17 ! 367: printf "r18\t0x%x\n", $s_r18 ! 368: printf "r19\t0x%x\n", $s_r19 ! 369: printf "r20\t0x%x\n", $s_r20 ! 370: printf "r21\t0x%x\n", $s_r21 ! 371: printf "r22\t0x%x\n", $s_r22 ! 372: printf "r23\t0x%x\n", $s_r23 ! 373: printf "r24\t0x%x\n", $s_r24 ! 374: printf "r25\t0x%x\n", $s_r25 ! 375: printf "r26\t0x%x\n", $s_r26 ! 376: printf "r27\t0x%x\n", $s_r27 ! 377: printf "r28\t0x%x\n", $s_r28 ! 378: printf "r29\t0x%x\n", $s_r29 ! 379: printf "r30\t0x%x\n", $s_r30 ! 380: printf "r31\t0x%x\n", $s_r31 ! 381: end ! 382: ! 383: define popReg ! 384: if (*(long*)$s_r1) == 0 ! 385: echo end of stack\n ! 386: else ! 387: set $s_r1=*(long*)$s_r1 ! 388: set $s_lr=*(long*)($s_r1+8) ! 389: set $s_t1=$s_r1 ! 390: if $arg0 != 0 ! 391: if $arg0 <= 31 ! 392: set $s_t1=$s_t1-4 ! 393: set $s_r31=*(long*)$s_t1 ! 394: end ! 395: if $arg0 <= 30 ! 396: set $s_t1=$s_t1-4 ! 397: set $s_r30=*(long*)$s_t1 ! 398: end ! 399: if $arg0 <= 29 ! 400: set $s_t1=$s_t1-4 ! 401: set $s_r29=*(long*)$s_t1 ! 402: end ! 403: if $arg0 <= 28 ! 404: set $s_t1=$s_t1-4 ! 405: set $s_r28=*(long*)$s_t1 ! 406: end ! 407: if $arg0 <= 27 ! 408: set $s_t1=$s_t1-4 ! 409: set $s_r27=*(long*)$s_t1 ! 410: end ! 411: if $arg0 <= 26 ! 412: set $s_t1=$s_t1-4 ! 413: set $s_r26=*(long*)$s_t1 ! 414: end ! 415: if $arg0 <= 25 ! 416: set $s_t1=$s_t1-4 ! 417: set $s_r25=*(long*)$s_t1 ! 418: end ! 419: if $arg0 <= 24 ! 420: set $s_t1=$s_t1-4 ! 421: set $s_r24=*(long*)$s_t1 ! 422: end ! 423: if $arg0 <= 23 ! 424: set $s_t1=$s_t1-4 ! 425: set $s_r23=*(long*)$s_t1 ! 426: end ! 427: if $arg0 <= 22 ! 428: set $s_t1=$s_t1-4 ! 429: set $s_r22=*(long*)$s_t1 ! 430: end ! 431: if $arg0 <= 21 ! 432: set $s_t1=$s_t1-4 ! 433: set $s_r21=*(long*)$s_t1 ! 434: end ! 435: if $arg0 <= 20 ! 436: set $s_t1=$s_t1-4 ! 437: set $s_r20=*(long*)$s_t1 ! 438: end ! 439: if $arg0 <= 19 ! 440: set $s_t1=$s_t1-4 ! 441: set $s_r19=*(long*)$s_t1 ! 442: end ! 443: if $arg0 <= 18 ! 444: set $s_t1=$s_t1-4 ! 445: set $s_r18=*(long*)$s_t1 ! 446: end ! 447: if $arg0 <= 17 ! 448: set $s_t1=$s_t1-4 ! 449: set $s_r17=*(long*)$s_t1 ! 450: end ! 451: if $arg0 <= 16 ! 452: set $s_t1=$s_t1-4 ! 453: set $s_r16=*(long*)$s_t1 ! 454: end ! 455: end ! 456: set $s_pc=$s_lr-4 ! 457: x/i $s_pc ! 458: end ! 459: end ! 460: ! 461: define wherePC ! 462: x/i $s_pc ! 463: end ! 464: ! 465: define popSaved ! 466: set $s_t1=(struct ppc_saved_state *)($s_r1+0x90) ! 467: set $s_pc=(long)$s_t1->srr0 ! 468: set $s_lr=(long)$s_t1->lr ! 469: set $s_r1=(long)$s_t1->r1 ! 470: set $s_r13=(long)$s_t1->r13 ! 471: set $s_r14=(long)$s_t1->r14 ! 472: set $s_r15=(long)$s_t1->r15 ! 473: set $s_r16=(long)$s_t1->r16 ! 474: set $s_r17=(long)$s_t1->r17 ! 475: set $s_r18=(long)$s_t1->r18 ! 476: set $s_r19=(long)$s_t1->r19 ! 477: set $s_r20=(long)$s_t1->r20 ! 478: set $s_r21=(long)$s_t1->r21 ! 479: set $s_r22=(long)$s_t1->r22 ! 480: set $s_r23=(long)$s_t1->r23 ! 481: set $s_r24=(long)$s_t1->r24 ! 482: set $s_r25=(long)$s_t1->r25 ! 483: set $s_r26=(long)$s_t1->r26 ! 484: set $s_r27=(long)$s_t1->r27 ! 485: set $s_r28=(long)$s_t1->r28 ! 486: set $s_r29=(long)$s_t1->r29 ! 487: set $s_r30=(long)$s_t1->r30 ! 488: set $s_r31=(long)$s_t1->r31 ! 489: x/i $s_pc ! 490: end ! 491: ! 492: define setRegFromThread ! 493: set $s_t1=(thread_t)$arg0 ! 494: set $s_t1=(struct ppc_kernel_state *)(($s_t1->kernel_stack)+0x3f94) ! 495: set $s_pc=(long)$s_t1->lr ! 496: set $s_lr=(long)$s_t1->lr ! 497: set $s_r1=(long)$s_t1->r1 ! 498: set $s_r13=(long)$s_t1->r13[0] ! 499: set $s_r14=(long)$s_t1->r13[1] ! 500: set $s_r15=(long)$s_t1->r13[2] ! 501: set $s_r16=(long)$s_t1->r13[3] ! 502: set $s_r17=(long)$s_t1->r13[4] ! 503: set $s_r18=(long)$s_t1->r13[5] ! 504: set $s_r19=(long)$s_t1->r13[6] ! 505: set $s_r20=(long)$s_t1->r13[7] ! 506: set $s_r21=(long)$s_t1->r13[8] ! 507: set $s_r22=(long)$s_t1->r13[9] ! 508: set $s_r23=(long)$s_t1->r13[10] ! 509: set $s_r24=(long)$s_t1->r13[11] ! 510: set $s_r25=(long)$s_t1->r13[12] ! 511: set $s_r26=(long)$s_t1->r13[13] ! 512: set $s_r27=(long)$s_t1->r13[14] ! 513: set $s_r28=(long)$s_t1->r13[15] ! 514: set $s_r29=(long)$s_t1->r13[16] ! 515: set $s_r30=(long)$s_t1->r13[17] ! 516: set $s_r31=(long)$s_t1->r13[18] ! 517: x/i $s_pc ! 518: end ! 519: ! 520: define popLR ! 521: set $s_pc=$s_lr-4 ! 522: x/i $s_pc ! 523: end ! 524: ! 525: # ! 526: # Difficult to ducument macros ! 527: # ! 528: define sustack ! 529: set $u=(long*)((((int)$arg0) & 0x0FFFFFFF) + 0x60000000) ! 530: p/x $u ! 531: p/x *($u+2)-4 ! 532: end ! 533: ! 534: define ustack ! 535: if (*(long*)$u) != 0 ! 536: set $u=(long*)((((int)(*(long*)$u)) & 0x0FFFFFFF) + 0x60000000) ! 537: p/x $u ! 538: if (((int)(*($u+2)-4)) & 0xF0000000) == 0 ! 539: x/i ((((int)(*($u+2)-4)) & 0x0FFFFFFF) + 0x20000000) ! 540: else ! 541: p/x *($u+2)-4 ! 542: end ! 543: else ! 544: echo end of user stack\n ! 545: end ! 546: end ! 547: ! 548: # ! 549: # Obscure macros for printing zones ! 550: # ! 551: ! 552: define dcz ! 553: p *(zone_t)$arg0 ! 554: end ! 555: document dcz ! 556: Print first argument as a zone_t. ! 557: end ! 558: ! 559: define dzleak ! 560: if (((zone_t)$arg0)->zone_name != 0) ! 561: p (char *)(((zone_t)($arg0))->zone_name) ! 562: end ! 563: echo " num elem used " ! 564: p/x $arg0->count ! 565: echo " curr zone size " ! 566: p/x $arg0->cur_size ! 567: echo " max zone size " ! 568: p/x $arg0->max_size ! 569: if ($arg0->free_elements !=0) ! 570: echo " next free element" ! 571: p/x $arg0->free_elements ! 572: end ! 573: if ( $arg0->doing_alloc != 0) ! 574: echo " doing allocation" ! 575: p/x $arg0->doing_alloc ! 576: end ! 577: echo " allocation size" ! 578: p/x $arg0->alloc_size ! 579: if ( $arg0->pageable != 0) ! 580: echo " zone is pageable\n" ! 581: end ! 582: if ( $arg0->sleepable != 0) ! 583: echo " zone is sleepable\n" ! 584: end ! 585: if ( $arg0->exhaustible != 0) ! 586: echo " zone is exhaustible\n" ! 587: end ! 588: if ( $arg0->expandable != 0) ! 589: echo " zone is expandable\n" ! 590: end ! 591: set $iter=0 ! 592: while ($iter < $arg0->num_alloc_callers) ! 593: p/x *(struct caller_s *)$arg0->alloc_callers[$iter] ! 594: set $iter=$iter+1 ! 595: end ! 596: echo " number of alloc callers " ! 597: p/x $arg0->num_alloc_callers ! 598: set $iter=0 ! 599: while ($iter < $arg0->num_free_callers) ! 600: p/x *(struct caller_s *)$arg0->free_callers[$iter] ! 601: set $iter=$iter+1 ! 602: end ! 603: echo " number of free callers " ! 604: p/x $arg0->num_free_callers ! 605: end ! 606: ! 607: define dz ! 608: if (((zone_t)$arg0)->zone_name != 0) ! 609: p (char *)(((zone_t)($arg0))->zone_name) ! 610: end ! 611: echo " num elem used " ! 612: p/x $arg0->count ! 613: echo " curr zone size " ! 614: p/x $arg0->cur_size ! 615: echo " max zone size " ! 616: p/x $arg0->max_size ! 617: if ($arg0->free_elements !=0) ! 618: echo " next free element" ! 619: p/x $arg0->free_elements ! 620: end ! 621: if ( $arg0->doing_alloc != 0) ! 622: echo " doing allocation" ! 623: p/x $arg0->doing_alloc ! 624: end ! 625: echo " allocation size" ! 626: p/x $arg0->alloc_size ! 627: if ( $arg0->pageable != 0) ! 628: echo " zone is pageable\n" ! 629: end ! 630: if ( $arg0->sleepable != 0) ! 631: echo " zone is sleepable\n" ! 632: end ! 633: if ( $arg0->exhaustible != 0) ! 634: echo " zone is exhaustible\n" ! 635: end ! 636: if ( $arg0->expandable != 0) ! 637: echo " zone is expandable\n" ! 638: end ! 639: end ! 640: ! 641: define daz ! 642: set $numtasks=default_pset->task_count ! 643: set $iter=0 ! 644: set $zoneptr=zone_zone ! 645: while ($zoneptr != 0) ! 646: echo \n ! 647: dz $zoneptr ! 648: set $zoneptr=((zone_t)($zoneptr))->next_zone ! 649: set $iter=$iter+1 ! 650: end ! 651: echo number of zones = ! 652: p $iter ! 653: end ! 654: ! 655: define dleakaz ! 656: set $numtasks=default_pset->task_count ! 657: set $iter=0 ! 658: set $zoneptr=zone_zone ! 659: while ($zoneptr != 0) ! 660: echo \n ! 661: dzleak $zoneptr ! 662: set $zoneptr=((zone_t)($zoneptr))->next_zone ! 663: set $iter=$iter+1 ! 664: end ! 665: echo number of zones = ! 666: p $iter ! 667: end ! 668: ! 669: # ! 670: # prints info about a TAILQ: how many are in the list and total KB ! 671: # ! 672: define tqcount ! 673: echo $arg0\ $arg2\ length\ is ! 674: set $tqptr=($arg0).tqh_first ! 675: set $iter=0 ! 676: set $size=0 ! 677: while ($tqptr) ! 678: set $size=$size + ((struct $arg1 *)$tqptr)->$arg3 ! 679: set $tqptr=((struct $arg1 *)$tqptr)->$arg2.tqe_next ! 680: set $iter=$iter + 1 ! 681: end ! 682: printf " %d kbytes is 0x%x\n",$iter,$size/1024 ! 683: end ! 684: document tqcount ! 685: prints info about a TAILQ: how many are in the list and total KB ! 686: end ! 687: ! 688: # ! 689: # prints info about the buffer cache queues ! 690: # ! 691: define bufinfo ! 692: printf "nbuf is %d\n",nbuf ! 693: printf "niobuf is %d\n",niobuf ! 694: printf "bufpages is %d\n",bufpages ! 695: printf "LOCKED " ! 696: tqcount bufqueues[0] buf b_freelist b_bufsize ! 697: printf "LRU " ! 698: tqcount bufqueues[1] buf b_freelist b_bufsize ! 699: printf "AGE " ! 700: tqcount bufqueues[2] buf b_freelist b_bufsize ! 701: printf "EMPTY " ! 702: tqcount bufqueues[3] buf b_freelist b_bufsize ! 703: tqcount iobufqueue buf b_freelist b_bufsize ! 704: end ! 705: document bufinfo ! 706: prints info about the buffer cache queues ! 707: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.