Re: [PATCH] disable __size_t macro on GNU/kFreeBSD

2012-02-12 Thread Robert Millan
El 12 de febrer de 2012 1:09, Gerald Pfeifer ger...@pfeifer.com ha escrit:
 Given that both Mike and me considered this patch on the obvious
 side, I now committed the following variation thereof on trunk.

Thanks!

-- 
Robert Millan


Re: [PATCH] disable __size_t macro on GNU/kFreeBSD

2012-02-11 Thread Robert Millan
El 6 de febrer de 2012 19:31, Mike Stump mikest...@comcast.net ha escrit:
 Looks obvious to me as well.  I'd say let's put it in...

 Is this patch approved, then?

 I've not seen anyone approve it yet.  I'm not a maintainer for that area, so, 
 I cannot.

Who can approve it?  Looking at the maintainers file it's not clear to
me which area does this belong to.

-- 
Robert Millan


Re: [PATCH] disable __size_t macro on GNU/kFreeBSD

2012-02-04 Thread Robert Millan
El 1 de febrer de 2012 1:06, Mike Stump mikest...@comcast.net ha escrit:
 On Jan 31, 2012, at 2:29 PM, Gerald Pfeifer wrote:
 On Sun, 29 Jan 2012, Robert Millan wrote:
 Please consider this patch to stddef.h. GNU/kFreeBSD has the same
 problem with __size_t as FreeBSD does, since it inherits many kernel
 headers from FreeBSD.

 The patch looks obvious to me, and I'll be happy to apply for
 Robert if approved.  Any taker?

 Looks obvious to me as well.  I'd say let's put it in...

Is this patch approved, then?

-- 
Robert Millan


[PATCH] disable __size_t macro on GNU/kFreeBSD

2012-01-28 Thread Robert Millan
Hi,

Please consider this patch to stddef.h. GNU/kFreeBSD has the same
problem with __size_t as FreeBSD does, since it inherits many kernel
headers from FreeBSD.

-- 
Robert Millan
2012-01-29  Robert Millan  r...@gnu.org

* ginclude/stddef.h [__FreeBSD_kernel__] (__size_t): Do not define.

Index: ginclude/stddef.h
===
--- ginclude/stddef.h   (revision 183670)
+++ ginclude/stddef.h   (working copy)
@@ -200,7 +200,7 @@
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
-#if defined (__FreeBSD__)  (__FreeBSD__ = 5)
+#if (defined (__FreeBSD__)  (__FreeBSD__ = 5)) || 
defined(__FreeBSD_kernel__)
 /* __size_t is a typedef on FreeBSD 5!, must not trash it. */
 #else
 #define __size_t


Re: PING: Re: [PATCH] small build fix

2012-01-16 Thread Robert Millan
El 27 de desembre de 2011 12:25, Robert Millan r...@gnu.org ha escrit:
 El 19 de desembre de 2011 21:04, Robert Millan r...@gnu.org ha escrit:
 This small patch fixes a build regression on GNU/kFreeBSD.

 Ping!

Ping again.  Please note that Gerald Pfeifer has volunteered to commit
the patch once it is approved.

-- 
Robert Millan
2011-12-19  Robert Millan  r...@gnu.org

Fix build regression on GNU/kFreeBSD.

* config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKERX32): New macro.

--- a/src/gcc/config/kfreebsd-gnu.h~2011-07-21 17:31:44.0 +0200
+++ b/src/gcc/config/kfreebsd-gnu.h 2011-12-19 20:20:26.961301396 +0100
@@ -33,3 +33,4 @@
 #define GNU_USER_DYNAMIC_LINKERGLIBC_DYNAMIC_LINKER
 #define GNU_USER_DYNAMIC_LINKER32  GLIBC_DYNAMIC_LINKER32
 #define GNU_USER_DYNAMIC_LINKER64  GLIBC_DYNAMIC_LINKER64
+#define GNU_USER_DYNAMIC_LINKERX32 GLIBC_DYNAMIC_LINKERX32


[PATCH] small build fix

2011-12-19 Thread Robert Millan
This small patch fixes a build regression on GNU/kFreeBSD.

-- 
Robert Millan
2011-12-19  Robert Millan  r...@gnu.org

	Fix build regression on GNU/kFreeBSD.

	* config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKERX32): New macro.

--- a/src/gcc/config/kfreebsd-gnu.h~	2011-07-21 17:31:44.0 +0200
+++ b/src/gcc/config/kfreebsd-gnu.h	2011-12-19 20:20:26.961301396 +0100
@@ -33,3 +33,4 @@
 #define GNU_USER_DYNAMIC_LINKERGLIBC_DYNAMIC_LINKER
 #define GNU_USER_DYNAMIC_LINKER32  GLIBC_DYNAMIC_LINKER32
 #define GNU_USER_DYNAMIC_LINKER64  GLIBC_DYNAMIC_LINKER64
+#define GNU_USER_DYNAMIC_LINKERX32 GLIBC_DYNAMIC_LINKERX32


Re: [PATCH] GNU/kFreeBSD systems running on MIPS

2011-08-17 Thread Robert Millan
Hi!

2011/7/26 Rainer Orth r...@cebitec.uni-bielefeld.de:
 Robert,

 2011/7/25 Richard Sandiford rdsandif...@googlemail.com:
 Robert Millan r...@gnu.org writes:
 This patch adds support for GNU/kFreeBSD systems running on MIPS.

 Looks good.  However, Rainer's in the middle of moving things from gcc/
 to libgcc/ -- where they belong -- and committing a new port now would
 interfere with that.  If it's OK, I'd like to hold off applying this
 until Rainer's finished his changes.
 I'm in the middle of moving shlib support (another day), need to rebase
 crtstuff and libgcc1, and finish libgcc2.

My patch still applies cleanly to current HEAD, has this migration
happened already?  If not, what's the current ETA?  I'll have almost
no spare time after this week, I'd like to sort this out before/during
the weekend if possible.

