Rev 272 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 272 | Rev 388 | ||
---|---|---|---|
Line 25... | Line 25... | ||
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | * |
27 | * |
28 | */ |
28 | */ |
29 | 29 | ||
30 | - | ||
31 | #include <panic.h> |
30 | #include <panic.h> |
32 | #include <print.h> |
31 | #include <print.h> |
33 | #include <arch/types.h> |
32 | #include <arch/types.h> |
34 | #include <arch/asm.h> |
33 | #include <arch/asm.h> |
35 | #include <symtab.h> |
34 | #include <symtab.h> |
- | 35 | #include <debug.h> |
|
- | 36 | ||
- | 37 | #define VECTORS_64_BUNDLE 20 |
|
- | 38 | #define VECTORS_16_BUNDLE 48 |
|
- | 39 | #define VECTORS_16_BUNDLE_START 0x5000 |
|
- | 40 | #define VECTOR_MAX 0x7f00 |
|
- | 41 | ||
- | 42 | #define BUNDLE_SIZE 16 |
|
36 | 43 | ||
37 | extern __u64 REG_DUMP; |
44 | extern __u64 REG_DUMP; |
38 | 45 | ||
- | 46 | char *vector_names_64_bundle[VECTORS_64_BUNDLE] = { |
|
- | 47 | "VHPT Translation vector", |
|
- | 48 | "Instruction TLB vector", |
|
- | 49 | "Data TLB vector", |
|
- | 50 | "Alternate Instruction TLB vector", |
|
- | 51 | "Alternate Data TLB vector", |
|
- | 52 | "Data Nested TLB vector", |
|
- | 53 | "Instruction Key Miss vector", |
|
- | 54 | "Data Key Miss vector", |
|
- | 55 | "Dirty-Bit vector", |
|
- | 56 | "Instruction Access-Bit vector", |
|
- | 57 | "Data Access-Bit vector" |
|
- | 58 | "Break Instruction vector", |
|
- | 59 | "External Interrupt vector" |
|
- | 60 | "Reserved", |
|
- | 61 | "Reserved", |
|
- | 62 | "Reserved", |
|
- | 63 | "Reserved", |
|
- | 64 | "Reserved", |
|
- | 65 | "Reserved", |
|
- | 66 | "Reserved" |
|
- | 67 | }; |
|
- | 68 | ||
- | 69 | char *vector_names_16_bundle[VECTORS_16_BUNDLE] = { |
|
- | 70 | "Page Not Present vector", |
|
- | 71 | "Key Permission vector", |
|
- | 72 | "Instruction Access rights vector", |
|
- | 73 | "Data Access Rights vector", |
|
- | 74 | "General Exception vector", |
|
- | 75 | "Disabled FP-Register vector", |
|
- | 76 | "NaT Consumption vector", |
|
- | 77 | "Speculation vector", |
|
- | 78 | "Reserved", |
|
- | 79 | "Debug vector", |
|
- | 80 | "Unaligned Reference vector", |
|
- | 81 | "Unsupported Data Reference vector", |
|
- | 82 | "Floating-point Fault vector", |
|
- | 83 | "Floating-point Trap vector", |
|
- | 84 | "Lower-Privilege Transfer Trap vector", |
|
- | 85 | "Taken Branch Trap vector", |
|
- | 86 | "Single STep Trap vector", |
|
- | 87 | "Reserved", |
|
- | 88 | "Reserved", |
|
- | 89 | "Reserved", |
|
- | 90 | "Reserved", |
|
- | 91 | "Reserved", |
|
- | 92 | "Reserved", |
|
- | 93 | "Reserved", |
|
- | 94 | "Reserved", |
|
- | 95 | "IA-32 Exception vector", |
|
- | 96 | "IA-32 Intercept vector", |
|
- | 97 | "IA-32 Interrupt vector", |
|
- | 98 | "Reserved", |
|
- | 99 | "Reserved", |
|
- | 100 | "Reserved" |
|
- | 101 | }; |
|
- | 102 | ||
- | 103 | static char *vector_to_string(__u16 vector); |
|
- | 104 | ||
- | 105 | char *vector_to_string(__u16 vector) |
|
- | 106 | { |
|
- | 107 | ASSERT(vector <= VECTOR_MAX); |
|
- | 108 | ||
- | 109 | if (vector >= VECTORS_16_BUNDLE_START) |
|
- | 110 | return vector_names_16_bundle[(vector-VECTORS_16_BUNDLE_START)/(16*BUNDLE_SIZE)]; |
|
- | 111 | else |
|
- | 112 | return vector_names_64_bundle[vector/(64*BUNDLE_SIZE)]; |
|
- | 113 | } |
|
- | 114 | ||
39 | 115 | ||
40 | void general_exception(void); |
116 | void general_exception(void); |
41 | void general_exception(void) |
117 | void general_exception(void) |
42 | { |
118 | { |
43 | panic("\nGeneral Exception\n"); |
119 | panic("\nGeneral Exception\n"); |
44 | } |
120 | } |
45 | 121 | ||
46 | 122 | ||
47 | 123 | ||
48 | void break_instruction(void); |
124 | void break_instruction(void); |
49 | void break_instruction(void) |
125 | void break_instruction(void) |
50 | { |
126 | { |
51 | panic("\nBreak Instruction\n"); |
127 | panic("\nBreak Instruction\n"); |
52 | } |
128 | } |
53 | 129 | ||
54 | - | ||
55 | #define cr_dump(r) {__u64 val; get_control_register(r,val); printf("\ncr"#r":%Q",val);} |
130 | #define cr_dump(r) {__u64 val; get_control_register(r,val); printf("\ncr"#r":%Q",val);} |
56 | #define ar_dump(r) {__u64 val; get_aplication_register(r,val); printf("\nar"#r":%Q",val);} |
131 | #define ar_dump(r) {__u64 val; get_aplication_register(r,val); printf("\nar"#r":%Q",val);} |
57 | 132 | ||
58 | void universal_handler(void); |
133 | void universal_handler(void); |
59 | void universal_handler(void) |
134 | void universal_handler(void) |
Line 61... | Line 136... | ||
61 | __u64 vector,psr,PC; |
136 | __u64 vector,psr,PC; |
62 | __u64 *p; |
137 | __u64 *p; |
63 | int i; |
138 | int i; |
64 | char *sym; |
139 | char *sym; |
65 | 140 | ||
66 | - | ||
67 | get_shadow_register(16,vector); |
141 | get_shadow_register(16,vector); |
68 | 142 | ||
69 | - | ||
70 | p=®_DUMP; |
143 | p=®_DUMP; |
71 | 144 | ||
72 | for(i=0;i<128;i+=2) printf("gr%d:%Q\tgr%d:%Q\n",i,p[i],i+1,p[i+1]); |
145 | for(i=0;i<128;i+=2) printf("gr%d:%Q\tgr%d:%Q\n",i,p[i],i+1,p[i+1]); |
73 | 146 | ||
74 | - | ||
75 | cr_dump(0); |
147 | cr_dump(0); |
76 | cr_dump(1); |
148 | cr_dump(1); |
77 | cr_dump(2); |
149 | cr_dump(2); |
78 | cr_dump(8); |
150 | cr_dump(8); |
79 | cr_dump(16); |
151 | cr_dump(16); |
Line 129... | Line 201... | ||
129 | 201 | ||
130 | get_psr(psr); |
202 | get_psr(psr); |
131 | 203 | ||
132 | printf("\nPSR:%Q\n",psr); |
204 | printf("\nPSR:%Q\n",psr); |
133 | 205 | ||
134 | panic("\nException:%Q\n",vector); |
206 | panic("\nException:%W (%s)\n", (__u16) vector, vector_to_string(vector)); |
135 | } |
207 | } |
136 | 208 | ||
137 | 209 |