View previous topic :: View next topic |
Author |
Message |
Abraxa Apprentice
Joined: 14 Jun 2005 Posts: 174 Location: Germany
|
Posted: Sun Dec 31, 2006 11:32 pm Post subject: uclibc using crossdev fails for ARM |
|
|
I'm trying to compile the toolchain for ARM using crossdev and I can't get uclibc to compile.
If I do a crossdev armeb-softfloat-linux-uclibc it tries to emerge uclibc 0.9.28-r1 and I get this output:
Code: | armeb-softfloat-linux-uclibc-ld -EB -shared --warn-common --warn-once -z combreloc -z defs -z relro -soname=libc.so.0 -o libuClibc-0.9.28.so \
--whole-archive shared_libc.a \
../libc/misc/internals/interp.o --no-whole-archive \
-init __uClibc_init ../lib/ld-uClibc.so.0 /usr/lib/gcc/armeb-softfloat-linux-uclibc/4.1.1/libgcc.a
armeb-softfloat-linux-uclibc-ld: ERROR: /usr/lib/gcc/armeb-softfloat-linux-uclibc/4.1.1/libgcc.a(_udivsi3.o) uses VFP instructions, whereas libuClibc-0.9.28.so does not
armeb-softfloat-linux-uclibc-ld: failed to merge target specific data of file /usr/lib/gcc/armeb-softfloat-linux-uclibc/4.1.1/libgcc.a(_udivsi3.o)
armeb-softfloat-linux-uclibc-ld: ERROR: /usr/lib/gcc/armeb-softfloat-linux-uclibc/4.1.1/libgcc.a(_divsi3.o) uses VFP instructions, whereas libuClibc-0.9.28.so does not
armeb-softfloat-linux-uclibc-ld: failed to merge target specific data of file /usr/lib/gcc/armeb-softfloat-linux-uclibc/4.1.1/libgcc.a(_divsi3.o)
...
make[1]: *** [shared] Error 1
make[1]: Leaving directory `/var/tmp/cross/armeb-softfloat-linux-uclibc/portage/uclibc-0.9.28-r1/work/uClibc-0.9.28/libc'
make: *** [shared] Error 2
!!! ERROR: cross-armeb-softfloat-linux-uclibc/uclibc-0.9.28-r1 failed. |
I also tried setting UCLIBC_CPU to ARM_XSCALE with the same result.
If I enable the SVN source fetching in the ebuild I get the following error, regardless of which CPU I set for UCLIBC_CPU:
Code: | CC librt/timer_settime.os
CC ldso/libdl/libdl.os
AS ldso/ldso/arm/resolve.os
In file included from ./ldso/include/dl-string.h:11,
from ./ldso/include/ldso.h:37,
from ldso/libdl/libdl.c:33:
./ldso/ldso/arm/dl-sysdep.h: In function 'elf_machine_load_address':
./ldso/ldso/arm/dl-sysdep.h:110: warning: nested extern declaration of '__dl_start'
CC libpthread/linuxthreads.old/pthread.os
CC libc/sysdeps/linux/arm/brk.os
CC libc/sysdeps/linux/arm/ioperm.os
CC libc/sysdeps/linux/arm/iopl.os
CC libc/sysdeps/linux/arm/mmap.os
CC libc/sysdeps/linux/arm/sigaction.os
CC libc/sysdeps/linux/arm/__syscall_error.os
CC libc/sysdeps/linux/arm/syscall.os
libc/sysdeps/linux/arm/syscall.c:16: warning: no previous prototype for 'syscall'
libc/sysdeps/linux/arm/syscall.c: In function 'syscall':
libc/sysdeps/linux/arm/syscall.c:28: error: '__NR_syscall' undeclared (first use in this function)
libc/sysdeps/linux/arm/syscall.c:28: error: (Each undeclared identifier is reported only once
libc/sysdeps/linux/arm/syscall.c:28: error: for each function it appears in.)
AS libc/sysdeps/linux/arm/__longjmp.os
make: *** [libc/sysdeps/linux/arm/syscall.os] Error 1
make: *** Waiting for unfinished jobs....
libc/sysdeps/linux/arm/__longjmp.S: Assembler messages:
libc/sysdeps/linux/arm/__longjmp.S:60: Error: selected processor does not support `lfmfd f4,4,[ip]!'
make: *** [libc/sysdeps/linux/arm/__longjmp.os] Error 1
!!! ERROR: cross-armeb-softfloat-linux-uclibc/uclibc-0.9.28-r1 failed. |
Here's the relevant parts of the info log:
Code: | ------------------------------------------------------------------------------------------------------------------------------
* Host Portage ARCH: x86
* Target Portage ARCH: arm
* Target System: armeb-softfloat-linux-uclibc
* Stage: 4 (C/C++ compiler)
* binutils: binutils-[latest]
* gcc: gcc-[latest]
* headers: linux-headers-[latest]
* libc: uclibc-[latest]
* PORTDIR_OVERLAY: /usr/portage/local
* PORT_LOGDIR: /var/log/portage
* PKGDIR: /usr/portage/packages/cross/armeb-softfloat-linux-uclibc
* PORTAGE_TMPDIR: /var/tmp/cross/armeb-softfloat-linux-uclibc
_ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ -
Gentoo Base System version 1.12.6
Portage 2.1.1-r2 (default-linux/x86/2006.1/desktop, gcc-4.1.1, glibc-2.4-r3, 2.6.14-suspend2-r7 i686)
=================================================================
System uname: 2.6.14-suspend2-r7 i686 AMD Athlon(tm) Processor
Last Sync: Thu, 28 Dec 2006 18:00:01 +0000
distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) [disabled]
ccache version 2.3 [disabled]
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.3.7, 2.0.30
dev-lang/python: 2.3.5-r2, 2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache: 2.3
dev-util/confcache: [Not Present]
sys-apps/sandbox: 1.2.17
sys-devel/autoconf: 2.13, 2.60
sys-devel/automake: 1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2
sys-devel/binutils: 2.16.1-r3
sys-devel/gcc-config: 1.3.14
sys-devel/libtool: 1.5.22
virtual/os-headers: 2.6.17-r2
ACCEPT_KEYWORDS="x86"
CBUILD="i686-pc-linux-gnu"
CC="gcc"
CCACHE_DIR="/var/tmp/ccache"
CCACHE_SIZE="1G"
CFLAGS="-O2 -pipe -march=athlon-tbird"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="-O2 -pipe -march=athlon-tbird"
MAKEOPTS="-j2" |
Any help would be greatly appreciated =)
-Soeren |
|
Back to top |
|
|
corvis n00b
Joined: 15 Nov 2005 Posts: 16
|
Posted: Sun Jan 14, 2007 11:07 am Post subject: |
|
|
Hello,
I have the same problem.
Have you fix it or has anybody an idea?
corvis |
|
Back to top |
|
|
Abraxa Apprentice
Joined: 14 Jun 2005 Posts: 174 Location: Germany
|
Posted: Tue Jan 16, 2007 11:07 pm Post subject: |
|
|
Nope, not fixed yet =(
-Soeren |
|
Back to top |
|
|
Hagra n00b
Joined: 24 Jun 2004 Posts: 74
|
Posted: Mon Jan 22, 2007 11:21 pm Post subject: |
|
|
I also have the same problem.
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. |
|
Back to top |
|
|
Hagra n00b
Joined: 24 Jun 2004 Posts: 74
|
Posted: Mon Jan 22, 2007 11:27 pm Post subject: |
|
|
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/.
Hope this helps. |
|
Back to top |
|
|
Hagra n00b
Joined: 24 Jun 2004 Posts: 74
|
|
Back to top |
|
|
cfriedt n00b
Joined: 12 Sep 2003 Posts: 56 Location: Montréal, Québec
|
Posted: Thu May 17, 2007 7:11 am Post subject: |
|
|
Code: | make[4]: Entering directory `/usr/portage/local/tinygentoo/tmpdir/portage/sys-libs/uclibc-0.9.28.3/work/uClibc-0.9.28.3/libc/sysdeps/linux/arm'
arm-softfloat-linux-uclibc-gcc -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -mlittle-endian -mtune=arm9tdmi -march=armv4 -fno-stack-protector -fno-builtin -nostdinc -D_LIBC -I../../../../include -I. -fstrict-aliasing -Os -funit-at-a-time -isystem /usr/lib/gcc/arm-softfloat-linux-uclibc/3.4.4/include -DNDEBUG -fPIC -c __longjmp.S -o __longjmp.o __longjmp.S: Assembler messages:
__longjmp.S:36: Error: selected processor does not support `lfmfd f4,4,[ip]!' |
This error corresponds to the source code located in uClibc/libc/sysdeps/linux/arm/__longjmp.S and if you take a look at that, then you'll see
Code: | #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
lfmfd f4, 4, [ip] ! /* load the floating point regs */
#else
add ip, ip, #48 /* skip the FP registers */
#endif
|
The first condition, __UCLIBC_HAS_FLOATS__, corresponds to
Code: | Target Architecture Features and Options -->
[*] Enable floating point number support
|
or within the .config file UCLIBC_HAS_FLOATS=y .
The second condition corresponds to the event where gcc -msoft-floats is invoked. It is then safe to set HAS_FPU above, as long as -msoft-float is invoked with gcc.
Code: | Target Architecture Features and Options -->
[*] Target CPU has floating point unit (FPU)
|
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. |
|
Back to top |
|
|
cfriedt n00b
Joined: 12 Sep 2003 Posts: 56 Location: Montréal, Québec
|
Posted: Thu May 17, 2007 7:15 am Post subject: |
|
|
The bug number reported in one of the posts above seems to be unrelated according to the error
Code: | ./gen_wctype en_US
setlocale(LC_CTYPE,en_US) failed!
./gen_locale locales.txt@mapping: "@euro" to 'e'
error: missing or illegal UTF-8 setting
make: *** [locale_tables.h] Error 1
make: *** Waiting for unfinished jobs....
gen_collate.c: At top level:
gen_collate.c:3792: warning: 'dump_base_locale' defined but not used
gen_collate.c:3828: warning: 'dump_der_locale' defined but not used
gen_collate.c:850: warning: 'print_colnode' defined but not used
gen_collate.c:2584: warning: 'print_starter_node' defined but not used
gen_collate.c:3248: warning: 'print_starter_all_node' defined but not used
|
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|