Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(365)

Side by Side Diff: src/trusted/validator_arm/model.h

Issue 11194045: Change BKPT and UDF encodings on ARM. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Update copyright. Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « src/trusted/validator_arm/inst_classes_testers.cc ('k') | src/trusted/validator_arm/validator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698