ANDROID: cki_coverage: print architectures supported by each syscall

Print the architectures (of arm64, arm, x86_64, and x86) supported by
each syscall in the full output.

Change-Id: Ib4d18a53e2f7f0b0ee0bb82b282ae46cc01a4944
Signed-off-by: Steve Muckle <smuckle@google.com>
diff --git a/android/tools/cki_coverage.py b/android/tools/cki_coverage.py
index a1beca8..0c6b1d4 100755
--- a/android/tools/cki_coverage.py
+++ b/android/tools/cki_coverage.py
@@ -154,11 +154,6 @@
 
   syscall_tests = {}
   disabled_tests = {}
-  failing_tests = {}
-  skipped_tests = {}
-  passing_tests = {}
-
-  test_results = {}
 
   def __init__(self, arch):
     self._arch = arch
@@ -249,7 +244,7 @@
     for syscall in syscalls:
       if self._arch is not None and self._arch not in syscall:
         continue
-      self.cki_syscalls.append(syscall["name"])
+      self.cki_syscalls.append(syscall)
       self.syscall_tests[syscall["name"]] = []
       # LTP does not use the 64 at the end of syscall names for testcases.
       ltp_syscall_name = syscall["name"]
@@ -274,7 +269,7 @@
           if full_test_name == "syscalls.epoll-ltp":
             full_test_name = "syscalls.epoll01"
           self.syscall_tests[syscall["name"]].append(full_test_name)
-    self.cki_syscalls.sort()
+    self.cki_syscalls.sort(key=lambda tup: tup["name"])
 
   def update_test_status(self):
     """Populate test configuration and output for all CKI syscalls.
@@ -282,10 +277,10 @@
     Go through VTS test configuration to populate data for all CKI syscalls.
     """
     for syscall in self.cki_syscalls:
-      self.disabled_tests[syscall] = []
-      if not self.syscall_tests[syscall]:
+      self.disabled_tests[syscall["name"]] = []
+      if not self.syscall_tests[syscall["name"]]:
         continue
-      for full_test_name in self.syscall_tests[syscall]:
+      for full_test_name in self.syscall_tests[syscall["name"]]:
         _, test = full_test_name.split('.')
         # The VTS LTP stable list is composed of tuples of the test name and
         # a boolean flag indicating whether it is mandatory.
@@ -294,9 +289,16 @@
             full_test_name in self.disabled_in_vts_ltp or
             ("%s_32bit" % full_test_name not in stable_vts_ltp_testnames and
              "%s_64bit" % full_test_name not in stable_vts_ltp_testnames)):
-          self.disabled_tests[syscall].append(full_test_name)
+          self.disabled_tests[syscall["name"]].append(full_test_name)
           continue
 
+  def syscall_arch_string(self, syscall, arch):
+    """Return a string showing whether the arch supports the given syscall."""
+    if arch not in syscall or not syscall[arch]:
+      return " "
+    else:
+      return "*"
+
   def output_results(self):
     """Pretty print the CKI syscall LTP coverage."""
     count = 0
@@ -305,32 +307,50 @@
     print ""
     print "         Covered Syscalls"
     for syscall in self.cki_syscalls:
-      if (len(self.syscall_tests[syscall]) -
-          len(self.disabled_tests[syscall]) <= 0):
+      if (len(self.syscall_tests[syscall["name"]]) -
+          len(self.disabled_tests[syscall["name"]]) <= 0):
         continue
       if not count % 20:
-        print ("%25s   Disabled Enabled -------------" %
+        print ("%25s   Disabled Enabled arm64 arm x86_64 x86 -----------" %
                "-------------")
-      sys.stdout.write("%25s   %s        %s\n" %
-                       (syscall, len(self.disabled_tests[syscall]),
-                        len(self.syscall_tests[syscall]) -
-                        len(self.disabled_tests[syscall])))
+      enabled = (len(self.syscall_tests[syscall["name"]]) -
+                 len(self.disabled_tests[syscall["name"]]))
+      if enabled > 9:
+        column_sp = "      "
+      else:
+        column_sp = "       "
+      sys.stdout.write("%25s   %s        %s%s%s     %s   %s      %s\n" %
+                       (syscall["name"], len(self.disabled_tests[syscall["name"]]),
+                        enabled, column_sp,
+                        self.syscall_arch_string(syscall, "arm64"),
+                        self.syscall_arch_string(syscall, "arm"),
+                        self.syscall_arch_string(syscall, "x86_64"),
+                        self.syscall_arch_string(syscall, "x86")))
       count += 1
 
     count = 0
     print "\n"
     print "       Uncovered Syscalls"
     for syscall in self.cki_syscalls:
-      if (len(self.syscall_tests[syscall]) -
-          len(self.disabled_tests[syscall]) > 0):
+      if (len(self.syscall_tests[syscall["name"]]) -
+          len(self.disabled_tests[syscall["name"]]) > 0):
         continue
       if not count % 20:
-        print ("%25s   Disabled Enabled -------------" %
+        print ("%25s   Disabled Enabled arm64 arm x86_64 x86 -----------" %
                "-------------")
-      sys.stdout.write("%25s   %s        %s\n" %
-                       (syscall, len(self.disabled_tests[syscall]),
-                        len(self.syscall_tests[syscall]) -
-                        len(self.disabled_tests[syscall])))
+      enabled = (len(self.syscall_tests[syscall["name"]]) -
+                 len(self.disabled_tests[syscall["name"]]))
+      if enabled > 9:
+        column_sp = "      "
+      else:
+        column_sp = "       "
+      sys.stdout.write("%25s   %s        %s%s%s     %s   %s      %s\n" %
+                       (syscall["name"], len(self.disabled_tests[syscall["name"]]),
+                        enabled, column_sp,
+                        self.syscall_arch_string(syscall, "arm64"),
+                        self.syscall_arch_string(syscall, "arm"),
+                        self.syscall_arch_string(syscall, "x86_64"),
+                        self.syscall_arch_string(syscall, "x86")))
       uncovered += 1
       count += 1
 
@@ -347,10 +367,10 @@
     uncovered_with_test = 0
     uncovered_without_test = 0
     for syscall in self.cki_syscalls:
-      if (len(self.syscall_tests[syscall]) -
-          len(self.disabled_tests[syscall]) > 0):
+      if (len(self.syscall_tests[syscall["name"]]) -
+          len(self.disabled_tests[syscall["name"]]) > 0):
         continue
-      if (len(self.disabled_tests[syscall]) > 0):
+      if (len(self.disabled_tests[syscall["name"]]) > 0):
         uncovered_with_test += 1
       else:
         uncovered_without_test += 1