Skip to content

Commit

Permalink
Merge pull request #138 from nasa/integration-candidate
Browse files Browse the repository at this point in the history
elf2cfetbl Integration candidate: Caelum-rc4+dev57
  • Loading branch information
dzbaker authored Sep 1, 2023
2 parents 46b29f8 + 4020dd7 commit 15314d6
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 58 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## Development Build: v3.3.0-rc4+dev36
- Adds CheckStatus helper functions
- Reduce cyclomatic complexity of GetElfHeader
- See <https://github.com/nasa/elf2cfetbl/pull/137> and <https://github.com/nasa/elf2cfetbl/pull/136>

## Development Build: v3.3.0-rc4+dev30
- Remove C++-style comments
- See <https://github.com/nasa/elf2cfetbl/pull/119>
Expand Down
110 changes: 53 additions & 57 deletions elf2cfetbl.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ int32 GetSrcFilename(void);
int32 GetDstFilename(void);
int32 OpenSrcFile(void);
int32 OpenDstFile(void);
int32 checkELFFileMagicNumber(void);
int32 GetElfHeader(void);
void SwapElfHeader(void);
int32 GetSectionHeader(int32 SectionIndex, union Elf_Shdr *SectionHeader);
Expand Down Expand Up @@ -596,6 +597,24 @@ uint16_t get_st_shndx(const union Elf_Sym *Symbol)
}
}

/* Check status helper functions */
void CheckStatusAndExit(int32 status)
{
if (status != SUCCESS)
{
exit(status);
}
}

void CheckStatusCleanupAndExit(int32 status)
{
if (status != SUCCESS)
{
FreeMemoryAllocations();
exit(status);
}
}

/**
*
*/
Expand All @@ -606,30 +625,26 @@ int main(int argc, char *argv[])
int32 i = 0;

Status = ProcessCmdLineOptions(argc, argv);
if (Status != SUCCESS)
return Status;
CheckStatusAndExit(Status);

if (ReportVersion)
OutputVersionInfo();

Status = GetSrcFilename();
if (OutputHelp)
OutputHelpInfo();
if (Status != SUCCESS)
return Status;

Status = GetSrcFilename();
CheckStatusAndExit(Status);

Status = OpenSrcFile();
if (Status != SUCCESS)
return Status;
CheckStatusAndExit(Status);

Status = GetElfHeader();
if (Status != SUCCESS)
return Status;
CheckStatusAndExit(Status);

/* Get the string section header first */
Status = GetSectionHeader(get_e_shstrndx(&ElfHeader), &SectionHeaderStringTable);
if (Status != SUCCESS)
return Status;
CheckStatusCleanupAndExit(Status);

if (TargetWordsizeIs32Bit)
{
Expand All @@ -642,21 +657,13 @@ int main(int argc, char *argv[])

/* Allocate memory for all of the ELF object file section headers */
Status = AllocateSectionHeaders();
if (Status != SUCCESS)
{
FreeMemoryAllocations();
return Status;
}
CheckStatusCleanupAndExit(Status);

/* Read in each section header from input file */
for (i = 0; i < get_e_shnum(&ElfHeader); i++)
{
Status = GetSectionHeader(i, SectionHeaderPtrs[i]);
if (Status != SUCCESS)
{
FreeMemoryAllocations();
return Status;
}
CheckStatusCleanupAndExit(Status);
}

if (StringTableDataOffset == 0)
Expand All @@ -667,21 +674,13 @@ int main(int argc, char *argv[])

/* Allocate memory for all of the symbol table entries */
Status = AllocateSymbols();
if (Status != SUCCESS)
{
FreeMemoryAllocations();
return Status;
}
CheckStatusCleanupAndExit(Status);

/* Read in each symbol table entry */
for (i = 0; i < NumSymbols; i++)
{
Status = GetSymbol(i, SymbolPtrs[i]);
if (Status != SUCCESS)
{
FreeMemoryAllocations();
return Status;
}
CheckStatusCleanupAndExit(Status);
}

if (TblDefSymbolIndex == -1)
Expand All @@ -693,26 +692,16 @@ int main(int argc, char *argv[])

/* Read in the definition of the table file */
Status = GetTblDefInfo();
if (Status != SUCCESS)
{
FreeMemoryAllocations();
return Status;
}
CheckStatusCleanupAndExit(Status);

Status = GetDstFilename();
if (Status != SUCCESS)
return Status;
CheckStatusAndExit(Status);

Status = OpenDstFile();
if (Status != SUCCESS)
return Status;
CheckStatusAndExit(Status);

Status = LocateAndReadUserObject();
if (Status != SUCCESS)
{
FreeMemoryAllocations();
return Status;
}
CheckStatusCleanupAndExit(Status);

Status = OutputDataToTargetFile();

Expand Down Expand Up @@ -1460,6 +1449,18 @@ int32 OpenDstFile(void)
return SUCCESS;
}

/**
*
*/

int32 checkELFFileMagicNumber(void)
{
if (get_e_ident(&ElfHeader, EI_MAG0) != ELFMAG0 || get_e_ident(&ElfHeader, EI_MAG1) != ELFMAG1 ||
get_e_ident(&ElfHeader, EI_MAG2) != ELFMAG2 || get_e_ident(&ElfHeader, EI_MAG3) != ELFMAG3)
return FAILED;
return SUCCESS;
}

/**
*
*/
Expand Down Expand Up @@ -1493,20 +1494,15 @@ int32 GetElfHeader(void)
}

if (Verbose)
printf("ELF Header:\n");
if (Verbose)
printf(" e_ident[EI_MAG0..3] = 0x%02x,%c%c%c\n", get_e_ident(&ElfHeader, EI_MAG0),
get_e_ident(&ElfHeader, EI_MAG1), get_e_ident(&ElfHeader, EI_MAG2), get_e_ident(&ElfHeader, EI_MAG3));
{
printf("ELF Header:\n"
" e_ident[EI_MAG0..3] = 0x%02x,%c%c%c\n",
get_e_ident(&ElfHeader, EI_MAG0), get_e_ident(&ElfHeader, EI_MAG1), get_e_ident(&ElfHeader, EI_MAG2),
get_e_ident(&ElfHeader, EI_MAG3));
}

/* Verify the ELF file magic number */
if (get_e_ident(&ElfHeader, EI_MAG0) != ELFMAG0)
Status = FAILED;
if (get_e_ident(&ElfHeader, EI_MAG1) != ELFMAG1)
Status = FAILED;
if (get_e_ident(&ElfHeader, EI_MAG2) != ELFMAG2)
Status = FAILED;
if (get_e_ident(&ElfHeader, EI_MAG3) != ELFMAG3)
Status = FAILED;
Status = checkELFFileMagicNumber();

if (Status == FAILED)
{
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 30 /*!< @brief Number of commits since baseline */
#define ELF2CFETBL_BUILD_NUMBER 36 /*!< @brief Number of commits since baseline */
#define ELF2CFETBL_BUILD_BASELINE \
"v3.3.0-rc4" /*!< @brief Development Build: git tag that is the base for the current */

Expand Down

0 comments on commit 15314d6

Please sign in to comment.