Model to ELF (writing) support
[centaur.git] / src / copy / elf.c
1 #include <stdio.h>
2
3 #include <libelf.h>
4 #include <gelf.h>
5
6 #include <libelfu/libelfu.h>
7
8
9 void elfu_copyEhdr(Elf *eo, Elf *ei);
10 void elfu_copySections(Elf *eo, Elf *ei);
11 void elfu_copySegments1(Elf *eo, Elf *ei);
12 void elfu_copySegments2(Elf *eo, Elf *ei);
13
14
15 void elfu_copyElf(Elf *eo, Elf *ei)
16 {
17   elfu_copyEhdr(eo, ei);
18   elfu_copySections(eo, ei);
19   elfu_copySegments1(eo, ei);
20
21   /* Calculate file structure so we have section offsets */
22   if (elf_update(eo, ELF_C_NULL) < 0) {
23     fprintf(stderr, "elf_update(NULL) failed: %s\n", elf_errmsg(-1));
24   }
25
26   /* Update the segment offsets and lengths */
27   elfu_copySegments2(eo, ei);
28
29   elfu_fixupPhdrSelfRef(eo);
30 }