diff options
authorJoel Sherrill <>1999-02-24 15:46:25 +0000
committerJoel Sherrill <>1999-02-24 15:46:25 +0000
commit7d7b2a3d8d2d4f25aeb8c3cf27d55af5087de0b3 (patch)
parent4e4e6911e5911b77aa9b264f2a428873c20d49b7 (diff)
Patch from Charles Gauthier <> to address
FP issues on this target: The default variants of libc, libm and libgcc assume that a 68881 coprocessor is present. Without the FPSP, any floating point operation, including printf() with a "%f" format specifier, is likely to cause an unimplemented instruction exception. The FPSP works with the default variants of libc, libm and libgcc. It does not work in conjunction with the msoft-float variants. The paranoia test goes into an infinite loop at milestone 40. I am guessing that floor() is returning an incorrect value. The msoft-float variants of libc, libm and libgcc appear to do floating point I/O properly. They only failed in paranoia. Offhand, I can't think of why they would conflict with the FPSP, so I think that there is something wrong with the msoft-float code. It might be my installation. Given my experiences, I decided to install the FPSP in bsp_start(), and to link against the default variants of libc, libm and libgcc. This causes the executables to increase in size by about 60 KB. The README file and the mvme167.cfg specify how to remove the FPSP, and how to link against the msoft-float variants of the libraries. This is not what Eric Norum had done: on my host, his gen68360_040 port links RTEMS code with the msoft-float variants of libc and libm, and the default variant of libgcc. In this configuration, the output of printf() with "%f" is garbage on my target.
1 files changed, 19 insertions, 3 deletions
diff --git a/make/custom/mvme167.cfg b/make/custom/mvme167.cfg
index 616dab8a83..5ea4168704 100644
--- a/make/custom/mvme167.cfg
+++ b/make/custom/mvme167.cfg
@@ -4,11 +4,11 @@
# $Id$
-include $(RTEMS_ROOT)/make/custom/default.cfg
+include $(RTEMS_ROOT)/make/custom/default.cfg
# This is the actual bsp directory used during the build process.
@@ -23,7 +23,7 @@ CPU_CFLAGS = -m68040
# -O4 is ok for RTEMS
CFLAGS_OPTIMIZE_V=-O4 -fomit-frame-pointer
-# This target does NOT support the TCP/IP stack so ignore requests
+# This target does NOT support the TCP/IP stack (yet) so ignore requests
# to enable it.
@@ -56,6 +56,22 @@ endef
# will be able to override parts of the compilers specs and link using gcc.
ifeq ($(RTEMS_USE_GCC272),yes)
+# The MC68040 does not implement all MC68881/MC68882 instructions, so use
+# either the gcc floating-point software support (msoft-float libraries), or
+# use the Motorola FPSP floating-point emulator in
+# rtems/c/src/lib/libcpu/m68k/m68040/fpsp
+# The default is to use the FPSP.
+# To use the msoft-float libraries, uncomment the three lines below.
+# You then should comment the M68KFPSPInstallExceptionHandlers() statement
+# in rtems/c/src/lib/libbsp/m68k/mvme167/startup/bststart.c in bsp_start().
+# Floating-point support will then be limited. See the mvme167 README file
+# for more details.
+# LIBC_LIBC = $(RTEMS_LIBC_DIR)/lib/msoft-float/libc.a
+# LIBC_LIBM = $(RTEMS_LIBC_DIR)/lib/msoft-float/libm.a
+# LIBGCC = $(shell $(CC) -msoft-float -print-libgcc-file-name)
define make-exe
$(LD) $(LDFLAGS) -N -T $(LINKCMDS) -o $(basename $@).exe \
$(START_FILE) $(LINK_OBJS) --start-group $(LINK_LIBS) --end-group