diff mbox series

RX: Add rx-*-linux target

Message ID 87tvfp7m40.wl-ysato@users.sourceforge.jp
State New
Headers show
Series RX: Add rx-*-linux target | expand

Commit Message

Yoshinori Sato March 26, 2019, 2:21 p.m. UTC
I ported linux kernel to Renesas RX.

rx-*-elf target output a binary different from the standard ELF.
It has the same format as the Renesas compiler.

But the linux kernel requires the standard ELF format.
I want to define a rx-*-linux target so that I can generate
a standard ELF binary.

Comments

Jeff Law April 29, 2019, 9:48 p.m. UTC | #1
On 3/26/19 8:21 AM, Yoshinori Sato wrote:
> I ported linux kernel to Renesas RX.
> 
> rx-*-elf target output a binary different from the standard ELF.
> It has the same format as the Renesas compiler.
> 
> But the linux kernel requires the standard ELF format.
> I want to define a rx-*-linux target so that I can generate
> a standard ELF binary.I believe you have a copyright assignment on file for your H8 work.  Was
the assignment specific to the H8 or was it more general?


> diff --git a/gcc/config/rx/linux.h b/gcc/config/rx/linux.h
> new file mode 100644
> index 00000000000..69500a379f2
> --- /dev/null
> +++ b/gcc/config/rx/linux.h

> +
> +/* This is how to output an element of a case-vector that is relative.
> +   Note: The local label referenced by the "3b" below is emitted by
> +   the tablejump insn.  */
> +
> +#undef ASM_OUTPUT_ADDR_DIFF_ELT
> +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
> +  fprintf (FILE, "\t.long .L%d - 1b\n", VALUE)
Note the comment references "3b", but the output is "1b".

I don't see anything in here significantly concerning.  We just need to
verify your copyright assignment status.

Also, do you have write access to the repo?

Jeff
Yoshinori Sato April 30, 2019, 1:55 p.m. UTC | #2
On Tue, 30 Apr 2019 06:48:01 +0900,
Jeff Law wrote:
> 
> On 3/26/19 8:21 AM, Yoshinori Sato wrote:
> > I ported linux kernel to Renesas RX.
> > 
> > rx-*-elf target output a binary different from the standard ELF.
> > It has the same format as the Renesas compiler.
> > 
> > But the linux kernel requires the standard ELF format.
> > I want to define a rx-*-linux target so that I can generate
> > a standard ELF binary.I believe you have a copyright assignment on file for your H8 work.  Was
> the assignment specific to the H8 or was it more general?

No. This changes other target.
These files are not included in my copyright assignment.

> 
> > diff --git a/gcc/config/rx/linux.h b/gcc/config/rx/linux.h
> > new file mode 100644
> > index 00000000000..69500a379f2
> > --- /dev/null
> > +++ b/gcc/config/rx/linux.h
> 
> > +
> > +/* This is how to output an element of a case-vector that is relative.
> > +   Note: The local label referenced by the "3b" below is emitted by
> > +   the tablejump insn.  */
> > +
> > +#undef ASM_OUTPUT_ADDR_DIFF_ELT
> > +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
> > +  fprintf (FILE, "\t.long .L%d - 1b\n", VALUE)
> Note the comment references "3b", but the output is "1b".

Oh.
I will update it.

> I don't see anything in here significantly concerning.  We just need to
> verify your copyright assignment status.

OK.

> Also, do you have write access to the repo?

I don't have write permission of svn repository.

> Jeff
>
Jeff Law April 30, 2019, 3:37 p.m. UTC | #3
On 4/30/19 7:55 AM, Yoshinori Sato wrote:
> On Tue, 30 Apr 2019 06:48:01 +0900,
> Jeff Law wrote:
>>
>> On 3/26/19 8:21 AM, Yoshinori Sato wrote:
>>> I ported linux kernel to Renesas RX.
>>>
>>> rx-*-elf target output a binary different from the standard ELF.
>>> It has the same format as the Renesas compiler.
>>>
>>> But the linux kernel requires the standard ELF format.
>>> I want to define a rx-*-linux target so that I can generate
>>> a standard ELF binary.I believe you have a copyright assignment on file for your H8 work.  Was
>> the assignment specific to the H8 or was it more general?
> 
> No. This changes other target.
> These files are not included in my copyright assignment.
> 
>>
>>> diff --git a/gcc/config/rx/linux.h b/gcc/config/rx/linux.h
>>> new file mode 100644
>>> index 00000000000..69500a379f2
>>> --- /dev/null
>>> +++ b/gcc/config/rx/linux.h
>>
>>> +
>>> +/* This is how to output an element of a case-vector that is relative.
>>> +   Note: The local label referenced by the "3b" below is emitted by
>>> +   the tablejump insn.  */
>>> +
>>> +#undef ASM_OUTPUT_ADDR_DIFF_ELT
>>> +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
>>> +  fprintf (FILE, "\t.long .L%d - 1b\n", VALUE)
>> Note the comment references "3b", but the output is "1b".
> 
> Oh.
> I will update it.
> 
>> I don't see anything in here significantly concerning.  We just need to
>> verify your copyright assignment status.
> 
> OK.
> 
>> Also, do you have write access to the repo?
> 
> I don't have write permission of svn repository.
OK.  So let me know when the assignment is updated and I'll commit the
changes.

