All of lore.kernel.org
 help / color / mirror / Atom feed
From: Conor Dooley <conor@kernel.org>
To: Ben Dooks <ben.dooks@codethink.co.uk>
Cc: linux-riscv <linux-riscv@lists.infradead.org>,
	Jisheng Zhang <jszhang@kernel.org>
Subject: Re: undefined symbol in modpost "zero"
Date: Sat, 24 Dec 2022 15:28:06 +0000	[thread overview]
Message-ID: <Y6cahpBbfBVtboq7@spud> (raw)
In-Reply-To: <a00241eb-fa43-f53b-16b0-a77625aded49@codethink.co.uk>


[-- Attachment #1.1: Type: text/plain, Size: 4919 bytes --]

On Fri, Dec 23, 2022 at 04:59:51PM +0000, Ben Dooks wrote:
> On 23/12/2022 16:38, Ben Dooks wrote:
> > I'm getting the following error from modpost:
> > 
> > ERROR: modpost: "zero" [arch/riscv/kvm/kvm.ko] undefined!
> > ERROR: modpost: "zero" [drivers/gpu/drm/drm.ko] undefined!
> > ERROR: modpost: "zero" [drivers/nvme/host/nvme.ko] undefined!
> > ERROR: modpost: "zero" [drivers/i2c/algos/i2c-algo-bit.ko] undefined!
> > 
> > This seems to be coming from arch/riscv/include/asm/jump_label.h
> > with the arch_static_branch_jump() assembling some code:
> > 
> > >     40  {
> > >     41          asm_volatile_goto(
> > >     42                  "       .option
> > > push                            \n\t"
> > >     43                  "       .option
> > > norelax                         \n\t"
> > >     44                  "       .option
> > > norvc                           \n\t"
> > >     45                  "1:     jal             zero,
> > > %l[label]         \n\t"
> > >     46                  "       .option
> > > pop                             \n\t"
> > >     47                  "       .pushsection    __jump_table,
> > > \"aw\"    \n\t"
> > >     48                  "       .align          " RISCV_LGPTR
> > > "         \n\t"
> > >     49                  "       .long           1b - ., %l[label] -
> > > .   \n\t"
> > >     50                  "       " RISCV_PTR "   %0 -
> > > .                  \n\t"
> > >     51                  "
> > > .popsection                             \n\t"
> > >     52                  :  :  "i"(&((char *)key)[branch]) :  : label);
> > >     53
> > >     54          return false;
> > >     55  label:
> > >     56          return true;
> > >     57  }
> > > 
> > 
> > Changing the jal zero to jal x0 doesn't fix it, it just comes up with
> > "x0" being undefined.
> > 
> > gcc version 12.2.0 (Debian 12.2.0-9)
> > GNU assembler version 2.39.50 (riscv64-linux-gnu) using BFD version (GNU
> > Binutils for Debian) 2.39.50.20221208

Hey Ben, said I'd give it a run yesterday but didnt...

gcc version 12.2.0 2ee5e430018 ("Update ChangeLog and version files for release")
binutils 2.39 74340608801 (24/12/22)

So that's gcc @ the 12.2 tag & binutils at the tip of the 2.39 branch.
Kernel is from today too:
72a85e2b0a1e ("Merge tag 'spi-fix-v6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi")

I did my usual defconfig (which builds kvm as a module) and allmodconfig
but I see nothing odd out of modpost.

Could you share your config perhaps, or point out what I may be
overlooking setup wise?

> > I suspect this is a gas bug where it means to assemble a J instruction
> > to the label without outputting the unused symbol "zero" into the symbol
> > table. Is the right thing to fix gas, or can the kernel be changed?
> > 
> > FYI:
> > 
> > tmp.s:
> >       1          .text
> >       2
> >       3  1:
> >       4          jal zero, 1b
> > 
> > 
> > produces:
> > 
> > 0000000000000000 <.L1^B1>:
> >     0:   0000006f                j       0 <.L1^B1>
> >                          0: R_RISCV_JAL  .L1^B1
> > 
> > and
> > 
> > $ riscv64-linux-gnu-nm -a tmp.o
> > 0000000000000000 b .bss
> > 0000000000000000 d .data
> > 0000000000000000 n .riscv.attributes
> > 0000000000000000 t .text
> >                   U zero
> > 
> > Current fix is to:
> > 
> > 
> > diff --git a/arch/riscv/include/asm/jump_label.h
> > b/arch/riscv/include/asm/jump_label.h
> > index 6d58bbb5da46..a4abbacd0b62 100644
> > --- a/arch/riscv/include/asm/jump_label.h
> > +++ b/arch/riscv/include/asm/jump_label.h
> > @@ -42,7 +42,7 @@ static __always_inline bool
> > arch_static_branch_jump(struct static_key * const ke
> >                  "       .option push                            \n\t"
> >                  "       .option norelax                         \n\t"
> >                  "       .option norvc                           \n\t"
> > -               "1:     jal             zero, %l[label]         \n\t"
> > +               "1:     j               %l[label]               \n\t"
> >                  "       .option pop                             \n\t"
> >                  "       .pushsection    __jump_table, \"aw\"    \n\t"
> >                  "       .align          " RISCV_LGPTR "         \n\t"
> > 
> > 
> > This fixes modpost, not sure if this should be applied or not.
> > 
> 
> I just checked riscv64-linux-gnu-nm vmlinux.o and it has
> 
>                  U zero

I checked the output of nm on my allmodconfig kernel and I do not see
this symbol. Ditto for my regular defconfig that I use.
You mentioned on IRC that you did a rebase on top of Linus' tree, what
is in the extra content on top of that?

> 
> 
> So I guess the linker just ignores this undefined symbol as it is never
> actually used for a relocation.


[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 161 bytes --]

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2022-12-24 17:26 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-23 16:38 undefined symbol in modpost "zero" Ben Dooks
2022-12-23 16:59 ` Ben Dooks
2022-12-24 15:28   ` Conor Dooley [this message]
2022-12-27 19:05   ` Conor Dooley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y6cahpBbfBVtboq7@spud \
    --to=conor@kernel.org \
    --cc=ben.dooks@codethink.co.uk \
    --cc=jszhang@kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.