On Mon, Dec 03, 2007 at 10:33:39PM +0100, Carmelo Amoroso wrote: > Carmelo Amoroso wrote: > while doing some test for SH4 to measure size increase for 'always inline' > changes, > doscovered suddenly that gcc-4.1.1 (cross sh4) fails with the following error: > > ../ldso/ldso/dl-elf.c: In function '_dl_dprintf': > ../ldso/ldso/dl-elf.c:858: error: unable to find a register to spill in class > 'R0_REGS' > ../ldso/ldso/dl-elf.c:858: error: this is the insn: > (insn 916 917 24 1 (set (reg/f:SI 1 r1 [219]) > (mem/u/c:SI (plus:SI (reg:SI 12 r12) > (reg/f:SI 1 r1 [220])) [0 S4 A32])) 172 {movsi_ie} (nil) > (expr_list:REG_DEAD (reg/f:SI 1 r1 [220]) > (expr_list:REG_EQUIV (symbol_ref:SI ("_dl_pagesize") <var_decl > 0x313a720 _dl_pagesize>) > (nil)))) > > either running with -Os or -O0. > I'll test tomorrow with gcc-4.2.1 to see if it makes difference, > otherwise I suspect we should go back on my proposal in using always inline > only for arch strictly requiring it. > We've noticed this with some versions in buildroot also, so it seems to be a more common issue:
CC ldso/ldso/ldso.oS In file included from ./libpthread/linuxthreads.old/sysdeps/sh/tls.h:23, from ./include/bits/uClibc_errno.h:35, from ./include/errno.h:62, from ./include/bits/syscalls.h:16, from ./include/sys/syscall.h:34, from ./ldso/ldso/sh/dl-syscalls.h:3, from ./ldso/include/dl-syscall.h:12, from ./ldso/include/ldso.h:36, from ldso/ldso/ldso.c:33: ./libpthread/linuxthreads.old/sysdeps/sh/pt-machine.h:36: warning: C99 inline functions are not supported; using GNU89 ./libpthread/linuxthreads.old/sysdeps/sh/pt-machine.h:36: warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute ldso/ldso/dl-elf.c: In function '_dl_dprintf': ldso/ldso/dl-elf.c:803: error: unable to find a register to spill in class 'R0_REGS' ldso/ldso/dl-elf.c:803: error: this is the insn: (insn 884 885 23 3 (set (reg/f:SI 1 r1 [221]) (mem/u/c:SI (plus:SI (reg:SI 12 r12) (reg/f:SI 1 r1 [222])) [0 S4 A32])) 171 {movsi_ie} (nil) (expr_list:REG_DEAD (reg/f:SI 1 r1 [222]) (expr_list:REG_EQUIV (symbol_ref:SI ("_dl_pagesize") <var_decl 0x402d7660 _dl_pagesize>) (nil)))) ldso/ldso/dl-elf.c:803: confused by earlier errors, bailing out make[1]: *** [ldso/ldso/ldso.oS] Error 1 So inlining itself may not really be a problem, but it might be worthwhile hunting down the code that generates the immediate load and seeing if that can be forced in to a memory access instead, so we avoid the R0 encoding dependence. These are all in relation to _dl_pagesize at least. _______________________________________________ uClibc mailing list uClibc@uclibc.org http://busybox.net/cgi-bin/mailman/listinfo/uclibc