gdb: Fix regression in varobj recreation
authorLancelot SIX <lancelot.six@amd.com>
Tue, 2 Aug 2022 12:14:20 +0000 (13:14 +0100)
committerLancelot SIX <lancelot.six@amd.com>
Wed, 3 Aug 2022 08:57:40 +0000 (09:57 +0100)
commitf74a5e6f2ed5180ce28d6478a6d7a7a1982c5d43
treef6604c034273bc6a6222c7730dd3ae6361f0eef1
parentecfc6ddb8074aff8882155b5900958725094f508
gdb: Fix regression in varobj recreation

Commit bc20e562ec0 "Fix use after free in varobj" introduced a
regression.  This commit makes sure that the varobj object does not
keeps stale references to object being freed when we unload an objfile.
This includes the "valid_block" field which is reset to nullptr if the
pointed to block is tied to an objfile being freed.

However, at some point varobj_invalidate_iter might try to recreate
varobjs tracking either floating or globals.  Varobj tracking globals
are identified as having the "valid_block" field set nullptr, but as
bc20e562ec0 might clear this field, we have lost the ability to
distinguish between varobj referring to globals and non globals.

Fix this by introducing a "global" flag which tracks if a given varobj
was initially created as tracking a global.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29426
gdb/varobj.c