linux-kbuild.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@kernel.org>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	Nathan Chancellor <nathan@kernel.org>,
	Nicolas Schier <nicolas@fjasle.eu>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Fangrui Song <maskray@google.com>
Subject: Re: [PATCH v6 02/20] modpost: fix section mismatch message for R_ARM_ABS32
Date: Tue, 23 May 2023 09:13:07 +0200	[thread overview]
Message-ID: <CAMj1kXGuJwDBQakz8aV5TR0Y=KPDMjNcJ0wf=YLrsxB=m35_Kg@mail.gmail.com> (raw)
In-Reply-To: <CAK7LNASFLnB9svCf6QvVPSMyXhHRzv9teAmZqXkTw629=_xo=A@mail.gmail.com>

On Tue, 23 May 2023 at 07:08, Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> On Tue, May 23, 2023 at 6:36 AM Ard Biesheuvel <ardb@kernel.org> wrote:
> >
> > On Mon, 22 May 2023 at 19:56, Nick Desaulniers <ndesaulniers@google.com> wrote:
> > >
> > > + linux-arm-kernel and some folks who might know another idea.
> > >
> > > On Sun, May 21, 2023 at 9:05 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
> > > >
> > > > addend_arm_rel() processes R_ARM_ABS32 in a wrong way.
> > > >
> > > > Here, simple test code.
> > > >
> > > >   [test code 1]
> > > >
> > > >     #include <linux/init.h>
> > > >
> > > >     int __initdata foo;
> > > >     int get_foo(int x) { return foo; }
> > > >
> > > > If you compile it with ARM versatile_defconfig, modpost will show the
> > > > symbol name, (unknown).
> > > >
> > > >   WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> (unknown) (section: .init.data)
> > > >
> > > > If you compile it for other architectures, modpost will show the correct
> > > > symbol name.
> > > >
> > > >   WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data)
> > > >
> > > > For R_ARM_ABS32, addend_arm_rel() sets r->r_addend to a wrong value.
> > > >
> > > > I just mimicked the code in arch/arm/kernel/module.c.
> > > >
> > > > However, there is more difficulty for ARM.
> > > >
> > > > Here, test code.
> > > >
> > > >   [test code 2]
> > > >
> > > >     #include <linux/init.h>
> > > >
> > > >     int __initdata foo;
> > > >     int get_foo(int x) { return foo; }
> > > >
> > > >     int __initdata bar;
> > > >     int get_bar(int x) { return bar; }
> > > >
> > > > With this commit applied, modpost will show the following messages
> > > > for ARM versatile_defconfig:
> > > >
> > > >   WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data)
> > > >   WARNING: modpost: vmlinux.o: section mismatch in reference: get_bar (section: .text) -> foo (section: .init.data)
> > > >
> > > > The reference from 'get_bar' to 'foo' seems wrong.
> > > >
> > > > I have no solution for this because it is true in assembly level.
> > > >
> > > > In the following output, relocation at 0x1c is no longer associated
> > > > with 'bar'. The two relocation entries point to the same symbol, and
> > > > the offset to 'bar' is encoded in the instruction 'r0, [r3, #4]'.
> > > >
> >
> > These are section relative relocations - this is unusual but not
> > incorrect. Normally, you only see this if the symbols in question have
> > static linkage.
>
>
> I noticed this usually happens in reference to 'static',
> but on ARM, it happens even without 'static'.
> See the [test code 1].
>
>
> > It does mean that the symbol is not preemptible, which is what makes
> > this somewhat surprising.
> >
> > Generally, you cannot resolve a relocation to a symbol without taking
> > the addend into account, so looking up the address of .init.data in
> > the symbol table is not quite the right approach here. If anything,
> > the symbol should be reported as [.init.data+0x4] in the second case.
>
>
> In the old days, section mismatch warnings showed
> only the referenced section name.
>
> Since [1], modpost started to show the referenced symbol name too.
> Modpost did it in the past 17 years.
> It sometimes shows a wrong name, but works in most architectures.
> Unfortunately, I noticed ARM was an unfortunate case.
>
> Do you suggest removing it entirely?
>

No, not at all. But resolving the symbol should take the addend into
account, and this is essentially what you are doing in your patch.

The point is really that the relocation in question does not refer to
the symbol - it refers to a section+offset that we /think/ corresponds
with a certain symbol. But for example, if the symbol is weak and
another definition exists, the section based relocation will refer to
one version, and a relocation that references the symbol name will
refer to the other version.


