Subversion Repositories HelenOS

Rev

Rev 272 | Go to most recent revision | 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=&REG_DUMP;
143
    p=&REG_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