2005-03-17 Jeff Johnston <jjohnstn@redhat.com>

* configure.in: Add new check to see if compiler supports
        aliasing of arrays and define _HAVE_ARRAY_ALIASING if true.
        * configure: Regenerated.
        * Makefile.in: Ditto.
        * newlib.hin: Add _HAVE_ARRAY_ALIASING.
        * libc/ctype/ctype_.c: Check for _HAVE_ARRAY_ALIASING before
        aliasing the _ctype_ array to _ctype_b.
        * libc/include/ctype.h: Change macros to use __ctype_ptr.  Mark
        _ctype_ as deprecated.
This commit is contained in:
Jeff Johnston 2005-03-17 20:11:23 +00:00
parent 993317d0ed
commit dd801fdabd
7 changed files with 106 additions and 20 deletions

View File

@ -1,3 +1,15 @@
2005-03-17 Jeff Johnston <jjohnstn@redhat.com>
* configure.in: Add new check to see if compiler supports
aliasing of arrays and define _HAVE_ARRAY_ALIASING if true.
* configure: Regenerated.
* Makefile.in: Ditto.
* newlib.hin: Add _HAVE_ARRAY_ALIASING.
* libc/ctype/ctype_.c: Check for _HAVE_ARRAY_ALIASING before
aliasing the _ctype_ array to _ctype_b.
* libc/include/ctype.h: Change macros to use __ctype_ptr. Mark
_ctype_ as deprecated.
2005-03-17 Hans-Peter Nilsson <hp@axis.com>
* configure.host (newlib_cflags) <cris-*-*, crisv32-*-*>: Add

View File

@ -103,6 +103,7 @@ SYS_OBJECTLIST = @SYS_OBJECTLIST@
UNIX_OBJECTLIST = @UNIX_OBJECTLIST@
VERSION = @VERSION@
aext = @aext@
libc_cv_array_aliasing = @libc_cv_array_aliasing@
libc_cv_initfinit_array = @libc_cv_initfinit_array@
libm_machine_dir = @libm_machine_dir@
machine_dir = @machine_dir@

29
newlib/configure vendored
View File

