Chromium Code Reviews| Index: sandbox/linux/seccomp-bpf/codegen_unittest.cc |
| diff --git a/sandbox/linux/seccomp-bpf/codegen_unittest.cc b/sandbox/linux/seccomp-bpf/codegen_unittest.cc |
| index 73b0f88423c1039fa4dc1618d35538ca1e83c0f0..8cc61c79bdbb43927a9d7503001c4804f3420cea 100644 |
| --- a/sandbox/linux/seccomp-bpf/codegen_unittest.cc |
| +++ b/sandbox/linux/seccomp-bpf/codegen_unittest.cc |
| @@ -113,13 +113,7 @@ class ProgramTest : public ::testing::Test { |
| CodeGen::Addr res = gen_.MakeInstruction(code, k, jt, jf); |
| EXPECT_NE(CodeGen::kNullAddr, res); |
| - Hash digest; |
| - if (code == BPF_JMP + BPF_JA) { |
| - // TODO(mdempsky): Disallow use of JA. |
| - digest = Lookup(jt); |
| - } else { |
| - digest = Hash(code, k, Lookup(jt), Lookup(jf)); |
| - } |
| + Hash digest(code, k, Lookup(jt), Lookup(jf)); |
| auto it = addr_hashes_.insert(std::make_pair(res, digest)); |
| EXPECT_EQ(digest, it.first->second); |
| @@ -218,12 +212,12 @@ TEST_F(ProgramTest, Complex) { |
| // RET 42 (insn3+) |
| CodeGen::Addr insn0 = MakeInstruction(BPF_RET + BPF_K, 42); |
| CodeGen::Addr insn1 = MakeInstruction(BPF_LD + BPF_W + BPF_ABS, 42, insn0); |
| - CodeGen::Addr insn2 = MakeInstruction(BPF_JMP + BPF_JA, 0, insn1); |
| + CodeGen::Addr insn2 = insn1; // Implicit JUMP |
| - // We explicitly duplicate instructions so that MergeTails() can coalesce |
| - // them later. |
| + // We explicitly duplicate instructions to check that CodeGen merges them. |
| CodeGen::Addr insn3 = MakeInstruction(BPF_LD + BPF_W + BPF_ABS, 42, |
| MakeInstruction(BPF_RET + BPF_K, 42)); |
| + EXPECT_EQ(insn2, insn3); |
| CodeGen::Addr insn4 = |
| MakeInstruction(BPF_JMP + BPF_JEQ + BPF_K, 42, insn2, insn3); |
| @@ -322,5 +316,25 @@ TEST_F(ProgramTest, ConfusingTailsMergeable) { |
| RunTest(i0); |
| } |
| +TEST_F(ProgramTest, InstructionFolding) { |
| + // Check that simple instructions are folded as expected. |
| + CodeGen::Addr a = MakeInstruction(BPF_RET + BPF_K, 0); |
| + EXPECT_EQ(a, MakeInstruction(BPF_RET + BPF_K, 0)); |
| + CodeGen::Addr b = MakeInstruction(BPF_RET + BPF_K, 1); |
| + EXPECT_EQ(a, MakeInstruction(BPF_RET + BPF_K, 0)); |
| + EXPECT_EQ(b, MakeInstruction(BPF_RET + BPF_K, 1)); |
| + EXPECT_EQ(b, MakeInstruction(BPF_RET + BPF_K, 1)); |
| + |
| + // Check that complex sequences are folded too. |
| + CodeGen::Addr c = |
| + MakeInstruction(BPF_LD + BPF_W + BPF_ABS, 0, |
| + MakeInstruction(BPF_JMP + BPF_JSET + BPF_K, 0x100, a, b)); |
| + EXPECT_EQ(c, MakeInstruction( |
| + BPF_LD + BPF_W + BPF_ABS, 0, |
| + MakeInstruction(BPF_JMP + BPF_JSET + BPF_K, 0x100, a, b))); |
| + |
| + RunTest(c); |
| +} |
| + |
| } // namespace |
|
rickyz (no longer on Chrome)
2014/11/12 23:43:50
Can you add a test that calls MakeInstruction with
mdempsky
2014/11/18 01:07:30
Done.
|
| } // namespace sandbox |