how to enable thumb-interwork, soft float and little endian in newlib for arm-elf
Arnaud ZANETTI
arnaud.zanetti@sagem.com
Fri Jan 9 11:27:00 GMT 2004
I edited the gcc/config/arm/t-arm-elf file.
While it does activate the multilib generation process,
it also raises an issue :
GAS and GCC have different default behaviours, which causes
objects to have improper flag set.
I use :
GNU assembler 031031 20031031
arm-elf-gcc (GCC) 3.3.2
For example, running arm-elf-gcc with no option generates
soft floating point code, but as it passes no option
to the assembler so the object is flagged as using Hardware FP
and the link against such an object / library fails.
To overcome this issue, I patched the gcc source to have its
default generation option match those of gas.
Here is the patch that leads to a full working multilib :
diff -urpN gcc-3.3.2/gcc/config/arm/elf.h
gcc-3.3.2.patch/gcc/config/arm/elf.h
--- gcc-3.3.2/gcc/config/arm/elf.h 2002-11-21 22:29:24.000000000 +0100
+++ gcc-3.3.2.patch/gcc/config/arm/elf.h 2003-12-27 11:54:50.000000000
+0100
@@ -111,7 +111,7 @@ Boston, MA 02111-1307, USA. */
#ifndef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS \
- { "marm", "mlittle-endian", "msoft-float", "mapcs-32",
"mno-thumb-interwork", "fno-leading-underscore" }
+ { "marm", "mlittle-endian", "mhard-float", "mapcs-32",
"mno-thumb-interwork", "fno-leading-underscore" }
#endif
diff -urpN gcc-3.3.2/gcc/config/arm/t-arm-elf
gcc-3.3.2.patch/gcc/config/arm/t-arm-elf
--- gcc-3.3.2/gcc/config/arm/t-arm-elf 2002-05-08 17:01:13.000000000
+0200
+++ gcc-3.3.2.patch/gcc/config/arm/t-arm-elf 2003-12-27
11:55:26.000000000 +0100
@@ -25,23 +25,23 @@ MULTILIB_OPTIONS = marm/mthumb
MULTILIB_DIRNAMES = arm thumb
MULTILIB_EXCEPTIONS =
-# MULTILIB_OPTIONS += mlittle-endian/mbig-endian
-# MULTILIB_DIRNAMES += le be
-# MULTILIB_EXCEPTIONS =
-# MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle
-#
-# MULTILIB_OPTIONS += mhard-float/msoft-float
-# MULTILIB_DIRNAMES += fpu soft
-# MULTILIB_EXCEPTIONS += *mthumb/*mhard-float*
-#
+MULTILIB_OPTIONS += mlittle-endian/mbig-endian
+MULTILIB_DIRNAMES += le be
+MULTILIB_EXCEPTIONS =
+MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle
+
+MULTILIB_OPTIONS += mhard-float/msoft-float
+MULTILIB_DIRNAMES += fpu soft
+MULTILIB_EXCEPTIONS += *mthumb/*mhard-float*
+
# MULTILIB_OPTIONS += mapcs-32/mapcs-26
# MULTILIB_DIRNAMES += 32bit 26bit
# MULTILIB_EXCEPTIONS += *mthumb/*mapcs-26*
-#
-# MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork
-# MULTILIB_DIRNAMES += normal interwork
-# MULTILIB_EXCEPTIONS += *mapcs-26/*mthumb-interwork*
-#
+
+MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork
+MULTILIB_DIRNAMES += normal interwork
+MULTILIB_EXCEPTIONS += *mapcs-26/*mthumb-interwork*
+
# MULTILIB_OPTIONS += fno-leading-underscore/fleading-underscore
# MULTILIB_DIRNAMES += elf under
#
A more elegant way would be to have gcc pass the options to gas
even when they aren't specified on the command line. If I use the
-msoft-float switch on the command line, the -mno-fpu swicth is
passed to the assembler and everything just works fine. Why not
passing that switch to gas even if not specified on the command line ?
-----
Arnaud Zanetti.
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
More information about the crossgcc
mailing list