If you forsee doing future work, you might consider a broader assignment
so that we don't have to go through the assignment process for each
contribution.

Jeff
Yoshinori Sato May 1, 2019, 1:12 p.m. UTC | #4
On Wed, 01 May 2019 00:37:56 +0900,
Jeff Law wrote:
> 
> On 4/30/19 7:55 AM, Yoshinori Sato wrote:
> > On Tue, 30 Apr 2019 06:48:01 +0900,
> > Jeff Law wrote:
> >>
> >> On 3/26/19 8:21 AM, Yoshinori Sato wrote:
> >>> I ported linux kernel to Renesas RX.
> >>>
> >>> rx-*-elf target output a binary different from the standard ELF.
> >>> It has the same format as the Renesas compiler.
> >>>
> >>> But the linux kernel requires the standard ELF format.
> >>> I want to define a rx-*-linux target so that I can generate
> >>> a standard ELF binary.I believe you have a copyright assignment on file for your H8 work.  Was
> >> the assignment specific to the H8 or was it more general?
> > 
> > No. This changes other target.
> > These files are not included in my copyright assignment.
> > 
> >>
> >>> diff --git a/gcc/config/rx/linux.h b/gcc/config/rx/linux.h
> >>> new file mode 100644
> >>> index 00000000000..69500a379f2
> >>> --- /dev/null
> >>> +++ b/gcc/config/rx/linux.h
> >>
> >>> +
> >>> +/* This is how to output an element of a case-vector that is relative.
> >>> +   Note: The local label referenced by the "3b" below is emitted by
> >>> +   the tablejump insn.  */
> >>> +
> >>> +#undef ASM_OUTPUT_ADDR_DIFF_ELT
> >>> +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
> >>> +  fprintf (FILE, "\t.long .L%d - 1b\n", VALUE)
> >> Note the comment references "3b", but the output is "1b".
> > 
> > Oh.
> > I will update it.
> > 
> >> I don't see anything in here significantly concerning.  We just need to
> >> verify your copyright assignment status.
> > 
> > OK.
> > 
> >> Also, do you have write access to the repo?
> > 
> > I don't have write permission of svn repository.
> OK.  So let me know when the assignment is updated and I'll commit the
> changes.
> 
> If you forsee doing future work, you might consider a broader assignment
> so that we don't have to go through the assignment process for each
> contribution.
> 
> Jeff

Thank you.
When the procedure is over, post a patch that corrects the comment.
diff mbox series

Patch

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 3eb2e800fc5..2fef8922578 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2800,6 +2800,11 @@  rl78-*-elf*)
 rx-*-elf*)
 	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
 	tmake_file="${tmake_file} rx/t-rx"
+	extra_options="${extra_options} rx/elf.opt"
+	;;
+rx-*-linux*)
+	tm_file="elfos.h linux.h glibc-stdint.h rx/linux.h ../../libgcc/config/rx/rx-abi.h"
+	tmake_file="${tmake_file} rx/t-linux"
 	;;
 s390-*-linux*)
 	tm_file="s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
