compiling freebsd/mips on gcc-4.9.2

Adrian Chadd adrian at freebsd.org
Sun Apr 19 17:33:34 UTC 2015


Hi,

I've started evaluating the external toolchain support in -HEAD so I
can evaluate getting it working on at least gcc-4.9.2. (I'm hoping
that I can also use this with an external clang toolchain, but that's
for later.)

The TL;DR is this:

* with the following patch, but minus the -Wa pieces, I get a booting
kernel on mips32 platforms. I haven't yet tested the mips64 platforms.
* however the assembler (binutils-2.25) complains thus:

'{standard input}: Warning: .gnu_attribute 4,3 requires `softfloat''

* .. so if I add -Wa as in the patch it stops complaining, right until
it compiles the fp emulation code, at which point it complains about
undefined instructions. Which is totally correct - they're not defined
with soft-float enabled.

I'm going to work with bapt/kan over the next few days to get the port
update and the mips32/mips64 ports into FreeBSD so others can start
using this to build/debug kernel builds. I haven't yet started on
userland builds; that'll come next.

Thanks!


-adrian


adrian at lucy-11i386:~/work/freebsd/head-embedded/src % svn diff sys/conf/
Index: sys/conf/files.mips
===================================================================
--- sys/conf/files.mips    (revision 281125)
+++ sys/conf/files.mips    (working copy)
@@ -61,6 +61,9 @@
 libkern/memmove.c            standard
 libkern/cmpdi2.c            optional    mips | mipsel
 libkern/ucmpdi2.c            optional    mips | mipsel
+# required for gcc-4.9?
+libkern/ashldi3.c            standard
+libkern/ashrdi3.c            standard

 # cfe support
 dev/cfe/cfe_api.c            optional    cfe
Index: sys/conf/kern.mk
===================================================================
--- sys/conf/kern.mk    (revision 281125)
+++ sys/conf/kern.mk    (working copy)
@@ -150,7 +150,7 @@
 # For MIPS we also tell gcc to use floating point emulation
 #
 .if ${MACHINE_CPUARCH} == "mips"
-CFLAGS+=    -msoft-float
+CFLAGS+=    -msoft-float -Wa,-msoft-float
 INLINE_LIMIT?=    8000
 .endif

Index: sys/conf/kmod.mk
===================================================================
--- sys/conf/kmod.mk    (revision 281125)
+++ sys/conf/kmod.mk    (working copy)
@@ -134,8 +134,17 @@

 .if ${MACHINE_CPUARCH} == mips
 CFLAGS+=    -G0 -fno-pic -mno-abicalls -mlong-calls
+CFLAGS+=    -msoft-float -Wa,-msoft-float
 .endif

+.if ${MACHINE_ARCH} == mips || ${MACHINE_ARCH} == mipsel
+CFLAGS+=    -march=mips32
+.endif
+
+.if ${MACHINE_ARCH} == mips64 || ${MACHINE_ARCH} == mips64el
+CFLAGS+=    -march=mips64
+.endif
+
 .if defined(DEBUG) || defined(DEBUG_FLAGS)
 CTFFLAGS+=    -g
 .endif


More information about the freebsd-mips mailing list