Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(613)

Unified Diff: src/trusted/validator_x86/discmp.py

Issue 625923004: Delete old x86 validator. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/validator_x86/discmp.py
diff --git a/src/trusted/validator_x86/discmp.py b/src/trusted/validator_x86/discmp.py
deleted file mode 100755
index 094feb8b628b63ac38620b9f174f0b683eceff5b..0000000000000000000000000000000000000000
--- a/src/trusted/validator_x86/discmp.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/python
-# Copyright 2008, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#
-"""discmp.py - compare disassembler output
-
-This script compares output from the Native Client decoder to output
-from GNU objdump to make sure they agree on instruction lengths. It
-returns a zero status on success and non-zero on failure.
-
-
-Usage:
- discmp.py <ncdis-exe> <test-binary>*
-"""
-
-import logging
-import os
-import re
-import sys
-
-
-def Usage():
- print("USAGE: discmp.py <ncdis-exe> <test-binary>*\n")
- sys.exit(-1)
-
-class DisFile(object):
- """Processes variants of disassembler output from various sources,
- providing a list of instruction lengths, based on addresses."""
-
- def __init__(self, stream):
- self.fd = stream
- self.lastline = None
- self.lastaddr = None
- self.thisaddr = None
- self.thisline = None
- # note we ignore lines that have only continuation bytes;
- # no opcode
- self.dislinefmt = re.compile("\s*([0-9a-f]+):\t(.*\t+.*)")
- self.data16fmt = re.compile("\s*([0-9a-f]+):\s+66\s+data16")
- self.waitfmt = re.compile("\s*([0-9a-f]+):\s+9b\s+[f]?wait")
-
- def NextDisInst(self):
- while (True):
- line = self.fd.readline()
- if line == "": return 0, None
- match = self.data16fmt.match(line)
- if (match):
- addr = match.group(1)
- line = self.fd.readline()
- match = self.dislinefmt.match(line)
- return (int(addr, 16),
- " " + addr + ":\t60 " + match.group(2) + "\n")
- match = self.waitfmt.match(line)
- if (match):
- addr = match.group(1)
- line = self.fd.readline()
- match = self.dislinefmt.match(line)
- return (int(addr, 16),
- " " + addr + ":\t9b " + match.group(2) + "\n")
- match = self.dislinefmt.match(line)
- if (match):
- return int(match.group(1), 16), line
-
- def NextInst(self):
- if self.lastaddr is None:
- self.lastaddr, self.lastline = self.NextDisInst()
- else:
- self.lastaddr = self.thisaddr
- self.lastline = self.thisline
- self.thisaddr, self.thisline = self.NextDisInst()
- if self.thisline is None:
- # don't know how long the last line was, so just return 1
- return (1, self.lastline)
- if self.lastline is None:
- return 0, None
- else:
- return (self.thisaddr - self.lastaddr, self.lastline)
-
-
-def IsElfBinary(fname):
- fd = open(fname)
- iselfbinary = fd.readline().startswith("\x7fELF")
- fd.close()
- return iselfbinary
-
-
-def CheckOneFile(fname, ncdis, objdump):
- logging.info("processing %s", fname)
- if not IsElfBinary(fname):
- print("Error:", fname, "is not an ELF binary\nContinuing...")
- return
- df1 = DisFile(os.popen(objdump + " -dz " + fname))
- df2 = DisFile(os.popen(ncdis + " " + fname))
- instcount = 0
- while (1):
- instcount += 1
- len1, line1 = df1.NextInst()
- len2, line2 = df2.NextInst()
- if line1 is None: break
- if line2 is None: break
- if (len1 != len2):
- logging.error("inst length mistmatch %d != %d\n", len1, len2)
- logging.error(line1)
- logging.error(line2)
- sys.exit(-1)
- if line1 or line2:
- logging.error("disasm output is different lengths\n")
- sys.exit(-1)
- logging.info("%s: %d instructions; 0 errors!\n", fname, instcount)
-
-
-def main(argv):
- logging.basicConfig(level=logging.DEBUG,
- stream=sys.stdout)
- ncdis = argv[1]
- logging.info("using ncdis at: %s", ncdis)
- objdump="objdump"
- logging.info("using objdump at: %s", objdump)
- for filename in argv[2:]:
- if os.path.isdir(filename):
- logging.info("traversing dir: %s", filename)
- for dirpath, dirlist, filelist in os.walk(filename):
- for fname in filelist:
- CheckOneFile(os.path.join(dirpath, fname), ncdis, objdump)
- else:
- CheckOneFile(filename, ncdis, objdump)
- return 0
-
-if '__main__' == __name__:
- sys.exit(main(sys.argv))

Powered by Google App Engine
This is Rietveld 408576698