tools/compile_seccomp_policy: Support arch metadata attributes

This change adds support for parsing arch metadata attributes and filtering
statements that don't match the requested architecture.

Bug: chromium:856315
Test: ./tools/parser_unittest.py

Change-Id: I01c38079124b8806bb033460fe395075fbb734e9
diff --git a/tools/parser_unittest.py b/tools/parser_unittest.py
index ba0fedd..570f8a2 100755
--- a/tools/parser_unittest.py
+++ b/tools/parser_unittest.py
@@ -399,6 +399,22 @@
                 parser.Filter([[parser.Atom(0, '==', 0)]], bpf.Allow()),
             ]))
 
+    def test_parse_metadata(self):
+        """Accept valid filter statements with metadata."""
+        self.assertEqual(
+            self.parser.parse_filter_statement(
+                self._tokenize('read[arch=test]: arg0 == 0')),
+            parser.ParsedFilterStatement((parser.Syscall('read', 0), ), [
+                parser.Filter([[parser.Atom(0, '==', 0)]], bpf.Allow()),
+            ]))
+        self.assertEqual(
+            self.parser.parse_filter_statement(
+                self._tokenize(
+                    '{read, nonexistent[arch=nonexistent]}: arg0 == 0')),
+            parser.ParsedFilterStatement((parser.Syscall('read', 0), ), [
+                parser.Filter([[parser.Atom(0, '==', 0)]], bpf.Allow()),
+            ]))
+
     def test_parse_unclosed_brace(self):
         """Reject unclosed brace."""
         with self.assertRaisesRegex(parser.ParseException, 'unclosed brace'):