diff options
Diffstat (limited to 'rtemstoolkit/elftoolchain/libelf/elf_memory.c')
-rw-r--r-- | rtemstoolkit/elftoolchain/libelf/elf_memory.c | 49 |
1 files changed, 2 insertions, 47 deletions
diff --git a/rtemstoolkit/elftoolchain/libelf/elf_memory.c b/rtemstoolkit/elftoolchain/libelf/elf_memory.c index 691beaf..d70f6e0 100644 --- a/rtemstoolkit/elftoolchain/libelf/elf_memory.c +++ b/rtemstoolkit/elftoolchain/libelf/elf_memory.c @@ -24,21 +24,15 @@ * SUCH DAMAGE. */ -#include <sys/cdefs.h> - -#include <ar.h> #include <libelf.h> -#include <string.h> #include "_libelf.h" -LIBELF_VCSID("$Id: elf_memory.c 189 2008-07-20 10:38:08Z jkoshy $"); +ELFTC_VCSID("$Id: elf_memory.c 3013 2014-03-23 06:16:59Z jkoshy $"); Elf * elf_memory(char *image, size_t sz) { - Elf *e; - if (LIBELF_PRIVATE(version) == EV_NONE) { LIBELF_SET_ERROR(SEQUENCE, 0); return (NULL); @@ -49,44 +43,5 @@ elf_memory(char *image, size_t sz) return (NULL); } - if ((e = _libelf_allocate_elf()) == NULL) - return (NULL); - - e->e_cmd = ELF_C_READ; - e->e_rawfile = image; - e->e_rawsize = sz; - -#undef LIBELF_IS_ELF -#define LIBELF_IS_ELF(P) ((P)[EI_MAG0] == ELFMAG0 && \ - (P)[EI_MAG1] == ELFMAG1 && (P)[EI_MAG2] == ELFMAG2 && \ - (P)[EI_MAG3] == ELFMAG3) - - if (sz > EI_NIDENT && LIBELF_IS_ELF(image)) { - _libelf_init_elf(e, ELF_K_ELF); - e->e_class = image[EI_CLASS]; - e->e_byteorder = image[EI_DATA]; - e->e_version = image[EI_VERSION]; - - if (e->e_version > EV_CURRENT) { - e = _libelf_release_elf(e); - LIBELF_SET_ERROR(VERSION, 0); - return (NULL); - } - - if ((e->e_byteorder != ELFDATA2LSB && e->e_byteorder != - ELFDATA2MSB) || (e->e_class != ELFCLASS32 && e->e_class != - ELFCLASS64)) { - e = _libelf_release_elf(e); - LIBELF_SET_ERROR(HEADER, 0); - return (NULL); - } - - } else if (sz >= SARMAG && - strncmp(image, ARMAG, (size_t) SARMAG) == 0) { - _libelf_init_elf(e, ELF_K_AR); - e = _libelf_ar_open(e); - } else - _libelf_init_elf(e, ELF_K_NONE); - - return (e); + return (_libelf_memory((unsigned char *) image, sz, 1)); } |