[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