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. 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