| [667] | 1 | define connect | 
|---|
|  | 2 | target remote localhost:2346 | 
|---|
|  | 3 | end | 
|---|
|  | 4 |  | 
|---|
|  | 5 | # useful macros for Linux | 
|---|
|  | 6 | define dmesg | 
|---|
|  | 7 | set $__log_buf = $arg0 | 
|---|
|  | 8 | set $log_start = $arg1 | 
|---|
|  | 9 | set $log_end = $arg2 | 
|---|
|  | 10 | set $x = $log_start | 
|---|
|  | 11 | echo " | 
|---|
|  | 12 | while ($x < $log_end) | 
|---|
|  | 13 | set $c = (char)(($__log_buf)[$x++]) | 
|---|
|  | 14 | printf "%c" , $c | 
|---|
|  | 15 | end | 
|---|
|  | 16 | echo "\n | 
|---|
|  | 17 | end | 
|---|
|  | 18 | document dmesg | 
|---|
|  | 19 | dmesg __log_buf log_start log_end | 
|---|
|  | 20 | Print the content of the kernel message buffer | 
|---|
|  | 21 | end | 
|---|
|  | 22 |  | 
|---|
|  | 23 | define thread_info | 
|---|
|  | 24 | set $th = (struct thread_info*)$gp | 
|---|
|  | 25 | echo "thread_info=" | 
|---|
|  | 26 | print /x *$th | 
|---|
|  | 27 | end | 
|---|
|  | 28 | define task_struct | 
|---|
|  | 29 | set $th = (struct thread_info*)$gp | 
|---|
|  | 30 | set $ts = (struct task_struct*)$th->task | 
|---|
|  | 31 | echo "task_struct=" | 
|---|
|  | 32 | print /x *$ts | 
|---|
|  | 33 | end | 
|---|
|  | 34 | define active_mm | 
|---|
|  | 35 | set $th = (struct thread_info*)$gp | 
|---|
|  | 36 | set $ts = (struct task_struct*)$th->task | 
|---|
|  | 37 | set $amm = (struct mm_struct*)$ts->active_mm | 
|---|
|  | 38 | echo "active_mm=" | 
|---|
|  | 39 | print /x *$amm | 
|---|
|  | 40 | end | 
|---|
|  | 41 | define pgd | 
|---|
|  | 42 | set $th = (struct thread_info*)$gp | 
|---|
|  | 43 | set $ts = (struct task_struct*)$th->task | 
|---|
|  | 44 | set $ms = (struct mm_struct*)$ts->active_mm | 
|---|
|  | 45 | set $pg = (pgd_t*)$ms->pgd | 
|---|
|  | 46 | echo "pgd=" | 
|---|
|  | 47 | print /x {pgd_t[2048]}$pg | 
|---|
|  | 48 | end | 
|---|
|  | 49 |  | 
|---|
|  | 50 | define task_struct_header | 
|---|
|  | 51 | printf "Address      PID State     [User_EPC] [User-SP]  Kernel-SP  device comm\n" | 
|---|
|  | 52 | end | 
|---|
|  | 53 |  | 
|---|
|  | 54 | define task_struct_show | 
|---|
|  | 55 | # task_struct addr and PID | 
|---|
|  | 56 | printf "0x%08X %5d", $arg0, $arg0->pid | 
|---|
|  | 57 | # Place a '<' marker on the current task | 
|---|
|  | 58 | #  if ($arg0 == current) | 
|---|
|  | 59 | # For PowerPC, register r2 points to the "current" task | 
|---|
|  | 60 | if ($arg0 == $r2) | 
|---|
|  | 61 | printf "<" | 
|---|
|  | 62 | else | 
|---|
|  | 63 | printf " " | 
|---|
|  | 64 | end | 
|---|
|  | 65 | # State | 
|---|
|  | 66 | if ($arg0->state == 0) | 
|---|
|  | 67 | printf "Running   " | 
|---|
|  | 68 | else | 
|---|
|  | 69 | if ($arg0->state == 1) | 
|---|
|  | 70 | printf "Sleeping  " | 
|---|
|  | 71 | else | 
|---|
|  | 72 | if ($arg0->state == 2) | 
|---|
|  | 73 | printf "Disksleep " | 
|---|
|  | 74 | else | 
|---|
|  | 75 | if ($arg0->state == 4) | 
|---|
|  | 76 | printf "Zombie    " | 
|---|
|  | 77 | else | 
|---|
|  | 78 | if ($arg0->state == 8) | 
|---|
|  | 79 | printf "sTopped   " | 
|---|
|  | 80 | else | 
|---|
|  | 81 | if ($arg0->state == 16) | 
|---|
|  | 82 | printf "Wpaging   " | 
|---|
|  | 83 | else | 
|---|
|  | 84 | printf "%2d       ", $arg0->state | 
|---|
|  | 85 | end | 
|---|
|  | 86 | end | 
|---|
|  | 87 | end | 
|---|
|  | 88 | end | 
|---|
|  | 89 | end | 
|---|
|  | 90 | end | 
|---|
|  | 91 | # User PC | 
|---|
|  | 92 | set $pt_regs = (struct pt_regs*)($arg0->stack + 0x2000 - sizeof(struct pt_regs)) | 
|---|
|  | 93 | if ($pt_regs->cp0_epc) | 
|---|
|  | 94 | printf "0x%08X ", $pt_regs->cp0_epc | 
|---|
|  | 95 | else | 
|---|
|  | 96 | printf "           " | 
|---|
|  | 97 | end | 
|---|
|  | 98 | if ($pt_regs->regs[29]) | 
|---|
|  | 99 | printf "0x%08X ", $pt_regs->regs[29] | 
|---|
|  | 100 | else | 
|---|
|  | 101 | printf "           " | 
|---|
|  | 102 | end | 
|---|
|  | 103 | # Display the kernel stack pointer | 
|---|
|  | 104 | set $th = (struct thread_info*)$arg0->stack | 
|---|
|  | 105 | printf "0x%08X ", $th->ksp | 
|---|
|  | 106 | # device | 
|---|
|  | 107 | if ($arg0->signal->tty) | 
|---|
|  | 108 | printf "%s   ", $arg0->signal->tty->name | 
|---|
|  | 109 | else | 
|---|
|  | 110 | printf "(none) " | 
|---|
|  | 111 | end | 
|---|
|  | 112 | # comm | 
|---|
|  | 113 | printf "%s\n", $arg0->comm | 
|---|
|  | 114 | end | 
|---|
|  | 115 |  | 
|---|
|  | 116 | define find_next_task | 
|---|
|  | 117 | # Given a task address, find the next task in the linked list | 
|---|
|  | 118 | set $t = (struct task_struct *)$arg0 | 
|---|
|  | 119 | set $offset=((char *)&$t->tasks - (char *)$t) | 
|---|
|  | 120 | set $t=(struct task_struct *)((char *)$t->tasks.next- (char *)$offset) | 
|---|
|  | 121 | end | 
|---|
|  | 122 |  | 
|---|
|  | 123 | define ps | 
|---|
|  | 124 | # Print column headers | 
|---|
|  | 125 | task_struct_header | 
|---|
|  | 126 | set $t=&init_task | 
|---|
|  | 127 | task_struct_show $t | 
|---|
|  | 128 | find_next_task $t | 
|---|
|  | 129 | # Walk the list | 
|---|
|  | 130 | while &init_task!=$t | 
|---|
|  | 131 | # Display useful info about each task | 
|---|
|  | 132 | task_struct_show $t | 
|---|
|  | 133 | find_next_task $t | 
|---|
|  | 134 | end | 
|---|
|  | 135 | end | 
|---|
|  | 136 |  | 
|---|