[uClibc]BigEndian + Soft-Float Cross-Toolchain for Xscale

Kyle_Broflovski at gmx.de Kyle_Broflovski at gmx.de
Tue May 20 13:37:29 UTC 2003


Hi!

I try to build this toolchain with the given autobuild makefile
(uclibc-0.9.19 with gcc-3.2.2) from uclibc.org. 

When i only try to build a BigEndian Toolchain, it goes well. But when i
also change things to build for soft-float, i get the following errors when the
Makefile try to build uclibc-0.9.19:

/usr/uClibc/toolchain/bin/arm-uclibc-ar r ../libpthread.a attr.o cancel.o
condvar.o errno.o events.o join.o lockfile.o manager.o mutex.o oldsemaphore.o
pt-machine.o ptfork.o pthread.o ptlongjmp.o rwlock.o semaphore.o signals.o
specific.o spinlock.o wrapsyscall.o
make[3]: Leaving directory
`/usr/src/toolchain-0.9.19/gcc-3.2.2/build/uClibc/libpthread/linuxthreads'
make[2]: Leaving directory
`/usr/src/toolchain-0.9.19/gcc-3.2.2/build/uClibc/libpthread'
make[2]: Entering directory
`/usr/src/toolchain-0.9.19/gcc-3.2.2/build/uClibc/libc'
/usr/uClibc/toolchain/bin/arm-uclibc-ar rv tmp/libgcc-need.a
Finding missing symbols in libc.a ...
    partial linking...
/usr/uClibc/toolchain/bin/arm-uclibc-ld: ERROR: ../../lib/crt0.o uses FPA
instructions, whereas libc.ldr uses VFP instructions
/usr/uClibc/toolchain/bin/arm-uclibc-ld: ERROR: ../../lib/crt0.o uses
software FP, whereas libc.ldr uses hardware FP
No more archived files: failed to merge target specific data of file
../../lib/crt0.o
/usr/uClibc/toolchain/bin/arm-uclibc-ld: ERROR: ../libc.a(__assert.o) uses
FPA instructions, whereas libc.ldr uses VFP instructions
/usr/uClibc/toolchain/bin/arm-uclibc-ld: ERROR: ../libc.a(__assert.o) uses
software FP, whereas libc.ldr uses hardware FP
No more archived files: failed to merge target specific data of file
../libc.a(__assert.o)
/usr/uClibc/toolchain/bin/arm-uclibc ....
...
----------- the same errors for all parts in libc.a ----------
...
No more archived files: failed to merge target specific data of file
../libc.a(getsubopt.o)
/usr/uClibc/toolchain/bin/arm-uclibc-ld: ERROR: ../libc.a(daemon.o) uses FPA
instructions, whereas libc.ldr uses VFP instructions
/usr/uClibc/toolchain/bin/arm-uclibc-ld: ERROR: ../libc.a(daemon.o) uses
software FP, whereas libc.ldr uses hardware FP
No more archived files: failed to merge target specific data of file
../libc.a(daemon.o)
Symbol /usr/uClibc/toolchain/bin/arm-uclibc-nm: needed by libc.a but not
found in libgcc.a
Symbol libc.ldr: needed by libc.a but not found in libgcc.a
Symbol No needed by libc.a but not found in libgcc.a
Symbol such needed by libc.a but not found in libgcc.a
Symbol file needed by libc.a but not found in libgcc.a
Symbol or needed by libc.a but not found in libgcc.a
Symbol directory needed by libc.a but not found in libgcc.a
make[2]: *** [tmp/libgcc-need.a] Error 1
make[2]: Leaving directory
`/usr/src/toolchain-0.9.19/gcc-3.2.2/build/uClibc/libc'
make[1]: *** [shared] Error 2
make[1]: Leaving directory
`/usr/src/toolchain-0.9.19/gcc-3.2.2/build/uClibc'
make: *** [/usr/src/toolchain-0.9.19/gcc-3.2.2/build/uClibc/lib/libc.a]
Error 2

==========================================================================
==========================================================================


I've edited the following things:

I've added two patch-Files to the Source-Directory of the Toolchain which
brings  binutils and gcc to build bigendian as default:

diff -uNr binutils-2.13.2.1.orig/ld/emulparams/armcoff.sh
binutils-2.13.2.1/ld/emulparams/armcoff.sh
--- binutils-2.13.2.1.orig/ld/emulparams/armcoff.sh	Mon May  3 09:29:07 1999
+++ binutils-2.13.2.1/ld/emulparams/armcoff.sh	Tue May  6 15:55:19 2003
@@ -1,6 +1,6 @@
 ARCH=arm
 SCRIPT_NAME=armcoff
-OUTPUT_FORMAT="coff-arm-little"
+OUTPUT_FORMAT="coff-arm-big"
 LITTLE_OUTPUT_FORMAT="coff-arm-little"
 BIG_OUTPUT_FORMAT="coff-arm-big"
 TEMPLATE_NAME=armcoff
diff -uNr binutils-2.13.2.1.orig/ld/emulparams/armelf.sh
binutils-2.13.2.1/ld/emulparams/armelf.sh
--- binutils-2.13.2.1.orig/ld/emulparams/armelf.sh	Thu Nov 22 10:08:04 2001
+++ binutils-2.13.2.1/ld/emulparams/armelf.sh	Tue May  6 15:55:19 2003
@@ -1,6 +1,6 @@
 MACHINE=
 SCRIPT_NAME=elf
-OUTPUT_FORMAT="elf32-littlearm"
+OUTPUT_FORMAT="elf32-bigarm"
 BIG_OUTPUT_FORMAT="elf32-bigarm"
 LITTLE_OUTPUT_FORMAT="elf32-littlearm"
 TEXT_START_ADDR=0x8000
diff -uNr binutils-2.13.2.1.orig/ld/emulparams/armelf_linux.sh
binutils-2.13.2.1/ld/emulparams/armelf_linux.sh
--- binutils-2.13.2.1.orig/ld/emulparams/armelf_linux.sh	Sun Feb  4 15:01:35
2001
+++ binutils-2.13.2.1/ld/emulparams/armelf_linux.sh	Tue May  6 15:56:09 2003
@@ -1,6 +1,6 @@
 ARCH=arm
 SCRIPT_NAME=elf
-OUTPUT_FORMAT="elf32-littlearm"
+OUTPUT_FORMAT="elf32-bigarm"
 BIG_OUTPUT_FORMAT="elf32-bigarm"
 LITTLE_OUTPUT_FORMAT="elf32-littlearm"
 MAXPAGESIZE=0x8000

============================================================================
============================================================================


diff -uNr gcc-3.2.2.orig/gcc/config/arm/coff.h
gcc-3.2.2/gcc/config/arm/coff.h
--- gcc-3.2.2.orig/gcc/config/arm/coff.h	Mon Mar 18 14:45:33 2002
+++ gcc-3.2.2/gcc/config/arm/coff.h	Wed Apr 23 15:33:53 2003
@@ -32,11 +32,11 @@
 #define TARGET_VERSION fputs (" (ARM/coff)", stderr)

 #undef  TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_APCS_FRAME)
+#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_APCS_FRAME | ARM_FLAG_BIG_END)

 #ifndef MULTILIB_DEFAULTS
 #define MULTILIB_DEFAULTS \
-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32",
"mno-thumb-interwork" }
+  { "marm", "mbig-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork"
}
 #endif

 /* This is COFF, but prefer stabs.  */
diff -uNr gcc-3.2.2.orig/gcc/config/arm/elf.h gcc-3.2.2/gcc/config/arm/elf.h
--- gcc-3.2.2.orig/gcc/config/arm/elf.h	Mon Mar 18 14:45:32 2002
+++ gcc-3.2.2/gcc/config/arm/elf.h	Wed Apr 23 15:29:26 2003
@@ -45,6 +45,7 @@

 #ifndef ASM_SPEC
 #define ASM_SPEC "\
+%{mlittle-endian:-EL} \
 %{mbig-endian:-EB} \
 %{mcpu=*:-m%*} \
 %{march=*:-m%*} \
@@ -108,7 +109,7 @@
 #define JUMP_TABLES_IN_TEXT_SECTION (TARGET_ARM)

 #ifndef LINK_SPEC
-#define LINK_SPEC "%{mbig-endian:-EB} -X"
+#define LINK_SPEC "%{mlittle-endian:-EL} %{mbig-endian:-EB} -X"
 #endif

 /* Run-time Target Specification.  */
@@ -117,12 +118,12 @@
 #endif

 #ifndef TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_APCS_FRAME)
+#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_APCS_FRAME | ARM_FlAG_BIG_END)
 #endif

 #ifndef MULTILIB_DEFAULTS
 #define MULTILIB_DEFAULTS \
-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32",
"mno-thumb-interwork", "fno-leading-underscore" }
+  { "marm", "mbig-endian", "msoft-float", "mapcs-32",
"mno-thumb-interwork", "fno-leading-underscore" }
 #endif

 
diff -uNr gcc-3.2.2.orig/gcc/config/arm/linux-elf.h
gcc-3.2.2/gcc/config/arm/linux-elf.h
--- gcc-3.2.2.orig/gcc/config/arm/linux-elf.h	Wed Apr 23 15:25:56 2003
+++ gcc-3.2.2/gcc/config/arm/linux-elf.h	Wed Apr 23 15:31:50 2003
@@ -32,13 +32,13 @@

 /* Default is to use APCS-32 mode.  */
 #undef  TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
+#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_MMU_TRAPS | ARM_FLAG_BIG_END)

 #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
 
 #undef  MULTILIB_DEFAULTS
 #define MULTILIB_DEFAULTS \
-	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32",
"mno-thumb-interwork" }
+	{ "marm", "mbig-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork"
}
 
 #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"

@@ -86,6 +86,7 @@
    %{rdynamic:-export-dynamic} \
    %{!dynamic-linker: -dynamic-linker /lib/ld-uClibc.so.0} \
    -X \
+   %{mlittle-endian:-EL} \
    %{mbig-endian:-EB}" \
    SUBTARGET_EXTRA_LINK_SPEC

diff -uNr gcc-3.2.2.orig/gcc/config/arm/unknown-elf.h
gcc-3.2.2/gcc/config/arm/unknown-elf.h
--- gcc-3.2.2.orig/gcc/config/arm/unknown-elf.h	Sat Dec 15 17:46:57 2001
+++ gcc-3.2.2/gcc/config/arm/unknown-elf.h	Wed Apr 23 15:32:44 2003
@@ -29,7 +29,7 @@

 /* Default to using APCS-32 and software floating point.  */
 #ifndef TARGET_DEFAULT
-#define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_APCS_FRAME)
+#define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 |
ARM_FLAG_APCS_FRAME | ARM_FLAG_BIG_END)
 #endif
 
 /* Now we define the strings used to build the spec file.  */

====================================================================
====================================================================


My uclibc.config looks like this:

#
# Automatically generated make config: don't edit
#

#
# Target Architecture Features and Options
#
HAVE_ELF=y
# CONFIG_GENERIC_ARM is not set
# CONFIG_ARM7TDMI is not set
# CONFIG_STRONGARM is not set
CONFIG_XSCALE=y
UCLIBC_HAS_MMU=y
UCLIBC_HAS_FLOATS=y
# HAS_FPU is not set
DO_C99_MATH=y
WARNINGS="-Wall"
KERNEL_SOURCE="/usr/src/linux"
C_SYMBOL_PREFIX=""

#
# General Library Settings
#
DOPIC=y
HAVE_SHARED=y
ADD_LIBGCC_FUNCTIONS=y
BUILD_UCLIBC_LDSO=y
LDSO_LDD_SUPPORT=y
UCLIBC_CTOR_DTOR=y
UCLIBC_PROFILING=y
UCLIBC_HAS_THREADS=y
# PTHREADS_DEBUG_SUPPORT is not set
UCLIBC_HAS_LFS=y
# MALLOC is not set
MALLOC_930716=y
UCLIBC_DYNAMIC_ATEXIT=y
HAS_SHADOW=y
UCLIBC_HAS_REGEX=y
UNIX98PTY_ONLY=y
ASSUME_DEVPTS=y

#
# Networking Support
#
# UCLIBC_HAS_IPV6 is not set
UCLIBC_HAS_RPC=y
UCLIBC_HAS_FULL_RPC=y

#
# String and Stdio Support
#
UCLIBC_HAS_WCHAR=y
# UCLIBC_HAS_LOCALE is not set
# USE_OLD_VFPRINTF is not set

#
# Library Installation Options
#
SHARED_LIB_LOADER_PATH="/lib"
DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc"
SYSTEM_DEVEL_PREFIX="$(DEVEL_PREFIX)"
DEVEL_TOOL_PREFIX="$(DEVEL_PREFIX)/usr"

#
# uClibc hacking options
#
# DODEBUG is not set
# DOASSERTS is not set
# SUPPORT_LD_DEBUG is not set
# SUPPORT_LD_DEBUG_EARLY is not set


=======================================================================
=======================================================================
=======================================================================

And these has been changed in the Makefile of the Toolchain:



--- Makefile.orig	Tue May 20 15:32:43 2003
+++ Makefile	Fri May 16 11:29:33 2003
@@ -24,17 +24,18 @@
 #############################################################


-# Where do you want your toolchain to be installed?
+# Where do you want your toolchain to be installed?
 #TARGET_PATH=/usr/local/uclibc
 #TARGET_PATH=/opt/toolchain
-TARGET_PATH=$(BASEDIR)/toolchain
+#TARGET_PATH=$(BASEDIR)/toolchain
+TARGET_PATH=/usr/uClibc/toolchain

 # Native C compiler for the build system
 HOSTCC:=gcc

 # Pick your target CPU...
-ARCH:=i386
-#ARCH:=arm
+#ARCH:=i386
+ARCH:=arm
 #ARCH:=mipsel
 #ARCH:=powerpc
 #ARCH:=whatever
@@ -57,12 +58,12 @@
 WGET:=wget --passive-ftp
 
 # Optimize toolchain for which type of CPU?
-OPTIMIZE_FOR_CPU=$(ARCH)
+OPTIMIZE_FOR_CPU=armv5b
 #OPTIMIZE_FOR_CPU=i686
 #OPTIMIZE_FOR_CPU=whatever

 # Any additional gcc options you may want to include....
-EXTRA_GCC_CONFIG_OPTIONS=
+EXTRA_GCC_CONFIG_OPTIONS=--nfp --with-cpu=xscale  --without-fp
--with-softfloat-support=internal
 #############################################################
 #
 # What shall we build today?
@@ -251,13 +252,15 @@
 		--infodir=$(STAGING_DIR)/info \
 		--enable-targets=$(GNU_TARGET_NAME) \
 		$(MULTILIB) \
+		--with-cpu=xscale \
+		--nfp \
 		--program-prefix=$(ARCH)-uclibc-);
 	touch $(BINUTILS_DIR1)/.configured
 
 $(BINUTILS_DIR1)/binutils/objdump: $(BINUTILS_DIR1)/.configured
 	$(MAKE) -C $(BINUTILS_DIR1);
 
-$(STAGING_DIR)/$(GNU_TARGET_NAME)/bin/ld: $(BINUTILS_DIR1)/binutils/objdump
+$(STAGING_DIR)/$(GNU_TARGET_NAME)/bin/ld: $(BINUTILS_DIR1)/binutils/objdump
 	$(MAKE) -C $(BINUTILS_DIR1) install
 	rm -rf $(STAGING_DIR)/info $(STAGING_DIR)/man $(STAGING_DIR)/share/doc \
 		$(STAGING_DIR)/share/locale
@@ -396,6 +399,8 @@

 $(UCLIBC_DIR)/.configured: $(UCLIBC_DIR)/.unpacked $(LINUX_DIR)/.configured
 	perl -i -p -e 's,^CROSS=.*,TARGET_ARCH=$(ARCH)\nCROSS=$(TARGET_CROSS),g' \
+		$(UCLIBC_DIR)/Rules.mak
+	perl -i -p -e 's,\"-march=xscale\",\"-mcpu=xscale -mtune=xscale\",g' \
 		$(UCLIBC_DIR)/Rules.mak
 	cp $(SOURCE_DIR)/uClibc.config $(UCLIBC_DIR)/.config
 	perl -i -p -e 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE=\"$(LINUX_DIR)\",g' \

==================================================================
==================================================================

So maybe someone can help me.

Thanks!


-- 
+++ GMX - Mail, Messaging & more  http://www.gmx.net +++
Bitte lächeln! Fotogalerie online mit GMX ohne eigene Homepage!



More information about the uClibc mailing list