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

Unified Diff: src/trusted/validator_ragel/dfa_validate_common.c

Issue 1234393005: A mechanism to identify/forbid/"rewrite" non-temporal instructions (and other) (Closed) Base URL: https://chromium.googlesource.com/native_client/src/native_client.git@master
Patch Set: Fixing nits Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698