mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 04:00:26 +08:00
config.gcc (*-*-dragonfly*): New target.
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. From-SVN: r210694
This commit is contained in:
parent
17cf9038e1
commit
dbed5a9bff
@ -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.
|
||||
|
@ -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*)
|
||||
|
56
gcc/config/dragonfly-stdint.h
Normal file
56
gcc/config/dragonfly-stdint.h
Normal file
@ -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)
|
129
gcc/config/dragonfly.h
Normal file
129
gcc/config/dragonfly.h
Normal file
@ -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
|
64
gcc/config/dragonfly.opt
Normal file
64
gcc/config/dragonfly.opt
Normal file
@ -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.
|
104
gcc/config/i386/dragonfly.h
Normal file
104
gcc/config/i386/dragonfly.h
Normal file
@ -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
|
7
gcc/configure
vendored
7
gcc/configure
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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__)
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-05-21 John Marino <gnugcc@marino.st>
|
||||
|
||||
* liberty.h: Use basename function on DragonFly.
|
||||
|
||||
2014-05-01 Steve Ellcey <sellcey@mips.com>
|
||||
|
||||
* include/longlong.h: Use 'defined()' to check __mips16.
|
||||
|
@ -106,7 +106,10 @@ extern int countargv (char**);
|
||||
to find the declaration so provide a fully prototyped one. If it
|
||||
is 1, we found it so don't provide any declaration at all. */
|
||||
#if !HAVE_DECL_BASENAME
|
||||
#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME)
|
||||
#if defined (__GNU_LIBRARY__ ) || defined (__linux__) \
|
||||
|| defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__NetBSD__) \
|
||||
|| defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) \
|
||||
|| defined (__DragonFly__) || defined (HAVE_DECL_BASENAME)
|
||||
extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
|
||||
#else
|
||||
/* Do not allow basename to be used if there is no prototype seen. We
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-05-21 John Marino <gnugcc@marino.st>
|
||||
|
||||
* runtime/os-unix.c (__DragonFly__): New target.
|
||||
|
||||
2014-04-11 Barry Tannenbaum <barry.m.tannenbaum@intel.com>
|
||||
|
||||
PR other/60644
|
||||
|
@ -54,6 +54,8 @@
|
||||
#elif defined __APPLE__
|
||||
# include <sys/sysctl.h>
|
||||
// Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output
|
||||
#elif defined __DragonFly__
|
||||
// No additional include files
|
||||
#elif defined __FreeBSD__
|
||||
// No additional include files
|
||||
#elif defined __CYGWIN__
|
||||
@ -374,7 +376,7 @@ COMMON_SYSDEP int __cilkrts_hardware_cpu_count(void)
|
||||
assert((unsigned)count == count);
|
||||
|
||||
return count;
|
||||
#elif defined __FreeBSD__ || defined __CYGWIN__
|
||||
#elif defined __FreeBSD__ || defined __CYGWIN__ || defined __DragonFly__
|
||||
int ncores = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
|
||||
return ncores;
|
||||
@ -402,6 +404,9 @@ COMMON_SYSDEP void __cilkrts_yield(void)
|
||||
// On MacOS, call sched_yield to yield quantum. I'm not sure why we
|
||||
// don't do this on Linux also.
|
||||
sched_yield();
|
||||
#elif defined(__DragonFly__)
|
||||
// On DragonFly BSD, call sched_yield to yield quantum.
|
||||
sched_yield();
|
||||
#elif defined(__MIC__)
|
||||
// On MIC, pthread_yield() really trashes things. Arch's measurements
|
||||
// showed that calling _mm_delay_32() (or doing nothing) was a better
|
||||
|
@ -1,3 +1,11 @@
|
||||
2014-05-20 John Marino <gnugcc@marino.st>
|
||||
|
||||
* 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.
|
||||
|
||||
2014-05-21 Maciej W. Rozycki <macro@codesourcery.com>
|
||||
|
||||
PR libgcc/60166
|
||||
|
@ -207,6 +207,11 @@ case ${host} in
|
||||
tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-libgcc-pic t-slibgcc-darwin"
|
||||
extra_parts="crt3.o crttms.o crttme.o"
|
||||
;;
|
||||
*-*-dragonfly*)
|
||||
tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip"
|
||||
tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
|
||||
;;
|
||||
*-*-freebsd*)
|
||||
# This is the generic ELF configuration of FreeBSD. Later
|
||||
# machine-specific sections may refine and add to this
|
||||
@ -302,7 +307,8 @@ case ${host} in
|
||||
esac
|
||||
|
||||
case ${host} in
|
||||
*-*-darwin* | *-*-freebsd* | *-*-netbsd* | *-*-openbsd* | *-*-solaris2*)
|
||||
*-*-darwin* | *-*-dragonfly* | *-*-freebsd* | *-*-netbsd* | *-*-openbsd* | \
|
||||
*-*-solaris2*)
|
||||
enable_execute_stack=enable-execute-stack-mprotect.c
|
||||
;;
|
||||
i[34567]86-*-mingw* | x86_64-*-mingw*)
|
||||
@ -545,6 +551,14 @@ i[34567]86-*-elf*)
|
||||
x86_64-*-elf*)
|
||||
tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
|
||||
;;
|
||||
i[34567]86-*-dragonfly*)
|
||||
tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff"
|
||||
md_unwind_header=i386/dragonfly-unwind.h
|
||||
;;
|
||||
x86_64-*-dragonfly*)
|
||||
tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff"
|
||||
md_unwind_header=i386/dragonfly-unwind.h
|
||||
;;
|
||||
i[34567]86-*-freebsd*)
|
||||
tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff"
|
||||
;;
|
||||
@ -1262,6 +1276,7 @@ i[34567]86-*-darwin* | x86_64-*-darwin* | \
|
||||
i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]* | \
|
||||
i[34567]86-*-cygwin* | x86_64-*-cygwin* | \
|
||||
i[34567]86-*-mingw* | x86_64-*-mingw* | \
|
||||
i[34567]86-*-dragonfly* | x86_64-*-dragonfly* | \
|
||||
i[34567]86-*-freebsd* | x86_64-*-freebsd* | \
|
||||
i[34567]86-*-openbsd* | x86_64-*-openbsd*)
|
||||
tmake_file="${tmake_file} t-softfp-tf"
|
||||
|
180
libgcc/config/i386/dragonfly-unwind.h
Normal file
180
libgcc/config/i386/dragonfly-unwind.h
Normal file
@ -0,0 +1,180 @@
|
||||
/* DWARF2 EH unwinding support for DragonFly BSD: AMD x86-64 and x86.
|
||||
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/>. */
|
||||
|
||||
/* Do code reading to identify a signal frame, and set the frame
|
||||
state data appropriately. See unwind-dw2.c for the structs. */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <signal.h>
|
||||
#include <sys/ucontext.h>
|
||||
#include <machine/sigframe.h>
|
||||
|
||||
|
||||
#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg
|
||||
|
||||
#ifdef __x86_64__
|
||||
#define MD_FALLBACK_FRAME_STATE_FOR x86_64_dragonfly_fallback_frame_state
|
||||
|
||||
|
||||
static void
|
||||
x86_64_sigtramp_range (unsigned char **start, unsigned char **end)
|
||||
{
|
||||
unsigned long ps_strings;
|
||||
int mib[2];
|
||||
size_t len;
|
||||
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PS_STRINGS;
|
||||
len = sizeof (ps_strings);
|
||||
sysctl (mib, 2, &ps_strings, &len, NULL, 0);
|
||||
|
||||
*start = (unsigned char *)ps_strings - 32;
|
||||
*end = (unsigned char *)ps_strings;
|
||||
}
|
||||
|
||||
|
||||
static _Unwind_Reason_Code
|
||||
x86_64_dragonfly_fallback_frame_state
|
||||
(struct _Unwind_Context *context, _Unwind_FrameState *fs)
|
||||
{
|
||||
unsigned char *pc = context->ra;
|
||||
unsigned char *sigtramp_start, *sigtramp_end;
|
||||
struct sigframe *sf;
|
||||
long new_cfa;
|
||||
|
||||
x86_64_sigtramp_range(&sigtramp_start, &sigtramp_end);
|
||||
if (pc >= sigtramp_end || pc < sigtramp_start)
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
sf = (struct sigframe *) context->cfa;
|
||||
new_cfa = sf->REG_NAME(rsp);
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
/* Register 7 is rsp */
|
||||
fs->regs.cfa_reg = 7;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
/* The SVR4 register numbering macros aren't usable in libgcc. */
|
||||
fs->regs.reg[0].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa;
|
||||
fs->regs.reg[1].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa;
|
||||
fs->regs.reg[2].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa;
|
||||
fs->regs.reg[3].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa;
|
||||
fs->regs.reg[4].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa;
|
||||
fs->regs.reg[5].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa;
|
||||
fs->regs.reg[6].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa;
|
||||
fs->regs.reg[8].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa;
|
||||
fs->regs.reg[9].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa;
|
||||
fs->regs.reg[10].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa;
|
||||
fs->regs.reg[11].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa;
|
||||
fs->regs.reg[12].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa;
|
||||
fs->regs.reg[13].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa;
|
||||
fs->regs.reg[14].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa;
|
||||
fs->regs.reg[15].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa;
|
||||
fs->regs.reg[16].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa;
|
||||
fs->retaddr_column = 16;
|
||||
fs->signal_frame = 1;
|
||||
return _URC_NO_REASON;
|
||||
}
|
||||
|
||||
#else /* Next section is for i386 */
|
||||
|
||||
#define MD_FALLBACK_FRAME_STATE_FOR x86_dragonfly_fallback_frame_state
|
||||
|
||||
|
||||
static void
|
||||
x86_sigtramp_range (unsigned char **start, unsigned char **end)
|
||||
{
|
||||
unsigned long ps_strings;
|
||||
int mib[2];
|
||||
size_t len;
|
||||
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PS_STRINGS;
|
||||
len = sizeof (ps_strings);
|
||||
sysctl (mib, 2, &ps_strings, &len, NULL, 0);
|
||||
|
||||
*start = (unsigned char *)ps_strings - 128;
|
||||
*end = (unsigned char *)ps_strings;
|
||||
}
|
||||
|
||||
|
||||
static _Unwind_Reason_Code
|
||||
x86_dragonfly_fallback_frame_state
|
||||
(struct _Unwind_Context *context, _Unwind_FrameState *fs)
|
||||
{
|
||||
unsigned char *pc = context->ra;
|
||||
unsigned char *sigtramp_start, *sigtramp_end;
|
||||
struct sigframe *sf;
|
||||
long new_cfa;
|
||||
|
||||
x86_sigtramp_range(&sigtramp_start, &sigtramp_end);
|
||||
|
||||
if (pc >= sigtramp_end || pc < sigtramp_start)
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
sf = (struct sigframe *) context->cfa;
|
||||
new_cfa = sf->REG_NAME(esp);
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 4;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
/* The SVR4 register numbering macros aren't usable in libgcc. */
|
||||
fs->regs.reg[0].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa;
|
||||
fs->regs.reg[3].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa;
|
||||
fs->regs.reg[1].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa;
|
||||
fs->regs.reg[2].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa;
|
||||
fs->regs.reg[6].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa;
|
||||
fs->regs.reg[7].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa;
|
||||
fs->regs.reg[5].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa;
|
||||
fs->regs.reg[8].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa;
|
||||
fs->retaddr_column = 8;
|
||||
fs->signal_frame = 1;
|
||||
return _URC_NO_REASON;
|
||||
}
|
||||
#endif /* ifdef __x86_64__ */
|
@ -79,11 +79,16 @@ call_ ## FUNC (void) \
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_DL_ITERATE_PHDR) && \
|
||||
(defined(__DragonFly__) || defined(__FreeBSD__))
|
||||
#define BSD_DL_ITERATE_PHDR_AVAILABLE
|
||||
#endif
|
||||
|
||||
#if defined(OBJECT_FORMAT_ELF) \
|
||||
&& !defined(OBJECT_FORMAT_FLAT) \
|
||||
&& defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
&& !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
|
||||
&& defined(__FreeBSD__) && __FreeBSD__ >= 7
|
||||
&& defined(BSD_DL_ITERATE_PHDR_AVAILABLE)
|
||||
#include <link.h>
|
||||
# define USE_PT_GNU_EH_FRAME
|
||||
#endif
|
||||
|
@ -33,20 +33,7 @@ static int need_enable_exec_stack;
|
||||
static void check_enabling (void) __attribute__ ((unused));
|
||||
extern void __enable_execute_stack (void *);
|
||||
|
||||
#if defined __FreeBSD__
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
static void __attribute__ ((constructor))
|
||||
check_enabling (void)
|
||||
{
|
||||
int prot = 0;
|
||||
size_t len = sizeof (prot);
|
||||
|
||||
sysctlbyname ("kern.stackprot", &prot, &len, NULL, 0);
|
||||
if (prot != STACK_PROT_RWX)
|
||||
need_enable_exec_stack = 1;
|
||||
}
|
||||
#elif defined __sun__ && defined __svr4__
|
||||
#if defined __sun__ && defined __svr4__
|
||||
static void __attribute__ ((constructor))
|
||||
check_enabling (void)
|
||||
{
|
||||
|
@ -58,7 +58,8 @@
|
||||
#endif
|
||||
|
||||
#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
&& defined(__FreeBSD__) && __FreeBSD__ >= 7
|
||||
&& defined(TARGET_DL_ITERATE_PHDR) \
|
||||
&& (defined(__DragonFly__) || defined(__FreeBSD__))
|
||||
# define ElfW __ElfN
|
||||
# define USE_PT_GNU_EH_FRAME
|
||||
#endif
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-05-21 John Marino <gnugcc@marino.st>
|
||||
|
||||
* configure.tgt (*-*-dragonfly*): New target.
|
||||
|
||||
2014-05-19 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/aarch64/sjlj.S: New file.
|
||||
|
@ -141,7 +141,7 @@ case "${target}" in
|
||||
*-*-gnu* | *-*-k*bsd*-gnu \
|
||||
| *-*-netbsd* | *-*-freebsd* | *-*-openbsd* \
|
||||
| *-*-solaris2* | *-*-sysv4* | *-*-hpux11* \
|
||||
| *-*-darwin* | *-*-aix*)
|
||||
| *-*-darwin* | *-*-aix* | *-*-dragonfly*)
|
||||
# POSIX system. The OS is supported.
|
||||
;;
|
||||
|
||||
|
@ -1,3 +1,15 @@
|
||||
2014-05-21 John Marino <gnugcc@marino.st>
|
||||
|
||||
* 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.
|
||||
|
||||
2014-05-20 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
* scripts/testsuite_flags.in (cxxflags): Remove @CXXFLAGS@ since
|
||||
|
@ -1989,6 +1989,9 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
|
||||
darwin* | freebsd*)
|
||||
enable_clocale_flag=darwin
|
||||
;;
|
||||
dragonfly*)
|
||||
enable_clocale_flag=dragonfly
|
||||
;;
|
||||
openbsd*)
|
||||
enable_clocale_flag=newlib
|
||||
;;
|
||||
@ -2081,6 +2084,23 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
|
||||
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
|
||||
;;
|
||||
|
||||
dragonfly)
|
||||
AC_MSG_RESULT(dragonfly)
|
||||
|
||||
CLOCALE_H=config/locale/generic/c_locale.h
|
||||
CLOCALE_CC=config/locale/dragonfly/c_locale.cc
|
||||
CCODECVT_CC=config/locale/generic/codecvt_members.cc
|
||||
CCOLLATE_CC=config/locale/generic/collate_members.cc
|
||||
CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
|
||||
CMESSAGES_H=config/locale/generic/messages_members.h
|
||||
CMESSAGES_CC=config/locale/generic/messages_members.cc
|
||||
CMONEY_CC=config/locale/generic/monetary_members.cc
|
||||
CNUMERIC_CC=config/locale/generic/numeric_members.cc
|
||||
CTIME_H=config/locale/generic/time_members.h
|
||||
CTIME_CC=config/locale/generic/time_members.cc
|
||||
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
|
||||
;;
|
||||
|
||||
gnu)
|
||||
AC_MSG_RESULT(gnu)
|
||||
|
||||
|
299
libstdc++-v3/config/locale/dragonfly/c_locale.cc
Normal file
299
libstdc++-v3/config/locale/dragonfly/c_locale.cc
Normal file
@ -0,0 +1,299 @@
|
||||
// Wrapper for underlying C-language localization -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library 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.
|
||||
|
||||
// This library 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/>.
|
||||
|
||||
//
|
||||
// ISO C++ 14882: 22.8 Standard locale categories.
|
||||
//
|
||||
|
||||
// Written by Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
#include <cerrno> // For errno
|
||||
#include <cmath> // For isinf, finite, finitef, fabs
|
||||
#include <cstdlib> // For strof, strtold
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <locale>
|
||||
#include <limits>
|
||||
|
||||
#ifdef _GLIBCXX_HAVE_IEEEFP_H
|
||||
#include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
template<>
|
||||
void
|
||||
__convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
|
||||
const __c_locale&) throw()
|
||||
{
|
||||
// Assumes __s formatted for "C" locale.
|
||||
char* __old = setlocale(LC_ALL, 0);
|
||||
const size_t __len = strlen(__old) + 1;
|
||||
char* __sav = new char[__len];
|
||||
memcpy(__sav, __old, __len);
|
||||
setlocale(LC_ALL, "C");
|
||||
char* __sanity;
|
||||
bool __overflow = false;
|
||||
|
||||
#if !__FLT_HAS_INFINITY__
|
||||
errno = 0;
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_HAVE_STRTOF
|
||||
__v = strtof(__s, &__sanity);
|
||||
#else
|
||||
double __d = strtod(__s, &__sanity);
|
||||
__v = static_cast<float>(__d);
|
||||
#ifdef _GLIBCXX_HAVE_FINITEF
|
||||
if (!finitef (__v))
|
||||
__overflow = true;
|
||||
#elif defined (_GLIBCXX_HAVE_FINITE)
|
||||
if (!finite (static_cast<double> (__v)))
|
||||
__overflow = true;
|
||||
#elif defined (_GLIBCXX_HAVE_ISINF)
|
||||
if (isinf (static_cast<double> (__v)))
|
||||
__overflow = true;
|
||||
#else
|
||||
if (fabs(__d) > numeric_limits<float>::max())
|
||||
__overflow = true;
|
||||
#endif
|
||||
#endif // _GLIBCXX_HAVE_STRTOF
|
||||
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 23. Num_get overflow result.
|
||||
if (__sanity == __s || *__sanity != '\0')
|
||||
{
|
||||
__v = 0.0f;
|
||||
__err = ios_base::failbit;
|
||||
}
|
||||
else if (__overflow
|
||||
#if __FLT_HAS_INFINITY__
|
||||
|| __v == numeric_limits<float>::infinity()
|
||||
|| __v == -numeric_limits<float>::infinity()
|
||||
#else
|
||||
|| ((__v > 1.0f || __v < -1.0f) && errno == ERANGE)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
if (__v > 0.0f)
|
||||
__v = numeric_limits<float>::max();
|
||||
else
|
||||
__v = -numeric_limits<float>::max();
|
||||
__err = ios_base::failbit;
|
||||
}
|
||||
|
||||
setlocale(LC_ALL, __sav);
|
||||
delete [] __sav;
|
||||
}
|
||||
|
||||
template<>
|
||||
void
|
||||
__convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
|
||||
const __c_locale&) throw()
|
||||
{
|
||||
// Assumes __s formatted for "C" locale.
|
||||
char* __old = setlocale(LC_ALL, 0);
|
||||
const size_t __len = strlen(__old) + 1;
|
||||
char* __sav = new char[__len];
|
||||
memcpy(__sav, __old, __len);
|
||||
setlocale(LC_ALL, "C");
|
||||
char* __sanity;
|
||||
|
||||
#if !__DBL_HAS_INFINITY__
|
||||
errno = 0;
|
||||
#endif
|
||||
|
||||
__v = strtod(__s, &__sanity);
|
||||
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 23. Num_get overflow result.
|
||||
if (__sanity == __s || *__sanity != '\0')
|
||||
{
|
||||
__v = 0.0;
|
||||
__err = ios_base::failbit;
|
||||
}
|
||||
else if (
|
||||
#if __DBL_HAS_INFINITY__
|
||||
__v == numeric_limits<double>::infinity()
|
||||
|| __v == -numeric_limits<double>::infinity())
|
||||
#else
|
||||
(__v > 1.0 || __v < -1.0) && errno == ERANGE)
|
||||
#endif
|
||||
{
|
||||
if (__v > 0.0)
|
||||
__v = numeric_limits<double>::max();
|
||||
else
|
||||
__v = -numeric_limits<double>::max();
|
||||
__err = ios_base::failbit;
|
||||
}
|
||||
|
||||
setlocale(LC_ALL, __sav);
|
||||
delete [] __sav;
|
||||
}
|
||||
|
||||
template<>
|
||||
void
|
||||
__convert_to_v(const char* __s, long double& __v,
|
||||
ios_base::iostate& __err, const __c_locale&) throw()
|
||||
{
|
||||
// Assumes __s formatted for "C" locale.
|
||||
char* __old = setlocale(LC_ALL, 0);
|
||||
const size_t __len = strlen(__old) + 1;
|
||||
char* __sav = new char[__len];
|
||||
memcpy(__sav, __old, __len);
|
||||
setlocale(LC_ALL, "C");
|
||||
|
||||
#if !__LDBL_HAS_INFINITY__
|
||||
errno = 0;
|
||||
#endif
|
||||
|
||||
#if defined(_GLIBCXX_HAVE_STRTOLD) && !defined(_GLIBCXX_HAVE_BROKEN_STRTOLD)
|
||||
char* __sanity;
|
||||
__v = strtold(__s, &__sanity);
|
||||
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 23. Num_get overflow result.
|
||||
if (__sanity == __s || *__sanity != '\0')
|
||||
#else
|
||||
typedef char_traits<char>::int_type int_type;
|
||||
int __p = sscanf(__s, "%Lf", &__v);
|
||||
|
||||
if (!__p || static_cast<int_type>(__p) == char_traits<char>::eof())
|
||||
#endif
|
||||
{
|
||||
__v = 0.0l;
|
||||
__err = ios_base::failbit;
|
||||
}
|
||||
else if (
|
||||
#if __LDBL_HAS_INFINITY__
|
||||
__v == numeric_limits<long double>::infinity()
|
||||
|| __v == -numeric_limits<long double>::infinity())
|
||||
#else
|
||||
(__v > 1.0l || __v < -1.0l) && errno == ERANGE)
|
||||
#endif
|
||||
{
|
||||
if (__v > 0.0l)
|
||||
__v = numeric_limits<long double>::max();
|
||||
else
|
||||
__v = -numeric_limits<long double>::max();
|
||||
__err = ios_base::failbit;
|
||||
}
|
||||
|
||||
setlocale(LC_ALL, __sav);
|
||||
delete [] __sav;
|
||||
}
|
||||
|
||||
|
||||
/* DragonFly's implementation of setlocale won't accept something like
|
||||
"de_DE". According to nls manpage, the expected format is:
|
||||
language[_territory][.codeset][@modifier], but it seems that both
|
||||
the _territory and .codeset components are required.
|
||||
|
||||
As an attempt to correct for this, we'll tack on ".UTF-8" if
|
||||
a period is not detected in the locale string.
|
||||
|
||||
There are no locales with modifiers on DragonFly so if found, they
|
||||
will just be stripped off silently. e.g "de_DE@euro" will be reduced
|
||||
to "de_DE". The UTF-8 default would be added after that.
|
||||
*/
|
||||
|
||||
void
|
||||
locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
|
||||
__c_locale)
|
||||
{
|
||||
const size_t size__s = (__s == NULL) ? 1 : strlen (__s);
|
||||
const char UTF8[] = ".UTF-8";
|
||||
char localspec[size__s + 6 + 1];
|
||||
|
||||
if (__s == NULL) {
|
||||
localspec[0] = NULL;
|
||||
} else {
|
||||
strcpy (localspec, __s);
|
||||
char * pch = strchr (localspec, '@');
|
||||
if (pch != NULL)
|
||||
*pch = 0;
|
||||
|
||||
if ( (strchr (__s, '.') == NULL)
|
||||
&& (strcmp (__s, "C") != 0)
|
||||
&& (strcmp (__s, "POSIX") != 0))
|
||||
strncat (localspec, UTF8, 6);
|
||||
}
|
||||
|
||||
const char * result = std::setlocale(LC_ALL, localspec);
|
||||
|
||||
if ((strcmp(result, "C") != 0) && (strcmp (result, localspec) != 0))
|
||||
__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
|
||||
"name not valid"));
|
||||
__cloc = 0;
|
||||
}
|
||||
|
||||
void
|
||||
locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
|
||||
{ __cloc = 0; }
|
||||
|
||||
__c_locale
|
||||
locale::facet::_S_clone_c_locale(__c_locale&) throw()
|
||||
{ return __c_locale(); }
|
||||
|
||||
__c_locale
|
||||
locale::facet::_S_lc_ctype_c_locale(__c_locale, const char*)
|
||||
{ return __c_locale(); }
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
|
||||
{
|
||||
"LC_CTYPE",
|
||||
"LC_NUMERIC",
|
||||
"LC_TIME",
|
||||
"LC_COLLATE",
|
||||
"LC_MONETARY",
|
||||
"LC_MESSAGES"
|
||||
};
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
const char* const* const locale::_S_categories = __gnu_cxx::category_names;
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
// XXX GLIBCXX_ABI Deprecated
|
||||
#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
|
||||
#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
|
||||
extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
|
||||
_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
|
||||
#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
|
173
libstdc++-v3/config/locale/dragonfly/ctype_members.cc
Normal file
173
libstdc++-v3/config/locale/dragonfly/ctype_members.cc
Normal file
@ -0,0 +1,173 @@
|
||||
// std::ctype implementation details, GNU version -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library 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.
|
||||
|
||||
// This library 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/>.
|
||||
|
||||
//
|
||||
// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
|
||||
//
|
||||
|
||||
// Written by Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
#include <locale>
|
||||
#include <bits/c++locale_internal.h>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
// NB: The other ctype<char> specializations are in src/locale.cc and
|
||||
// various /config/os/* files.
|
||||
|
||||
ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
|
||||
: ctype<char>(0, false, __refs)
|
||||
{
|
||||
if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
|
||||
{
|
||||
this->_S_destroy_c_locale(this->_M_c_locale_ctype);
|
||||
this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
|
||||
}
|
||||
}
|
||||
|
||||
ctype_byname<char>::~ctype_byname()
|
||||
{ }
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
ctype<wchar_t>::__wmask_type
|
||||
ctype<wchar_t>::_M_convert_to_wmask(
|
||||
const mask __attribute__((__unused__)) __m) const throw()
|
||||
{
|
||||
// DragonFly uses the same codes for 'char' as 'wchar_t', so this routine
|
||||
// never gets called.
|
||||
return __wmask_type();
|
||||
};
|
||||
|
||||
wchar_t
|
||||
ctype<wchar_t>::do_toupper(wchar_t __c) const
|
||||
{ return towupper(__c); }
|
||||
|
||||
const wchar_t*
|
||||
ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
|
||||
{
|
||||
while (__lo < __hi)
|
||||
{
|
||||
*__lo = towupper(*__lo);
|
||||
++__lo;
|
||||
}
|
||||
return __hi;
|
||||
}
|
||||
|
||||
wchar_t
|
||||
ctype<wchar_t>::do_tolower(wchar_t __c) const
|
||||
{ return towlower(__c); }
|
||||
|
||||
const wchar_t*
|
||||
ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
|
||||
{
|
||||
while (__lo < __hi)
|
||||
{
|
||||
*__lo = towlower(*__lo);
|
||||
++__lo;
|
||||
}
|
||||
return __hi;
|
||||
}
|
||||
|
||||
wchar_t
|
||||
ctype<wchar_t>::
|
||||
do_widen(char __c) const
|
||||
{ return _M_widen[static_cast<unsigned char>(__c)]; }
|
||||
|
||||
const char*
|
||||
ctype<wchar_t>::
|
||||
do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
|
||||
{
|
||||
while (__lo < __hi)
|
||||
{
|
||||
*__dest = _M_widen[static_cast<unsigned char>(*__lo)];
|
||||
++__lo;
|
||||
++__dest;
|
||||
}
|
||||
return __hi;
|
||||
}
|
||||
|
||||
char
|
||||
ctype<wchar_t>::
|
||||
do_narrow(wchar_t __wc, char __dfault) const
|
||||
{
|
||||
if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
|
||||
return _M_narrow[__wc];
|
||||
const int __c = wctob(__wc);
|
||||
return (__c == EOF ? __dfault : static_cast<char>(__c));
|
||||
}
|
||||
|
||||
const wchar_t*
|
||||
ctype<wchar_t>::
|
||||
do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
|
||||
char* __dest) const
|
||||
{
|
||||
if (_M_narrow_ok)
|
||||
while (__lo < __hi)
|
||||
{
|
||||
if (*__lo >= 0 && *__lo < 128)
|
||||
*__dest = _M_narrow[*__lo];
|
||||
else
|
||||
{
|
||||
const int __c = wctob(*__lo);
|
||||
*__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
|
||||
}
|
||||
++__lo;
|
||||
++__dest;
|
||||
}
|
||||
else
|
||||
while (__lo < __hi)
|
||||
{
|
||||
const int __c = wctob(*__lo);
|
||||
*__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
|
||||
++__lo;
|
||||
++__dest;
|
||||
}
|
||||
return __hi;
|
||||
}
|
||||
|
||||
void
|
||||
ctype<wchar_t>::_M_initialize_ctype() throw()
|
||||
{
|
||||
wint_t __i;
|
||||
for (__i = 0; __i < 128; ++__i)
|
||||
{
|
||||
const int __c = wctob(__i);
|
||||
if (__c == EOF)
|
||||
break;
|
||||
else
|
||||
_M_narrow[__i] = static_cast<char>(__c);
|
||||
}
|
||||
if (__i == 128)
|
||||
_M_narrow_ok = true;
|
||||
else
|
||||
_M_narrow_ok = false;
|
||||
for (size_t __i = 0;
|
||||
__i < sizeof(_M_widen) / sizeof(wint_t); ++__i)
|
||||
_M_widen[__i] = btowc(__i);
|
||||
}
|
||||
#endif // _GLIBCXX_USE_WCHAR_T
|
||||
}
|
58
libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
Normal file
58
libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
Normal file
@ -0,0 +1,58 @@
|
||||
// Locale support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library 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.
|
||||
|
||||
// This library 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/>.
|
||||
|
||||
//
|
||||
// ISO C++ 14882: 22.1 Locales
|
||||
//
|
||||
|
||||
// Information as gleaned from /usr/include/ctype.h on DragonFly.
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
/// @brief Base class for ctype.
|
||||
struct ctype_base
|
||||
{
|
||||
// Non-standard typedefs.
|
||||
typedef const int* __to_type;
|
||||
|
||||
// NB: Offsets into ctype<char>::_M_table force a particular size
|
||||
// on the mask type. Because of this, we don't use an enum.
|
||||
typedef unsigned long mask;
|
||||
static const mask upper = _CTYPE_U;
|
||||
static const mask lower = _CTYPE_L;
|
||||
static const mask alpha = _CTYPE_A;
|
||||
static const mask digit = _CTYPE_D;
|
||||
static const mask xdigit = _CTYPE_X;
|
||||
static const mask space = _CTYPE_S;
|
||||
static const mask print = _CTYPE_R;
|
||||
static const mask graph = _CTYPE_A | _CTYPE_D | _CTYPE_P;
|
||||
static const mask cntrl = _CTYPE_C;
|
||||
static const mask punct = _CTYPE_P;
|
||||
static const mask alnum = _CTYPE_A | _CTYPE_D;
|
||||
};
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
99
libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc
Normal file
99
libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc
Normal file
@ -0,0 +1,99 @@
|
||||
// Locale support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library 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.
|
||||
|
||||
// This library 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/>.
|
||||
|
||||
/** @file ctype_configure_char.cc */
|
||||
|
||||
//
|
||||
// ISO C++ 14882: 22.1 Locales
|
||||
//
|
||||
|
||||
#include <locale>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
// Information as gleaned from /usr/include/ctype.h
|
||||
|
||||
const ctype_base::mask*
|
||||
ctype<char>::classic_table() throw()
|
||||
{ return 0; }
|
||||
|
||||
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
|
||||
size_t __refs)
|
||||
: facet(__refs), _M_del(__table != 0 && __del),
|
||||
_M_toupper(NULL), _M_tolower(NULL),
|
||||
_M_table(__table ? __table : classic_table())
|
||||
{
|
||||
memset(_M_widen, 0, sizeof(_M_widen));
|
||||
_M_widen_ok = 0;
|
||||
memset(_M_narrow, 0, sizeof(_M_narrow));
|
||||
_M_narrow_ok = 0;
|
||||
}
|
||||
|
||||
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
|
||||
: facet(__refs), _M_del(__table != 0 && __del),
|
||||
_M_toupper(NULL), _M_tolower(NULL),
|
||||
_M_table(__table ? __table : classic_table())
|
||||
{
|
||||
memset(_M_widen, 0, sizeof(_M_widen));
|
||||
_M_widen_ok = 0;
|
||||
memset(_M_narrow, 0, sizeof(_M_narrow));
|
||||
_M_narrow_ok = 0;
|
||||
}
|
||||
|
||||
char
|
||||
ctype<char>::do_toupper(char __c) const
|
||||
{ return ::toupper((int) __c); }
|
||||
|
||||
const char*
|
||||
ctype<char>::do_toupper(char* __low, const char* __high) const
|
||||
{
|
||||
while (__low < __high)
|
||||
{
|
||||
*__low = ::toupper((int) *__low);
|
||||
++__low;
|
||||
}
|
||||
return __high;
|
||||
}
|
||||
|
||||
char
|
||||
ctype<char>::do_tolower(char __c) const
|
||||
{ return ::tolower((int) __c); }
|
||||
|
||||
const char*
|
||||
ctype<char>::do_tolower(char* __low, const char* __high) const
|
||||
{
|
||||
while (__low < __high)
|
||||
{
|
||||
*__low = ::tolower((int) *__low);
|
||||
++__low;
|
||||
}
|
||||
return __high;
|
||||
}
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
133
libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h
Normal file
133
libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h
Normal file
@ -0,0 +1,133 @@
|
||||
// Locale support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library 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.
|
||||
|
||||
// This library 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/>.
|
||||
|
||||
/** @file bits/ctype_inline.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{locale}
|
||||
*/
|
||||
|
||||
//
|
||||
// ISO C++ 14882: 22.1 Locales
|
||||
//
|
||||
|
||||
// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
|
||||
// functions go in ctype.cc
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
bool
|
||||
ctype<char>::
|
||||
is(mask __m, char __c) const
|
||||
{
|
||||
if (_M_table)
|
||||
return _M_table[static_cast<unsigned char>(__c)] & __m;
|
||||
else
|
||||
return __istype(__c, __m);
|
||||
}
|
||||
|
||||
const char*
|
||||
ctype<char>::
|
||||
is(const char* __low, const char* __high, mask* __vec) const
|
||||
{
|
||||
if (_M_table)
|
||||
while (__low < __high)
|
||||
*__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
|
||||
else
|
||||
for (;__low < __high; ++__vec, ++__low)
|
||||
{
|
||||
*__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
|
||||
| space | print | graph | cntrl | punct | alnum);
|
||||
}
|
||||
return __high;
|
||||
}
|
||||
|
||||
const char*
|
||||
ctype<char>::
|
||||
scan_is(mask __m, const char* __low, const char* __high) const
|
||||
{
|
||||
if (_M_table)
|
||||
while (__low < __high
|
||||
&& !(_M_table[static_cast<unsigned char>(*__low)] & __m))
|
||||
++__low;
|
||||
else
|
||||
while (__low < __high && !this->is(__m, *__low))
|
||||
++__low;
|
||||
return __low;
|
||||
}
|
||||
|
||||
const char*
|
||||
ctype<char>::
|
||||
scan_not(mask __m, const char* __low, const char* __high) const
|
||||
{
|
||||
if (_M_table)
|
||||
while (__low < __high
|
||||
&& (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
|
||||
++__low;
|
||||
else
|
||||
while (__low < __high && this->is(__m, *__low) != 0)
|
||||
++__low;
|
||||
return __low;
|
||||
}
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
inline bool
|
||||
ctype<wchar_t>::
|
||||
do_is(mask __m, wchar_t __c) const
|
||||
{
|
||||
return __istype (__c, __m);
|
||||
}
|
||||
|
||||
inline const wchar_t*
|
||||
ctype<wchar_t>::
|
||||
do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
|
||||
{
|
||||
for (; __lo < __hi; ++__vec, ++__lo)
|
||||
*__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit
|
||||
| space | print | graph | cntrl | punct | alnum);
|
||||
return __hi;
|
||||
}
|
||||
|
||||
inline const wchar_t*
|
||||
ctype<wchar_t>::
|
||||
do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
|
||||
{
|
||||
while (__lo < __hi && ! __istype (*__lo, __m))
|
||||
++__lo;
|
||||
return __lo;
|
||||
}
|
||||
|
||||
inline const wchar_t*
|
||||
ctype<wchar_t>::
|
||||
do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
|
||||
{
|
||||
while (__lo < __hi && __istype (*__lo, __m))
|
||||
++__lo;
|
||||
return __lo;
|
||||
}
|
||||
#endif
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
32
libstdc++-v3/config/os/bsd/dragonfly/os_defines.h
Normal file
32
libstdc++-v3/config/os/bsd/dragonfly/os_defines.h
Normal file
@ -0,0 +1,32 @@
|
||||
// Specific definitions for BSD -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library 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.
|
||||
|
||||
// This library 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/>.
|
||||
|
||||
|
||||
#ifndef _GLIBCXX_OS_DEFINES
|
||||
#define _GLIBCXX_OS_DEFINES 1
|
||||
|
||||
// System-specific #define, typedefs, corrections, etc, go here. This
|
||||
// file will come before all others.
|
||||
|
||||
#endif
|
21
libstdc++-v3/configure
vendored
21
libstdc++-v3/configure
vendored
@ -15849,6 +15849,9 @@ fi
|
||||
darwin* | freebsd*)
|
||||
enable_clocale_flag=darwin
|
||||
;;
|
||||
dragonfly*)
|
||||
enable_clocale_flag=dragonfly
|
||||
;;
|
||||
openbsd*)
|
||||
enable_clocale_flag=newlib
|
||||
;;
|
||||
@ -15994,6 +15997,24 @@ $as_echo "darwin or freebsd" >&6; }
|
||||
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
|
||||
;;
|
||||
|
||||
dragonfly)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: dragonfly" >&5
|
||||
$as_echo "dragonfly" >&6; }
|
||||
|
||||
CLOCALE_H=config/locale/generic/c_locale.h
|
||||
CLOCALE_CC=config/locale/dragonfly/c_locale.cc
|
||||
CCODECVT_CC=config/locale/generic/codecvt_members.cc
|
||||
CCOLLATE_CC=config/locale/generic/collate_members.cc
|
||||
CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
|
||||
CMESSAGES_H=config/locale/generic/messages_members.h
|
||||
CMESSAGES_CC=config/locale/generic/messages_members.cc
|
||||
CMONEY_CC=config/locale/generic/monetary_members.cc
|
||||
CNUMERIC_CC=config/locale/generic/numeric_members.cc
|
||||
CTIME_H=config/locale/generic/time_members.h
|
||||
CTIME_CC=config/locale/generic/time_members.cc
|
||||
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
|
||||
;;
|
||||
|
||||
gnu)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: gnu" >&5
|
||||
$as_echo "gnu" >&6; }
|
||||
|
@ -260,6 +260,9 @@ case "${host_os}" in
|
||||
os_include_dir="os/djgpp"
|
||||
error_constants_dir="os/djgpp"
|
||||
;;
|
||||
dragonfly*)
|
||||
os_include_dir="os/bsd/dragonfly"
|
||||
;;
|
||||
freebsd*)
|
||||
os_include_dir="os/bsd/freebsd"
|
||||
;;
|
||||
|
Loading…
x
Reference in New Issue
Block a user