diff options
author | Joseph Myers <joseph@codesourcery.com> | 2006-02-16 23:29:10 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2006-02-16 23:29:10 +0000 |
commit | 464aea985957cde55ba4c6a3781293441b89119f (patch) | |
tree | 2c090d6408195e6db383a030c30ebbadea6777e4 /libstdc++-v3/config/os/uclibc | |
parent | 6429d58f83a1ee1334942d419c078a1fcd962c18 (diff) | |
download | gcc-464aea985957cde55ba4c6a3781293441b89119f.zip gcc-464aea985957cde55ba4c6a3781293441b89119f.tar.gz gcc-464aea985957cde55ba4c6a3781293441b89119f.tar.bz2 |
re PR target/20353 (uclibc does not provide C99 math functions)
gcc:
PR target/20353
PR target/24578
PR target/24837
* config/linux.opt: New file.
* config/linux.h (CHOOSE_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER,
LINUX_DYNAMIC_LINKER): Define.
(TARGET_C99_FUNCTIONS): Define depending on TARGET_GLIBC.
* config.gcc (*-*-linux*): Define extra_options.
(*-*-*uclibc*): Define UCLIBC_DEFAULT.
(arm*-*-linux-gnueabi): Change to arm*-*-linux-*eabi.
* config/arm/linux-eabi.h (LINUX_TARGET_INTERPRETER): Change to
GLIBC_DYNAMIC_LINKER.
* config/arm/linux-elf.h (LINUX_TARGET_INTERPRETER): Likewise.
(LINUX_TARGET_LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/mips/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* doc/invoke.texi (GNU/Linux Options): New section.
gcc/testsuite:
* gcc.dg/builtins-config.h (HAVE_C99_RUNTIME): Don't define if
__UCLIBC__ is defined.
libstdc++-v3:
PR libstdc++/14939
* config/os/uclibc/ctype_base.h, config/os/uclibc/ctype_inline.h,
config/os/uclibc/ctype_noninline.h, config/os/uclibc/os_defines.h:
New.
* acinclude.m4 (GLIBCXX_CONFIGURE): Test whether using uClibc.
* configure.host: Use os/uclibc for uClibc.
* crossconfig.m4 (*-linux*): Use link tests. Don't hardcode
presence of math functions.
* configure: Regenerate.
From-SVN: r111160
Diffstat (limited to 'libstdc++-v3/config/os/uclibc')
-rw-r--r-- | libstdc++-v3/config/os/uclibc/ctype_base.h | 64 | ||||
-rw-r--r-- | libstdc++-v3/config/os/uclibc/ctype_inline.h | 69 | ||||
-rw-r--r-- | libstdc++-v3/config/os/uclibc/ctype_noninline.h | 92 | ||||
-rw-r--r-- | libstdc++-v3/config/os/uclibc/os_defines.h | 44 |
4 files changed, 269 insertions, 0 deletions
diff --git a/libstdc++-v3/config/os/uclibc/ctype_base.h b/libstdc++-v3/config/os/uclibc/ctype_base.h new file mode 100644 index 0000000..e5afd62 --- /dev/null +++ b/libstdc++-v3/config/os/uclibc/ctype_base.h @@ -0,0 +1,64 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 +// 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 2, 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. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.1 Locales +// + +/** @file ctype_base.h + * This is an internal header file, included by other library headers. + * You should not attempt to use it directly. + */ + +// Information as gleaned from /usr/include/ctype.h + + /// @brief Base class for ctype. + struct ctype_base + { + // Note: In uClibc, the following two types depend on configuration. + + // Non-standard typedefs. + typedef const __ctype_touplow_t* __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 __ctype_mask_t mask; + static const mask upper = _ISupper; + static const mask lower = _ISlower; + static const mask alpha = _ISalpha; + static const mask digit = _ISdigit; + static const mask xdigit = _ISxdigit; + static const mask space = _ISspace; + static const mask print = _ISprint; + static const mask graph = _ISalpha | _ISdigit | _ISpunct; + static const mask cntrl = _IScntrl; + static const mask punct = _ISpunct; + static const mask alnum = _ISalpha | _ISdigit; + }; diff --git a/libstdc++-v3/config/os/uclibc/ctype_inline.h b/libstdc++-v3/config/os/uclibc/ctype_inline.h new file mode 100644 index 0000000..79586dd --- /dev/null +++ b/libstdc++-v3/config/os/uclibc/ctype_inline.h @@ -0,0 +1,69 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2000, 2002, 2006 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 2, 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. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.1 Locales +// + +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) +// functions go in ctype.cc + + bool + ctype<char>:: + is(mask __m, char __c) const + { return _M_table[static_cast<unsigned char>(__c)] & __m; } + + const char* + ctype<char>:: + is(const char* __low, const char* __high, mask* __vec) const + { + while (__low < __high) + *__vec++ = _M_table[static_cast<unsigned char>(*__low++)]; + return __high; + } + + const char* + ctype<char>:: + scan_is(mask __m, const char* __low, const char* __high) const + { + while (__low < __high + && !(_M_table[static_cast<unsigned char>(*__low)] & __m)) + ++__low; + return __low; + } + + const char* + ctype<char>:: + scan_not(mask __m, const char* __low, const char* __high) const + { + while (__low < __high + && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0) + ++__low; + return __low; + } diff --git a/libstdc++-v3/config/os/uclibc/ctype_noninline.h b/libstdc++-v3/config/os/uclibc/ctype_noninline.h new file mode 100644 index 0000000..ea5fd1d --- /dev/null +++ b/libstdc++-v3/config/os/uclibc/ctype_noninline.h @@ -0,0 +1,92 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2006 +// 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 2, 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. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.1 Locales +// + +// Information as gleaned from /usr/include/ctype.h + + const ctype_base::mask* + ctype<char>::classic_table() throw() + { return __C_ctype_b; } + + ctype<char>::ctype(__c_locale, const mask* __table, bool __del, + size_t __refs) + : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), + _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0) + { + _M_toupper = __C_ctype_toupper; + _M_tolower = __C_ctype_tolower; + _M_table = __table ? __table : __C_ctype_b; + memset(_M_widen, 0, sizeof(_M_widen)); + memset(_M_narrow, 0, sizeof(_M_narrow)); + } + + ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) + : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), + _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0) + { + _M_toupper = __C_ctype_toupper; + _M_tolower = __C_ctype_tolower; + _M_table = __table ? __table : __C_ctype_b; + memset(_M_widen, 0, sizeof(_M_widen)); + memset(_M_narrow, 0, sizeof(_M_narrow)); + } + + char + ctype<char>::do_toupper(char __c) const + { return _M_toupper[static_cast<unsigned char>(__c)]; } + + const char* + ctype<char>::do_toupper(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = _M_toupper[static_cast<unsigned char>(*__low)]; + ++__low; + } + return __high; + } + + char + ctype<char>::do_tolower(char __c) const + { return _M_tolower[static_cast<unsigned char>(__c)]; } + + const char* + ctype<char>::do_tolower(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = _M_tolower[static_cast<unsigned char>(*__low)]; + ++__low; + } + return __high; + } diff --git a/libstdc++-v3/config/os/uclibc/os_defines.h b/libstdc++-v3/config/os/uclibc/os_defines.h new file mode 100644 index 0000000..7ab780c --- /dev/null +++ b/libstdc++-v3/config/os/uclibc/os_defines.h @@ -0,0 +1,44 @@ +// Specific definitions for GNU/Linux with uClibc -*- C++ -*- + +// Copyright (C) 2000, 2001, 2002, 2003, 2006 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 2, 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. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +#ifndef _GLIBCXX_OS_DEFINES +#define _GLIBCXX_OS_DEFINES 1 + +// System-specific #define, typedefs, corrections, etc, go here. This +// file will come before all others. + +// This keeps isanum, et al from being propagated as macros. +#define __NO_CTYPE 1 + +#include <features.h> + +// We must not see the optimized string functions GNU libc defines. +#define __NO_STRING_INLINES + +#endif |