gdb/varobj: Do not invalidate locals in varobj_invalidate_iter
authorLancelot SIX <lancelot.six@amd.com>
Thu, 11 Aug 2022 14:09:55 +0000 (15:09 +0100)
committerLancelot SIX <lancelot.six@amd.com>
Thu, 11 Aug 2022 14:09:55 +0000 (15:09 +0100)
commit739be95178196df4babdcb47de856a12ba06253f
tree6599960bd0fee5a00c7debca1cca6f9c2cc6480b
parent537710a69cf440250c27a59b7d01b5a5a1a9b462
gdb/varobj: Do not invalidate locals in varobj_invalidate_iter

The varobj_invalidate_iter function has logic to invalidate any local
varobj it can find.  However since bc20e562ec0 "gdb/varobj: Fix use
after free in varobj" all varobj containing references to an objfile are
cleared when the objfile goes out of scope.  This means that at this
point any local varobj seen by varobj_invalidate_iter either has
already been invalidated by varobj_invalidate_if_uses_objfile or only
contains valid references and there is no reason to invalidate it.

This patch proposes to remove this unnecessary invalidation and adds a
testcase which exercises a scenario where a local varobj can legitimately
survive a call to varobj_invalidate_iter.

At this point the varobj_invalidate and varobj_invalidate_iter seem
misnamed since they deal with re-creating invalid objects and do not do
invalidation, but this will be fixed in a following patch.

Tested on x86_64-linux.
gdb/testsuite/gdb.mi/mi-var-invalidate-shlib.exp
gdb/varobj.c