Index: src/trusted/validator/x86/testing/enuminsts/README.txt |
diff --git a/src/trusted/validator/x86/testing/enuminsts/README.txt b/src/trusted/validator/x86/testing/enuminsts/README.txt |
deleted file mode 100644 |
index 2e489a8500f6d845d7ed66d8e3565a4a7066fca6..0000000000000000000000000000000000000000 |
--- a/src/trusted/validator/x86/testing/enuminsts/README.txt |
+++ /dev/null |
@@ -1,175 +0,0 @@ |
-Copyright (c) 2012 The Native Client Authors. All rights reserved. |
-Use of this source code is governed by a BSD-style license that be |
-found in the LICENSE file. |
- |
-************************************************************************ |
- NOTE: The Scons version of enuminst is documented in README_scons.txt. |
- It has less functionality than the Makefile version. |
-************************************************************************ |
- |
-Exhaustive instruction enumeration test for x86 Native Client decoder. |
-Limited testing of validator. |
- |
-This test performs an exhaustive enumeration of x86 instructions, |
-comparing two or more decoders. Specific decoders it can compare are: |
- * the old Native Client production decoders (both 32- and 64-bit) |
- * the new ragel-based Native Client decoders |
- * the XED decoder from Intel |
- |
-For each instruction enuminst can compare: |
- * instruction validity (still being worked on in x86-32) |
- * instruction length |
- * opcodes (64-bit only) |
- |
- |
-Building enuminsts-32 and enuminsts-64 |
- |
-Enuminsts can be built in 32- and 64-bit variants using: |
- % make BITS=32 clean enuminsts-64 |
- % make BITS=64 clean enuminsts-32 |
-To build for Ragel use: |
- % make BITS=64 RAGEL=1 clean enuminsts-64 |
-The Makefile does not do proper dependency checking, so please use |
-a clean build. The build will fail if the required NaCl libraries |
-are not already built. |
- |
-By default, the build assumes that you have downloaded a (Pin) version of |
-xed. See variable PINV in Makefile to see the version assumed. You can |
-specify the xed on the command line, allowing use other versions of xed. |
- |
-Running enuminsts |
--------------------- |
-The instructions that follow are for enuminsts-64; the same identical |
-instructions should work for enuminsts-32 as well. |
- |
-Enuminsts requires that you specify one or more filters to indicate how |
-to process instructions produced by the enumeration. For example: |
- % enuminsts-64 --legal=nacl --illegal=xed --print=xed |
-will filter instructions that decode for NaCl but don't decode for Xed, |
-and then uses Xed to print the instructions. You can induce additional |
-NaCl validation checking with the --nacllegal flag: |
- % enuminsts-64 --nacllegal --illegal=nacl --legal=ragel --print=ragel |
-This causes enuminsts to apply limited validator checks (instruction |
-type) in addition to decoder problems. |
- |
-Enuminsts-64 supports a --help option to see all command-line options: |
- % ./enuminsts-32 --help |
- |
- |
-Testing against the NaCl baseline |
---------------------------------- |
-TODO(kschimpf): rewrite this section. It seems incorrect. |
- |
-Included in this directory is (one or more) frozen versions of the |
-enumerator, named "enuminsts-XX-NNNNN" where XX in {32, 64}, and NNNNN |
-is the nacl revision number used to generate the executable. |
- |
-The (shell) file "enuminsts-64-baseline" is a canned script that pipes |
-a run of "enuminsts-XX-NNNNN" into "enuminsts-64", using the input |
-decoder on the output generated by "enuminsts-XX-NNNNN". The command |
-line arguments to "enuminsts-64-baseline" are passed to the latter |
-executable "enuminsts-64". |
- |
-To see possible (valid) arguments, run: |
- |
- .> ./enuminsts-64-baseline --help |
- |
-The purpose of this run is that the baseline has been defined so that |
-it generates a large, valid set of x86-64 instructions, and then |
-(though enuminsts-64) allows you to run these instructions on any of |
-the valid decoders. |
- |
-To run a decoder DDD on the set of (legal) baseline instructions, run: |
- |
- .> ./enuminsts-64-baseline --DDD |
- |
-Note: you can add additional command line arguments. To see them, add |
-the "--Help" option to the command line. |
- |
-Building enuminsts with a XED decoder |
-------------------------------------- |
- |
-Before building enuminsts with a xed decoder, you must download |
-Intel's xed decoder, distributed as part of PIN. It is available for |
-free from |
- |
- http://www.pintool.org. |
- |
-The default for the Makefile is PIN version 2.10-45467. However, any |
-version can be used if you specify "PINV=VVVVVVVVVVV" (where |
-VVVVVVVVVV is the PIN version you downloaded). To build enuminsts |
-with xed, run |
- |
- .> make BITS=XX PINV=VVVVVVVVVVV XED=1 |
- |
-where BITS in {32, 64} and VVVVVVVVVV is the PIN version you |
-downloaded. This will build the executable enuminsts-XX-xed. |
- |
-Building a new baseline |
------------------------ |
- |
-To build a new baseline, you need to build a frozen executable |
-of the form enuminsts-XX-NNNNN by running the command: |
- |
- .> make BITS=64 NACLV=NNNNN |
- |
-where NNNNN is the revision number of the corresponding generated NaCl |
-(scons) libraries. This will build executable |
-"enuminsts-64-NNNNN". You also need to build a copy of enuminsts with |
-a xed decoder (see "Building enuminsts with a xed decoder"). |
- |
-Once both executables have been built, edit shell file |
-enuminsts-64-legal to define the command line arguments you believe |
-will generate legal instructions, and pipe the corresponding opcode |
-sequences to the output (i.e. use options --opcode_bytes or |
---opcode_bytes_plus_dec). |
- |
-To test that you have generated the correct command line arguments, |
-run: |
-TODO(kschimpf): check this; looks wrong. |
- .> ./enuminsts-64-baseline-test |
- |
-This shell file will perform two runs of enuminsts-64-legal. The first |
-will compare the set of generated instructions against the xed decoder |
-to find instructions that are legal in both. The second will then |
-compare the set of generated instructions against the xed decoder to |
-find instructions that are not understood by xed. If you have your |
-arguments right, no error messages will be reported in either step. |
- |
-If enuminsts-64-baseline-test doesn't generate any errors, you have |
-found an acceptable new baseline, and you can install it. If you get |
-errors, but are only generated in the first pass, you can still use |
-enuminsts-64-baseline for the baseline. However, any instruction for |
-which an error is reported in the first pass, will not be generated by |
-the baseline. |
- |
-If you get errors in the second pass (which tests if the generated |
-instructions are invalid according to xed), you need to change your |
-parameters in enuminsts-64-legal. These errors represent bad |
-instruction opcodes that will be generated by the baseline. |
- |
-Brad's Notes on testing Ragel: |
------------------------------- |
-enuminsts-64 --legal=nacl --legal=ragel |
- Compare lengths of instructions that decode for both nacl and ragel. |
- As of April 2012 there were a lot of these. |
- |
-enuminsts-64 --illegal=nacl --legal=ragel --print=ragel |
- Identifies instructions decoded by ragel but not by nacl |
- |
-enuminsts-64 --legal=nacl --illegal=ragel --print=nacl |
- Identifies instructions decoded by nacl but not by ragel |
- |
-When Ragel supports a partial-validation mode, checking if a single |
-instruction might be legal (ignoring inter-instruction rules) these |
-tests should be useful: |
- |
-enuminsts-64 --nacllegal --legal=nacl --illegal=ragel --print=ragel |
- Print's instructions accepted by NaCl but not Ragel |
- |
-enuminsts-64 --nacllegal --legal=ragel --illegal=nacl print=nacl |
- Print's instructions legal for Ragel but not NaCl. |
- Currently, no problems! |
- |
-enuminsts-64 --nacl --ragel |
- Compares instruction length only. |