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

Unified Diff: src/trusted/validator/x86/ncval_seg_sfi/ncvalidate_detailed.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_seg_sfi/ncvalidate_detailed.c
diff --git a/src/trusted/validator/x86/ncval_seg_sfi/ncvalidate_detailed.c b/src/trusted/validator/x86/ncval_seg_sfi/ncvalidate_detailed.c
deleted file mode 100644
index 0f2c941f0eb11559b1321a92b92a26bdb5136273..0000000000000000000000000000000000000000
--- a/src/trusted/validator/x86/ncval_seg_sfi/ncvalidate_detailed.c
+++ /dev/null
@@ -1,172 +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.
- */
-
-/*
- * ncvalidate_details.c
- * Attach detailed error reporter to the NaCl validator. Does a second
- * walk of the instructions to find instructions that explicitly branch
- * to illegal addresses.
- *
- * See function NCJumpSummarize in ncvalidate.c for a the terse version
- * which doesn't require a second pass.
- */
-
-#include "native_client/src/trusted/validator/x86/ncval_seg_sfi/ncvalidate_detailed.h"
-
-#include "native_client/src/trusted/validator/x86/ncval_seg_sfi/ncdecode.h"
-#include "native_client/src/trusted/validator/x86/ncval_seg_sfi/ncvalidate_internaltypes.h"
-
-static void NCJumpSummarizeDetailed(struct NCValidatorState* vstate);
-
-
-/* Null method for decoder state. */
-static void NCNullDecoderStateMethod(struct NCValidatorState* vstate) {
-}
-
-/* Detailed (summary) error check on target value, defined in the given decoder
- * instruction.
- */
-static void NCJumpCheck(struct NCValidatorState* vstate,
- const NCDecoderInst* dinst,
- int32_t jump_offset) {
- NaClPcAddress target = (dinst->inst_addr + dinst->inst.bytes.length
- + jump_offset);
-
- if (target < vstate->codesize && !NCGetAdrTable(target, vstate->vttable)) {
- if (NCGetAdrTable(target, vstate->pattern_nonfirst_insts_table)) {
- NCBadInstructionError(dinst, "Jumps into middle of nacl pattern");
- } else {
- NCBadInstructionError(dinst, "Doesn't jump to instruction address");
- }
- NCStatsBadTarget(vstate);
- }
-}
-
-/* Detailed (summary) error check for a byte jump instruction.
- * Note: This code should match the corresponding validator check
- * function ValidateJmp8 in ncvalidate.c.
- */
-static void NCInstCheckJmp8(const NCDecoderInst* dinst) {
- int8_t offset = NCInstBytesByte(&dinst->inst_bytes,
- dinst->inst.prefixbytes+1);
- struct NCValidatorState* vstate = NCVALIDATOR_STATE_DOWNCAST(dinst->dstate);
- NCJumpCheck(vstate, dinst, offset);
-}
-
-/* Detailed (summary) error check for a jump condition instruction.
- * Note: This code should match the corresponding validator check
- * function ValidateJmpz in ncvalidate.c.
- */
-static void NCInstCheckJmpz(const NCDecoderInst* dinst) {
- NCInstBytesPtr opcode;
- uint8_t opcode0;
- int32_t offset;
- NCValidatorState* vstate = NCVALIDATOR_STATE_DOWNCAST(dinst->dstate);
- NCInstBytesPtrInitInc(&opcode, &dinst->inst_bytes,
- dinst->inst.prefixbytes);
- opcode0 = NCInstBytesByte(&opcode, 0);
- if (opcode0 == 0x0f) {
- /* Multbyte opcode. Intruction is of form:
- * 0F80 .. 0F8F: jCC $Jz
- */
- NCInstBytesPtr opcode_2;
- NCInstBytesPtrInitInc(&opcode_2, &opcode, 2);
- offset = NCInstBytesInt32(&opcode_2, dinst->inst.immbytes);
- } else {
- /* Single byte opcode. Must be one of:
- * E8: call $Jz
- * E9: jmp $Jx
- */
- NCInstBytesPtr opcode_1;
- NCInstBytesPtrInitInc(&opcode_1, &opcode, 1);
- offset = NCInstBytesInt32(&opcode_1, dinst->inst.immbytes);
- }
- NCJumpCheck(vstate, dinst, offset);
-}
-
-/* Decoder action to perform to detect bad jumps during detailed
- * (summarization) error checking.
- */
-static Bool NCInstLayoutCheck(const NCDecoderInst* dinst) {
- NCValidatorState* vstate;
- NaClPcAddress start;
- NaClPcAddress end;
- NaClPcAddress i;
- if (dinst == NULL) return TRUE;
- vstate = NCVALIDATOR_STATE_DOWNCAST(dinst->dstate);
-
- /* Check that if first instruction is a basic block, it isn't in the middle
- * of a pattern.
- */
- start = dinst->inst_addr;
- if ((0 == (start % vstate->bundle_size)) &&
- NCGetAdrTable(start, vstate->pattern_nonfirst_insts_table)) {
- NCBadInstructionError(
- dinst,
- "Instruction begins basic block, but in middle of nacl pattern\n");
- NCStatsBadAlignment(vstate);
- }
-
- /* Check that instruction doesn't cross block boundaries. */
- end = start + NCInstBytesLength(&dinst->inst_bytes);
- for (i = start + 1; i < end; ++i) {
- if (0 == (i % vstate->bundle_size)) {
- NCBadInstructionError(dinst, "Instruction crosses basic block alignment");
- NCStatsBadAlignment(vstate);
- }
- }
-
- /* Check jump targets. */
- switch (dinst->opinfo->insttype) {
- case NACLi_JMP8:
- NCInstCheckJmp8(dinst);
- break;
- case NACLi_JMPZ:
- NCInstCheckJmpz(dinst);
- break;
- default:
- break;
- }
- return TRUE;
-}
-
-/* Detailed (summary) error reporting. Rather than looking at summary
- * information collected during the first pass, this code rewalks the
- * instructions are reports each instruction that causes a problem.
- */
-static void NCJumpSummarizeDetailed(struct NCValidatorState* vstate) {
- /* Rewalk the code to find instructions that break rules. */
- NCDecoderState* dstate = &vstate->dstate;
- NaClErrorReporter* reporter = dstate->error_reporter;
- NCDecoderStateConstruct(dstate, dstate->mbase, dstate->vbase, dstate->size,
- vstate->inst_buffer, kNCValidatorInstBufferSize);
- dstate->action_fn = NCInstLayoutCheck;
- dstate->new_segment_fn = (NCDecoderStateMethod) NCNullDecoderStateMethod;
- dstate->internal_error_fn = (NCDecoderStateMethod) NCNullDecoderStateMethod;
- dstate->internal_error_fn = (NCDecoderStateMethod) NCStatsInternalError;
- NCDecoderStateSetErrorReporter(dstate, reporter);
- NCDecoderStateDecode(dstate);
-}
-
-struct NCValidatorState *NCValidateInitDetailed(
- const NaClPcAddress vbase,
- const NaClMemorySize codesize,
- const NaClCPUFeaturesX86 *features) {
- struct NCValidatorState *vstate = NCValidateInit(vbase, codesize,
- FALSE, features);
- if (NULL != vstate) {
- vstate->summarize_fn = NCJumpSummarizeDetailed;
- vstate->pattern_nonfirst_insts_table =
- (uint8_t *)calloc(NCIATOffset(codesize) + 1, 1);
- if (NULL == vstate->pattern_nonfirst_insts_table) {
- if (NULL != vstate->kttable) free(vstate->kttable);
- if (NULL != vstate->vttable) free(vstate->vttable);
- free(vstate);
- return NULL;
- }
- }
- return vstate;
-}

Powered by Google App Engine
This is Rietveld 408576698