예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
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);
}