The attached patch refactors python/hook.in so that there are no individual function calls to load pretty printers and xmethods. This was suggested by Tom here: https://gcc.gnu.org/ml/gcc-patches/2014-08/msg02589.html. He indicates that it is better to put as little as possible in the hook file. The attached patch removes all code which explicitly loads the hooks from hook.in.
2014-09-29 Siva Chandra Reddy <sivachan...@google.com> * python/hook.in: Only import libstdcxx.v6. * python/libstdcxx/v6/__init__.py: Load printers and xmethods.
diff --git a/libstdc++-v3/python/hook.in b/libstdc++-v3/python/hook.in index aeb1cdb..30cf538 100644 --- a/libstdc++-v3/python/hook.in +++ b/libstdc++-v3/python/hook.in @@ -55,18 +55,4 @@ if gdb.current_objfile () is not None: if not dir_ in sys.path: sys.path.insert(0, dir_) -# Load the pretty-printers. -from libstdcxx.v6.printers import register_libstdcxx_printers -register_libstdcxx_printers (gdb.current_objfile ()) - -# Load the xmethods if GDB supports them. -def gdb_has_xmethods(): - try: - import gdb.xmethod - return True - except ImportError: - return False - -if gdb_has_xmethods(): - from libstdcxx.v6.xmethods import register_libstdcxx_xmethods - register_libstdcxx_xmethods (gdb.current_objfile ()) +import libstdcxx.v6 diff --git a/libstdc++-v3/python/libstdcxx/v6/__init__.py b/libstdc++-v3/python/libstdcxx/v6/__init__.py index 8b13789..59c1f27 100644 --- a/libstdc++-v3/python/libstdcxx/v6/__init__.py +++ b/libstdc++-v3/python/libstdcxx/v6/__init__.py @@ -1 +1,32 @@ +# Copyright (C) 2014 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 gdb + +# Load the pretty-printers. +from printers import register_libstdcxx_printers +register_libstdcxx_printers(gdb.current_objfile()) + +# Load the xmethods if GDB supports them. +def gdb_has_xmethods(): + try: + import gdb.xmethod + return True + except ImportError: + return False + +if gdb_has_xmethods(): + from xmethods import register_libstdcxx_xmethods + register_libstdcxx_xmethods(gdb.current_objfile())