diff options
author | Doug Evans <dje@google.com> | 2015-08-18 14:02:03 -0700 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2015-08-18 14:02:03 -0700 |
commit | 4d6cceb4e40a057dbe4d9ad94b0641d5f4725c09 (patch) | |
tree | 8c306120303ae7f18571664c14152cb8ed7f32ff /gdb/testsuite/gdb.python | |
parent | 4e1626f5a8d73573d6cf593fabe5bc80f7b3e04e (diff) | |
download | gdb-4d6cceb4e40a057dbe4d9ad94b0641d5f4725c09.zip gdb-4d6cceb4e40a057dbe4d9ad94b0641d5f4725c09.tar.gz gdb-4d6cceb4e40a057dbe4d9ad94b0641d5f4725c09.tar.bz2 |
PR mi/18833 gdb.execute ("set param value", to_string=True) will crash gdb if using MI
gdb/ChangeLog:
* cli/cli-logging.c (pop_output_files): Don't restore redirection
if MI-like.
* mi/mi-out.c: #include "vec.h".
(ui_filep): New type.
(DEV_VEC_P (ui_filep)): New type.
(struct ui_out_data) <buffer, original_buffer>: Delete.
(struct ui_out_data) <streams>: New member.
(mi_ui_out_impl): Add data_destroy field.
(mi_field_string, mi_field_fmt): Update.
(mi_flush, mi_redirect, field_separator): Update.
(mi_open, mi_close): Update.
(mi_out_buffered, mi_out_rewind, mi_out_put): Update.
(mi_out_data_ctor, mi_out_data_dtor): New functions.
(mi_out_new): Call mi_out_data_ctor.
testsuite/gdb/ChangeLog:
* lib/gdb.exp (skip_python_tests_prompt): Renamed from
skip_python_tests. New arg prompt_regexp.
(skip_python_tests): New function.
* lib/mi-support.exp (mi_skip_python_tests): New function.
* gdb.python/py-mi-objfile-gdb.py: New file.
* gdb.python/py-mi-objfile.c: New file.
* gdb.python/py-mi-objfile.exp: New file.
Diffstat (limited to 'gdb/testsuite/gdb.python')
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi-objfile-gdb.py | 27 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi-objfile.c | 22 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi-objfile.exp | 57 |
3 files changed, 106 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py b/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py new file mode 100644 index 0000000..6e41773 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py @@ -0,0 +1,27 @@ +# Copyright (C) 2015 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/>. + +# This file is part of the GDB testsuite. + +import gdb + +# PR 18833 +# We want to have two levels of redirection while MI is current_uiout. +# This will create one for to_string=True and then another for the +# parameter change notification. +gdb.execute("set width 101", to_string=True) +# And finally a command that will use the original MI stream, which in a +# buggy gdb will use just-freed data. +gdb.execute("list") diff --git a/gdb/testsuite/gdb.python/py-mi-objfile.c b/gdb/testsuite/gdb.python/py-mi-objfile.c new file mode 100644 index 0000000..b92fefb --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-objfile.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2015 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/>. */ + +int +main (void) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.python/py-mi-objfile.exp b/gdb/testsuite/gdb.python/py-mi-objfile.exp new file mode 100644 index 0000000..5424cc1 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-objfile.exp @@ -0,0 +1,57 @@ +# Copyright (C) 2008-2015 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/>. + +# This file is part of the GDB testsuite. It tests exercises PR 18833. + +load_lib mi-support.exp +set MIFLAGS "-i=mi2" + +gdb_exit +if [mi_gdb_start] { + continue +} + +standard_testfile +set pyfile ${testfile}-gdb.py + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested ${testfile}.exp + return -1 +} + +if { [mi_skip_python_tests] } { continue } + +# Make the -gdb.py script available to gdb, it is automagically loaded by gdb. +# Care is taken to put it in the same directory as the binary so that +# gdb will find it. +set remote_python_file [gdb_remote_download host ${srcdir}/${subdir}/${pyfile}] + +mi_delete_breakpoints +mi_gdb_reinitialize_dir $srcdir/$subdir +mi_gdb_test "set auto-load safe-path ${remote_python_file}" \ + {.*\^done} \ + "set safe-path" + +if [is_remote host] { + set filename ${testfile} + remote_download host ${binfile} ${filename} +} else { + set filename ${binfile} +} + +# PR 18833. This will cause an unpatched gdb to crash. +mi_gdb_test "-file-exec-and-symbols ${filename}" \ + ".*\\^done,line=.*${srcfile}\"" \ + "file-exec-and-symbols operation" |