| # Copyright (C) 2021 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 that Python pretty-printers |
| # defined in a Python script that is autoloaded are registered when an event |
| # handler for the new_objfile event is called. |
| |
| load_lib gdb-python.exp |
| |
| standard_testfile -main.cc |
| |
| set srcfile_lib "${testfile}-lib.cc" |
| set python_event_handler_file "${srcdir}/${subdir}/${testfile}.py" |
| set libname "lib${testfile}" |
| set python_autoload_file "${srcdir}/${subdir}/${libname}.so-gdb.py" |
| set binfile_lib [standard_output_file "${libname}.so"] |
| |
| # Start GDB first - needed for skip_python_tests. |
| clean_restart |
| |
| # Skip all tests if Python scripting is not enabled. |
| if { [skip_python_tests] } { continue } |
| |
| # Compile library. |
| if { [gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} \ |
| {debug c++}] != "" } { |
| return -1 |
| } |
| |
| # Compile main program. |
| if { [gdb_compile ${srcdir}/${subdir}/${srcfile} \ |
| ${binfile} \ |
| executable \ |
| [list debug c++ shlib=$binfile_lib]] != "" } { |
| return -1 |
| } |
| |
| # Make the -gdb.py script available to gdb, it is automatically loaded by |
| # gdb if it is put in the same directory as the library. |
| set remote_python_autoload_file \ |
| [gdb_remote_download host $python_autoload_file] |
| |
| gdb_test_no_output \ |
| "set auto-load safe-path ${remote_python_autoload_file}" \ |
| "set auto-load safe-path" |
| |
| # Load the Python file that defines a handler for the new_objfile event. |
| set remote_python_event_handler_file\ |
| [gdb_remote_download host $python_event_handler_file] |
| gdb_test_no_output "source ${remote_python_event_handler_file}" "load python file" |
| |
| gdb_load ${binfile} |
| |
| gdb_test_no_output "set print pretty on" |
| |
| if { ![runto_main] } { |
| return |
| } |
| |
| # Check that the new_objfile handler saw the pretty-printer. |
| gdb_test "print all_good" " = true" |
| |
| # Check that the pretty-printer actually works. |
| gdb_test "info pretty-printer" "my_library.*MyClassTestLib.*" |
| gdb_breakpoint [gdb_get_line_number "break to inspect"] |
| gdb_test "continue" "Breakpoint $decimal, main .*" |
| gdb_test "print test" "MyClassTestLib object, id: 1.*" |