| Index: src/trusted/validator/x86/decoder/nc_inst_state_internal.h
|
| diff --git a/src/trusted/validator/x86/decoder/nc_inst_state_internal.h b/src/trusted/validator/x86/decoder/nc_inst_state_internal.h
|
| deleted file mode 100644
|
| index 2f839daba395bff263569b71bab98fac8599ebd9..0000000000000000000000000000000000000000
|
| --- a/src/trusted/validator/x86/decoder/nc_inst_state_internal.h
|
| +++ /dev/null
|
| @@ -1,174 +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 can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -/*
|
| - * Internal implementation of the state associated with matching instructions.
|
| - */
|
| -
|
| -#ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_NC_INST_STATE_INTERNAL_H_
|
| -#define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_NC_INST_STATE_INTERNAL_H_
|
| -
|
| -#include "native_client/src/shared/utils/types.h"
|
| -#include "native_client/src/trusted/validator/x86/decoder/ncop_exps.h"
|
| -#include "native_client/src/trusted/validator/x86/decoder/nc_inst_state.h"
|
| -#include "native_client/src/trusted/validator/x86/ncinstbuffer.h"
|
| -
|
| -EXTERN_C_BEGIN
|
| -
|
| -/* The meta model of an x86 opcode instruction. */
|
| -struct NaClInst;
|
| -
|
| -/* Model of a code segment. */
|
| -struct NaClSegment;
|
| -
|
| -/* Decoder tables used to decode instructions. */
|
| -struct NaClDecodeTables;
|
| -
|
| -/* Defines the type used to align OpExprNodes when memory allocating. */
|
| -typedef uint64_t NaClOpExpElement;
|
| -
|
| -/* Defines the decoder tables to use to decode an instruction. */
|
| -struct NaClDecodeTables;
|
| -
|
| -/* Model data needed to decode an x86 instruction. */
|
| -struct NaClInstState {
|
| - /* This pointer is used to access vbase, allowing instruction addresses to be
|
| - * printed in the address space that the code is being mapped to.
|
| - */
|
| - struct NaClInstIter* iter;
|
| - /* The bytes used to parse the x86-32 instruction (may have added
|
| - * zero filler if the instruction straddles the end of the memory segment).
|
| - */
|
| - NCInstBytes bytes;
|
| - /* The address of the instruction, relative to the beginning of the code
|
| - * segment.
|
| - */
|
| - NaClPcAddress inst_addr;
|
| - /* Define the upper limit on how many bytes can be in the instruction. */
|
| - uint8_t length_limit;
|
| - /* Define the number of prefix bytes processed. */
|
| - uint8_t num_prefix_bytes; /* 0..4 */
|
| - /* The prefix byte used to recognize the opcode, or zero if not applicable. */
|
| - uint8_t opcode_prefix;
|
| - /* Define the number of opcode bytes processed. */
|
| - uint8_t num_opcode_bytes;
|
| - /* If REX prefix found, its value. Otherwise zero. */
|
| - uint8_t rexprefix;
|
| - /* Number of REX prefix bytes found. */
|
| - uint8_t num_rex_prefixes;
|
| - /* If Mod/RM byte defined, its value. Otherwise zero. */
|
| - uint8_t modrm;
|
| - /* True if prefix bytes are duplicated prefix bytes. */
|
| - Bool has_prefix_duplicates;
|
| - /* True if prefix has ambiguous segment prefix bytes. */
|
| - Bool has_ambig_segment_prefixes;
|
| - /* True only if the instruction has an SIB byte. */
|
| - Bool has_sib;
|
| - /* If a SIB byte is defined, its value. Otherwise zero. */
|
| - uint8_t sib;
|
| - /* Define the number of displacement bytes matched by the instruction. */
|
| - uint8_t num_disp_bytes;
|
| - /* Define the index of the first displacement byte of the instruction, or
|
| - * zero if num_disp_bytes == 0.
|
| - */
|
| - uint8_t first_disp_byte;
|
| - /* Define the number of immediate bytes defined by the instruction. */
|
| - uint8_t num_imm_bytes;
|
| - /* Define the index of the first immediate byte of the instruction, or
|
| - * zero if num_imm_bytes == 0;.
|
| - */
|
| - uint8_t first_imm_byte;
|
| - /* Define the number of bytes to the second immediate value if defined
|
| - * (defaults to zero).
|
| - */
|
| - uint8_t num_imm2_bytes;
|
| - /* The computed (default) operand size associated with the instruction. */
|
| - uint8_t operand_size;
|
| - /* The computed (default) address size associated with the instruction. */
|
| - uint8_t address_size;
|
| - /* The set of prefix byte kinds associated with the instruction
|
| - * (See kPrefixXXXX #define's in ncdecode.h)
|
| - */
|
| - uint32_t prefix_mask;
|
| - /* The (opcode) instruction pattern used to match the instruction.
|
| - * Note: If this value is NULL, we have not yet tried to match
|
| - * the current instruction with the corresponding instruction iterator.
|
| - * Note: One can assume that two instructions use the same modeled
|
| - * NaClInst iff the pointers are equals.
|
| - */
|
| - const NaClInst* inst;
|
| - /* The corresponding expression tree denoted by the matched instruction. */
|
| - NaClExpVector nodes;
|
| - /* Transient pointer, which is defined each time an instruction is decoded.
|
| - * It defines the decoder tables to use to decode the instruction.
|
| - */
|
| - struct NaClDecodeTables* decoder_tables;
|
| - /* True if the instruction is unchanged while dynamically replacing code.
|
| - * False if the instruction has changed or if code replacement is not being
|
| - * performed (i.e. normal validation.)
|
| - */
|
| - Bool unchanged;
|
| -};
|
| -
|
| -/* Model of an instruction iterator. */
|
| -struct NaClInstIter {
|
| - /* Defines the decoder table to use to decode the instruction. */
|
| - struct NaClDecodeTables* decoder_tables;
|
| - /* Defines the segment to process */
|
| - struct NaClSegment* segment;
|
| - /* Defines the remaining memory to iterate over. */
|
| - NCRemainingMemory memory;
|
| - /* Defines the current (relative pc) index into the segment. */
|
| - NaClMemorySize index;
|
| - /* Defines the index of the current instruction, relative to
|
| - * the beginning of the segment.
|
| - */
|
| - NaClMemorySize inst_count;
|
| - /* The following fields define a ring buffer, where buffer_index
|
| - * is the index of the current instruction in the buffer, and
|
| - * buffer_size is the number of iterator states in the buffer.
|
| - */
|
| - size_t buffer_size;
|
| - size_t buffer_index;
|
| - struct NaClInstState* buffer;
|
| -};
|
| -
|
| -/* Structure holding the results of consuming the opcode bytes of the
|
| - * instruction.
|
| - */
|
| -typedef struct {
|
| - /* The applicable prefix byte selector, or 0 if no prefix selector. */
|
| - uint8_t opcode_prefix;
|
| - /* The (last) byte of the matched opcode. */
|
| - uint8_t opcode_byte;
|
| - /* The most specific prefix that the opcode bytes can match
|
| - * (or OpcodePrefixEnumSize if no such patterns exist).
|
| - */
|
| - NaClInstPrefix matched_prefix;
|
| - /* The number of bytes to subtract from the instruction length,
|
| - * the next time GetNextNaClInstCandidates is called.
|
| - */
|
| - uint8_t next_length_adjustment;
|
| -} NaClInstPrefixDescriptor;
|
| -
|
| -/* Given the current location of the (relative) pc of the given instruction
|
| - * iterator, update the given state to hold the matched opcode
|
| - * (instruction) pattern. If no matching pattern exists, set the state
|
| - * to a matched undefined opcode (instruction) pattern. In all cases,
|
| - * update the state to hold all information on the matched bytes of the
|
| - * instruction.
|
| - */
|
| -void NaClDecodeInst(struct NaClInstIter* iter, struct NaClInstState* state);
|
| -
|
| -/* Returns the (undecoded) instruction state of the iterator. Should only
|
| - * be used for testing.
|
| - */
|
| -
|
| -struct NaClInstState* NaClInstIterGetUndecodedState(struct NaClInstIter* iter);
|
| -
|
| -EXTERN_C_END
|
| -
|
| -#endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_DECODER_NC_INST_STATE_INTERNAL_H_ */
|
|
|