arm_context.hpp
00001 #if !defined(__SYSTEM_L4_ARM_ARM_CONTEXT_HPP__)
00002 #define __SYSTEM_L4_ARM_ARM_CONTEXT_HPP__
00003
00004
00005
00006
00007 #include <l4/sys/utcb.h>
00008
00009
00010
00011
00012 #include "core/system/context.hpp"
00013
00018 struct arm_context : public context<l4_utcb_t>
00019 {
00020 CONTEXT_ACCESSOR(l4_umword_t, ip, exc.pc);
00021 CONTEXT_ACCESSOR(l4_umword_t, pc, exc.pc);
00022 CONTEXT_ACCESSOR(l4_umword_t, sp, exc.sp);
00023
00024 CONTEXT_ACCESSOR(l4_umword_t, r0, exc.r[0]);
00025 CONTEXT_ACCESSOR(l4_umword_t, r1, exc.r[1]);
00026 CONTEXT_ACCESSOR(l4_umword_t, r2, exc.r[2]);
00027 CONTEXT_ACCESSOR(l4_umword_t, r3, exc.r[3]);
00028 CONTEXT_ACCESSOR(l4_umword_t, r4, exc.r[4]);
00029 CONTEXT_ACCESSOR(l4_umword_t, r5, exc.r[5]);
00030 CONTEXT_ACCESSOR(l4_umword_t, r6, exc.r[6]);
00031 CONTEXT_ACCESSOR(l4_umword_t, r7, exc.r[7]);
00032 CONTEXT_ACCESSOR(l4_umword_t, r8, exc.r[8]);
00033 CONTEXT_ACCESSOR(l4_umword_t, r9, exc.r[9]);
00034 CONTEXT_ACCESSOR(l4_umword_t, r10, exc.r[10]);
00035 CONTEXT_ACCESSOR(l4_umword_t, r11, exc.r[11]);
00036 CONTEXT_ACCESSOR(l4_umword_t, r12, exc.r[12]);
00037
00038 CONTEXT_ACCESSOR(l4_umword_t, pfa, exc.pfa);
00039 CONTEXT_ACCESSOR(l4_umword_t, err, exc.err);
00040 CONTEXT_ACCESSOR(l4_umword_t, cpsr, exc.cpsr);
00041 CONTEXT_ACCESSOR(l4_umword_t, ulr, exc.ulr);
00042
00043 template <typename WordT>
00044 inline WordT opcode(const int offset=0) const
00045 {
00046 return *reinterpret_cast<const WordT *>(ip()+offset);
00047 }
00048
00049 inline bool is_io_page_fault(void) const
00050 {
00051 return l4_is_io_page_fault(pfa());
00052 }
00053 };
00054
00055 #endif
00056
00057
00058