X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=src%2Fmodelops%2FfromFile.c;h=85afe20165f1283092a139706acc84a77e578c93;hb=5af52fe4fc36c1a355f4bfad58f80f52f822f768;hp=23105e60a76f541a4dc251bca53c0dfa4f0a69b1;hpb=602f9247d9fe8ce4625147d0da105a43c4d869a2;p=centaur.git diff --git a/src/modelops/fromFile.c b/src/modelops/fromFile.c index 23105e6..85afe20 100644 --- a/src/modelops/fromFile.c +++ b/src/modelops/fromFile.c @@ -16,9 +16,8 @@ static char* symstr(ElfuScn *symtab, size_t off) } -static ElfuSymtab* symtabFromScn32(ElfuScn *ms, ElfuScn**origScnArr) +static void parseSymtab32(ElfuScn *ms, ElfuScn**origScnArr) { - ElfuSymtab *st; size_t i; assert(ms); @@ -26,15 +25,6 @@ static ElfuSymtab* symtabFromScn32(ElfuScn *ms, ElfuScn**origScnArr) assert(origScnArr); - st = malloc(sizeof(*st)); - if (!st) { - ELFU_WARN("elfu_mSymtabFromScn32: malloc() failed for st.\n"); - goto ERROR; - } - - CIRCLEQ_INIT(&st->syms); - - for (i = 1; (i + 1) * sizeof(Elf32_Sym) <= ms->shdr.sh_size; i++) { Elf32_Sym *cursym = &(((Elf32_Sym*)ms->data.d_buf)[i]); ElfuSym *sym = malloc(sizeof(*sym)); @@ -60,38 +50,19 @@ static ElfuSymtab* symtabFromScn32(ElfuScn *ms, ElfuScn**origScnArr) } - CIRCLEQ_INSERT_TAIL(&st->syms, sym, elem); + CIRCLEQ_INSERT_TAIL(&ms->symtab.syms, sym, elem); } - - - return st; - - ERROR: - if (st) { - free(st); - } - return NULL; } -static ElfuReltab* reltabFromScn32(ElfuScn *ms) +static void parseReltab32(ElfuScn *ms) { - ElfuReltab *rt; size_t i; assert(ms); assert(ms->data.d_buf); - rt = malloc(sizeof(*rt)); - if (!rt) { - ELFU_WARN("elfu_mReltabFromScn32: malloc() failed for rt.\n"); - goto ERROR; - } - - CIRCLEQ_INIT(&rt->rels); - - for (i = 0; (i + 1) * sizeof(Elf32_Rel) <= ms->shdr.sh_size; i++) { Elf32_Rel *currel = &(((Elf32_Rel*)ms->data.d_buf)[i]); ElfuRel *rel; @@ -107,17 +78,8 @@ static ElfuReltab* reltabFromScn32(ElfuScn *ms) rel->addendUsed = 0; rel->addend = 0; - CIRCLEQ_INSERT_TAIL(&rt->rels, rel, elem); + CIRCLEQ_INSERT_TAIL(&ms->reltab.rels, rel, elem); } - - - return rt; - - ERROR: - if (rt) { - free(rt); - } - return NULL; } @@ -255,8 +217,8 @@ static ElfuScn* modelFromSection(Elf_Scn *scn) ms->oldptr = NULL; - ms->symtab = NULL; - ms->reltab = NULL; + CIRCLEQ_INIT(&ms->symtab.syms); + CIRCLEQ_INIT(&ms->reltab.rels); return ms; @@ -408,11 +370,10 @@ ElfuElf* elfu_mFromElf(Elf *e) case SHT_SYMTAB: case SHT_DYNSYM: if (me->elfclass == ELFCLASS32) { - ms->symtab = symtabFromScn32(ms, secArray); + parseSymtab32(ms, secArray); } else if (me->elfclass == ELFCLASS64) { // TODO } - assert(ms->symtab); break; } } @@ -425,11 +386,10 @@ ElfuElf* elfu_mFromElf(Elf *e) switch (ms->shdr.sh_type) { case SHT_REL: if (me->elfclass == ELFCLASS32) { - ms->reltab = reltabFromScn32(ms); + parseReltab32(ms); } else if (me->elfclass == ELFCLASS64) { // TODO } - assert(ms->reltab); break; case SHT_RELA: if (me->elfclass == ELFCLASS32) { @@ -437,7 +397,6 @@ ElfuElf* elfu_mFromElf(Elf *e) } else if (me->elfclass == ELFCLASS64) { // TODO } - assert(ms->reltab); break; } }