diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index b07884a..8e16994 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -50,10 +50,14 @@ void *fdt; int ret = 0; - elf = elf_load_image(data->os_file); + elf = elf_open(data->os_file); if (IS_ERR(elf)) return PTR_ERR(elf); + ret = elf_load(elf); + if (ret) + goto bootm_elf_done; + fdt = bootm_get_devicetree(data); if (IS_ERR(fdt)) { ret = PTR_ERR(fdt); @@ -76,7 +80,7 @@ ret = -EINVAL; bootm_elf_done: - elf_release_image(elf); + elf_close(elf); free(fdt); return ret; diff --git a/common/elf.c b/common/elf.c index 1bcaafe..af22be3 100644 --- a/common/elf.c +++ b/common/elf.c @@ -285,23 +285,17 @@ return ERR_PTR(ret); } -struct elf_image *elf_load_image(const char *filename) +struct elf_image *elf_open(const char *filename) { - int ret; - struct elf_image *elf; - - elf = elf_check_init(filename); - if (IS_ERR(elf)) - return elf; - - ret = load_elf_image_segments(elf); - if (ret) - return ERR_PTR(ret); - - return elf; + return elf_check_init(filename); } -void elf_release_image(struct elf_image *elf) +int elf_load(struct elf_image *elf) +{ + return load_elf_image_segments(elf); +} + +void elf_close(struct elf_image *elf) { elf_release_regions(elf); diff --git a/include/elf.h b/include/elf.h index f1a80a2..7970fd2 100644 --- a/include/elf.h +++ b/include/elf.h @@ -414,8 +414,9 @@ return elf->high_addr - elf->low_addr; } -struct elf_image *elf_load_image(const char *filename); -void elf_release_image(struct elf_image *elf); +struct elf_image *elf_open(const char *filename); +void elf_close(struct elf_image *elf); +int elf_load(struct elf_image *elf); #define ELF_GET_FIELD(__s, __field, __type) \ static inline __type elf_##__s##_##__field(struct elf_image *elf, void *arg) { \