Re: [PATCH] Fix gcc_version character display

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Lianbo

On 04/26/2021 03:46 PM, lijiang wrote:
在 2021年04月26日 15:17, Mathias Krause 写道:
Am 25.04.21 um 07:50 schrieb Youling Tang:
When using the "help -k" command in the 5.12 kernel, it was found that the
gcc_version character string was displayed as 0.0.0.
Check the value of the proc_version string to know,
    crash> help -k
    ...
    proc_version: Linux version 5.12.0-rc2kexec+ (root@bogon) (gcc (GCC) 7.3.1
    20180303 (Red  Hat 7.3.1-6), GNU ld version 2.28-13.fc21.loongson.6) #30
    SMP PREEMPT Thu Apr 22 09:04:57 HKT 2021
    ...

Therefore, the "gcc (GCC)" character should be searched to obtain the correct
character string "gcc_version" value.
I don't think that's sufficient to catch current kernels.

Here's another data point from a Debian system:

$ cat /proc/version
Linux version 5.9.0-0.bpo.5-amd64 (debian-kernel@xxxxxxxxxxxxxxxx) (gcc-8 (Debian 8.3.0-6) 8.3.0, GNU ld (GNU Binutils for Debian) 2.31.1) #1 SMP Debian 5.9.15-1~bpo10+1 (2020-12-31)

So the below pattern won't match this one either.

Maybe we should give up on extracting the version and simply use the full string for diagnostical messages? Like extracting everything from "gcc" till the next ","?

If there are several cases just like "(gcc-8 (Debian 8.3.0-6)", "gcc (GCC) 7.3.1" and "gcc version 8.4.1", I would suggest to
define an array for them and handle them in a loop. For example:

static char *gcc_version[] = {
	"gcc version ",
	"gcc (GCC) ",
	"gcc-",
	NULL,
}


for (int i = 0; gcc_version[i], i++) {
     if ((p1 = strstr(kt->proc_version, gcc_version[i])))
	......

}
Thank you for your suggestion, but I have a question.
For a type like "gcc-", how to get its offset?
Like "gcc version ", it can be as follows:
     p1 += strlen("gcc version ");

Thanks,
Youling

Thanks.
Lianbo


Thanks,
Mathias

Signed-off-by: Youling Tang <tangyouling@xxxxxxxxxxx>
---
   kernel.c | 10 +++++++---
   1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/kernel.c b/kernel.c
index 528f6ee..a1872c2 100644
--- a/kernel.c
+++ b/kernel.c
@@ -1103,9 +1103,13 @@ verify_version(void)
       /*
        *  Keeping the gcc version with #define's is getting out of hand.
        */
-    if ((p1 = strstr(kt->proc_version, "gcc version "))) {
+    if ((p1 = strstr(kt->proc_version, "gcc version ")) ||
+         (p1 = strstr(kt->proc_version, "gcc (GCC) "))) {
           BZERO(buf, BUFSIZE);
-        p1 += strlen("gcc version ");
+        if (strstr(kt->proc_version, "gcc version "))
+            p1 += strlen("gcc version ");
+        else
+            p1 += strlen("gcc (GCC) ");
           p2 = buf;
           while (((*p1 >= '0') && (*p1 <= '9')) || (*p1 == '.')) {
               if (*p1 == '.')
@@ -3661,7 +3665,7 @@ module_init(void)
                       modules_found = TRUE;
                       break;
                   }
-            }
+            }
                 if (!modules_found) {
                               error(WARNING,


--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux