Rev 1411 | Rev 1702 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1411 | Rev 1595 | ||
|---|---|---|---|
| Line 37... | Line 37... | ||
| 37 | #include <symtab.h> |
37 | #include <symtab.h> |
| 38 | #include <synch/spinlock.h> |
38 | #include <synch/spinlock.h> |
| 39 | #include <print.h> |
39 | #include <print.h> |
| 40 | #include <debug.h> |
40 | #include <debug.h> |
| 41 | #include <align.h> |
41 | #include <align.h> |
| - | 42 | #include <interrupt.h> |
|
| 42 | 43 | ||
| 43 | static void tlb_refill_fail(istate_t *istate); |
44 | static void tlb_refill_fail(istate_t *istate); |
| 44 | static void tlb_invalid_fail(istate_t *istate); |
45 | static void tlb_invalid_fail(istate_t *istate); |
| 45 | static void tlb_modified_fail(istate_t *istate); |
46 | static void tlb_modified_fail(istate_t *istate); |
| 46 | 47 | ||
| Line 334... | Line 335... | ||
| 334 | if (s) |
335 | if (s) |
| 335 | symbol = s; |
336 | symbol = s; |
| 336 | s = get_symtab_entry(istate->ra); |
337 | s = get_symtab_entry(istate->ra); |
| 337 | if (s) |
338 | if (s) |
| 338 | sym2 = s; |
339 | sym2 = s; |
| - | 340 | ||
| - | 341 | fault_if_from_uspace(istate, "TLB Refill Exception on %P", cp0_badvaddr_read()); |
|
| 339 | panic("%X: TLB Refill Exception at %X(%s<-%s)\n", cp0_badvaddr_read(), istate->epc, symbol, sym2); |
342 | panic("%X: TLB Refill Exception at %X(%s<-%s)\n", cp0_badvaddr_read(), istate->epc, symbol, sym2); |
| 340 | } |
343 | } |
| 341 | 344 | ||
| 342 | 345 | ||
| 343 | void tlb_invalid_fail(istate_t *istate) |
346 | void tlb_invalid_fail(istate_t *istate) |
| Line 345... | Line 348... | ||
| 345 | char *symbol = ""; |
348 | char *symbol = ""; |
| 346 | 349 | ||
| 347 | char *s = get_symtab_entry(istate->epc); |
350 | char *s = get_symtab_entry(istate->epc); |
| 348 | if (s) |
351 | if (s) |
| 349 | symbol = s; |
352 | symbol = s; |
| - | 353 | fault_if_from_uspace(istate, "TLB Invalid Exception on %P", cp0_badvaddr_read()); |
|
| 350 | panic("%X: TLB Invalid Exception at %X(%s)\n", cp0_badvaddr_read(), istate->epc, symbol); |
354 | panic("%X: TLB Invalid Exception at %X(%s)\n", cp0_badvaddr_read(), istate->epc, symbol); |
| 351 | } |
355 | } |
| 352 | 356 | ||
| 353 | void tlb_modified_fail(istate_t *istate) |
357 | void tlb_modified_fail(istate_t *istate) |
| 354 | { |
358 | { |
| 355 | char *symbol = ""; |
359 | char *symbol = ""; |
| 356 | 360 | ||
| 357 | char *s = get_symtab_entry(istate->epc); |
361 | char *s = get_symtab_entry(istate->epc); |
| 358 | if (s) |
362 | if (s) |
| 359 | symbol = s; |
363 | symbol = s; |
| - | 364 | fault_if_from_uspace(istate, "TLB Modified Exception on %P", cp0_badvaddr_read()); |
|
| 360 | panic("%X: TLB Modified Exception at %X(%s)\n", cp0_badvaddr_read(), istate->epc, symbol); |
365 | panic("%X: TLB Modified Exception at %X(%s)\n", cp0_badvaddr_read(), istate->epc, symbol); |
| 361 | } |
366 | } |
| 362 | 367 | ||
| 363 | /** Try to find PTE for faulting address |
368 | /** Try to find PTE for faulting address |
| 364 | * |
369 | * |