From: marxin Date: Fri, 18 Jan 2019 11:30:56 +0000 (+0000) Subject: Describe better version mismatch in libgcov driver. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02638fde1bc103219d2ef077596dfdda2873b56e;p=thirdparty%2Fgcc.git Describe better version mismatch in libgcov driver. 2019-01-18 Martin Liska * libgcov-driver.c (gcov_version_string): New function. (gcov_version): Convert version integer into string. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268069 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index dce8192c79bc..055836fb2b07 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2019-01-18 Martin Liska + + * libgcov-driver.c (gcov_version_string): New function. + (gcov_version): Convert version integer into string. + 2019-01-17 Andrew Stubbs Kwok Cheung Yeung Julian Brown diff --git a/libgcc/libgcov-driver.c b/libgcc/libgcov-driver.c index 44f43e6e9af6..41d28ace9265 100644 --- a/libgcc/libgcov-driver.c +++ b/libgcc/libgcov-driver.c @@ -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;