diff --git a/wii/app_booter/elfloader.c b/wii/app_booter/elfloader.c index b6e2c3b517..25b648925d 100644 --- a/wii/app_booter/elfloader.c +++ b/wii/app_booter/elfloader.c @@ -62,7 +62,7 @@ u32 load_elf_image (void *elfstart) phdrs = (Elf32_Phdr*)(elfstart + ehdr->e_phoff); - for(i=0;ie_phnum;i++) + for (i = 0; i < ehdr->e_phnum; i++) { if(phdrs[i].p_type != PT_LOAD) continue; @@ -80,9 +80,6 @@ u32 load_elf_image (void *elfstart) memcpy ((void *) phdrs[i].p_paddr, (const void *) image, phdrs[i].p_filesz); sync_before_exec ((void *) phdrs[i].p_paddr, phdrs[i].p_memsz); - - //if(phdrs[i].p_flags & PF_X) - //ICInvalidateRange ((void *) phdrs[i].p_paddr, phdrs[i].p_memsz); } return ((ehdr->e_entry & 0x3FFFFFFF) | 0x80000000); diff --git a/wii/app_booter/sync.c b/wii/app_booter/sync.c index 48d1dadae5..e0980664b8 100644 --- a/wii/app_booter/sync.c +++ b/wii/app_booter/sync.c @@ -6,13 +6,11 @@ void sync_before_exec(const void *p, u32 len) { - u32 a, b; + u32 a = (u32)p & ~0x1f; + u32 b = ((u32)p + len + 0x1f) & ~0x1f; - a = (u32)p & ~0x1f; - b = ((u32)p + len + 0x1f) & ~0x1f; + for ( ; a < b; a += 32) + asm("dcbst 0,%0 ; sync ; icbi 0,%0" : : "b"(a)); - for ( ; a < b; a += 32) - asm("dcbst 0,%0 ; sync ; icbi 0,%0" : : "b"(a)); - - asm("sync ; isync"); + asm("sync ; isync"); } diff --git a/wii/app_booter/sync.h b/wii/app_booter/sync.h index 80dd47ebb5..fe2050e223 100644 --- a/wii/app_booter/sync.h +++ b/wii/app_booter/sync.h @@ -2,7 +2,9 @@ #define __SYNC_H_ void sync_before_read(void *p, u32 len); + void sync_after_write(const void *p, u32 len); + void sync_before_exec(const void *p, u32 len); #endif