[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#406015: gcc-4.1: FTBFS on kfreebsd-amd64



Package: gcc-4.1
Version: 4.1.1-21
Severity: important
Tags: patch

Hi, 

Please find attached a patch to make gcc-4.1 and gcj-4.1 buildable on 
GNU/kFreeBSD amd64. It also adds biarch support and java support for 
this architecture. The only missing part is gnat, I hope I will be able 
to bootstrap it in the next few weeks.

Could you please include this patch in the next upload? 

Thanks in advance,
Aurelien

-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-3-amd64
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)

Versions of packages gcc-4.1 depends on:
ii  binutils                     2.17-3      The GNU assembler, linker and bina
ii  cpp-4.1                      4.1.1-21    The GNU C preprocessor
ii  gcc-4.1-base                 4.1.1-21    The GNU Compiler Collection (base 
ii  libc6                        2.3.6.ds1-9 GNU C Library: Shared libraries
ii  libgcc1                      1:4.1.1-21  GCC support library
ii  libssp0                      4.1.1-21    GCC stack smashing protection libr

Versions of packages gcc-4.1 recommends:
ii  libc6-dev                    2.3.6.ds1-9 GNU C Library: Development Librari
pn  libmudflap0-dev              <none>      (no description available)

-- no debconf information
diff -u gcc-4.1-4.1.1/debian/rules.conf gcc-4.1-4.1.1/debian/rules.conf
--- gcc-4.1-4.1.1/debian/rules.conf
+++ gcc-4.1-4.1.1/debian/rules.conf
@@ -83,6 +83,10 @@
     LIBC_BIARCH_DEP := libc6-powerpc$(LS) (>= $(libc_ver))
     LIBC_BIARCH_DEV_DEP := libc6-dev-powerpc$(LS) (>= $(libc_ver))
   endif
+  ifeq ($(DEB_TARGET_ARCH),kfreebsd-amd64)
+    LIBC_BIARCH_DEV_DEP := libc0.1-dev-i386$(LS) (>= $(libc_ver))
+    LIBC_BIARCH_DEP := libc0.1-i386$(LS) (>= $(libc_ver))
+  endif
   LIBCXX_BIARCH_DEP = lib32stdc++$(CXX_SONAME)$(LS)
 endif
 
@@ -92,7 +96,7 @@
 endif
 
 ifndef DEB_CROSS
-LIBC_BUILD_DEP := libc6.1-dev (>= $(libc_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_ver)) [kfreebsd-i386 knetbsd-gnu] | libc12-dev (>= $(libc_ver)) [netbsd-elf-gnu] | libc6-dev (>= $(libc_ver))
+LIBC_BUILD_DEP := libc6.1-dev (>= $(libc_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_ver)) [kfreebsd-i386 kfreebsd-amd64 knetbsd-gnu] | libc12-dev (>= $(libc_ver)) [netbsd-elf-gnu] | libc6-dev (>= $(libc_ver))
 
 ifneq (,$(java_awt_peers))
   JAVA_BUILD_DEP := libasound2-dev [java_no_archs !hurd-i386 !kfreebsd-i386 !kfreebsd-amd64],
@@ -148,7 +152,7 @@
 
 #PASCAL_BUILD_DEP := libncurses5-dev [pascal_no_archs], tetex-bin [pascal_no_archs], libgmp3-dev [pascal_no_archs], help2man [pascal_no_archs],
 
-LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], lib32gcc1 [amd64 ppc64], lib64gcc1 [i386 powerpc sparc s390], lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64],
+LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64], lib64gcc1 [i386 powerpc sparc s390], lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64 kfreebsd-amd64],
 
 #ifeq ($(PKGSOURCE),gcc-snapshot)
 #  LIBC_BIARCH_BUILD_DEP =