diff --git a/gcc/config/rx/elf.opt b/gcc/config/rx/elf.opt
new file mode 100644
index 00000000000..907e030df8e
--- /dev/null
+++ b/gcc/config/rx/elf.opt
@@ -0,0 +1,44 @@ 
+; Command line options for the Renesas RX port of GCC.
+; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+; for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3.  If not see
+; <http://www.gnu.org/licenses/>.
+;---------------------------------------------------
+
+; elf target extra options
+
+msim
+Target
+Use the simulator runtime.
+
+;---------------------------------------------------
+
+mas100-syntax
+Target Mask(AS100_SYNTAX) Report
+Generate assembler output that is compatible with the Renesas AS100 assembler.  This may restrict some of the compiler's capabilities.  The default is to generate GAS compatable syntax.
+
+;---------------------------------------------------
+
+mint-register=
+Target RejectNegative Joined UInteger Var(rx_interrupt_registers) Init(0)
+Specifies the number of registers to reserve for interrupt handlers.
+
+;---------------------------------------------------
+
+msave-acc-in-interrupts
+Target Mask(SAVE_ACC_REGISTER)
+Specifies whether interrupt functions should save and restore the accumulator register.
diff --git a/gcc/config/rx/linux.h b/gcc/config/rx/linux.h
new file mode 100644
index 00000000000..69500a379f2
--- /dev/null
+++ b/gcc/config/rx/linux.h
@@ -0,0 +1,231 @@ 
+/* GCC backend definitions for the Renesas RX processor.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+   Contributed by Red Hat.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#include "config/rx/rx.h"
+
+#undef TARGET_CPU_CPP_BUILTINS
+#define TARGET_CPU_CPP_BUILTINS()		\
+  do						\
+    {						\
+      builtin_define ("__RX__");		\
+      builtin_assert ("cpu=RX");		\
+      if (rx_cpu_type == RX610)			\
+	builtin_assert ("machine=RX610");	\
+     else					\
+	builtin_assert ("machine=RX600");	\
+						\
+      if (TARGET_BIG_ENDIAN_DATA)		\
+	builtin_define ("__RX_BIG_ENDIAN__");	\
+      else					\
+	builtin_define ("__RX_LITTLE_ENDIAN__");\
+						\
+      if (TARGET_64BIT_DOUBLES)			\
+	builtin_define ("__RX_64BIT_DOUBLES__");\
+      else					\
+	builtin_define ("__RX_32BIT_DOUBLES__");\
+						\
+      if (ALLOW_RX_FPU_INSNS)			\
+	builtin_define ("__RX_FPU_INSNS__");	\
+						\
+    }						\
+  while (0)
+
+#undef  CC1_SPEC
+#define CC1_SPEC "\
+  %{mcpu=rx200:%{fpu:%erx200 cpu does not have FPU hardware}}"
+
+#undef  ASM_SPEC
+#define ASM_SPEC "\
+%{mbig-endian-data:-mbig-endian-data} \
+%{m64bit-doubles:-m64bit-doubles} \
+%{!m64bit-doubles:-m32bit-doubles} \
+%{msmall-data-limit*:-msmall-data-limit} \
+%{mrelax:-relax} \
+"
+
+#undef DATA_SECTION_ASM_OP
+#define DATA_SECTION_ASM_OP	      			\
+   "\t.section .data,\"aw\",@progbits\n\t.p2align 2"
+
+#undef SDATA_SECTION_ASM_OP
+#define SDATA_SECTION_ASM_OP	      			\
+   "\t.section .data2,\"aw\",@progbits\n\t.p2align 1"
+
+#undef  READONLY_DATA_SECTION_ASM_OP
+#define READONLY_DATA_SECTION_ASM_OP  			\
+   "\t.section .rodata,\"a\",@progbits\n\t.p2align 2"
+
+#undef BSS_SECTION_ASM_OP
+#define BSS_SECTION_ASM_OP	      			\
+   "\t.section .bss\n\t.p2align 2"
+
+#undef SBSS_SECTION_ASM_OP
+#define SBSS_SECTION_ASM_OP	      			\
+   "\t.section .bss2\n\t.p2align 1"
+
+/* The following definitions are conditional depending upon whether the
+   compiler is being built or crtstuff.c is being compiled by the built
+   compiler.  */
+#undef TEXT_SECTION_ASM_OP
+#define TEXT_SECTION_ASM_OP	      \
+  "\t.section .text,\"ax\""
+#undef CTORS_SECTION_ASM_OP
+#define CTORS_SECTION_ASM_OP	      \
+  "\t.section\t.init_array,\"aw\",@init_array"
+#undef DTORS_SECTION_ASM_OP
+#define DTORS_SECTION_ASM_OP	      \
+  "\t.section\t.fini_array,\"aw\",@fini_array"
+#undef INIT_ARRAY_SECTION_ASM_OP
+#define INIT_ARRAY_SECTION_ASM_OP   \
+  "\t.section\t.init_array,\"aw\",@init_array"
+#undef FINI_ARRAY_SECTION_ASM_OP
+#define FINI_ARRAY_SECTION_ASM_OP   \
+  "\t.section\t.fini_array,\"aw\",@fini_array"
+
+#undef GLOBAL_ASM_OP
+#define GLOBAL_ASM_OP		"\t.global\t"
+#undef  USER_LABEL_PREFIX
+
+#undef ASM_OUTPUT_ALIGN
+#define ASM_OUTPUT_ALIGN(STREAM, LOG)		\
+  do						\
+    {						\
+      if ((LOG) == 0)				\
+        break;					\
+      fprintf (STREAM, "\t.balign %d\n", 1 << (LOG));	\
+    }						\
+  while (0)
+
+#undef ASM_OUTPUT_ADDR_VEC_ELT
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+  fprintf (FILE, "\t.long .L%d\n", VALUE)
+
+/* This is how to output an element of a case-vector that is relative.
+   Note: The local label referenced by the "3b" below is emitted by
+   the tablejump insn.  */
+
+#undef ASM_OUTPUT_ADDR_DIFF_ELT
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
+  fprintf (FILE, "\t.long .L%d - 1b\n", VALUE)
+
+#undef ASM_OUTPUT_SIZE_DIRECTIVE
+#define ASM_OUTPUT_SIZE_DIRECTIVE(STREAM, NAME, SIZE)			\
+  do									\
+    {									\
+      HOST_WIDE_INT size_ = (SIZE);					\
+									\
+      fputs (SIZE_ASM_OP, STREAM);					\
+      assemble_name (STREAM, NAME);					\
+      fprintf (STREAM, ", " HOST_WIDE_INT_PRINT_DEC "\n", size_);	\
+    }									\
+  while (0)
+
+#undef ASM_OUTPUT_MEASURED_SIZE
+#define ASM_OUTPUT_MEASURED_SIZE(STREAM, NAME)				\
+  do									\
+    {									\
+      fputs (SIZE_ASM_OP, STREAM);					\
+      assemble_name (STREAM, NAME);					\
+      fputs (", .-", STREAM);						\
+      assemble_name (STREAM, NAME);					\
+      putc ('\n', STREAM);						\
+    }									\
+  while (0)
+
+#undef ASM_OUTPUT_TYPE_DIRECTIVE
+#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE)			\
+  do									\
+    {									\
+      fputs (TYPE_ASM_OP, STREAM);					\
+      assemble_name (STREAM, NAME);					\
+      fputs (", ", STREAM);						\
+      fprintf (STREAM, TYPE_OPERAND_FMT, TYPE);				\
+      putc ('\n', STREAM);						\
+    }									\
+  while (0)
+
+#undef  ASM_GENERATE_INTERNAL_LABEL
+#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)		\
+  do								\
+    {								\
+      sprintf (LABEL, "*.%s%u", PREFIX, (unsigned) (NUM));			\
+    }								\
+  while (0)
+
+#undef  ASM_OUTPUT_EXTERNAL
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME)			\
+  do								\
+    {								\
+      default_elf_asm_output_external (FILE, DECL, NAME);	\
+    }								\
+  while (0)
+
+#undef  ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)		\
+  do									\
+    {									\
+      fprintf ((FILE), "%s", COMMON_ASM_OP);				\
+      assemble_name ((FILE), (NAME));					\
+      fprintf ((FILE), "," HOST_WIDE_INT_PRINT_UNSIGNED ",%u\n",	\
+	       (SIZE), (ALIGN) / BITS_PER_UNIT);			\
+    }									\
+  while (0)
+
+#undef  SKIP_ASM_OP
+#define SKIP_ASM_OP   "\t.zero\t"
+
+#undef  ASM_OUTPUT_LIMITED_STRING
+#define ASM_OUTPUT_LIMITED_STRING(FILE, STR)		\
+  do							\
+    {							\
+      const unsigned char *_limited_str =		\
+	(const unsigned char *) (STR);			\
+      unsigned ch;					\
+							\
+      fprintf ((FILE), "\t.string\t\"");		\
+							\
+      for (; (ch = *_limited_str); _limited_str++)	\
+        {						\
+	  int escape;					\
+							\
+	  switch (escape = ESCAPES[ch])			\
+	    {						\
+	    case 0:					\
+	      putc (ch, (FILE));			\
+	      break;					\
+	    case 1:					\
+	      fprintf ((FILE), "\\%03o", ch);		\
+	      break;					\
+	    default:					\
+	      putc ('\\', (FILE));			\
+	      putc (escape, (FILE));			\
+	      break;					\
+	    }						\
+        }						\
+							\
+      fprintf ((FILE), "\"\n");				\
+    }							\
+  while (0)
+
+#undef  PREFERRED_DEBUGGING_TYPE
+
+#undef TARGET_AS100_SYNTAX
+#define TARGET_AS100_SYNTAX 0
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c
index dac05db895a..05f96a17227 100644
--- a/gcc/config/rx/rx.c
+++ b/gcc/config/rx/rx.c
@@ -1438,10 +1438,14 @@  bit_count (unsigned int x)
   return (x + (x >> 16)) & 0x3f;
 }
 
