summaryrefslogtreecommitdiff
path: root/src/copy
diff options
context:
space:
mode:
authornorly <ny-git@enpas.org>2013-02-11 00:26:16 +0000
committernorly <ny-git@enpas.org>2013-02-11 01:39:39 +0000
commit89a42c8067c5f79142c2b634bcb185d917929c9c (patch)
tree9fd135a5ba0720edc539feec918b467a5ad6cbc4 /src/copy
parent32d4609d0c4c37c9a87b7e4cacc747daba4a9624 (diff)
Remove stupid copymodel-rebased
Diffstat (limited to 'src/copy')
-rw-r--r--src/copy/ehdr.c52
-rw-r--r--src/copy/elf.c30
-rw-r--r--src/copy/section.c75
-rw-r--r--src/copy/sections.c25
-rw-r--r--src/copy/segments.c163
5 files changed, 0 insertions, 345 deletions
diff --git a/src/copy/ehdr.c b/src/copy/ehdr.c
deleted file mode 100644
index b7c6232..0000000
--- a/src/copy/ehdr.c
+++ /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
index 445f98c..0000000
--- a/src/copy/elf.c
+++ /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
index 6fd08e2..0000000
--- a/src/copy/section.c
+++ /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
index 046b590..0000000
--- a/src/copy/sections.c
+++ /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
index 0f320c1..0000000
--- a/src/copy/segments.c
+++ /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);
-}