#include <libelfu/generic.h>
#include <libelfu/elfops.h>
-#include <libelfu/model.h>
+#include <libelfu/modeltypes.h>
+#include <libelfu/modelops.h>
#endif
+++ /dev/null
-#ifndef __LIBELFU_MODEL_H__
-#define __LIBELFU_MODEL_H__
-
-#include <sys/queue.h>
-
-#include <elf.h>
-#include <gelf.h>
-
-
-typedef struct ElfuData {
- Elf_Data data;
-
- CIRCLEQ_ENTRY(ElfuData) elem;
-} ElfuData;
-
-
-typedef struct ElfuScn {
- GElf_Shdr shdr;
-
- CIRCLEQ_HEAD(DataList, ElfuData) dataList;
-
- CIRCLEQ_ENTRY(ElfuScn) elem;
-} ElfuScn;
-
-
-typedef struct ElfuPhdr {
- GElf_Phdr phdr;
-
- CIRCLEQ_ENTRY(ElfuPhdr) elem;
-} ElfuPhdr;
-
-
-typedef struct {
- int elfclass;
- GElf_Ehdr ehdr;
-
- CIRCLEQ_HEAD(ScnList, ElfuScn) scnList;
- CIRCLEQ_HEAD(PhdrList, ElfuPhdr) phdrList;
-
- ElfuScn *shstrtab;
-} ElfuElf;
-
-
-
-size_t elfu_countSections(ElfuElf *me);
-size_t elfu_countPHDRs(ElfuElf *me);
-
-char* elfu_modelScnName(ElfuElf *me, ElfuScn *ms);
-
-int elfu_modelCheck(ElfuElf *me);
-
-ElfuPhdr* elfu_modelFromPhdr(GElf_Phdr *phdr);
-ElfuScn* elfu_modelFromSection(Elf_Scn *scn);
-ElfuElf* elfu_modelFromElf(Elf *e);
-
-void elfu_modelToElf(ElfuElf *me, Elf *e);
-
-#endif
--- /dev/null
+#ifndef __LIBELFU_MODELOPS_H__
+#define __LIBELFU_MODELOPS_H__
+
+#include <elf.h>
+#include <gelf.h>
+
+#include <libelfu/modeltypes.h>
+
+
+size_t elfu_mCountScns(ElfuElf *me);
+size_t elfu_mCountPhdrs(ElfuElf *me);
+
+char* elfu_mScnName(ElfuElf *me, ElfuScn *ms);
+
+int elfu_mCheck(ElfuElf *me);
+
+ElfuElf* elfu_mFromElf(Elf *e);
+ void elfu_mToElf(ElfuElf *me, Elf *e);
+
+#endif
--- /dev/null
+#ifndef __LIBELFU_MODELTYPES_H__
+#define __LIBELFU_MODELTYPES_H__
+
+#include <sys/queue.h>
+
+#include <elf.h>
+#include <gelf.h>
+
+typedef struct ElfuData {
+ Elf_Data data;
+
+ CIRCLEQ_ENTRY(ElfuData) elem;
+} ElfuData;
+
+
+typedef struct ElfuScn {
+ GElf_Shdr shdr;
+
+ CIRCLEQ_HEAD(DataList, ElfuData) dataList;
+
+ CIRCLEQ_ENTRY(ElfuScn) elem;
+} ElfuScn;
+
+
+typedef struct ElfuPhdr {
+ GElf_Phdr phdr;
+
+ CIRCLEQ_ENTRY(ElfuPhdr) elem;
+} ElfuPhdr;
+
+
+typedef struct {
+ int elfclass;
+ GElf_Ehdr ehdr;
+
+ CIRCLEQ_HEAD(ScnList, ElfuScn) scnList;
+ CIRCLEQ_HEAD(PhdrList, ElfuPhdr) phdrList;
+
+ ElfuScn *shstrtab;
+} ElfuElf;
+
+
+#endif
if (opts.fnOutput) {
ElfuElf *me;
- me = elfu_modelFromElf(hIn.e);
+ me = elfu_mFromElf(hIn.e);
if (me) {
printf("Model successfully loaded.\n");
- elfu_modelCheck(me);
+ elfu_mCheck(me);
printf("Model checked.\n");
- elfu_modelToElf(me, hOut.e);
+ elfu_mToElf(me, hOut.e);
printf("Model converted to ELF, ready to be written.\n");
} else {
}
-int elfu_modelCheck(ElfuElf *me)
+int elfu_mCheck(ElfuElf *me)
{
ElfuScn *ms;
size_t numSecs;
size_t i;
/* Sort sections by offset in file */
- numSecs = elfu_countSections(me);
+ numSecs = elfu_mCountScns(me);
sortedSecs = malloc(numSecs * sizeof(*sortedSecs));
if (!sortedSecs) {
fprintf(stderr, "elfu_check: Failed to allocate memory.\n");
if (sortedSecs[i]->shdr.sh_offset + elfu_gScnSizeFile(&sortedSecs[i]->shdr)
> sortedSecs[i+1]->shdr.sh_offset) {
fprintf(stderr, "elfu_check: Found overlapping sections: %s and %s.\n",
- elfu_modelScnName(me, sortedSecs[i]),
- elfu_modelScnName(me, sortedSecs[i+1]));
+ elfu_mScnName(me, sortedSecs[i]),
+ elfu_mScnName(me, sortedSecs[i+1]));
}
}
for (i = 0; i < numSecs; i++) {
if (sortedSecs[i]->shdr.sh_offset < me->ehdr.e_ehsize) {
fprintf(stderr, "elfu_check: Found section overlapping with EHDR: %s.\n",
- elfu_modelScnName(me, sortedSecs[i]));
+ elfu_mScnName(me, sortedSecs[i]));
}
}
me->ehdr.e_phoff,
me->ehdr.e_phentsize * me->ehdr.e_phnum)) {
fprintf(stderr, "elfu_check: Found section overlapping with PHDRs: %s.\n",
- elfu_modelScnName(me, sortedSecs[i]));
+ elfu_mScnName(me, sortedSecs[i]));
}
}
/* NULL section is not counted! */
-size_t elfu_countSections(ElfuElf *me)
+size_t elfu_mCountScns(ElfuElf *me)
{
ElfuScn *ms;
size_t i = 0;
}
-size_t elfu_countPHDRs(ElfuElf *me)
+size_t elfu_mCountPhdrs(ElfuElf *me)
{
ElfuPhdr *mp;
size_t i = 0;
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
-
#include <libelf.h>
#include <gelf.h>
-
#include <libelfu/libelfu.h>
-ElfuPhdr* elfu_modelFromPhdr(GElf_Phdr *phdr)
+static ElfuPhdr* modelFromPhdr(GElf_Phdr *phdr)
{
ElfuPhdr *mp;
}
-ElfuScn* elfu_modelFromSection(Elf_Scn *scn)
+static ElfuScn* modelFromSection(Elf_Scn *scn)
{
ElfuScn *ms;
Elf_Data *data;
-ElfuElf* elfu_modelFromElf(Elf *e)
+ElfuElf* elfu_mFromElf(Elf *e)
{
ElfuElf *me;
Elf_Scn *scn;
scn = elf_getscn(e, 1);
i = 1;
while (scn) {
- ElfuScn *ms = elfu_modelFromSection(scn);
+ ElfuScn *ms = modelFromSection(scn);
if (ms) {
CIRCLEQ_INSERT_TAIL(&me->scnList, ms, elem);
break;
}
- mp = elfu_modelFromPhdr(&phdr);
+ mp = modelFromPhdr(&phdr);
if (mp) {
CIRCLEQ_INSERT_TAIL(&me->phdrList, mp, elem);
#include <assert.h>
#include <stdlib.h>
-
#include <libelf.h>
#include <gelf.h>
-
#include <libelfu/libelfu.h>
-char* elfu_modelScnName(ElfuElf *me, ElfuScn *ms)
+char* elfu_mScnName(ElfuElf *me, ElfuScn *ms)
{
assert(me);
assert(ms);
#include <stdio.h>
#include <stdlib.h>
-
#include <libelf.h>
#include <gelf.h>
-
#include <libelfu/libelfu.h>
-static void elfu_modelToPhdrs(ElfuElf *me, Elf *e)
+static void modelToPhdrs(ElfuElf *me, Elf *e)
{
ElfuPhdr *mp;
size_t i;
-static void elfu_modelToSection(ElfuScn *ms, Elf *e)
+static void modelToSection(ElfuScn *ms, Elf *e)
{
Elf_Scn *scnOut;
-void elfu_modelToElf(ElfuElf *me, Elf *e)
+void elfu_mToElf(ElfuElf *me, Elf *e)
{
ElfuScn *ms;
/* Sections */
CIRCLEQ_FOREACH(ms, &me->scnList, elem) {
- elfu_modelToSection(ms, e);
+ modelToSection(ms, e);
}
/* PHDRs */
- elfu_modelToPhdrs(me, e);
+ modelToPhdrs(me, e);
elf_flagelf(e, ELF_C_SET, ELF_F_DIRTY);