This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: how to enable thumb-interwork, soft float and little endian in newlib for arm-elf


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]