void* SharedLibraryImpl::findSymbolImpl(const std::string& name) { poco_assert (_moduleId != 0); FastMutex::ScopedLock lock(_mutex); MODULE_INFO mi; if (!moduleInfoGet(_moduleId, &mi)) return 0; SymLookup symLookup; symLookup.name = name.c_str(); symLookup.group = mi.group; symLookup.addr = 0; symEach(sysSymTbl, reinterpret_cast<FUNCPTR>(lookupFunc), reinterpret_cast<int>(&symLookup)); return symLookup.addr; }
void * dbgsysFindLibraryEntry(void *handle, const char *name) { MODULE_ID mid; MODULE_INFO mInfo; struct CallbackInfo info; SYMBOL *sym; mid = (MODULE_ID) handle; if (moduleInfoGet(mid, &mInfo) == ERROR) return NULL; info.name = (char *) name; info.group = (UINT16) mInfo.group; sym = symEach(sysSymTbl, (FUNCPTR) &findSymbolCB, (int) &info); if (sym == NULL) return NULL; return info.val; }
static int module_list_proc(MODULE_ID id, int args) { MODULE_INFO info; MemoryMap * map = (MemoryMap *)args; memset(&info, 0, sizeof(info)); if (moduleInfoGet(id, &info) == OK) { char * file = id->nameWithPath; if (info.segInfo.textAddr != NULL && info.segInfo.textSize > 0) { add_map_region(map, info.segInfo.textAddr, info.segInfo.textSize, MM_FLAG_R | MM_FLAG_X, file, ".text"); } if (info.segInfo.dataAddr != NULL && info.segInfo.dataSize > 0) { add_map_region(map, info.segInfo.dataAddr, info.segInfo.dataSize, MM_FLAG_R | MM_FLAG_W, file, ".data"); } if (info.segInfo.bssAddr != NULL && info.segInfo.bssSize > 0) { add_map_region(map, info.segInfo.bssAddr, info.segInfo.bssSize, MM_FLAG_R | MM_FLAG_W, file, ".bss"); } } return 0; }
/****************************************************************************** ** Function: CFE_PSP_GetCFETextSegmentInfo ** ** Purpose: ** This function returns the start and end address of the CFE text segment. ** It may not be implemented on all architectures. ** ** Arguments: ** (none) ** ** Return: ** (none) */ int32 CFE_PSP_GetCFETextSegmentInfo(void *PtrToCFESegment, uint32 *SizeOfCFESegment) { int32 return_code; uint32 Address; STATUS status; MODULE_ID cFEModuleId; MODULE_INFO cFEModuleInfo; if ( SizeOfCFESegment == NULL ) { return_code = CFE_PSP_ERROR; } else { cFEModuleId = moduleFindByName(CFE_MODULE_NAME); if ( cFEModuleId == NULL ) { return_code = CFE_PSP_ERROR; } else { status = moduleInfoGet(cFEModuleId, &cFEModuleInfo); if ( status != ERROR ) { Address = (uint32)(cFEModuleInfo.segInfo.textAddr); memcpy(PtrToCFESegment,&Address,sizeof(PtrToCFESegment)); *SizeOfCFESegment = (uint32)(cFEModuleInfo.segInfo.textSize); return_code = CFE_PSP_SUCCESS; } else { return_code = CFE_PSP_SUCCESS; } } } return(return_code); }