Adds coverage reports for C and C++.
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index a3bed4e..5120f6c 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -175,6 +175,12 @@
   def build_steps(self):
     return []
 
+  def post_tests_steps(self):
+    if self.platform == 'windows':
+      return []
+    else:
+      return [['tools/run_tests/post_tests_c.sh']]
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -199,6 +205,9 @@
   def build_steps(self):
     return [['tools/run_tests/build_node.sh']]
 
+  def post_tests_steps(self):
+    return []
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -224,6 +233,9 @@
   def build_steps(self):
     return [['tools/run_tests/build_php.sh']]
 
+  def post_tests_steps(self):
+    return []
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -270,6 +282,9 @@
                        do_newline=True)
     return commands
 
+  def post_tests_steps(self):
+    return []
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -295,6 +310,9 @@
   def build_steps(self):
     return [['tools/run_tests/build_ruby.sh']]
 
+  def post_tests_steps(self):
+    return []
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -343,6 +361,9 @@
     else:
       return [['tools/run_tests/build_csharp.sh']]
 
+  def post_tests_steps(self):
+    return []
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -368,6 +389,9 @@
   def build_steps(self):
     return [['src/objective-c/tests/build_tests.sh']]
 
+  def post_tests_steps(self):
+    return []
+
   def makefile_name(self):
     return 'Makefile'
 
@@ -631,6 +655,11 @@
                    for l in languages
                    for cmdline in l.build_steps()))
 
+post_tests_steps = list(set(
+                        jobset.JobSpec(cmdline, environ={'CONFIG': cfg})
+                        for cfg in build_configs
+                        for l in languages
+                        for cmdline in l.post_tests_steps()))
 runs_per_test = args.runs_per_test
 forever = args.forever
 
@@ -788,6 +817,10 @@
       tree = ET.ElementTree(root)
       tree.write(xml_report, encoding='UTF-8')
 
+  if not jobset.run(post_tests_steps, maxjobs=1, stop_on_failure=True,
+                    newline_on_success=newline_on_success, travis=travis):
+    return 3
+
   if cache: cache.save()
 
   return 0