aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/freebsd.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/freebsd.h')
-rw-r--r--gcc/config/freebsd.h92
1 files changed, 67 insertions, 25 deletions
diff --git a/gcc/config/freebsd.h b/gcc/config/freebsd.h
index 98a5c9e41b2..88e0226ec71 100644
--- a/gcc/config/freebsd.h
+++ b/gcc/config/freebsd.h
@@ -1,5 +1,5 @@
/* Base configuration file for all FreeBSD targets.
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -22,7 +22,9 @@ Boston, MA 02111-1307, USA. */
All FreeBSD architectures should include this file, which will specify
their commonalities.
Adapted from gcc/config/i386/freebsd-elf.h by
- David O'Brien <obrien@FreeBSD.org>. */
+ David O'Brien <obrien@FreeBSD.org>.
+ Further work by David O'Brien <obrien@FreeBSD.org> and
+ Loren J. Rittle <ljrittle@acm.org>. */
/* This defines which switch letters take arguments. On FreeBSD, most of
@@ -48,6 +50,34 @@ Boston, MA 02111-1307, USA. */
#undef WORD_SWITCH_TAKES_ARG
#define WORD_SWITCH_TAKES_ARG(STR) (FBSD_WORD_SWITCH_TAKES_ARG(STR))
+#if FBSD_MAJOR == 6
+#define FBSD_CPP_PREDEFINES \
+ "-D__FreeBSD__=6 -Dunix -D__ELF__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
+#endif
+
+#if FBSD_MAJOR == 5
+#define FBSD_CPP_PREDEFINES \
+ "-D__FreeBSD__=5 -Dunix -D__ELF__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
+#endif
+
+#if FBSD_MAJOR == 4
+#define FBSD_CPP_PREDEFINES \
+ "-D__FreeBSD__=4 -Dunix -D__ELF__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
+#endif
+
+#if FBSD_MAJOR == 3
+#define FBSD_CPP_PREDEFINES \
+ "-D__FreeBSD__=3 -Dunix -D__ELF__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
+#endif
+
+#ifndef FBSD_CPP_PREDEFINES
+#define FBSD_CPP_PREDEFINES \
+ "-D__FreeBSD__ -Dunix -D__ELF__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
+#endif
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES FBSD_CPP_PREDEFINES
+
/* Provide a CPP_SPEC appropriate for FreeBSD. We just deal with the GCC
option `-posix', and PIC issues. */
@@ -56,11 +86,37 @@ Boston, MA 02111-1307, USA. */
%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \
%{posix:-D_POSIX_SOURCE}"
-/* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate
- libc, depending on whether we're doing profiling or need threads support.
- (simular to the default, except no -lg, and no -p). */
+/* Provide a LIB_SPEC appropriate for FreeBSD as configured and as
+ required by the user-land thread model. Before __FreeBSD_version
+ 500016, select the appropriate libc, depending on whether we're
+ doing profiling or need threads support. At __FreeBSD_version
+ 500016 and later, when threads support is requested include both
+ -lc and -lc_r instead of only -lc_r. To make matters interesting,
+ we can't actually use __FreeBSD_version provided by <osreldate.h>
+ directly since it breaks cross-compiling. As a final twist, make
+ it a hard error if -pthread is provided on the command line and gcc
+ was configured with --disable-threads (this will help avoid bug
+ reports from users complaining about threading when they
+ misconfigured the gcc bootstrap but are later consulting FreeBSD
+ manual pages that refer to the mythical -pthread option). */
#undef LIB_SPEC
+#ifdef FBSD_NO_THREADS
+#define LIB_SPEC " \
+ %{pthread: %eThe -pthread option is only supported on FreeBSD when gcc \
+is built with the --enable-threads configure-time option.} \
+ %{!shared: \
+ %{!pg: -lc} \
+ %{pg: -lc_p} \
+ }"
+#else
+#if FBSD_MAJOR >= 5
+#define LIB_SPEC " \
+ %{!shared: \
+ %{!pg: %{pthread:-lc_r} -lc} \
+ %{pg: %{pthread:-lc_r_p} -lc_p} \
+ }"
+#else
#define LIB_SPEC " \
%{!shared: \
%{!pg: \
@@ -70,7 +126,8 @@ Boston, MA 02111-1307, USA. */
%{!pthread:-lc_p} \
%{pthread:-lc_r_p}} \
}"
-
+#endif
+#endif
/* Code generation parameters. */
@@ -97,13 +154,12 @@ Boston, MA 02111-1307, USA. */
#undef DEFAULT_VTABLE_THUNKS
#define DEFAULT_VTABLE_THUNKS 1
-/* This is BSD, so use stabs instead of DWARF debug format. */
+/* The GNU tools operate better with dwarf2 than stabs. Since we
+ don't have any native tools to be compatible with, default to
+ dwarf2. */
#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
-/* Attach a special .ident directive to the end of the file to identify
- the version of GCC which compiled this code. The format of the .ident
- string is patterned after the ones produced by native SVR4 C compilers. */
#undef IDENT_ASM_OP
#define IDENT_ASM_OP "\t.ident\t"
@@ -112,20 +168,6 @@ Boston, MA 02111-1307, USA. */
#define ASM_OUTPUT_IDENT(FILE, NAME) \
fprintf ((FILE), "%s\"%s\"\n", IDENT_ASM_OP, (NAME));
-#undef ASM_IDENTIFY_LANGUAGE
-#define ASM_IDENTIFY_LANGUAGE(FILE) \
- fprintf ((FILE), "%s\"GCC (%s) %s\"\n", IDENT_ASM_OP, \
- lang_identify (), version_string)
-
-#undef ASM_FILE_END
-#define ASM_FILE_END(FILE) \
-do { \
- if (!flag_no_ident) \
- fprintf ((FILE), "%s\"GCC: (GNU) %s\"\n", \
- IDENT_ASM_OP, version_string); \
- } while (0)
-
-
/* Miscellaneous parameters. */
/* Don't assume anything about the header files. */