| # 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 have been |
| # registered when a custom event handler for the new_objfile event |
| # is called. |
| |
| import gdb |
| import os |
| |
| |
| def new_objfile_handler(event): |
| assert isinstance(event, gdb.NewObjFileEvent) |
| objfile = event.new_objfile |
| |
| # Only observe the custom test library. |
| libname = "libpy-autoloaded-pretty-printers-in-newobjfile-event" |
| if libname in os.path.basename(objfile.filename): |
| # If everything went well and the pretty-printer auto-load happened |
| # before notifying the Python listeners, we expect to see one pretty |
| # printer, and it must be ours. |
| all_good = ( |
| len(objfile.pretty_printers) == 1 |
| and objfile.pretty_printers[0].name == "my_library" |
| ) |
| |
| if all_good: |
| gdb.parse_and_eval("all_good = 1") |
| else: |
| print("Oops, not all good:") |
| print("pretty printer count: {}".format(len(objfile.pretty_printers))) |
| |
| for pp in objfile.pretty_printers: |
| print(" - {}".format(pp.name)) |
| |
| |
| gdb.events.new_objfile.connect(new_objfile_handler) |