I've switched to gcc 3.4.6 which seemed to be the only way I could get it to work. I think this may be due to a problem with the ABI. From what I've read, gcc 4.1.1 now uses arm's EABI. I think this allows binaries to be created which will execute on arm CPUs with & without VFP support. Similar functionality to kernel FPU emulation but it's done entirely in user space, I guess using libgcc.

The EABI also defines a new syscall convention, implemented in later kernels which stick the syscall number in r7 (among other changes). I think LinuxDevices did an article about it fairly recently. I guess uclibc might need to be passed additional configure options to tell it to use EABI when linking to libgcc? dunno.

Gumstix's buildroot manages to build uclibc using gcc 4.1.1 when eabi is enabled, so it is possible. I've looked in gumstix's fork of buildroot which contains several patches for uclibc which seem to fix eabi issues. Not sure if any of them are relevant, but they can be found at: http://svn.gumstix.com/gumstix-buildroot/trunk/toolchain/uClibc/.

The 'Help' information for this option claims that it is OK to set HAS_FPU=y as long as you specify -msoft-float.

Code:

HAS_FPU:

If your target CPU does not have a Floating Point Unit (FPU) or a kernel FPU emulator, but you still wish to support floating point functions, then uClibc will need to be compiled with soft floating point support (-msoft-float). If your target CPU does not have an FPU or an FPU emulator within the Linux kernel, then you should answer N.

I've enabled floating point emulation in my kernel, and so what I did, is before the emerge of uClibc, i set CFLAGS="-msoft-float". This had absolutely no effect in the emerge, even though CFLAGS="-msoft-float" appears when i do CFLAGS="-msoft-float" emerge --info. This is not a bug in gcc, but I would say that it's rather a bug in the ebuild file because it is ignoring a critical parameter.

If i set CFLAGS="-msoft-float" directly before an emerge, on the same line, I would expect that CFLAG to actually show up in the compiler. Likewise, if the option was present in make.conf.