aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid O'Brien <obrien@FreeBSD.org>2002-01-26 01:23:27 +0000
committerDavid O'Brien <obrien@gcc.gnu.org>2002-01-26 01:23:27 +0000
commite564e618054d9ea66778a4b7265da0f66e426104 (patch)
tree97620496215405c9831609f88ba7f80c87de4596 /gcc
parent4857d29d810461f9eca00a0b677e850ebd1b432d (diff)
downloadgcc-e564e618054d9ea66778a4b7265da0f66e426104.zip
gcc-e564e618054d9ea66778a4b7265da0f66e426104.tar.gz
gcc-e564e618054d9ea66778a4b7265da0f66e426104.tar.bz2
config.gcc (x86_64-*-freebsd*): New target.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config.gcc16
-rw-r--r--gcc/config/i386/freebsd64.h52
3 files changed, 73 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d16404e..765cadb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index bdbb3c5..10d6e1f 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -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
index 0000000..3437e69
--- /dev/null
+++ b/gcc/config/i386/freebsd64.h
@@ -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