Message ID | 87iks3wt2t.ffs@tglx |
---|---|
State | New |
Headers | show |
Series | modpost: Add .irqentry.text to OTHER_SECTIONS | expand |
On Tue, Dec 3, 2024 at 6:03 AM Thomas Gleixner <tglx@linutronix.de> wrote: > > On Mon, Dec 02 2024 at 11:02, Masahiro Yamada wrote: > > On Sun, Dec 1, 2024 at 8:17 PM Thomas Gleixner <tglx@linutronix.de> wrote: > >> > >> The compiler can fully inline the actual handler function of an interrupt > >> entry into the .irqentry.text entry point. If such a function contains an > >> access which has an exception table entry, modpost complains about a > >> section mismatch: > >> > >> WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ... > >> > >> The relocation at __ex_table+0x447c references section ".irqentry.text" > >> which is not in the list of authorized sections. > >> > >> Add .irqentry.text to OTHER_SECTIONS to cure the issue. > >> > >> Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org> > > > > I found the context in LKML. > > Closes: https://lore.kernel.org/all/20241128111844.GE10431@google.com/ > > > > However, is this still relevant to the mainline kernel? > > > > In Linux 5.4.y, I agree this because smp_apic_timer_interrupt() > > is annotated as __irq_entry: > > Correct. > > > In this mainline kernel, DEFINE_IDTENTRY_SYSVEC() > > expands to a normal .text function which is explicitly > > annotated 'noinline'. > > It's not annotated noinline, it's annotated 'noinstr', which puts the > code into the .noinstr.text section. That one is indeed covered. The callsite of local_apic_timer_interrupt() is annotated 'noinline' if I correctly understand this line: https://github.com/torvalds/linux/blob/v6.13-rc1/arch/x86/include/asm/idtentry.h#L272 It expands to: static noinline void __sysvec_apic_timer_interrupt(struct pt_regs *regs) { [snip] local_apic_timer_interrupt(); [snip] } > So yes, the fix is only required for pre 5.8 kernels. This never occurs on x86 after commit f0178fc01fe46, but theoretically this may occur for other architectures. Now applied to linux-kbuild. Thanks. > > Thanks, > > tglx
--- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -785,7 +785,7 @@ static void check_section(const char *mo ".ltext", ".ltext.*" #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \ ".fixup", ".entry.text", ".exception.text", \ - ".coldtext", ".softirqentry.text" + ".coldtext", ".softirqentry.text", ".irqentry.text" #define ALL_TEXT_SECTIONS ".init.text", ".exit.text", \ TEXT_SECTIONS, OTHER_TEXT_SECTIONS
The compiler can fully inline the actual handler function of an interrupt entry into the .irqentry.text entry point. If such a function contains an access which has an exception table entry, modpost complains about a section mismatch: WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ... The relocation at __ex_table+0x447c references section ".irqentry.text" which is not in the list of authorized sections. Add .irqentry.text to OTHER_SECTIONS to cure the issue. Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: stable@vger.kernel.org --- scripts/mod/modpost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)