All pastes #267881 Raw Edit

Stuff

public text v1 · immutable
·published 2006-12-05 04:02 UTC
rendered paste body
static const unsigned int g_cfm_island_template[] = {
	/* header */
	0xDEADBABE,		// cfm island signature
	0x0,			// lr as it is when coming from the original function
	0x0,			// tvector function pointer
	0x0,			// tvector rtoc
	0x0,			// mach-o function pointer
	0x0,			// ape reentry function pointer
	0x0,			// pointer to previous island
	/* re-entry island */
	0x7C0802A6,		// mflr		r0				-- store current lr in r0
	0x48000005,		// bl		+1				-- branch to next instruction, setting lr
	0x7D8802A6,		// mflr		r12				-- store address of this instruction in r12
	0x7C0803A6,		// mtlr		r0				-- restore lr from r0
	0x398CFFE4,		// addi		r12, r12, -28	-- subtract 28 from r12, putting us at the tvector function pointer
	0x800C000C,		// lwz		r0, 12(r12)		-- load the ape reentry function pointer into r0
	0x804C0004,		// lwz		r2, 4(r12)		-- load the tvector rtoc into r2
	0x7C0903A6,		// mtctr	r0
	0x4E800420,		// bctr						-- branch to the ape reentry function pointer
	/* jump island */
	0x7C0802A6,		// mflr		r0				-- store current lr in r0
	0x48000005,		// bl		+1
	0x7D8802A6,		// mflr		r12				-- store address of this instruction in r12
	0x398CFFC0,		// addi		r12, r12, -64	-- subtract 64 from r12, putting us at tvector function pointer
	0x900CFFFC,		// stw		r0, -4(r12)		-- store the lr in the "lr as it is..." field
	0x800C0008,		// lwz		r0, 8(r12)		-- load the mach-o function pointer into r0
	0x7C0903A6,		// mtctr	r0
	0x4E800421,		// bctrl					-- branch to the mach-o function pointer
	0x7D8802A6,		// mflr		r12				-- move the address of this instruction into r12
	0x398CFFA8,		// addi		r12, r12, -88	-- subtract 88 from it, putting us at the tvector rtoc field
	0x800CFFFC,		// lwz		r0, -4(r12)		-- load the "lr as it is..." into r0
	0x804C0004,		// lwz		r2, 4(r12)		-- load the tvector rtoc into r2
	0x7C0803A6,		// mtlr		r0				-- restore the lr
	0x4E800020		// blr						-- branch to it
};