diff options
70 files changed, 1689 insertions, 574 deletions
diff --git a/ChangeLog b/ChangeLog index ea83c11b61..7b6672c406 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,190 @@ +1997-03-25 02:15 Ulrich Drepper <drepper@cygnus.com> + + * gmon/gmon.c: Optimize a bit by using more sets of records to + write in a single writev call. + + * math/math.h: Add definitions of macros __MATHCALLX and __MATHDECLX. + * math/mathcalls.h: Use __MATHCALLX for fabs, infnan, copysign, + nan, isnan, nextafter, trunc, __fpclassify and signbit to mark as + `const'. + Use __MATHDECLX for isinf and finite. + + * sysdeps/generic/setenv.c [_LIBC]: Define __clearenv and make + clearenv a weak alias. + + Implement complex exponential function. + * sysdeps/libm-ieee754/s_cexp.c: New file. + * sysdeps/libm-ieee754/s_cexpf.c: New file. + * sysdeps/libm-ieee754/s_cexpl.c: New file. + + * sysdeps/libm-ieee754/s_nan.c: Define function as __nan and make + nan a weak alias. + * sysdeps/libm-ieee754/s_nanf.c: Likewise for nanf. + * sysdeps/libm-ieee754/s_nanl.c: Likewise for nanl. + + * sysdeps/unix/sysv/linux/iovec.h: Don't use kernel header because + of type clashes. Add all definitions here. + + * sysdeps/unix/sysv/linux/shmat.c: Likewise. Correct types according + to XPG4.2. + * sysdeps/unix/sysv/linux/shmdt.c: Likewise. + * sysdeps/unix/sysv/linux/msgrcv.c: Likewise. + + * sysvipc/sys/shm.h (shmat, shmdt): Correct types. + + * sysdeps/unix/sysv/linux/sys/kd.h: Define _LINUX_TYPES_H to avoid + use of kernel types. + +1997-03-25 00:00 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/unix/sysv/linux/netinet/ip.h (struct ip_timestamp): + Correct typos. Reported by a sun <asun@zoology.washington.edu>. + +1997-03-20 21:58 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/libm-ieee754/s_asinhl.c: Fix sign of result. + +1997-03-20 16:20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/libm-ieee754/e_atan2l.c: Fix typo. + +1997-03-20 14:23 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/m68k/fpu/__math.h (__logb, logb): Don't define. + * sysdeps/m68k/fpu/s_logb.c: Removed. + * sysdeps/m68k/fpu/s_logbf.c: Removed. + * sysdeps/m68k/fpu/s_logbl.c: Removed. + + * sysdeps/m68k/fpu/__math.h (__ieee754_atan2, __ieee754_pow): + Don't define here. + * sysdeps/m68k/fpu/e_atan2.c: Rewritten. + * sysdeps/m68k/fpu/e_pow.c: Likewise. + * sysdeps/m68k/fpu/e_atan2f.c: Based on e_atan2.c. + * sysdeps/m68k/fpu/e_atan2l.c: Likewise. + * sysdeps/m68k/fpu/e_powf.c: Based on e_pow.c. + * sysdeps/m68k/fpu/e_powl.c: Likewise. + + * sysdeps/m68k/fpu/s_log2.c: New file. + * sysdeps/m68k/fpu/s_log2f.c: New file. + * sysdeps/m68k/fpu/s_log2l.c: New file. + * sysdeps/m68k/fpu/s_exp2.c: New file. + * sysdeps/m68k/fpu/s_exp2f.c: New file. + * sysdeps/m68k/fpu/s_exp2l.c: New file. + +1997-03-20 14:46 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Makeconfig (all): Make sure this is always the default goal. + +1997-03-20 11:09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * math/libm-test.c: Increase epsilon in many places. Fix many + typos. Allow optinal argument also for short option. + +1997-03-20 11:09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * math/Makefile ($(objpfx)$(tests)): Link against libm. + +1997-03-24 23:14 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-ieee754/s_fpclassifyl.c: Correct recognition of + denormalized numbers. + + * sysdeps/i386/huge_val.h: Remove references to byte order macros. + Don't include <endian.h>. + +1997-03-19 15:18 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + * sysdeps/m68k/huge_val.h: Remove references to byte order macros. + Don't include <endian.h>. + +1997-03-24 23:09 Ulrich Drepper <drepper@cygnus.com> + + * inet/rcmd.c (iruserok): Use access instead of euidaccess. + +1997-03-15 18:08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * math/cmathcalls.h: Remove whitespace before function name in use + of __MATHDECL macro, to make it compilable with a traditional + preprocessor. + +1997-03-24 15:31 Ulrich Drepper <drepper@cygnus.com> + + * configure.in: Use AC_PROG_CC instead of AC_PROG_TOOL to find + compiler. + +1997-03-24 02:34 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-ieee754/s_finitel.c (__finitel): Shift return value + by 31 positions to get 0/1 result. + Patch by Joe Keane <jgk@jgk.org>. + +1997-03-23 12:15 H.J. Lu <hjl@gnu.ai.mit.edu> + + * posix/getopt.c (__getopt_nonoption_flags): Make it extern + to prevent from ld linking in getopt.o even if there is another + incompatible one. + + * posix/getopt_init.c (__getopt_nonoption_flags): Remove extern. + +1997-03-23 23:30 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> + + * nis/nis_call.c (__do_niscall): Print message if cold start file + does not exist. + * nis/nis_file.c: Don't print error messages. + * nis/nis_local_name.c (nis_local_host): Fix pointer errors. + * nis/rpcsvc/ypclnt.h: Fix copyright and prototypes. + * nis/rpcsvc/nis.h: Likewise. + * nis/ypclnt.c: Fix prototypes. + +1997-03-24 01:36 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-i387/e_scalb.S: Pop additional result before + returning. + * sysdeps/libm-i387/e_scalbf.S: Likewise. + * sysdeps/libm-i387/e_scalbl.S: Likewise. + Reported by Andreas Jaeger <aj@arthur.pfalz.de>. + + * elf/rtld.c (dl_main): Set main_map->l_opencount to 1 also if + dynamic linker was called implicitly by the kernel. + Reported by Eric Youngdale <eric@andante.jic.com>. + + * math/Makefile (CFLAGS-test-float.c, CFLAGS-test-double.c, + CFLAGS-test-longdouble.c): New variables. Set to -fno-inline to + prevent clever optimizations which corrupt the tests. + +1997-03-23 21:33 Andreas Jaeger <aj@arthur.pfalz.de> + + * math/libm-test.c (scalb_test): New function. + (sqrt_test): New function. + (scalbn_test): New function. + (ilogb_test): New function. + (main): Added calls for new test functions. + (ldexp_test): Add another test for ldexp(x,0). + +1997-03-23 12:35 Andreas Jaeger <aj@arthur.pfalz.de> + + * math/libm-test.c (remquo_test): Correct messages so that they + match the tests. + (copysign_test): Likewise. + +1997-03-23 16:28 Ulrich Drepper <drepper@cygnus.com> + + * stdio-common/Makefile (routines): Add printf_size. + + * stdio-common/printf.h: Add declarations for printf_size and + printf_size_info. + + * stdio-common/printf-parse.h (__printf_arginfo_table): Correct + declaration. + (parse_one_spec): Test whether __printf_function_table is not NULL + before using registered handlers and don't test + __printf_arginfo_table. Update nargs also when handler is + registered. + + * stdio-common/vfprintf.c (vfprintf): Count number of specifiers + processed in fast loop. + + * stdio-common/printf_size: New file. + 1997-03-23 02:11 Ulrich Drepper <drepper@cygnus.com> * time/sys/time.h: Make values ITIMER_* also available as macros. @@ -43,7 +230,7 @@ New functions. Test these functions. (main): Call above new functions. -1997-03-22 04:53 Ulrich Drepper <drepper@cygnus.com> +1997-03-22 04:53 Ulgmon_out_readrich Drepper <drepper@cygnus.com> * Net release 2.0.2. diff --git a/Makeconfig b/Makeconfig index 38437d4dd2..d026b46743 100644 --- a/Makeconfig +++ b/Makeconfig @@ -23,6 +23,8 @@ ifneq (,) This makefile requires GNU Make. endif +all: # Make this the default goal + ifneq "$(origin +included-Makeconfig)" "file" +included-Makeconfig := yes diff --git a/configure b/configure index 3edb97d984..f7bda11980 100755 --- a/configure +++ b/configure @@ -1120,34 +1120,39 @@ done test -n "$MSGFMT" || MSGFMT=":" -echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1125: checking build system type" >&5 - -build_alias=$build -case "$build_alias" in -NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; -esac - -build=`$ac_config_sub $build_alias` -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$build" 1>&6 - -if test $host != $build; then - ac_tool_prefix=${host_alias}- +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1127: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - ac_tool_prefix= + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 fi -# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1151: checking for $ac_word" >&5 +echo "configure:1156: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1155,15 +1160,33 @@ else ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" - test -z "$ac_cv_prog_CC" && ac_cv_prog_CC="gcc" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi fi fi CC="$ac_cv_prog_CC" @@ -1173,13 +1196,105 @@ else echo "$ac_t""no" 1>&6 fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1204: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext <<EOF +#line 1214 "configure" +#include "confdefs.h" +main(){return(0);} +EOF +if { (eval echo configure:1218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1238: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1243: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1267: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi if test $host != $build; then # Extract the first word of "gcc cc", so it can be a program name with args. set dummy gcc cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1183: checking for $ac_word" >&5 +echo "configure:1298: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1206,7 +1321,7 @@ fi fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1210: checking how to run the C preprocessor" >&5 +echo "configure:1325: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1221,13 +1336,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 1225 "configure" +#line 1340 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1231: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1238,13 +1353,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 1242 "configure" +#line 1357 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1248: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1363: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1266,10 +1381,34 @@ else fi echo "$ac_t""$CPP" 1>&6 +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:1386: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`$ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +if test $host != $build; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1273: checking for $ac_word" >&5 +echo "configure:1412: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1300,7 +1439,7 @@ fi # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1304: checking for $ac_word" >&5 +echo "configure:1443: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1331,7 +1470,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1335: checking for $ac_word" >&5 +echo "configure:1474: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1366,7 +1505,7 @@ fi # Extract the first word of "bash", so it can be a program name with args. set dummy bash; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1370: checking for $ac_word" >&5 +echo "configure:1509: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1407,7 +1546,7 @@ if test "$BASH" = no; then # Extract the first word of "ksh", so it can be a program name with args. set dummy ksh; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1411: checking for $ac_word" >&5 +echo "configure:1550: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1449,7 +1588,7 @@ fi echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6 -echo "configure:1453: checking for signed size_t type" >&5 +echo "configure:1592: checking for signed size_t type" >&5 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1473,12 +1612,12 @@ EOF fi echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6 -echo "configure:1477: checking for libc-friendly stddef.h" >&5 +echo "configure:1616: checking for libc-friendly stddef.h" >&5 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1482 "configure" +#line 1621 "configure" #include "confdefs.h" #define __need_size_t #define __need_wchar_t @@ -1493,7 +1632,7 @@ size_t size; wchar_t wchar; if (&size == NULL || &wchar == NULL) abort (); ; return 0; } EOF -if { (eval echo configure:1497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_friendly_stddef=yes else @@ -1512,7 +1651,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly." fi echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6 -echo "configure:1516: checking whether we need to use -P to assemble .S files" >&5 +echo "configure:1655: checking whether we need to use -P to assemble .S files" >&5 if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1535,7 +1674,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives." fi echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6 -echo "configure:1539: checking for assembler global-symbol directive" >&5 +echo "configure:1678: checking for assembler global-symbol directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1565,7 +1704,7 @@ EOF fi echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6 -echo "configure:1569: checking for .set assembler directive" >&5 +echo "configure:1708: checking for .set assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1599,7 +1738,7 @@ EOF fi echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6 -echo "configure:1603: checking for .symver assembler directive" >&5 +echo "configure:1742: checking for .symver assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1618,7 +1757,7 @@ fi echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6 echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6 -echo "configure:1622: checking for ld --version-script" >&5 +echo "configure:1761: checking for ld --version-script" >&5 if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1635,7 +1774,7 @@ VERS { EOF if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then if { ac_try='${CC-cc} $CFLAGS --shared -o conftest.so conftest.o - -Wl,--version-script,conftest.map'; { (eval echo configure:1639: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; + -Wl,--version-script,conftest.map'; { (eval echo configure:1778: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_version_script_option=yes else @@ -1665,7 +1804,7 @@ fi if test $elf = yes; then echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 -echo "configure:1669: checking for .previous assembler directive" >&5 +echo "configure:1808: checking for .previous assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1673,7 +1812,7 @@ else .section foo_section .previous EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1677: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_previous_directive=yes else libc_cv_asm_previous_directive=no @@ -1689,7 +1828,7 @@ EOF else echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 -echo "configure:1693: checking for .popsection assembler directive" >&5 +echo "configure:1832: checking for .popsection assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1697,7 +1836,7 @@ else .pushsection foo_section .popsection EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_popsection_directive=yes else libc_cv_asm_popsection_directive=no @@ -1717,12 +1856,12 @@ fi if test $elf != yes; then echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 -echo "configure:1721: checking for .init and .fini sections" >&5 +echo "configure:1860: checking for .init and .fini sections" >&5 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1726 "configure" +#line 1865 "configure" #include "confdefs.h" int main() { @@ -1731,7 +1870,7 @@ asm (".section .init"); asm (".text"); ; return 0; } EOF -if { (eval echo configure:1735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1874: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_have_initfini=yes else @@ -1756,19 +1895,19 @@ if test $elf = yes; then libc_cv_asm_underscores=no else echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:1760: checking for _ prefix on C symbol names" >&5 +echo "configure:1899: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1765 "configure" +#line 1904 "configure" #include "confdefs.h" asm ("_glibc_foobar:"); int main() { glibc_foobar (); ; return 0; } EOF -if { (eval echo configure:1772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* libc_cv_asm_underscores=yes else @@ -1795,7 +1934,7 @@ if test $elf = yes; then libc_cv_asm_weakext_directive=no else echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 -echo "configure:1799: checking for assembler .weak directive" >&5 +echo "configure:1938: checking for assembler .weak directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1818,7 +1957,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6 if test $libc_cv_asm_weak_directive = no; then echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 -echo "configure:1822: checking for assembler .weakext directive" >&5 +echo "configure:1961: checking for assembler .weakext directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1855,7 +1994,7 @@ EOF fi echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 -echo "configure:1859: checking for ld --no-whole-archive" >&5 +echo "configure:1998: checking for ld --no-whole-archive" >&5 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1866,7 +2005,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -Wl,--no-whole-archive - -o conftest conftest.c'; { (eval echo configure:1870: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c'; { (eval echo configure:2009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_no_whole_archive=yes else libc_cv_ld_no_whole_archive=no @@ -1877,7 +2016,7 @@ fi echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6 echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6 -echo "configure:1881: checking for gcc -fno-exceptions" >&5 +echo "configure:2020: checking for gcc -fno-exceptions" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1888,7 +2027,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -fno-exceptions - -o conftest conftest.c'; { (eval echo configure:1892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c'; { (eval echo configure:2031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_no_exceptions=yes else libc_cv_gcc_no_exceptions=no @@ -1940,7 +2079,7 @@ if test "$uname" = generic; then fi echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 -echo "configure:1944: checking OS release for uname" >&5 +echo "configure:2083: checking OS release for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1962,7 +2101,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6 uname_release="$libc_cv_uname_release" echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 -echo "configure:1966: checking OS version for uname" >&5 +echo "configure:2105: checking OS version for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1984,7 +2123,7 @@ else fi echo $ac_n "checking stdio selection""... $ac_c" 1>&6 -echo "configure:1988: checking stdio selection" >&5 +echo "configure:2127: checking stdio selection" >&5 case $stdio in libio) cat >> confdefs.h <<\EOF @@ -2189,14 +2328,14 @@ s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@LN_S@%$LN_S%g s%@MSGFMT@%$MSGFMT%g +s%@CC@%$CC%g +s%@BUILD_CC@%$BUILD_CC%g +s%@CPP@%$CPP%g s%@build@%$build%g s%@build_alias@%$build_alias%g s%@build_cpu@%$build_cpu%g s%@build_vendor@%$build_vendor%g s%@build_os@%$build_os%g -s%@CC@%$CC%g -s%@BUILD_CC@%$BUILD_CC%g -s%@CPP@%$CPP%g s%@AR@%$AR%g s%@RANLIB@%$RANLIB%g s%@BASH@%$BASH%g diff --git a/configure.in b/configure.in index f36bcaf1bf..1cf1290496 100644 --- a/configure.in +++ b/configure.in @@ -359,7 +359,7 @@ fi AC_PROG_LN_S AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :) -AC_CHECK_TOOL(CC, gcc) +AC_PROG_CC if test $host != $build; then AC_CHECK_PROG(BUILD_CC, gcc cc) fi diff --git a/elf/rtld.c b/elf/rtld.c index 295a6aed7d..d6bd516dfc 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -266,6 +266,7 @@ of this helper program; chances are you did not intend to run this program.\n", main_map->l_phdr = phdr; main_map->l_phnum = phent; main_map->l_entry = *user_entry; + main_map->l_opencount = 1; } /* Scan the program header table for the dynamic section. */ diff --git a/gmon/gmon.c b/gmon/gmon.c index e00b339367..f1ecb9e459 100644 --- a/gmon/gmon.c +++ b/gmon/gmon.c @@ -195,16 +195,23 @@ write_call_graph (fd) int fd; { u_char tag = GMON_TAG_CG_ARC; - struct gmon_cg_arc_record raw_arc + struct gmon_cg_arc_record raw_arc[4] __attribute__ ((aligned (__alignof__ (char*)))); int from_index, to_index, from_len; u_long frompc; - struct iovec iov[2] = + struct iovec iov[8] = { { &tag, sizeof (tag) }, - { &raw_arc, sizeof (struct gmon_cg_arc_record) } + { &raw_arc[0], sizeof (struct gmon_cg_arc_record) }, + { &tag, sizeof (tag) }, + { &raw_arc[1], sizeof (struct gmon_cg_arc_record) }, + { &tag, sizeof (tag) }, + { &raw_arc[2], sizeof (struct gmon_cg_arc_record) }, + { &tag, sizeof (tag) }, + { &raw_arc[3], sizeof (struct gmon_cg_arc_record) }, }; + int nfilled = 0; from_len = _gmonparam.fromssize / sizeof (*_gmonparam.froms); for (from_index = 0; from_index < from_len; ++from_index) @@ -219,13 +226,19 @@ write_call_graph (fd) to_index != 0; to_index = _gmonparam.tos[to_index].link) { - *(char **) raw_arc.from_pc = (char *)frompc; - *(char **) raw_arc.self_pc = (char *)_gmonparam.tos[to_index].selfpc; - *(int *) raw_arc.count = _gmonparam.tos[to_index].count; - - __writev (fd, iov, 2); + if (nfilled > 3) + { + __writev (fd, iov, 2 * nfilled); + nfilled = 0; + } + *(char **) raw_arc[nfilled].from_pc = (char *)frompc; + *(char **) raw_arc[nfilled].self_pc = + (char *)_gmonparam.tos[to_index].selfpc; + *(int *) raw_arc[nfilled].count = _gmonparam.tos[to_index].count; + ++nfilled; } } + __writev (fd, iov, 2 * nfilled); } @@ -235,33 +248,50 @@ write_bb_counts (fd) { struct __bb *grp; u_char tag = GMON_TAG_BB_COUNT; - int ncounts; - int i; + size_t ncounts; + size_t i; struct iovec bbhead[2] = { { &tag, sizeof (tag) }, { &ncounts, sizeof (ncounts) } }; - struct iovec bbbody[2]; + struct iovec bbbody[8]; + size_t nfilled; - bbbody[0].iov_len = sizeof (grp->addresses[0]); - bbbody[1].iov_len = sizeof (grp->addresses[0]); + for (i = 0; i < (sizeof (bbbody) / sizeof (bbbody[0])); i += 2) + { + bbbody[i].iov_len = sizeof (grp->addresses[0]); + bbbody[i + 1].iov_len = sizeof (grp->counts[0]); + } /* Write each group of basic-block info (all basic-blocks in a compilation unit form a single group). */ + nfilled = 0; for (grp = __bb_head; grp; grp = grp->next) { ncounts = grp->ncounts; + if (nfilled > 0) + { + __writev (fd, bbbody, nfilled); + nfilled = 0; + } __writev (fd, bbhead, 2); for (i = 0; i < ncounts; ++i) { - bbbody[0].iov_base = (char *) &grp->addresses[i]; - bbbody[1].iov_base = &grp->counts[i]; - __writev (fd, bbbody, 2); + if (nfilled > (sizeof (bbbody) / sizeof (bbbody[0])) - 2) + { + __writev (fd, bbbody, nfilled); + nfilled = 0; + } + + bbbody[nfilled++].iov_base = (char *) &grp->addresses[i]; + bbbody[nfilled++].iov_base = &grp->counts[i]; } } + if (nfilled > 0) + __writev (fd, bbbody, nfilled); } diff --git a/inet/rcmd.c b/inet/rcmd.c index 342c1c909e..d390a8d809 100644 --- a/inet/rcmd.c +++ b/inet/rcmd.c @@ -338,7 +338,7 @@ again: * reading an NFS mounted file system, can't read files that * are protected read/write owner only. */ - if (__euidaccess (pbuf, R_OK) != 0) + if (__access (pbuf, R_OK) != 0) hostf = NULL; else { diff --git a/math/Makefile b/math/Makefile index 31b3684997..d0c05835f5 100644 --- a/math/Makefile +++ b/math/Makefile @@ -49,7 +49,7 @@ libm-calls = e_acos e_acosh e_asin e_atan2 e_atanh e_cosh e_exp e_fmod \ w_log w_log10 w_pow w_remainder w_scalb w_sinh w_sqrt \ s_signbit s_fpclassify s_fmax s_fmin s_fdim s_nan s_trunc \ s_remquo \ - conj cimag creal cabs + conj cimag creal cabs s_cexp libm-routines = $(libm-support) $(libm-calls) \ $(patsubst %_rf,%f_r,$(libm-calls:=f)) \ $(long-m-$(long-double-fcts)) @@ -73,6 +73,9 @@ tests = test-float test-double $(test-longdouble-$(long-double-fcts)) # XXX This test is disabled for now since the functions are too buggy. #test-longdouble-yes = test-longdouble +CFLAGS-test-float.c = -fno-inline +CFLAGS-test-double.c = -fno-inline +CFLAGS-test-longdouble.c = -fno-inline LDLIBS-test-float = libm LDLIBS-test-double = libm LDLIBS-test-longdouble = libm @@ -116,3 +119,9 @@ override CFLAGS += -Wno-uninitialized -Wno-write-strings $(objpfx)libieee.a: $(objpfx)ieee-math.o rm -f $@ ln $< $@ + +ifeq ($(build-shared),yes) +$(addprefix $(objpfx),$(tests)): $(objpfx)libm.so$(libm.so-version) +else +$(addprefix $(objpfx),$(tests)): $(objpfx)libm.a +endif diff --git a/math/cmathcalls.h b/math/cmathcalls.h index 658c3a729d..b2a8382721 100644 --- a/math/cmathcalls.h +++ b/math/cmathcalls.h @@ -103,10 +103,10 @@ __MATHCALL (csqrt, (_Mdouble_complex_ __z)); /* Absolute value, projections, conjugates, and projection. */ /* Absolute value of Z. */ -__MATHDECL (_Mdouble_, cabs, (_Mdouble_complex_ __z)); +__MATHDECL (_Mdouble_,cabs, (_Mdouble_complex_ __z)); /* Argument value of Z. */ -__MATHDECL (_Mdouble_, carg, (_Mdouble_complex_ __z)); +__MATHDECL (_Mdouble_,carg, (_Mdouble_complex_ __z)); /* Complex conjugate of Z. */ __MATHCALL (conj, (_Mdouble_complex_ __z)); @@ -118,10 +118,10 @@ __MATHCALL (cproj, (_Mdouble_complex_ __z)); /* Decomposing complex values. */ /* Imaginary part of Z. */ -__MATHDECL (_Mdouble_, cimag, (_Mdouble_complex_ __z)); +__MATHDECL (_Mdouble_,cimag, (_Mdouble_complex_ __z)); /* Real part of Z. */ -__MATHDECL (_Mdouble_, creal, (_Mdouble_complex_ __z)); +__MATHDECL (_Mdouble_,creal, (_Mdouble_complex_ __z)); /* Now some optimized versions. GCC has handy notations for these diff --git a/math/libm-test.c b/math/libm-test.c index 8995f85475..05acca2c53 100644 --- a/math/libm-test.c +++ b/math/libm-test.c @@ -40,10 +40,11 @@ /* This program isn't finished yet. It has tests for acos, acosh, asin, asinh, atan, atan2, atanh, - cbrt, ceil, cos, cosh, exp, exp2, expm1, fabs, floor, fpclassify, - frexp, hypot, ldexp, - log, log10, log1p, log2, logb, modf, - pow, sin, sinh, tan, tanh. + cbrt, ceil, copysign, cos, cosh, exp, exp2, expm1, + fabs, fdim, floor, fmin, fmax, fpclassify, + frexp, hypot, ilogb, ldexp, + log, log10, log1p, log2, logb, modf, nextafter, + pow, scalb, scalbn, sin, sinh, sqrt, tan, tanh, trunc. Tests for the other libm-functions will come later. The routines using random variables are still under construction. I don't @@ -70,6 +71,7 @@ # define _GNU_SOURCE #endif +#include <complex.h> #include <math.h> #include <float.h> @@ -612,8 +614,8 @@ cos_test (void) INVALID_EXCEPTION); check_eps ("cos (pi/3) == 0.5", FUNC(cos) (M_PI / 3.0), - 0.5, CHOOSE (0, 1e-15L, 1e-7L)); - check_eps ("cos (pi/2) == 0.5", FUNC(cos) (M_PI_2), + 0.5, CHOOSE (4e-18L, 1e-15L, 1e-7L)); + check_eps ("cos (pi/2) == 0", FUNC(cos) (M_PI_2), 0, CHOOSE (1e-19L, 1e-16L, 1e-7L)); } @@ -638,7 +640,7 @@ exp_test (void) check_isinfp ("exp (+inf) == +inf", FUNC(exp) (plus_infty)); check ("exp (-inf) == 0", FUNC(exp) (minus_infty), 0); - check ("exp (1) == e", FUNC(exp) (1), M_E); + check_eps ("exp (1) == e", FUNC(exp) (1), M_E, CHOOSE (4e-18L, 0, 0)); } @@ -665,7 +667,8 @@ expm1_test (void) check_isinfp ("expm1 (+inf) == +inf", FUNC(expm1) (plus_infty)); check ("expm1 (-inf) == -1", FUNC(expm1) (minus_infty), -1); - check ("expm1 (1) == e-1", FUNC(expm1) (1), M_E - 1.0); + check_eps ("expm1 (1) == e-1", FUNC(expm1) (1), M_E - 1.0, + CHOOSE (4e-18L, 0, 0)); } @@ -776,8 +779,35 @@ fpclassify_test (void) static void +ilogb_test (void) +{ + + /* XXX Are these tests correct? I couldn't find any specification */ +#if 0 + /* the source suggests that the following calls should fail - + but shall we test these special cases or just ignore them? */ + check_isinfp ("ilogb (+inf) == +inf", FUNC(ilogb) (plus_infty)); + check_isinfp ("ilogb (-inf) == +inf", FUNC(ilogb) (minus_infty)); + + check_isinfn_exc ("ilogb (+0) == -inf plus divide-by-zero exception", + FUNC(ilogb) (0), DIVIDE_BY_ZERO_EXCEPTION); + + check_isinfn_exc ("ilogb (-0) == -inf plus divide-by-zero exception", + FUNC(ilogb) (minus_zero), DIVIDE_BY_ZERO_EXCEPTION); +#endif + check ("ilogb (1) == 0", FUNC(ilogb) (1), 0); + check ("ilogb (e) == 1", FUNC(ilogb) (M_E), 1); + check ("ilogb (1024) == 10", FUNC(ilogb) (1024), 10); + check ("ilogb (-2000) == 10", FUNC(ilogb) (-2000), 10); + +} + + +static void ldexp_test (void) { + MATHTYPE x; + check ("ldexp (0, 0) == 0", FUNC(ldexp) (0, 0), 0); check_isinfp ("ldexp (+inf, 1) == +inf", FUNC(ldexp) (plus_infty, 1)); @@ -786,6 +816,10 @@ ldexp_test (void) check ("ldexp (0.8, 4) == 12.8", FUNC(ldexp) (0.8L, 4), 12.8L); check ("ldexp (-0.854375, 5) == -27.34", FUNC(ldexp) (-0.854375L, 5), -27.34L); + + x = random_greater (0.0); + check_ext ("ldexp (x, 0) == x", FUNC(ldexp) (x, 0L), x, x); + } @@ -803,10 +837,12 @@ log_test (void) FUNC(log) (-1), INVALID_EXCEPTION); check_isinfp ("log (+inf) == +inf", FUNC(log) (plus_infty)); - check_eps ("log (e) == 1", FUNC(log) (M_E), 1, CHOOSE (0, 0, 9e-8L)); - check ("log (1/e) == -1", FUNC(log) (1.0 / M_E), -1); + check_eps ("log (e) == 1", FUNC(log) (M_E), 1, CHOOSE (1e-18L, 0, 9e-8L)); + check_eps ("log (1/e) == -1", FUNC(log) (1.0 / M_E), -1, + CHOOSE (2e-18L, 0, 0)); check ("log (2) == M_LN2", FUNC(log) (2), M_LN2); - check ("log (10) == M_LN10", FUNC(log) (10), M_LN10); + check_eps ("log (10) == M_LN10", FUNC(log) (10), M_LN10, + CHOOSE (1e-18L, 0, 0)); } @@ -825,12 +861,15 @@ log10_test (void) check_isinfp ("log10 (+inf) == +inf", FUNC(log10) (plus_infty)); - check ("log10 (0.1) == -1", FUNC(log10) (0.1L), -1); - check ("log10 (10) == 1", FUNC(log10) (10.0), 1); - check ("log10 (100) == 2", FUNC(log10) (100.0), 2); + check_eps ("log10 (0.1) == -1", FUNC(log10) (0.1L), -1, + CHOOSE (1e-18L, 0, 0)); + check_eps ("log10 (10) == 1", FUNC(log10) (10.0), 1, + CHOOSE (1e-18L, 0, 0)); + check_eps ("log10 (100) == 2", FUNC(log10) (100.0), 2, + CHOOSE (1e-18L, 0, 0)); check ("log10 (10000) == 4", FUNC(log10) (10000.0), 4); check_eps ("log10 (e) == M_LOG10E", FUNC(log10) (M_E), M_LOG10E, - CHOOSE (9e-20, 0, 9e-8)); + CHOOSE (1e-18, 0, 9e-8)); } @@ -847,7 +886,8 @@ log1p_test (void) check_isinfp ("log1p (+inf) == +inf", FUNC(log1p) (plus_infty)); - check ("log1p (e-1) == 1", FUNC(log1p) (M_E - 1.0), 1); + check_eps ("log1p (e-1) == 1", FUNC(log1p) (M_E - 1.0), 1, + CHOOSE (1e-18L, 0, 0)); } @@ -934,6 +974,44 @@ modf_test (void) static void +scalb_test (void) +{ + MATHTYPE x; + + check ("scalb (0, 0) == 0", FUNC(scalb) (0, 0), 0); + + check_isinfp ("scalb (+inf, 1) == +inf", FUNC(scalb) (plus_infty, 1)); + check_isinfn ("scalb (-inf, 1) == -inf", FUNC(scalb) (minus_infty, 1)); + check_isnan ("scalb (NaN, 1) == NaN", FUNC(scalb) (nan_value, 1)); + + check ("scalb (0.8, 4) == 12.8", FUNC(scalb) (0.8L, 4), 12.8L); + check ("scalb (-0.854375, 5) == -27.34", FUNC(scalb) (-0.854375L, 5), -27.34L); + + x = random_greater (0.0); + check_ext ("scalb (x, 0) == x", FUNC(scalb) (x, 0L), x, x); +} + + +static void +scalbn_test (void) +{ + MATHTYPE x; + + check ("scalbn (0, 0) == 0", FUNC(scalbn) (0, 0), 0); + + check_isinfp ("scalbn (+inf, 1) == +inf", FUNC(scalbn) (plus_infty, 1)); + check_isinfn ("scalbn (-inf, 1) == -inf", FUNC(scalbn) (minus_infty, 1)); + check_isnan ("scalbn (NaN, 1) == NaN", FUNC(scalbn) (nan_value, 1)); + + check ("scalbn (0.8, 4) == 12.8", FUNC(scalbn) (0.8L, 4), 12.8L); + check ("scalbn (-0.854375, 5) == -27.34", FUNC(scalbn) (-0.854375L, 5), -27.34L); + + x = random_greater (0.0); + check_ext ("scalbn (x, 0) == x", FUNC(scalbn) (x, 0L), x, x); +} + + +static void sin_test (void) { check ("sin (+0) == +0", FUNC(sin) (0), 0); @@ -945,7 +1023,8 @@ sin_test (void) FUNC(sin) (minus_infty), INVALID_EXCEPTION); - check ("sin (pi/6) == 0.5", FUNC(sin) (M_PI / 6.0), 0.5); + check_eps ("sin (pi/6) == 0.5", FUNC(sin) (M_PI / 6.0), 0.5, + CHOOSE (4e-18L, 0, 0)); check ("sin (pi/2) == 1", FUNC(sin) (M_PI_2), 1); } @@ -964,14 +1043,15 @@ sinh_test (void) static void tan_test (void) { - check ("tan (+0) == -0", FUNC(tan) (0), 0); + check ("tan (+0) == +0", FUNC(tan) (0), 0); check ("tan (-0) == -0", FUNC(tan) (minus_zero), minus_zero); check_isnan_exc ("tan (+inf) == NaN plus invalid exception", FUNC(tan) (plus_infty), INVALID_EXCEPTION); check_isnan_exc ("tan (-inf) == NaN plus invalid exception", FUNC(tan) (minus_infty), INVALID_EXCEPTION); - check_eps ("tan (pi/4) == 1", FUNC(tan) (M_PI_4), 1, CHOOSE (0, 1e-15L, 0)); + check_eps ("tan (pi/4) == 1", FUNC(tan) (M_PI_4), 1, + CHOOSE (2e-18L, 1e-15L, 0)); } @@ -1067,15 +1147,15 @@ pow_test (void) check ("pow (-0.9, +inf) == +0", FUNC(pow) (-0.9L, plus_infty), 0); check ("pow (-1e-7, +inf) == +0", FUNC(pow) (-1e-7L, plus_infty), 0); - check ("pow (+1.1, -inf) == +inf", FUNC(pow) (1.1, minus_infty), 0); - check ("pow (+inf, -inf) == +inf", FUNC(pow) (plus_infty, minus_infty), 0); - check ("pow (-1.1, -inf) == +inf", FUNC(pow) (-1.1, minus_infty), 0); - check ("pow (-inf, -inf) == +inf", FUNC(pow) (minus_infty, minus_infty), 0); + check ("pow (+1.1, -inf) == 0", FUNC(pow) (1.1, minus_infty), 0); + check ("pow (+inf, -inf) == 0", FUNC(pow) (plus_infty, minus_infty), 0); + check ("pow (-1.1, -inf) == 0", FUNC(pow) (-1.1, minus_infty), 0); + check ("pow (-inf, -inf) == 0", FUNC(pow) (minus_infty, minus_infty), 0); - check_isinfp ("pow (0.9, -inf) == +0", FUNC(pow) (0.9L, minus_infty)); - check_isinfp ("pow (1e-7, -inf) == +0", FUNC(pow) (1e-7L, minus_infty)); - check_isinfp ("pow (-0.9, -inf) == +0", FUNC(pow) (-0.9L, minus_infty)); - check_isinfp ("pow (-1e-7, -inf) == +0", FUNC(pow) (-1e-7L, minus_infty)); + check_isinfp ("pow (0.9, -inf) == +inf", FUNC(pow) (0.9L, minus_infty)); + check_isinfp ("pow (1e-7, -inf) == +inf", FUNC(pow) (1e-7L, minus_infty)); + check_isinfp ("pow (-0.9, -inf) == +inf", FUNC(pow) (-0.9L, minus_infty)); + check_isinfp ("pow (-1e-7, -inf) == +inf", FUNC(pow) (-1e-7L, minus_infty)); check_isinfp ("pow (+inf, 1e-7) == +inf", FUNC(pow) (plus_infty, 1e-7L)); check_isinfp ("pow (+inf, 1) == +inf", FUNC(pow) (plus_infty, 1)); @@ -1121,11 +1201,11 @@ pow_test (void) check_isnan_exc ("pow (+1, +inf) == NaN", FUNC(pow) (1, plus_infty), INVALID_EXCEPTION); - check_isnan_exc ("pow (-1, +inf) == NaN", FUNC(pow) (1, plus_infty), + check_isnan_exc ("pow (-1, +inf) == NaN", FUNC(pow) (-1, plus_infty), INVALID_EXCEPTION); - check_isnan_exc ("pow (+1, -inf) == NaN", FUNC(pow) (1, plus_infty), + check_isnan_exc ("pow (+1, -inf) == NaN", FUNC(pow) (1, minus_infty), INVALID_EXCEPTION); - check_isnan_exc ("pow (-1, -inf) == NaN", FUNC(pow) (1, plus_infty), + check_isnan_exc ("pow (-1, -inf) == NaN", FUNC(pow) (-1, minus_infty), INVALID_EXCEPTION); check_isnan_exc ("pow (-0.1, 1.1) == NaN", FUNC(pow) (-0.1, 1.1), @@ -1165,7 +1245,7 @@ pow_test (void) check ("pow (-0, 2) == +0", FUNC(pow) (minus_zero, 2), 0); check ("pow (-0, 11.1) == +0", FUNC(pow) (minus_zero, 11.1), 0); - x = random_greater (0.0); + x = random_greater (1.0); check_isinfp_ext ("pow (x, +inf) == +inf for |x| > 1", FUNC(pow) (x, plus_infty), x); @@ -1173,7 +1253,7 @@ pow_test (void) check_ext ("pow (x, +inf) == +0 for |x| < 1", FUNC(pow) (x, plus_infty), 0.0, x); - x = random_greater (0.0); + x = random_greater (1.0); check_ext ("pow (x, -inf) == +0 for |x| > 1", FUNC(pow) (x, minus_infty), 0.0, x); @@ -1202,7 +1282,7 @@ pow_test (void) FUNC(pow) (minus_infty, x), minus_zero, x); x = ((rand () % 1000000) + 1) * -2.0; /* Get random even integer < 0 */ - check_ext ("pow (-inf, y) == 0 for y < 0 and not an odd integer", + check_ext ("pow (-inf, y) == +0 for y < 0 and not an odd integer", FUNC(pow) (minus_infty, x), 0.0, x); x = (rand () % 1000000) * 2.0 + 1; /* Get random odd integer > 0 */ @@ -1372,11 +1452,11 @@ copysign_test (void) minus_zero); /* XXX More correctly we would have to check the sign of the NaN. */ - check_isnan ("copysign (+NaN, 0) = +inf", FUNC(copysign) (nan_value, 0)); - check_isnan ("copysign (+NaN, -0) = -inf", FUNC(copysign) (nan_value, + check_isnan ("copysign (+NaN, 0) = +NaN", FUNC(copysign) (nan_value, 0)); + check_isnan ("copysign (+NaN, -0) = -NaN", FUNC(copysign) (nan_value, minus_zero)); - check_isnan ("copysign (-NaN, 0) = +inf", FUNC(copysign) (-nan_value, 0)); - check_isnan ("copysign (-NaN, -0) = -inf", FUNC(copysign) (-nan_value, + check_isnan ("copysign (-NaN, 0) = +NaN", FUNC(copysign) (-nan_value, 0)); + check_isnan ("copysign (-NaN, -0) = -NaN", FUNC(copysign) (-nan_value, minus_zero)); } @@ -1415,6 +1495,23 @@ trunc_test (void) static void +sqrt_test (void) +{ + MATHTYPE x; + + + /* XXX Tests fuer negative x are missing */ + check ("sqrt (0) == 0", FUNC(sqrt) (0), 0); + check_isnan ("sqrt (NaN) == NaN", FUNC(sqrt) (nan_value)); + check_isinfp ("sqrt (+inf) == +inf", FUNC(sqrt) (plus_infty)); + + x = random_value (0, 10000); + check_ext ("sqrt (x*x) == x", sqrt (x*x), x, x); + check ("sqrt (4) == 2", FUNC(sqrt) (4), 2); +} + + +static void remquo_test (void) { int quo; @@ -1426,11 +1523,11 @@ remquo_test (void) result = FUNC(remquo) (-1.625, 1.0, &quo); check ("remquo(-1.625, 1.0, &x) == 0.375", result, 0.375); - check ("remquo(-1.625, 1.0, &x) puts 1 in x", quo, -1); + check ("remquo(-1.625, 1.0, &x) puts -1 in x", quo, -1); result = FUNC(remquo) (1.625, -1.0, &quo); check ("remquo(1.125, -1.0, &x) == 0.125", result, 0.125); - check ("remquo(1.125, -1.0, &x) puts 1 in x", quo, -1); + check ("remquo(1.125, -1.0, &x) puts -1 in x", quo, -1); result = FUNC(remquo) (-1.625, -1.0, &quo); check ("remquo(-1.125, -1.0, &x) == 0.125", result, 0.125); @@ -1439,6 +1536,40 @@ remquo_test (void) static void +cexp_test (void) +{ + __complex__ MATHTYPE result; + + result = FUNC(cexp) (plus_zero + 1.0i * plus_zero); + check ("real(cexp(0 + 0i)) = 1", __real__ result, 1); + check ("imag(cexp(0 + 0i)) = 0", __imag__ result, 0); + result = FUNC(cexp) (minus_zero + 1.0i * plus_zero); + check ("real(cexp(-0 + 0i)) = 1", __real__ result, 1); + check ("imag(cexp(-0 + 0i)) = 0", __imag__ result, 0); + result = FUNC(cexp) (plus_zero + 1.0i * minus_zero); + check ("real(cexp(0 - 0i)) = 1", __real__ result, 1); + check ("imag(cexp(0 - 0i)) = 0", __imag__ result, 0); + result = FUNC(cexp) (minus_zero + 1.0i * minus_zero); + check ("real(cexp(-0 - 0i)) = 1", __real__ result, 1); + check ("imag(cexp(-0 - 0i)) = 0", __imag__ result, 0); + + result = FUNC(cexp) (plus_infty + 1.0i * plus_zero); + check_isinfp ("real(cexp(+inf + 0i)) = +inf", __real__ result); + check ("imag(cexp(+inf + 0i)) = 0", __imag__ result, 0); + result = FUNC(cexp) (plus_infty + 1.0i * minus_zero); + check_isinfp ("real(cexp(+inf - 0i)) = +inf", __real__ result); + check ("imag(cexp(+inf - 0i)) = 0", __imag__ result, 0); + + result = FUNC(cexp) (minus_infty + 1.0i * plus_zero); + check ("real(cexp(-inf + 0i)) = 0", __real__ result, 0); + check ("imag(cexp(-inf + 0i)) = 0", __imag__ result, 0); + result = FUNC(cexp) (minus_infty + 1.0i * minus_zero); + check ("real(cexp(-inf - 0i)) = 0", __real__ result, 0); + check ("imag(cexp(-inf - 0i)) = 0", __imag__ result, 0); +} + + +static void inverse_func_pair_test (const char *test_name, mathfunc f1, mathfunc inverse, MATHTYPE x, MATHTYPE epsilon) @@ -1461,23 +1592,23 @@ static void inverse_functions (void) { inverse_func_pair_test ("asin(sin(x)) == x", - FUNC(sin), FUNC(asin), 1.0, CHOOSE (0, 0, 1e-7L)); + FUNC(sin), FUNC(asin), 1.0, CHOOSE (2e-18L, 0, 1e-7L)); inverse_func_pair_test ("sin(asin(x)) == x", FUNC(asin), FUNC(sin), 1.0, 0.0); inverse_func_pair_test ("acos(cos(x)) == x", - FUNC(cos), FUNC(acos), 1.0, CHOOSE (0, 1e-15L, 0)); + FUNC(cos), FUNC(acos), 1.0, CHOOSE (4e-18L, 1e-15L, 0)); inverse_func_pair_test ("cos(acos(x)) == x", FUNC(acos), FUNC(cos), 1.0, 0.0); inverse_func_pair_test ("atan(tan(x)) == x", - FUNC(tan), FUNC(atan), 1.0, 0.0); + FUNC(tan), FUNC(atan), 1.0, CHOOSE (2e-18L, 0, 0)); inverse_func_pair_test ("tan(atan(x)) == x", - FUNC(atan), FUNC(tan), 1.0, CHOOSE (0, 1e-15L, 0)); + FUNC(atan), FUNC(tan), 1.0, CHOOSE (2e-18L, 1e-15L, 0)); inverse_func_pair_test ("asinh(sinh(x)) == x", - FUNC(sinh), FUNC(asinh), 1.0, CHOOSE (1e-18L, 0, 0)); + FUNC(sinh), FUNC(asinh), 1.0, CHOOSE (1e-18L, 0, 1e-7)); inverse_func_pair_test ("sinh(asinh(x)) == x", - FUNC(asinh), FUNC(sinh), 1.0, 0.0); + FUNC(asinh), FUNC(sinh), 1.0, CHOOSE (2e-18L, 0, 0)); inverse_func_pair_test ("acosh(cosh(x)) == x", FUNC(cosh), FUNC(acosh), 1.0, CHOOSE (1e-18L, 1e-15L, 0)); @@ -1485,7 +1616,7 @@ inverse_functions (void) FUNC(acosh), FUNC(cosh), 1.0, 0.0); inverse_func_pair_test ("atanh(tanh(x)) == x", - FUNC(tanh), FUNC(atanh), 1.0, CHOOSE (0, 1e-15L, 0)); + FUNC(tanh), FUNC(atanh), 1.0, CHOOSE (1e-18L, 1e-15L, 0)); inverse_func_pair_test ("tanh(atanh(x)) == x", FUNC(atanh), FUNC(tanh), 1.0, 0.0); @@ -1556,17 +1687,17 @@ identities3_test (MATHTYPE x, MATHTYPE epsilon) static void identities (void) { - identities1_test (0.2L, CHOOSE (1e-19L, 0, 0)); - identities1_test (0.9L, 0); + identities1_test (0.2L, CHOOSE (1e-18L, 0, 2e-7)); + identities1_test (0.9L, CHOOSE (1e-18L, 0, 0)); identities1_test (0, 0); - identities1_test (-1, CHOOSE (0, 0, 1e-7)); + identities1_test (-1, CHOOSE (1e-18L, 0, 1e-7)); identities2_test (0.2L, CHOOSE (0, 1e-16, 0)); identities2_test (0.9L, CHOOSE (0, 1e-15, 0)); identities2_test (0, 0); identities2_test (-1, CHOOSE (1e-18L, 1e-15, 0)); - identities3_test (0.2L, CHOOSE (0, 0, 1e-7)); + identities3_test (0.2L, CHOOSE (1e-18L, 0, 1e-7)); identities3_test (0.9L, CHOOSE (1e-18L, 1e-15, 1e-6)); identities3_test (0, CHOOSE (0, 0, 1e-6)); identities3_test (-1, CHOOSE (1e-18L, 0, 1e-6)); @@ -1592,15 +1723,15 @@ basic_tests (void) this_does_nothing (); - check_isinfp ("isinf (1/0) == +1", Inf_var); - check_isinfn ("isinf (-1/0) == -1", -Inf_var); + check_isinfp ("isinf (inf) == +1", Inf_var); + check_isinfn ("isinf (-inf) == -1", -Inf_var); check_bool ("!isinf (1)", !(FUNC(isinf) (one_var))); - check_bool ("!isinf (0/0)", !(FUNC(isinf) (NaN_var))); + check_bool ("!isinf (NaN)", !(FUNC(isinf) (NaN_var))); - check_isnan ("isnan (0/0)", NaN_var); - check_isnan ("isnan (-(0/0))", -NaN_var); + check_isnan ("isnan (NaN)", NaN_var); + check_isnan ("isnan (-NaN)", -NaN_var); check_bool ("!isnan (1)", !(FUNC(isnan) (one_var))); - check_bool ("!isnan (0/0)", !(FUNC(isnan) (Inf_var))); + check_bool ("!isnan (inf)", !(FUNC(isnan) (Inf_var))); check_bool ("inf == inf", Inf_var == Inf_var); check_bool ("-inf == -inf", -Inf_var == -Inf_var); @@ -1647,10 +1778,11 @@ basic_tests (void) static void initialize (void) { + fpstack_test ("*init*"); plus_zero = 0.0; nan_value = plus_zero / plus_zero; /* Suppress GCC warning */ - minus_zero = copysign (0.0, -1.0); + minus_zero = FUNC (copysign) (0.0, -1.0); plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF); minus_infty = -CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF); @@ -1677,7 +1809,7 @@ parse_options (int argc, char *argv[]) while (1) { - c = getopt_long (argc, argv, "vs", + c = getopt_long (argc, argv, "v::s", long_options, &option_index); /* Detect the end of the options. */ @@ -1727,6 +1859,7 @@ main (int argc, char *argv[]) #endif expm1_test (); frexp_test (); + ilogb_test (); ldexp_test (); log_test (); log10_test (); @@ -1736,6 +1869,8 @@ main (int argc, char *argv[]) #endif logb_test (); modf_test (); + scalb_test (); + scalbn_test (); sin_test (); sinh_test (); tan_test (); @@ -1750,11 +1885,13 @@ main (int argc, char *argv[]) fmax_test (); nextafter_test (); copysign_test (); + sqrt_test (); trunc_test (); #if 0 /* XXX I'm not sure what is the correct result. */ remquo_test (); #endif + cexp_test (); identities (); inverse_functions (); diff --git a/math/math.h b/math/math.h index 89c1cfa9bb..4d88f06673 100644 --- a/math/math.h +++ b/math/math.h @@ -48,6 +48,11 @@ __BEGIN_DECLS #define __MATHDECL(type, function,suffix, args) \ __MATHDECL_1(type, function,suffix, args); \ __MATHDECL_1(type, __CONCAT(__,function),suffix, args) +#define __MATHCALLX(function,suffix, args, attrib) \ + __MATHDECLX (_Mdouble_,function,suffix, args, attrib) +#define __MATHDECLX(type, function,suffix, args, attrib) \ + __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ + __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib) #define __MATHDECL_1(type, function,suffix, args) \ extern type __MATH_PRECNAME(function,suffix) args diff --git a/math/mathcalls.h b/math/mathcalls.h index d529c1a8e2..d566020aee 100644 --- a/math/mathcalls.h +++ b/math/mathcalls.h @@ -147,7 +147,7 @@ __MATHCALL (cbrt,, (_Mdouble_ __x)); __MATHCALL (ceil,, (_Mdouble_ __x)); /* Absolute value of X. */ -__MATHCALL (fabs,, (_Mdouble_ __x)); +__MATHCALLX (fabs,, (_Mdouble_ __x), (__const__)); /* Largest integer not greater than X. */ __MATHCALL (floor,, (_Mdouble_ __x)); @@ -159,10 +159,10 @@ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y)); #ifdef __USE_MISC /* Return 0 if VALUE is finite or NaN, +1 if it is +Infinity, -1 if it is -Infinity. */ -__MATHDECL (int,isinf,, (_Mdouble_ __value)); +__MATHDECLX (int,isinf,, (_Mdouble_ __value), (__const__)); /* Return nonzero if VALUE is finite and not NaN. */ -__MATHDECL (int,finite,, (_Mdouble_ __value)); +__MATHDECLX (int,finite,, (_Mdouble_ __value), (__const__)); /* Deal with an infinite or NaN result. If ERROR is ERANGE, result is +Inf; @@ -170,7 +170,7 @@ __MATHDECL (int,finite,, (_Mdouble_ __value)); otherwise result is NaN. This will set `errno' to either ERANGE or EDOM, and may return an infinity or NaN, or may do something else. */ -__MATHCALL (infnan,, (int __error)); +__MATHCALLX (infnan,, (int __error), (__const__)); /* Return X times (2 to the Nth power). */ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n)); @@ -185,18 +185,18 @@ __MATHCALL (significand,, (_Mdouble_ __x)); #if defined __USE_MISC || defined __USE_ISOC9X /* Return X with its signed changed to Y's. */ -__MATHCALL (copysign,, (_Mdouble_ __x, _Mdouble_ __y)); +__MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); #endif #ifdef __USE_ISOC9X /* Return representation of NaN for double type. */ -__MATHCALL (nan,, (__const char *__tagb)); +__MATHCALLX (nan,, (__const char *__tagb), (__const__)); #endif #if defined __USE_MISC || defined __USE_XOPEN /* Return nonzero if VALUE is not a number. */ -__MATHDECL (int,isnan,, (_Mdouble_ __value)); +__MATHDECLX (int,isnan,, (_Mdouble_ __value), (__const__)); /* Return the binary exponent of X, which must be nonzero. */ __MATHDECL (int,ilogb,, (_Mdouble_ __x)); @@ -235,7 +235,7 @@ __MATHCALL (lgamma,_r, (_Mdouble_, int *)); __MATHCALL (rint,, (_Mdouble_ __x)); /* Return X + epsilon if X < Y, X - epsilon if X > Y. */ -__MATHCALL (nextafter,, (_Mdouble_ __x, _Mdouble_ __y)); +__MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); /* Return the remainder of integer divison X / Y with infinite precision. */ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y)); @@ -257,7 +257,7 @@ __MATHCALL (round,, (_Mdouble_ __x)); /* Round X to the integral value in floating-point format nearest but not larger in magnitude. */ -__MATHCALL (trunc,, (_Mdouble_ __x)); +__MATHCALLX (trunc,, (_Mdouble_ __x), (__const__)); /* Compute remainder of X and Y and put in *QUO a value with sign of x/y and magnitude congruent `mod 2^n' to the magnitude of the integral @@ -276,8 +276,10 @@ __MATHCALL (fmin,, (_Mdouble_ __x, _Mdouble_ __y)); /* Classify given number. */ -__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value)); +__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value)) + __attribute__ ((__const__)); /* Test for negative number. */ -__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value)); +__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value)) + __attribute__ ((__const__)); #endif /* Use ISO C 9X. */ diff --git a/nis/nis_call.c b/nis/nis_call.c index cd1b6170d4..bf64558adc 100644 --- a/nis/nis_call.c +++ b/nis/nis_call.c @@ -176,7 +176,10 @@ __do_niscall (const nis_server *serv, int serv_len, u_long prog, { dir = readColdStartFile (); if (dir == NULL) - return NIS_UNAVAIL; + { + fputs (_("Error: could not find a NIS_COLD_START file\n"), stderr); + return NIS_UNAVAIL; + } server = dir->do_servers.do_servers_val; server_len = dir->do_servers.do_servers_len; } diff --git a/nis/nis_file.c b/nis/nis_file.c index ccff52f0bc..84818519b0 100644 --- a/nis/nis_file.c +++ b/nis/nis_file.c @@ -35,17 +35,11 @@ readColdStartFile (void) in = fopen (cold_start_file, "rb"); if (in == NULL) - { - printf (_("Error while opening %s for reading: %m"), cold_start_file); - return NULL; - } + return NULL; memset (&obj, '\0', sizeof (obj)); xdrstdio_create (&xdrs, in, XDR_DECODE); if (!xdr_directory_obj (&xdrs, &obj)) - { - printf (_("Error while reading %s: %m"), cold_start_file); - return NULL; - } + return NULL; return nis_clone_directory (&obj, NULL); } @@ -58,19 +52,11 @@ writeColdStartFile (const directory_obj *obj) out = fopen (cold_start_file, "wb"); if (out == NULL) - { - printf (_("Error while opening %s for writing: %m"), cold_start_file); - return FALSE; - } + return FALSE; xdrstdio_create (&xdrs, out, XDR_ENCODE); - /* XXX The following cast is bad! Shouldn't the XDR functions take - pointers to const objects? */ if (!xdr_directory_obj (&xdrs, (directory_obj *) obj)) - { - printf (_("Error while writing %s: %m"), cold_start_file); - return FALSE; - } + return FALSE; return TRUE; } diff --git a/nis/nis_free.c b/nis/nis_free.c index 60399c1655..a4ab7378e6 100644 --- a/nis/nis_free.c +++ b/nis/nis_free.c @@ -69,7 +69,7 @@ nis_free_request (ib_request *ibreq) void nis_free_endpoints (endpoint *ep, unsigned int len) { - int i; + unsigned int i; if (ep == NULL) return; @@ -97,7 +97,7 @@ nis_free_endpoints (endpoint *ep, unsigned int len) void nis_free_servers (nis_server *obj, unsigned int len) { - int i; + unsigned int i; if (obj == NULL) return; diff --git a/nis/nis_local_names.c b/nis/nis_local_names.c index 50120a6f73..e760f433b2 100644 --- a/nis/nis_local_names.c +++ b/nis/nis_local_names.c @@ -158,26 +158,29 @@ nis_local_host (void) if (__nishostname[0] == '\0') { - char *cp = __nishostname; - if (gethostname (__nishostname, NIS_MAXNAMELEN) < 0) - cp = stpcpy (cp, "\0"); + __nishostname[0] = '\0'; + else + { + char *cp; + len = strlen(__nishostname); - len = cp - __nishostname; + /* Hostname already fully qualified? */ + if (__nishostname[len - 1] == '.') + return __nishostname; - /* Hostname already fully qualified? */ - if (__nishostname[len - 1] == '.') - return __nishostname; + if ((strlen (__nishostname) + strlen (nis_local_directory ()) + 1) > + NIS_MAXNAMELEN) + { + __nishostname[0] = '\0'; + return __nishostname; + } - if (strlen (__nishostname + strlen (nis_local_directory ()) + 1) > - NIS_MAXNAMELEN) - { - __nishostname[0] = '\0'; - return __nishostname; + cp = &__nishostname[len]; + *cp++ = '.'; + strncpy (cp, nis_local_directory (), NIS_MAXNAMELEN - len -1); + __nishostname[NIS_MAXNAMELEN] = '\0'; } - - *cp++ = '.'; - stpcpy (cp, nis_local_directory ()); } return __nishostname; diff --git a/nis/rpcsvc/nis.h b/nis/rpcsvc/nis.h index c2c5319abd..b91ce19903 100644 --- a/nis/rpcsvc/nis.h +++ b/nis/rpcsvc/nis.h @@ -998,7 +998,11 @@ extern nis_error * nis_updkeys_3(); extern nis_error * nis_updkeys_3_svc(); #endif /* Old Style C */ struct rpcgen_table { +#if defined __cplusplus || __STDC__ + char *(*proc)(void); +#else char *(*proc)(); +#endif xdrproc_t xdr_arg; unsigned len_arg; xdrproc_t xdr_res; diff --git a/nis/rpcsvc/ypclnt.h b/nis/rpcsvc/ypclnt.h index b61a498417..ed5e1e72d6 100644 --- a/nis/rpcsvc/ypclnt.h +++ b/nis/rpcsvc/ypclnt.h @@ -1,23 +1,22 @@ -/* -** Copyright (c) 1996 Thorsten Kukuk, Germany -** -** This library is free software; you can redistribute it and/or -** modify it under the terms of the GNU Library General Public -** License as published by the Free Software Foundation; either -** version 2 of the License, 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 -** Library General Public License for more details. -** -** You should have received a copy of the GNU Library General Public -** License along with this library; if not, write to the Free -** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -** -** Author: Thorsten Kukuk <kukuk@vt.uni-paderborn.de> -** -*/ +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + #ifndef __RPCSVC_YPCLNT_H__ #define __RPCSVC_YPCLNT_H__ @@ -52,24 +51,26 @@ __BEGIN_DECLS /* struct ypall_callback * is the arg which must be passed to yp_all */ -struct ypall_callback { - int (*foreach)(); - char *data; -}; +struct ypall_callback + { + int (*foreach) __P ((int __status, char *__key, int __keylen, + char *__val, int __vallen, char *__data)); + char *data; + }; /* External NIS client function references. */ extern int yp_bind __P ((__const char *)); extern void yp_unbind __P ((__const char *)); extern int yp_get_default_domain __P ((char **)); -extern int yp_match __P ((__const char *, __const char *, __const char *, +extern int yp_match __P ((__const char *, __const char *, __const char *, __const int, char **, int *)); -extern int yp_first __P ((__const char *, __const char *, char **, +extern int yp_first __P ((__const char *, __const char *, char **, int *, char **, int *)); -extern int yp_next __P ((__const char *, __const char *, __const char *, +extern int yp_next __P ((__const char *, __const char *, __const char *, __const int, char **, int *, char **, int *)); extern int yp_master __P ((__const char *, __const char *, char **)); extern int yp_order __P ((__const char *, __const char *, unsigned int *)); -extern int yp_all __P ((__const char *, __const char *, +extern int yp_all __P ((__const char *, __const char *, __const struct ypall_callback *)); extern __const char *yperr_string __P ((__const int)); extern __const char *ypbinderr_string __P ((__const int)); @@ -81,7 +82,7 @@ extern int yp_maplist __P ((__const char *, struct ypmaplist **)); #endif /* Exist only under BSD and Linux systems */ -extern int __yp_check __P ((char **)); +extern int __yp_check __P ((char **)); __END_DECLS diff --git a/nis/ypclnt.c b/nis/ypclnt.c index b128ad6366..e4667f79a6 100644 --- a/nis/ypclnt.c +++ b/nis/ypclnt.c @@ -123,9 +123,9 @@ __yp_bind (const char *domain, dom_binding ** ypdb) } if (clnt_call (client, YPBINDPROC_DOMAIN, - (xdrproc_t) xdr_domainname, &domain, + (xdrproc_t) xdr_domainname, (caddr_t) &domain, (xdrproc_t) xdr_ypbind_resp, - &ypbr, TIMEOUT) != RPC_SUCCESS) + (caddr_t) &ypbr, TIMEOUT) != RPC_SUCCESS) { clnt_destroy (client); if (is_new) @@ -526,7 +526,8 @@ yp_order (const char *indomain, const char *inmap, unsigned int *outorder) } static void *ypall_data; -static int (*ypall_foreach) (); +static int (*ypall_foreach) __P ((int status, char *key, int keylen, + char *val, int vallen, char *data)); static bool_t __xdr_ypresp_all (XDR * xdrs, u_long * objp) @@ -628,8 +629,9 @@ yp_all (const char *indomain, const char *inmap, ypall_foreach = incallback->foreach; ypall_data = (void *) incallback->data; - result = clnt_call (clnt, YPPROC_ALL, (xdrproc_t) xdr_ypreq_nokey, &req, - (xdrproc_t) __xdr_ypresp_all, &status, TIMEOUT); + result = clnt_call (clnt, YPPROC_ALL, (xdrproc_t) xdr_ypreq_nokey, + (caddr_t) &req, (xdrproc_t) __xdr_ypresp_all, + (caddr_t) &status, TIMEOUT); if (result != RPC_SUCCESS) { diff --git a/po/.cvsignore b/po/.cvsignore index 6f03266fbe..6733a7efc3 100644 --- a/po/.cvsignore +++ b/po/.cvsignore @@ -1 +1,2 @@ [a-z]*.pot *.mo +ttt diff --git a/posix/getopt.c b/posix/getopt.c index aa0c01ce59..47fdda8080 100644 --- a/posix/getopt.c +++ b/posix/getopt.c @@ -253,7 +253,9 @@ static int last_nonopt; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ -char *__getopt_nonoption_flags; +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + static int nonoption_flags_max_len; static int nonoption_flags_len; diff --git a/posix/getopt_init.c b/posix/getopt_init.c index e90c9d7d8a..80b6f96254 100644 --- a/posix/getopt_init.c +++ b/posix/getopt_init.c @@ -29,8 +29,8 @@ #include "../stdio-common/_itoa.h" -/* External variable to synchronize work. */ -extern char *__getopt_nonoption_flags; +/* Variable to synchronize work. */ +char *__getopt_nonoption_flags; extern pid_t __libc_pid; diff --git a/stdio-common/Makefile b/stdio-common/Makefile index d1d922ed36..b09a3a2eeb 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -26,7 +26,7 @@ headers := stdio_lim.h printf.h routines := \ ctermid cuserid \ vfprintf vprintf printf_fp reg-printf printf-prs _itoa printf_fphex \ - fprintf printf snprintf sprintf asprintf dprintf \ + printf_size fprintf printf snprintf sprintf asprintf dprintf \ vfscanf \ fscanf scanf sscanf \ perror psignal \ diff --git a/stdio-common/printf-parse.h b/stdio-common/printf-parse.h index 141164b04b..f1fecdb275 100644 --- a/stdio-common/printf-parse.h +++ b/stdio-common/printf-parse.h @@ -1,5 +1,5 @@ /* Internal header for parsing printf format strings. - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of th GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -106,8 +106,9 @@ find_spec (const char *format, mbstate_t *ps) } -/* This is defined in reg-printf.c. */ -extern printf_arginfo_function **__printf_arginfo_table; +/* These are defined in reg-printf.c. */ +extern printf_arginfo_function *__printf_arginfo_table[]; +extern printf_function **__printf_function_table; /* FORMAT must point to a '%' at the beginning of a spec. Fills in *SPEC @@ -299,8 +300,9 @@ parse_one_spec (const UCHAR_T *format, size_t posn, struct printf_spec *spec, /* Get the format specification. */ spec->info.spec = (wchar_t) *format++; - if (__printf_arginfo_table != NULL && - __printf_arginfo_table[spec->info.spec] != NULL) + if (__printf_function_table != NULL + && spec->info.spec <= UCHAR_MAX + && __printf_arginfo_table[spec->info.spec] != NULL) /* We don't try to get the types for all arguments if the format uses more than one. The normal case is covered though. */ spec->ndata_args = (*__printf_arginfo_table[spec->info.spec]) @@ -362,15 +364,14 @@ parse_one_spec (const UCHAR_T *format, size_t posn, struct printf_spec *spec, spec->ndata_args = 0; break; } + } - if (spec->data_arg == -1 && spec->ndata_args > 0) - { - /* There are args consumed, but no positional spec. - Use the next sequential arg position. */ - spec->data_arg = posn; - posn += spec->ndata_args; - nargs += spec->ndata_args; - } + if (spec->data_arg == -1 && spec->ndata_args > 0) + { + /* There are args consumed, but no positional spec. Use the + next sequential arg position. */ + spec->data_arg = posn; + nargs += spec->ndata_args; } if (spec->info.spec == L'\0') diff --git a/stdio-common/printf.h b/stdio-common/printf.h index 6d9e8a455f..c49172b88c 100644 --- a/stdio-common/printf.h +++ b/stdio-common/printf.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 95, 96, 97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -122,6 +122,21 @@ enum #define PA_FLAG_PTR (1 << 11) + +/* Function which can be registered as `printf'-handlers. */ + +/* Print floating point value using using abbreviations for the orders + of magnitude used for numbers ('k' for kilo, 'm' for mega etc). If + the format specifier is a uppercase character powers of 1000 are + used. Otherwise powers of 1024. */ +extern int printf_size __P ((FILE *__fp, __const struct printf_info *__info, + __const void *__const *args)); + +/* This is the appropriate argument information function for `printf_size'. */ +extern int printf_size_info __P ((__const struct printf_info *__info, + size_t __n, int *__argtypes)); + + __END_DECLS #endif /* printf.h */ diff --git a/stdio-common/printf_size.c b/stdio-common/printf_size.c new file mode 100644 index 0000000000..0184269181 --- /dev/null +++ b/stdio-common/printf_size.c @@ -0,0 +1,250 @@ +/* Print size value using units for orders of magnitude. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + Based on a proposal by Larry McVoy <lm@sgi.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <ctype.h> +#include <ieee754.h> +#include <math.h> +#include <printf.h> +#ifdef USE_IN_LIBIO +# include <libioP.h> +#else +# include <stdio.h> +#endif + + +/* This defines make it possible to use the same code for GNU C library and + the GNU I/O library. */ +#ifdef USE_IN_LIBIO +# define PUT(f, s, n) _IO_sputn (f, s, n) +# define PAD(f, c, n) _IO_padn (f, c, n) +/* We use this file GNU C library and GNU I/O library. So make + names equal. */ +# undef putc +# define putc(c, f) _IO_putc_unlocked (c, f) +# define size_t _IO_size_t +# define FILE _IO_FILE +#else /* ! USE_IN_LIBIO */ +# define PUT(f, s, n) fwrite (s, 1, n, f) +# define PAD(f, c, n) __printf_pad (f, c, n) +ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */ +#endif /* USE_IN_LIBIO */ + +/* Macros for doing the actual output. */ + +#define outchar(ch) \ + do \ + { \ + register const int outc = (ch); \ + if (putc (outc, fp) == EOF) \ + return -1; \ + ++done; \ + } while (0) + +#define PRINT(ptr, len) \ + do \ + { \ + register size_t outlen = (len); \ + if (len > 20) \ + { \ + if (PUT (fp, ptr, outlen) != outlen) \ + return -1; \ + ptr += outlen; \ + done += outlen; \ + } \ + else \ + { \ + while (outlen-- > 0) \ + outchar (*ptr++); \ + } \ + } while (0) + +#define PADN(ch, len) \ + do \ + { \ + if (PAD (fp, ch, len) != len) \ + return -1; \ + done += len; \ + } \ + while (0) + +/* Prototype for helper functions. */ +extern int __printf_fp (FILE *fp, const struct printf_info *info, + const void *const *args); + + +int +printf_size (FILE *fp, const struct printf_info *info, const void *const *args) +{ + /* Units for the both formats. */ + static const char units[2][8] = + { + " kmgtps", /* For binary format. */ + " KMGTPS" /* For decimal format. */ + }; + const char *tag = units[isupper (info->spec) != 0]; + int divisor = isupper (info->spec) ? 1000 : 1024; + + /* The floating-point value to output. */ + union + { + union ieee754_double dbl; + union ieee854_long_double ldbl; + } + fpnum; + const void *ptr = &fpnum; + + int negative = 0; + + /* "NaN" or "Inf" for the special cases. */ + const char *special = NULL; + + struct printf_info fp_info; + int done = 0; + + + /* Fetch the argument value. */ + if (info->is_long_double && sizeof (long double) > sizeof (double)) + { + fpnum.ldbl.d = *(const long double *) args[0]; + + /* Check for special values: not a number or infinity. */ + if (__isnanl (fpnum.ldbl.d)) + { + special = "nan"; + negative = 0; + } + else if (__isinfl (fpnum.ldbl.d)) + { + special = "inf"; + + negative = fpnum.ldbl.d < 0; + } + else + while (fpnum.ldbl.d >= divisor && tag[1] != '\0') + { + fpnum.ldbl.d /= divisor; + ++tag; + } + } + else + { + fpnum.dbl.d = *(const double *) args[0]; + + /* Check for special values: not a number or infinity. */ + if (__isnan (fpnum.dbl.d)) + { + special = "nan"; + negative = 0; + } + else if (__isinf (fpnum.dbl.d)) + { + special = "inf"; + + negative = fpnum.dbl.d < 0; + } + else + while (fpnum.dbl.d >= divisor && tag[1] != '\0') + { + fpnum.dbl.d /= divisor; + ++tag; + } + } + + if (special) + { + int width = info->prec > info->width ? info->prec : info->width; + + if (negative || info->showsign || info->space) + --width; + width -= 3; + + if (!info->left && width > 0) + PADN (' ', width); + + if (negative) + outchar ('-'); + else if (info->showsign) + outchar ('+'); + else if (info->space) + outchar (' '); + + PRINT (special, 3); + + if (info->left && width > 0) + PADN (' ', width); + + return done; + } + + /* Prepare to print the number. We want to use `__printf_fp' so we + have to prepare a `printf_info' structure. */ + fp_info.spec = 'f'; + fp_info.prec = info->prec < 0 ? 3 : info->prec; + fp_info.is_long_double = info->is_long_double; + fp_info.is_short = info->is_short; + fp_info.is_long = info->is_long; + fp_info.alt = info->alt; + fp_info.space = info->space; + fp_info.left = info->left; + fp_info.showsign = info->showsign; + fp_info.group = info->group; + fp_info.extra = info->extra; + fp_info.pad = info->pad; + + if (fp_info.left && fp_info.pad == L' ') + { + /* We must do the padding ourself since the unit character must + be placed before the padding spaces. */ + fp_info.width = 0; + + done = __printf_fp (fp, &fp_info, &ptr); + if (done > 0) + { + outchar (*tag); + if (info->width > done) + PADN (' ', info->width - done); + } + } + else + { + /* We can let __printf_fp do all the printing and just add our + unit character afterwards. */ + fp_info.width = info->width - 1; + + done = __printf_fp (fp, &fp_info, &ptr); + if (done > 0) + outchar (*tag); + } + + return done; +} + +/* This is the function used by `vfprintf' to determine number and + type of the arguments. */ +int +printf_size_info (const struct printf_info *info, size_t n, int *argtypes) +{ + /* We need only one double or long double argument. */ + if (n >= 1) + argtypes[0] = PA_DOUBLE | (info->is_long_double ? PA_FLAG_LONG_DOUBLE : 0); + + return 1; +} diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index c206c2f0ac..856c65dbb5 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -1117,7 +1117,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) is_long = sizeof (size_t) > sizeof (unsigned int); JUMP (*++f, step4_jumps); - /* Process current format. */ while (1) { @@ -1136,6 +1135,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) goto do_positional; } + /* The format is correctly handled. */ + ++nspecs_done; + /* Look for next format specifier. */ f = find_spec ((end_of_spec = ++f), &mbstate); diff --git a/sysdeps/generic/setenv.c b/sysdeps/generic/setenv.c index 94dc7472ec..11b5906a9d 100644 --- a/sysdeps/generic/setenv.c +++ b/sysdeps/generic/setenv.c @@ -56,6 +56,12 @@ __libc_lock_define_initialized (static, envlock) # define UNLOCK #endif +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define clearenv __clearenv +#endif + + /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; @@ -188,3 +194,7 @@ clearenv () return 0; } +#ifdef _LIBC +# undef clearenv +weak_alias (__clearenv, clearenv) +#endif diff --git a/sysdeps/i386/huge_val.h b/sysdeps/i386/huge_val.h index 8af745f6c1..0aad84902c 100644 --- a/sysdeps/i386/huge_val.h +++ b/sysdeps/i386/huge_val.h @@ -23,16 +23,10 @@ #include <features.h> #include <sys/cdefs.h> -#include <endian.h> /* IEEE positive infinity (-HUGE_VAL is negative infinity). */ -#if __BYTE_ORDER == __BIG_ENDIAN -#define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN #define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } -#endif #define __huge_val_t union { unsigned char __c[8]; double __d; } #ifdef __GNUC__ @@ -48,12 +42,7 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; #ifdef __USE_ISOC9X -#if __BYTE_ORDER == __BIG_ENDIAN -#define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 } -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN #define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f } -#endif #define __huge_valf_t union { unsigned char __c[4]; float __f; } #ifdef __GNUC__ @@ -65,12 +54,7 @@ static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes }; #endif /* GCC. */ -#if __BYTE_ORDER == __BIG_ENDIAN -#define __HUGE_VALL_bytes { 0x7f, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN #define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 } -#endif #define __huge_vall_t union { unsigned char __c[12]; long double __ld; } #ifdef __GNUC__ diff --git a/sysdeps/libm-i387/e_scalb.S b/sysdeps/libm-i387/e_scalb.S index db63dde56e..427a3b905e 100644 --- a/sysdeps/libm-i387/e_scalb.S +++ b/sysdeps/libm-i387/e_scalb.S @@ -11,5 +11,6 @@ ENTRY(__ieee754_scalb) fldl 12(%esp) fldl 4(%esp) fscale + fstp %st(1) ret END(__ieee754_scalb) diff --git a/sysdeps/libm-i387/e_scalbf.S b/sysdeps/libm-i387/e_scalbf.S index 7de03db287..4c62134a0c 100644 --- a/sysdeps/libm-i387/e_scalbf.S +++ b/sysdeps/libm-i387/e_scalbf.S @@ -12,5 +12,6 @@ ENTRY(__ieee754_scalbf) flds 8(%esp) flds 4(%esp) fscale + fstp %st(1) ret END(__ieee754_scalbf) diff --git a/sysdeps/libm-i387/e_scalbl.S b/sysdeps/libm-i387/e_scalbl.S index 7b20cc6f9c..3b746ad363 100644 --- a/sysdeps/libm-i387/e_scalbl.S +++ b/sysdeps/libm-i387/e_scalbl.S @@ -13,5 +13,6 @@ ENTRY(__ieee754_scalbl) fldt 16(%esp) fldt 4(%esp) fscale + fstp %st(1) ret END(__ieee754_scalbl) diff --git a/sysdeps/libm-ieee754/e_atan2l.c b/sysdeps/libm-ieee754/e_atan2l.c index 6b76f96533..e60f2d41c1 100644 --- a/sysdeps/libm-ieee754/e_atan2l.c +++ b/sysdeps/libm-ieee754/e_atan2l.c @@ -126,7 +126,7 @@ pi_lo = -5.01655761266833202345176e-20L;/* 0xBFBE, 0xECE675D1, 0xFC8F8CBB */ case 1: { u_int32_t sz; GET_LDOUBLE_EXP(sz,z); - SET_LDOUBLE_EXP(z,sy ^ 0x8000); + SET_LDOUBLE_EXP(z,sz ^ 0x8000); } return z ; /* atan(-,+) */ case 2: return pi-(z-pi_lo);/* atan(+,-) */ diff --git a/sysdeps/libm-ieee754/s_asinhl.c b/sysdeps/libm-ieee754/s_asinhl.c index 865bc31052..d5b307753e 100644 --- a/sysdeps/libm-ieee754/s_asinhl.c +++ b/sysdeps/libm-ieee754/s_asinhl.c @@ -65,6 +65,6 @@ huge= 1.000000000000000000e+4900L; t = x*x; w =__log1pl(fabsl(x)+t/(one+__ieee754_sqrtl(one+t))); } - if(hx>0x7fff) return w; else return -w; + if(hx>0x8000) return -w; else return w; } weak_alias (__asinhl, asinhl) diff --git a/sysdeps/libm-ieee754/s_cexpf.c b/sysdeps/libm-ieee754/s_cexpf.c new file mode 100644 index 0000000000..14cfb19766 --- /dev/null +++ b/sysdeps/libm-ieee754/s_cexpf.c @@ -0,0 +1,63 @@ +/* Return value of complex exponential function for float complex value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <complex.h> +#include <math.h> + + +__complex__ float +__cexpf (__complex__ float x) +{ + __complex__ float retval; + + if (isfinite (__real__ x)) + { + if (isfinite (__imag__ x)) + { + retval = __expf (__real__ x) * (__cosf (__imag__ x) + + 1i * __sinf (__imag__ x)); + } + else + /* If the imaginary part is +-inf or NaN and the real part is + not +-inf the result is NaN + iNan. */ + retval = __nanf ("") + 1.0i * __nanf (""); + } + else if (__isinff (__real__ x)) + { + if (isfinite (__imag__ x)) + { + if (signbit (__real__ x) == 0 && __imag__ x == 0.0) + retval = HUGE_VALF; + else + retval = ((signbit (__real__ x) ? 0.0 : HUGE_VALF) + * (__cosf (__imag__ x) + 1i * __sinf (__imag__ x))); + } + else if (signbit (__real__ x)) + retval = HUGE_VALF + 1.0i * __nanf (""); + else + retval = 0.0; + } + else + /* If the real part is NaN the result is NaN + iNan. */ + retval = __nanf ("") + 1.0i * __nanf (""); + + return retval; +} +weak_alias (__cexpf, cexpf) diff --git a/sysdeps/libm-ieee754/s_cexpl.c b/sysdeps/libm-ieee754/s_cexpl.c new file mode 100644 index 0000000000..6b3d409158 --- /dev/null +++ b/sysdeps/libm-ieee754/s_cexpl.c @@ -0,0 +1,63 @@ +/* Return value of complex exponential function for long double complex value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <complex.h> +#include <math.h> + + +__complex__ long double +__cexpl (__complex__ long double x) +{ + __complex__ long double retval; + + if (isfinite (__real__ x)) + { + if (isfinite (__imag__ x)) + { + retval = __expl (__real__ x) * (__cosl (__imag__ x) + + 1i * __sinl (__imag__ x)); + } + else + /* If the imaginary part is +-inf or NaN and the real part is + not +-inf the result is NaN + iNan. */ + retval = __nanl ("") + 1.0i * __nanl (""); + } + else if (__isinfl (__real__ x)) + { + if (isfinite (__imag x)) + { + if (signbit (__real__ x) == 0 && __imag__ x == 0.0) + retval = HUGE_VALL; + else + retval = ((signbit (__real__ x) ? 0.0 : HUGE_VALL) + * (__cosl (__imag__ x) + 1i * __sinl (__imag__ x))); + } + else if (signbit (__real__ x)) + retval = HUGE_VALL + 1.0i * __nanl (""); + else + retval = 0.0; + } + else + /* If the real part is NaN the result is NaN + iNan. */ + retval = __nanl ("") + 1.0i * __nanl (""); + + return retval; +} +weak_alias (__cexpl, cexpl) diff --git a/sysdeps/libm-ieee754/s_finitel.c b/sysdeps/libm-ieee754/s_finitel.c index 4423726645..6e444e90d0 100644 --- a/sysdeps/libm-ieee754/s_finitel.c +++ b/sysdeps/libm-ieee754/s_finitel.c @@ -35,6 +35,6 @@ static char rcsid[] = "$NetBSD: $"; { int32_t exp; GET_LDOUBLE_EXP(exp,x); - return (int)((u_int32_t)((exp&0x7fff)-0x7fff)>>15); + return (int)((u_int32_t)((exp&0x7fff)-0x7fff)>>31); } weak_alias (__finitel, finitel) diff --git a/sysdeps/libm-ieee754/s_fpclassifyl.c b/sysdeps/libm-ieee754/s_fpclassifyl.c index d7a0e943cf..4df0b44f75 100644 --- a/sysdeps/libm-ieee754/s_fpclassifyl.c +++ b/sysdeps/libm-ieee754/s_fpclassifyl.c @@ -2,6 +2,7 @@ Copyright (C) 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + Fixed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -26,19 +27,18 @@ int __fpclassifyl (long double x) { - u_int32_t ex, hx, lx; + u_int32_t ex, hx, lx, m; int retval = FP_NORMAL; GET_LDOUBLE_WORDS (ex, hx, lx, x); - hx &= 0x7fffffff; - hx |= lx; + m = (hx & 0x7fffffff) | lx; ex &= 0x7fff; - if ((ex | hx) == 0) + if ((ex | m) == 0) retval = FP_ZERO; - else if (ex == 0) + else if (ex == 0 && (hx & 0x80000000) == 0) retval = FP_SUBNORMAL; else if (ex == 0x7fff) - retval = hx != 0 ? FP_NAN : FP_INFINITE; + retval = m != 0 ? FP_NAN : FP_INFINITE; return retval; } diff --git a/sysdeps/libm-ieee754/s_nan.c b/sysdeps/libm-ieee754/s_nan.c index 58551c1ad5..0d065d5c72 100644 --- a/sysdeps/libm-ieee754/s_nan.c +++ b/sysdeps/libm-ieee754/s_nan.c @@ -31,7 +31,7 @@ double -nan (const char *tagp) +__nan (const char *tagp) { #ifdef HANDLE_TAGP /* If we ever should have use of the TAGP parameter we will use the @@ -45,3 +45,4 @@ nan (const char *tagp) return nan_value.d; #endif } +weak_alias (__nan, nan) diff --git a/sysdeps/libm-ieee754/s_nanf.c b/sysdeps/libm-ieee754/s_nanf.c index e965b94b33..660f30daf3 100644 --- a/sysdeps/libm-ieee754/s_nanf.c +++ b/sysdeps/libm-ieee754/s_nanf.c @@ -31,7 +31,7 @@ float -nanf (const char *tagp) +__nanf (const char *tagp) { #ifdef HANDLE_TAGP /* If we ever should have use of the TAGP parameter we will use the @@ -45,3 +45,4 @@ nanf (const char *tagp) return nan_value.f; #endif } +weak_alias (__nanf, nanf) diff --git a/sysdeps/libm-ieee754/s_nanl.c b/sysdeps/libm-ieee754/s_nanl.c index df0180ee46..4ade80424f 100644 --- a/sysdeps/libm-ieee754/s_nanl.c +++ b/sysdeps/libm-ieee754/s_nanl.c @@ -31,7 +31,7 @@ long double -nanl (const char *tagp) +__nanl (const char *tagp) { #ifdef HANDLE_TAGP /* If we ever should have use of the TAGP parameter we will use the @@ -46,3 +46,4 @@ nanl (const char *tagp) return nan_value.d; #endif } +weak_alias (__nanl, nanl) diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h index fe01c254d7..d6187015ea 100644 --- a/sysdeps/m68k/fpu/__math.h +++ b/sysdeps/m68k/fpu/__math.h @@ -85,7 +85,6 @@ __inline_mathop(__fabs, abs) __inline_mathop(__rint, int) __inline_mathop(__expm1, etoxm1) __inline_mathop(__log1p, lognp1) -__inline_mathop(__logb, log2) __inline_mathop(__significand, getman) __inline_mathop(__log2, log2) @@ -103,7 +102,6 @@ __inline_mathop(tanh, tanh) __inline_mathop(rint, int) __inline_mathop(expm1, etoxm1) __inline_mathop(log1p, lognp1) -__inline_mathop(logb, log2) #endif #ifdef __USE_MISC @@ -140,90 +138,6 @@ __m81_defun (float_type, __CONCAT(__ieee754_fmod,s), \ return __result; \ } \ \ -__m81_defun (float_type, __CONCAT(__ieee754_atan2,s), \ - (float_type __y, float_type __x)) \ -{ \ - float_type __pi, __pi_2; \ - \ - __asm ("fmovecr%.x %#0, %0" : "=f" (__pi)); \ - __asm ("fscale%.w %#-1, %0" : "=f" (__pi_2) : "0" (__pi)); \ - if (__x > 0) \ - { \ - if (__y > 0) \ - { \ - if (__x > __y) \ - return __m81_u(__CONCAT(__atan,s)) (__y / __x); \ - else \ - return __pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ - } \ - else \ - { \ - if (__x > -__y) \ - return __m81_u(__CONCAT(__atan,s)) (__y / __x); \ - else \ - return -__pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ - } \ - } \ - else \ - { \ - if (__y > 0) \ - { \ - if (-__x < __y) \ - return __pi + __m81_u(__CONCAT(__atan,s)) (__y / __x); \ - else \ - return __pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ - } \ - else \ - { \ - if (-__x > -__y) \ - return -__pi + __m81_u(__CONCAT(__atan,s)) (__y / __x); \ - else \ - return -__pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ - } \ - } \ -} \ - \ -__m81_defun (float_type, __CONCAT(__ieee754_pow,s), \ - (float_type __x, float_type __y)) \ -{ \ - float_type __result; \ - if (__x == 0.0) \ - { \ - if (__y <= 0.0) \ - __result = 0.0 / 0.0; \ - else \ - __result = 0.0; \ - } \ - else if (__y == 0.0 || __x == 1.0) \ - __result = 1.0; \ - else if (__y == 1.0) \ - __result = __x; \ - else if (__y == 2.0) \ - __result = __x * __x; \ - else if (__x == 10.0) \ - __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y)); \ - else if (__x == 2.0) \ - __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y)); \ - else if (__x < 0.0) \ - { \ - float_type __temp = __m81_u (__CONCAT(__rint,s)) (__y); \ - if (__y == __temp) \ - { \ - int __i = (int) __y; \ - __result = (__m81_u(__CONCAT(__ieee754_exp,s)) \ - (__y * __m81_u(__CONCAT(__ieee754_log,s)) (-__x))); \ - if (__i & 1) \ - __result = -__result; \ - } \ - else \ - __result = 0.0 / 0.0; \ - } \ - else \ - __result = (__m81_u(__CONCAT(__ieee754_exp,s)) \ - (__y * __m81_u(__CONCAT(__ieee754_log,s)) (__x))); \ - return __result; \ -} \ - \ __m81_defun (float_type, __CONCAT(__ieee754_scalb,s), \ (float_type __x, float_type __n)) \ { \ diff --git a/sysdeps/m68k/fpu/e_atan2.c b/sysdeps/m68k/fpu/e_atan2.c index ae7a799ad1..58d7555f41 100644 --- a/sysdeps/m68k/fpu/e_atan2.c +++ b/sysdeps/m68k/fpu/e_atan2.c @@ -1,2 +1,98 @@ -#define FUNC __ieee754_atan2 -#include <e_fmod.c> +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES +#include <math.h> +#include "math_private.h" + +#ifndef SUFF +#define SUFF +#endif +#ifndef float_type +#define float_type double +#endif + +#define __CONCATX(a,b) __CONCAT(a,b) + +float_type +__CONCATX(__ieee754_atan2,SUFF) (float_type y, float_type x) +{ + float_type pi, pi_2, z; + + __asm ("fmovecr%.x %#0, %0" : "=f" (pi)); + __asm ("fscale%.w %#-1, %0" : "=f" (pi_2) : "0" (pi)); + if (x != x || y != y) + z = x + y; + else if (y == 0) + { + if (signbit (x)) + z = signbit (y) ? -pi : pi; + else + z = y; + } + else if (__m81_u(__CONCATX(__isinf,SUFF)) (x)) + { + if (__m81_u(__CONCATX(__isinf,SUFF)) (y)) + { + float_type pi_4; + __asm ("fscale%.w %#-1, %0" : "=f" (pi_4) : "0" (pi_2)); + z = x > 0 ? pi_4 : 3 * pi_4; + } + else + z = x > 0 ? 0 : pi; + if (signbit (y)) + z = -z; + } + else if (__m81_u(__CONCATX(__isinf,SUFF)) (y)) + z = y > 0 ? pi_2 : -pi_2; + else if (x > 0) + { + if (y > 0) + { + if (x > y) + z = __m81_u(__CONCATX(__atan,SUFF)) (y / x); + else + z = pi_2 - __m81_u(__CONCATX(__atan,SUFF)) (x / y); + } + else + { + if (x > -y) + z = __m81_u(__CONCATX(__atan,SUFF)) (y / x); + else + z = -pi_2 - __m81_u(__CONCATX(__atan,SUFF)) (x / y); + } + } + else + { + if (y < 0) + { + if (-x > y) + z = -pi + __m81_u(__CONCATX(__atan,SUFF)) (y / x); + else + z = -pi_2 - __m81_u(__CONCATX(__atan,SUFF)) (x / y); + } + else + { + if (-x > y) + z = pi + __m81_u(__CONCATX(__atan,SUFF)) (y / x); + else + z = pi_2 - __m81_u(__CONCATX(__atan,SUFF)) (x / y); + } + } + return z; +} diff --git a/sysdeps/m68k/fpu/e_atan2f.c b/sysdeps/m68k/fpu/e_atan2f.c index a4c5ebdfd3..a0c750a759 100644 --- a/sysdeps/m68k/fpu/e_atan2f.c +++ b/sysdeps/m68k/fpu/e_atan2f.c @@ -1,2 +1,3 @@ -#define FUNC __ieee754_atan2f -#include <e_fmodf.c> +#define SUFF f +#define float_type float +#include <e_atan2.c> diff --git a/sysdeps/m68k/fpu/e_atan2l.c b/sysdeps/m68k/fpu/e_atan2l.c index 0d43a77b9e..426ca94baa 100644 --- a/sysdeps/m68k/fpu/e_atan2l.c +++ b/sysdeps/m68k/fpu/e_atan2l.c @@ -1,2 +1,3 @@ -#define FUNC __ieee754_atan2l -#include <e_fmodl.c> +#define SUFF l +#define float_type long double +#include <e_atan2.c> diff --git a/sysdeps/m68k/fpu/e_pow.c b/sysdeps/m68k/fpu/e_pow.c index 29798a15ca..970e8b821b 100644 --- a/sysdeps/m68k/fpu/e_pow.c +++ b/sysdeps/m68k/fpu/e_pow.c @@ -1,2 +1,135 @@ -#define FUNC __ieee754_pow -#include <e_fmod.c> +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES +#include <math.h> +#include "math_private.h" + +#ifndef SUFF +#define SUFF +#endif +#ifndef float_type +#define float_type double +#endif + +#define __CONCATX(a,b) __CONCAT(a,b) + +float_type +__CONCATX(__ieee754_pow,SUFF) (float_type x, float_type y) +{ + float_type z; + float_type ax; + + if (y == 0.0) + return 1.0; + if (x != x || y != y) + return x + y; + + if (__m81_u(__CONCATX(__isinf,SUFF)) (y)) + { + ax = __CONCATX(fabs,SUFF) (x); + if (ax == 1) + return y - y; + if (ax > 1) + return y > 0 ? y : 0; + else + return y < 0 ? -y : 0; + } + + if (__CONCATX(fabs,SUFF) (y) == 1) + return y > 0 ? x : 1 / x; + + if (y == 2) + return x * x; + if (y == 0 && x >= 0) + return __m81_u(__CONCATX(__ieee754_sqrt,SUFF)) (x); + + if (x == 10.0) + { + __asm ("ftentox%.x %1, %0" : "=f" (z) : "f" (y)); + return z; + } + if (x == 2.0) + { + __asm ("ftwotox%.x %1, %0" : "=f" (z) : "f" (y)); + return z; + } + + ax = __CONCATX(fabs,SUFF) (x); + if (__m81_u(__CONCATX(__isinf,SUFF)) (x) || x == 0 || ax == 1) + { + z = ax; + if (y < 0) + z = 1 / z; + if (signbit (x)) + { + float_type temp = __m81_u (__CONCATX(__rint,SUFF)) (y); + if (y != temp) + { + if (x == -1) + z = (z - z) / (z - z); + } + else + { + if (sizeof (float_type) == sizeof (float)) + { + long i = (long) y; + if (i & 1) + z = -z; + } + else + { + long long i = (long long) y; + if ((float_type) i == y && i & 1) + z = -z; + } + } + } + return z; + } + + if (x < 0.0) + { + float_type temp = __m81_u (__CONCATX(__rint,SUFF)) (y); + if (y == temp) + { + long long i = (long long) y; + z = (__m81_u(__CONCATX(__ieee754_exp,SUFF)) + (y * __m81_u(__CONCATX(__ieee754_log,SUFF)) (-x))); + if (sizeof (float_type) == sizeof (float)) + { + long i = (long) y; + if (i & 1) + z = -z; + } + else + { + /* If the conversion to long long was inexact assume that y + is an even integer. */ + if ((float_type) i == y && i & 1) + z = -z; + } + } + else + z = (x - x) / (x - x); + } + else + z = (__m81_u(__CONCATX(__ieee754_exp,SUFF)) + (y * __m81_u(__CONCATX(__ieee754_log,SUFF)) (x))); + return z; +} diff --git a/sysdeps/m68k/fpu/e_powf.c b/sysdeps/m68k/fpu/e_powf.c index 978d32eacc..379014355a 100644 --- a/sysdeps/m68k/fpu/e_powf.c +++ b/sysdeps/m68k/fpu/e_powf.c @@ -1,2 +1,3 @@ -#define FUNC __ieee754_powf -#include <e_fmodf.c> +#define SUFF f +#define float_type float +#include <e_pow.c> diff --git a/sysdeps/m68k/fpu/e_powl.c b/sysdeps/m68k/fpu/e_powl.c index 0feec54fec..f71fa34a26 100644 --- a/sysdeps/m68k/fpu/e_powl.c +++ b/sysdeps/m68k/fpu/e_powl.c @@ -1,2 +1,3 @@ -#define FUNC __ieee754_powl -#include <e_fmodl.c> +#define SUFF l +#define float_type long double +#include <e_pow.c> diff --git a/sysdeps/m68k/fpu/s_logb.c b/sysdeps/m68k/fpu/s_exp2.c index 9903b3089a..389528092a 100644 --- a/sysdeps/m68k/fpu/s_logb.c +++ b/sysdeps/m68k/fpu/s_exp2.c @@ -1,2 +1,2 @@ -#define FUNC logb +#define FUNC exp2 #include <s_atan.c> diff --git a/sysdeps/m68k/fpu/s_logbf.c b/sysdeps/m68k/fpu/s_exp2f.c index 6dcfee5807..20ac916d1a 100644 --- a/sysdeps/m68k/fpu/s_logbf.c +++ b/sysdeps/m68k/fpu/s_exp2f.c @@ -1,2 +1,2 @@ -#define FUNC logbf +#define FUNC exp2f #include <s_atanf.c> diff --git a/sysdeps/m68k/fpu/s_logbl.c b/sysdeps/m68k/fpu/s_exp2l.c index 7d06ac13c4..19121b929d 100644 --- a/sysdeps/m68k/fpu/s_logbl.c +++ b/sysdeps/m68k/fpu/s_exp2l.c @@ -1,2 +1,2 @@ -#define FUNC logbl +#define FUNC exp2l #include <s_atanl.c> diff --git a/sysdeps/m68k/fpu/s_log2.c b/sysdeps/m68k/fpu/s_log2.c new file mode 100644 index 0000000000..26e26bae95 --- /dev/null +++ b/sysdeps/m68k/fpu/s_log2.c @@ -0,0 +1,2 @@ +#define FUNC log2 +#include <s_atan.c> diff --git a/sysdeps/m68k/fpu/s_log2f.c b/sysdeps/m68k/fpu/s_log2f.c new file mode 100644 index 0000000000..68494322b8 --- /dev/null +++ b/sysdeps/m68k/fpu/s_log2f.c @@ -0,0 +1,2 @@ +#define FUNC log2f +#include <s_atanf.c> diff --git a/sysdeps/m68k/fpu/s_log2l.c b/sysdeps/m68k/fpu/s_log2l.c new file mode 100644 index 0000000000..c4eb06332b --- /dev/null +++ b/sysdeps/m68k/fpu/s_log2l.c @@ -0,0 +1,2 @@ +#define FUNC log2l +#include <s_atanl.c> diff --git a/sysdeps/m68k/huge_val.h b/sysdeps/m68k/huge_val.h index c2139580e8..79e87dc2db 100644 --- a/sysdeps/m68k/huge_val.h +++ b/sysdeps/m68k/huge_val.h @@ -23,16 +23,10 @@ #include <features.h> #include <sys/cdefs.h> -#include <endian.h> /* IEEE positive infinity (-HUGE_VAL is negative infinity). */ -#if __BYTE_ORDER == __BIG_ENDIAN #define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } -#endif #define __huge_val_t union { unsigned char __c[8]; double __d; } #ifdef __GNUC__ @@ -48,12 +42,7 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; #ifdef __USE_ISOC9X -#if __BYTE_ORDER == __BIG_ENDIAN #define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 } -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f } -#endif #define __huge_valf_t union { unsigned char __c[4]; float __f; } #ifdef __GNUC__ @@ -65,12 +54,7 @@ static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes }; #endif /* GCC. */ -#if __BYTE_ORDER == __BIG_ENDIAN #define __HUGE_VALL_bytes { 0x7f, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 } -#endif #define __huge_vall_t union { unsigned char __c[12]; long double __ld; } #ifdef __GNUC__ diff --git a/sysdeps/unix/sysv/linux/iovec.h b/sysdeps/unix/sysv/linux/iovec.h index 6e5e01d9b3..430edfc029 100644 --- a/sysdeps/unix/sysv/linux/iovec.h +++ b/sysdeps/unix/sysv/linux/iovec.h @@ -1,3 +1,47 @@ -/* The Linux kernel header defines `struct iovec' for us. */ +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. -#include <linux/uio.h> + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _IOVEC_H + +#define _IOVEC_H 1 + +#include <sys/types.h> + + +/* We should normally use the Linux kernel header file to define this + type and macros but this calls for trouble because of the header + includes other kernel headers. */ + +/* Size of object which can be written atomically. + + This macro has different values in different kernel versions. The + latest versions of ther kernel use 1024 and this is good choice. Since + the C library implementation of readv/writev is able to emulate the + functionality even if the currently running kernel does not support + this large value the readv/writev call will not fail because of this. */ +#define UIO_MAXIOV 1024 + + +/* Structure for scatter/gather I/O. */ +struct iovec + { + void *iov_base; /* Pointer to data. */ + size_t iov_len; /* Length of data. */ + }; + +#endif /* iovec.h */ diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c index cd64d15cbe..6a0b7d683d 100644 --- a/sysdeps/unix/sysv/linux/msgctl.c +++ b/sysdeps/unix/sysv/linux/msgctl.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/msg.h> diff --git a/sysdeps/unix/sysv/linux/msgget.c b/sysdeps/unix/sysv/linux/msgget.c index b1c29d6780..c073614ef1 100644 --- a/sysdeps/unix/sysv/linux/msgget.c +++ b/sysdeps/unix/sysv/linux/msgget.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/msg.h> #include <stdlib.h> /* for definition of NULL */ diff --git a/sysdeps/unix/sysv/linux/msgrcv.c b/sysdeps/unix/sysv/linux/msgrcv.c index 21c6b75cac..40c3c95728 100644 --- a/sysdeps/unix/sysv/linux/msgrcv.c +++ b/sysdeps/unix/sysv/linux/msgrcv.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/msg.h> @@ -24,7 +24,7 @@ msgrcv (msqid, msgp, msgsz, msgtyp, msgflg) int msqid; void *msgp; size_t msgsz; - long msgtyp; + long int msgtyp; int msgflg; { /* The problem here is that Linux' calling convention only allows up to diff --git a/sysdeps/unix/sysv/linux/msgsnd.c b/sysdeps/unix/sysv/linux/msgsnd.c index 6d2d3ef26b..739323495c 100644 --- a/sysdeps/unix/sysv/linux/msgsnd.c +++ b/sysdeps/unix/sysv/linux/msgsnd.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/msg.h> diff --git a/sysdeps/unix/sysv/linux/netinet/ip.h b/sysdeps/unix/sysv/linux/netinet/ip.h index 89c2b1d296..6d50bb41d1 100644 --- a/sysdeps/unix/sysv/linux/netinet/ip.h +++ b/sysdeps/unix/sysv/linux/netinet/ip.h @@ -163,11 +163,11 @@ struct ip_timestamp u_int8_t ipt_len; /* size of structure (variable) */ u_int8_t ipt_ptr; /* index of current entry */ #if __BYTE_ORDER == __LITTLE_ENDIAN - u_int8_t ipt_flg:4, /* flags, see below */ + u_int8_t ipt_flg:4; /* flags, see below */ u_int8_t ipt_oflw:4; /* overflow counter */ #endif #if __BYTE_ORDER == __BIG_ENDIAN - u_int8_t ipt_oflw:4, /* overflow counter */ + u_int8_t ipt_oflw:4; /* overflow counter */ u_int8_t ipt_flg:4; /* flags, see below */ #endif u_int32_t data[9]; diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c index dd0e7b9484..3d95e08d98 100644 --- a/sysdeps/unix/sysv/linux/semctl.c +++ b/sysdeps/unix/sysv/linux/semctl.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/sem.h> diff --git a/sysdeps/unix/sysv/linux/semget.c b/sysdeps/unix/sysv/linux/semget.c index 6320e4720e..b9f41f5c7c 100644 --- a/sysdeps/unix/sysv/linux/semget.c +++ b/sysdeps/unix/sysv/linux/semget.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/sem.h> #include <stdlib.h> /* for definition of NULL */ diff --git a/sysdeps/unix/sysv/linux/semop.c b/sysdeps/unix/sysv/linux/semop.c index 57f074e90e..563aaae414 100644 --- a/sysdeps/unix/sysv/linux/semop.c +++ b/sysdeps/unix/sysv/linux/semop.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/sem.h> diff --git a/sysdeps/unix/sysv/linux/shmat.c b/sysdeps/unix/sysv/linux/shmat.c index b74b8a56ec..2ac07f21d0 100644 --- a/sysdeps/unix/sysv/linux/shmat.c +++ b/sysdeps/unix/sysv/linux/shmat.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/shm.h> @@ -23,15 +23,15 @@ Boston, MA 02111-1307, USA. */ segment of the calling process. SHMADDR and SHMFLG determine how and where the segment is attached. */ -char * +void * shmat (shmid, shmaddr, shmflg) int shmid; - char *shmaddr; + const void *shmaddr; int shmflg; { int retval; unsigned long raddr; retval = __ipc (IPCOP_shmat, shmid, shmflg, (int) &raddr, shmaddr); - return retval < 0 ? (char *) retval : (char *) raddr; + return retval < 0 ? (void *) retval : (void *) raddr; } diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c index 81192a8996..f25d4194b5 100644 --- a/sysdeps/unix/sysv/linux/shmctl.c +++ b/sysdeps/unix/sysv/linux/shmctl.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/shm.h> diff --git a/sysdeps/unix/sysv/linux/shmdt.c b/sysdeps/unix/sysv/linux/shmdt.c index 1e5bbe13b1..dcda701e45 100644 --- a/sysdeps/unix/sysv/linux/shmdt.c +++ b/sysdeps/unix/sysv/linux/shmdt.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/shm.h> @@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA. */ int shmdt (shmaddr) - char *shmaddr; + const void *shmaddr; { return __ipc (IPCOP_shmdt, 0, 0, 0, shmaddr); } diff --git a/sysdeps/unix/sysv/linux/shmget.c b/sysdeps/unix/sysv/linux/shmget.c index f0b2b6531d..8754191862 100644 --- a/sysdeps/unix/sysv/linux/shmget.c +++ b/sysdeps/unix/sysv/linux/shmget.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. +/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C 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 -Library General Public License for more details. + The GNU C 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sys/shm.h> #include <stdlib.h> /* for definition of NULL */ diff --git a/sysdeps/unix/sysv/linux/sys/kd.h b/sysdeps/unix/sysv/linux/sys/kd.h index 33b873f49c..0ff5220014 100644 --- a/sysdeps/unix/sysv/linux/sys/kd.h +++ b/sysdeps/unix/sysv/linux/sys/kd.h @@ -1 +1,27 @@ +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _SYS_KD_H +#define _SYS_KD_H 1 + +/* Make sure the <linux/types.h> header is not loaded. */ +#define _LINUX_TYPES_H 1 + #include <linux/kd.h> + +#endif /* sys/kd.h */ diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h index 9da57284f3..2a1e7c664d 100644 --- a/sysvipc/sys/shm.h +++ b/sysvipc/sys/shm.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. @@ -38,7 +38,7 @@ __BEGIN_DECLS /* The following System V style IPC functions implement a shared memory - facility. The definition is found in XPG2. */ + facility. The definition is found in XPG4.2. */ /* Shared memory control operation. */ extern int shmctl __P ((int __shmid, int __cmd, struct shmid_ds *__buf)); @@ -47,10 +47,10 @@ extern int shmctl __P ((int __shmid, int __cmd, struct shmid_ds *__buf)); extern int shmget __P ((key_t __key, int __size, int __shmflg)); /* Attach shared memory segment. */ -extern char *shmat __P ((int __shmid, char *__shmaddr, int __shmflg)); +extern void *shmat __P ((int __shmid, __const void *__shmaddr, int __shmflg)); /* Detach shared memory segment. */ -extern int shmdt __P ((char *__shmaddr)); +extern int shmdt __P ((__const void *__shmaddr)); __END_DECLS |