Thanks!

-- 
Robert Millan


Re: [PATCH] GNU/kFreeBSD systems running on MIPS

2011-07-26 Thread Robert Millan
2011/7/25 Richard Sandiford rdsandif...@googlemail.com:
 Robert Millan r...@gnu.org writes:
 This patch adds support for GNU/kFreeBSD systems running on MIPS.

 Looks good.  However, Rainer's in the middle of moving things from gcc/
 to libgcc/ -- where they belong -- and committing a new port now would
 interfere with that.  If it's OK, I'd like to hold off applying this
 until Rainer's finished his changes.

It's ok.  Could you give a rough estimate? (few days / weeks / months)

-- 
Robert Millan


Re: [PATCH] GNU/kFreeBSD systems running on MIPS

2011-07-26 Thread Robert Millan
2011/7/26 Rainer Orth r...@cebitec.uni-bielefeld.de:
 I'm in the middle of moving shlib support (another day), need to rebase
 crtstuff and libgcc1, and finish libgcc2.

 I hope to be ready within two or three weeks.

Ok then.  I'd appreciate if you can send me a reminder via private
mail when you've finished.

Best regards

-- 
Robert Millan


[PATCH] GNU/kFreeBSD systems running on MIPS

2011-07-21 Thread Robert Millan
This patch adds support for GNU/kFreeBSD systems running on MIPS.

