summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2014-05-21 11:08:58 +0000
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2014-05-21 11:08:58 +0000
commit463553dbd6573d1fd41d24aa1aac8e83bc95e3d6 (patch)
tree03facded16790b6c727201147904c9c4862b73cc /gcc
parentc51f754b281732cea699c7cc2595a0d0c8cc6300 (diff)
downloadgcc-463553dbd6573d1fd41d24aa1aac8e83bc95e3d6.tar.gz
2014-05-21 John Marino <gnugcc@marino.st>
gcc: * config.gcc (*-*-dragonfly*): New target. * configure.ac: Detect dl_iterate_phdr (*freebsd*, *dragonfly*). * configure: Regenerate. * config/dragonfly-stdint.h: New. * config/dragonfly.h: New. * config/dragonfly.opt: New. * config/i386/dragonfly.h: New. * ginclude/stddef.h: Detect _PTRDIFF_T_DECLARED for DragonFly. include: * liberty.h: Use basename function on DragonFly. libcilkrts: * runtime/os-unix.c (__DragonFly__): New target. libgcc: * config.host (*-*-dragonfly*): New target. * crtstuff.c: Make dl_iterate_support generic on *bsd. * enable-execute-stack-mprotect.c: Always mprotect on FreeBSD. * unwind-dw2-fde-dip.c: Add dl_iterate_phr support for DragonFly. * config/i386/dragonfly-unwind.h: New. libitm: * configure.tgt (*-*-dragonfly*): New target. libstdc++-v3: * acinclude.m4 (*-*-dragonfly*): New target. * configure: Regenerate. * configure.host (*-*-dragonfly*): New target. * config/locale/dragonfly/c_locale.cc: New. * config/locale/dragonfly/ctype_members.cc: New. * config/os/bsd/dragonfly/ctype_base.h: New. * config/os/bsd/dragonfly/ctype_configure_char.cc: New. * config/os/bsd/dragonfly/ctype_inline.h: New. * config/os/bsd/dragonfly/os_defines.h: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210694 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config.gcc30
-rw-r--r--gcc/config/dragonfly-stdint.h56
-rw-r--r--gcc/config/dragonfly.h129
-rw-r--r--gcc/config/dragonfly.opt64
-rw-r--r--gcc/config/i386/dragonfly.h104
-rwxr-xr-xgcc/configure7
-rw-r--r--gcc/configure.ac7
-rw-r--r--gcc/ginclude/stddef.h4
9 files changed, 412 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 499200eb284..7d071a0222b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2014-05-21 John Marino <gnugcc@marino.st>
+
+ * config.gcc (*-*-dragonfly*): New target.
+ * configure.ac: Detect dl_iterate_phdr (*freebsd*, *dragonfly*).
+ * configure: Regenerate.
+ * config/dragonfly-stdint.h: New.
+ * config/dragonfly.h: New.
+ * config/dragonfly.opt: New.
+ * config/i386/dragonfly.h: New.
+ * ginclude/stddef.h: Detect _PTRDIFF_T_DECLARED for DragonFly.
+
2014-05-21 Richard Sandiford <rsandifo@linux.vnet.ibm.com>
* tree.def (VOID_CST): New.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index de010da7c1f..bf053851d9f 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -621,6 +621,26 @@ case ${target} in
"" | yes | posix) thread_file='posix' ;;
esac
;;
+*-*-dragonfly*)
+ gas=yes
+ gnu_ld=yes
+ tmake_file="t-slibgcc"
+ case ${enable_threads} in
+ "" | yes | posix)
+ thread_file='posix'
+ ;;
+ no | single)
+ # Let these non-posix thread selections fall through if requested
+ ;;
+ *)
+ echo 'Unknown thread configuration for DragonFly BSD'
+ exit 1
+ ;;
+ esac
+ extra_options="$extra_options rpath.opt dragonfly.opt"
+ default_use_cxa_atexit=yes
+ use_gcc_stdint=wrap
+ ;;
*-*-freebsd*)
# This is the generic ELF configuration of FreeBSD. Later
# machine-specific sections may refine and add to this
@@ -1321,6 +1341,14 @@ x86_64-*-rdos*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rdos.h i386/rdos64.h"
tmake_file="i386/t-i386elf t-svr4"
;;
+i[34567]86-*-dragonfly*)
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/dragonfly.h"
+ tmake_file="${tmake_file} i386/t-crtstuff"
+ ;;
+x86_64-*-dragonfly*)
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/x86-64.h i386/dragonfly.h"
+ tmake_file="${tmake_file} i386/t-crtstuff"
+ ;;
i[34567]86-*-freebsd*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
;;
@@ -4060,6 +4088,8 @@ case ${target} in
;;
i[34567]86-*-mingw* | x86_64-*-mingw*)
;;
+ i[34567]86-*-dragonfly* | x86_64-*-dragonfly*)
+ ;;
i[34567]86-*-freebsd* | x86_64-*-freebsd*)
;;
ia64*-*-linux*)
diff --git a/gcc/config/dragonfly-stdint.h b/gcc/config/dragonfly-stdint.h
new file mode 100644
index 00000000000..f0bb30f3a5b
--- /dev/null
+++ b/gcc/config/dragonfly-stdint.h
@@ -0,0 +1,56 @@
+/* Definitions for <stdint.h> types for DragonFly systems.
+ Copyright (C) 2014 Free Software Foundation, Inc.
+ Contributed by John Marino <gnugcc@marino.st>
+
+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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define SIG_ATOMIC_TYPE "int"
+
+#define INT8_TYPE "signed char"
+#define INT16_TYPE "short int"
+#define INT32_TYPE "int"
+#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
+#define UINT8_TYPE "unsigned char"
+#define UINT16_TYPE "short unsigned int"
+#define UINT32_TYPE "unsigned int"
+#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
+
+#define INT_LEAST8_TYPE INT8_TYPE
+#define INT_LEAST16_TYPE INT16_TYPE
+#define INT_LEAST32_TYPE INT32_TYPE
+#define INT_LEAST64_TYPE INT64_TYPE
+#define UINT_LEAST8_TYPE UINT8_TYPE
+#define UINT_LEAST16_TYPE UINT16_TYPE
+#define UINT_LEAST32_TYPE UINT32_TYPE
+#define UINT_LEAST64_TYPE UINT64_TYPE
+
+#define INT_FAST8_TYPE INT32_TYPE
+#define INT_FAST16_TYPE INT32_TYPE
+#define INT_FAST32_TYPE INT32_TYPE
+#define INT_FAST64_TYPE INT64_TYPE
+#define UINT_FAST8_TYPE UINT32_TYPE
+#define UINT_FAST16_TYPE UINT32_TYPE
+#define UINT_FAST32_TYPE UINT32_TYPE
+#define UINT_FAST64_TYPE UINT64_TYPE
+
+#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? INT64_TYPE : INT32_TYPE)
+#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? UINT64_TYPE : UINT32_TYPE)
diff --git a/gcc/config/dragonfly.h b/gcc/config/dragonfly.h
new file mode 100644
index 00000000000..115c25d3b99
--- /dev/null
+++ b/gcc/config/dragonfly.h
@@ -0,0 +1,129 @@
+/* Base configuration file for all DragonFly targets.
+ Copyright (C) 2014 Free Software Foundation, Inc.
+ Contributed by John Marino <gnugcc@marino.st>
+
+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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define_std ("unix"); \
+ builtin_define ("__DragonFly__"); \
+ builtin_assert ("system=unix"); \
+ builtin_assert ("system=bsd"); \
+ builtin_assert ("system=DragonFly"); \
+ } \
+ while (0)
+
+#undef CPP_SPEC
+#define CPP_SPEC \
+ "%(cpp_cpu) %(cpp_arch) %{posix:-D_POSIX_SOURCE}"
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC \
+ "%{!shared: \
+ %{pg:gcrt1.o%s} \
+ %{!pg: \
+ %{p:gcrt1.o%s} \
+ %{!p: \
+ %{profile: gcrt1.o%s} \
+ %{!profile: \
+ %{pie: Scrt1.o%s;:crt1.o%s}}}}} \
+ crti.o%s \
+ %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+
+#undef ENDFILE_SPEC
+#define ENDFILE_SPEC \
+ "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
+
+#undef LIB_SPEC
+#define LIB_SPEC \
+ "%{pthread:-lpthread} -lc"
+
+#if defined(HAVE_LD_EH_FRAME_HDR)
+#define LINK_EH_SPEC "--eh-frame-hdr"
+#endif
+
+/* Provide a LINK_SPEC appropriate for DragonFly. Here we provide support
+ for the special GCC options -static and -shared, which allow us to
+ link things in one of these three modes by applying the appropriate
+ combinations of options at link-time.
+
+ When the -shared link option is used a final link is not being
+ done. */
+
+#define DFBSD_LINK_SPEC \
+ "%{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
+ %{v:-V} \
+ %{assert*} %{R*} %{rpath*} %{defsym*} \
+ %{shared:-Bshareable %{h*} %{soname*}} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker %(dfbsd_dynamic_linker) \
+ } \
+ %{static:-Bstatic} \
+ } \
+ %{!static:--hash-style=gnu} \
+ %{symbolic:-Bsymbolic}"
+
+#undef LINK_SPEC
+#define LINK_SPEC DFBSD_LINK_SPEC
+
+#define DFBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.2"
+
+
+/* Use --as-needed -lgcc_s for eh support. */
+#ifdef HAVE_LD_AS_NEEDED
+#define USE_LD_AS_NEEDED 1
+#endif
+
+/************************[ Target stuff ]***********************************/
+
+/* All DragonFly Architectures support the ELF object file format. */
+#undef OBJECT_FORMAT_ELF
+#define OBJECT_FORMAT_ELF
+
+/* Don't assume anything about the header files. */
+#undef NO_IMPLICIT_EXTERN_C
+#define NO_IMPLICIT_EXTERN_C 1
+
+/* Follow DragonFly's standard headers (<machine/stdint.h>, etc...). */
+
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "int"
+
+#undef WINT_TYPE
+#define WINT_TYPE "int"
+
+/* Code generation parameters. */
+
+/* Use periods rather than dollar signs in special g++ assembler names.
+ This ensures the configuration knows our system correctly so we can link
+ with libraries compiled with the native cc. */
+#undef NO_DOLLAR_IN_LABEL
+
+/* Used by libgcc2.c. We support file locking with fcntl / F_SETLKW.
+ This enables the test coverage code to use file locking when exiting a
+ program, which avoids race conditions if the program has forked. */
+#define TARGET_POSIX_IO
diff --git a/gcc/config/dragonfly.opt b/gcc/config/dragonfly.opt
new file mode 100644
index 00000000000..c87828d1c6d
--- /dev/null
+++ b/gcc/config/dragonfly.opt
@@ -0,0 +1,64 @@
+; DragonFly BSD options.
+
+; Copyright (C) 2014 Free Software Foundation, Inc.
+;
+; 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/>.
+
+; See the GCC internals manual (options.texi) for a description of this file's format.
+
+; Please try to keep this file in ASCII collating order.
+
+assert
+Driver Separate
+
+assert=
+Driver JoinedOrMissing
+
+defsym
+Driver Separate
+
+defsym=
+Driver JoinedOrMissing
+
+posix
+Driver
+
+profile
+Driver
+
+pthread
+Driver
+
+rdynamic
+Driver
+
+rpath-link
+Driver Separate
+
+rpath-link=
+Driver JoinedOrMissing
+
+rpath=
+Driver JoinedOrMissing
+
+soname
+Driver Separate
+
+soname=
+Driver JoinedOrMissing
+
+; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/i386/dragonfly.h b/gcc/config/i386/dragonfly.h
new file mode 100644
index 00000000000..71362d58e32
--- /dev/null
+++ b/gcc/config/i386/dragonfly.h
@@ -0,0 +1,104 @@
+/* Definitions for Intel 386 running DragonFly with ELF format
+ Copyright (C) 2014 Free Software Foundation, Inc.
+ Contributed by John Marino <gnugcc@marino.st>
+
+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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* Override the default comment-starter of "/". */
+#undef ASM_COMMENT_START
+#define ASM_COMMENT_START "#"
+
+#undef ASM_APP_ON
+#define ASM_APP_ON "#APP\n"
+
+#undef ASM_APP_OFF
+#define ASM_APP_OFF "#NO_APP\n"
+
+#undef DBX_REGISTER_NUMBER
+#define DBX_REGISTER_NUMBER(n) \
+ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
+
+#undef NO_PROFILE_COUNTERS
+#define NO_PROFILE_COUNTERS 1
+
+/* Tell final.c that we don't need a label passed to mcount. */
+
+#undef MCOUNT_NAME
+#define MCOUNT_NAME ".mcount"
+
+/* Make gcc agree with <machine/ansi.h>. */
+
+#undef SIZE_TYPE
+#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
+
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD)
+
+#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */
+#define SUBTARGET_EXTRA_SPECS \
+ { "dfbsd_dynamic_linker", DFBSD_DYNAMIC_LINKER }
+
+/* A C statement to output to the stdio stream FILE an assembler
+ command to advance the location counter to a multiple of 1<<LOG
+ bytes if it is within MAX_SKIP bytes.
+
+ This is used to align code labels according to Intel recommendations. */
+
+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
+#undef ASM_OUTPUT_MAX_SKIP_ALIGN
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \
+ if ((LOG) != 0) { \
+ if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
+ else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
+ }
+#endif
+
+/* Don't default to pcc-struct-return, we want to retain compatibility with
+ older gcc versions AND pcc-struct-return is nonreentrant.
+ (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
+
+/* DragonFly sets the rounding precision of the FPU to 53 bits. Let the
+ compiler get the contents of <float.h> and std::numeric_limits correct. */
+#undef TARGET_96_ROUND_53_LONG_DOUBLE
+#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT)
+
+/* Put all *tf routines in libgcc. */
+#undef LIBGCC2_HAS_TF_MODE
+#define LIBGCC2_HAS_TF_MODE 1
+#define LIBGCC2_TF_CEXT q
+#define TF_SIZE 113
+
+/* Static stack checking is supported by means of probes. */
+#define STACK_CHECK_STATIC_BUILTIN 1
+
+/* Support for i386 was removed from DragonFly in 2007 */
+#define SUBTARGET32_DEFAULT_CPU "i486"
+
+#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
diff --git a/gcc/configure b/gcc/configure
index 127dceeef73..1440d7e7d34 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -27325,6 +27325,13 @@ case "$target" in
gcc_cv_target_dl_iterate_phdr=no
fi
;;
+ *-*-dragonfly* | *-*-freebsd*)
+ if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
+ gcc_cv_target_dl_iterate_phdr=yes
+ else
+ gcc_cv_target_dl_iterate_phdr=no
+ fi
+ ;;
esac
if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
diff --git a/gcc/configure.ac b/gcc/configure.ac
index a339a0f54d8..281ce8e06a1 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5019,6 +5019,13 @@ case "$target" in
gcc_cv_target_dl_iterate_phdr=no
fi
;;
+ *-*-dragonfly* | *-*-freebsd*)
+ if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
+ gcc_cv_target_dl_iterate_phdr=yes
+ else
+ gcc_cv_target_dl_iterate_phdr=no
+ fi
+ ;;
esac
GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
index cfa8df3097c..62e893a011e 100644
--- a/gcc/ginclude/stddef.h
+++ b/gcc/ginclude/stddef.h
@@ -133,6 +133,7 @@ _TYPE_wchar_t;
#ifndef _BSD_PTRDIFF_T_
#ifndef ___int_ptrdiff_t_h
#ifndef _GCC_PTRDIFF_T
+#ifndef _PTRDIFF_T_DECLARED /* DragonFly */
#define _PTRDIFF_T
#define _T_PTRDIFF_
#define _T_PTRDIFF
@@ -141,10 +142,12 @@ _TYPE_wchar_t;
#define _BSD_PTRDIFF_T_
#define ___int_ptrdiff_t_h
#define _GCC_PTRDIFF_T
+#define _PTRDIFF_T_DECLARED
#ifndef __PTRDIFF_TYPE__
#define __PTRDIFF_TYPE__ long int
#endif
typedef __PTRDIFF_TYPE__ ptrdiff_t;
+#endif /* _PTRDIFF_T_DECLARED */
#endif /* _GCC_PTRDIFF_T */
#endif /* ___int_ptrdiff_t_h */
#endif /* _BSD_PTRDIFF_T_ */
@@ -198,6 +201,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
#define _GCC_SIZE_T
#define _SIZET_
#if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
+ || defined(__DragonFly__) \
|| defined(__FreeBSD_kernel__)
/* __size_t is a typedef on FreeBSD 5, must not trash it. */
#elif defined (__VMS__)