This directory contains the code for the native client verifier (ncv)
which checks whether binaries adhere to certain control flow
and instruction set restrictions. It assumes that segment registers
are used to control memory accesses.

Note: Although the current builds generate 64-bit versions, they do not
make any sense, since segment registers have little effect in x86-64.

Debugging
---------

Many of the source files contain #define DEBUGGING flags. When
DEBUGGING is set to 1, additional debugging print messages are
compiled into the code. Unfortunately, by default, these message
frequently call routines that are not compiled into corresponding
executables (such as ncval and ncdis). To add the additional routines,
edit file

   native_client/site_scons/site_tools/library_deps.py

For x86-32, edit lines

            # When turning on the DEBUGGING flag in the x86-32 validator
            # or decoder, add the following:
            #'nc_opcode_modeling_verbose_x86_32',

to

            # When turning on the DEBUGGING flag in the x86-32 validator
            # or decoder, add the following:
            'nc_opcode_modeling_verbose_x86_32',

For x86-64, edit lines

            # When turning on the DEBUGGING flag in the x86-64 validator
            # or decoder, add the following:
            # 'nc_opcode_modeling_verbose_x86_64',

to

            # When turning on the DEBUGGING flag in the x86-64 validator
            # or decoder, add the following:
            'nc_opcode_modeling_verbose_x86_64',

These changes will make sure that the corresponding print routines are
added to the executables during link time.
