Lines Matching refs:elElfDesc

137 static BOOL ELi_ReInitDesc( ELDesc* elElfDesc);
138 static ELResult elLoadSegments( ELDesc* elElfDesc, ELObject* MYObject);
139 static ELResult elLoadSections( ELDesc* elElfDesc, ELObject* MYObject, u32 dll_fileid, u32 elf_num);
142 static ELDlld ELi_LoadLibrary( ELDesc* elElfDesc, void* obj_image, u32 obj_len, void* buf, u32 dll_…
144 static ELResult ELi_LoadObject( ELDesc* elElfDesc, ELObject* MYObject, void* obj_offset, void* buf,…
157 ELAdrEntry* elGetAdrEntry( ELDesc* elElfDesc, const char* ent_name, ELObject** ExpObjEnt);
233 void* ELi_Malloc( ELDesc* elElfDesc, ELObject* MYObject, size_t size) in ELi_Malloc() argument
239 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_NO_MORE_RESOURCE); in ELi_Malloc()
249 BOOL ELi_InitDesc( ELDesc* elElfDesc) in ELi_InitDesc() argument
251 if( elElfDesc == NULL) { /*NULL check*/ in ELi_InitDesc()
256 elElfDesc->ShdrEx = NULL; in ELi_InitDesc()
257 elElfDesc->SymEx = NULL; in ELi_InitDesc()
258 elElfDesc->SymExTbl = NULL; in ELi_InitDesc()
259 elElfDesc->SymExTarget = 0xFFFFFFFF; in ELi_InitDesc()
261 elElfDesc->process = (u32)EL_PROC_INITIALIZED; /*Set the flag*/ in ELi_InitDesc()
262 elElfDesc->result = (u32)EL_RESULT_SUCCESS; in ELi_InitDesc()
265 elElfDesc->ELObjectStart = NULL; in ELi_InitDesc()
266 elElfDesc->ELStaticObj = NULL; in ELi_InitDesc()
274 static BOOL ELi_ReInitDesc( ELDesc* elElfDesc) in ELi_ReInitDesc() argument
276 if( elElfDesc == NULL) { /*NULL check*/ in ELi_ReInitDesc()
281 elElfDesc->ShdrEx = NULL; in ELi_ReInitDesc()
282 elElfDesc->SymEx = NULL; in ELi_ReInitDesc()
283 elElfDesc->SymExTbl = NULL; in ELi_ReInitDesc()
284 elElfDesc->SymExTarget = 0xFFFFFFFF; in ELi_ReInitDesc()
286 elElfDesc->process = (u32)EL_PROC_INITIALIZED; /*Set the flag*/ in ELi_ReInitDesc()
287 elElfDesc->result = (u32)EL_RESULT_SUCCESS; in ELi_ReInitDesc()
299 ELDlld EL_LoadLibraryfromFile( ELDesc* elElfDesc, const char* FilePath, void* buf) in EL_LoadLibraryfromFile() argument
306 if( elElfDesc == NULL) { in EL_LoadLibraryfromFile()
316 ELi_SetResultCode( elElfDesc, NULL, EL_RESULT_CANNOT_ACCESS_ELF); in EL_LoadLibraryfromFile()
329 elElfDesc->i_elReadStub = ELi_ReadFile; in EL_LoadLibraryfromFile()
330 elElfDesc->FileStruct = (int*)file; in EL_LoadLibraryfromFile()
334 dlld = ELi_LoadLibrary( elElfDesc, NULL, len, buf, file_id[0].file_id); in EL_LoadLibraryfromFile()
341 ELi_SetResultCode( elElfDesc, NULL, EL_RESULT_CANNOT_ACCESS_ELF); in EL_LoadLibraryfromFile()
356 ELDlld EL_LoadLibrary( ELDesc* elElfDesc, ELReadImage readfunc, u32 len, void* buf) in EL_LoadLibrary() argument
360 if( elElfDesc == NULL) { in EL_LoadLibrary()
367 elElfDesc->i_elReadStub = ELi_ReadUsr; in EL_LoadLibrary()
369 dlld = ELi_LoadLibrary( elElfDesc, NULL, len, buf, 0xFFFFFFFF); in EL_LoadLibrary()
386 ELDlld EL_LoadLibraryfromMem( ELDesc* elElfDesc, void* obj_image, u32 obj_len, void* buf) in EL_LoadLibraryfromMem() argument
390 if( elElfDesc == NULL) { in EL_LoadLibraryfromMem()
397 elElfDesc->i_elReadStub = ELi_ReadMem; in EL_LoadLibraryfromMem()
398 elElfDesc->FileStruct = NULL; in EL_LoadLibraryfromMem()
400 dlld = ELi_LoadLibrary( elElfDesc, obj_image, obj_len, buf, 0xFFFFFFFF); in EL_LoadLibraryfromMem()
417 static ELDlld ELi_LoadLibrary( ELDesc* elElfDesc, void* obj_image, u32 obj_len, void* buf, u32 dll_… in ELi_LoadLibrary() argument
429 if( elElfDesc->i_elReadStub == NULL) { in ELi_LoadLibrary()
430 ELi_SetResultCode( elElfDesc, NULL, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
436 MYObject = (ELObject*)ELi_Malloc( elElfDesc, NULL, sizeof( ELObject)); in ELi_LoadLibrary()
440 elAddObjEntry( &(elElfDesc->ELObjectStart), MYObject); in ELi_LoadLibrary()
442 elElfDesc->ar_head = obj_image; in ELi_LoadLibrary()
447 …if( elElfDesc->i_elReadStub( OBJMAG, elElfDesc->FileStruct, (u32)obj_image, 0, 8) == FALSE) { /*Ge… in ELi_LoadLibrary()
448 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
457 …if( elElfDesc->i_elReadStub( OBJMAG, elElfDesc->FileStruct, (u32)(obj_image), (image_pointer+arch_… in ELi_LoadLibrary()
459 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
464 (void)ELi_ReInitDesc( elElfDesc); in ELi_LoadLibrary()
465 …result = ELi_LoadObject( elElfDesc, MYObject, (void*)(image_pointer+arch_size), MYObject->buf_curr… in ELi_LoadLibrary()
473 …if( elElfDesc->i_elReadStub( &ArHdr, elElfDesc->FileStruct, (u32)(obj_image), image_pointer, arch_… in ELi_LoadLibrary()
475 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
483 (void)ELi_ReInitDesc( elElfDesc); in ELi_LoadLibrary()
484 … result = ELi_LoadObject( elElfDesc, MYObject, 0, MYObject->buf_current, dll_fileid, elf_num); in ELi_LoadLibrary()
490 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_INVALID_ELF); in ELi_LoadLibrary()
497 … (void)ELi_FreeVenTbl( elElfDesc, MYObject); /*Release the veneer link list when not debugging*/ in ELi_LoadLibrary()
506 (void)elRemoveObjEntry( &(elElfDesc->ELObjectStart), MYObject); in ELi_LoadLibrary()
519 static ELResult ELi_LoadObject( ELDesc* elElfDesc, ELObject* MYObject, void* obj_offset, void* buf,… in ELi_LoadObject() argument
524 if( elElfDesc->process != (u32)EL_PROC_INITIALIZED) { in ELi_LoadObject()
528 if( elElfDesc->i_elReadStub( &(elElfDesc->CurrentEhdr), elElfDesc->FileStruct, in ELi_LoadObject()
529 (u32)(elElfDesc->ar_head), (u32)(obj_offset), sizeof( Elf32_Ehdr)) in ELi_LoadObject()
531 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadObject()
536 elElfDesc->elf_offset = obj_offset; in ELi_LoadObject()
537 elElfDesc->shentsize = elElfDesc->CurrentEhdr.e_shentsize; in ELi_LoadObject()
538 elElfDesc->entry_adr = elElfDesc->CurrentEhdr.e_entry; in ELi_LoadObject()
541 switch( elElfDesc->CurrentEhdr.e_type) { in ELi_LoadObject()
545 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_UNSUPPORTED_ELF); in ELi_LoadObject()
552 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_NO_MORE_RESOURCE); in ELi_LoadObject()
555 ret_val = elLoadSections( elElfDesc, MYObject, dll_fileid, elf_num); in ELi_LoadObject()
560 ret_val = elLoadSegments( elElfDesc, MYObject); in ELi_LoadObject()
566 ret_val = elLoadSegments( elElfDesc, MYObject); in ELi_LoadObject()
568 ret_val = elLoadSections( elElfDesc, MYObject, dll_fileid, elf_num); in ELi_LoadObject()
574 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_UNSUPPORTED_ELF); in ELi_LoadObject()
580 elElfDesc->CurrentEhdr.e_type); in ELi_LoadObject()
581 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_INVALID_ELF); in ELi_LoadObject()
595 static ELResult elLoadSegments( ELDesc* elElfDesc, ELObject* MYObject) in elLoadSegments() argument
601 for( i=0; i<(elElfDesc->CurrentEhdr.e_phnum); i++) { in elLoadSegments()
603 ELi_GetPhdr( elElfDesc, i, &CurrentPhdr); in elLoadSegments()
607 if( ELi_CopySegmentToBuffer( elElfDesc, MYObject, &CurrentPhdr) == NULL) { in elLoadSegments()
615 ELi_SetProcCode( elElfDesc, MYObject, EL_PROC_COPIED); in elLoadSegments()
625 static ELResult elLoadSections( ELDesc* elElfDesc, ELObject* MYObject, u32 dll_fileid, u32 elf_num) in elLoadSections() argument
641 for( i=0; i<(elElfDesc->CurrentEhdr.e_shnum); i++) { in elLoadSections()
642 CurrentShdrEx->next = ELi_Malloc( elElfDesc, MYObject, sizeof(ELShdrEx)); in elLoadSections()
650 if( ELi_ShdrIsDebug( elElfDesc, i) == TRUE) { /*When it is debugging information*/ in elLoadSections()
654 ELi_GetShdr( elElfDesc, i, &(CurrentShdrEx->Shdr)); in elLoadSections()
659 elElfDesc->ShdrEx = DmyShdrEx.next; in elLoadSections()
662 ELi_START_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in elLoadSections()
666 for( i=0; i<(elElfDesc->CurrentEhdr.e_shnum); i++) { in elLoadSections()
668 CurrentShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, i); in elLoadSections()
682 … ELi_CopySectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
690 … ELi_CopySectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
698 … ELi_AllocSectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
706 … ELi_CopySectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
712 … ELi_END_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in elLoadSections()
715 …ELOCATIONPROC_AUTO, dll_fileid, elf_num, i, CurrentShdrEx->loaded_adr, (elElfDesc != i_eldesc_sim)… in elLoadSections()
723 ELi_SetProcCode( elElfDesc, MYObject, EL_PROC_COPIED); in elLoadSections()
726 ELi_END_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in elLoadSections()
730 for( i=0; i<(elElfDesc->CurrentEhdr.e_shnum); i++) { in elLoadSections()
732 CurrentShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, i); in elLoadSections()
739 InfoShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, in elLoadSections()
742 if(ELi_RelocateSym( elElfDesc, MYObject, i) == FALSE) in elLoadSections()
743 … return( (ELResult)(elElfDesc->result)); //EL_RESULT_NO_MORE_RESOURCE or EL_RESULT_UNSUPPORTED_ELF in elLoadSections()
756 ELi_GetSent( elElfDesc, i, &(elElfDesc->Rel), offset, sizeof(Elf32_Rel)); in elLoadSections()
757 ELi_GetShdr( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->SymShdr)); in elLoadSections()
758 ELi_GetSent( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->Sym), in elLoadSections()
759 … (u32)(elElfDesc->SymShdr.sh_entsize * ELF32_R_SYM( elElfDesc->Rel.r_info)), sizeof(Elf32_Sym)); in elLoadSections()
760 … ELi_GetStrAdr( elElfDesc, elElfDesc->SymShdr.sh_link, elElfDesc->Sym.st_name, sym_str, 128); in elLoadSections()
762 PRINTDEBUG( "%08x ", elElfDesc->Rel.r_offset); in elLoadSections()
763 PRINTDEBUG( "%08x ", elElfDesc->Rel.r_info); in elLoadSections()
765 PRINTDEBUG( "%08x ", elElfDesc->Sym.st_value); in elLoadSections()
775 InfoShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, in elLoadSections()
778 if(ELi_RelocateSym( elElfDesc, MYObject, i) == FALSE) in elLoadSections()
792 ELi_GetSent( elElfDesc, i, &(elElfDesc->Rela), offset, sizeof(Elf32_Rel)); in elLoadSections()
793 ELi_GetShdr( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->SymShdr)); in elLoadSections()
794 ELi_GetSent( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->Sym), in elLoadSections()
795 … (u32)(elElfDesc->SymShdr.sh_entsize * ELF32_R_SYM( elElfDesc->Rela.r_info)), sizeof(Elf32_Sym)); in elLoadSections()
796 … ELi_GetStrAdr( elElfDesc, elElfDesc->SymShdr.sh_link, elElfDesc->Sym.st_name, sym_str, 128); in elLoadSections()
798 PRINTDEBUG( "%08x ", elElfDesc->Rela.r_offset); in elLoadSections()
799 PRINTDEBUG( "%08x ", elElfDesc->Rela.r_info); in elLoadSections()
801 PRINTDEBUG( "%08x ", elElfDesc->Sym.st_value); in elLoadSections()
811 if(ELi_GoPublicGlobalSym( elElfDesc, MYObject, i) == FALSE) in elLoadSections()
817 ELi_FreeSymList( elElfDesc); in elLoadSections()
820 CurrentShdrEx = elElfDesc->ShdrEx; in elLoadSections()
827 elElfDesc->ShdrEx = NULL; in elLoadSections()
843 ELProcess ELi_ResolveAllLibrary( ELDesc* elElfDesc) in ELi_ResolveAllLibrary() argument
854 if( elElfDesc == NULL) { in ELi_ResolveAllLibrary()
857 ObjEnt = elElfDesc->ELObjectStart; in ELi_ResolveAllLibrary()
858 if( (ObjEnt == NULL)||((ObjEnt == elElfDesc->ELStaticObj)&&(ObjEnt->next == NULL))) { in ELi_ResolveAllLibrary()
866 …AdrEnt = elGetAdrEntry( elElfDesc, UnrEnt->sym_str, &ExpObjEnt); /*Search from address tabl… in ELi_ResolveAllLibrary()
871 ret_val = ELi_DoRelocate( elElfDesc, ObjEnt, UnrEnt); /*Resolve symbol*/ in ELi_ResolveAllLibrary()
882 if( elElfDesc != i_eldesc_sim) { in ELi_ResolveAllLibrary()
889 ret_val = ELi_DoRelocate( elElfDesc, ObjEnt, UnrEnt); in ELi_ResolveAllLibrary()
902 ELi_SetProcCode( elElfDesc, NULL, EL_PROC_RELOCATED); in ELi_ResolveAllLibrary()
926 BOOL ELi_Unlink( ELDesc* elElfDesc, ELDlld my_dlld) in ELi_Unlink() argument
934 if( elElfDesc == NULL) { in ELi_Unlink()
939 ELi_SetResultCode( elElfDesc, NULL, EL_RESULT_INVALID_PARAMETER); in ELi_Unlink()
961 ObjEnt = elElfDesc->ELObjectStart; in ELi_Unlink()
983 (void)ELi_FreeVenTbl( elElfDesc, MYObject); /*Release the veneer link request*/ in ELi_Unlink()
985 ELi_SetProcCode( elElfDesc, MYObject, EL_PROC_NOTHING); in ELi_Unlink()
987 ELi_START_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in ELi_Unlink()
988 …(void)ELi_UNREGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, file_id, (elElfDesc != i_eldesc_sim… in ELi_Unlink()
989 ELi_END_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in ELi_Unlink()
1176 BOOL ELi_Export( ELDesc* elElfDesc, ELAdrEntry* AdrEnt) in ELi_Export() argument
1181 if( elElfDesc == NULL) { in ELi_Export()
1184 if( elElfDesc->ELStaticObj == NULL) { in ELi_Export()
1185 elElfDesc->ELStaticObj = (ELObject*)ELi_Malloc( elElfDesc, NULL, sizeof( ELObject)); in ELi_Export()
1186 if(elElfDesc->ELStaticObj == NULL) { in ELi_Export()
1189 ELi_InitObject( elElfDesc->ELStaticObj); in ELi_Export()
1190 elAddObjEntry( &(elElfDesc->ELObjectStart), elElfDesc->ELStaticObj); in ELi_Export()
1193 if( !(elElfDesc->ELStaticObj->ExportAdrEnt)) { in ELi_Export()
1194 elElfDesc->ELStaticObj->ExportAdrEnt = (ELAdrEntry*)AdrEnt; in ELi_Export()
1196 DmyAdrEnt.next = (ELAdrEntry*)elElfDesc->ELStaticObj->ExportAdrEnt; in ELi_Export()
1226 ELAdrEntry* elGetAdrEntry( ELDesc* elElfDesc, const char* ent_name, ELObject** ExpObjEnt) in elGetAdrEntry() argument
1231 ObjEnt = elElfDesc->ELObjectStart; in elGetAdrEntry()
1251 void* ELi_GetGlobalAdr( ELDesc* elElfDesc, ELDlld my_dlld, const char* ent_name) in ELi_GetGlobalAdr() argument
1257 if( elElfDesc == NULL) { in ELi_GetGlobalAdr()
1262 CurrentAdrEnt = elGetAdrEntry( elElfDesc, ent_name, &DmyObjEnt); in ELi_GetGlobalAdr()
1351 void ELi_SetResultCode( ELDesc* elElfDesc, ELObject* MYObject, ELResult result) in ELi_SetResultCode() argument
1353 if( elElfDesc != NULL) { in ELi_SetResultCode()
1354 elElfDesc->result = (u32)result; in ELi_SetResultCode()
1361 void ELi_SetProcCode( ELDesc* elElfDesc, ELObject* MYObject, ELProcess process) in ELi_SetProcCode() argument
1363 if( elElfDesc != NULL) { in ELi_SetProcCode()
1364 elElfDesc->process = (u32)process; in ELi_SetProcCode()