]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Refine range check in create_addrmap_from_gdb_index
authorTom Tromey <tromey@adacore.com>
Wed, 13 Aug 2025 16:16:46 +0000 (10:16 -0600)
committerTom Tromey <tromey@adacore.com>
Wed, 13 Aug 2025 20:36:04 +0000 (14:36 -0600)
PR symtab/33247 points out that this check in
create_addrmap_from_gdb_index:

      if (lo > hi)
{
  complaint (_(".gdb_index address table has invalid range (%s - %s)"),
     hex_string (lo), hex_string (hi));

... should probably use ">=" instead.  Reading a bit further the
reason seems obvious:

      mutable_map.set_empty (lo, hi - 1, index->units[cu_index]);

Here if lo==hi, then this will insert a "reversed" range into the
addrmap.

Apparently some LLVM tool can erroneously create a .gdb_index like
this.

No test because it seems like more trouble to write than it's worth.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33247
Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/dwarf2/read-gdb-index.c

index 76317fe3191a46f629fc4d7ba253208dea10879c..7dfba7324513818a210d93f1c8510ab3148ce76b 100644 (file)
@@ -1419,7 +1419,7 @@ create_addrmap_from_gdb_index (dwarf2_per_objfile *per_objfile,
       cu_index = extract_unsigned_integer (iter, 4, BFD_ENDIAN_LITTLE);
       iter += 4;
 
-      if (lo > hi)
+      if (lo >= hi)
        {
          complaint (_(".gdb_index address table has invalid range (%s - %s)"),
                     hex_string (lo), hex_string (hi));