tm-ppc-dummy.h   [plain text]


#define CALL_DUMMY { \
  \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  \
  0x7c0802a6, /* mflr   r0             */ \
  0xd8010000, /* stfd   r?, num(r1)    */ \
  0xbc010000, /* stm    r0, num(r1)    */ \
  0x94210000, /* stwu   r1, num(r1)    */ \
  0xfeedfeed, \
  0xfeedfeed, \
  /* save toc pointer */ \
  0x3c400000, /* addis  r2, 0, 0x0     */ \
  0x60420000, /* ori    r2, r2, 0x0    */ \
  /* save function pointer */ \
  0x3d800000, /* lis    r12, 0x0       */ \
  0x618c0000, /* ori    r12, r12, 0x0  */ \
  /* call function */ \
  0x7d8903a6, /* mtctr r12              */ \
  0x4e800421, /* bctrl                 */ \
  /* breakpoint for function return */ \
  0x7fe00008, /* trap                  */ \
  0x60000000, /* nop                   */ \
  0xfeedfeed, \
  0xfeedfeed, \
  \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed, \
  0xfeedfeed, 0xfeedfeed, 0xfeedfeed, 0xfeedfeed \
}

/* keep this as multiple of 16 ($sp requires 16 byte alignment) */

#define INSTRUCTION_SIZE 4

#define CALL_DUMMY_START_OFFSET      ((32 + 6) * INSTRUCTION_SIZE)
#define	TOC_ADDR_OFFSET              CALL_DUMMY_START_OFFSET
#define	TARGET_ADDR_OFFSET           (CALL_DUMMY_START_OFFSET + (2 * INSTRUCTION_SIZE))
#define CALL_DUMMY_BREAKPOINT_OFFSET (CALL_DUMMY_START_OFFSET + (6 * INSTRUCTION_SIZE))
#define CALL_DUMMY_LENGTH            ((32 + 16 + 32) * INSTRUCTION_SIZE)