Patchwork Fix target default on biarch Linux/Sparc

login
register
mail settings
Submitter David Miller
Date Sept. 5, 2011, 10:26 p.m.
Message ID <20110905.182632.902579345910225033.davem@davemloft.net>
Download mbox | patch
Permalink /patch/113443/
State New
Headers show

Comments

David Miller - Sept. 5, 2011, 10:26 p.m.
If you configure a biarch Linux/Sparc compiler defaulting to
32-bit, but give --with-cpu= for a v9 cpu it erroneously
turns on 64-bit in TARGET_DEFAULT.

The right thing to do is what the Solaris/Sparc target does,
which is to key things off of a cpp macro (TARGET_64BIT_DEFAULT)
which is defined by a header that gets prepended to the target
header list based upon the target triplet.

Therefore I moved sol2-64.h to default-64.h and use it for Linux
biarch builds too when appropriate.

gcc/

	* config/sparc/sol2-64.h: Move ...
	* config/sparc/default-64.h: ... to here.  Update comment.
	* config.gcc: Update Solaris sparc to use default-64.h, also
	prefix this header into the list on sparc64-*-linux.
	* config/sparc/linux64.h (TARGET_DEFAULT): Only override if
	TARGET_64BIT_DEFAULT is defined.  Remove commented out reference
	to MASK_HARD_QUAD.

Patch

Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc	(revision 178557)
+++ gcc/config.gcc	(revision 178558)
@@ -2501,7 +2501,7 @@ 
 	tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sol2-bi.h"
 	case ${target} in
 	    sparc64-*-* | sparcv9-*-*)
-		tm_file="sparc/sol2-64.h ${tm_file}"
+		tm_file="sparc/default-64.h ${tm_file}"
 		;;
 	    *)
 		test x$with_cpu != x || with_cpu=v9
@@ -2523,7 +2523,7 @@ 
 	tmake_file="${tmake_file} t-rtems"
 	;;
 sparc64-*-linux*)
-	tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/linux64.h"
+	tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default-64.h sparc/linux64.h"
 	extra_options="${extra_options} sparc/long-double-switch.opt"
 	tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64"
 	extra_parts="${extra_parts} crtfastmath.o"
Index: gcc/config/sparc/sol2-64.h
===================================================================
--- gcc/config/sparc/sol2-64.h	(revision 178557)
+++ gcc/config/sparc/sol2-64.h	(revision 178558)
@@ -1,22 +0,0 @@ 
-/* Definitions of target machine for GCC, for bi-arch SPARC
-   running Solaris 2, defaulting to 64-bit code generation.
-
-   Copyright (C) 1999, 2010, 2011 Free Software Foundation, Inc.
-
-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/>.  */
-
-#define TARGET_64BIT_DEFAULT 1
Index: gcc/config/sparc/linux64.h
===================================================================
--- gcc/config/sparc/linux64.h	(revision 178557)
+++ gcc/config/sparc/linux64.h	(revision 178558)
@@ -31,20 +31,11 @@ 
     }						\
   while (0)
 
-#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
-    || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
-    || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3 \
-    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara \
-    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara2 \
-    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara3 \
-    || TARGET_CPU_DEFAULT == TARGET_CPU_niagara4
-/* A 64 bit v9 compiler with stack-bias,
-   in a Medium/Low code model environment.  */
-
+#ifdef TARGET_64BIT_DEFAULT
 #undef TARGET_DEFAULT
 #define TARGET_DEFAULT \
-  (MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ \
-   + MASK_STACK_BIAS + MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
+  (MASK_V9 + MASK_PTR64 + MASK_64BIT + MASK_STACK_BIAS + \
+   MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
 #endif
 
 /* This must be v9a not just v9 because by default we enable
Index: gcc/config/sparc/default-64.h
===================================================================
--- gcc/config/sparc/default-64.h	(revision 0)
+++ gcc/config/sparc/default-64.h	(revision 178558)
@@ -0,0 +1,22 @@ 
+/* Definitions of target machine for GCC, for bi-arch SPARC,
+   defaulting to 64-bit code generation.
+
+   Copyright (C) 1999, 2010, 2011 Free Software Foundation, Inc.
+
+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/>.  */
+
+#define TARGET_64BIT_DEFAULT 1