>
> If (elf->symtab_start + ELF_R_SYM(r.r_info)) has a sensible
> symbol name, print it. Otherwise, print only the section name.
> Is this what you mean?
>
> That means, we will lose the symbol name info of 'static'
> (and even global symbols on ARM)
>
>
> That is what I wrote in the commit description.
>
> "I am keeping the current logic because it is useful in many architectures,
> but the symbol name is not always correct depending on the optimization
> of the relocation. I left some comments in find_tosym()."
>

Fair enough.

  reply	other threads:[~2023-05-23  7:13 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-21 16:04 [PATCH v6 00/20] Unify <linux/export.h> and <asm/export.h>, remove EXPORT_DATA_SYMBOL(), faster TRIM_UNUSED_KSYMS Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 01/20] Revert "modpost: skip ELF local symbols during section mismatch check" Masahiro Yamada
2023-05-22 17:42   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 02/20] modpost: fix section mismatch message for R_ARM_ABS32 Masahiro Yamada
2023-05-22 17:56   ` Nick Desaulniers
2023-05-22 21:35     ` Ard Biesheuvel
2023-05-23  5:07       ` Masahiro Yamada
2023-05-23  7:13         ` Ard Biesheuvel [this message]
2023-05-21 16:04 ` [PATCH v6 03/20] modpost: detect section mismatch for R_ARM_MOVW_ABS_NC and R_ARM_MOVT_ABS Masahiro Yamada
2023-05-22 18:03   ` Nick Desaulniers
2023-05-22 21:50     ` Ard Biesheuvel
2023-05-23 11:58       ` Masahiro Yamada
2023-05-23 12:20         ` Ard Biesheuvel
2023-05-24  0:02           ` Masahiro Yamada
2023-05-24  0:04     ` Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 04/20] modpost: remove unused argument from secref_whitelist() Masahiro Yamada
2023-05-22 18:10   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 05/20] modpost: refactor find_fromsym() and find_tosym() Masahiro Yamada
2023-05-22 18:18   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 06/20] modpost: unify 'sym' and 'to' in default_mismatch_handler() Masahiro Yamada
2023-05-22 18:23   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 07/20] modpost: replace r->r_offset, r->r_addend with faddr, taddr Masahiro Yamada
2023-05-22 18:31   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 08/20] modpost: remove is_shndx_special() check from section_rel(a) Masahiro Yamada
2023-05-25 17:20   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 09/20] modpost: pass struct module pointer to check_section_mismatch() Masahiro Yamada
2023-05-25 17:23   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 10/20] kbuild: generate KSYMTAB entries by modpost Masahiro Yamada
2023-05-25 17:50   ` Nick Desaulniers
2023-06-02 13:51     ` Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 11/20] ia64,export.h: replace EXPORT_DATA_SYMBOL* with EXPORT_SYMBOL* Masahiro Yamada
2023-05-25 17:52   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 12/20] modpost: check static EXPORT_SYMBOL* by modpost again Masahiro Yamada
2023-05-25 18:18   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 13/20] modpost: squash sym_update_namespace() into sym_add_exported() Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 14/20] modpost: use null string instead of NULL pointer for default namespace Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 15/20] kbuild: implement CONFIG_TRIM_UNUSED_KSYMS without recursion Masahiro Yamada
2023-05-25 18:14   ` Nick Desaulniers
2023-05-28  7:40     ` Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 16/20] modpost: merge fromsec=DATA_SECTIONS entries in sectioncheck table Masahiro Yamada
2023-05-25 18:30   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 17/20] modpost: merge bad_tosec=ALL_EXIT_SECTIONS " Masahiro Yamada
2023-05-25 18:36   ` Nick Desaulniers
2023-05-28 16:43     ` Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 18/20] modpost: remove *_sections[] arrays Masahiro Yamada
2023-05-21 16:04 ` [PATCH v6 19/20] modpost: merge two similar section mismatch warnings Masahiro Yamada
2023-05-25 18:20   ` Nick Desaulniers
2023-05-21 16:04 ` [PATCH v6 20/20] modpost: show offset from symbol for " Masahiro Yamada
2023-05-25 18:26   ` Nick Desaulniers
2023-05-28  7:29     ` Masahiro Yamada
2023-05-22  1:47 ` [PATCH v6 00/20] Unify <linux/export.h> and <asm/export.h>, remove EXPORT_DATA_SYMBOL(), faster TRIM_UNUSED_KSYMS Masahiro Yamada

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='CAMj1kXGuJwDBQakz8aV5TR0Y=KPDMjNcJ0wf=YLrsxB=m35_Kg@mail.gmail.com' \
    --to=ardb@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=maskray@google.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=nicolas@fjasle.eu \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).