| [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 | |
|---|