From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16322 invoked by alias); 8 Oct 2011 05:35:57 -0000 Received: (qmail 16104 invoked by uid 22791); 8 Oct 2011 05:35:54 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-wy0-f169.google.com (HELO mail-wy0-f169.google.com) (74.125.82.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 08 Oct 2011 05:35:40 +0000 Received: by wyh15 with SMTP id 15so1380433wyh.0 for ; Fri, 07 Oct 2011 22:35:39 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.168.143 with SMTP id k15mr3591446wel.111.1318052138913; Fri, 07 Oct 2011 22:35:38 -0700 (PDT) Received: by 10.216.159.213 with HTTP; Fri, 7 Oct 2011 22:35:38 -0700 (PDT) Date: Sat, 08 Oct 2011 05:35:00 -0000 Message-ID: Subject: [PATCH v4] gdb/python: add missing handling for anonymous members of struct and union From: Li Yu To: gdb-patches@sourceware.org Cc: Paul Koning , Tom Tromey Content-Type: multipart/mixed; boundary=0016e649846489112904aec2ed16 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-10/txt/msg00218.txt.bz2 --0016e649846489112904aec2ed16 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1739 gdb.Type.fields() missed handling for anonymous members. This patch fix it, below are details: Assume that we have a c source as below: ///////////////////////////// struct A { int a; union { int b0; int b1; union { int bb0; int bb1; union { int bbb0; int bbb1; }; }; }; int c; union { union { int dd0; int dd1; }; int d2; int d3; }; }; int main() { struct A a; } //////////////////////////// And have a python gdb script as below: ########################## v = gdb.parse_and_eval("a") t = v.type fields = t.fields() for f in fields: print "[%s]" % f.name, v[f.name] ########################## Without this patch, above script will print: [a] -7616 [] {{dd0 = 0, dd1 = 0}, d2 = 0, d3 = 0} [c] 0 [] {{dd0 = 0, dd1 = 0}, d2 = 0, d3 = 0} With this patch, above script will print rightly: [a] -7616 [b0] 32767 [b1] 32767 [bb0] 32767 [bb1] 32767 [bbb0] 32767 [bbb1] 32767 [c] 0 [dd0] 0 [dd1] 0 [d2] 0 [d3] 0 Thanks for Paul and Tom's feedback of this patch. This version uses recursion implementation, as we discussed, this patch is passed by "make check" without regression :) Signed-off-by: Li Yu gdb/python/: 2011-10-8 Li Yu * py-type.c: Add process for anonymous members of struct and union py-type.c | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) --0016e649846489112904aec2ed16 Content-Type: text/x-patch; charset=US-ASCII; name="gdb.python.patch" Content-Disposition: attachment; filename="gdb.python.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gti67ctx0 Content-length: 2876 ZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktdHlwZS5jIGIvZ2RiL3B5dGhv bi9weS10eXBlLmMKaW5kZXggYzdmZDI1Yi4uYjM2MzJlYSAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weS10eXBlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS10 eXBlLmMKQEAgLTU2LDggKzU2LDExIEBAIHR5cGVkZWYgc3RydWN0IHB5dHlf ZmllbGRfb2JqZWN0CiBzdGF0aWMgUHlUeXBlT2JqZWN0IGZpZWxkX29iamVj dF90eXBlOwogCiAvKiBBIHR5cGUgaXRlcmF0b3Igb2JqZWN0LiAgKi8KLXR5 cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IGl0ZXJhdG9yX29iamVj dAorewogICBQeU9iamVjdF9IRUFECisgIC8qIFRoZSBpdGVyYXRvcnMgZm9y IHN1cHBvcnQgZmllbGRzIG9mIGFub255bW91cyBmaWVsZCAqLworICBzdHJ1 Y3QgaXRlcmF0b3Jfb2JqZWN0ICpjaGlsZDsKICAgLyogVGhlIGN1cnJlbnQg ZmllbGQgaW5kZXguICAqLwogICBpbnQgZmllbGQ7CiAgIC8qIFdoYXQgdG8g cmV0dXJuLiAgKi8KQEAgLTEyMDAsNiArMTIwMyw3IEBAIHR5cHlfbWFrZV9p dGVyIChQeU9iamVjdCAqc2VsZiwgZW51bSBnZGJweV9pdGVyX2tpbmQga2lu ZCkKICAgaWYgKHR5cHlfaXRlcl9vYmogPT0gTlVMTCkKICAgICAgIHJldHVy biBOVUxMOwogCisgIHR5cHlfaXRlcl9vYmotPmNoaWxkID0gTlVMTDsKICAg dHlweV9pdGVyX29iai0+ZmllbGQgPSAwOwogICB0eXB5X2l0ZXJfb2JqLT5r aW5kID0ga2luZDsKICAgUHlfSU5DUkVGIChzZWxmKTsKQEAgLTEyNTcsMTEg KzEyNjEsMjcgQEAgc3RhdGljIFB5T2JqZWN0ICoKIHR5cHlfaXRlcmF0b3Jf aXRlcm5leHQgKFB5T2JqZWN0ICpzZWxmKQogewogICB0eXB5X2l0ZXJhdG9y X29iamVjdCAqaXRlcl9vYmogPSAodHlweV9pdGVyYXRvcl9vYmplY3QgKikg c2VsZjsKLSAgc3RydWN0IHR5cGUgKnR5cGUgPSBpdGVyX29iai0+c291cmNl LT50eXBlOwotICBpbnQgaTsKLSAgUHlPYmplY3QgKnJlc3VsdDsKLSAgCi0g IGlmIChpdGVyX29iai0+ZmllbGQgPCBUWVBFX05GSUVMRFMgKHR5cGUpKQor ICB0eXB5X2l0ZXJhdG9yX29iamVjdCAqY2hpbGRfaXRlcl9vYmo7CisgIHN0 cnVjdCB0eXBlICp0eXBlOworICBQeU9iamVjdCAqcmVzdWx0LCAqY2hpbGRf cHl0eXBlOworICBjb25zdCBjaGFyICpuYW1lOworCisgIGlmIChpdGVyX29i ai0+Y2hpbGQpCisgICAgeworICAgICAgcmVzdWx0ID0gdHlweV9pdGVyYXRv cl9pdGVybmV4dCgoUHlPYmplY3QqKWl0ZXJfb2JqLT5jaGlsZCk7CisgICAg ICBpZiAocmVzdWx0KQorICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg IFB5X0NMRUFSKGl0ZXJfb2JqLT5jaGlsZCk7CisgICAgfQorCisgIHR5cGUg PSBpdGVyX29iai0+c291cmNlLT50eXBlOworCityZXN0YXJ0OgorICBpZiAo aXRlcl9vYmotPmZpZWxkID49IFRZUEVfTkZJRUxEUyAodHlwZSkpCisgICAg cmV0dXJuIE5VTEw7CisKKyAgbmFtZSA9IFRZUEVfRklFTERfTkFNRSAodHlw ZSwgaXRlcl9vYmotPmZpZWxkKTsKKyAgaWYgKCFuYW1lIHx8IG5hbWVbMF0p IC8qIGFycmF5IGVsZW1lbnQgb3IgcmVndWxhciBuYW1lZCBtZW1iZXIgKi8K ICAgICB7CiAgICAgICByZXN1bHQgPSBtYWtlX2ZpZWxkaXRlbSAodHlwZSwg aXRlcl9vYmotPmZpZWxkLCBpdGVyX29iai0+a2luZCk7CiAgICAgICBpZiAo cmVzdWx0ICE9IE5VTEwpCkBAIC0xMjY5LDcgKzEyODksMTQgQEAgdHlweV9p dGVyYXRvcl9pdGVybmV4dCAoUHlPYmplY3QgKnNlbGYpCiAgICAgICByZXR1 cm4gcmVzdWx0OwogICAgIH0KIAotICByZXR1cm4gTlVMTDsKKyAgdHlwZSA9 IFRZUEVfRklFTERfVFlQRSh0eXBlLCBpdGVyX29iai0+ZmllbGQrKyk7Cisg IGNoaWxkX3B5dHlwZSA9IHR5cGVfdG9fdHlwZV9vYmplY3QodHlwZSk7Cisg IGlmICghY2hpbGRfcHl0eXBlKQorICAgIHJldHVybiBOVUxMOworICBjaGls ZF9pdGVyX29iaiA9ICh0eXB5X2l0ZXJhdG9yX29iamVjdCopdHlweV9tYWtl X2l0ZXIoY2hpbGRfcHl0eXBlLCBpdGVyX29iai0+a2luZCk7CisgIGl0ZXJf b2JqLT5jaGlsZCA9IGNoaWxkX2l0ZXJfb2JqOworICBpdGVyX29iaiA9IGNo aWxkX2l0ZXJfb2JqOworICBnb3RvIHJlc3RhcnQ7CiB9CiAKIHN0YXRpYyB2 b2lkCg== --0016e649846489112904aec2ed16--