Turn elfu_gPhdrContainsScn into a macro
authornorly <ny-git@enpas.org>
Mon, 27 May 2013 02:57:16 +0000 (03:57 +0100)
committernorly <ny-git@enpas.org>
Mon, 27 May 2013 02:57:16 +0000 (03:57 +0100)
include/libelfu/generic.h
src/elfops/section-in-segment.c
src/generic/phdr-contains-section.c [deleted file]
src/printing/sections.c
src/printing/segments.c

index c74981aa99eadc91481f1e00b188a64ca040bd7e..6a066348c637fe8586ad9e05ea9ba9e4f4fc8d7d 100644 (file)
 #define SCNFILESIZE(shdr) ((shdr)->sh_type == SHT_NOBITS ? 0 : (shdr)->sh_size)
 
 
-int elfu_gPhdrContainsScn(GElf_Phdr *phdr, GElf_Shdr *shdr);
+
+#define PHDR_CONTAINS_SCN_IN_MEMORY(phdr, shdr) \
+  (((phdr)->p_vaddr) <= ((shdr)->sh_addr) \
+   && OFFS_END((shdr)->sh_addr, (shdr)->sh_size) <= OFFS_END((phdr)->p_vaddr, (phdr)->p_memsz))
+
+#define PHDR_CONTAINS_SCN_IN_FILE(phdr, shdr) \
+  (((phdr)->p_offset) <= ((shdr)->sh_offset) \
+   && OFFS_END((shdr)->sh_offset, SCNFILESIZE(shdr)) <= OFFS_END((phdr)->p_offset, (phdr)->p_filesz))
 
 
 #endif
index 185da364e3fad08ea0ac33a286ad0384ba1f8cb1..76a997dce12cdef8c7d7c5ea18a9484e8e801290 100644 (file)
@@ -25,7 +25,7 @@ Elf_Scn* elfu_eScnFirstInSegment(Elf *e, GElf_Phdr *phdr)
     }
 
     if (shdr.sh_offset == phdr->p_offset
-        && elfu_gPhdrContainsScn(phdr, &shdr)) {
+        && PHDR_CONTAINS_SCN_IN_MEMORY(phdr, &shdr)) {
       return scn;
     }
 
@@ -59,7 +59,7 @@ Elf_Scn* elfu_eScnLastInSegment(Elf *e, GElf_Phdr *phdr)
       continue;
     }
 
-    if (elfu_gPhdrContainsScn(phdr, &shdr)) {
+    if (PHDR_CONTAINS_SCN_IN_MEMORY(phdr, &shdr)) {
       if (!last) {
         last = scn;
       } else {
diff --git a/src/generic/phdr-contains-section.c b/src/generic/phdr-contains-section.c
deleted file mode 100644 (file)
index 4c1f2cf..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <libelf/libelf.h>
-#include <libelf/gelf.h>
-
-#include <libelfu/libelfu.h>
-
-
-int elfu_gPhdrContainsScn(GElf_Phdr *phdr, GElf_Shdr *shdr)
-{
-  size_t secStart = shdr->sh_offset;
-  size_t secEnd   = shdr->sh_offset + shdr->sh_size;
-  size_t segStart = phdr->p_offset;
-  size_t segEnd   = phdr->p_offset + phdr->p_memsz;
-
-  if (secStart < segStart || secEnd > segEnd) {
-    return 0;
-  }
-
-  return 1;
-}
index 71431d14c606c1e9f34b6146681680b39f4f138b..ec0ff439aac42bd412c09bb6bf6c19729caff8ef 100644 (file)
@@ -31,7 +31,7 @@ void printSegmentsWithSection(Elf *e, Elf_Scn *scn)
       continue;
     }
 
-    if (elfu_gPhdrContainsScn(&phdr, &shdr)) {
+    if (PHDR_CONTAINS_SCN_IN_MEMORY(&phdr, &shdr)) {
       printf("     %d %s\n", i, segmentTypeStr(phdr.p_type));
     }
   }
index 444f11577bdaaa64540d929299dabfa522aef208..c7b5cb2555190749781bb1d542a88bc7e6fcee3c 100644 (file)
@@ -33,7 +33,7 @@ void printSectionsInSegment(Elf *e, GElf_Phdr *phdr)
       continue;
     }
 
-    if (elfu_gPhdrContainsScn(phdr, &shdr)) {
+    if (PHDR_CONTAINS_SCN_IN_MEMORY(phdr, &shdr)) {
       printf("       %10u %s\n", elf_ndxscn(scn), elfu_eScnName(e, scn));
     }