@@ -405,7 +409,7 @@
 else
 # avoid it ...
 ada_no_archs    := $(strip $(foreach cpu,$(ada_no_cpus),!$(cpu)) \
-			!knetbsd-i386 !netbsd-i386 !hurd-i386)
+			!kfreebsd-amd64 !knetbsd-i386 !netbsd-i386 !hurd-i386)
 java_no_archs   := $(strip $(foreach cpu,$(java_no_cpus),!$(cpu)) \
 			!knetbsd-i386 !netbsd-i386)
 pascal_no_archs := $(strip $(foreach cpu,$(pascal_no_cpus),!$(cpu)) \
diff -u gcc-4.1-4.1.1/debian/rules.patch gcc-4.1-4.1.1/debian/rules.patch
--- gcc-4.1-4.1.1/debian/rules.patch
+++ gcc-4.1-4.1.1/debian/rules.patch
@@ -169,6 +169,7 @@
 endif
 
 ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+  debian_patches += kbsd-gnu
   debian_patches += kbsd-gnu-ada
   debian_patches += kbsd-gnu-java
 endif
@@ -240,6 +241,9 @@
     # FIXME: needed for 4.1?
     debian_patches += ppc64-biarch ppc64-ada
   endif
+  ifeq ($(DEB_TARGET_ARCH),kfreebsd-amd64)
+    debian_patches += amd64-biarch
+  endif
   ifneq ($(with_32bit_check),yes)
     debian_patches += disable-configure-run-check
   endif
diff -u gcc-4.1-4.1.1/debian/control gcc-4.1-4.1.1/debian/control
--- gcc-4.1-4.1.1/debian/control
+++ gcc-4.1-4.1.1/debian/control
@@ -4,7 +4,7 @@
 Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
 Uploaders: Matthias Klose <doko@debian.org>
 Standards-Version: 3.7.2
-Build-Depends: dpkg-dev (>= 1.13.9), libc6.1-dev (>= 2.3.6-7) [alpha ia64] | libc0.3-dev (>= 2.3.6-7) [hurd-i386] | libc0.1-dev (>= 2.3.6-7) [kfreebsd-i386 knetbsd-gnu] | libc12-dev (>= 2.3.6-7) [netbsd-elf-gnu] | libc6-dev (>= 2.3.6-7), libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], lib32gcc1 [amd64 ppc64], lib64gcc1 [i386 powerpc sparc s390], lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64], libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf, autoconf2.13, automake1.9, libtool, autogen, gawk, dejagnu (>= 1.4.3) [!hurd-i386], expect-tcl8.3 [!hurd-i386], bzip2, binutils (>= 2.16.1cvs20051214) | binutils-multiarch (>= 2.16.1cvs20051214), binutils-hppa64 (>= 2.16.1cvs20051214) [hppa], debhelper (>= 5.0), gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libmpfr-dev [!avr], locales [!hurd-i386 !knetbsd-i386 !netbsd-i386], procps [!hurd-i386], sharutils, libasound2-dev [!knetbsd-i386 !netbsd-i386 !hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], lib32asound2-dev [amd64 ppc64], lib64asound2-dev [i386 powerpc sparc s390], libxtst-dev [!knetbsd-i386 !netbsd-i386], libxt-dev [!knetbsd-i386 !netbsd-i386], libgtk2.0-dev (>= 2.4.4-2) [!knetbsd-i386 !netbsd-i386], libart-2.0-dev [!knetbsd-i386 !netbsd-i386], libcairo2-dev [!knetbsd-i386 !netbsd-i386], libgconf2-dev [!knetbsd-i386 !netbsd-i386], libxul-dev [!knetbsd-i386 !netbsd-i386 !kfreebsd-i386 !kfreebsd-amd64], fastjar [!knetbsd-i386 !netbsd-i386], gcc-4.1-source (>= 4.1.1), gcc-4.1-source (<< 4.1.2), gcc-4.1 (>= 4.1.1-12), realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81)
+Build-Depends: dpkg-dev (>= 1.13.9), libc6.1-dev (>= 2.3.6-7) [alpha ia64] | libc0.3-dev (>= 2.3.6-7) [hurd-i386] | libc0.1-dev (>= 2.3.6-7) [kfreebsd-i386 kfreebsd-amd64 knetbsd-gnu] | libc12-dev (>= 2.3.6-7) [netbsd-elf-gnu] | libc6-dev (>= 2.3.6-7), libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64], lib64gcc1 [i386 powerpc sparc s390], lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64 kfreebsd-amd64], libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf, autoconf2.13, automake1.9, libtool, autogen, gawk, dejagnu (>= 1.4.3) [!hurd-i386], expect-tcl8.3 [!hurd-i386], bzip2, binutils (>= 2.16.1cvs20051214) | binutils-multiarch (>= 2.16.1cvs20051214), binutils-hppa64 (>= 2.16.1cvs20051214) [hppa], debhelper (>= 5.0), gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libmpfr-dev [!avr], locales [!hurd-i386 !knetbsd-i386 !netbsd-i386], procps [!hurd-i386], sharutils, libasound2-dev [!knetbsd-i386 !netbsd-i386 !hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], lib32asound2-dev [amd64 ppc64], lib64asound2-dev [i386 powerpc sparc s390], libxtst-dev [!knetbsd-i386 !netbsd-i386], libxt-dev [!knetbsd-i386 !netbsd-i386], libgtk2.0-dev (>= 2.4.4-2) [!knetbsd-i386 !netbsd-i386], libart-2.0-dev [!knetbsd-i386 !netbsd-i386], libcairo2-dev [!knetbsd-i386 !netbsd-i386], libgconf2-dev [!knetbsd-i386 !netbsd-i386], libxul-dev [!knetbsd-i386 !netbsd-i386 !kfreebsd-i386 !kfreebsd-amd64], fastjar [!knetbsd-i386 !netbsd-i386], gcc-4.1-source (>= 4.1.1), gcc-4.1-source (<< 4.1.2), gcc-4.1 (>= 4.1.1-12), realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81)
 Build-Depends-Indep: doxygen (>= 1.4.2), graphviz (>= 2.2), gsfonts-x11, gjdoc
 
 Package: gcj-4.1-base
