Paul Mundt wrote: > 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: > > Indeed at home I have gcc from buildroot. Tested just now at office using gcc-4.2.1 from STMicro toolchain and it works fine, either using -O0 or -Os. I'll try to update buildroot at home with gcc 4.2.1 as well and see if it solves. I'll keep you informed.
Cheers, Carmelo > 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 > > _______________________________________________ uClibc mailing list uClibc@uclibc.org http://busybox.net/cgi-bin/mailman/listinfo/uclibc