Skip to content

Commit

Permalink
Merge pull request #148 from nasa/integration-candidate
Browse files Browse the repository at this point in the history
elf2cfetbl Integration candidate: Equuleus-rc1+dev13
  • Loading branch information
dzbaker authored Jul 2, 2024
2 parents 2953d8d + 355c619 commit fccae58
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 17 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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 <https://github.com/nasa/elf2cfetbl/pull/147>, <https://github.com/nasa/elf2cfetbl/pull/124>, <https://github.com/nasa/elf2cfetbl/pull/125>, and <https://github.com/nasa/elf2cfetbl/pull/127>

## Development Build: equuleus-rc1+dev10
- updating ELF2CFETBL to use new versioning system
- move scripts for table building to elf2cfetbl tool
Expand Down
44 changes: 29 additions & 15 deletions elf2cfetbl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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);
}
Expand Down Expand Up @@ -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)) &&
Expand All @@ -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)
{
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion elf2cfetbl_version.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
16 changes: 16 additions & 0 deletions scripts/add_cfe_tables_impl.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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="\"$<TARGET_FILE:${TABLE_LIBNAME}>\""
Expand Down
2 changes: 2 additions & 0 deletions scripts/table_rule_template.d.in
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
2 changes: 1 addition & 1 deletion scripts/tabletool_rule.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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)/$(<)"

0 comments on commit fccae58

Please sign in to comment.