From: Tom Tromey Date: Tue, 24 Oct 2023 13:53:29 +0000 (-0600) Subject: Add block::function_block X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ba707cadae18a7cc8bb47a736d3d0438d44262a9;p=binutils-gdb.git Add block::function_block This adds the method block::function_block, to easily access a block's enclosing function block. --- diff --git a/gdb/block.c b/gdb/block.c index 6ada69c388f..e588a68aa2f 100644 --- a/gdb/block.c +++ b/gdb/block.c @@ -378,6 +378,19 @@ block::global_block () const /* See block.h. */ +const struct block * +block::function_block () const +{ + const block *block = this; + + while (block != nullptr && block->function () == nullptr) + block = block->superblock (); + + return block; +} + +/* See block.h. */ + void block::set_compunit_symtab (struct compunit_symtab *cu) { diff --git a/gdb/block.h b/gdb/block.h index 9fccbe02b99..a29298517b0 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -273,6 +273,12 @@ struct block : public allocate_on_obstack bool is_global_block () const { return superblock () == nullptr; } + /* Return the function block for this block. Returns nullptr if + there is no enclosing function, i.e., if this block is a static + or global block. */ + + const struct block *function_block () const; + /* Set the compunit of this block, which must be a global block. */ void set_compunit_symtab (struct compunit_symtab *);