Lines Matching refs:dso

91     DynSharedObj *dso = NULL;

93 LOS_DL_LIST_FOR_EACH_ENTRY(dso, &g_dynSharedObjLink, DynSharedObj, dsoNode) {
94 if (!strcmp(fileName, dso->fileName)) {
95 ++dso->ref;
96 return dso;
222 DynSharedObj *dso = NULL;
235 dso = (DynSharedObj *)LOS_MemAlloc(OS_SYS_MEM_ADDR, allocSize);
236 if (dso == NULL) {
237 PRINT_ERR("failed to alloc for dso\n");
241 (VOID)memset_s(dso, allocSize, 0, allocSize);
243 dso->dlInfo = (DynLinkInfo *)LOS_MemAlloc(OS_SYS_MEM_ADDR, sizeof(DynLinkInfo));
244 if (dso->dlInfo == NULL) {
245 LOS_MemFree(OS_SYS_MEM_ADDR, dso);
250 (VOID)memset_s(dso->dlInfo, sizeof(DynLinkInfo), 0, sizeof(DynLinkInfo));
258 dso->fd = open(fileName, O_RDONLY);
259 if (dso->fd < 0) {
264 ret = OsReadEhdr(dso->fd, fileLen, dso->dlInfo);
270 ret = OsReadPhdrs(dso->fd, fileLen, dso->dlInfo);
276 (void)strcpy_s(dso->buf, nameLen + 1, fileName);
277 dso->fileName = dso->buf;
278 dso->ref = 1;
279 dso->pool = (pool ? pool : OS_SYS_MEM_ADDR);
280 LOS_ListInit(&dso->dsoNode);
282 return dso;
285 close(dso->fd);
287 LOS_MemFree(OS_SYS_MEM_ADDR, dso->dlInfo);
288 LOS_MemFree(OS_SYS_MEM_ADDR, dso);
350 STATIC INT32 OsLoadELFFile(DynSharedObj *dso, UINT32 boundary)
352 DynLinkInfo *dlInfo = dso->dlInfo;
355 UINTPTR loadBase = dso->loadBase;
369 loadAddr = OsDoLoadFile(dso->fd, (vAddr + loadBase), elfPhdrTemp, boundary);
384 STATIC INT32 OsLoadLibrary(DynSharedObj *dso)
390 loadSize = OsReserveSpace(dso->dlInfo, &boundary);
396 dso->loadBase = (UINTPTR)LOS_MemAllocAlign(dso->pool, loadSize, boundary);
397 if (dso->loadBase == 0) {
402 ret = OsLoadELFFile(dso, boundary);
404 LOS_MemFree(dso->pool, (VOID *)dso->loadBase);
412 STATIC INT32 OsGetDynBase(DynSharedObj *dso)
414 DynLinkInfo *dlInfo = dso->dlInfo;
423 dlInfo->dynBase = dso->loadBase + elfPhdrTemp->p_vaddr;
430 STATIC INT32 OsParseDynamic(DynSharedObj *dso)
433 DynLinkInfo *dlInfo = dso->dlInfo;
445 dlInfo->hashTab = (UINT32 *)(dso->loadBase + dyn->d_un.d_ptr);
448 dlInfo->symTab = (LD_ELF_SYM *)(dso->loadBase + dyn->d_un.d_ptr);
451 dlInfo->symStrings = (CHAR *)(dso->loadBase + dyn->d_un.d_ptr);
454 relInfoTab->rel.relTab = dso->loadBase + dyn->d_un.d_ptr;
461 relInfoTab->rela.relTab = dso->loadBase + dyn->d_un.d_ptr;
468 relInfoTab->jmpRel.relTab = dso->loadBase + dyn->d_un.d_ptr;
559 STATIC UINTPTR OsFindSym(const DynSharedObj *dso, INT32 symIdx)
561 DynLinkInfo *dlInfo = dso->dlInfo;
572 return dso->loadBase + symInDso->st_value;
576 PRINT_ERR("failed to relocate %s, symbol: %s not found\n", dso->fileName, symStr);
581 STATIC INT32 OsDoReloc(const DynSharedObj *dso, INT32 type, UINTPTR relocAddr, UINT32 addend, UINTPTR symAddr)
594 *(UINTPTR *)relocAddr = dso->loadBase + ((addend != 0) ? addend : *(UINTPTR *)relocAddr);
597 PRINT_ERR("failed to relocate %s, unsupported reloc type: %d\n", dso->fileName, type);
604 STATIC INT32 OsDoRelocSyms(DynSharedObj *dso, RelocInfo *relInfo)
622 symAddr = OsFindSym(dso, symIdx);
628 relocAddr = dso->loadBase + relTab[0];
630 ret = OsDoReloc(dso, type, relocAddr, addend, symAddr);
639 STATIC INT32 OsRelocSyms(DynSharedObj *dso)
641 DynLinkInfo *dlInfo = dso->dlInfo;
651 ret = OsDoRelocSyms(dso, relInfo);
660 STATIC INT32 OsDoDynLink(DynSharedObj *dso)
664 ret = OsGetDynBase(dso);
670 ret = OsParseDynamic(dso);
675 ret = OsRelocSyms(dso);
683 STATIC VOID OsDeLoadInit(DynSharedObj *dso)
685 LOS_MemFree(OS_SYS_MEM_ADDR, dso->dlInfo->elfPhdr);
686 dso->dlInfo->elfPhdr = NULL;
687 close(dso->fd);
690 STATIC VOID OsGetInitFini(DynSharedObj *dso)
693 DynLinkInfo *dlInfo = dso->dlInfo;
694 InitFiniTab *initFiniTab = &dso->initFiniTab;
722 STATIC VOID OsDoInit(DynSharedObj *dso)
724 InitFiniTab *initFiniTab = &dso->initFiniTab;
729 OsGetInitFini(dso);
731 initFunc = (INIT_FINI_FUNC)(dso->loadBase + initFiniTab->init.func);
740 func = (UINTPTR *)(dso->loadBase + initFiniTab->init.array);
751 DynSharedObj *dso = NULL;
760 dso = OsIsPreLoaded(fileName);
761 if (dso != NULL) {
763 return dso;
766 dso = OsLoadInit(fileName, pool);
767 if (dso == NULL) {
772 ret = OsLoadLibrary(dso);
778 ret = OsDoDynLink(dso);
784 OsDoInit(dso);
786 LOS_ListAdd(&g_dynSharedObjLink, &dso->dsoNode);
788 OsDeLoadInit(dso);
790 return dso;
793 (VOID)LOS_MemFree(dso->pool, (VOID *)dso->loadBase);
795 close(dso->fd);
797 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dso->dlInfo->elfPhdr);
798 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dso->dlInfo);
799 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dso);
805 DynSharedObj *dso = NULL;
807 LOS_DL_LIST_FOR_EACH_ENTRY(dso, &g_dynSharedObjLink, DynSharedObj, dsoNode) {
808 if (handle == dso) {
809 return dso;
819 DynSharedObj *dso = NULL;
827 dso = OsCheckHandle(handle);
828 if (dso == NULL) {
833 sym = OsFindSymInDso(dso->dlInfo, name);
840 symAddr = (VOID *)(dso->loadBase + sym->st_value);
850 STATIC VOID OsDoFini(DynSharedObj *dso)
852 InitFiniTab *initFiniTab = &dso->initFiniTab;
859 func = (UINTPTR *)(dso->loadBase + initFiniTab->fini.array) + funcNum;
868 finiFunc = (INIT_FINI_FUNC)(dso->loadBase + initFiniTab->fini.func);
875 DynSharedObj *dso = NULL;
882 dso = OsCheckHandle(handle);
883 if (dso == NULL) {
888 if (dso->ref > 1) {
889 --dso->ref;
894 OsDoFini(dso);
896 LOS_ListDelete(&dso->dsoNode);
899 (VOID)LOS_MemFree(dso->pool, (VOID *)dso->loadBase);
900 if (dso->dlInfo != NULL) {
901 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dso->dlInfo->elfPhdr);
903 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dso->dlInfo);
904 (VOID)LOS_MemFree(OS_SYS_MEM_ADDR, dso);