mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
Fix for PR mi/15863
If an MI client creates a varobj and attempts to update the root /before/ the inferior is started, gdb will throw an internal error: (gdb) -var-create * - batch_flag ^done,name="var1",numchild="0",value="0",type="int",has_more="0" (gdb) -var-update var1 ^done,changelist=[] (gdb) -var-update * ~"../../src/gdb/thread.c:628: internal-error: is_thread_state: Assertion `tp' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugging session? " ~"(y or n) " The function that handles the varobj update in the failing case, mi_cmd_var_udpate_iter, checks if the thread/inferior is stopped before attempting to update the varobj. It calls is_stopped (inferior_ptid) which calls is_thread_state: tp = find_thread_ptid (ptid); gdb_assert (tp); When there is no inferior, ptid is null_ptid, and find_thread_ptid (null_ptid) returns NULL and the assertion is triggered. This patch changes mi_cmd_var_update_iter to behave the same way "-var-update var1" does: by calling the thread "stopped" if there is no inferior (and thereby calling varobj_update_one). ChangeLog 2014-06-16 Keith Seitz <keiths@redhat.com> PR mi/15863 * mi/mi-cmd-var.c (mi_cmd_var_update_iter): Do not attempt to update the varobj if inferior_ptid is null_ptid. testsuite/ChangeLog 2014-06-16 Keith Seitz <keiths@redhat.com> PR mi/15863 * gdb.mi/mi-var-cmd.exp: Add test for -var-update before the inferior is started.
This commit is contained in:
parent
b97e87cc01
commit
6be47f0c48
@ -1,3 +1,9 @@
|
||||
2014-06-16 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
PR mi/15863
|
||||
* mi/mi-cmd-var.c (mi_cmd_var_update_iter): Do not attempt
|
||||
to update the varobj if inferior_ptid is null_ptid.
|
||||
|
||||
2014-06-16 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* target.h (struct target_ops) <to_info_proc>: Make parameter
|
||||
|
@ -642,7 +642,9 @@ mi_cmd_var_update_iter (struct varobj *var, void *data_pointer)
|
||||
|
||||
thread_id = varobj_get_thread_id (var);
|
||||
|
||||
if (thread_id == -1 && is_stopped (inferior_ptid))
|
||||
if (thread_id == -1
|
||||
&& (ptid_equal (inferior_ptid, null_ptid)
|
||||
|| is_stopped (inferior_ptid)))
|
||||
thread_stopped = 1;
|
||||
else
|
||||
{
|
||||
|
@ -1,3 +1,9 @@
|
||||
2014-06-16 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
PR mi/15863
|
||||
* gdb.mi/mi-var-cmd.exp: Add test for -var-update before
|
||||
the inferior is started.
|
||||
|
||||
2014-06-16 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.base/break-main-file-remove-fail.c: New file.
|
||||
|
@ -50,6 +50,12 @@ mi_gdb_load ${binfile}
|
||||
|
||||
mi_create_varobj "global_simple" "global_simple" "create global variable"
|
||||
|
||||
# PR mi/15863
|
||||
# Attempt to update the varobj before running the inferior.
|
||||
mi_gdb_test "-var-update *" \
|
||||
"\\^done,changelist=\\\[\\\]" \
|
||||
"update varobj before running inferior"
|
||||
|
||||
# Test: c_variable-1.2
|
||||
# Desc: Create non-existent variable
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user