@@ -106,7 +106,7 @@
 
 Package: lib32gcj7-0
 Section: libs
-Architecture: amd64 ppc64
+Architecture: amd64 ppc64 kfreebsd-amd64
 Priority: optional
 Depends: gcj-4.1-base (= ${gcj:Version}), libgcj-common, lib32stdc++6, lib32z1
 Suggests: lib32gcj7-dbg
@@ -134,7 +134,7 @@
 
 Package: lib32gcj7-dev
 Section: libdevel
-Architecture: amd64 ppc64
+Architecture: amd64 ppc64 kfreebsd-amd64
 Priority: optional
 Depends: gcj-4.1-base (= ${gcj:Version}), libgcj7-dev (= ${gcj:Version}), lib32gcj-bc, lib32z1-dev, ${shlibs:Depends}
 Description: Java development and static library for use with gcj (32bit)
@@ -157,7 +157,7 @@
 
 Package: lib32gcj7-dbg
 Section: libdevel
-Architecture: amd64 ppc64
+Architecture: amd64 ppc64 kfreebsd-amd64
 Priority: extra
 Depends: gcj-4.1-base (= ${gcj:Version}), lib32gcj7-0 (= ${gcj:Version})
 Recommends: binutils
diff -u gcc-4.1-4.1.1/debian/rules.defs gcc-4.1-4.1.1/debian/rules.defs
--- gcc-4.1-4.1.1/debian/rules.defs
+++ gcc-4.1-4.1.1/debian/rules.defs
@@ -833,7 +833,7 @@
   export TARGET64_MACHINE
 endif
 
-biarch32_archs := /amd64/ppc64/
+biarch32_archs := /amd64/ppc64/kfreebsd-amd64/
 ifeq (biarch, $(findstring biarch,$(WITHOUT_LANG)))
   biarch32_archs :=
 endif
diff -u gcc-4.1-4.1.1/debian/rules2 gcc-4.1-4.1.1/debian/rules2
--- gcc-4.1-4.1.1/debian/rules2
+++ gcc-4.1-4.1.1/debian/rules2
@@ -1214,7 +1214,7 @@
 	    mandir=/$(PF)/share/man \
 		install
 
-ifeq ($(with_java)-$(biarch32)-$(DEB_TARGET_ARCH),yes-yes-amd64)
+ifeq ($(with_java)-$(biarch32),yes-yes)
 	rm -rf debian/tmp32
 	$(MAKE) -C $(buildlibdir)/32/libjava \
 		install DESTDIR=$(PWD)/debian/tmp32
diff -u gcc-4.1-4.1.1/debian/multiarch.inc gcc-4.1-4.1.1/debian/multiarch.inc
--- gcc-4.1-4.1.1/debian/multiarch.inc
+++ gcc-4.1-4.1.1/debian/multiarch.inc
@@ -34,0 +35,6 @@
+
+#if defined(__x86_64_kfreebsd_gnu__)
+  { "32",  "i486-kfreebsd_gnu"},
+#endif
+
+
diff -u gcc-4.1-4.1.1/debian/patches/kbsd-gnu.dpatch gcc-4.1-4.1.1/debian/patches/kbsd-gnu.dpatch
--- gcc-4.1-4.1.1/debian/patches/kbsd-gnu.dpatch
+++ gcc-4.1-4.1.1/debian/patches/kbsd-gnu.dpatch
@@ -1,8 +1,9 @@
 #! /bin/sh -e
 
 # DP: GNU/k*BSD support
