Pull out existing re-layouting code
[centaur.git] / src / model / phdr.c
index 26a26e301a968b4481190af63e00a15dd0f9a769..d26eb772a3c5f1c10fe037f46ce160d2faaa29fe 100644 (file)
@@ -15,3 +15,22 @@ size_t elfu_mPhdrCount(ElfuElf *me)
 
   return i;
 }
+
+
+
+void elfu_mPhdrUpdateChildOffsets(ElfuPhdr *mp)
+{
+  ElfuScn *ms;
+  ElfuPhdr *mpc;
+
+  assert(mp);
+  assert(mp->phdr.p_type == PT_LOAD);
+
+  CIRCLEQ_FOREACH(mpc, &mp->childPhdrList, elemChildPhdr) {
+    mpc->phdr.p_offset = mp->phdr.p_offset + (mpc->phdr.p_vaddr - mp->phdr.p_vaddr);
+  }
+
+  CIRCLEQ_FOREACH(ms, &mp->childScnList, elemChildScn) {
+    ms->shdr.sh_offset = mp->phdr.p_offset + (ms->shdr.sh_addr - mp->phdr.p_vaddr);
+  }
+}