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

Unified Diff: sandbox/linux/seccomp-bpf/codegen_unittest.cc

Issue 699633003: CodeGen: rewrite implementation [3/3] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@codegen-api-2
Patch Set: Use size_t instead of uint32_t as semantically appropriate Created 6 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
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

Powered by Google App Engine
This is Rietveld 408576698