aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdb-gdb.py.in
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@adacore.com>2019-03-26 17:30:21 -0500
committerJoel Brobecker <brobecker@adacore.com>2019-03-26 18:30:21 -0400
commit7f5331a885c2e8b8cb8be5b27dc4bcfa290ad6c0 (patch)
tree6bc2586b2dba30c5f92bf6825910ff6898c48e05 /gdb/gdb-gdb.py.in
parent9f9aa85206ab31d2c583e7fef568700d31eb577e (diff)
downloadgdb-7f5331a885c2e8b8cb8be5b27dc4bcfa290ad6c0.zip
gdb-7f5331a885c2e8b8cb8be5b27dc4bcfa290ad6c0.tar.gz
gdb-7f5331a885c2e8b8cb8be5b27dc4bcfa290ad6c0.tar.bz2
gdb-gdb.py.in: Fix error when printing range type
I noticed that trying to print the contents of a struct main_type would fail when the type was a TYPE_CODE_RANGE: (gdb) p *type.main_type $1 = Python Exception <class 'gdb.error'> There is no member named low_undefined.: And indeed, Python is right, fields "low_undefined" has been removed from struct range_bounds back in ... 2014! It was done when we introduced dynamic bounds handling. This patch fixes gdb-gdb.py.in according to the new structure. gdb/ChangeLog: * gdb-gdb.py.in (StructMainTypePrettyPrinter.bound_img): New method. (StructMainTypePrettyPrinter.bounds_img): Use new "bound_img" method to compute the bounds of range types. Also print "[evaluated]" if the bounds' values come from a dynamic evaluation.
Diffstat (limited to 'gdb/gdb-gdb.py.in')
-rw-r--r--gdb/gdb-gdb.py.in28
1 files changed, 21 insertions, 7 deletions
diff --git a/gdb/gdb-gdb.py.in b/gdb/gdb-gdb.py.in
index 4b82964..8700689 100644
--- a/gdb/gdb-gdb.py.in
+++ b/gdb/gdb-gdb.py.in
@@ -181,17 +181,31 @@ class StructMainTypePrettyPrinter:
fields.append(self.struct_field_location_img(f))
return label + "\n" + " {" + ",\n ".join(fields) + "}"
+ def bound_img(self, bound_name):
+ """Return an image of the given main_type's bound."""
+ b = self.val['flds_bnds']['bounds'].dereference()[bound_name]
+ bnd_kind = str(b['kind'])
+ if bnd_kind == 'PROP_CONST':
+ return str(b['data']['const_val'])
+ elif bnd_kind == 'PROP_UNDEFINED':
+ return '(undefined)'
+ else:
+ info = [bnd_kind]
+ if bound_name == 'high' and b['flag_upper_bound_is_count']:
+ info.append('upper_bound_is_count')
+ return '{} ({})'.format(str(b['data']['baton']), ','.join(info))
+
def bounds_img(self):
"""Return an image of the main_type bounds.
"""
b = self.val['flds_bnds']['bounds'].dereference()
- low = str(b['low'])
- if b['low_undefined'] != 0:
- low += " (undefined)"
- high = str(b['high'])
- if b['high_undefined'] != 0:
- high += " (undefined)"
- return "flds_bnds.bounds = {%s, %s}" % (low, high)
+ low = self.bound_img('low')
+ high = self.bound_img('high')
+
+ img = "flds_bnds.bounds = {%s, %s}" % (low, high)
+ if b['flag_bound_evaluated']:
+ img += ' [evaluated]'
+ return img
def type_specific_img(self):
"""Return a string image of the main_type type_specific union.