/kernel/trunk/arch/sparc64/include/interrupt.h |
---|
51,7 → 51,16 |
{ |
/* TODO */ |
} |
static inline int istate_from_uspace(istate_t *istate) |
{ |
/* TODO */ |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
/* TODO */ |
} |
extern void interrupt_register(int n, const char *name, iroutine f); |
#endif |
/kernel/trunk/arch/ia64/include/interrupt.h |
---|
113,6 → 113,17 |
istate->cr_ipsr.ri = 0; /* return to instruction slot #0 */ |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
return istate->cr_iip; |
} |
#include <panic.h> |
static inline int istate_from_uspace(istate_t *istate) |
{ |
panic("TODO: istate_from_uspace not yet implemented"); |
return 0; |
} |
extern void *ivt; |
extern void general_exception(__u64 vector, istate_t *istate); |
/kernel/trunk/arch/ia64/src/interrupt.c |
---|
46,6 → 46,7 |
#include <ipc/sysipc.h> |
#include <ipc/irq.h> |
#include <ipc/ipc.h> |
#include <interrupt.h> |
#define VECTORS_64_BUNDLE 20 |
150,8 → 151,6 |
{ |
char *desc = ""; |
dump_interrupted_context(istate); |
switch (istate->cr_isr.ge_code) { |
case GE_ILLEGALOP: |
desc = "Illegal Operation fault"; |
176,6 → 175,9 |
break; |
} |
fault_if_from_uspace(istate, "General Exception (%s)", desc); |
dump_interrupted_context(istate); |
panic("General Exception (%s)\n", desc); |
} |
186,6 → 188,7 |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "Interruption: %#hx (%s)", (__u16) vector, vector_to_string(vector)); |
dump_interrupted_context(istate); |
panic("Interruption: %#hx (%s)\n", (__u16) vector, vector_to_string(vector)); |
#endif |
267,6 → 270,3 |
panic("not implemented\n"); |
/* TODO */ |
} |
/kernel/trunk/arch/ppc32/include/exception.h |
---|
80,5 → 80,16 |
{ |
istate->pc = retaddr; |
} |
/** Return true if exception happened while in userspace */ |
#include <panic.h> |
static inline int istate_from_uspace(istate_t *istate) |
{ |
panic("istate_from_uspace not yet implemented"); |
return 0; |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
return istate->pc; |
} |
#endif |
/kernel/trunk/arch/ppc32/src/interrupt.c |
---|
66,7 → 66,6 |
/* TODO */ |
} |
#include <print.h> |
/** Handler of externul interrupts */ |
void extint_handler(int n, istate_t *istate) |
{ |
/kernel/trunk/arch/amd64/include/interrupt.h |
---|
86,10 → 86,20 |
__u64 stack[]; /* Additional data on stack */ |
}; |
/** Return true if exception happened while in userspace */ |
static inline int istate_from_uspace(istate_t *istate) |
{ |
return !(istate->rip & 0x8000000000000000); |
} |
static inline void istate_set_retaddr(istate_t *istate, __address retaddr) |
{ |
istate->rip = retaddr; |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
return istate->rip; |
} |
extern void (* disable_irqs_function)(__u16 irqmask); |
extern void (* enable_irqs_function)(__u16 irqmask); |
/kernel/trunk/arch/amd64/src/mm/page.c |
---|
183,6 → 183,8 |
access = PF_ACCESS_READ; |
if (as_page_fault(page, access, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate, "Page fault: %#x", page); |
print_info_errcode(n, istate); |
printf("Page fault address: %llX\n", page); |
panic("page fault\n"); |
/kernel/trunk/arch/amd64/src/interrupt.c |
---|
79,6 → 79,7 |
void null_interrupt(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "unserviced interrupt: %d", n); |
print_info_errcode(n, istate); |
panic("unserviced interrupt\n"); |
} |
104,6 → 105,7 |
io_perm_bitmap_install(); |
return; |
} |
fault_if_from_uspace(istate, "general protection fault"); |
} |
print_info_errcode(n, istate); |
112,6 → 114,7 |
void ss_fault(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "stack fault"); |
print_info_errcode(n, istate); |
panic("stack fault\n"); |
} |
121,6 → 124,7 |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "fpu fault"); |
panic("fpu fault"); |
#endif |
} |
/kernel/trunk/arch/ppc64/include/exception.h |
---|
80,5 → 80,16 |
{ |
istate->pc = retaddr; |
} |
/** Return true if exception happened while in userspace */ |
#include <panic.h> |
static inline int istate_from_uspace(istate_t *istate) |
{ |
panic("istate_from_uspace not yet implemented"); |
return 0; |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
return istate->pc; |
} |
#endif |
/kernel/trunk/arch/mips32/include/exception.h |
---|
34,6 → 34,7 |
#endif |
#include <typedefs.h> |
#include <arch/cp0.h> |
#define EXC_Int 0 |
#define EXC_Mod 1 |
98,6 → 99,16 |
istate->epc = retaddr; |
} |
/** Return true if exception happened while in userspace */ |
static inline int istate_from_uspace(istate_t *istate) |
{ |
return istate->status & cp0_status_um_bit; |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
return istate->epc; |
} |
extern void exception(istate_t *istate); |
extern void tlb_refill_entry(void); |
extern void exception_entry(void); |
/kernel/trunk/arch/mips32/include/arg.h |
---|
44,6 → 44,8 |
#define va_arg(ap, type) \ |
(((type *)((ap) = (va_list)( (sizeof(type) <= 4) ? ((__address)((ap) + 2*4 - 1) & (~3)) : ((__address)((ap) + 2*8 -1) & (~7)) )))[-1]) |
#define va_copy(dst,src) ((dst)=(src)) |
#define va_end(ap) |
#endif |
/kernel/trunk/arch/mips32/src/exception.c |
---|
78,6 → 78,8 |
static void unhandled_exception(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "unhandled exception %s", exctable[n]); |
print_regdump(istate); |
panic("unhandled exception %s\n", exctable[n]); |
} |
119,9 → 121,11 |
{ |
if (cp0_cause_coperr(cp0_cause_read()) == fpu_cop_id) |
scheduler_fpu_lazy_request(); |
else |
else { |
fault_if_from_uspace(istate, "unhandled Coprocessor Unusable Exception"); |
panic("unhandled Coprocessor Unusable Exception\n"); |
} |
} |
#endif |
static void interrupt_exception(int n, istate_t *istate) |
/kernel/trunk/arch/mips32/src/mm/tlb.c |
---|
39,6 → 39,7 |
#include <print.h> |
#include <debug.h> |
#include <align.h> |
#include <interrupt.h> |
static void tlb_refill_fail(istate_t *istate); |
static void tlb_invalid_fail(istate_t *istate); |
336,6 → 337,8 |
s = get_symtab_entry(istate->ra); |
if (s) |
sym2 = s; |
fault_if_from_uspace(istate, "TLB Refill Exception on %P", cp0_badvaddr_read()); |
panic("%X: TLB Refill Exception at %X(%s<-%s)\n", cp0_badvaddr_read(), istate->epc, symbol, sym2); |
} |
347,6 → 350,7 |
char *s = get_symtab_entry(istate->epc); |
if (s) |
symbol = s; |
fault_if_from_uspace(istate, "TLB Invalid Exception on %P", cp0_badvaddr_read()); |
panic("%X: TLB Invalid Exception at %X(%s)\n", cp0_badvaddr_read(), istate->epc, symbol); |
} |
357,6 → 361,7 |
char *s = get_symtab_entry(istate->epc); |
if (s) |
symbol = s; |
fault_if_from_uspace(istate, "TLB Modified Exception on %P", cp0_badvaddr_read()); |
panic("%X: TLB Modified Exception at %X(%s)\n", cp0_badvaddr_read(), istate->epc, symbol); |
} |
/kernel/trunk/arch/ia32/include/interrupt.h |
---|
83,11 → 83,22 |
__u32 stack[]; |
}; |
/** Return true if exception happened while in userspace */ |
static inline int istate_from_uspace(istate_t *istate) |
{ |
return !(istate->eip & 0x80000000); |
} |
static inline void istate_set_retaddr(istate_t *istate, __address retaddr) |
{ |
istate->eip = retaddr; |
} |
static inline __native istate_get_pc(istate_t *istate) |
{ |
return istate->eip; |
} |
extern void (* disable_irqs_function)(__u16 irqmask); |
extern void (* enable_irqs_function)(__u16 irqmask); |
extern void (* eoi_function)(void); |
/kernel/trunk/arch/ia32/src/mm/page.c |
---|
103,6 → 103,8 |
access = PF_ACCESS_READ; |
if (as_page_fault(page, access, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate, "Page fault: %#x", page); |
PRINT_INFO_ERRCODE(istate); |
printf("page fault address: %#x\n", page); |
panic("page fault\n"); |
/kernel/trunk/arch/ia32/src/interrupt.c |
---|
79,6 → 79,8 |
void null_interrupt(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "unserviced interrupt: %d", n); |
PRINT_INFO_ERRCODE(istate); |
panic("unserviced interrupt: %d\n", n); |
} |
104,6 → 106,7 |
io_perm_bitmap_install(); |
return; |
} |
fault_if_from_uspace(istate, "general protection fault"); |
} |
PRINT_INFO_ERRCODE(istate); |
112,6 → 115,8 |
void ss_fault(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "stack fault"); |
PRINT_INFO_ERRCODE(istate); |
panic("stack fault\n"); |
} |
118,8 → 123,6 |
void simd_fp_exception(int n, istate_t *istate) |
{ |
PRINT_INFO_ERRCODE(istate); |
__u32 mxcsr; |
asm |
( |
126,6 → 129,10 |
"stmxcsr %0;\n" |
:"=m"(mxcsr) |
); |
fault_if_from_uspace(istate, "SIMD FP exception(19), MXCSR: %#zX", |
(__native)mxcsr); |
PRINT_INFO_ERRCODE(istate); |
printf("MXCSR: %#zX\n",(__native)(mxcsr)); |
panic("SIMD FP exception(19)\n"); |
} |
135,6 → 142,7 |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "fpu fault"); |
panic("fpu fault"); |
#endif |
} |