diff options
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c | 62 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp | 88 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py | 57 |
4 files changed, 213 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index eef5fdf..8011ff1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-07-31 Jan Vrany <jan.vrany@fit.cvut.cz> + + * gdb.python/py-mi-var-info-path-expression.c: New file. + * gdb.python/py-mi-var-info-path-expression.py: New file. + * gdb.python/py-mi-var-info-path-expression.exp: New file. + 2018-07-30 Sergio Durigan Junior <sergiodj@redhat.com> * lib/gdbserver-support.exp (gdbserver_start): Match any kind of diff --git a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c new file mode 100644 index 0000000..38fd1d5 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c @@ -0,0 +1,62 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright (C) 2018 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/>. */ + +enum cons_type +{ + type_atom = 0, + type_cons = 1 +}; + +struct atom +{ + int ival; +}; + +struct cons +{ + enum cons_type type; + union + { + struct atom atom; + struct cons *slots[2]; + }; +}; + +#define nil ((struct cons*)0); + +int +main () +{ + struct cons c1, c2, c3, c4; + + c1.type = type_cons; + c1.slots[0] = &c4; + c1.slots[1] = &c2; + + c2.type = type_cons; + c2.slots[0] = nil; + c2.slots[1] = &c3; + + c3.type = type_cons; + c3.slots[0] = nil; + c3.slots[1] = nil; + + c4.type = type_atom; + c4.atom.ival = 13; + + return 0; /* next line */ +} diff --git a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp new file mode 100644 index 0000000..c3b6d31 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp @@ -0,0 +1,88 @@ +# Copyright (C) 2018 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/>. + +# Tests whether -var-info-path-expression fails as documented when +# invoked on a dynamic varobj. + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +gdb_exit +if {[mi_gdb_start]} { + continue +} + +# +# Start here +# +standard_testfile + +if {[gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != "" } { + return -1 +} + +mi_gdb_test "source ${srcdir}/${subdir}/${testfile}.py" \ + ".*\\^done" \ + "load python file" + +mi_gdb_test "-enable-pretty-printing" \ + "\\^done" \ + "-enable-pretty-printing" + +mi_gdb_test "set python print-stack full" \ + ".*\\^done" \ + "set python print-stack full" + + +mi_run_to_main + + +mi_continue_to_line [gdb_get_line_number "next line" ${srcfile}] \ + "step to breakpoint" + +mi_gdb_test "-var-create c1 * &c1" \ + "\\^done.*" \ + "-var-create c1 * &c1" + +mi_gdb_test "-var-info-path-expression c1" \ + "\\^done,path_expr=\"&c1\"" \ + "-var-info-path-expression c1" + +mi_gdb_test "-var-list-children c1" \ + "\\^done,numchild=\"2\",children=.child=\{name=\"c1.car\".*child=\{name=\"c1.cdr\".*" \ + "-var-list-children c1" + +mi_gdb_test "-var-info-path-expression c1.cdr" \ + "\\^error,msg=\".*\"" \ + "-var-info-path-expression c1.cdr" + +mi_gdb_test "-var-list-children c1.cdr" \ + "\\^done,numchild=\"2\",children=.child=\{name=\"c1.cdr.car\".*child=\{name=\"c1.cdr.cdr\".*" \ + "-var-list-children c1.cdr" + +mi_gdb_test "-var-info-path-expression c1.cdr.cdr" \ + "\\^error,msg=\".*\"" \ + "-var-info-path-expression c1.cdr.cdr" + +mi_gdb_test "-var-list-children c1.car" \ + "\\^done,numchild=\"1\",children=.child=\{name=\"c1.car.atom\".*" \ + "-var-list-children c1.car" + +mi_gdb_test "-var-list-children c1.car.atom" \ + "\\^done,numchild=\"1\",children=.child=\{name=\"c1.car.atom.ival\".*" \ + "-var-list-children c1.car.atom" + +mi_gdb_test "-var-info-path-expression c1.car.atom.ival" \ + "\\^error,msg=\".*\"" \ + "-var-info-path-expression c1.car.atom.ival" diff --git a/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py new file mode 100644 index 0000000..6fe0b52 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py @@ -0,0 +1,57 @@ +# Copyright (C) 2018 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/>. + +import sys +import gdb +import gdb.types + +# Following is for Python 3 compatibility... +if sys.version_info[0] > 2: + long = int + + +class cons_pp(object): + def __init__(self, val): + self._val = val + + def to_string(self): + if long(self._val) == 0: + return "nil" + elif long(self._val['type']) == 0: + return "( . )" + else: + return "%d" % self._val['atom']['ival'] + + def children(self): + if long(self._val) == 0: + return [] + elif long(self._val['type']) == 0: + return [ + ('atom', self._val['atom']) + ] + else: + return [ + ('car' , self._val["slots"][0]), + ('cdr' , self._val["slots"][1]), + ] + +def cons_pp_lookup(val): + if str(val.type) == 'struct cons *': + return cons_pp(val) + else: + return None + +del gdb.pretty_printers[1:] +gdb.pretty_printers.append(cons_pp_lookup) |