[Crash-utility] [PATCH] Fix gcc_version character display

Youling Tang tangyouling at loongson.cn
Mon Apr 26 08:26:20 UTC 2021


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 at 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 at lists.debian.org) (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 at loongson.cn>
>>> ---
>>>    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,
>>>




More information about the Crash-utility mailing list