From patchwork Wed Oct 15 20:28:47 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Evans X-Patchwork-Id: 3236 Received: (qmail 23152 invoked by alias); 15 Oct 2014 20:28:53 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 23142 invoked by uid 89); 15 Oct 2014 20:28:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ig0-f202.google.com Received: from mail-ig0-f202.google.com (HELO mail-ig0-f202.google.com) (209.85.213.202) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 15 Oct 2014 20:28:50 +0000 Received: by mail-ig0-f202.google.com with SMTP id r10so364784igi.3 for ; Wed, 15 Oct 2014 13:28:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:mime-version:content-type :content-transfer-encoding:message-id:date:to:cc:subject:in-reply-to :references; bh=me0KEK7DTHYZsPzpmPxiRn5P0Rg5ke8ZCvaJBZ58kxw=; b=agGRRTLZLa4r4gpeBMuCd8UKs7YuX4AuWv1jU2/rs/alR6WzEgJ69g4f8wMfHvn412 6xTkdEg+hM9pbWTXcu2kBAcmepGyIyw/otn3aIrz2mnq6A/GUumWPbAywlG9xALW2GMC mmD+2LYy465Oa7jKiSqvYtEnEgaF7C+HF459rPnY1FCAvTGJhfzlmsSKVJoU2kVV5rzs yzal8fObQh6jcs3XyjbsNgzl52oA5iAF/Dx1CqsoKV52rG5CoP1mdsR6t4etECgLMTR3 e/MD8K5WiuZoKU3A/YGrq0S+dnYHyVHZQugQ8+w5iaZRfQcX/q09VzZnUHdOm2PfihuE cGFw== X-Gm-Message-State: ALoCoQktiGGl5ySztCyM9nCUSB9u00cYdSSYKATkz6rSpxtm0Dr5kDwdT2SGQ2598F6Rlx+bVZtTKfgv/PaMRWiKCGKGrgYGWQq8sxZjJ5g8n12J0pmPvIcMlG3kfT9wszBCnfKbMZPCabXJXVVzOc3/mLPy5GnHC5XU+eBzdFlV6bG+nncBCn8= X-Received: by 10.43.133.131 with SMTP id hy3mr177656icc.12.1413404928402; Wed, 15 Oct 2014 13:28:48 -0700 (PDT) Received: from corpmail-nozzle1-2.hot.corp.google.com ([100.108.1.103]) by gmr-mx.google.com with ESMTPS id k66si1014678yho.7.2014.10.15.13.28.47 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Oct 2014 13:28:48 -0700 (PDT) Received: from ruffy2.mtv.corp.google.com ([172.17.128.107]) by corpmail-nozzle1-2.hot.corp.google.com with ESMTP id everhoRz.1; Wed, 15 Oct 2014 13:28:48 -0700 From: Doug Evans MIME-Version: 1.0 Message-ID: <21566.55551.382256.653336@ruffy2.mtv.corp.google.com> Date: Wed, 15 Oct 2014 13:28:47 -0700 To: "Tedeschi, Walfred" Cc: "gdb-patches@sourceware.org" Subject: RE: [PATCH, PR 17364] Need better printer names in bound_register.py In-Reply-To: References: <1412062133-22469-1-git-send-email-walfred.tedeschi@intel.com> <21558.50988.529374.214950@ruffy2.mtv.corp.google.com> X-IsSubscribed: yes Tedeschi, Walfred writes: > Hello Doug, > > Thanks a lot for the nice and detailed explanation. I am fine to stick with the patch you mentioned. > > Grouping the pretty-printers is indeed a nice idea! > Sorry for having taking some time to answer to the defect. I usually try to answer quick! :( Hi. No worries. I've committed the following to trunk and the 7.8 branch. We can work on further additions as we're able. 2014-10-15 Doug Evans Walfred Tedeschi PR python/17364 * python/lib/gdb/__init__.py (packages): Add "printer". * python/lib/gdb/command/bound_registers.py: Moved to ... * python/lib/gdb/printer/bound_registers.py: ... here. Add printer to global set of builtin printers. Rename printer from "bound" to "mpx_bound128". * python/lib/gdb/printing.py (_builtin_pretty_printers): New global, registered as global "builtin" printer. (add_builtin_pretty_printer): New function. * data-directory/Makefile.in (PYTHON_FILE_LIST): Update, and add gdb/printer/__init__.py. diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in index 1e8cd4b..00c70bb 100644 --- a/gdb/data-directory/Makefile.in +++ b/gdb/data-directory/Makefile.in @@ -64,7 +64,6 @@ PYTHON_FILE_LIST = \ gdb/printing.py \ gdb/prompt.py \ gdb/xmethod.py \ - gdb/command/bound_registers.py \ gdb/command/__init__.py \ gdb/command/xmethods.py \ gdb/command/frame_filters.py \ @@ -74,7 +73,9 @@ PYTHON_FILE_LIST = \ gdb/command/explore.py \ gdb/function/__init__.py \ gdb/function/caller_is.py \ - gdb/function/strfns.py + gdb/function/strfns.py \ + gdb/printer/__init__.py \ + gdb/printer/bound_registers.py @HAVE_PYTHON_TRUE@PYTHON_FILES = $(PYTHON_FILE_LIST) @HAVE_PYTHON_FALSE@PYTHON_FILES = diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py index 557e168..8c6eee2 100644 --- a/gdb/python/lib/gdb/__init__.py +++ b/gdb/python/lib/gdb/__init__.py @@ -81,7 +81,8 @@ PYTHONDIR = os.path.dirname(os.path.dirname(__file__)) packages = [ 'function', - 'command' + 'command', + 'printer' ] # pkgutil.iter_modules is not available prior to Python 2.6. Instead, diff --git a/gdb/python/lib/gdb/command/bound_registers.py b/gdb/python/lib/gdb/command/bound_registers.py deleted file mode 100644 index 24d4c45..0000000 --- a/gdb/python/lib/gdb/command/bound_registers.py +++ /dev/null @@ -1,45 +0,0 @@ -# Pretty-printer utilities. -# Copyright (C) 2013-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 . - -import gdb.printing - -class BoundPrinter: - """Adds size field to a _rawbound128 type.""" - - def __init__ (self, val): - self.val = val - - def to_string (self): - upper = self.val["ubound"] - lower = self.val["lbound"] - size = (long) ((upper) - (lower)) - if size > -1: - size = size + 1 - result = '{lbound = %s, ubound = %s} : size %s' % (lower, upper, size) - return result - -# There are two pattern matching used: first one is related to a library -# second is related to the type. Since we are displaying a register all -# libraries are accepted. Type to be processed is the same present -# in the xml file. - -def build_pretty_printer (): - pp = gdb.printing.RegexpCollectionPrettyPrinter (".*") - pp.add_printer ('bound', '^__gdb_builtin_type_bound128', BoundPrinter) - return pp - -gdb.printing.register_pretty_printer (gdb.current_objfile (), - build_pretty_printer ()) diff --git a/gdb/python/lib/gdb/printer/__init__.py b/gdb/python/lib/gdb/printer/__init__.py new file mode 100644 index 0000000..04c0c7d --- /dev/null +++ b/gdb/python/lib/gdb/printer/__init__.py @@ -0,0 +1,14 @@ +# 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 . diff --git a/gdb/python/lib/gdb/printer/bound_registers.py b/gdb/python/lib/gdb/printer/bound_registers.py new file mode 100644 index 0000000..25e6e80 --- /dev/null +++ b/gdb/python/lib/gdb/printer/bound_registers.py @@ -0,0 +1,36 @@ +# Pretty-printers for bounds registers. +# Copyright (C) 2013-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 . + +import gdb.printing + +class MpxBound128Printer: + """Adds size field to a mpx __gdb_builtin_type_bound128 type.""" + + def __init__ (self, val): + self.val = val + + def to_string (self): + upper = self.val["ubound"] + lower = self.val["lbound"] + size = (long) ((upper) - (lower)) + if size > -1: + size = size + 1 + result = '{lbound = %s, ubound = %s} : size %s' % (lower, upper, size) + return result + +gdb.printing.add_builtin_pretty_printer ('mpx_bound128', + '^__gdb_builtin_type_bound128', + MpxBound128Printer) diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py index 2940b93..ff5250a 100644 --- a/gdb/python/lib/gdb/printing.py +++ b/gdb/python/lib/gdb/printing.py @@ -263,3 +263,17 @@ class FlagEnumerationPrinter(PrettyPrinter): return _EnumInstance(self.enumerators, val) else: return None + + +# Builtin pretty-printers. +# The set is defined as empty, and files in printing/*.py add their printers +# to this with add_builtin_pretty_printer. + +_builtin_pretty_printers = RegexpCollectionPrettyPrinter("builtin") + +register_pretty_printer(None, _builtin_pretty_printers) + +# Add a builtin pretty-printer. + +def add_builtin_pretty_printer(name, regexp, printer): + _builtin_pretty_printers.add_printer(name, regexp, printer)