From e917ef7ce9f55f8f0902310721ba7c76d6a67cad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Tue, 1 Dec 2020 09:38:54 +0100 Subject: [PATCH] link_map: Inline consider_phdr() into only caller This gets rid of the tested function and is shorter. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 ++++ libdwfl/link_map.c | 72 ++++++++++++++++++++++++------------------------------ 2 files changed, 37 insertions(+), 40 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 67a4d74..f11abb8 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2020-12-01 Timm Bäder + + * link_map.c (dwfl_link_map_report): Removed consider_phdr function + and inline code. + 2020-11-28 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 29307c7..bcff8db 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -758,31 +758,6 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, GElf_Xword dyn_filesz = 0; GElf_Addr dyn_bias = (GElf_Addr) -1; - inline bool consider_phdr (GElf_Word type, - GElf_Addr vaddr, GElf_Xword filesz) - { - switch (type) - { - case PT_PHDR: - if (dyn_bias == (GElf_Addr) -1 - /* Do a sanity check on the putative address. */ - && ((vaddr & (dwfl->segment_align - 1)) - == (phdr & (dwfl->segment_align - 1)))) - { - dyn_bias = phdr - vaddr; - return dyn_vaddr != 0; - } - break; - - case PT_DYNAMIC: - dyn_vaddr = vaddr; - dyn_filesz = filesz; - return dyn_bias != (GElf_Addr) -1; - } - - return false; - } - if (phdr != 0 && phnum != 0) { Dwfl_Module *phdr_mod; @@ -895,22 +870,39 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) { - /* We are looking for PT_DYNAMIC. */ - if (elfclass == ELFCLASS32) - { - for (size_t i = 0; i < phnum; ++i) - if (consider_phdr ((*p32)[i].p_type, - (*p32)[i].p_vaddr, - (*p32)[i].p_filesz)) - break; - } - else + bool is32 = (elfclass == ELFCLASS32); + for (size_t i = 0; i < phnum; ++i) { - for (size_t i = 0; i < phnum; ++i) - if (consider_phdr ((*p64)[i].p_type, - (*p64)[i].p_vaddr, - (*p64)[i].p_filesz)) - break; + GElf_Word type = (is32 + ? (*p32)[i].p_type + : (*p64)[i].p_type); + GElf_Addr vaddr = (is32 + ? (*p32)[i].p_vaddr + : (*p64)[i].p_vaddr); + GElf_Xword filesz = (is32 + ? (*p32)[i].p_filesz + : (*p64)[i].p_filesz); + + if (type == PT_PHDR) + { + if (dyn_bias == (GElf_Addr) -1 + /* Do a sanity check on the putative address. */ + && ((vaddr & (dwfl->segment_align - 1)) + == (phdr & (dwfl->segment_align - 1)))) + { + dyn_bias = phdr - vaddr; + if (dyn_vaddr != 0) + break; + } + + } + else if (type == PT_DYNAMIC) + { + dyn_vaddr = vaddr; + dyn_filesz = filesz; + if (dyn_bias != (GElf_Addr) -1) + break; + } } } -- 2.7.4