forked from Imagelibrary/binutils-gdb
Re-evaluate floating variables as part of variable invalidate to remove references to type structures that might have been freed.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2012-07-30 Andrew Burgess <aburgess@broadcom.com>
|
||||||
|
|
||||||
|
* varobj.c (varobj_invalidate_iter): All varobj must be marked as
|
||||||
|
invalid or reevaluated to prevent prevent references to possibly
|
||||||
|
delete'd type objects being left in the varobj.
|
||||||
|
|
||||||
2012-07-27 Tom Tromey <tromey@redhat.com>
|
2012-07-27 Tom Tromey <tromey@redhat.com>
|
||||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
2012-07-30 Andrew Burgess <aburgess@broadcom.com>
|
||||||
|
|
||||||
|
* gdb.mi/mi-var-invalidate.exp: Create a floating variable and
|
||||||
|
change its format immediately after reloading the binary.
|
||||||
|
|
||||||
2012-07-27 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2012-07-27 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
Fix testsuite regression after --use-deprecated-index-sections removal.
|
Fix testsuite regression after --use-deprecated-index-sections removal.
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ mi_runto do_locals_tests
|
|||||||
# Desc: create local variables
|
# Desc: create local variables
|
||||||
mi_create_varobj linteger linteger "create local variable linteger"
|
mi_create_varobj linteger linteger "create local variable linteger"
|
||||||
|
|
||||||
|
# Desc: create floating variable
|
||||||
|
mi_create_floating_varobj float_simple array "create floating variable"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Reload the same binary.
|
# Reload the same binary.
|
||||||
# Global variable should remain, local should be invalidated.
|
# Global variable should remain, local should be invalidated.
|
||||||
@@ -69,6 +72,12 @@ mi_delete_breakpoints
|
|||||||
mi_gdb_load ${binfile_bis}
|
mi_gdb_load ${binfile_bis}
|
||||||
mi_runto main
|
mi_runto main
|
||||||
|
|
||||||
|
# Change format of floating variable immediately after reload reveals a
|
||||||
|
# bug where gdb still uses a free'd pointer.
|
||||||
|
mi_gdb_test "-var-set-format float_simple hexadecimal" \
|
||||||
|
"\\^done,format=\"hexadecimal\",value=\"\\\[-1\\\]\"" \
|
||||||
|
"set format variable float_simple"
|
||||||
|
|
||||||
# Check local variable is "invalid".
|
# Check local variable is "invalid".
|
||||||
mi_gdb_test "-var-update linteger" \
|
mi_gdb_test "-var-update linteger" \
|
||||||
"\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \
|
"\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \
|
||||||
|
|||||||
15
gdb/varobj.c
15
gdb/varobj.c
@@ -4186,18 +4186,17 @@ _initialize_varobj (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Invalidate varobj VAR if it is tied to locals and re-create it if it is
|
/* Invalidate varobj VAR if it is tied to locals and re-create it if it is
|
||||||
defined on globals. It is a helper for varobj_invalidate. */
|
defined on globals. It is a helper for varobj_invalidate.
|
||||||
|
|
||||||
|
This function is called after changing the symbol file, in this case the
|
||||||
|
pointers to "struct type" stored by the varobj are no longer valid. All
|
||||||
|
varobj must be either re-evaluated, or marked as invalid here. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
varobj_invalidate_iter (struct varobj *var, void *unused)
|
varobj_invalidate_iter (struct varobj *var, void *unused)
|
||||||
{
|
{
|
||||||
/* Floating varobjs are reparsed on each stop, so we don't care if the
|
/* global and floating var must be re-evaluated. */
|
||||||
presently parsed expression refers to something that's gone. */
|
if (var->root->floating || var->root->valid_block == NULL)
|
||||||
if (var->root->floating)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* global var must be re-evaluated. */
|
|
||||||
if (var->root->valid_block == NULL)
|
|
||||||
{
|
{
|
||||||
struct varobj *tmp_var;
|
struct varobj *tmp_var;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user