Overview   API Reference  

arm_context.hpp

00001 #if !defined(__SYSTEM_L4_ARM_ARM_CONTEXT_HPP__)
00002 #define __SYSTEM_L4_ARM_ARM_CONTEXT_HPP__
00003 
00004 //
00005 // L4 includes
00006 //
00007 #include <l4/sys/utcb.h>
00008 
00009 //
00010 // local includes
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 // ***** end of source ***** //
00058 

L4vmm Reference Manual, written by Mario Schwalbe  © 2006-2008