From: Conor Dooley <conor@kernel.org>
To: linux-riscv <linux-riscv@lists.infradead.org>
Cc: linux-riscv <linux-riscv@lists.infradead.org>,
Jisheng Zhang <jszhang@kernel.org>,
Ben Dooks <ben.dooks@codethink.co.uk>
Subject: Re: undefined symbol in modpost "zero"
Date: Tue, 27 Dec 2022 19:05:51 +0000 [thread overview]
Message-ID: <Y6tCD61D70IKimUo@spud> (raw)
In-Reply-To: <a00241eb-fa43-f53b-16b0-a77625aded49@codethink.co.uk>
[-- Attachment #1.1: Type: text/plain, Size: 4469 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
> >
> > 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
>
>
> So I guess the linker just ignores this undefined symbol as it is never
> actually used for a relocation.
For anyone not paying attention to the RISC-V IRC, it is an upstream
binutils issue that does not affect released versions (yet) although it
does affect what is in debian-testing.
The upstream report for the issue is here:
https://sourceware.org/bugzilla/show_bug.cgi?id=29940
and for debian here:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1026979
Thanks,
Conor.
[-- 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
prev parent reply other threads:[~2022-12-27 19:06 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
2022-12-27 19:05 ` Conor Dooley [this message]
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=Y6tCD61D70IKimUo@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.