[binutils-gdb] dwarf.c is_dwo_section
Alan Modra
amodra@sourceware.org
Thu Aug 27 13:23:00 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1ad761d978807cdd3a9972e32db6e3899de2115d
commit 1ad761d978807cdd3a9972e32db6e3899de2115d
Author: Alan Modra <amodra@gmail.com>
Date: Thu Aug 27 22:35:45 2026 +0930
dwarf.c is_dwo_section
Extract out section name test for .dwo suffix into a new function.
* dwarf.c (is_dwo_section): New function.
(read_and_display_attr_value, display_debug_macro),
(display_debug_loc, display_debug_str_offsets): Use it.
Diff:
---
binutils/dwarf.c | 29 ++++++++++++-----------------
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 829bcb761f7..3152dbdbd1c 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -2113,6 +2113,13 @@ free_dwo_info (void)
first_dwo_info = NULL;
}
+static bool
+is_dwo_section (const struct dwarf_section *section)
+{
+ size_t len = strlen (section->name);
+ return len >= 4 && memcmp (section->name + len - 4, ".dwo", 4) == 0;
+}
+
/* Ensure that START + UVALUE is less than END.
Return an adjusted UVALUE if necessary to ensure this relationship. */
@@ -3884,8 +3891,7 @@ read_and_display_attr_value (unsigned long attribute,
case DW_FORM_strx4:
if (!do_loc)
{
- const char *suffix = section ? strrchr (section->name, '.') : NULL;
- bool dwo = suffix && strcmp (suffix, ".dwo") == 0;
+ bool dwo = is_dwo_section (section);
const char *strng;
strng = fetch_indexed_string (uvalue, this_set, offset_size, dwo,
@@ -3944,8 +3950,7 @@ read_and_display_attr_value (unsigned long attribute,
if (!do_loc)
{
uint64_t base, idx;
- const char *suffix = strrchr (section->name, '.');
- bool dwo = suffix && strcmp (suffix, ".dwo") == 0;
+ bool dwo = is_dwo_section (section);
if (form == DW_FORM_loclistx)
{
@@ -7586,11 +7591,7 @@ display_debug_macro (struct dwarf_section *section,
unsigned char *end = start + section->size;
unsigned char *curr = start;
unsigned char *extended_op_buf[256];
- bool is_dwo = false;
- const char *suffix = strrchr (section->name, '.');
-
- if (suffix && strcmp (suffix, ".dwo") == 0)
- is_dwo = true;
+ bool is_dwo = is_dwo_section (section);
if (is_dwo)
{
@@ -8604,14 +8605,10 @@ display_debug_loc (struct dwarf_section *section, void *file)
int locs_sorted = 1;
unsigned char *next = start, *vnext = vstart;
unsigned int *array = NULL;
- const char *suffix = strrchr (section->name, '.');
- bool is_dwo = false;
+ bool is_dwo = is_dwo_section (section);
bool is_loclists = strstr (section->name, "debug_loclists") != NULL;
uint64_t next_header_offset = 0;
- if (suffix && strcmp (suffix, ".dwo") == 0)
- is_dwo = true;
-
bytes = section->size;
if (bytes == 0)
@@ -9266,9 +9263,7 @@ display_debug_str_offsets (struct dwarf_section *section,
unsigned char *end = start + section->size;
unsigned char *curr = start;
uint64_t debug_str_offsets_hdr_len;
-
- const char *suffix = strrchr (section->name, '.');
- bool dwo = suffix && strcmp (suffix, ".dwo") == 0;
+ bool dwo = is_dwo_section (section);
if (dwo)
load_debug_section_with_follow (str_dwo, file);
More information about the Binutils-cvs
mailing list