Re: [PATCH v1] module/kallsyms: Filter out local mapping symbols during module load
Huacai Chen <[email protected]>
| Newsgroups | org.kernel.vger.linux-modules,dev.linux.lists.loongarch,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAAhV-H5wwuSKZe3k2ZzS2d7bisM+QbVAFGrx72fXXE81-zOq8g@mail.gmail.com> |
Hi, Tiezhu, On Mon, Aug 10, 2026 at 10:07 AM Tiezhu Yang <[email protected]> wrote: > > On 2026/8/8 上午11:37, Tiezhu Yang wrote: > > The compiler toolchains generate internal local labels on certain > > architectures (such as LoongArch) for optimizations and relocations. > > ... > > > Signed-off-by: Tiezhu Yang <[email protected]> > > --- > > Based on the latest modules-next branch of > > https://git.kernel.org/pub/scm/linux/kernel/git/modules/linux.git > > > > kernel/module/kallsyms.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c > > index f23126d804b2..61dd5c014a59 100644 > > --- a/kernel/module/kallsyms.c > > +++ b/kernel/module/kallsyms.c > > @@ -130,6 +130,9 @@ void layout_symtab(struct module *mod, struct load_info *info) > > > > /* Compute total space required for the core symbols' strtab. */ > > for (ndst = i = 0; i < nsrc; i++) { > > + if (is_mapping_symbol(&info->strtab[src[i].st_name])) > > + continue; > > + > > if (i == 0 || is_livepatch_module(mod) || > > is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, > > info->index.pcpu)) { > > @@ -198,6 +201,10 @@ void add_kallsyms(struct module *mod, const struct load_info *info) > > src = kallsyms->symtab; > > for (ndst = i = 0; i < kallsyms->num_symtab; i++) { > > kallsyms->typetab[i] = elf_type(src + i, info); > > + > > + if (is_mapping_symbol(&kallsyms->strtab[src[i].st_name])) > > + continue; > > + > > if (i == 0 || is_livepatch_module(mod) || > > is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, > > info->index.pcpu)) { > > > > Hi module maintainers, > > Regarding the feedback from the AI bot about livepatch breaking [1], > there are two ways to fix it, which style do you prefer? I think the first is better. Huacai > > (1) Using continue > > ``` > diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c > index f23126d804b2..aece7aa49dd4 100644 > --- a/kernel/module/kallsyms.c > +++ b/kernel/module/kallsyms.c > @@ -130,6 +130,10 @@ void layout_symtab(struct module *mod, struct > load_info *info) > > /* Compute total space required for the core symbols' strtab. */ > for (ndst = i = 0; i < nsrc; i++) { > + if (!is_livepatch_module(mod) && > + is_mapping_symbol(&info->strtab[src[i].st_name])) > + continue; > + > if (i == 0 || is_livepatch_module(mod) || > is_core_symbol(src + i, info->sechdrs, > info->hdr->e_shnum, > info->index.pcpu)) { > @@ -198,6 +202,11 @@ void add_kallsyms(struct module *mod, const struct > load_info *info) > src = kallsyms->symtab; > for (ndst = i = 0; i < kallsyms->num_symtab; i++) { > kallsyms->typetab[i] = elf_type(src + i, info); > + > + if (!is_livepatch_module(mod) && > + is_mapping_symbol(&kallsyms->strtab[src[i].st_name])) > + continue; > + > if (i == 0 || is_livepatch_module(mod) || > is_core_symbol(src + i, info->sechdrs, > info->hdr->e_shnum, > info->index.pcpu)) { > ``` > > (2) Using if-statement > ``` > diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c > index f23126d804b2..b2b22b3487a8 100644 > --- a/kernel/module/kallsyms.c > +++ b/kernel/module/kallsyms.c > @@ -130,9 +130,12 @@ void layout_symtab(struct module *mod, struct > load_info *info) > > /* Compute total space required for the core symbols' strtab. */ > for (ndst = i = 0; i < nsrc; i++) { > - if (i == 0 || is_livepatch_module(mod) || > + bool is_mapping = !is_livepatch_module(mod) && > + > is_mapping_symbol(&info->strtab[src[i].st_name]); > + > + if (!is_mapping && (i == 0 || is_livepatch_module(mod) || > is_core_symbol(src + i, info->sechdrs, > info->hdr->e_shnum, > - info->index.pcpu)) { > + info->index.pcpu))) { > strtab_size += > strlen(&info->strtab[src[i].st_name]) + 1; > ndst++; > } > @@ -198,9 +201,13 @@ void add_kallsyms(struct module *mod, const struct > load_info *info) > src = kallsyms->symtab; > for (ndst = i = 0; i < kallsyms->num_symtab; i++) { > kallsyms->typetab[i] = elf_type(src + i, info); > - if (i == 0 || is_livepatch_module(mod) || > + > + bool is_mapping = !is_livepatch_module(mod) && > + > is_mapping_symbol(&kallsyms->strtab[src[i].st_name]); > + > + if (!is_mapping && (i == 0 || is_livepatch_module(mod) || > is_core_symbol(src + i, info->sechdrs, > info->hdr->e_shnum, > - info->index.pcpu)) { > + info->index.pcpu))) { > ssize_t ret; > > mod->core_kallsyms.typetab[ndst] = > ``` > > If you have any more comments, please let me know. > > [1] > https://lore.kernel.org/linux-modules/[email protected]/ > > Thanks, > Tiezhu > >