Re: Linux 6.2-rc2

From: Thorsten Leemhuis
Date: Tue Jan 03 2023 - 04:15:00 EST


On 03.01.23 05:26, Nathan Chancellor wrote:
> 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.

If someone wants to go down that route, it might be wise to also revert
the two patches 99cb0d917ff mentions with Fixes: tags, as otherwise the
regression it was supposed to fix (which at least impacts ARM64 kernel
rpm builds on Fedora -- and thus maybe some CI systems, too) will come back.

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
--
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
If I did something stupid, please tell me, as explained on that page.

>>> 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