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 buf_…
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, u32 buf_size) 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, buf_size, 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, u32 buf_size) 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, buf_size, 0xFFFFFFFF); in EL_LoadLibrary()
386 ELDlld EL_LoadLibraryfromMem( ELDesc* elElfDesc, void* obj_image, u32 obj_len, void* buf, u32 buf_s… 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, buf_size, 0xFFFFFFFF); in EL_LoadLibraryfromMem()
417 static ELDlld ELi_LoadLibrary( ELDesc* elElfDesc, void* obj_image, u32 obj_len, void* buf, u32 buf_… in ELi_LoadLibrary() argument
430 if( elElfDesc->i_elReadStub == NULL) { in ELi_LoadLibrary()
431 ELi_SetResultCode( elElfDesc, NULL, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
437 MYObject = (ELObject*)ELi_Malloc( elElfDesc, NULL, sizeof( ELObject)); in ELi_LoadLibrary()
441 elAddObjEntry( &(elElfDesc->ELObjectStart), MYObject); in ELi_LoadLibrary()
443 elElfDesc->ar_head = obj_image; in ELi_LoadLibrary()
454 …if( elElfDesc->i_elReadStub( OBJMAG, elElfDesc->FileStruct, (u32)obj_image, 0, 8) == FALSE) { /*Ge… in ELi_LoadLibrary()
455 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
464 …if( elElfDesc->i_elReadStub( OBJMAG, elElfDesc->FileStruct, (u32)(obj_image), (image_pointer+arch_… in ELi_LoadLibrary()
466 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
471 (void)ELi_ReInitDesc( elElfDesc); in ELi_LoadLibrary()
472 …result = ELi_LoadObject( elElfDesc, MYObject, (void*)(image_pointer+arch_size), MYObject->buf_curr… in ELi_LoadLibrary()
480 …if( elElfDesc->i_elReadStub( &ArHdr, elElfDesc->FileStruct, (u32)(obj_image), image_pointer, arch_… in ELi_LoadLibrary()
482 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadLibrary()
495 (void)ELi_ReInitDesc( elElfDesc); in ELi_LoadLibrary()
496 … result = ELi_LoadObject( elElfDesc, MYObject, 0, MYObject->buf_current, dll_fileid, elf_num); in ELi_LoadLibrary()
502 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_INVALID_ELF); in ELi_LoadLibrary()
509 … (void)ELi_FreeVenTbl( elElfDesc, MYObject); /*Release the veneer link list when not debugging*/ in ELi_LoadLibrary()
518 (void)elRemoveObjEntry( &(elElfDesc->ELObjectStart), MYObject); in ELi_LoadLibrary()
531 static ELResult ELi_LoadObject( ELDesc* elElfDesc, ELObject* MYObject, void* obj_offset, void* buf,… in ELi_LoadObject() argument
536 if( elElfDesc->process != (u32)EL_PROC_INITIALIZED) { in ELi_LoadObject()
540 if( elElfDesc->i_elReadStub( &(elElfDesc->CurrentEhdr), elElfDesc->FileStruct, in ELi_LoadObject()
541 (u32)(elElfDesc->ar_head), (u32)(obj_offset), sizeof( Elf32_Ehdr)) in ELi_LoadObject()
543 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_CANNOT_ACCESS_ELF); in ELi_LoadObject()
548 elElfDesc->elf_offset = obj_offset; in ELi_LoadObject()
549 elElfDesc->shentsize = elElfDesc->CurrentEhdr.e_shentsize; in ELi_LoadObject()
550 elElfDesc->entry_adr = elElfDesc->CurrentEhdr.e_entry; in ELi_LoadObject()
553 switch( elElfDesc->CurrentEhdr.e_type) { in ELi_LoadObject()
557 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_UNSUPPORTED_ELF); in ELi_LoadObject()
564 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_NO_MORE_RESOURCE); in ELi_LoadObject()
567 ret_val = elLoadSections( elElfDesc, MYObject, dll_fileid, elf_num); in ELi_LoadObject()
572 ret_val = elLoadSegments( elElfDesc, MYObject); in ELi_LoadObject()
578 ret_val = elLoadSegments( elElfDesc, MYObject); in ELi_LoadObject()
580 ret_val = elLoadSections( elElfDesc, MYObject, dll_fileid, elf_num); in ELi_LoadObject()
586 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_UNSUPPORTED_ELF); in ELi_LoadObject()
592 elElfDesc->CurrentEhdr.e_type); in ELi_LoadObject()
593 ELi_SetResultCode( elElfDesc, MYObject, EL_RESULT_INVALID_ELF); in ELi_LoadObject()
607 static ELResult elLoadSegments( ELDesc* elElfDesc, ELObject* MYObject) in elLoadSegments() argument
613 for( i=0; i<(elElfDesc->CurrentEhdr.e_phnum); i++) { in elLoadSegments()
615 ELi_GetPhdr( elElfDesc, i, &CurrentPhdr); in elLoadSegments()
619 if( ELi_CopySegmentToBuffer( elElfDesc, MYObject, &CurrentPhdr) == NULL) { in elLoadSegments()
627 ELi_SetProcCode( elElfDesc, MYObject, EL_PROC_COPIED); in elLoadSegments()
637 static ELResult elLoadSections( ELDesc* elElfDesc, ELObject* MYObject, u32 dll_fileid, u32 elf_num) in elLoadSections() argument
653 for( i=0; i<(elElfDesc->CurrentEhdr.e_shnum); i++) { in elLoadSections()
654 CurrentShdrEx->next = ELi_Malloc( elElfDesc, MYObject, sizeof(ELShdrEx)); in elLoadSections()
662 if( ELi_ShdrIsDebug( elElfDesc, i) == TRUE) { /*When it is debugging information*/ in elLoadSections()
666 ELi_GetShdr( elElfDesc, i, &(CurrentShdrEx->Shdr)); in elLoadSections()
671 elElfDesc->ShdrEx = DmyShdrEx.next; in elLoadSections()
674 ELi_START_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in elLoadSections()
678 for( i=0; i<(elElfDesc->CurrentEhdr.e_shnum); i++) { in elLoadSections()
680 CurrentShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, i); in elLoadSections()
694 … ELi_CopySectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
702 … ELi_CopySectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
710 … ELi_AllocSectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
718 … ELi_CopySectionToBuffer( elElfDesc, MYObject, &(CurrentShdrEx->Shdr)); in elLoadSections()
724 … ELi_END_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in elLoadSections()
727 …ELOCATIONPROC_AUTO, dll_fileid, elf_num, i, CurrentShdrEx->loaded_adr, (elElfDesc != i_eldesc_sim)… in elLoadSections()
735 ELi_SetProcCode( elElfDesc, MYObject, EL_PROC_COPIED); in elLoadSections()
738 ELi_END_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in elLoadSections()
742 for( i=0; i<(elElfDesc->CurrentEhdr.e_shnum); i++) { in elLoadSections()
744 CurrentShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, i); in elLoadSections()
751 InfoShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, in elLoadSections()
754 if(ELi_RelocateSym( elElfDesc, MYObject, i) == FALSE) in elLoadSections()
755 … return( (ELResult)(elElfDesc->result)); //EL_RESULT_NO_MORE_RESOURCE or EL_RESULT_UNSUPPORTED_ELF in elLoadSections()
768 ELi_GetSent( elElfDesc, i, &(elElfDesc->Rel), offset, sizeof(Elf32_Rel)); in elLoadSections()
769 ELi_GetShdr( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->SymShdr)); in elLoadSections()
770 ELi_GetSent( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->Sym), in elLoadSections()
771 … (u32)(elElfDesc->SymShdr.sh_entsize * ELF32_R_SYM( elElfDesc->Rel.r_info)), sizeof(Elf32_Sym)); in elLoadSections()
772 … ELi_GetStrAdr( elElfDesc, elElfDesc->SymShdr.sh_link, elElfDesc->Sym.st_name, sym_str, 128); in elLoadSections()
774 PRINTDEBUG( "%08x ", elElfDesc->Rel.r_offset); in elLoadSections()
775 PRINTDEBUG( "%08x ", elElfDesc->Rel.r_info); in elLoadSections()
777 PRINTDEBUG( "%08x ", elElfDesc->Sym.st_value); in elLoadSections()
787 InfoShdrEx = ELi_GetShdrExfromList( elElfDesc->ShdrEx, in elLoadSections()
790 if(ELi_RelocateSym( elElfDesc, MYObject, i) == FALSE) in elLoadSections()
804 ELi_GetSent( elElfDesc, i, &(elElfDesc->Rela), offset, sizeof(Elf32_Rel)); in elLoadSections()
805 ELi_GetShdr( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->SymShdr)); in elLoadSections()
806 ELi_GetSent( elElfDesc, CurrentShdrEx->Shdr.sh_link, &(elElfDesc->Sym), in elLoadSections()
807 … (u32)(elElfDesc->SymShdr.sh_entsize * ELF32_R_SYM( elElfDesc->Rela.r_info)), sizeof(Elf32_Sym)); in elLoadSections()
808 … ELi_GetStrAdr( elElfDesc, elElfDesc->SymShdr.sh_link, elElfDesc->Sym.st_name, sym_str, 128); in elLoadSections()
810 PRINTDEBUG( "%08x ", elElfDesc->Rela.r_offset); in elLoadSections()
811 PRINTDEBUG( "%08x ", elElfDesc->Rela.r_info); in elLoadSections()
813 PRINTDEBUG( "%08x ", elElfDesc->Sym.st_value); in elLoadSections()
823 if(ELi_GoPublicGlobalSym( elElfDesc, MYObject, i) == FALSE) in elLoadSections()
829 ELi_FreeSymList( elElfDesc); in elLoadSections()
832 CurrentShdrEx = elElfDesc->ShdrEx; in elLoadSections()
839 elElfDesc->ShdrEx = NULL; in elLoadSections()
855 ELProcess ELi_ResolveAllLibrary( ELDesc* elElfDesc) in ELi_ResolveAllLibrary() argument
866 if( elElfDesc == NULL) { in ELi_ResolveAllLibrary()
869 ObjEnt = elElfDesc->ELObjectStart; in ELi_ResolveAllLibrary()
870 if( (ObjEnt == NULL)||((ObjEnt == elElfDesc->ELStaticObj)&&(ObjEnt->next == NULL))) { in ELi_ResolveAllLibrary()
878 …AdrEnt = elGetAdrEntry( elElfDesc, UnrEnt->sym_str, &ExpObjEnt); /*Search from address tabl… in ELi_ResolveAllLibrary()
883 ret_val = ELi_DoRelocate( elElfDesc, ObjEnt, UnrEnt); /*Resolve symbol*/ in ELi_ResolveAllLibrary()
894 if( elElfDesc != i_eldesc_sim) { in ELi_ResolveAllLibrary()
901 ret_val = ELi_DoRelocate( elElfDesc, ObjEnt, UnrEnt); in ELi_ResolveAllLibrary()
914 ELi_SetProcCode( elElfDesc, NULL, EL_PROC_RELOCATED); in ELi_ResolveAllLibrary()
938 BOOL ELi_Unlink( ELDesc* elElfDesc, ELDlld my_dlld) in ELi_Unlink() argument
946 if( elElfDesc == NULL) { in ELi_Unlink()
951 ELi_SetResultCode( elElfDesc, NULL, EL_RESULT_INVALID_PARAMETER); in ELi_Unlink()
973 ObjEnt = elElfDesc->ELObjectStart; in ELi_Unlink()
995 (void)ELi_FreeVenTbl( elElfDesc, MYObject); /*Deallocate the veneer linked list*/ in ELi_Unlink()
997 ELi_SetProcCode( elElfDesc, MYObject, EL_PROC_NOTHING); in ELi_Unlink()
999 ELi_START_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in ELi_Unlink()
1000 …(void)ELi_UNREGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, file_id, (elElfDesc != i_eldesc_sim… in ELi_Unlink()
1001 ELi_END_REGISTER_RELOCATION_INFO( ISTDRELOCATIONPROC_AUTO, (elElfDesc != i_eldesc_sim)); in ELi_Unlink()
1188 BOOL ELi_Export( ELDesc* elElfDesc, ELAdrEntry* AdrEnt) in ELi_Export() argument
1193 if( elElfDesc == NULL) { in ELi_Export()
1196 if( elElfDesc->ELStaticObj == NULL) { in ELi_Export()
1197 elElfDesc->ELStaticObj = (ELObject*)ELi_Malloc( elElfDesc, NULL, sizeof( ELObject)); in ELi_Export()
1198 if(elElfDesc->ELStaticObj == NULL) { in ELi_Export()
1201 ELi_InitObject( elElfDesc->ELStaticObj); in ELi_Export()
1202 elAddObjEntry( &(elElfDesc->ELObjectStart), elElfDesc->ELStaticObj); in ELi_Export()
1205 if( !(elElfDesc->ELStaticObj->ExportAdrEnt)) { in ELi_Export()
1206 elElfDesc->ELStaticObj->ExportAdrEnt = (ELAdrEntry*)AdrEnt; in ELi_Export()
1208 DmyAdrEnt.next = (ELAdrEntry*)elElfDesc->ELStaticObj->ExportAdrEnt; in ELi_Export()
1238 ELAdrEntry* elGetAdrEntry( ELDesc* elElfDesc, const char* ent_name, ELObject** ExpObjEnt) in elGetAdrEntry() argument
1243 ObjEnt = elElfDesc->ELObjectStart; in elGetAdrEntry()
1263 void* ELi_GetGlobalAdr( ELDesc* elElfDesc, ELDlld my_dlld, const char* ent_name) in ELi_GetGlobalAdr() argument
1269 if( elElfDesc == NULL) { in ELi_GetGlobalAdr()
1274 CurrentAdrEnt = elGetAdrEntry( elElfDesc, ent_name, &DmyObjEnt); in ELi_GetGlobalAdr()
1363 void ELi_SetResultCode( ELDesc* elElfDesc, ELObject* MYObject, ELResult result) in ELi_SetResultCode() argument
1365 if( elElfDesc != NULL) { in ELi_SetResultCode()
1366 elElfDesc->result = (u32)result; in ELi_SetResultCode()
1373 void ELi_SetProcCode( ELDesc* elElfDesc, ELObject* MYObject, ELProcess process) in ELi_SetProcCode() argument
1375 if( elElfDesc != NULL) { in ELi_SetProcCode()
1376 elElfDesc->process = (u32)process; in ELi_SetProcCode()