patches/gcc/4.4.6/280-freebsd.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 17:54:21 2011 +0200 (2011-07-17)
changeset 2888 dd71df95903a
parent 2149 98b7806295cc
permissions -rw-r--r--
cc/gcc: pass the companion libs prefix to cc_core

In case of canadian-cross, the companion libraries are not the same for
the core cc (they run on 'build') as they are for the final cc (they run
on 'host').

Prepare for this differentiation (coming later), while retaining the
current behavior (to use the same compblibs).

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