]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Print error counts in the XML output.
authorJulian Seward <jseward@acm.org>
Fri, 20 May 2005 02:29:52 +0000 (02:29 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 20 May 2005 02:29:52 +0000 (02:29 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3779

coregrind/m_errormgr.c
coregrind/pub_core_errormgr.h
coregrind/vg_main.c

index 79b2d15a371e01e8545ea48b41445c47b94f9bcb..260e4f5851858cf0cc5ef95b5a3aca4c9376ffc1 100644 (file)
@@ -253,6 +253,8 @@ static void pp_Error ( Error* err, Bool printCount )
 {
    if (VG_(clo_xml)) {
       VG_(message)(Vg_UserMsg, "<error>");
+      VG_(message)(Vg_UserMsg, "  <unique>0x%llx</unique>",
+                                  Ptr_to_ULong(err));
       VG_(message)(Vg_UserMsg, "  <tid>%d</tid>", err->tid);
    }
 
@@ -664,7 +666,8 @@ static Bool show_used_suppressions ( void )
 }
 
 
-/* This is called not from generated code but from the scheduler */
+/* Show all the errors that occurred, and possibly also the
+   suppressions used. */
 void VG_(show_all_errors) ( void )
 {
    Int    i, n_min;
@@ -749,6 +752,27 @@ void VG_(show_all_errors) ( void )
    }
 }
 
+
+/* Show occurrence counts of all errors, in XML form. */
+void VG_(show_error_counts_as_XML) ( void )
+{
+   Error* err;
+   VG_(message)(Vg_UserMsg, "<errorcounts>");
+   for (err = errors; err != NULL; err = err->next) {
+      if (err->supp != NULL)
+         continue;
+      if (err->count <= 0)
+         continue;
+      VG_(message)(
+         Vg_UserMsg, "  <pair><unique>0x%llx</unique>"
+                     "<count>%d</count></pair>",
+         Ptr_to_ULong(err), err->count
+      );
+   }
+   VG_(message)(Vg_UserMsg, "</errorcounts>");
+}
+
+
 /*------------------------------------------------------------*/
 /*--- Standard suppressions                                ---*/
 /*------------------------------------------------------------*/
index 460297c3efa758fac29e55e5c7a07b76c31a63c7..a40cdddc1a6df502b98395705a7b29c5db64f32a 100644 (file)
@@ -49,13 +49,15 @@ typedef
    }
    CoreErrorKind;
 
-extern void VG_(load_suppressions)    ( void );
+extern void VG_(load_suppressions)        ( void );
 
-extern void VG_(show_all_errors)      ( void );
+extern void VG_(show_all_errors)          ( void );
 
-extern Bool VG_(is_action_requested)  ( Char* action, Bool* clo );
+extern void VG_(show_error_counts_as_XML) ( void );
 
-extern UInt VG_(get_n_errs_found)     ( void );
+extern Bool VG_(is_action_requested)      ( Char* action, Bool* clo );
+
+extern UInt VG_(get_n_errs_found)         ( void );
 
 #endif   // __PUB_CORE_ERRORMGR_H
 
index a4b839c09fcec9e3dcc703a4f462c57c40d8ce16..5910e36fce1685c779c603b2dd806a0ba0fad63a 100644 (file)
@@ -2856,6 +2856,10 @@ void VG_(shutdown_actions)(ThreadId tid)
       VG_(message)(Vg_UserMsg, "");
 
    if (VG_(clo_xml)) {
+      if (VG_(needs).core_errors || VG_(needs).tool_errors) {
+         VG_(show_error_counts_as_XML)();
+         VG_(message)(Vg_UserMsg, "");
+      }
       VG_(message)(Vg_UserMsg, "<status>FINISHED</status>");
       VG_(message)(Vg_UserMsg, "");
    }