+#if defined(TARGET_SAVE_ACC_REGISTER)
 #define MUST_SAVE_ACC_REGISTER			\
   (TARGET_SAVE_ACC_REGISTER			\
    && (is_interrupt_func (NULL_TREE)		\
        || is_fast_interrupt_func (NULL_TREE)))
+#else
+#define MUST_SAVE_ACC_REGISTER 0
+#endif
 
 /* Returns either the lowest numbered and highest numbered registers that
    occupy the call-saved area of the stack frame, if the registers are
diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h
index b50b48f8afb..672e087cd13 100644
--- a/gcc/config/rx/rx.h
+++ b/gcc/config/rx/rx.h
@@ -408,7 +408,9 @@  typedef unsigned int CUMULATIVE_ARGS;
 #define GLOBAL_ASM_OP 		\
   (TARGET_AS100_SYNTAX ? "\t.GLB\t" : "\t.global\t")
 #define ASM_COMMENT_START	" ;"
+#undef ASM_APP_ON
 #define ASM_APP_ON		""
+#undef ASM_APP_OFF
 #define ASM_APP_OFF 		""
 #define LOCAL_LABEL_PREFIX	"L"
 #undef  USER_LABEL_PREFIX
diff --git a/gcc/config/rx/rx.opt b/gcc/config/rx/rx.opt
index 50814a17a75..4e80c860e43 100644
--- a/gcc/config/rx/rx.opt
+++ b/gcc/config/rx/rx.opt
@@ -82,18 +82,6 @@  Maximum size of global and static variables which can be placed into the small d
 
 ;---------------------------------------------------
 
-msim
-Target
-Use the simulator runtime.
-
-;---------------------------------------------------
-
-mas100-syntax
-Target Mask(AS100_SYNTAX) Report
-Generate assembler output that is compatible with the Renesas AS100 assembler.  This may restrict some of the compiler's capabilities.  The default is to generate GAS compatible syntax.
-
-;---------------------------------------------------
-
 mrelax
 Target
 Enable linker relaxation.
diff --git a/gcc/config/rx/t-linux b/gcc/config/rx/t-linux
new file mode 100644
index 00000000000..347a309a80b
--- /dev/null
+++ b/gcc/config/rx/t-linux
@@ -0,0 +1,34 @@ 
+# Makefile fragment for building GCC for the Renesas RX target.
+# Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the  GNU General Public
+# License along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# Enable multilibs:
+
+MULTILIB_OPTIONS    =
+MULTILIB_DIRNAMES   =
+
+MULTILIB_MATCHES    = nofpu=mnofpu  nofpu=mcpu?rx200  nofpu=mcpu?RX200
+
+MULTILIB_EXCEPTIONS =
+MULTILIB_EXTRA_OPTS =
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
diff --git a/libgcc/config.host b/libgcc/config.host
index 91abc84da03..09d59286459 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -1211,6 +1211,9 @@  rx-*-elf)
 	tmake_file="rx/t-rx t-fdpbit"
 	tm_file="$tm_file rx/rx-abi.h rx/rx-lib.h"
 	;;
+rx-*-linux*)
+	tmake_file="rx/t-rx"
+	;;
 s390-*-linux*)
 	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux s390/32/t-floattodi t-stack s390/t-stack-s390"
 	md_unwind_header=s390/linux-unwind.h
diff --git a/libgcc/config/rx/t-rx b/libgcc/config/rx/t-rx
index ace3b16f39e..34cdc97cc03 100644
--- a/libgcc/config/rx/t-rx
+++ b/libgcc/config/rx/t-rx
@@ -23,6 +23,7 @@ 
 # the normal libgcc sources:
 
 LIB2ADD = $(srcdir)/config/rx/rx-abi-functions.c
+HOST_LIBGCC2_CFLAGS += -DDF=SF
 
 
 # We need special handling of the floating point conversion