patches/gcc/4.4.4/280-freebsd.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun May 16 19:41:53 2010 +0200 (2010-05-16)
changeset 1953 a93af06e180d
child 2148 ada9128c98b8
permissions -rw-r--r--
cc/gcc: add latest version

Add 4.4.4 and forward-port patchset from 4.4.3
     1 diff -durN gcc-4.4.0.orig/gcc/config/freebsd-spec.h gcc-4.4.0/gcc/config/freebsd-spec.h
     2 
     3 diff -durN gcc-4.4.4.orig/gcc/config/freebsd-spec.h gcc-4.4.4/gcc/config/freebsd-spec.h
     4 --- gcc-4.4.4.orig/gcc/config/freebsd-spec.h	2009-04-10 01:23:07.000000000 +0200
     5 +++ gcc-4.4.4/gcc/config/freebsd-spec.h	2010-05-16 19:36:15.000000000 +0200
     6 @@ -61,6 +61,8 @@
     7  	builtin_assert ("system=unix");					\
     8  	builtin_assert ("system=bsd");					\
     9  	builtin_assert ("system=FreeBSD");				\
    10 +	if(!(flag_iso && (c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)))	\
    11 +		builtin_define("_LONGLONG");				\
    12  	FBSD_TARGET_CPU_CPP_BUILTINS();					\
    13      }									\
    14    while (0)
    15 diff -durN gcc-4.4.4.orig/gcc/config/t-freebsd-eh gcc-4.4.4/gcc/config/t-freebsd-eh
    16 --- gcc-4.4.4.orig/gcc/config/t-freebsd-eh	1970-01-01 01:00:00.000000000 +0100
    17 +++ gcc-4.4.4/gcc/config/t-freebsd-eh	2010-05-16 19:36:15.000000000 +0200
    18 @@ -0,0 +1,4 @@
    19 +# Use unwind-dw2-fde-glibc
    20 +LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
    21 +  $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
    22 +LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
    23 diff -durN gcc-4.4.4.orig/gcc/config.gcc gcc-4.4.4/gcc/config.gcc
    24 --- gcc-4.4.4.orig/gcc/config.gcc	2010-05-16 19:13:30.000000000 +0200
    25 +++ gcc-4.4.4/gcc/config.gcc	2010-05-16 19:36:15.000000000 +0200
    26 @@ -456,7 +456,7 @@
    27    # pleases around the provided core setting.
    28    gas=yes
    29    gnu_ld=yes
    30 -  extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
    31 +  extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
    32    fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
    33    tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}"
    34    tmake_file="t-slibgcc-elf-ver t-freebsd"
    35 @@ -1042,6 +1042,10 @@
    36  	;;
    37  i[34567]86-*-freebsd*)
    38  	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
    39 +	fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
    40 +	if test ${fbsd_major} -ge 7; then
    41 +		tmake_file="${tmake_file} t-freebsd-eh"
    42 +	fi
    43  	;;
    44  x86_64-*-freebsd*)
    45  	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"
    46 diff -durN gcc-4.4.4.orig/gcc/crtstuff.c gcc-4.4.4/gcc/crtstuff.c
    47 --- gcc-4.4.4.orig/gcc/crtstuff.c	2009-04-10 01:23:07.000000000 +0200
    48 +++ gcc-4.4.4/gcc/crtstuff.c	2010-05-16 19:36:15.000000000 +0200
    49 @@ -85,13 +85,15 @@
    50      && !defined(OBJECT_FORMAT_FLAT) \
    51      && defined(HAVE_LD_EH_FRAME_HDR) \
    52      && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
    53 -    && defined(__GLIBC__) && __GLIBC__ >= 2
    54 +    && ((defined(__GLIBC__) && __GLIBC__ >= 2) \
    55 +    || (defined(__FreeBSD_version) && __FreeBSD_version >= 700022))
    56  #include <link.h>
    57  /* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h.
    58     But it doesn't use PT_GNU_EH_FRAME ELF segment currently.  */
    59  # if !defined(__UCLIBC__) \
    60 -     && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
    61 -     || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
    62 +     || (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
    63 +     || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) \
    64 +     || (__FreeBSD_version >= 700022)
    65  #  define USE_PT_GNU_EH_FRAME
    66  # endif
    67  #endif
    68 diff -durN gcc-4.4.4.orig/gcc/unwind-dw2-fde-glibc.c gcc-4.4.4/gcc/unwind-dw2-fde-glibc.c
    69 --- gcc-4.4.4.orig/gcc/unwind-dw2-fde-glibc.c	2009-04-10 01:23:07.000000000 +0200
    70 +++ gcc-4.4.4/gcc/unwind-dw2-fde-glibc.c	2010-05-16 19:36:15.000000000 +0200
    71 @@ -46,8 +46,9 @@
    72  #include "gthr.h"
    73  
    74  #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
    75 -    && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
    76 -	|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
    77 +    && ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
    78 +	|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) \
    79 +    || (__FreeBSD_version >= 700022 ))
    80  
    81  #ifndef __RELOC_POINTER
    82  # define __RELOC_POINTER(ptr, base) ((ptr) + (base))
    83 @@ -63,6 +64,13 @@
    84  #define PT_GNU_EH_FRAME (PT_LOOS + 0x474e550)
    85  #endif
    86  
    87 +/* Support FreeBSD */
    88 +#ifndef ElfW
    89 +# ifdef __ElfN
    90 +#  define ElfW __ElfN
    91 +# endif
    92 +#endif
    93 +
    94  struct unw_eh_callback_data
    95  {
    96    _Unwind_Ptr pc;