Re: Question on BIGGEST_ALIGNMENT in GCC on NetBSD/m68k
Jean-Michel Hautbois <[email protected]> Thu, 5 Jun 2025 08:50:53 +0200
| Newsgroups | gmane.linux.ports.m68k,gmane.os.netbsd.ports.m68k,gmane.linux.debian.ports.68k |
|---|---|
| Message-ID | <[email protected]> |
Hi Adrian,
On 05/06/2025 08:39, John Paul Adrian Glaubitz wrote:
> Hi Jean-Michel,
>
> On Thu, 2025-06-05 at 08:24 +0200, Jean-Michel Hautbois wrote:
>> I tried to patch gcc-13 with this BIGGEST_ALIGNMENT set to 64. I am
>> using buildroot+uclibc-ng on a Coldfire (mcf54418).
>
> Thanks a lot for testing! Such contributions are highly appreciated.
>
>> Everything build fine, except the kernel:
>>
>> In function ‘siginfo_build_tests’,
>> inlined from ‘restore_sigcontext’ at arch/m68k/kernel/signal.c:684:2,
>> inlined from ‘do_sigreturn’ at arch/m68k/kernel/signal.c:775:9:
>> ././include/linux/compiler_types.h:542:45: error: call to
>> ‘__compiletime_assert_351’ declared with attribute error: BUILD_BUG_ON
>> failed: offsetof(siginfo_t, si_lower) != 0x12
>> 542 | _compiletime_assert(condition, msg,
>> __compiletime_assert_, __COUNTER__)
>> | ^
>> ././include/linux/compiler_types.h:523:25: note: in definition of macro
>> ‘__compiletime_assert’
>> 523 | prefix ## suffix();
>> \
>> | ^~~~~~
>> ././include/linux/compiler_types.h:542:9: note: in expansion of macro
>> ‘_compiletime_assert’
>> 542 | _compiletime_assert(condition, msg,
>> __compiletime_assert_, __COUNTER__)
>> | ^~~~~~~~~~~~~~~~~~~
>> ./include/linux/build_bug.h:39:37: note: in expansion of macro
>> ‘compiletime_assert’
>> 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond),
>> msg)
>> | ^~~~~~~~~~~~~~~~~~
>> ./include/linux/build_bug.h:50:9: note: in expansion of macro
>> ‘BUILD_BUG_ON_MSG’
>> 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: "
>> #condition)
>> | ^~~~~~~~~~~~~~~~
>> arch/m68k/kernel/signal.c:621:9: note: in expansion of macro ‘BUILD_BUG_ON’
>> 621 | BUILD_BUG_ON(offsetof(siginfo_t, si_lower) != 0x12);
>> | ^~~~~~~~~~~~
>> make[5]: *** [scripts/Makefile.build:207: arch/m68k/kernel/signal.o] Error 1
>> make[4]: *** [scripts/Makefile.build:465: arch/m68k/kernel] Error 2
>> make[4]: *** Waiting for unfinished jobs....
>>
>> This is a 6.14.
>> Any idea about this ?
>
> It looks like this check needs to be patched:
>
> BUILD_BUG_ON(offsetof(siginfo_t, si_lower) != 0x12);
>
> The source code in arch/m68k/kernel/signal.c contains a lot of hard-wired offsets
> which will probably have to be adjusted.
>
> You can try changing 0x12 to 0x14 and see if that fixes it.
I had to change three offsets:
diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c
index e628b859ef21..5b8ef98565c2 100644
--- a/arch/m68k/kernel/signal.c
+++ b/arch/m68k/kernel/signal.c
@@ -618,11 +618,11 @@ static inline void siginfo_build_tests(void)
BUILD_BUG_ON(offsetof(siginfo_t, si_addr_lsb) != 0x10);
/* _sigfault._addr_bnd */
- BUILD_BUG_ON(offsetof(siginfo_t, si_lower) != 0x12);
- BUILD_BUG_ON(offsetof(siginfo_t, si_upper) != 0x16);
+ BUILD_BUG_ON(offsetof(siginfo_t, si_lower) != 0x14);
+ BUILD_BUG_ON(offsetof(siginfo_t, si_upper) != 0x18);
/* _sigfault._addr_pkey */
- BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x12);
+ BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x14);
/* _sigfault._perf */
BUILD_BUG_ON(offsetof(siginfo_t, si_perf_data) != 0x10);
--
2.39.5
The kernel is booting, so, I suppose it is working :-).
Now, I can't send a patch fixing the offsets like that, as it depends on
the BIGGEST_ALIGNMENT value...
Thanks,
JM