Re: Linux 6.2-rc2

From: Nathan Chancellor
Date: Mon Jan 02 2023 - 23:26:18 EST


On Mon, Jan 02, 2023 at 07:57:04PM -0800, Guenter Roeck wrote:
> On Mon, Jan 02, 2023 at 06:13:09PM -0800, Linus Torvalds wrote:
> > On Mon, Jan 2, 2023 at 5:45 PM Guenter Roeck <linux@xxxxxxxxxxxx> wrote:
> > >
> > > ... and reverting commit 99cb0d917ff indeed fixes the problem.
> >
> > Hmm. My gut feel is that this just exposes some bug in binutils.
> >
> May well be, but it would be an architecture specific bug. The problem
> is not seen when building an x86 image with binutils 2.32. Of course it
> might affect other architectures.

It is likely a generic binutils bug, as I have seen it with PowerPC and
s390. I assume it comes down to how architectures have written their
linker scripts. I did some initial investigation yesterday and reported
my findings on Masahiro's patch thread:

https://lore.kernel.org/Y7Jal56f6UBh1abE@dev-arch.thelio-3990X/

I have seen at least three separate threads now with this issue, perhaps
it is just worth reverting the patch now and submitting a fixed version?
2.35.2 is Debian stable's binutils version so this will likely impact a
lot of CIs.

Cheers,
Nathan

> > That said, maybe that commit should not have added its own /DISCARDS/
> > thing, and instead just added that "*(.note.GNU-stack)" to the general
> > /DISCARDS/ thing that is defined by the
> >
> > #define DISCARDS ..
> >
> > a little bit later, so that we only end up with one single DISCARD
> > list. Something like this (broken patch on purpose):
> >
> > --- a/include/asm-generic/vmlinux.lds.h
> > +++ b/include/asm-generic/vmlinux.lds.h
> > @@ -897,5 +897,4 @@
> > */
> > #define NOTES \
> > - /DISCARD/ : { *(.note.GNU-stack) } \
> > .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \
> > BOUNDED_SECTION_BY(.note.*, _notes) \
> > @@ -1016,4 +1015,5 @@
> > #define DISCARDS \
> > /DISCARD/ : { \
> > + *(.note.GNU-stack) \
> > EXIT_DISCARDS \
> > EXIT_CALL \
> >
>
> I don't know if and how it affects arm64 and riscv, but the above fixes
> the problem for sh.
>
> > But maybe that DISCARDS macrop ends up being used too late?
> >
>
> DISCARDS is the very first entry in SECTIONS. NOTES is part of RO_DATA
> and comes much later.
>
> > It really shouldn't matter, but here we are, with a build problem with
> > some random old binutils on an odd platform..
>
> The one we know of. I could try to compile all architectures with
> binutils 2.32, but I don't really want to do that if I can avoid it.
>
> Guenter