public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* Problems with Cortex, floating point and multilib
@ 2008-10-03 10:26 Øyvind Harboe
  0 siblings, 0 replies; only message in thread
From: Øyvind Harboe @ 2008-10-03 10:26 UTC (permalink / raw)
  To: gcc-help

[-- Attachment #1: Type: text/plain, Size: 1249 bytes --]

I've built a toolchain w/the multilib as in the attached t-arm-elf.

http://www.zylin.com/gccbinary.html

However, multilib and Cortex has some hickups w.r.t. floating point format,
which requires floating point format to be specified on the
command line.

/* Test app to check that multilib works */
int main(int argc, char **argv)
{
}

Invoke: arm-elf-gcc -mfpu=vfp -mcpu=cortex-m3 -mthumb test.c

And you get:

/tmp/cccL5n1B.o uses FPA instructions, whereas a.out does not

The solution is to add -mfpu=vfp to the command line:

arm-elf-gcc -mfpu=vfp -mcpu=cortex-m3 -mthumb test.c

Here is what I believe is going on:

There are two different types of floating point VFP and FPA. The key
point is that they are not compatible.

Does -march=armv7 imply  VFP, whereas mcpu=cortex-m3 does not?

Binutils produces an error message that is misleading. The real problem
is that the types of floating point are being mixed.

Is this behaviour intentional?

Should I add VFP & FPA to t-arm-elf as multilib permutations?


-- 
Øyvind Harboe
http://www.zylin.com/zy1000.html
ARM7 ARM9 XScale Cortex
JTAG debugger and flash programmer

Free eCos workshop in Oslo October 21!
http://www.zylin.com/workshop.html

[-- Attachment #2: t-arm-elf --]
[-- Type: application/octet-stream, Size: 3596 bytes --]

LIB1ASMSRC = arm/lib1funcs.asm
LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
	_call_via_rX _interwork_call_via_rX \
	_lshrdi3 _ashrdi3 _ashldi3 \
	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
	_fixsfsi _fixunssfsi _floatdidf _floatdisf _floatundidf _floatundisf

MULTILIB_OPTIONS     = marm/mthumb
MULTILIB_DIRNAMES    = arm thumb
MULTILIB_EXCEPTIONS  = 
MULTILIB_MATCHES     =

MULTILIB_OPTIONS      += march=armv7
MULTILIB_DIRNAMES     += thumb2
MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
MULTILIB_MATCHES      += march?armv7=march?armv7-a
MULTILIB_MATCHES      += march?armv7=march?armv7-r
MULTILIB_MATCHES      += march?armv7=march?armv7-m
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3

#MULTILIB_OPTIONS    += mcpu=ep9312
#MULTILIB_DIRNAMES   += ep9312
#MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
 	
MULTILIB_OPTIONS     += mlittle-endian/mbig-endian
MULTILIB_DIRNAMES    += le be
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    += mno-thumb-interwork/mthumb-interwork
MULTILIB_DIRNAMES   += normal interwork
# 
#MULTILIB_OPTIONS    += fno-leading-underscore/fleading-underscore
#MULTILIB_DIRNAMES   += elf under
# 
MULTILIB_OPTIONS    += mcpu=arm7
MULTILIB_DIRNAMES   += nofmult
MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=arm7*
# # Note: the multilib_exceptions matches both -mthumb and
# # -mthumb-interwork
# #
# # We have to match all the arm cpu variants which do not have the
# # multiply instruction and treat them as if the user had specified
# # -mcpu=arm7.  Note that in the following the ? is interpreted as
# # an = for the purposes of matching command line options.
# # FIXME: There ought to be a better way to do this.
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7d
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7di
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm70
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm700
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm700i
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm710
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm710c
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7100
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7500
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm7500fe
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm6
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm60
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm600
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm610
MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm620

EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o

# If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here
# EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o

LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

# Currently there is a bug somewhere in GCC's alias analysis
# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
# Disabling function inlining is a workaround for this problem.
TARGET_LIBGCC2_CFLAGS = -fno-inline

# Assemble startup files.
$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
	-c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm

$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
	-c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-10-03 10:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-10-03 10:26 Problems with Cortex, floating point and multilib Øyvind Harboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).