-- 
Robert Millan
2011-07-22  Robert Millan  r...@gnu.org

	Support for GNU/kFreeBSD systems running on MIPS.

	* config.gcc: Detect mips*-*-kfreebsd*-gnu.
	* config.host: Likewise.
	* config/mips/kfreebsd-gnu.h: New file.
	* config/mips/kfreebsd-gnu64.h: New file.
	* config/mips/gnu-user.h: Restrict `-march=native' support to GNU/Linux.

Index: libgcc/config.host
===
--- libgcc/config.host	(revision 176595)
+++ libgcc/config.host	(working copy)
@@ -478,6 +478,14 @@
 	tmake_file={$tmake_file} t-crtfm
 	md_unwind_header=mips/linux-unwind.h
 	;;
+mips64*-*-kfreebsd*-gnu)
+	extra_parts=$extra_parts crtfastmath.o
+	tmake_file={$tmake_file} t-crtfm
+	;;
+mips*-*-kfreebsd*-gnu)			# GNU/kFreeBSD MIPS, either endian.
+	extra_parts=$extra_parts crtfastmath.o
+	tmake_file={$tmake_file} t-crtfm
+	;;
 mips*-*-openbsd*)
 	;;
 mipsisa32-*-elf* | mipsisa32el-*-elf*)
Index: gcc/config.gcc
===
--- gcc/config.gcc	(revision 176595)
+++ gcc/config.gcc	(working copy)
@@ -1819,20 +1819,28 @@
 	tm_file=elfos.h ${tm_file} mips/elf.h netbsd.h netbsd-elf.h mips/netbsd.h
 	extra_options=${extra_options} netbsd.opt netbsd-elf.opt
 	;;
-mips64*-*-linux* | mipsisa64*-*-linux*)
-	tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h
+mips64*-*-linux* | mipsisa64*-*-linux* | mips64*-*-kfreebsd*-gnu | mipsisa64*-*-kfreebsd*-gnu)
+	tm_file=dbxelf.h elfos.h gnu-user.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h
 	tmake_file=${tmake_file} mips/t-linux64 mips/t-libgcc-mips16
 	tm_defines=${tm_defines} MIPS_ABI_DEFAULT=ABI_N32
+	case ${target_os} in
+		linux*)
+			tm_file=${tm_file} linux.h mips/linux64.h
+			;;
+		kfreebsd*-gnu)
+			tm_file=${tm_file} kfreebsd-gnu.h mips/kfreebsd-gnu64.h
+			;;
+	esac
 	case ${target} in
-		mips64el-st-linux-gnu)
+		mips64el-st-*)
 			tm_file=${tm_file} mips/st.h
 			tmake_file=${tmake_file} mips/t-st
 			;;
-		mips64octeon*-*-linux*)
+		mips64octeon*-*-*)
 			tm_defines=${tm_defines} MIPS_CPU_STRING_DEFAULT=\\\octeon\\\
 			target_cpu_default=MASK_SOFT_FLOAT_ABI
 			;;
-		mipsisa64r2*-*-linux*)
+		mipsisa64r2*-*-*)
 			tm_defines=${tm_defines} MIPS_ISA_DEFAULT=65
 			;;
 	esac
@@ -1841,11 +1849,27 @@
 	gas=yes
 	test x$with_llsc != x || with_llsc=yes
 	;;
-mips*-*-linux*)# Linux MIPS, either endian.
-tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h
+mips*-*-linux* | mips*-*-kfreebsd*-gnu)			# GNU/* MIPS, either endian.
+tm_file=dbxelf.h elfos.h gnu-user.h glibc-stdint.h ${tm_file} mips/gnu-user.h
 	tmake_file=${tmake_file} mips/t-libgcc-mips16
+	case ${target_os} in
+		linux*)
+			tm_file=${tm_file} linux.h mips/linux.h
+			;;
+		kfreebsd*-gnu)
+			tm_file=${tm_file} kfreebsd-gnu.h mips/kfreebsd-gnu.h
+			;;
+	esac
 	if test x$enable_targets = xall; then
-		tm_file=${tm_file} mips/gnu-user64.h mips/linux64.h
+		tm_file=${tm_file} mips/gnu-user64.h
+		case ${target_os} in
+			linux*)
+tm_file=${tm_file} mips/linux64.h
+;;
+			kfreebsd*-gnu)
+tm_file=${tm_file} mips/kfreebsd-gnu64.h
+;;
+		esac
 		tmake_file=${tmake_file} mips/t-linux64
 		tm_defines=${tm_defines} MIPS_ABI_DEFAULT=ABI_32
 	fi
Index: gcc/config/mips/gnu-user.h
===
--- gcc/config/mips/gnu-user.h	(revision 176595)
+++ gcc/config/mips/gnu-user.h	(working copy)
@@ -106,8 +106,8 @@
 #endif
 
 /* -march=native handling only makes sense with compiler running on
-   a MIPS chip.  */
-#if defined(__mips__)
+   a MIPS chip.  Also, for now only Linux targets are supported.  */
+#if defined(__mips__)  defined(__linux__)
 extern const char *host_detect_local_cpu (int argc, const char **argv);
 # define EXTRA_SPEC_FUNCTIONS \
   { local_cpu_detect, host_detect_local_cpu },
Index: gcc/config/mips/kfreebsd-gnu64.h
===
--- gcc/config/mips/kfreebsd-gnu64.h	(revision 0)
+++ gcc/config/mips/kfreebsd-gnu64.h	(revision 0)
@@ -0,0 +1,31 @@
+/* Definitions for MIPS running kFreeBSD-based GNU systems with ELF format
+   using n32/64 abi.
+   Copyright (C) 2011
+   Free Software Foundation, Inc.
+   Contributed by Robert Millan.
+
+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

[PATCH] split mips/gnu-user.h from mips/linux.h

2011-07-19 Thread Robert Millan
Hi!

This patch splits those bits from:

config/mips/linux.h
config/mips/linux64.h

which are applicable to GNU userland, into:

config/mips/gnu-user.h
config/mips/gnu-user64

respectively.  It is analogous to the split that was performed for
config/i386/* by Joseph Myers in r172271.

I've verified that my patch doesn't cause any regression (resulting
gcc/xgcc is identical both for mips-*-linux and mips64*-linux).

-- 
Robert Millan
2011-07-19  Robert Millan  r...@gnu.org

	* config/mips/gnu-user.h: Copy from linux.h.  Update comments.
	(GLIBC_DYNAMIC_LINKER): Remove.

	* config/mips/gnu-user64.h: Copy from linux64.h.  Update comments.
	(GLIBC_DYNAMIC_LINKER32, GLIBC_DYNAMIC_LINKER64)
	(GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32)
	(BIONIC_DYNAMIC_LINKERN32, GNU_USER_DYNAMIC_LINKERN32): Remove.
	(LINK_SPEC): Use GNU_USER_DYNAMIC_LINKER32,
	GNU_USER_DYNAMIC_LINKER64 and GNU_USER_LINK_EMULATIONN32.

	* config/mips/linux.h: Remove everything except for ...
	(GLIBC_DYNAMIC_LINKER): ... this macro.

	* config/mips/linux64.h: Remove everything except for ...
	(GLIBC_DYNAMIC_LINKER32, GLIBC_DYNAMIC_LINKER64)
	(GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32)
	(BIONIC_DYNAMIC_LINKERN32): ... these macros.
	(GNU_USER_LINK_EMULATION32, GNU_USER_LINK_EMULATION64)
	(GNU_USER_LINK_EMULATIONN32): New macros.

	* config.gcc (mips64*-*-linux* | mipsisa64*-*-linux* |
	mips-*-linux*): Use the new headers.

Index: gcc/config.gcc
===
--- gcc/config.gcc	(revision 176425)
+++ gcc/config.gcc	(working copy)
@@ -1820,7 +1820,7 @@
 	extra_options=${extra_options} netbsd.opt netbsd-elf.opt
 	;;
 mips64*-*-linux* | mipsisa64*-*-linux*)
-	tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/linux.h mips/linux64.h
+	tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.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
@@ -1842,7 +1842,7 @@
 	test x$with_llsc != x || with_llsc=yes
 	;;
 mips*-*-linux*)# Linux MIPS, either endian.
-tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/linux.h
+tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h
 	tmake_file=${tmake_file} mips/t-libgcc-mips16
 	if test x$enable_targets = xall; then
 		tm_file=${tm_file} mips/linux64.h
Index: gcc/config/mips/linux.h
===
--- gcc/config/mips/linux.h	(revision 176425)
+++ gcc/config/mips/linux.h	(working copy)
@@ -1,6 +1,5 @@
 /* Definitions for MIPS running Linux-based GNU systems with ELF format.
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2008, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -18,125 +17,4 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef WCHAR_TYPE
-#define WCHAR_TYPE int
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE 32
-
-#undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME mips_declare_object_name
-
-/* If we don't set MASK_ABICALLS, we can't default to PIC.  */
-#undef TARGET_DEFAULT
-#define TARGET_DEFAULT MASK_ABICALLS
-
-#define TARGET_OS_CPP_BUILTINS()\
-  do {\
-GNU_USER_TARGET_OS_CPP_BUILTINS();\
-/* The GNU C++ standard library requires this.  */		\
-if (c_dialect_cxx ())	\
-  builtin_define (_GNU_SOURCE);\
-  } while (0)
-
-#undef SUBTARGET_CPP_SPEC
-#define SUBTARGET_CPP_SPEC %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
-
-/* A standard GNU/Linux mapping.  On most targets, it is included in
-   CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC
-   and provides this hook instead.  */
-#undef SUBTARGET_CC1_SPEC
-#define SUBTARGET_CC1_SPEC %{profile:-p}
-
-/* From iris5.h */
-/* -G is incompatible with -KPIC which is the default, so only allow objects
-   in the small data section if the user explicitly asks for it.  */
-#undef MIPS_DEFAULT_GVALUE
-#define MIPS_DEFAULT_GVALUE 0
-
 #define GLIBC_DYNAMIC_LINKER /lib/ld.so.1
-
-/* Borrowed from sparc/linux.h */
-#undef LINK_SPEC
-#define LINK_SPEC \
- %(endian_spec) \
-  %{shared:-shared} \
-  %{!shared: \
-%{!static: \
-  %{rdynamic:-export-dynamic} \
-  -dynamic-linker  GNU_USER_DYNAMIC_LINKER } \
-  %{static:-static}}
-
-#undef SUBTARGET_ASM_SPEC
-#define SUBTARGET_ASM_SPEC \
-  %{!mno-abicalls:%{mplt:-call_nonpic;:-KPIC}}
-
-/* The MIPS assembler has different syntax for .set. We set it to
-   .dummy to trap any errors.  */
-#undef SET_ASM_OP
-#define SET_ASM_OP \t.dummy\t
-
-#undef ASM_OUTPUT_DEF
-#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)\
- do {	\
-	fputc ( '\t', FILE);		\
-	assemble_name (FILE, LABEL1

Re: [PATCH] split mips/gnu-user.h from mips/linux.h

2011-07-19 Thread Robert Millan
Hi Richard,

Thanks for committing!  Just one small note:

2011/7/19 Richard Sandiford rdsandif...@googlemail.com:
 needs to deal with linux64.h as well.  I also kept the copyright notice
 the same on linux.h (even though it's only a one-liner now).

 Applied with those changes, thanks.

It's probably harmless, but with this change if --enable-targets=all
is used, then mips/gnu-user.h is included twice.  The second one can
be removed.

-- 
Robert Millan


PING^4 APPROVED patch for AMD64 targets running GNU/kFreeBSD, anyone?

2011-06-14 Thread Robert Millan
This patch for AMD64 targets running GNU/kFreeBSD has been approved
already, would anyone be so kind to commit it?  I'm afraid I don't have
write perms currently.

See: http://gcc.gnu.org/ml/gcc-patches/2011-06/msg00884.html

Thank you very much :-)

2011/6/10 Richard Henderson r...@redhat.com:
 On 06/10/2011 01:59 PM, Robert Millan wrote:
 2011-06-02  Robert Millan  r...@gnu.org

   * config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.
   * config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKER): Resync with
   `config/linux.h'.

   * config/i386/kfreebsd-gnu64.h: New file.
   * config.gcc (x86_64-*-kfreebsd*-gnu): Replace `i386/kfreebsd-gnu.h'
   with `i386/kfreebsd-gnu64.h'.

   * config/i386/linux64.h (GNU_USER_LINK_EMULATION32)
   (GNU_USER_LINK_EMULATION64): New macros.
   * config/i386/gnu-user64.h (LINK_SPEC): Rely on
   `GNU_USER_LINK_EMULATION32' and `GNU_USER_LINK_EMULATION64' instead
   of hardcoding `elf_i386' and `elf_x86_64'.

 Ok.


 r~


