From 09748966c1b65c953971f8e56d7f6113cfbfda95 Mon Sep 17 00:00:00 2001 From: Walfred Tedeschi Date: Wed, 20 Nov 2013 13:03:07 +0100 Subject: [PATCH] Add pretty-printer for MPX bnd registers. Boundary length is simpler implemented by means of a pretty printer. This simplifies users life when examining a bound register. Changelog: 2013-11-20 Walfred Tedeschi * python/lib/gdb/command/bound_register.py: New file. * gdb/data-directory/Makefile.in: copy bond_register.py to the right path to be initialized at gdb startup. testsuite/ * gdb.python/py-pp-maint.exp: Consider new pretty-print added for registers. Change-Id: Id4f39845e5ece56c370a1fd4343648909f08b731 Signed-off-by: Walfred Tedeschi Conflicts: gdb/ChangeLog --- gdb/ChangeLog | 6 +++ gdb/data-directory/Makefile.in | 1 + gdb/python/lib/gdb/command/bound_registers.py | 45 +++++++++++++++++++ gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.python/py-pp-maint.exp | 8 ++-- 5 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 gdb/python/lib/gdb/command/bound_registers.py diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f8c6fbd519f..ff812f4b3e5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-11-20 Walfred Tedeschi + + * python/lib/gdb/command/bound_register.py: New file. + * gdb/data-directory/Makefile.in: copy bond_register.py to the right path to + be initialized at gdb startup. + 2013-11-20 Walfred Tedeschi * amd64-linux-nat.c (amd64_linux_gregset32_reg_offset): diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in index 3d052137f2b..1e00c5857e8 100644 --- a/gdb/data-directory/Makefile.in +++ b/gdb/data-directory/Makefile.in @@ -61,6 +61,7 @@ PYTHON_FILES = \ gdb/types.py \ gdb/printing.py \ gdb/prompt.py \ + gdb/command/bound_registers.py \ gdb/command/__init__.py \ gdb/command/frame_filters.py \ gdb/command/type_printers.py \ diff --git a/gdb/python/lib/gdb/command/bound_registers.py b/gdb/python/lib/gdb/command/bound_registers.py new file mode 100644 index 00000000000..0b1baf69a0a --- /dev/null +++ b/gdb/python/lib/gdb/command/bound_registers.py @@ -0,0 +1,45 @@ +# Pretty-printer utilities. +# Copyright (C) 2013 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/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 68be4b3add9..871c2c85b7e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2013-11-20 Walfred Tedeschi +2013-11-20 Walfred Tedeschi + + * gdb.python/py-pp-maint.exp: Consider new pretty-print added + for bnd registers. + * gdb.xml/maint_print_struct.xml (bitfield): Added bitfield having start and end equal 0. diff --git a/gdb/testsuite/gdb.python/py-pp-maint.exp b/gdb/testsuite/gdb.python/py-pp-maint.exp index 4b5ef5ad24d..023d55f7cda 100644 --- a/gdb/testsuite/gdb.python/py-pp-maint.exp +++ b/gdb/testsuite/gdb.python/py-pp-maint.exp @@ -60,7 +60,7 @@ gdb_test "print flt" " = x=<42> y=<43>" \ gdb_test "print ss" " = a= b=<$hex>> b= b=<$hex>>" \ "print ss enabled #1" -set num_pp 6 +set num_pp 7 gdb_test "disable pretty-printer" \ "$num_pp printers disabled.*0 of $num_pp printers enabled" @@ -78,7 +78,7 @@ gdb_test "disable pretty-printer global lookup_function_lookup_test" \ "1 printer disabled.*[expr $num_pp - 1] of $num_pp printers enabled" gdb_test "disable pretty-printer global pp-test;.*" \ - "[expr $num_pp - 1] printers disabled.*0 of $num_pp printers enabled" + "[expr $num_pp - 2] printers disabled.*1 of $num_pp printers enabled" gdb_test "info pretty-printer global .*function" \ {.*function_lookup_test \[disabled\].*} @@ -93,13 +93,13 @@ gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \ "print ss disabled" gdb_test "enable pretty-printer global lookup_function_lookup_test" \ - "1 printer enabled.*1 of $num_pp printers enabled" + "1 printer enabled.*2 of $num_pp printers enabled" # This doesn't enable any printers because each subprinter in the collection # is still individually disabled. But this is still needed, to enable the # collection itself. gdb_test "enable pretty-printer global pp-test" \ - "0 printers enabled.*1 of $num_pp printers enabled" + "0 printers enabled.*2 of $num_pp printers enabled" gdb_test "enable pretty-printer global pp-test;.*ss.*" \ "2 printers enabled.*[expr $num_pp - 3] of $num_pp printers enabled" -- 2.30.2