Remove stupid copy model-rebased
authornorly <ny-git@enpas.org>
Mon, 11 Feb 2013 00:26:16 +0000 (00:26 +0000)
committernorly <ny-git@enpas.org>
Mon, 11 Feb 2013 01:39:39 +0000 (01:39 +0000)
include/libelfu/copy.h [deleted file]
include/libelfu/libelfu.h
include/options.h
src/copy/ehdr.c [deleted file]
src/copy/elf.c [deleted file]
src/copy/section.c [deleted file]
src/copy/sections.c [deleted file]
src/copy/segments.c [deleted file]
src/main.c
src/options.c

diff --git a/include/libelfu/copy.h b/include/libelfu/copy.h
deleted file mode 100644 (file)
index 341df88..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef __LIBELFU_COPY_H_
-#define __LIBELFU_COPY_H_
-
-#include <libelf.h>
-#include <gelf.h>
-
-void elfu_copyElf(Elf *eo, Elf *ei);
-
-#endif
index 7621bc4964d9060c9865ddd715c33b0a10851e01..271b0ce8a1c77cc0ce801927c3178170db4f482d 100644 (file)
@@ -5,7 +5,6 @@
 #include <libelfu/types.h>
 
 #include <libelfu/analysis.h>
-#include <libelfu/copy.h>
 #include <libelfu/fixup.h>
 #include <libelfu/lookup.h>
 #include <libelfu/model.h>
index 48f6580386f6d468c9883cd461a370fc6f95c662..c43c811a5ae0e5c61d754735a93bc731f7cdc490 100644 (file)
@@ -9,7 +9,6 @@ typedef struct {
   int printSegments;
   int printSections;
   int copy;
-  int model;
 } CLIOpts;
 
 
