summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/imxtools/sbtools/elf.c13
-rw-r--r--utils/imxtools/sbtools/elf.h2
2 files changed, 15 insertions, 0 deletions
diff --git a/utils/imxtools/sbtools/elf.c b/utils/imxtools/sbtools/elf.c
index 226057bc19..a0b249570a 100644
--- a/utils/imxtools/sbtools/elf.c
+++ b/utils/imxtools/sbtools/elf.c
@@ -551,6 +551,19 @@ void elf_write_file(struct elf_params_t *params, elf_write_fn_t write,
551 free(strtbl_content); 551 free(strtbl_content);
552} 552}
553 553
554bool elf_guess(elf_read_fn_t read, void *user)
555{
556 /* read header */
557 Elf32_Ehdr ehdr;
558 if(!read(user, 0, &ehdr, sizeof(ehdr)))
559 return false;
560 /* basic checks */
561 return ehdr.e_ident[EI_MAG0] == ELFMAG0 && ehdr.e_ident[EI_MAG1] == ELFMAG1 &&
562 ehdr.e_ident[EI_MAG2] == ELFMAG2 && ehdr.e_ident[EI_MAG3] == ELFMAG3 &&
563 ehdr.e_ehsize == sizeof(ehdr) && ehdr.e_phentsize == sizeof(Elf32_Phdr) &&
564 ehdr.e_shentsize == sizeof(Elf32_Shdr);
565}
566
554bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read, 567bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read,
555 elf_printf_fn_t printf, void *user) 568 elf_printf_fn_t printf, void *user)
556{ 569{
diff --git a/utils/imxtools/sbtools/elf.h b/utils/imxtools/sbtools/elf.h
index 403bab0712..cabe764e45 100644
--- a/utils/imxtools/sbtools/elf.h
+++ b/utils/imxtools/sbtools/elf.h
@@ -94,6 +94,8 @@ bool elf_get_start_addr(struct elf_params_t *params, uint32_t *addr);
94int elf_get_nr_sections(struct elf_params_t *params); 94int elf_get_nr_sections(struct elf_params_t *params);
95void elf_release(struct elf_params_t *params); 95void elf_release(struct elf_params_t *params);
96 96
97bool elf_guess(elf_read_fn_t read, void *user);
98
97/* standard implementation of read/write/printf functions 99/* standard implementation of read/write/printf functions
98 * with user being a FILE* pointer */ 100 * with user being a FILE* pointer */
99void elf_std_printf(void *user, bool error, const char *fmt, ...); 101void elf_std_printf(void *user, bool error, const char *fmt, ...);