| # Copyright 2007-2022 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| # |
| # Test essential Machine interface (MI) operations |
| # |
| # Verify that once binary file has changed, GDB correctly handles |
| # previously defined MI variables. |
| # |
| |
| |
| load_lib mi-support.exp |
| set MIFLAGS "-i=mi" |
| |
| gdb_exit |
| if [mi_gdb_start] { |
| return |
| } |
| |
| standard_testfile var-cmd.c |
| |
| if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { |
| untested "failed to compile" |
| return -1 |
| } |
| # Just change the output binary. |
| set binfile_bis [standard_output_file mi-var-invalidate_bis] |
| if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile_bis}" executable {debug}] != "" } { |
| untested "failed to compile" |
| return -1 |
| } |
| |
| set testfile2 "basics" |
| set srcfile2 ${testfile2}.c |
| set binfile2 [standard_output_file ${testfile2}] |
| if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug}] != "" } { |
| untested "failed to compile" |
| return -1 |
| } |
| |
| mi_delete_breakpoints |
| mi_gdb_reinitialize_dir $srcdir/$subdir |
| mi_gdb_load ${binfile} |
| |
| # Desc: Create global variable. |
| mi_create_varobj global_simple global_simple "create global variable" |
| |
| mi_runto do_locals_tests |
| |
| # Desc: create local variables |
| 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. |
| # Global variable should remain, local should be invalidated. |
| # |
| mi_delete_breakpoints |
| mi_gdb_load ${binfile_bis} |
| 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". |
| mi_gdb_test "-var-update linteger" \ |
| "\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \ |
| "linteger not anymore in scope due to binary changes" |
| |
| mi_gdb_test "-var-info-type linteger" \ |
| "\\^done,type=\"\"" \ |
| "no type for invalid variable linteger (1)" |
| |
| # Check global variable is still correct. |
| mi_gdb_test "-var-update global_simple" \ |
| "\\^done,changelist=\\\[\]" \ |
| "global_simple still alive" |
| |
| mi_gdb_test "-var-info-type global_simple" \ |
| "\\^done,type=\"simpleton\"" \ |
| "type simpleton for valid variable global_simple" |
| |
| |
| # |
| # Load an other binary. |
| # All variables must be invalidated. |
| # |
| mi_delete_breakpoints |
| mi_gdb_load ${binfile2} |
| # Check local variable are "invalid" |
| mi_gdb_test "-var-update linteger" \ |
| "\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \ |
| "linteger not valid anymore due to binary changes" |
| |
| mi_gdb_test "-var-info-type linteger" \ |
| "\\^done,type=\"\"" \ |
| "no type for invalid variable linteger (2)" |
| |
| # Check global variable are still correct. |
| mi_gdb_test "-var-update global_simple" \ |
| "\\^done,changelist=\\\[\{name=\"global_simple\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \ |
| "global_simple not anymore in scope due to binary changes" |
| |
| mi_gdb_test "-var-info-type global_simple" \ |
| "\\^done,type=\"\"" \ |
| "no type for invalid variable global_simple" |
| |
| mi_gdb_exit |
| return 0 |