34 #define JAL(addr) (0x0c000000 | (0x3ffffff & ((addr) >> 2)))
35 #define HI16(addr) (0x3c110000 | (((addr) >> 16) & 0xffff))
36 #define LO16(addr) (0x36310000 | ((addr) & 0xffff))
68 0x00000000, 0x00000000,
69 0x7962424c, 0x00004545,
70 0x00000000, 0x00000000, 0x00000000, 0x00000000
76 void *pStartModule, *pLoadModuleBuffer, *patch_addr, *lf_rpc_dispatch, *lf_jump_table_end, *lf_fno_check;
77 unsigned short int JumpTableOffset_hi, JumpTableOffset_lo;
88 pStartModule = modload_lib->
exports[8];
89 pLoadModuleBuffer = modload_lib->
exports[10];
111 if(loadfile_info.
text_size < 0x4c4 + 128)
114 lf_rpc_dispatch = (
void *)(loadfile_info.
text_start + 0x4c4);
118 if(
data[0]==0x27bdffe8 &&
data[1]==0x2c820006 &&
data[2]==0x14400003 &&
data[3]==0xafbf0010 &&
data[5]==0x00001021 &&
data[6]==0x00041080){
119 lf_fno_check = (
void*)(lf_rpc_dispatch+4);
122 JumpTableOffset_hi=*(
unsigned short int*)&
data[7];
123 JumpTableOffset_lo=*(
unsigned short int*)&
data[9];
125 lf_jump_table_end = (
void*)((JumpTableOffset_hi<<16) + (
short int)JumpTableOffset_lo + 0x18);
134 lmb_patch[5] =
JAL((
u32)pLoadModuleBuffer);
137 lmb_patch[15] =
JAL((
u32)pStartModule);
139 SyncDCache(lmb_patch, (
void *)(lmb_patch + 24));
142 dmat.
size=
sizeof(lmb_patch);
143 dmat.
dest=patch_addr;
int smem_write_word(void *address, u32 value)
void * SifAllocIopHeap(int size)
u32 SifSetDma(SifDmaTransfer_t *sdd, s32 len)
void SyncDCache(void *start, void *end)
slib_exp_lib_list_t _slib_cur_exp_lib_list
int sbv_patch_enable_lmb(void)
int SifRpcGetOtherData(SifRpcReceiveData_t *rd, void *src, void *dest, int size, int mode)
int slib_get_exp_lib(const char *name, slib_exp_lib_t *library)
int smod_get_mod_by_name(const char *name, smod_mod_info_t *info)
u8 bytes[SMEM_BUF_SIZE/sizeof(u8)]
u32 words[SMEM_BUF_SIZE/sizeof(u32)]