typedef long Long;
typedef enum
{
kDc_SavedPC = 0,
kDc_SavedMSR = 1,
kDc_SavedCR = 2,
kDc_SavedLR = 3,
kDc_SavedDSISR = 4,
kDc_SavedDAR = 5,
kDc_SavedXER = 6,
kDc_SavedCTR = 7,
kDc_SavedSDR1 = 8,
kDc_SavedRTCU = 9,
kDc_SavedRTCL = 10,
kDc_SavedDEC = 11,
kDc_SavedSR00 = 12,
kDc_SavedSR01 = 13,
kDc_SavedSR02 = 14,
kDc_SavedSR03 = 15,
kDc_SavedSR04 = 16,
kDc_SavedSR05 = 17,
kDc_SavedSR06 = 18,
kDc_SavedSR07 = 19,
kDc_SavedSR08 = 20,
kDc_SavedSR09 = 21,
kDc_SavedSR10 = 22,
kDc_SavedSR11 = 23,
kDc_SavedSR12 = 24,
kDc_SavedSR13 = 25,
kDc_SavedSR14 = 26,
kDc_SavedSR15 = 27,
kDc_SavedFPSCR = 29,
kDc_SavedMQ = 30,
kDc_SavedBAT0U = 31,
kDc_SavedBAT0L = 32,
kDc_SavedBAT1U = 33,
kDc_SavedBAT1L = 34,
kDc_SavedBAT2U = 35,
kDc_SavedBAT2L = 36,
kDc_SavedBAT3U = 37,
kDc_SavedBAT3L = 38,
kNumberSpecialRegisters = 39
} Dc_SavedRegisterName;
typedef union
{
double asfloat;
struct
{
Long high;
Long low;
}
asLONG;
} FloatingPoints;
struct SavedMachineState
{
FloatingPoints CSavedFPRegs[32];
Long CsavedRegs[32];
Long CexReason;
Long SavedDomainID;
union
{
struct
{
Long CsavedSRR0;
Long CsavedSRR1;
Long CsavedCR;
Long CsavedLR;
Long CsavedDSISR;
Long CsavedDAR;
Long CsavedXER;
Long CsavedCTR;
Long CsavedSDR1;
Long CsavedRTCU;
Long CsavedRTCL;
Long CsavedDEC;
Long CsavedSR0;
Long CsavedSR1;
Long CsavedSR2;
Long CsavedSR3;
Long CsavedSR4;
Long CsavedSR5;
Long CsavedSR6;
Long CsavedSR7;
Long CsavedSR8;
Long CsavedSR9;
Long CsavedSR10;
Long CsavedSR11;
Long CsavedSR12;
Long CsavedSR13;
Long CsavedSR14;
Long CsavedSR15;
Long CdoubleFPSCR;
Long CsavedFPSCR;
Long CsavedMQ;
Long CsavedBAT0U;
Long CsavedBAT0L;
Long CsavedBAT1U;
Long CsavedBAT1L;
Long CsavedBAT2U;
Long CsavedBAT2L;
Long CsavedBAT3U;
Long CsavedBAT3L;
}
SpecialRegistersEnumerated;
Long SpecialRegistersIndexed[kNumberSpecialRegisters];
} u;
Long Padding[3];
};
struct StackFrame
{
LONG *ExceptionDomainID;
int *ExceptionProcessorID;
BYTE *ExceptionDescription;
LONG ExceptionFlags;
LONG ExceptionErrorCode;
LONG ExceptionNumber;
struct SavedMachineState ExceptionState;
};
#define GP0_REGNUM 0
#define SP_REGNUM 1
#define FP0_REGNUM 32
#define PC_REGNUM 64
#define PS_REGNUM 65
#define CR_REGNUM 66
#define LR_REGNUM 67
#define CTR_REGNUM 68
#define XER_REGNUM 69
#define MQ_REGNUM 70
#define NUM_REGS 71
#define REGISTER_BYTES (420)
#define ExceptionPC ExceptionState.u.SpecialRegistersEnumerated.CsavedSRR0
#define DECR_PC_AFTER_BREAK 0
#define BREAKPOINT {0x7d, 0x82, 0x10, 0x08}
extern unsigned char breakpoint_insn[];
#define BREAKPOINT_SIZE 4
#if 0
#define ALTERNATE_MEM_FUNCS
#endif
extern int get_char (char *addr);
extern void set_char (char *addr, int val);