]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/contrib/ia64/libuwx/test/dump_context.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / contrib / ia64 / libuwx / test / dump_context.c
1 #include <stdio.h>
2 #include <inttypes.h>
3
4 #define IP 0
5 #define SP 1
6 #define BSP 2
7 #define CFM 3
8 #define RP 4
9 #define PSP 5
10 #define PFS 6
11 #define PREDS 7
12 #define PRIUNAT 8
13 #define AR_BSPSTORE 9
14 #define AR_RNAT 10
15 #define AR_UNAT 11
16 #define AR_FPSR 12
17 #define AR_LC 13
18 #define AR_PFS 14
19 #define GR4 16
20 #define GR5 17
21 #define GR6 18
22 #define GR7 19
23 #define BR1 20
24 #define BR2 21
25 #define BR3 22
26 #define BR4 23
27 #define BR5 24
28
29 void dump_context(uint64_t *context)
30 {
31     int i, j;
32     unsigned int valid;
33     uint64_t val;
34     static char *names[] = {
35         /*  0 */ "ip", "sp", "bsp", "cfm",
36         /*  4 */ "rp", "psp", "pfs", "preds",
37         /*  8 */ "priunat", "ar.bspstore", "ar.rnat", "ar.unat",
38         /* 12 */ "ar.fpsr", "ar.lc", "ar.pfs", "(pad)",
39         /* 16 */ "gr4", "gr5", "gr6", "gr7",
40         /* 20 */ "br1", "br2", "br3", "br4", "br5"
41     };
42     static int col1[] = {
43         IP,
44         SP,
45         BSP,
46         CFM,
47         RP,
48         PSP,
49         PFS,
50         AR_RNAT,
51         AR_UNAT,
52         AR_FPSR,
53         AR_LC,
54         AR_PFS,
55     };
56     static int col2[] = {
57         PREDS,
58         PRIUNAT,
59         GR4,
60         GR5,
61         GR6,
62         GR7,
63         BR1,
64         BR2,
65         BR3,
66         BR4,
67         BR5,
68     };
69
70 #define NCOL1 (sizeof(col1)/sizeof(int))
71 #define NCOL2 (sizeof(col2)/sizeof(int))
72 #define NPRINT (NCOL1 > NCOL2 ? NCOL1 : NCOL2)
73
74     valid = (unsigned int)(context[0] >> 32);
75     printf("  valid_regs (%08lx):", valid);
76     for (i = 0; i <= BR5; i++) {
77         if (valid & 1) printf(" %s", names[i]);
78         valid >>= 1;
79     }
80     printf("\n");
81     for (i = 0; i < NPRINT; i++) {
82         if (i < NCOL1) {
83             j = col1[i];
84             val = context[j+1];
85             printf("  %-8s %08x %08x", names[j],
86                         (unsigned int)(val >> 32),
87                         (unsigned int)val);
88         }
89         else
90             printf("                            ");
91         if (i < NCOL2) {
92             j = col2[i];
93             val = context[j+1];
94             printf("      %-8s %08x %08x", names[j],
95                         (unsigned int)(val >> 32),
96                         (unsigned int)val);
97         }
98         putchar('\n');
99     }
100 }