patches/gcc/4.2.3/300-fortran-signed-TImode.patch
author Remy Bohmer <linux@bohmer.net>
Thu May 27 23:18:19 2010 +0200 (2010-05-27)
changeset 2060 51e4597b07fc
parent 677 3505660ff419
permissions -rw-r--r--
scripts: add option to strip all toolchain executables

To reduce filesizes of the toolchain and even improve build times
of projects to be build with this toolchain it is usefull to strip
the delivered toolchain executables. Since it is not likely that we
will debug the toolchain executables itself we do not need the
debug information inside the executables itself.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
     1 Fix building gfortran for ARM.
     2 http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01010.html
     3 ----
     4 
     5 The patch below fixes a crash building libgfortran on arm-linux-gnueabi.
     6 
     7 This target doesn't really have a 128-bit integer type, however it does use 
     8 TImode to represent the return value of certain special ABI defined library 
     9 functions. This results in type_for_size(TImode) being called.
    10 
    11 Because TImode deosn't correspond to any gfortran integer kind 
    12 gfc_type_for_size returns NULL and we segfault shortly after.
    13 
    14 The patch below fixes this by making gfc_type_for_size handle TImode in the 
    15 same way as the C frontend.
    16 
    17 Tested on x86_64-linux and arm-linux-gnueabi.
    18 Applied to trunk.
    19 
    20 Paul
    21 
    22 2007-05-15  Paul Brook  <paul@codesourcery.com>
    23 
    24     gcc/fortran/
    25     * trans-types.c (gfc_type_for_size): Handle signed TImode.
    26 
    27 diff -durN gcc-4.2.3.old/gcc/fortran/trans-types.c gcc-4.2.3/gcc/fortran/trans-types.c
    28 --- gcc-4.2.3.old/gcc/fortran/trans-types.c	2007-08-31 10:27:50.000000000 +0200
    29 +++ gcc-4.2.3/gcc/fortran/trans-types.c	2008-07-17 09:54:20.000000000 +0200
    30 @@ -1799,6 +1799,13 @@
    31  	  if (type && bits == TYPE_PRECISION (type))
    32  	    return type;
    33  	}
    34 +
    35 +	/* Handle TImode as a special case because it is used by some backends
    36 +	   (eg. ARM) even though it is not available for normal use.  */
    37 +#if HOST_BITS_PER_WIDE_INT >= 64
    38 +	if (bits == TYPE_PRECISION (intTI_type_node))
    39 +	  return intTI_type_node;
    40 +#endif
    41      }
    42    else
    43      {