mips-tfile.c (initialize_init_file): Correct endianness test.
authorRoger Sayle <roger@eyesopen.com>
Mon, 5 Feb 2007 16:37:05 +0000 (16:37 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 5 Feb 2007 16:37:05 +0000 (16:37 +0000)
* mips-tfile.c (initialize_init_file): Correct endianness test.

From-SVN: r121602

gcc/ChangeLog
gcc/mips-tfile.c

index 6fff2eaa100856d9bfb6b55a0f58e20c7ff6b71f..165cfeb6ff67b449c7708dad482f0c94d17b667e 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-05  Roger Sayle  <roger@eyesopen.com>
+
+       * mips-tfile.c (initialize_init_file): Correct endianness test.
+
 2007-02-05  Kazu Hirata  <kazu@codesourcery.com>
 
        * config/m68k/m68k.md (pushdi-1, pushdi, movsi+1): Don't use
index c543f97815895eb20513ad8d6bcfe4d84307c7db..ac7030049285bb03c5656450c6083cf95e867cc1 100644 (file)
@@ -3,7 +3,7 @@
    in the form of comments (the mips assembler does not support
    assembly access to debug information).
    Copyright (C) 1991, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
    Contributed by Michael Meissner (meissner@cygnus.com).
 
 This file is part of GCC.
@@ -2352,15 +2352,28 @@ add_procedure (const char *func_start,  /* 1st byte of func name */
 STATIC void
 initialize_init_file (void)
 {
+  union {
+    unsigned char c[4];
+    int i;
+  } endian_test;
+
   memset (&init_file, 0, sizeof (init_file));
 
   init_file.fdr.lang = langC;
   init_file.fdr.fMerge = 1;
   init_file.fdr.glevel = GLEVEL_2;
 
-#ifdef WORDS_BIG_ENDIAN
-  init_file.fdr.fBigendian = 1;
-#endif
+  /* mips-tfile doesn't attempt to perform byte swapping and always writes
+     out integers in its native ordering.  For cross-compilers, this need
+     not be the same as either the host or the target.  The simplest thing
+     to do is skip the configury and perform an introspective test.  */
+  /* ??? Despite the name, mips-tfile is currently only used on alpha/Tru64
+     and would/may require significant work to be used in cross-compiler
+     configurations, so we could simply admit defeat and hard code this as
+     little-endian, i.e. init_file.fdr.fBigendian = 0.  */
+  endian_test.i = 1;
+  if (endian_test.c[3])
+    init_file.fdr.fBigendian = 1;
 
   INITIALIZE_VARRAY (&init_file.strings, char);
   INITIALIZE_VARRAY (&init_file.symbols, SYMR);