Hi,
lijiang <lijiang(a)redhat.com> writes:
On Mon, Mar 28, 2022 at 9:57 PM Alexander Egorenkov
<egorenar(a)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(a)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