diff options
Diffstat (limited to 'utils/imxtools')
-rw-r--r-- | utils/imxtools/sbtools/elf.c | 5 | ||||
-rw-r--r-- | utils/imxtools/sbtools/misc.c | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/utils/imxtools/sbtools/elf.c b/utils/imxtools/sbtools/elf.c index 5d5e1a786c..adf876e5c7 100644 --- a/utils/imxtools/sbtools/elf.c +++ b/utils/imxtools/sbtools/elf.c | |||
@@ -733,7 +733,10 @@ bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read, | |||
733 | sym->name = strdup(&symstrtab[symdata[j].st_name]); | 733 | sym->name = strdup(&symstrtab[symdata[j].st_name]); |
734 | sym->addr = symdata[j].st_value; | 734 | sym->addr = symdata[j].st_value; |
735 | sym->size = symdata[j].st_size; | 735 | sym->size = symdata[j].st_size; |
736 | sym->section = strdup(&strtab[shdr[symdata[j].st_shndx].sh_name]); | 736 | if(symdata[j].st_shndx == SHN_ABS) |
737 | sym->section = NULL; | ||
738 | else | ||
739 | sym->section = strdup(&strtab[shdr[symdata[j].st_shndx].sh_name]); | ||
737 | switch(type) | 740 | switch(type) |
738 | { | 741 | { |
739 | case STT_FUNC: sym->type = ESYT_FUNC; break; | 742 | case STT_FUNC: sym->type = ESYT_FUNC; break; |
diff --git a/utils/imxtools/sbtools/misc.c b/utils/imxtools/sbtools/misc.c index 68c769808b..71b3cb600b 100644 --- a/utils/imxtools/sbtools/misc.c +++ b/utils/imxtools/sbtools/misc.c | |||
@@ -308,7 +308,7 @@ void color(color_t c) | |||
308 | 308 | ||
309 | enum sb_version_guess_t guess_sb_version(const char *filename) | 309 | enum sb_version_guess_t guess_sb_version(const char *filename) |
310 | { | 310 | { |
311 | #define ret(x) do { fclose(f); return x; } while(0) | 311 | #define ret(x) do { if(f) fclose(f); return x; } while(0) |
312 | FILE *f = fopen(filename, "rb"); | 312 | FILE *f = fopen(filename, "rb"); |
313 | if(f == NULL) | 313 | if(f == NULL) |
314 | ret(SB_VERSION_ERR); | 314 | ret(SB_VERSION_ERR); |