Re: Toybox make root no longer works as expected
Florian Fuchs <[email protected]> Tue, 14 Jul 2026 12:46:29 +0200
| Newsgroups | gmane.linux.ports.sh.devel |
|---|---|
| Message-ID | <alYThehhPbqgcOn2@lithos> |
On 14 Jul 10:14, John Paul Adrian Glaubitz wrote:
> Hi Florian,
>
> On Tue, 2026-07-14 at 09:47 +0200, Florian Fuchs wrote:
> > > OK, for some reason it works now. Unfortunately, the toolchain doesn't like the current kernel:
> > >
> > > CC net/ipv4/inetpeer.o
> > > during RTL pass: final
> > > In file included from kernel/nstree.c:8:
> > > kernel/nstree.c: In function '__se_sys_listns':
> > > ./include/linux/syscalls.h:261:9: internal compiler error: in change_address_1, at emit-rtl.c:2275
> > > 261 | } \
> > > | ^
> > > ./include/linux/syscalls.h:236:9: note: in expansion of macro '__SYSCALL_DEFINEx'
> > > 236 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
> > > | ^~~~~~~~~~~~~~~~~
> > > ./include/linux/syscalls.h:228:36: note: in expansion of macro 'SYSCALL_DEFINEx'
> > > 228 | #define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
> > > | ^~~~~~~~~~~~~~~
> > > kernel/nstree.c:763:1: note: in expansion of macro 'SYSCALL_DEFINE4'
> > > 763 | SYSCALL_DEFINE4(listns, const struct ns_id_req __user *, req,
> > > | ^~~~~~~~~~~~~~~
> > > Please submit a full bug report,
> > > with preprocessed source if appropriate.
> > > See <https://gcc.gnu.org/bugs/> for instructions.
> > > {standard input}: Assembler messages:
> > > {standard input}: Warning: end of file not at end of a line; newline inserted
> > > {standard input}:1592: Error: missing operand
> > > {standard input}:1592: Error: invalid operands for opcode
> > > {standard input}:976: Error: displacement to undefined symbol .L339 overflows 12-bit field
> > > {standard input}:1014: Error: displacement to undefined symbol .L459 overflows 12-bit field
> > > {standard input}:1028: Error: displacement to undefined symbol .L340 overflows 12-bit field
> > > {standard input}:1040: Error: displacement to undefined symbol .L461 overflows 12-bit field
> > > {standard input}:1060: Error: displacement to undefined symbol .L462 overflows 12-bit field
> > > {standard input}:1082: Error: displacement to undefined symbol .L463 overflows 12-bit field
> > > {standard input}:1100: Error: displacement to undefined symbol .L252 overflows 12-bit field
> > > {standard input}:1201: Error: displacement to undefined symbol .L286 overflows 12-bit field
> > > {standard input}:1211: Error: displacement to undefined symbol .L468 overflows 12-bit field
> > > {standard input}:1221: Error: displacement to undefined symbol .L298 overflows 12-bit field
> > > {standard input}:1234: Error: displacement to undefined symbol .L469 overflows 12-bit field
> > > {standard input}:1256: Error: displacement to undefined symbol .L349 overflows 12-bit field
> > > {standard input}:1341: Error: displacement to undefined symbol .L314 overflows 12-bit field
> > > {standard input}:1488: Error: displacement to undefined symbol .L454 overflows 8-bit field
> > > {standard input}:1498: Error: displacement to undefined symbol .L471 overflows 8-bit field
> > > make[3]: *** [scripts/Makefile.build:289: kernel/nstree.o] Error 1
> > > make[3]: *** Waiting for unfinished jobs....
> > >
> > > Adrian
> >
> > I also crafted a bit with gcc-17, and my first issue was a duplicate
> > symbols (LPCS0) compiling libgcc like in
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89012 I could only work
> > around with explicitly using O1 instead of O2 in INTERNAL_CFLAGS of gcc.
> >
> > And errors with libbacktrace, I worked around by --enable-languages=c
> >
> > I got gcc to not ICE, but it then fails with invalid assembler thats why
> > I became suspicious about the asm in question. turns out, delcaring the
> > adresses as offsetable, seems to "fix" the ICE and compile and work for
> > fdpic, means it is maybe not necessarily only a GCC issue.
> >
> > diff --git a/arch/sh/include/asm/uaccess_32.h b/arch/sh/include/asm/uaccess_32.h
> > index 5d7ddc092afd..cef40414bfb1 100644
> > --- a/arch/sh/include/asm/uaccess_32.h
> > +++ b/arch/sh/include/asm/uaccess_32.h
> > @@ -92,7 +92,7 @@ __asm__ __volatile__( \
> > ".long 1b + 2, 3b\n\t" \
> > ".previous" \
> > :"=&r" (err), "=&r" (x) \
> > - :"m" (__m(addr)), "i" (-EFAULT), "0" (err)); })
> > + :"o" (__m(addr)), "i" (-EFAULT), "0" (err)); })
> > #else
> > #define __get_user_u64(x, addr, err) \
> > ({ \
> > @@ -116,7 +116,7 @@ __asm__ __volatile__( \
> > ".long 1b + 2, 3b\n\t" \
> > ".previous" \
> > :"=&r" (err), "=&r" (x) \
> > - :"m" (__m(addr)), "i" (-EFAULT), "0" (err)); })
> > + :"o" (__m(addr)), "i" (-EFAULT), "0" (err)); })
> > #endif
> >
> > #define __put_user_size(x,ptr,size,retval) \
> > @@ -196,7 +196,7 @@ __asm__ __volatile__( \
> > ".long 1b, 3b\n\t" \
> > ".previous" \
> > : "=r" (retval) \
> > - : "r" (val), "m" (__m(addr)), "i" (-EFAULT), "0" (retval) \
> > + : "r" (val), "o" (__m(addr)), "i" (-EFAULT), "0" (retval) \
> > : "memory"); })
> > #else
> > #define __put_user_u64(val,addr,retval) \
> > @@ -218,7 +218,7 @@ __asm__ __volatile__( \
> > ".long 1b, 3b\n\t" \
> > ".previous" \
> > : "=r" (retval) \
> > - : "r" (val), "m" (__m(addr)), "i" (-EFAULT), "0" (retval) \
> > + : "r" (val), "o" (__m(addr)), "i" (-EFAULT), "0" (retval) \
> > : "memory"); })
> > #endif
> >
>
> Thanks a lot for looking into this, I appreciate the help!
>
> Did you manage to build a J2 toolchain using GCC 17? I have not looked
> into it myself yet due to time constraints, but I would like to switch
> to a newer compiler to build test kernels for my J2.
>
> Adrian
Yes, with the O1 workaround in gcc and the above patch, but I did a
shortcut and built a plain sh2eb/fdpic toolchain, so I didn't rebase the
bigger J2 specific patches, only a few lines fdpic specific. So that I
could build a kernel, busybox/toybox with it. As I just wanted to finally
boot a current linux on the J2 Mimas v2 board.
And the ICE in nstree.c/uaccess was still there with gcc-17, that went
away with the above patch.
For the Mimas v2 I also needed to configure some offsets differntly in
the .config/Makefiles [0], but that may be normal. Ah, and it needed the patch
regarding the built-in DTBs, that don't work currently [1] And at
runtime it needed this patch, to prevent the register clobber [2]
[0] Offsets, specific (I guess) to the mimas v2 board, copied from the
original aboriginal vmlinux image:
ZERO_PAGE_OFFSET "0x0003F000"
ENTRY_OFFSET "0x00001000"
CONFIG_ENTRY_OFFSET "0x00040000"
[1] https://lore.kernel.org/linux-sh/[email protected]/
[2] https://lore.kernel.org/linux-sh/[email protected]/