diff --git a/src/copy/ehdr.c b/src/copy/ehdr.c
deleted file mode 100644 (file)
index b7c6232..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <stdio.h>
-
-#include <libelf.h>
-#include <gelf.h>
-
-#include <libelfu/libelfu.h>
-
-
-void elfu_copyEhdr(Elf *eo, Elf *ei)
-{
-  int elfclass;
-  GElf_Ehdr ehdr, ehdrOut;
-
-  elfclass = gelf_getclass(ei);
-  if (elfclass == ELFCLASSNONE) {
-    fprintf(stderr, "getclass() failed: %s\n", elf_errmsg(-1));
-  }
-
-  if (!gelf_getehdr(ei, &ehdr)) {
-    fprintf(stderr, "gelf_getehdr() failed: %s\n", elf_errmsg(-1));
-    return;
-  }
-
-  if (!gelf_newehdr(eo, elfclass)) {
-    fprintf(stderr, "gelf_newehdr() failed: %s\n", elf_errmsg(-1));
-  }
-
-  if (!gelf_getehdr(ei, &ehdrOut)) {
-    fprintf(stderr, "gelf_getehdr() failed: %s\n", elf_errmsg(-1));
-    return;
-  }
-
-  ehdrOut.e_ident[EI_DATA] = ehdr.e_ident[EI_DATA];
-  ehdrOut.e_type = ehdr.e_type;
-  ehdrOut.e_machine = ehdr.e_machine;
-  ehdrOut.e_version = ehdr.e_version;
-  ehdrOut.e_entry = ehdr.e_entry; // FIXME
-  /* e_phoff */
-  /* e_shoff */
-  ehdrOut.e_flags = ehdr.e_flags;
-  /* e_ehsize */
-  /* e_phentsize */
-  /* e_phnum */
-  /* e_shentsize */
-  /* s_shnum */
-  ehdrOut.e_shstrndx = ehdr.e_shstrndx; // FIXME
-
-
-  if (!gelf_update_ehdr(eo, &ehdrOut)) {
-    fprintf(stderr, "gelf_update_ehdr() failed: %s\n", elf_errmsg(-1));
-  }
-}
diff --git a/src/copy/elf.c b/src/copy/elf.c
deleted file mode 100644 (file)
index 445f98c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <stdio.h>
-
-#include <libelf.h>
-#include <gelf.h>
-
-#include <libelfu/libelfu.h>
-
-
-void elfu_copyEhdr(Elf *eo, Elf *ei);
-void elfu_copySections(Elf *eo, Elf *ei);
-void elfu_copySegments1(Elf *eo, Elf *ei);
-void elfu_copySegments2(Elf *eo, Elf *ei);
-
-
-void elfu_copyElf(Elf *eo, Elf *ei)
-{
-  elfu_copyEhdr(eo, ei);
-  elfu_copySections(eo, ei);
-  elfu_copySegments1(eo, ei);
-
-  /* Calculate file structure so we have section offsets */
-  if (elf_update(eo, ELF_C_NULL) < 0) {
-    fprintf(stderr, "elf_update(NULL) failed: %s\n", elf_errmsg(-1));
-  }
-
-  /* Update the segment offsets and lengths */
-  elfu_copySegments2(eo, ei);
-
-  elfu_fixupPhdrSelfRef(eo);
-}
diff --git a/src/copy/section.c b/src/copy/section.c
deleted file mode 100644 (file)
index 6fd08e2..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <stdio.h>
-
-#include <libelf.h>
-#include <gelf.h>
-
-#include <libelfu/libelfu.h>
-
-
-void elfu_copySection(Elf *eo, Elf_Scn *scn)
-{
-  Elf_Scn *scnOut;
-  Elf_Data *data;
-  GElf_Shdr shdr, shdrOut;
-
-  scnOut = elf_newscn(eo);
-  if (!scnOut) {
-    fprintf(stderr, "elf_newscn() failed: %s\n", elf_errmsg(-1));
-    return;
-  }
-
-  if (gelf_getshdr(scn, &shdr) != &shdr) {
-    fprintf(stderr, "gelf_getshdr() failed: %s\n", elf_errmsg(-1));
-  }
-
-
-  /* Copy section header */
-  if (gelf_getshdr(scnOut, &shdrOut) != &shdrOut) {
-    fprintf(stderr, "gelf_getshdr() failed: %s\n", elf_errmsg(-1));
-  }
-
-  shdrOut.sh_name = shdr.sh_name;
-  shdrOut.sh_type = shdr.sh_type;
-  shdrOut.sh_flags = shdr.sh_flags;
-  shdrOut.sh_addr = shdr.sh_addr;
-  /* sh_offset */
-  /* sh_size */
-  shdrOut.sh_link = shdr.sh_link;
-  shdrOut.sh_info = shdr.sh_info;
-  shdrOut.sh_addralign = shdr.sh_addralign;
-  shdrOut.sh_entsize = shdr.sh_entsize;
-
-  if (!gelf_update_shdr(scnOut, &shdrOut)) {
-    fprintf(stderr, "gelf_update_shdr() failed: %s\n", elf_errmsg(-1));
-  }
-
-
-  //elf_flagshdr(scnOut, ELF_C_SET, ELF_F_DIRTY);
-  //elf_flagscn(scnOut, ELF_C_SET, ELF_F_DIRTY);
-
-
-  /* Copy each data part in source segment */
-  data = elf_rawdata(scn, NULL);
-  while (data) {
-    Elf_Data *dataOut = elf_newdata(scnOut);
-    if (!dataOut) {
-      fprintf(stderr, "elf_newdata() failed: %s\n", elf_errmsg(-1));
-    }
-
-    //dataOut->d_align = data->d_align;
-    dataOut->d_align = shdr.sh_addralign;
-    dataOut->d_buf  = data->d_buf;
-    /* dataOut->d_off  = data->d_off; */
-    dataOut->d_type = data->d_type;
-    dataOut->d_size = data->d_size;
-    dataOut->d_version = data->d_version;
-
-    //elf_flagdata(dataOut, ELF_C_SET, ELF_F_DIRTY);
-
-    data = elf_rawdata(scn, data);
-  }
-
-  // ehf_newdata() should flag the entire section dirty
-  //elf_flagshdr(scnOut, ELF_C_SET, ELF_F_DIRTY);
-  //elf_flagscn(scnOut, ELF_C_SET, ELF_F_DIRTY);
-}
diff --git a/src/copy/sections.c b/src/copy/sections.c
deleted file mode 100644 (file)
index 046b590..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <stdio.h>
-
-#include <libelf.h>
-#include <gelf.h>
-
-#include <libelfu/libelfu.h>
-
-
-
-void elfu_copySection(Elf *eo, Elf_Scn *scn);
-
-
-
-void elfu_copySections(Elf *eo, Elf *ei)
-{
-  Elf_Scn *scn;
-
-  scn = elf_getscn(ei, 1);
-
-  while (scn) {
-    elfu_copySection(eo, scn);
-
-    scn = elf_nextscn(ei, scn);
-  }
-}
diff --git a/src/copy/segments.c b/src/copy/segments.c
deleted file mode 100644 (file)
index 0f320c1..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <stdio.h>
-
-#include <libelf.h>
-#include <gelf.h>
-
-#include <libelfu/libelfu.h>
-
-
-
-void elfu_copySegments1(Elf *eo, Elf *ei)
-{
-  size_t i, n;
-
-  if (elf_getphdrnum(ei, &n)) {
-    fprintf(stderr, "elf_getphdrnum() failed: %s\n", elf_errmsg(-1));
-  }
-
-  if (!gelf_newphdr(eo, n)) {
-    fprintf(stderr, "gelf_newphdr() failed: %s\n", elf_errmsg(-1));
-  }
-
-  for (i = 0; i < n; i++) {
-    GElf_Phdr phdr, phdrOut;
-
-    if (gelf_getphdr(ei, i, &phdr) != &phdr) {
-      fprintf(stderr, "gelf_getphdr() failed for #%d: %s\n", i, elf_errmsg(-1));
-      break;
-    }
-
-    if (gelf_getphdr(eo, i, &phdrOut) != &phdrOut) {
-      fprintf(stderr, "gelf_getphdr() failed for #%d: %s\n", i, elf_errmsg(-1));
-      break;
-    }
-
-    phdrOut.p_type = phdr.p_type;
-    /* p_offset */
-    phdrOut.p_vaddr = phdr.p_vaddr;
-    phdrOut.p_paddr = phdr.p_paddr;
-    /* p_filesz */
-    /* p_memsz */
-    phdrOut.p_flags = phdr.p_flags;
-    phdrOut.p_align = phdr.p_align;
-
-    if (!gelf_update_phdr (eo, i, &phdrOut)) {
-      fprintf(stderr, "gelf_update_ehdr() failed: %s\n", elf_errmsg(-1));
-    }
-  }
-
-  /* Tell libelf that phdrs have changed */
-  elf_flagphdr(eo, ELF_C_SET, ELF_F_DIRTY);
-}
-
-
-void elfu_copySegments2(Elf *eo, Elf *ei)
-{
-  size_t i, n;
-
-  if (elf_getphdrnum(ei, &n)) {
-    fprintf(stderr, "elf_getphdrnum() failed: %s\n", elf_errmsg(-1));
-  }
-
-  for (i = 0; i < n; i++) {
-    GElf_Phdr phdr, phdrOut;
-
-    if (gelf_getphdr(ei, i, &phdr) != &phdr) {
-      fprintf(stderr, "gelf_getphdr() failed for #%d: %s\n", i, elf_errmsg(-1));
-      break;
-    }
-
-    if (gelf_getphdr(eo, i, &phdrOut) != &phdrOut) {
-      fprintf(stderr, "gelf_getphdr() failed for #%d: %s\n", i, elf_errmsg(-1));
-      break;
-    }
-
-    /* Start of segment */
-    if (phdr.p_type == PT_PHDR) {
-      /* Skip PHDR entries and fix them up later */
-    }
-    else if (phdr.p_offset == 0) {
-      /* The text segment usually loads the whole ELF header */
-      phdrOut.p_offset = 0;
-    } else {
-      /* Try to guess the start of the segment */
-      Elf_Scn *scn, *scnOut;
-      GElf_Shdr shdr, shdrOut;
-
-      scn = elfu_firstSectionInSegment(ei, &phdr);
-      if (!scn) {
-        fprintf(stderr, "elfu_firstSectionInSegment() failed for segment #%d\n", i);
-        continue;
-      }
-
-      if (gelf_getshdr(scn, &shdr) != &shdr) {
-        fprintf(stderr, "gelf_getshdr() failed: %s\n", elf_errmsg(-1));
-      }
-
-      if (phdr.p_offset < shdr.sh_offset) {
-        fprintf(stderr, "elfu_copySegments2: Segment #%d starts before first contained section.\n", i);
-      }
-
-      scnOut = elf_getscn(eo, elf_ndxscn(scn));
-      if (!scnOut) {
-        fprintf(stderr, "elf_getscn() failed: %s\n", elf_errmsg(-1));
-      }
-
-      if (gelf_getshdr(scnOut, &shdrOut) != &shdrOut) {
-        fprintf(stderr, "gelf_getshdr() failed: %s\n", elf_errmsg(-1));
-      }
-
-      phdrOut.p_offset = shdrOut.sh_offset;
-    }
-
-    /* File length of segment */
-    if (phdr.p_type == PT_PHDR) {
-      /* Skip PHDR entries and fix them up later */
-    }
-    else if (phdr.p_memsz == 0) {
-      phdrOut.p_filesz = 0;
-      phdrOut.p_memsz = 0;
-    } else {
-      /* Try to guess the end of the segment */
-      Elf_Scn *scn, *scnOut;
-      GElf_Shdr shdr, shdrOut;
-
-      scn = elfu_lastSectionInSegment(ei, &phdr);
-      if (!scn) {
-        fprintf(stderr, "elfu_lastSectionInSegment() failed for segment #%d\n", i);
-        continue;
-      }
-
-      if (gelf_getshdr(scn, &shdr) != &shdr) {
-        fprintf(stderr, "gelf_getshdr() failed: %s\n", elf_errmsg(-1));
-      }
-
-      if (phdr.p_offset + phdr.p_filesz > shdr.sh_offset + shdr.sh_size) {
-        fprintf(stderr, "elfu_copySegments2: Segment #%d ends after last contained section.\n", i);
-      }
-
-      scnOut = elf_getscn(eo, elf_ndxscn(scn));
-      if (!scnOut) {
-        fprintf(stderr, "elf_getscn() failed: %s\n", elf_errmsg(-1));
-      }
-
-      if (gelf_getshdr(scnOut, &shdrOut) != &shdrOut) {
-        fprintf(stderr, "gelf_getshdr() failed: %s\n", elf_errmsg(-1));
-      }
-
-      phdrOut.p_filesz = shdrOut.sh_offset - phdrOut.p_offset;
-      if (shdrOut.sh_type != SHT_NOBITS) {
-        phdrOut.p_filesz += shdrOut.sh_size;
-      }
-
-      phdrOut.p_memsz = shdrOut.sh_offset - phdrOut.p_offset + shdrOut.sh_size;
-    }
-
-    if (!gelf_update_phdr (eo, i, &phdrOut)) {
-      fprintf(stderr, "gelf_update_ehdr() failed: %s\n", elf_errmsg(-1));
-    }
-  }
-
-  /* Tell libelf that phdrs have changed */
-  elf_flagphdr(eo, ELF_C_SET, ELF_F_DIRTY);
-}
index 4d41ee44c664a6d1e4ed159feec27c74446e3fc1..bf1160dd9e8e427ccc652d3f957f0494c3fdd40d 100644 (file)
@@ -65,24 +65,19 @@ int main(int argc, char **argv)
     }
   } else {
     if (opts.copy) {
-      elfu_copyElf(hOut.e, hIn.e);
-    }
-  }
-
-  /* Generate a memory model of the file */
-  if (opts.model) {
-    ElfuElf *me;
+      ElfuElf *me;
 
-    me = elfu_modelFromElf(hIn.e);
+      me = elfu_modelFromElf(hIn.e);
 
-    if (me) {
-      printf("Model successfully loaded.\n");
+      if (me) {
+        printf("Model successfully loaded.\n");
 
-      elfu_modelToElf(me, hOut.e);
+        elfu_modelToElf(me, hOut.e);
 
-      printf("Model converted to ELF, ready to be written.\n");
-    } else {
-      printf("Failed to load model.\n");
+        printf("Model converted to ELF, ready to be written.\n");
+      } else {
+        printf("Failed to load model.\n");
+      }
     }
   }
 
index 82b12bc1e820240604037ab6807cb6639ab6c59a..878127c0d7c5419189018f21cd16af93af36b851 100644 (file)
@@ -35,7 +35,6 @@ void parseOptions(CLIOpts *opts, int argc, char **argv)
     {"print-segments", 0, 0, 10002},
     {"print-sections", 0, 0, 10003},
     {"copy", 0, 0, 10004},
-    {"model", 0, 0, 10005},
     {NULL, 0, NULL, 0}
   };
 
@@ -60,9 +59,6 @@ void parseOptions(CLIOpts *opts, int argc, char **argv)
       case 10004:
         opts->copy = 1;
         break;
-      case 10005:
-        opts->model = 1;
-        break;
       case '?':
       default:
         goto USAGE;