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

Reply via email to