-# Author: Robert Millan <robertmh@gnu.org>
-# Status: pending
+# Author: Robert Millan <rmh@aybabtu.com>
+# Status: Not yet submitted
+
 
 dir=
 if [ $# -eq 3 -a "$2" = '-d' ]; then
@@ -30,301 +31,103 @@
-diff -Nur gcc-20040724.old/boehm-gc/configure gcc-20040724/boehm-gc/configure
---- gcc-20040724.old/boehm-gc/configure	2004-06-17 21:32:41.000000000 +0200
-+++ gcc-20040724/boehm-gc/configure	2004-08-06 01:53:05.000000000 +0200
-@@ -5337,6 +5337,12 @@
- _ACEOF
- 
- 	;;
-+     *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
-+	cat >>confdefs.h <<\_ACEOF
-+#define _REENTRANT 1
-+_ACEOF
-+
-+	;;
-      *-*-aix*)
- 	cat >>confdefs.h <<\_ACEOF
- #define GC_AIX_THREADS 1
-diff -Nur gcc-20040724.old/boehm-gc/configure.ac gcc-20040724/boehm-gc/configure.ac
---- gcc-20040724.old/boehm-gc/configure.ac	2004-06-16 09:34:42.000000000 +0200
-+++ gcc-20040724/boehm-gc/configure.ac	2004-08-06 01:53:05.000000000 +0200
-@@ -138,6 +138,9 @@
- 	AC_DEFINE(GC_LINUX_THREADS)
- 	AC_DEFINE(_REENTRANT)
- 	;;
-+     *-*-gnu* | *-*-k*bsd*-gnu)
-+	AC_DEFINE(_REENTRANT)
-+	;;
-      *-*-aix*)
- 	AC_DEFINE(GC_AIX_THREADS)
- 	AC_DEFINE(_REENTRANT)
-diff -Nur gcc-20040724.old/boehm-gc/dbg_mlc.c gcc-20040724/boehm-gc/dbg_mlc.c
---- gcc-20040724.old/boehm-gc/dbg_mlc.c	2003-07-28 06:18:20.000000000 +0200
-+++ gcc-20040724/boehm-gc/dbg_mlc.c	2004-08-06 01:53:05.000000000 +0200
-@@ -59,7 +59,7 @@
- 
- # include <stdlib.h>
- 
--# if defined(LINUX) || defined(SUNOS4) || defined(SUNOS5) \
-+# if defined(LINUX) || defined(GLIBC) || defined(SUNOS4) || defined(SUNOS5) \
-      || defined(HPUX) || defined(IRIX5) || defined(OSF1)
- #   define RANDOM() random()
- # else
-diff -Nur gcc-20040724.old/boehm-gc/dyn_load.c gcc-20040724/boehm-gc/dyn_load.c
---- gcc-20040724.old/boehm-gc/dyn_load.c	2003-07-30 19:42:28.000000000 +0200
-+++ gcc-20040724/boehm-gc/dyn_load.c	2004-08-06 01:53:05.000000000 +0200
-@@ -26,7 +26,8 @@
-  * None of this is safe with dlclose and incremental collection.
-  * But then not much of anything is safe in the presence of dlclose.
-  */
--#if defined(__linux__) && !defined(_GNU_SOURCE)
-+#if (defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) \
-+  && !defined(_GNU_SOURCE)
-     /* Can't test LINUX, since this must be define before other includes */
- #   define _GNU_SOURCE
- #endif
-@@ -56,7 +57,7 @@
-     !(defined(ALPHA) && defined(OSF1)) && \
-     !defined(HPUX) && !(defined(LINUX) && defined(__ELF__)) && \
-     !defined(RS6000) && !defined(SCO_ELF) && !defined(DGUX) && \
--    !(defined(FREEBSD) && defined(__ELF__)) && \
-+    !(defined(KFREEBSD) && defined(__ELF__)) && \
-     !(defined(NETBSD) && defined(__ELF__)) && !defined(HURD) && \
-     !defined(DARWIN)
-  --> We only know how to find data segments of dynamic libraries for the
-@@ -81,7 +82,7 @@
- #endif
- 
- #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
--    (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
-+    (defined(KFREEBSD) && defined(__ELF__)) || defined(DGUX) || \
-     (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
- #   include <stddef.h>
- #   include <elf.h>
-@@ -265,7 +266,7 @@
- # endif /* SUNOS */
- 
- #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
--    (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
-+    (defined(KFREEBSD) && defined(__ELF__)) || defined(DGUX) || \
-     (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
- 
+diff -Nur gcc-4.0.2.old/gcc/config/i386/kfreebsd-gnu.h gcc-4.0.2/gcc/config/i386/kfreebsd-gnu.h
+--- gcc-4.0.2.old/gcc/config/i386/kfreebsd-gnu.h	2004-06-24 04:56:23.000000000 +0200
++++ gcc-4.0.2/gcc/config/i386/kfreebsd-gnu.h	2002-02-22 18:06:42.369039552 +0100
+@@ -1,5 +1,5 @@
+-/* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format
+-   Copyright (C) 2004
++/* Definitions for Intel 386 (and AMD x86-64) running kFreeBSD-based GNU systems with ELF format
++   Copyright (C) 2004, 2006
+    Free Software Foundation, Inc.
+    Contributed by Robert Millan.
  
-@@ -360,7 +361,7 @@
- /* For glibc 2.2.4+.  Unfortunately, it doesn't work for older	*/
- /* versions.  Thanks to Jakub Jelinek for most of the code.	*/
+@@ -22,5 +22,11 @@
  
--# if defined(LINUX) /* Are others OK here, too? */ \
-+# if defined(GLIBC) \
-      && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
-          || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) 
- 
-@@ -434,7 +435,7 @@
- 
- #define HAVE_REGISTER_MAIN_STATIC_DATA
- 
--# else /* !LINUX || version(glibc) < 2.2.4 */
-+# else /* !GLIBC || version(glibc) < 2.2.4 */
- 
- /* Dynamic loading code for Linux running ELF. Somewhat tested on
-  * Linux/x86, untested but hopefully should work on Linux/Alpha. 
-diff -Nur gcc-20040724.old/boehm-gc/include/gc.h gcc-20040724/boehm-gc/include/gc.h
---- gcc-20040724.old/boehm-gc/include/gc.h	2003-07-31 06:52:36.000000000 +0200
-+++ gcc-20040724/boehm-gc/include/gc.h	2004-08-06 01:53:05.000000000 +0200
-@@ -466,7 +466,7 @@
- #   define GC_RETURN_ADDR (GC_word)__return_address
- #endif
- 
--#ifdef __linux__
-+#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)
- # include <features.h>
- # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
-      && !defined(__ia64__)
-@@ -490,7 +490,8 @@
- /* This may also be desirable if it is possible but expensive to	*/
- /* retrieve the call chain.						*/
- #if (defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) \
--     || defined(__FreeBSD__)) & !defined(GC_CAN_SAVE_CALL_STACKS)
-+     || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
-+     ) & !defined(GC_CAN_SAVE_CALL_STACKS)
- # define GC_ADD_CALLER
- # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 
-     /* gcc knows how to retrieve return address, but we don't know */
-diff -Nur gcc-20040724.old/boehm-gc/include/private/gcconfig.h gcc-20040724/boehm-gc/include/private/gcconfig.h
---- gcc-20040724.old/boehm-gc/include/private/gcconfig.h	2004-04-06 20:05:05.000000000 +0200
-+++ gcc-20040724/boehm-gc/include/private/gcconfig.h	2004-08-06 01:53:05.000000000 +0200
-@@ -44,6 +44,14 @@
- #  endif
- # endif
- 
-+/* And one for Glibc: */
-+#if defined(LINUX) || defined(__GNU__) || defined(__GLIBC__)
-+# include <features.h>
-+#endif
-+#ifdef __GLIBC__
-+# define GLIBC
+ #undef LINK_EMULATION
+ #define LINK_EMULATION "elf_i386_fbsd"
++
++#ifdef LINK_EMULATION64
++#undef LINK_EMULATION64
++#define LINK_EMULATION64 "elf_x86_64_fbsd"
 +#endif
 +
- /* And one for NetBSD: */
- # if defined(__NetBSD__)
- #    define NETBSD
-@@ -58,6 +66,9 @@
- # if defined(__FreeBSD__)
- #    define FREEBSD
- # endif
-+# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+#    define KFREEBSD
-+# endif
- 
- /* Determine the machine type: */
- # if defined(__arm__) || defined(__thumb__)
-@@ -299,7 +310,7 @@
- #   define OPENBSD
- #   define mach_type_known
- # endif
--# if defined(FREEBSD) && (defined(i386) || defined(__i386__))
-+# if defined(KFREEBSD) && (defined(i386) || defined(__i386__))
- #   define I386
- #   define mach_type_known
- # endif
-@@ -1162,13 +1173,25 @@
- #	endif
- #	define SIG_SUSPEND SIGUSR1
- #	define SIG_THR_RESTART SIGUSR2
-+	extern char etext[];
-+	extern char * GC_FreeBSDGetDataStart();
-+#	define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext)
-+#   endif
-+#   if defined(GLIBC) && defined(KFREEBSD)
-+#	define OS_TYPE "GNU/kFreeBSD"
-+#	if !defined(GC_LINUX_THREADS) && !defined(REDIRECT_MALLOC)
-+#	    define MPROTECT_VDB
-+#	endif
-+#	define SIG_SUSPEND 57 /* arbitrary signal number <= 128 */
-+#	define SIG_THR_RESTART 58 /* arbitrary signal number <= 128 */
-+#	define SEARCH_FOR_DATA_START
-+#	define DATAEND (sbrk (0))
-+#   endif
-+#   ifdef KFREEBSD
- #	define FREEBSD_STACKBOTTOM
- #	ifdef __ELF__
- #	    define DYNAMIC_LOADING
- #	endif
--	extern char etext[];
--	extern char * GC_FreeBSDGetDataStart();
--#	define DATASTART GC_FreeBSDGetDataStart(0x1000, &etext)
- #   endif
- #   ifdef NETBSD
- #	define OS_TYPE "NETBSD"
-diff -Nur gcc-20040724.old/boehm-gc/os_dep.c gcc-20040724/boehm-gc/os_dep.c
---- gcc-20040724.old/boehm-gc/os_dep.c	2004-07-07 06:31:15.000000000 +0200
-+++ gcc-20040724/boehm-gc/os_dep.c	2004-08-06 01:53:05.000000000 +0200
-@@ -80,7 +80,7 @@
- #   define NEED_FIND_LIMIT
- # endif
- 
--#if defined(FREEBSD) && defined(I386)
-+#if defined(KFREEBSD) && defined(I386)
- #  include <machine/trap.h>
- #  if !defined(PCR)
- #    define NEED_FIND_LIMIT
-@@ -121,7 +121,7 @@
- # include <fcntl.h>
- #endif
- 
--#if defined(SUNOS5SIGS) || defined (HURD) || defined(LINUX)
-+#if defined(SUNOS5SIGS) || defined(LINUX) || defined(GLIBC)
- # ifdef SUNOS5SIGS
- #  include <sys/siginfo.h>
- # endif
-@@ -311,7 +311,7 @@
-   /* for recent Linux versions.  This seems to be the easiest way to	*/
-   /* cover all versions.						*/
- 
--# ifdef LINUX
-+# if defined(LINUX) || defined(GLIBC)
-     /* Some Linux distributions arrange to define __data_start.  Some	*/
-     /* define data_start as a weak symbol.  The latter is technically	*/
-     /* broken, since the user program may define data_start, in which	*/
-@@ -321,7 +321,7 @@
-     extern int __data_start[];
- #   pragma weak data_start
-     extern int data_start[];
--# endif /* LINUX */
-+# endif /* LINUX || GLIBC */
-   extern int _end[];
- 
-   ptr_t GC_data_start;
-@@ -330,7 +330,7 @@
-   {
-     extern ptr_t GC_find_limit();
- 
--#   ifdef LINUX
-+#   if defined(LINUX) || defined(GLIBC)
-       /* Try the easy approaches first:	*/
-       if ((ptr_t)__data_start != 0) {
- 	  GC_data_start = (ptr_t)(__data_start);
-@@ -340,7 +340,7 @@
- 	  GC_data_start = (ptr_t)(data_start);
- 	  return;
-       }
--#   endif /* LINUX */
-+#   endif /* LINUX || GLIBC */
-     GC_data_start = GC_find_limit((ptr_t)(_end), FALSE);
-   }
- #endif
-@@ -2175,13 +2175,13 @@
- #endif /* SUNOS4 || FREEBSD */
- 
- #if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX) \
--    || defined(HURD)
-+    || defined(GLIBC)
- # ifdef __STDC__
-     typedef void (* SIG_PF)(int);
- # else
-     typedef void (* SIG_PF)();
- # endif
--#endif /* SUNOS5SIGS || OSF1 || LINUX || HURD */
-+#endif /* SUNOS5SIGS || OSF1 || LINUX || GLIBC */
- 
- #if defined(MSWIN32)
-     typedef LPTOP_LEVEL_EXCEPTION_FILTER SIG_PF;
-@@ -2301,7 +2301,7 @@
- 
- /*ARGSUSED*/
- #if !defined(DARWIN)
--# if defined (SUNOS4) || defined(FREEBSD)
-+# if defined (SUNOS4) || defined(KFREEBSD)
-     void GC_write_fault_handler(sig, code, scp, addr)
-     int sig, code;
-     struct sigcontext *scp;
-@@ -2312,11 +2312,11 @@
-               	    || (FC_CODE(code) == FC_OBJERR \
-               	       && FC_ERRNO(code) == FC_PROT))
- #   endif
--#   ifdef FREEBSD
-+#   ifdef KFREEBSD
- #     define SIG_OK (sig == SIGBUS)
- #     define CODE_OK (code == BUS_PAGE_FAULT)
- #   endif
--# endif /* SUNOS4 || FREEBSD */
-+# endif /* SUNOS4 || KFREEBSD */
- 
- # if defined(IRIX5) || defined(OSF1) || defined(HURD)
- #   include <errno.h>
-@@ -3831,7 +3831,7 @@
- /* I suspect the following works for most X86 *nix variants, so 	*/
- /* long as the frame pointer is explicitly stored.  In the case of gcc,	*/
- /* compiler flags (e.g. -fomit-frame-pointer) determine whether it is.	*/
--#if defined(I386) && defined(LINUX) && defined(SAVE_CALL_CHAIN)
-+#if defined(I386) && (defined(LINUX) || defined(GLIBC)) && defined(SAVE_CALL_CHAIN)
- #   include <features.h>
- 
-     struct frame {
-@@ -3842,7 +3842,7 @@
- #endif
+ #undef REG_NAME
+ #define REG_NAME(reg) sc_ ## reg
+diff -Nur gcc-4.0.2.old/gcc/config/i386/linux64.h gcc-4.0.2/gcc/config/i386/linux64.h
+--- gcc-4.0.2.old/gcc/config/i386/linux64.h	2004-11-27 23:29:34.000000000 +0100
++++ gcc-4.0.2/gcc/config/i386/linux64.h	2002-02-22 18:07:41.220092832 +0100
+@@ -1,5 +1,5 @@
+ /* Definitions for AMD x86-64 running Linux-based GNU systems with ELF format.
+-   Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
++   Copyright (C) 2001, 2002, 2004, 2006 Free Software Foundation, Inc.
+    Contributed by Jan Hubicka <jh@suse.cz>, based on linux.h.
+ 
+ This file is part of GCC.
+@@ -54,14 +54,27 @@
+    When the -shared link option is used a final link is not being
+    done.  */
+ 
++/* These macros may be overridden in i386/k*bsd-gnu.h.  */
++#define LINK_EMULATION		"elf_i386"
++#define LINK_EMULATION64	"elf_x86_64"
++#define DYNAMIC_LINKER		"/lib/ld-linux.so.2"
++#define DYNAMIC_LINKER64	"/lib64/ld-linux-x86-64.so.2"
++
++#undef  SUBTARGET_EXTRA_SPECS
++#define SUBTARGET_EXTRA_SPECS \
++  { "link_emulation", LINK_EMULATION },\
++  { "link_emulation64", LINK_EMULATION64 },\
++  { "dynamic_linker", DYNAMIC_LINKER },\
++  { "dynamic_linker64", DYNAMIC_LINKER64 }
++
+ #undef	LINK_SPEC
+-#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
++#define LINK_SPEC "%{!m32:-m %(link_emulation64)} %{m32:-m %(link_emulation)} \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+       %{rdynamic:-export-dynamic} \
+-      %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+-      %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
++      %{m32:%{!dynamic-linker:-dynamic-linker %(dynamic_linker)}} \
++      %{!m32:%{!dynamic-linker:-dynamic-linker %(dynamic_linker64)}}} \
+     %{static:-static}}"
+ 
+ #define MULTILIB_DEFAULTS { "m64" }
+diff -Nur gcc-4.0.2.old/gcc/config/kfreebsd-gnu.h gcc-4.0.2/gcc/config/kfreebsd-gnu.h
+--- gcc-4.0.2.old/gcc/config/kfreebsd-gnu.h	2004-06-24 04:56:23.000000000 +0200
++++ gcc-4.0.2/gcc/config/kfreebsd-gnu.h	2002-02-22 18:01:48.768673592 +0100
+@@ -34,3 +34,8 @@
  
