-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdump_task_riscv32gpr_alios.gdb
176 lines (161 loc) · 6.65 KB
/
dump_task_riscv32gpr_alios.gdb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# dump the task info for rhino RTOS
# please file the elf before use this script
set height 0
define paddr
# print current info
i r
p *g_active_task[0]
bt
#*(--stk) = (uint32_t)entry; /* PC */
#*(--stk) = (uint32_t)0x31313131L; /* X31 */
#*(--stk) = (uint32_t)0x30303030L; /* X30 */
#*(--stk) = (uint32_t)0x29292929L; /* X29 */
#*(--stk) = (uint32_t)0x28282828L; /* X28 */
#*(--stk) = (uint32_t)0x27272727L; /* X27 */
#*(--stk) = (uint32_t)0x26262626L; /* X26 */
#*(--stk) = (uint32_t)0x25252525L; /* X25 */
#*(--stk) = (uint32_t)0x24242424L; /* X24 */
#*(--stk) = (uint32_t)0x23232323L; /* X23 */
#*(--stk) = (uint32_t)0x22222222L; /* X22 */
#*(--stk) = (uint32_t)0x21212121L; /* X21 */
#*(--stk) = (uint32_t)0x20202020L; /* X20 */
#*(--stk) = (uint32_t)0x19191919L; /* X19 */
#*(--stk) = (uint32_t)0x18181818L; /* X18 */
#*(--stk) = (uint32_t)0x17171717L; /* X17 */
#*(--stk) = (uint32_t)0x16161616L; /* X16 */
#*(--stk) = (uint32_t)0x15151515L; /* X15 */
#*(--stk) = (uint32_t)0x14141414L; /* X14 */
#*(--stk) = (uint32_t)0x13131313L; /* X13 */
#*(--stk) = (uint32_t)0x12121212L; /* X12 */
#*(--stk) = (uint32_t)0x11111111L; /* X11 */
#*(--stk) = (uint32_t)arg; /* X10 */
#*(--stk) = (uint32_t)0x09090909L; /* X9 */
#*(--stk) = (uint32_t)0x08080808L; /* X8 */
#*(--stk) = (uint32_t)0x07070707L; /* X7 */
#*(--stk) = (uint32_t)0x06060606L; /* X6 */
#*(--stk) = (uint32_t)0x05050505L; /* X5 */
#*(--stk) = (uint32_t)0x04040404L; /* X4 */
#*(--stk) = (uint32_t)gp; /* X3 */
#*(--stk) = (uint32_t)krhino_task_deathbed; /* X1 */
# store the register
set $gdb_x0 = $x0
set $gdb_x1 = $x1
set $gdb_x3 = $x3
set $gdb_x4 = $x4
set $gdb_x5 = $x5
set $gdb_x6 = $x6
set $gdb_x7 = $x7
set $gdb_x8 = $x8
set $gdb_x9 = $x9
set $gdb_x10 = $x10
set $gdb_x11 = $x11
set $gdb_x12 = $x12
set $gdb_x13 = $x13
set $gdb_x14 = $x14
set $gdb_x15 = $x15
set $gdb_x16 = $x16
set $gdb_x17 = $x17
set $gdb_x18 = $x18
set $gdb_x19 = $x19
set $gdb_x20 = $x20
set $gdb_x21 = $x21
set $gdb_x22 = $x22
set $gdb_x23 = $x23
set $gdb_x24 = $x24
set $gdb_x25 = $x25
set $gdb_x26 = $x26
set $gdb_x27 = $x27
set $gdb_x28 = $x28
set $gdb_x29 = $x29
set $gdb_x30 = $x30
set $gdb_x31 = $x31
set $gdb_mcause = $mcause
set $gdb_pc = $pc
# get list offset
set $gdb_offset = (int)((int)&g_active_task[0]->task_stats_item - (int)g_active_task[0])
# get tcb addr
set $gdb_tcb_addr = (ktask_t *)((int)(klist_t *)(&g_kobj_list.task_head)->next - $gdb_offset)
# get task name
set $gdb_task_name = ((ktask_t *)($gdb_tcb_addr))->task_name
set $gdb_i = 0
while (&($gdb_tcb_addr->task_stats_item) != &g_kobj_list.task_head)
# print the task info
p $gdb_i
p $gdb_task_name
p *$gdb_tcb_addr
# set register to restore the task
set $x1 = *(int *)((int)$gdb_tcb_addr->task_stack + 0)
set $x3 = *(int *)((int)$gdb_tcb_addr->task_stack + 4)
set $x4 = *(int *)((int)$gdb_tcb_addr->task_stack + 8)
set $x5 = *(int *)((int)$gdb_tcb_addr->task_stack + 12)
set $x6 = *(int *)((int)$gdb_tcb_addr->task_stack + 16)
set $x7 = *(int *)((int)$gdb_tcb_addr->task_stack + 20)
set $x8 = *(int *)((int)$gdb_tcb_addr->task_stack + 24)
set $x9 = *(int *)((int)$gdb_tcb_addr->task_stack + 28)
set $x10 = *(int *)((int)$gdb_tcb_addr->task_stack + 32)
set $x11 = *(int *)((int)$gdb_tcb_addr->task_stack + 36)
set $x12 = *(int *)((int)$gdb_tcb_addr->task_stack + 40)
set $x13 = *(int *)((int)$gdb_tcb_addr->task_stack + 44)
set $x14 = *(int *)((int)$gdb_tcb_addr->task_stack + 48)
set $x15 = *(int *)((int)$gdb_tcb_addr->task_stack + 52)
set $x16 = *(int *)((int)$gdb_tcb_addr->task_stack + 56)
set $x17 = *(int *)((int)$gdb_tcb_addr->task_stack + 60)
set $x18 = *(int *)((int)$gdb_tcb_addr->task_stack + 64)
set $x19 = *(int *)((int)$gdb_tcb_addr->task_stack + 68)
set $x20 = *(int *)((int)$gdb_tcb_addr->task_stack + 72)
set $x21 = *(int *)((int)$gdb_tcb_addr->task_stack + 76)
set $x22 = *(int *)((int)$gdb_tcb_addr->task_stack + 80)
set $x23 = *(int *)((int)$gdb_tcb_addr->task_stack + 84)
set $x24 = *(int *)((int)$gdb_tcb_addr->task_stack + 88)
set $x25 = *(int *)((int)$gdb_tcb_addr->task_stack + 92)
set $x26 = *(int *)((int)$gdb_tcb_addr->task_stack + 96)
set $x27 = *(int *)((int)$gdb_tcb_addr->task_stack + 100)
set $x28 = *(int *)((int)$gdb_tcb_addr->task_stack + 104)
set $x29 = *(int *)((int)$gdb_tcb_addr->task_stack + 108)
set $x30 = *(int *)((int)$gdb_tcb_addr->task_stack + 112)
set $x31 = *(int *)((int)$gdb_tcb_addr->task_stack + 116)
set $pc = *(int *)((int)$gdb_tcb_addr->task_stack + 120)
set $sp = (int)($gdb_tcb_addr->task_stack) + 124
# print the task stack backtrace
bt
# go to next task
set $gdb_i = $gdb_i + 1
set $gdb_tcb_addr = (ktask_t *) ((int)$gdb_tcb_addr->task_stats_item - $gdb_offset)
set $gdb_task_name = ((ktask_t *)($gdb_tcb_addr))->task_name
end
# restore the register
set $x0 = $gdb_x0
set $x1 = $gdb_x1
set $x3 = $gdb_x3
set $x4 = $gdb_x4
set $x5 = $gdb_x5
set $x6 = $gdb_x6
set $x7 = $gdb_x7
set $x8 = $gdb_x8
set $x9 = $gdb_x9
set $x10 = $gdb_x10
set $x11 = $gdb_x11
set $x12 = $gdb_x12
set $x13 = $gdb_x13
set $x14 = $gdb_x14
set $x15 = $gdb_x15
set $x16 = $gdb_x16
set $x17 = $gdb_x17
set $x18 = $gdb_x18
set $x19 = $gdb_x19
set $x20 = $gdb_x20
set $x21 = $gdb_x21
set $x22 = $gdb_x22
set $x23 = $gdb_x23
set $x24 = $gdb_x24
set $x25 = $gdb_x25
set $x26 = $gdb_x26
set $x27 = $gdb_x27
set $x28 = $gdb_x28
set $x29 = $gdb_x29
set $x30 = $gdb_x30
set $x31 = $gdb_x31
set $mcause = $gdb_mcause
set $pc = $gdb_pc
end
paddr