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
4 * found in the LICENSE file.
7 /* Implement the ApplyValidatorVerbosely API for the x86-64 architecture. */
9 #include "native_client/src/trusted/validator/ncvalidate.h"
11 #include "native_client/src/shared/platform/nacl_log.h"
12 #include "native_client/src/trusted/cpu_features/arch/x86/cpu_x86.h"
13 #include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h"
14 #include "native_client/src/trusted/validator/x86/ncval_seg_sfi/ncdecode_verbose.h"
15 #include "native_client/src/trusted/validator/x86/64/ncvalidate.h"
18 /* Be sure the correct compile flags are defined for this. */
19 #if NACL_ARCH(NACL_TARGET_ARCH) != NACL_x86
20 # error("Can't compile, target is for x86-64")
22 # if NACL_TARGET_SUBARCH != 64
23 # error("Can't compile, target is for x86-64")
27 static NaClValidationStatus NaClApplyValidatorVerbosely_x86_64(
31 const NaClCPUFeatures *f) {
32 /* TODO(jfb) Use a safe cast here. */
33 const NaClCPUFeaturesX86 *cpu_features = (NaClCPUFeaturesX86 *) f;
34 struct NaClValidatorState *vstate;
35 NaClValidationStatus status =
36 NaClValidatorSetup_x86_64(guest_addr, size, FALSE, cpu_features, &vstate);
37 if (status != NaClValidationSucceeded) return status;
38 NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR);
39 NaClValidatorStateSetMaxReportedErrors(vstate, -1); /* Report all errors. */
40 NaClValidatorStateSetErrorReporter(vstate, &kNaClVerboseErrorReporter);
41 NaClValidateSegment(data, guest_addr, size, vstate);
43 NaClValidatesOk(vstate) ? NaClValidationSucceeded : NaClValidationFailed;
44 NaClValidatorStateDestroy(vstate);
48 NaClValidationStatus NACL_SUBARCH_NAME(ApplyValidatorVerbosely, x86, 64)
49 (uintptr_t guest_addr,
52 const NaClCPUFeatures *f) {
53 /* TODO(jfb) Use a safe cast here. */
54 const NaClCPUFeaturesX86 *cpu_features = (NaClCPUFeaturesX86 *) f;
56 if (!NaClArchSupportedX86(cpu_features))
57 return NaClValidationFailedCpuNotSupported;
59 return NaClApplyValidatorVerbosely_x86_64(
60 guest_addr, data, size, f);