| 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.
|
|
|