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