]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
[gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector
authorTom de Vries <tdevries@suse.de>
Fri, 17 Jul 2026 14:30:15 +0000 (16:30 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 17 Jul 2026 14:30:15 +0000 (16:30 +0200)
commit3296caafa31264bf2ea8f2ebd01efcd3caeb6a58
tree9ad1f4b317eaeeeb2e01a15709fbf73ad4841b2d
parentd9d09c878e5648501e33a3f07950c633ca70b298
[gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector

I came across some code in buildsym_compunit::make_blockvector that uses
hardcoded constants 0 and 1:
...
      gdb_assert (blockvector->block (0)->is_global_block ());
      gdb_assert (blockvector->block (1)->is_static_block ());
...

Fix this by instead using the symbolic constants GLOBAL_BLOCK and
STATIC_BLOCK.

The same function has an odd-looking for loop that uses a hard-coded '1' to
skip the global block:
...
       /* The 'J > 1' here is so that we don't place the global block into
   the map.  For CU with gaps, the static block will reflect the
   gaps, while the global block will just reflect the full extent of
   the range.  */
      for (int j = num_blocks; j > 1; )
  {
  --j;
    struct block *b = blockvector->block (j);
...

Fix this by rewriting it into an ordinary descending for loop, and using
symbolic constant GLOBAL_BLOCK to avoid the global block:
...
      for (int j = num_blocks - 1; j > GLOBAL_BLOCK; --j)
  {
    struct block *b = blockvector->block (j);
...

Approved-By: Tom Tromey <tom@tromey.com>
gdb/buildsym.c