[Crash-utility] [PATCH] kernel: fix start-up time degradation caused by strings command

Alexander Egorenkov egorenar at linux.ibm.com
Tue Mar 29 05:28:52 UTC 2022


Hi,

lijiang <lijiang at redhat.com> writes:

> On Mon, Mar 28, 2022 at 9:57 PM Alexander Egorenkov <egorenar at linux.ibm.com>
> wrote:
>
>>
>> > Where does the symbol '.rodata' come from ?
>> > I couldn't find it in x86's vmlinux with nm as well.
>> >
>>
>
>  The "nm -a" option may be a good choice.
>
>> On Fedora 34:
>> >
>> > $ nm /usr/lib/debug/lib/modules/5.16.16-100.fc34.x86_64/vmlinux | grep
>> rodata
>> > ffffffff82c1d000 D __end_rodata
>> > ffffffff82e00000 D __end_rodata_aligned
>> > ffffffff82e00000 D __end_rodata_hpage_align
>> > ffffffff81199420 t frob_rodata
>> > ffffffff81c3eec7 T mark_rodata_ro
>> > ffffffff826dd200 D rodata_enabled
>> > ffffffff82e2cec0 d rodata_resource
>> > ffffffff81352690 T rodata_test
>> > ffffffff81c50238 t rodata_test.cold
>> > ffffffff8223d9d0 d rodata_test_data
>> > ffffffff836c2c36 t set_debug_rodata
>> > ffffffff838ff890 d __setup_set_debug_rodata
>> > ffffffff838b4b18 d __setup_str_set_debug_rodata
>> > ffffffff82200000 D __start_rodata
>> >
>> > Regards
>> > Alex
>>
>> Found the reason why all symbols starting with '.' are dropped for s390x
>>
>> /*
>>  *  Accept or reject a symbol from the kernel namelist.
>>  */
>> static int
>> s390x_verify_symbol(const char *name, ulong value, char type)
>> {
>>         int i;
>>
>> ...
>>
>>         /* throw away all symbols containing a '.' */
>>         for(i = 0; i < strlen(name);i++){
>>                 if(name[i] == '.')                    <-------------- !!!
>>                         return FALSE;
>>         }
>>
>>         return TRUE;
>> }
>>
>>
>> But i have no idea why. Anybody familiar with this ?
>>
>
> I guess that it is to filter out some duplicated or unneeded symbols in
> crash-utility, especially for the old kernel. No more changelogs.
>
> Thanks.
> Lianbo
>
>
>> Thanks
>> Regards
>> Alex
>>
>>
> This Message Is From an External Sender 
> This message came from outside your organization. 
> On Mon, Mar 28, 2022 at 9:57 PM Alexander Egorenkov <egorenar at linux.ibm.com> wrote:
>
>  > Where does the symbol '.rodata' come from ?
>  > I couldn't find it in x86's vmlinux with nm as well.
>  >
>
>  
>  The "nm -a" option may be a good choice.
>

Thanks!

>  > On Fedora 34:
>  >
>  > $ nm /usr/lib/debug/lib/modules/5.16.16-100.fc34.x86_64/vmlinux | grep rodata
>  > ffffffff82c1d000 D __end_rodata
>  > ffffffff82e00000 D __end_rodata_aligned
>  > ffffffff82e00000 D __end_rodata_hpage_align
>  > ffffffff81199420 t frob_rodata
>  > ffffffff81c3eec7 T mark_rodata_ro
>  > ffffffff826dd200 D rodata_enabled
>  > ffffffff82e2cec0 d rodata_resource
>  > ffffffff81352690 T rodata_test
>  > ffffffff81c50238 t rodata_test.cold
>  > ffffffff8223d9d0 d rodata_test_data
>  > ffffffff836c2c36 t set_debug_rodata
>  > ffffffff838ff890 d __setup_set_debug_rodata
>  > ffffffff838b4b18 d __setup_str_set_debug_rodata
>  > ffffffff82200000 D __start_rodata
>  >
>  > Regards
>  > Alex
>
>  Found the reason why all symbols starting with '.' are dropped for s390x
>
>  /*
>   *  Accept or reject a symbol from the kernel namelist.
>   */
>  static int
>  s390x_verify_symbol(const char *name, ulong value, char type)
>  {
>          int i;
>
>  ...
>
>          /* throw away all symbols containing a '.' */
>          for(i = 0; i < strlen(name);i++){
>                  if(name[i] == '.')                    <-------------- !!!
>                          return FALSE;
>          }
>
>          return TRUE;
>  }
>
>  But i have no idea why. Anybody familiar with this ?
>
>  
> I guess that it is to filter out some duplicated or unneeded symbols in crash-utility, especially for the old kernel. No more changelogs.
>

Do you think it makes sense to add an exception for '.rodata' symbol
to s390x_verify_symbol() ? Something like:

if (STREQ(name), ".rodata"))
   return TRUE;

I did a quick test and it works on s390x as well.

Thanks
Regards
Alex



More information about the Crash-utility mailing list