aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.python
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.python')
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint-stub-2.cc26
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint-stub.cc36
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint-stub.exp59
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint-stub.h24
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint-stub.py38
5 files changed, 183 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.python/py-prettyprint-stub-2.cc b/gdb/testsuite/gdb.python/py-prettyprint-stub-2.cc
new file mode 100644
index 0000000..41a949d
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-prettyprint-stub-2.cc
@@ -0,0 +1,26 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2023 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/>. */
+
+#include "py-prettyprint-stub.h"
+
+S::S (int i) : m_i (i)
+{
+}
+
+S::~S ()
+{
+}
diff --git a/gdb/testsuite/gdb.python/py-prettyprint-stub.cc b/gdb/testsuite/gdb.python/py-prettyprint-stub.cc
new file mode 100644
index 0000000..9b0aef3
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-prettyprint-stub.cc
@@ -0,0 +1,36 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2023 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/>. */
+
+#include "py-prettyprint-stub.h"
+
+struct S2
+{
+ S2 (int i, long l) : m_s (i), m_l (l)
+ {
+ }
+
+ S m_s;
+ long m_l;
+};
+
+int main ()
+{
+ S s (5);
+ S2 s2 (10, 20);
+
+ return 0; /* Break here. */
+}
diff --git a/gdb/testsuite/gdb.python/py-prettyprint-stub.exp b/gdb/testsuite/gdb.python/py-prettyprint-stub.exp
new file mode 100644
index 0000000..79492ec
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-prettyprint-stub.exp
@@ -0,0 +1,59 @@
+# Copyright (C) 2023 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 Python-based pretty-printing of stubs.
+
+load_lib gdb-python.exp
+
+require allow_python_tests
+
+standard_testfile .cc py-prettyprint-stub-2.cc
+
+set srcfiles [list $srcfile $srcfile2]
+
+if { [build_executable_from_specs \
+ "failed to prepare" \
+ $testfile {c++} \
+ $srcfile {c++ debug} \
+ $srcfile2 {c++}] == -1 } {
+ return -1
+}
+
+# Start with a fresh gdb.
+clean_restart $testfile
+
+if {![runto_main]} {
+ return
+}
+
+set remote_python_file [gdb_remote_download host \
+ ${srcdir}/${subdir}/${testfile}.py]
+
+gdb_breakpoint [gdb_get_line_number "Break here."]
+gdb_continue_to_breakpoint "Break here" ".*Break here.*"
+
+# First test without pretty printer.
+gdb_test "print s" " = <incomplete type>"
+gdb_test "print s2" " = {m_s = <incomplete type>, m_l = 20}"
+
+# Load pretty printer.
+gdb_test_no_output "source ${remote_python_file}" "load python file"
+
+# Test with pretty printer.
+with_test_prefix pp {
+ gdb_test "print s" " = {pp m_i = 5}"
+ gdb_test "print s2" " = {m_s = {pp m_i = 10}, m_l = 20}"
+}
diff --git a/gdb/testsuite/gdb.python/py-prettyprint-stub.h b/gdb/testsuite/gdb.python/py-prettyprint-stub.h
new file mode 100644
index 0000000..1bb56c7
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-prettyprint-stub.h
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2023 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/>. */
+
+struct S
+{
+ S (int);
+ virtual ~S ();
+
+ int m_i;
+};
diff --git a/gdb/testsuite/gdb.python/py-prettyprint-stub.py b/gdb/testsuite/gdb.python/py-prettyprint-stub.py
new file mode 100644
index 0000000..2315494
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-prettyprint-stub.py
@@ -0,0 +1,38 @@
+# Copyright (C) 2023 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 Python-based pretty-printing of stubs.
+
+
+class SPrinter:
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ char_ptr = gdb.lookup_type("char").pointer()
+ int_ptr = gdb.lookup_type("int").pointer()
+ # m_i should be after the vtable, which has the size of a pointer
+ i = (
+ (self.val.address.cast(char_ptr) + int_ptr.sizeof)
+ .cast(int_ptr)
+ .dereference()
+ )
+ return "{pp m_i = %d}" % int(i)
+
+
+pp = gdb.printing.RegexpCollectionPrettyPrinter("S")
+pp.add_printer("S", "^S$", SPrinter)
+gdb.printing.register_pretty_printer(gdb.current_objfile(), pp, True)