|
18 | 18 |
|
19 | 19 | #define ARC_PATH_MAX 256
|
20 | 20 |
|
21 |
| -/* |
22 |
| - * Common routine to print scratch regs (r0-r12) or callee regs (r13-r25) |
23 |
| - * -Prints 3 regs per line and a CR. |
24 |
| - * -To continue, callee regs right after scratch, special handling of CR |
25 |
| - */ |
26 |
| -static noinline void print_reg_file(long *reg_rev, int start_num) |
| 21 | +static noinline void print_regs_scratch(struct pt_regs *regs) |
27 | 22 | {
|
28 |
| - unsigned int i; |
29 |
| - char buf[512]; |
30 |
| - int n = 0, len = sizeof(buf); |
31 |
| - |
32 |
| - for (i = start_num; i < start_num + 13; i++) { |
33 |
| - n += scnprintf(buf + n, len - n, "r%02u: 0x%08lx\t", |
34 |
| - i, (unsigned long)*reg_rev); |
35 |
| - |
36 |
| - if (((i + 1) % 3) == 0) |
37 |
| - n += scnprintf(buf + n, len - n, "\n"); |
38 |
| - |
39 |
| - /* because pt_regs has regs reversed: r12..r0, r25..r13 */ |
40 |
| - if (is_isa_arcv2() && start_num == 0) |
41 |
| - reg_rev++; |
42 |
| - else |
43 |
| - reg_rev--; |
44 |
| - } |
45 |
| - |
46 |
| - if (start_num != 0) |
47 |
| - n += scnprintf(buf + n, len - n, "\n\n"); |
| 23 | + pr_cont("BTA: 0x%08lx\n SP: 0x%08lx FP: 0x%08lx BLK: %pS\n", |
| 24 | + regs->bta, regs->sp, regs->fp, (void *)regs->blink); |
| 25 | + pr_cont("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n", |
| 26 | + regs->lp_start, regs->lp_end, regs->lp_count); |
48 | 27 |
|
49 |
| - /* To continue printing callee regs on same line as scratch regs */ |
50 |
| - if (start_num == 0) |
51 |
| - pr_info("%s", buf); |
52 |
| - else |
53 |
| - pr_cont("%s\n", buf); |
| 28 | + pr_info("r00: 0x%08lx\tr01: 0x%08lx\tr02: 0x%08lx\n" \ |
| 29 | + "r03: 0x%08lx\tr04: 0x%08lx\tr05: 0x%08lx\n" \ |
| 30 | + "r06: 0x%08lx\tr07: 0x%08lx\tr08: 0x%08lx\n" \ |
| 31 | + "r09: 0x%08lx\tr10: 0x%08lx\tr11: 0x%08lx\n" \ |
| 32 | + "r12: 0x%08lx\t", |
| 33 | + regs->r0, regs->r1, regs->r2, |
| 34 | + regs->r3, regs->r4, regs->r5, |
| 35 | + regs->r6, regs->r7, regs->r8, |
| 36 | + regs->r9, regs->r10, regs->r11, |
| 37 | + regs->r12); |
54 | 38 | }
|
55 | 39 |
|
56 |
| -static void show_callee_regs(struct callee_regs *cregs) |
| 40 | +static void print_regs_callee(struct callee_regs *regs) |
57 | 41 | {
|
58 |
| - print_reg_file(&(cregs->r13), 13); |
| 42 | + pr_cont("r13: 0x%08lx\tr14: 0x%08lx\n" \ |
| 43 | + "r15: 0x%08lx\tr16: 0x%08lx\tr17: 0x%08lx\n" \ |
| 44 | + "r18: 0x%08lx\tr19: 0x%08lx\tr20: 0x%08lx\n" \ |
| 45 | + "r21: 0x%08lx\tr22: 0x%08lx\tr23: 0x%08lx\n" \ |
| 46 | + "r24: 0x%08lx\tr25: 0x%08lx\n", |
| 47 | + regs->r13, regs->r14, |
| 48 | + regs->r15, regs->r16, regs->r17, |
| 49 | + regs->r18, regs->r19, regs->r20, |
| 50 | + regs->r21, regs->r22, regs->r23, |
| 51 | + regs->r24, regs->r25); |
59 | 52 | }
|
60 | 53 |
|
61 | 54 | static void print_task_path_n_nm(struct task_struct *tsk)
|
@@ -175,7 +168,7 @@ static void show_ecr_verbose(struct pt_regs *regs)
|
175 | 168 | void show_regs(struct pt_regs *regs)
|
176 | 169 | {
|
177 | 170 | struct task_struct *tsk = current;
|
178 |
| - struct callee_regs *cregs; |
| 171 | + struct callee_regs *cregs = (struct callee_regs *)tsk->thread.callee_reg; |
179 | 172 |
|
180 | 173 | /*
|
181 | 174 | * generic code calls us with preemption disabled, but some calls
|
@@ -204,25 +197,15 @@ void show_regs(struct pt_regs *regs)
|
204 | 197 | STS_BIT(regs, A2), STS_BIT(regs, A1),
|
205 | 198 | STS_BIT(regs, E2), STS_BIT(regs, E1));
|
206 | 199 | #else
|
207 |
| - pr_cont(" [%2s%2s%2s%2s]", |
| 200 | + pr_cont(" [%2s%2s%2s%2s] ", |
208 | 201 | STS_BIT(regs, IE),
|
209 | 202 | (regs->status32 & STATUS_U_MASK) ? "U " : "K ",
|
210 | 203 | STS_BIT(regs, DE), STS_BIT(regs, AE));
|
211 | 204 | #endif
|
212 |
| - pr_cont(" BTA: 0x%08lx\n SP: 0x%08lx FP: 0x%08lx BLK: %pS\n", |
213 |
| - regs->bta, regs->sp, regs->fp, (void *)regs->blink); |
214 |
| - pr_info("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n", |
215 |
| - regs->lp_start, regs->lp_end, regs->lp_count); |
216 |
| - |
217 |
| - /* print regs->r0 thru regs->r12 |
218 |
| - * Sequential printing was generating horrible code |
219 |
| - */ |
220 |
| - print_reg_file(&(regs->r0), 0); |
221 | 205 |
|
222 |
| - /* If Callee regs were saved, display them too */ |
223 |
| - cregs = (struct callee_regs *)current->thread.callee_reg; |
| 206 | + print_regs_scratch(regs); |
224 | 207 | if (cregs)
|
225 |
| - show_callee_regs(cregs); |
| 208 | + print_regs_callee(cregs); |
226 | 209 |
|
227 | 210 | preempt_disable();
|
228 | 211 | }
|
|
0 commit comments