config.gcc (x86_64-*-freebsd*): New target.
authorDavid O'Brien <obrien@FreeBSD.org>
Sat, 26 Jan 2002 01:23:27 +0000 (01:23 +0000)
committerDavid O'Brien <obrien@gcc.gnu.org>
Sat, 26 Jan 2002 01:23:27 +0000 (01:23 +0000)
2002-01-25  David O'Brien  <obrien@FreeBSD.org>
* config.gcc (x86_64-*-freebsd*): New target.
(x86_64-*-netbsd*,x86_64-*-linux*): Use ${tm_file} rather than its
value.
(i[34567]86-*-freebsd*): Don't include svr4.h.
* config/i386/freebsd64.h: New file.

Approved by:  Richard Henderson <rth@redhat.com>
              Message-ID: <20020125160119.B17943@redhat.com>

From-SVN: r49233

gcc/ChangeLog
gcc/config.gcc
gcc/config/i386/freebsd64.h [new file with mode: 0644]

index d16404e217515ef4e6c6d876bc31f2530030f765..765cadb4a9388fb2c0cd4547fcab7271b9e4ab15 100644 (file)
@@ -1,3 +1,11 @@
+2002-01-25  David O'Brien  <obrien@FreeBSD.org>
+
+       * config.gcc (x86_64-*-freebsd*): New target.
+       (x86_64-*-netbsd*,x86_64-*-linux*): Use ${tm_file} rather than its
+       value.
+       (i[34567]86-*-freebsd*): Don't include svr4.h.
+       * config/i386/freebsd64.h: New file.
+
 2002-01-25  Douglas B Rupp  <rupp@gnat.com>
 
        * config/alpha/x-vms (version): Make static.
index bdbb3c592ff0944249511f490c664f1d341bb0ad..10d6e1fd73264a8faf7f5258b5ffb7473aa402c1 100644 (file)
@@ -270,6 +270,13 @@ if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-protos.h
 then
        tm_p_file=${cpu_type}/${cpu_type}-protos.h
 fi
+
+case $machine in
+x86_64-*-*)
+       tm_file="i386/biarch64.h ${tm_file}"
+       ;;
+esac
+
 # On a.out targets, we need to use collect2.
 case $machine in
 *-*-*aout*)
@@ -1127,7 +1134,10 @@ i[34567]86-*-freebsd[12] | i[34567]86-*-freebsd[12].* | i[34567]86-*-freebsd*aou
        tmake_file=t-freebsd
        ;;
 i[34567]86-*-freebsd*)
-       tm_file="${tm_file} i386/att.h dbxelf.h elfos.h svr4.h ${fbsd_tm_file} i386/freebsd.h"
+       tm_file="${tm_file} i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
+       ;;
+x86_64-*-freebsd*)
+       tm_file="${tm_file} i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
        ;;
 i[34567]86-*-netbsdelf*)
        tm_file="${tm_file} i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h"
@@ -1139,7 +1149,7 @@ i[34567]86-*-netbsd*)
        use_collect2=yes
        ;;
 x86_64-*-netbsd*)
-       tm_file="i386/biarch64.h i386/i386.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h"
+       tm_file="${tm_file} i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h"
        float_format=i386
        ;;
 i[34567]86-*-openbsd*)
@@ -1205,7 +1215,7 @@ i[34567]86-*-linux*)      # Intel 80386's running GNU/Linux
        fi
        ;;
 x86_64-*-linux*)
-       tm_file="i386/biarch64.h i386/i386.h i386/att.h dbxelf.h elfos.h svr4.h linux.h \
+       tm_file="${tm_file} i386/att.h dbxelf.h elfos.h svr4.h linux.h \
                 i386/x86-64.h i386/linux64.h"
        tmake_file="t-slibgcc-elf-ver t-linux i386/t-crtstuff"
        extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
diff --git a/gcc/config/i386/freebsd64.h b/gcc/config/i386/freebsd64.h
new file mode 100644 (file)
index 0000000..3437e69
--- /dev/null
@@ -0,0 +1,52 @@
+/* Definitions for AMD x86-64 running FreeBSD with ELF format
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   Contributed by David O'Brien <obrien@FreeBSD.org>
+
+This file is part of GNU CC.
+
+GNU CC 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 2, or (at your option)
+any later version.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (FreeBSD/x86-64 ELF)");
+
+/* Provide a LINK_SPEC appropriate for the FreeBSD/x86-64 ELF target.
+   This is a copy of LINK_SPEC from <i386/freebsd.h> tweaked for
+   the x86-64 target.  */
+
+#undef LINK_SPEC
+#define LINK_SPEC "\
+  %{!m32:-m elf_x86_64} \
+  %{m32:-m elf_i386} \
+  %{Wl,*:%*} \
+  %{v:-V} \
+  %{assert*} %{R*} %{rpath*} %{defsym*} \
+  %{shared:-Bshareable %{h*} %{soname*}} \
+    %{!shared: \
+      %{!static: \
+        %{rdynamic:-export-dynamic} \
+       %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \
+    %{static:-Bstatic}} \
+  %{symbolic:-Bsymbolic}"
+
+/* Grrr... x86-64.h gets this wrong and it shouldn't be trying to set this
+   policy...  Restore to the FreeBSD/i386 setting.  */
+/* Don't default to pcc-struct-return for IA-32 ELF code, because we need to
+   retain compatibility with older FreeBSD/i386 ELF gcc versions (even though
+   the SVR4 ABI for the i386 says that records and unions are returned in
+   memory).  */
+#undef  DEFAULT_PCC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 0