* [PATCH] [gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector
@ 2026-07-16 16:56 Tom de Vries
2026-07-17 14:20 ` Tom Tromey
0 siblings, 1 reply; 2+ messages in thread
From: Tom de Vries @ 2026-07-16 16:56 UTC (permalink / raw)
To: gdb-patches
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);
...
---
gdb/buildsym.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index b543cd10eb5..2b0a9a39b81 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -363,16 +363,15 @@ buildsym_compunit::make_blockvector ()
gdb_assert (num_blocks > 1);
/* Assert our understanding of how the blocks are laid out. */
- gdb_assert (blockvector->block (0)->is_global_block ());
- gdb_assert (blockvector->block (1)->is_static_block ());
+ gdb_assert (blockvector->block (GLOBAL_BLOCK)->is_global_block ());
+ gdb_assert (blockvector->block (STATIC_BLOCK)->is_static_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 'J > GLOBAL_BLOCK' 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; )
+ for (int j = num_blocks - 1; j > GLOBAL_BLOCK; --j)
{
- --j;
struct block *b = blockvector->block (j);
gdb_assert (!b->is_global_block ());
base-commit: a4481c8ff808e7237b99815d84b0d4c06ded6124
--
2.51.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] [gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector
2026-07-16 16:56 [PATCH] [gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector Tom de Vries
@ 2026-07-17 14:20 ` Tom Tromey
0 siblings, 0 replies; 2+ messages in thread
From: Tom Tromey @ 2026-07-17 14:20 UTC (permalink / raw)
To: Tom de Vries; +Cc: gdb-patches
>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
Tom> Fix this by rewriting it into an ordinary descending for loop, and using
Tom> symbolic constant GLOBAL_BLOCK to avoid the global block:
Tom> ...
Tom> for (int j = num_blocks - 1; j > GLOBAL_BLOCK; --j)
Tom> {
Tom> struct block *b = blockvector->block (j);
Thanks.
Approved-By: Tom Tromey <tom@tromey.com>
Tom
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-17 14:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-16 16:56 [PATCH] [gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector Tom de Vries
2026-07-17 14:20 ` Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox