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

Unified Diff: src/trusted/validator/x86/ncval_reg_sfi/nc_jumps_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_reg_sfi/nc_jumps_detailed.c
diff --git a/src/trusted/validator/x86/ncval_reg_sfi/nc_jumps_detailed.c b/src/trusted/validator/x86/ncval_reg_sfi/nc_jumps_detailed.c
deleted file mode 100644
index 2c914b5880c709ed6e5ede61939d2c3f9a918538..0000000000000000000000000000000000000000
--- a/src/trusted/validator/x86/ncval_reg_sfi/nc_jumps_detailed.c
+++ /dev/null
@@ -1,137 +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.
- */
-
-/*
- * nc_jumps_detailed.c - Validate jumps using a second pass of the
- * isntructions.
- */
-
-#include "native_client/src/trusted/validator/x86/ncval_reg_sfi/nc_jumps_detailed.h"
-
-#include "native_client/src/shared/platform/nacl_log.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/ncval_reg_sfi/nc_jumps.h"
-
-/* To turn on debugging of instruction decoding, change value of
- * DEBUGGING to 1.
- */
-#define DEBUGGING 0
-
-#include "native_client/src/shared/utils/debugging.h"
-
-#include "native_client/src/trusted/validator/x86/decoder/ncop_exps_inl.c"
-#include "native_client/src/trusted/validator/x86/decoder/nc_inst_iter_inl.c"
-
-/* Returns true if the given address is within the code segment.
- */
-static Bool NaClCheckAddressRange(NaClPcAddress address,
- NaClValidatorState* vstate) {
- return address < vstate->codesize;
-}
-
-static void NaClInstLayoutCheck(NaClValidatorState* vstate) {
- NaClPcAddress start;
- NaClPcAddress end;
- NaClPcAddress i;
- if (NULL == vstate->cur_inst_state) return;
-
- DEBUG(NaClLog(LOG_INFO, "Jump layout check: ");
- NaClInstStateInstPrint(NaClLogGetGio(), vstate->cur_inst_state));
-
- /* Check basic block boundaries. */
- start = vstate->cur_inst_state->inst_addr;
-
- /* Check that if first instruction in a basic block, it isn't in the
- * middle of a pattern.
- */
- if ((0 == (start & vstate->bundle_mask)) &&
- NaClAddressSetContains(vstate->jump_sets.removed_targets,
- start, vstate)) {
- NaClValidatorInstMessage(
- LOG_ERROR, vstate, vstate->cur_inst_state,
- "Instruction begins basic block, but in middle of nacl pattern\n");
- }
-
- /* Check that instruction doesn't cross block boundaries. */
- end = (NaClPcAddress) (start + vstate->cur_inst_state->bytes.length);
- for (i = start + 1; i < end; ++i) {
- if (0 == (i & vstate->bundle_mask)) {
- NaClValidatorInstMessage(
- LOG_ERROR, vstate, vstate->cur_inst_state,
- "Instruction crosses basic block alignment\n");
- }
- }
-
- /* Check jump targets. */
- if (NaClHasBit(vstate->cur_inst_state->inst->flags,
- NACL_IFLAG(JumpInstruction) | NACL_IFLAG(ConditionalJump))) {
- uint32_t i;
- NaClExpVector* vector = NaClInstStateExpVector(vstate->cur_inst_state);
- for (i = 0; i < vector->number_expr_nodes; ++i) {
- NaClExp* node = &vector->node[i];
- if (NaClHasBit(node->flags, NACL_EFLAG(ExprJumpTarget))
- && node->kind == ExprConstant) {
- /* Explicit jump value. Check if legal! */
- NaClPcAddress target = end +
- (NaClPcNumber) NaClGetExprSignedValue(node);
- /* Don't report targets that are out of range. They should have
- * been reported in the first pass!
- */
- if (NaClCheckAddressRange(target, vstate)) {
- if (NaClAddressSetContains(vstate->jump_sets.possible_targets,
- target, vstate)) {
- if (NaClAddressSetContains(vstate->jump_sets.removed_targets,
- target, vstate)) {
- NaClValidatorInstMessage(
- LOG_ERROR, vstate, vstate->cur_inst_state,
- "Jumps into middle of nacl pattern\n");
- }
- } else {
- NaClValidatorInstMessage(
- LOG_ERROR, vstate, vstate->cur_inst_state,
- "Doesn't jump to instruction address\n");
- }
- }
- }
- }
- }
-}
-
-void NaClJumpValidatorSummarizeDetailed(NaClValidatorState* vstate) {
- if (vstate->quit) return;
- NaClValidatorMessage(
- LOG_INFO, vstate,
- "Checking block alignment and jump targets: %"NACL_PRIxNaClPcAddress
- " to %"NACL_PRIxNaClPcAddress"\n",
- vstate->vbase, vstate->vbase + vstate->codesize);
-
- /* Check that code segment starts at an aligned address. */
- if (vstate->vbase & vstate->bundle_mask) {
- NaClValidatorMessage(
- LOG_ERROR, vstate,
- "Code segment starts at 0x%"NACL_PRIxNaClPcAddress", "
- "which isn't aligned properly.\n",
- vstate->vbase);
- }
-
- /* Perform second pass on instructions to find instructions crossing
- * block boundaries, and (explicitly) branch to bad places.
- */
- do {
- if (!NaClValidatorStateIterReset(vstate)) {
- NaClValidatorMessage(LOG_ERROR, vstate,
- "Not enough memory to check jumps\n");
- break;
- }
- for (; NaClValidatorStateIterHasNext(vstate);
- NaClValidatorStateIterAdvance(vstate)) {
- NaClInstLayoutCheck(vstate);
- }
- NaClValidatorStateIterFinish(vstate);
- } while (0);
-}

Powered by Google App Engine
This is Rietveld 408576698