All of lore.kernel.org
 help / color / mirror / Atom feed
* undefined symbol in modpost "zero"
@ 2022-12-23 16:38 Ben Dooks
  2022-12-23 16:59 ` Ben Dooks
  0 siblings, 1 reply; 4+ messages in thread
From: Ben Dooks @ 2022-12-23 16:38 UTC (permalink / raw)
  To: linux-riscv, Jisheng Zhang, Emil Renner Berthing <kernel

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.

-- 
Ben Dooks				http://www.codethink.co.uk/
Senior Engineer				Codethink - Providing Genius

https://www.codethink.co.uk/privacy.html

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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-12-27 19:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 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.