]> git.itanic.dy.fi Git - linux-stable/commit
modpost: fix section mismatch message for RELA
authorMasahiro Yamada <masahiroy@kernel.org>
Tue, 31 Oct 2023 17:46:27 +0000 (02:46 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 16 Nov 2023 11:14:44 +0000 (20:14 +0900)
commit1c4a7587d1bbee0fd53b63af60e4244a62775f57
treea006bbadfdf7f508bfc06cd1d8bb30a862d755bb
parentb85ea95d086471afb4ad062012a4d73cd328fa86
modpost: fix section mismatch message for RELA

The section mismatch check prints a bogus symbol name on some
architectures.

[test code]

  #include <linux/init.h>

  int __initdata foo;
  int get_foo(void) { return foo; }

If you compile it with GCC for riscv or loongarch, modpost will show an
incorrect symbol name:

  WARNING: modpost: vmlinux: section mismatch in reference: get_foo+0x8 (section: .text) -> done (section: .init.data)

To get the correct symbol address, the st_value must be added.

This issue has never been noticed since commit 93684d3b8062 ("kbuild:
include symbol names in section mismatch warnings") presumably because
st_value becomes zero on most architectures when the referenced symbol
is looked up. It is not true for riscv or loongarch, at least.

With this fix, modpost will show the correct symbol name:

  WARNING: modpost: vmlinux: section mismatch in reference: get_foo+0x8 (section: .text) -> foo (section: .init.data)

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
scripts/mod/modpost.c