-- 
Robert Millan
2011-06-02  Robert Millan  r...@gnu.org

* config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.
* config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKER): Resync with
`config/linux.h'.

* config/i386/kfreebsd-gnu64.h: New file.
* config.gcc (x86_64-*-kfreebsd*-gnu): Replace `i386/kfreebsd-gnu.h'
with `i386/kfreebsd-gnu64.h'.

* config/i386/linux64.h (GNU_USER_LINK_EMULATION32)
(GNU_USER_LINK_EMULATION64): New macros.
* config/i386/gnu-user64.h (LINK_SPEC): Rely on
`GNU_USER_LINK_EMULATION32' and `GNU_USER_LINK_EMULATION64' instead
of hardcoding `elf_i386' and `elf_x86_64'.

Index: gcc/config/i386/kfreebsd-gnu64.h
===
--- gcc/config/i386/kfreebsd-gnu64.h(revision 0)
+++ gcc/config/i386/kfreebsd-gnu64.h(revision 0)
@@ -0,0 +1,26 @@
+/* Definitions for AMD x86-64 running kFreeBSD-based GNU systems with ELF 
format
+   Copyright (C) 2011
+   Free Software Foundation, Inc.
+   Contributed by Robert Millan.
+
+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
+http://www.gnu.org/licenses/.  */
+
+#define GNU_USER_LINK_EMULATION32 elf_i386_fbsd
+#define GNU_USER_LINK_EMULATION64 elf_x86_64_fbsd
+
+#define GLIBC_DYNAMIC_LINKER32 /lib/ld.so.1
+#define GLIBC_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
Index: gcc/config/i386/kfreebsd-gnu.h
===
--- gcc/config/i386/kfreebsd-gnu.h  (revision 174566)
+++ gcc/config/i386/kfreebsd-gnu.h  (working copy)
@@ -1,5 +1,5 @@
 /* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format
-   Copyright (C) 2004, 2007, 2011
+   Copyright (C) 2011
Free Software Foundation, Inc.
Contributed by Robert Millan.
 
@@ -19,11 +19,5 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef GNU_USER_LINK_EMULATION
 #define GNU_USER_LINK_EMULATION elf_i386_fbsd
-
-#undef GNU_USER_DYNAMIC_LINKER32
-#define GNU_USER_DYNAMIC_LINKER32 /lib/ld.so.1
-
-#undef GNU_USER_DYNAMIC_LINKER64
-#define GNU_USER_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
+#define GLIBC_DYNAMIC_LINKER /lib/ld.so.1
Index: gcc/config/i386/linux64.h
===
--- gcc/config/i386/linux64.h   (revision 174566)
+++ gcc/config/i386/linux64.h   (working copy)
@@ -24,6 +24,9 @@
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 http://www.gnu.org/licenses/.  */
 
+#define GNU_USER_LINK_EMULATION32 elf_i386
+#define GNU_USER_LINK_EMULATION64 elf_x86_64
+
 #define GLIBC_DYNAMIC_LINKER32 /lib/ld-linux.so.2
 #define GLIBC_DYNAMIC_LINKER64 /lib64/ld-linux-x86-64.so.2
 
