From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33134) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9YW9-0005h0-3K for qemu-devel@nongnu.org; Tue, 22 Jul 2014 07:46:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X9YW2-0007Qx-KG for qemu-devel@nongnu.org; Tue, 22 Jul 2014 07:46:01 -0400 Received: from mx1.redhat.com ([209.132.183.28]:28142) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9YW2-0007Qf-C7 for qemu-devel@nongnu.org; Tue, 22 Jul 2014 07:45:54 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s6MBjrcN020069 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 22 Jul 2014 07:45:53 -0400 From: Amit Shah Date: Tue, 22 Jul 2014 17:14:59 +0530 Message-Id: In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 2/2] checker: ignore fields marked unused List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu list Cc: Amit Shah , Juan Quintela While comparing qemu-1.0 json output with qemu-2.1, a few fields got marked unused. These need to be skipped over, and not flagged as mismatches. For handling unused fields, the exact number of bytes need to be skipped over as the size of the unused field. Signed-off-by: Amit Shah --- scripts/vmstate-static-checker.py | 54 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py index c387a56..f7ce3fc 100755 --- a/scripts/vmstate-static-checker.py +++ b/scripts/vmstate-static-checker.py @@ -144,6 +144,7 @@ def check_fields(src_fields, dest_fields, desc, sec): advance_src = True advance_dest = True + unused_count = 0 while True: if advance_src: @@ -156,9 +157,10 @@ def check_fields(src_fields, dest_fields, desc, sec): s_iter = s_iter_list.pop() continue else: - # We want to avoid advancing just once -- when entering a - # dest substruct, or when exiting one. - advance_src = True + if unused_count == 0: + # We want to avoid advancing just once -- when entering a + # dest substruct, or when exiting one. + advance_src = True if advance_dest: try: @@ -177,7 +179,37 @@ def check_fields(src_fields, dest_fields, desc, sec): advance_src = False continue else: - advance_dest = True + if unused_count == 0: + advance_dest = True + + if unused_count > 0: + if advance_dest == False: + unused_count = unused_count - s_item["size"] + if unused_count == 0: + advance_dest = True + continue + if unused_count < 0: + print "Section \"" + sec + "\",", + print "Description \"" + desc + "\":", + print "unused size mismatch near \"", + print s_item["field"] + "\"" + bump_taint() + break + continue + + if advance_src == False: + unused_count = unused_count - d_item["size"] + if unused_count == 0: + advance_src = True + continue + if unused_count < 0: + print "Section \"" + sec + "\",", + print "Description \"" + desc + "\":", + print "unused size mismatch near \"", + print d_item["field"] + "\"" + bump_taint() + break + continue if not check_fields_match(desc, s_item["field"], d_item["field"]): # Some fields were put in substructs, keeping the @@ -208,6 +240,20 @@ def check_fields(src_fields, dest_fields, desc, sec): advance_dest = False continue + if s_item["field"] == "unused" or d_item["field"] == "unused": + if s_item["size"] == d_item["size"]: + continue + + if d_item["field"] == "unused": + advance_dest = False + unused_count = d_item["size"] - s_item["size"] + continue + + if s_item["field"] == "unused": + advance_src = False + unused_count = s_item["size"] - d_item["size"] + continue + print "Section \"" + sec + "\",", print "Description \"" + desc + "\":", print "expected field \"" + s_item["field"] + "\",", -- 1.9.3