summaryrefslogtreecommitdiff
path: root/libdwfl
diff options
context:
space:
mode:
authorTimm Bäder <tbaeder@redhat.com>2020-11-23 13:27:11 +0100
committerMark Wielaard <mark@klomp.org>2020-11-25 16:39:01 +0100
commit466b2664b62aa0cabe04727082ee2e04a305c7e4 (patch)
tree7ac5f70e7df887d0e3a8dbb739a107f467945d3e /libdwfl
parent8331eaeb4ce4707154f8d2e1743a562d0d9bd945 (diff)
downloadelfutils-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/ChangeLog5
-rw-r--r--libdwfl/dwfl_segment_report_module.c40
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;
}
}