Index: gcc/config/i386/gnu-user64.h
===
--- gcc/config/i386/gnu-user64.h(revision 174566)
+++ gcc/config/i386/gnu-user64.h(working copy)
@@ -69,7 +69,8 @@
  %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}
 
 #undef LINK_SPEC
-#define LINK_SPEC %{ SPEC_64 :-m elf_x86_64} %{ SPEC_32 :-m elf_i386} \
+#define LINK_SPEC %{ SPEC_64 :-m  GNU_USER_LINK_EMULATION64 } \
+   %{ SPEC_32 :-m  GNU_USER_LINK_EMULATION32 } \
   %{shared:-shared} \
   %{!shared: \
 %{!static: \
Index: gcc/config/kfreebsd-gnu.h

PING^3 [PATCH] Support for AMD64 targets running GNU/kFreeBSD

2011-06-10 Thread Robert Millan
Please someone look at this if you have time.  The patch is very small now.

2011/6/3 Robert Millan r...@gnu.org:
 Actually, please consider this patch instead.  It's the same but fixes a
 mistake in ld.so pathname.

 2011/6/2 Robert Millan r...@gnu.org:
 Hi,

 2011/5/21 Joseph S. Myers jos...@codesourcery.com:
 Please send a patch against *current trunk* and CC *relevant target
 architecture maintainers*.  linux*.h headers are no longer used on
 non-Linux targets (since my 2011-04-28 patch - on which I CC:ed you) so
 this patch version is no longer appropriate.  I think you'll want to make
 gnu-user64.h use GNU_USER_LINK_EMULATION32 and GNU_USER_LINK_EMULATION64
 similarly to how gnu-user.h uses GNU_USER_LINK_EMULATION.

 Thanks for the tip.  Here's an update to current trunk.

 --
 Robert Millan




 --
 Robert Millan




-- 
Robert Millan
2011-06-02  Robert Millan  r...@gnu.org

* config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.
* config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKER): Resync with
`config/linux.h'.

* config/i386/kfreebsd-gnu64.h: New file.
* config.gcc (x86_64-*-kfreebsd*-gnu): Replace `i386/kfreebsd-gnu.h'
with `i386/kfreebsd-gnu64.h'.

* config/i386/linux64.h (GNU_USER_LINK_EMULATION32)
(GNU_USER_LINK_EMULATION64): New macros.
* config/i386/gnu-user64.h (LINK_SPEC): Rely on
`GNU_USER_LINK_EMULATION32' and `GNU_USER_LINK_EMULATION64' instead
of hardcoding `elf_i386' and `elf_x86_64'.

Index: gcc/config/i386/kfreebsd-gnu64.h
===
--- gcc/config/i386/kfreebsd-gnu64.h(revision 0)
+++ gcc/config/i386/kfreebsd-gnu64.h(revision 0)
@@ -0,0 +1,26 @@
+/* Definitions for AMD x86-64 running kFreeBSD-based GNU systems with ELF 
format
+   Copyright (C) 2011
+   Free Software Foundation, Inc.
+   Contributed by Robert Millan.
+
+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
+http://www.gnu.org/licenses/.  */
+
+#define GNU_USER_LINK_EMULATION32 elf_i386_fbsd
+#define GNU_USER_LINK_EMULATION64 elf_x86_64_fbsd
+
+#define GLIBC_DYNAMIC_LINKER32 /lib/ld.so.1
+#define GLIBC_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
Index: gcc/config/i386/kfreebsd-gnu.h
===
--- gcc/config/i386/kfreebsd-gnu.h  (revision 174566)
+++ gcc/config/i386/kfreebsd-gnu.h  (working copy)
@@ -1,5 +1,5 @@
 /* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format
-   Copyright (C) 2004, 2007, 2011
+   Copyright (C) 2011
Free Software Foundation, Inc.
Contributed by Robert Millan.
 
@@ -19,11 +19,5 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef GNU_USER_LINK_EMULATION
 #define GNU_USER_LINK_EMULATION elf_i386_fbsd
-
-#undef GNU_USER_DYNAMIC_LINKER32
-#define GNU_USER_DYNAMIC_LINKER32 /lib/ld.so.1
-
-#undef GNU_USER_DYNAMIC_LINKER64
-#define GNU_USER_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
+#define GLIBC_DYNAMIC_LINKER /lib/ld.so.1
Index: gcc/config/i386/linux64.h
===
--- gcc/config/i386/linux64.h   (revision 174566)
+++ gcc/config/i386/linux64.h   (working copy)
@@ -24,6 +24,9 @@
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 http://www.gnu.org/licenses/.  */
 
+#define GNU_USER_LINK_EMULATION32 elf_i386
+#define GNU_USER_LINK_EMULATION64 elf_x86_64
+
 #define GLIBC_DYNAMIC_LINKER32 /lib/ld-linux.so.2
 #define GLIBC_DYNAMIC_LINKER64 /lib64/ld-linux-x86-64.so.2
 
Index: gcc/config/i386/gnu-user64.h
===
--- gcc/config/i386/gnu-user64.h(revision 174566)
+++ gcc/config/i386/gnu-user64.h(working copy)
@@ -69,7 +69,8 @@
  %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}
 
 #undef LINK_SPEC
