diff options
author | Timm Bäder <tbaeder@redhat.com> | 2020-11-23 13:27:11 +0100 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2020-11-25 16:39:01 +0100 |
commit | 466b2664b62aa0cabe04727082ee2e04a305c7e4 (patch) | |
tree | 7ac5f70e7df887d0e3a8dbb739a107f467945d3e /libdwfl | |
parent | 8331eaeb4ce4707154f8d2e1743a562d0d9bd945 (diff) | |
download | elfutils-466b2664b62aa0cabe04727082ee2e04a305c7e4.tar.gz |
segment_report_module: Inline consider_dyn() into only caller
Signed-off-by: Timm Bäder <tbaeder@redhat.com>
Diffstat (limited to 'libdwfl')
-rw-r--r-- | libdwfl/ChangeLog | 5 | ||||
-rw-r--r-- | libdwfl/dwfl_segment_report_module.c | 40 |
2 files changed, 17 insertions, 28 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 0c66bed3..88f0714e 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,5 +1,10 @@ 2020-11-23 Timm Bäder <tbaeder@redhat.com> + * segment_report_module.c (dwfl_segment_report_module): Remove + consider_dyn, do checks inline. + +2020-11-23 Timm Bäder <tbaeder@redhat.com> + * segment_report_module.c (dwfl_segment_report_module): Do one loop check for d32/d64 arrays. diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 2fb62bd9..a1051e1e 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -740,33 +740,6 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, GElf_Addr dynstr_vaddr = 0; GElf_Xword dynstrsz = 0; bool execlike = false; - inline bool consider_dyn (GElf_Sxword tag, GElf_Xword val) - { - switch (tag) - { - default: - return false; - - case DT_DEBUG: - execlike = true; - break; - - case DT_SONAME: - soname_stroff = val; - break; - - case DT_STRTAB: - dynstr_vaddr = val; - break; - - case DT_STRSZ: - dynstrsz = val; - break; - } - - return soname_stroff != 0 && dynstr_vaddr != 0 && dynstrsz != 0; - } - const size_t dyn_entsize = (ei_class == ELFCLASS32 ? sizeof (Elf32_Dyn) : sizeof (Elf64_Dyn)); void *dyn_data = NULL; @@ -804,7 +777,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, GElf_Sxword tag = is32 ? d32[i].d_tag : d64[i].d_tag; GElf_Xword val = is32 ? d32[i].d_un.d_val : d64[i].d_un.d_val; - if (consider_dyn (tag, val)) + if (tag == DT_DEBUG) + execlike = true; + else if (tag == DT_SONAME) + soname_stroff = val; + else if (tag == DT_STRTAB) + dynstr_vaddr = val; + else if (tag == DT_STRSZ) + dynstrsz = val; + else + continue; + + if (soname_stroff != 0 && dynstr_vaddr != 0 && dynstrsz != 0) break; } } |