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

Unified Diff: src/trusted/validator_mips/validator_tests.cc

Issue 11415031: [MIPS] Forbid $sp update at the end of the last bundle. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Presubmit errors have been fixed. Created 8 years, 1 month 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
« no previous file with comments | « src/trusted/validator_mips/validator.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/trusted/validator_mips/validator_tests.cc
diff --git a/src/trusted/validator_mips/validator_tests.cc b/src/trusted/validator_mips/validator_tests.cc
index a1dbc4f9d2522e41ae3b0348ea9d75bf544785be..6eed457579c0ab518f9302bdab823c26bf31fc48 100644
--- a/src/trusted/validator_mips/validator_tests.cc
+++ b/src/trusted/validator_mips/validator_tests.cc
@@ -1,7 +1,7 @@
/*
- * Copyright 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.
+ * 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.
*/
/*
@@ -43,6 +43,10 @@ using nacl_mips_dec::Instruction;
using nacl_mips_val::SfiValidator;
using nacl_mips_val::ProblemSink;
using nacl_mips_val::CodeSegment;
+using nacl_mips_dec::kInstrSize;
+using nacl_mips_dec::kNop;
+using nacl_mips_dec::kRegisterStack;
+using nacl_mips_dec::kRegListReserved;
namespace {
@@ -250,10 +254,6 @@ static const AnnotatedInstruction examples_of_safe_jumps[] = {
{ (10<<21|8), "simple jump jr t2" },
};
-static const AnnotatedInstruction nop_instruction[] = {
- { 0, "nop"},
-};
-
TEST_F(ValidatorTests, SafeMaskedJumps) {
/*
* Produces examples of masked jumps using the safe jump table
@@ -266,7 +266,7 @@ TEST_F(ValidatorTests, SafeMaskedJumps) {
<< ", "
<< examples_of_safe_jumps[s].about;
mips_inst program[] = {
- nop_instruction[0].inst,
+ kNop,
examples_of_safe_jump_masks[m].inst,
examples_of_safe_jumps[s].inst,
};
@@ -357,7 +357,7 @@ TEST_F(ValidatorTests, IncorrectStackOps) {
mips_inst bad_program[] = {
examples_of_safe_stack_masks[m].inst,
examples_of_safe_stack_ops[s].inst,
- nop_instruction[0].inst
+ kNop
};
ValidationShouldFail(bad_program,
@@ -368,6 +368,34 @@ TEST_F(ValidatorTests, IncorrectStackOps) {
}
}
+TEST_F(ValidatorTests, NopBundle) {
+ vector<mips_inst> code(_validator.bytes_per_bundle() / kInstrSize, kNop);
+ ValidationShouldPass(&code[0], code.size(), kDefaultBaseAddr,
+ "NOP bundle");
+}
+
+TEST_F(ValidatorTests, UnmaskedSpUpdate) {
+ vector<mips_inst> code(_validator.bytes_per_bundle() / kInstrSize, kNop);
+ for (vector<mips_inst>::size_type i = 0; i < code.size(); ++i) {
+ std::fill(code.begin(), code.end(), kNop);
+ code[i] = 0x8fbd0000; // lw $sp, 0($sp)
+ ValidationShouldFail(&code[0], code.size(), kDefaultBaseAddr,
+ "unmasked SP update");
+ }
+}
+
+TEST_F(ValidatorTests, MaskedSpUpdate) {
+ vector<mips_inst> code((_validator.bytes_per_bundle() / kInstrSize) * 2,
+ kNop);
+ for (vector<mips_inst>::size_type i = 0; i < code.size() - 1; ++i) {
+ std::fill(code.begin(), code.end(), kNop);
+ code[i] = examples_of_safe_stack_ops[0].inst;
+ code[i + 1] = examples_of_safe_stack_masks[0].inst;
+ ValidationShouldPass(&code[0], code.size(), kDefaultBaseAddr,
+ "masked SP update");
+ }
+}
+
/*
* Implementation of the ValidatorTests utility methods. These are documented
* toward the top of this file.
@@ -376,8 +404,8 @@ ValidatorTests::ValidatorTests()
: _validator(kBytesPerBundle,
kCodeRegionSize,
kDataRegionSize,
- nacl_mips_dec::kRegListReserved,
- nacl_mips_dec::kRegisterStack) {}
+ kRegListReserved,
+ RegisterList(kRegisterStack)) {}
bool ValidatorTests::Validate(const mips_inst *pattern,
size_t inst_count,
« no previous file with comments | « src/trusted/validator_mips/validator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698