00001 // AUTOMATICALLY GENERATED -- DO NOT EDIT! -*- c++ -*- 00002 00003 #ifndef trap_state_h 00004 #define trap_state_h 00005 00006 #include "l4_types.h" 00007 00008 // 00009 // INTERFACE definition follows 00010 // 00011 00012 00013 class Trap_state 00014 { 00015 public: 00016 typedef int (*Handler)(Trap_state*); 00017 static Handler FIASCO_FASTCALL base_handler asm ("BASE_TRAP_HANDLER"); 00018 00019 // Saved segment registers 00020 Mword es; 00021 Mword ds; 00022 Mword gs; // => utcb->values[ 0] 00023 Mword fs; // => utcb->values[ 1] 00024 00025 // PUSHA register state frame 00026 Mword edi; // => utcb->values[ 2] 00027 Mword esi; // => utcb->values[ 3] 00028 Mword ebp; // => utcb->values[ 4] 00029 Mword cr2; // we save cr2 over esp for PFs // => utcb->values[ 5] 00030 Mword ebx; // => utcb->values[ 6] 00031 Mword edx; // => utcb->values[ 7] 00032 Mword ecx; // => utcb->values[ 8] 00033 Mword eax; // => utcb->values[ 9] 00034 00035 // Processor trap number, 0-31 00036 Mword trapno; // => utcb->values[10] 00037 00038 // Error code pushed by the processor, 0 if none 00039 Mword err; // => utcb->values[11] 00040 00041 // Processor state frame 00042 Mword eip; // => utcb->values[12] 00043 Mword cs; // => utcb->values[13] 00044 Mword eflags; // => utcb->values[14] 00045 Mword esp; // => utcb->values[15] 00046 Mword ss; 00047 00048 public: 00049 inline Mword ip(); 00050 00051 inline Mword sp(); 00052 00053 inline Mword flags(); 00054 00055 Mword value(); 00056 00057 void dump(); 00058 }; 00059 00060 extern "C" FIASCO_FASTCALL void trap_dump_panic(Trap_state *ts); 00061 00062 // 00063 // IMPLEMENTATION of inline functions (and needed classes) 00064 // 00065 00066 00067 00068 00069 inline Mword 00070 Trap_state::ip() 00071 { return eip; } 00072 00073 00074 00075 inline Mword 00076 Trap_state::sp() 00077 { return esp; } 00078 00079 00080 00081 inline Mword 00082 Trap_state::flags() 00083 { return eflags; } 00084 00085 #endif // trap_state_h