-#define LINK_SPEC %{ SPEC_64 :-m elf_x86_64} %{ SPEC_32 :-m elf_i386} \
+#define LINK_SPEC %{ SPEC_64 :-m  GNU_USER_LINK_EMULATION64 } \
+   %{ SPEC_32 :-m  GNU_USER_LINK_EMULATION32 } \
   %{shared:-shared} \
   %{!shared: \
 %{!static: \
Index: gcc/config/kfreebsd-gnu.h
===
--- gcc/config/kfreebsd-gnu.h   (revision 174566)
+++ gcc/config/kfreebsd-gnu.h   (working copy)
@@ -19,7 +19,6 @@
 along with GCC; see the file

Re: PING^3 [PATCH] Support for AMD64 targets running GNU/kFreeBSD

2011-06-10 Thread Robert Millan
2011/6/10 Richard Henderson r...@redhat.com:
 On 06/10/2011 01:59 PM, Robert Millan wrote:
 2011-06-02  Robert Millan  r...@gnu.org

       * config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.
       * config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKER): Resync with
       `config/linux.h'.

       * config/i386/kfreebsd-gnu64.h: New file.
       * config.gcc (x86_64-*-kfreebsd*-gnu): Replace `i386/kfreebsd-gnu.h'
       with `i386/kfreebsd-gnu64.h'.

       * config/i386/linux64.h (GNU_USER_LINK_EMULATION32)
       (GNU_USER_LINK_EMULATION64): New macros.
       * config/i386/gnu-user64.h (LINK_SPEC): Rely on
       `GNU_USER_LINK_EMULATION32' and `GNU_USER_LINK_EMULATION64' instead
       of hardcoding `elf_i386' and `elf_x86_64'.

 Ok.

Thanks.  Please could you commit?  I don't have write-after-approval perms.

-- 
Robert Millan


Re: PING^2 [PATCH] Support for AMD64 targets running GNU/kFreeBSD

2011-06-03 Thread Robert Millan
Actually, please consider this patch instead.  It's the same but fixes a
mistake in ld.so pathname.

2011/6/2 Robert Millan r...@gnu.org:
 Hi,

 2011/5/21 Joseph S. Myers jos...@codesourcery.com:
 Please send a patch against *current trunk* and CC *relevant target
 architecture maintainers*.  linux*.h headers are no longer used on
 non-Linux targets (since my 2011-04-28 patch - on which I CC:ed you) so
 this patch version is no longer appropriate.  I think you'll want to make
 gnu-user64.h use GNU_USER_LINK_EMULATION32 and GNU_USER_LINK_EMULATION64
 similarly to how gnu-user.h uses GNU_USER_LINK_EMULATION.

 Thanks for the tip.  Here's an update to current trunk.

 --
 Robert Millan




-- 
Robert Millan
2011-06-02  Robert Millan  r...@gnu.org

* config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.
* config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKER): Resync with
`config/linux.h'.

* config/i386/kfreebsd-gnu64.h: New file.
* config.gcc (x86_64-*-kfreebsd*-gnu): Replace `i386/kfreebsd-gnu.h'
with `i386/kfreebsd-gnu64.h'.

* config/i386/linux64.h (GNU_USER_LINK_EMULATION32)
(GNU_USER_LINK_EMULATION64): New macros.
* config/i386/gnu-user64.h (LINK_SPEC): Rely on
`GNU_USER_LINK_EMULATION32' and `GNU_USER_LINK_EMULATION64' instead
of hardcoding `elf_i386' and `elf_x86_64'.

Index: gcc/config/i386/kfreebsd-gnu64.h
===
--- gcc/config/i386/kfreebsd-gnu64.h(revision 0)
+++ gcc/config/i386/kfreebsd-gnu64.h(revision 0)
@@ -0,0 +1,26 @@
+/* Definitions for AMD x86-64 running kFreeBSD-based GNU systems with ELF 
format
+   Copyright (C) 2011
+   Free Software Foundation, Inc.
+   Contributed by Robert Millan.
+
+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
+http://www.gnu.org/licenses/.  */
+
+#define GNU_USER_LINK_EMULATION32 elf_i386_fbsd
+#define GNU_USER_LINK_EMULATION64 elf_x86_64_fbsd
+
+#define GLIBC_DYNAMIC_LINKER32 /lib/ld.so.1
+#define GLIBC_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
Index: gcc/config/i386/kfreebsd-gnu.h
===
--- gcc/config/i386/kfreebsd-gnu.h  (revision 174566)
+++ gcc/config/i386/kfreebsd-gnu.h  (working copy)
@@ -1,5 +1,5 @@
 /* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format
-   Copyright (C) 2004, 2007, 2011
+   Copyright (C) 2011
Free Software Foundation, Inc.
Contributed by Robert Millan.
 
@@ -19,11 +19,5 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef GNU_USER_LINK_EMULATION
 #define GNU_USER_LINK_EMULATION elf_i386_fbsd
-
-#undef GNU_USER_DYNAMIC_LINKER32
-#define GNU_USER_DYNAMIC_LINKER32 /lib/ld.so.1
-
-#undef GNU_USER_DYNAMIC_LINKER64
-#define GNU_USER_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
+#define GLIBC_DYNAMIC_LINKER /lib/ld.so.1
Index: gcc/config/i386/linux64.h
===
--- gcc/config/i386/linux64.h   (revision 174566)
+++ gcc/config/i386/linux64.h   (working copy)
@@ -24,6 +24,9 @@
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 http://www.gnu.org/licenses/.  */
 
+#define GNU_USER_LINK_EMULATION32 elf_i386
+#define GNU_USER_LINK_EMULATION64 elf_x86_64
+
 #define GLIBC_DYNAMIC_LINKER32 /lib/ld-linux.so.2
 #define GLIBC_DYNAMIC_LINKER64 /lib64/ld-linux-x86-64.so.2
 
Index: gcc/config/i386/gnu-user64.h
===
--- gcc/config/i386/gnu-user64.h(revision 174566)
+++ gcc/config/i386/gnu-user64.h(working copy)
@@ -69,7 +69,8 @@
  %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}
 
 #undef LINK_SPEC
