@@ -121,10 +121,15 @@ void main() {
121121 unsigned char * elf_data = (unsigned char * )0x100000 ;
122122 Elf32_Ehdr * ehdr = (Elf32_Ehdr * )elf_data ;
123123
124+ setup_pointers ();
125+
124126 sceSifInitRpc (0 );
125127 readBufferInternal ("" , 0 , elf_rsect , elf_data , BOOT_FILE_SC , 0 );
126128 sceSifExitRpc ();
127129
130+ while (!sceSifResetIop ("" , 0 ));
131+ while (!sceSifSyncIop ());
132+
128133 // Validate ELF header
129134 if (ehdr -> e_phnum > 256 || ehdr -> e_phnum == 0 ) {
130135 Exit (0 ); // Invalid program header count
@@ -139,7 +144,7 @@ void main() {
139144 if (phdr -> p_memsz > 0x2000000 || phdr -> p_filesz > phdr -> p_memsz ) {
140145 continue ; // Skip invalid segments
141146 }
142- memcpy ((unsigned char * )(unsigned long )phdr -> p_vaddr , elf_data + phdr -> p_offset , phdr -> p_filesz );
147+ memmove ((unsigned char * )(unsigned long )phdr -> p_vaddr , elf_data + phdr -> p_offset , phdr -> p_filesz );
143148 if (phdr -> p_memsz > phdr -> p_filesz ) {
144149 memset ((unsigned char * )(unsigned long )phdr -> p_vaddr + phdr -> p_filesz , 0 , phdr -> p_memsz - phdr -> p_filesz );
145150 }
@@ -149,14 +154,7 @@ void main() {
149154 FlushCache (0 );
150155 FlushCache (2 );
151156
152- while (!sceSifResetIop ("" , 0 ));
153- while (!sceSifSyncIop ());
154-
155157 ExecPS2 ((void * )(unsigned long )ehdr -> e_entry , 0 , 0 , NULL );
156- }
157158
158- __attribute__((section (".text.boot" )))
159- void _start (void ) {
160- setup_pointers ();
161- main ();
159+ Exit (0 ); // This should never occur
162160}
0 commit comments