Describe better version mismatch in libgcov driver.
authorMartin Liska <mliska@suse.cz>
Fri, 18 Jan 2019 11:30:56 +0000 (12:30 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 18 Jan 2019 11:30:56 +0000 (11:30 +0000)
2019-01-18  Martin Liska  <mliska@suse.cz>

* libgcov-driver.c (gcov_version_string): New function.
(gcov_version): Convert version integer into string.

From-SVN: r268069

libgcc/ChangeLog
libgcc/libgcov-driver.c

index dce8192c79bc7f111af04fd85215c19327365087..055836fb2b075782277791bd8b5080fc90d7577f 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-18  Martin Liska  <mliska@suse.cz>
+
+       * libgcov-driver.c (gcov_version_string): New function.
+       (gcov_version): Convert version integer into string.
+
 2019-01-17  Andrew Stubbs  <ams@codesourcery.com>
            Kwok Cheung Yeung  <kcy@codesourcery.com>
            Julian Brown  <julian@codesourcery.com>
index 44f43e6e9af6d41c3b212cd4d06f4733aac58368..41d28ace92658c4d81914d6f6d635b6366d254ef 100644 (file)
@@ -157,6 +157,27 @@ fail:
   return (struct gcov_fn_buffer **)free_fn_data (gi_ptr, fn_buffer, ix);
 }
 
+/* Convert VERSION into a string description and return the it.
+   BUFFER is used for storage of the string.  The code should be
+   aligned wit gcov-iov.c.  */
+
+static char *
+gcov_version_string (char *buffer, char version[4])
+{
+  if (version[0] < 'A' || version[0] > 'Z'
+      || version[1] < '0' || version[1] > '9'
+      || version[2] < '0' || version[2] > '9')
+    sprintf (buffer, "(unknown)");
+  else
+    {
+      unsigned major = 10 * (version[0] - 'A') + (version[1] - '0');
+      unsigned minor = version[2] - '0';
+      sprintf (buffer, "%u.%u (%s)", major, minor,
+              version[3] == '*' ? "release" : "experimental");
+    }
+  return buffer;
+}
+
 /* Check if VERSION of the info block PTR matches libgcov one.
    Return 1 on success, or zero in case of versions mismatch.
    If FILENAME is not NULL, its value used for reporting purposes
@@ -169,12 +190,16 @@ gcov_version (struct gcov_info *ptr, gcov_unsigned_t version,
   if (version != GCOV_VERSION)
     {
       char v[4], e[4];
+      char version_string[128], expected_string[128];
 
       GCOV_UNSIGNED2STRING (v, version);
       GCOV_UNSIGNED2STRING (e, GCOV_VERSION);
 
-      gcov_error ("profiling:%s:Version mismatch - expected %.4s got %.4s\n",
-                  filename? filename : ptr->filename, e, v);
+      gcov_error ("profiling:%s:Version mismatch - expected %s (%.4s) "
+                 "got %s (%.4s)\n",
+                 filename? filename : ptr->filename,
+                 gcov_version_string (expected_string, e), e,
+                 gcov_version_string (version_string, v), v);
       return 0;
     }
   return 1;