| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | |
| 3 * Use of this source code is governed by a BSD-style license that can be | |
| 4 * found in the LICENSE file. | |
| 5 */ | |
| 6 | |
| 7 /* Helper routines for testing instructions. Used by private_tests/enuminsts. */ | |
| 8 | |
| 9 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCEMNUMINSTS_H_ | |
| 10 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCEMNUMINSTS_H_ | |
| 11 | |
| 12 #ifndef NACL_TRUSTED_BUT_NOT_TCB | |
| 13 #error("This file is not meant for use in the TCB") | |
| 14 #endif | |
| 15 | |
| 16 #include "native_client/src/shared/utils/types.h" | |
| 17 #include "native_client/src/trusted/validator/types_memory_model.h" | |
| 18 | |
| 19 /* Parameterize the decoder state by architecture. */ | |
| 20 #if NACL_TARGET_SUBARCH == 64 | |
| 21 struct NaClInstState; | |
| 22 #define NaClInstStruct struct NaClInstState | |
| 23 #else | |
| 24 struct NCDecoderState; | |
| 25 #define NaClInstStruct struct NCDecoderState | |
| 26 #endif | |
| 27 | |
| 28 /* Decodes the first instruction in the given buffer, assuming the | |
| 29 * given vbase. | |
| 30 * WARNING: This function is not thread safe. The resulting instruction | |
| 31 * is only guaranteed to be defined until the next call to this function. | |
| 32 * NOTE: Since this is only used by private_tests/enuminsts, which is a | |
| 33 * singly threaded application, not being thread safe is ok. | |
| 34 */ | |
| 35 NaClInstStruct *NaClParseInst(uint8_t *ibytes, size_t isize, | |
| 36 const NaClPcAddress vbase); | |
| 37 | |
| 38 /* Returns the number of bytes in the given (parsed) instruction. */ | |
| 39 uint8_t NaClInstLength(NaClInstStruct *inst); | |
| 40 | |
| 41 /* Returns the printed text for the given instruction (including parsed bytes) | |
| 42 * as a (malloc allocated) char*. | |
| 43 */ | |
| 44 char* NaClInstToStr(NaClInstStruct *inst); | |
| 45 | |
| 46 /* Return true if the instruction in num_bytes (of bytes) validates. */ | |
| 47 Bool NaClValidateAnalyzeBytes(uint8_t *bytes, | |
| 48 NaClMemorySize num_bytes, | |
| 49 NaClPcAddress base); | |
| 50 | |
| 51 /* Returns the name of the opcode for the given instruction | |
| 52 * WARNING: This function is not thread safe. The resulting string | |
| 53 * is only guaranteed to be defined until the next call to this function. | |
| 54 * NOTE: Since this is only used by private_tests/enuminsts, which is a | |
| 55 * singly threaded application, not being thread safe is ok. | |
| 56 */ | |
| 57 const char *NaClOpcodeName(NaClInstStruct *inst); | |
| 58 | |
| 59 /* Returns true if the instruction was properly decoded by the NaCl | |
| 60 * disassembler. | |
| 61 */ | |
| 62 Bool NaClInstDecodesCorrectly(NaClInstStruct *inst); | |
| 63 | |
| 64 /* Returns true if the instruction, defined by SIZE bytes | |
| 65 * in the given base, validates as a legal NACL instruction, | |
| 66 * to the best we can tell without surrounding context. That is, | |
| 67 * we only do static checks on the instruction, and do not check | |
| 68 * preconditions/postconditions of the instruction. | |
| 69 * | |
| 70 * Parameters are: | |
| 71 * mbase - The memory containing the bytes of the instruction to decode. | |
| 72 * size - The number of bytes defining the instruction. | |
| 73 * vbase - The virtual address associated with the instruction. | |
| 74 * inst - The decoded instruction from NaClParseInst above. | |
| 75 */ | |
| 76 Bool NaClInstValidates(uint8_t* mbase, | |
| 77 uint8_t size, | |
| 78 NaClPcAddress vbase, | |
| 79 NaClInstStruct *inst); | |
| 80 | |
| 81 /* Runs the validator on the instruction sequence in the given code segment, | |
| 82 * and returns true if it validates. Assumes that the supporting architecture | |
| 83 * supports all known x86 architectures. | |
| 84 * | |
| 85 * Parameters are: | |
| 86 * mbase - The memory containing the bytes of the instruction to decode. | |
| 87 * size - The number of bytes defining the instruction. | |
| 88 * vbase - The virtual address associated with the instruction. | |
| 89 */ | |
| 90 Bool NaClSegmentValidates(uint8_t* mbase, | |
| 91 size_t size, | |
| 92 NaClPcAddress vbase); | |
| 93 | |
| 94 #endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCEMNUMINSTS_H_ */ | |
| OLD | NEW |