OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2013 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 #include <stdarg.h> | 7 #include <stdarg.h> |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 | 10 |
(...skipping 27 matching lines...) Expand all Loading... |
38 }; | 38 }; |
39 | 39 |
40 | 40 |
41 Bool ExtractRestrictedRegisterCallback( | 41 Bool ExtractRestrictedRegisterCallback( |
42 const uint8_t *begin, | 42 const uint8_t *begin, |
43 const uint8_t *end, | 43 const uint8_t *end, |
44 uint32_t info, | 44 uint32_t info, |
45 void *data) { | 45 void *data) { |
46 | 46 |
47 struct CallbackData *callback_data = data; | 47 struct CallbackData *callback_data = data; |
| 48 /* UNSUPPORTED_INSTRUCTION indicates validation failure only for pnacl-mode. |
| 49 * Since by default we are in non-pnacl-mode, the flag is simply cleared. |
| 50 */ |
| 51 info &= ~UNSUPPORTED_INSTRUCTION; |
| 52 |
48 if (end <= callback_data->actual_end && (info & VALIDATION_ERRORS_MASK)) { | 53 if (end <= callback_data->actual_end && (info & VALIDATION_ERRORS_MASK)) { |
49 callback_data->valid = FALSE; | 54 callback_data->valid = FALSE; |
50 } | 55 } |
51 if (end == callback_data->actual_end) { | 56 if (end == callback_data->actual_end) { |
52 callback_data->restricted_register = | 57 callback_data->restricted_register = |
53 (info & RESTRICTED_REGISTER_MASK) >> RESTRICTED_REGISTER_SHIFT; | 58 (info & RESTRICTED_REGISTER_MASK) >> RESTRICTED_REGISTER_SHIFT; |
54 } | 59 } |
55 if (begin < callback_data->actual_end && callback_data->actual_end < end) { | 60 if (begin < callback_data->actual_end && callback_data->actual_end < end) { |
56 /* Instruction crosses actual chunk boundary. */ | 61 /* Instruction crosses actual chunk boundary. */ |
57 callback_data->valid = FALSE; | 62 callback_data->valid = FALSE; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 ValidateChunkAMD64( | 95 ValidateChunkAMD64( |
91 codeblock, size, | 96 codeblock, size, |
92 options, | 97 options, |
93 cpu_features, | 98 cpu_features, |
94 ExtractRestrictedRegisterCallback, | 99 ExtractRestrictedRegisterCallback, |
95 &callback_data); | 100 &callback_data); |
96 | 101 |
97 *resulting_restricted_register = callback_data.restricted_register; | 102 *resulting_restricted_register = callback_data.restricted_register; |
98 return callback_data.valid; | 103 return callback_data.valid; |
99 } | 104 } |
OLD | NEW |