f/target.c HOST_BYTES_BIG_ENDIAN

Alan Modra amodra@bigpond.net.au
Thu Aug 22 06:34:00 GMT 2002


HOST_BYTES_BIG_ENDIAN and HOST_BITS_BIG_ENDIAN are referenced in
f/target.c when cross-compiling, but are not defined anywhere.
This makes g77 spit the dummy when cross-compiling from a
big-endian host to a big-endian target.

Since arbitrarily assuming host bytes and bits are little endian is
arguably worse than assuming host and target match, may I suggest
the following patch?

gcc/f/ChangeLog
	* target.c (ffetarget_memcpy_): Don't test endian macros when
	NATIVE_CROSS.  Default host endian values to target values.

Index: gcc/f/target.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/f/target.c,v
retrieving revision 1.19
diff -u -p -r1.19 target.c
--- gcc/f/target.c	17 Jun 2002 21:21:01 -0000	1.19
+++ gcc/f/target.c	22 Aug 2002 12:04:18 -0000
@@ -2520,10 +2520,10 @@ ffetarget_verify_character1 (mallocPool 
 void *
 ffetarget_memcpy_ (void *dst, void *src, size_t len)
 {
-#ifdef CROSS_COMPILE
+#if defined (CROSS_COMPILE) && !defined (NATIVE_CROSS)
   int host_words_big_endian =
 #ifndef HOST_WORDS_BIG_ENDIAN
-    0
+    WORDS_BIG_ENDIAN
 #else
     HOST_WORDS_BIG_ENDIAN
 #endif
@@ -2531,7 +2531,7 @@ ffetarget_memcpy_ (void *dst, void *src,
 
   int host_bytes_big_endian =
 #ifndef HOST_BYTES_BIG_ENDIAN
-    0
+    BYTES_BIG_ENDIAN
 #else
     HOST_BYTES_BIG_ENDIAN
 #endif
@@ -2539,7 +2539,7 @@ ffetarget_memcpy_ (void *dst, void *src,
 
   int host_bits_big_endian =
 #ifndef HOST_BITS_BIG_ENDIAN
-    0
+    BITS_BIG_ENDIAN
 #else
     HOST_BITS_BIG_ENDIAN
 #endif

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre



More information about the Gcc-patches mailing list