1f666ad41SAnshuman Khandual /*
2f666ad41SAnshuman Khandual  * Ptrace interface test helper functions
3f666ad41SAnshuman Khandual  *
4f666ad41SAnshuman Khandual  * Copyright (C) 2015 Anshuman Khandual, IBM Corporation.
5f666ad41SAnshuman Khandual  *
6f666ad41SAnshuman Khandual  * This program is free software; you can redistribute it and/or
7f666ad41SAnshuman Khandual  * modify it under the terms of the GNU General Public License
8f666ad41SAnshuman Khandual  * as published by the Free Software Foundation; either version
9f666ad41SAnshuman Khandual  * 2 of the License, or (at your option) any later version.
10f666ad41SAnshuman Khandual  */
11f666ad41SAnshuman Khandual #include <inttypes.h>
12f666ad41SAnshuman Khandual #include <unistd.h>
13f666ad41SAnshuman Khandual #include <stdlib.h>
14f666ad41SAnshuman Khandual #include <string.h>
15f666ad41SAnshuman Khandual #include <malloc.h>
16f666ad41SAnshuman Khandual #include <errno.h>
17f666ad41SAnshuman Khandual #include <time.h>
18f666ad41SAnshuman Khandual #include <sys/ptrace.h>
19f666ad41SAnshuman Khandual #include <sys/ioctl.h>
20f666ad41SAnshuman Khandual #include <sys/uio.h>
21f666ad41SAnshuman Khandual #include <sys/types.h>
22f666ad41SAnshuman Khandual #include <sys/wait.h>
23f666ad41SAnshuman Khandual #include <sys/signal.h>
24f666ad41SAnshuman Khandual #include <sys/ipc.h>
25f666ad41SAnshuman Khandual #include <sys/shm.h>
26f666ad41SAnshuman Khandual #include <sys/user.h>
27f666ad41SAnshuman Khandual #include <linux/elf.h>
28f666ad41SAnshuman Khandual #include <linux/types.h>
29f666ad41SAnshuman Khandual #include <linux/auxvec.h>
30f666ad41SAnshuman Khandual #include "reg.h"
31f666ad41SAnshuman Khandual #include "utils.h"
32f666ad41SAnshuman Khandual 
33f666ad41SAnshuman Khandual #define TEST_PASS 0
34f666ad41SAnshuman Khandual #define TEST_FAIL 1
35f666ad41SAnshuman Khandual 
36f666ad41SAnshuman Khandual struct fpr_regs {
37f666ad41SAnshuman Khandual 	unsigned long fpr[32];
38f666ad41SAnshuman Khandual 	unsigned long fpscr;
39f666ad41SAnshuman Khandual };
40f666ad41SAnshuman Khandual 
41f666ad41SAnshuman Khandual 
42f666ad41SAnshuman Khandual #ifndef NT_PPC_TAR
43f666ad41SAnshuman Khandual #define NT_PPC_TAR	0x103
44f666ad41SAnshuman Khandual #define NT_PPC_PPR	0x104
45f666ad41SAnshuman Khandual #define NT_PPC_DSCR	0x105
46f666ad41SAnshuman Khandual #define NT_PPC_EBB	0x106
47f666ad41SAnshuman Khandual #define NT_PPC_PMU	0x107
48f666ad41SAnshuman Khandual #define NT_PPC_TM_CGPR	0x108
49f666ad41SAnshuman Khandual #define NT_PPC_TM_CFPR	0x109
50f666ad41SAnshuman Khandual #define NT_PPC_TM_CVMX	0x10a
51f666ad41SAnshuman Khandual #define NT_PPC_TM_CVSX	0x10b
52f666ad41SAnshuman Khandual #define NT_PPC_TM_SPR	0x10c
53f666ad41SAnshuman Khandual #define NT_PPC_TM_CTAR	0x10d
54f666ad41SAnshuman Khandual #define NT_PPC_TM_CPPR	0x10e
55f666ad41SAnshuman Khandual #define NT_PPC_TM_CDSCR	0x10f
56f666ad41SAnshuman Khandual #endif
57f666ad41SAnshuman Khandual 
58f666ad41SAnshuman Khandual /* Basic ptrace operations */
59f666ad41SAnshuman Khandual int start_trace(pid_t child)
60f666ad41SAnshuman Khandual {
61f666ad41SAnshuman Khandual 	int ret;
62f666ad41SAnshuman Khandual 
63f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_ATTACH, child, NULL, NULL);
64f666ad41SAnshuman Khandual 	if (ret) {
65f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_ATTACH) failed");
66f666ad41SAnshuman Khandual 		return TEST_FAIL;
67f666ad41SAnshuman Khandual 	}
68f666ad41SAnshuman Khandual 	ret = waitpid(child, NULL, 0);
69f666ad41SAnshuman Khandual 	if (ret != child) {
70f666ad41SAnshuman Khandual 		perror("waitpid() failed");
71f666ad41SAnshuman Khandual 		return TEST_FAIL;
72f666ad41SAnshuman Khandual 	}
73f666ad41SAnshuman Khandual 	return TEST_PASS;
74f666ad41SAnshuman Khandual }
75f666ad41SAnshuman Khandual 
76f666ad41SAnshuman Khandual int stop_trace(pid_t child)
77f666ad41SAnshuman Khandual {
78f666ad41SAnshuman Khandual 	int ret;
79f666ad41SAnshuman Khandual 
80f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_DETACH, child, NULL, NULL);
81f666ad41SAnshuman Khandual 	if (ret) {
82f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_DETACH) failed");
83f666ad41SAnshuman Khandual 		return TEST_FAIL;
84f666ad41SAnshuman Khandual 	}
85f666ad41SAnshuman Khandual 	return TEST_PASS;
86f666ad41SAnshuman Khandual }
87f666ad41SAnshuman Khandual 
88f666ad41SAnshuman Khandual int cont_trace(pid_t child)
89f666ad41SAnshuman Khandual {
90f666ad41SAnshuman Khandual 	int ret;
91f666ad41SAnshuman Khandual 
92f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_CONT, child, NULL, NULL);
93f666ad41SAnshuman Khandual 	if (ret) {
94f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_CONT) failed");
95f666ad41SAnshuman Khandual 		return TEST_FAIL;
96f666ad41SAnshuman Khandual 	}
97f666ad41SAnshuman Khandual 	return TEST_PASS;
98f666ad41SAnshuman Khandual }
99f666ad41SAnshuman Khandual 
100f666ad41SAnshuman Khandual /* FPR */
101f666ad41SAnshuman Khandual int show_fpr(pid_t child, unsigned long *fpr)
102f666ad41SAnshuman Khandual {
103f666ad41SAnshuman Khandual 	struct fpr_regs *regs;
104f666ad41SAnshuman Khandual 	int ret, i;
105f666ad41SAnshuman Khandual 
106f666ad41SAnshuman Khandual 	regs = (struct fpr_regs *) malloc(sizeof(struct fpr_regs));
107f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETFPREGS, child, NULL, regs);
108f666ad41SAnshuman Khandual 	if (ret) {
109f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
110f666ad41SAnshuman Khandual 		return TEST_FAIL;
111f666ad41SAnshuman Khandual 	}
112f666ad41SAnshuman Khandual 
113f666ad41SAnshuman Khandual 	if (fpr) {
114f666ad41SAnshuman Khandual 		for (i = 0; i < 32; i++)
115f666ad41SAnshuman Khandual 			fpr[i] = regs->fpr[i];
116f666ad41SAnshuman Khandual 	}
117f666ad41SAnshuman Khandual 	return TEST_PASS;
118f666ad41SAnshuman Khandual }
119f666ad41SAnshuman Khandual 
120f666ad41SAnshuman Khandual int write_fpr(pid_t child, unsigned long val)
121f666ad41SAnshuman Khandual {
122f666ad41SAnshuman Khandual 	struct fpr_regs *regs;
123f666ad41SAnshuman Khandual 	int ret, i;
124f666ad41SAnshuman Khandual 
125f666ad41SAnshuman Khandual 	regs = (struct fpr_regs *) malloc(sizeof(struct fpr_regs));
126f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETFPREGS, child, NULL, regs);
127f666ad41SAnshuman Khandual 	if (ret) {
128f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
129f666ad41SAnshuman Khandual 		return TEST_FAIL;
130f666ad41SAnshuman Khandual 	}
131f666ad41SAnshuman Khandual 
132f666ad41SAnshuman Khandual 	for (i = 0; i < 32; i++)
133f666ad41SAnshuman Khandual 		regs->fpr[i] = val;
134f666ad41SAnshuman Khandual 
135f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_SETFPREGS, child, NULL, regs);
136f666ad41SAnshuman Khandual 	if (ret) {
137f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
138f666ad41SAnshuman Khandual 		return TEST_FAIL;
139f666ad41SAnshuman Khandual 	}
140f666ad41SAnshuman Khandual 	return TEST_PASS;
141f666ad41SAnshuman Khandual }
142f666ad41SAnshuman Khandual 
143f666ad41SAnshuman Khandual int show_ckpt_fpr(pid_t child, unsigned long *fpr)
144f666ad41SAnshuman Khandual {
145f666ad41SAnshuman Khandual 	struct fpr_regs *regs;
146f666ad41SAnshuman Khandual 	struct iovec iov;
147f666ad41SAnshuman Khandual 	int ret, i;
148f666ad41SAnshuman Khandual 
149f666ad41SAnshuman Khandual 	regs = (struct fpr_regs *) malloc(sizeof(struct fpr_regs));
150f666ad41SAnshuman Khandual 	iov.iov_base = regs;
151f666ad41SAnshuman Khandual 	iov.iov_len = sizeof(struct fpr_regs);
152f666ad41SAnshuman Khandual 
153f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETREGSET, child, NT_PPC_TM_CFPR, &iov);
154f666ad41SAnshuman Khandual 	if (ret) {
155f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
156f666ad41SAnshuman Khandual 		return TEST_FAIL;
157f666ad41SAnshuman Khandual 	}
158f666ad41SAnshuman Khandual 
159f666ad41SAnshuman Khandual 	if (fpr) {
160f666ad41SAnshuman Khandual 		for (i = 0; i < 32; i++)
161f666ad41SAnshuman Khandual 			fpr[i] = regs->fpr[i];
162f666ad41SAnshuman Khandual 	}
163f666ad41SAnshuman Khandual 
164f666ad41SAnshuman Khandual 	return TEST_PASS;
165f666ad41SAnshuman Khandual }
166f666ad41SAnshuman Khandual 
167f666ad41SAnshuman Khandual int write_ckpt_fpr(pid_t child, unsigned long val)
168f666ad41SAnshuman Khandual {
169f666ad41SAnshuman Khandual 	struct fpr_regs *regs;
170f666ad41SAnshuman Khandual 	struct iovec iov;
171f666ad41SAnshuman Khandual 	int ret, i;
172f666ad41SAnshuman Khandual 
173f666ad41SAnshuman Khandual 	regs = (struct fpr_regs *) malloc(sizeof(struct fpr_regs));
174f666ad41SAnshuman Khandual 	iov.iov_base = regs;
175f666ad41SAnshuman Khandual 	iov.iov_len = sizeof(struct fpr_regs);
176f666ad41SAnshuman Khandual 
177f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETREGSET, child, NT_PPC_TM_CFPR, &iov);
178f666ad41SAnshuman Khandual 	if (ret) {
179f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
180f666ad41SAnshuman Khandual 		return TEST_FAIL;
181f666ad41SAnshuman Khandual 	}
182f666ad41SAnshuman Khandual 
183f666ad41SAnshuman Khandual 	for (i = 0; i < 32; i++)
184f666ad41SAnshuman Khandual 		regs->fpr[i] = val;
185f666ad41SAnshuman Khandual 
186f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_SETREGSET, child, NT_PPC_TM_CFPR, &iov);
187f666ad41SAnshuman Khandual 	if (ret) {
188f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
189f666ad41SAnshuman Khandual 		return TEST_FAIL;
190f666ad41SAnshuman Khandual 	}
191f666ad41SAnshuman Khandual 	return TEST_PASS;
192f666ad41SAnshuman Khandual }
193f666ad41SAnshuman Khandual 
194f666ad41SAnshuman Khandual /* GPR */
195f666ad41SAnshuman Khandual int show_gpr(pid_t child, unsigned long *gpr)
196f666ad41SAnshuman Khandual {
197f666ad41SAnshuman Khandual 	struct pt_regs *regs;
198f666ad41SAnshuman Khandual 	int ret, i;
199f666ad41SAnshuman Khandual 
200f666ad41SAnshuman Khandual 	regs = (struct pt_regs *) malloc(sizeof(struct pt_regs));
201f666ad41SAnshuman Khandual 	if (!regs) {
202f666ad41SAnshuman Khandual 		perror("malloc() failed");
203f666ad41SAnshuman Khandual 		return TEST_FAIL;
204f666ad41SAnshuman Khandual 	}
205f666ad41SAnshuman Khandual 
206f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETREGS, child, NULL, regs);
207f666ad41SAnshuman Khandual 	if (ret) {
208f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
209f666ad41SAnshuman Khandual 		return TEST_FAIL;
210f666ad41SAnshuman Khandual 	}
211f666ad41SAnshuman Khandual 
212f666ad41SAnshuman Khandual 	if (gpr) {
213f666ad41SAnshuman Khandual 		for (i = 14; i < 32; i++)
214f666ad41SAnshuman Khandual 			gpr[i-14] = regs->gpr[i];
215f666ad41SAnshuman Khandual 	}
216f666ad41SAnshuman Khandual 
217f666ad41SAnshuman Khandual 	return TEST_PASS;
218f666ad41SAnshuman Khandual }
219f666ad41SAnshuman Khandual 
220f666ad41SAnshuman Khandual int write_gpr(pid_t child, unsigned long val)
221f666ad41SAnshuman Khandual {
222f666ad41SAnshuman Khandual 	struct pt_regs *regs;
223f666ad41SAnshuman Khandual 	int i, ret;
224f666ad41SAnshuman Khandual 
225f666ad41SAnshuman Khandual 	regs = (struct pt_regs *) malloc(sizeof(struct pt_regs));
226f666ad41SAnshuman Khandual 	if (!regs) {
227f666ad41SAnshuman Khandual 		perror("malloc() failed");
228f666ad41SAnshuman Khandual 		return TEST_FAIL;
229f666ad41SAnshuman Khandual 	}
230f666ad41SAnshuman Khandual 
231f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETREGS, child, NULL, regs);
232f666ad41SAnshuman Khandual 	if (ret) {
233f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
234f666ad41SAnshuman Khandual 		return TEST_FAIL;
235f666ad41SAnshuman Khandual 	}
236f666ad41SAnshuman Khandual 
237f666ad41SAnshuman Khandual 	for (i = 14; i < 32; i++)
238f666ad41SAnshuman Khandual 		regs->gpr[i] = val;
239f666ad41SAnshuman Khandual 
240f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_SETREGS, child, NULL, regs);
241f666ad41SAnshuman Khandual 	if (ret) {
242f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
243f666ad41SAnshuman Khandual 		return TEST_FAIL;
244f666ad41SAnshuman Khandual 	}
245f666ad41SAnshuman Khandual 	return TEST_PASS;
246f666ad41SAnshuman Khandual }
247f666ad41SAnshuman Khandual 
248f666ad41SAnshuman Khandual int show_ckpt_gpr(pid_t child, unsigned long *gpr)
249f666ad41SAnshuman Khandual {
250f666ad41SAnshuman Khandual 	struct pt_regs *regs;
251f666ad41SAnshuman Khandual 	struct iovec iov;
252f666ad41SAnshuman Khandual 	int ret, i;
253f666ad41SAnshuman Khandual 
254f666ad41SAnshuman Khandual 	regs = (struct pt_regs *) malloc(sizeof(struct pt_regs));
255f666ad41SAnshuman Khandual 	if (!regs) {
256f666ad41SAnshuman Khandual 		perror("malloc() failed");
257f666ad41SAnshuman Khandual 		return TEST_FAIL;
258f666ad41SAnshuman Khandual 	}
259f666ad41SAnshuman Khandual 
260f666ad41SAnshuman Khandual 	iov.iov_base = (u64 *) regs;
261f666ad41SAnshuman Khandual 	iov.iov_len = sizeof(struct pt_regs);
262f666ad41SAnshuman Khandual 
263f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETREGSET, child, NT_PPC_TM_CGPR, &iov);
264f666ad41SAnshuman Khandual 	if (ret) {
265f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
266f666ad41SAnshuman Khandual 		return TEST_FAIL;
267f666ad41SAnshuman Khandual 	}
268f666ad41SAnshuman Khandual 
269f666ad41SAnshuman Khandual 	if (gpr) {
270f666ad41SAnshuman Khandual 		for (i = 14; i < 32; i++)
271f666ad41SAnshuman Khandual 			gpr[i-14] = regs->gpr[i];
272f666ad41SAnshuman Khandual 	}
273f666ad41SAnshuman Khandual 
274f666ad41SAnshuman Khandual 	return TEST_PASS;
275f666ad41SAnshuman Khandual }
276f666ad41SAnshuman Khandual 
277f666ad41SAnshuman Khandual int write_ckpt_gpr(pid_t child, unsigned long val)
278f666ad41SAnshuman Khandual {
279f666ad41SAnshuman Khandual 	struct pt_regs *regs;
280f666ad41SAnshuman Khandual 	struct iovec iov;
281f666ad41SAnshuman Khandual 	int ret, i;
282f666ad41SAnshuman Khandual 
283f666ad41SAnshuman Khandual 	regs = (struct pt_regs *) malloc(sizeof(struct pt_regs));
284f666ad41SAnshuman Khandual 	if (!regs) {
285f666ad41SAnshuman Khandual 		perror("malloc() failed\n");
286f666ad41SAnshuman Khandual 		return TEST_FAIL;
287f666ad41SAnshuman Khandual 	}
288f666ad41SAnshuman Khandual 	iov.iov_base = (u64 *) regs;
289f666ad41SAnshuman Khandual 	iov.iov_len = sizeof(struct pt_regs);
290f666ad41SAnshuman Khandual 
291f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_GETREGSET, child, NT_PPC_TM_CGPR, &iov);
292f666ad41SAnshuman Khandual 	if (ret) {
293f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
294f666ad41SAnshuman Khandual 		return TEST_FAIL;
295f666ad41SAnshuman Khandual 	}
296f666ad41SAnshuman Khandual 
297f666ad41SAnshuman Khandual 	for (i = 14; i < 32; i++)
298f666ad41SAnshuman Khandual 		regs->gpr[i] = val;
299f666ad41SAnshuman Khandual 
300f666ad41SAnshuman Khandual 	ret = ptrace(PTRACE_SETREGSET, child, NT_PPC_TM_CGPR, &iov);
301f666ad41SAnshuman Khandual 	if (ret) {
302f666ad41SAnshuman Khandual 		perror("ptrace(PTRACE_GETREGSET) failed");
303f666ad41SAnshuman Khandual 		return TEST_FAIL;
304f666ad41SAnshuman Khandual 	}
305f666ad41SAnshuman Khandual 	return TEST_PASS;
306f666ad41SAnshuman Khandual }
307f666ad41SAnshuman Khandual 
308f666ad41SAnshuman Khandual /* Analyse TEXASR after TM failure */
309f666ad41SAnshuman Khandual inline unsigned long get_tfiar(void)
310f666ad41SAnshuman Khandual {
311f666ad41SAnshuman Khandual 	unsigned long ret;
312f666ad41SAnshuman Khandual 
313f666ad41SAnshuman Khandual 	asm volatile("mfspr %0,%1" : "=r" (ret) : "i" (SPRN_TFIAR));
314f666ad41SAnshuman Khandual 	return ret;
315f666ad41SAnshuman Khandual }
316f666ad41SAnshuman Khandual 
317f666ad41SAnshuman Khandual void analyse_texasr(unsigned long texasr)
318f666ad41SAnshuman Khandual {
319f666ad41SAnshuman Khandual 	printf("TEXASR: %16lx\t", texasr);
320f666ad41SAnshuman Khandual 
321f666ad41SAnshuman Khandual 	if (texasr & TEXASR_FP)
322f666ad41SAnshuman Khandual 		printf("TEXASR_FP  ");
323f666ad41SAnshuman Khandual 
324f666ad41SAnshuman Khandual 	if (texasr & TEXASR_DA)
325f666ad41SAnshuman Khandual 		printf("TEXASR_DA  ");
326f666ad41SAnshuman Khandual 
327f666ad41SAnshuman Khandual 	if (texasr & TEXASR_NO)
328f666ad41SAnshuman Khandual 		printf("TEXASR_NO  ");
329f666ad41SAnshuman Khandual 
330f666ad41SAnshuman Khandual 	if (texasr & TEXASR_FO)
331f666ad41SAnshuman Khandual 		printf("TEXASR_FO  ");
332f666ad41SAnshuman Khandual 
333f666ad41SAnshuman Khandual 	if (texasr & TEXASR_SIC)
334f666ad41SAnshuman Khandual 		printf("TEXASR_SIC  ");
335f666ad41SAnshuman Khandual 
336f666ad41SAnshuman Khandual 	if (texasr & TEXASR_NTC)
337f666ad41SAnshuman Khandual 		printf("TEXASR_NTC  ");
338f666ad41SAnshuman Khandual 
339f666ad41SAnshuman Khandual 	if (texasr & TEXASR_TC)
340f666ad41SAnshuman Khandual 		printf("TEXASR_TC  ");
341f666ad41SAnshuman Khandual 
342f666ad41SAnshuman Khandual 	if (texasr & TEXASR_TIC)
343f666ad41SAnshuman Khandual 		printf("TEXASR_TIC  ");
344f666ad41SAnshuman Khandual 
345f666ad41SAnshuman Khandual 	if (texasr & TEXASR_IC)
346f666ad41SAnshuman Khandual 		printf("TEXASR_IC  ");
347f666ad41SAnshuman Khandual 
348f666ad41SAnshuman Khandual 	if (texasr & TEXASR_IFC)
349f666ad41SAnshuman Khandual 		printf("TEXASR_IFC  ");
350f666ad41SAnshuman Khandual 
351f666ad41SAnshuman Khandual 	if (texasr & TEXASR_ABT)
352f666ad41SAnshuman Khandual 		printf("TEXASR_ABT  ");
353f666ad41SAnshuman Khandual 
354f666ad41SAnshuman Khandual 	if (texasr & TEXASR_SPD)
355f666ad41SAnshuman Khandual 		printf("TEXASR_SPD  ");
356f666ad41SAnshuman Khandual 
357f666ad41SAnshuman Khandual 	if (texasr & TEXASR_HV)
358f666ad41SAnshuman Khandual 		printf("TEXASR_HV  ");
359f666ad41SAnshuman Khandual 
360f666ad41SAnshuman Khandual 	if (texasr & TEXASR_PR)
361f666ad41SAnshuman Khandual 		printf("TEXASR_PR  ");
362f666ad41SAnshuman Khandual 
363f666ad41SAnshuman Khandual 	if (texasr & TEXASR_FS)
364f666ad41SAnshuman Khandual 		printf("TEXASR_FS  ");
365f666ad41SAnshuman Khandual 
366f666ad41SAnshuman Khandual 	if (texasr & TEXASR_TE)
367f666ad41SAnshuman Khandual 		printf("TEXASR_TE  ");
368f666ad41SAnshuman Khandual 
369f666ad41SAnshuman Khandual 	if (texasr & TEXASR_ROT)
370f666ad41SAnshuman Khandual 		printf("TEXASR_ROT  ");
371f666ad41SAnshuman Khandual 
372f666ad41SAnshuman Khandual 	printf("TFIAR :%lx\n", get_tfiar());
373f666ad41SAnshuman Khandual }
374f666ad41SAnshuman Khandual 
375f666ad41SAnshuman Khandual void store_gpr(unsigned long *addr);
376f666ad41SAnshuman Khandual void store_fpr(float *addr);
377