Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2234 → Rev 2235

/branches/arm/kernel/arch/arm32/include/exception.h
48,11 → 48,18
#define EXC_IRQ_VEC 0x18
#define EXC_FIQ_VEC 0x1c
 
/* Exception numbers */
#define EXC_RESET 0
#define EXC_UNDEF_INSTR 1
#define EXC_SWI 2
#define EXC_PREFETCH_ABORT 3
#define EXC_DATA_ABORT 4
#define EXC_IRQ 5
#define EXC_FIQ 6
 
 
 
typedef struct {
uint32_t cpsr;
uint32_t retaddr;
 
uint32_t r0;
uint32_t r1;
uint32_t r2;
68,24 → 75,26
uint32_t sp;
uint32_t lr;
 
uint32_t spsr;
} istate_t;
 
static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
{
istate->retaddr = retaddr;
istate->lr = retaddr;
}
 
/** Return true if exception happened while in userspace */
static inline int istate_from_uspace(istate_t *istate)
{
return !(istate->retaddr & 0x80000000);
return !(istate->lr & 0x80000000);
return 0;
}
static inline unative_t istate_get_pc(istate_t *istate)
{
return istate->retaddr;
return istate->lr;
}
 
 
extern void setup_exception_stacks(void);
extern void install_exception_handlers(void);
extern void exception_init(void);