On Thu, Jul 7, 2022 at 1:20 PM Christophe Leroy <christophe.le...@csgroup.eu> wrote: > > > > Le 17/08/2021 à 15:02, Jan Stancek a écrit : > > gcov and kasan rely on compiler generated constructor code. > > For modules, gcc-8 with gcov enabled generates .init_array section, > > but on ppc64le it doesn't get executed. find_module_sections() never > > finds .init_array section, because module_frob_arch_sections() renames > > it to _init_array. > > > > Avoid renaming .init_array section, so do_mod_ctors() can use it. > > > > Cc: Michael Ellerman <m...@ellerman.id.au> > > Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> > > Cc: Paul Mackerras <pau...@samba.org> > > Cc: Christophe Leroy <christophe.le...@csgroup.eu> > > Signed-off-by: Jan Stancek <jstan...@redhat.com> > > Does commit d4be60fe66b7 ("powerpc/module_64: use module_init_section > instead of patching names") fixes your issue ?
Yes, it does gcov for me. Thanks > > If not, please rebase and resubmit. > > Thanks > Christophe > > > > --- > > I wasn't able to trace the comment: > > "We don't handle .init for the moment: rename to _init" > > to original patch (it pre-dates .git). I'm not sure if it > > still applies today, so I limited patch to .init_array. This > > fixes gcov for modules for me on ppc64le 5.14.0-rc6. > > > > Renaming issue is also mentioned in kasan patches here: > > > > https://patchwork.ozlabs.org/project/linuxppc-dev/cover/20210319144058.772525-1-dja@axtens > > > > arch/powerpc/kernel/module_64.c | 10 +++++++++- > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > > diff --git a/arch/powerpc/kernel/module_64.c > > b/arch/powerpc/kernel/module_64.c > > index 6baa676e7cb6..c604b13ea6bf 100644 > > --- a/arch/powerpc/kernel/module_64.c > > +++ b/arch/powerpc/kernel/module_64.c > > @@ -299,8 +299,16 @@ int module_frob_arch_sections(Elf64_Ehdr *hdr, > > sechdrs[i].sh_size); > > > > /* We don't handle .init for the moment: rename to _init */ > > - while ((p = strstr(secstrings + sechdrs[i].sh_name, ".init"))) > > + while ((p = strstr(secstrings + sechdrs[i].sh_name, > > ".init"))) { > > +#ifdef CONFIG_CONSTRUCTORS > > + /* find_module_sections() needs .init_array intact */ > > + if (strstr(secstrings + sechdrs[i].sh_name, > > + ".init_array")) { > > + break; > > + } > > +#endif > > p[0] = '_'; > > + } > > > > if (sechdrs[i].sh_type == SHT_SYMTAB) > > dedotify((void *)hdr + sechdrs[i].sh_offset, >