Skip to content

Commit

Permalink
Fix nasa#111, do not assume a specific core name
Browse files Browse the repository at this point in the history
Improve the module ID lookup when getting the CFE core text segment info.

- Ideally get the ID directly from what was loaded by startCfeCore
- As a fallback use the actual CFE core name from the configdata

Do not use a hardcoded name.
  • Loading branch information
jphickey committed Oct 14, 2020
1 parent e7af6d3 commit 8e84345
Showing 1 changed file with 35 additions and 10 deletions.
45 changes: 35 additions & 10 deletions fsw/mcp750-vxworks/src/cfe_psp_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,6 @@

#include <target_config.h>

/*
** Define the cFE Core loadable module name
*/
#define CFE_MODULE_NAME_DEFAULT "cfe-core.o"

static char CFE_MODULE_NAME[] = CFE_MODULE_NAME_DEFAULT;


/*
** External Declarations
*/
Expand Down Expand Up @@ -505,14 +497,47 @@ int32 CFE_PSP_GetCFETextSegmentInfo(cpuaddr *PtrToCFESegment, uint32 *SizeOfCFES
STATUS status;
MODULE_ID cFEModuleId;
MODULE_INFO cFEModuleInfo;
cpuaddr GetModuleIdAddr;
MODULE_ID (*GetModuldIdFunc)(void);



if ( SizeOfCFESegment == NULL )
if ( PtrToCFESegment == NULL || SizeOfCFESegment == NULL )
{
return_code = CFE_PSP_ERROR;
}
else
{
cFEModuleId = moduleFindByName(CFE_MODULE_NAME);
/*
* First attempt to call a function called GetCfeCoreModuleID().
*
* If CFE core was started via the "startCfeCore" routine, this
* provides the actual module ID that was loaded by that routine,
* no matter what it is actually named. This is provided by the
* support/integration code compiled directly into the VxWorks kernel
* image.
*
* The prototype should be:
* MODULE_ID GetCfeCoreModuleID(void);
*/
cFEModuleId = NULL;
GetModuleIdAddr = 0;
return_code = OS_SymbolLookup(&GetModuleIdAddr, "GetCfeCoreModuleID");
if ( return_code == OS_SUCCESS && GetModuleIdAddr != 0 )
{
GetModuldIdFunc = (MODULE_ID (*)(void))GetModuleIdAddr;
cFEModuleId = GetModuldIdFunc();
}

/*
* If the above did not yield a valid module ID,
* then attempt to find the module ID by name.
* This assumes the core executable name as built by CMake
*/
if ( cFEModuleId == NULL )
{
cFEModuleId = moduleFindByName((char *)GLOBAL_CONFIGDATA.Default_CoreFilename);
}

if ( cFEModuleId == NULL )
{
Expand Down

0 comments on commit 8e84345

Please sign in to comment.