diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cab31c..79ddf8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Development Build: equuleus-rc1+dev22 +- Include PRID and SCID in table files +- Check return from chmod +- Check return value of stat() +- Move variables declared mid-function to the top +- See , , , and + ## Development Build: equuleus-rc1+dev10 - updating ELF2CFETBL to use new versioning system - move scripts for table building to elf2cfetbl tool diff --git a/elf2cfetbl.c b/elf2cfetbl.c index 9ceb94a..5575437 100644 --- a/elf2cfetbl.c +++ b/elf2cfetbl.c @@ -1433,6 +1433,7 @@ int32 OpenSrcFile(void) int32 OpenDstFile(void) { struct stat dststat; + int32 Status = SUCCESS; /* Check to see if output file can be opened and written */ DstFileDesc = fopen(DstFilename, "w"); @@ -1448,8 +1449,20 @@ int32 OpenDstFile(void) { if (Verbose) printf("%s: Destination file permissions after open = 0x%X\n", DstFilename, dststat.st_mode); - chmod(DstFilename, dststat.st_mode & ~(S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH)); - stat(DstFilename, &dststat); + + Status = chmod(DstFilename, dststat.st_mode & ~(S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH)); + + if (Status != 0) + { + printf("%s: Error while attempting to modify file permissions\n", DstFilename); + return FAILED; + } + + if (stat(DstFilename, &dststat) != 0) + { + printf("%s: Error retrieving file status after chmod\n", DstFilename); + } + if (Verbose) printf("%s: Destination file permissions after chmod = 0x%X\n", DstFilename, dststat.st_mode); } @@ -2260,9 +2273,10 @@ int32 GetStringFromMap(char *Result, ElfStrMap *Map, int32 Key) int32 GetTblDefInfo(void) { - int32 Status = SUCCESS; - uint32 SeekOffset = 0; - int32 NumDefsRead = 0; + int32 Status = SUCCESS; + uint32 SeekOffset = 0; + int32 NumDefsRead = 0; + uint64_t calculated_offset; /* Read the data to be used to format the CFE File and Table Headers */ if ((get_st_size(SymbolPtrs[TblDefSymbolIndex]) != sizeof(CFE_TBL_FileDef_t)) && @@ -2275,8 +2289,8 @@ int32 GetTblDefInfo(void) else { /* fseek expects a long int, sh_offset and st_value are uint64 for elf64 */ - uint64_t calculated_offset = get_sh_offset(SectionHeaderPtrs[get_st_shndx(SymbolPtrs[TblDefSymbolIndex])]) + - get_st_value(SymbolPtrs[TblDefSymbolIndex]); + calculated_offset = get_sh_offset(SectionHeaderPtrs[get_st_shndx(SymbolPtrs[TblDefSymbolIndex])]) + + get_st_value(SymbolPtrs[TblDefSymbolIndex]); SeekOffset = (uint32_t)(calculated_offset); if (SeekOffset != calculated_offset) { @@ -2331,11 +2345,12 @@ int32 GetTblDefInfo(void) int32 LocateAndReadUserObject(void) { - int32 Status = SUCCESS; - int32 i = 0; - int32 j = 0; - uint32 SeekOffset = 0; - uint8 AByte; + int32 Status = SUCCESS; + int32 i = 0; + int32 j = 0; + uint32 SeekOffset = 0; + uint8 AByte; + uint64_t calculated_offset; /* Search the symbol table for the user defined object */ if (Verbose) @@ -2428,9 +2443,8 @@ int32 LocateAndReadUserObject(void) else { /* Locate data associated with symbol */ - uint64_t calculated_offset = - get_sh_offset(SectionHeaderPtrs[get_st_shndx(SymbolPtrs[UserObjSymbolIndex])]) + - get_st_value(SymbolPtrs[UserObjSymbolIndex]); + calculated_offset = get_sh_offset(SectionHeaderPtrs[get_st_shndx(SymbolPtrs[UserObjSymbolIndex])]) + + get_st_value(SymbolPtrs[UserObjSymbolIndex]); SeekOffset = (uint32_t)(calculated_offset); if (SeekOffset != calculated_offset) { diff --git a/elf2cfetbl_version.h b/elf2cfetbl_version.h index fa0dca3..5e2b90e 100644 --- a/elf2cfetbl_version.h +++ b/elf2cfetbl_version.h @@ -28,7 +28,7 @@ /* * Development Build Macro Definitions */ -#define ELF2CFETBL_BUILD_NUMBER 10 /*!< @brief Number of commits since baseline */ +#define ELF2CFETBL_BUILD_NUMBER 22 /*!< @brief Number of commits since baseline */ #define ELF2CFETBL_BUILD_BASELINE "equuleues-rc1" /*!< @brief Development Build: git tag that is the base for the current */ #define ELF2CFETBL_BUILD_DEV_CYCLE "equuleus-rc2" /**< @brief Development: Release name for current development cycle */ #define ELF2CFETBL_BUILD_CODENAME "Equuleus" /**< @brief: Development: Code name for the current build */ diff --git a/scripts/add_cfe_tables_impl.cmake b/scripts/add_cfe_tables_impl.cmake index 845e203..713bd14 100644 --- a/scripts/add_cfe_tables_impl.cmake +++ b/scripts/add_cfe_tables_impl.cmake @@ -32,8 +32,24 @@ function(do_add_cfe_tables_impl TABLE_FQNAME) set(TABLE_GENSCRIPT "${CFS_TABLETOOL_SCRIPT_DIR}/generate_elf_table_rules.cmake") set(TABLE_LIBNAME "tblobj_${ADDTBL_ARG_TARGET_NAME}_${TABLE_FQNAME}") + # determine processor ID and spacecraft ID to use for table. + # If these are not defined, pass 0 instead of a blank (elf2cfetbl will error on non-integer) + if (DEFINED ${ADDTBL_ARG_TARGET_NAME}_PROCESSORID) + set(TABLE_PRID ${${ADDTBL_ARG_TARGET_NAME}_PROCESSORID}) + else() + set(TABLE_PRID 0) + endif() + + if (DEFINED SPACECRAFT_ID) + set(TABLE_SCID ${SPACECRAFT_ID}) + else() + set(TABLE_SCID 0) + endif() + set(TABLE_CMD_OPTS -DTEMPLATE_FILE="${TEMPLATE_FILE}" + -DTARGET_SCID="${TABLE_SCID}" + -DTARGET_PRID="${TABLE_PRID}" -DAPP_NAME="${ADDTBL_ARG_APP_NAME}" -DTARGET_NAME="${ADDTBL_ARG_TARGET_NAME}" -DARCHIVE_FILE="\"$\"" diff --git a/scripts/table_rule_template.d.in b/scripts/table_rule_template.d.in index 4fa6648..e3c70af 100644 --- a/scripts/table_rule_template.d.in +++ b/scripts/table_rule_template.d.in @@ -2,6 +2,8 @@ cfetables: ${TABLE_BINARY} +${TABLE_BINARY}: CFE_TABLE_SCID := ${TARGET_SCID} +${TABLE_BINARY}: CFE_TABLE_PRID := ${TARGET_PRID} ${TABLE_BINARY}: CFE_TABLE_CPUNAME := ${TARGET_NAME} ${TABLE_BINARY}: CFE_TABLE_APPNAME := ${APP_NAME} ${TABLE_BINARY}: CFE_TABLE_BASENAME := ${TABLE_NAME} diff --git a/scripts/tabletool_rule.mk b/scripts/tabletool_rule.mk index 6b34c75..691b985 100644 --- a/scripts/tabletool_rule.mk +++ b/scripts/tabletool_rule.mk @@ -12,4 +12,4 @@ cfetables: # As a workaround, $CURDIR is used. staging/%.tbl: @mkdir -pv "$(dir $(@))" - cd "$(dir $(@))" && $(TBLTOOL) $(TBLTOOL_FLAGS) "$(CURDIR)/$(<)" + cd "$(dir $(@))" && $(TBLTOOL) -p$(CFE_TABLE_PRID) -s$(CFE_TABLE_SCID) "$(CURDIR)/$(<)"