[PATCH] Always inline system calls
Carmelo AMOROSO
carmelo.amoroso at st.com
Tue Dec 4 07:36:31 UTC 2007
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 at uclibc.org
> http://busybox.net/cgi-bin/mailman/listinfo/uclibc
>
>
More information about the uClibc
mailing list