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

Unified Diff: src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.c

Issue 625923004: Delete old x86 validator. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: rebase master Created 6 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 side-by-side diff with in-line comments
Download patch
Index: src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.c
diff --git a/src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.c b/src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.c
deleted file mode 100644
index f754c3cc46694f2d79153175f648706f4ed4adde..0000000000000000000000000000000000000000
--- a/src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2012 The Native Client Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/*
- * Checks that CPU ID features match instructions found in executable.
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.h"
-
-#include "native_client/src/shared/platform/nacl_log.h"
-#include "native_client/src/trusted/validator/x86/decoder/nc_inst_state.h"
-#include "native_client/src/trusted/validator/x86/decoder/nc_inst_state_internal.h"
-#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h"
-#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter_internal.h"
-#include "native_client/src/trusted/validator/x86/nc_segment.h"
-
-#include "native_client/src/trusted/validator/x86/decoder/nc_inst_iter_inl.c"
-
-void NaClCpuCheckMemoryInitialize(NaClValidatorState* state) {
- NaClClearCPUFeaturesX86(&state->cpu_checks.cpu_features);
- state->cpu_checks.f_CMOV_and_x87 = FALSE;
- state->cpu_checks.f_MMX_or_SSE2 = FALSE;
-}
-
-/* Helper function to report unsupported features */
-static INLINE void NaClCheckFeature(NaClCPUFeatureX86ID feature,
- struct NaClValidatorState* vstate,
- Bool* squash_me) {
- if (!NaClGetCPUFeatureX86(&vstate->cpu_features, feature)) {
- if (!NaClGetCPUFeatureX86(&vstate->cpu_checks.cpu_features, feature)) {
- NaClValidatorInstMessage(
- LOG_WARNING, vstate, vstate->cur_inst_state,
- "CPU model does not support %s instructions.\n",
- NaClGetCPUFeatureX86Name(feature));
- NaClSetCPUFeatureX86(&vstate->cpu_checks.cpu_features, feature, TRUE);
- }
- *squash_me = TRUE;
- }
-}
-
-void NaClCpuCheck(struct NaClValidatorState* state,
- struct NaClInstIter* iter) {
- Bool squash_me = FALSE;
- switch (state->cur_inst->insttype) {
- case NACLi_X87:
- case NACLi_X87_FSINCOS:
- NaClCheckFeature(NaClCPUFeatureX86_x87, state, &squash_me);
- break;
- case NACLi_SFENCE_CLFLUSH:
- /* TODO(bradchen): distinguish between SFENCE and CLFLUSH */
- NaClCheckFeature(NaClCPUFeatureX86_CLFLUSH, state, &squash_me);
- NaClCheckFeature(NaClCPUFeatureX86_FXSR, state, &squash_me);
- break;
- case NACLi_LAHF:
- if (NACL_ARCH(NACL_BUILD_ARCH) == NACL_x86 && NACL_TARGET_SUBARCH == 64)
- NaClCheckFeature(NaClCPUFeatureX86_LAHF, state, &squash_me);
- break;
- case NACLi_CMPXCHG8B:
- NaClCheckFeature(NaClCPUFeatureX86_CX8, state, &squash_me);
- break;
- case NACLi_CMPXCHG16B:
- NaClCheckFeature(NaClCPUFeatureX86_CX16, state, &squash_me);
- break;
- case NACLi_CMOV:
- NaClCheckFeature(NaClCPUFeatureX86_CMOV, state, &squash_me);
- break;
- case NACLi_FCMOV:
- if (!(NaClGetCPUFeatureX86(&state->cpu_features,
- NaClCPUFeatureX86_CMOV) &&
- NaClGetCPUFeatureX86(&state->cpu_features,
- NaClCPUFeatureX86_x87))) {
- if (!state->cpu_checks.f_CMOV_and_x87) {
- NaClValidatorInstMessage(
- LOG_WARNING, state, state->cur_inst_state,
- "CPU model does not support CMOV and x87 instructions.\n");
- state->cpu_checks.f_CMOV_and_x87 = TRUE;
- }
- squash_me = TRUE;
- }
- break;
- case NACLi_RDTSC:
- NaClCheckFeature(NaClCPUFeatureX86_TSC, state, &squash_me);
- break;
- case NACLi_MMX:
- NaClCheckFeature(NaClCPUFeatureX86_MMX, state, &squash_me);
- break;
- case NACLi_MMXSSE2:
- /* Note: We accept these instructions if either MMX or SSE2 bits */
- /* are set, in case MMX instructions go away someday... */
- if (!(NaClGetCPUFeatureX86(&state->cpu_features,
- NaClCPUFeatureX86_MMX) ||
- NaClGetCPUFeatureX86(&state->cpu_features,
- NaClCPUFeatureX86_SSE2))) {
- if (!state->cpu_checks.f_MMX_or_SSE2) {
- NaClValidatorInstMessage(
- LOG_WARNING, state, state->cur_inst_state,
- "CPU model does not support MMX or SSE2 instructions.\n");
- state->cpu_checks.f_MMX_or_SSE2 = TRUE;
- }
- }
- squash_me = TRUE;
- break;
- case NACLi_SSE:
- NaClCheckFeature(NaClCPUFeatureX86_SSE, state, &squash_me);
- break;
- case NACLi_SSE2:
- NaClCheckFeature(NaClCPUFeatureX86_SSE2, state, &squash_me);
- break;
- case NACLi_SSE3:
- NaClCheckFeature(NaClCPUFeatureX86_SSE3, state, &squash_me);
- break;
- case NACLi_SSE4A:
- NaClCheckFeature(NaClCPUFeatureX86_SSE4A, state, &squash_me);
- break;
- case NACLi_SSE41:
- NaClCheckFeature(NaClCPUFeatureX86_SSE41, state, &squash_me);
- break;
- case NACLi_SSE42:
- NaClCheckFeature(NaClCPUFeatureX86_SSE42, state, &squash_me);
- break;
- case NACLi_MOVBE:
- NaClCheckFeature(NaClCPUFeatureX86_MOVBE, state, &squash_me);
- break;
- case NACLi_POPCNT:
- NaClCheckFeature(NaClCPUFeatureX86_POPCNT, state, &squash_me);
- break;
- case NACLi_LZCNT:
- NaClCheckFeature(NaClCPUFeatureX86_LZCNT, state, &squash_me);
- break;
- case NACLi_SSSE3:
- NaClCheckFeature(NaClCPUFeatureX86_SSSE3, state, &squash_me);
- break;
- case NACLi_3DNOW:
- NaClCheckFeature(NaClCPUFeatureX86_3DNOW, state, &squash_me);
- break;
- case NACLi_E3DNOW:
- NaClCheckFeature(NaClCPUFeatureX86_E3DNOW, state, &squash_me);
- break;
- case NACLi_LONGMODE:
- /* TODO(karl): Remove this when NACLi_LONGMODE is no longer needed */
- NaClCheckFeature(NaClCPUFeatureX86_LM, state, &squash_me);
- break;
- case NACLi_SSE2x:
- /* This case requires CPUID checking code */
- /* DATA16 prefix required */
- if (!(state->cur_inst_state->prefix_mask & kPrefixDATA16)) {
- NaClValidatorInstMessage(
- LOG_ERROR, state, state->cur_inst_state,
- "SSEx instruction must use prefix 0x66.\n");
- }
- NaClCheckFeature(NaClCPUFeatureX86_SSE2, state, &squash_me);
- break;
- default:
- /* This instruction could be either legal or illegal, but if we
- * get here it is not CPU-dependent.
- */
- break;
- }
- if (state->cur_inst->flags & NACL_IFLAG(LongMode)) {
- NaClCheckFeature(NaClCPUFeatureX86_LM, state, &squash_me);
- }
- if (squash_me) {
- if (state->readonly_text) {
- NaClValidatorInstMessage(
- LOG_ERROR, state, state->cur_inst_state,
- "Read-only text: cannot squash unsupported instruction.\n");
- } else {
- /* Replace all bytes of the instruction with the HLT instruction. */
- NCStubOutMem(state, NaClInstIterGetInstMemoryInline(iter),
- NaClInstStateLength(state->cur_inst_state));
- }
- }
-}
« no previous file with comments | « src/trusted/validator/x86/ncval_reg_sfi/nc_cpu_checks.h ('k') | src/trusted/validator/x86/ncval_reg_sfi/nc_illegal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698