From 6a9a293ebbe91ff82defbfabc30f6c23ec270a54 Mon Sep 17 00:00:00 2001 From: norly Date: Mon, 27 May 2013 03:57:16 +0100 Subject: [PATCH] Turn elfu_gPhdrContainsScn into a macro --- include/libelfu/generic.h | 9 ++++++++- src/elfops/section-in-segment.c | 4 ++-- src/generic/phdr-contains-section.c | 19 ------------------- src/printing/sections.c | 2 +- src/printing/segments.c | 2 +- 5 files changed, 12 insertions(+), 24 deletions(-) delete mode 100644 src/generic/phdr-contains-section.c diff --git a/include/libelfu/generic.h b/include/libelfu/generic.h index c74981a..6a06634 100644 --- a/include/libelfu/generic.h +++ b/include/libelfu/generic.h @@ -20,7 +20,14 @@ #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 diff --git a/src/elfops/section-in-segment.c b/src/elfops/section-in-segment.c index 185da36..76a997d 100644 --- a/src/elfops/section-in-segment.c +++ b/src/elfops/section-in-segment.c @@ -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 index 4c1f2cf..0000000 --- a/src/generic/phdr-contains-section.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -#include - - -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; -} diff --git a/src/printing/sections.c b/src/printing/sections.c index 71431d1..ec0ff43 100644 --- a/src/printing/sections.c +++ b/src/printing/sections.c @@ -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)); } } diff --git a/src/printing/segments.c b/src/printing/segments.c index 444f115..c7b5cb2 100644 --- a/src/printing/segments.c +++ b/src/printing/segments.c @@ -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)); } -- 2.30.2