diff options
author | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-05-21 11:08:58 +0000 |
---|---|---|
committer | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-05-21 11:08:58 +0000 |
commit | 463553dbd6573d1fd41d24aa1aac8e83bc95e3d6 (patch) | |
tree | 03facded16790b6c727201147904c9c4862b73cc /gcc | |
parent | c51f754b281732cea699c7cc2595a0d0c8cc6300 (diff) | |
download | gcc-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/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config.gcc | 30 | ||||
-rw-r--r-- | gcc/config/dragonfly-stdint.h | 56 | ||||
-rw-r--r-- | gcc/config/dragonfly.h | 129 | ||||
-rw-r--r-- | gcc/config/dragonfly.opt | 64 | ||||
-rw-r--r-- | gcc/config/i386/dragonfly.h | 104 | ||||
-rwxr-xr-x | gcc/configure | 7 | ||||
-rw-r--r-- | gcc/configure.ac | 7 | ||||
-rw-r--r-- | gcc/ginclude/stddef.h | 4 |
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__) |