diff -Naur gcc-4.4.2.orig/configure gcc-4.4.2-rtems4.10-20091015/configure --- gcc-4.4.2.orig/configure 2009-04-25 06:10:29.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/configure 2009-10-15 18:36:00.000000000 +0200 @@ -2267,6 +2267,7 @@ noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss ${libgcj} target-libmudflap" ;; *-*-rtems*) + skipdirs="$skipdirs target-libiberty" noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; # The tpf target doesn't support gdb yet. @@ -6259,7 +6260,7 @@ # to it. This is right: we don't want to search that directory # for binaries, but we want the header files in there, so add # them explicitly. - FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include' + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include -isystem $$r/$(HOST_SUBDIR)/gcc/include-fixed' # Someone might think of using the pre-installed headers on # Canadian crosses, in case the installed compiler is not fully diff -Naur gcc-4.4.2.orig/configure.ac gcc-4.4.2-rtems4.10-20091015/configure.ac --- gcc-4.4.2.orig/configure.ac 2009-04-25 06:10:29.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/configure.ac 2009-10-15 18:36:00.000000000 +0200 @@ -502,6 +502,7 @@ noconfigdirs="$noconfigdirs target-newlib target-libiberty target-libgloss ${libgcj} target-libmudflap" ;; *-*-rtems*) + skipdirs="$skipdirs target-libiberty" noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; # The tpf target doesn't support gdb yet. @@ -2560,7 +2561,7 @@ # to it. This is right: we don't want to search that directory # for binaries, but we want the header files in there, so add # them explicitly. - FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include' + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/$(HOST_SUBDIR)/gcc/include -isystem $$r/$(HOST_SUBDIR)/gcc/include-fixed' # Someone might think of using the pre-installed headers on # Canadian crosses, in case the installed compiler is not fully diff -Naur gcc-4.4.2.orig/gcc/config/avr/t-rtems gcc-4.4.2-rtems4.10-20091015/gcc/config/avr/t-rtems --- gcc-4.4.2.orig/gcc/config/avr/t-rtems 2004-11-23 04:44:03.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/avr/t-rtems 2009-10-15 18:36:00.000000000 +0200 @@ -1,3 +1,4 @@ # Multilibs for avr RTEMS targets. -# ATM, this is just a stub +# RTEMS uses _exit from newlib +LIB1ASMFUNCS := $(filter-out _exit,$(LIB1ASMFUNCS)) diff -Naur gcc-4.4.2.orig/gcc/config/lm32/arithmetic.c gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/arithmetic.c --- gcc-4.4.2.orig/gcc/config/lm32/arithmetic.c 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/arithmetic.c 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,305 @@ +/* Fixed-point arithmetic for Lattice Mico32. + Contributed by Jon Beniston + + Copyright (C) 2008 Free Software Foundation, Inc. + + This file 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 2, or (at your option) any + later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + This file 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 this program; see the file COPYING. If not, write to + the Free Software Foundation, 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +typedef unsigned long UQItype __attribute__ ((mode (QI))); +typedef long SItype __attribute__ ((mode (SI))); +typedef unsigned long USItype __attribute__ ((mode (SI))); + +/* Prototypes */ + +USItype __mulsi3 (USItype a, USItype b); + +USItype __udivmodsi4 (USItype num, USItype den, int modwanted); +SItype __divsi3 (SItype a, SItype b); +SItype __modsi3 (SItype a, SItype b); +USItype __udivsi3 (USItype a, USItype b); +USItype __umodsi3 (USItype a, USItype b); + +SItype __ashlsi3 (SItype a, SItype b); +SItype __ashrsi3 (SItype a, SItype b); +USItype __lshrsi3 (USItype a, USItype b); + +/* Multiplication */ + +#ifdef L_mulsi3 +USItype +__mulsi3 (USItype a, USItype b) +{ + USItype result; + + result = 0; + + if (a==0) + return 0; + + while (b!=0) + { + if (b & 1) + result += a; + a <<= 1; + b >>= 1; + } + + return result; +} +#endif + +/* Division */ + +#ifdef L_udivmodsi4 +USItype +__udivmodsi4 (USItype num, USItype den, int modwanted) +{ + USItype bit = 1; + USItype res = 0; + + while (den < num && bit && !(den & (1L<<31))) + { + den <<=1; + bit <<=1; + } + while (bit) + { + if (num >= den) + { + num -= den; + res |= bit; + } + bit >>=1; + den >>=1; + } + if (modwanted) + return num; + return res; +} +#endif + +#ifdef L_divsi3 + +static const UQItype __divsi3_table[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 4, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 4, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 10, 5, 3, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 11, 5, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 12, 6, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 13, 6, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 14, 7, 4, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 15, 7, 5, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +SItype +__divsi3 (SItype a, SItype b) +{ + int neg = 0; + SItype res; + int cfg; + + if (b == 0) + { + /* Raise divide by zero exception */ + int eba; + __asm__ __volatile__ ("rcsr %0, EBA" : "=r" (eba)); + eba += 32 * 5; + __asm__ __volatile__ ("mv ea, ra"); + __asm__ __volatile__ ("b %0" : : "r" (eba)); + } + + if (((USItype)(a | b)) < 16) + { + res = __divsi3_table[(a << 4) + b]; + } + else + { + + if (a < 0) + { + a = -a; + neg = !neg; + } + + if (b < 0) + { + b = -b; + neg = !neg; + } + + __asm__ ("rcsr %0, CFG" : "=r" (cfg)); + if (cfg & 2) + __asm__ ("divu %0, %1, %2" : "=r" (res) : "r" (a), "r" (b)); + else + res = __udivmodsi4 (a, b, 0); + + if (neg) + res = -res; + } + + return res; +} +#endif + +#ifdef L_modsi3 +SItype +__modsi3 (SItype a, SItype b) +{ + int neg = 0; + SItype res; + int cfg; + + if (b == 0) + { + /* Raise divide by zero exception */ + int eba, sr; + /* Save interrupt enable */ + __asm__ __volatile__ ("rcsr %0, IE" : "=r" (sr)); + sr = (sr & 1) << 1; + __asm__ __volatile__ ("wcsr IE, %0" : : "r" (sr)); + /* Branch to exception handler */ + __asm__ __volatile__ ("rcsr %0, EBA" : "=r" (eba)); + eba += 32 * 5; + __asm__ __volatile__ ("mv ea, ra"); + __asm__ __volatile__ ("b %0" : : "r" (eba)); + } + + if (a < 0) + { + a = -a; + neg = 1; + } + + if (b < 0) + b = -b; + + __asm__ ("rcsr %0, CFG" : "=r" (cfg)); + if (cfg & 2) + __asm__ ("modu %0, %1, %2" : "=r" (res) : "r" (a), "r" (b)); + else + res = __udivmodsi4 (a, b, 1); + + if (neg) + res = -res; + + return res; +} +#endif + +#ifdef L_udivsi3 +USItype +__udivsi3 (USItype a, USItype b) +{ + if (b == 0) + { + /* Raise divide by zero exception */ + int eba, sr; + /* Save interrupt enable */ + __asm__ __volatile__ ("rcsr %0, IE" : "=r" (sr)); + sr = (sr & 1) << 1; + __asm__ __volatile__ ("wcsr IE, %0" : : "r" (sr)); + /* Branch to exception handler */ + __asm__ __volatile__ ("rcsr %0, EBA" : "=r" (eba)); + eba += 32 * 5; + __asm__ __volatile__ ("mv ea, ra"); + __asm__ __volatile__ ("b %0" : : "r" (eba)); + } + + return __udivmodsi4 (a, b, 0); +} +#endif + +#ifdef L_umodsi3 +USItype +__umodsi3 (USItype a, USItype b) +{ + if (b == 0) + { + /* Raise divide by zero exception */ + int eba, sr; + /* Save interrupt enable */ + __asm__ __volatile__ ("rcsr %0, IE" : "=r" (sr)); + sr = (sr & 1) << 1; + __asm__ __volatile__ ("wcsr IE, %0" : : "r" (sr)); + /* Branch to exception handler */ + __asm__ __volatile__ ("rcsr %0, EBA" : "=r" (eba)); + eba += 32 * 5; + __asm__ __volatile__ ("mv ea, ra"); + __asm__ __volatile__ ("b %0" : : "r" (eba)); + } + + return __udivmodsi4 (a, b, 1); +} +#endif + +#if 0 + +/* Shifts - Optimized versions implemented in assembly. Use these if code space is preferred to performance. */ + +#ifdef L_ashlsi3 +SItype +__ashlsi3 (SItype a, SItype b) +{ + int i; + + for (i = (b & 0x1f); i > 0; --i) + a += a; + return a; +} +#endif + +#ifdef L_ashrsi3 +SItype +__ashrsi3 (SItype a, SItype b) +{ + int i; + + for (i = (b & 0x1f); i > 0; --i) + __asm__ ("sri %0, %0, 1" : "=r" (a) : "0" (a)); + return a; +} +#endif + +#ifdef L_lshrsi3 +USItype +__lshrsi3 (USItype a, USItype b) +{ + int i; + + for (i = (b & 0x1f); i > 0; --i) + __asm__ ("srui %0, %0, 1" : "=r" (a) : "0" (a)); + return a; +} +#endif + +#endif diff -Naur gcc-4.4.2.orig/gcc/config/lm32/crti.S gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/crti.S --- gcc-4.4.2.orig/gcc/config/lm32/crti.S 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/crti.S 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,45 @@ +# crti.S for Lattice Mico32 +# Contributed by Jon Beniston +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This file 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 2, or (at your option) any +# later version. +# +# In addition to the permissions in the GNU General Public License, the +# Free Software Foundation gives you unlimited permission to link the +# compiled version of this file into combinations with other programs, +# and to distribute those combinations without any restriction coming +# from the use of this file. (The General Public License restrictions +# do apply in other respects; for example, they cover modification of +# the file, and distribution when not linked into a combine +# executable.) +# +# This file 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 this program; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# + + .section .init + .global _init + .type _init,@function + .align 4 +_init: + addi sp, sp, -4 + sw (sp+4), ra + + .section .fini + .global _fini + .type _fini,@function + .align 4 +_fini: + addi sp, sp, -4 + sw (sp+4), ra diff -Naur gcc-4.4.2.orig/gcc/config/lm32/crtn.S gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/crtn.S --- gcc-4.4.2.orig/gcc/config/lm32/crtn.S 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/crtn.S 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,42 @@ +# crtn.S for Lattice Mico32 +# Contributed by Jon Beniston +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This file 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 2, or (at your option) any +# later version. +# +# In addition to the permissions in the GNU General Public License, the +# Free Software Foundation gives you unlimited permission to link the +# compiled version of this file into combinations with other programs, +# and to distribute those combinations without any restriction coming +# from the use of this file. (The General Public License restrictions +# do apply in other respects; for example, they cover modification of +# the file, and distribution when not linked into a combine +# executable.) +# +# This file 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 this program; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# + + .section .init + + lw ra, (sp+4) + addi sp, sp, 4 + ret + + .section .fini + + lw ra, (sp+4) + addi sp, sp, 4 + ret + diff -Naur gcc-4.4.2.orig/gcc/config/lm32/lib1funcs.S gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lib1funcs.S --- gcc-4.4.2.orig/gcc/config/lm32/lib1funcs.S 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lib1funcs.S 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,429 @@ +# lib1funcs.S for Lattice Mico32 +# Contributed by Jon Beniston +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This file 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 2, or (at your option) any +# later version. +# +# In addition to the permissions in the GNU General Public License, the +# Free Software Foundation gives you unlimited permission to link the +# compiled version of this file into combinations with other programs, +# and to distribute those combinations without any restriction coming +# from the use of this file. (The General Public License restrictions +# do apply in other respects; for example, they cover modification of +# the file, and distribution when not linked into a combine +# executable.) +# +# This file 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 this program; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# + +/* Arithmetic left shift */ + + .text + + .global __ashlsi3 + .type __ashlsi3,@function + .align 4 + +__ashlsi3: + /* Only use 5 LSBs, as that's all the h/w shifter uses */ + andi r2, r2, 0x1f + /* Get address of offset into unrolled shift loop to jump to */ +#ifdef __PIC__ + orhi r3, r0, gotoffhi16(__ashlsi3_table) + addi r3, r3, gotofflo16(__ashlsi3_table) + add r3, r3, gp +#else + mvhi r3, hi(__ashlsi3_table) + ori r3, r3, lo(__ashlsi3_table) +#endif + add r2, r2, r2 + add r2, r2, r2 + add r3, r3, r2 + lw r3, (r3+0) + b r3 + +__ashlsi3_31: + add r1, r1, r1 +__ashlsi3_30: + add r1, r1, r1 +__ashlsi3_29: + add r1, r1, r1 +__ashlsi3_28: + add r1, r1, r1 +__ashlsi3_27: + add r1, r1, r1 +__ashlsi3_26: + add r1, r1, r1 +__ashlsi3_25: + add r1, r1, r1 +__ashlsi3_24: + add r1, r1, r1 +__ashlsi3_23: + add r1, r1, r1 +__ashlsi3_22: + add r1, r1, r1 +__ashlsi3_21: + add r1, r1, r1 +__ashlsi3_20: + add r1, r1, r1 +__ashlsi3_19: + add r1, r1, r1 +__ashlsi3_18: + add r1, r1, r1 +__ashlsi3_17: + add r1, r1, r1 +__ashlsi3_16: + add r1, r1, r1 +__ashlsi3_15: + add r1, r1, r1 +__ashlsi3_14: + add r1, r1, r1 +__ashlsi3_13: + add r1, r1, r1 +__ashlsi3_12: + add r1, r1, r1 +__ashlsi3_11: + add r1, r1, r1 +__ashlsi3_10: + add r1, r1, r1 +__ashlsi3_9: + add r1, r1, r1 +__ashlsi3_8: + add r1, r1, r1 +__ashlsi3_7: + add r1, r1, r1 +__ashlsi3_6: + add r1, r1, r1 +__ashlsi3_5: + add r1, r1, r1 +__ashlsi3_4: + add r1, r1, r1 +__ashlsi3_3: + add r1, r1, r1 +__ashlsi3_2: + add r1, r1, r1 +__ashlsi3_1: + add r1, r1, r1 +__ashlsi3_0: + ret + +#ifdef __PIC__ + .section .data +#else + .section .rodata +#endif + + .align 4 + +__ashlsi3_table: + .word __ashlsi3_0 + .word __ashlsi3_1 + .word __ashlsi3_2 + .word __ashlsi3_3 + .word __ashlsi3_4 + .word __ashlsi3_5 + .word __ashlsi3_6 + .word __ashlsi3_7 + .word __ashlsi3_8 + .word __ashlsi3_9 + .word __ashlsi3_10 + .word __ashlsi3_11 + .word __ashlsi3_12 + .word __ashlsi3_13 + .word __ashlsi3_14 + .word __ashlsi3_15 + .word __ashlsi3_16 + .word __ashlsi3_17 + .word __ashlsi3_18 + .word __ashlsi3_19 + .word __ashlsi3_20 + .word __ashlsi3_21 + .word __ashlsi3_22 + .word __ashlsi3_23 + .word __ashlsi3_24 + .word __ashlsi3_25 + .word __ashlsi3_26 + .word __ashlsi3_27 + .word __ashlsi3_28 + .word __ashlsi3_29 + .word __ashlsi3_30 + .word __ashlsi3_31 + +/* Logical right shift */ + + .text + + .global __lshrsi3 + .type __lshrsi3,@function + .align 4 + +__lshrsi3: + /* Only use 5 LSBs, as that's all the h/w shifter uses */ + andi r2, r2, 0x1f + /* Get address of offset into unrolled shift loop to jump to */ +#ifdef __PIC__ + orhi r3, r0, gotoffhi16(__lshrsi3_table) + addi r3, r3, gotofflo16(__lshrsi3_table) + add r3, r3, gp +#else + mvhi r3, hi(__lshrsi3_table) + ori r3, r3, lo(__lshrsi3_table) +#endif + add r2, r2, r2 + add r2, r2, r2 + add r3, r3, r2 + lw r3, (r3+0) + b r3 + +__lshrsi3_31: + srui r1, r1, 1 +__lshrsi3_30: + srui r1, r1, 1 +__lshrsi3_29: + srui r1, r1, 1 +__lshrsi3_28: + srui r1, r1, 1 +__lshrsi3_27: + srui r1, r1, 1 +__lshrsi3_26: + srui r1, r1, 1 +__lshrsi3_25: + srui r1, r1, 1 +__lshrsi3_24: + srui r1, r1, 1 +__lshrsi3_23: + srui r1, r1, 1 +__lshrsi3_22: + srui r1, r1, 1 +__lshrsi3_21: + srui r1, r1, 1 +__lshrsi3_20: + srui r1, r1, 1 +__lshrsi3_19: + srui r1, r1, 1 +__lshrsi3_18: + srui r1, r1, 1 +__lshrsi3_17: + srui r1, r1, 1 +__lshrsi3_16: + srui r1, r1, 1 +__lshrsi3_15: + srui r1, r1, 1 +__lshrsi3_14: + srui r1, r1, 1 +__lshrsi3_13: + srui r1, r1, 1 +__lshrsi3_12: + srui r1, r1, 1 +__lshrsi3_11: + srui r1, r1, 1 +__lshrsi3_10: + srui r1, r1, 1 +__lshrsi3_9: + srui r1, r1, 1 +__lshrsi3_8: + srui r1, r1, 1 +__lshrsi3_7: + srui r1, r1, 1 +__lshrsi3_6: + srui r1, r1, 1 +__lshrsi3_5: + srui r1, r1, 1 +__lshrsi3_4: + srui r1, r1, 1 +__lshrsi3_3: + srui r1, r1, 1 +__lshrsi3_2: + srui r1, r1, 1 +__lshrsi3_1: + srui r1, r1, 1 +__lshrsi3_0: + ret + +#ifdef __PIC__ + .section .data +#else + .section .rodata +#endif + + .align 4 + +__lshrsi3_table: + .word __lshrsi3_0 + .word __lshrsi3_1 + .word __lshrsi3_2 + .word __lshrsi3_3 + .word __lshrsi3_4 + .word __lshrsi3_5 + .word __lshrsi3_6 + .word __lshrsi3_7 + .word __lshrsi3_8 + .word __lshrsi3_9 + .word __lshrsi3_10 + .word __lshrsi3_11 + .word __lshrsi3_12 + .word __lshrsi3_13 + .word __lshrsi3_14 + .word __lshrsi3_15 + .word __lshrsi3_16 + .word __lshrsi3_17 + .word __lshrsi3_18 + .word __lshrsi3_19 + .word __lshrsi3_20 + .word __lshrsi3_21 + .word __lshrsi3_22 + .word __lshrsi3_23 + .word __lshrsi3_24 + .word __lshrsi3_25 + .word __lshrsi3_26 + .word __lshrsi3_27 + .word __lshrsi3_28 + .word __lshrsi3_29 + .word __lshrsi3_30 + .word __lshrsi3_31 + +/* Arithmetic right shift */ + + .text + + .global __ashrsi3 + .type __ashrsi3,@function + .align 4 + +__ashrsi3: + /* Only use 5 LSBs, as that's all the h/w shifter uses */ + andi r2, r2, 0x1f + /* Get address of offset into unrolled shift loop to jump to */ +#ifdef __PIC__ + orhi r3, r0, gotoffhi16(__ashrsi3_table) + addi r3, r3, gotofflo16(__ashrsi3_table) + add r3, r3, gp +#else + mvhi r3, hi(__ashrsi3_table) + ori r3, r3, lo(__ashrsi3_table) +#endif + add r2, r2, r2 + add r2, r2, r2 + add r3, r3, r2 + lw r3, (r3+0) + b r3 + +__ashrsi3_31: + sri r1, r1, 1 +__ashrsi3_30: + sri r1, r1, 1 +__ashrsi3_29: + sri r1, r1, 1 +__ashrsi3_28: + sri r1, r1, 1 +__ashrsi3_27: + sri r1, r1, 1 +__ashrsi3_26: + sri r1, r1, 1 +__ashrsi3_25: + sri r1, r1, 1 +__ashrsi3_24: + sri r1, r1, 1 +__ashrsi3_23: + sri r1, r1, 1 +__ashrsi3_22: + sri r1, r1, 1 +__ashrsi3_21: + sri r1, r1, 1 +__ashrsi3_20: + sri r1, r1, 1 +__ashrsi3_19: + sri r1, r1, 1 +__ashrsi3_18: + sri r1, r1, 1 +__ashrsi3_17: + sri r1, r1, 1 +__ashrsi3_16: + sri r1, r1, 1 +__ashrsi3_15: + sri r1, r1, 1 +__ashrsi3_14: + sri r1, r1, 1 +__ashrsi3_13: + sri r1, r1, 1 +__ashrsi3_12: + sri r1, r1, 1 +__ashrsi3_11: + sri r1, r1, 1 +__ashrsi3_10: + sri r1, r1, 1 +__ashrsi3_9: + sri r1, r1, 1 +__ashrsi3_8: + sri r1, r1, 1 +__ashrsi3_7: + sri r1, r1, 1 +__ashrsi3_6: + sri r1, r1, 1 +__ashrsi3_5: + sri r1, r1, 1 +__ashrsi3_4: + sri r1, r1, 1 +__ashrsi3_3: + sri r1, r1, 1 +__ashrsi3_2: + sri r1, r1, 1 +__ashrsi3_1: + sri r1, r1, 1 +__ashrsi3_0: + ret + +#ifdef __PIC__ + .section .data +#else + .section .rodata +#endif + + .align 4 + +__ashrsi3_table: + .word __ashrsi3_0 + .word __ashrsi3_1 + .word __ashrsi3_2 + .word __ashrsi3_3 + .word __ashrsi3_4 + .word __ashrsi3_5 + .word __ashrsi3_6 + .word __ashrsi3_7 + .word __ashrsi3_8 + .word __ashrsi3_9 + .word __ashrsi3_10 + .word __ashrsi3_11 + .word __ashrsi3_12 + .word __ashrsi3_13 + .word __ashrsi3_14 + .word __ashrsi3_15 + .word __ashrsi3_16 + .word __ashrsi3_17 + .word __ashrsi3_18 + .word __ashrsi3_19 + .word __ashrsi3_20 + .word __ashrsi3_21 + .word __ashrsi3_22 + .word __ashrsi3_23 + .word __ashrsi3_24 + .word __ashrsi3_25 + .word __ashrsi3_26 + .word __ashrsi3_27 + .word __ashrsi3_28 + .word __ashrsi3_29 + .word __ashrsi3_30 + .word __ashrsi3_31 + diff -Naur gcc-4.4.2.orig/gcc/config/lm32/lm32.c gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.c --- gcc-4.4.2.orig/gcc/config/lm32/lm32.c 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.c 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,869 @@ +/* Subroutines used for code generation on the Lattice Mico32 architecture. + Contributed by Jon Beniston + + Copyright (C) 2008 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 + . */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "rtl.h" +#include "regs.h" +#include "hard-reg-set.h" +#include "basic-block.h" +#include "real.h" +#include "insn-config.h" +#include "conditions.h" +#include "insn-flags.h" +#include "insn-attr.h" +#include "insn-codes.h" +#include "recog.h" +#include "output.h" +#include "tree.h" +#include "expr.h" +#include "flags.h" +#include "reload.h" +#include "tm_p.h" +#include "function.h" +#include "toplev.h" +#include "optabs.h" +#include "libfuncs.h" +#include "ggc.h" +#include "target.h" +#include "target-def.h" +#include "langhooks.h" +#include "tm-constrs.h" +#include "df.h" + +struct lm32_frame_info +{ + HOST_WIDE_INT total_size; /* number of bytes that the entire frame takes up. */ + HOST_WIDE_INT callee_size; /* number of bytes to save callee save registers */ + HOST_WIDE_INT pretend_size; /* number of bytes we push and pretend caller did. */ + HOST_WIDE_INT args_size; /* number of bytes that outgoing arguments take up. */ + HOST_WIDE_INT locals_size; /* number of bytes that local variables take up. */ + unsigned int reg_save_mask; /* mask of saved registers. */ +}; + +/* Prototypes for static functions */ +static rtx emit_add (rtx dest, rtx src0, rtx src1); +static void expand_save_restore (struct lm32_frame_info *info, int op); +static void abort_with_insn (rtx insn, const char *reason); +static void stack_adjust (HOST_WIDE_INT amount); +static bool lm32_in_small_data_p (const_tree); +static void lm32_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode, + tree type, int *pretend_size, int no_rtl); + +/* Detemines if given constant can be used as a displacement */ +#define OFFSET_INT(X) (((X) > -32768) && ((X) < 32768)) + +#undef TARGET_ADDRESS_COST +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#undef TARGET_IN_SMALL_DATA_P +#define TARGET_IN_SMALL_DATA_P lm32_in_small_data_p +#undef TARGET_PROMOTE_FUNCTION_ARGS +#define TARGET_PROMOTE_FUNCTION_ARGS hook_bool_const_tree_true +#undef TARGET_PROMOTE_FUNCTION_RETURN +#define TARGET_PROMOTE_FUNCTION_RETURN hook_bool_const_tree_true +#undef TARGET_SETUP_INCOMING_VARARGS +#define TARGET_SETUP_INCOMING_VARARGS lm32_setup_incoming_varargs +#undef TARGET_PROMOTE_PROTOTYPES +#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true + +struct gcc_target targetm = TARGET_INITIALIZER; + +/* Current frame information calculated by lm32_compute_frame_size. */ +static struct lm32_frame_info current_frame_info; + +rtx lm32_compare_op0; +rtx lm32_compare_op1; + +/* Return non-zero if the specified return type should be returned in memory */ +int +lm32_return_in_memory (tree type) +{ + HOST_WIDE_INT size; + + if (!AGGREGATE_TYPE_P (type)) + { + /* All simple types are returned in registers. */ + return 0; + } + + size = int_size_in_bytes (type); + if (size >=0 && size <= UNITS_PER_WORD) + { + /* If it can fit in one register */ + return 0; + } + + return 1; +} + +/* Determine if given constant can be used as a register displacement */ +int +const_ok_for_base_offset (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) +{ + int val; + + val = INTVAL (op); + return OFFSET_INT (val); +} + +/* Generate an emit a word sized add instruction */ +static rtx +emit_add (rtx dest, rtx src0, rtx src1) +{ + rtx insn; + insn = emit_insn (gen_addsi3 (dest, src0, src1)); + return insn; +} + +/* Generate the code to compare (and possibly branch) two integer values + TEST_CODE is the comparison code we are trying to emulate + (or implement directly) + RESULT is where to store the result of the comparison, + or null to emit a branch + CMP0 CMP1 are the two comparison operands + DESTINATION is the destination of the branch, or null to only compare + */ + +void +gen_int_relational (enum rtx_code code, /* relational test (EQ, etc) */ + rtx result, /* result to store comp. or 0 if branch */ + rtx cmp0, /* first operand to compare */ + rtx cmp1, /* second operand to compare */ + rtx destination) /* destination of the branch, or 0 if compare */ +{ + enum machine_mode mode; + int branch_p; + + mode = GET_MODE (cmp0); + if (mode == VOIDmode) + mode = GET_MODE (cmp1); + + /* Is this a branch or compare */ + branch_p = (destination != 0); + + /* Instruction set doesn't support LE or LT, so swap operands and use GE, GT */ + switch (code) + { + case LE: + case LT: + case LEU: + case LTU: + code = swap_condition (code); + rtx temp = cmp0; + cmp0 = cmp1; + cmp1 = temp; + break; + default: + break; + } + + if (branch_p) + { + rtx insn; + + /* Operands must be in registers */ + if (!register_operand (cmp0, mode)) + cmp0 = force_reg (mode, cmp0); + if (!register_operand (cmp1, mode)) + cmp1 = force_reg (mode, cmp1); + + /* Generate conditional branch instruction */ + rtx cond = gen_rtx_fmt_ee (code, mode, cmp0, cmp1); + rtx label = gen_rtx_LABEL_REF (VOIDmode, destination); + insn = gen_rtx_SET (VOIDmode, pc_rtx, + gen_rtx_IF_THEN_ELSE (VOIDmode, + cond, label, pc_rtx)); + emit_jump_insn (insn); + } + else + { + /* We can't have const_ints in cmp0, other than 0 */ + if ((GET_CODE (cmp0) == CONST_INT) && (INTVAL (cmp0) != 0)) + cmp0 = force_reg (mode, cmp0); + + /* If the comparison is against an int not in legal range + move it into a register */ + if (GET_CODE (cmp1) == CONST_INT) + { + HOST_WIDE_INT value = INTVAL (cmp1); + switch (code) + { + case EQ: case NE: case LE: case LT: case GE: case GT: + if (!MEDIUM_INT(value)) + cmp1 = force_reg (mode, cmp1); + break; + case LEU: case LTU: case GEU: case GTU: + if (!MEDIUM_UINT(value)) + cmp1 = force_reg (mode, cmp1); + break; + default: + abort (); + } + } + + /* Generate compare instruction */ + emit_move_insn (result, gen_rtx_fmt_ee (code, mode, cmp0, cmp1)); + } +} + +/* Generate and emit RTL to save or restore callee save registers */ +static void +expand_save_restore (struct lm32_frame_info *info, int op) +{ + unsigned int reg_save_mask = info->reg_save_mask; + int regno; + HOST_WIDE_INT offset; + rtx insn; + + /* Callee saves are below locals and above outgoing arguments */ + offset = info->args_size + info->callee_size; + for (regno = 0; regno <= 31; regno++) + { + if ((reg_save_mask & (1 << regno)) != 0) + { + if (op == 0) + { + insn = emit_move_insn (gen_rtx_MEM (word_mode, + gen_rtx_PLUS (Pmode, + stack_pointer_rtx, + GEN_INT (offset))), + gen_rtx_REG (word_mode, regno)); + } + else + { + insn = emit_move_insn (gen_rtx_REG (word_mode, regno), + gen_rtx_MEM (word_mode, + gen_rtx_PLUS (Pmode, + stack_pointer_rtx, + GEN_INT (offset)))); + } + + /* only prologue instructions which set the sp fp or save a + register should be marked as frame related */ + if (op==0) + RTX_FRAME_RELATED_P (insn) = 1; + offset -= UNITS_PER_WORD; + } + } +} + +static void +stack_adjust (HOST_WIDE_INT amount) +{ + rtx insn; + + if (!MEDIUM_INT (amount)) + { + /* r10 is caller saved so it can be used as a temp reg */ + rtx r10; + r10 = gen_rtx_REG (word_mode, 10); + insn = emit_move_insn (r10, GEN_INT (amount)); + if (amount < 0) + RTX_FRAME_RELATED_P (insn) = 1; + insn = emit_add (stack_pointer_rtx, stack_pointer_rtx, r10); + if (amount < 0) + RTX_FRAME_RELATED_P (insn) = 1; + } + else + { + insn = emit_add (stack_pointer_rtx, + stack_pointer_rtx, + GEN_INT (amount)); + if (amount < 0) + RTX_FRAME_RELATED_P (insn) = 1; + } +} + + +/* Create and emit instructions for a functions prologue */ +void +lm32_expand_prologue (void) +{ + rtx insn; + + lm32_compute_frame_size (get_frame_size ()); + + if (current_frame_info.total_size > 0) + { + /* Add space on stack new frame */ + stack_adjust (-current_frame_info.total_size); + + /* Save callee save registers */ + if (current_frame_info.reg_save_mask != 0) + expand_save_restore (¤t_frame_info, 0); + + /* Setup frame pointer if it's needed */ + if (frame_pointer_needed == 1) + { + /* Load offset - Don't use total_size, as that includes pretend_size, which isn't part of this frame? */ + insn = emit_move_insn (frame_pointer_rtx, GEN_INT ( current_frame_info.args_size + + current_frame_info.callee_size + + current_frame_info.locals_size)); + RTX_FRAME_RELATED_P (insn) = 1; + + /* Add in sp */ + insn = emit_add (frame_pointer_rtx, + frame_pointer_rtx, + stack_pointer_rtx); + RTX_FRAME_RELATED_P (insn) = 1; + } + + /* Prevent prologue from being scheduled into function body */ + emit_insn (gen_blockage ()); + } +} + +/* Create an emit instructions for a functions epilogue */ +void +lm32_expand_epilogue (void) +{ + rtx ra_rtx = gen_rtx_REG (Pmode, RA_REGNUM); + + lm32_compute_frame_size (get_frame_size ()); + + if (current_frame_info.total_size > 0) + { + /* Prevent stack code from being reordered */ + emit_insn (gen_blockage ()); + + /* Restore callee save registers */ + if (current_frame_info.reg_save_mask != 0) + expand_save_restore (¤t_frame_info, 1); + + /* Deallocate stack */ + stack_adjust (current_frame_info.total_size); + + /* Return to calling function */ + emit_jump_insn (gen_return_internalsi (ra_rtx)); + } + else + { + /* Return to calling function */ + emit_jump_insn (gen_return_internalsi (ra_rtx)); + } +} + +/* Return the bytes needed to compute the frame pointer from the current + stack pointer. */ +HOST_WIDE_INT +lm32_compute_frame_size (int size) +{ + int regno; + HOST_WIDE_INT total_size, locals_size, args_size, pretend_size, callee_size; + unsigned int reg_save_mask; + + locals_size = size; + args_size = crtl->outgoing_args_size; + pretend_size = crtl->args.pretend_args_size; + callee_size = 0; + reg_save_mask = 0; + + /* Build mask that actually determines which regsiters we save + and calculate size required to store them in the stack. */ + for (regno = 1; regno < SP_REGNUM; regno++) + { + if (df_regs_ever_live_p(regno) && !call_used_regs[regno]) + { + reg_save_mask |= 1 << regno; + callee_size += UNITS_PER_WORD; + } + } + if (df_regs_ever_live_p(RA_REGNUM) || !current_function_is_leaf || !optimize) + { + reg_save_mask |= 1 << RA_REGNUM; + callee_size += UNITS_PER_WORD; + } + if (!(reg_save_mask & (1 << FP_REGNUM)) && frame_pointer_needed) + { + reg_save_mask |= 1 << FP_REGNUM; + callee_size += UNITS_PER_WORD; + } + + /* Compute total frame size */ + total_size = pretend_size + args_size + locals_size + callee_size; + + /* Align frame to appropriate boundary */ + total_size = (total_size+3) & ~3; + + /* Save computed information. */ + current_frame_info.total_size = total_size; + current_frame_info.callee_size = callee_size; + current_frame_info.pretend_size = pretend_size; + current_frame_info.locals_size = locals_size; + current_frame_info.args_size = args_size; + current_frame_info.reg_save_mask = reg_save_mask; + + return total_size; +} + +void +lm32_print_operand (FILE *file, rtx op, int letter) +{ + register enum rtx_code code; + + if (! op) + { + error ("PRINT_OPERAND null pointer"); + abort (); + } + + code = GET_CODE (op); + + if (code == SIGN_EXTEND) + op = XEXP (op, 0), code = GET_CODE (op); + else if (code == REG || code == SUBREG) + { + int regnum; + + if (code == REG) + regnum = REGNO (op); + else + regnum = true_regnum (op); + + if ( (letter == 'H' && !WORDS_BIG_ENDIAN) + || (letter == 'L' && WORDS_BIG_ENDIAN)) + { + abort(); + regnum++; + } + + fprintf (file, "%s", reg_names[regnum]); + } + else if (code == MEM) + output_address (XEXP (op, 0)); + else if (letter == 'z' && GET_CODE (op) == CONST_INT && INTVAL (op) == 0) + fprintf (file, "%s", reg_names[0]); + else if (GET_CODE (op) == CONST_DOUBLE) + { + if ((CONST_DOUBLE_LOW (op) != 0) || (CONST_DOUBLE_HIGH (op) != 0)) + output_operand_lossage ("Only 0.0 can be loaded as an immediate"); + else + fprintf (file, "0"); + } + else if (code == EQ) + fprintf (file, "e "); + else if (code == NE) + fprintf (file, "ne "); + else if (code == GT) + fprintf (file, "g "); + else if (code == GTU) + fprintf (file, "gu "); + else if (code == LT) + fprintf (file, "l "); + else if (code == LTU) + fprintf (file, "lu "); + else if (code == GE) + fprintf (file, "ge "); + else if (code == GEU) + fprintf (file, "geu"); + else if (code == LE) + fprintf (file, "le "); + else if (code == LEU) + fprintf (file, "leu"); + else + output_addr_const (file, op); +} + +/* A C compound statement to output to stdio stream STREAM the + assembler syntax for an instruction operand that is a memory + reference whose address is ADDR. ADDR is an RTL expression. + + On some machines, the syntax for a symbolic address depends on + the section that the address refers to. On these machines, + define the macro `ENCODE_SECTION_INFO' to store the information + into the `symbol_ref', and then check for it here. */ + +void +lm32_print_operand_address (FILE *file, rtx addr) +{ + switch (GET_CODE (addr)) + { + case REG: + fprintf (file, "(%s+0)", reg_names [REGNO (addr)]); + break; + + case MEM: + output_address (XEXP (addr, 0)); + break; + + case PLUS: + { + rtx arg0 = XEXP (addr, 0); + rtx arg1 = XEXP (addr, 1); + + if (GET_CODE (arg0) == REG && CONSTANT_P (arg1)) + { + if (GET_CODE(arg1) == CONST_INT) + fprintf (file, "(%s+%ld)", reg_names [REGNO (arg0)], INTVAL (arg1)); + else + { + fprintf (file, "(%s+", reg_names [REGNO (arg0)]); + output_addr_const (file, arg1); + fprintf (file, ")"); + } + } + else if (CONSTANT_P (arg0) && CONSTANT_P (arg1)) + output_addr_const (file, addr); + else + abort_with_insn (addr, "bad operand"); + } + break; + + case SYMBOL_REF: + if (SYMBOL_REF_SMALL_P (addr)) + { + fprintf (file, "gp("); + output_addr_const (file, addr); + fprintf (file, ")"); + } + else + abort_with_insn (addr, "can't use non gp relative absolute address"); + break; + + default: + abort_with_insn (addr, "invalid addressing mode"); + break; + } +} + +/* Determine where to put an argument to a function. + Value is zero to push the argument on the stack, + or a hard register in which to store the argument. + + MODE is the argument's machine mode. + TYPE is the data type of the argument (as a tree). + This is null for libcalls where that information may + not be available. + CUM is a variable of type CUMULATIVE_ARGS which gives info about + the preceding args and about the function being called. + NAMED is nonzero if this argument is a named parameter + (otherwise it is an extra parameter matching an ellipsis). */ + +rtx +lm32_function_arg (CUMULATIVE_ARGS cum, enum machine_mode mode, + tree type, int named) +{ + if (mode == VOIDmode) + /* Compute operand 2 of the call insn. */ + return GEN_INT (0); + + if (targetm.calls.must_pass_in_stack (mode, type)) + return NULL_RTX; + + if (!named || (cum + LM32_NUM_REGS2(mode, type) > LM32_NUM_ARG_REGS)) + return NULL_RTX; + + return gen_rtx_REG (mode, cum + LM32_FIRST_ARG_REG); +} + +HOST_WIDE_INT +lm32_compute_initial_elimination_offset (int from, int to) +{ + HOST_WIDE_INT offset = 0; + + switch (from) + { + /*case FRAME_POINTER_REGNUM: - Same as ARG_POINTER_REGNUM */ + case ARG_POINTER_REGNUM: + switch (to) + { + case FRAME_POINTER_REGNUM: + offset = 0; + break; + case STACK_POINTER_REGNUM: + offset = lm32_compute_frame_size (get_frame_size ()) - current_frame_info.pretend_size; + break; + default: + abort (); + } + break; + default: + abort (); + } + + return offset; +} + +static void +lm32_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode, + tree type, int *pretend_size, int no_rtl) +{ + int first_anon_arg; + tree fntype; + int stdarg_p; + + fntype = TREE_TYPE (current_function_decl); + stdarg_p = (TYPE_ARG_TYPES (fntype) != 0 + && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) + != void_type_node)); + + if (stdarg_p) + first_anon_arg = *cum + LM32_FIRST_ARG_REG; + else + { + /* this is the common case, we have been passed details setup + for the last named argument, we want to skip over the + registers, if any used in passing this named paramter in + order to determine which is the first registers used to pass + anonymous arguments */ + int size; + + if (mode==BLKmode) + size = int_size_in_bytes (type); + else + size = GET_MODE_SIZE (mode); + + first_anon_arg = *cum + LM32_FIRST_ARG_REG + ((size + UNITS_PER_WORD - 1) / UNITS_PER_WORD); + } + + if ((first_anon_arg < (LM32_FIRST_ARG_REG + LM32_NUM_ARG_REGS)) && !no_rtl) + { + int first_reg_offset = first_anon_arg; + int size = LM32_FIRST_ARG_REG + LM32_NUM_ARG_REGS - first_anon_arg; + rtx regblock; + + regblock = gen_rtx_MEM (BLKmode, + plus_constant (arg_pointer_rtx, + FIRST_PARM_OFFSET (0))); + move_block_from_reg (first_reg_offset, regblock, size); + + *pretend_size = size * UNITS_PER_WORD; + } +} + +/* Abort after printing out a specific insn. */ +static void +abort_with_insn (rtx insn, const char *reason) +{ + error (reason); + debug_rtx (insn); + abort (); +} + +/* Override command line options */ +void +lm32_override_options (void) +{ + /* We must have sign-extend enabled if barrel-shift isn't */ + if (!MASK_BARREL_SHIFT_ENABLED) + { + warning (0, "neither -mbarrel-shift-enabled nor -msign-extend-enabled specified. Assuming -msign-extend-enabled"); + target_flags |= MASK_SIGN_EXTEND_ENABLED; + } +} + +/* Return nonzero if this function is known to have a null epilogue. + This allows the optimizer to omit jumps to jumps if no stack + was created. */ +int +lm32_can_use_return (void) +{ + if (!reload_completed) + return 0; + + if (df_regs_ever_live_p(RA_REGNUM) || crtl->profile) + return 0; + + if (lm32_compute_frame_size (get_frame_size ()) != 0) + return 0; + + return 1; +} + +/* Support function to determine the return address of the function + 'count' frames back up the stack. */ +rtx +lm32_return_addr_rtx (int count, rtx frame) +{ + rtx r; + if (count == 0) + { + /* *mjs* This test originally used leaf_function_p (), we now use + the regs_ever_live test which I *think* is more accurate. */ + if (!df_regs_ever_live_p(RA_REGNUM)) + { + r = gen_rtx_REG (Pmode, RA_REGNUM); + } + else + { + r = gen_rtx_MEM (Pmode, + gen_rtx_PLUS (Pmode, frame, + GEN_INT(- 2 * UNITS_PER_WORD))); + set_mem_alias_set (r, get_frame_alias_set ()); + } + } + else if (flag_omit_frame_pointer) + r = NULL_RTX; + else + { + r = gen_rtx_MEM (Pmode, + gen_rtx_PLUS (Pmode, frame, + GEN_INT(- 2 * UNITS_PER_WORD))); + set_mem_alias_set (r, get_frame_alias_set ()); + } + return r; +} + +/* Return true if EXP should be placed in the small data section. */ + +static bool +lm32_in_small_data_p (const_tree exp) +{ + /* We want to merge strings, so we never consider them small data. */ + if (TREE_CODE (exp) == STRING_CST) + return false; + + /* Functions are never in the small data area. Duh. */ + if (TREE_CODE (exp) == FUNCTION_DECL) + return false; + + if (TREE_CODE (exp) == VAR_DECL && DECL_SECTION_NAME (exp)) + { + const char *section = TREE_STRING_POINTER (DECL_SECTION_NAME (exp)); + if (strcmp (section, ".sdata") == 0 + || strcmp (section, ".sbss") == 0) + return true; + } + else + { + HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); + + /* If this is an incomplete type with size 0, then we can't put it + in sdata because it might be too big when completed. */ + if (size > 0 && (unsigned HOST_WIDE_INT) size <= g_switch_value) + return true; + } + + return false; +} + +/* Emit straight-line code to move LENGTH bytes from SRC to DEST. + Assume that the areas do not overlap. */ + +static void +lm32_block_move_inline (rtx dest, rtx src, HOST_WIDE_INT length, HOST_WIDE_INT alignment) +{ + HOST_WIDE_INT offset, delta; + unsigned HOST_WIDE_INT bits; + int i; + enum machine_mode mode; + rtx *regs; + + /* Work out how many bits to move at a time. */ + switch (alignment) + { + case 1: + bits = 8; + break; + case 2: + bits = 16; + break; + case 4: + bits = 32; + break; + default: + abort (); + } + + mode = mode_for_size (bits, MODE_INT, 0); + delta = bits / BITS_PER_UNIT; + + /* Allocate a buffer for the temporary registers. */ + regs = alloca (sizeof (rtx) * length / delta); + + /* Load as many BITS-sized chunks as possible. */ + for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++) + { + regs[i] = gen_reg_rtx (mode); + emit_move_insn (regs[i], adjust_address (src, mode, offset)); + } + + /* Copy the chunks to the destination. */ + for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++) + emit_move_insn (adjust_address (dest, mode, offset), regs[i]); + + /* Mop up any left-over bytes. */ + if (offset < length) + { + src = adjust_address (src, BLKmode, offset); + dest = adjust_address (dest, BLKmode, offset); + move_by_pieces (dest, src, length - offset, + MIN (MEM_ALIGN (src), MEM_ALIGN (dest)), 0); + } +} + +/* Expand string/block move operations. + + operands[0] is the pointer to the destination. + operands[1] is the pointer to the source. + operands[2] is the number of bytes to move. + operands[3] is the alignment. */ + +int +lm32_expand_block_move (rtx *operands) +{ + if ((GET_CODE (operands[2]) == CONST_INT) && (INTVAL (operands[2]) <= 32)) + { + lm32_block_move_inline (operands[0], operands[1], INTVAL (operands[2]), INTVAL (operands[3])); + return 1; + } + return 0; +} + +/* Return TRUE if X references a SYMBOL_REF or LABEL_REF whose symbol + isn't protected by a PIC unspec. */ +int +nonpic_symbol_mentioned_p (rtx x) +{ + register const char *fmt; + register int i; + + if (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF + || GET_CODE (x) == PC) + return 1; + + /* We don't want to look into the possible MEM location of a + CONST_DOUBLE, since we're not going to use it, in general. */ + if (GET_CODE (x) == CONST_DOUBLE) + return 0; + + if (GET_CODE (x) == UNSPEC) + return 0; + + fmt = GET_RTX_FORMAT (GET_CODE (x)); + for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) + { + if (fmt[i] == 'E') + { + register int j; + + for (j = XVECLEN (x, i) - 1; j >= 0; j--) + if (nonpic_symbol_mentioned_p (XVECEXP (x, i, j))) + return 1; + } + else if (fmt[i] == 'e' && nonpic_symbol_mentioned_p (XEXP (x, i))) + return 1; + } + + return 0; +} diff -Naur gcc-4.4.2.orig/gcc/config/lm32/lm32.h gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.h --- gcc-4.4.2.orig/gcc/config/lm32/lm32.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.h 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,657 @@ +/* Definitions of target machine for GNU compiler, Lattice Mico32 architecture. + Contributed by Jon Beniston + + Copyright (C) 2008 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 + . */ + +/*-------------------------------*/ +/* Run-time Target Specification */ +/*-------------------------------*/ + +/* Print subsidiary information on the compiler version in use. */ +#ifndef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (LatticeMico32)") +#endif + +/* Target CPU builtins. */ +#define TARGET_CPU_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__lm32__"); \ + builtin_define_std ("lm32"); \ + builtin_assert ("cpu=lm32"); \ + builtin_assert ("machine=lm32"); \ + } \ + while (0) + +#define CPP_SPEC "\ +%{mmultiply-enabled:-D__multiply_enabled__} \ +%{mdivide-enabled:-D__divide_enabled__} \ +%{mbarrel-shift-enabled:-D__barrel_shift_enabled__} \ +%{msign-extend-enabled:-D__sign_extend_enabled__} \ +%{muser-enabled:-D__user_enabled__} \ +" + +#undef ASM_SPEC +#define ASM_SPEC "\ +%{mmultiply-enabled} \ +%{mdivide-enabled} \ +%{mbarrel-shift-enabled} \ +%{msign-extend-enabled} \ +%{muser-extend-enabled} \ +%{v} \ +" + +/* Let link script define all link options. + Default to using simulator link script. */ + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC "" +#undef ENDFILE_SPEC +#define ENDFILE_SPEC "" +#undef LIB_SPEC +#define LIB_SPEC "%{!T*:-T sim.ld}" + +#define OVERRIDE_OPTIONS lm32_override_options() + +extern int target_flags; + +/* Add -G xx support. */ + +#undef SWITCH_TAKES_ARG +#define SWITCH_TAKES_ARG(CHAR) \ +(DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G') + +#undef CC1_SPEC +#define CC1_SPEC "%{G*}" + +extern struct rtx_def *lm32_compare_op0; +extern struct rtx_def *lm32_compare_op1; + +/*---------------------------------*/ +/* Target machine storage layout. */ +/*---------------------------------*/ + +#define BITS_BIG_ENDIAN 0 +#define BYTES_BIG_ENDIAN 1 +#define WORDS_BIG_ENDIAN 1 +#define LIBGCC2_WORDS_BIG_ENDIAN 1 + +#define BITS_PER_UNIT 8 +#define BITS_PER_WORD 32 +#define UNITS_PER_WORD 4 + +#define POINTER_SIZE 32 + +#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ +do { \ + if (GET_MODE_CLASS (MODE) == MODE_INT \ + && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \ + (MODE) = word_mode; \ +} while (0) + +#define PARM_BOUNDARY 32 + +#define STACK_BOUNDARY 32 + +#define BIGGEST_ALIGNMENT 64 + +#define FUNCTION_BOUNDARY 32 + +#define EMPTY_FIELD_BOUNDARY 32 + +#define STRICT_ALIGNMENT 1 + +#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT + +/* Make strings word-aligned so strcpy from constants will be faster. */ +#define CONSTANT_ALIGNMENT(EXP, ALIGN) \ + (TREE_CODE (EXP) == STRING_CST \ + && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) + +/* Make arrays and structures word-aligned to allow faster copying etc. */ +#define DATA_ALIGNMENT(TYPE, ALIGN) \ + ((((ALIGN) < BITS_PER_WORD) \ + && (TREE_CODE (TYPE) == ARRAY_TYPE \ + || TREE_CODE (TYPE) == UNION_TYPE \ + || TREE_CODE (TYPE) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN)) + +/* We need this for the same reason as DATA_ALIGNMENT, namely to cause + character arrays to be word-aligned so that `strcpy' calls that copy + constants to character arrays can be done inline, and 'strcmp' can be + optimised to use word loads. */ +#define LOCAL_ALIGNMENT(TYPE, ALIGN) \ + DATA_ALIGNMENT (TYPE, ALIGN) + +/*----------------------------------------*/ +/* Layout of source language data types. */ +/*----------------------------------------*/ + +#define INT_TYPE_SIZE 32 +#define SHORT_TYPE_SIZE 16 +#define LONG_TYPE_SIZE 32 +#define LONG_LONG_TYPE_SIZE 64 + +#define FLOAT_TYPE_SIZE 32 +#define DOUBLE_TYPE_SIZE 64 +#define LONG_DOUBLE_TYPE_SIZE 64 + +#define DEFAULT_SIGNED_CHAR 0 + +#define SIZE_TYPE "unsigned int" + +#define PTRDIFF_TYPE "int" + +/*---------------------------*/ +/* Standard register usage. */ +/*---------------------------*/ + +#define FIRST_PSEUDO_REGISTER 32 + +#define RV_REGNUM 1 +#define GP_REGNUM 26 +#define FP_REGNUM 27 +#define SP_REGNUM 28 +#define RA_REGNUM 29 + +#define G_REG_P(X) ((X)<32) +#define PSEUDO_REG_P(X) ((X)>=FIRST_PSEUDO_REGISTER) + +#define FIXED_REGISTERS \ +{ 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 1, 0, 1, 0, 1, 1} + +#define CALL_USED_REGISTERS \ +{ 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 1, 0, 1, 0, 1, 1} + +#define HARD_REGNO_NREGS(REGNO, MODE) \ + ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) + +#define HARD_REGNO_MODE_OK(REGNO, MODE) G_REG_P(REGNO) + +#define MODES_TIEABLE_P(MODE1, MODE2) \ +( GET_MODE_CLASS (MODE1) == MODE_INT \ + && GET_MODE_CLASS (MODE2) == MODE_INT \ + && GET_MODE_SIZE (MODE1) <= UNITS_PER_WORD \ + && GET_MODE_SIZE (MODE2) <= UNITS_PER_WORD) + +#define AVOID_CCMODE_COPIES + +/*----------------------------------*/ +/* Register classes and constants. */ +/*----------------------------------*/ + +enum reg_class { + NO_REGS, + GENERAL_REGS, + ALL_REGS, + LIM_REG_CLASSES +}; + +#define N_REG_CLASSES (int) LIM_REG_CLASSES + +#define REG_CLASS_NAMES { "NO_REGS", "GENERAL_REGS", "ALL_REGS" } + +#define REG_CLASS_CONTENTS \ +{ {0x00000000}, \ + {0xffffffff}, \ + {0xffffffff} \ +} + +#define REGNO_REG_CLASS(REGNO) \ + (G_REG_P(REGNO) ? GENERAL_REGS : NO_REGS) + +#define CLASS_MAX_NREGS(CLASS, MODE) \ + ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) + +#define INDEX_REG_CLASS NO_REGS + +#define BASE_REG_CLASS GENERAL_REGS + +#define REG_CLASS_FROM_LETTER(C) NO_REGS + +#ifdef REG_OK_STRICT +#define REGNO_OK_FOR_BASE_P(REGNO) \ +(G_REG_P (REGNO) || G_REG_P (reg_renumber[REGNO])) +#else +#define REGNO_OK_FOR_BASE_P(REGNO) \ +(G_REG_P (REGNO) || PSEUDO_REG_P (REGNO)) +#endif + +#define REGNO_OK_FOR_INDEX_P(REGNO) 0 + +#define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS) + +/* The letters I, J, K, L, M, N, O, P in a register constraint string + can be used to stand for particular ranges of immediate operands. + This macro defines what the ranges are. + C is the letter, and VALUE is a constant value. + Return 1 if VALUE is in the range specified by C. + + Lattice usage: + + J - 0 + K - 16-bit signed + L - 16-bit unsigned + M - 32-bit signed + */ +#define MEDIUM_INT(X) ((((HOST_WIDE_INT)(X)) >= -32768) && (((HOST_WIDE_INT)(X)) < 32768)) +#define MEDIUM_UINT(X) (((unsigned HOST_WIDE_INT)(X)) < 65536) +#define LARGE_INT(X) \ +((X) >= (-(HOST_WIDE_INT) 0x7fffffff - 1) \ + && (X) <= (unsigned HOST_WIDE_INT) 0xffffffff) + +#define CONST_OK_FOR_LETTER_P(VALUE, C) \ +( (C) == 'J' ? (VALUE) == 0 \ + : (C) == 'K' ? MEDIUM_INT (VALUE) \ + : (C) == 'L' ? MEDIUM_UINT (VALUE) \ + : (C) == 'M' ? LARGE_INT (VALUE) \ + : 0 \ +) + +#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0 + +/*----------------------------------------*/ +/* Stack Layout and Calling Conventions. */ +/*----------------------------------------*/ + +#define STACK_GROWS_DOWNWARD 1 + +#define FRAME_GROWS_DOWNWARD 1 + +#define STACK_POINTER_OFFSET (UNITS_PER_WORD) + +#define STARTING_FRAME_OFFSET (UNITS_PER_WORD) + +#define FIRST_PARM_OFFSET(FNDECL) (UNITS_PER_WORD) + +#define STACK_POINTER_REGNUM SP_REGNUM + +#define FRAME_POINTER_REGNUM FP_REGNUM + +#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM + +#define FRAME_POINTER_REQUIRED (cfun->calls_alloca) + +#define RETURN_ADDR_RTX(count, frame) \ + lm32_return_addr_rtx (count, frame) + +/* FIXME! */ +#define STATIC_CHAIN_REGNUM 3 + +#define ELIMINABLE_REGS \ +{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM }, \ + { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM }, \ +} + +#define CAN_ELIMINATE(FROM, TO) \ + (((TO) == STACK_POINTER_REGNUM && frame_pointer_needed) ? 0 : 1) + +#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ + (OFFSET) = lm32_compute_initial_elimination_offset (FROM, TO) + +/*-----------------------------*/ +/* Function argument passing. */ +/*-----------------------------*/ + +#define ACCUMULATE_OUTGOING_ARGS 1 + +#define RETURN_POPS_ARGS(DECL, FUNTYPE, SIZE) 0 + +/*--------------------------------*/ +/* Passing Arguments in Registers */ +/*--------------------------------*/ + +/* The first argument register */ +#define LM32_FIRST_ARG_REG 1 + +/* The number of (integer) argument register available. */ +#define LM32_NUM_ARG_REGS 8 + +#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ + lm32_function_arg ((CUM), (MODE), (TYPE), (NAMED)) + +#define CUMULATIVE_ARGS int + +#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT,N_NAMED_ARGS) \ + (CUM) = 0 + +#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ + (CUM) += LM32_NUM_REGS2 (MODE, TYPE) + +#define FUNCTION_ARG_REGNO_P(r) (((r) >= 1) && ((r) <= LM32_NUM_ARG_REGS)) + +/*--------------------*/ +/* Function results. */ +/*--------------------*/ + +#define FUNCTION_VALUE(VALTYPE, FUNC) \ + gen_rtx_REG ((INTEGRAL_TYPE_P (VALTYPE) \ + && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \ + ? word_mode \ + : TYPE_MODE (VALTYPE), \ + RV_REGNUM) + +#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, RV_REGNUM) + +#define FUNCTION_VALUE_REGNO_P(N) ((N) == RV_REGNUM) + +#define RETURN_IN_MEMORY(TYPE) lm32_return_in_memory (TYPE) + +#define DEFAULT_PCC_STRUCT_RETURN 0 + +/* Convert from bytes to ints. */ +#define LM32_NUM_INTS(X) (((X) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) + +/* The number of (integer) registers required to hold a quantity of + type MODE. */ +#define LM32_NUM_REGS(MODE) LM32_NUM_INTS (GET_MODE_SIZE (MODE)) + +/* The number of (integer) registers required to hold a quantity of + TYPE MODE. */ +#define LM32_NUM_REGS2(MODE, TYPE) \ + LM32_NUM_INTS ((MODE) == BLKmode ? \ + int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) + +#define STRUCT_VALUE 0 + +/*---------------------------*/ +/* Function entry and exit. */ +/*---------------------------*/ + +/*-------------*/ +/* Profiling. */ +/*-------------*/ + +#define FUNCTION_PROFILER(FILE, LABELNO) + +/*---------------*/ +/* Trampolines. */ +/*---------------*/ + +#define INITIALIZE_TRAMPOLINE +#define TRAMPOLINE_SIZE 0 + +/*---------------------*/ +/* Addressing Modes. */ +/*---------------------*/ + +#define CONSTANT_ADDRESS_P(X) \ + ((GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ + || GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH \ + || (GET_CODE (X) == CONST))) + +#define MAX_REGS_PER_ADDRESS 1 + +#ifdef REG_OK_STRICT +#define REG_OK_FOR_FRAME_PTR_P(X) (REGNO (X) == FRAME_POINTER_REGNUM) +#else +#define REG_OK_FOR_FRAME_PTR_P(X) (REGNO (X) == FRAME_POINTER_REGNUM) +#endif + +#define RTX_OK_FOR_BASE_P(X) (REG_P (X) && REG_OK_FOR_BASE_P (X)) +#define RTX_OK_FOR_STACK_P(X) (REG_P (X) && (REGNO (X) == STACK_POINTER_REGNUM)) +#define CONST_OK_FOR_BASE_OFFSET(X, MODE) const_ok_for_base_offset ((X), (MODE)) + +#define LEGITIMATE_BASE_INDEX_P(ADDR, MODE) \ +( GET_CODE (ADDR)==PLUS \ + && RTX_OK_FOR_BASE_P (XEXP (ADDR, 0)) \ + && GET_CODE (XEXP (ADDR, 1)) == CONST_INT \ + && CONST_OK_FOR_BASE_OFFSET (XEXP ((ADDR), 1), (MODE))) + +#define LEGITIMATE_GPREL_P(ADDR) \ +( GET_CODE (ADDR) == SYMBOL_REF \ + && SYMBOL_REF_SMALL_P (ADDR)) + +#ifdef REG_OK_STRICT +#define REG_OK_FOR_BASE_P(X) (G_REG_P (REGNO (X))) +#else +#define REG_OK_FOR_BASE_P(X) (G_REG_P (REGNO (X)) || PSEUDO_REG_P (REGNO (X))) +#endif + +#ifdef REG_OK_STRICT +#define REG_OK_FOR_INDEX_P(X) (G_REG_P (REGNO (X))) +#else +#define REG_OK_FOR_INDEX_P(X) (G_REG_P (REGNO (X)) || PSEUDO_REG_P (REGNO (X))) +#endif + +#define GO_IF_LEGITIMATE_ADDRESS(m,x,l) \ +{ \ + if (RTX_OK_FOR_BASE_P (x)) goto l; /* (rM) */ \ + else if (LEGITIMATE_BASE_INDEX_P (x, m)) goto l; /* (rM)+literal) */ \ + else if (LEGITIMATE_GPREL_P (x)) goto l; \ +} + +#define ARM_LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ +do { \ + if (flag_pic) \ + X = lm32_legitimize_pic_address (OLDX, MODE, NULL_RTX); \ +} while (0) + +#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \ + if (GET_CODE (ADDR) == PLUS) goto LABEL; \ + +#define LEGITIMATE_CONSTANT_P(X) 1 + +/*-------------------------*/ +/* Condition Code Status. */ +/*-------------------------*/ + +#define REVERSIBLE_CC_MODE(MODE) 1 + +/*---------*/ +/* Costs. */ +/*---------*/ + +#define SLOW_BYTE_ACCESS 1 + +#define NO_FUNCTION_CSE + +#define BRANCH_COST(speed_p, predictable_p) 4 + +#define MOVE_RATIO(speed) (speed ? 24 : 3) + +/*------------*/ +/* Sections. */ +/*------------*/ + +#define TEXT_SECTION_ASM_OP "\t.section\t.text" +#define DATA_SECTION_ASM_OP "\t.section\t.data" +#define SDATA_SECTION_ASM_OP "\t.section\t.sdata,\"aw\"" +#define BSS_SECTION_ASM_OP "\t.section\t.bss" +#define SBSS_SECTION_ASM_OP "\t.section\t.sbss,\"aw\"" + +/*-------*/ +/* PIC. */ +/*-------*/ + +#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? GP_REGNUM : INVALID_REGNUM) + +#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) + +#define LEGITIMATE_PIC_OPERAND_P(X) \ + (!(nonpic_symbol_mentioned_p (X))) + +/*-------------*/ +/* Assembler. */ +/*-------------*/ + +#define ASM_COMMENT_START "#" + +#define ASM_APP_ON "#APP\n" + +#define ASM_APP_OFF "#NO_APP\n" + +#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ + do { \ + fputc ( '\t', FILE); \ + assemble_name (FILE, LABEL1); \ + fputs ( " = ", FILE); \ + assemble_name (FILE, LABEL2); \ + fputc ( '\n', FILE); \ + } while (0) + +/* Override default implementation in elfos.h to support -G. */ +#undef ASM_OUTPUT_ALIGNED_LOCAL +#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ +do { \ + if ((SIZE) <= g_switch_value) \ + switch_to_section (sbss_section); \ + else \ + switch_to_section (bss_section); \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ + if (!flag_inhibit_size_directive) \ + ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ + ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT)); \ + ASM_OUTPUT_LABEL(FILE, NAME); \ + ASM_OUTPUT_SKIP((FILE), (SIZE) ? (SIZE) : 1); \ +} while (0) + +/* Override default implementation in elfos.h to support -G. */ +#undef ASM_OUTPUT_ALIGNED_COMMON +#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ +do \ +{ \ + if ((SIZE) <= g_switch_value) \ + { \ + switch_to_section (sbss_section); \ + (*targetm.asm_out.globalize_label) (FILE, NAME); \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ + if (!flag_inhibit_size_directive) \ + ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ + ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT)); \ + ASM_OUTPUT_LABEL(FILE, NAME); \ + ASM_OUTPUT_SKIP((FILE), (SIZE) ? (SIZE) : 1); \ + } \ + else \ + { \ + switch_to_section (bss_section); \ + 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) + +#define ASM_OUTPUT_LABEL(FILE, NAME) \ + do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0) + +#define ASM_OUTPUT_LABELREF(FILE,NAME) \ + do { \ + const char *xname = (NAME); \ + if (xname[0] == '@') \ + xname += 1; \ + if (xname[0] == '*') \ + xname += 1; \ + fputs (xname, FILE); \ + } while (0) + +#define ASM_OUTPUT_SYMBOL_REF(STREAM, SYMBOL) \ + do { \ + assemble_name (STREAM, XSTR (SYMBOL, 0)); \ + } while (0) + +#define GLOBAL_ASM_OP "\t.global\t" + +#define REGISTER_NAMES \ +{ \ + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \ + "r24", "r25", "gp", "fp", "sp", "ra", "ea", "ba"} + +#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \ + (((CHAR) == '&') || ((CHAR) == '@') || ((CHAR) == '*')) + +#define PRINT_OPERAND(FILE, X, CODE) \ + lm32_print_operand (FILE, X, CODE) + +#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ + lm32_print_operand_address (FILE, ADDR) + +#ifndef LOCAL_LABEL_PREFIX +#define LOCAL_LABEL_PREFIX "." +#endif + +#define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", (1 << (LOG))); } while (0) + +#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ +do { \ + char label[64]; \ + ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \ + fprintf (FILE, "\n\t.word\t"); \ + assemble_name (FILE, label); \ + fprintf (FILE, "\n"); \ +} while (0) + +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ +do { \ + char label[64]; \ + fprintf (FILE, "\t.word\t("); \ + ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \ + assemble_name (FILE, label); \ + fprintf (FILE, "-"); \ + ASM_GENERATE_INTERNAL_LABEL (label, "L", REL); \ + assemble_name (FILE, label); \ + fprintf (FILE, ")\n"); \ +} while (0) + +/*-------------*/ +/* Debugging. */ +/*-------------*/ + +#define DBX_REGISTER_NUMBER(REGNO) (REGNO) + +#define CAN_DEBUG_WITHOUT_FP + +#define DEFAULT_GDB_EXTENSIONS 1 + +/*--------*/ +/* Misc. */ +/*--------*/ + +#define CASE_VECTOR_MODE Pmode + +#define WORD_REGISTER_OPERATIONS + +#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND + +#define SHORT_IMMEDIATES_SIGN_EXTEND + +#define MOVE_MAX UNITS_PER_WORD +#define MAX_MOVE_MAX 4 + +#define SHIFT_COUNT_TRUNCATED 1 + +#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 + +#define Pmode SImode + +#define FUNCTION_MODE SImode + +#ifndef NO_IMPLICIT_EXTERN_C +#define NO_IMPLICIT_EXTERN_C +#endif + +#define STORE_FLAG_VALUE 1 diff -Naur gcc-4.4.2.orig/gcc/config/lm32/lm32.md gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.md --- gcc-4.4.2.orig/gcc/config/lm32/lm32.md 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.md 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,1233 @@ +;; Machine description of the Lattice Mico32 architecture for GNU C compiler. +;; Contributed by Jon Beniston + +;; 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 +;; . + +;; Include predicate definitions +(include "predicates.md") + +;; Register numbers +(define_constants + [(RA_REGNUM 29) ; return address register. + ] +) + +;; LM32 specific volatile operations +(define_constants + [(UNSPECV_BLOCKAGE 1)] ; use to prevent scheduler from optimising accross bounaries +) + +;; LM32 specific operations +(define_constants + [(UNSPEC_GOT 2) + (UNSPEC_GOTOFF_HI16 3) + (UNSPEC_GOTOFF_LO16 4)] +) + +;; --------------------------------- +;; instruction types +;; --------------------------------- + +(define_attr "type" + "unknown,load,store,arith,compare,shift,multiply,divide,call,icall,ubranch,uibranch,cbranch" + (const_string "unknown")) + +;; --------------------------------- +;; instruction lengths +;; --------------------------------- + +; All instructions are 4 bytes +; Except for branches that are out of range, and have to be implemented +; as two instructions +(define_attr "length" "" + (cond [ + (eq_attr "type" "cbranch") + (if_then_else + (lt (abs (minus (match_dup 2) (pc))) + (const_int 32768) + ) + (const_int 4) + (const_int 8) + ) + ] + (const_int 4)) +) + +;; --------------------------------- +;; scheduling +;; --------------------------------- + +(define_automaton "lm32") + +(define_cpu_unit "x" "lm32") +(define_cpu_unit "m" "lm32") +(define_cpu_unit "w" "lm32") + +(define_insn_reservation "singlecycle" 1 + (eq_attr "type" "store,arith,call,icall,ubranch,uibranch,cbranch") + "x") + +(define_insn_reservation "twocycle" 2 + (eq_attr "type" "compare,shift,divide") + "x,m") + +(define_insn_reservation "threecycle" 3 + (eq_attr "type" "load,multiply") + "x,m,w") + +;; --------------------------------- +;; mov +;; --------------------------------- + +(define_expand "movqi" + [(set (match_operand:QI 0 "general_operand" "") + (match_operand:QI 1 "general_operand" ""))] + "" + " +{ + if (can_create_pseudo_p ()) + { + if (GET_CODE (operand0) == MEM) + { + /* Source operand for store must be in a register */ + operands[1] = force_reg (QImode, operands[1]); + } + } + if ( GET_CODE (operands[1]) == CONST_INT + && GET_CODE (operands[0]) == REG) + { + operands[0] = gen_rtx_SUBREG (SImode, operands[0], 0); + emit_insn (gen_movsi (operands[0], operands[1])); + DONE; + } +}") + +(define_expand "movhi" + [(set (match_operand:HI 0 "general_operand" "") + (match_operand:HI 1 "general_operand" ""))] + "" + " +{ + if (can_create_pseudo_p ()) + { + if (GET_CODE (operands[0]) == MEM) + { + /* Source operand for store must be in a register */ + operands[1] = force_reg (HImode, operands[1]); + } + } + if (GET_CODE (operands[1]) == CONST_INT) + { + operands[0] = gen_rtx_SUBREG (SImode, operands[0], 0); + if (MEDIUM_INT (INTVAL (operands[1]))) + emit_insn (gen_movsi_kimm (operands[0], operands[1])); + else if (MEDIUM_UINT (INTVAL (operands[1]))) + emit_insn (gen_movsi_limm (operands[0], operands[1])); + else + { + emit_insn (gen_movsi_imm_hi (operands[0], GEN_INT (INTVAL (operands[1])))); + emit_insn (gen_movsi_imm_lo (operands[0], operands[0], GEN_INT (INTVAL (operands[1])))); + } + DONE; + } +}") + +(define_expand "movsi" + [(set (match_operand:SI 0 "general_operand" "") + (match_operand:SI 1 "general_operand" ""))] + "" + " +{ + if (can_create_pseudo_p ()) + { + if (GET_CODE (operands[0]) == MEM + || (GET_CODE (operands[0]) == SUBREG + && GET_CODE (SUBREG_REG (operands[0])) == MEM)) + { + /* Source operand for store must be in a register */ + operands[1] = force_reg (SImode, operands[1]); + } + } + + if (flag_pic && symbolic_operand (operands[1], SImode)) + { + if (GET_CODE (operands[1]) == LABEL_REF + || (GET_CODE (operands[1]) == SYMBOL_REF + && SYMBOL_REF_LOCAL_P (operands[1]) + && !SYMBOL_REF_WEAK (operands[1]))) + { + emit_insn (gen_movsi_gotoff_hi16 (operands[0], operands[1])); + emit_insn (gen_addsi3 (operands[0], operands[0], pic_offset_table_rtx)); + emit_insn (gen_movsi_gotoff_lo16 (operands[0], operands[0], operands[1])); + } + else + { + emit_insn (gen_movsi_got (operands[0], operands[1])); + } + crtl->uses_pic_offset_table = 1; + DONE; + } + else if (flag_pic && GET_CODE (operands[1]) == CONST) + { + rtx op = XEXP (operands[1], 0); + if (GET_CODE (op) == PLUS) + { + rtx arg0 = XEXP (op, 0); + rtx arg1 = XEXP (op, 1); + if (GET_CODE (arg0) == LABEL_REF + || (GET_CODE (arg0) == SYMBOL_REF + && SYMBOL_REF_LOCAL_P (arg0) + && !SYMBOL_REF_WEAK (arg0))) + { + emit_insn (gen_movsi_gotoff_hi16 (operands[0], arg0)); + emit_insn (gen_addsi3 (operands[0], operands[0], pic_offset_table_rtx)); + emit_insn (gen_movsi_gotoff_lo16 (operands[0], operands[0], arg0)); + } + else + { + emit_insn (gen_movsi_got (operands[0], arg0)); + } + emit_insn (gen_addsi3 (operands[0], operands[0], arg1)); + crtl->uses_pic_offset_table = 1; + DONE; + } + } + else if (!flag_pic && ( GET_CODE (operands[1]) == SYMBOL_REF + && SYMBOL_REF_SMALL_P (operands[1]) + ) + ) + { + emit_insn (gen_movsi_reloc_gprel (operands[0], operands[1])); + DONE; + } + else if (!flag_pic && ( GET_CODE (operands[1]) == LABEL_REF + || GET_CODE (operands[1]) == SYMBOL_REF + || GET_CODE (operands[1]) == CONST + ) + ) + { + emit_insn (gen_movsi_reloc_hi (operands[0], operands[1])); + emit_insn (gen_movsi_reloc_lo (operands[0], operands[0], operands[1])); + DONE; + } + else if (GET_CODE (operands[1]) == CONST_INT) + { + if (MEDIUM_INT (INTVAL (operands[1]))) + emit_insn (gen_movsi_kimm (operands[0], operands[1])); + else if (MEDIUM_UINT (INTVAL (operands[1]))) + emit_insn (gen_movsi_limm (operands[0], operands[1])); + else + { + emit_insn (gen_movsi_imm_hi (operands[0], GEN_INT (INTVAL (operands[1])))); + emit_insn (gen_movsi_imm_lo (operands[0], operands[0], GEN_INT (INTVAL (operands[1])))); + } + DONE; + } +}") + +;;(define_expand "movmemsi" +;; [(parallel [(set (match_operand:BLK 0 "general_operand" "") +;; (match_operand:BLK 1 "general_operand" "")) +;; (use (match_operand:SI 2 "" "")) +;; (use (match_operand:SI 3 "const_int_operand" ""))])] +;; "" +;;{ +;; if (!lm32_expand_block_move (operands)) +;; FAIL; +;; DONE; +;;}) + +;; --------------------------------- +;; load/stores/moves +;; --------------------------------- + +(define_insn "movsi_kimm" + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "constant_K_operand" "K"))] + "" + "addi %0, r0, %1" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_limm" + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "constant_L_operand" "L"))] + "" + "ori %0, r0, %1" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_imm_hi" + [(set (match_operand:SI 0 "register_operand" "=r") + (high:SI (match_operand:SI 1 "immediate_operand" "i")))] + "" + "orhi %0, r0, hi(%1)" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_imm_lo" + [(set (match_operand:SI 0 "register_operand" "=r") + (lo_sum:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "immediate_operand" "i")))] + "" + "ori %0, %0, lo(%2)" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_reloc_gprel" + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "reloc_operand" "i"))] + "GET_CODE (operands[1]) == SYMBOL_REF && SYMBOL_REF_SMALL_P (operands[1])" + "mva %0, gp(%1)" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_got" + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec:SI [(match_operand 1 "" "")] UNSPEC_GOT))] + "flag_pic" + "lw %0, (gp+got(%1))" + [(set_attr "type" "load")] +) + +(define_insn "movsi_gotoff_hi16" + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec:SI [(match_operand 1 "" "")] UNSPEC_GOTOFF_HI16))] + "flag_pic" + "orhi %0, r0, gotoffhi16(%1)" + [(set_attr "type" "load")] +) + +(define_insn "movsi_gotoff_lo16" + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec:SI [(plus:SI (match_operand:SI 1 "register_operand" "0") + (match_operand 2 "" ""))] UNSPEC_GOTOFF_LO16))] + "flag_pic" + "addi %0, %1, gotofflo16(%2)" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_reloc_hi" + [(set (match_operand:SI 0 "register_operand" "=r") + (high:SI (match_operand:SI 1 "reloc_operand" "i")))] + "!flag_pic" + "orhi %0, r0, hi(%1)" + [(set_attr "type" "arith")] +) + +(define_insn "movsi_reloc_lo" + [(set (match_operand:SI 0 "register_operand" "=r") + (lo_sum:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "reloc_operand" "i")))] + "!flag_pic" + "ori %0, %0, lo(%2)" + [(set_attr "type" "arith")] +) + +(define_insn "*movqi_insn" + [(set (match_operand:QI 0 "register_or_memory_operand" "=r,r,m") + (match_operand:QI 1 "register_or_memory_operand" "m,r,r"))] + "" + "@ + lbu %0, %1 + or %0, %1, r0 + sb %0, %1" + [(set_attr "type" "load,arith,store")] +) + +(define_insn "*movhi_insn" + [(set (match_operand:HI 0 "register_or_memory_operand" "=r,r,m") + (match_operand:HI 1 "register_or_memory_operand" "m,r,r"))] + "" + "@ + lhu %0, %1 + or %0, %1, r0 + sh %0, %1" + [(set_attr "type" "load,arith,store")] +) + +(define_insn "*movsi_insn" + [(set (match_operand:SI 0 "register_or_memory_operand" "=r,r,m") + (match_operand:SI 1 "register_or_memory_operand" "m,r,r"))] + "" + "@ + lw %0, %1 + or %0, %1, r0 + sw %0, %1" + [(set_attr "type" "load,arith,store")] +) + +;; --------------------------------- +;; sign and zero extension +;; --------------------------------- + +(define_insn "*extendqihi2" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (sign_extend:HI (match_operand:QI 1 "register_or_memory_operand" "m,r")))] + "TARGET_SIGN_EXTEND_ENABLED || (GET_CODE (operands[1]) != REG)" + "@ + lb %0, %1 + sextb %0, %1" + [(set_attr "type" "load,arith")] +) + +(define_insn "zero_extendqihi2" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (zero_extend:HI (match_operand:QI 1 "register_or_memory_operand" "m,r")))] + "" + "@ + lbu %0, %1 + andi %0, %1, 0xff" + [(set_attr "type" "load,arith")] +) + +(define_insn "*extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (sign_extend:SI (match_operand:QI 1 "register_or_memory_operand" "m,r")))] + "TARGET_SIGN_EXTEND_ENABLED || (GET_CODE (operands[1]) != REG)" + "@ + lb %0, %1 + sextb %0, %1" + [(set_attr "type" "load,arith")] +) + +(define_insn "zero_extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (zero_extend:SI (match_operand:QI 1 "register_or_memory_operand" "m,r")))] + "" + "@ + lbu %0, %1 + andi %0, %1, 0xff" + [(set_attr "type" "load,arith")] +) + +(define_insn "*extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (sign_extend:SI (match_operand:HI 1 "register_or_memory_operand" "m,r")))] + "TARGET_SIGN_EXTEND_ENABLED || (GET_CODE (operands[1]) != REG)" + "@ + lh %0, %1 + sexth %0, %1" + [(set_attr "type" "load,arith")] +) + +(define_insn "zero_extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (zero_extend:SI (match_operand:HI 1 "register_or_memory_operand" "m,r")))] + "" + "@ + lhu %0, %1 + andi %0, %1, 0xffff" + [(set_attr "type" "load,arith")] +) + +;; --------------------------------- +;; compare +;; --------------------------------- + +(define_expand "cmpsi" + [(set (cc0) + (compare:CC (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "register_or_K_operand" "")))] + "" + " +{ + lm32_compare_op0 = operands[0]; + lm32_compare_op1 = operands[1]; + DONE; +}") + + +(define_expand "tstsi" + [(set (cc0) + (match_operand:SI 0 "register_operand" ""))] + "" + " +{ + lm32_compare_op0 = operands[0]; + lm32_compare_op1 = const0_rtx; + DONE; +}") + +(define_expand "seq" + [(set (match_operand:SI 0 "register_operand" "=r") + (eq:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (EQ, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_insn "*seq" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (eq:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,K")))] + "" + "@ + cmpe %0, %z1, %2 + cmpei %0, %z1, %2" + [(set_attr "type" "compare")] +) + +(define_expand "sne" + [(set (match_operand:SI 0 "register_operand" "=r") + (ne:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (NE, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_insn "*sne" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (ne:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,K")))] + "" + "@ + cmpne %0, %z1, %2 + cmpnei %0, %z1, %2" + [(set_attr "type" "compare")] +) + +(define_expand "sgt" + [(set (match_operand:SI 0 "register_operand" "=r") + (gt:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (GT, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_insn "*sgt" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (gt:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,K")))] + "" + "@ + cmpg %0, %z1, %2 + cmpgi %0, %z1, %2" + [(set_attr "type" "compare")] +) + +(define_expand "slt" + [(set (match_operand:SI 0 "register_operand" "=r") + (lt:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (LT, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_expand "sge" + [(set (match_operand:SI 0 "register_operand" "=r") + (ge:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (GE, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_insn "*sge" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (ge:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,K")))] + "" + "@ + cmpge %0, %z1, %2 + cmpgei %0, %z1, %2" + [(set_attr "type" "compare")] +) + +(define_expand "sle" + [(set (match_operand:SI 0 "register_operand" "=r") + (le:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (LE, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_expand "sgtu" + [(set (match_operand:SI 0 "register_operand" "=r") + (gtu:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (GTU, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_insn "*sgtu" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (gtu:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,L")))] + "" + "@ + cmpgu %0, %z1, %2 + cmpgui %0, %z1, %2" + [(set_attr "type" "compare")] +) + +(define_expand "sltu" + [(set (match_operand:SI 0 "register_operand" "=r") + (ltu:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (LTU, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_expand "sgeu" + [(set (match_operand:SI 0 "register_operand" "=r") + (geu:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (GEU, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +(define_insn "*sgeu" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (geu:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,L")))] + "" + "@ + cmpgeu %0, %z1, %2 + cmpgeui %0, %z1, %2" + [(set_attr "type" "compare")] +) + +(define_expand "sleu" + [(set (match_operand:SI 0 "register_operand" "=r") + (leu:SI (match_dup 1) + (match_dup 2)))] + "" +{ + operands[1] = lm32_compare_op0; + operands[2] = lm32_compare_op1; + gen_int_relational (LEU, operands[0], operands[1], operands[2], NULL_RTX); + DONE; +}) + +;; --------------------------------- +;; unconditional branch +;; --------------------------------- + +(define_insn "jump" + [(set (pc) (label_ref (match_operand 0 "" "")))] + "" + "bi %0" + [(set_attr "type" "ubranch")] +) + +(define_expand "indirect_jump" + [(set (pc) (match_operand 0 "register_operand" ""))] + "" + " +{ + emit_jump_insn (gen_indirect_jumpsi (operands[0])); + DONE; +}") + +(define_insn "indirect_jumpsi" + [(set (pc) (match_operand:SI 0 "register_operand" "r"))] + "" + "b %0" + [(set_attr "type" "uibranch")] +) + +;; --------------------------------- +;; conditional branch +;; --------------------------------- + +(define_expand "beq" + [(set (pc) + (if_then_else (eq:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (EQ, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bne" + [(set (pc) + (if_then_else (ne:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (NE, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bgt" + [(set (pc) + (if_then_else (gt:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (GT, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bge" + [(set (pc) + (if_then_else (ge:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (GE, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "ble" + [(set (pc) + (if_then_else (le:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (LE, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "blt" + [(set (pc) + (if_then_else (lt:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (LT, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bgtu" + [(set (pc) + (if_then_else (gtu:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (GTU, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bgeu" + [(set (pc) + (if_then_else (geu:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (GEU, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bleu" + [(set (pc) + (if_then_else (leu:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (LEU, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_expand "bltu" + [(set (pc) + (if_then_else (ltu:CC (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + " +{ + gen_int_relational (LTU, NULL_RTX, lm32_compare_op0, lm32_compare_op1, operands[0]); + DONE; +}") + +(define_insn "*beq" + [(set (pc) + (if_then_else (eq:SI (match_operand:SI 0 "register_or_zero_operand" "rJ") + (match_operand:SI 1 "register_or_zero_operand" "rJ")) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" +{ + return get_attr_length (insn) == 4 + ? "be %z0,%z1,%2" + : "bne %z0,%z1,8\n\tbi %2"; +} + [(set_attr "type" "cbranch")]) + +(define_insn "*bne" + [(set (pc) + (if_then_else (ne:SI (match_operand:SI 0 "register_or_zero_operand" "rJ") + (match_operand:SI 1 "register_or_zero_operand" "rJ")) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" +{ + return get_attr_length (insn) == 4 + ? "bne %z0,%z1,%2" + : "be %z0,%z1,8\n\tbi %2"; +} + [(set_attr "type" "cbranch")]) + +(define_insn "*bgt" + [(set (pc) + (if_then_else (gt:SI (match_operand:SI 0 "register_or_zero_operand" "rJ") + (match_operand:SI 1 "register_or_zero_operand" "rJ")) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" +{ + return get_attr_length (insn) == 4 + ? "bg %z0,%z1,%2" + : "bge %z1,%z0,8\n\tbi %2"; +} + [(set_attr "type" "cbranch")]) + +(define_insn "*bge" + [(set (pc) + (if_then_else (ge:SI (match_operand:SI 0 "register_or_zero_operand" "rJ") + (match_operand:SI 1 "register_or_zero_operand" "rJ")) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" +{ + return get_attr_length (insn) == 4 + ? "bge %z0,%z1,%2" + : "bg %z1,%z0,8\n\tbi %2"; +} + [(set_attr "type" "cbranch")]) + +(define_insn "*bgtu" + [(set (pc) + (if_then_else (gtu:SI (match_operand:SI 0 "register_or_zero_operand" "rJ") + (match_operand:SI 1 "register_or_zero_operand" "rJ")) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" +{ + return get_attr_length (insn) == 4 + ? "bgu %z0,%z1,%2" + : "bgeu %z1,%z0,8\n\tbi %2"; +} + [(set_attr "type" "cbranch")]) + +(define_insn "*bgeu" + [(set (pc) + (if_then_else (geu:SI (match_operand:SI 0 "register_or_zero_operand" "rJ") + (match_operand:SI 1 "register_or_zero_operand" "rJ")) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" +{ + return get_attr_length (insn) == 4 + ? "bgeu %z0,%z1,%2" + : "bgu %z1,%z0,8\n\tbi %2"; +} + [(set_attr "type" "cbranch")]) + +;; --------------------------------- +;; call +;; --------------------------------- + +(define_expand "call" + [(parallel [(call (match_operand 0 "memory_operand" "m") + (match_operand 1 "" "")) + (clobber (reg:SI RA_REGNUM)) + ])] + "" + " +{ + rtx addr = XEXP (operands[0], 0); + if (!CONSTANT_ADDRESS_P (addr)) + { + emit_call_insn (gen_call_via_regsi (addr, operands[1])); + DONE; + } +}") + +(define_insn "call_via_regsi" + [(call (mem:SI (match_operand:SI 0 "register_operand" "r")) + (match_operand 1 "" "")) + (clobber (reg:SI RA_REGNUM))] + "" + "call %0" + [(set_attr "type" "icall")] +) + +(define_insn "*call_via_labelsi" + [(call (mem:SI (match_operand:SI 0 "symbolic_operand" "X")) + (match_operand 1 "" "")) + (clobber (reg:SI RA_REGNUM))] + "" + "calli %0" + [(set_attr "type" "call")] +) + +(define_expand "call_value" + [(parallel [(set (match_operand 0 "register_operand" "=r") + (call (match_operand 1 "memory_operand" "m") + (match_operand 2 "" ""))) + (clobber (reg:SI RA_REGNUM)) + ])] + "" + " +{ + rtx addr = XEXP (operands[1], 0); + if (!CONSTANT_ADDRESS_P (addr)) + { + emit_call_insn (gen_call_value_via_regsi (operands[0], addr, operands[2])); + DONE; + } +}") + +(define_insn "call_value_via_regsi" + [(set (match_operand 0 "register_operand" "=r") + (call (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand 2 "" ""))) + (clobber (reg:SI RA_REGNUM))] + "" + "call %1" + [(set_attr "type" "icall")] +) + +(define_insn "*call_value_via_labelsi" + [(set (match_operand 0 "register_operand" "=r") + (call (mem:SI (match_operand:SI 1 "symbolic_operand" "X")) + (match_operand 2 "" ""))) + (clobber (reg:SI RA_REGNUM))] + "" + "calli %1" + [(set_attr "type" "call")] +) + +(define_insn "return_internalsi" + [(use (match_operand:SI 0 "register_operand" "r")) + (return)] + "" + "b %0" + [(set_attr "type" "uibranch")] +) + +(define_insn "return" + [(return)] + "lm32_can_use_return ()" + "ret" + [(set_attr "type" "uibranch")] +) + +;; --------------------------------- +;; switch/case statements +;; --------------------------------- + +(define_expand "tablejump" + [(set (pc) (match_operand 0 "register_operand" "")) + (use (label_ref (match_operand 1 "" "")))] + "" + " +{ + rtx target = operands[0]; + if (flag_pic) + { + /* For PIC, the table entry is relative to the start of the table. */ + rtx label = gen_reg_rtx (SImode); + target = gen_reg_rtx (SImode); + emit_move_insn (label, gen_rtx_LABEL_REF (SImode, operands[1])); + emit_insn (gen_addsi3 (target, operands[0], label)); + } + emit_jump_insn (gen_tablejumpsi (target, operands[1])); + DONE; +}") + +(define_insn "tablejumpsi" + [(set (pc) (match_operand:SI 0 "register_operand" "r")) + (use (label_ref (match_operand 1 "" "")))] + "" + "b %0" + [(set_attr "type" "ubranch")] +) + +;; --------------------------------- +;; arithmetic +;; --------------------------------- + +(define_insn "addsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (plus:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,K")))] + "" + "@ + add %0, %z1, %2 + addi %0, %z1, %2" + [(set_attr "type" "arith")] +) + +(define_insn "subsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (minus:SI (match_operand:SI 1 "register_or_zero_operand" "rJ") + (match_operand:SI 2 "register_or_zero_operand" "rJ")))] + "" + "sub %0, %z1, %z2" + [(set_attr "type" "arith")] +) + +(define_insn "mulsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (mult:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_K_operand" "r,K")))] + "TARGET_MULTIPLY_ENABLED" + "@ + mul %0, %z1, %2 + muli %0, %z1, %2" + [(set_attr "type" "multiply")] +) + +(define_insn "udivsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (udiv:SI (match_operand:SI 1 "register_or_zero_operand" "rJ") + (match_operand:SI 2 "register_operand" "r")))] + "TARGET_DIVIDE_ENABLED" + "divu %0, %z1, %2" + [(set_attr "type" "divide")] +) + +(define_insn "umodsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (umod:SI (match_operand:SI 1 "register_or_zero_operand" "rJ") + (match_operand:SI 2 "register_operand" "r")))] + "TARGET_DIVIDE_ENABLED" + "modu %0, %z1, %2" + [(set_attr "type" "divide")] +) + +;; --------------------------------- +;; negation and inversion +;; --------------------------------- + +(define_insn "negsi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (neg:SI (match_operand:SI 1 "register_or_zero_operand" "rJ")))] + "" + "sub %0, r0, %z1" + [(set_attr "type" "arith")] +) + +(define_insn "one_cmplsi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (not:SI (match_operand:SI 1 "register_or_zero_operand" "rJ")))] + "" + "not %0, %z1" + [(set_attr "type" "arith")] +) + +;; --------------------------------- +;; logical +;; --------------------------------- + +(define_insn "andsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (and:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L")))] + "" + "@ + and %0, %z1, %2 + andi %0, %z1, %2" + [(set_attr "type" "arith")] +) + +(define_insn "iorsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (ior:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L")))] + "" + "@ + or %0, %z1, %2 + ori %0, %z1, %2" + [(set_attr "type" "arith")] +) + +(define_insn "xorsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (xor:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L")))] + "" + "@ + xor %0, %z1, %2 + xori %0, %z1, %2" + [(set_attr "type" "arith")] +) + +(define_insn "*norsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (not:SI (ior:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L"))))] + "" + "@ + nor %0, %z1, %2 + nori %0, %z1, %2" + [(set_attr "type" "arith")] +) + +(define_insn "*xnorsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (not:SI (xor:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L"))))] + "" + "@ + xnor %0, %z1, %2 + xnori %0, %z1, %2" + [(set_attr "type" "arith")] +) + +;; --------------------------------- +;; shifts +;; --------------------------------- + +(define_insn "ashlsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (ashift:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L")))] + "TARGET_BARREL_SHIFT_ENABLED" + "@ + sl %0, %z1, %2 + sli %0, %z1, %2" + [(set_attr "type" "shift")] +) + +(define_insn "ashrsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (ashiftrt:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L")))] + "TARGET_BARREL_SHIFT_ENABLED" + "@ + sr %0, %z1, %2 + sri %0, %z1, %2" + [(set_attr "type" "shift")] +) + +(define_insn "lshrsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (lshiftrt:SI (match_operand:SI 1 "register_or_zero_operand" "rJ,rJ") + (match_operand:SI 2 "register_or_L_operand" "r,L")))] + "TARGET_BARREL_SHIFT_ENABLED" + "@ + sru %0, %z1, %2 + srui %0, %z1, %2" + [(set_attr "type" "shift")] +) + +;; --------------------------------- +;; function entry / exit +;; --------------------------------- + +(define_expand "prologue" + [(const_int 1)] + "" + " +{ + lm32_expand_prologue (); + DONE; +}") + +(define_expand "epilogue" + [(return)] + "" + " +{ + lm32_expand_epilogue (); + DONE; +}") + +;; --------------------------------- +;; nop +;; --------------------------------- + +(define_insn "nop" + [(const_int 0)] + "" + "nop" + [(set_attr "type" "arith")] +) + +;; --------------------------------- +;; blockage +;; --------------------------------- + +;; used to stop the scheduler from +;; scheduling code across certain boundaries + +(define_insn "blockage" + [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)] + "" + "" + [(set_attr "length" "0")] +) + diff -Naur gcc-4.4.2.orig/gcc/config/lm32/lm32.opt gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.opt --- gcc-4.4.2.orig/gcc/config/lm32/lm32.opt 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32.opt 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,40 @@ +; Options for the Lattice Mico32 port of the compiler. +; Contributed by Jon Beniston +; +; Copyright (C) 2008 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 +; . + +mmultiply-enabled +Target Report Mask(MULTIPLY_ENABLED) +Enable multiply instructions + +mdivide-enabled +Target Report Mask(DIVIDE_ENABLED) +Enable divide and modulus instructions + +mbarrel-shift-enabled +Target Report Mask(BARREL_SHIFT_ENABLED) +Enable barrel shift instructions + +msign-extend-enabled +Target Report Mask(SIGN_EXTEND_ENABLED) +Enable sign extend instructions + +muser-enabled +Target Report Mask(USER_ENABLED) +Enable user-defined instructions diff -Naur gcc-4.4.2.orig/gcc/config/lm32/lm32-protos.h gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32-protos.h --- gcc-4.4.2.orig/gcc/config/lm32/lm32-protos.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/lm32-protos.h 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,52 @@ +/* Prototypes of target machine functions, Lattice Mico32 architecture. + Contributed by Jon Beniston + + Copyright (C) 2008 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 + . */ + +extern int lm32_return_in_memory (tree type); +extern void lm32_declare_object (FILE *stream, char *name, char *init_string, + char *final_string, int size); +extern int symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED); +extern int register_or_zero_operand (rtx op, enum machine_mode mode); +extern int register_or_K_operand (rtx op, enum machine_mode mode); +extern int constant_K_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED); +extern int register_or_L_operand (rtx op, enum machine_mode mode); +extern int constant_L_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED); +extern int register_or_memory_operand (rtx op, enum machine_mode mode); +extern int register_operand (rtx op, enum machine_mode mode); +extern int const_ok_for_base_offset (rtx op, enum machine_mode mode); +extern void lm32_expand_prologue (void); +extern void lm32_expand_epilogue (void); +extern HOST_WIDE_INT lm32_compute_frame_size (int size); +extern void lm32_print_operand (FILE *file, rtx op, int letter); +extern void lm32_print_operand_address (FILE *file, rtx addr); +extern rtx lm32_function_arg (CUMULATIVE_ARGS cum, enum machine_mode mode, + tree type, int named); +extern void lm32_override_options (void); +extern HOST_WIDE_INT lm32_compute_initial_elimination_offset (int from, + int to); +extern int lm32_can_use_return (void); +extern rtx lm32_return_addr_rtx (int count, rtx frame); +#ifdef RTX_CODE +extern void gen_int_relational (enum rtx_code code, rtx result, rtx cmp0, + rtx cmp1, rtx destination); +#endif +extern int lm32_expand_block_move (rtx *); +extern int nonpic_symbol_mentioned_p (rtx); +extern rtx lm32_legitimize_pic_address (rtx, enum machine_mode, rtx); diff -Naur gcc-4.4.2.orig/gcc/config/lm32/predicates.md gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/predicates.md --- gcc-4.4.2.orig/gcc/config/lm32/predicates.md 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/predicates.md 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,58 @@ +;; Predicate definitions for Lattice Mico32. +;; Contributed by Jon Beniston +;; +;; Copyright (C) 2008 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 +;; . + +(define_predicate "const0_operand" + (and (match_code "const_int,const_double,const_vector") + (match_test "op == CONST0_RTX (GET_MODE (op))"))) + +(define_predicate "constant_K_operand" + (and (match_code "const_int") + (match_test "MEDIUM_INT (INTVAL (op))"))) + +(define_predicate "constant_L_operand" + (and (match_code "const_int") + (match_test "MEDIUM_UINT (INTVAL (op))"))) + +(define_predicate "register_or_zero_operand" + (ior (match_operand 0 "register_operand") + (match_operand 0 "const0_operand"))) + +(define_predicate "register_or_memory_operand" + (ior (match_operand 0 "register_operand") + (match_operand 0 "memory_operand"))) + +(define_predicate "register_or_K_operand" + (ior (match_operand 0 "register_operand") + (match_operand 0 "constant_K_operand"))) + +(define_predicate "register_or_L_operand" + (ior (match_operand 0 "register_operand") + (match_operand 0 "constant_L_operand"))) + +(define_predicate "reloc_operand" + (ior (ior (match_code "label_ref") + (match_code "symbol_ref")) + (match_code "const"))) + +(define_predicate "symbolic_operand" + (ior (match_code "label_ref") + (match_code "symbol_ref"))) + diff -Naur gcc-4.4.2.orig/gcc/config/lm32/rtems.h gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/rtems.h --- gcc-4.4.2.orig/gcc/config/lm32/rtems.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/rtems.h 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,32 @@ +/* Definitions for rtems targeting a lm32 using ELF. + Copyright (C) 2009, 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 +. */ + +/* Target OS builtins. */ +#undef TARGET_OS_CPP_BUILTINS +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__rtems__"); \ + builtin_define ("__USE_INIT_FINI__"); \ + builtin_assert ("system=rtems"); \ + } \ + while (0) + +/* Use the default */ +#undef LINK_GCC_C_SEQUENCE_SPEC diff -Naur gcc-4.4.2.orig/gcc/config/lm32/sfp-machine.h gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/sfp-machine.h --- gcc-4.4.2.orig/gcc/config/lm32/sfp-machine.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/sfp-machine.h 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,51 @@ +#define _FP_W_TYPE_SIZE 32 +#define _FP_W_TYPE unsigned long +#define _FP_WS_TYPE signed long +#define _FP_I_TYPE long + +#define _FP_MUL_MEAT_S(R,X,Y) \ + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_D(R,X,Y) \ + _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_Q(R,X,Y) \ + _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) + +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) +#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) + +#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) +#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 +#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 +#define _FP_NANSIGN_S 0 +#define _FP_NANSIGN_D 0 +#define _FP_NANSIGN_Q 0 + +#define _FP_KEEPNANFRACP 1 + +/* Someone please check this. */ +#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ + do { \ + if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ + && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ + { \ + R##_s = Y##_s; \ + _FP_FRAC_COPY_##wc(R,Y); \ + } \ + else \ + { \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc(R,X); \ + } \ + R##_c = FP_CLS_NAN; \ + } while (0) + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 + +#define __BYTE_ORDER __BIG_ENDIAN + +/* Define ALIASNAME as a strong alias for NAME. */ +# define strong_alias(name, aliasname) _strong_alias(name, aliasname) +# define _strong_alias(name, aliasname) \ + extern __typeof (name) aliasname __attribute__ ((alias (#name))); diff -Naur gcc-4.4.2.orig/gcc/config/lm32/t-fprules-softfp gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/t-fprules-softfp --- gcc-4.4.2.orig/gcc/config/lm32/t-fprules-softfp 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/t-fprules-softfp 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,5 @@ +softfp_float_modes := sf df +softfp_int_modes := si di +softfp_extensions := sfdf +softfp_truncations := dfsf +softfp_machine_header := lm32/sfp-machine.h diff -Naur gcc-4.4.2.orig/gcc/config/lm32/t-lm32 gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/t-lm32 --- gcc-4.4.2.orig/gcc/config/lm32/t-lm32 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/t-lm32 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,19 @@ +LIB1ASMSRC = lm32/lib1funcs.S +LIB1ASMFUNCS = _ashlsi3 _ashrsi3 _lshrsi3 + +LM32_LIB1CSRC = $(srcdir)/config/lm32/arithmetic.c +LIB2FUNCS_EXTRA = _mulsi3.c \ + _udivmodsi4.c _divsi3.c _modsi3.c _udivsi3.c _umodsi3.c +# Size optimised versions: _ashlsi3.c _ashrsi3.c _lshrsi3.c + +# The fixed-point arithmetic code is in one file +# similar to libgcc2.c (or the old libgcc1.c). We need to +# "split it up" with one file per define. +$(LIB2FUNCS_EXTRA): $(LM32_LIB1CSRC) + name=`echo $@ | sed -e 's,.*/,,' | sed -e 's,.c$$,,'`; \ + echo "#define L$$name" > tmp-$@ \ + && echo '#include "$<"' >> tmp-$@ \ + && mv -f tmp-$@ $@ + +MULTILIB_OPTIONS = mmultiply-enabled mbarrel-shift-enabled +# Don't bother building multilib with mdivide-enabled, not much of a gain diff -Naur gcc-4.4.2.orig/gcc/config/lm32/uclinux-elf.h gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/uclinux-elf.h --- gcc-4.4.2.orig/gcc/config/lm32/uclinux-elf.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/lm32/uclinux-elf.h 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,85 @@ +/* Definitions for LM32 running Linux-based GNU systems using ELF + Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2008 Free Software Foundation, Inc. + Contributed by Philip Blundell + + 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 + . */ + +/* elfos.h should have already been included. Now just override + any conflicting definitions and add any extras. */ + +/* Run-time Target Specification. */ +#undef TARGET_VERSION +#define TARGET_VERSION fputs (" (LM32 GNU/Linux with ELF)", stderr); + +/* Do not assume anything about header files. */ +#undef NO_IMPLICIT_EXTERN_C +#define NO_IMPLICIT_EXTERN_C + +/* The GNU C++ standard library requires that these macros be defined. */ +#undef CPLUSPLUS_CPP_SPEC +#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" + +/* Now we define the strings used to build the spec file. */ +#undef LIB_SPEC +#define LIB_SPEC \ + "%{pthread:-lpthread} \ + %{shared:-lc} \ + %{!shared:-lc} " + +#define LIBGCC_SPEC "-lgcc" + +/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add + the GNU/Linux magical crtbegin.o file (see crtstuff.c) which + provides part of the support for getting C++ file-scope static + object constructed before entering `main'. */ + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC \ + "%{!shared: \ + %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ + %{!p:%{profile:gcrt1.o%s} \ + %{!profile:crt1.o%s}}}} \ + crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" + +/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on + the GNU/Linux magical crtend.o file (see crtstuff.c) which + provides part of the support for getting C++ file-scope static + object constructed before entering `main', followed by a normal + GNU/Linux "finalizer" file, `crtn.o'. */ + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" + +#undef LINK_SPEC +#define LINK_SPEC "%{h*} %{version:-v} \ + %{b} %{Wl,*:%*} \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}" + +#define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS() + +#define LINK_GCC_C_SEQUENCE_SPEC \ + "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" + +#undef CC1_SPEC +#define CC1_SPEC "%{G*} %{!fno-PIC:-fPIC}" + diff -Naur gcc-4.4.2.orig/gcc/config/mips/elf.h gcc-4.4.2-rtems4.10-20091015/gcc/config/mips/elf.h --- gcc-4.4.2.orig/gcc/config/mips/elf.h 2007-08-02 12:49:31.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/mips/elf.h 2009-10-15 18:36:00.000000000 +0200 @@ -48,6 +48,4 @@ #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend%O%s crtn%O%s" -#define NO_IMPLICIT_EXTERN_C 1 - #define HANDLE_PRAGMA_PACK_PUSH_POP 1 diff -Naur gcc-4.4.2.orig/gcc/config/rs6000/rtems.h gcc-4.4.2-rtems4.10-20091015/gcc/config/rs6000/rtems.h --- gcc-4.4.2.orig/gcc/config/rs6000/rtems.h 2007-08-02 12:49:31.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/rs6000/rtems.h 2009-10-15 18:36:00.000000000 +0200 @@ -49,8 +49,18 @@ %{mcpu=604: %{!Dppc*: %{!Dmpc*: -Dmpc604} } } \ %{mcpu=750: %{!Dppc*: %{!Dmpc*: -Dmpc750} } } \ %{mcpu=821: %{!Dppc*: %{!Dmpc*: -Dmpc821} } } \ -%{mcpu=860: %{!Dppc*: %{!Dmpc*: -Dmpc860} } }" +%{mcpu=860: %{!Dppc*: %{!Dmpc*: -Dmpc860} } } \ +%{mcpu=8540: %{!Dppc*: %{!Dmpc*: -Dppc8540} } }" #undef SUBSUBTARGET_EXTRA_SPECS #define SUBSUBTARGET_EXTRA_SPECS \ { "cpp_os_rtems", CPP_OS_RTEMS_SPEC } + +#undef SUBSUBTARGET_OVERRIDE_OPTIONS +#define SUBSUBTARGET_OVERRIDE_OPTIONS \ + do { \ + if (TARGET_E500) \ + { \ + rs6000_float_gprs = 1; \ + } \ + } while(0) diff -Naur gcc-4.4.2.orig/gcc/config/rs6000/t-rtems gcc-4.4.2-rtems4.10-20091015/gcc/config/rs6000/t-rtems --- gcc-4.4.2.orig/gcc/config/rs6000/t-rtems 2009-03-25 13:54:16.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config/rs6000/t-rtems 2009-10-15 18:36:00.000000000 +0200 @@ -1,12 +1,12 @@ # Multilibs for powerpc RTEMS targets. MULTILIB_OPTIONS = \ -mcpu=403/mcpu=505/mcpu=601/mcpu=603e/mcpu=604/mcpu=860/mcpu=7400 \ +mcpu=403/mcpu=505/mcpu=601/mcpu=603e/mcpu=604/mcpu=860/mcpu=7400/mcpu=8540 \ Dmpc8260 \ msoft-float MULTILIB_DIRNAMES = \ -m403 m505 m601 m603e m604 m860 m7400 \ +m403 m505 m601 m603e m604 m860 m7400 m8540 \ mpc8260 \ nof @@ -29,6 +29,10 @@ # Map 750 to . MULTILIB_MATCHES += mcpu?750= +# Map e500, 8548 to 8540 +MULTILIB_MATCHES += mcpu?8540=mcpu?e500 +MULTILIB_MATCHES += mcpu?8540=mcpu?8548 + # Soft-float only, default implies msoft-float # NOTE: Must match with MULTILIB_MATCHES_FLOAT and MULTILIB_MATCHES MULTILIB_SOFTFLOAT_ONLY = \ @@ -62,3 +66,4 @@ MULTILIB_EXCEPTIONS += *mcpu=750/Dmpc* MULTILIB_EXCEPTIONS += *mcpu=860/Dmpc* MULTILIB_EXCEPTIONS += *mcpu=7400/Dmpc* +MULTILIB_EXCEPTIONS += *mcpu=8540/Dmpc* diff -Naur gcc-4.4.2.orig/gcc/config.gcc gcc-4.4.2-rtems4.10-20091015/gcc/config.gcc --- gcc-4.4.2.orig/gcc/config.gcc 2009-09-13 15:01:13.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config.gcc 2009-10-15 18:36:00.000000000 +0200 @@ -1364,6 +1364,23 @@ out_file=iq2000/iq2000.c md_file=iq2000/iq2000.md ;; +lm32-*-elf*) + tm_file="dbxelf.h elfos.h ${tm_file}" + tmake_file="lm32/t-lm32" + tmake_file="${tmake_file} lm32/t-fprules-softfp soft-fp/t-softfp" + ;; +lm32-*-rtems*) + tm_file="dbxelf.h elfos.h ${tm_file} lm32/rtems.h rtems.h" + tmake_file="lm32/t-lm32" + tmake_file="${tmake_file} lm32/t-fprules-softfp soft-fp/t-softfp" + tmake_file="${tmake_file} t-rtems" + extra_parts="crtbegin.o crtend.o crti.o crtn.o" + ;; +lm32-*-uclinux*) + tm_file="dbxelf.h elfos.h ${tm_file} linux.h lm32/uclinux-elf.h" + tmake_file="lm32/t-lm32" + tmake_file="${tmake_file} lm32/t-fprules-softfp soft-fp/t-softfp" + ;; m32r-*-elf*) tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" extra_parts="crtinit.o crtfini.o" diff -Naur gcc-4.4.2.orig/gcc/config.gcc.orig gcc-4.4.2-rtems4.10-20091015/gcc/config.gcc.orig --- gcc-4.4.2.orig/gcc/config.gcc.orig 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/config.gcc.orig 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,3183 @@ +# GCC target-specific configuration file. +# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +# 2008, 2009 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 +#. + +# This is the GCC target-specific configuration file +# where a configuration type is mapped to different system-specific +# definitions and files. This is invoked by the autoconf-generated +# configure script. Putting it in a separate shell file lets us skip +# running autoconf when modifying target-specific information. + +# When you change the cases in the OS or target switches, consider +# updating ../libgcc/config.host also. + +# This file switches on the shell variable ${target}, and also uses the +# following shell variables: +# +# with_* Various variables as set by configure. +# +# enable_threads Either the name, yes or no depending on whether +# threads support was requested. +# +# default_use_cxa_atexit +# The default value for the $enable___cxa_atexit +# variable. enable___cxa_atexit needs to be set to +# "yes" for the correct operation of C++ destructors +# but it relies upon the presence of a non-standard C +# library function called __cxa_atexit. +# Since not all C libraries provide __cxa_atexit the +# default value of $default_use_cxa_atexit is set to +# "no" except for targets which are known to be OK. +# +# gas_flag Either yes or no depending on whether GNU as was +# requested. +# +# gnu_ld_flag Either yes or no depending on whether GNU ld was +# requested. + +# This file sets the following shell variables for use by the +# autoconf-generated configure script: +# +# cpu_type The name of the cpu, if different from the first +# chunk of the canonical target name. +# +# tm_defines List of target macros to define for all compilations. +# +# tm_file A list of target macro files, if different from +# "$cpu_type/$cpu_type.h". Usually it's constructed +# per target in a way like this: +# tm_file="${tm_file} dbxelf.h elfos.h svr4.h ${cpu_type.h}/elf.h" +# Note that the preferred order is: +# - specific target header "${cpu_type}/${cpu_type.h}" +# - generic headers like dbxelf.h elfos.h, etc. +# - specializing target headers like ${cpu_type.h}/elf.h +# This helps to keep OS specific stuff out of the CPU +# defining header ${cpu_type}/${cpu_type.h}. +# +# It is possible to include automatically-generated +# build-directory files by prefixing them with "./". +# All other files should relative to $srcdir/config. +# +# tm_p_file Location of file with declarations for functions +# in $out_file. +# +# out_file The name of the machine description C support +# file, if different from "$cpu_type/$cpu_type.c". +# +# md_file The name of the machine-description file, if +# different from "$cpu_type/$cpu_type.md". +# +# tmake_file A list of machine-description-specific +# makefile-fragments, if different from +# "$cpu_type/t-$cpu_type". +# +# extra_modes The name of the file containing a list of extra +# machine modes, if necessary and different from +# "$cpu_type/$cpu_type-modes.def". +# +# extra_objs List of extra objects that should be linked into +# the compiler proper (cc1, cc1obj, cc1plus) +# depending on target. +# +# extra_gcc_objs List of extra objects that should be linked into +# the compiler driver (gcc) depending on target. +# +# extra_headers List of used header files from the directory +# config/${cpu_type}. +# +# use_gcc_tgmath If set, add tgmath.h to the list of used header +# files. +# +# extra_passes List of extra executables compiled for this target +# machine, used for compiling from source to object. +# +# extra_parts List of extra object files that should be compiled +# for this target machine. +# +# extra_programs Like extra_passes, but these are used when linking. +# +# extra_options List of target-dependent .opt files. +# +# c_target_objs List of extra target-dependent objects that be +# linked into the C compiler only. +# +# cxx_target_objs List of extra target-dependent objects that be +# linked into the C++ compiler only. +# +# fortran_target_objs List of extra target-dependent objects that be +# linked into the fortran compiler only. +# +# target_gtfiles List of extra source files with type information. +# +# xm_defines List of macros to define when compiling for the +# target machine. +# +# xm_file List of files to include when compiling for the +# target machine. +# +# use_collect2 Set to yes or no, depending on whether collect2 +# will be used. +# +# target_cpu_default Set to override the default target model. +# +# gdb_needs_out_file_path +# Set to yes if gdb needs a dir command with +# `dirname $out_file`. +# +# thread_file Set to control which thread package to use. +# +# gas Set to yes or no depending on whether the target +# system normally uses GNU as. +# +# need_64bit_hwint Set to yes if HOST_WIDE_INT must be 64 bits wide +# for this target. This is true if this target +# supports "long" or "wchar_t" wider than 32 bits, +# or BITS_PER_WORD is wider than 32 bits. +# The setting made here must match the one made in +# other locations such as libcpp/configure.ac +# +# configure_default_options +# Set to an initializer for configure_default_options +# in configargs.h, based on --with-cpu et cetera. +# +# use_fixproto Set to "yes" if fixproto should be run normally, +# "no" if fixproto should never be run. + +# The following variables are used in each case-construct to build up the +# outgoing variables: +# +# gnu_ld Set to yes or no depending on whether the target +# system normally uses GNU ld. + +out_file= +tmake_file= +extra_headers= +use_gcc_tgmath=yes +extra_passes= +extra_parts= +extra_programs= +extra_objs= +extra_gcc_objs= +extra_options= +c_target_objs= +cxx_target_objs= +fortran_target_objs= +tm_defines= +xm_defines= +# Set this to force installation and use of collect2. +use_collect2= +# Set this to override the default target model. +target_cpu_default= +# Set this if gdb needs a dir command with `dirname $out_file` +gdb_needs_out_file_path= +# Set this to control which thread package will be used. +thread_file= +# Reinitialize these from the flag values every loop pass, since some +# configure entries modify them. +gas="$gas_flag" +gnu_ld="$gnu_ld_flag" +default_use_cxa_atexit=no +target_gtfiles= +need_64bit_hwint= + +# Default to not using fixproto. Targets which need fixproto should +# specifically set this to 'yes'. +use_fixproto=no + +# Don't carry these over build->host->target. Please. +xm_file= +md_file= + +# Obsolete configurations. +case ${target} in +# Avoid generic cases below matching. + h8300-*-rtems* | h8300-*-elf* \ + | sh-*-elf* | sh-*-symbianelf* | sh-*-linux* | sh-*-netbsdelf* \ + | sh-*-rtems* | sh-wrs-vxworks) ;; + arm-*-coff* \ + | armel-*-coff* \ + | h8300-*-* \ + | i[34567]86-*-aout* \ + | i[34567]86-*-coff* \ + | m68k-*-aout* \ + | m68k-*-coff* \ + | sh-*-* \ + | pdp11-*-bsd \ + | rs6000-ibm-aix4.[12]* \ + | powerpc-ibm-aix4.[12]* \ + ) + if test "x$enable_obsolete" != xyes; then + echo "*** Configuration ${target} is obsolete." >&2 + echo "*** Specify --enable-obsolete to build it anyway." >&2 + echo "*** Support will be REMOVED in the next major release of GCC," >&2 + echo "*** unless a maintainer comes forward." >&2 + exit 1 + fi;; +esac + +# Unsupported targets list. Do not put an entry in this list unless +# it would otherwise be caught by a more permissive pattern. The list +# should be in alphabetical order. +case ${target} in + i[34567]86-go32-* \ + | i[34567]86-*-go32* \ + | mips64orion*-*-rtems* \ + | sparc-hal-solaris2* \ + | thumb-*-* \ + | *-*-linux*aout* \ + | *-*-linux*coff* \ + | *-*-linux*libc1* \ + | *-*-linux*oldld* \ + | *-*-rtemsaout* \ + | *-*-rtemscoff* \ + | *-*-solaris2.[0-6] \ + | *-*-solaris2.[0-6].* \ + | *-*-sysv* \ + | vax-*-vms* \ + ) + echo "*** Configuration ${target} not supported" 1>&2 + exit 1 + ;; +esac + +# Set default cpu_type, tm_file, tm_p_file and xm_file so it can be +# updated in each machine entry. Also set default extra_headers for some +# machines. +tm_p_file= +cpu_type=`echo ${target} | sed 's/-.*$//'` +cpu_is_64bit= +case ${target} in +m32c*-*-*) + cpu_type=m32c + tmake_file=m32c/t-m32c + ;; +alpha*-*-*) + cpu_type=alpha + need_64bit_hwint=yes + ;; +am33_2.0-*-linux*) + cpu_type=mn10300 + ;; +arm*-*-*) + cpu_type=arm + extra_headers="mmintrin.h arm_neon.h" + c_target_objs="arm-c.o" + cxx_target_objs="arm-c.o" + ;; +bfin*-*) + cpu_type=bfin + ;; +crisv32-*) + cpu_type=cris + ;; +frv*) cpu_type=frv + ;; +fido-*-*) + cpu_type=m68k + extra_headers=math-68881.h + ;; +i[34567]86-*-*) + cpu_type=i386 + c_target_objs="i386-c.o" + cxx_target_objs="i386-c.o" + extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h + pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h + nmmintrin.h bmmintrin.h mmintrin-common.h + wmmintrin.h immintrin.h x86intrin.h avxintrin.h + cross-stdarg.h" + ;; +x86_64-*-*) + cpu_type=i386 + c_target_objs="i386-c.o" + cxx_target_objs="i386-c.o" + extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h + pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h + nmmintrin.h bmmintrin.h mmintrin-common.h + wmmintrin.h immintrin.h x86intrin.h avxintrin.h + cross-stdarg.h" + need_64bit_hwint=yes + ;; +ia64-*-*) + extra_headers=ia64intrin.h + need_64bit_hwint=yes + ;; +hppa*-*-*) + cpu_type=pa + ;; +m32r*-*-*) + cpu_type=m32r + ;; +m68k-*-*) + extra_headers=math-68881.h + ;; +mips*-*-*) + cpu_type=mips + need_64bit_hwint=yes + extra_headers="loongson.h" + ;; +picochip-*-*) + cpu_type=picochip + ;; +powerpc*-*-*) + cpu_type=rs6000 + extra_headers="ppc-asm.h altivec.h spe.h ppu_intrinsics.h paired.h spu2vmx.h vec_types.h si2vmx.h" + need_64bit_hwint=yes + case x$with_cpu in + xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[34567]|xpower6x|xrs64a|xcell) + cpu_is_64bit=yes + ;; + esac + ;; +rs6000*-*-*) + need_64bit_hwint=yes + ;; +score*-*-*) + cpu_type=score + ;; +sparc*-*-*) + cpu_type=sparc + need_64bit_hwint=yes + ;; +spu*-*-*) + cpu_type=spu + need_64bit_hwint=yes + ;; +s390*-*-*) + cpu_type=s390 + need_64bit_hwint=yes + ;; +# Note the 'l'; we need to be able to match e.g. "shle" or "shl". +sh[123456789lbe]*-*-* | sh-*-*) + cpu_type=sh + need_64bit_hwint=yes + ;; +esac + +tm_file=${cpu_type}/${cpu_type}.h +if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-protos.h +then + tm_p_file=${cpu_type}/${cpu_type}-protos.h +fi +extra_modes= +if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def +then + extra_modes=${cpu_type}/${cpu_type}-modes.def +fi +if test -f ${srcdir}/config/${cpu_type}/${cpu_type}.opt +then + extra_options="${extra_options} ${cpu_type}/${cpu_type}.opt" +fi + +case ${target} in +i[34567]86-*-*) + if test "x$enable_cld" = xyes; then + tm_defines="${tm_defines} USE_IX86_CLD=1" + fi + ;; +x86_64-*-*) + tm_file="i386/biarch64.h ${tm_file}" + if test "x$enable_cld" = xyes; then + tm_defines="${tm_defines} USE_IX86_CLD=1" + fi + ;; +esac + +# On a.out targets, we need to use collect2. +case ${target} in +*-*-*aout*) + use_collect2=yes + ;; +esac + +# Common parts for widely ported systems. +case ${target} in +*-*-darwin*) + tm_file="${tm_file} darwin.h" + case ${target} in + *-*-darwin[912]*) + tm_file="${tm_file} darwin9.h" + ;; + esac + tm_file="${tm_file} ${cpu_type}/darwin.h" + tm_p_file="${tm_p_file} darwin-protos.h" + tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin" + target_gtfiles="\$(srcdir)/config/darwin.c" + extra_options="${extra_options} darwin.opt" + c_target_objs="${c_target_objs} darwin-c.o" + cxx_target_objs="${cxx_target_objs} darwin-c.o" + fortran_target_objs="darwin-f.o" + extra_objs="darwin.o" + extra_gcc_objs="darwin-driver.o" + default_use_cxa_atexit=yes + case ${enable_threads} in + "" | yes | posix) thread_file='posix' ;; + esac + ;; +*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*) + # This is the place-holder for the generic a.out configuration + # of FreeBSD. No actual configuration resides here since + # there was only ever a bare-bones ix86 configuration for + # a.out and it exists solely in the machine-specific section. + # This place-holder must exist to avoid dropping into + # the generic ELF configuration of FreeBSD (i.e. it must be + # ordered before that section). + ;; +*-*-freebsd*) + # This is the generic ELF configuration of FreeBSD. Later + # machine-specific sections may refine and add to this + # configuration. + # + # Due to tm_file entry ordering issues that vary between cpu + # architectures, we only define fbsd_tm_file to allow the + # machine-specific section to dictate the final order of all + # entries of tm_file with the minor exception that components + # of the tm_file set here will always be of the form: + # + # freebsd.h [freebsd-.h ...] freebsd-spec.h freebsd.h + # + # The machine-specific section should not tamper with this + # ordering but may order all other entries of tm_file as it + # pleases around the provided core setting. + gas=yes + gnu_ld=yes + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" + fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'` + tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}" + tmake_file="t-slibgcc-elf-ver t-freebsd" + case ${enable_threads} in + no) + fbsd_tm_file="${fbsd_tm_file} freebsd-nthr.h" + ;; + "" | yes | posix) + thread_file='posix' + tmake_file="${tmake_file} t-freebsd-thread" + # Before 5.0, FreeBSD can't bind shared libraries to -lc + # when "optionally" threaded via weak pthread_* checks. + case ${target} in + *-*-freebsd[34] | *-*-freebsd[34].*) + tmake_file="${tmake_file} t-slibgcc-nolc-override" + ;; + esac + ;; + *) + echo 'Unknown thread configuration for FreeBSD' + exit 1 + ;; + esac + fbsd_tm_file="${fbsd_tm_file} freebsd-spec.h freebsd.h" + ;; +*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu) + extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" + gas=yes + gnu_ld=yes + case ${enable_threads} in + "" | yes | posix) thread_file='posix' ;; + esac + tmake_file="t-slibgcc-elf-ver t-linux" + case $target in + *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-kopensolaris*-gnu) + :;; + *-*-gnu*) + tmake_file="$tmake_file t-gnu";; + esac + # glibc / uclibc switch. uclibc isn't usable for GNU/Hurd and neither for + # GNU/k*BSD. + case $target in + *linux*) + extra_options="$extra_options linux.opt";; + *) + tm_defines="$tm_defines OPTION_GLIBC=1";; + esac + case ${target} in + *-*-*uclibc*) + tm_defines="${tm_defines} UCLIBC_DEFAULT=1" + ;; + *) + tm_defines="${tm_defines} UCLIBC_DEFAULT=0" + ;; + esac + # Assume that glibc or uClibc are being used and so __cxa_atexit is provided. + default_use_cxa_atexit=yes + use_gcc_tgmath=no + ;; +*-*-netbsd*) + tmake_file="t-slibgcc-elf-ver t-libc-ok t-netbsd t-libgcc-pic" + gas=yes + gnu_ld=yes + + # NetBSD 2.0 and later get POSIX threads enabled by default. + # Allow them to be explicitly enabled on any other version. + case ${enable_threads} in + "") + case ${target} in + *-*-netbsd[2-9]* | *-*-netbsdelf[2-9]*) + thread_file='posix' + tm_defines="${tm_defines} NETBSD_ENABLE_PTHREADS" + ;; + esac + ;; + yes | posix) + thread_file='posix' + tm_defines="${tm_defines} NETBSD_ENABLE_PTHREADS" + ;; + esac + + # NetBSD 1.7 and later are set up to use GCC's crtstuff for + # ELF configurations. We will clear extra_parts in the + # a.out configurations. + case ${target} in + *-*-netbsd*1.[7-9]* | *-*-netbsd[2-9]* | *-*-netbsdelf[2-9]*) + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o" + ;; + esac + + # NetBSD 2.0 and later provide __cxa_atexit(), which we use by + # default (unless overridden by --disable-__cxa_atexit). + case ${target} in + *-*-netbsd[2-9]* | *-*-netbsdelf[2-9]*) + default_use_cxa_atexit=yes + ;; + esac + ;; +*-*-openbsd*) + tmake_file="t-libc-ok t-openbsd t-libgcc-pic" + case ${enable_threads} in + yes) + thread_file='posix' + tmake_file="${tmake_file} t-openbsd-thread" + ;; + esac + case ${target} in + *-*-openbsd2.*|*-*-openbsd3.[012]) + tm_defines="${tm_defines} HAS_LIBC_R=1" ;; + esac + ;; +*-*-rtems*) + case ${enable_threads} in + yes) thread_file='rtems' ;; + esac + ;; +*-*-vxworks*) + tmake_file=t-vxworks + xm_defines=POSIX + extra_options="${extra_options} vxworks.opt" + extra_objs=vxworks.o + case ${enable_threads} in + no) ;; + "" | yes | vxworks) thread_file='vxworks' ;; + *) echo 'Unknown thread configuration for VxWorks'; exit 1 ;; + esac + ;; +*-*-elf) + # Assume that newlib is being used and so __cxa_atexit is provided. + default_use_cxa_atexit=yes + ;; +esac + +case ${target} in +# Support site-specific machine types. +*local*) + rest=`echo ${target} | sed -e "s/$cpu_type-//"` + tm_file=${cpu_type}/$rest.h + if test -f $srcdir/config/${cpu_type}/xm-$rest.h + then xm_file=${cpu_type}/xm-$rest.h + fi + if test -f $srcdir/config/${cpu_type}/t-$rest + then tmake_file=${cpu_type}/t-$rest + fi + ;; +alpha*-*-linux*) + tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" + target_cpu_default="MASK_GAS" + tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee alpha/t-linux" + ;; +alpha*-*-gnu*) + tm_file="$tm_file alpha/elf.h alpha/linux.h alpha/linux-elf.h gnu.h alpha/gnu.h" + target_cpu_default="MASK_GAS" + tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee" + ;; +alpha*-*-freebsd*) + tm_file="${tm_file} ${fbsd_tm_file} alpha/elf.h alpha/freebsd.h" + target_cpu_default="MASK_GAS" + tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee" + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o" + ;; +alpha*-*-netbsd*) + tm_file="${tm_file} netbsd.h alpha/elf.h netbsd-elf.h alpha/netbsd.h" + target_cpu_default="MASK_GAS" + tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee" + ;; +alpha*-*-openbsd*) + tm_defines="${tm_defines} OBSD_NO_DYNAMIC_LIBRARIES OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_FUNCTION_SIZE OBSD_HAS_DECLARE_OBJECT" + tm_file="alpha/alpha.h openbsd.h alpha/openbsd.h" + # default x-alpha is only appropriate for dec-osf. + target_cpu_default="MASK_GAS" + tmake_file="alpha/t-alpha alpha/t-ieee" + ;; +alpha*-dec-osf[45]*) + if test x$stabs = xyes + then + tm_file="${tm_file} dbx.h" + fi + if test x$gas != xyes + then + extra_passes="mips-tfile mips-tdump" + fi + use_collect2=yes + tmake_file="alpha/t-alpha alpha/t-ieee alpha/t-crtfm alpha/t-osf4" + tm_file="${tm_file} alpha/osf.h" + extra_headers=va_list.h + case ${target} in + *-*-osf4*) + # Define TARGET_SUPPORT_ARCH except on 4.0a. + case ${target} in + *-*-osf4.0a) ;; + *) tm_defines="${tm_defines} TARGET_SUPPORT_ARCH=1" + esac + ;; + *-*-osf5*) + tm_file="${tm_file} alpha/osf5.h" + tm_defines="${tm_defines} TARGET_SUPPORT_ARCH=1" + ;; + esac + case ${enable_threads} in + "" | yes | posix) + thread_file='posix' + tmake_file="${tmake_file} alpha/t-osf-pthread" + ;; + esac + ;; +alpha64-dec-*vms*) + tm_file="${tm_file} alpha/vms.h alpha/vms64.h" + xm_file="alpha/xm-vms.h" + tmake_file="alpha/t-alpha alpha/t-vms alpha/t-vms64 alpha/t-ieee" + prefix=/gnu + local_prefix=/gnu + ;; +alpha*-dec-*vms*) + tm_file="${tm_file} alpha/vms.h" + xm_file=alpha/xm-vms.h + tmake_file="alpha/t-alpha alpha/t-vms alpha/t-ieee" + prefix=/gnu + local_prefix=/gnu + ;; +arc-*-elf*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + extra_parts="crtinit.o crtfini.o" + ;; +arm-*-coff* | armel-*-coff*) + tm_file="arm/semi.h arm/aout.h arm/arm.h arm/coff.h dbxcoff.h" + tmake_file="arm/t-arm arm/t-arm-coff" + ;; +arm-wrs-vxworks) + tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h" + tmake_file="${tmake_file} arm/t-arm arm/t-vxworks" + ;; +arm*-*-freebsd*) + tm_file="dbxelf.h elfos.h ${fbsd_tm_file} arm/elf.h arm/aout.h arm/freebsd.h arm/arm.h" + tmake_file="${tmake_file} arm/t-arm arm/t-strongarm-elf" + ;; +arm*-*-netbsdelf*) + tm_file="dbxelf.h elfos.h netbsd.h netbsd-elf.h arm/elf.h arm/aout.h arm/arm.h arm/netbsd-elf.h" + tmake_file="${tmake_file} arm/t-arm arm/t-netbsd" + ;; +arm*-*-netbsd*) + tm_file="arm/aout.h arm/arm.h netbsd.h netbsd-aout.h arm/netbsd.h" + tmake_file="t-netbsd arm/t-arm arm/t-netbsd" + extra_parts="" + use_collect2=yes + ;; +arm*-*-linux*) # ARM GNU/Linux with ELF + tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" + case $target in + arm*b-*) + tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" + ;; + esac + tmake_file="${tmake_file} t-linux arm/t-arm" + case ${target} in + arm*-*-linux-*eabi) + tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h" + tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi" + # The BPABI long long divmod functions return a 128-bit value in + # registers r0-r3. Correctly modeling that requires the use of + # TImode. + need_64bit_hwint=yes + # The EABI requires the use of __cxa_atexit. + default_use_cxa_atexit=yes + ;; + *) + tmake_file="$tmake_file arm/t-linux" + ;; + esac + tm_file="$tm_file arm/aout.h arm/arm.h" + tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" + ;; +arm*-*-uclinux*) # ARM ucLinux + tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/uclinux-elf.h" + tmake_file="arm/t-arm arm/t-arm-elf" + case ${target} in + arm*-*-uclinux*eabi) + tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h" + tmake_file="$tmake_file arm/t-bpabi" + # The BPABI long long divmod functions return a 128-bit value in + # registers r0-r3. Correctly modeling that requires the use of + # TImode. + need_64bit_hwint=yes + # The EABI requires the use of __cxa_atexit. + default_use_cxa_atexit=yes + esac + tm_file="$tm_file arm/aout.h arm/arm.h" + tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" + ;; +arm*-*-ecos-elf) + tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/ecos-elf.h" + tmake_file="arm/t-arm arm/t-arm-elf" + tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" + ;; +arm*-*-eabi* | arm*-*-symbianelf* ) + # The BPABI long long divmod functions return a 128-bit value in + # registers r0-r3. Correctly modeling that requires the use of + # TImode. + need_64bit_hwint=yes + default_use_cxa_atexit=yes + tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/bpabi.h" + tmake_file="arm/t-arm arm/t-arm-elf" + case ${target} in + arm*-*-eabi*) + tm_file="$tm_file arm/eabi.h" + tmake_file="${tmake_file} arm/t-bpabi" + extra_options="${extra_options} arm/eabi.opt" + ;; + arm*-*-symbianelf*) + tm_file="${tm_file} arm/symbian.h" + # We do not include t-bpabi for Symbian OS because the system + # provides its own implementation of the BPABI functions. + tmake_file="${tmake_file} arm/t-symbian" + ;; + esac + tm_file="${tm_file} arm/aout.h arm/arm.h" + tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" + ;; +arm*-*-rtems*) + tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h" + tmake_file="arm/t-arm arm/t-arm-elf t-rtems arm/t-rtems" + tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" + ;; +arm*-*-elf) + tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h" + tmake_file="arm/t-arm arm/t-arm-elf" + tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" + ;; +arm*-wince-pe*) + tm_file="arm/semi.h arm/aout.h arm/arm.h arm/coff.h dbxcoff.h arm/pe.h arm/wince-pe.h" + tmake_file="arm/t-arm arm/t-wince-pe" + extra_options="${extra_options} arm/pe.opt" + extra_objs="pe.o" + ;; +arm-*-pe*) + tm_file="arm/semi.h arm/aout.h arm/arm.h arm/coff.h dbxcoff.h arm/pe.h" + tmake_file="arm/t-arm arm/t-pe" + extra_options="${extra_options} arm/pe.opt" + extra_objs="pe.o" + ;; +avr-*-rtems*) + tm_file="avr/avr.h dbxelf.h avr/rtems.h rtems.h" + tmake_file="avr/t-avr t-rtems avr/t-rtems" + ;; +avr-*-*) + tm_file="avr/avr.h dbxelf.h" + ;; +bfin*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h" + tmake_file=bfin/t-bfin-elf + use_collect2=no + ;; +bfin*-uclinux*) + tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h linux.h bfin/uclinux.h" + tmake_file=bfin/t-bfin-uclinux + tm_defines="${tm_defines} UCLIBC_DEFAULT=1" + extra_options="${extra_options} linux.opt" + use_collect2=no + ;; +bfin*-linux-uclibc*) + tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h linux.h bfin/linux.h ./linux-sysroot-suffix.h" + tmake_file="t-slibgcc-elf-ver bfin/t-bfin-linux" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + use_collect2=no + ;; +bfin*-rtems*) + tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h bfin/rtems.h rtems.h" + tmake_file="bfin/t-bfin t-rtems bfin/t-rtems" + ;; +bfin*-*) + tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h" + tmake_file=bfin/t-bfin + use_collect2=no + ;; +crisv32-*-elf | crisv32-*-none) + tm_file="dbxelf.h elfos.h ${tm_file}" + tmake_file="cris/t-cris" + target_cpu_default=32 + gas=yes + extra_options="${extra_options} cris/elf.opt" + ;; +cris-*-elf | cris-*-none) + tm_file="dbxelf.h elfos.h ${tm_file}" + tmake_file="cris/t-cris cris/t-elfmulti" + gas=yes + extra_options="${extra_options} cris/elf.opt" + ;; +crisv32-*-linux* | cris-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h" + # We need to avoid using t-linux, so override default tmake_file + tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux" + extra_options="${extra_options} cris/linux.opt" + case $target in + cris-*-*) + target_cpu_default=10 + ;; + crisv32-*-*) + target_cpu_default=32 + ;; + esac + ;; +crx-*-elf) + tm_file="elfos.h ${tm_file}" + extra_parts="crtbegin.o crtend.o" + use_collect2=no + ;; +fr30-*-elf) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + tmake_file=fr30/t-fr30 + extra_parts="crti.o crtn.o crtbegin.o crtend.o" + ;; +frv-*-elf) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file} frv/frv-abi.h" + tmake_file=frv/t-frv + ;; +frv-*-*linux*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file} \ + linux.h frv/linux.h frv/frv-abi.h" + tmake_file="${tmake_file} frv/t-frv frv/t-linux" + ;; +h8300-*-rtems*) + tmake_file="h8300/t-h8300 h8300/t-elf t-rtems h8300/t-rtems" + tm_file="h8300/h8300.h dbxelf.h elfos.h h8300/elf.h h8300/rtems.h rtems.h" + ;; +h8300-*-elf*) + tmake_file="h8300/t-h8300 h8300/t-elf" + tm_file="h8300/h8300.h dbxelf.h elfos.h h8300/elf.h" + ;; +h8300-*-*) + tm_file="h8300/h8300.h dbxcoff.h h8300/coff.h" + ;; +hppa*64*-*-linux*) + target_cpu_default="MASK_PA_11|MASK_PA_20" + tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h svr4.h linux.h \ + pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h pa/pa64-linux.h" + tmake_file="${tmake_file} pa/t-linux64" + gas=yes gnu_ld=yes + need_64bit_hwint=yes + ;; +hppa*-*-linux*) + target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h pa/pa-linux.h \ + pa/pa32-regs.h pa/pa32-linux.h" + tmake_file="${tmake_file} pa/t-linux" + # Set the libgcc version number + if test x$sjlj = x1; then + tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver" + else + tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver" + fi + ;; +# port not yet contributed. +#hppa*-*-openbsd*) +# target_cpu_default="MASK_PA_11" +# ;; +hppa[12]*-*-hpux10*) + case ${target} in + hppa1.1-*-* | hppa2*-*-*) + target_cpu_default="MASK_PA_11" + ;; + esac + tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h \ + pa/pa-hpux.h pa/pa-hpux10.h" + extra_options="${extra_options} pa/pa-hpux.opt" + case ${target} in + *-*-hpux10.[1-9]*) + tm_file="${tm_file} pa/pa-hpux1010.h" + extra_options="${extra_options} pa/pa-hpux1010.opt" + ;; + esac + tmake_file="pa/t-pa-hpux10 pa/t-pa-hpux pa/t-hpux-shlib" + case ${enable_threads} in + "") + if test x$have_pthread_h = xyes ; then + tmake_file="${tmake_file} pa/t-dce-thr" + fi + ;; + yes | dce) + tmake_file="${tmake_file} pa/t-dce-thr" + ;; + esac + # Set the libgcc version number + if test x$sjlj = x1; then + tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver" + else + tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver" + fi + use_collect2=yes + gas=yes + ;; +hppa*64*-*-hpux11*) + target_cpu_default="MASK_PA_11|MASK_PA_20" + if test x$gnu_ld = xyes + then + target_cpu_default="${target_cpu_default}|MASK_GNU_LD" + fi + tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h \ + pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux1010.h \ + pa/pa-hpux11.h" + case ${target} in + *-*-hpux11.[1-9]*) + tm_file="${tm_file} pa/pa-hpux1111.h pa/pa-64.h pa/pa64-hpux.h" + extra_options="${extra_options} pa/pa-hpux1111.opt" + ;; + *) + tm_file="${tm_file} pa/pa-64.h pa/pa64-hpux.h" + ;; + esac + extra_options="${extra_options} pa/pa-hpux.opt \ + pa/pa-hpux1010.opt pa/pa64-hpux.opt" + need_64bit_hwint=yes + tmake_file="pa/t-pa64 pa/t-pa-hpux pa/t-hpux-shlib" + # Set the libgcc version number + if test x$sjlj = x1; then + tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver" + else + tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver" + fi + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \ + libgcc_stub.a" + case x${enable_threads} in + x | xyes | xposix ) + thread_file=posix + ;; + esac + gas=yes + ;; +hppa[12]*-*-hpux11*) + case ${target} in + hppa1.1-*-* | hppa2*-*-*) + target_cpu_default="MASK_PA_11" + ;; + esac + tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h \ + pa/pa-hpux.h pa/pa-hpux1010.h pa/pa-hpux11.h" + extra_options="${extra_options} pa/pa-hpux.opt pa/pa-hpux1010.opt" + case ${target} in + *-*-hpux11.[1-9]*) + tm_file="${tm_file} pa/pa-hpux1111.h" + extra_options="${extra_options} pa/pa-hpux1111.opt" + ;; + esac + tmake_file="pa/t-pa-hpux11 pa/t-pa-hpux pa/t-hpux-shlib" + # Set the libgcc version number + if test x$sjlj = x1; then + tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver" + else + tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver" + fi + case x${enable_threads} in + x | xyes | xposix ) + thread_file=posix + ;; + esac + use_collect2=yes + gas=yes + ;; +i[34567]86-*-darwin*) + need_64bit_hwint=yes + + # This is so that '.../configure && make' doesn't fail due to + # config.guess deciding that the configuration is i386-*-darwin* and + # then this file using that to set --with-cpu=i386 which has no -m64 + # support. + with_cpu=${with_cpu:-generic} + tmake_file="${tmake_file} i386/t-crtpc i386/t-crtfm" + ;; +x86_64-*-darwin*) + with_cpu=${with_cpu:-generic} + tmake_file="${tmake_file} t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm" + tm_file="${tm_file} ${cpu_type}/darwin64.h" + ;; +i[34567]86-*-elf*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h" + tmake_file="${tmake_file} i386/t-i386elf t-svr4" + ;; +x86_64-*-elf*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/x86-64.h" + tmake_file="${tmake_file} i386/t-i386elf t-svr4" + ;; +i[34567]86-*-aout*) + tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h i386/i386-aout.h" + ;; +i[34567]86-*-freebsd*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h" + ;; +x86_64-*-freebsd*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h" + tmake_file="${tmake_file} i386/t-crtstuff" + ;; +i[34567]86-*-netbsdelf*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h" + ;; +i[34567]86-*-netbsd*) + tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h netbsd.h netbsd-aout.h i386/netbsd.h" + tmake_file="${tmake_file} t-netbsd" + extra_parts="" + use_collect2=yes + ;; +x86_64-*-netbsd*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h" + tmake_file="${tmake_file} i386/t-crtstuff" + ;; +i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h" + # needed to unconfuse gdb + tmake_file="${tmake_file} t-libc-ok t-openbsd i386/t-openbsd" + # we need collect2 until our bug is fixed... + use_collect2=yes + ;; +i[34567]86-*-openbsd*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h" + tm_file="${tm_file} openbsd.h i386/openbsdelf.h" + gas=yes + gnu_ld=yes + ;; +i[34567]86-*-coff*) + tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/i386-coff.h" + ;; +i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu) + # Intel 80386's running GNU/* + # with ELF format using glibc 2 + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h" + case ${target} in + i[34567]86-*-linux*) + if test x$enable_targets = xall; then + tm_file="${tm_file} i386/x86-64.h i386/linux64.h" + tm_defines="${tm_defines} TARGET_BI_ARCH=1" + tmake_file="${tmake_file} i386/t-linux64" + need_64bit_hwint=yes + case X"${with_cpu}" in + Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx) + ;; + X) + if test x$with_cpu_64 = x; then + with_cpu_64=generic + fi + ;; + *) + echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2 + echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2 + exit 1 + ;; + esac + else + tm_file="${tm_file} i386/linux.h" + fi + ;; + i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/linux.h knetbsd-gnu.h i386/knetbsd-gnu.h" ;; + i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/linux.h kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;; + i[34567]86-*-kopensolaris*-gnu) tm_file="${tm_file} i386/linux.h kopensolaris-gnu.h i386/kopensolaris-gnu.h" ;; + i[34567]86-*-gnu*) tm_file="$tm_file i386/linux.h gnu.h i386/gnu.h";; + esac + tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc i386/t-crtfm t-dfprules" + ;; +x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h \ + i386/x86-64.h i386/linux64.h" + case ${target} in + x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;; + x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;; + esac + tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc i386/t-crtfm t-dfprules" + ;; +i[34567]86-pc-msdosdjgpp*) + xm_file=i386/xm-djgpp.h + tm_file="dbxcoff.h ${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/djgpp.h" + tmake_file="${tmake_file} i386/t-djgpp" + extra_options="${extra_options} i386/djgpp.opt" + gnu_ld=yes + gas=yes + ;; +i[34567]86-*-lynxos*) + xm_defines=POSIX + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/lynx.h lynx.h" + tmake_file="${tmake_file} i386/t-crtstuff t-lynx" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + extra_options="${extra_options} lynx.opt" + thread_file=lynx + gnu_ld=yes + gas=yes + ;; +i[3456x]86-*-netware*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h tm-dwarf2.h i386/netware.h" + tmake_file="${tmake_file} i386/t-netware" + extra_objs=netware.o + case /${with_ld} in + */nwld) + extra_objs="$extra_objs nwld.o" + tm_file="${tm_file} i386/nwld.h" + tmake_file="${tmake_file} i386/t-nwld" + extra_parts="crt0.o libgcc.def libc.def libcpre.def posixpre.def" + ;; + esac + case x${enable_threads} in + x | xyes | xposix) thread_file='posix';; + xnks) thread_file='nks';; + xno) ;; + *) echo 'Unknown thread configuration for NetWare' >&2; exit 1;; + esac + ;; +i[34567]86-*-nto-qnx*) + tm_file="${tm_file} i386/att.h dbxelf.h tm-dwarf2.h elfos.h svr4.h i386/unix.h i386/nto.h" + tmake_file="${tmake_file} i386/t-nto" + gnu_ld=yes + gas=yes + ;; +i[34567]86-*-rtems*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h" + extra_parts="crtbegin.o crtend.o crti.o crtn.o" + tmake_file="${tmake_file} i386/t-rtems-i386 i386/t-crtstuff t-rtems" + ;; +i[34567]86-*-solaris2*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h sol2.h" + case ${target} in + *-*-solaris2.1[0-9]*) + tm_file="${tm_file} sol2-10.h" + ;; + esac + tm_file="${tm_file} i386/sol2.h" + tmake_file="${tmake_file} t-sol2 t-svr4" + c_target_objs="${c_target_objs} sol2-c.o" + cxx_target_objs="${cxx_target_objs} sol2-c.o" + extra_objs="sol2.o" + tm_p_file="${tm_p_file} sol2-protos.h" + if test x$gnu_ld = xyes; then + tmake_file="$tmake_file t-slibgcc-elf-ver" + tm_defines="${tm_defines} TARGET_GNU_LD=1" + else + tmake_file="$tmake_file t-slibgcc-sld" + fi + if test x$gas = xyes; then + tm_file="usegas.h ${tm_file}" + fi + tm_file="$tm_file tm-dwarf2.h" + case ${target} in + *-*-solaris2.1[0-9]*) + tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h" + tm_defines="${tm_defines} TARGET_BI_ARCH=1" + tmake_file="$tmake_file i386/t-sol2-10" + # i386/t-crtstuff only affects libgcc. Its inclusion + # depends on a runtime test and is thus performed in + # libgcc/configure.ac instead. + need_64bit_hwint=yes + case X"${with_cpu}" in + Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx) + ;; + X) + if test x$with_cpu_64 = x; then + with_cpu_64=generic + fi + ;; + *) + echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2 + echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2 + exit 1 + ;; + esac + ;; + esac + case ${enable_threads}:${have_pthread_h}:${have_thread_h} in + "":yes:* | yes:yes:* ) + thread_file=posix + ;; + "":*:yes | yes:*:yes ) + thread_file=solaris + ;; + esac + ;; +i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae) + tm_file="${tm_file} i386/unix.h i386/att.h elfos.h svr4.h vx-common.h" + case ${target} in + *-vxworksae*) + tm_file="${tm_file} vxworksae.h i386/vx-common.h i386/vxworksae.h" + tmake_file="${tmake_file} i386/t-vxworks i386/t-vxworksae" + ;; + *) + tm_file="${tm_file} vxworks.h i386/vx-common.h i386/vxworks.h" + tmake_file="${tmake_file} i386/t-vxworks" + ;; + esac + ;; +i[34567]86-*-pe | i[34567]86-*-cygwin*) + tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/cygwin.h" + xm_file=i386/xm-cygwin.h + # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h + if test x$sjlj = x0; then + tmake_eh_file="i386/t-dw2-eh" + else + tmake_eh_file="i386/t-sjlj-eh" + fi + tmake_file="${tmake_file} ${tmake_eh_file} i386/t-cygming i386/t-cygwin" + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + extra_options="${extra_options} i386/cygming.opt" + extra_objs="winnt.o winnt-stubs.o" + c_target_objs="${c_target_objs} cygwin2.o msformat-c.o" + cxx_target_objs="${cxx_target_objs} cygwin2.o winnt-cxx.o msformat-c.o" + extra_gcc_objs=cygwin1.o + if test x$enable_threads = xyes; then + thread_file='posix' + fi + ;; +i[34567]86-*-mingw* | x86_64-*-mingw*) + tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/mingw32.h" + xm_file=i386/xm-mingw32.h + case ${target} in + x86_64-*-*) + need_64bit_hwint=yes + ;; + *) + ;; + esac + # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h + if test x$sjlj = x0; then + tmake_eh_file="i386/t-dw2-eh" + else + tmake_eh_file="i386/t-sjlj-eh" + fi + tmake_file="${tmake_file} ${tmake_eh_file} i386/t-cygming i386/t-mingw32" + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + extra_options="${extra_options} i386/cygming.opt i386/mingw.opt" + extra_objs="winnt.o winnt-stubs.o" + c_target_objs="${c_target_objs} msformat-c.o" + cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o" + default_use_cxa_atexit=yes + case ${enable_threads} in + "" | yes | win32) + thread_file='win32' + tmake_file="${tmake_file} i386/t-gthr-win32" + ;; + esac + case ${target} in + x86_64-*-mingw*) + tmake_file="${tmake_file} i386/t-crtfm" + ;; + *) + ;; + esac + case ${target} in + *mingw32crt*) + tm_file="${tm_file} i386/crtdll.h" + ;; + *mingw32msv* | *mingw*) + ;; + esac + ;; +i[34567]86-*-interix3*) + tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h" + tmake_file="${tmake_file} i386/t-interix" + extra_objs=winnt.o + target_gtfiles="\$(srcdir)/config/i386/winnt.c" + if test x$enable_threads = xyes ; then + thread_file='posix' + fi + if test x$stabs = xyes ; then + tm_file="${tm_file} dbxcoff.h" + fi + ;; +ia64*-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h ia64/sysv4.h ia64/elf.h" + tmake_file="ia64/t-ia64" + target_cpu_default="0" + if test x$gas = xyes + then + target_cpu_default="${target_cpu_default}|MASK_GNU_AS" + fi + if test x$gnu_ld = xyes + then + target_cpu_default="${target_cpu_default}|MASK_GNU_LD" + fi + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o" + ;; +ia64*-*-freebsd*) + tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file} ia64/sysv4.h ia64/freebsd.h" + target_cpu_default="MASK_GNU_AS|MASK_GNU_LD" + tmake_file="${tmake_file} ia64/t-ia64" + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o" + ;; +ia64*-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h ia64/sysv4.h ia64/linux.h" + tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc" + if test x$with_system_libunwind != xyes ; then + tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" + fi + target_cpu_default="MASK_GNU_AS|MASK_GNU_LD" + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o" + ;; +ia64*-*-hpux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h ia64/sysv4.h ia64/hpux.h" + tmake_file="ia64/t-ia64 ia64/t-hpux" + target_cpu_default="MASK_GNU_AS" + case x$enable_threads in + x | xyes | xposix ) + thread_file=posix + ;; + esac + use_collect2=no + c_target_objs="ia64-c.o" + cxx_target_objs="ia64-c.o" + extra_options="${extra_options} ia64/ilp32.opt" + ;; +iq2000*-*-elf*) + tm_file="svr4.h elfos.h iq2000/iq2000.h" + tmake_file=iq2000/t-iq2000 + out_file=iq2000/iq2000.c + md_file=iq2000/iq2000.md + ;; +m32r-*-elf*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + extra_parts="crtinit.o crtfini.o" + ;; +m32rle-*-elf*) + tm_file="dbxelf.h elfos.h svr4.h m32r/little.h ${tm_file}" + extra_parts="crtinit.o crtfini.o m32rx/crtinit.o m32rx/crtfini.o" + ;; +m32r-*-rtems*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file} m32r/rtems.h rtems.h" + tmake_file="m32r/t-m32r t-rtems" + extra_parts="crtinit.o crtfini.o" + ;; +m32r-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} m32r/linux.h" + # We override the tmake_file for linux -- why? + tmake_file="t-slibgcc-elf-ver m32r/t-linux" + gnu_ld=yes + if test x$enable_threads = xyes; then + thread_file='posix' + fi + ;; +m32rle-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h m32r/little.h ${tm_file} m32r/linux.h" + # We override the tmake_file for linux -- why? + tmake_file="t-slibgcc-elf-ver m32r/t-linux" + gnu_ld=yes + if test x$enable_threads = xyes; then + thread_file='posix' + fi + ;; +# m68hc11 and m68hc12 share the same machine description. +m68hc11-*-*|m6811-*-*) + tm_file="dbxelf.h elfos.h usegas.h m68hc11/m68hc11.h" + tm_p_file="m68hc11/m68hc11-protos.h" + md_file="m68hc11/m68hc11.md" + out_file="m68hc11/m68hc11.c" + tmake_file="m68hc11/t-m68hc11" + ;; +m68hc12-*-*|m6812-*-*) + tm_file="m68hc11/m68hc12.h dbxelf.h elfos.h usegas.h m68hc11/m68hc11.h" + tm_p_file="m68hc11/m68hc11-protos.h" + md_file="m68hc11/m68hc11.md" + out_file="m68hc11/m68hc11.c" + tmake_file="m68hc11/t-m68hc11" + extra_options="${extra_options} m68hc11/m68hc11.opt" + ;; +m68k-*-aout*) + default_m68k_cpu=68020 + default_cf_cpu=5206 + tmake_file="m68k/t-floatlib m68k/t-m68kbare m68k/t-mlibs" + tm_file="${tm_file} m68k/m68k-none.h m68k/m68kemb.h m68k/m68k-aout.h libgloss.h" + ;; +m68k-*-coff*) + default_m68k_cpu=68020 + default_cf_cpu=5206 + tmake_file="m68k/t-floatlib m68k/t-m68kbare m68k/t-mlibs" + tm_defines="${tm_defines} MOTOROLA=1" + tm_file="${tm_file} m68k/m68k-none.h m68k/m68kemb.h dbxcoff.h m68k/coff.h dbx.h" + ;; +m68k-*-elf* | fido-*-elf*) + case ${target} in + fido-*-elf*) + # Check that $with_cpu makes sense. + case $with_cpu in + "" | "fidoa") + ;; + *) + echo "Cannot accept --with-cpu=$with_cpu" + exit 1 + ;; + esac + with_cpu=fidoa + ;; + *) + default_m68k_cpu=68020 + default_cf_cpu=5206 + ;; + esac + tm_file="${tm_file} m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/m68kemb.h m68k/m68020-elf.h" + tm_defines="${tm_defines} MOTOROLA=1" + tmake_file="m68k/t-floatlib m68k/t-m68kbare m68k/t-m68kelf" + # Add multilibs for targets other than fido. + case ${target} in + fido-*-elf*) + ;; + *) + tmake_file="$tmake_file m68k/t-mlibs" + ;; + esac + extra_parts="crtbegin.o crtend.o" + ;; +m68k*-*-netbsdelf*) + default_m68k_cpu=68020 + default_cf_cpu=5475 + tm_file="${tm_file} dbxelf.h elfos.h netbsd.h netbsd-elf.h m68k/netbsd-elf.h" + tm_defines="${tm_defines} MOTOROLA=1" + ;; +m68k*-*-openbsd*) + default_m68k_cpu=68020 + default_cf_cpu=5475 + # needed to unconfuse gdb + tm_defines="${tm_defines} OBSD_OLD_GAS" + tm_file="${tm_file} openbsd.h m68k/openbsd.h" + tmake_file="t-libc-ok t-openbsd m68k/t-openbsd" + # we need collect2 until our bug is fixed... + use_collect2=yes + ;; +m68k-*-uclinuxoldabi*) # Motorola m68k/ColdFire running uClinux + # with uClibc, using the original + # m68k-elf-based ABI + default_m68k_cpu=68020 + default_cf_cpu=5206 + tm_file="${tm_file} m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/uclinux-oldabi.h" + tm_defines="${tm_defines} MOTOROLA=1" + tmake_file="m68k/t-floatlib m68k/t-uclinux" + ;; +m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux + # with uClibc, using the new GNU/Linux-style + # ABI. + default_m68k_cpu=68020 + default_cf_cpu=5206 + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h flat.h m68k/linux.h m68k/uclinux.h ./sysroot-suffix.h" + tm_defines="${tm_defines} MOTOROLA=1 UCLIBC_DEFAULT=1" + extra_options="${extra_options} linux.opt" + tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs" + ;; +m68k-*-linux*) # Motorola m68k's running GNU/Linux + # with ELF format using glibc 2 + # aka the GNU/Linux C library 6. + default_m68k_cpu=68020 + default_cf_cpu=5475 + with_arch=${with_arch:-m68k} + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h m68k/linux.h ./sysroot-suffix.h" + extra_options="${extra_options} m68k/ieee.opt" + tm_defines="${tm_defines} MOTOROLA=1" + tmake_file="${tmake_file} m68k/t-floatlib m68k/t-linux m68k/t-mlibs" + # if not configured with --enable-sjlj-exceptions, bump the + # libgcc version number + if test x$sjlj != x1; then + tmake_file="$tmake_file m68k/t-slibgcc-elf-ver" + fi + ;; +m68k-*-rtems*) + default_m68k_cpu=68020 + default_cf_cpu=5206 + tmake_file="m68k/t-floatlib m68k/t-m68kbare m68k/t-crtstuff t-rtems m68k/t-rtems m68k/t-mlibs" + tm_file="${tm_file} m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/m68kemb.h m68k/m68020-elf.h m68k/rtemself.h rtems.h" + tm_defines="${tm_defines} MOTOROLA=1" + extra_parts="crtbegin.o crtend.o" + ;; +mcore-*-elf) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file} mcore/mcore-elf.h" + tmake_file=mcore/t-mcore + inhibit_libc=true + ;; +mcore-*-pe*) + tm_file="svr3.h dbxcoff.h ${tm_file} mcore/mcore-pe.h" + tmake_file=mcore/t-mcore-pe + inhibit_libc=true + ;; +mips-sgi-irix[56]*) + tm_file="elfos.h ${tm_file} mips/iris.h" + tmake_file="mips/t-iris mips/t-slibgcc-irix" + target_cpu_default="MASK_ABICALLS" + case ${target} in + *-*-irix5*) + tm_file="${tm_file} mips/iris5.h" + ;; + + *-*-irix6*) + tm_file="${tm_file} mips/iris6.h" + tmake_file="${tmake_file} mips/t-iris6" + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_N32" + ;; + esac + if test "x$stabs" = xyes + then + tm_file="${tm_file} dbx.h mips/dbxmdebug.h" + fi + if test "x$gnu_ld" = xyes + then + tm_defines="${tm_defines} IRIX_USING_GNU_LD" + fi + case ${enable_threads}:${have_pthread_h} in + "":yes | yes:yes ) thread_file=posix ;; + esac + ;; +mips*-*-netbsd*) # NetBSD/mips, either endian. + target_cpu_default="MASK_ABICALLS" + tm_file="elfos.h ${tm_file} mips/elf.h netbsd.h netbsd-elf.h mips/netbsd.h" + ;; +mips64*-*-linux* | mipsisa64*-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h mips/linux64.h" + tmake_file="${tmake_file} mips/t-linux64 mips/t-libgcc-mips16" + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32" + case ${target} in + mips64el-st-linux-gnu) + tm_file="${tm_file} mips/st.h" + tmake_file="${tmake_file} mips/t-st" + ;; + mips64octeon*-*-linux*) + tm_defines="${tm_defines} MIPS_CPU_STRING_DEFAULT=\\\"octeon\\\"" + target_cpu_default=MASK_SOFT_FLOAT_ABI + ;; + mipsisa64r2*-*-linux*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=65" + ;; + esac + gnu_ld=yes + gas=yes + test x$with_llsc != x || with_llsc=yes + ;; +mips*-*-linux*) # Linux MIPS, either endian. + tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h" + tmake_file="${tmake_file} mips/t-libgcc-mips16" + case ${target} in + mipsisa32r2*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33" + ;; + mipsisa32*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32" + esac + test x$with_llsc != x || with_llsc=yes + ;; +mips*-*-openbsd*) + tm_defines="${tm_defines} OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_OBJECT OBSD_HAS_CORRECT_SPECS" + target_cpu_default="MASK_ABICALLS" + tm_file="mips/mips.h openbsd.h mips/openbsd.h mips/sdb.h" + case ${target} in + mips*el-*-openbsd*) + tm_defines="${tm_defines} TARGET_ENDIAN_DEFAULT=0";; + *) tm_defines="${tm_defines} TARGET_ENDIAN_DEFAULT=MASK_BIG_ENDIAN";; + esac + ;; +mips*-sde-elf*) + tm_file="elfos.h ${tm_file} mips/elf.h mips/sde.h" + tmake_file="mips/t-sde mips/t-libgcc-mips16" + case "${with_newlib}" in + yes) + # newlib / libgloss. + ;; + *) + # MIPS toolkit libraries. + tm_file="$tm_file mips/sdemtk.h" + tmake_file="$tmake_file mips/t-sdemtk" + extra_options="$extra_options mips/sdemtk.opt" + case ${enable_threads} in + "" | yes | mipssde) + thread_file='mipssde' + ;; + esac + ;; + esac + case ${target} in + mipsisa32r2*) + tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_32" + ;; + mipsisa32*) + tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_32" + ;; + mipsisa64r2*) + tm_defines="MIPS_ISA_DEFAULT=65 MIPS_ABI_DEFAULT=ABI_N32" + ;; + mipsisa64*) + tm_defines="MIPS_ISA_DEFAULT=64 MIPS_ABI_DEFAULT=ABI_N32" + ;; + esac + ;; +mipsisa32-*-elf* | mipsisa32el-*-elf* | \ +mipsisa32r2-*-elf* | mipsisa32r2el-*-elf* | \ +mipsisa64-*-elf* | mipsisa64el-*-elf* | \ +mipsisa64r2-*-elf* | mipsisa64r2el-*-elf*) + tm_file="elfos.h ${tm_file} mips/elf.h" + tmake_file="mips/t-isa3264 mips/t-libgcc-mips16" + case ${target} in + mipsisa32r2*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33" + ;; + mipsisa32*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32" + ;; + mipsisa64r2*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=65" + ;; + mipsisa64*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64" + ;; + esac + case ${target} in + mipsisa32*-*-elfoabi*) + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_32" + tm_file="${tm_file} mips/elfoabi.h" + ;; + mipsisa64*-*-elfoabi*) + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_O64" + tm_file="${tm_file} mips/elfoabi.h" + ;; + *-*-elf*) + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_EABI" + ;; + esac + ;; +mipsisa64sr71k-*-elf*) + tm_file="elfos.h ${tm_file} mips/elf.h" + tmake_file=mips/t-sr71k + target_cpu_default="MASK_64BIT|MASK_FLOAT64" + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64 MIPS_CPU_STRING_DEFAULT=\\\"sr71000\\\" MIPS_ABI_DEFAULT=ABI_EABI" + ;; +mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*) + tm_file="elfos.h ${tm_file} mips/elf.h" + tmake_file="mips/t-elf mips/t-libgcc-mips16 mips/t-sb1" + target_cpu_default="MASK_64BIT|MASK_FLOAT64" + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64 MIPS_CPU_STRING_DEFAULT=\\\"sb1\\\" MIPS_ABI_DEFAULT=ABI_O64" + ;; +mips-*-elf* | mipsel-*-elf*) + tm_file="elfos.h ${tm_file} mips/elf.h" + tmake_file="mips/t-elf mips/t-libgcc-mips16" + ;; +mips64-*-elf* | mips64el-*-elf*) + tm_file="elfos.h ${tm_file} mips/elf.h" + tmake_file="mips/t-elf mips/t-libgcc-mips16" + target_cpu_default="MASK_64BIT|MASK_FLOAT64" + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_O64" + ;; +mips64vr-*-elf* | mips64vrel-*-elf*) + tm_file="elfos.h ${tm_file} mips/vr.h mips/elf.h" + tmake_file=mips/t-vr + ;; +mips64orion-*-elf* | mips64orionel-*-elf*) + tm_file="elfos.h ${tm_file} mips/elforion.h mips/elf.h" + tmake_file="mips/t-elf mips/t-libgcc-mips16" + target_cpu_default="MASK_64BIT|MASK_FLOAT64" + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_O64" + ;; +mips*-*-rtems*) + tm_file="elfos.h ${tm_file} mips/elf.h mips/rtems.h rtems.h" + tmake_file="mips/t-elf mips/t-libgcc-mips16 t-rtems mips/t-rtems" + ;; +mips-wrs-vxworks) + tm_file="elfos.h ${tm_file} svr4.h mips/elf.h vx-common.h vxworks.h mips/vxworks.h" + tmake_file="${tmake_file} mips/t-vxworks" + ;; +mipstx39-*-elf* | mipstx39el-*-elf*) + tm_file="elfos.h ${tm_file} mips/r3900.h mips/elf.h" + tmake_file="mips/t-r3900 mips/t-libgcc-mips16" + ;; +mmix-knuth-mmixware) + need_64bit_hwint=yes + ;; +mn10300-*-*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + if test x$stabs = xyes + then + tm_file="${tm_file} dbx.h" + fi + use_collect2=no + ;; +pdp11-*-bsd) + tm_file="${tm_file} pdp11/2bsd.h" + use_fixproto=yes + ;; +pdp11-*-*) + ;; +picochip-*) + # Nothing special + ;; +# port not yet contributed +#powerpc-*-openbsd*) +# tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-fprules-fpbit " +# extra_headers= +# ;; +powerpc64-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" + test x$with_cpu != x || cpu_is_64bit=yes + test x$cpu_is_64bit != xyes || tm_file="${tm_file} rs6000/default64.h" + tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h" + if test x${enable_secureplt} = xyes; then + tm_file="rs6000/secureplt.h ${tm_file}" + fi + extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt" + tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" + ;; +powerpc64-*-gnu*) + tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux64.h rs6000/gnu.h" + extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt" + tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" + ;; +powerpc-*-darwin*) + extra_options="${extra_options} rs6000/darwin.opt" + extra_parts="crt2.o" + case ${target} in + *-darwin1[0-9]* | *-darwin[8-9]*) + tmake_file="${tmake_file} rs6000/t-darwin8" + tm_file="${tm_file} rs6000/darwin8.h" + ;; + *-darwin7*) + tm_file="${tm_file} rs6000/darwin7.h" + ;; + *-darwin[0-6]*) + ;; + esac + extra_headers=altivec.h + ;; +powerpc64-*-darwin*) + tm_file="${tm_file} ${cpu_type}/darwin8.h ${cpu_type}/darwin64.h" + extra_options="${extra_options} ${cpu_type}/darwin.opt" + # We're omitting t-darwin8 to avoid building any multilibs + extra_headers=altivec.h + ;; +powerpc*-*-freebsd*) + tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file} rs6000/sysv4.h rs6000/freebsd.h" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" + extra_options="${extra_options} rs6000/sysv4.opt" + ;; +powerpc-*-netbsd*) + tm_file="${tm_file} dbxelf.h elfos.h netbsd.h netbsd-elf.h freebsd-spec.h rs6000/sysv4.h rs6000/netbsd.h" + tmake_file="${tmake_file} rs6000/t-netbsd" + extra_options="${extra_options} rs6000/sysv4.opt" + ;; +powerpc-*-eabispe*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabispe.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-spe rs6000/t-ppccomm" + ;; +powerpc-*-eabisimaltivec*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h rs6000/eabialtivec.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcendian rs6000/t-ppccomm" + ;; +powerpc-*-eabisim*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + ;; +powerpc-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + ;; +powerpc-*-eabialtivec*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabialtivec.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcendian rs6000/t-ppccomm" + ;; +powerpc-xilinx-eabi*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/singlefp.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + ;; +powerpc-*-eabi*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + ;; +powerpc-*-rtems*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/rtems.h rtems.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-rtems t-rtems rs6000/t-ppccomm" + ;; +powerpc-*-linux*altivec*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" + ;; +powerpc-*-linux*spe*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h rs6000/e500.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" + ;; +powerpc-*-linux*paired*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/750cl.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" + ;; +powerpc-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="t-dfprules rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" + case ${enable_targets}:${cpu_is_64bit} in + *powerpc64* | all:* | *:yes) + if test x$cpu_is_64bit = xyes; then + tm_file="${tm_file} rs6000/default64.h" + fi + tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h" + tmake_file="$tmake_file rs6000/t-linux64" + extra_options="${extra_options} rs6000/linux64.opt" + ;; + *) + tm_file="${tm_file} rs6000/linux.h" + ;; + esac + tmake_file="${tmake_file} rs6000/t-fprules-softfp soft-fp/t-softfp" + if test x${enable_secureplt} = xyes; then + tm_file="rs6000/secureplt.h ${tm_file}" + fi + ;; +powerpc-*-gnu-gnualtivec*) + tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm" + if test x$enable_threads = xyes; then + thread_file='posix' + fi + ;; +powerpc-*-gnu*) + tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm" + extra_options="${extra_options} rs6000/sysv4.opt" + if test x$enable_threads = xyes; then + thread_file='posix' + fi + ;; +powerpc-wrs-vxworks|powerpc-wrs-vxworksae) + tm_file="${tm_file} elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" + tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppccomm rs6000/t-vxworks" + extra_options="${extra_options} rs6000/sysv4.opt" + extra_headers=ppc-asm.h + case ${target} in + *-vxworksae*) + tm_file="${tm_file} vx-common.h vxworksae.h rs6000/vxworks.h rs6000/e500.h rs6000/vxworksae.h" + tmake_file="${tmake_file} rs6000/t-vxworksae" + ;; + *-vxworks*) + tm_file="${tm_file} vx-common.h vxworks.h rs6000/vxworks.h rs6000/e500.h" + ;; + esac + ;; +powerpc-*-lynxos*) + xm_defines=POSIX + tm_file="${tm_file} dbxelf.h elfos.h rs6000/sysv4.h rs6000/lynx.h lynx.h" + tmake_file="t-lynx rs6000/t-lynx" + extra_options="${extra_options} rs6000/sysv4.opt lynx.opt" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + extra_options="${extra_options} lynx.opt" + thread_file=lynx + gnu_ld=yes + gas=yes + ;; +powerpcle-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + extra_options="${extra_options} rs6000/sysv4.opt" + ;; +powerpcle-*-eabisim*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + extra_options="${extra_options} rs6000/sysv4.opt" + ;; +powerpcle-*-eabi*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + extra_options="${extra_options} rs6000/sysv4.opt" + ;; +powerpc-xilinx-eabi*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/singlefp.h rs6000/xfpu.h" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" + ;; +rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*) + tm_file="${tm_file} rs6000/aix.h rs6000/aix41.h rs6000/xcoff.h" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-newas" + extra_options="${extra_options} rs6000/aix41.opt" + use_collect2=yes + extra_headers= + use_fixproto=yes + ;; +rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*) + tm_file="rs6000/biarch64.h ${tm_file} rs6000/aix.h rs6000/aix43.h rs6000/xcoff.h" + tmake_file=rs6000/t-aix43 + extra_options="${extra_options} rs6000/aix64.opt" + use_collect2=yes + thread_file='aix' + extra_headers= + ;; +rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*) + tm_file="rs6000/biarch64.h ${tm_file} rs6000/aix.h rs6000/aix51.h rs6000/xcoff.h" + extra_options="${extra_options} rs6000/aix64.opt" + tmake_file=rs6000/t-aix43 + use_collect2=yes + thread_file='aix' + extra_headers= + ;; +rs6000-ibm-aix5.2.* | powerpc-ibm-aix5.2.*) + tm_file="${tm_file} rs6000/aix.h rs6000/aix52.h rs6000/xcoff.h" + tmake_file=rs6000/t-aix52 + extra_options="${extra_options} rs6000/aix64.opt" + use_collect2=yes + thread_file='aix' + extra_headers= + ;; +rs6000-ibm-aix5.3.* | powerpc-ibm-aix5.3.*) + tm_file="${tm_file} rs6000/aix.h rs6000/aix53.h rs6000/xcoff.h" + tmake_file=rs6000/t-aix52 + extra_options="${extra_options} rs6000/aix64.opt" + use_collect2=yes + thread_file='aix' + extra_headers=altivec.h + ;; +rs6000-ibm-aix[6789].* | powerpc-ibm-aix[6789].*) + tm_file="${tm_file} rs6000/aix.h rs6000/aix61.h rs6000/xcoff.h" + tmake_file=rs6000/t-aix52 + extra_options="${extra_options} rs6000/aix64.opt" + use_collect2=yes + thread_file='aix' + extra_headers=altivec.h + ;; +s390-*-linux*) + tm_file="s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h" + tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-linux" + ;; +s390x-*-linux*) + tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h" + tm_p_file=s390/s390-protos.h + md_file=s390/s390.md + extra_modes=s390/s390-modes.def + out_file=s390/s390.c + tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-linux s390/t-linux64" + ;; +s390x-ibm-tpf*) + tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h s390/tpf.h" + tm_p_file=s390/s390-protos.h + md_file=s390/s390.md + extra_modes=s390/s390-modes.def + out_file=s390/s390.c + extra_parts="crtbeginS.o crtendS.o" + tmake_file="s390/t-crtstuff s390/t-tpf" + thread_file='tpf' + extra_options="${extra_options} s390/tpf.opt" + ;; +score-*-elf) + tm_file="dbxelf.h elfos.h score/elf.h score/score.h" + tmake_file=score/t-score-elf + extra_objs="score7.o score3.o" + ;; +sh-*-elf* | sh[12346l]*-*-elf* | \ +sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \ + sh-*-linux* | sh[2346lbe]*-*-linux* | \ + sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \ + sh64-*-netbsd* | sh64l*-*-netbsd*) + tmake_file="${tmake_file} sh/t-sh sh/t-elf" + if test x${with_endian} = x; then + case ${target} in + sh[1234]*be-*-* | sh[1234]*eb-*-*) with_endian=big ;; + shbe-*-* | sheb-*-*) with_endian=big,little ;; + sh[1234]l* | sh[34]*-*-linux*) with_endian=little ;; + shl* | sh64l* | sh*-*-linux* | \ + sh5l* | sh-superh-elf) with_endian=little,big ;; + sh[1234]*-*-*) with_endian=big ;; + *) with_endian=big,little ;; + esac + fi + case ${with_endian} in + big|little) tmake_file="${tmake_file} sh/t-1e" ;; + big,little|little,big) ;; + *) echo "with_endian=${with_endian} not supported."; exit 1 ;; + esac + case ${with_endian} in + little*) tm_file="sh/little.h ${tm_file}" ;; + esac + tm_file="${tm_file} dbxelf.h elfos.h" + case ${target} in + sh*-*-netbsd*) ;; + *) tm_file="${tm_file} svr4.h" ;; + esac + tm_file="${tm_file} sh/elf.h" + case ${target} in + sh*-*-linux*) tmake_file="${tmake_file} sh/t-linux" + tm_file="${tm_file} linux.h sh/linux.h" ;; + sh*-*-netbsd*) tm_file="${tm_file} netbsd.h netbsd-elf.h sh/netbsd-elf.h" ;; + sh*-superh-elf) if test x$with_libgloss != xno; then + with_libgloss=yes + tm_file="${tm_file} sh/newlib.h" + fi + tm_file="${tm_file} sh/embed-elf.h sh/superh.h" + tmake_file="${tmake_file} sh/t-superh" + extra_options="${extra_options} sh/superh.opt" ;; + *) if test x$with_newlib = xyes \ + && test x$with_libgloss = xyes; then + tm_file="${tm_file} sh/newlib.h" + fi + tm_file="${tm_file} sh/embed-elf.h" ;; + esac + case ${target} in + sh5*-*-netbsd*) + # SHmedia, 32-bit ABI + tmake_file="${tmake_file} sh/t-sh64 sh/t-netbsd" + ;; + sh64*-netbsd*) + # SHmedia, 64-bit ABI + tmake_file="${tmake_file} sh/t-sh64 sh/t-netbsd sh/t-netbsd-sh5-64" + ;; + *-*-netbsd) + tmake_file="${tmake_file} sh/t-netbsd" + ;; + sh64*-*-linux*) + tmake_file="${tmake_file} sh/t-sh64 sh/t-linux64" + tm_file="${tm_file} sh/sh64.h" + extra_headers="shmedia.h ushmedia.h sshmedia.h" + ;; + sh64*) + tmake_file="${tmake_file} sh/t-sh64" + tm_file="${tm_file} sh/sh64.h" + extra_headers="shmedia.h ushmedia.h sshmedia.h" + ;; + *-*-symbianelf*) + tmake_file="sh/t-symbian" + tm_file="sh/symbian-pre.h sh/little.h ${tm_file} sh/symbian-post.h" + extra_objs="symbian.o" + extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o crtbeginS.o crtendS.o" + ;; + esac + # sed el/eb endian suffixes away to avoid confusion with sh[23]e + case `echo ${target} | sed 's/e[lb]-/-/'` in + sh64*-*-netbsd*) sh_cpu_target=sh5-64media ;; + sh64* | sh5*-*-netbsd*) sh_cpu_target=sh5-32media ;; + sh4a_single_only*) sh_cpu_target=sh4a-single-only ;; + sh4a_single*) sh_cpu_target=sh4a-single ;; + sh4a_nofpu*) sh_cpu_target=sh4a-nofpu ;; + sh4al) sh_cpu_target=sh4al ;; + sh4a*) sh_cpu_target=sh4a ;; + sh4_single_only*) sh_cpu_target=sh4-single-only ;; + sh4_single*) sh_cpu_target=sh4-single ;; + sh4_nofpu*) sh_cpu_target=sh4-nofpu ;; + sh4* | sh-superh-*) sh_cpu_target=sh4 ;; + sh3e*) sh_cpu_target=sh3e ;; + sh*-*-netbsd* | sh3*) sh_cpu_target=sh3 ;; + sh2a_single_only*) sh_cpu_target=sh2a-single-only ;; + sh2a_single*) sh_cpu_target=sh2a-single ;; + sh2a_nofpu*) sh_cpu_target=sh2a-nofpu ;; + sh2a*) sh_cpu_target=sh2a ;; + sh2e*) sh_cpu_target=sh2e ;; + sh2*) sh_cpu_target=sh2 ;; + *) sh_cpu_target=sh1 ;; + esac + # did the user say --without-fp ? + if test x$with_fp = xno; then + case ${sh_cpu_target} in + sh5-*media) sh_cpu_target=${sh_cpu_target}-nofpu ;; + sh4al | sh1) ;; + sh4a* ) sh_cpu_target=sh4a-nofpu ;; + sh4*) sh_cpu_target=sh4-nofpu ;; + sh3*) sh_cpu_target=sh3 ;; + sh2a*) sh_cpu_target=sh2a-nofpu ;; + sh2*) sh_cpu_target=sh2 ;; + *) echo --without-fp not available for $target: ignored + esac + tm_defines="$tm_defines STRICT_NOFPU=1" + fi + sh_cpu_default="`echo $with_cpu|sed s/^m/sh/|tr A-Z_ a-z-`" + case $sh_cpu_default in + sh5-64media-nofpu | sh5-64media | \ + sh5-32media-nofpu | sh5-32media | sh5-compact-nofpu | sh5-compact | \ + sh2a-single-only | sh2a-single | sh2a-nofpu | sh2a | \ + sh4a-single-only | sh4a-single | sh4a-nofpu | sh4a | sh4al | \ + sh4-single-only | sh4-single | sh4-nofpu | sh4 | sh4-300 | \ + sh3e | sh3 | sh2e | sh2 | sh1) ;; + "") sh_cpu_default=${sh_cpu_target} ;; + *) echo "with_cpu=$with_cpu not supported"; exit 1 ;; + esac + sh_multilibs=${with_multilib_list} + if test x${sh_multilibs} = x ; then + case ${target} in + sh64-superh-linux* | \ + sh[1234]*) sh_multilibs=${sh_cpu_target} ;; + sh64* | sh5*) sh_multilibs=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu ;; + sh-superh-*) sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;; + sh*-*-linux*) sh_multilibs=m1,m3e,m4 ;; + sh*-*-netbsd*) sh_multilibs=m3,m3e,m4 ;; + *) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;; + esac + if test x$with_fp = xno; then + sh_multilibs="`echo $sh_multilibs|sed -e s/m4/sh4-nofpu/ -e s/,m4-[^,]*//g -e s/,m[23]e// -e s/m2a,m2a-single/m2a-nofpu/ -e s/m5-..m....,//g`" + fi + fi + target_cpu_default=SELECT_`echo ${sh_cpu_default}|tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_` + tm_defines=${tm_defines}' SH_MULTILIB_CPU_DEFAULT=\"'`echo $sh_cpu_default|sed s/sh/m/`'\"' + sh_multilibs=`echo $sh_multilibs,$sh_cpu_default | sed -e 's/[ ,/][ ,]*/ /g' -e 's/ $//' -e 's/^m/sh/' -e 's/ m/ sh/g' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ_ abcdefghijklmnopqrstuvwxyz-` + for sh_multilib in ${sh_multilibs}; do + case ${sh_multilib} in + sh1 | sh2 | sh2e | sh3 | sh3e | \ + sh4 | sh4-single | sh4-single-only | sh4-nofpu | sh4-300 |\ + sh4a | sh4a-single | sh4a-single-only | sh4a-nofpu | sh4al | \ + sh2a | sh2a-single | sh2a-single-only | sh2a-nofpu | \ + sh5-64media | sh5-64media-nofpu | \ + sh5-32media | sh5-32media-nofpu | \ + sh5-compact | sh5-compact-nofpu) + tmake_file="${tmake_file} sh/t-mlib-${sh_multilib}" + tm_defines="$tm_defines SUPPORT_`echo $sh_multilib|tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`=1" + ;; + *) + echo "with_multilib_list=${sh_multilib} not supported." + exit 1 + ;; + esac + done + if test x${enable_incomplete_targets} = xyes ; then + tm_defines="$tm_defines SUPPORT_SH1=1 SUPPORT_SH2E=1 SUPPORT_SH4=1 SUPPORT_SH4_SINGLE=1 SUPPORT_SH2A=1 SUPPORT_SH2A_SINGLE=1 SUPPORT_SH5_32MEDIA=1 SUPPORT_SH5_32MEDIA_NOFPU=1 SUPPORT_SH5_64MEDIA=1 SUPPORT_SH5_64MEDIA_NOFPU=1" + fi + ;; +sh-*-rtems*) + tmake_file="sh/t-sh sh/t-elf t-rtems sh/t-rtems" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h" + ;; +sh-wrs-vxworks) + tmake_file="$tmake_file sh/t-sh sh/t-elf sh/t-vxworks" + tm_file="${tm_file} elfos.h svr4.h sh/elf.h sh/embed-elf.h vx-common.h vxworks.h sh/vxworks.h" + ;; +sh-*-*) + tm_file="${tm_file} dbxcoff.h sh/coff.h" + ;; +sparc-*-netbsdelf*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h netbsd.h netbsd-elf.h sparc/netbsd-elf.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + ;; +sparc64-*-openbsd*) + tm_file="sparc/openbsd1-64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp64-elf.h openbsd.h sparc/openbsd64.h" + extra_options="${extra_options} sparc/little-endian.opt" + gas=yes gnu_ld=yes + with_cpu=ultrasparc + ;; +sparc-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h" + tmake_file="sparc/t-elf sparc/t-crtfm" + extra_parts="crti.o crtn.o crtbegin.o crtend.o" + ;; +sparc-*-linux*) # SPARC's running GNU/Linux, libc6 + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h linux.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-linux" + if test x$enable_targets = xall; then + tm_file="sparc/biarch64.h ${tm_file} sparc/linux64.h" + tmake_file="${tmake_file} sparc/t-linux64" + else + tm_file="${tm_file} sparc/linux.h" + fi + tmake_file="${tmake_file} sparc/t-crtfm" + ;; +sparc-*-rtems*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h" + tmake_file="sparc/t-elf sparc/t-crtfm t-rtems" + extra_parts="crti.o crtn.o crtbegin.o crtend.o" + ;; +sparc64-*-solaris2* | sparcv9-*-solaris2*) + tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h" + case ${target} in + *-*-solaris2.1[0-9]*) + tm_file="${tm_file} sol2-10.h" + ;; + esac + tm_file="${tm_file} sparc/sol2.h sparc/sol2-64.h sparc/sol2-bi.h" + if test x$gnu_ld = xyes; then + tm_file="${tm_file} sparc/sol2-gld.h sparc/sol2-gld-bi.h" + fi + if test x$gas = xyes; then + tm_file="${tm_file} sparc/sol2-gas.h sparc/sol2-gas-bi.h" + fi + tm_file="${tm_file} tm-dwarf2.h" + tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtfm" + if test x$gnu_ld = xyes; then + tmake_file="$tmake_file t-slibgcc-elf-ver" + else + tmake_file="$tmake_file t-slibgcc-sld" + fi + c_target_objs="sol2-c.o" + cxx_target_objs="sol2-c.o" + extra_objs="sol2.o" + tm_p_file="${tm_p_file} sol2-protos.h" + extra_parts="crt1.o crti.o crtn.o gcrt1.o crtbegin.o crtend.o" + case ${enable_threads}:${have_pthread_h}:${have_thread_h} in + "":yes:* | yes:yes:* ) thread_file=posix ;; + "":*:yes | yes:*:yes ) thread_file=solaris ;; + esac + ;; +sparc-*-solaris2*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h" + case ${target} in + *-*-solaris2.1[0-9]*) + tm_file="${tm_file} sol2-10.h" + ;; + esac + tm_file="${tm_file} sparc/sol2.h" + if test x$gnu_ld = xyes; then + tm_file="${tm_file} sparc/sol2-gld.h" + fi + if test x$gas = xyes; then + tm_file="${tm_file} sparc/sol2-gas.h" + fi + tmake_file="t-sol2 sparc/t-sol2 sparc/t-crtfm" + if test x$gnu_ld = xyes; then + tmake_file="$tmake_file t-slibgcc-elf-ver" + else + tmake_file="$tmake_file t-slibgcc-sld" + fi + tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h" + if test x$gnu_ld = xyes; then + tm_file="${tm_file} sparc/sol2-gld-bi.h" + fi + if test x$gas = xyes; then + tm_file="${tm_file} sparc/sol2-gas-bi.h" + fi + tm_file="${tm_file} tm-dwarf2.h" + tmake_file="$tmake_file sparc/t-sol2-64" + test x$with_cpu != x || with_cpu=v9 + c_target_objs="sol2-c.o" + cxx_target_objs="sol2-c.o" + extra_objs="sol2.o" + tm_p_file="${tm_p_file} sol2-protos.h" + extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o" + case ${enable_threads}:${have_pthread_h}:${have_thread_h} in + "":yes:* | yes:yes:* ) + thread_file=posix + ;; + "":*:yes | yes:*:yes ) + thread_file=solaris + ;; + esac + ;; +sparc-wrs-vxworks) + tm_file="${tm_file} elfos.h svr4.h sparc/sysv4.h vx-common.h vxworks.h sparc/vxworks.h" + tmake_file="${tmake_file} sparc/t-vxworks" + ;; +sparc64-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp64-elf.h" + extra_options="${extra_options} sparc/little-endian.opt" + tmake_file="${tmake_file} sparc/t-crtfm" + extra_parts="crtbegin.o crtend.o" + ;; +sparc64-*-freebsd*|ultrasparc-*-freebsd*) + tm_file="${tm_file} ${fbsd_tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/freebsd.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-crtfm" + case "x$with_cpu" in + xultrasparc) ;; + x) with_cpu=ultrasparc ;; + *) echo "$with_cpu not supported for freebsd target"; exit 1 ;; + esac + ;; +sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux + tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h linux.h sparc/linux64.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm" + ;; +sparc64-*-netbsd*) + tm_file="sparc/biarch64.h ${tm_file}" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h netbsd.h netbsd-elf.h sparc/netbsd-elf.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-netbsd64" + ;; +spu-*-elf*) + tm_file="dbxelf.h elfos.h spu/spu-elf.h spu/spu.h" + tmake_file="spu/t-spu-elf" + extra_headers="spu_intrinsics.h spu_internals.h vmx2spu.h spu_mfcio.h vec_types.h" + extra_modes=spu/spu-modes.def + c_target_objs="${c_target_objs} spu-c.o" + cxx_target_objs="${cxx_target_objs} spu-c.o" + ;; +v850e1-*-*) + target_cpu_default="TARGET_CPU_v850e1" + tm_file="dbxelf.h elfos.h svr4.h v850/v850.h" + tm_p_file=v850/v850-protos.h + tmake_file=v850/t-v850e + md_file=v850/v850.md + out_file=v850/v850.c + extra_options="${extra_options} v850/v850.opt" + if test x$stabs = xyes + then + tm_file="${tm_file} dbx.h" + fi + use_collect2=no + c_target_objs="v850-c.o" + cxx_target_objs="v850-c.o" + ;; +v850e-*-*) + target_cpu_default="TARGET_CPU_v850e" + tm_file="dbxelf.h elfos.h svr4.h v850/v850.h" + tm_p_file=v850/v850-protos.h + tmake_file=v850/t-v850e + md_file=v850/v850.md + out_file=v850/v850.c + extra_options="${extra_options} v850/v850.opt" + if test x$stabs = xyes + then + tm_file="${tm_file} dbx.h" + fi + use_collect2=no + c_target_objs="v850-c.o" + cxx_target_objs="v850-c.o" + ;; +v850-*-*) + target_cpu_default="TARGET_CPU_generic" + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + tmake_file=v850/t-v850 + if test x$stabs = xyes + then + tm_file="${tm_file} dbx.h" + fi + use_collect2=no + c_target_objs="v850-c.o" + cxx_target_objs="v850-c.o" + ;; +vax-*-netbsdelf*) + tm_file="${tm_file} elfos.h netbsd.h netbsd-elf.h vax/elf.h vax/netbsd-elf.h" + ;; +vax-*-netbsd*) + tm_file="${tm_file} netbsd.h netbsd-aout.h vax/netbsd.h" + tmake_file=t-netbsd + extra_parts="" + use_collect2=yes + ;; +vax-*-openbsd*) + tm_file="vax/vax.h vax/openbsd1.h openbsd.h vax/openbsd.h" + use_collect2=yes + ;; +xstormy16-*-elf) + # For historical reasons, the target files omit the 'x'. + tm_file="dbxelf.h elfos.h svr4.h stormy16/stormy16.h" + tm_p_file=stormy16/stormy16-protos.h + md_file=stormy16/stormy16.md + out_file=stormy16/stormy16.c + extra_options=stormy16/stormy16.opt + tmake_file="stormy16/t-stormy16" + extra_parts="crtbegin.o crtend.o" + ;; +xtensa*-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h xtensa/elf.h" + tmake_file="xtensa/t-xtensa xtensa/t-elf" + ;; +xtensa*-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h xtensa/linux.h" + tmake_file="${tmake_file} xtensa/t-xtensa xtensa/t-linux" + ;; +am33_2.0-*-linux*) + tm_file="mn10300/mn10300.h dbxelf.h elfos.h linux.h mn10300/linux.h" + tmake_file="${tmake_file} mn10300/t-linux" + gas=yes gnu_ld=yes + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" + use_collect2=no + ;; +m32c-*-rtems*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file} m32c/rtems.h rtems.h" + tmake_file="${tmake_file} t-rtems" + c_target_objs="m32c-pragma.o" + cxx_target_objs="m32c-pragma.o" + ;; +m32c-*-elf*) + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + c_target_objs="m32c-pragma.o" + cxx_target_objs="m32c-pragma.o" + ;; +*) + echo "*** Configuration ${target} not supported" 1>&2 + exit 1 + ;; +esac + +case ${target} in +i[34567]86-*-linux* | x86_64-*-linux*) + tmake_file="${tmake_file} i386/t-pmm_malloc i386/t-i386" + ;; +i[34567]86-*-* | x86_64-*-*) + tmake_file="${tmake_file} i386/t-gmm_malloc i386/t-i386" + ;; +esac + +# Support for --with-cpu and related options (and a few unrelated options, +# too). +case ${with_cpu} in + yes | no) + echo "--with-cpu must be passed a value" 1>&2 + exit 1 + ;; +esac + +# If there is no $with_cpu option, try to infer one from ${target}. +# This block sets nothing except for with_cpu. +if test x$with_cpu = x ; then + case ${target} in + i386-*-*) + with_cpu=i386 + ;; + i486-*-*) + with_cpu=i486 + ;; + i586-*-*) + case ${target_noncanonical} in + k6_2-*) + with_cpu=k6-2 + ;; + k6_3-*) + with_cpu=k6-3 + ;; + k6-*) + with_cpu=k6 + ;; + pentium_mmx-*|winchip_c6-*|winchip2-*|c3-*) + with_cpu=pentium-mmx + ;; + *) + with_cpu=pentium + ;; + esac + ;; + i686-*-* | i786-*-*) + case ${target_noncanonical} in + amdfam10-*|barcelona-*) + with_cpu=amdfam10 + ;; + k8-*|opteron-*|athlon_64-*) + with_cpu=k8 + ;; + athlon_xp-*|athlon_mp-*|athlon_4-*) + with_cpu=athlon-4 + ;; + athlon_tbird-*|athlon-*) + with_cpu=athlon + ;; + geode-*) + with_cpu=geode + ;; + pentium2-*) + with_cpu=pentium2 + ;; + pentium3-*|pentium3m-*) + with_cpu=pentium3 + ;; + pentium4-*|pentium4m-*) + with_cpu=pentium4 + ;; + prescott-*) + with_cpu=prescott + ;; + nocona-*) + with_cpu=nocona + ;; + core2-*) + with_cpu=core2 + ;; + pentium_m-*) + with_cpu=pentium-m + ;; + pentiumpro-*) + with_cpu=pentiumpro + ;; + *) + with_cpu=generic + ;; + esac + ;; + x86_64-*-*) + case ${target_noncanonical} in + amdfam10-*|barcelona-*) + with_cpu=amdfam10 + ;; + k8-*|opteron-*|athlon_64-*) + with_cpu=k8 + ;; + nocona-*) + with_cpu=nocona + ;; + core2-*) + with_cpu=core2 + ;; + *) + with_cpu=generic + ;; + esac + ;; + alphaev6[78]*-*-*) + with_cpu=ev67 + ;; + alphaev6*-*-*) + with_cpu=ev6 + ;; + alphapca56*-*-*) + with_cpu=pca56 + ;; + alphaev56*-*-*) + with_cpu=ev56 + ;; + alphaev5*-*-*) + with_cpu=ev5 + ;; + frv-*-*linux* | frv400-*-*linux*) + with_cpu=fr400 + ;; + frv550-*-*linux*) + with_cpu=fr550 + ;; + m68k*-*-*) + case "$with_arch" in + "cf") + with_cpu=${default_cf_cpu} + ;; + "" | "m68k") + with_cpu=m${default_m68k_cpu} + ;; + esac + ;; + mips*-*-vxworks) + with_arch=mips2 + ;; + sparc*-*-*) + with_cpu="`echo ${target} | sed 's/-.*$//'`" + ;; + esac + + # Avoid overriding --with-cpu-32 and --with-cpu-64 values. + case ${target} in + i[34567]86-*-*|x86_64-*-*) + if test x$with_cpu != x; then + if test x$with_cpu_32 != x || test x$with_cpu_64 != x; then + if test x$with_cpu_32 = x; then + with_cpu_32=$with_cpu + fi + if test x$with_cpu_64 = x; then + with_cpu_64=$with_cpu + fi + with_cpu= + fi + fi + ;; + esac +fi + +# Similarly for --with-schedule. +if test x$with_schedule = x; then + case ${target} in + hppa1*) + # Override default PA8000 scheduling model. + with_schedule=7100LC + ;; + esac +fi + +# Validate and mark as valid any --with options supported +# by this target. In order to use a particular --with option +# you must list it in supported_defaults; validating the value +# is optional. This case statement should set nothing besides +# supported_defaults. + +supported_defaults= +case "${target}" in + alpha*-*-*) + supported_defaults="cpu tune" + for which in cpu tune; do + eval "val=\$with_$which" + case "$val" in + "" \ + | ev4 | ev45 | 21064 | ev5 | 21164 | ev56 | 21164a \ + | pca56 | 21164PC | 21164pc | ev6 | 21264 | ev67 \ + | 21264a) + ;; + *) + echo "Unknown CPU used in --with-$which=$val" 1>&2 + exit 1 + ;; + esac + done + ;; + + arm*-*-*) + supported_defaults="arch cpu float tune fpu abi mode" + for which in cpu tune; do + # See if it matches any of the entries in arm-cores.def + eval "val=\$with_$which" + if [ x"$val" = x ] \ + || grep "^ARM_CORE(\"$val\"," \ + ${srcdir}/config/arm/arm-cores.def \ + > /dev/null; then + # Ok + new_val=`grep "^ARM_CORE(\"$val\"," \ + ${srcdir}/config/arm/arm-cores.def | \ + sed -e 's/^[^,]*,[ ]*//' | \ + sed -e 's/,.*$//'` + eval "target_${which}_cname=$new_val" + echo "For $val real value is $new_val" + true + else + echo "Unknown CPU used in --with-$which=$val" 1>&2 + exit 1 + fi + done + + case "$with_arch" in + "" \ + | armv[23456] | armv2a | armv3m | armv4t | armv5t \ + | armv5te | armv6j |armv6k | armv6z | armv6zk | armv6-m \ + | armv7 | armv7-a | armv7-r | armv7-m \ + | iwmmxt | ep9312) + # OK + ;; + *) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + + case "$with_float" in + "" \ + | soft | hard | softfp) + # OK + ;; + *) + echo "Unknown floating point type used in --with-float=$with_float" 1>&2 + exit 1 + ;; + esac + + case "$with_fpu" in + "" \ + | fpa | fpe2 | fpe3 | maverick | vfp | vfp3 | neon ) + # OK + ;; + *) + echo "Unknown fpu used in --with-fpu=$with_fpu" 2>&1 + exit 1 + ;; + esac + + case "$with_abi" in + "" \ + | apcs-gnu | atpcs | aapcs | iwmmxt | aapcs-linux ) + #OK + ;; + *) + echo "Unknown ABI used in --with-abi=$with_abi" + exit 1 + ;; + esac + + case "$with_mode" in + "" \ + | arm | thumb ) + #OK + ;; + *) + echo "Unknown mode used in --with-mode=$with_mode" + exit 1 + ;; + esac + + if test "x$with_arch" != x && test "x$with_cpu" != x; then + echo "Warning: --with-arch overrides --with-cpu=$with_cpu" 1>&2 + fi + ;; + + fr*-*-*linux*) + supported_defaults=cpu + case "$with_cpu" in + fr400) ;; + fr550) ;; + *) + echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2 + exit 1 + ;; + esac + ;; + + fido-*-* | m68k*-*-*) + supported_defaults="arch cpu" + case "$with_arch" in + "" | "m68k"| "cf") + m68k_arch_family="$with_arch" + ;; + *) + echo "Invalid --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + + # We always have a $with_cpu setting here. + case "$with_cpu" in + "m68000" | "m68010" | "m68020" | "m68030" | "m68040" | "m68060") + m68k_cpu_ident=$with_cpu + ;; + "m68020-40") + m68k_cpu_ident=m68020 + tm_defines="$tm_defines M68K_DEFAULT_TUNE=u68020_40" + ;; + "m68020-60") + m68k_cpu_ident=m68020 + tm_defines="$tm_defines M68K_DEFAULT_TUNE=u68020_60" + ;; + *) + # We need the C identifier rather than the string. + m68k_cpu_ident=`awk -v arg="\"$with_cpu\"" \ + 'BEGIN { FS="[ \t]*[,()][ \t]*" }; \ + $1 == "M68K_DEVICE" && $2 == arg { print $3 }' \ + ${srcdir}/config/m68k/m68k-devices.def` + if [ x"$m68k_cpu_ident" = x ] ; then + echo "Unknown CPU used in --with-cpu=$with_cpu" 1>&2 + exit 1 + fi + with_cpu="mcpu=$with_cpu" + ;; + esac + ;; + + hppa*-*-*) + supported_defaults="arch schedule" + + case "$with_arch" in + "" | 1.0 | 1.1 | 2.0) + # OK + ;; + *) + echo "Unknown architecture used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + + case "$with_schedule" in + "" | 700 | 7100 | 7100LC | 7200 | 7300 | 8000) + # OK + ;; + *) + echo "Unknown processor used in --with-schedule=$with_schedule." 1>&2 + exit 1 + ;; + esac + ;; + + i[34567]86-*-* | x86_64-*-*) + supported_defaults="arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64" + for which in arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64; do + eval "val=\$with_$which" + case ${val} in + i386 | i486 \ + | i586 | pentium | pentium-mmx | winchip-c6 | winchip2 \ + | c3 | c3-2 | i686 | pentiumpro | pentium2 | pentium3 \ + | pentium4 | k6 | k6-2 | k6-3 | athlon | athlon-tbird \ + | athlon-4 | athlon-xp | athlon-mp | geode \ + | prescott | pentium-m | pentium4m | pentium3m) + case "${target}" in + x86_64-*-*) + case "x$which" in + *_32) + ;; + *) + echo "CPU given in --with-$which=$val doesn't support 64bit mode." 1>&2 + exit 1 + ;; + esac + ;; + esac + # OK + ;; + "" | amdfam10 | barcelona | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | generic) + # OK + ;; + *) + echo "Unknown CPU given in --with-$which=$val." 1>&2 + exit 1 + ;; + esac + done + ;; + + mips*-*-*) + supported_defaults="abi arch float tune divide llsc mips-plt" + + case ${with_float} in + "" | soft | hard) + # OK + ;; + *) + echo "Unknown floating point type used in --with-float=$with_float" 1>&2 + exit 1 + ;; + esac + + case ${with_abi} in + "" | 32 | o64 | n32 | 64 | eabi) + # OK + ;; + *) + echo "Unknown ABI used in --with-abi=$with_abi" 1>&2 + exit 1 + ;; + esac + + case ${with_divide} in + "" | breaks | traps) + # OK + ;; + *) + echo "Unknown division check type use in --with-divide=$with_divide" 1>&2 + exit 1 + ;; + esac + + case ${with_llsc} in + yes) + with_llsc=llsc + ;; + no) + with_llsc="no-llsc" + ;; + "") + # OK + ;; + *) + echo "Unknown llsc type used in --with-llsc" 1>&2 + exit 1 + ;; + esac + + case ${with_mips_plt} in + yes) + with_mips_plt=plt + ;; + no) + with_mips_plt=no-plt + ;; + "") + ;; + *) + echo "Unknown --with-mips-plt argument: $with_mips_plt" 1>&2 + exit 1 + ;; + esac + ;; + + powerpc*-*-* | rs6000-*-*) + supported_defaults="cpu float tune" + + for which in cpu tune; do + eval "val=\$with_$which" + case ${val} in + default32 | default64) + with_which="with_$which" + eval $with_which= + ;; + 405cr) + tm_defines="${tm_defines} CONFIG_PPC405CR" + eval "with_$which=405" + ;; + "" | common \ + | power | power[234567] | power6x | powerpc | powerpc64 \ + | rios | rios1 | rios2 | rsc | rsc1 | rs64a \ + | 401 | 403 | 405 | 405fp | 440 | 440fp | 464 | 464fp \ + | 505 | 601 | 602 | 603 | 603e | ec603e | 604 \ + | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \ + | e300c[23] | 854[08] | e500mc \ + | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5 | cell) + # OK + ;; + *) + echo "Unknown cpu used in --with-$which=$val." 1>&2 + exit 1 + ;; + esac + done + ;; + + s390*-*-*) + supported_defaults="arch mode tune" + + for which in arch tune; do + eval "val=\$with_$which" + case ${val} in + "" | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10) + # OK + ;; + *) + echo "Unknown cpu used in --with-$which=$val." 1>&2 + exit 1 + ;; + esac + done + + case ${with_mode} in + "" | esa | zarch) + # OK + ;; + *) + echo "Unknown architecture mode used in --with-mode=$with_mode." 1>&2 + exit 1 + ;; + esac + ;; + + sh[123456ble]-*-* | sh-*-*) + supported_defaults="cpu" + case "`echo $with_cpu | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ_ abcdefghijklmnopqrstuvwxyz- | sed s/sh/m/`" in + "" | m1 | m2 | m2e | m3 | m3e | m4 | m4-single | m4-single-only | m4-nofpu ) + # OK + ;; + m2a | m2a-single | m2a-single-only | m2a-nofpu) + ;; + m4a | m4a-single | m4a-single-only | m4a-nofpu | m4al) + ;; + *) + echo "Unknown CPU used in --with-cpu=$with_cpu, known values:" 1>&2 + echo "m1 m2 m2e m3 m3e m4 m4-single m4-single-only m4-nofpu" 1>&2 + echo "m4a m4a-single m4a-single-only m4a-nofpu m4al" 1>&2 + echo "m2a m2a-single m2a-single-only m2a-nofpu" 1>&2 + exit 1 + ;; + esac + ;; + sparc*-*-*) + supported_defaults="cpu float tune" + + for which in cpu tune; do + eval "val=\$with_$which" + case ${val} in + "" | sparc | sparcv9 | sparc64 | sparc86x \ + | v7 | cypress | v8 | supersparc | sparclite | f930 \ + | f934 | hypersparc | sparclite86x | sparclet | tsc701 \ + | v9 | ultrasparc | ultrasparc3 | niagara | niagara2) + # OK + ;; + *) + echo "Unknown cpu used in --with-$which=$val" 1>&2 + exit 1 + ;; + esac + done + + case ${with_float} in + "" | soft | hard) + # OK + ;; + *) + echo "Unknown floating point type used in --with-float=$with_float" 1>&2 + exit 1 + ;; + esac + ;; + + spu-*-*) + supported_defaults="arch tune" + + for which in arch tune; do + eval "val=\$with_$which" + case ${val} in + "" | cell | celledp) + # OK + ;; + *) + echo "Unknown cpu used in --with-$which=$val." 1>&2 + exit 1 + ;; + esac + done + ;; + + v850*-*-*) + supported_defaults=cpu + case ${with_cpu} in + "" | v850e | v850e1) + # OK + ;; + *) + echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2 + exit 1 + ;; + esac + ;; +esac + +# Set some miscellaneous flags for particular targets. +target_cpu_default2= +case ${target} in + alpha*-*-*) + if test x$gas = xyes + then + target_cpu_default2="MASK_GAS" + fi + ;; + + arm*-*-*) + if test x$target_cpu_cname = x + then + target_cpu_default2=TARGET_CPU_generic + else + target_cpu_default2=TARGET_CPU_$target_cpu_cname + fi + ;; + + hppa*-*-*) + target_cpu_default2="MASK_BIG_SWITCH" + if test x$gas = xyes + then + target_cpu_default2="${target_cpu_default2}|MASK_GAS|MASK_JUMP_IN_DELAY" + fi + ;; + + fido*-*-* | m68k*-*-*) + target_cpu_default2=$m68k_cpu_ident + if [ x"$m68k_arch_family" != x ]; then + tmake_file="m68k/t-$m68k_arch_family $tmake_file" + fi + ;; + + i[34567]86-*-darwin* | x86_64-*-darwin*) + tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp" + ;; + i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu) + tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux" + ;; + ia64*-*-linux*) + tmake_file="${tmake_file} ia64/t-fprules-softfp soft-fp/t-softfp" + ;; + + mips*-*-*) + if test x$gnu_ld = xyes + then + target_cpu_default2="MASK_SPLIT_ADDRESSES" + fi + case ${target} in + mips*el-*-*) + tm_defines="TARGET_ENDIAN_DEFAULT=0 $tm_defines" + ;; + esac + if test "x$enable_gofast" = xyes + then + tm_defines="US_SOFTWARE_GOFAST $tm_defines" + tmake_file="mips/t-gofast $tmake_file" + else + tmake_file="mips/t-mips $tmake_file" + fi + ;; + + powerpc*-*-* | rs6000-*-*) + # FIXME: The PowerPC port uses the value set at compile time, + # although it's only cosmetic. + if test "x$with_cpu" != x + then + target_cpu_default2="\\\"$with_cpu\\\"" + fi + out_file=rs6000/rs6000.c + c_target_objs="${c_target_objs} rs6000-c.o" + cxx_target_objs="${cxx_target_objs} rs6000-c.o" + tmake_file="rs6000/t-rs6000 ${tmake_file}" + + if test x$enable_e500_double = xyes + then + tm_file="$tm_file rs6000/e500-double.h" + fi + ;; + + sh[123456ble]*-*-* | sh-*-*) + c_target_objs="${c_target_objs} sh-c.o" + cxx_target_objs="${cxx_target_objs} sh-c.o" + ;; + + sparc*-*-*) + # Some standard aliases. + case x$with_cpu in + xsparc) + with_cpu=v7 + ;; + xsparcv9 | xsparc64) + with_cpu=v9 + ;; + esac + + # The SPARC port checks this value at compile-time. + target_cpu_default2="TARGET_CPU_$with_cpu" + ;; + v850*-*-*) + # FIXME: The v850 is "special" in that it does not support + # runtime CPU selection, only --with-cpu. + case "x$with_cpu" in + x) + ;; + xv850e) + target_cpu_default2="TARGET_CPU_$with_cpu" + ;; + esac + ;; +esac + +t= +all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu divide llsc mips-plt" +for option in $all_defaults +do + eval "val=\$with_"`echo $option | sed s/-/_/g` + if test -n "$val"; then + case " $supported_defaults " in + *" $option "*) + ;; + *) + echo "This target does not support --with-$option." 2>&1 + echo "Valid --with options are: $supported_defaults" 2>&1 + exit 1 + ;; + esac + + if test "x$t" = x + then + t="{ \"$option\", \"$val\" }" + else + t="${t}, { \"$option\", \"$val\" }" + fi + fi +done + +if test "x$t" = x +then + configure_default_options="{ { NULL, NULL} }" +else + configure_default_options="{ ${t} }" +fi + +if test "$target_cpu_default2" != "" +then + if test "$target_cpu_default" != "" + then + target_cpu_default="(${target_cpu_default}|${target_cpu_default2})" + else + target_cpu_default=$target_cpu_default2 + fi +fi diff -Naur gcc-4.4.2.orig/gcc/doc/contrib.texi gcc-4.4.2-rtems4.10-20091015/gcc/doc/contrib.texi --- gcc-4.4.2.orig/gcc/doc/contrib.texi 2009-02-20 16:20:38.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/doc/contrib.texi 2009-10-15 18:36:00.000000000 +0200 @@ -55,7 +55,7 @@ Wolfgang Bangerth for processing tons of bug reports. @item -Jon Beniston for his Microsoft Windows port of Java. +Jon Beniston for his Microsoft Windows port of Java and port to Lattice Mico32. @item Daniel Berlin for better DWARF2 support, faster/better optimizations, diff -Naur gcc-4.4.2.orig/gcc/doc/install.texi gcc-4.4.2-rtems4.10-20091015/gcc/doc/install.texi --- gcc-4.4.2.orig/gcc/doc/install.texi 2009-09-12 20:57:06.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/gcc/doc/install.texi 2009-10-15 18:36:00.000000000 +0200 @@ -2658,6 +2658,10 @@ @item @uref{#iq2000-x-elf,,iq2000-*-elf} @item +@uref{#lm32-x-elf,,lm32-*-elf} +@item +@uref{#lm32-x-uclinux,,lm32-*-uclinux} +@item @uref{#m32c-x-elf,,m32c-*-elf} @item @uref{#m32r-x-elf,,m32r-*-elf} @@ -3450,6 +3454,20 @@ @html
@end html +@heading @anchor{lm32-x-elf}lm32-*-elf +Lattice Mico32 processor. +This configuration is intended for embedded systems. + +@html +
+@end html +@heading @anchor{lm32-x-uclinux}lm32-*-uclinux +Lattice Mico32 processor. +This configuration is intended for embedded systems running uClinux. + +@html +
+@end html @heading @anchor{m32c-x-elf}m32c-*-elf Renesas M32C processor. This configuration is intended for embedded systems. diff -Naur gcc-4.4.2.orig/gcc/doc/install.texi.orig gcc-4.4.2-rtems4.10-20091015/gcc/doc/install.texi.orig --- gcc-4.4.2.orig/gcc/doc/install.texi.orig 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/doc/install.texi.orig 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,4324 @@ +\input texinfo.tex @c -*-texinfo-*- +@c @ifnothtml +@c %**start of header +@setfilename gccinstall.info +@settitle Installing GCC +@setchapternewpage odd +@c %**end of header +@c @end ifnothtml + +@include gcc-common.texi + +@c Specify title for specific html page +@ifset indexhtml +@settitle Installing GCC +@end ifset +@ifset specifichtml +@settitle Host/Target specific installation notes for GCC +@end ifset +@ifset prerequisiteshtml +@settitle Prerequisites for GCC +@end ifset +@ifset downloadhtml +@settitle Downloading GCC +@end ifset +@ifset configurehtml +@settitle Installing GCC: Configuration +@end ifset +@ifset buildhtml +@settitle Installing GCC: Building +@end ifset +@ifset testhtml +@settitle Installing GCC: Testing +@end ifset +@ifset finalinstallhtml +@settitle Installing GCC: Final installation +@end ifset +@ifset binarieshtml +@settitle Installing GCC: Binaries +@end ifset +@ifset oldhtml +@settitle Installing GCC: Old documentation +@end ifset +@ifset gfdlhtml +@settitle Installing GCC: GNU Free Documentation License +@end ifset + +@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +@c 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com + +@c IMPORTANT: whenever you modify this file, run `install.texi2html' to +@c test the generation of HTML documents for the gcc.gnu.org web pages. +@c +@c Do not use @footnote{} in this file as it breaks install.texi2html! + +@c Include everything if we're not making html +@ifnothtml +@set indexhtml +@set specifichtml +@set prerequisiteshtml +@set downloadhtml +@set configurehtml +@set buildhtml +@set testhtml +@set finalinstallhtml +@set binarieshtml +@set oldhtml +@set gfdlhtml +@end ifnothtml + +@c Part 2 Summary Description and Copyright +@copying +Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, +1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +2008 Free Software Foundation, Inc. +@sp 1 +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, the Front-Cover texts being (a) (see below), and +with the Back-Cover Texts being (b) (see below). A copy of the +license is included in the section entitled ``@uref{./gfdl.html,,GNU +Free Documentation License}''. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@end copying +@ifinfo +@insertcopying +@end ifinfo +@dircategory Software development +@direntry +* gccinstall: (gccinstall). Installing the GNU Compiler Collection. +@end direntry + +@c Part 3 Titlepage and Copyright +@titlepage +@title Installing GCC +@versionsubtitle + +@c The following two commands start the copyright page. +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Part 4 Top node, Master Menu, and/or Table of Contents +@ifinfo +@node Top, , , (dir) +@comment node-name, next, Previous, up + +@menu +* Installing GCC:: This document describes the generic installation + procedure for GCC as well as detailing some target + specific installation instructions. + +* Specific:: Host/target specific installation notes for GCC. +* Binaries:: Where to get pre-compiled binaries. + +* Old:: Old installation documentation. + +* GNU Free Documentation License:: How you can copy and share this manual. +* Concept Index:: This index has two entries. +@end menu +@end ifinfo + +@iftex +@contents +@end iftex + +@c Part 5 The Body of the Document +@c ***Installing GCC********************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Installing GCC, Binaries, , Top +@end ifnothtml +@ifset indexhtml +@ifnothtml +@chapter Installing GCC +@end ifnothtml + +The latest version of this document is always available at +@uref{http://gcc.gnu.org/install/,,http://gcc.gnu.org/install/}. + +This document describes the generic installation procedure for GCC as well +as detailing some target specific installation instructions. + +GCC includes several components that previously were separate distributions +with their own installation instructions. This document supersedes all +package specific installation instructions. + +@emph{Before} starting the build/install procedure please check the +@ifnothtml +@ref{Specific, host/target specific installation notes}. +@end ifnothtml +@ifhtml +@uref{specific.html,,host/target specific installation notes}. +@end ifhtml +We recommend you browse the entire generic installation instructions before +you proceed. + +Lists of successful builds for released versions of GCC are +available at @uref{http://gcc.gnu.org/buildstat.html}. +These lists are updated as new information becomes available. + +The installation procedure itself is broken into five steps. + +@ifinfo +@menu +* Prerequisites:: +* Downloading the source:: +* Configuration:: +* Building:: +* Testing:: (optional) +* Final install:: +@end menu +@end ifinfo +@ifhtml +@enumerate +@item +@uref{prerequisites.html,,Prerequisites} +@item +@uref{download.html,,Downloading the source} +@item +@uref{configure.html,,Configuration} +@item +@uref{build.html,,Building} +@item +@uref{test.html,,Testing} (optional) +@item +@uref{finalinstall.html,,Final install} +@end enumerate +@end ifhtml + +Please note that GCC does not support @samp{make uninstall} and probably +won't do so in the near future as this would open a can of worms. Instead, +we suggest that you install GCC into a directory of its own and simply +remove that directory when you do not need that specific version of GCC +any longer, and, if shared libraries are installed there as well, no +more binaries exist that use them. + +@ifhtml +There are also some @uref{old.html,,old installation instructions}, +which are mostly obsolete but still contain some information which has +not yet been merged into the main part of this manual. +@end ifhtml + +@html +
+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} + +@insertcopying +@end ifhtml +@end ifset + +@c ***Prerequisites************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Prerequisites, Downloading the source, , Installing GCC +@end ifnothtml +@ifset prerequisiteshtml +@ifnothtml +@chapter Prerequisites +@end ifnothtml +@cindex Prerequisites + +GCC requires that various tools and packages be available for use in the +build procedure. Modifying GCC sources requires additional tools +described below. + +@heading Tools/packages necessary for building GCC +@table @asis +@item ISO C90 compiler +Necessary to bootstrap GCC, although versions of GCC prior +to 3.4 also allow bootstrapping with a traditional (K&R) C compiler. + +To build all languages in a cross-compiler or other configuration where +3-stage bootstrap is not performed, you need to start with an existing +GCC binary (version 2.95 or later) because source code for language +frontends other than C might use GCC extensions. + +@item GNAT + +In order to build the Ada compiler (GNAT) you must already have GNAT +installed because portions of the Ada frontend are written in Ada (with +GNAT extensions.) Refer to the Ada installation instructions for more +specific information. + +@item A ``working'' POSIX compatible shell, or GNU bash + +Necessary when running @command{configure} because some +@command{/bin/sh} shells have bugs and may crash when configuring the +target libraries. In other cases, @command{/bin/sh} or @command{ksh} +have disastrous corner-case performance problems. This +can cause target @command{configure} runs to literally take days to +complete in some cases. + +So on some platforms @command{/bin/ksh} is sufficient, on others it +isn't. See the host/target specific instructions for your platform, or +use @command{bash} to be sure. Then set @env{CONFIG_SHELL} in your +environment to your ``good'' shell prior to running +@command{configure}/@command{make}. + +@command{zsh} is not a fully compliant POSIX shell and will not +work when configuring GCC@. + +@item A POSIX or SVR4 awk + +Necessary for creating some of the generated source files for GCC@. +If in doubt, use a recent GNU awk version, as some of the older ones +are broken. GNU awk version 3.1.5 is known to work. + +@item GNU binutils + +Necessary in some circumstances, optional in others. See the +host/target specific instructions for your platform for the exact +requirements. + +@item gzip version 1.2.4 (or later) or +@itemx bzip2 version 1.0.2 (or later) + +Necessary to uncompress GCC @command{tar} files when source code is +obtained via FTP mirror sites. + +@item GNU make version 3.80 (or later) + +You must have GNU make installed to build GCC@. + +@item GNU tar version 1.14 (or later) + +Necessary (only on some platforms) to untar the source code. Many +systems' @command{tar} programs will also work, only try GNU +@command{tar} if you have problems. + +@item GNU Multiple Precision Library (GMP) version 4.1 (or later) + +Necessary to build GCC@. If you do not have it installed in your +library search path, you will have to configure with the +@option{--with-gmp} configure option. See also @option{--with-gmp-lib} +and @option{--with-gmp-include}. Alternatively, if a GMP source +distribution is found in a subdirectory of your GCC sources named +@file{gmp}, it will be built together with GCC@. + +@item MPFR Library version 2.3.2 (or later) + +Necessary to build GCC@. It can be downloaded from +@uref{http://www.mpfr.org/}. The version of MPFR that is bundled with +GMP 4.1.x contains numerous bugs. Although GCC may appear to function +with the buggy versions of MPFR, there are a few bugs that will not be +fixed when using this version. It is strongly recommended to upgrade +to the recommended version of MPFR. + +The @option{--with-mpfr} configure option should be used if your MPFR +Library is not installed in your default library search path. See also +@option{--with-mpfr-lib} and @option{--with-mpfr-include}. +Alternatively, if a MPFR source distribution is found in a subdirectory +of your GCC sources named @file{mpfr}, it will be built together with +GCC@. + +@item Parma Polyhedra Library (PPL) version 0.10 + +Necessary to build GCC with the Graphite loop optimizations. +It can be downloaded from @uref{http://www.cs.unipr.it/ppl/Download/}. + +The @option{--with-ppl} configure option should be used if PPL is not +installed in your default library search path. + +@item CLooG-PPL version 0.15 + +Necessary to build GCC with the Graphite loop optimizations. It can +be downloaded from @uref{ftp://gcc.gnu.org/pub/gcc/infrastructure/}. +The code in @file{cloog-ppl-0.15.tar.gz} comes from a branch of CLooG +available from @uref{http://repo.or.cz/w/cloog-ppl.git}. CLooG-PPL +should be configured with @option{--with-ppl}. + +The @option{--with-cloog} configure option should be used if CLooG is +not installed in your default library search path. + +@item @command{jar}, or InfoZIP (@command{zip} and @command{unzip}) + +Necessary to build libgcj, the GCJ runtime. + +@end table + + +@heading Tools/packages necessary for modifying GCC +@table @asis +@item autoconf version 2.59 +@itemx GNU m4 version 1.4 (or later) + +Necessary when modifying @file{configure.ac}, @file{aclocal.m4}, etc.@: +to regenerate @file{configure} and @file{config.in} files. + +@item automake version 1.9.6 + +Necessary when modifying a @file{Makefile.am} file to regenerate its +associated @file{Makefile.in}. + +Much of GCC does not use automake, so directly edit the @file{Makefile.in} +file. Specifically this applies to the @file{gcc}, @file{intl}, +@file{libcpp}, @file{libiberty}, @file{libobjc} directories as well +as any of their subdirectories. + +For directories that use automake, GCC requires the latest release in +the 1.9.x series, which is currently 1.9.6. When regenerating a directory +to a newer version, please update all the directories using an older 1.9.x +to the latest released version. + +@item gettext version 0.14.5 (or later) + +Needed to regenerate @file{gcc.pot}. + +@item gperf version 2.7.2 (or later) + +Necessary when modifying @command{gperf} input files, e.g.@: +@file{gcc/cp/cfns.gperf} to regenerate its associated header file, e.g.@: +@file{gcc/cp/cfns.h}. + +@item DejaGnu 1.4.4 +@itemx Expect +@itemx Tcl + +Necessary to run the GCC testsuite; see the section on testing for details. + +@item autogen version 5.5.4 (or later) and +@itemx guile version 1.4.1 (or later) + +Necessary to regenerate @file{fixinc/fixincl.x} from +@file{fixinc/inclhack.def} and @file{fixinc/*.tpl}. + +Necessary to run @samp{make check} for @file{fixinc}. + +Necessary to regenerate the top level @file{Makefile.in} file from +@file{Makefile.tpl} and @file{Makefile.def}. + +@item Flex version 2.5.4 (or later) + +Necessary when modifying @file{*.l} files. + +Necessary to build GCC during development because the generated output +files are not included in the SVN repository. They are included in +releases. + +@item Texinfo version 4.7 (or later) + +Necessary for running @command{makeinfo} when modifying @file{*.texi} +files to test your changes. + +Necessary for running @command{make dvi} or @command{make pdf} to +create printable documentation in DVI or PDF format. Texinfo version +4.8 or later is required for @command{make pdf}. + +Necessary to build GCC documentation during development because the +generated output files are not included in the SVN repository. They are +included in releases. + +@item @TeX{} (any working version) + +Necessary for running @command{texi2dvi} and @command{texi2pdf}, which +are used when running @command{make dvi} or @command{make pdf} to create +DVI or PDF files, respectively. + +@item SVN (any version) +@itemx SSH (any version) + +Necessary to access the SVN repository. Public releases and weekly +snapshots of the development sources are also available via FTP@. + +@item Perl version 5.6.1 (or later) + +Necessary when regenerating @file{Makefile} dependencies in libiberty. +Necessary when regenerating @file{libiberty/functions.texi}. +Necessary when generating manpages from Texinfo manuals. +Necessary when targetting Darwin, building libstdc++, +and not using @option{--disable-symvers}. +Used by various scripts to generate some files included in SVN (mainly +Unicode-related and rarely changing) from source tables. + +@item GNU diffutils version 2.7 (or later) + +Useful when submitting patches for the GCC source code. + +@item patch version 2.5.4 (or later) + +Necessary when applying patches, created with @command{diff}, to one's +own sources. + +@item ecj1 +@itemx gjavah + +If you wish to modify @file{.java} files in libjava, you will need to +configure with @option{--enable-java-maintainer-mode}, and you will need +to have executables named @command{ecj1} and @command{gjavah} in your path. +The @command{ecj1} executable should run the Eclipse Java compiler via +the GCC-specific entry point. You can download a suitable jar from +@uref{ftp://sourceware.org/pub/java/}, or by running the script +@command{contrib/download_ecj}. + +@item antlr.jar version 2.7.1 (or later) +@itemx antlr binary + +If you wish to build the @command{gjdoc} binary in libjava, you will +need to have a @file{antlr.jar} library available. The library is +searched in system locations but can be configured with +@option{--with-antlr-jar=} instead. When configuring with +@option{--enable-java-maintainer-mode}, you will need to have one of +the executables named @command{cantlr}, @command{runantlr} or +@command{antlr} in your path. + +@end table + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Downloading the source************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Downloading the source, Configuration, Prerequisites, Installing GCC +@end ifnothtml +@ifset downloadhtml +@ifnothtml +@chapter Downloading GCC +@end ifnothtml +@cindex Downloading GCC +@cindex Downloading the Source + +GCC is distributed via @uref{http://gcc.gnu.org/svn.html,,SVN} and FTP +tarballs compressed with @command{gzip} or +@command{bzip2}. It is possible to download a full distribution or specific +components. + +Please refer to the @uref{http://gcc.gnu.org/releases.html,,releases web page} +for information on how to obtain GCC@. + +The full distribution includes the C, C++, Objective-C, Fortran, Java, +and Ada (in the case of GCC 3.1 and later) compilers. The full +distribution also includes runtime libraries for C++, Objective-C, +Fortran, and Java. In GCC 3.0 and later versions, the GNU compiler +testsuites are also included in the full distribution. + +If you choose to download specific components, you must download the core +GCC distribution plus any language specific distributions you wish to +use. The core distribution includes the C language front end as well as the +shared components. Each language has a tarball which includes the language +front end as well as the language runtime (when appropriate). + +Unpack the core distribution as well as any language specific +distributions in the same directory. + +If you also intend to build binutils (either to upgrade an existing +installation or for use in place of the corresponding tools of your +OS), unpack the binutils distribution either in the same directory or +a separate one. In the latter case, add symbolic links to any +components of the binutils you intend to build alongside the compiler +(@file{bfd}, @file{binutils}, @file{gas}, @file{gprof}, @file{ld}, +@file{opcodes}, @dots{}) to the directory containing the GCC sources. + +Likewise, the GMP and MPFR libraries can be automatically built together +with GCC. Unpack the GMP and/or MPFR source distributions in the +directory containing the GCC sources and rename their directories to +@file{gmp} and @file{mpfr}, respectively (or use symbolic links with the +same name). + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Configuration*********************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Configuration, Building, Downloading the source, Installing GCC +@end ifnothtml +@ifset configurehtml +@ifnothtml +@chapter Installing GCC: Configuration +@end ifnothtml +@cindex Configuration +@cindex Installing GCC: Configuration + +Like most GNU software, GCC must be configured before it can be built. +This document describes the recommended configuration procedure +for both native and cross targets. + +We use @var{srcdir} to refer to the toplevel source directory for +GCC; we use @var{objdir} to refer to the toplevel build/object directory. + +If you obtained the sources via SVN, @var{srcdir} must refer to the top +@file{gcc} directory, the one where the @file{MAINTAINERS} can be found, +and not its @file{gcc} subdirectory, otherwise the build will fail. + +If either @var{srcdir} or @var{objdir} is located on an automounted NFS +file system, the shell's built-in @command{pwd} command will return +temporary pathnames. Using these can lead to various sorts of build +problems. To avoid this issue, set the @env{PWDCMD} environment +variable to an automounter-aware @command{pwd} command, e.g., +@command{pawd} or @samp{amq -w}, during the configuration and build +phases. + +First, we @strong{highly} recommend that GCC be built into a +separate directory than the sources which does @strong{not} reside +within the source tree. This is how we generally build GCC; building +where @var{srcdir} == @var{objdir} should still work, but doesn't +get extensive testing; building where @var{objdir} is a subdirectory +of @var{srcdir} is unsupported. + +If you have previously built GCC in the same directory for a +different target machine, do @samp{make distclean} to delete all files +that might be invalid. One of the files this deletes is @file{Makefile}; +if @samp{make distclean} complains that @file{Makefile} does not exist +or issues a message like ``don't know how to make distclean'' it probably +means that the directory is already suitably clean. However, with the +recommended method of building in a separate @var{objdir}, you should +simply use a different @var{objdir} for each target. + +Second, when configuring a native system, either @command{cc} or +@command{gcc} must be in your path or you must set @env{CC} in +your environment before running configure. Otherwise the configuration +scripts may fail. + +@ignore +Note that the bootstrap compiler and the resulting GCC must be link +compatible, else the bootstrap will fail with linker errors about +incompatible object file formats. Several multilibed targets are +affected by this requirement, see +@ifnothtml +@ref{Specific, host/target specific installation notes}. +@end ifnothtml +@ifhtml +@uref{specific.html,,host/target specific installation notes}. +@end ifhtml +@end ignore + +To configure GCC: + +@smallexample + % mkdir @var{objdir} + % cd @var{objdir} + % @var{srcdir}/configure [@var{options}] [@var{target}] +@end smallexample + +@heading Distributor options + +If you will be distributing binary versions of GCC, with modifications +to the source code, you should use the options described in this +section to make clear that your version contains modifications. + +@table @code +@item --with-pkgversion=@var{version} +Specify a string that identifies your package. You may wish +to include a build number or build date. This version string will be +included in the output of @command{gcc --version}. This suffix does +not replace the default version string, only the @samp{GCC} part. + +The default value is @samp{GCC}. + +@item --with-bugurl=@var{url} +Specify the URL that users should visit if they wish to report a bug. +You are of course welcome to forward bugs reported to you to the FSF, +if you determine that they are not bugs in your modifications. + +The default value refers to the FSF's GCC bug tracker. + +@end table + +@heading Target specification +@itemize @bullet +@item +GCC has code to correctly determine the correct value for @var{target} +for nearly all native systems. Therefore, we highly recommend you not +provide a configure target when configuring a native compiler. + +@item +@var{target} must be specified as @option{--target=@var{target}} +when configuring a cross compiler; examples of valid targets would be +m68k-coff, sh-elf, etc. + +@item +Specifying just @var{target} instead of @option{--target=@var{target}} +implies that the host defaults to @var{target}. +@end itemize + + +@heading Options specification + +Use @var{options} to override several configure time options for +GCC@. A list of supported @var{options} follows; @samp{configure +--help} may list other options, but those not listed below may not +work and should not normally be used. + +Note that each @option{--enable} option has a corresponding +@option{--disable} option and that each @option{--with} option has a +corresponding @option{--without} option. + +@table @code +@item --prefix=@var{dirname} +Specify the toplevel installation +directory. This is the recommended way to install the tools into a directory +other than the default. The toplevel installation directory defaults to +@file{/usr/local}. + +We @strong{highly} recommend against @var{dirname} being the same or a +subdirectory of @var{objdir} or vice versa. If specifying a directory +beneath a user's home directory tree, some shells will not expand +@var{dirname} correctly if it contains the @samp{~} metacharacter; use +@env{$HOME} instead. + +The following standard @command{autoconf} options are supported. Normally you +should not need to use these options. +@table @code +@item --exec-prefix=@var{dirname} +Specify the toplevel installation directory for architecture-dependent +files. The default is @file{@var{prefix}}. + +@item --bindir=@var{dirname} +Specify the installation directory for the executables called by users +(such as @command{gcc} and @command{g++}). The default is +@file{@var{exec-prefix}/bin}. + +@item --libdir=@var{dirname} +Specify the installation directory for object code libraries and +internal data files of GCC@. The default is @file{@var{exec-prefix}/lib}. + +@item --libexecdir=@var{dirname} +Specify the installation directory for internal executables of GCC@. +The default is @file{@var{exec-prefix}/libexec}. + +@item --with-slibdir=@var{dirname} +Specify the installation directory for the shared libgcc library. The +default is @file{@var{libdir}}. + +@item --infodir=@var{dirname} +Specify the installation directory for documentation in info format. +The default is @file{@var{prefix}/info}. + +@item --datadir=@var{dirname} +Specify the installation directory for some architecture-independent +data files referenced by GCC@. The default is @file{@var{prefix}/share}. + +@item --mandir=@var{dirname} +Specify the installation directory for manual pages. The default is +@file{@var{prefix}/man}. (Note that the manual pages are only extracts from +the full GCC manuals, which are provided in Texinfo format. The manpages +are derived by an automatic conversion process from parts of the full +manual.) + +@item --with-gxx-include-dir=@var{dirname} +Specify +the installation directory for G++ header files. The default is +@file{@var{prefix}/include/c++/@var{version}}. + +@end table + +@item --program-prefix=@var{prefix} +GCC supports some transformations of the names of its programs when +installing them. This option prepends @var{prefix} to the names of +programs to install in @var{bindir} (see above). For example, specifying +@option{--program-prefix=foo-} would result in @samp{gcc} +being installed as @file{/usr/local/bin/foo-gcc}. + +@item --program-suffix=@var{suffix} +Appends @var{suffix} to the names of programs to install in @var{bindir} +(see above). For example, specifying @option{--program-suffix=-3.1} +would result in @samp{gcc} being installed as +@file{/usr/local/bin/gcc-3.1}. + +@item --program-transform-name=@var{pattern} +Applies the @samp{sed} script @var{pattern} to be applied to the names +of programs to install in @var{bindir} (see above). @var{pattern} has to +consist of one or more basic @samp{sed} editing commands, separated by +semicolons. For example, if you want the @samp{gcc} program name to be +transformed to the installed program @file{/usr/local/bin/myowngcc} and +the @samp{g++} program name to be transformed to +@file{/usr/local/bin/gspecial++} without changing other program names, +you could use the pattern +@option{--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'} +to achieve this effect. + +All three options can be combined and used together, resulting in more +complex conversion patterns. As a basic rule, @var{prefix} (and +@var{suffix}) are prepended (appended) before further transformations +can happen with a special transformation script @var{pattern}. + +As currently implemented, this option only takes effect for native +builds; cross compiler binaries' names are not transformed even when a +transformation is explicitly asked for by one of these options. + +For native builds, some of the installed programs are also installed +with the target alias in front of their name, as in +@samp{i686-pc-linux-gnu-gcc}. All of the above transformations happen +before the target alias is prepended to the name---so, specifying +@option{--program-prefix=foo-} and @option{program-suffix=-3.1}, the +resulting binary would be installed as +@file{/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1}. + +As a last shortcoming, none of the installed Ada programs are +transformed yet, which will be fixed in some time. + +@item --with-local-prefix=@var{dirname} +Specify the +installation directory for local include files. The default is +@file{/usr/local}. Specify this option if you want the compiler to +search directory @file{@var{dirname}/include} for locally installed +header files @emph{instead} of @file{/usr/local/include}. + +You should specify @option{--with-local-prefix} @strong{only} if your +site has a different convention (not @file{/usr/local}) for where to put +site-specific files. + +The default value for @option{--with-local-prefix} is @file{/usr/local} +regardless of the value of @option{--prefix}. Specifying +@option{--prefix} has no effect on which directory GCC searches for +local header files. This may seem counterintuitive, but actually it is +logical. + +The purpose of @option{--prefix} is to specify where to @emph{install +GCC}. The local header files in @file{/usr/local/include}---if you put +any in that directory---are not part of GCC@. They are part of other +programs---perhaps many others. (GCC installs its own header files in +another directory which is based on the @option{--prefix} value.) + +Both the local-prefix include directory and the GCC-prefix include +directory are part of GCC's ``system include'' directories. Although these +two directories are not fixed, they need to be searched in the proper +order for the correct processing of the include_next directive. The +local-prefix include directory is searched before the GCC-prefix +include directory. Another characteristic of system include directories +is that pedantic warnings are turned off for headers in these directories. + +Some autoconf macros add @option{-I @var{directory}} options to the +compiler command line, to ensure that directories containing installed +packages' headers are searched. When @var{directory} is one of GCC's +system include directories, GCC will ignore the option so that system +directories continue to be processed in the correct order. This +may result in a search order different from what was specified but the +directory will still be searched. + +GCC automatically searches for ordinary libraries using +@env{GCC_EXEC_PREFIX}. Thus, when the same installation prefix is +used for both GCC and packages, GCC will automatically search for +both headers and libraries. This provides a configuration that is +easy to use. GCC behaves in a manner similar to that when it is +installed as a system compiler in @file{/usr}. + +Sites that need to install multiple versions of GCC may not want to +use the above simple configuration. It is possible to use the +@option{--program-prefix}, @option{--program-suffix} and +@option{--program-transform-name} options to install multiple versions +into a single directory, but it may be simpler to use different prefixes +and the @option{--with-local-prefix} option to specify the location of the +site-specific files for each version. It will then be necessary for +users to specify explicitly the location of local site libraries +(e.g., with @env{LIBRARY_PATH}). + +The same value can be used for both @option{--with-local-prefix} and +@option{--prefix} provided it is not @file{/usr}. This can be used +to avoid the default search of @file{/usr/local/include}. + +@strong{Do not} specify @file{/usr} as the @option{--with-local-prefix}! +The directory you use for @option{--with-local-prefix} @strong{must not} +contain any of the system's standard header files. If it did contain +them, certain programs would be miscompiled (including GNU Emacs, on +certain targets), because this would override and nullify the header +file corrections made by the @command{fixincludes} script. + +Indications are that people who use this option use it based on mistaken +ideas of what it is for. People use it as if it specified where to +install part of GCC@. Perhaps they make this assumption because +installing GCC creates the directory. + +@item --enable-shared[=@var{package}[,@dots{}]] +Build shared versions of libraries, if shared libraries are supported on +the target platform. Unlike GCC 2.95.x and earlier, shared libraries +are enabled by default on all platforms that support shared libraries. + +If a list of packages is given as an argument, build shared libraries +only for the listed packages. For other packages, only static libraries +will be built. Package names currently recognized in the GCC tree are +@samp{libgcc} (also known as @samp{gcc}), @samp{libstdc++} (not +@samp{libstdc++-v3}), @samp{libffi}, @samp{zlib}, @samp{boehm-gc}, +@samp{ada}, @samp{libada}, @samp{libjava} and @samp{libobjc}. +Note @samp{libiberty} does not support shared libraries at all. + +Use @option{--disable-shared} to build only static libraries. Note that +@option{--disable-shared} does not accept a list of package names as +argument, only @option{--enable-shared} does. + +@item @anchor{with-gnu-as}--with-gnu-as +Specify that the compiler should assume that the +assembler it finds is the GNU assembler. However, this does not modify +the rules to find an assembler and will result in confusion if the +assembler found is not actually the GNU assembler. (Confusion may also +result if the compiler finds the GNU assembler but has not been +configured with @option{--with-gnu-as}.) If you have more than one +assembler installed on your system, you may want to use this option in +connection with @option{--with-as=@var{pathname}} or +@option{--with-build-time-tools=@var{pathname}}. + +The following systems are the only ones where it makes a difference +whether you use the GNU assembler. On any other system, +@option{--with-gnu-as} has no effect. + +@itemize @bullet +@item @samp{hppa1.0-@var{any}-@var{any}} +@item @samp{hppa1.1-@var{any}-@var{any}} +@item @samp{sparc-sun-solaris2.@var{any}} +@item @samp{sparc64-@var{any}-solaris2.@var{any}} +@end itemize + +@item @anchor{with-as}--with-as=@var{pathname} +Specify that the compiler should use the assembler pointed to by +@var{pathname}, rather than the one found by the standard rules to find +an assembler, which are: +@itemize @bullet +@item +Unless GCC is being built with a cross compiler, check the +@file{@var{libexec}/gcc/@var{target}/@var{version}} directory. +@var{libexec} defaults to @file{@var{exec-prefix}/libexec}; +@var{exec-prefix} defaults to @var{prefix}, which +defaults to @file{/usr/local} unless overridden by the +@option{--prefix=@var{pathname}} switch described above. @var{target} +is the target system triple, such as @samp{sparc-sun-solaris2.7}, and +@var{version} denotes the GCC version, such as 3.0. + +@item +If the target system is the same that you are building on, check +operating system specific directories (e.g.@: @file{/usr/ccs/bin} on +Sun Solaris 2). + +@item +Check in the @env{PATH} for a tool whose name is prefixed by the +target system triple. + +@item +Check in the @env{PATH} for a tool whose name is not prefixed by the +target system triple, if the host and target system triple are +the same (in other words, we use a host tool if it can be used for +the target as well). +@end itemize + +You may want to use @option{--with-as} if no assembler +is installed in the directories listed above, or if you have multiple +assemblers installed and want to choose one that is not found by the +above rules. + +@item @anchor{with-gnu-ld}--with-gnu-ld +Same as @uref{#with-gnu-as,,@option{--with-gnu-as}} +but for the linker. + +@item --with-ld=@var{pathname} +Same as @uref{#with-as,,@option{--with-as}} +but for the linker. + +@item --with-stabs +Specify that stabs debugging +information should be used instead of whatever format the host normally +uses. Normally GCC uses the same debug format as the host system. + +On MIPS based systems and on Alphas, you must specify whether you want +GCC to create the normal ECOFF debugging format, or to use BSD-style +stabs passed through the ECOFF symbol table. The normal ECOFF debug +format cannot fully handle languages other than C@. BSD stabs format can +handle other languages, but it only works with the GNU debugger GDB@. + +Normally, GCC uses the ECOFF debugging format by default; if you +prefer BSD stabs, specify @option{--with-stabs} when you configure GCC@. + +No matter which default you choose when you configure GCC, the user +can use the @option{-gcoff} and @option{-gstabs+} options to specify explicitly +the debug format for a particular compilation. + +@option{--with-stabs} is meaningful on the ISC system on the 386, also, if +@option{--with-gas} is used. It selects use of stabs debugging +information embedded in COFF output. This kind of debugging information +supports C++ well; ordinary COFF debugging information does not. + +@option{--with-stabs} is also meaningful on 386 systems running SVR4. It +selects use of stabs debugging information embedded in ELF output. The +C++ compiler currently (2.6.0) does not support the DWARF debugging +information normally used on 386 SVR4 platforms; stabs provide a +workable alternative. This requires gas and gdb, as the normal SVR4 +tools can not generate or interpret stabs. + +@item --disable-multilib +Specify that multiple target +libraries to support different target variants, calling +conventions, etc.@: should not be built. The default is to build a +predefined set of them. + +Some targets provide finer-grained control over which multilibs are built +(e.g., @option{--disable-softfloat}): +@table @code +@item arc-*-elf* +biendian. + +@item arm-*-* +fpu, 26bit, underscore, interwork, biendian, nofmult. + +@item m68*-*-* +softfloat, m68881, m68000, m68020. + +@item mips*-*-* +single-float, biendian, softfloat. + +@item powerpc*-*-*, rs6000*-*-* +aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, +sysv, aix. + +@end table + +@item --enable-threads +Specify that the target +supports threads. This affects the Objective-C compiler and runtime +library, and exception handling for other languages like C++ and Java. +On some systems, this is the default. + +In general, the best (and, in many cases, the only known) threading +model available will be configured for use. Beware that on some +systems, GCC has not been taught what threading models are generally +available for the system. In this case, @option{--enable-threads} is an +alias for @option{--enable-threads=single}. + +@item --disable-threads +Specify that threading support should be disabled for the system. +This is an alias for @option{--enable-threads=single}. + +@item --enable-threads=@var{lib} +Specify that +@var{lib} is the thread support library. This affects the Objective-C +compiler and runtime library, and exception handling for other languages +like C++ and Java. The possibilities for @var{lib} are: + +@table @code +@item aix +AIX thread support. +@item dce +DCE thread support. +@item gnat +Ada tasking support. For non-Ada programs, this setting is equivalent +to @samp{single}. When used in conjunction with the Ada run time, it +causes GCC to use the same thread primitives as Ada uses. This option +is necessary when using both Ada and the back end exception handling, +which is the default for most Ada targets. +@item mach +Generic MACH thread support, known to work on NeXTSTEP@. (Please note +that the file needed to support this configuration, @file{gthr-mach.h}, is +missing and thus this setting will cause a known bootstrap failure.) +@item no +This is an alias for @samp{single}. +@item posix +Generic POSIX/Unix98 thread support. +@item posix95 +Generic POSIX/Unix95 thread support. +@item rtems +RTEMS thread support. +@item single +Disable thread support, should work for all platforms. +@item solaris +Sun Solaris 2 thread support. +@item vxworks +VxWorks thread support. +@item win32 +Microsoft Win32 API thread support. +@item nks +Novell Kernel Services thread support. +@end table + +@item --enable-tls +Specify that the target supports TLS (Thread Local Storage). Usually +configure can correctly determine if TLS is supported. In cases where +it guesses incorrectly, TLS can be explicitly enabled or disabled with +@option{--enable-tls} or @option{--disable-tls}. This can happen if +the assembler supports TLS but the C library does not, or if the +assumptions made by the configure test are incorrect. + +@item --disable-tls +Specify that the target does not support TLS. +This is an alias for @option{--enable-tls=no}. + +@item --with-cpu=@var{cpu} +@itemx --with-cpu-32=@var{cpu} +@itemx --with-cpu-64=@var{cpu} +Specify which cpu variant the compiler should generate code for by default. +@var{cpu} will be used as the default value of the @option{-mcpu=} switch. +This option is only supported on some targets, including ARM, i386, M68k, +PowerPC, and SPARC@. The @option{--with-cpu-32} and +@option{--with-cpu-64} options specify separate default CPUs for +32-bit and 64-bit modes; these options are only supported for i386 and +x86-64. + +@item --with-schedule=@var{cpu} +@itemx --with-arch=@var{cpu} +@itemx --with-arch-32=@var{cpu} +@itemx --with-arch-64=@var{cpu} +@itemx --with-tune=@var{cpu} +@itemx --with-tune-32=@var{cpu} +@itemx --with-tune-64=@var{cpu} +@itemx --with-abi=@var{abi} +@itemx --with-fpu=@var{type} +@itemx --with-float=@var{type} +These configure options provide default values for the @option{-mschedule=}, +@option{-march=}, @option{-mtune=}, @option{-mabi=}, and @option{-mfpu=} +options and for @option{-mhard-float} or @option{-msoft-float}. As with +@option{--with-cpu}, which switches will be accepted and acceptable values +of the arguments depend on the target. + +@item --with-mode=@var{mode} +Specify if the compiler should default to @option{-marm} or @option{-mthumb}. +This option is only supported on ARM targets. + +@item --with-divide=@var{type} +Specify how the compiler should generate code for checking for +division by zero. This option is only supported on the MIPS target. +The possibilities for @var{type} are: +@table @code +@item traps +Division by zero checks use conditional traps (this is the default on +systems that support conditional traps). +@item breaks +Division by zero checks use the break instruction. +@end table + +@c If you make --with-llsc the default for additional targets, +@c update the --with-llsc description in the MIPS section below. + +@item --with-llsc +On MIPS targets, make @option{-mllsc} the default when no +@option{-mno-lsc} option is passed. This is the default for +Linux-based targets, as the kernel will emulate them if the ISA does +not provide them. + +@item --without-llsc +On MIPS targets, make @option{-mno-llsc} the default when no +@option{-mllsc} option is passed. + +@item --with-mips-plt +On MIPS targets, make use of copy relocations and PLTs. +These features are extensions to the traditional +SVR4-based MIPS ABIs and require support from GNU binutils +and the runtime C library. + +@item --enable-__cxa_atexit +Define if you want to use __cxa_atexit, rather than atexit, to +register C++ destructors for local statics and global objects. +This is essential for fully standards-compliant handling of +destructors, but requires __cxa_atexit in libc. This option is currently +only available on systems with GNU libc. When enabled, this will cause +@option{-fuse-cxa-atexit} to be passed by default. + +@item --enable-target-optspace +Specify that target +libraries should be optimized for code space instead of code speed. +This is the default for the m32r platform. + +@item --disable-cpp +Specify that a user visible @command{cpp} program should not be installed. + +@item --with-cpp-install-dir=@var{dirname} +Specify that the user visible @command{cpp} program should be installed +in @file{@var{prefix}/@var{dirname}/cpp}, in addition to @var{bindir}. + +@item --enable-initfini-array +Force the use of sections @code{.init_array} and @code{.fini_array} +(instead of @code{.init} and @code{.fini}) for constructors and +destructors. Option @option{--disable-initfini-array} has the +opposite effect. If neither option is specified, the configure script +will try to guess whether the @code{.init_array} and +@code{.fini_array} sections are supported and, if they are, use them. + +@item --enable-maintainer-mode +The build rules that +regenerate the GCC master message catalog @file{gcc.pot} are normally +disabled. This is because it can only be rebuilt if the complete source +tree is present. If you have changed the sources and want to rebuild the +catalog, configuring with @option{--enable-maintainer-mode} will enable +this. Note that you need a recent version of the @code{gettext} tools +to do so. + +@item --disable-bootstrap +For a native build, the default configuration is to perform +a 3-stage bootstrap of the compiler when @samp{make} is invoked, +testing that GCC can compile itself correctly. If you want to disable +this process, you can configure with @option{--disable-bootstrap}. + +@item --enable-bootstrap +In special cases, you may want to perform a 3-stage build +even if the target and host triplets are different. +This could happen when the host can run code compiled for +the target (e.g.@: host is i686-linux, target is i486-linux). +Starting from GCC 4.2, to do this you have to configure explicitly +with @option{--enable-bootstrap}. + +@item --enable-generated-files-in-srcdir +Neither the .c and .h files that are generated from Bison and flex nor the +info manuals and man pages that are built from the .texi files are present +in the SVN development tree. When building GCC from that development tree, +or from one of our snapshots, those generated files are placed in your +build directory, which allows for the source to be in a readonly +directory. + +If you configure with @option{--enable-generated-files-in-srcdir} then those +generated files will go into the source directory. This is mainly intended +for generating release or prerelease tarballs of the GCC sources, since it +is not a requirement that the users of source releases to have flex, Bison, +or makeinfo. + +@item --enable-version-specific-runtime-libs +Specify +that runtime libraries should be installed in the compiler specific +subdirectory (@file{@var{libdir}/gcc}) rather than the usual places. In +addition, @samp{libstdc++}'s include files will be installed into +@file{@var{libdir}} unless you overruled it by using +@option{--with-gxx-include-dir=@var{dirname}}. Using this option is +particularly useful if you intend to use several versions of GCC in +parallel. This is currently supported by @samp{libgfortran}, +@samp{libjava}, @samp{libmudflap}, @samp{libstdc++}, and @samp{libobjc}. + +@item --enable-languages=@var{lang1},@var{lang2},@dots{} +Specify that only a particular subset of compilers and +their runtime libraries should be built. For a list of valid values for +@var{langN} you can issue the following command in the +@file{gcc} directory of your GCC source tree:@* +@smallexample +grep language= */config-lang.in +@end smallexample +Currently, you can use any of the following: +@code{all}, @code{ada}, @code{c}, @code{c++}, @code{fortran}, @code{java}, +@code{objc}, @code{obj-c++}. +Building the Ada compiler has special requirements, see below. +If you do not pass this flag, or specify the option @code{all}, then all +default languages available in the @file{gcc} sub-tree will be configured. +Ada and Objective-C++ are not default languages; the rest are. +Re-defining @code{LANGUAGES} when calling @samp{make} @strong{does not} +work anymore, as those language sub-directories might not have been +configured! + +@item --enable-stage1-languages=@var{lang1},@var{lang2},@dots{} +Specify that a particular subset of compilers and their runtime +libraries should be built with the system C compiler during stage 1 of +the bootstrap process, rather than only in later stages with the +bootstrapped C compiler. The list of valid values is the same as for +@option{--enable-languages}, and the option @code{all} will select all +of the languages enabled by @option{--enable-languages}. This option is +primarily useful for GCC development; for instance, when a development +version of the compiler cannot bootstrap due to compiler bugs, or when +one is debugging front ends other than the C front end. When this +option is used, one can then build the target libraries for the +specified languages with the stage-1 compiler by using @command{make +stage1-bubble all-target}, or run the testsuite on the stage-1 compiler +for the specified languages using @command{make stage1-start check-gcc}. + +@item --disable-libada +Specify that the run-time libraries and tools used by GNAT should not +be built. This can be useful for debugging, or for compatibility with +previous Ada build procedures, when it was required to explicitly +do a @samp{make -C gcc gnatlib_and_tools}. + +@item --disable-libssp +Specify that the run-time libraries for stack smashing protection +should not be built. + +@item --disable-libgomp +Specify that the run-time libraries used by GOMP should not be built. + +@item --with-dwarf2 +Specify that the compiler should +use DWARF 2 debugging information as the default. + +@item --enable-targets=all +@itemx --enable-targets=@var{target_list} +Some GCC targets, e.g.@: powerpc64-linux, build bi-arch compilers. +These are compilers that are able to generate either 64-bit or 32-bit +code. Typically, the corresponding 32-bit target, e.g.@: +powerpc-linux for powerpc64-linux, only generates 32-bit code. This +option enables the 32-bit target to be a bi-arch compiler, which is +useful when you want a bi-arch compiler that defaults to 32-bit, and +you are building a bi-arch or multi-arch binutils in a combined tree. +Currently, this option only affects sparc-linux, powerpc-linux and +x86-linux. + +@item --enable-secureplt +This option enables @option{-msecure-plt} by default for powerpc-linux. +@ifnothtml +@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc, +Using the GNU Compiler Collection (GCC)}, +@end ifnothtml +@ifhtml +See ``RS/6000 and PowerPC Options'' in the main manual +@end ifhtml + +@item --enable-cld +This option enables @option{-mcld} by default for 32-bit x86 targets. +@ifnothtml +@xref{i386 and x86-64 Options,, i386 and x86-64 Options, gcc, +Using the GNU Compiler Collection (GCC)}, +@end ifnothtml +@ifhtml +See ``i386 and x86-64 Options'' in the main manual +@end ifhtml + +@item --enable-win32-registry +@itemx --enable-win32-registry=@var{key} +@itemx --disable-win32-registry +The @option{--enable-win32-registry} option enables Microsoft Windows-hosted GCC +to look up installations paths in the registry using the following key: + +@smallexample +@code{HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\@var{key}} +@end smallexample + +@var{key} defaults to GCC version number, and can be overridden by the +@option{--enable-win32-registry=@var{key}} option. Vendors and distributors +who use custom installers are encouraged to provide a different key, +perhaps one comprised of vendor name and GCC version number, to +avoid conflict with existing installations. This feature is enabled +by default, and can be disabled by @option{--disable-win32-registry} +option. This option has no effect on the other hosts. + +@item --nfp +Specify that the machine does not have a floating point unit. This +option only applies to @samp{m68k-sun-sunos@var{n}}. On any other +system, @option{--nfp} has no effect. + +@item --enable-werror +@itemx --disable-werror +@itemx --enable-werror=yes +@itemx --enable-werror=no +When you specify this option, it controls whether certain files in the +compiler are built with @option{-Werror} in bootstrap stage2 and later. +If you don't specify it, @option{-Werror} is turned on for the main +development trunk. However it defaults to off for release branches and +final releases. The specific files which get @option{-Werror} are +controlled by the Makefiles. + +@item --enable-checking +@itemx --enable-checking=@var{list} +When you specify this option, the compiler is built to perform internal +consistency checks of the requested complexity. This does not change the +generated code, but adds error checking within the compiler. This will +slow down the compiler and may only work properly if you are building +the compiler with GCC@. This is @samp{yes} by default when building +from SVN or snapshots, but @samp{release} for releases. The default +for building the stage1 compiler is @samp{yes}. More control +over the checks may be had by specifying @var{list}. The categories of +checks available are @samp{yes} (most common checks +@samp{assert,misc,tree,gc,rtlflag,runtime}), @samp{no} (no checks at +all), @samp{all} (all but @samp{valgrind}), @samp{release} (cheapest +checks @samp{assert,runtime}) or @samp{none} (same as @samp{no}). +Individual checks can be enabled with these flags @samp{assert}, +@samp{df}, @samp{fold}, @samp{gc}, @samp{gcac} @samp{misc}, @samp{rtl}, +@samp{rtlflag}, @samp{runtime}, @samp{tree}, and @samp{valgrind}. + +The @samp{valgrind} check requires the external @command{valgrind} +simulator, available from @uref{http://valgrind.org/}. The +@samp{df}, @samp{rtl}, @samp{gcac} and @samp{valgrind} checks are very expensive. +To disable all checking, @samp{--disable-checking} or +@samp{--enable-checking=none} must be explicitly requested. Disabling +assertions will make the compiler and runtime slightly faster but +increase the risk of undetected internal errors causing wrong code to be +generated. + +@item --disable-stage1-checking +@item --enable-stage1-checking +@itemx --enable-stage1-checking=@var{list} +If no @option{--enable-checking} option is specified the stage1 +compiler will be built with @samp{yes} checking enabled, otherwise +the stage1 checking flags are the same as specified by +@option{--enable-checking}. To build the stage1 compiler with +different checking options use @option{--enable-stage1-checking}. +The list of checking options is the same as for @option{--enable-checking}. +If your system is too slow or too small to bootstrap a released compiler +with checking for stage1 enabled, you can use @samp{--disable-stage1-checking} +to disable checking for the stage1 compiler. + +@item --enable-coverage +@itemx --enable-coverage=@var{level} +With this option, the compiler is built to collect self coverage +information, every time it is run. This is for internal development +purposes, and only works when the compiler is being built with gcc. The +@var{level} argument controls whether the compiler is built optimized or +not, values are @samp{opt} and @samp{noopt}. For coverage analysis you +want to disable optimization, for performance analysis you want to +enable optimization. When coverage is enabled, the default level is +without optimization. + +@item --enable-gather-detailed-mem-stats +When this option is specified more detailed information on memory +allocation is gathered. This information is printed when using +@option{-fmem-report}. + +@item --with-gc +@itemx --with-gc=@var{choice} +With this option you can specify the garbage collector implementation +used during the compilation process. @var{choice} can be one of +@samp{page} and @samp{zone}, where @samp{page} is the default. + +@item --enable-nls +@itemx --disable-nls +The @option{--enable-nls} option enables Native Language Support (NLS), +which lets GCC output diagnostics in languages other than American +English. Native Language Support is enabled by default if not doing a +canadian cross build. The @option{--disable-nls} option disables NLS@. + +@item --with-included-gettext +If NLS is enabled, the @option{--with-included-gettext} option causes the build +procedure to prefer its copy of GNU @command{gettext}. + +@item --with-catgets +If NLS is enabled, and if the host lacks @code{gettext} but has the +inferior @code{catgets} interface, the GCC build procedure normally +ignores @code{catgets} and instead uses GCC's copy of the GNU +@code{gettext} library. The @option{--with-catgets} option causes the +build procedure to use the host's @code{catgets} in this situation. + +@item --with-libiconv-prefix=@var{dir} +Search for libiconv header files in @file{@var{dir}/include} and +libiconv library files in @file{@var{dir}/lib}. + +@item --enable-obsolete +Enable configuration for an obsoleted system. If you attempt to +configure GCC for a system (build, host, or target) which has been +obsoleted, and you do not specify this flag, configure will halt with an +error message. + +All support for systems which have been obsoleted in one release of GCC +is removed entirely in the next major release, unless someone steps +forward to maintain the port. + +@item --enable-decimal-float +@itemx --enable-decimal-float=yes +@itemx --enable-decimal-float=no +@itemx --enable-decimal-float=bid +@itemx --enable-decimal-float=dpd +@itemx --disable-decimal-float +Enable (or disable) support for the C decimal floating point extension +that is in the IEEE 754-2008 standard. This is enabled by default only +on PowerPC, i386, and x86_64 GNU/Linux systems. Other systems may also +support it, but require the user to specifically enable it. You can +optionally control which decimal floating point format is used (either +@samp{bid} or @samp{dpd}). The @samp{bid} (binary integer decimal) +format is default on i386 and x86_64 systems, and the @samp{dpd} +(densely packed decimal) format is default on PowerPC systems. + +@item --enable-fixed-point +@itemx --disable-fixed-point +Enable (or disable) support for C fixed-point arithmetic. +This option is enabled by default for some targets (such as MIPS) which +have hardware-support for fixed-point operations. On other targets, you +may enable this option manually. + +@item --with-long-double-128 +Specify if @code{long double} type should be 128-bit by default on selected +GNU/Linux architectures. If using @code{--without-long-double-128}, +@code{long double} will be by default 64-bit, the same as @code{double} type. +When neither of these configure options are used, the default will be +128-bit @code{long double} when built against GNU C Library 2.4 and later, +64-bit @code{long double} otherwise. + +@item --with-gmp=@var{pathname} +@itemx --with-gmp-include=@var{pathname} +@itemx --with-gmp-lib=@var{pathname} +@itemx --with-mpfr=@var{pathname} +@itemx --with-mpfr-include=@var{pathname} +@itemx --with-mpfr-lib=@var{pathname} +If you do not have GMP (the GNU Multiple Precision library) and the +MPFR Libraries installed in a standard location and you want to build +GCC, you can explicitly specify the directory where they are installed +(@samp{--with-gmp=@var{gmpinstalldir}}, +@samp{--with-mpfr=@var{mpfrinstalldir}}). The +@option{--with-gmp=@var{gmpinstalldir}} option is shorthand for +@option{--with-gmp-lib=@var{gmpinstalldir}/lib} and +@option{--with-gmp-include=@var{gmpinstalldir}/include}. Likewise the +@option{--with-mpfr=@var{mpfrinstalldir}} option is shorthand for +@option{--with-mpfr-lib=@var{mpfrinstalldir}/lib} and +@option{--with-mpfr-include=@var{mpfrinstalldir}/include}. If these +shorthand assumptions are not correct, you can use the explicit +include and lib options directly. + +@item --with-ppl=@var{pathname} +@itemx --with-ppl-include=@var{pathname} +@itemx --with-ppl-lib=@var{pathname} +@itemx --with-cloog=@var{pathname} +@itemx --with-cloog-include=@var{pathname} +@itemx --with-cloog-lib=@var{pathname} +If you do not have PPL (the Parma Polyhedra Library) and the CLooG +libraries installed in a standard location and you want to build GCC, +you can explicitly specify the directory where they are installed +(@samp{--with-ppl=@var{pplinstalldir}}, +@samp{--with-cloog=@var{clooginstalldir}}). The +@option{--with-ppl=@var{pplinstalldir}} option is shorthand for +@option{--with-ppl-lib=@var{pplinstalldir}/lib} and +@option{--with-ppl-include=@var{pplinstalldir}/include}. Likewise the +@option{--with-cloog=@var{clooginstalldir}} option is shorthand for +@option{--with-cloog-lib=@var{clooginstalldir}/lib} and +@option{--with-cloog-include=@var{clooginstalldir}/include}. If these +shorthand assumptions are not correct, you can use the explicit +include and lib options directly. + +@item --with-host-libstdcxx=@var{linker-args} +If you are linking with a static copy of PPL, you can use this option +to specify how the linker should find the standard C++ library used +internally by PPL. Typical values of @var{linker-args} might be +@samp{-lstdc++} or @samp{-Wl,-Bstatic,-lstdc++,-Bdynamic -lm}. If you are +linking with a shared copy of PPL, you probably do not need this +option; shared library dependencies will cause the linker to search +for the standard C++ library automatically. + +@item --with-debug-prefix-map=@var{map} +Convert source directory names using @option{-fdebug-prefix-map} when +building runtime libraries. @samp{@var{map}} is a space-separated +list of maps of the form @samp{@var{old}=@var{new}}. + +@end table + +@subheading Cross-Compiler-Specific Options +The following options only apply to building cross compilers. +@table @code +@item --with-sysroot +@itemx --with-sysroot=@var{dir} +Tells GCC to consider @var{dir} as the root of a tree that contains a +(subset of) the root filesystem of the target operating system. +Target system headers, libraries and run-time object files will be +searched in there. The specified directory is not copied into the +install tree, unlike the options @option{--with-headers} and +@option{--with-libs} that this option obsoletes. The default value, +in case @option{--with-sysroot} is not given an argument, is +@option{$@{gcc_tooldir@}/sys-root}. If the specified directory is a +subdirectory of @option{$@{exec_prefix@}}, then it will be found relative to +the GCC binaries if the installation tree is moved. + +@item --with-build-sysroot +@itemx --with-build-sysroot=@var{dir} +Tells GCC to consider @var{dir} as the system root (see +@option{--with-sysroot}) while building target libraries, instead of +the directory specified with @option{--with-sysroot}. This option is +only useful when you are already using @option{--with-sysroot}. You +can use @option{--with-build-sysroot} when you are configuring with +@option{--prefix} set to a directory that is different from the one in +which you are installing GCC and your target libraries. + +This option affects the system root for the compiler used to build +target libraries (which runs on the build system); it does not affect +the compiler which is used to build GCC itself. + +@item --with-headers +@itemx --with-headers=@var{dir} +Deprecated in favor of @option{--with-sysroot}. +Specifies that target headers are available when building a cross compiler. +The @var{dir} argument specifies a directory which has the target include +files. These include files will be copied into the @file{gcc} install +directory. @emph{This option with the @var{dir} argument is required} when +building a cross compiler, if @file{@var{prefix}/@var{target}/sys-include} +doesn't pre-exist. If @file{@var{prefix}/@var{target}/sys-include} does +pre-exist, the @var{dir} argument may be omitted. @command{fixincludes} +will be run on these files to make them compatible with GCC@. + +@item --without-headers +Tells GCC not use any target headers from a libc when building a cross +compiler. When crossing to GNU/Linux, you need the headers so GCC +can build the exception handling for libgcc. + +@item --with-libs +@itemx --with-libs=``@var{dir1} @var{dir2} @dots{} @var{dirN}'' +Deprecated in favor of @option{--with-sysroot}. +Specifies a list of directories which contain the target runtime +libraries. These libraries will be copied into the @file{gcc} install +directory. If the directory list is omitted, this option has no +effect. + +@item --with-newlib +Specifies that @samp{newlib} is +being used as the target C library. This causes @code{__eprintf} to be +omitted from @file{libgcc.a} on the assumption that it will be provided by +@samp{newlib}. + +@item --with-build-time-tools=@var{dir} +Specifies where to find the set of target tools (assembler, linker, etc.) +that will be used while building GCC itself. This option can be useful +if the directory layouts are different between the system you are building +GCC on, and the system where you will deploy it. + +For example, on a @option{ia64-hp-hpux} system, you may have the GNU +assembler and linker in @file{/usr/bin}, and the native tools in a +different path, and build a toolchain that expects to find the +native tools in @file{/usr/bin}. + +When you use this option, you should ensure that @var{dir} includes +@command{ar}, @command{as}, @command{ld}, @command{nm}, +@command{ranlib} and @command{strip} if necessary, and possibly +@command{objdump}. Otherwise, GCC may use an inconsistent set of +tools. +@end table + +@subheading Java-Specific Options + +The following option applies to the build of the Java front end. + +@table @code +@item --disable-libgcj +Specify that the run-time libraries +used by GCJ should not be built. This is useful in case you intend +to use GCJ with some other run-time, or you're going to install it +separately, or it just happens not to build on your particular +machine. In general, if the Java front end is enabled, the GCJ +libraries will be enabled too, unless they're known to not work on +the target platform. If GCJ is enabled but @samp{libgcj} isn't built, you +may need to port it; in this case, before modifying the top-level +@file{configure.in} so that @samp{libgcj} is enabled by default on this platform, +you may use @option{--enable-libgcj} to override the default. + +@end table + +The following options apply to building @samp{libgcj}. + +@subsubheading General Options + +@table @code +@item --enable-java-maintainer-mode +By default the @samp{libjava} build will not attempt to compile the +@file{.java} source files to @file{.class}. Instead, it will use the +@file{.class} files from the source tree. If you use this option you +must have executables named @command{ecj1} and @command{gjavah} in your path +for use by the build. You must use this option if you intend to +modify any @file{.java} files in @file{libjava}. + +@item --with-java-home=@var{dirname} +This @samp{libjava} option overrides the default value of the +@samp{java.home} system property. It is also used to set +@samp{sun.boot.class.path} to @file{@var{dirname}/lib/rt.jar}. By +default @samp{java.home} is set to @file{@var{prefix}} and +@samp{sun.boot.class.path} to +@file{@var{datadir}/java/libgcj-@var{version}.jar}. + +@item --with-ecj-jar=@var{filename} +This option can be used to specify the location of an external jar +file containing the Eclipse Java compiler. A specially modified +version of this compiler is used by @command{gcj} to parse +@file{.java} source files. If this option is given, the +@samp{libjava} build will create and install an @file{ecj1} executable +which uses this jar file at runtime. + +If this option is not given, but an @file{ecj.jar} file is found in +the topmost source tree at configure time, then the @samp{libgcj} +build will create and install @file{ecj1}, and will also install the +discovered @file{ecj.jar} into a suitable place in the install tree. + +If @file{ecj1} is not installed, then the user will have to supply one +on his path in order for @command{gcj} to properly parse @file{.java} +source files. A suitable jar is available from +@uref{ftp://sourceware.org/pub/java/}. + +@item --disable-getenv-properties +Don't set system properties from @env{GCJ_PROPERTIES}. + +@item --enable-hash-synchronization +Use a global hash table for monitor locks. Ordinarily, +@samp{libgcj}'s @samp{configure} script automatically makes +the correct choice for this option for your platform. Only use +this if you know you need the library to be configured differently. + +@item --enable-interpreter +Enable the Java interpreter. The interpreter is automatically +enabled by default on all platforms that support it. This option +is really only useful if you want to disable the interpreter +(using @option{--disable-interpreter}). + +@item --disable-java-net +Disable java.net. This disables the native part of java.net only, +using non-functional stubs for native method implementations. + +@item --disable-jvmpi +Disable JVMPI support. + +@item --disable-libgcj-bc +Disable BC ABI compilation of certain parts of libgcj. By default, +some portions of libgcj are compiled with @option{-findirect-dispatch} +and @option{-fno-indirect-classes}, allowing them to be overridden at +run-time. + +If @option{--disable-libgcj-bc} is specified, libgcj is built without +these options. This allows the compile-time linker to resolve +dependencies when statically linking to libgcj. However it makes it +impossible to override the affected portions of libgcj at run-time. + +@item --enable-reduced-reflection +Build most of libgcj with @option{-freduced-reflection}. This reduces +the size of libgcj at the expense of not being able to do accurate +reflection on the classes it contains. This option is safe if you +know that code using libgcj will never use reflection on the standard +runtime classes in libgcj (including using serialization, RMI or CORBA). + +@item --with-ecos +Enable runtime eCos target support. + +@item --without-libffi +Don't use @samp{libffi}. This will disable the interpreter and JNI +support as well, as these require @samp{libffi} to work. + +@item --enable-libgcj-debug +Enable runtime debugging code. + +@item --enable-libgcj-multifile +If specified, causes all @file{.java} source files to be +compiled into @file{.class} files in one invocation of +@samp{gcj}. This can speed up build time, but is more +resource-intensive. If this option is unspecified or +disabled, @samp{gcj} is invoked once for each @file{.java} +file to compile into a @file{.class} file. + +@item --with-libiconv-prefix=DIR +Search for libiconv in @file{DIR/include} and @file{DIR/lib}. + +@item --enable-sjlj-exceptions +Force use of the @code{setjmp}/@code{longjmp}-based scheme for exceptions. +@samp{configure} ordinarily picks the correct value based on the platform. +Only use this option if you are sure you need a different setting. + +@item --with-system-zlib +Use installed @samp{zlib} rather than that included with GCC@. + +@item --with-win32-nlsapi=ansi, unicows or unicode +Indicates how MinGW @samp{libgcj} translates between UNICODE +characters and the Win32 API@. + +@item --enable-java-home +If enabled, this creates a JPackage compatible SDK environment during install. +Note that if --enable-java-home is used, --with-arch-directory=ARCH must also +be specified. + +@item --with-arch-directory=ARCH +Specifies the name to use for the @file{jre/lib/ARCH} directory in the SDK +environment created when --enable-java-home is passed. Typical names for this +directory include i386, amd64, ia64, etc. + +@item --with-os-directory=DIR +Specifies the OS directory for the SDK include directory. This is set to auto +detect, and is typically 'linux'. + +@item --with-origin-name=NAME +Specifies the JPackage origin name. This defaults to the 'gcj' in +java-1.5.0-gcj. + +@item --with-arch-suffix=SUFFIX +Specifies the suffix for the sdk directory. Defaults to the empty string. +Examples include '.x86_64' in 'java-1.5.0-gcj-1.5.0.0.x86_64'. + +@item --with-jvm-root-dir=DIR +Specifies where to install the SDK. Default is $(prefix)/lib/jvm. + +@item --with-jvm-jar-dir=DIR +Specifies where to install jars. Default is $(prefix)/lib/jvm-exports. + +@item --with-python-dir=DIR +Specifies where to install the Python modules used for aot-compile. DIR should +not include the prefix used in installation. For example, if the Python modules +are to be installed in /usr/lib/python2.5/site-packages, then +--with-python-dir=/lib/python2.5/site-packages should be passed. If this is +not specified, then the Python modules are installed in $(prefix)/share/python. + +@item --enable-aot-compile-rpm +Adds aot-compile-rpm to the list of installed scripts. + +@table @code +@item ansi +Use the single-byte @code{char} and the Win32 A functions natively, +translating to and from UNICODE when using these functions. If +unspecified, this is the default. + +@item unicows +Use the @code{WCHAR} and Win32 W functions natively. Adds +@code{-lunicows} to @file{libgcj.spec} to link with @samp{libunicows}. +@file{unicows.dll} needs to be deployed on Microsoft Windows 9X machines +running built executables. @file{libunicows.a}, an open-source +import library around Microsoft's @code{unicows.dll}, is obtained from +@uref{http://libunicows.sourceforge.net/}, which also gives details +on getting @file{unicows.dll} from Microsoft. + +@item unicode +Use the @code{WCHAR} and Win32 W functions natively. Does @emph{not} +add @code{-lunicows} to @file{libgcj.spec}. The built executables will +only run on Microsoft Windows NT and above. +@end table +@end table + +@subsubheading AWT-Specific Options + +@table @code +@item --with-x +Use the X Window System. + +@item --enable-java-awt=PEER(S) +Specifies the AWT peer library or libraries to build alongside +@samp{libgcj}. If this option is unspecified or disabled, AWT +will be non-functional. Current valid values are @option{gtk} and +@option{xlib}. Multiple libraries should be separated by a +comma (i.e.@: @option{--enable-java-awt=gtk,xlib}). + +@item --enable-gtk-cairo +Build the cairo Graphics2D implementation on GTK@. + +@item --enable-java-gc=TYPE +Choose garbage collector. Defaults to @option{boehm} if unspecified. + +@item --disable-gtktest +Do not try to compile and run a test GTK+ program. + +@item --disable-glibtest +Do not try to compile and run a test GLIB program. + +@item --with-libart-prefix=PFX +Prefix where libart is installed (optional). + +@item --with-libart-exec-prefix=PFX +Exec prefix where libart is installed (optional). + +@item --disable-libarttest +Do not try to compile and run a test libart program. + +@end table + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Building**************************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Building, Testing, Configuration, Installing GCC +@end ifnothtml +@ifset buildhtml +@ifnothtml +@chapter Building +@end ifnothtml +@cindex Installing GCC: Building + +Now that GCC is configured, you are ready to build the compiler and +runtime libraries. + +Some commands executed when making the compiler may fail (return a +nonzero status) and be ignored by @command{make}. These failures, which +are often due to files that were not found, are expected, and can safely +be ignored. + +It is normal to have compiler warnings when compiling certain files. +Unless you are a GCC developer, you can generally ignore these warnings +unless they cause compilation to fail. Developers should attempt to fix +any warnings encountered, however they can temporarily continue past +warnings-as-errors by specifying the configure flag +@option{--disable-werror}. + +On certain old systems, defining certain environment variables such as +@env{CC} can interfere with the functioning of @command{make}. + +If you encounter seemingly strange errors when trying to build the +compiler in a directory other than the source directory, it could be +because you have previously configured the compiler in the source +directory. Make sure you have done all the necessary preparations. + +If you build GCC on a BSD system using a directory stored in an old System +V file system, problems may occur in running @command{fixincludes} if the +System V file system doesn't support symbolic links. These problems +result in a failure to fix the declaration of @code{size_t} in +@file{sys/types.h}. If you find that @code{size_t} is a signed type and +that type mismatches occur, this could be the cause. + +The solution is not to use such a directory for building GCC@. + +Similarly, when building from SVN or snapshots, or if you modify +@file{*.l} files, you need the Flex lexical analyzer generator +installed. If you do not modify @file{*.l} files, releases contain +the Flex-generated files and you do not need Flex installed to build +them. There is still one Flex-based lexical analyzer (part of the +build machinery, not of GCC itself) that is used even if you only +build the C front end. + +When building from SVN or snapshots, or if you modify Texinfo +documentation, you need version 4.7 or later of Texinfo installed if you +want Info documentation to be regenerated. Releases contain Info +documentation pre-built for the unmodified documentation in the release. + +@section Building a native compiler + +For a native build, the default configuration is to perform +a 3-stage bootstrap of the compiler when @samp{make} is invoked. +This will build the entire GCC system and ensure that it compiles +itself correctly. It can be disabled with the @option{--disable-bootstrap} +parameter to @samp{configure}, but bootstrapping is suggested because +the compiler will be tested more completely and could also have +better performance. + +The bootstrapping process will complete the following steps: + +@itemize @bullet +@item +Build tools necessary to build the compiler. + +@item +Perform a 3-stage bootstrap of the compiler. This includes building +three times the target tools for use by the compiler such as binutils +(bfd, binutils, gas, gprof, ld, and opcodes) if they have been +individually linked or moved into the top level GCC source tree before +configuring. + +@item +Perform a comparison test of the stage2 and stage3 compilers. + +@item +Build runtime libraries using the stage3 compiler from the previous step. + +@end itemize + +If you are short on disk space you might consider @samp{make +bootstrap-lean} instead. The sequence of compilation is the +same described above, but object files from the stage1 and +stage2 of the 3-stage bootstrap of the compiler are deleted as +soon as they are no longer needed. + +If you wish to use non-default GCC flags when compiling the stage2 +and stage3 compilers, set @code{BOOT_CFLAGS} on the command line when +doing @samp{make}. For example, if you want to save additional space +during the bootstrap and in the final installation as well, you can +build the compiler binaries without debugging information as in the +following example. This will save roughly 40% of disk space both for +the bootstrap and the final installation. (Libraries will still contain +debugging information.) + +@smallexample + make BOOT_CFLAGS='-O' bootstrap +@end smallexample + +You can place non-default optimization flags into @code{BOOT_CFLAGS}; they +are less well tested here than the default of @samp{-g -O2}, but should +still work. In a few cases, you may find that you need to specify special +flags such as @option{-msoft-float} here to complete the bootstrap; or, +if the native compiler miscompiles the stage1 compiler, you may need +to work around this, by choosing @code{BOOT_CFLAGS} to avoid the parts +of the stage1 compiler that were miscompiled, or by using @samp{make +bootstrap4} to increase the number of stages of bootstrap. + +@code{BOOT_CFLAGS} does not apply to bootstrapped target libraries. +Since these are always compiled with the compiler currently being +bootstrapped, you can use @code{CFLAGS_FOR_TARGET} to modify their +compilation flags, as for non-bootstrapped target libraries. +Again, if the native compiler miscompiles the stage1 compiler, you may +need to work around this by avoiding non-working parts of the stage1 +compiler. Use @code{STAGE1_LIBCFLAGS} to this end. + +If you used the flag @option{--enable-languages=@dots{}} to restrict +the compilers to be built, only those you've actually enabled will be +built. This will of course only build those runtime libraries, for +which the particular compiler has been built. Please note, +that re-defining @env{LANGUAGES} when calling @samp{make} +@strong{does not} work anymore! + +If the comparison of stage2 and stage3 fails, this normally indicates +that the stage2 compiler has compiled GCC incorrectly, and is therefore +a potentially serious bug which you should investigate and report. (On +a few systems, meaningful comparison of object files is impossible; they +always appear ``different''. If you encounter this problem, you will +need to disable comparison in the @file{Makefile}.) + +If you do not want to bootstrap your compiler, you can configure with +@option{--disable-bootstrap}. In particular cases, you may want to +bootstrap your compiler even if the target system is not the same as +the one you are building on: for example, you could build a +@code{powerpc-unknown-linux-gnu} toolchain on a +@code{powerpc64-unknown-linux-gnu} host. In this case, pass +@option{--enable-bootstrap} to the configure script. + + +@section Building a cross compiler + +When building a cross compiler, it is not generally possible to do a +3-stage bootstrap of the compiler. This makes for an interesting problem +as parts of GCC can only be built with GCC@. + +To build a cross compiler, we first recommend building and installing a +native compiler. You can then use the native GCC compiler to build the +cross compiler. The installed native compiler needs to be GCC version +2.95 or later. + +If the cross compiler is to be built with support for the Java +programming language and the ability to compile .java source files is +desired, the installed native compiler used to build the cross +compiler needs to be the same GCC version as the cross compiler. In +addition the cross compiler needs to be configured with +@option{--with-ecj-jar=@dots{}}. + +Assuming you have already installed a native copy of GCC and configured +your cross compiler, issue the command @command{make}, which performs the +following steps: + +@itemize @bullet +@item +Build host tools necessary to build the compiler. + +@item +Build target tools for use by the compiler such as binutils (bfd, +binutils, gas, gprof, ld, and opcodes) +if they have been individually linked or moved into the top level GCC source +tree before configuring. + +@item +Build the compiler (single stage only). + +@item +Build runtime libraries using the compiler from the previous step. +@end itemize + +Note that if an error occurs in any step the make process will exit. + +If you are not building GNU binutils in the same source tree as GCC, +you will need a cross-assembler and cross-linker installed before +configuring GCC@. Put them in the directory +@file{@var{prefix}/@var{target}/bin}. Here is a table of the tools +you should put in this directory: + +@table @file +@item as +This should be the cross-assembler. + +@item ld +This should be the cross-linker. + +@item ar +This should be the cross-archiver: a program which can manipulate +archive files (linker libraries) in the target machine's format. + +@item ranlib +This should be a program to construct a symbol table in an archive file. +@end table + +The installation of GCC will find these programs in that directory, +and copy or link them to the proper place to for the cross-compiler to +find them when run later. + +The easiest way to provide these files is to build the Binutils package. +Configure it with the same @option{--host} and @option{--target} +options that you use for configuring GCC, then build and install +them. They install their executables automatically into the proper +directory. Alas, they do not support all the targets that GCC +supports. + +If you are not building a C library in the same source tree as GCC, +you should also provide the target libraries and headers before +configuring GCC, specifying the directories with +@option{--with-sysroot} or @option{--with-headers} and +@option{--with-libs}. Many targets also require ``start files'' such +as @file{crt0.o} and +@file{crtn.o} which are linked into each executable. There may be several +alternatives for @file{crt0.o}, for use with profiling or other +compilation options. Check your target's definition of +@code{STARTFILE_SPEC} to find out what start files it uses. + +@section Building in parallel + +GNU Make 3.79 and above, which is necessary to build GCC, support +building in parallel. To activate this, you can use @samp{make -j 2} +instead of @samp{make}. You can also specify a bigger number, and +in most cases using a value greater than the number of processors in +your machine will result in fewer and shorter I/O latency hits, thus +improving overall throughput; this is especially true for slow drives +and network filesystems. + +@section Building the Ada compiler + +In order to build GNAT, the Ada compiler, you need a working GNAT +compiler (GCC version 3.4 or later). +This includes GNAT tools such as @command{gnatmake} and +@command{gnatlink}, since the Ada front end is written in Ada and +uses some GNAT-specific extensions. + +In order to build a cross compiler, it is suggested to install +the new compiler as native first, and then use it to build the cross +compiler. + +@command{configure} does not test whether the GNAT installation works +and has a sufficiently recent version; if too old a GNAT version is +installed, the build will fail unless @option{--enable-languages} is +used to disable building the Ada front end. + +@env{ADA_INCLUDE_PATH} and @env{ADA_OBJECT_PATH} environment variables +must not be set when building the Ada compiler, the Ada tools, or the +Ada runtime libraries. You can check that your build environment is clean +by verifying that @samp{gnatls -v} lists only one explicit path in each +section. + +@section Building with profile feedback + +It is possible to use profile feedback to optimize the compiler itself. This +should result in a faster compiler binary. Experiments done on x86 using gcc +3.3 showed approximately 7 percent speedup on compiling C programs. To +bootstrap the compiler with profile feedback, use @code{make profiledbootstrap}. + +When @samp{make profiledbootstrap} is run, it will first build a @code{stage1} +compiler. This compiler is used to build a @code{stageprofile} compiler +instrumented to collect execution counts of instruction and branch +probabilities. Then runtime libraries are compiled with profile collected. +Finally a @code{stagefeedback} compiler is built using the information collected. + +Unlike standard bootstrap, several additional restrictions apply. The +compiler used to build @code{stage1} needs to support a 64-bit integral type. +It is recommended to only use GCC for this. Also parallel make is currently +not supported since collisions in profile collecting may occur. + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Testing***************************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Testing, Final install, Building, Installing GCC +@end ifnothtml +@ifset testhtml +@ifnothtml +@chapter Installing GCC: Testing +@end ifnothtml +@cindex Testing +@cindex Installing GCC: Testing +@cindex Testsuite + +Before you install GCC, we encourage you to run the testsuites and to +compare your results with results from a similar configuration that have +been submitted to the +@uref{http://gcc.gnu.org/ml/gcc-testresults/,,gcc-testresults mailing list}. +Some of these archived results are linked from the build status lists +at @uref{http://gcc.gnu.org/buildstat.html}, although not everyone who +reports a successful build runs the testsuites and submits the results. +This step is optional and may require you to download additional software, +but it can give you confidence in your new GCC installation or point out +problems before you install and start using your new GCC@. + +First, you must have @uref{download.html,,downloaded the testsuites}. +These are part of the full distribution, but if you downloaded the +``core'' compiler plus any front ends, you must download the testsuites +separately. + +Second, you must have the testing tools installed. This includes +@uref{http://www.gnu.org/software/dejagnu/,,DejaGnu}, Tcl, and Expect; +the DejaGnu site has links to these. + +If the directories where @command{runtest} and @command{expect} were +installed are not in the @env{PATH}, you may need to set the following +environment variables appropriately, as in the following example (which +assumes that DejaGnu has been installed under @file{/usr/local}): + +@smallexample + TCL_LIBRARY = /usr/local/share/tcl8.0 + DEJAGNULIBS = /usr/local/share/dejagnu +@end smallexample + +(On systems such as Cygwin, these paths are required to be actual +paths, not mounts or links; presumably this is due to some lack of +portability in the DejaGnu code.) + + +Finally, you can run the testsuite (which may take a long time): +@smallexample + cd @var{objdir}; make -k check +@end smallexample + +This will test various components of GCC, such as compiler +front ends and runtime libraries. While running the testsuite, DejaGnu +might emit some harmless messages resembling +@samp{WARNING: Couldn't find the global config file.} or +@samp{WARNING: Couldn't find tool init file} that can be ignored. + +If you are testing a cross-compiler, you may want to run the testsuite +on a simulator as described at @uref{http://gcc.gnu.org/simtest-howto.html}. + +@section How can you run the testsuite on selected tests? + +In order to run sets of tests selectively, there are targets +@samp{make check-gcc} and @samp{make check-g++} +in the @file{gcc} subdirectory of the object directory. You can also +just run @samp{make check} in a subdirectory of the object directory. + + +A more selective way to just run all @command{gcc} execute tests in the +testsuite is to use + +@smallexample + make check-gcc RUNTESTFLAGS="execute.exp @var{other-options}" +@end smallexample + +Likewise, in order to run only the @command{g++} ``old-deja'' tests in +the testsuite with filenames matching @samp{9805*}, you would use + +@smallexample + make check-g++ RUNTESTFLAGS="old-deja.exp=9805* @var{other-options}" +@end smallexample + +The @file{*.exp} files are located in the testsuite directories of the GCC +source, the most important ones being @file{compile.exp}, +@file{execute.exp}, @file{dg.exp} and @file{old-deja.exp}. +To get a list of the possible @file{*.exp} files, pipe the +output of @samp{make check} into a file and look at the +@samp{Running @dots{} .exp} lines. + +@section Passing options and running multiple testsuites + +You can pass multiple options to the testsuite using the +@samp{--target_board} option of DejaGNU, either passed as part of +@samp{RUNTESTFLAGS}, or directly to @command{runtest} if you prefer to +work outside the makefiles. For example, + +@smallexample + make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants" +@end smallexample + +will run the standard @command{g++} testsuites (``unix'' is the target name +for a standard native testsuite situation), passing +@samp{-O3 -fmerge-constants} to the compiler on every test, i.e., +slashes separate options. + +You can run the testsuites multiple times using combinations of options +with a syntax similar to the brace expansion of popular shells: + +@smallexample + @dots{}"--target_board=arm-sim\@{-mhard-float,-msoft-float\@}\@{-O1,-O2,-O3,\@}" +@end smallexample + +(Note the empty option caused by the trailing comma in the final group.) +The following will run each testsuite eight times using the @samp{arm-sim} +target, as if you had specified all possible combinations yourself: + +@smallexample + --target_board=arm-sim/-mhard-float/-O1 + --target_board=arm-sim/-mhard-float/-O2 + --target_board=arm-sim/-mhard-float/-O3 + --target_board=arm-sim/-mhard-float + --target_board=arm-sim/-msoft-float/-O1 + --target_board=arm-sim/-msoft-float/-O2 + --target_board=arm-sim/-msoft-float/-O3 + --target_board=arm-sim/-msoft-float +@end smallexample + +They can be combined as many times as you wish, in arbitrary ways. This +list: + +@smallexample + @dots{}"--target_board=unix/-Wextra\@{-O3,-fno-strength\@}\@{-fomit-frame,\@}" +@end smallexample + +will generate four combinations, all involving @samp{-Wextra}. + +The disadvantage to this method is that the testsuites are run in serial, +which is a waste on multiprocessor systems. For users with GNU Make and +a shell which performs brace expansion, you can run the testsuites in +parallel by having the shell perform the combinations and @command{make} +do the parallel runs. Instead of using @samp{--target_board}, use a +special makefile target: + +@smallexample + make -j@var{N} check-@var{testsuite}//@var{test-target}/@var{option1}/@var{option2}/@dots{} +@end smallexample + +For example, + +@smallexample + make -j3 check-gcc//sh-hms-sim/@{-m1,-m2,-m3,-m3e,-m4@}/@{,-nofpu@} +@end smallexample + +will run three concurrent ``make-gcc'' testsuites, eventually testing all +ten combinations as described above. Note that this is currently only +supported in the @file{gcc} subdirectory. (To see how this works, try +typing @command{echo} before the example given here.) + + +@section Additional testing for Java Class Libraries + +The Java runtime tests can be executed via @samp{make check} +in the @file{@var{target}/libjava/testsuite} directory in +the build tree. + +The @uref{http://sourceware.org/mauve/,,Mauve Project} provides +a suite of tests for the Java Class Libraries. This suite can be run +as part of libgcj testing by placing the Mauve tree within the libjava +testsuite at @file{libjava/testsuite/libjava.mauve/mauve}, or by +specifying the location of that tree when invoking @samp{make}, as in +@samp{make MAUVEDIR=~/mauve check}. + +@section How to interpret test results + +The result of running the testsuite are various @file{*.sum} and @file{*.log} +files in the testsuite subdirectories. The @file{*.log} files contain a +detailed log of the compiler invocations and the corresponding +results, the @file{*.sum} files summarize the results. These summaries +contain status codes for all tests: + +@itemize @bullet +@item +PASS: the test passed as expected +@item +XPASS: the test unexpectedly passed +@item +FAIL: the test unexpectedly failed +@item +XFAIL: the test failed as expected +@item +UNSUPPORTED: the test is not supported on this platform +@item +ERROR: the testsuite detected an error +@item +WARNING: the testsuite detected a possible problem +@end itemize + +It is normal for some tests to report unexpected failures. At the +current time the testing harness does not allow fine grained control +over whether or not a test is expected to fail. This problem should +be fixed in future releases. + + +@section Submitting test results + +If you want to report the results to the GCC project, use the +@file{contrib/test_summary} shell script. Start it in the @var{objdir} with + +@smallexample + @var{srcdir}/contrib/test_summary -p your_commentary.txt \ + -m gcc-testresults@@gcc.gnu.org |sh +@end smallexample + +This script uses the @command{Mail} program to send the results, so +make sure it is in your @env{PATH}. The file @file{your_commentary.txt} is +prepended to the testsuite summary and should contain any special +remarks you have on your results or your build environment. Please +do not edit the testsuite result block or the subject line, as these +messages may be automatically processed. + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Final install*********************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Final install, , Testing, Installing GCC +@end ifnothtml +@ifset finalinstallhtml +@ifnothtml +@chapter Installing GCC: Final installation +@end ifnothtml + +Now that GCC has been built (and optionally tested), you can install it with +@smallexample +cd @var{objdir}; make install +@end smallexample + +We strongly recommend to install into a target directory where there is +no previous version of GCC present. Also, the GNAT runtime should not +be stripped, as this would break certain features of the debugger that +depend on this debugging information (catching Ada exceptions for +instance). + +That step completes the installation of GCC; user level binaries can +be found in @file{@var{prefix}/bin} where @var{prefix} is the value +you specified with the @option{--prefix} to configure (or +@file{/usr/local} by default). (If you specified @option{--bindir}, +that directory will be used instead; otherwise, if you specified +@option{--exec-prefix}, @file{@var{exec-prefix}/bin} will be used.) +Headers for the C++ and Java libraries are installed in +@file{@var{prefix}/include}; libraries in @file{@var{libdir}} +(normally @file{@var{prefix}/lib}); internal parts of the compiler in +@file{@var{libdir}/gcc} and @file{@var{libexecdir}/gcc}; documentation +in info format in @file{@var{infodir}} (normally +@file{@var{prefix}/info}). + +When installing cross-compilers, GCC's executables +are not only installed into @file{@var{bindir}}, that +is, @file{@var{exec-prefix}/bin}, but additionally into +@file{@var{exec-prefix}/@var{target-alias}/bin}, if that directory +exists. Typically, such @dfn{tooldirs} hold target-specific +binutils, including assembler and linker. + +Installation into a temporary staging area or into a @command{chroot} +jail can be achieved with the command + +@smallexample +make DESTDIR=@var{path-to-rootdir} install +@end smallexample + +@noindent where @var{path-to-rootdir} is the absolute path of +a directory relative to which all installation paths will be +interpreted. Note that the directory specified by @code{DESTDIR} +need not exist yet; it will be created if necessary. + +There is a subtle point with tooldirs and @code{DESTDIR}: +If you relocate a cross-compiler installation with +e.g.@: @samp{DESTDIR=@var{rootdir}}, then the directory +@file{@var{rootdir}/@var{exec-prefix}/@var{target-alias}/bin} will +be filled with duplicated GCC executables only if it already exists, +it will not be created otherwise. This is regarded as a feature, +not as a bug, because it gives slightly more control to the packagers +using the @code{DESTDIR} feature. + +If you are bootstrapping a released version of GCC then please +quickly review the build status page for your release, available from +@uref{http://gcc.gnu.org/buildstat.html}. +If your system is not listed for the version of GCC that you built, +send a note to +@email{gcc@@gcc.gnu.org} indicating +that you successfully built and installed GCC@. +Include the following information: + +@itemize @bullet +@item +Output from running @file{@var{srcdir}/config.guess}. Do not send +that file itself, just the one-line output from running it. + +@item +The output of @samp{gcc -v} for your newly installed @command{gcc}. +This tells us which version of GCC you built and the options you passed to +configure. + +@item +Whether you enabled all languages or a subset of them. If you used a +full distribution then this information is part of the configure +options in the output of @samp{gcc -v}, but if you downloaded the +``core'' compiler plus additional front ends then it isn't apparent +which ones you built unless you tell us about it. + +@item +If the build was for GNU/Linux, also include: +@itemize @bullet +@item +The distribution name and version (e.g., Red Hat 7.1 or Debian 2.2.3); +this information should be available from @file{/etc/issue}. + +@item +The version of the Linux kernel, available from @samp{uname --version} +or @samp{uname -a}. + +@item +The version of glibc you used; for RPM-based systems like Red Hat, +Mandrake, and SuSE type @samp{rpm -q glibc} to get the glibc version, +and on systems like Debian and Progeny use @samp{dpkg -l libc6}. +@end itemize +For other systems, you can include similar information if you think it is +relevant. + +@item +Any other information that you think would be useful to people building +GCC on the same configuration. The new entry in the build status list +will include a link to the archived copy of your message. +@end itemize + +We'd also like to know if the +@ifnothtml +@ref{Specific, host/target specific installation notes} +@end ifnothtml +@ifhtml +@uref{specific.html,,host/target specific installation notes} +@end ifhtml +didn't include your host/target information or if that information is +incomplete or out of date. Send a note to +@email{gcc@@gcc.gnu.org} detailing how the information should be changed. + +If you find a bug, please report it following the +@uref{../bugs.html,,bug reporting guidelines}. + +If you want to print the GCC manuals, do @samp{cd @var{objdir}; make +dvi}. You will need to have @command{texi2dvi} (version at least 4.7) +and @TeX{} installed. This creates a number of @file{.dvi} files in +subdirectories of @file{@var{objdir}}; these may be converted for +printing with programs such as @command{dvips}. Alternately, by using +@samp{make pdf} in place of @samp{make dvi}, you can create documentation +in the form of @file{.pdf} files; this requires @command{texi2pdf}, which +is included with Texinfo version 4.8 and later. You can also +@uref{http://shop.fsf.org/,,buy printed manuals from the +Free Software Foundation}, though such manuals may not be for the most +recent version of GCC@. + +If you would like to generate online HTML documentation, do @samp{cd +@var{objdir}; make html} and HTML will be generated for the gcc manuals in +@file{@var{objdir}/gcc/HTML}. + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Binaries**************************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Binaries, Specific, Installing GCC, Top +@end ifnothtml +@ifset binarieshtml +@ifnothtml +@chapter Installing GCC: Binaries +@end ifnothtml +@cindex Binaries +@cindex Installing GCC: Binaries + +We are often asked about pre-compiled versions of GCC@. While we cannot +provide these for all platforms, below you'll find links to binaries for +various platforms where creating them by yourself is not easy due to various +reasons. + +Please note that we did not create these binaries, nor do we +support them. If you have any problems installing them, please +contact their makers. + +@itemize +@item +AIX: +@itemize +@item +@uref{http://www.bullfreeware.com,,Bull's Freeware and Shareware Archive for AIX}; + +@item +@uref{http://pware.hvcc.edu,,Hudson Valley Community College Open Source Software for IBM System p}; + +@item +@uref{http://www.perzl.org/aix/,,AIX 5L and 6 Open Source Packages}. +@end itemize + +@item +DOS---@uref{http://www.delorie.com/djgpp/,,DJGPP}. + +@item +Renesas H8/300[HS]---@uref{http://h8300-hms.sourceforge.net/,,GNU +Development Tools for the Renesas H8/300[HS] Series}. + +@item +HP-UX: +@itemize +@item +@uref{http://hpux.cs.utah.edu/,,HP-UX Porting Center}; + +@item +@uref{ftp://sunsite.informatik.rwth-aachen.de/pub/packages/gcc_hpux/,,Binaries for HP-UX 11.00 at Aachen University of Technology}. +@end itemize + +@item +Motorola 68HC11/68HC12---@uref{http://www.gnu-m68hc11.org,,GNU +Development Tools for the Motorola 68HC11/68HC12}. + +@item +@uref{http://www.sco.com/skunkware/devtools/index.html#gcc,,SCO +OpenServer/Unixware}. + +@item +Solaris 2 (SPARC, Intel)---@uref{http://www.sunfreeware.com/,,Sunfreeware}. + +@item +SGI---@uref{http://freeware.sgi.com/,,SGI Freeware}. + +@item +Microsoft Windows: +@itemize +@item +The @uref{http://sourceware.org/cygwin/,,Cygwin} project; +@item +The @uref{http://www.mingw.org/,,MinGW} project. +@end itemize + +@item +@uref{ftp://ftp.thewrittenword.com/packages/by-name/,,The +Written Word} offers binaries for +AIX 4.3.3, 5.1 and 5.2, +IRIX 6.5, +Tru64 UNIX 4.0D and 5.1, +GNU/Linux (i386), +HP-UX 10.20, 11.00, and 11.11, and +Solaris/SPARC 2.5.1, 2.6, 7, 8, 9 and 10. + +@item +@uref{http://www.openpkg.org/,,OpenPKG} offers binaries for quite a +number of platforms. + +@item +The @uref{http://gcc.gnu.org/wiki/GFortranBinaries,,GFortran Wiki} has +links to GNU Fortran binaries for several platforms. +@end itemize + +In addition to those specific offerings, you can get a binary +distribution CD-ROM from the +@uref{http://www.gnu.org/order/order.html,,Free Software Foundation}. +It contains binaries for a number of platforms, and +includes not only GCC, but other stuff as well. The current CD does +not contain the latest version of GCC, but it should allow +bootstrapping the compiler. An updated version of that disk is in the +works. + +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Specific**************************************************************** +@ifnothtml +@comment node-name, next, previous, up +@node Specific, Old, Binaries, Top +@end ifnothtml +@ifset specifichtml +@ifnothtml +@chapter Host/target specific installation notes for GCC +@end ifnothtml +@cindex Specific +@cindex Specific installation notes +@cindex Target specific installation +@cindex Host specific installation +@cindex Target specific installation notes + +Please read this document carefully @emph{before} installing the +GNU Compiler Collection on your machine. + +Note that this list of install notes is @emph{not} a list of supported +hosts or targets. Not all supported hosts and targets are listed +here, only the ones that require host-specific or target-specific +information are. + +@ifhtml +@itemize +@item +@uref{#alpha-x-x,,alpha*-*-*} +@item +@uref{#alpha-dec-osf,,alpha*-dec-osf*} +@item +@uref{#arc-x-elf,,arc-*-elf} +@item +@uref{#arm-x-elf,,arm-*-elf} +@uref{#arm-x-coff,,arm-*-coff} +@uref{#arm-x-aout,,arm-*-aout} +@item +@uref{#avr,,avr} +@item +@uref{#bfin,,Blackfin} +@item +@uref{#dos,,DOS} +@item +@uref{#x-x-freebsd,,*-*-freebsd*} +@item +@uref{#h8300-hms,,h8300-hms} +@item +@uref{#hppa-hp-hpux,,hppa*-hp-hpux*} +@item +@uref{#hppa-hp-hpux10,,hppa*-hp-hpux10} +@item +@uref{#hppa-hp-hpux11,,hppa*-hp-hpux11} +@item +@uref{#x-x-linux-gnu,,*-*-linux-gnu} +@item +@uref{#ix86-x-linux,,i?86-*-linux*} +@item +@uref{#ix86-x-solaris210,,i?86-*-solaris2.10} +@item +@uref{#ia64-x-linux,,ia64-*-linux} +@item +@uref{#ia64-x-hpux,,ia64-*-hpux*} +@item +@uref{#x-ibm-aix,,*-ibm-aix*} +@item +@uref{#iq2000-x-elf,,iq2000-*-elf} +@item +@uref{#m32c-x-elf,,m32c-*-elf} +@item +@uref{#m32r-x-elf,,m32r-*-elf} +@item +@uref{#m6811-elf,,m6811-elf} +@item +@uref{#m6812-elf,,m6812-elf} +@item +@uref{#m68k-x-x,,m68k-*-*} +@item +@uref{#m68k-uclinux,,m68k-uclinux} +@item +@uref{#mips-x-x,,mips-*-*} +@item +@uref{#mips-sgi-irix5,,mips-sgi-irix5} +@item +@uref{#mips-sgi-irix6,,mips-sgi-irix6} +@item +@uref{#powerpc-x-x,,powerpc*-*-*} +@item +@uref{#powerpc-x-darwin,,powerpc-*-darwin*} +@item +@uref{#powerpc-x-elf,,powerpc-*-elf} +@item +@uref{#powerpc-x-linux-gnu,,powerpc*-*-linux-gnu*} +@item +@uref{#powerpc-x-netbsd,,powerpc-*-netbsd*} +@item +@uref{#powerpc-x-eabisim,,powerpc-*-eabisim} +@item +@uref{#powerpc-x-eabi,,powerpc-*-eabi} +@item +@uref{#powerpcle-x-elf,,powerpcle-*-elf} +@item +@uref{#powerpcle-x-eabisim,,powerpcle-*-eabisim} +@item +@uref{#powerpcle-x-eabi,,powerpcle-*-eabi} +@item +@uref{#s390-x-linux,,s390-*-linux*} +@item +@uref{#s390x-x-linux,,s390x-*-linux*} +@item +@uref{#s390x-ibm-tpf,,s390x-ibm-tpf*} +@item +@uref{#x-x-solaris2,,*-*-solaris2*} +@item +@uref{#sparc-sun-solaris2,,sparc-sun-solaris2*} +@item +@uref{#sparc-sun-solaris27,,sparc-sun-solaris2.7} +@item +@uref{#sparc-x-linux,,sparc-*-linux*} +@item +@uref{#sparc64-x-solaris2,,sparc64-*-solaris2*} +@item +@uref{#sparcv9-x-solaris2,,sparcv9-*-solaris2*} +@item +@uref{#x-x-vxworks,,*-*-vxworks*} +@item +@uref{#x86-64-x-x,,x86_64-*-*, amd64-*-*} +@item +@uref{#xtensa-x-elf,,xtensa*-*-elf} +@item +@uref{#xtensa-x-linux,,xtensa*-*-linux*} +@item +@uref{#windows,,Microsoft Windows} +@item +@uref{#x-x-cygwin,,*-*-cygwin} +@item +@uref{#x-x-interix,,*-*-interix} +@item +@uref{#x-x-mingw,,*-*-mingw} +@item +@uref{#os2,,OS/2} +@item +@uref{#older,,Older systems} +@end itemize + +@itemize +@item +@uref{#elf,,all ELF targets} (SVR4, Solaris 2, etc.) +@end itemize +@end ifhtml + + +@html + +


+@end html +@heading @anchor{alpha-x-x}alpha*-*-* + +This section contains general configuration information for all +alpha-based platforms using ELF (in particular, ignore this section for +DEC OSF/1, Digital UNIX and Tru64 UNIX)@. In addition to reading this +section, please read all other sections that match your target. + +We require binutils 2.11.2 or newer. +Previous binutils releases had a number of problems with DWARF 2 +debugging information, not the least of which is incorrect linking of +shared libraries. + +@html +
+@end html +@heading @anchor{alpha-dec-osf}alpha*-dec-osf* +Systems using processors that implement the DEC Alpha architecture and +are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq +Tru64 UNIX) operating system, for example the DEC Alpha AXP systems. + +As of GCC 3.2, versions before @code{alpha*-dec-osf4} are no longer +supported. (These are the versions which identify themselves as DEC +OSF/1.) + +In Digital Unix V4.0, virtual memory exhausted bootstrap failures +may be fixed by configuring with @option{--with-gc=simple}, +reconfiguring Kernel Virtual Memory and Swap parameters +per the @command{/usr/sbin/sys_check} Tuning Suggestions, +or applying the patch in +@uref{http://gcc.gnu.org/ml/gcc/2002-08/msg00822.html}. + +In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not +currently (2001-06-13) work with @command{mips-tfile}. As a workaround, +we need to use the old assembler, invoked via the barely documented +@option{-oldas} option. To bootstrap GCC, you either need to use the +Compaq C Compiler: + +@smallexample + % CC=cc @var{srcdir}/configure [@var{options}] [@var{target}] +@end smallexample + +or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: + +@smallexample + % CC=gcc -Wa,-oldas @var{srcdir}/configure [@var{options}] [@var{target}] +@end smallexample + +As of GNU binutils 2.11.2, neither GNU @command{as} nor GNU @command{ld} +are supported on Tru64 UNIX, so you must not configure GCC with +@option{--with-gnu-as} or @option{--with-gnu-ld}. + +GCC writes a @samp{.verstamp} directive to the assembler output file +unless it is built as a cross-compiler. It gets the version to use from +the system header file @file{/usr/include/stamp.h}. If you install a +new version of DEC Unix, you should rebuild GCC to pick up the new version +stamp. + +@samp{make compare} may fail on old versions of DEC Unix unless you add +@option{-save-temps} to @code{BOOT_CFLAGS}. On these systems, the name +of the assembler input file is stored in the object file, and that makes +comparison fail if it differs between the @code{stage1} and +@code{stage2} compilations. The option @option{-save-temps} forces a +fixed name to be used for the assembler input file, instead of a +randomly chosen name in @file{/tmp}. Do not add @option{-save-temps} +unless the comparisons fail without that option. If you add +@option{-save-temps}, you will have to manually delete the @samp{.i} and +@samp{.s} files after each series of compilations. + +GCC now supports both the native (ECOFF) debugging format used by DBX +and GDB and an encapsulated STABS format for use only with GDB@. See the +discussion of the @option{--with-stabs} option of @file{configure} above +for more information on these formats and how to select them. + +There is a bug in DEC's assembler that produces incorrect line numbers +for ECOFF format when the @samp{.align} directive is used. To work +around this problem, GCC will not emit such alignment directives +while writing ECOFF format debugging information even if optimization is +being performed. Unfortunately, this has the very undesirable +side-effect that code addresses when @option{-O} is specified are +different depending on whether or not @option{-g} is also specified. + +To avoid this behavior, specify @option{-gstabs+} and use GDB instead of +DBX@. DEC is now aware of this problem with the assembler and hopes to +provide a fix shortly. + +@html +
+@end html +@heading @anchor{arc-x-elf}arc-*-elf +Argonaut ARC processor. +This configuration is intended for embedded systems. + +@html +
+@end html +@heading @anchor{arm-x-elf}arm-*-elf +ARM-family processors. Subtargets that use the ELF object format +require GNU binutils 2.13 or newer. Such subtargets include: +@code{arm-*-freebsd}, @code{arm-*-netbsdelf}, @code{arm-*-*linux} +and @code{arm-*-rtems}. + +@html +
+@end html +@heading @anchor{arm-x-coff}arm-*-coff +ARM-family processors. Note that there are two different varieties +of PE format subtarget supported: @code{arm-wince-pe} and +@code{arm-pe} as well as a standard COFF target @code{arm-*-coff}. + +@html +
+@end html +@heading @anchor{arm-x-aout}arm-*-aout +ARM-family processors. These targets support the AOUT file format: +@code{arm-*-aout}, @code{arm-*-netbsd}. + +@html +
+@end html +@heading @anchor{avr}avr + +ATMEL AVR-family micro controllers. These are used in embedded +applications. There are no standard Unix configurations. +@ifnothtml +@xref{AVR Options,, AVR Options, gcc, Using the GNU Compiler +Collection (GCC)}, +@end ifnothtml +@ifhtml +See ``AVR Options'' in the main manual +@end ifhtml +for the list of supported MCU types. + +Use @samp{configure --target=avr --enable-languages="c"} to configure GCC@. + +Further installation notes and other useful information about AVR tools +can also be obtained from: + +@itemize @bullet +@item +@uref{http://www.nongnu.org/avr/,,http://www.nongnu.org/avr/} +@item +@uref{http://www.amelek.gda.pl/avr/,,http://www.amelek.gda.pl/avr/} +@end itemize + +We @emph{strongly} recommend using binutils 2.13 or newer. + +The following error: +@smallexample + Error: register required +@end smallexample + +indicates that you should upgrade to a newer version of the binutils. + +@html +
+@end html +@heading @anchor{bfin}Blackfin + +The Blackfin processor, an Analog Devices DSP. +@ifnothtml +@xref{Blackfin Options,, Blackfin Options, gcc, Using the GNU Compiler +Collection (GCC)}, +@end ifnothtml +@ifhtml +See ``Blackfin Options'' in the main manual +@end ifhtml + +More information, and a version of binutils with support for this processor, +is available at @uref{http://blackfin.uclinux.org} + +@html +
+@end html +@heading @anchor{cris}CRIS + +CRIS is the CPU architecture in Axis Communications ETRAX system-on-a-chip +series. These are used in embedded applications. + +@ifnothtml +@xref{CRIS Options,, CRIS Options, gcc, Using the GNU Compiler +Collection (GCC)}, +@end ifnothtml +@ifhtml +See ``CRIS Options'' in the main manual +@end ifhtml +for a list of CRIS-specific options. + +There are a few different CRIS targets: +@table @code +@item cris-axis-elf +Mainly for monolithic embedded systems. Includes a multilib for the +@samp{v10} core used in @samp{ETRAX 100 LX}. +@item cris-axis-linux-gnu +A GNU/Linux port for the CRIS architecture, currently targeting +@samp{ETRAX 100 LX} by default. +@end table + +For @code{cris-axis-elf} you need binutils 2.11 +or newer. For @code{cris-axis-linux-gnu} you need binutils 2.12 or newer. + +Pre-packaged tools can be obtained from +@uref{ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/}. More +information about this platform is available at +@uref{http://developer.axis.com/}. + +@html +
+@end html +@heading @anchor{crx}CRX + +The CRX CompactRISC architecture is a low-power 32-bit architecture with +fast context switching and architectural extensibility features. + +@ifnothtml +@xref{CRX Options,, CRX Options, gcc, Using and Porting the GNU Compiler +Collection (GCC)}, +@end ifnothtml + +@ifhtml +See ``CRX Options'' in the main manual for a list of CRX-specific options. +@end ifhtml + +Use @samp{configure --target=crx-elf --enable-languages=c,c++} to configure +GCC@ for building a CRX cross-compiler. The option @samp{--target=crx-elf} +is also used to build the @samp{newlib} C library for CRX. + +It is also possible to build libstdc++-v3 for the CRX architecture. This +needs to be done in a separate step with the following configure settings: +@samp{gcc/libstdc++-v3/configure --host=crx-elf --with-newlib +--enable-sjlj-exceptions --enable-cxx-flags='-fexceptions -frtti'} + +@html +
+@end html +@heading @anchor{dos}DOS + +Please have a look at the @uref{binaries.html,,binaries page}. + +You cannot install GCC by itself on MSDOS; it will not compile under +any MSDOS compiler except itself. You need to get the complete +compilation package DJGPP, which includes binaries as well as sources, +and includes all the necessary compilation tools and libraries. + +@html +
+@end html +@heading @anchor{x-x-freebsd}*-*-freebsd* + +The version of binutils installed in @file{/usr/bin} probably works with +this release of GCC@. However, on FreeBSD 4, bootstrapping against the +latest FSF binutils is known to improve overall testsuite results; and, +on FreeBSD/alpha, using binutils 2.14 or later is required to build libjava. + +Support for FreeBSD 1 was discontinued in GCC 3.2. + +Support for FreeBSD 2 will be discontinued after GCC 3.4. The +following was true for GCC 3.1 but the current status is unknown. +For FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All +configuration support and files as shipped with GCC 2.95 are still in +place. FreeBSD 2.2.7 has been known to bootstrap completely; however, +it is unknown which version of binutils was used (it is assumed that it +was the system copy in @file{/usr/bin}) and C++ EH failures were noted. + +For FreeBSD using the ELF file format: DWARF 2 debugging is now the +default for all CPU architectures. It had been the default on +FreeBSD/alpha since its inception. You may use @option{-gstabs} instead +of @option{-g}, if you really want the old debugging format. There are +no known issues with mixing object files and libraries with different +debugging formats. Otherwise, this release of GCC should now match more +of the configuration used in the stock FreeBSD configuration of GCC@. In +particular, @option{--enable-threads} is now configured by default. +However, as a general user, do not attempt to replace the system +compiler with this release. Known to bootstrap and check with good +results on FreeBSD 4.9-STABLE and 5-CURRENT@. In the past, known to +bootstrap and check with good results on FreeBSD 3.0, 3.4, 4.0, 4.2, +4.3, 4.4, 4.5, 4.8-STABLE@. + +In principle, @option{--enable-threads} is now compatible with +@option{--enable-libgcj} on FreeBSD@. However, it has only been built +and tested on @samp{i386-*-freebsd[45]} and @samp{alpha-*-freebsd[45]}. +The static +library may be incorrectly built (symbols are missing at link time). +There is a rare timing-based startup hang (probably involves an +assumption about the thread library). Multi-threaded boehm-gc (required for +libjava) exposes severe threaded signal-handling bugs on FreeBSD before +4.5-RELEASE@. Other CPU architectures +supported by FreeBSD will require additional configuration tuning in, at +the very least, both boehm-gc and libffi. + +Shared @file{libgcc_s.so} is now built and installed by default. + +@html +
+@end html +@heading @anchor{h8300-hms}h8300-hms +Renesas H8/300 series of processors. + +Please have a look at the @uref{binaries.html,,binaries page}. + +The calling convention and structure layout has changed in release 2.6. +All code must be recompiled. The calling convention now passes the +first three arguments in function calls in registers. Structures are no +longer a multiple of 2 bytes. + +@html +
+@end html +@heading @anchor{hppa-hp-hpux}hppa*-hp-hpux* +Support for HP-UX version 9 and older was discontinued in GCC 3.4. + +We require using gas/binutils on all hppa platforms. Version 2.19 or +later is recommended. + +It may be helpful to configure GCC with the +@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and +@option{--with-as=@dots{}} options to ensure that GCC can find GAS@. + +The HP assembler should not be used with GCC. It is rarely tested and may +not work. It shouldn't be used with any languages other than C due to its +many limitations. + +Specifically, @option{-g} does not work (HP-UX uses a peculiar debugging +format which GCC does not know about). It also inserts timestamps +into each object file it creates, causing the 3-stage comparison test to +fail during a bootstrap. You should be able to continue by saying +@samp{make all-host all-target} after getting the failure from @samp{make}. + +Various GCC features are not supported. For example, it does not support weak +symbols or alias definitions. As a result, explicit template instantiations +are required when using C++. This makes it difficult if not impossible to +build many C++ applications. + +There are two default scheduling models for instructions. These are +PROCESSOR_7100LC and PROCESSOR_8000. They are selected from the pa-risc +architecture specified for the target machine when configuring. +PROCESSOR_8000 is the default. PROCESSOR_7100LC is selected when +the target is a @samp{hppa1*} machine. + +The PROCESSOR_8000 model is not well suited to older processors. Thus, +it is important to completely specify the machine architecture when +configuring if you want a model other than PROCESSOR_8000. The macro +TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different +default scheduling model is desired. + +As of GCC 4.0, GCC uses the UNIX 95 namespace for HP-UX 10.10 +through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later. +This namespace change might cause problems when bootstrapping with +an earlier version of GCC or the HP compiler as essentially the same +namespace is required for an entire build. This problem can be avoided +in a number of ways. With HP cc, @env{UNIX_STD} can be set to @samp{95} +or @samp{98}. Another way is to add an appropriate set of predefines +to @env{CC}. The description for the @option{munix=} option contains +a list of the predefines used with each standard. + +More specific information to @samp{hppa*-hp-hpux*} targets follows. + +@html +
+@end html +@heading @anchor{hppa-hp-hpux10}hppa*-hp-hpux10 + +For hpux10.20, we @emph{highly} recommend you pick up the latest sed patch +@code{PHCO_19798} from HP@. HP has two sites which provide patches free of +charge: + +@itemize @bullet +@item +@html +US, Canada, Asia-Pacific, and +Latin-America +@end html +@ifnothtml +@uref{http://us.itrc.hp.com/service/home/home.do,,} US, Canada, Asia-Pacific, +and Latin-America. +@end ifnothtml +@item +@uref{http://europe.itrc.hp.com/service/home/home.do,,} Europe. +@end itemize + +The C++ ABI has changed incompatibly in GCC 4.0. COMDAT subspaces are +used for one-only code and data. This resolves many of the previous +problems in using C++ on this target. However, the ABI is not compatible +with the one implemented under HP-UX 11 using secondary definitions. + +@html +
+@end html +@heading @anchor{hppa-hp-hpux11}hppa*-hp-hpux11 + +GCC 3.0 and up support HP-UX 11. GCC 2.95.x is not supported and cannot +be used to compile GCC 3.0 and up. + +The libffi and libjava libraries haven't been ported to 64-bit HP-UX@ +and don't build. + +Refer to @uref{binaries.html,,binaries} for information about obtaining +precompiled GCC binaries for HP-UX@. Precompiled binaries must be obtained +to build the Ada language as it can't be bootstrapped using C@. Ada is +only available for the 32-bit PA-RISC runtime. + +Starting with GCC 3.4 an ISO C compiler is required to bootstrap. The +bundled compiler supports only traditional C; you will need either HP's +unbundled compiler, or a binary distribution of GCC@. + +It is possible to build GCC 3.3 starting with the bundled HP compiler, +but the process requires several steps. GCC 3.3 can then be used to +build later versions. The fastjar program contains ISO C code and +can't be built with the HP bundled compiler. This problem can be +avoided by not building the Java language. For example, use the +@option{--enable-languages="c,c++,f77,objc"} option in your configure +command. + +There are several possible approaches to building the distribution. +Binutils can be built first using the HP tools. Then, the GCC +distribution can be built. The second approach is to build GCC +first using the HP tools, then build binutils, then rebuild GCC@. +There have been problems with various binary distributions, so it +is best not to start from a binary distribution. + +On 64-bit capable systems, there are two distinct targets. Different +installation prefixes must be used if both are to be installed on +the same system. The @samp{hppa[1-2]*-hp-hpux11*} target generates code +for the 32-bit PA-RISC runtime architecture and uses the HP linker. +The @samp{hppa64-hp-hpux11*} target generates 64-bit code for the +PA-RISC 2.0 architecture. + +The script config.guess now selects the target type based on the compiler +detected during configuration. You must define @env{PATH} or @env{CC} so +that configure finds an appropriate compiler for the initial bootstrap. +When @env{CC} is used, the definition should contain the options that are +needed whenever @env{CC} is used. + +Specifically, options that determine the runtime architecture must be +in @env{CC} to correctly select the target for the build. It is also +convenient to place many other compiler options in @env{CC}. For example, +@env{CC="cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE"} +can be used to bootstrap the GCC 3.3 branch with the HP compiler in +64-bit K&R/bundled mode. The @option{+DA2.0W} option will result in +the automatic selection of the @samp{hppa64-hp-hpux11*} target. The +macro definition table of cpp needs to be increased for a successful +build with the HP compiler. _CLASSIC_TYPES and _HPUX_SOURCE need to +be defined when building with the bundled compiler, or when using the +@option{-Ac} option. These defines aren't necessary with @option{-Ae}. + +It is best to explicitly configure the @samp{hppa64-hp-hpux11*} target +with the @option{--with-ld=@dots{}} option. This overrides the standard +search for ld. The two linkers supported on this target require different +commands. The default linker is determined during configuration. As a +result, it's not possible to switch linkers in the middle of a GCC build. +This has been reported to sometimes occur in unified builds of binutils +and GCC@. + +A recent linker patch must be installed for the correct operation of +GCC 3.3 and later. @code{PHSS_26559} and @code{PHSS_24304} are the +oldest linker patches that are known to work. They are for HP-UX +11.00 and 11.11, respectively. @code{PHSS_24303}, the companion to +@code{PHSS_24304}, might be usable but it hasn't been tested. These +patches have been superseded. Consult the HP patch database to obtain +the currently recommended linker patch for your system. + +The patches are necessary for the support of weak symbols on the +32-bit port, and for the running of initializers and finalizers. Weak +symbols are implemented using SOM secondary definition symbols. Prior +to HP-UX 11, there are bugs in the linker support for secondary symbols. +The patches correct a problem of linker core dumps creating shared +libraries containing secondary symbols, as well as various other +linking issues involving secondary symbols. + +GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to +run initializers and finalizers on the 64-bit port. The 32-bit port +uses the linker @option{+init} and @option{+fini} options for the same +purpose. The patches correct various problems with the +init/+fini +options, including program core dumps. Binutils 2.14 corrects a +problem on the 64-bit port resulting from HP's non-standard use of +the .init and .fini sections for array initializers and finalizers. + +Although the HP and GNU linkers are both supported for the +@samp{hppa64-hp-hpux11*} target, it is strongly recommended that the +HP linker be used for link editing on this target. + +At this time, the GNU linker does not support the creation of long +branch stubs. As a result, it can't successfully link binaries +containing branch offsets larger than 8 megabytes. In addition, +there are problems linking shared libraries, linking executables +with @option{-static}, and with dwarf2 unwind and exception support. +It also doesn't provide stubs for internal calls to global functions +in shared libraries, so these calls can't be overloaded. + +The HP dynamic loader does not support GNU symbol versioning, so symbol +versioning is not supported. It may be necessary to disable symbol +versioning with @option{--disable-symvers} when using GNU ld. + +POSIX threads are the default. The optional DCE thread library is not +supported, so @option{--enable-threads=dce} does not work. + +@html +
+@end html +@heading @anchor{x-x-linux-gnu}*-*-linux-gnu + +Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present +in glibc 2.2.5 and later. More information is available in the +libstdc++-v3 documentation. + +@html +
+@end html +@heading @anchor{ix86-x-linux}i?86-*-linux* + +As of GCC 3.3, binutils 2.13.1 or later is required for this platform. +See @uref{http://gcc.gnu.org/PR10877,,bug 10877} for more information. + +If you receive Signal 11 errors when building on GNU/Linux, then it is +possible you have a hardware problem. Further information on this can be +found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}. + +@html +
+@end html +@heading @anchor{ix86-x-solaris210}i?86-*-solaris2.10 +Use this for Solaris 10 or later on x86 and x86-64 systems. This +configuration is supported by GCC 4.0 and later versions only. + +It is recommended that you configure GCC to use the GNU assembler in +@file{/usr/sfw/bin/gas} but the Sun linker, using the options +@option{--with-gnu-as --with-as=/usr/sfw/bin/gas --without-gnu-ld +--with-ld=/usr/ccs/bin/ld}. + +@html +
+@end html +@heading @anchor{ia64-x-linux}ia64-*-linux +IA-64 processor (also known as IPF, or Itanium Processor Family) +running GNU/Linux. + +If you are using the installed system libunwind library with +@option{--with-system-libunwind}, then you must use libunwind 0.98 or +later. + +None of the following versions of GCC has an ABI that is compatible +with any of the other versions in this list, with the exception that +Red Hat 2.96 and Trillian 000171 are compatible with each other: +3.1, 3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717. +This primarily affects C++ programs and programs that create shared libraries. +GCC 3.1 or later is recommended for compiling linux, the kernel. +As of version 3.1 GCC is believed to be fully ABI compliant, and hence no +more major ABI changes are expected. + +@html +
+@end html +@heading @anchor{ia64-x-hpux}ia64-*-hpux* +Building GCC on this target requires the GNU Assembler. The bundled HP +assembler will not work. To prevent GCC from using the wrong assembler, +the option @option{--with-gnu-as} may be necessary. + +The GCC libunwind library has not been ported to HPUX@. This means that for +GCC versions 3.2.3 and earlier, @option{--enable-libunwind-exceptions} +is required to build GCC@. For GCC 3.3 and later, this is the default. +For gcc 3.4.3 and later, @option{--enable-libunwind-exceptions} is +removed and the system libunwind library will always be used. + +@html +
+ +@end html +@heading @anchor{x-ibm-aix}*-ibm-aix* +Support for AIX version 3 and older was discontinued in GCC 3.4. + +``out of memory'' bootstrap failures may indicate a problem with +process resource limits (ulimit). Hard limits are configured in the +@file{/etc/security/limits} system configuration file. + +To speed up the configuration phases of bootstrapping and installing GCC, +one may use GNU Bash instead of AIX @command{/bin/sh}, e.g., + +@smallexample + % CONFIG_SHELL=/opt/freeware/bin/bash + % export CONFIG_SHELL +@end smallexample + +and then proceed as described in @uref{build.html,,the build +instructions}, where we strongly recommend specifying an absolute path +to invoke @var{srcdir}/configure. + +Because GCC on AIX is built as a 32-bit executable by default, +(although it can generate 64-bit programs) the GMP and MPFR libraries +required by gfortran must be 32-bit libraries. Building GMP and MPFR +as static archive libraries works better than shared libraries. + +Errors involving @code{alloca} when building GCC generally are due +to an incorrect definition of @code{CC} in the Makefile or mixing files +compiled with the native C compiler and GCC@. During the stage1 phase of +the build, the native AIX compiler @strong{must} be invoked as @command{cc} +(not @command{xlc}). Once @command{configure} has been informed of +@command{xlc}, one needs to use @samp{make distclean} to remove the +configure cache files and ensure that @env{CC} environment variable +does not provide a definition that will confuse @command{configure}. +If this error occurs during stage2 or later, then the problem most likely +is the version of Make (see above). + +The native @command{as} and @command{ld} are recommended for bootstrapping +on AIX 4 and required for bootstrapping on AIX 5L@. The GNU Assembler +reports that it supports WEAK symbols on AIX 4, which causes GCC to try to +utilize weak symbol functionality although it is not supported. The GNU +Assembler and Linker do not support AIX 5L sufficiently to bootstrap GCC@. +The native AIX tools do interoperate with GCC@. + +Building @file{libstdc++.a} requires a fix for an AIX Assembler bug +APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1). It also requires a +fix for another AIX Assembler bug and a co-dependent AIX Archiver fix +referenced as APAR IY53606 (AIX 5.2) or a APAR IY54774 (AIX 5.1) + +@samp{libstdc++} in GCC 3.4 increments the major version number of the +shared object and GCC installation places the @file{libstdc++.a} +shared library in a common location which will overwrite the and GCC +3.3 version of the shared library. Applications either need to be +re-linked against the new shared library or the GCC 3.1 and GCC 3.3 +versions of the @samp{libstdc++} shared object needs to be available +to the AIX runtime loader. The GCC 3.1 @samp{libstdc++.so.4}, if +present, and GCC 3.3 @samp{libstdc++.so.5} shared objects can be +installed for runtime dynamic loading using the following steps to set +the @samp{F_LOADONLY} flag in the shared object for @emph{each} +multilib @file{libstdc++.a} installed: + +Extract the shared objects from the currently installed +@file{libstdc++.a} archive: +@smallexample + % ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5 +@end smallexample + +Enable the @samp{F_LOADONLY} flag so that the shared object will be +available for runtime dynamic loading, but not linking: +@smallexample + % strip -e libstdc++.so.4 libstdc++.so.5 +@end smallexample + +Archive the runtime-only shared object in the GCC 3.4 +@file{libstdc++.a} archive: +@smallexample + % ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5 +@end smallexample + +Linking executables and shared libraries may produce warnings of +duplicate symbols. The assembly files generated by GCC for AIX always +have included multiple symbol definitions for certain global variable +and function declarations in the original program. The warnings should +not prevent the linker from producing a correct library or runnable +executable. + +AIX 4.3 utilizes a ``large format'' archive to support both 32-bit and +64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1 +to parse archive libraries did not handle the new format correctly. +These routines are used by GCC and result in error messages during +linking such as ``not a COFF file''. The version of the routines shipped +with AIX 4.3.1 should work for a 32-bit environment. The @option{-g} +option of the archive command may be used to create archives of 32-bit +objects using the original ``small format''. A correct version of the +routines is shipped with AIX 4.3.2 and above. + +Some versions of the AIX binder (linker) can fail with a relocation +overflow severe error when the @option{-bbigtoc} option is used to link +GCC-produced object files into an executable that overflows the TOC@. A fix +for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is +available from IBM Customer Support and from its +@uref{http://techsupport.services.ibm.com/,,techsupport.services.ibm.com} +website as PTF U455193. + +The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core +with a segmentation fault when invoked by any version of GCC@. A fix for +APAR IX87327 is available from IBM Customer Support and from its +@uref{http://techsupport.services.ibm.com/,,techsupport.services.ibm.com} +website as PTF U461879. This fix is incorporated in AIX 4.3.3 and above. + +The initial assembler shipped with AIX 4.3.0 generates incorrect object +files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS +TO ASSEMBLE/BIND) is available from IBM Customer Support and from its +@uref{http://techsupport.services.ibm.com/,,techsupport.services.ibm.com} +website as PTF U453956. This fix is incorporated in AIX 4.3.1 and above. + +AIX provides National Language Support (NLS)@. Compilers and assemblers +use NLS to support locale-specific representations of various data +formats including floating-point numbers (e.g., @samp{.} vs @samp{,} for +separating decimal fractions). There have been problems reported where +GCC does not produce the same floating-point formats that the assembler +expects. If one encounters this problem, set the @env{LANG} +environment variable to @samp{C} or @samp{En_US}. + +By default, GCC for AIX 4.1 and above produces code that can be used on +both Power or PowerPC processors. + +A default can be specified with the @option{-mcpu=@var{cpu_type}} +switch and using the configure option @option{--with-cpu-@var{cpu_type}}. + +@html +
+@end html +@heading @anchor{iq2000-x-elf}iq2000-*-elf +Vitesse IQ2000 processors. These are used in embedded +applications. There are no standard Unix configurations. + +@html +
+@end html +@heading @anchor{m32c-x-elf}m32c-*-elf +Renesas M32C processor. +This configuration is intended for embedded systems. + +@html +
+@end html +@heading @anchor{m32r-x-elf}m32r-*-elf +Renesas M32R processor. +This configuration is intended for embedded systems. + +@html +
+@end html +@heading @anchor{m6811-elf}m6811-elf +Motorola 68HC11 family micro controllers. These are used in embedded +applications. There are no standard Unix configurations. + +@html +
+@end html +@heading @anchor{m6812-elf}m6812-elf +Motorola 68HC12 family micro controllers. These are used in embedded +applications. There are no standard Unix configurations. + +@html +
+@end html +@heading @anchor{m68k-x-x}m68k-*-* +By default, @samp{m68k-*-aout}, @samp{m68k-*-coff*}, +@samp{m68k-*-elf*}, @samp{m68k-*-rtems}, @samp{m68k-*-uclinux} and +@samp{m68k-*-linux} +build libraries for both M680x0 and ColdFire processors. If you only +need the M680x0 libraries, you can omit the ColdFire ones by passing +@option{--with-arch=m68k} to @command{configure}. Alternatively, you +can omit the M680x0 libraries by passing @option{--with-arch=cf} to +@command{configure}. These targets default to 5206 or 5475 code as +appropriate for the target system when +configured with @option{--with-arch=cf} and 68020 code otherwise. + +The @samp{m68k-*-netbsd} and +@samp{m68k-*-openbsd} targets also support the @option{--with-arch} +option. They will generate ColdFire CFV4e code when configured with +@option{--with-arch=cf} and 68020 code otherwise. + +You can override the default processors listed above by configuring +with @option{--with-cpu=@var{target}}. This @var{target} can either +be a @option{-mcpu} argument or one of the following values: +@samp{m68000}, @samp{m68010}, @samp{m68020}, @samp{m68030}, +@samp{m68040}, @samp{m68060}, @samp{m68020-40} and @samp{m68020-60}. + +@html +
+@end html +@heading @anchor{m68k-x-uclinux}m68k-*-uclinux +GCC 4.3 changed the uClinux configuration so that it uses the +@samp{m68k-linux-gnu} ABI rather than the @samp{m68k-elf} ABI. +It also added improved support for C++ and flat shared libraries, +both of which were ABI changes. However, you can still use the +original ABI by configuring for @samp{m68k-uclinuxoldabi} or +@samp{m68k-@var{vendor}-uclinuxoldabi}. + +@html +
+@end html +@heading @anchor{mips-x-x}mips-*-* +If on a MIPS system you get an error message saying ``does not have gp +sections for all it's [sic] sectons [sic]'', don't worry about it. This +happens whenever you use GAS with the MIPS linker, but there is not +really anything wrong, and it is okay to use the output file. You can +stop such warnings by installing the GNU linker. + +It would be nice to extend GAS to produce the gp tables, but they are +optional, and there should not be a warning about their absence. + +The libstdc++ atomic locking routines for MIPS targets requires MIPS II +and later. A patch went in just after the GCC 3.3 release to +make @samp{mips*-*-*} use the generic implementation instead. You can also +configure for @samp{mipsel-elf} as a workaround. The +@samp{mips*-*-linux*} target continues to use the MIPS II routines. More +work on this is expected in future releases. + +@c If you make --with-llsc the default for another target, please also +@c update the description of the --with-llsc option. + +The built-in @code{__sync_*} functions are available on MIPS II and +later systems and others that support the @samp{ll}, @samp{sc} and +@samp{sync} instructions. This can be overridden by passing +@option{--with-llsc} or @option{--without-llsc} when configuring GCC. +Since the Linux kernel emulates these instructions if they are +missing, the default for @samp{mips*-*-linux*} targets is +@option{--with-llsc}. The @option{--with-llsc} and +@option{--without-llsc} configure options may be overridden at compile +time by passing the @option{-mllsc} or @option{-mno-llsc} options to +the compiler. + +MIPS systems check for division by zero (unless +@option{-mno-check-zero-division} is passed to the compiler) by +generating either a conditional trap or a break instruction. Using +trap results in smaller code, but is only supported on MIPS II and +later. Also, some versions of the Linux kernel have a bug that +prevents trap from generating the proper signal (@code{SIGFPE}). To enable +the use of break, use the @option{--with-divide=breaks} +@command{configure} option when configuring GCC@. The default is to +use traps on systems that support them. + +Cross-compilers for the MIPS as target using the MIPS assembler +currently do not work, because the auxiliary programs +@file{mips-tdump.c} and @file{mips-tfile.c} can't be compiled on +anything but a MIPS@. It does work to cross compile for a MIPS +if you use the GNU assembler and linker. + +The assembler from GNU binutils 2.17 and earlier has a bug in the way +it sorts relocations for REL targets (o32, o64, EABI). This can cause +bad code to be generated for simple C++ programs. Also the linker +from GNU binutils versions prior to 2.17 has a bug which causes the +runtime linker stubs in very large programs, like @file{libgcj.so}, to +be incorrectly generated. GNU Binutils 2.18 and later (and snapshots +made after Nov. 9, 2006) should be free from both of these problems. + +@html +
+@end html +@heading @anchor{mips-sgi-irix5}mips-sgi-irix5 + +In order to compile GCC on an SGI running IRIX 5, the @samp{compiler_dev.hdr} +subsystem must be installed from the IDO CD-ROM supplied by SGI@. +It is also available for download from +@uref{ftp://ftp.sgi.com/sgi/IRIX5.3/iris-development-option-5.3.tardist}. + +If you use the MIPS C compiler to bootstrap, it may be necessary +to increase its table size for switch statements with the +@option{-Wf,-XNg1500} option. If you use the @option{-O2} +optimization option, you also need to use @option{-Olimit 3000}. + +To enable debugging under IRIX 5, you must use GNU binutils 2.15 or +later, and use the @option{--with-gnu-ld} @command{configure} option +when configuring GCC@. You need to use GNU @command{ar} and @command{nm}, +also distributed with GNU binutils. + +Some users have reported that @command{/bin/sh} will hang during bootstrap. +This problem can be avoided by running the commands: + +@smallexample + % CONFIG_SHELL=/bin/ksh + % export CONFIG_SHELL +@end smallexample + +before starting the build. + +@html +
+@end html +@heading @anchor{mips-sgi-irix6}mips-sgi-irix6 + +If you are using SGI's MIPSpro @command{cc} as your bootstrap compiler, you must +ensure that the N32 ABI is in use. To test this, compile a simple C +file with @command{cc} and then run @command{file} on the +resulting object file. The output should look like: + +@smallexample +test.o: ELF N32 MSB @dots{} +@end smallexample + +If you see: + +@smallexample +test.o: ELF 32-bit MSB @dots{} +@end smallexample + +or + +@smallexample +test.o: ELF 64-bit MSB @dots{} +@end smallexample + +then your version of @command{cc} uses the O32 or N64 ABI by default. You +should set the environment variable @env{CC} to @samp{cc -n32} +before configuring GCC@. + +If you want the resulting @command{gcc} to run on old 32-bit systems +with the MIPS R4400 CPU, you need to ensure that only code for the @samp{mips3} +instruction set architecture (ISA) is generated. While GCC 3.x does +this correctly, both GCC 2.95 and SGI's MIPSpro @command{cc} may change +the ISA depending on the machine where GCC is built. Using one of them +as the bootstrap compiler may result in @samp{mips4} code, which won't run at +all on @samp{mips3}-only systems. For the test program above, you should see: + +@smallexample +test.o: ELF N32 MSB mips-3 @dots{} +@end smallexample + +If you get: + +@smallexample +test.o: ELF N32 MSB mips-4 @dots{} +@end smallexample + +instead, you should set the environment variable @env{CC} to @samp{cc +-n32 -mips3} or @samp{gcc -mips3} respectively before configuring GCC@. + +MIPSpro C 7.4 may cause bootstrap failures, due to a bug when inlining +@code{memcmp}. Either add @code{-U__INLINE_INTRINSICS} to the @env{CC} +environment variable as a workaround or upgrade to MIPSpro C 7.4.1m. + +GCC on IRIX 6 is usually built to support the N32, O32 and N64 ABIs. If +you build GCC on a system that doesn't have the N64 libraries installed +or cannot run 64-bit binaries, +you need to configure with @option{--disable-multilib} so GCC doesn't +try to use them. This will disable building the O32 libraries, too. +Look for @file{/usr/lib64/libc.so.1} to see if you +have the 64-bit libraries installed. + +To enable debugging for the O32 ABI, you must use GNU @command{as} from +GNU binutils 2.15 or later. You may also use GNU @command{ld}, but +this is not required and currently causes some problems with Ada. + +The @option{--enable-libgcj} +option is disabled by default: IRIX 6 uses a very low default limit +(20480) for the command line length. Although @command{libtool} contains a +workaround for this problem, at least the N64 @samp{libgcj} is known not +to build despite this, running into an internal error of the native +@command{ld}. A sure fix is to increase this limit (@samp{ncargs}) to +its maximum of 262144 bytes. If you have root access, you can use the +@command{systune} command to do this. + +@code{wchar_t} support in @samp{libstdc++} is not available for old +IRIX 6.5.x releases, @math{x < 19}. The problem cannot be autodetected +and in order to build GCC for such targets you need to configure with +@option{--disable-wchar_t}. + +See @uref{http://freeware.sgi.com/} for more +information about using GCC on IRIX platforms. + +@html +
+@end html +@heading @anchor{powerpc-x-x}powerpc-*-* + +You can specify a default version for the @option{-mcpu=@var{cpu_type}} +switch by using the configure option @option{--with-cpu-@var{cpu_type}}. + +You will need +@uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.15} +or newer for a working GCC@. + +@html +
+@end html +@heading @anchor{powerpc-x-darwin}powerpc-*-darwin* +PowerPC running Darwin (Mac OS X kernel). + +Pre-installed versions of Mac OS X may not include any developer tools, +meaning that you will not be able to build GCC from source. Tool +binaries are available at +@uref{http://developer.apple.com/darwin/projects/compiler/} (free +registration required). + +This version of GCC requires at least cctools-590.36. The +cctools-590.36 package referenced from +@uref{http://gcc.gnu.org/ml/gcc/2006-03/msg00507.html} will not work +on systems older than 10.3.9 (aka darwin7.9.0). + +@html +
+@end html +@heading @anchor{powerpc-x-elf}powerpc-*-elf +PowerPC system in big endian mode, running System V.4. + +@html +
+@end html +@heading @anchor{powerpc-x-linux-gnu}powerpc*-*-linux-gnu* + +PowerPC system in big endian mode running Linux. + +@html +
+@end html +@heading @anchor{powerpc-x-netbsd}powerpc-*-netbsd* +PowerPC system in big endian mode running NetBSD@. + +@html +
+@end html +@heading @anchor{powerpc-x-eabisim}powerpc-*-eabisim +Embedded PowerPC system in big endian mode for use in running under the +PSIM simulator. + +@html +
+@end html +@heading @anchor{powerpc-x-eabi}powerpc-*-eabi +Embedded PowerPC system in big endian mode. + +@html +
+@end html +@heading @anchor{powerpcle-x-elf}powerpcle-*-elf +PowerPC system in little endian mode, running System V.4. + +@html +
+@end html +@heading @anchor{powerpcle-x-eabisim}powerpcle-*-eabisim +Embedded PowerPC system in little endian mode for use in running under +the PSIM simulator. + +@html +
+@end html +@heading @anchor{powerpcle-x-eabi}powerpcle-*-eabi +Embedded PowerPC system in little endian mode. + +@html +
+@end html +@heading @anchor{s390-x-linux}s390-*-linux* +S/390 system running GNU/Linux for S/390@. + +@html +
+@end html +@heading @anchor{s390x-x-linux}s390x-*-linux* +zSeries system (64-bit) running GNU/Linux for zSeries@. + +@html +
+@end html +@heading @anchor{s390x-ibm-tpf}s390x-ibm-tpf* +zSeries system (64-bit) running TPF@. This platform is +supported as cross-compilation target only. + +@html +
+@end html +@c Please use Solaris 2 to refer to all release of Solaris, starting +@c with 2.0 until 2.6, 7, 8, etc. Solaris 1 was a marketing name for +@c SunOS 4 releases which we don't use to avoid confusion. Solaris +@c alone is too unspecific and must be avoided. +@heading @anchor{x-x-solaris2}*-*-solaris2* + +Sun does not ship a C compiler with Solaris 2. To bootstrap and install +GCC you first have to install a pre-built compiler, see the +@uref{binaries.html,,binaries page} for details. + +The Solaris 2 @command{/bin/sh} will often fail to configure +@file{libstdc++-v3}, @file{boehm-gc} or @file{libjava}. We therefore +recommend using the following initial sequence of commands + +@smallexample + % CONFIG_SHELL=/bin/ksh + % export CONFIG_SHELL +@end smallexample + +and proceed as described in @uref{configure.html,,the configure instructions}. +In addition we strongly recommend specifying an absolute path to invoke +@var{srcdir}/configure. + +Solaris 2 comes with a number of optional OS packages. Some of these +are needed to use GCC fully, namely @code{SUNWarc}, +@code{SUNWbtool}, @code{SUNWesu}, @code{SUNWhea}, @code{SUNWlibm}, +@code{SUNWsprot}, and @code{SUNWtoo}. If you did not install all +optional packages when installing Solaris 2, you will need to verify that +the packages that GCC needs are installed. + +To check whether an optional package is installed, use +the @command{pkginfo} command. To add an optional package, use the +@command{pkgadd} command. For further details, see the Solaris 2 +documentation. + +Trying to use the linker and other tools in +@file{/usr/ucb} to install GCC has been observed to cause trouble. +For example, the linker may hang indefinitely. The fix is to remove +@file{/usr/ucb} from your @env{PATH}. + +The build process works more smoothly with the legacy Sun tools so, if you +have @file{/usr/xpg4/bin} in your @env{PATH}, we recommend that you place +@file{/usr/bin} before @file{/usr/xpg4/bin} for the duration of the build. + +We recommend the use of GNU binutils 2.14 or later, or the vendor tools +(Sun @command{as}, Sun @command{ld}). Note that your mileage may vary +if you use a combination of the GNU tools and the Sun tools: while the +combination GNU @command{as} + Sun @command{ld} should reasonably work, +the reverse combination Sun @command{as} + GNU @command{ld} is known to +cause memory corruption at runtime in some cases for C++ programs. + +The stock GNU binutils 2.15 release is broken on this platform because of a +single bug. It has been fixed on the 2.15 branch in the CVS repository. +You can obtain a working version by checking out the binutils-2_15-branch +from the CVS repository or applying the patch +@uref{http://sourceware.org/ml/binutils-cvs/2004-09/msg00036.html} to the +release. + +We recommend the use of GNU binutils 2.16 or later in conjunction with GCC +4.x, or the vendor tools (Sun @command{as}, Sun @command{ld}). However, +for Solaris 10 and above, an additional patch is required in order for the +GNU linker to be able to cope with a new flavor of shared libraries. You +can obtain a working version by checking out the binutils-2_16-branch from +the CVS repository or applying the patch +@uref{http://sourceware.org/ml/binutils-cvs/2005-07/msg00122.html} to the +release. + +Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or +newer: @command{g++} will complain that types are missing. These headers +assume that omitting the type means @code{int}; this assumption worked for +C89 but is wrong for C++, and is now wrong for C99 also. + +@command{g++} accepts such (invalid) constructs with the option +@option{-fpermissive}; it will assume that any missing type is @code{int} +(as defined by C89). + +There are patches for Solaris 7 (108376-21 or newer for SPARC, +108377-20 for Intel), and Solaris 8 (108652-24 or newer for SPARC, +108653-22 for Intel) that fix this bug. + +Sun bug 4927647 sometimes causes random spurious testsuite failures +related to missing diagnostic output. This bug doesn't affect GCC +itself, rather it is a kernel bug triggered by the @command{expect} +program which is used only by the GCC testsuite driver. When the bug +causes the @command{expect} program to miss anticipated output, extra +testsuite failures appear. + +There are patches for Solaris 8 (117350-12 or newer for SPARC, +117351-12 or newer for Intel) and Solaris 9 (117171-11 or newer for +SPARC, 117172-11 or newer for Intel) that address this problem. + +@html +
+@end html +@heading @anchor{sparc-sun-solaris2}sparc-sun-solaris2* + +When GCC is configured to use binutils 2.14 or later the binaries +produced are smaller than the ones produced using Sun's native tools; +this difference is quite significant for binaries containing debugging +information. + +Starting with Solaris 7, the operating system is capable of executing +64-bit SPARC V9 binaries. GCC 3.1 and later properly supports +this; the @option{-m64} option enables 64-bit code generation. +However, if all you want is code tuned for the UltraSPARC CPU, you +should try the @option{-mtune=ultrasparc} option instead, which produces +code that, unlike full 64-bit code, can still run on non-UltraSPARC +machines. + +When configuring on a Solaris 7 or later system that is running a kernel +that supports only 32-bit binaries, one must configure with +@option{--disable-multilib}, since we will not be able to build the +64-bit target libraries. + +GCC 3.3 and GCC 3.4 trigger code generation bugs in earlier versions of +the GNU compiler (especially GCC 3.0.x versions), which lead to the +miscompilation of the stage1 compiler and the subsequent failure of the +bootstrap process. A workaround is to use GCC 3.2.3 as an intermediary +stage, i.e.@: to bootstrap that compiler with the base compiler and then +use it to bootstrap the final compiler. + +GCC 3.4 triggers a code generation bug in versions 5.4 (Sun ONE Studio 7) +and 5.5 (Sun ONE Studio 8) of the Sun compiler, which causes a bootstrap +failure in form of a miscompilation of the stage1 compiler by the Sun +compiler. This is Sun bug 4974440. This is fixed with patch 112760-07. + +GCC 3.4 changed the default debugging format from STABS to DWARF-2 for +32-bit code on Solaris 7 and later. If you use the Sun assembler, this +change apparently runs afoul of Sun bug 4910101 (which is referenced as +a x86-only problem by Sun, probably because they do not use DWARF-2). +A symptom of the problem is that you cannot compile C++ programs like +@command{groff} 1.19.1 without getting messages similar to the following: + +@smallexample +ld: warning: relocation error: R_SPARC_UA32: @dots{} + external symbolic relocation against non-allocatable section + .debug_info cannot be processed at runtime: relocation ignored. +@end smallexample + +To work around this problem, compile with @option{-gstabs+} instead of +plain @option{-g}. + +When configuring the GNU Multiple Precision Library (GMP) or the MPFR +library on a Solaris 7 or later system, the canonical target triplet +must be specified as the @command{build} parameter on the configure +line. This triplet can be obtained by invoking ./config.guess in +the toplevel source directory of GCC (and not that of GMP or MPFR). +For example on a Solaris 7 system: + +@smallexample + % ./configure --build=sparc-sun-solaris2.7 --prefix=xxx +@end smallexample + +@html +
+@end html +@heading @anchor{sparc-sun-solaris27}sparc-sun-solaris2.7 + +Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in +the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 +and later, including all EGCS releases. Sun formerly recommended +107058-01 for all Solaris 7 users, but around 1999-09-01 it started to +recommend it only for people who use Sun's compilers. + +Here are some workarounds to this problem: +@itemize @bullet +@item +Do not install Sun patch 107058-01 until after Sun releases a +complete patch for bug 4210064. This is the simplest course to take, +unless you must also use Sun's C compiler. Unfortunately 107058-01 +is preinstalled on some new Solaris 7-based hosts, so you may have to +back it out. + +@item +Copy the original, unpatched Solaris 7 +@command{/usr/ccs/bin/as} into +@command{/usr/local/libexec/gcc/sparc-sun-solaris2.7/3.4/as}, +adjusting the latter name to fit your local conventions and software +version numbers. + +@item +Install Sun patch 106950-03 (1999-05-25) or later. Nobody with +both 107058-01 and 106950-03 installed has reported the bug with GCC +and Sun's dynamic linker. This last course of action is riskiest, +for two reasons. First, you must install 106950 on all hosts that +run code generated by GCC; it doesn't suffice to install it only on +the hosts that run GCC itself. Second, Sun says that 106950-03 is +only a partial fix for bug 4210064, but Sun doesn't know whether the +partial fix is adequate for GCC@. Revision -08 or later should fix +the bug. The current (as of 2004-05-23) revision is -24, and is included in +the Solaris 7 Recommended Patch Cluster. +@end itemize + +GCC 3.3 triggers a bug in version 5.0 Alpha 03/27/98 of the Sun assembler, +which causes a bootstrap failure when linking the 64-bit shared version of +libgcc. A typical error message is: + +@smallexample +ld: fatal: relocation error: R_SPARC_32: file libgcc/sparcv9/_muldi3.o: + symbol : offset 0xffffffff7ec133e7 is non-aligned. +@end smallexample + +This bug has been fixed in the final 5.0 version of the assembler. + +A similar problem was reported for version Sun WorkShop 6 99/08/18 of the +Sun assembler, which causes a bootstrap failure with GCC 4.0.0: + +@smallexample +ld: fatal: relocation error: R_SPARC_DISP32: + file .libs/libstdc++.lax/libsupc++convenience.a/vterminate.o: + symbol : offset 0xfccd33ad is non-aligned +@end smallexample + +This bug has been fixed in more recent revisions of the assembler. + +@html +
+@end html +@heading @anchor{sparc-x-linux}sparc-*-linux* + +GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 +or newer on this platform. All earlier binutils and glibc +releases mishandled unaligned relocations on @code{sparc-*-*} targets. + + +@html +
+@end html +@heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2* + +When configuring the GNU Multiple Precision Library (GMP) or the +MPFR library, the canonical target triplet must be specified as +the @command{build} parameter on the configure line. For example +on a Solaris 7 system: + +@smallexample + % ./configure --build=sparc64-sun-solaris2.7 --prefix=xxx +@end smallexample + +The following compiler flags must be specified in the configure +step in order to bootstrap this target with the Sun compiler: + +@smallexample + % CC="cc -xarch=v9 -xildoff" @var{srcdir}/configure [@var{options}] [@var{target}] +@end smallexample + +@option{-xarch=v9} specifies the SPARC-V9 architecture to the Sun toolchain +and @option{-xildoff} turns off the incremental linker. + +@html +
+@end html +@heading @anchor{sparcv9-x-solaris2}sparcv9-*-solaris2* + +This is a synonym for sparc64-*-solaris2*. + +@html +
+@end html +@heading @anchor{x-x-vxworks}*-*-vxworks* +Support for VxWorks is in flux. At present GCC supports @emph{only} the +very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC@. +We welcome patches for other architectures supported by VxWorks 5.5. +Support for VxWorks AE would also be welcome; we believe this is merely +a matter of writing an appropriate ``configlette'' (see below). We are +not interested in supporting older, a.out or COFF-based, versions of +VxWorks in GCC 3. + +VxWorks comes with an older version of GCC installed in +@file{@var{$WIND_BASE}/host}; we recommend you do not overwrite it. +Choose an installation @var{prefix} entirely outside @var{$WIND_BASE}. +Before running @command{configure}, create the directories @file{@var{prefix}} +and @file{@var{prefix}/bin}. Link or copy the appropriate assembler, +linker, etc.@: into @file{@var{prefix}/bin}, and set your @var{PATH} to +include that directory while running both @command{configure} and +@command{make}. + +You must give @command{configure} the +@option{--with-headers=@var{$WIND_BASE}/target/h} switch so that it can +find the VxWorks system headers. Since VxWorks is a cross compilation +target only, you must also specify @option{--target=@var{target}}. +@command{configure} will attempt to create the directory +@file{@var{prefix}/@var{target}/sys-include} and copy files into it; +make sure the user running @command{configure} has sufficient privilege +to do so. + +GCC's exception handling runtime requires a special ``configlette'' +module, @file{contrib/gthr_supp_vxw_5x.c}. Follow the instructions in +that file to add the module to your kernel build. (Future versions of +VxWorks will incorporate this module.) + +@html +
+@end html +@heading @anchor{x86-64-x-x}x86_64-*-*, amd64-*-* + +GCC supports the x86-64 architecture implemented by the AMD64 processor +(amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD@. +On GNU/Linux the default is a bi-arch compiler which is able to generate +both 64-bit x86-64 and 32-bit x86 code (via the @option{-m32} switch). + +@html +
+@end html +@heading @anchor{xtensa-x-elf}xtensa*-*-elf + +This target is intended for embedded Xtensa systems using the +@samp{newlib} C library. It uses ELF but does not support shared +objects. Designed-defined instructions specified via the +Tensilica Instruction Extension (TIE) language are only supported +through inline assembly. + +The Xtensa configuration information must be specified prior to +building GCC@. The @file{include/xtensa-config.h} header +file contains the configuration information. If you created your +own Xtensa configuration with the Xtensa Processor Generator, the +downloaded files include a customized copy of this header file, +which you can use to replace the default header file. + +@html +
+@end html +@heading @anchor{xtensa-x-linux}xtensa*-*-linux* + +This target is for Xtensa systems running GNU/Linux. It supports ELF +shared objects and the GNU C library (glibc). It also generates +position-independent code (PIC) regardless of whether the +@option{-fpic} or @option{-fPIC} options are used. In other +respects, this target is the same as the +@uref{#xtensa*-*-elf,,@samp{xtensa*-*-elf}} target. + +@html +
+@end html +@heading @anchor{windows}Microsoft Windows + +@subheading Intel 16-bit versions +The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not +supported. + +However, the 32-bit port has limited support for Microsoft +Windows 3.11 in the Win32s environment, as a target only. See below. + +@subheading Intel 32-bit versions + +The 32-bit versions of Windows, including Windows 95, Windows NT, Windows +XP, and Windows Vista, are supported by several different target +platforms. These targets differ in which Windows subsystem they target +and which C libraries are used. + +@itemize +@item Cygwin @uref{#x-x-cygwin,,*-*-cygwin}: Cygwin provides a user-space +Linux API emulation layer in the Win32 subsystem. +@item Interix @uref{#x-x-interix,,*-*-interix}: The Interix subsystem +provides native support for POSIX. +@item MinGW @uref{#x-x-mingw,,*-*-mingw}: MinGW is a native GCC port for +the Win32 subsystem that provides a subset of POSIX. +@item MKS i386-pc-mks: NuTCracker from MKS. See +@uref{http://www.mkssoftware.com/} for more information. +@end itemize + +@subheading Intel 64-bit versions + +GCC contains support for x86-64 using the mingw-w64 +runtime library, available from @uref{http://mingw-w64.sourceforge.net/}. +This library should be used with the target triple x86_64-pc-mingw32. + +Presently Windows for Itanium is not supported. + +@subheading Windows CE + +Windows CE is supported as a target only on ARM (arm-wince-pe), Hitachi +SuperH (sh-wince-pe), and MIPS (mips-wince-pe). + +@subheading Other Windows Platforms + +GCC no longer supports Windows NT on the Alpha or PowerPC. + +GCC no longer supports the Windows POSIX subsystem. However, it does +support the Interix subsystem. See above. + +Old target names including *-*-winnt and *-*-windowsnt are no longer used. + +PW32 (i386-pc-pw32) support was never completed, and the project seems to +be inactive. See @uref{http://pw32.sourceforge.net/} for more information. + +UWIN support has been removed due to a lack of maintenance. + +@html +
+@end html +@heading @anchor{x-x-cygwin}*-*-cygwin + +Ports of GCC are included with the +@uref{http://www.cygwin.com/,,Cygwin environment}. + +GCC will build under Cygwin without modification; it does not build +with Microsoft's C++ compiler and there are no plans to make it do so. + +Cygwin can be compiled with i?86-pc-cygwin. + +@html +
+@end html +@heading @anchor{x-x-interix}*-*-interix + +The Interix target is used by OpenNT, Interix, Services For UNIX (SFU), +and Subsystem for UNIX-based Applications (SUA). Applications compiled +with this target run in the Interix subsystem, which is separate from +the Win32 subsystem. This target was last known to work in GCC 3.3. + +For more information, see @uref{http://www.interix.com/}. + +@html +
+@end html +@heading @anchor{x-x-mingw32}*-*-mingw32 + +GCC will build with and support only MinGW runtime 3.12 and later. +Earlier versions of headers are incompatible with the new default semantics +of @code{extern inline} in @code{-std=c99} and @code{-std=gnu99} modes. + +@html +
+@end html +@heading @anchor{os2}OS/2 + +GCC does not currently support OS/2. However, Andrew Zabolotny has been +working on a generic OS/2 port with pgcc. The current code can be found +at @uref{http://www.goof.com/pcg/os2/,,http://www.goof.com/pcg/os2/}. + +@html +
+@end html +@heading @anchor{older}Older systems + +GCC contains support files for many older (1980s and early +1990s) Unix variants. For the most part, support for these systems +has not been deliberately removed, but it has not been maintained for +several years and may suffer from bitrot. + +Starting with GCC 3.1, each release has a list of ``obsoleted'' systems. +Support for these systems is still present in that release, but +@command{configure} will fail unless the @option{--enable-obsolete} +option is given. Unless a maintainer steps forward, support for these +systems will be removed from the next release of GCC@. + +Support for old systems as hosts for GCC can cause problems if the +workarounds for compiler, library and operating system bugs affect the +cleanliness or maintainability of the rest of GCC@. In some cases, to +bring GCC up on such a system, if still possible with current GCC, may +require first installing an old version of GCC which did work on that +system, and using it to compile a more recent GCC, to avoid bugs in the +vendor compiler. Old releases of GCC 1 and GCC 2 are available in the +@file{old-releases} directory on the @uref{../mirrors.html,,GCC mirror +sites}. Header bugs may generally be avoided using +@command{fixincludes}, but bugs or deficiencies in libraries and the +operating system may still cause problems. + +Support for older systems as targets for cross-compilation is less +problematic than support for them as hosts for GCC; if an enthusiast +wishes to make such a target work again (including resurrecting any of +the targets that never worked with GCC 2, starting from the last +version before they were removed), patches +@uref{../contribute.html,,following the usual requirements} would be +likely to be accepted, since they should not affect the support for more +modern targets. + +For some systems, old versions of GNU binutils may also be useful, +and are available from @file{pub/binutils/old-releases} on +@uref{http://sourceware.org/mirrors.html,,sourceware.org mirror sites}. + +Some of the information on specific systems above relates to +such older systems, but much of the information +about GCC on such systems (which may no longer be applicable to +current GCC) is to be found in the GCC texinfo manual. + +@html +
+@end html +@heading @anchor{elf}all ELF targets (SVR4, Solaris 2, etc.) + +C++ support is significantly better on ELF targets if you use the +@uref{./configure.html#with-gnu-ld,,GNU linker}; duplicate copies of +inlines, vtables and template instantiations will be discarded +automatically. + + +@html +
+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***Old documentation****************************************************** +@ifset oldhtml +@include install-old.texi +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c ***GFDL******************************************************************** +@ifset gfdlhtml +@include fdl.texi +@html +


+

+@end html +@ifhtml +@uref{./index.html,,Return to the GCC Installation page} +@end ifhtml +@end ifset + +@c *************************************************************************** +@c Part 6 The End of the Document +@ifinfo +@comment node-name, next, previous, up +@node Concept Index, , GNU Free Documentation License, Top +@end ifinfo + +@ifinfo +@unnumbered Concept Index + +@printindex cp + +@contents +@end ifinfo +@bye diff -Naur gcc-4.4.2.orig/gcc/doc/invoke.texi gcc-4.4.2-rtems4.10-20091015/gcc/doc/invoke.texi --- gcc-4.4.2.orig/gcc/doc/invoke.texi 2009-09-18 23:53:23.000000000 +0200 +++ gcc-4.4.2-rtems4.10-20091015/gcc/doc/invoke.texi 2009-10-15 18:36:00.000000000 +0200 @@ -606,6 +606,10 @@ -mno-sched-prefer-non-control-spec-insns @gol -mno-sched-count-spec-in-critical-path} +@emph{LM32 Options} +@gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol +-msign-extend-enabled -muser-enabled} + @emph{M32R/D Options} @gccoptlist{-m32r2 -m32rx -m32r @gol -mdebug @gol @@ -8853,6 +8857,7 @@ * i386 and x86-64 Options:: * i386 and x86-64 Windows Options:: * IA-64 Options:: +* LM32 Options:: * M32C Options:: * M32R/D Options:: * M680x0 Options:: @@ -11837,6 +11842,35 @@ @end table +@node LM32 Options +@subsection LM32 Options +@cindex LM32 options + +These @option{-m} options are defined for the Lattice Mico32 architecture: + +@table @gcctabopt +@item -mbarrel-shift-enabled +@opindex mbarrel-shift-enabled +Enable barrel-shift instructions. + +@item -mdivide-enabled +@opindex mdivide-enabled +Enable divide and modulus instructions. + +@item -mmultiply-enabled +@opindex multiply-enabled +Enable multiply instructions. + +@item -msign-extend-enabled +@opindex msign-extend-enabled +Enable sign extend instructions. + +@item -muser-enabled +@opindex muser-enabled +Enable user-defined instructions. + +@end table + @node M32R/D Options @subsection M32R/D Options @cindex M32R/D options diff -Naur gcc-4.4.2.orig/gcc/doc/invoke.texi.orig gcc-4.4.2-rtems4.10-20091015/gcc/doc/invoke.texi.orig --- gcc-4.4.2.orig/gcc/doc/invoke.texi.orig 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.4.2-rtems4.10-20091015/gcc/doc/invoke.texi.orig 2009-10-15 18:36:00.000000000 +0200 @@ -0,0 +1,16649 @@ +@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +@c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +@c Free Software Foundation, Inc. +@c This is part of the GCC manual. +@c For copying conditions, see the file gcc.texi. + +@ignore +@c man begin INCLUDE +@include gcc-vers.texi +@c man end + +@c man begin COPYRIGHT +Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'' and ``Funding +Free Software'', the Front-Cover texts being (a) (see below), and with +the Back-Cover Texts being (b) (see below). A copy of the license is +included in the gfdl(7) man page. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@c man end +@c Set file name and title for the man page. +@setfilename gcc +@settitle GNU project C and C++ compiler +@c man begin SYNOPSIS +gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}] + [@option{-g}] [@option{-pg}] [@option{-O}@var{level}] + [@option{-W}@var{warn}@dots{}] [@option{-pedantic}] + [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] + [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] + [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}] + [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{} + +Only the most useful options are listed here; see below for the +remainder. @samp{g++} accepts mostly the same options as @samp{gcc}. +@c man end +@c man begin SEEALSO +gpl(7), gfdl(7), fsf-funding(7), +cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) +and the Info entries for @file{gcc}, @file{cpp}, @file{as}, +@file{ld}, @file{binutils} and @file{gdb}. +@c man end +@c man begin BUGS +For instructions on reporting bugs, see +@w{@value{BUGURL}}. +@c man end +@c man begin AUTHOR +See the Info entry for @command{gcc}, or +@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}}, +for contributors to GCC@. +@c man end +@end ignore + +@node Invoking GCC +@chapter GCC Command Options +@cindex GCC command options +@cindex command options +@cindex options, GCC command + +@c man begin DESCRIPTION +When you invoke GCC, it normally does preprocessing, compilation, +assembly and linking. The ``overall options'' allow you to stop this +process at an intermediate stage. For example, the @option{-c} option +says not to run the linker. Then the output consists of object files +output by the assembler. + +Other options are passed on to one stage of processing. Some options +control the preprocessor and others the compiler itself. Yet other +options control the assembler and linker; most of these are not +documented here, since you rarely need to use any of them. + +@cindex C compilation options +Most of the command line options that you can use with GCC are useful +for C programs; when an option is only useful with another language +(usually C++), the explanation says so explicitly. If the description +for a particular option does not mention a source language, you can use +that option with all supported languages. + +@cindex C++ compilation options +@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special +options for compiling C++ programs. + +@cindex grouping options +@cindex options, grouping +The @command{gcc} program accepts options and file names as operands. Many +options have multi-letter names; therefore multiple single-letter options +may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d +-v}}. + +@cindex order of options +@cindex options, order +You can mix options and other arguments. For the most part, the order +you use doesn't matter. Order does matter when you use several +options of the same kind; for example, if you specify @option{-L} more +than once, the directories are searched in the order specified. Also, +the placement of the @option{-l} option is significant. + +Many options have long names starting with @samp{-f} or with +@samp{-W}---for example, +@option{-fmove-loop-invariants}, @option{-Wformat} and so on. Most of +these have both positive and negative forms; the negative form of +@option{-ffoo} would be @option{-fno-foo}. This manual documents +only one of these two forms, whichever one is not the default. + +@c man end + +@xref{Option Index}, for an index to GCC's options. + +@menu +* Option Summary:: Brief list of all options, without explanations. +* Overall Options:: Controlling the kind of output: + an executable, object files, assembler files, + or preprocessed source. +* Invoking G++:: Compiling C++ programs. +* C Dialect Options:: Controlling the variant of C language compiled. +* C++ Dialect Options:: Variations on C++. +* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C + and Objective-C++. +* Language Independent Options:: Controlling how diagnostics should be + formatted. +* Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Optimize Options:: How much optimization? +* Preprocessor Options:: Controlling header files and macro definitions. + Also, getting dependency information for Make. +* Assembler Options:: Passing options to the assembler. +* Link Options:: Specifying libraries and so on. +* Directory Options:: Where to find header files and libraries. + Where to find the compiler executable files. +* Spec Files:: How to pass switches to sub-processes. +* Target Options:: Running a cross-compiler, or an old version of GCC. +* Submodel Options:: Specifying minor hardware or convention variations, + such as 68010 vs 68020. +* Code Gen Options:: Specifying conventions for function calls, data layout + and register usage. +* Environment Variables:: Env vars that affect GCC. +* Precompiled Headers:: Compiling a header once, and using it many times. +* Running Protoize:: Automatically adding or removing function prototypes. +@end menu + +@c man begin OPTIONS + +@node Option Summary +@section Option Summary + +Here is a summary of all the options, grouped by type. Explanations are +in the following sections. + +@table @emph +@item Overall Options +@xref{Overall Options,,Options Controlling the Kind of Output}. +@gccoptlist{-c -S -E -o @var{file} -combine -pipe -pass-exit-codes @gol +-x @var{language} -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help @gol +--version -wrapper@@@var{file}} + +@item C Language Options +@xref{C Dialect Options,,Options Controlling C Dialect}. +@gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol +-aux-info @var{filename} @gol +-fno-asm -fno-builtin -fno-builtin-@var{function} @gol +-fhosted -ffreestanding -fopenmp -fms-extensions @gol +-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol +-fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol +-fsigned-bitfields -fsigned-char @gol +-funsigned-bitfields -funsigned-char} + +@item C++ Language Options +@xref{C++ Dialect Options,,Options Controlling C++ Dialect}. +@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol +-fconserve-space -ffriend-injection @gol +-fno-elide-constructors @gol +-fno-enforce-eh-specs @gol +-ffor-scope -fno-for-scope -fno-gnu-keywords @gol +-fno-implicit-templates @gol +-fno-implicit-inline-templates @gol +-fno-implement-inlines -fms-extensions @gol +-fno-nonansi-builtins -fno-operator-names @gol +-fno-optional-diags -fpermissive @gol +-frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol +-fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ @gol +-fno-default-inline -fvisibility-inlines-hidden @gol +-fvisibility-ms-compat @gol +-Wabi -Wctor-dtor-privacy @gol +-Wnon-virtual-dtor -Wreorder @gol +-Weffc++ -Wstrict-null-sentinel @gol +-Wno-non-template-friend -Wold-style-cast @gol +-Woverloaded-virtual -Wno-pmf-conversions @gol +-Wsign-promo} + +@item Objective-C and Objective-C++ Language Options +@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling +Objective-C and Objective-C++ Dialects}. +@gccoptlist{-fconstant-string-class=@var{class-name} @gol +-fgnu-runtime -fnext-runtime @gol +-fno-nil-receivers @gol +-fobjc-call-cxx-cdtors @gol +-fobjc-direct-dispatch @gol +-fobjc-exceptions @gol +-fobjc-gc @gol +-freplace-objc-classes @gol +-fzero-link @gol +-gen-decls @gol +-Wassign-intercept @gol +-Wno-protocol -Wselector @gol +-Wstrict-selector-match @gol +-Wundeclared-selector} + +@item Language Independent Options +@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. +@gccoptlist{-fmessage-length=@var{n} @gol +-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol +-fdiagnostics-show-option} + +@item Warning Options +@xref{Warning Options,,Options to Request or Suppress Warnings}. +@gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol +-w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol +-Wno-attributes -Wno-builtin-macro-redefined @gol +-Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol +-Wchar-subscripts -Wclobbered -Wcomment @gol +-Wconversion -Wcoverage-mismatch -Wno-deprecated @gol +-Wno-deprecated-declarations -Wdisabled-optimization @gol +-Wno-div-by-zero -Wempty-body -Wenum-compare -Wno-endif-labels @gol +-Werror -Werror=* @gol +-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol +-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol +-Wformat-security -Wformat-y2k @gol +-Wframe-larger-than=@var{len} -Wignored-qualifiers @gol +-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol +-Winit-self -Winline @gol +-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol +-Winvalid-pch -Wlarger-than=@var{len} -Wunsafe-loop-optimizations @gol +-Wlogical-op -Wlong-long @gol +-Wmain -Wmissing-braces -Wmissing-field-initializers @gol +-Wmissing-format-attribute -Wmissing-include-dirs @gol +-Wmissing-noreturn -Wno-mudflap @gol +-Wno-multichar -Wnonnull -Wno-overflow @gol +-Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol +-Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol +-Wpointer-arith -Wno-pointer-to-int-cast @gol +-Wredundant-decls @gol +-Wreturn-type -Wsequence-point -Wshadow @gol +-Wsign-compare -Wsign-conversion -Wstack-protector @gol +-Wstrict-aliasing -Wstrict-aliasing=n @gol +-Wstrict-overflow -Wstrict-overflow=@var{n} @gol +-Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand @gol +-Wsystem-headers -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized @gol +-Wunknown-pragmas -Wno-pragmas -Wunreachable-code @gol +-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol +-Wunused-value -Wunused-variable @gol +-Wvariadic-macros -Wvla @gol +-Wvolatile-register-var -Wwrite-strings} + +@item C and Objective-C-only Warning Options +@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol +-Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs @gol +-Wold-style-declaration -Wold-style-definition @gol +-Wstrict-prototypes -Wtraditional -Wtraditional-conversion @gol +-Wdeclaration-after-statement -Wpointer-sign} + +@item Debugging Options +@xref{Debugging Options,,Options for Debugging Your Program or GCC}. +@gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol +-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol +-fdump-noaddr -fdump-unnumbered @gol +-fdump-translation-unit@r{[}-@var{n}@r{]} @gol +-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol +-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol +-fdump-statistics @gol +-fdump-tree-all @gol +-fdump-tree-original@r{[}-@var{n}@r{]} @gol +-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol +-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol +-fdump-tree-ch @gol +-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol +-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol +-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol +-fdump-tree-dom@r{[}-@var{n}@r{]} @gol +-fdump-tree-dse@r{[}-@var{n}@r{]} @gol +-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol +-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol +-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol +-fdump-tree-nrv -fdump-tree-vect @gol +-fdump-tree-sink @gol +-fdump-tree-sra@r{[}-@var{n}@r{]} @gol +-fdump-tree-fre@r{[}-@var{n}@r{]} @gol +-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol +-ftree-vectorizer-verbose=@var{n} @gol +-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol +-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol +-feliminate-unused-debug-symbols -femit-class-debug-always @gol +-fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol +-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol +-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol +-ftest-coverage -ftime-report -fvar-tracking @gol +-g -g@var{level} -gcoff -gdwarf-2 @gol +-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol +-fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol +-fdebug-prefix-map=@var{old}=@var{new} @gol +-femit-struct-debug-baseonly -femit-struct-debug-reduced @gol +-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol +-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol +-print-multi-directory -print-multi-lib @gol +-print-prog-name=@var{program} -print-search-dirs -Q @gol +-print-sysroot -print-sysroot-headers-suffix @gol +-save-temps -time} + +@item Optimization Options +@xref{Optimize Options,,Options that Control Optimization}. +@gccoptlist{ +-falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol +-falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol +-fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol +-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol +-fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping @gol +-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range @gol +-fdata-sections -fdce -fdce @gol +-fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol +-fearly-inlining -fexpensive-optimizations -ffast-math @gol +-ffinite-math-only -ffloat-store -fforward-propagate @gol +-ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol +-fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol +-finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol +-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta @gol +-fipa-pure-const -fipa-reference -fipa-struct-reorg @gol +-fipa-type-escape -fira-algorithm=@var{algorithm} @gol +-fira-region=@var{region} -fira-coalesce -fno-ira-share-save-slots @gol +-fno-ira-share-spill-slots -fira-verbose=@var{n} @gol +-fivopts -fkeep-inline-functions -fkeep-static-consts @gol +-floop-block -floop-interchange -floop-strip-mine @gol +-fmerge-all-constants -fmerge-constants -fmodulo-sched @gol +-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap @gol +-fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline @gol +-fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol +-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol +-fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol +-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol +-fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol +-fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol +-fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol +-fprofile-generate=@var{path} @gol +-fprofile-use -fprofile-use=@var{path} -fprofile-values @gol +-freciprocal-math -fregmove -frename-registers -freorder-blocks @gol +-freorder-blocks-and-partition -freorder-functions @gol +-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol +-frounding-math -frtl-abstract-sequences -fsched2-use-superblocks @gol +-fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous @gol +-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol +-fschedule-insns -fschedule-insns2 -fsection-anchors -fsee @gol +-fselective-scheduling -fselective-scheduling2 @gol +-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol +-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol +-fsplit-wide-types -fstack-protector -fstack-protector-all @gol +-fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer @gol +-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol +-ftree-copyrename -ftree-dce @gol +-ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im @gol +-ftree-loop-distribution @gol +-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol +-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-reassoc @gol +-ftree-sink -ftree-sra -ftree-switch-conversion @gol +-ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol +-funit-at-a-time -funroll-all-loops -funroll-loops @gol +-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol +-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol +-fwhole-program @gol +--param @var{name}=@var{value} +-O -O0 -O1 -O2 -O3 -Os} + +@item Preprocessor Options +@xref{Preprocessor Options,,Options Controlling the Preprocessor}. +@gccoptlist{-A@var{question}=@var{answer} @gol +-A-@var{question}@r{[}=@var{answer}@r{]} @gol +-C -dD -dI -dM -dN @gol +-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol +-idirafter @var{dir} @gol +-include @var{file} -imacros @var{file} @gol +-iprefix @var{file} -iwithprefix @var{dir} @gol +-iwithprefixbefore @var{dir} -isystem @var{dir} @gol +-imultilib @var{dir} -isysroot @var{dir} @gol +-M -MM -MF -MG -MP -MQ -MT -nostdinc @gol +-P -fworking-directory -remap @gol +-trigraphs -undef -U@var{macro} -Wp,@var{option} @gol +-Xpreprocessor @var{option}} + +@item Assembler Option +@xref{Assembler Options,,Passing Options to the Assembler}. +@gccoptlist{-Wa,@var{option} -Xassembler @var{option}} + +@item Linker Options +@xref{Link Options,,Options for Linking}. +@gccoptlist{@var{object-file-name} -l@var{library} @gol +-nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic @gol +-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol +-T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol +-u @var{symbol}} + +@item Directory Options +@xref{Directory Options,,Options for Directory Search}. +@gccoptlist{-B@var{prefix} -I@var{dir} -iquote@var{dir} -L@var{dir} +-specs=@var{file} -I- --sysroot=@var{dir}} + +@item Target Options +@c I wrote this xref this way to avoid overfull hbox. -- rms +@xref{Target Options}. +@gccoptlist{-V @var{version} -b @var{machine}} + +@item Machine Dependent Options +@xref{Submodel Options,,Hardware Models and Configurations}. +@c This list is ordered alphanumerically by subsection name. +@c Try and put the significant identifier (CPU or system) first, +@c so users have a clue at guessing where the ones they want will be. + +@emph{ARC Options} +@gccoptlist{-EB -EL @gol +-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text-section} @gol +-mdata=@var{data-section} -mrodata=@var{readonly-data-section}} + +@emph{ARM Options} +@gccoptlist{-mapcs-frame -mno-apcs-frame @gol +-mabi=@var{name} @gol +-mapcs-stack-check -mno-apcs-stack-check @gol +-mapcs-float -mno-apcs-float @gol +-mapcs-reentrant -mno-apcs-reentrant @gol +-msched-prolog -mno-sched-prolog @gol +-mlittle-endian -mbig-endian -mwords-little-endian @gol +-mfloat-abi=@var{name} -msoft-float -mhard-float -mfpe @gol +-mthumb-interwork -mno-thumb-interwork @gol +-mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol +-mstructure-size-boundary=@var{n} @gol +-mabort-on-noreturn @gol +-mlong-calls -mno-long-calls @gol +-msingle-pic-base -mno-single-pic-base @gol +-mpic-register=@var{reg} @gol +-mnop-fun-dllimport @gol +-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol +-mpoke-function-name @gol +-mthumb -marm @gol +-mtpcs-frame -mtpcs-leaf-frame @gol +-mcaller-super-interworking -mcallee-super-interworking @gol +-mtp=@var{name} @gol +-mword-relocations @gol +-mfix-cortex-m3-ldrd} + +@emph{AVR Options} +@gccoptlist{-mmcu=@var{mcu} -msize -mno-interrupts @gol +-mcall-prologues -mno-tablejump -mtiny-stack -mint8} + +@emph{Blackfin Options} +@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol +-msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol +-mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol +-mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library @gol +-mno-id-shared-library -mshared-library-id=@var{n} @gol +-mleaf-id-shared-library -mno-leaf-id-shared-library @gol +-msep-data -mno-sep-data -mlong-calls -mno-long-calls @gol +-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram @gol +-micplb} + +@emph{CRIS Options} +@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol +-mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol +-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol +-mstack-align -mdata-align -mconst-align @gol +-m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol +-melf -maout -melinux -mlinux -sim -sim2 @gol +-mmul-bug-workaround -mno-mul-bug-workaround} + +@emph{CRX Options} +@gccoptlist{-mmac -mpush-args} + +@emph{Darwin Options} +@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal @gol +-arch_only -bind_at_load -bundle -bundle_loader @gol +-client_name -compatibility_version -current_version @gol +-dead_strip @gol +-dependency-file -dylib_file -dylinker_install_name @gol +-dynamic -dynamiclib -exported_symbols_list @gol +-filelist -flat_namespace -force_cpusubtype_ALL @gol +-force_flat_namespace -headerpad_max_install_names @gol +-iframework @gol +-image_base -init -install_name -keep_private_externs @gol +-multi_module -multiply_defined -multiply_defined_unused @gol +-noall_load -no_dead_strip_inits_and_terms @gol +-nofixprebinding -nomultidefs -noprebind -noseglinkedit @gol +-pagezero_size -prebind -prebind_all_twolevel_modules @gol +-private_bundle -read_only_relocs -sectalign @gol +-sectobjectsymbols -whyload -seg1addr @gol +-sectcreate -sectobjectsymbols -sectorder @gol +-segaddr -segs_read_only_addr -segs_read_write_addr @gol +-seg_addr_table -seg_addr_table_filename -seglinkedit @gol +-segprot -segs_read_only_addr -segs_read_write_addr @gol +-single_module -static -sub_library -sub_umbrella @gol +-twolevel_namespace -umbrella -undefined @gol +-unexported_symbols_list -weak_reference_mismatches @gol +-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol +-mkernel -mone-byte-bool} + +@emph{DEC Alpha Options} +@gccoptlist{-mno-fp-regs -msoft-float -malpha-as -mgas @gol +-mieee -mieee-with-inexact -mieee-conformant @gol +-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol +-mtrap-precision=@var{mode} -mbuild-constants @gol +-mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol +-mbwx -mmax -mfix -mcix @gol +-mfloat-vax -mfloat-ieee @gol +-mexplicit-relocs -msmall-data -mlarge-data @gol +-msmall-text -mlarge-text @gol +-mmemory-latency=@var{time}} + +@emph{DEC Alpha/VMS Options} +@gccoptlist{-mvms-return-codes} + +@emph{FR30 Options} +@gccoptlist{-msmall-model -mno-lsim} + +@emph{FRV Options} +@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol +-mhard-float -msoft-float @gol +-malloc-cc -mfixed-cc -mdword -mno-dword @gol +-mdouble -mno-double @gol +-mmedia -mno-media -mmuladd -mno-muladd @gol +-mfdpic -minline-plt -mgprel-ro -multilib-library-pic @gol +-mlinked-fp -mlong-calls -malign-labels @gol +-mlibrary-pic -macc-4 -macc-8 @gol +-mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move @gol +-moptimize-membar -mno-optimize-membar @gol +-mscc -mno-scc -mcond-exec -mno-cond-exec @gol +-mvliw-branch -mno-vliw-branch @gol +-mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec @gol +-mno-nested-cond-exec -mtomcat-stats @gol +-mTLS -mtls @gol +-mcpu=@var{cpu}} + +@emph{GNU/Linux Options} +@gccoptlist{-muclibc} + +@emph{H8/300 Options} +@gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300} + +@emph{HPPA Options} +@gccoptlist{-march=@var{architecture-type} @gol +-mbig-switch -mdisable-fpregs -mdisable-indexing @gol +-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol +-mfixed-range=@var{register-range} @gol +-mjump-in-delay -mlinker-opt -mlong-calls @gol +-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol +-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol +-mno-jump-in-delay -mno-long-load-store @gol +-mno-portable-runtime -mno-soft-float @gol +-mno-space-regs -msoft-float -mpa-risc-1-0 @gol +-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol +-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol +-munix=@var{unix-std} -nolibdld -static -threads} + +@emph{i386 and x86-64 Options} +@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol +-mfpmath=@var{unit} @gol +-masm=@var{dialect} -mno-fancy-math-387 @gol +-mno-fp-ret-in-387 -msoft-float @gol +-mno-wide-multiply -mrtd -malign-double @gol +-mpreferred-stack-boundary=@var{num} +-mincoming-stack-boundary=@var{num} +-mcld -mcx16 -msahf -mrecip @gol +-mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol +-maes -mpclmul @gol +-msse4a -m3dnow -mpopcnt -mabm -msse5 @gol +-mthreads -mno-align-stringops -minline-all-stringops @gol +-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol +-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol +-m96bit-long-double -mregparm=@var{num} -msseregparm @gol +-mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol +-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol +-mcmodel=@var{code-model} @gol +-m32 -m64 -mlarge-data-threshold=@var{num} @gol +-mfused-madd -mno-fused-madd -msse2avx} + +@emph{IA-64 Options} +@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol +-mvolatile-asm-stop -mregister-names -mno-sdata @gol +-mconstant-gp -mauto-pic -minline-float-divide-min-latency @gol +-minline-float-divide-max-throughput @gol +-minline-int-divide-min-latency @gol +-minline-int-divide-max-throughput @gol +-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol +-mno-dwarf2-asm -mearly-stop-bits @gol +-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol +-mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol +-mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol +-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol +-msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol +-mno-sched-prefer-non-data-spec-insns @gol +-mno-sched-prefer-non-control-spec-insns @gol +-mno-sched-count-spec-in-critical-path} + +@emph{M32R/D Options} +@gccoptlist{-m32r2 -m32rx -m32r @gol +-mdebug @gol +-malign-loops -mno-align-loops @gol +-missue-rate=@var{number} @gol +-mbranch-cost=@var{number} @gol +-mmodel=@var{code-size-model-type} @gol +-msdata=@var{sdata-type} @gol +-mno-flush-func -mflush-func=@var{name} @gol +-mno-flush-trap -mflush-trap=@var{number} @gol +-G @var{num}} + +@emph{M32C Options} +@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}} + +@emph{M680x0 Options} +@gccoptlist{-march=@var{arch} -mcpu=@var{cpu} -mtune=@var{tune} +-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol +-m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 @gol +-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 @gol +-mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort @gol +-mno-short -mhard-float -m68881 -msoft-float -mpcrel @gol +-malign-int -mstrict-align -msep-data -mno-sep-data @gol +-mshared-library-id=n -mid-shared-library -mno-id-shared-library @gol +-mxgot -mno-xgot} + +@emph{M68hc1x Options} +@gccoptlist{-m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 @gol +-mauto-incdec -minmax -mlong-calls -mshort @gol +-msoft-reg-count=@var{count}} + +@emph{MCore Options} +@gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol +-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol +-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol +-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol +-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} + +@emph{MIPS Options} +@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol +-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 @gol +-mips64 -mips64r2 @gol +-mips16 -mno-mips16 -mflip-mips16 @gol +-minterlink-mips16 -mno-interlink-mips16 @gol +-mabi=@var{abi} -mabicalls -mno-abicalls @gol +-mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot @gol +-mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float @gol +-msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol +-mfpu=@var{fpu-type} @gol +-msmartmips -mno-smartmips @gol +-mpaired-single -mno-paired-single -mdmx -mno-mdmx @gol +-mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc @gol +-mlong64 -mlong32 -msym32 -mno-sym32 @gol +-G@var{num} -mlocal-sdata -mno-local-sdata @gol +-mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt @gol +-membedded-data -mno-embedded-data @gol +-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol +-mcode-readable=@var{setting} @gol +-msplit-addresses -mno-split-addresses @gol +-mexplicit-relocs -mno-explicit-relocs @gol +-mcheck-zero-division -mno-check-zero-division @gol +-mdivide-traps -mdivide-breaks @gol +-mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol +-mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol +-mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol +-mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 @gol +-mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 @gol +-mflush-func=@var{func} -mno-flush-func @gol +-mbranch-cost=@var{num} -mbranch-likely -mno-branch-likely @gol +-mfp-exceptions -mno-fp-exceptions @gol +-mvr4130-align -mno-vr4130-align} + +@emph{MMIX Options} +@gccoptlist{-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol +-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol +-melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol +-mno-base-addresses -msingle-exit -mno-single-exit} + +@emph{MN10300 Options} +@gccoptlist{-mmult-bug -mno-mult-bug @gol +-mam33 -mno-am33 @gol +-mam33-2 -mno-am33-2 @gol +-mreturn-pointer-on-d0 @gol +-mno-crt0 -mrelax} + +@emph{PDP-11 Options} +@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol +-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol +-mint16 -mno-int32 -mfloat32 -mno-float64 @gol +-mfloat64 -mno-float32 -mabshi -mno-abshi @gol +-mbranch-expensive -mbranch-cheap @gol +-msplit -mno-split -munix-asm -mdec-asm} + +@emph{picoChip Options} +@gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} +-msymbol-as-address -mno-inefficient-warnings} + +@emph{PowerPC Options} +See RS/6000 and PowerPC Options. + +@emph{RS/6000 and PowerPC Options} +@gccoptlist{-mcpu=@var{cpu-type} @gol +-mtune=@var{cpu-type} @gol +-mpower -mno-power -mpower2 -mno-power2 @gol +-mpowerpc -mpowerpc64 -mno-powerpc @gol +-maltivec -mno-altivec @gol +-mpowerpc-gpopt -mno-powerpc-gpopt @gol +-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol +-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd @gol +-mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol +-mnew-mnemonics -mold-mnemonics @gol +-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol +-m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol +-malign-power -malign-natural @gol +-msoft-float -mhard-float -mmultiple -mno-multiple @gol +-msingle-float -mdouble-float -msimple-fpu @gol +-mstring -mno-string -mupdate -mno-update @gol +-mavoid-indexed-addresses -mno-avoid-indexed-addresses @gol +-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol +-mstrict-align -mno-strict-align -mrelocatable @gol +-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol +-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol +-mdynamic-no-pic -maltivec -mswdiv @gol +-mprioritize-restricted-insns=@var{priority} @gol +-msched-costly-dep=@var{dependence_type} @gol +-minsert-sched-nops=@var{scheme} @gol +-mcall-sysv -mcall-netbsd @gol +-maix-struct-return -msvr4-struct-return @gol +-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol +-misel -mno-isel @gol +-misel=yes -misel=no @gol +-mspe -mno-spe @gol +-mspe=yes -mspe=no @gol +-mpaired @gol +-mgen-cell-microcode -mwarn-cell-microcode @gol +-mvrsave -mno-vrsave @gol +-mmulhw -mno-mulhw @gol +-mdlmzb -mno-dlmzb @gol +-mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol +-mprototype -mno-prototype @gol +-msim -mmvme -mads -myellowknife -memb -msdata @gol +-msdata=@var{opt} -mvxworks -G @var{num} -pthread} + +@emph{S/390 and zSeries Options} +@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol +-mhard-float -msoft-float -mhard-dfp -mno-hard-dfp @gol +-mlong-double-64 -mlong-double-128 @gol +-mbackchain -mno-backchain -mpacked-stack -mno-packed-stack @gol +-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol +-m64 -m31 -mdebug -mno-debug -mesa -mzarch @gol +-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd @gol +-mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard} + +@emph{Score Options} +@gccoptlist{-meb -mel @gol +-mnhwloop @gol +-muls @gol +-mmac @gol +-mscore5 -mscore5u -mscore7 -mscore7d} + +@emph{SH Options} +@gccoptlist{-m1 -m2 -m2e -m3 -m3e @gol +-m4-nofpu -m4-single-only -m4-single -m4 @gol +-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol +-m5-64media -m5-64media-nofpu @gol +-m5-32media -m5-32media-nofpu @gol +-m5-compact -m5-compact-nofpu @gol +-mb -ml -mdalign -mrelax @gol +-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol +-mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace @gol +-mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol +-mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol +-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol +-minvalid-symbols} + +@emph{SPARC Options} +@gccoptlist{-mcpu=@var{cpu-type} @gol +-mtune=@var{cpu-type} @gol +-mcmodel=@var{code-model} @gol +-m32 -m64 -mapp-regs -mno-app-regs @gol +-mfaster-structs -mno-faster-structs @gol +-mfpu -mno-fpu -mhard-float -msoft-float @gol +-mhard-quad-float -msoft-quad-float @gol +-mimpure-text -mno-impure-text -mlittle-endian @gol +-mstack-bias -mno-stack-bias @gol +-munaligned-doubles -mno-unaligned-doubles @gol +-mv8plus -mno-v8plus -mvis -mno-vis +-threads -pthreads -pthread} + +@emph{SPU Options} +@gccoptlist{-mwarn-reloc -merror-reloc @gol +-msafe-dma -munsafe-dma @gol +-mbranch-hints @gol +-msmall-mem -mlarge-mem -mstdmain @gol +-mfixed-range=@var{register-range}} + +@emph{System V Options} +@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}} + +@emph{V850 Options} +@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol +-mprolog-function -mno-prolog-function -mspace @gol +-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol +-mapp-regs -mno-app-regs @gol +-mdisable-callt -mno-disable-callt @gol +-mv850e1 @gol +-mv850e @gol +-mv850 -mbig-switch} + +@emph{VAX Options} +@gccoptlist{-mg -mgnu -munix} + +@emph{VxWorks Options} +@gccoptlist{-mrtp -non-static -Bstatic -Bdynamic @gol +-Xbind-lazy -Xbind-now} + +@emph{x86-64 Options} +See i386 and x86-64 Options. + +@emph{i386 and x86-64 Windows Options} +@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll +-mnop-fun-dllimport -mthread -mwin32 -mwindows} + +@emph{Xstormy16 Options} +@gccoptlist{-msim} + +@emph{Xtensa Options} +@gccoptlist{-mconst16 -mno-const16 @gol +-mfused-madd -mno-fused-madd @gol +-mserialize-volatile -mno-serialize-volatile @gol +-mtext-section-literals -mno-text-section-literals @gol +-mtarget-align -mno-target-align @gol +-mlongcalls -mno-longcalls} + +@emph{zSeries Options} +See S/390 and zSeries Options. + +@item Code Generation Options +@xref{Code Gen Options,,Options for Code Generation Conventions}. +@gccoptlist{-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol +-ffixed-@var{reg} -fexceptions @gol +-fnon-call-exceptions -funwind-tables @gol +-fasynchronous-unwind-tables @gol +-finhibit-size-directive -finstrument-functions @gol +-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol +-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol +-fno-common -fno-ident @gol +-fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol +-fno-jump-tables @gol +-frecord-gcc-switches @gol +-freg-struct-return -fshort-enums @gol +-fshort-double -fshort-wchar @gol +-fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol +-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol +-fno-stack-limit -fargument-alias -fargument-noalias @gol +-fargument-noalias-global -fargument-noalias-anything @gol +-fleading-underscore -ftls-model=@var{model} @gol +-ftrapv -fwrapv -fbounds-check @gol +-fvisibility} +@end table + +@menu +* Overall Options:: Controlling the kind of output: + an executable, object files, assembler files, + or preprocessed source. +* C Dialect Options:: Controlling the variant of C language compiled. +* C++ Dialect Options:: Variations on C++. +* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C + and Objective-C++. +* Language Independent Options:: Controlling how diagnostics should be + formatted. +* Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Optimize Options:: How much optimization? +* Preprocessor Options:: Controlling header files and macro definitions. + Also, getting dependency information for Make. +* Assembler Options:: Passing options to the assembler. +* Link Options:: Specifying libraries and so on. +* Directory Options:: Where to find header files and libraries. + Where to find the compiler executable files. +* Spec Files:: How to pass switches to sub-processes. +* Target Options:: Running a cross-compiler, or an old version of GCC. +@end menu + +@node Overall Options +@section Options Controlling the Kind of Output + +Compilation can involve up to four stages: preprocessing, compilation +proper, assembly and linking, always in that order. GCC is capable of +preprocessing and compiling several files either into several +assembler input files, or into one assembler input file; then each +assembler input file produces an object file, and linking combines all +the object files (those newly compiled, and those specified as input) +into an executable file. + +@cindex file name suffix +For any given input file, the file name suffix determines what kind of +compilation is done: + +@table @gcctabopt +@item @var{file}.c +C source code which must be preprocessed. + +@item @var{file}.i +C source code which should not be preprocessed. + +@item @var{file}.ii +C++ source code which should not be preprocessed. + +@item @var{file}.m +Objective-C source code. Note that you must link with the @file{libobjc} +library to make an Objective-C program work. + +@item @var{file}.mi +Objective-C source code which should not be preprocessed. + +@item @var{file}.mm +@itemx @var{file}.M +Objective-C++ source code. Note that you must link with the @file{libobjc} +library to make an Objective-C++ program work. Note that @samp{.M} refers +to a literal capital M@. + +@item @var{file}.mii +Objective-C++ source code which should not be preprocessed. + +@item @var{file}.h +C, C++, Objective-C or Objective-C++ header file to be turned into a +precompiled header. + +@item @var{file}.cc +@itemx @var{file}.cp +@itemx @var{file}.cxx +@itemx @var{file}.cpp +@itemx @var{file}.CPP +@itemx @var{file}.c++ +@itemx @var{file}.C +C++ source code which must be preprocessed. Note that in @samp{.cxx}, +the last two letters must both be literally @samp{x}. Likewise, +@samp{.C} refers to a literal capital C@. + +@item @var{file}.mm +@itemx @var{file}.M +Objective-C++ source code which must be preprocessed. + +@item @var{file}.mii +Objective-C++ source code which should not be preprocessed. + +@item @var{file}.hh +@itemx @var{file}.H +@itemx @var{file}.hp +@itemx @var{file}.hxx +@itemx @var{file}.hpp +@itemx @var{file}.HPP +@itemx @var{file}.h++ +@itemx @var{file}.tcc +C++ header file to be turned into a precompiled header. + +@item @var{file}.f +@itemx @var{file}.for +@itemx @var{file}.ftn +Fixed form Fortran source code which should not be preprocessed. + +@item @var{file}.F +@itemx @var{file}.FOR +@itemx @var{file}.fpp +@itemx @var{file}.FPP +@itemx @var{file}.FTN +Fixed form Fortran source code which must be preprocessed (with the traditional +preprocessor). + +@item @var{file}.f90 +@itemx @var{file}.f95 +@itemx @var{file}.f03 +@itemx @var{file}.f08 +Free form Fortran source code which should not be preprocessed. + +@item @var{file}.F90 +@itemx @var{file}.F95 +@itemx @var{file}.F03 +@itemx @var{file}.F08 +Free form Fortran source code which must be preprocessed (with the +traditional preprocessor). + +@c FIXME: Descriptions of Java file types. +@c @var{file}.java +@c @var{file}.class +@c @var{file}.zip +@c @var{file}.jar + +@item @var{file}.ads +Ada source code file which contains a library unit declaration (a +declaration of a package, subprogram, or generic, or a generic +instantiation), or a library unit renaming declaration (a package, +generic, or subprogram renaming declaration). Such files are also +called @dfn{specs}. + +@item @var{file}.adb +Ada source code file containing a library unit body (a subprogram or +package body). Such files are also called @dfn{bodies}. + +@c GCC also knows about some suffixes for languages not yet included: +@c Pascal: +@c @var{file}.p +@c @var{file}.pas +@c Ratfor: +@c @var{file}.r + +@item @var{file}.s +Assembler code. + +@item @var{file}.S +@itemx @var{file}.sx +Assembler code which must be preprocessed. + +@item @var{other} +An object file to be fed straight into linking. +Any file name with no recognized suffix is treated this way. +@end table + +@opindex x +You can specify the input language explicitly with the @option{-x} option: + +@table @gcctabopt +@item -x @var{language} +Specify explicitly the @var{language} for the following input files +(rather than letting the compiler choose a default based on the file +name suffix). This option applies to all following input files until +the next @option{-x} option. Possible values for @var{language} are: +@smallexample +c c-header c-cpp-output +c++ c++-header c++-cpp-output +objective-c objective-c-header objective-c-cpp-output +objective-c++ objective-c++-header objective-c++-cpp-output +assembler assembler-with-cpp +ada +f77 f77-cpp-input f95 f95-cpp-input +java +@end smallexample + +@item -x none +Turn off any specification of a language, so that subsequent files are +handled according to their file name suffixes (as they are if @option{-x} +has not been used at all). + +@item -pass-exit-codes +@opindex pass-exit-codes +Normally the @command{gcc} program will exit with the code of 1 if any +phase of the compiler returns a non-success return code. If you specify +@option{-pass-exit-codes}, the @command{gcc} program will instead return with +numerically highest error produced by any phase that returned an error +indication. The C, C++, and Fortran frontends return 4, if an internal +compiler error is encountered. +@end table + +If you only want some of the stages of compilation, you can use +@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and +one of the options @option{-c}, @option{-S}, or @option{-E} to say where +@command{gcc} is to stop. Note that some combinations (for example, +@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all. + +@table @gcctabopt +@item -c +@opindex c +Compile or assemble the source files, but do not link. The linking +stage simply is not done. The ultimate output is in the form of an +object file for each source file. + +By default, the object file name for a source file is made by replacing +the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}. + +Unrecognized input files, not requiring compilation or assembly, are +ignored. + +@item -S +@opindex S +Stop after the stage of compilation proper; do not assemble. The output +is in the form of an assembler code file for each non-assembler input +file specified. + +By default, the assembler file name for a source file is made by +replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}. + +Input files that don't require compilation are ignored. + +@item -E +@opindex E +Stop after the preprocessing stage; do not run the compiler proper. The +output is in the form of preprocessed source code, which is sent to the +standard output. + +Input files which don't require preprocessing are ignored. + +@cindex output file option +@item -o @var{file} +@opindex o +Place output in file @var{file}. This applies regardless to whatever +sort of output is being produced, whether it be an executable file, +an object file, an assembler file or preprocessed C code. + +If @option{-o} is not specified, the default is to put an executable +file in @file{a.out}, the object file for +@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its +assembler file in @file{@var{source}.s}, a precompiled header file in +@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on +standard output. + +@item -v +@opindex v +Print (on standard error output) the commands executed to run the stages +of compilation. Also print the version number of the compiler driver +program and of the preprocessor and the compiler proper. + +@item -### +@opindex ### +Like @option{-v} except the commands are not executed and all command +arguments are quoted. This is useful for shell scripts to capture the +driver-generated command lines. + +@item -pipe +@opindex pipe +Use pipes rather than temporary files for communication between the +various stages of compilation. This fails to work on some systems where +the assembler is unable to read from a pipe; but the GNU assembler has +no trouble. + +@item -combine +@opindex combine +If you are compiling multiple source files, this option tells the driver +to pass all the source files to the compiler at once (for those +languages for which the compiler can handle this). This will allow +intermodule analysis (IMA) to be performed by the compiler. Currently the only +language for which this is supported is C@. If you pass source files for +multiple languages to the driver, using this option, the driver will invoke +the compiler(s) that support IMA once each, passing each compiler all the +source files appropriate for it. For those languages that do not support +IMA this option will be ignored, and the compiler will be invoked once for +each source file in that language. If you use this option in conjunction +with @option{-save-temps}, the compiler will generate multiple +pre-processed files +(one for each source file), but only one (combined) @file{.o} or +@file{.s} file. + +@item --help +@opindex help +Print (on the standard output) a description of the command line options +understood by @command{gcc}. If the @option{-v} option is also specified +then @option{--help} will also be passed on to the various processes +invoked by @command{gcc}, so that they can display the command line options +they accept. If the @option{-Wextra} option has also been specified +(prior to the @option{--help} option), then command line options which +have no documentation associated with them will also be displayed. + +@item --target-help +@opindex target-help +Print (on the standard output) a description of target-specific command +line options for each tool. For some targets extra target-specific +information may also be printed. + +@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]} +Print (on the standard output) a description of the command line +options understood by the compiler that fit into all specified classes +and qualifiers. These are the supported classes: + +@table @asis +@item @samp{optimizers} +This will display all of the optimization options supported by the +compiler. + +@item @samp{warnings} +This will display all of the options controlling warning messages +produced by the compiler. + +@item @samp{target} +This will display target-specific options. Unlike the +@option{--target-help} option however, target-specific options of the +linker and assembler will not be displayed. This is because those +tools do not currently support the extended @option{--help=} syntax. + +@item @samp{params} +This will display the values recognized by the @option{--param} +option. + +@item @var{language} +This will display the options supported for @var{language}, where +@var{language} is the name of one of the languages supported in this +version of GCC. + +@item @samp{common} +This will display the options that are common to all languages. +@end table + +These are the supported qualifiers: + +@table @asis +@item @samp{undocumented} +Display only those options which are undocumented. + +@item @samp{joined} +Display options which take an argument that appears after an equal +sign in the same continuous piece of text, such as: +@samp{--help=target}. + +@item @samp{separate} +Display options which take an argument that appears as a separate word +following the original option, such as: @samp{-o output-file}. +@end table + +Thus for example to display all the undocumented target-specific +switches supported by the compiler the following can be used: + +@smallexample +--help=target,undocumented +@end smallexample + +The sense of a qualifier can be inverted by prefixing it with the +@samp{^} character, so for example to display all binary warning +options (i.e., ones that are either on or off and that do not take an +argument), which have a description the following can be used: + +@smallexample +--help=warnings,^joined,^undocumented +@end smallexample + +The argument to @option{--help=} should not consist solely of inverted +qualifiers. + +Combining several classes is possible, although this usually +restricts the output by so much that there is nothing to display. One +case where it does work however is when one of the classes is +@var{target}. So for example to display all the target-specific +optimization options the following can be used: + +@smallexample +--help=target,optimizers +@end smallexample + +The @option{--help=} option can be repeated on the command line. Each +successive use will display its requested class of options, skipping +those that have already been displayed. + +If the @option{-Q} option appears on the command line before the +@option{--help=} option, then the descriptive text displayed by +@option{--help=} is changed. Instead of describing the displayed +options, an indication is given as to whether the option is enabled, +disabled or set to a specific value (assuming that the compiler +knows this at the point where the @option{--help=} option is used). + +Here is a truncated example from the ARM port of @command{gcc}: + +@smallexample + % gcc -Q -mabi=2 --help=target -c + The following options are target specific: + -mabi= 2 + -mabort-on-noreturn [disabled] + -mapcs [disabled] +@end smallexample + +The output is sensitive to the effects of previous command line +options, so for example it is possible to find out which optimizations +are enabled at @option{-O2} by using: + +@smallexample +-Q -O2 --help=optimizers +@end smallexample + +Alternatively you can discover which binary optimizations are enabled +by @option{-O3} by using: + +@smallexample +gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts +gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts +diff /tmp/O2-opts /tmp/O3-opts | grep enabled +@end smallexample + +@item --version +@opindex version +Display the version number and copyrights of the invoked GCC@. + +@item -wrapper +@opindex wrapper +Invoke all subcommands under a wrapper program. It takes a single +comma separated list as an argument, which will be used to invoke +the wrapper: + +@smallexample +gcc -c t.c -wrapper gdb,--args +@end smallexample + +This will invoke all subprograms of gcc under "gdb --args", +thus cc1 invocation will be "gdb --args cc1 ...". + +@include @value{srcdir}/../libiberty/at-file.texi +@end table + +@node Invoking G++ +@section Compiling C++ Programs + +@cindex suffixes for C++ source +@cindex C++ source file suffixes +C++ source files conventionally use one of the suffixes @samp{.C}, +@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or +@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp}, +@samp{.H}, or (for shared template code) @samp{.tcc}; and +preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes +files with these names and compiles them as C++ programs even if you +call the compiler the same way as for compiling C programs (usually +with the name @command{gcc}). + +@findex g++ +@findex c++ +However, the use of @command{gcc} does not add the C++ library. +@command{g++} is a program that calls GCC and treats @samp{.c}, +@samp{.h} and @samp{.i} files as C++ source files instead of C source +files unless @option{-x} is used, and automatically specifies linking +against the C++ library. This program is also useful when +precompiling a C header file with a @samp{.h} extension for use in C++ +compilations. On many systems, @command{g++} is also installed with +the name @command{c++}. + +@cindex invoking @command{g++} +When you compile C++ programs, you may specify many of the same +command-line options that you use for compiling programs in any +language; or command-line options meaningful for C and related +languages; or options that are meaningful only for C++ programs. +@xref{C Dialect Options,,Options Controlling C Dialect}, for +explanations of options for languages related to C@. +@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for +explanations of options that are meaningful only for C++ programs. + +@node C Dialect Options +@section Options Controlling C Dialect +@cindex dialect options +@cindex language dialect options +@cindex options, dialect + +The following options control the dialect of C (or languages derived +from C, such as C++, Objective-C and Objective-C++) that the compiler +accepts: + +@table @gcctabopt +@cindex ANSI support +@cindex ISO support +@item -ansi +@opindex ansi +In C mode, this is equivalent to @samp{-std=c89}. In C++ mode, it is +equivalent to @samp{-std=c++98}. + +This turns off certain features of GCC that are incompatible with ISO +C90 (when compiling C code), or of standard C++ (when compiling C++ code), +such as the @code{asm} and @code{typeof} keywords, and +predefined macros such as @code{unix} and @code{vax} that identify the +type of system you are using. It also enables the undesirable and +rarely used ISO trigraph feature. For the C compiler, +it disables recognition of C++ style @samp{//} comments as well as +the @code{inline} keyword. + +The alternate keywords @code{__asm__}, @code{__extension__}, +@code{__inline__} and @code{__typeof__} continue to work despite +@option{-ansi}. You would not want to use them in an ISO C program, of +course, but it is useful to put them in header files that might be included +in compilations done with @option{-ansi}. Alternate predefined macros +such as @code{__unix__} and @code{__vax__} are also available, with or +without @option{-ansi}. + +The @option{-ansi} option does not cause non-ISO programs to be +rejected gratuitously. For that, @option{-pedantic} is required in +addition to @option{-ansi}. @xref{Warning Options}. + +The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi} +option is used. Some header files may notice this macro and refrain +from declaring certain functions or defining certain macros that the +ISO standard doesn't call for; this is to avoid interfering with any +programs that might use these names for other things. + +Functions that would normally be built in but do not have semantics +defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in +functions when @option{-ansi} is used. @xref{Other Builtins,,Other +built-in functions provided by GCC}, for details of the functions +affected. + +@item -std= +@opindex std +Determine the language standard. @xref{Standards,,Language Standards +Supported by GCC}, for details of these standard versions. This option +is currently only supported when compiling C or C++. + +The compiler can accept several base standards, such as @samp{c89} or +@samp{c++98}, and GNU dialects of those standards, such as +@samp{gnu89} or @samp{gnu++98}. By specifying a base standard, the +compiler will accept all programs following that standard and those +using GNU extensions that do not contradict it. For example, +@samp{-std=c89} turns off certain features of GCC that are +incompatible with ISO C90, such as the @code{asm} and @code{typeof} +keywords, but not other GNU extensions that do not have a meaning in +ISO C90, such as omitting the middle term of a @code{?:} +expression. On the other hand, by specifying a GNU dialect of a +standard, all features the compiler support are enabled, even when +those features change the meaning of the base standard and some +strict-conforming programs may be rejected. The particular standard +is used by @option{-pedantic} to identify which features are GNU +extensions given that version of the standard. For example +@samp{-std=gnu89 -pedantic} would warn about C++ style @samp{//} +comments, while @samp{-std=gnu99 -pedantic} would not. + +A value for this option must be provided; possible values are + +@table @samp +@item c89 +@itemx iso9899:1990 +Support all ISO C90 programs (certain GNU extensions that conflict +with ISO C90 are disabled). Same as @option{-ansi} for C code. + +@item iso9899:199409 +ISO C90 as modified in amendment 1. + +@item c99 +@itemx c9x +@itemx iso9899:1999 +@itemx iso9899:199x +ISO C99. Note that this standard is not yet fully supported; see +@w{@uref{http://gcc.gnu.org/gcc-4.4/c99status.html}} for more information. The +names @samp{c9x} and @samp{iso9899:199x} are deprecated. + +@item gnu89 +GNU dialect of ISO C90 (including some C99 features). This +is the default for C code. + +@item gnu99 +@itemx gnu9x +GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC, +this will become the default. The name @samp{gnu9x} is deprecated. + +@item c++98 +The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for +C++ code. + +@item gnu++98 +GNU dialect of @option{-std=c++98}. This is the default for +C++ code. + +@item c++0x +The working draft of the upcoming ISO C++0x standard. This option +enables experimental features that are likely to be included in +C++0x. The working draft is constantly changing, and any feature that is +enabled by this flag may be removed from future versions of GCC if it is +not part of the C++0x standard. + +@item gnu++0x +GNU dialect of @option{-std=c++0x}. This option enables +experimental features that may be removed in future versions of GCC. +@end table + +@item -fgnu89-inline +@opindex fgnu89-inline +The option @option{-fgnu89-inline} tells GCC to use the traditional +GNU semantics for @code{inline} functions when in C99 mode. +@xref{Inline,,An Inline Function is As Fast As a Macro}. This option +is accepted and ignored by GCC versions 4.1.3 up to but not including +4.3. In GCC versions 4.3 and later it changes the behavior of GCC in +C99 mode. Using this option is roughly equivalent to adding the +@code{gnu_inline} function attribute to all inline functions +(@pxref{Function Attributes}). + +The option @option{-fno-gnu89-inline} explicitly tells GCC to use the +C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it +specifies the default behavior). This option was first supported in +GCC 4.3. This option is not supported in C89 or gnu89 mode. + +The preprocessor macros @code{__GNUC_GNU_INLINE__} and +@code{__GNUC_STDC_INLINE__} may be used to check which semantics are +in effect for @code{inline} functions. @xref{Common Predefined +Macros,,,cpp,The C Preprocessor}. + +@item -aux-info @var{filename} +@opindex aux-info +Output to the given filename prototyped declarations for all functions +declared and/or defined in a translation unit, including those in header +files. This option is silently ignored in any language other than C@. + +Besides declarations, the file indicates, in comments, the origin of +each declaration (source file and line), whether the declaration was +implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or +@samp{O} for old, respectively, in the first character after the line +number and the colon), and whether it came from a declaration or a +definition (@samp{C} or @samp{F}, respectively, in the following +character). In the case of function definitions, a K&R-style list of +arguments followed by their declarations is also provided, inside +comments, after the declaration. + +@item -fno-asm +@opindex fno-asm +Do not recognize @code{asm}, @code{inline} or @code{typeof} as a +keyword, so that code can use these words as identifiers. You can use +the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__} +instead. @option{-ansi} implies @option{-fno-asm}. + +In C++, this switch only affects the @code{typeof} keyword, since +@code{asm} and @code{inline} are standard keywords. You may want to +use the @option{-fno-gnu-keywords} flag instead, which has the same +effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this +switch only affects the @code{asm} and @code{typeof} keywords, since +@code{inline} is a standard keyword in ISO C99. + +@item -fno-builtin +@itemx -fno-builtin-@var{function} +@opindex fno-builtin +@cindex built-in functions +Don't recognize built-in functions that do not begin with +@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in +functions provided by GCC}, for details of the functions affected, +including those which are not built-in functions when @option{-ansi} or +@option{-std} options for strict ISO C conformance are used because they +do not have an ISO standard meaning. + +GCC normally generates special code to handle certain built-in functions +more efficiently; for instance, calls to @code{alloca} may become single +instructions that adjust the stack directly, and calls to @code{memcpy} +may become inline copy loops. The resulting code is often both smaller +and faster, but since the function calls no longer appear as such, you +cannot set a breakpoint on those calls, nor can you change the behavior +of the functions by linking with a different library. In addition, +when a function is recognized as a built-in function, GCC may use +information about that function to warn about problems with calls to +that function, or to generate more efficient code, even if the +resulting code still contains calls to that function. For example, +warnings are given with @option{-Wformat} for bad calls to +@code{printf}, when @code{printf} is built in, and @code{strlen} is +known not to modify global memory. + +With the @option{-fno-builtin-@var{function}} option +only the built-in function @var{function} is +disabled. @var{function} must not begin with @samp{__builtin_}. If a +function is named that is not built-in in this version of GCC, this +option is ignored. There is no corresponding +@option{-fbuiltin-@var{function}} option; if you wish to enable +built-in functions selectively when using @option{-fno-builtin} or +@option{-ffreestanding}, you may define macros such as: + +@smallexample +#define abs(n) __builtin_abs ((n)) +#define strcpy(d, s) __builtin_strcpy ((d), (s)) +@end smallexample + +@item -fhosted +@opindex fhosted +@cindex hosted environment + +Assert that compilation takes place in a hosted environment. This implies +@option{-fbuiltin}. A hosted environment is one in which the +entire standard library is available, and in which @code{main} has a return +type of @code{int}. Examples are nearly everything except a kernel. +This is equivalent to @option{-fno-freestanding}. + +@item -ffreestanding +@opindex ffreestanding +@cindex hosted environment + +Assert that compilation takes place in a freestanding environment. This +implies @option{-fno-builtin}. A freestanding environment +is one in which the standard library may not exist, and program startup may +not necessarily be at @code{main}. The most obvious example is an OS kernel. +This is equivalent to @option{-fno-hosted}. + +@xref{Standards,,Language Standards Supported by GCC}, for details of +freestanding and hosted environments. + +@item -fopenmp +@opindex fopenmp +@cindex openmp parallel +Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and +@code{!$omp} in Fortran. When @option{-fopenmp} is specified, the +compiler generates parallel code according to the OpenMP Application +Program Interface v2.5 @w{@uref{http://www.openmp.org/}}. This option +implies @option{-pthread}, and thus is only supported on targets that +have support for @option{-pthread}. + +@item -fms-extensions +@opindex fms-extensions +Accept some non-standard constructs used in Microsoft header files. + +Some cases of unnamed fields in structures and unions are only +accepted with this option. @xref{Unnamed Fields,,Unnamed struct/union +fields within structs/unions}, for details. + +@item -trigraphs +@opindex trigraphs +Support ISO C trigraphs. The @option{-ansi} option (and @option{-std} +options for strict ISO C conformance) implies @option{-trigraphs}. + +@item -no-integrated-cpp +@opindex no-integrated-cpp +Performs a compilation in two passes: preprocessing and compiling. This +option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the +@option{-B} option. The user supplied compilation step can then add in +an additional preprocessing step after normal preprocessing but before +compiling. The default is to use the integrated cpp (internal cpp) + +The semantics of this option will change if "cc1", "cc1plus", and +"cc1obj" are merged. + +@cindex traditional C language +@cindex C language, traditional +@item -traditional +@itemx -traditional-cpp +@opindex traditional-cpp +@opindex traditional +Formerly, these options caused GCC to attempt to emulate a pre-standard +C compiler. They are now only supported with the @option{-E} switch. +The preprocessor continues to support a pre-standard mode. See the GNU +CPP manual for details. + +@item -fcond-mismatch +@opindex fcond-mismatch +Allow conditional expressions with mismatched types in the second and +third arguments. The value of such an expression is void. This option +is not supported for C++. + +@item -flax-vector-conversions +@opindex flax-vector-conversions +Allow implicit conversions between vectors with differing numbers of +elements and/or incompatible element types. This option should not be +used for new code. + +@item -funsigned-char +@opindex funsigned-char +Let the type @code{char} be unsigned, like @code{unsigned char}. + +Each kind of machine has a default for what @code{char} should +be. It is either like @code{unsigned char} by default or like +@code{signed char} by default. + +Ideally, a portable program should always use @code{signed char} or +@code{unsigned char} when it depends on the signedness of an object. +But many programs have been written to use plain @code{char} and +expect it to be signed, or expect it to be unsigned, depending on the +machines they were written for. This option, and its inverse, let you +make such a program work with the opposite default. + +The type @code{char} is always a distinct type from each of +@code{signed char} or @code{unsigned char}, even though its behavior +is always just like one of those two. + +@item -fsigned-char +@opindex fsigned-char +Let the type @code{char} be signed, like @code{signed char}. + +Note that this is equivalent to @option{-fno-unsigned-char}, which is +the negative form of @option{-funsigned-char}. Likewise, the option +@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. + +@item -fsigned-bitfields +@itemx -funsigned-bitfields +@itemx -fno-signed-bitfields +@itemx -fno-unsigned-bitfields +@opindex fsigned-bitfields +@opindex funsigned-bitfields +@opindex fno-signed-bitfields +@opindex fno-unsigned-bitfields +These options control whether a bit-field is signed or unsigned, when the +declaration does not use either @code{signed} or @code{unsigned}. By +default, such a bit-field is signed, because this is consistent: the +basic integer types such as @code{int} are signed types. +@end table + +@node C++ Dialect Options +@section Options Controlling C++ Dialect + +@cindex compiler options, C++ +@cindex C++ options, command line +@cindex options, C++ +This section describes the command-line options that are only meaningful +for C++ programs; but you can also use most of the GNU compiler options +regardless of what language your program is in. For example, you +might compile a file @code{firstClass.C} like this: + +@smallexample +g++ -g -frepo -O -c firstClass.C +@end smallexample + +@noindent +In this example, only @option{-frepo} is an option meant +only for C++ programs; you can use the other options with any +language supported by GCC@. + +Here is a list of options that are @emph{only} for compiling C++ programs: + +@table @gcctabopt + +@item -fabi-version=@var{n} +@opindex fabi-version +Use version @var{n} of the C++ ABI@. Version 2 is the version of the +C++ ABI that first appeared in G++ 3.4. Version 1 is the version of +the C++ ABI that first appeared in G++ 3.2. Version 0 will always be +the version that conforms most closely to the C++ ABI specification. +Therefore, the ABI obtained using version 0 will change as ABI bugs +are fixed. + +The default is version 2. + +@item -fno-access-control +@opindex fno-access-control +Turn off all access checking. This switch is mainly useful for working +around bugs in the access control code. + +@item -fcheck-new +@opindex fcheck-new +Check that the pointer returned by @code{operator new} is non-null +before attempting to modify the storage allocated. This check is +normally unnecessary because the C++ standard specifies that +@code{operator new} will only return @code{0} if it is declared +@samp{throw()}, in which case the compiler will always check the +return value even without this option. In all other cases, when +@code{operator new} has a non-empty exception specification, memory +exhaustion is signalled by throwing @code{std::bad_alloc}. See also +@samp{new (nothrow)}. + +@item -fconserve-space +@opindex fconserve-space +Put uninitialized or runtime-initialized global variables into the +common segment, as C does. This saves space in the executable at the +cost of not diagnosing duplicate definitions. If you compile with this +flag and your program mysteriously crashes after @code{main()} has +completed, you may have an object that is being destroyed twice because +two definitions were merged. + +This option is no longer useful on most targets, now that support has +been added for putting variables into BSS without making them common. + +@item -fno-deduce-init-list +@opindex fno-deduce-init-list +Disable deduction of a template type parameter as +std::initializer_list from a brace-enclosed initializer list, i.e. + +@smallexample +template auto forward(T t) -> decltype (realfn (t)) +@{ + return realfn (t); +@} + +void f() +@{ + forward(@{1,2@}); // call forward> +@} +@end smallexample + +This option is present because this deduction is an extension to the +current specification in the C++0x working draft, and there was +some concern about potential overload resolution problems. + +@item -ffriend-injection +@opindex ffriend-injection +Inject friend functions into the enclosing namespace, so that they are +visible outside the scope of the class in which they are declared. +Friend functions were documented to work this way in the old Annotated +C++ Reference Manual, and versions of G++ before 4.1 always worked +that way. However, in ISO C++ a friend function which is not declared +in an enclosing scope can only be found using argument dependent +lookup. This option causes friends to be injected as they were in +earlier releases. + +This option is for compatibility, and may be removed in a future +release of G++. + +@item -fno-elide-constructors +@opindex fno-elide-constructors +The C++ standard allows an implementation to omit creating a temporary +which is only used to initialize another object of the same type. +Specifying this option disables that optimization, and forces G++ to +call the copy constructor in all cases. + +@item -fno-enforce-eh-specs +@opindex fno-enforce-eh-specs +Don't generate code to check for violation of exception specifications +at runtime. This option violates the C++ standard, but may be useful +for reducing code size in production builds, much like defining +@samp{NDEBUG}. This does not give user code permission to throw +exceptions in violation of the exception specifications; the compiler +will still optimize based on the specifications, so throwing an +unexpected exception will result in undefined behavior. + +@item -ffor-scope +@itemx -fno-for-scope +@opindex ffor-scope +@opindex fno-for-scope +If @option{-ffor-scope} is specified, the scope of variables declared in +a @i{for-init-statement} is limited to the @samp{for} loop itself, +as specified by the C++ standard. +If @option{-fno-for-scope} is specified, the scope of variables declared in +a @i{for-init-statement} extends to the end of the enclosing scope, +as was the case in old versions of G++, and other (traditional) +implementations of C++. + +The default if neither flag is given to follow the standard, +but to allow and give a warning for old-style code that would +otherwise be invalid, or have different behavior. + +@item -fno-gnu-keywords +@opindex fno-gnu-keywords +Do not recognize @code{typeof} as a keyword, so that code can use this +word as an identifier. You can use the keyword @code{__typeof__} instead. +@option{-ansi} implies @option{-fno-gnu-keywords}. + +@item -fno-implicit-templates +@opindex fno-implicit-templates +Never emit code for non-inline templates which are instantiated +implicitly (i.e.@: by use); only emit code for explicit instantiations. +@xref{Template Instantiation}, for more information. + +@item -fno-implicit-inline-templates +@opindex fno-implicit-inline-templates +Don't emit code for implicit instantiations of inline templates, either. +The default is to handle inlines differently so that compiles with and +without optimization will need the same set of explicit instantiations. + +@item -fno-implement-inlines +@opindex fno-implement-inlines +To save space, do not emit out-of-line copies of inline functions +controlled by @samp{#pragma implementation}. This will cause linker +errors if these functions are not inlined everywhere they are called. + +@item -fms-extensions +@opindex fms-extensions +Disable pedantic warnings about constructs used in MFC, such as implicit +int and getting a pointer to member function via non-standard syntax. + +@item -fno-nonansi-builtins +@opindex fno-nonansi-builtins +Disable built-in declarations of functions that are not mandated by +ANSI/ISO C@. These include @code{ffs}, @code{alloca}, @code{_exit}, +@code{index}, @code{bzero}, @code{conjf}, and other related functions. + +@item -fno-operator-names +@opindex fno-operator-names +Do not treat the operator name keywords @code{and}, @code{bitand}, +@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as +synonyms as keywords. + +@item -fno-optional-diags +@opindex fno-optional-diags +Disable diagnostics that the standard says a compiler does not need to +issue. Currently, the only such diagnostic issued by G++ is the one for +a name having multiple meanings within a class. + +@item -fpermissive +@opindex fpermissive +Downgrade some diagnostics about nonconformant code from errors to +warnings. Thus, using @option{-fpermissive} will allow some +nonconforming code to compile. + +@item -frepo +@opindex frepo +Enable automatic template instantiation at link time. This option also +implies @option{-fno-implicit-templates}. @xref{Template +Instantiation}, for more information. + +@item -fno-rtti +@opindex fno-rtti +Disable generation of information about every class with virtual +functions for use by the C++ runtime type identification features +(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts +of the language, you can save some space by using this flag. Note that +exception handling uses the same information, but it will generate it as +needed. The @samp{dynamic_cast} operator can still be used for casts that +do not require runtime type information, i.e.@: casts to @code{void *} or to +unambiguous base classes. + +@item -fstats +@opindex fstats +Emit statistics about front-end processing at the end of the compilation. +This information is generally only useful to the G++ development team. + +@item -ftemplate-depth-@var{n} +@opindex ftemplate-depth +Set the maximum instantiation depth for template classes to @var{n}. +A limit on the template instantiation depth is needed to detect +endless recursions during template class instantiation. ANSI/ISO C++ +conforming programs must not rely on a maximum depth greater than 17. + +@item -fno-threadsafe-statics +@opindex fno-threadsafe-statics +Do not emit the extra code to use the routines specified in the C++ +ABI for thread-safe initialization of local statics. You can use this +option to reduce code size slightly in code that doesn't need to be +thread-safe. + +@item -fuse-cxa-atexit +@opindex fuse-cxa-atexit +Register destructors for objects with static storage duration with the +@code{__cxa_atexit} function rather than the @code{atexit} function. +This option is required for fully standards-compliant handling of static +destructors, but will only work if your C library supports +@code{__cxa_atexit}. + +@item -fno-use-cxa-get-exception-ptr +@opindex fno-use-cxa-get-exception-ptr +Don't use the @code{__cxa_get_exception_ptr} runtime routine. This +will cause @code{std::uncaught_exception} to be incorrect, but is necessary +if the runtime routine is not available. + +@item -fvisibility-inlines-hidden +@opindex fvisibility-inlines-hidden +This switch declares that the user does not attempt to compare +pointers to inline methods where the addresses of the two functions +were taken in different shared objects. + +The effect of this is that GCC may, effectively, mark inline methods with +@code{__attribute__ ((visibility ("hidden")))} so that they do not +appear in the export table of a DSO and do not require a PLT indirection +when used within the DSO@. Enabling this option can have a dramatic effect +on load and link times of a DSO as it massively reduces the size of the +dynamic export table when the library makes heavy use of templates. + +The behavior of this switch is not quite the same as marking the +methods as hidden directly, because it does not affect static variables +local to the function or cause the compiler to deduce that +the function is defined in only one shared object. + +You may mark a method as having a visibility explicitly to negate the +effect of the switch for that method. For example, if you do want to +compare pointers to a particular inline method, you might mark it as +having default visibility. Marking the enclosing class with explicit +visibility will have no effect. + +Explicitly instantiated inline methods are unaffected by this option +as their linkage might otherwise cross a shared library boundary. +@xref{Template Instantiation}. + +@item -fvisibility-ms-compat +@opindex fvisibility-ms-compat +This flag attempts to use visibility settings to make GCC's C++ +linkage model compatible with that of Microsoft Visual Studio. + +The flag makes these changes to GCC's linkage model: + +@enumerate +@item +It sets the default visibility to @code{hidden}, like +@option{-fvisibility=hidden}. + +@item +Types, but not their members, are not hidden by default. + +@item +The One Definition Rule is relaxed for types without explicit +visibility specifications which are defined in more than one different +shared object: those declarations are permitted if they would have +been permitted when this option was not used. +@end enumerate + +In new code it is better to use @option{-fvisibility=hidden} and +export those classes which are intended to be externally visible. +Unfortunately it is possible for code to rely, perhaps accidentally, +on the Visual Studio behavior. + +Among the consequences of these changes are that static data members +of the same type with the same name but defined in different shared +objects will be different, so changing one will not change the other; +and that pointers to function members defined in different shared +objects may not compare equal. When this flag is given, it is a +violation of the ODR to define types with the same name differently. + +@item -fno-weak +@opindex fno-weak +Do not use weak symbol support, even if it is provided by the linker. +By default, G++ will use weak symbols if they are available. This +option exists only for testing, and should not be used by end-users; +it will result in inferior code and has no benefits. This option may +be removed in a future release of G++. + +@item -nostdinc++ +@opindex nostdinc++ +Do not search for header files in the standard directories specific to +C++, but do still search the other standard directories. (This option +is used when building the C++ library.) +@end table + +In addition, these optimization, warning, and code generation options +have meanings only for C++ programs: + +@table @gcctabopt +@item -fno-default-inline +@opindex fno-default-inline +Do not assume @samp{inline} for functions defined inside a class scope. +@xref{Optimize Options,,Options That Control Optimization}. Note that these +functions will have linkage like inline functions; they just won't be +inlined by default. + +@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)} +@opindex Wabi +@opindex Wno-abi +Warn when G++ generates code that is probably not compatible with the +vendor-neutral C++ ABI@. Although an effort has been made to warn about +all such cases, there are probably some cases that are not warned about, +even though G++ is generating incompatible code. There may also be +cases where warnings are emitted even though the code that is generated +will be compatible. + +You should rewrite your code to avoid these warnings if you are +concerned about the fact that code generated by G++ may not be binary +compatible with code generated by other compilers. + +The known incompatibilities at this point include: + +@itemize @bullet + +@item +Incorrect handling of tail-padding for bit-fields. G++ may attempt to +pack data into the same byte as a base class. For example: + +@smallexample +struct A @{ virtual void f(); int f1 : 1; @}; +struct B : public A @{ int f2 : 1; @}; +@end smallexample + +@noindent +In this case, G++ will place @code{B::f2} into the same byte +as@code{A::f1}; other compilers will not. You can avoid this problem +by explicitly padding @code{A} so that its size is a multiple of the +byte size on your platform; that will cause G++ and other compilers to +layout @code{B} identically. + +@item +Incorrect handling of tail-padding for virtual bases. G++ does not use +tail padding when laying out virtual bases. For example: + +@smallexample +struct A @{ virtual void f(); char c1; @}; +struct B @{ B(); char c2; @}; +struct C : public A, public virtual B @{@}; +@end smallexample + +@noindent +In this case, G++ will not place @code{B} into the tail-padding for +@code{A}; other compilers will. You can avoid this problem by +explicitly padding @code{A} so that its size is a multiple of its +alignment (ignoring virtual base classes); that will cause G++ and other +compilers to layout @code{C} identically. + +@item +Incorrect handling of bit-fields with declared widths greater than that +of their underlying types, when the bit-fields appear in a union. For +example: + +@smallexample +union U @{ int i : 4096; @}; +@end smallexample + +@noindent +Assuming that an @code{int} does not have 4096 bits, G++ will make the +union too small by the number of bits in an @code{int}. + +@item +Empty classes can be placed at incorrect offsets. For example: + +@smallexample +struct A @{@}; + +struct B @{ + A a; + virtual void f (); +@}; + +struct C : public B, public A @{@}; +@end smallexample + +@noindent +G++ will place the @code{A} base class of @code{C} at a nonzero offset; +it should be placed at offset zero. G++ mistakenly believes that the +@code{A} data member of @code{B} is already at offset zero. + +@item +Names of template functions whose types involve @code{typename} or +template template parameters can be mangled incorrectly. + +@smallexample +template +void f(typename Q::X) @{@} + +template