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

Unified Diff: src/trusted/validator_arm/validator_small_tests.cc

Issue 11194045: Change BKPT and UDF encodings on ARM. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Created 8 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_arm/validator_small_tests.cc
diff --git a/src/trusted/validator_arm/validator_small_tests.cc b/src/trusted/validator_arm/validator_small_tests.cc
index e58888ff2397f3a818f7afb2895d8d980d6b5f37..cbb6eb35f4a1c39c394c48a7807e1ee148884559 100644
--- a/src/trusted/validator_arm/validator_small_tests.cc
+++ b/src/trusted/validator_arm/validator_small_tests.cc
@@ -520,23 +520,6 @@ TEST_F(ValidatorTests, ScaryUndefinedInstructions) {
}
}
-TEST_F(ValidatorTests, LessScaryUndefinedInstructions) {
- // These instructions are specified by ARM as *permanently* undefined, so we
- // treat them as a reliable Illegal Instruction trap.
-
- static const AnnotatedInstruction perm_undefined[] = {
- { 0xE7FFDEFE, "permanently undefined instruction produced by LLVM" },
- };
-
- for (unsigned i = 0; i < NACL_ARRAY_SIZE(perm_undefined); i++) {
- arm_inst program[] = { perm_undefined[i].inst };
- validation_should_pass(program,
- 1,
- kDefaultBaseAddr,
- perm_undefined[i].about);
- }
-}
-
TEST_F(ValidatorTests, PcRelativeFirstInst) {
// Note: This tests the fix for issue 2771.
static const arm_inst pcrel_boundary_tests[] = {
@@ -1046,6 +1029,49 @@ TEST_F(ValidatorTests, LiteralPoolHeadIsBreakpoint) {
"it needs to act as a roadblock");
}
+TEST_F(ValidatorTests, Breakpoint) {
+ EXPECT_EQ(nacl_arm_dec::kBreakpoint & 0xFFF000F0,
+ 0xE1200070) // BKPT #0
+ << ("the breakpoint instruction should be a breakpoint: "
+ "it needs to trap");
+}
+
+TEST_F(ValidatorTests, HaltFill) {
+ EXPECT_EQ(nacl_arm_dec::kHaltFill & 0xFFF000F0,
+ 0xE7F000F0) // UDF #0
+ << ("the halt fill instruction should be UDF: "
+ "it needs to trap");
+}
+
+TEST_F(ValidatorTests, AbortNow) {
+ EXPECT_EQ(nacl_arm_dec::kAbortNow & 0xFFF000F0,
+ 0xE7F000F0) // UDF #0
+ << ("the abort now instruction should be UDF: "
+ "it needs to trap");
+}
+
+TEST_F(ValidatorTests, FailValidation) {
+ EXPECT_EQ(nacl_arm_dec::kFailValidation & 0xFFF000F0,
+ 0xE7F000F0) // UDF #0
+ << ("the fail validation instruction should be UDF: "
+ "it needs to trap");
+}
+
+TEST_F(ValidatorTests, UDFAndBKPTValidateAsExpected) {
+ ProblemSpy spy;
+ for (uint32_t i = 0; i < 0xFFFF; ++i) {
+ arm_inst bkpt_inst = 0xE1200070 | ((i & 0xFFF0) << 4) | (i & 0xF);
+ arm_inst udf_inst = 0xE7F000F0 | ((i & 0xFFF0) << 4) | (i & 0xF);
+ EXPECT_EQ(validate(&bkpt_inst, 1, kDefaultBaseAddr, &spy),
+ ((bkpt_inst == nacl_arm_dec::kLiteralPoolHeadInstruction) ||
+ (bkpt_inst == nacl_arm_dec::kBreakpoint)));
+ EXPECT_EQ(validate(&udf_inst, 1, kDefaultBaseAddr, &spy),
+ ((udf_inst == nacl_arm_dec::kHaltFill) ||
+ (udf_inst == nacl_arm_dec::kAbortNow)));
+ // Tautological note: kFailValidation should fail validation.
+ }
+}
+
TEST_F(ValidatorTests, LiteralPoolHeadInstruction) {
// Make sure that literal pools are handled properly: they should be preceded
// by a special breakpoint instruction at the start of the bundle, and can

Powered by Google App Engine
This is Rietveld 408576698