- #if defined(SPARC)
--#  if defined(LINUX)
-+#  if defined(LINUX) || defined(GLIBC)
- #    include <features.h>
+ #undef DYNAMIC_LINKER
+ #define DYNAMIC_LINKER "/lib/ld.so.1"
++
++#ifdef DYNAMIC_LINKER64
++#undef DYNAMIC_LINKER64
++#define DYNAMIC_LINKER64 "/lib/ld-kfreebsd-x86-64.so.1"
++#endif
+diff -Nur gcc-4.0.2.old/gcc/config/knetbsd-gnu.h gcc-4.0.2/gcc/config/knetbsd-gnu.h
+--- gcc-4.0.2.old/gcc/config/knetbsd-gnu.h	2004-06-24 04:56:23.000000000 +0200
++++ gcc-4.0.2/gcc/config/knetbsd-gnu.h	2002-02-22 18:02:05.581117712 +0100
+@@ -34,3 +34,8 @@
  
-      struct frame {
+ #undef DYNAMIC_LINKER
+ #define DYNAMIC_LINKER "/lib/ld.so.1"
++
++#ifdef DYNAMIC_LINKER64
++#undef DYNAMIC_LINKER64
++#define DYNAMIC_LINKER64 "/lib/ld-knetbsd-x86-64.so.1"
++#endif
+diff -Nur gcc-4.0.2.old/gcc/config.gcc gcc-4.0.2/gcc/config.gcc
+--- gcc-4.0.2.old/gcc/config.gcc	2005-08-09 12:57:04.000000000 +0200
++++ gcc-4.0.2/gcc/config.gcc	2002-02-22 18:04:37.990947896 +0100
+@@ -1012,8 +1012,8 @@
+ 	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" ;;
++	x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;;
++	x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h i386/knetbsd-gnu.h" ;;
+ 	esac
+ 	tmake_file="${tmake_file} i386/t-linux64"
+ 	;;
+
diff -u gcc-4.1-4.1.1/debian/patches/kbsd-gnu-java.dpatch gcc-4.1-4.1.1/debian/patches/kbsd-gnu-java.dpatch
--- gcc-4.1-4.1.1/debian/patches/kbsd-gnu-java.dpatch
+++ gcc-4.1-4.1.1/debian/patches/kbsd-gnu-java.dpatch
@@ -141,6 +141,17 @@
  #    define FREEBSD
  # endif
  
+@@ -334,6 +334,10 @@
+ #   define I386
+ #   define mach_type_known
+ # endif
++# if defined(FREEBSD) && defined(__x86_64__)
++#   define X86_64
++#   define mach_type_known
++# endif
+ # if defined(__NetBSD__) && (defined(i386) || defined(__i386__))
+ #   define I386
+ #   define mach_type_known
 @@ -1223,8 +1223,15 @@
  #	ifndef GC_FREEBSD_THREADS
  #	    define MPROTECT_VDB
@@ -304,0 +316,21 @@
+diff -ur gcj-4.1-4.1.0/src/boehm-gc/os_dep.c.orig gcj-4.1-4.1.0/src/boehm-gc/os_dep.c
+--- gcj-4.1-4.1.0/src/boehm-gc/os_dep.c.orig	2006-02-28 09:39:11.000000000 +0100
++++ gcj-4.1-4.1.0/src/boehm-gc/os_dep.c	2006-05-12 08:34:57.000000000 +0200
+@@ -84,7 +84,7 @@
+ #   define NEED_FIND_LIMIT
+ # endif
+ 
+-#if defined(FREEBSD) && (defined(I386) || defined(powerpc) || defined(__powerpc__))
++#if defined(FREEBSD) && (defined(I386) || defined(X86_64) || defined(powerpc) || defined(__powerpc__))
+ #  include <machine/trap.h>
+ #  if !defined(PCR)
+ #    define NEED_FIND_LIMIT
+@@ -1392,7 +1392,7 @@
+ }
+ # endif
+ 
+-# if defined(FREEBSD) && (defined(I386) || defined(powerpc) || defined(__powerpc__)) && !defined(PCR)
++# if defined(FREEBSD) && (defined(I386) || defined(X86_64) || defined(powerpc) || defined(__powerpc__)) && !defined(PCR)
+ /* Its unclear whether this should be identical to the above, or 	*/
+ /* whether it should apply to non-X86 architectures.			*/
+ /* For now we don't assume that there is always an empty page after	*/

Reply to: