| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 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 | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_ARM_V2_MODEL_H | 7 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_ARM_V2_MODEL_H |
| 8 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_ARM_V2_MODEL_H | 8 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_ARM_V2_MODEL_H |
| 9 | 9 |
| 10 /* | 10 /* |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 * but anything nontrivial should go in model-inl.h. | 28 * but anything nontrivial should go in model-inl.h. |
| 29 * - Do not declare destructors. A destructor causes an object to be passed | 29 * - Do not declare destructors. A destructor causes an object to be passed |
| 30 * on the stack, even when passed by value. (This may be a GCC bug.) | 30 * on the stack, even when passed by value. (This may be a GCC bug.) |
| 31 * Adding a destructor to Instruction slowed the decoder down by 10% on | 31 * Adding a destructor to Instruction slowed the decoder down by 10% on |
| 32 * gcc 4.3.3. | 32 * gcc 4.3.3. |
| 33 */ | 33 */ |
| 34 | 34 |
| 35 #include <stdint.h> | 35 #include <stdint.h> |
| 36 #include <cstddef> | 36 #include <cstddef> |
| 37 #include <string> | 37 #include <string> |
| 38 #include "native_client/src/include/arm_sandbox.h" |
| 38 #include "native_client/src/include/portability_bits.h" | 39 #include "native_client/src/include/portability_bits.h" |
| 39 | 40 |
| 40 namespace nacl_arm_dec { | 41 namespace nacl_arm_dec { |
| 41 | 42 |
| 42 class RegisterList; | 43 class RegisterList; |
| 43 | 44 |
| 44 // Defines the architecture version of the ARM processor. Currently assumes | 45 // Defines the architecture version of the ARM processor. Currently assumes |
| 45 // always 7. | 46 // always 7. |
| 46 // TODO(karl): Generalize this to handle multiple versions, once we know how | 47 // TODO(karl): Generalize this to handle multiple versions, once we know how |
| 47 // to do this. | 48 // to do this. |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 RegisterList& operator=(const RegisterList& r); // Disallow assignment. | 250 RegisterList& operator=(const RegisterList& r); // Disallow assignment. |
| 250 }; | 251 }; |
| 251 | 252 |
| 252 | 253 |
| 253 // The number of bits in an ARM instruction. | 254 // The number of bits in an ARM instruction. |
| 254 static const int kArm32InstSize = 32; | 255 static const int kArm32InstSize = 32; |
| 255 | 256 |
| 256 // The number of bits in a word of a THUMB instruction. | 257 // The number of bits in a word of a THUMB instruction. |
| 257 static const int kThumbWordSize = 16; | 258 static const int kThumbWordSize = 16; |
| 258 | 259 |
| 259 // BKPT #0x7777 is used as literal pool head. | 260 // Special ARM instructions for sandboxing. |
| 260 static const uint32_t kLiteralPoolHeadInstruction = 0xE1277777; | 261 static const uint32_t kLiteralPoolHead = NACL_INSTR_LITERAL_POOL_HEAD; |
| 262 static const uint32_t kBreakpoint = NACL_INSTR_BREAKPOINT; |
| 263 static const uint32_t kHaltFill = NACL_INSTR_HALT_FILL; |
| 264 static const uint32_t kAbortNow = NACL_INSTR_ABORT_NOW; |
| 265 static const uint32_t kFailValidation = NACL_INSTR_FAIL_VALIDATION; |
| 261 | 266 |
| 262 // Models an instruction, either a 32-bit ARM instruction of unspecified type, | 267 // Models an instruction, either a 32-bit ARM instruction of unspecified type, |
| 263 // or one word (16-bit) and two word (32-bit) THUMB instructions. | 268 // or one word (16-bit) and two word (32-bit) THUMB instructions. |
| 264 // | 269 // |
| 265 // This class is designed for efficiency: | 270 // This class is designed for efficiency: |
| 266 // - Its public methods for bitfield extraction are short and inline. | 271 // - Its public methods for bitfield extraction are short and inline. |
| 267 // - It has no vtable, so on 32-bit platforms it's exactly the size of the | 272 // - It has no vtable, so on 32-bit platforms it's exactly the size of the |
| 268 // instruction it models. | 273 // instruction it models. |
| 269 // - API's exist for accessing both ARM (32-bit) instructions and | 274 // - API's exist for accessing both ARM (32-bit) instructions and |
| 270 // THUMB instructions (which are 1 or two (16-bit) words). | 275 // THUMB instructions (which are 1 or two (16-bit) words). |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 } | 495 } |
| 491 | 496 |
| 492 private: | 497 private: |
| 493 uint32_t bits_; | 498 uint32_t bits_; |
| 494 Instruction& operator=(const Instruction& insn); // Disallow assignment. | 499 Instruction& operator=(const Instruction& insn); // Disallow assignment. |
| 495 }; | 500 }; |
| 496 | 501 |
| 497 } // namespace nacl_arm_dec | 502 } // namespace nacl_arm_dec |
| 498 | 503 |
| 499 #endif // NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_ARM_V2_MODEL_H | 504 #endif // NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_ARM_V2_MODEL_H |
| OLD | NEW |