-#define LINK_SPEC %{ SPEC_64 :-m elf_x86_64} %{ SPEC_32 :-m elf_i386} \
+#define LINK_SPEC %{ SPEC_64 :-m  GNU_USER_LINK_EMULATION64 } \
+   %{ SPEC_32 :-m  GNU_USER_LINK_EMULATION32 } \
   %{shared:-shared} \
   %{!shared: \
 %{!static: \
Index: gcc/config/kfreebsd-gnu.h
===
--- gcc/config/kfreebsd-gnu.h   (revision 174566)
+++ gcc/config/kfreebsd-gnu.h   (working copy)
@@ -19,7 +19,6 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef GNU_USER_TARGET_OS_CPP_BUILTINS
 #define

Re: PING^2 [PATCH] Support for AMD64 targets running GNU/kFreeBSD

2011-06-02 Thread Robert Millan
Hi,

2011/5/21 Joseph S. Myers jos...@codesourcery.com:
 Please send a patch against *current trunk* and CC *relevant target
 architecture maintainers*.  linux*.h headers are no longer used on
 non-Linux targets (since my 2011-04-28 patch - on which I CC:ed you) so
 this patch version is no longer appropriate.  I think you'll want to make
 gnu-user64.h use GNU_USER_LINK_EMULATION32 and GNU_USER_LINK_EMULATION64
 similarly to how gnu-user.h uses GNU_USER_LINK_EMULATION.

Thanks for the tip.  Here's an update to current trunk.

-- 
Robert Millan
2011-06-02  Robert Millan  r...@gnu.org

* config/i386/kfreebsd-gnu.h: Resync with `config/i386/linux.h'.
* config/kfreebsd-gnu.h (GNU_USER_DYNAMIC_LINKER): Resync with
`config/linux.h'.

* config/i386/kfreebsd-gnu64.h: New file.
* config.gcc (x86_64-*-kfreebsd*-gnu): Replace `i386/kfreebsd-gnu.h'
with `i386/kfreebsd-gnu64.h'.

* config/i386/linux64.h (GNU_USER_LINK_EMULATION32)
(GNU_USER_LINK_EMULATION64): New macros.
* config/i386/gnu-user64.h (LINK_SPEC): Rely on
`GNU_USER_LINK_EMULATION32' and `GNU_USER_LINK_EMULATION64' instead
of hardcoding `elf_i386' and `elf_x86_64'.

Index: gcc/config/i386/kfreebsd-gnu64.h
===
--- gcc/config/i386/kfreebsd-gnu64.h(revision 0)
+++ gcc/config/i386/kfreebsd-gnu64.h(revision 0)
@@ -0,0 +1,26 @@
+/* Definitions for AMD x86-64 running kFreeBSD-based GNU systems with ELF 
format
+   Copyright (C) 2011
+   Free Software Foundation, Inc.
+   Contributed by Robert Millan.
+
+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
+http://www.gnu.org/licenses/.  */
+
+#define GNU_USER_LINK_EMULATION32 elf_i386_fbsd
+#define GNU_USER_LINK_EMULATION64 elf_x86_64_fbsd
+
+#define GLIBC_DYNAMIC_LINKER32 /lib/ld.so.1
+#define GLIBC_DYNAMIC_LINKER64 /lib64/ld-kfreebsd-x86-64.so.1
Index: gcc/config/i386/kfreebsd-gnu.h
===
--- gcc/config/i386/kfreebsd-gnu.h  (revision 174566)
+++ gcc/config/i386/kfreebsd-gnu.h  (working copy)
@@ -1,5 +1,5 @@
 /* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format
-   Copyright (C) 2004, 2007, 2011
+   Copyright (C) 2011
Free Software Foundation, Inc.
Contributed by Robert Millan.
 
@@ -19,11 +19,5 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef GNU_USER_LINK_EMULATION
 #define GNU_USER_LINK_EMULATION elf_i386_fbsd
-
-#undef GNU_USER_DYNAMIC_LINKER32
-#define GNU_USER_DYNAMIC_LINKER32 /lib/ld.so.1
-
-#undef GNU_USER_DYNAMIC_LINKER64
-#define GNU_USER_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
+#define GLIBC_DYNAMIC_LINKER /lib/ld.so.1
Index: gcc/config/i386/linux64.h
===
--- gcc/config/i386/linux64.h   (revision 174566)
+++ gcc/config/i386/linux64.h   (working copy)
@@ -24,6 +24,9 @@
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 http://www.gnu.org/licenses/.  */
 
+#define GNU_USER_LINK_EMULATION32 elf_i386
+#define GNU_USER_LINK_EMULATION64 elf_x86_64
+
 #define GLIBC_DYNAMIC_LINKER32 /lib/ld-linux.so.2
 #define GLIBC_DYNAMIC_LINKER64 /lib64/ld-linux-x86-64.so.2
 
Index: gcc/config/i386/gnu-user64.h
===
--- gcc/config/i386/gnu-user64.h(revision 174566)
+++ gcc/config/i386/gnu-user64.h(working copy)
@@ -69,7 +69,8 @@
  %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}
 
 #undef LINK_SPEC
-#define LINK_SPEC %{ SPEC_64 :-m elf_x86_64} %{ SPEC_32 :-m elf_i386} \
+#define LINK_SPEC %{ SPEC_64 :-m  GNU_USER_LINK_EMULATION64 } \
+   %{ SPEC_32 :-m  GNU_USER_LINK_EMULATION32 } \
   %{shared:-shared} \
   %{!shared: \
 %{!static: \
Index: gcc/config/kfreebsd-gnu.h
===
--- gcc/config/kfreebsd-gnu.h   (revision 174566)
+++ gcc/config/kfreebsd-gnu.h   (working copy)
@@ -19,7 +19,6 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef GNU_USER_TARGET_OS_CPP_BUILTINS
 #define GNU_USER_TARGET_OS_CPP_BUILTINS()  \
   do   \
 {  \
@@ -31,5 +30,6

Re: PING^2 [PATCH] Support for AMD64 targets running GNU/kFreeBSD

2011-03-31 Thread Robert Millan
Ping^2

2011/1/26 Robert Millan r...@gnu.org:
 Ping!

 2011/1/18 Robert Millan r...@gnu.org:
 2011/1/14 Robert Millan r...@gnu.org:
 2011/1/12 Robert Millan r...@gnu.org:
 * The headers config/kfreebsd-gnu.h etc. override
  GLIBC_DYNAMIC_LINKER.  But the 64-bit configurations
  x86_64-*-kfreebsd*-gnu and x86_64-*-knetbsd*-gnu do not appear to
  use any header that would override GLIBC_DYNAMIC_LINKER32 and
  GLIBC_DYNAMIC_LINKER64, which are what LINK_SPEC in linux64.h
  actually uses.  Thus those configurations would use Linux-specific
  dynamic linker settings, which seems unlikely to be as intended.

 It's not as intended. On amd64 we use /lib/ld.so.1 and
 /lib/ld-kfreebsd-x86-64.so.1.

 It seems x86_64-kfreebsd-gnu has been broken for a while.  I
 just realized that I wrote a patch to fix this in 2006 [1], but
 somehow it was never merged in GCC (actually I'm not even
 sure I submitted it).

 In the meantime Debian GNU/kFreeBSD has been using this
 patch to build GCC on their kfreebsd-amd64 port.

 I can prepare an updated version of this patch (relative to
 trunk + your linux.h overhaul [2]).

 Here is it.

 --
 Robert Millan




 --
 Robert Millan




-- 
Robert Millan
2011-01-18  Robert Millan  r...@gnu.org

Support for AMD64 targets running GNU/kFreeBSD.

* config.gcc (tm_file): Include `i386/kfreebsd-gnu.h' on
x86_64-*-kfreebsd*-gnu.
* config/i386/kfreebsd-gnu.h
(GLIBC_DYNAMIC_LINKER32): If defined, redefine to /lib/ld.so.1.
(GLIBC_DYNAMIC_LINKER64): If defined, redefine to
/lib/ld-kfreebsd-x86-64.so.1.

* config/i386/linux.h (LINK_EMULATION): Redefine this macro
to a noop filter, which can be overriden by other headers.
* config/i386/linux64.h (LINK_SPEC): Process emulation names
through LINK_EMULATION().
* config/kfreebsd-gnu.h (LINK_EMULATION): Redefine to append
a _fbsd suffix.
* config/i386/kfreebsd-gnu.h (LINK_EMULATION): Remove macro
(superceded by the definition in config/kfreebsd-gnu.h).

Index: gcc/config.gcc
===
--- gcc/config.gcc  (revision 168952)
+++ gcc/config.gcc  (working copy)
@@ -1267,7 +1267,7 @@
case ${target} in
x86_64-*-linux*)
  default_gnu_indirect_function=glibc-2011 ;;
-   x86_64-*-kfreebsd*-gnu) tm_file=${tm_file} kfreebsd-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 ;;
esac
tmake_file=${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc 
i386/t-crtfm t-dfprules
Index: gcc/config/i386/linux.h
===
--- gcc/config/i386/linux.h (revision 168952)
+++ gcc/config/i386/linux.h (working copy)
@@ -91,7 +91,7 @@
done.  */
 
 /* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
-#define LINK_EMULATION elf_i386
+#define LINK_EMULATION(em) em
 #define GLIBC_DYNAMIC_LINKER /lib/ld-linux.so.2
 
 #undef  ASM_SPEC
@@ -100,7 +100,7 @@
 
 #undef  SUBTARGET_EXTRA_SPECS
 #define SUBTARGET_EXTRA_SPECS \
-  { link_emulation, LINK_EMULATION },\
+  { link_emulation, LINK_EMULATION(elf_i386) },\
   { dynamic_linker, LINUX_DYNAMIC_LINKER }
 
 #undef LINK_SPEC
Index: gcc/config/i386/kfreebsd-gnu.h
===
--- gcc/config/i386/kfreebsd-gnu.h  (revision 168952)
+++ gcc/config/i386/kfreebsd-gnu.h  (working copy)
@@ -19,7 +19,15 @@
 along with GCC; see the file COPYING3.  If not see
 http://www.gnu.org/licenses/.  */
 
-#undef LINK_EMULATION
-#define LINK_EMULATION elf_i386_fbsd
+#ifdef GLIBC_DYNAMIC_LINKER32
+#undef GLIBC_DYNAMIC_LINKER32
+#define GLIBC_DYNAMIC_LINKER32 /lib/ld.so.1
+#endif
+
+#ifdef GLIBC_DYNAMIC_LINKER64
+#undef GLIBC_DYNAMIC_LINKER64
+#define GLIBC_DYNAMIC_LINKER64 /lib/ld-kfreebsd-x86-64.so.1
+#endif
+
 #undef REG_NAME
 #define REG_NAME(reg) sc_ ## reg
Index: gcc/config/i386/linux64.h
===
--- gcc/config/i386/linux64.h   (revision 168952)
+++ gcc/config/i386/linux64.h   (working copy)
@@ -75,7 +75,8 @@
  %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}
 
 #undef LINK_SPEC
-#define LINK_SPEC %{ SPEC_64 :-m elf_x86_64} %{ SPEC_32 :-m elf_i386} \
+#define LINK_SPEC %{ SPEC_64 :-m  LINK_EMULATION(elf_x86_64) } \
+  %{ SPEC_32 :-m  LINK_EMULATION(elf_i386) } \
   %{shared:-shared} \
   %{!shared: \
 %{!static: \
Index: gcc/config/kfreebsd-gnu.h
===
--- gcc/config/kfreebsd-gnu.h   (revision 168952)
+++ gcc/config/kfreebsd-gnu.h   (working copy)
@@ -35,3 +35,6 @@
 #undef GLIBC_DYNAMIC_LINKER
 #define GLIBC_DYNAMIC_LINKER /lib/ld.so.1
 #endif
+
+#undef LINK_EMULATION
+#define LINK_EMULATION(em) em _fbsd