Chromium Code Reviews| Index: src/trusted/validator_ragel/dfa_validate_common.c |
| diff --git a/src/trusted/validator_ragel/dfa_validate_common.c b/src/trusted/validator_ragel/dfa_validate_common.c |
| index 330a0ce2c44fc128ff1f7736740f2da3b9f0d80a..729c77cd536d8c4ffd6aca7289aa2262a98e4a03 100644 |
| --- a/src/trusted/validator_ragel/dfa_validate_common.c |
| +++ b/src/trusted/validator_ragel/dfa_validate_common.c |
| @@ -33,16 +33,26 @@ Bool NaClDfaProcessValidationError(const uint8_t *begin, const uint8_t *end, |
| return FALSE; |
| } |
| -Bool NaClDfaStubOutCPUUnsupportedInstruction(const uint8_t *begin, |
| - const uint8_t *end, |
| - uint32_t info, |
| - void *callback_data) { |
| +Bool NaClDfaStubOutUnsupportedInstruction(const uint8_t *begin, |
| + const uint8_t *end, |
| + uint32_t info, |
| + void *callback_data) { |
| + struct StubOutCallbackData *data = callback_data; |
| /* Stub-out instructions unsupported on this CPU, but valid on other CPUs. */ |
| if ((info & VALIDATION_ERRORS_MASK) == CPUID_UNSUPPORTED_INSTRUCTION) { |
| - int *did_stubout = callback_data; |
| - *did_stubout = 1; |
| + data->did_rewrite = 1; |
| memset((uint8_t *)begin, NACL_HALT_OPCODE, end - begin); |
| return TRUE; |
| + } else if ((info & VALIDATION_ERRORS_MASK) == UNSUPPORTED_INSTRUCTION) { |
| + if (data->flags == DISABLE_NONTEMPORALS) { |
|
Mark Seaborn
2015/07/29 16:09:23
Shouldn't this be "(data->flags & DISABLE_NONTEMPO
|
| + return FALSE; |
| + } else { |
| + /* TODO(ruiq): rewrite instruction. For now, we keep the original |
| + * instruction and indicate validation success, which is consistent |
| + * with current validation results. */ |
| + data->did_rewrite = 0; |
| + return TRUE; |
| + } |
| } else { |
| return FALSE; |
| } |