From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic304-22.consmr.mail.ir2.yahoo.com (sonic304-22.consmr.mail.ir2.yahoo.com [77.238.179.147]) by sourceware.org (Postfix) with ESMTPS id 2A4F1384A033 for ; Sat, 6 Mar 2021 17:45:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2A4F1384A033 X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1615052724; bh=+7nLgLA/gIaZHpMceFmXYALh5LFM6c+CUR1nkoXd056=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=L9m0ZGUmSkbUdxaqccj6T1gD9j4bB7VdKbUvEO1Ww3d43APs+jhQX9cbarAXw5mgNLG/azanSqKrNxfdjtpucUIwofvr3vTtwb8+/MHnt0GpzmDPFNQfWppWzngENtRtJelAZE4cQ5M7fniDZh129KqtRJCVIDQn3Xdg3Zq5tLxjHKnNb1BN0gtXUpd8XQonL4YumamJWCoYcPi75V9ht6mEZJjLPGMWZwji244sb6hp2U/R/2LYOv6XNON6IQY2Y/VXQ2wSSuDa/rPVPHc9uM/tb/RyQrn8gtG6S6S6K9UDiq4xB/XQmLkfqZP5VIzd93R8/7eRLKbwEb8cMdeXZQ== X-YMail-OSG: 877g_l0VM1nXSnxMcEoDIgfOc3Qdysilaq3j2xyL8cQ55YLwYIhJlFpXTd_Jr0Q Fz3yV6AQ8JXmRl83bn_a94FjG4cRMkEsUPFsVgUI_qoQMzPyOxiTwd.L9qM3fly20iG6_Qr6wBoy t8lMUKCYiwVmINoUMofTCHglFSjw02P6kttDMKeAhNY9U4uCK3oESm8xsl07wkJmUG9jQnZS_LYi qjb7EzWIGxIG7Vha8NJa97rXkUIQdhBttyMWF2M9w.VcRIb14VOx_qjHyab.FpWCcn_XVTW87sc6 YcudKalmamrqxvkcXVx6jcHZziNnb4pqL09ZBh1BvCPDulEmxli2Ts1IDJnxO0g_uEjdUhkalfEQ cKjg6tjxfjTlQg9aIu4Lj0o6wVPHgST9clDE5iD_arY9hW7.COYjohU2DWo5nQ2ewj2c7KFVqqQY dnkxsfTyiQlVKM0LJsWdlemzWgz_ncRorEnhbCrCIwu_2QW4sDD9bX5_OHgi_baoVW1wttL396zC tqpCLCk78HfShbdN8C7zNlw_SVfY4E7Aa2TkLqpO_kq_PtHw9NWZEvonMnSzrVbZy3b4.MNnljCy Fo0K7wVlsVSW_unug5TPHhRIrgp55LmQjvOf4jfsbktA6yPt1_6pQHuBxE2h0Bunb2l2KyRqKhKC he4igaIgTMUDT.EziNBz8_22c5Tuxwx6ztjiISGEqzAnnYYZ_s0AQLjA_lzJ.s4r0eA8yMKpKgkC pHsFicEuVJUjcVQ4QyCca_pJ4e0MM.6rutmRvameePhmXWavp8._IunZ2vWOa01SQyHOM1cyV5bX 87jYDkpCk_bjk9ilvDO6IvChdrl_npDfwDT9aJkd.npE0EsnLABWf3.DDMT1a.7PptltHopd18gl x2qmQzrH2JYi1raa.unl8LNQsL_ttwANDhvDpBnvF37dUmQonNxCz9VucIlgl6NCLrV61m_oSObH m4TpAAJaBnGyWnYXNaTglkDoOwzaZcUNqckZ1nxW5w7qfCApnt3Jzcp3bVVJlcgphGScN1JRoLuR sx5PC5tV4dwqmqVecvb_A4Je.1SAM58cV7K0d9zRd7eQaxYi4q8BzypIuEr0C9upaLreLBfLlk4u g5DTutcDq.Oq.fj43LfuSwZEq98nlZqPuQb86TPbTG2UZsHr52j2jr52_BSWiXYthxJs9Tfc2KDI _p7BpBg5CjTPiWcJmwyq90.3J5Ach0iNWZcOc3crw3T3RYIe1QpFvre3bjRmQfs1_zCeOo999b28 WRaldLKbueFxAzfc5bVOwl23iMZIABEDAzfpxYKRBiSvOIDszGPLAxlAPT7Z3r24BQ1uFPSdI4zl bTjjuORd0_lzy4jqKMJz4OeuSdcsKKlvfvB5iy98RlPYiv7V2vMW6CthPCo2B1K4Z1yivKsHbTfP _vRNm9UYyn38TXEzHlMfv2WYmyVCaeJN5LKwYAPqpS5k8RO82vepXXRvHVe9DNXHeBKXQT3YOAJW qXZd_5pWfgyB8Wb_cRyqHr3xrh3AcNpFu5ewz5dPKWqAK21u8WFUrllhE78HBbXxWSWKxW71X0CD nSrGnCK0UKLZ8sb5gIYhs1m7vWPh.kl7wTwNL9U8.pp9n6xurkmwo7pwy8cyUeRkoIO2KZ1RXpfQ pBaAv6yiBrmooZcTdnha9BfGNswLWNkVhK3YDRsAnaxP4TouxUGVMJazfRu4mwRci5znzE2r3LYM 51QFAfyFntExTZSB7nfCCrLvI48JlFpKsKlesIIqzoUnUG6PvVNt__LhwZAfxPVsxIPMfT5GN2xS PFCcsYXH9VZd.MGrWHqihzIrUNp14bjXe87YIxWkR39hqV1sD5kJEZUwplt8J3Mo6v4pj1WtpTxn _TJfJqD9lNnFxTHE9E1nXNBfqQVdhJlgBCzaz4VgC2A1BT9nYFnFJcriJS5dG6RsAAXRRGq__r26 PPDC3M0RqxueRiYqc0yJnZfGBGyXRXg0Hv9KcfvFoTF9u._1oCB6dtR8vIZRhOc6EMCKKFYPB7DS 7ki5tAsQSv2nrBKK9TbvS213YnWvpEAHuPhw5a5iJhzoyan2tcLispt4JAf4O_7Muwr4Zqvpojv. dihzzb7OMScCvY0KpcKQyWUci3aOnh.NV_AawpVkTvsW6Sx02WsGO2puIud1rxVtLhfsk94sPPBX Lse3dB9r1IE2ejjvXHqsekl.tl.96ymyhvBSF117abQhI.oQnpxPcdVs44pO.iyJCDX7EVikJVtL KvR_m4XFNrwE.IGCZhk7p0bB2P9gfYuF1JH.GBCEJlzFTbhCKNAoDobNHlMV5ekIUOwFEm9oyk5S z2yFkP5NXGAo366KjoBxIt3yKAacA3Wbn2S3IbYO.1328xLns3R0wYFxtfZ0l8A8.PiICjEXf2Yf STxJSmPZHJdhkUgCZbwImSAv1_r5xlibpPPpJ9EDzJymiWCQzGxbS0Xp3FsjpFsvq21eDKBrMPMH zVGYmJs8qJr372xHaq.kcDWGjmvYEIHLWlkbuGXPNLsGRx1q5viC8Nhzxy293HRtP301sFgm9pO0 - X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.ir2.yahoo.com with HTTP; Sat, 6 Mar 2021 17:45:24 +0000 Received: by smtp416.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID a5c27c167ad5f336b76dd6250ed2d9ff; Sat, 06 Mar 2021 17:45:19 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH 20/22] Use method children instead of to_string in pretty printers Date: Sat, 6 Mar 2021 18:44:48 +0100 Message-Id: <20210306174450.21718-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.30.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 210306-0, 03/06/2021), Outbound message X-Antivirus-Status: Clean References: <20210306174450.21718-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Mar 2021 17:45:27 -0000 With '-pretty on' the output is basically the same, but like this the pointer members can be expanded in the TUI variable windows. --- gdb/gdb-gdb.py.in | 153 ++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 79 deletions(-) diff --git a/gdb/gdb-gdb.py.in b/gdb/gdb-gdb.py.in index 2b1c7ded4b6..498a297aebd 100644 --- a/gdb/gdb-gdb.py.in +++ b/gdb/gdb-gdb.py.in @@ -107,16 +107,14 @@ class StructTypePrettyPrinter: def __init__(self, val): self.val = val - def to_string(self): - fields = [] - fields.append("pointer_type = %s" % self.val['pointer_type']) - fields.append("reference_type = %s" % self.val['reference_type']) - fields.append("chain = %s" % self.val['reference_type']) - fields.append("instance_flags = %s" - % TypeFlagsPrinter(self.val['m_instance_flags'])) - fields.append("length = %d" % self.val['length']) - fields.append("main_type = %s" % self.val['main_type']) - return "\n{" + ",\n ".join(fields) + "}" + def children(self): + for f in self.val.type.fields(): + name = f.name + val = self.val[f] + if name == "m_instance_flags": + name = "instance_flags" + val = str(TypeFlagsPrinter(val)) + yield (name, val) class StructMainTypePrettyPrinter: @@ -143,43 +141,9 @@ class StructMainTypePrettyPrinter: """Return an image of component "owner". """ if self.val['flag_objfile_owned'] != 0: - return "%s (objfile)" % self.val['owner']['objfile'] - else: - return "%s (gdbarch)" % self.val['owner']['gdbarch'] - - def struct_field_location_img(self, field_val): - """Return an image of the loc component inside the given field - gdb.Value. - """ - loc_val = field_val['loc'] - loc_kind = str(field_val['loc_kind']) - if loc_kind == "FIELD_LOC_KIND_BITPOS": - return 'bitpos = %d' % loc_val['bitpos'] - elif loc_kind == "FIELD_LOC_KIND_ENUMVAL": - return 'enumval = %d' % loc_val['enumval'] - elif loc_kind == "FIELD_LOC_KIND_PHYSADDR": - return 'physaddr = 0x%x' % loc_val['physaddr'] - elif loc_kind == "FIELD_LOC_KIND_PHYSNAME": - return 'physname = %s' % loc_val['physname'] - elif loc_kind == "FIELD_LOC_KIND_DWARF_BLOCK": - return 'dwarf_block = %s' % loc_val['dwarf_block'] + return ("owner.objfile", self.val['owner']['objfile']) else: - return 'loc = ??? (unsupported loc_kind value)' - - def struct_field_img(self, fieldno): - """Return an image of the main_type field number FIELDNO. - """ - f = self.val['flds_bnds']['fields'][fieldno] - label = "flds_bnds.fields[%d]:" % fieldno - if f['artificial']: - label += " (artificial)" - fields = [] - fields.append("name = %s" % f['name']) - fields.append("type = %s" % f['m_type']) - fields.append("loc_kind = %s" % f['loc_kind']) - fields.append("bitsize = %d" % f['bitsize']) - fields.append(self.struct_field_location_img(f)) - return label + "\n" + " {" + ",\n ".join(fields) + "}" + return ("owner.gdbarch", self.val['owner']['gdbarch']) def bound_img(self, bound_name): """Return an image of the given main_type's bound.""" @@ -203,10 +167,10 @@ class StructMainTypePrettyPrinter: low = self.bound_img('low') high = self.bound_img('high') - img = "flds_bnds.bounds = {%s, %s}" % (low, high) + img = "{%s, %s}" % (low, high) if b['flag_bound_evaluated']: img += ' [evaluated]' - return img + return ("flds_bnds.bounds", img) def type_specific_img(self): """Return a string image of the main_type type_specific union. @@ -216,47 +180,76 @@ class StructMainTypePrettyPrinter: type_specific_kind = str(self.val['type_specific_field']) type_specific = self.val['type_specific'] if type_specific_kind == "TYPE_SPECIFIC_NONE": - img = 'type_specific_field = %s' % type_specific_kind + return ("type_specific_field", type_specific_kind) elif type_specific_kind == "TYPE_SPECIFIC_CPLUS_STUFF": - img = "cplus_stuff = %s" % type_specific['cplus_stuff'] + return ("cplus_stuff", type_specific['cplus_stuff']) elif type_specific_kind == "TYPE_SPECIFIC_GNAT_STUFF": - img = ("gnat_stuff = {descriptive_type = %s}" - % type_specific['gnat_stuff']['descriptive_type']) + return ("gnat_stuff.descriptive_type", + type_specific['gnat_stuff']['descriptive_type']) elif type_specific_kind == "TYPE_SPECIFIC_FLOATFORMAT": - img = "floatformat[0..1] = %s" % type_specific['floatformat'] + return ("floatformat[0..1]", type_specific['floatformat']) elif type_specific_kind == "TYPE_SPECIFIC_FUNC": - img = ("calling_convention = %d" - % type_specific['func_stuff']['calling_convention']) + return ("calling_convention", + type_specific['func_stuff']['calling_convention']) # tail_call_list is not printed. elif type_specific_kind == "TYPE_SPECIFIC_SELF_TYPE": - img = "self_type = %s" % type_specific['self_type'] + return ("self_type", type_specific['self_type']) elif type_specific_kind == "TYPE_SPECIFIC_FIXED_POINT": - # The scaling factor is an opaque structure, so we cannot - # decode its value from Python (not without insider knowledge). - img = ('scaling_factor: (call __gmpz_dump with ' - ' _mp_num and _mp_den fields if needed)') - else: - img = ("type_specific = ??? (unknown type_secific_kind: %s)" - % type_specific_kind) - return img - - def to_string(self): - """Return a pretty-printed image of our main_type. - """ - fields = [] - fields.append("name = %s" % self.val['name']) - fields.append("code = %s" % self.val['code']) - fields.append("flags = [%s]" % self.flags_to_string()) - fields.append("owner = %s" % self.owner_to_string()) - fields.append("target_type = %s" % self.val['target_type']) + return ("scaling_factor", + (" (call __gmpz_dump with " + "_mp_num and _mp_den fields if needed)")) + return ("type_specific", + "??? (unknown type_secific_kind: %s)" % type_specific_kind) + + def children(self): + yield ("name", self.val['name']) + yield ("code", self.val['code']) + yield ("flags", "[%s]" % self.flags_to_string()) + yield self.owner_to_string() + yield ("target_type", self.val['target_type']) if self.val['nfields'] > 0: - for fieldno in range(self.val['nfields']): - fields.append(self.struct_field_img(fieldno)) + fields = self.val['flds_bnds']['fields'] + field_array_type = fields.type.target().array(self.val['nfields'] + - 1).pointer() + yield ("flds_bnds.fields", + fields.cast(field_array_type).dereference()) if self.val['code'] == gdb.TYPE_CODE_RANGE: - fields.append(self.bounds_img()) - fields.append(self.type_specific_img()) + yield self.bounds_img() + yield self.type_specific_img() + + +class StructFieldPrettyPrinter: + """Pretty-print an objet of type field""" + + def __init__(self, val): + self.val = val + + def location_img(self): + """Return an image of the loc component + """ + loc_val = self.val['loc'] + loc_kind = str(self.val['loc_kind']) + if loc_kind == "FIELD_LOC_KIND_BITPOS": + return ("bitpos", loc_val['bitpos']) + elif loc_kind == "FIELD_LOC_KIND_ENUMVAL": + return ("enumval", loc_val['enumval']) + elif loc_kind == "FIELD_LOC_KIND_PHYSADDR": + return ("physaddr", loc_val['physaddr']) + elif loc_kind == "FIELD_LOC_KIND_PHYSNAME": + return ("physname", loc_val['physname']) + elif loc_kind == "FIELD_LOC_KIND_DWARF_BLOCK": + return ("dwarf_block", loc_val['dwarf_block']) + else: + return ("loc", "??? (unsupported loc_kind value)") - return "\n{" + ",\n ".join(fields) + "}" + def children(self): + if self.val['artificial']: + yield ("artificial", self.val['artificial']) + yield ("name", self.val['name']) + yield ("type", self.val['m_type']) + yield ("loc_kind", self.val['loc_kind']) + yield ("bitsize", self.val['bitsize']) + yield self.location_img() class CoreAddrPrettyPrinter: @@ -277,6 +270,8 @@ def type_lookup_function(val): return StructTypePrettyPrinter(val) elif val.type.tag == "main_type": return StructMainTypePrettyPrinter(val) + elif val.type.tag == "field": + return StructFieldPrettyPrinter(val) elif val.type.name == 'CORE_ADDR': return CoreAddrPrettyPrinter(val) return None -- 2.30.1