@ -3459,6 +3459,34 @@ EOF
fi
echo $ac_n "checking for array aliasing support""... $ac_c" 1>&6
echo "configure:3464: checking for array aliasing support" >&5
if eval "test \"`echo '$''{'libc_cv_array_aliasing'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
char x3 = { 'a', 'b', 'c' };
extern char y2 __attribute__((alias ("x+1")));
EOF
if { ac_try='${CC} $CFLAGS $CPPFLAGS -c conftest.c
1>&AS_MESSAGE_LOG_FD'; { (eval echo configure:3473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_array_aliasing=yes
else
libc_cv_array_aliasing=no
fi
rm -f conftest*
fi
echo "$ac_t""$libc_cv_array_aliasing" 1>&6
if test $libc_cv_array_aliasing = yes; then
cat >> confdefs.h <<EOF
#define _HAVE_ARRAY_ALIASING 1
EOF
fi
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@ -3676,6 +3704,7 @@ s%@UNIX_OBJECTLIST@%$UNIX_OBJECTLIST%g
s%@STDIO64_OBJECTLIST@%$STDIO64_OBJECTLIST%g
s%@CC_FOR_BUILD@%$CC_FOR_BUILD%g
s%@libc_cv_initfinit_array@%$libc_cv_initfinit_array%g
s%@libc_cv_array_aliasing@%$libc_cv_array_aliasing%g
CEOF
EOF

View File

@ -354,6 +354,25 @@ if test $libc_cv_initfinit_array = yes; then
AC_DEFINE_UNQUOTED(HAVE_INITFINI_ARRAY)
fi
AC_CACHE_CHECK(for array aliasing support,
libc_cv_array_aliasing, [dnl
cat > conftest.c <<EOF
char x[3] = { 'a', 'b', 'c' };
extern char y[2] __attribute__((alias ("x+1")));
EOF
if AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS -c conftest.c
1>&AS_MESSAGE_LOG_FD])
then
libc_cv_array_aliasing=yes
else
libc_cv_array_aliasing=no
fi
rm -f conftest*])
AC_SUBST(libc_cv_array_aliasing)
if test $libc_cv_array_aliasing = yes; then
AC_DEFINE_UNQUOTED(_HAVE_ARRAY_ALIASING)
fi
AC_OUTPUT(Makefile,
[if test -n "$CONFIG_FILES"; then
unset ac_file

View File

@ -84,21 +84,40 @@ static _CONST char _ctype_b[128 + 256] = {
_CTYPE_DATA_128_256
};
#if defined(__CYGWIN__)
extern _CONST char __declspec(dllexport) _ctype_[1 + 256] __attribute__ ((alias ("_ctype_b+127")));
# if defined(__CYGWIN__)
_CONST char __declspec(dllexport) *__ctype_ptr = _ctype_b + 128;
#else
extern _CONST char _ctype_[1 + 256] __attribute__ ((alias ("_ctype_b+127")));
# else
_CONST char *__ctype_ptr = _ctype_b + 128;
#endif
# endif
# if defined(_HAVE_ARRAY_ALIASING)
# if defined(__CYGWIN__)
extern _CONST char __declspec(dllexport) _ctype_[1 + 256] __attribute__ ((alias ("_ctype_b+127")));
# else
extern _CONST char _ctype_[1 + 256] __attribute__ ((alias ("_ctype_b+127")));
# endif
# else /* !_HAVE_ARRAY_ALIASING */
# if defined(__CYGWIN__)
_CONST char __declspec(dllexport) _ctype_[1 + 256] = {
# else
_CONST char _ctype_[1 + 256] = {
# endif
0,
_CTYPE_DATA_0_127,
_CTYPE_DATA_128_256
};
# endif /* !_HAVE_ARRAY_ALIASING */
#else /* !defined(ALLOW_NEGATIVE_CTYPE_INDEX) */
#if defined(__CYGWIN__)
# if defined(__CYGWIN__)
_CONST char __declspec(dllexport) _ctype_[1 + 256] = {
#else
# else
_CONST char _ctype_[1 + 256] = {
#endif
# endif
0,
_CTYPE_DATA_0_127,
_CTYPE_DATA_128_256

View File

@ -36,20 +36,23 @@ int _EXFUN(_toupper, (int __c));
#define _X 0100
#define _B 0200
extern __IMPORT _CONST char _ctype_[];
extern __IMPORT _CONST char *__ctype_ptr;
#ifndef __cplusplus
#define isalpha(c) ((_ctype_+1)[(unsigned)(c)]&(_U|_L))
#define isupper(c) ((_ctype_+1)[(unsigned)(c)]&_U)
#define islower(c) ((_ctype_+1)[(unsigned)(c)]&_L)
#define isdigit(c) ((_ctype_+1)[(unsigned)(c)]&_N)
#define isxdigit(c) ((_ctype_+1)[(unsigned)(c)]&(_X|_N))
#define isspace(c) ((_ctype_+1)[(unsigned)(c)]&_S)
#define ispunct(c) ((_ctype_+1)[(unsigned)(c)]&_P)
#define isalnum(c) ((_ctype_+1)[(unsigned)(c)]&(_U|_L|_N))
#define isprint(c) ((_ctype_+1)[(unsigned)(c)]&(_P|_U|_L|_N|_B))
#define isgraph(c) ((_ctype_+1)[(unsigned)(c)]&(_P|_U|_L|_N))
#define iscntrl(c) ((_ctype_+1)[(unsigned)(c)]&_C)
#define isalpha(c) ((__ctype_ptr+1)[(unsigned)(c)]&(_U|_L))
#define isupper(c) ((__ctype_ptr+1)[(unsigned)(c)]&_U)
#define islower(c) ((__ctype_ptr+1)[(unsigned)(c)]&_L)
#define isdigit(c) ((__ctype_ptr+1)[(unsigned)(c)]&_N)
#define isxdigit(c) ((__ctype_ptr+1)[(unsigned)(c)]&(_X|_N))
#define isspace(c) ((__ctype_ptr+1)[(unsigned)(c)]&_S)
#define ispunct(c) ((__ctype_ptr+1)[(unsigned)(c)]&_P)
#define isalnum(c) ((__ctype_ptr+1)[(unsigned)(c)]&(_U|_L|_N))
#define isprint(c) ((__ctype_ptr+1)[(unsigned)(c)]&(_P|_U|_L|_N|_B))
#define isgraph(c) ((__ctype_ptr+1)[(unsigned)(c)]&(_P|_U|_L|_N))
#define iscntrl(c) ((__ctype_ptr+1)[(unsigned)(c)]&_C)
extern __IMPORT _CONST char _ctype_[]; /* Deprecated. */
/* Non-gcc versions will get the library versions, and will be
slightly slower */
#ifdef __GNUC__

View File

@ -141,5 +141,8 @@
* sections. */
#undef HAVE_INITFINI_ARRAY
/* Define if the compiler supports aliasing an array to an address. */
#undef _HAVE_ARRAY_ALIASING
#endif /* !__NEWLIB_H__ */