mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
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.
This commit is contained in:
27
gdb/testsuite/gdb.python/py-mi-objfile-gdb.py
Normal file
27
gdb/testsuite/gdb.python/py-mi-objfile-gdb.py
Normal file
@ -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")
|
22
gdb/testsuite/gdb.python/py-mi-objfile.c
Normal file
22
gdb/testsuite/gdb.python/py-mi-objfile.c
Normal file
@ -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;
|
||||
}
|
57
gdb/testsuite/gdb.python/py-mi-objfile.exp
Normal file
57
gdb/testsuite/gdb.python/py-mi-objfile.exp
Normal file
@ -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"
|
Reference in New Issue
Block a user