[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