Re: Missing version line in System.map file?

From: Randy Dunlap
Date: Wed Nov 29 2017 - 14:31:47 EST


On 11/29/2017 11:07 AM, Randy Dunlap wrote:
> On 11/28/2017 07:20 PM, Lee Strobel wrote:
>> Hi,
>>
>> I have a question about the Linux kernel, which I have been trying to
>> find an answer to through various forums for some time now, but without
>> success. I'm wondering if anyone on this mailing list might be able to
>> help?
>>
>> I've been trying to build a Linux From Scratch (LFS) system, using
>> SysVinit and sysklogd. However, when I tried to boot up, klogd wasn't
>> accepting the System.map file, printing log messages such as:
>>
>> Oct 9 17:24:17 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg
>> started.
>> Oct 9 17:24:17 <lee_lfs> kernel: Inspecting /boot/System.map
>> Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
>>
>> So, I dug into the source code for klogd a little bit, and it appears
>> the reason the map file wasn't being accepted was because it didn't
>> contain a 'version' line, which klogd was looking for, in the form:
>>
>> [address] [type] Version_XXXXX
>>
>> (where XXXXX is the kernel version # in base 256).
>>
>> So, I've been asking around on various forums. It seems that none of the
>> map files that are being produced by more recent kernel versions include
>> this line and no-one that I've spoken to on the Linux user forums seems
>> to know why this is.
>>
>> Was a change made to the kernel, to remove this 'version' line
>> from the map file? If so, how are the newer init systems verifying that
>> the map file is the same version as the running kernel? Perhaps sysklogd
>> needs to be updated?
>>
>> By the way, I tried adding a 'dummy' version line to my map file and
>> klogd accepted it fine.
>>
>> Hopefully someone out there can assist, as no-one in the Linux user
>> community seems to know what is going on with this.
>>
>> Best regards,
>>
>> Lee Strobel
>> Engineer/Tinkerer/Free Software Supporter ..
>
> Hi,
>
> Having that symbol in the System.map file depends on the kernel config
> symbol CONFIG_KALLSYMS. KALLSYMS must be disabled (unset) for that
> symbol to be generated. I don't know why it's like that.
>
> ffffffff815e50a8 B Version_197216
>
> Ted, do you have any idea about that?
>
> thanks.

ah, git log tells us:

commit 197dcffc8ba0ea943fee86e28e99cd9575799772
Author: Daniel Guilak <guilak@xxxxxxxxxxxxxxxxxx>
Date: Fri Jul 25 01:45:50 2008 -0700

init/version.c: define version_string only if CONFIG_KALLSYMS is not defined

int Version_* is only used with ksymoops, which is only needed (according
to README and Documentation/Changes) if CONFIG_KALLSYMS is NOT defined.
Therefore this patch defines version_string only if CONFIG_KALLSYMS is not
defined.

Signed-off-by: Daniel Guilak <daniel@xxxxxxxxxxxxxxxx>
Cc: Randy Dunlap <randy.dunlap@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>


I would be OK with reverting that commit so that Version_xxxxxx is
always present in System.map.


--
~Randy