Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

elf2cfetbl Integration candidate: Equuleus-rc1+dev13 #148

Merged
merged 9 commits into from
Jul 2, 2024
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 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 @@
{
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)

Check warning

Code scanning / CodeQL

Side effect in a Boolean expression Warning

This Boolean expression is not side-effect free.
{
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 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 @@
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 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 @@
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)/$(<)"
Loading