summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2721
-rw-r--r--INSTALL216
-rw-r--r--Makefile8
-rw-r--r--Makerules12
-rw-r--r--NEWS15
-rw-r--r--NOTES223
-rw-r--r--README4
-rw-r--r--aclocal.m434
-rw-r--r--argp/Makefile4
-rw-r--r--catgets/Makefile4
-rw-r--r--config.h.in6
-rw-r--r--config.make.in2
-rwxr-xr-xconfigure140
-rw-r--r--configure.in97
-rw-r--r--conform/Makefile19
-rw-r--r--conform/conformtest.pl253
-rw-r--r--conform/data/aio.h-data6
-rw-r--r--conform/data/arpa/inet.h-data2
-rw-r--r--conform/data/assert.h-data4
-rw-r--r--conform/data/complex.h-data8
-rw-r--r--conform/data/cpio.h-data2
-rw-r--r--conform/data/ctype.h-data2
-rw-r--r--conform/data/dirent.h-data2
-rw-r--r--conform/data/dlfcn.h-data2
-rw-r--r--conform/data/errno.h-data11
-rw-r--r--conform/data/fcntl.h-data11
-rw-r--r--conform/data/float.h-data19
-rw-r--r--conform/data/fmtmsg.h-data2
-rw-r--r--conform/data/fnmatch.h-data4
-rw-r--r--conform/data/ftw.h-data2
-rw-r--r--conform/data/glob.h-data6
-rw-r--r--conform/data/grp.h-data8
-rw-r--r--conform/data/iconv.h-data2
-rw-r--r--conform/data/inttypes.h-data2
-rw-r--r--conform/data/langinfo.h-data2
-rw-r--r--conform/data/libgen.h-data2
-rw-r--r--conform/data/limits.h-data55
-rw-r--r--conform/data/locale.h-data2
-rw-r--r--conform/data/math.h-data41
-rw-r--r--conform/data/monetary.h-data2
-rw-r--r--conform/data/mqueue.h-data2
-rw-r--r--conform/data/ndbm.h-data2
-rw-r--r--conform/data/net/if.h-data2
-rw-r--r--conform/data/netdb.h-data2
-rw-r--r--conform/data/netinet/in.h-data2
-rw-r--r--conform/data/nl_types.h-data2
-rw-r--r--conform/data/poll.h-data2
-rw-r--r--conform/data/pthread.h-data28
-rw-r--r--conform/data/pwd.h-data9
-rw-r--r--conform/data/regex.h-data4
-rw-r--r--conform/data/sched.h-data2
-rw-r--r--conform/data/search.h-data2
-rw-r--r--conform/data/semaphore.h-data4
-rw-r--r--conform/data/setjmp.h-data6
-rw-r--r--conform/data/signal.h-data78
-rw-r--r--conform/data/spawn.h-data2
-rw-r--r--conform/data/stdarg.h-data3
-rw-r--r--conform/data/stdio.h-data56
-rw-r--r--conform/data/stdlib.h-data81
-rw-r--r--conform/data/string.h-data6
-rw-r--r--conform/data/strings.h-data18
-rw-r--r--conform/data/stropts.h-data2
-rw-r--r--conform/data/sys/ipc.h-data2
-rw-r--r--conform/data/sys/mman.h-data6
-rw-r--r--conform/data/sys/msg.h-data2
-rw-r--r--conform/data/sys/resource.h-data2
-rw-r--r--conform/data/sys/select.h-data2
-rw-r--r--conform/data/sys/sem.h-data2
-rw-r--r--conform/data/sys/shm.h-data2
-rw-r--r--conform/data/sys/socket.h-data2
-rw-r--r--conform/data/sys/stat.h-data40
-rw-r--r--conform/data/sys/statvfs.h-data2
-rw-r--r--conform/data/sys/time.h-data2
-rw-r--r--conform/data/sys/timeb.h-data2
-rw-r--r--conform/data/sys/times.h-data2
-rw-r--r--conform/data/sys/types.h-data10
-rw-r--r--conform/data/sys/uio.h-data2
-rw-r--r--conform/data/sys/un.h-data2
-rw-r--r--conform/data/sys/utsname.h-data2
-rw-r--r--conform/data/sys/wait.h-data15
-rw-r--r--conform/data/syslog.h-data2
-rw-r--r--conform/data/tar.h-data2
-rw-r--r--conform/data/termios.h-data8
-rw-r--r--conform/data/time.h-data84
-rw-r--r--conform/data/uchar.h-data12
-rw-r--r--conform/data/ucontext.h-data2
-rw-r--r--conform/data/ulimit.h-data2
-rw-r--r--conform/data/unistd.h-data25
-rw-r--r--conform/data/utime.h-data6
-rw-r--r--conform/data/utmpx.h-data2
-rw-r--r--conform/data/varargs.h-data2
-rw-r--r--conform/data/wchar.h-data70
-rw-r--r--conform/data/wctype.h-data10
-rw-r--r--conform/data/wordexp.h-data6
-rw-r--r--conform/run-conformtest.sh31
-rw-r--r--crypt/Makefile5
-rw-r--r--csu/Makefile2
-rw-r--r--debug/Makefile2
-rw-r--r--debug/backtracesyms.c81
-rw-r--r--debug/backtracesymsfd.c88
-rw-r--r--debug/segfault.c2
-rw-r--r--dirent/Makefile4
-rw-r--r--dlfcn/Makefile6
-rw-r--r--elf/Makefile96
-rw-r--r--elf/cache.c4
-rw-r--r--elf/dl-cache.c2
-rw-r--r--elf/dl-minimal.c2
-rw-r--r--elf/dl-misc.c2
-rw-r--r--elf/dl-sysdep.c2
-rw-r--r--elf/dl-version.c2
-rw-r--r--elf/rtld.c7
-rw-r--r--elf/sotruss-lib.c58
-rw-r--r--elf/tst-auditmod1.c18
-rw-r--r--elf/tst-auditmod3b.c18
-rw-r--r--elf/tst-auditmod4b.c18
-rw-r--r--elf/tst-auditmod5b.c18
-rw-r--r--elf/tst-auditmod6b.c18
-rw-r--r--elf/tst-auditmod6c.c18
-rw-r--r--elf/tst-auditmod7b.c18
-rw-r--r--gmon/Makefile3
-rw-r--r--grp/Makefile11
-rw-r--r--hesiod/Makefile10
-rw-r--r--hurd/Makefile7
-rw-r--r--hurd/hurdsock.c2
-rw-r--r--hurd/lookup-retry.c2
-rw-r--r--iconv/Makefile4
-rw-r--r--iconvdata/Makefile79
-rw-r--r--include/aio.h2
-rw-r--r--include/arpa/inet.h2
-rw-r--r--include/assert.h4
-rw-r--r--include/bits/dlfcn.h2
-rw-r--r--include/ctype.h6
-rw-r--r--include/dirent.h6
-rw-r--r--include/dlfcn.h2
-rw-r--r--include/fcntl.h2
-rw-r--r--include/fnmatch.h2
-rw-r--r--include/glob.h2
-rw-r--r--include/grp.h2
-rw-r--r--include/langinfo.h2
-rw-r--r--include/libio.h2
-rw-r--r--include/link.h5
-rw-r--r--include/locale.h2
-rw-r--r--include/math.h2
-rw-r--r--include/monetary.h2
-rw-r--r--include/net/if.h2
-rw-r--r--include/netdb.h2
-rw-r--r--include/netinet/in.h2
-rw-r--r--include/pthread.h2
-rw-r--r--include/pwd.h2
-rw-r--r--include/regex.h2
-rw-r--r--include/sched.h2
-rw-r--r--include/search.h2
-rw-r--r--include/setjmp.h4
-rw-r--r--include/signal.h2
-rw-r--r--include/stdio.h8
-rw-r--r--include/stdlib.h10
-rw-r--r--include/string.h4
-rw-r--r--include/stropts.h1
-rw-r--r--include/sys/cdefs.h8
-rw-r--r--include/sys/mman.h2
-rw-r--r--include/sys/msg.h2
-rw-r--r--include/sys/poll.h2
-rw-r--r--include/sys/resource.h2
-rw-r--r--include/sys/select.h2
-rw-r--r--include/sys/socket.h2
-rw-r--r--include/sys/stat.h2
-rw-r--r--include/sys/statvfs.h2
-rw-r--r--include/sys/time.h2
-rw-r--r--include/sys/times.h2
-rw-r--r--include/sys/uio.h2
-rw-r--r--include/sys/utsname.h2
-rw-r--r--include/sys/wait.h2
-rw-r--r--include/termios.h2
-rw-r--r--include/time.h6
-rw-r--r--include/uchar.h1
-rw-r--r--include/ulimit.h2
-rw-r--r--include/unistd.h2
-rw-r--r--include/utime.h2
-rw-r--r--include/wchar.h2
-rw-r--r--include/wctype.h4
-rw-r--r--include/wordexp.h2
-rw-r--r--inet/Makefile9
-rw-r--r--intl/Makefile11
-rw-r--r--intl/plural.c539
-rw-r--r--intl/plural.y5
-rw-r--r--io/Makefile2
-rw-r--r--io/fcntl.h6
-rw-r--r--io/sys/stat.h2
-rw-r--r--libidn/ChangeLog4
-rw-r--r--libidn/Makefile4
-rw-r--r--libio/Makefile5
-rw-r--r--libio/bits/stdio-ldbl.h7
-rw-r--r--libio/stdio.h9
-rw-r--r--locale/Makefile15
-rw-r--r--locale/programs/charmap-kw.gperf4
-rw-r--r--locale/programs/charmap-kw.h45
-rw-r--r--locale/programs/locfile-kw.gperf4
-rw-r--r--locale/programs/locfile-kw.h9
-rw-r--r--localedata/ChangeLog9
-rw-r--r--localedata/Makefile16
-rw-r--r--localedata/locales/br_FR@euro2
-rw-r--r--localedata/locales/ca_ES@euro2
-rw-r--r--localedata/locales/cs_CZ2
-rw-r--r--localedata/locales/de_BE@euro2
-rw-r--r--localedata/locales/de_DE2
-rw-r--r--localedata/locales/de_DE@euro2
-rw-r--r--localedata/locales/de_LU@euro2
-rw-r--r--localedata/locales/el_GR@euro2
-rw-r--r--localedata/locales/en_AG2
-rw-r--r--localedata/locales/en_IE@euro2
-rw-r--r--localedata/locales/en_US2
-rw-r--r--localedata/locales/es_CR2
-rw-r--r--localedata/locales/es_ES@euro2
-rw-r--r--localedata/locales/es_NI2
-rw-r--r--localedata/locales/es_PR2
-rw-r--r--localedata/locales/eu_ES@euro2
-rw-r--r--localedata/locales/fi_FI@euro2
-rw-r--r--localedata/locales/fr_BE@euro2
-rw-r--r--localedata/locales/fr_FR@euro2
-rw-r--r--localedata/locales/fr_LU@euro2
-rw-r--r--localedata/locales/fy_NL2
-rw-r--r--localedata/locales/ga_IE@euro2
-rw-r--r--localedata/locales/gl_ES@euro2
-rw-r--r--localedata/locales/it_IT@euro2
-rw-r--r--localedata/locales/nl_AW2
-rw-r--r--localedata/locales/nl_BE@euro2
-rw-r--r--localedata/locales/nl_NL@euro2
-rw-r--r--localedata/locales/pt_PT@euro2
-rw-r--r--localedata/locales/sv_FI@euro2
-rw-r--r--localedata/locales/tr_CY2
-rw-r--r--localedata/locales/wa_BE@euro2
-rw-r--r--login/Makefile10
-rw-r--r--mach/Makefile11
-rw-r--r--malloc/Makefile11
-rw-r--r--malloc/malloc.c2
-rw-r--r--malloc/mallocbug.c15
-rw-r--r--malloc/mtrace.c2
-rw-r--r--manual/Makefile34
-rw-r--r--manual/arith.texi24
-rw-r--r--manual/charset.texi54
-rw-r--r--manual/conf.texi33
-rw-r--r--manual/contrib.texi10
-rw-r--r--manual/creature.texi6
-rw-r--r--manual/crypt.texi4
-rw-r--r--manual/ctype.texi6
-rw-r--r--manual/errno.texi45
-rw-r--r--manual/examples/README8
-rw-r--r--manual/examples/add.c17
-rw-r--r--manual/examples/argp-ex1.c17
-rw-r--r--manual/examples/argp-ex2.c17
-rw-r--r--manual/examples/argp-ex3.c17
-rw-r--r--manual/examples/argp-ex4.c17
-rw-r--r--manual/examples/atexit.c19
-rw-r--r--manual/examples/db.c17
-rw-r--r--manual/examples/dir.c17
-rw-r--r--manual/examples/dir2.c17
-rw-r--r--manual/examples/execinfo.c17
-rw-r--r--manual/examples/filecli.c17
-rw-r--r--manual/examples/filesrv.c17
-rw-r--r--manual/examples/fmtmsgexpl.c17
-rw-r--r--manual/examples/genpass.c31
-rw-r--r--manual/examples/inetcli.c19
-rw-r--r--manual/examples/inetsrv.c17
-rw-r--r--manual/examples/isockad.c21
-rw-r--r--manual/examples/longopt.c17
-rw-r--r--manual/examples/memopen.c17
-rw-r--r--manual/examples/memstrm.c17
-rw-r--r--manual/examples/mkfsock.c17
-rw-r--r--manual/examples/mkisock.c19
-rw-r--r--manual/examples/mygetpass.c21
-rw-r--r--manual/examples/pipe.c17
-rw-r--r--manual/examples/popen.c17
-rw-r--r--manual/examples/rprintf.c17
-rw-r--r--manual/examples/search.c23
-rw-r--r--manual/examples/select.c17
-rw-r--r--manual/examples/setjmp.c21
-rw-r--r--manual/examples/sigh1.c21
-rw-r--r--manual/examples/sigusr.c21
-rw-r--r--manual/examples/stpcpy.c17
-rw-r--r--manual/examples/strdupa.c17
-rw-r--r--manual/examples/strftim.c17
-rw-r--r--manual/examples/strncat.c17
-rw-r--r--manual/examples/subopt.c17
-rw-r--r--manual/examples/swapcontext.c17
-rw-r--r--manual/examples/termios.c21
-rw-r--r--manual/examples/testopt.c17
-rw-r--r--manual/examples/testpass.c21
-rw-r--r--manual/examples/timeval_subtract.c45
-rw-r--r--manual/filesys.texi72
-rw-r--r--manual/header.texi2
-rw-r--r--manual/install.texi167
-rw-r--r--manual/intro.texi47
-rw-r--r--manual/io.texi30
-rw-r--r--manual/job.texi6
-rw-r--r--manual/lang.texi100
-rw-r--r--manual/libc.texinfo46
-rw-r--r--manual/llio.texi83
-rw-r--r--manual/locale.texi12
-rw-r--r--manual/macros.texi50
-rw-r--r--manual/maint.texi18
-rw-r--r--manual/math.texi18
-rw-r--r--manual/memory.texi38
-rw-r--r--manual/message.texi27
-rw-r--r--manual/nss.texi12
-rw-r--r--manual/pattern.texi8
-rw-r--r--manual/pipe.texi4
-rw-r--r--manual/process.texi24
-rw-r--r--manual/resource.texi19
-rw-r--r--manual/search.texi8
-rw-r--r--manual/setjmp.texi8
-rw-r--r--manual/signal.texi38
-rw-r--r--manual/socket.texi6
-rw-r--r--manual/startup.texi26
-rw-r--r--manual/stdio.texi72
-rw-r--r--manual/string.texi22
-rw-r--r--manual/sysinfo.texi20
-rw-r--r--manual/syslog.texi12
-rw-r--r--manual/terminal.texi57
-rw-r--r--manual/time.texi73
-rw-r--r--manual/users.texi40
-rw-r--r--math/Makefile8
-rw-r--r--math/e_exp2l.c44
-rwxr-xr-xmath/gen-libm-test.pl4
-rw-r--r--math/libm-test.inc1756
-rw-r--r--math/s_cacosh.c12
-rw-r--r--math/s_cacoshf.c14
-rw-r--r--math/s_cacoshl.c14
-rw-r--r--math/s_casinh.c7
-rw-r--r--math/s_casinhf.c7
-rw-r--r--math/s_casinhl.c7
-rw-r--r--math/s_cexp.c31
-rw-r--r--math/s_cexpf.c31
-rw-r--r--math/s_cexpl.c31
-rw-r--r--math/s_clog.c27
-rw-r--r--math/s_clog10.c28
-rw-r--r--math/s_clog10f.c28
-rw-r--r--math/s_clog10l.c28
-rw-r--r--math/s_clogf.c28
-rw-r--r--math/s_clogl.c27
-rw-r--r--math/s_csqrt.c26
-rw-r--r--math/s_csqrtf.c26
-rw-r--r--math/s_csqrtl.c26
-rw-r--r--math/w_acoshl.c2
-rw-r--r--math/w_acosl.c2
-rw-r--r--math/w_asinl.c2
-rw-r--r--math/w_atan2l.c4
-rw-r--r--math/w_atanhl.c8
-rw-r--r--math/w_coshl.c2
-rw-r--r--math/w_exp10l.c4
-rw-r--r--math/w_exp2.c14
-rw-r--r--math/w_exp2f.c14
-rw-r--r--math/w_exp2l.c15
-rw-r--r--math/w_fmodl.c4
-rw-r--r--math/w_hypotl.c2
-rw-r--r--math/w_j0.c4
-rw-r--r--math/w_j0f.c4
-rw-r--r--math/w_j0l.c12
-rw-r--r--math/w_j1.c4
-rw-r--r--math/w_j1f.c4
-rw-r--r--math/w_j1l.c12
-rw-r--r--math/w_jn.c4
-rw-r--r--math/w_jnf.c4
-rw-r--r--math/w_jnl.c15
-rw-r--r--math/w_lgammal.c8
-rw-r--r--math/w_log10l.c4
-rw-r--r--math/w_log2l.c4
-rw-r--r--math/w_logl.c4
-rw-r--r--math/w_powl.c16
-rw-r--r--math/w_remainderl.c4
-rw-r--r--math/w_scalbl.c6
-rw-r--r--math/w_sinhl.c2
-rw-r--r--math/w_sqrtl.c2
-rw-r--r--math/w_tgammal.c6
-rw-r--r--misc/Makefile2
-rw-r--r--nis/Makefile7
-rw-r--r--nptl/ChangeLog122
-rw-r--r--nptl/Makefile2
-rw-r--r--nptl/pt-crti.S5
-rw-r--r--nptl/sysdeps/pthread/bits/libc-lock.h404
-rw-r--r--nptl/sysdeps/pthread/bits/libc-lockP.h434
-rw-r--r--nptl/sysdeps/pthread/configure40
-rw-r--r--nptl/sysdeps/pthread/configure.in8
-rw-r--r--nptl/sysdeps/pthread/pthread.h2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h10
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S9
-rw-r--r--nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h11
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h11
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sem_timedwait.c3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h12
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S10
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S9
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h11
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c11
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h11
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h2
-rw-r--r--nptl/sysdeps/x86_64/pthreaddef.h2
-rw-r--r--nptl/tst-cond16.c10
-rw-r--r--nptl/tst-cond18.c10
-rw-r--r--nptl/tst-sem13.c23
-rw-r--r--nptl/unwind.c2
-rw-r--r--nptl_db/ChangeLog4
-rw-r--r--nptl_db/Makefile4
-rw-r--r--nscd/Makefile11
-rw-r--r--nscd/nscd_getgr_r.c2
-rw-r--r--nscd/nscd_getpw_r.c2
-rw-r--r--nscd/nscd_getserv_r.c2
-rw-r--r--nss/Makefile25
-rw-r--r--nss/databases.def3
-rw-r--r--nss/getnssent.c4
-rw-r--r--nss/nss_db/db-init.c4
-rw-r--r--po/Makefile6
-rw-r--r--po/zh_TW.po8421
-rw-r--r--posix/Makefile20
-rw-r--r--posix/bug-regex33.c119
-rw-r--r--posix/confstr.c223
-rw-r--r--posix/getopt_init.c2
-rw-r--r--posix/regex_internal.c2
-rw-r--r--posix/spawn.h1
-rw-r--r--posix/sys/wait.h8
-rw-r--r--posix/tar.h9
-rw-r--r--posix/unistd.h9
-rw-r--r--posix/wordexp.c2
-rw-r--r--pwd/Makefile5
-rw-r--r--resolv/Makefile6
-rw-r--r--resolv/gai_misc.c4
-rw-r--r--resolv/nss_dns/dns-host.c8
-rw-r--r--resolv/res_query.c10
-rw-r--r--rt/Makefile7
-rw-r--r--rt/aio.h7
-rw-r--r--rt/tst-aio.c3
-rw-r--r--rt/tst-aio64.c3
-rw-r--r--rt/tst-aio7.c3
-rw-r--r--rt/tst-cpuclock2.c2
-rw-r--r--signal/Makefile4
-rw-r--r--socket/Makefile4
-rw-r--r--soft-fp/Makefile8
-rw-r--r--soft-fp/double.h6
-rw-r--r--soft-fp/extended.h6
-rw-r--r--soft-fp/quad.h8
-rw-r--r--soft-fp/single.h4
-rw-r--r--soft-fp/soft-fp.h12
-rw-r--r--stdio-common/Makefile14
-rw-r--r--stdio-common/_itoa.c2
-rw-r--r--stdio-common/_itowa.c4
-rw-r--r--stdio-common/_itowa.h9
-rw-r--r--stdio-common/bug-vfprintf-nargs.c77
-rw-r--r--stdio-common/printf_fphex.c4
-rw-r--r--stdio-common/tst-fmemopen.c2
-rw-r--r--stdio-common/tst-fphex-wide.c (renamed from sysdeps/x86_64/fpu/s_sincosl.S)47
-rw-r--r--stdio-common/tst-fphex.c57
-rw-r--r--stdio-common/tst-long-dbl-fphex.c53
-rw-r--r--stdio-common/vfprintf.c63
-rw-r--r--stdlib/Makefile3
-rw-r--r--stdlib/fmtmsg.c4
-rw-r--r--stdlib/tst-strtod.c5
-rw-r--r--string/Makefile4
-rw-r--r--string/_strerror.c2
-rw-r--r--sunrpc/Makefile19
-rw-r--r--sunrpc/rpc_cout.c2
-rw-r--r--sunrpc/rpc_main.c46
-rw-r--r--sunrpc/rpc_svcout.c10
-rw-r--r--sunrpc/rpcgen.c2
-rw-r--r--sysdeps/generic/_itoa.h (renamed from stdio-common/_itoa.h)24
-rw-r--r--sysdeps/generic/dl-osinfo.h8
-rw-r--r--sysdeps/generic/elf/backtracesyms.c122
-rw-r--r--sysdeps/generic/elf/backtracesymsfd.c125
-rw-r--r--sysdeps/generic/ifunc-sel.h (renamed from sysdeps/generic/elf/ifunc-sel.h)0
-rw-r--r--sysdeps/generic/ldconfig.h1
-rw-r--r--sysdeps/generic/ldsodefs.h11
-rw-r--r--sysdeps/generic/math_private.h (renamed from math/math_private.h)239
-rw-r--r--sysdeps/gnu/errlist-compat.awk5
-rw-r--r--sysdeps/gnu/errlist.c24
-rw-r--r--sysdeps/i386/Versions6
-rw-r--r--sysdeps/i386/configure541
-rw-r--r--sysdeps/i386/configure.in85
-rw-r--r--sysdeps/i386/crti.S5
-rw-r--r--sysdeps/i386/crtn.S5
-rw-r--r--sysdeps/i386/elf/Versions6
-rw-r--r--sysdeps/i386/elf/configure.in36
-rw-r--r--sysdeps/i386/fpu/branred.c1
-rw-r--r--sysdeps/i386/fpu/dosincos.c1
-rw-r--r--sysdeps/i386/fpu/e_pow.S56
-rw-r--r--sysdeps/i386/fpu/e_powf.S56
-rw-r--r--sysdeps/i386/fpu/e_powl.S97
-rw-r--r--sysdeps/i386/fpu/e_rem_pio2f.c3
-rw-r--r--sysdeps/i386/fpu/e_rem_pio2l.c3
-rw-r--r--sysdeps/i386/fpu/feholdexcpt.c19
-rw-r--r--sysdeps/i386/fpu/fenv_private.h304
-rw-r--r--sysdeps/i386/fpu/k_rem_pio2.c3
-rw-r--r--sysdeps/i386/fpu/k_rem_pio2f.c3
-rw-r--r--sysdeps/i386/fpu/libm-test-ulps1463
-rw-r--r--sysdeps/i386/fpu/math_private.h17
-rw-r--r--sysdeps/i386/fpu/mpa.c1
-rw-r--r--sysdeps/i386/fpu/mptan.c1
-rw-r--r--sysdeps/i386/fpu/s_cexp.S253
-rw-r--r--sysdeps/i386/fpu/s_cexpf.S257
-rw-r--r--sysdeps/i386/fpu/s_cexpl.S256
-rw-r--r--sysdeps/i386/fpu/s_cos.S54
-rw-r--r--sysdeps/i386/fpu/s_cosf.S54
-rw-r--r--sysdeps/i386/fpu/s_cosl.S54
-rw-r--r--sysdeps/i386/fpu/s_fpclassifyl.c2
-rw-r--r--sysdeps/i386/fpu/s_isinfl.c4
-rw-r--r--sysdeps/i386/fpu/s_isnanl.c4
-rw-r--r--sysdeps/i386/fpu/s_nextafterl.c2
-rw-r--r--sysdeps/i386/fpu/s_nexttoward.c2
-rw-r--r--sysdeps/i386/fpu/s_nexttowardf.c2
-rw-r--r--sysdeps/i386/fpu/s_sin.S54
-rw-r--r--sysdeps/i386/fpu/s_sincos.S64
-rw-r--r--sysdeps/i386/fpu/s_sincosf.S64
-rw-r--r--sysdeps/i386/fpu/s_sincosl.S64
-rw-r--r--sysdeps/i386/fpu/s_sinf.S54
-rw-r--r--sysdeps/i386/fpu/s_sinl.S54
-rw-r--r--sysdeps/i386/fpu/s_tan.S55
-rw-r--r--sysdeps/i386/fpu/s_tanf.S55
-rw-r--r--sysdeps/i386/fpu/s_tanl.S55
-rw-r--r--sysdeps/i386/fpu/sincos32.c1
-rw-r--r--sysdeps/i386/i486/bits/atomic.h36
-rw-r--r--sysdeps/i386/i686/hp-timing.h2
-rw-r--r--sysdeps/i386/i686/multiarch/strcasecmp_l-c.c2
-rw-r--r--sysdeps/i386/i686/multiarch/strcmp.S3
-rw-r--r--sysdeps/i386/i686/multiarch/strncase_l-c.c2
-rw-r--r--sysdeps/i386/start.S (renamed from sysdeps/i386/elf/start.S)3
-rw-r--r--sysdeps/ieee754/dbl-64/Makefile4
-rw-r--r--sysdeps/ieee754/dbl-64/branred.c2
-rw-r--r--sysdeps/ieee754/dbl-64/doasin.c2
-rw-r--r--sysdeps/ieee754/dbl-64/dosincos.c2
-rw-r--r--sysdeps/ieee754/dbl-64/e_acosh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_asin.c2
-rw-r--r--sysdeps/ieee754/dbl-64/e_atan2.c11
-rw-r--r--sysdeps/ieee754/dbl-64/e_atanh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_cosh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_exp.c38
-rw-r--r--sysdeps/ieee754/dbl-64/e_exp2.c97
-rw-r--r--sysdeps/ieee754/dbl-64/e_fmod.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_hypot.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_j0.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_j1.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_jn.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_lgamma_r.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_log.c2
-rw-r--r--sysdeps/ieee754/dbl-64/e_log10.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_log2.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_pow.c15
-rw-r--r--sysdeps/ieee754/dbl-64/e_rem_pio2.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_remainder.c2
-rw-r--r--sysdeps/ieee754/dbl-64/e_sinh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/e_sqrt.c2
-rw-r--r--sysdeps/ieee754/dbl-64/halfulp.c2
-rw-r--r--sysdeps/ieee754/dbl-64/k_rem_pio2.c21
-rw-r--r--sysdeps/ieee754/dbl-64/k_tan.c137
-rw-r--r--sysdeps/ieee754/dbl-64/s_asinh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_atan.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_cbrt.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_ceil.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_copysign.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_erf.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_expm1.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_fabs.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_finite.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_floor.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_fma.c25
-rw-r--r--sysdeps/ieee754/dbl-64/s_fmaf.c12
-rw-r--r--sysdeps/ieee754/dbl-64/s_fpclassify.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_frexp.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_ilogb.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_isinf.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_isinf_ns.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_isnan.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_llrint.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_llround.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_log1p.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_logb.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_lrint.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_lround.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_modf.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_nearbyint.c37
-rw-r--r--sysdeps/ieee754/dbl-64/s_remquo.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_rint.c37
-rw-r--r--sysdeps/ieee754/dbl-64/s_round.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_scalbln.c12
-rw-r--r--sysdeps/ieee754/dbl-64/s_scalbn.c12
-rw-r--r--sysdeps/ieee754/dbl-64/s_signbit.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_sin.c109
-rw-r--r--sysdeps/ieee754/dbl-64/s_sincos.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_tan.c117
-rw-r--r--sysdeps/ieee754/dbl-64/s_tanh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_trunc.c2
-rw-r--r--sysdeps/ieee754/dbl-64/sincos32.c2
-rw-r--r--sysdeps/ieee754/dbl-64/slowexp.c2
-rw-r--r--sysdeps/ieee754/dbl-64/slowpow.c2
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/math_private.h35
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_isinf_ns.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c80
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c2
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c80
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c4
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c16
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c2
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c16
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_round.c2
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c12
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c12
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c2
-rw-r--r--sysdeps/ieee754/flt-32/e_acosf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_acoshf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_asinf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_atan2f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_atanhf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_coshf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_exp2f.c89
-rw-r--r--sysdeps/ieee754/flt-32/e_expf.c49
-rw-r--r--sysdeps/ieee754/flt-32/e_fmodf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_hypotf.c81
-rw-r--r--sysdeps/ieee754/flt-32/e_j0f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_j1f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_jnf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_lgammaf_r.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_log10f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_log2f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_logf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_powf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_rem_pio2f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_remainderf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_sinhf.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_sqrtf.c4
-rw-r--r--sysdeps/ieee754/flt-32/k_cosf.c4
-rw-r--r--sysdeps/ieee754/flt-32/k_rem_pio2f.c4
-rw-r--r--sysdeps/ieee754/flt-32/k_sinf.c4
-rw-r--r--sysdeps/ieee754/flt-32/k_tanf.c4
-rw-r--r--sysdeps/ieee754/flt-32/math_private.h35
-rw-r--r--sysdeps/ieee754/flt-32/s_asinhf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_atanf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_cbrtf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_ceilf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_copysignf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_cosf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_erff.c6
-rw-r--r--sysdeps/ieee754/flt-32/s_expm1f.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_fabsf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_finitef.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_floorf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_fpclassifyf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_frexpf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_ilogbf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_isinf_nsf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_isinff.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_isnanf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_llrintf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_llroundf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_log1pf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_logbf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_lrintf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_lroundf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_modff.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_nearbyintf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_nextafterf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_remquof.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_rintf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_roundf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_scalblnf.c12
-rw-r--r--sysdeps/ieee754/flt-32/s_scalbnf.c12
-rw-r--r--sysdeps/ieee754/flt-32/s_signbitf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_sincosf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_sinf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_tanf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_tanhf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_truncf.c2
-rw-r--r--sysdeps/ieee754/k_standard.c88
-rw-r--r--sysdeps/ieee754/ldbl-128/e_acoshl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_acosl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_asinl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_atan2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_atanhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_coshl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_fmodl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_hypotl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_j0l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_j1l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_jnl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_lgammal_r.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_log10l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_log2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_logl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/e_powl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_rem_pio2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_remainderl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/e_sinhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/k_cosl.c10
-rw-r--r--sysdeps/ieee754/ldbl-128/k_sincosl.c10
-rw-r--r--sysdeps/ieee754/ldbl-128/k_sinl.c6
-rw-r--r--sysdeps/ieee754/ldbl-128/k_tanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_asinhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_atanl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_cbrtl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_ceill.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_copysignl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_cosl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_erfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_expm1l.c9
-rw-r--r--sysdeps/ieee754/ldbl-128/s_fabsl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_finitel.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_floorl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_fpclassifyl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_frexpl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_ilogbl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_isinf_nsl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_isinfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_isnanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_llrintl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_llroundl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_log1pl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_logbl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_lrintl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_lroundl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_modfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_nearbyintl.c29
-rw-r--r--sysdeps/ieee754/ldbl-128/s_nextafterl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_nexttoward.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_nexttowardf.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_remquol.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_rintl.c29
-rw-r--r--sysdeps/ieee754/ldbl-128/s_roundl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_scalblnl.c12
-rw-r--r--sysdeps/ieee754/ldbl-128/s_scalbnl.c12
-rw-r--r--sysdeps/ieee754/ldbl-128/s_signbitl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_sincosl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/s_sinl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_tanhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_tanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_truncl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128/w_expl.c8
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_acoshl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_acosl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_asinl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_atan2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_atanhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_coshl.c14
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_expl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_fmodl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_hypotl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_jnl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_log10l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_log2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_logl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_powl.c8
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_remainderl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_sinhl.c14
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/k_cosl.c10
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/k_sincosl.c10
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/k_sinl.c6
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/k_tanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_asinhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_atanl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_copysignl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_cosl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_ctanl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_erfl.c7
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_expm1l.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_fabsl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_finitel.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_frexpl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_isinfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_isnanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_log1pl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_logbl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_modfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_remquol.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c12
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c12
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_signbitl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_sincosl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_sinl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_tanhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_tanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_acoshl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_asinl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_atan2l.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_atanhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_coshl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_hypotl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_j0l.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_j1l.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_jnl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_lgammal_r.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_rem_pio2l.c236
-rw-r--r--sysdeps/ieee754/ldbl-96/e_remainderl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/e_sinhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/k_cosl.c123
-rw-r--r--sysdeps/ieee754/ldbl-96/k_sinl.c126
-rw-r--r--sysdeps/ieee754/ldbl-96/k_tanl.c137
-rw-r--r--sysdeps/ieee754/ldbl-96/printf_fphex.c3
-rw-r--r--sysdeps/ieee754/ldbl-96/s_asinhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_cbrtl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_ceill.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_copysignl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_cosl.c6
-rw-r--r--sysdeps/ieee754/ldbl-96/s_erfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_fabsl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_finitel.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_floorl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_fpclassifyl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_frexpl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_ilogbl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_isinf_nsl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_isinfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_isnanl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_llrintl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_llroundl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_logbl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_lrintl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_lroundl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_modfl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_nearbyintl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_nextafterl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_nexttoward.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_nexttowardf.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_remquol.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_rintl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_roundl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_scalblnl.c12
-rw-r--r--sysdeps/ieee754/ldbl-96/s_scalbnl.c12
-rw-r--r--sysdeps/ieee754/ldbl-96/s_signbitl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_sincosl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_sinl.c6
-rw-r--r--sysdeps/ieee754/ldbl-96/s_tanhl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_tanl.c15
-rw-r--r--sysdeps/ieee754/ldbl-96/s_truncl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/t_sincosl.c483
-rw-r--r--sysdeps/ieee754/ldbl-96/w_expl.c4
-rw-r--r--sysdeps/ieee754/ldbl-opt/configure161
-rw-r--r--sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h2
-rw-r--r--sysdeps/ieee754/s_lib_version.c4
-rw-r--r--sysdeps/ieee754/s_matherr.c4
-rw-r--r--sysdeps/ieee754/s_signgam.c4
-rw-r--r--sysdeps/mach/_strerror.c2
-rw-r--r--sysdeps/mach/hurd/powerpc/register-dump.h2
-rw-r--r--sysdeps/mach/hurd/sethostid.c2
-rw-r--r--sysdeps/mach/hurd/xmknodat.c2
-rw-r--r--sysdeps/mach/xpg-strerror.c2
-rw-r--r--sysdeps/posix/spawni.c3
-rw-r--r--sysdeps/powerpc/configure103
-rw-r--r--sysdeps/powerpc/fpu/e_hypot.c4
-rw-r--r--sysdeps/powerpc/fpu/e_hypotf.c48
-rw-r--r--sysdeps/powerpc/fpu/e_rem_pio2f.c2
-rw-r--r--sysdeps/powerpc/fpu/k_cosf.c4
-rw-r--r--sysdeps/powerpc/fpu/k_rem_pio2f.c2
-rw-r--r--sysdeps/powerpc/fpu/k_sinf.c4
-rw-r--r--sysdeps/powerpc/fpu/libm-test-ulps1275
-rw-r--r--sysdeps/powerpc/fpu/math_private.h108
-rw-r--r--sysdeps/powerpc/fpu/s_cosf.c4
-rw-r--r--sysdeps/powerpc/fpu/s_float_bitwise.h2
-rw-r--r--sysdeps/powerpc/fpu/s_isnan.c2
-rw-r--r--sysdeps/powerpc/fpu/s_rint.c2
-rw-r--r--sysdeps/powerpc/fpu/s_rintf.c2
-rw-r--r--sysdeps/powerpc/fpu/s_sinf.c4
-rw-r--r--sysdeps/powerpc/fpu/w_sqrt.c4
-rw-r--r--sysdeps/powerpc/fpu/w_sqrtf.c4
-rw-r--r--sysdeps/powerpc/ifunc-sel.h (renamed from sysdeps/powerpc/elf/ifunc-sel.h)0
-rw-r--r--sysdeps/powerpc/powerpc32/bzero.S (renamed from sysdeps/powerpc/powerpc32/elf/bzero.S)0
-rw-r--r--sysdeps/powerpc/powerpc32/configure159
-rw-r--r--sysdeps/powerpc/powerpc32/configure.in34
-rw-r--r--sysdeps/powerpc/powerpc32/crti.S5
-rw-r--r--sysdeps/powerpc/powerpc32/crtn.S5
-rw-r--r--sysdeps/powerpc/powerpc32/dl-machine.c2
-rw-r--r--sysdeps/powerpc/powerpc32/elf/configure129
-rw-r--r--sysdeps/powerpc/powerpc32/elf/configure.in36
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/s_llrintf.c2
-rw-r--r--sysdeps/powerpc/powerpc32/power4/fpu/slowexp.c2
-rw-r--r--sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c2
-rw-r--r--sysdeps/powerpc/powerpc32/power4/hp-timing.h2
-rw-r--r--sysdeps/powerpc/powerpc32/register-dump.h2
-rw-r--r--sysdeps/powerpc/powerpc32/start.S (renamed from sysdeps/powerpc/powerpc32/elf/start.S)0
-rw-r--r--sysdeps/powerpc/powerpc64/Makefile10
-rw-r--r--sysdeps/powerpc/powerpc64/bzero.S (renamed from sysdeps/powerpc/powerpc64/elf/bzero.S)2
-rw-r--r--sysdeps/powerpc/powerpc64/configure178
-rw-r--r--sysdeps/powerpc/powerpc64/configure.in53
-rw-r--r--sysdeps/powerpc/powerpc64/crti.S5
-rw-r--r--sysdeps/powerpc/powerpc64/crtn.S5
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.c2
-rw-r--r--sysdeps/powerpc/powerpc64/elf/Makefile11
-rw-r--r--sysdeps/powerpc/powerpc64/elf/configure148
-rw-r--r--sysdeps/powerpc/powerpc64/elf/configure.in55
-rw-r--r--sysdeps/powerpc/powerpc64/entry.h (renamed from sysdeps/powerpc/powerpc64/elf/entry.h)0
-rw-r--r--sysdeps/powerpc/powerpc64/hp-timing.h2
-rw-r--r--sysdeps/powerpc/powerpc64/power4/fpu/slowexp.c2
-rw-r--r--sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c2
-rw-r--r--sysdeps/powerpc/powerpc64/power4/fpu/w_sqrt.c4
-rw-r--r--sysdeps/powerpc/powerpc64/power4/fpu/w_sqrtf.c4
-rw-r--r--sysdeps/powerpc/powerpc64/register-dump.h2
-rw-r--r--sysdeps/powerpc/powerpc64/start.S (renamed from sysdeps/powerpc/powerpc64/elf/start.S)0
-rw-r--r--sysdeps/powerpc/rtld-global-offsets.sym (renamed from sysdeps/powerpc/elf/rtld-global-offsets.sym)0
-rw-r--r--sysdeps/pthread/aio_cancel.c3
-rw-r--r--sysdeps/pthread/aio_fsync.c3
-rw-r--r--sysdeps/pthread/aio_misc.c5
-rw-r--r--sysdeps/s390/s390-32/bsd-_setjmp.S47
-rw-r--r--sysdeps/s390/s390-32/bsd-setjmp.S46
-rw-r--r--sysdeps/s390/s390-32/configure (renamed from sysdeps/s390/s390-32/elf/configure)3
-rw-r--r--sysdeps/s390/s390-32/configure.in (renamed from sysdeps/s390/s390-32/elf/configure.in)2
-rw-r--r--sysdeps/s390/s390-32/elf/bsd-_setjmp.S1
-rw-r--r--sysdeps/s390/s390-32/elf/bsd-setjmp.S1
-rw-r--r--sysdeps/s390/s390-32/elf/setjmp.S80
-rw-r--r--sysdeps/s390/s390-32/setjmp.S35
-rw-r--r--sysdeps/s390/s390-32/start.S (renamed from sysdeps/s390/s390-32/elf/start.S)0
-rw-r--r--sysdeps/s390/s390-64/bsd-_setjmp.S35
-rw-r--r--sysdeps/s390/s390-64/bsd-setjmp.S34
-rw-r--r--sysdeps/s390/s390-64/configure (renamed from sysdeps/s390/s390-64/elf/configure)3
-rw-r--r--sysdeps/s390/s390-64/configure.in (renamed from sysdeps/s390/s390-64/elf/configure.in)2
-rw-r--r--sysdeps/s390/s390-64/elf/bsd-_setjmp.S1
-rw-r--r--sysdeps/s390/s390-64/elf/bsd-setjmp.S1
-rw-r--r--sysdeps/s390/s390-64/elf/setjmp.S71
-rw-r--r--sysdeps/s390/s390-64/setjmp.S36
-rw-r--r--sysdeps/s390/s390-64/start.S (renamed from sysdeps/s390/s390-64/elf/start.S)0
-rw-r--r--sysdeps/sh/configure (renamed from sysdeps/sh/elf/configure)3
-rw-r--r--sysdeps/sh/configure.in (renamed from sysdeps/sh/elf/configure.in)2
-rw-r--r--sysdeps/sh/crti.S5
-rw-r--r--sysdeps/sh/crtn.S5
-rw-r--r--sysdeps/sh/start.S (renamed from sysdeps/sh/elf/start.S)0
-rw-r--r--sysdeps/sparc/Makefile5
-rw-r--r--sysdeps/sparc/configure (renamed from sysdeps/sparc/elf/configure)84
-rw-r--r--sysdeps/sparc/configure.in (renamed from sysdeps/sparc/elf/configure.in)62
-rw-r--r--sysdeps/sparc/crti.S6
-rw-r--r--sysdeps/sparc/elf/rtld-global-offsets.sym7
-rw-r--r--sysdeps/sparc/fpu/fenv_private.h106
-rw-r--r--sysdeps/sparc/fpu/libm-test-ulps2432
-rw-r--r--sysdeps/sparc/fpu/math_private.h7
-rw-r--r--sysdeps/sparc/mempcpy.S1
-rw-r--r--sysdeps/sparc/sparc-ifunc.h112
-rw-r--r--sysdeps/sparc/sparc32/Makefile2
-rw-r--r--sysdeps/sparc/sparc32/dl-machine.h13
-rw-r--r--sysdeps/sparc/sparc32/dl-trampoline.S58
-rw-r--r--sysdeps/sparc/sparc32/elf/Makefile4
-rw-r--r--sysdeps/sparc/sparc32/fpu/libm-test-ulps1376
-rw-r--r--sysdeps/sparc/sparc32/fpu/s_copysign.S31
-rw-r--r--sysdeps/sparc/sparc32/fpu/s_copysignf.S31
-rw-r--r--sysdeps/sparc/sparc32/fpu/s_fma.c2
-rw-r--r--sysdeps/sparc/sparc32/fpu/s_signbit.S32
-rw-r--r--sysdeps/sparc/sparc32/fpu/s_signbitf.S1
-rw-r--r--sysdeps/sparc/sparc32/fpu/s_signbitl.S32
-rw-r--r--sysdeps/sparc/sparc32/fpu/w_sqrt.S53
-rw-r--r--sysdeps/sparc/sparc32/fpu/w_sqrtf.S51
-rw-r--r--sysdeps/sparc/sparc32/memcpy.S14
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/Makefile9
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile11
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil-vis3.S78
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf-vis3.S74
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S30
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S29
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S26
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S26
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor-vis3.S79
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf-vis3.S74
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S31
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c14
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S28
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c14
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax-vis3.S30
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf-vis3.S28
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin-vis3.S30
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf-vis3.S28
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S58
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S17
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S54
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S17
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S55
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S51
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt-vis3.S49
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf-vis3.S47
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf.S12
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S87
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S83
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_floor.S87
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_floorf.S83
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_fmax.S40
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_fmaxf.S40
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_fmin.S40
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_fminf.S40
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S32
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S67
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S62
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_lrint.S67
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S62
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S64
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S59
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/unix/sysv/linux/multiarch/Implies4
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S51
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S50
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/hp-timing.h2
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c1
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c1
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c1
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/rtld-memset.c1
-rw-r--r--sysdeps/sparc/sparc32/start.S (renamed from sysdeps/sparc/sparc32/elf/start.S)12
-rw-r--r--sysdeps/sparc/sparc64/Makefile9
-rw-r--r--sysdeps/sparc/sparc64/dl-machine.h7
-rw-r--r--sysdeps/sparc/sparc64/dl-trampoline.S43
-rw-r--r--sysdeps/sparc/sparc64/elf/Makefile4
-rw-r--r--sysdeps/sparc/sparc64/fpu/libm-test-ulps1376
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/Makefile15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.S75
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.S73
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S28
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S28
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.S75
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_floor.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.S73
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S25
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c14
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S25
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c14
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmax-vis3.S26
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf-vis3.S27
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmin-vis3.S26
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fminf-vis3.S27
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S31
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S30
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S30
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S29
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S15
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S52
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S17
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S51
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S17
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S50
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S49
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S25
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S23
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S25
-rw-r--r--sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S12
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_ceil.S83
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_ceilf.S81
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_copysign.S30
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_copysignf.S30
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_finite.S31
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_finitef.S31
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_floor.S83
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_floorf.S81
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_fma.c2
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_fmax.S36
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_fmaxf.S36
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_fmin.S36
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_fminf.S36
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_isinf.S34
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_isinff.S33
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_isnan.S33
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_isnanf.S32
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_llrint.S1
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_llrintf.S1
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_lrint.S63
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_lrintf.S62
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_rint.S57
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_rintf.S56
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_signbit.S34
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_signbitf.S27
-rw-r--r--sysdeps/sparc/sparc64/fpu/s_signbitl.S1
-rw-r--r--sysdeps/sparc/sparc64/fpu/w_sqrt.S48
-rw-r--r--sysdeps/sparc/sparc64/fpu/w_sqrtf.S48
-rw-r--r--sysdeps/sparc/sparc64/hp-timing.h2
-rw-r--r--sysdeps/sparc/sparc64/memcpy.S23
-rw-r--r--sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S10
-rw-r--r--sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S10
-rw-r--r--sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S6
-rw-r--r--sysdeps/sparc/sparc64/multiarch/memcpy.S71
-rw-r--r--sysdeps/sparc/sparc64/multiarch/memset-niagara1.S54
-rw-r--r--sysdeps/sparc/sparc64/multiarch/memset.S11
-rw-r--r--sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c1
-rw-r--r--sysdeps/sparc/sparc64/multiarch/rtld-memset.c1
-rw-r--r--sysdeps/sparc/sparc64/rtld-memcpy.c2
-rw-r--r--sysdeps/sparc/sparc64/rtld-memset.c1
-rw-r--r--sysdeps/sparc/sparc64/start.S (renamed from sysdeps/sparc/sparc64/elf/start.S)12
-rw-r--r--sysdeps/unix/Makefile240
-rw-r--r--sysdeps/unix/errnos-tmpl.c98
-rw-r--r--sysdeps/unix/errnos.awk12
-rw-r--r--sysdeps/unix/i386/start.c2
-rw-r--r--sysdeps/unix/ioctls-tmpl.c134
-rw-r--r--sysdeps/unix/ioctls.awk10
-rw-r--r--sysdeps/unix/mk-local_lim.c125
-rwxr-xr-xsysdeps/unix/snarf-ioctls48
-rw-r--r--sysdeps/unix/sparc/start.c186
-rw-r--r--sysdeps/unix/start.c95
-rw-r--r--sysdeps/unix/sysv/linux/Makefile17
-rw-r--r--sysdeps/unix/sysv/linux/bits/siginfo.h12
-rw-r--r--sysdeps/unix/sysv/linux/bits/socket.h37
-rw-r--r--sysdeps/unix/sysv/linux/bits/socket_type.h55
-rw-r--r--sysdeps/unix/sysv/linux/bits/time.h5
-rw-r--r--sysdeps/unix/sysv/linux/bits/uio.h7
-rw-r--r--sysdeps/unix/sysv/linux/configure20
-rw-r--r--sysdeps/unix/sysv/linux/configure.in4
-rw-r--r--sysdeps/unix/sysv/linux/dl-osinfo.h8
-rw-r--r--sysdeps/unix/sysv/linux/fd_to_filename.h2
-rw-r--r--sysdeps/unix/sysv/linux/futimes.c2
-rw-r--r--sysdeps/unix/sysv/linux/i386/readelflib.c66
-rw-r--r--sysdeps/unix/sysv/linux/i386/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h19
-rw-r--r--sysdeps/unix/sysv/linux/openat.c2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/bits/mman.h5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/configure198
-rw-r--r--sysdeps/unix/sysv/linux/ptsname.c2
-rw-r--r--sysdeps/unix/sysv/linux/s390/bits/mman.h4
-rw-r--r--sysdeps/unix/sysv/linux/s390/bits/siginfo.h12
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/sh/bits/mman.h5
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh3/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/shmat.c22
-rw-r--r--sysdeps/unix/sysv/linux/sparc/Makefile4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/Versions2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/mman.h5
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/shm.h4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/siginfo.h12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/socket.h436
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/socket_type.h55
-rw-r--r--sysdeps/unix/sysv/linux/sparc/getshmlba.c (renamed from sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c)37
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h26
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/brk.S12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c29
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h26
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sysdep.h15
-rw-r--r--sysdeps/unix/sysv/linux/ttyname.c2
-rw-r--r--sysdeps/unix/sysv/linux/ttyname_r.c2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/dl-cache.h29
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/gettimeofday.c2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/init-first.c4
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/ldconfig.h1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/makecontext.c33
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/readelflib.c63
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/register-dump.h2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/time.c2
-rw-r--r--sysdeps/x86_64/bits/atomic.h58
-rw-r--r--sysdeps/x86_64/bits/link.h20
-rw-r--r--sysdeps/x86_64/bits/mathdef.h6
-rw-r--r--sysdeps/x86_64/bits/setjmp.h2
-rw-r--r--sysdeps/x86_64/configure372
-rw-r--r--sysdeps/x86_64/configure.in111
-rw-r--r--sysdeps/x86_64/dl-irel.h14
-rw-r--r--sysdeps/x86_64/dl-tls.h4
-rw-r--r--sysdeps/x86_64/dl-tlsdesc.h18
-rw-r--r--sysdeps/x86_64/elf/configure125
-rw-r--r--sysdeps/x86_64/elf/configure.in33
-rw-r--r--sysdeps/x86_64/ffsll.c4
-rw-r--r--sysdeps/x86_64/fpu/bits/fenv.h5
-rw-r--r--sysdeps/x86_64/fpu/bits/mathinline.h8
-rw-r--r--sysdeps/x86_64/fpu/e_expf.S339
-rw-r--r--sysdeps/x86_64/fpu/e_powl.S88
-rw-r--r--sysdeps/x86_64/fpu/e_rem_pio2l.c3
-rw-r--r--sysdeps/x86_64/fpu/feholdexcpt.c21
-rw-r--r--sysdeps/x86_64/fpu/k_cosl.c1
-rw-r--r--sysdeps/x86_64/fpu/k_sinl.c1
-rw-r--r--sysdeps/x86_64/fpu/k_tanl.c1
-rw-r--r--sysdeps/x86_64/fpu/libm-test-ulps1233
-rw-r--r--sysdeps/x86_64/fpu/math_private.h253
-rw-r--r--sysdeps/x86_64/fpu/multiarch/Makefile3
-rw-r--r--sysdeps/x86_64/fpu/multiarch/brandred-fma4.c4
-rw-r--r--sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c1
-rw-r--r--sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c1
-rw-r--r--sysdeps/x86_64/fpu/printf_fphex.c3
-rw-r--r--sysdeps/x86_64/fpu/s_cosl.S42
-rw-r--r--sysdeps/x86_64/fpu/s_sincos.S60
-rw-r--r--sysdeps/x86_64/fpu/s_sinl.S42
-rw-r--r--sysdeps/x86_64/fpu/s_tanl.S45
-rw-r--r--sysdeps/x86_64/jmpbuf-unwind.h4
-rw-r--r--sysdeps/x86_64/preconfigure (renamed from sysdeps/i386/elf/configure)112
-rw-r--r--sysdeps/x86_64/preconfigure.in20
-rw-r--r--sysdeps/x86_64/start.S (renamed from sysdeps/x86_64/elf/start.S)7
-rw-r--r--termios/termios.h2
-rw-r--r--time/Makefile3
-rw-r--r--time/offtime.c4
-rw-r--r--timezone/Makefile116
-rw-r--r--wcsmbs/Makefile1
-rw-r--r--wctype/Makefile3
1225 files changed, 31508 insertions, 17508 deletions
diff --git a/ChangeLog b/ChangeLog
index f1dd278281..23b72905f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,2726 @@
+2012-03-28 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/memcpy.S: Implement mempcpy using a stub
+ that branches into memcpy.
+ * sysdeps/sparc/sparc64/memcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy.S: Add mempcpy multiarch
+ bits.
+ * sysdeps/sparc/sparc64/rtld-memcpy.c: Include generic mempcpy
+ implementation too.
+ * sysdeps/sparc/mempcpy.S: New file.
+
+ * sysdeps/sparc/sparc64/multiarch/memcpy.S: Provide a hidden def to
+ the IFUNC routine in the libc case.
+ * sysdeps/sparc/sparc64/multiarch/memcpy.S: Likewise.
+
+ * sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c: New file.
+ * sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c: New file.
+ * sysdeps/sparc/sparc32/sparcv9/rtld-memset.c: New file.
+ * sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c: New file.
+ * sysdeps/sparc/sparc64/multiarch/rtld-memset.c: New file.
+ * sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c: New file.
+ * sysdeps/sparc/sparc64/rtld-memset.c: New file.
+ * sysdeps/sparc/sparc64/rtld-memcpy.c: New file.
+
+ * sysdeps/sparc/sparc64/multiarch/memset-niagara1.S: Unroll main
+ loop to 256 bytes instead of 64 bytes and fix test signedness.
+
+ * sysdeps/sparc/Makefile: Add -fPIC to ASFLAGS-.os here....
+ * sysdeps/sparc/sparc32/Makefile: rather than here...
+ * sysdeps/sparc/sparc64/Makefile: and here.
+
+2012-03-28 Ulrich Drepper <drepper@gmail.com>
+
+ * malloc/mallocbug.c: Avoid warnings about unused variables.
+
+2012-02-22 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ [BZ #13760]
+ * resolv/nss_dns/dns-host.c (gaih_getanswer): Look for errno
+ in the right place. Discard and retry query if response is
+ larger than input buffer size.
+
+2012-03-28 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #369]
+ [BZ #2678]
+ [BZ #3866]
+ * sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Take absolute value of
+ x for large integer exponent.
+ * sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Likewise.
+ * sysdeps/i386/fpu/e_powl.S (__ieee754_powl): Likewise. Adjust
+ sign of result as needed afterwards.
+ * sysdeps/x86_64/fpu/e_powl.S (__ieee754_powl): Likewise.
+ * sysdeps/ieee754/k_standard.c (__kernel_standard): Handle sign of
+ result for underflowing pow the same as for overflow.
+ (__kernel_standard_l): Handle powl overflow and underflow here
+ rather than calling __kernel_standard.
+ * math/libm-test.inc (pow_test): Add more tests.
+
+ [BZ #3868]
+ [BZ #13879]
+ [BZ #13910]
+ [BZ #13911]
+ [BZ #13912]
+ [BZ #13913]
+ [BZ #13915]
+ [BZ #13916]
+ [BZ #13917]
+ [BZ #13918]
+ [BZ #13919]
+ [BZ #13920]
+ [BZ #13921]
+ * sysdeps/generic/math_private.h (__kernel_standard_l): Declare.
+ * sysdeps/ieee754/k_standard.c: Include <float.h>.
+ (__kernel_standard_l): New function.
+ * math/w_acoshl.c (__acoshl): Use __kernel_standard_l instead of
+ __kernel_standard.
+ * math/w_acosl.c (__acosl): Likewise.
+ * math/w_asinl.c (__asinl): Likewise.
+ * math/w_atan2l.c (__atan2l): Likewise.
+ * math/w_atanhl.c (__atanhl): Likewise.
+ * math/w_coshl.c (__coshl): Likewise.
+ * math/w_exp10l.c (__exp10l): Likewise.
+ * math/w_exp2l.c (__exp2l): Likewise.
+ * math/w_fmodl.c (__fmodl): Likewise.
+ * math/w_hypotl.c (__hypotl): Likewise.
+ * math/w_j0l.c (__j0l, __y0l): Likewise.
+ * math/w_j1l.c (__j1l, __y1l): Likewise.
+ * math/w_jnl.c (__jnl, __ynl): Likewise.
+ * math/w_lgammal.c (__lgammal): Likewise.
+ * math/w_log10l.c (__log10l): Likewise.
+ * math/w_log2l.c (__log2l): Likewise.
+ * math/w_logl.c (__logl): Likewise.
+ * math/w_powl.c (__powl): Likewise.
+ * math/w_remainderl.c (__remainderl): Likewise.
+ * math/w_scalbl.c (sysv_scalbl): Likewise.
+ * math/w_sinhl.c (__sinhl): Likewise.
+ * math/w_sqrtl.c (__sqrtl): Likewise.
+ * math/w_tgammal.c (__tgammal): Likewise.
+ * sysdeps/ieee754/ldbl-128/w_expl.c (__expl): Likewise.
+ * sysdeps/ieee754/ldbl-96/w_expl.c (__expl): Likewise.
+ * math/libm-test.inc (acos_test): Add more tests.
+ (acosh_test): Likewise.
+ (asin_test): Likewise.
+ (atanh_test): Likewise.
+ (exp_test): Likewise.
+ (exp10_test): Likewise.
+ (exp2_test): Likewise.
+ (expm1_test): Likewise.
+ (lgamma_test): Likewise.
+ (log_test): Likewise.
+ (log10_test): Likewise.
+ (log1p_test): Likewise.
+ (log2_test): Likewise.
+ (pow_test): Do not allow some spurious overflow exceptions.
+ (sqrt_test): Add more tests.
+ (tgamma_test): Likewise.
+ (y0_test): Likewise.
+ (y1_test): Likewise.
+ (yn_test): Likewise.
+
+2012-03-27 Anton Blanchard <anton@samba.org>
+
+ * sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Define MAP_STACK and
+ MAP_HUGETLB.
+ * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise.
+
+2012-03-27 David S. Miller <davem@davemloft.net>
+
+ * conform/Makefile: Run run-conformtest.sh using $(BASH).
+
+ * sysdeps/sparc/sparc64/Makefile (ASFLAGS-.os): Move before
+ have-as-vis3 check.
+
+2012-03-27 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/x86_64/elf/configure.in: Moved to ...
+ * sysdeps/x86_64/configure.in: ... here.
+ * sysdeps/x86_64/elf/start.S: Moved to ...
+ * sysdeps/x86_64/start.S: ... here.
+ * sysdeps/x86_64/elf/configure: Delete.
+
+ * sysdeps/x86_64/configure.in: Merge contents from
+ sysdeps/i386/configure.in (without i686 check).
+
+ * sysdeps/i386/elf/Versions: Merge into ...
+ * sysdeps/i386/Versions: ... this.
+ * sysdeps/i386/elf/Versions: Delete file.
+ * sysdeps/i386/elf/start.S: Moved to ...
+ * sysdeps/i386/start.S: ...here.
+ * sysdeps/i386/elf/configure.in: Merge into...
+ * sysdeps/i386/configure.in: ...here.
+ * sysdeps/i386/elf/configure.in: Delete file.
+ * sysdeps/i386/elf/configure: Delete file.
+
+ * sysdeps/generic/elf/backtracesyms.c: Moved to ...
+ * debug/backtracesyms.c: ... here.
+ * sysdeps/generic/elf/backtracesymsfd.c: Moved to ...
+ * debug/backtracesymsfd.c: ... here.
+ * sysdeps/generic/elf/ifunc-sel.h: Moved to ...
+ * sysdeps/generic/ifunc-sel.h: ... here.
+
+ * sysdeps/unix/i386/start.c: Delete file.
+ * sysdeps/unix/sparc/start.c: Delete file.
+ * sysdeps/unix/start.c: Delete file.
+
+ * sysdeps/sh/elf/configure.in: Moved to ...
+ * sysdeps/sh/configure.in: ... here.
+ * sysdeps/sh/elf/start.S: Moved to ...
+ * sysdeps/sh/start.S: ... here.
+ * sysdeps/sh/elf/configure: Delete file.
+
+ * sysdeps/powerpc/powerpc64/elf/bzero.S: Moved to ...
+ * sysdeps/powerpc/powerpc64/bzero.S: ... here.
+ * sysdeps/powerpc/powerpc64/elf/entry.h: Moved to ...
+ * sysdeps/powerpc/powerpc64/entry.h: ... here.
+ * sysdeps/powerpc/powerpc64/elf/start.S: Moved to ...
+ * sysdeps/powerpc/powerpc64/start.S: here.
+ * sysdeps/powerpc/powerpc64/elf/Makefile: Merge into ...
+ * sysdeps/powerpc/powerpc64/Makefile: ... this.
+ * sysdeps/powerpc/powerpc64/elf/configure.in: Merge into ...
+ * sysdeps/powerpc/powerpc64/configure.in: ... this.
+ * sysdeps/powerpc/powerpc64/elf/configure: Delete file.
+
+ * sysdeps/powerpc/powerpc32/elf/bzero.S: Moved to ...
+ * sysdeps/powerpc/powerpc32/bzero.S: ... here.
+ * sysdeps/powerpc/powerpc32/elf/start.S: Moved to ...
+ * sysdeps/powerpc/powerpc32/start.S: ... here.
+ * sysdeps/powerpc/powerpc32/elf/configure.in: Merge into ...
+ * sysdeps/powerpc/powerpc32/configure.in: ... this.
+ * sysdeps/powerpc/powerpc32/elf/configure: Delete file.
+
+ * sysdeps/powerpc/elf/ifunc-sel.h: Moved to ...
+ * sysdeps/powerpc/ifunc-sel.h: ... here.
+ * sysdeps/powerpc/elf/rtld-global-offsets.sym: Moved to ...
+ * sysdeps/powerpc/rtld-global-offsets.sym: ... here.
+
+ * sysdeps/sparc/elf/configure.in: Moved to ...
+ * sysdeps/sparc/configure.in: ... here.
+ * sysdeps/sparc/elf/configure: Delete file.
+ * sysdeps/sparc/sparc32/elf/start.S: Moved to ...
+ * sysdeps/sparc/sparc32/start.S: ... here.
+ * sysdeps/sparc/sparc64/elf/start.S: Moved to ...
+ * sysdeps/sparc/sparc64/start.S: ... here.
+ * sysdeps/sparc/sparc32/elf/Makefile: Merged into ...
+ * sysdeps/sparc/sparc32/Makefile: ... this.
+ * sysdeps/sparc/sparc64/elf/Makefile: Merged into ...
+ * sysdeps/sparc/sparc64/Makefile: ... this.
+
+ * sysdeps/s390/s390-32/elf/bsd-_setjmp.S: Moved to ...
+ * sysdeps/s390/s390-32/bsd-_setjmp.S: ... here.
+ * sysdeps/s390/s390-32/elf/bsd-setjmp.S: Moved to ...
+ * sysdeps/s390/s390-32/bsd-setjmp.S: ... here.
+ * sysdeps/s390/s390-32/elf/setjmp.S: Moved to ...
+ * sysdeps/s390/s390-32/setjmp.S: ... here.
+ * sysdeps/s390/s390-32/elf/configure.in: Moved to ...
+ * sysdeps/s390/s390-32/configure.in: ... here.
+ * sysdeps/s390/s390-32/elf/configure: Delete file.
+ * sysdeps/s390/s390-32/elf/start.S: Moved to ...
+ * sysdeps/s390/s390-32/start.S: ... here.
+
+ * sysdeps/s390/s390-64/elf/bsd-_setjmp.S: Moved to ...
+ * sysdeps/s390/s390-64/bsd-_setjmp.S: ... here.
+ * sysdeps/s390/s390-64/elf/bsd-setjmp.S: Moved to ...
+ * sysdeps/s390/s390-64/bsd-setjmp.S: ... here.
+ * sysdeps/s390/s390-64/elf/setjmp.S: Moved to ...
+ * sysdeps/s390/s390-64/setjmp.S: ... here.
+ * sysdeps/s390/s390-64/elf/configure.in: Moved to ...
+ * sysdeps/s390/s390-64/configure.in: ... here
+ * sysdeps/s390/s390-64/elf/configure: Delete file.
+ * sysdeps/s390/s390-64/elf/start.S: Moved to ...
+ * sysdeps/s390/s390-64/start.S: ... here.
+ * sysdeps/s390/s390-64/elf/configure: Delete.
+
+ * configure.in: Remove support for elf directories in sysdeps.
+
+ * configure: Regenerated.
+ * sysdeps/i386/configure: Regenerated.
+ * sysdeps/powerpc/powerpc32/configure: Regenerated.
+ * sysdeps/powerpc/powerpc64/configure: Regenerated.
+ * sysdeps/s390/s390-32/configure: Regenerated.
+ * sysdeps/s390/s390-64/configure: Regenerated.
+ * sysdeps/sh/configure: Regenerated.
+ * sysdeps/sparc/configure: Regenerated.
+ * sysdeps/x86_64/configure: Regenerated.
+
+2012-03-26 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+ * sysdeps/ieee754/ldbl-128ibm/e_expl.c (lomark): Adjust to take
+ denormal result into account.
+
+2012-03-25 Roland McGrath <roland@hack.frob.com>
+
+ * posix/confstr.c (confstr): Lift RESTENVS definition to function scope.
+ Reported by Allan McRae <allan@archlinux.org>.
+
+2012-03-23 Jeff Law <law@redhat.com>
+
+ * nss/getnssent.c (__nss_getent): Fix typo.
+
+2012-03-23 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+2012-03-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/dl-tlsdesc.h (tlsdesc): Use anonymous union
+ to pad to uint64_t for each field.
+ (dl_tls_index): Replace unsigned long with uint64_t.
+
+2012-03-23 Daniel Jacobowitz <dmj@google.com>
+ Paul Pluzhnikov <ppluzhnikov@google.com>
+
+ [BZ #6528]
+ * grp/Makefile (otherlibs): Don't set it.
+ * inet/Makefile (otherlibs): Likewise.
+ * login/Makefile (otherlibs): Likewise.
+ * nscd/Makefile (otherlibs): Likewise.
+ * posix/Makefile (otherlibs): Likewise.
+ * pwd/Makefile (otherlibs): Likewise.
+ * rt/Makefile (otherlibs): Likewise.
+ * sunrpc/Makefile (otherlibs): Likewise.
+ * nss/Makefile (otherlibs): Likewise.
+ Add libnss_files to routines and static-only-routines.
+ ($(objpfx)getent): Remove rule.
+ * resolv/Makefile: Add libnss_dns and libresolv to routines and
+ static-only-routines.
+
+2012-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13892]
+ * math/s_cexp.c: Include <float.h>.
+ (__cexp): Handle exp result overflowing not necessarily
+ overflowing both real and imaginary parts of result.
+ * math/s_cexpf.c: Likewise.
+ * math/s_cexpl.c: Likewise.
+ * math/libm-test.inc (cexp_test): Add more tests.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * include/link.h (ELFW): New macro.
+ * sysdeps/x86_64/dl-irel.h: Replace Elf64_XXX with ElfW(XXX).
+ Replace ELF64_R_TYPE with ELFW(R_TYPE).
+
+2012-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/dl-tls.h (dl_tls_index): Replace unsigned long
+ with uint64_t.
+
+2012-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/generic/ldsodefs.h (struct La_x32_regs): New forward
+ declaration.
+ (struct La_x32_retval): Likewise.
+
+2012-03-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/preconfigure.in: New file.
+ * sysdeps/x86_64/preconfigure: New generated file.
+
+2012-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13824]
+ * math/e_exp2l.c: Include <float.h>.
+ (__ieee754_exp2l): Handle overflow and underflow cases
+ separately. Only pass fractional part of argument to
+ __ieee754_expl.
+ * math/libm-test.inc (exp2_test): Add more tests.
+
+ * sysdeps/ieee754/ldbl-128/k_cosl.c (__kernel_cosl): Negate y if
+ negating x to take absolute value.
+ * sysdeps/ieee754/ldbl-128/k_sincosl.c (__kernel_sincosl):
+ Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/k_cosl.c (__kernel_cosl): Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_sincosl):
+ Likewise.
+ * sysdeps/ieee754/ldbl-128/k_sinl.c (__kernel_sinl): Negate y when
+ computing low part if x was negated.
+ * sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_sinl): Likewise.
+
+2012-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf/tst-auditmod1.c: Support la_x32_gnu_pltenter and
+ la_x32_gnu_pltexit.
+ (pltexit): Cast int_retval to ptrdiff_t.
+ * elf/tst-auditmod3b.c: Likewise.
+ * elf/tst-auditmod4b.c: Likewise.
+ * elf/tst-auditmod5b.c: Likewise.
+ * elf/tst-auditmod6b.c: Likewise.
+ * elf/tst-auditmod6c.c: Likewise.
+ * elf/tst-auditmod7b.c: Likewise.
+
+ * sysdeps/generic/ldsodefs.h (audit_ifaces): Add x32_gnu_pltenter
+ and x32_gnu_pltexit.
+
+ * sysdeps/x86_64/bits/link.h: Check __x86_64__ instead of
+ __ELF_NATIVE_CLASS.
+ (La_x32_regs): New macro.
+ (La_x32_retval): Likewise.
+ (la_x32_gnu_pltenter): New function prototype.
+ (la_x32_gnu_pltexit): Likewise.
+
+2012-03-21 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/ieee754/ldbl-128ibm/e_powl.c (huge, tiny): Correct
+ exponent.
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+ * configure.in (libc_cv_cc_nofma): Check for option to disable
+ generation of FMA instructions.
+ * configure: Regenerate.
+ * config.make.in (config-cflags-nofma): Set from libc_cv_cc_nofma.
+ * sysdeps/ieee754/dbl-64/Makefile: New file.
+ * sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
+ Remove brandred-fma4.
+ (CFLAGS-brandred-fma4.c): Remove.
+ * sysdeps/x86_64/fpu/multiarch/brandred-fma4.c: Remove.
+ * sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c (__branred): Don't
+ define.
+ * sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c (__branred): Don't
+ define.
+
+2012-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * stdio-common/_itoa.c: Check _ITOA_NEEDED instead of
+ LLONG_MAX != LONG_MAX.
+ (_itoa_word): Use _ITOA_WORD_TYPE on value.
+ (_fitoa_word): Likewise.
+ * stdio-common/_itowa.c: Check _ITOA_NEEDED instead of
+ LLONG_MAX != LONG_MAX.
+ * stdio-common/_itowa.h: Include <_itoa.h>.
+ (_itowa_word): Use _ITOA_WORD_TYPE on value.
+ (_itowa): New macro. Defined only if _ITOA_NEEDED is false.
+ * sysdeps/generic/_itoa.h (_ITOA_NEEDED): New macro. Defined
+ only if not defined.
+ (_ITOA_WORD_TYPE): Likewise.
+ (_itoa_word): Use _ITOA_WORD_TYPE on value.
+ Check !_ITOA_NEEDED instead of LONG_MAX == LLONG_MAX.
+
+2012-03-21 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+2012-03-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/configure.in: Check x86_64* instead
+ of x86_64 when setting libc_cv_slibdir, libdir and
+ libc_cv_localedir.
+ * sysdeps/unix/sysv/linux/configure: Regenerated.
+
+2012-03-21 Joseph Myers <joseph@codesourcery.com>
+
+ * manual/lang.texi (Old Varargs): Remove section.
+ (How Variadic): Update menu.
+ (va_start): Do not mention varargs.h.
+
+2012-03-21 Thomas Schwinge <thomas@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (libc_cv_ssp): Use LIBC_TRY_CC_OPTION instead of a
+ link test.
+ * configure: Regenerated.
+
+2012-03-21 Thomas Schwinge <thomas@codesourcery.com>
+
+ * conform/conformtest.pl: Handle --tmpdir argument, defaulting to /tmp.
+ * conform/run-conformtest.sh: Pass --tmpdir argument when invoking
+ conformtest.pl
+
+2012-03-21 Joseph Myers <joseph@codesourcery.com>
+
+ * NOTES: Remove.
+ * Makefile (files-for-dist): Remove NOTES.
+ (NOTES): Remove rule.
+ * README: Don't refer to NOTES.
+ * manual/creature.texi: Don't include macros.texi.
+ * manual/intro.texi (creature.texi): Remove comment referring to
+ NOTES.
+
+ * aclocal.m4 (LIBC_TRY_CC_OPTION): New macro.
+ * configure.in (libc_cv_cc_submachine): Use LIBC_TRY_CC_OPTION.
+ * configure: Regenerated.
+ * sysdeps/i386/configure.in (libc_cv_cc_sse4): Use
+ LIBC_TRY_CC_OPTION.
+ (libc_cv_as_i686): Likewise.
+ (libc_cv_cc_avx): Likewise.
+ (libc_cv_cc_sse2avx): Likewise.
+ (libc_cv_cc_fma4): Likewise.
+ (libc_cv_cc_novzeroupper): Likewise.
+ * sysdeps/i386/configure: Regenerated.
+
+ [BZ #13883]
+ * sysdeps/i386/fpu/s_cexp.S: Remove.
+ * sysdeps/i386/fpu/s_cexpf.S: Likewise.
+ * sysdeps/i386/fpu/s_cexpl.S: Likewise.
+ * math/libm-test.inc (cexp_test): Add more tests.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-21 Allan McRae <allan@archlinux.org>
+
+ * timezone/Makefile: Do not install iso3166.tab and zone.tab
+
+2012-03-21 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13871]
+ * math/w_exp2.c: Do not include <float.h>.
+ (o_threshold, u_threshold): Remove.
+ (__exp2): Calculate result before checking finiteness and calling
+ __kernel_standard.
+ * math/w_exp2f.c: Likewise.
+ * math/w_exp2l.c: Likewise.
+ * math/libm-test.inc (exp2_test): Require overflow exception for
+ 1e6 input.
+
+ [BZ #3866]
+ * sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Test for y outside the
+ range of signed 64-bit integers before using fistpll. Remove
+ checks for whether integers fit in mantissa bits.
+ * sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Test for y outside
+ the range of signed 32-bit integers before using fistpl. Remove
+ checks for whether integers fit in mantissa bits.
+ * sysdeps/i386/fpu/e_powl.S (p64): New object.
+ (__ieee754_powl): Test for y outside the range of signed 64-bit
+ integers before using fistpll. Reduce 64-bit values to 63-bit
+ ones as needed.
+ * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Ensure
+ divide-by-zero is raised for zero to large negative powers.
+ * sysdeps/x86_64/fpu/e_powl.S (p64): New object.
+ (__ieee754_powl): Test for y outside the range of signed 64-bit
+ integers before using fistpll. Reduce 64-bit values to 63-bit
+ ones as needed.
+ * math/libm-test.inc (pow_test): Add more tests.
+
+2012-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * debug/backtracesymsfd.c: Include <_itoa.h> instead of
+ <stdio-common/_itoa.h>.
+ * debug/segfault.c: Likewise.
+ * elf/dl-cache.c: Likewise.
+ * elf/dl-minimal.c: Likewise.
+ * elf/dl-misc.c: Likewise.
+ * elf/dl-sysdep.c: Likewise.
+ * elf/dl-version.c: Likewise.
+ * elf/rtld.c: Likewise.
+ * hurd/hurdsock.c: Likewise.
+ * hurd/lookup-retry.c: Likewise.
+ * malloc/malloc.c: Likewise.
+ * malloc/mtrace.c: Likewise.
+ * nscd/nscd_getgr_r.c: Likewise.
+ * nscd/nscd_getpw_r.c: Likewise.
+ * nscd/nscd_getserv_r.c: Likewise.
+ * posix/getopt_init.c: Likewise.
+ * posix/wordexp.c: Likewise.
+ * stdio-common/_itoa.c: Likewise.
+ * stdio-common/printf_fphex.c: Likewise.
+ * stdio-common/vfprintf.c: Likewise.
+ * string/_strerror.c: Likewise.
+ * sysdeps/generic/elf/backtracesymsfd.c: Likewise.
+ * sysdeps/i386/i686/hp-timing.h: Likewise.
+ * sysdeps/mach/_strerror.c: Likewise.
+ * sysdeps/mach/hurd/powerpc/register-dump.h: Likewise.
+ * sysdeps/mach/hurd/sethostid.c: Likewise.
+ * sysdeps/mach/hurd/xmknodat.c: Likewise.
+ * sysdeps/mach/xpg-strerror.c: Likewise.
+ * sysdeps/powerpc/powerpc32/dl-machine.c: Likewise.
+ * sysdeps/powerpc/powerpc32/power4/hp-timing.h: Likewise.
+ * sysdeps/powerpc/powerpc32/register-dump.h: Likewise.
+ * sysdeps/powerpc/powerpc64/dl-machine.c: Likewise.
+ * sysdeps/powerpc/powerpc64/hp-timing.h: Likewise.
+ * sysdeps/powerpc/powerpc64/register-dump.h: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Likewise.
+ * sysdeps/sparc/sparc64/hp-timing.h: Likewise.
+ * sysdeps/unix/sysv/linux/fd_to_filename.h: Likewise.
+ * sysdeps/unix/sysv/linux/futimes.c: Likewise.
+ * sysdeps/unix/sysv/linux/i386/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/ptsname.c: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/sh3/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/sh4/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h: Likewise.
+ * sysdeps/unix/sysv/linux/ttyname.c: Likewise.
+ * sysdeps/unix/sysv/linux/ttyname_r.c: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/register-dump.h: Likewise.
+
+ * stdio-common/_itoa.c: Include <_itoa.h> instead of "_itoa.h".
+
+ * stdio-common/_itoa.h: Moved to ...
+ * sysdeps/generic/_itoa.h: Here.
+
+ * stdio-common/_itowa.c: Include <_itowa.h> instead of "_itowa.h".
+
+ * stdio-common/printf_fphex.c: Include <_itoa.h> and <_itowa.h>
+ instead of "_itoa.h" and "_itowa.h".
+ * stdio-common/vfprintf.: Likewise.
+
+2012-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/fpu/bits/mathinline.h: Don't include
+ <bits/wordsize.h>.
+ (__signbitf): Check __x86_64__ instead of __WORDSIZE.
+ (__signbit): Likwise.
+ (llrintf): Likwise.
+ (llrint): Likwise.
+
+2012-03-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/bits/setjmp.h (__jmp_buf): Support x86-64 with
+ __WORDSIZE != 64.
+
+2012-03-20 Joseph Myers <joseph@codesourcery.com>
+
+ * math/gen-libm-test.pl (%beautify): Add OVERFLOW_EXCEPTION and
+ OVERFLOW_EXCEPTION_OK.
+ * math/libm-test.inc ("Philosophy"): Update comment about
+ exception testing.
+ (OVERFLOW_EXCEPTION): Define.
+ (OVERFLOW_EXCEPTION_OK): Likewise.
+ (INVALID_EXCEPTION_OK): Renumber.
+ (DIVIDE_BY_ZERO_EXCEPTION_OK): Likewise.
+ (IGNORE_ZERO_INF_SIGN): Likewise.
+ (test_exceptions): Handle FE_OVERFLOW.
+ (exp10_test): Expect overflow exceptions.
+ (exp2_test): Likewise.
+ (expm1_test): Likewise.
+ (nextafter_test): Likewise.
+ (pow_test): Likewise.
+ (scalbn_test): Likewise.
+ (scalbln_test): Likewise.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/bits/atomic.h
+ (__arch_c_compare_and_exchange_val_64_acq): Use atomic64_t on
+ 64bit integer.
+ (atomic_exchange_acq): Likewise.
+ (__arch_exchange_and_add_body): Likewise.
+ (__arch_add_body): Likewise.
+ (atomic_add_negative): Likewise.
+ (atomic_add_zero): Likewise.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/fpu/bits/fenv.h: Don't include <bits/wordsize.h>.
+ (fenv_t): Check __x86_64__ instead of __WORDSIZE.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/bits/mathdef.h: Don't include <bits/wordsize.h>.
+ Check __x86_64__ instead of __WORDSIZE.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed: Support x32.
+
+2012-03-19 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+ * sysdeps/sparc/fpu/fenv_private.h: New file.
+ * sysdeps/sparc/fpu/math_private.h: Use it.
+ (libc_feholdexcept, libc_feholdexceptf, libc_feholdexceptl):
+ Remove.
+ (libc_feholdexcept_setround, libc_feholdexcept_setroundf,
+ (libc_feholdexcept_setroundl): Remove.
+ (libc_fetestexcept, libc_fetestexceptf, libc_fetestexceptl):
+ Remove.
+ (libc_fesetenv, libc_fesetenvf, libc_fesetenvl): Remove.
+ (libc_feupdateenv, libc_feupdateenvf, libc_feupdateenvf): Remove.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/fpu/math_private.h (EXTRACT_WORDS64): Use
+ int64_t instead of long int.
+ (INSERT_WORDS64): Likwise.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/jmpbuf-unwind.h (_JMPBUF_CFA_UNWINDS_ADJ): Cast
+ _Unwind_GetCFA return to _Unwind_Ptr first.
+
+2012-03-19 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13629]
+ * math/s_clog.c: Include <float.h>.
+ (__clog): Scale large or subnormal inputs.
+ * math/s_clogf.c: Likewise.
+ * math/s_clogl.c: Likewise.
+ * math/s_clog10.c: Include <float.h>.
+ (M_LOG10_2): Define.
+ (__clog10): Scale large or subnormal inputs.
+ * math/s_clog10f.c: Likewise.
+ * math/s_clog10l.c: Likewise.
+ * math/libm-test.inc (clog_test): Add more tests.
+ (clog10_test): Likewise.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #11451]
+ * sysdeps/ieee754/dbl-64/e_atan2.c (__ieee754_atan2): Scale large
+ x and y.
+ * math/libm-test.inc (atan2_test): Add another test.
+
+ * Makerules (common-objdir-compile): Remove.
+ * sysdeps/unix/Makefile (config-generated): Do not add
+ $(unix-generated) to variable.
+ [generic bits/local_lim.h] (mk-local_lim-CFLAGS): Remove variable.
+ [generic bits/local_lim.h] ($(common-objpfx)bits/local_lim.h):
+ Remove rule.
+ [generic bits/local_lim.h] ($(common-objpfx)mk-local_lim):
+ Likewise.
+ [generic bits/local_lim.h] (before-compile): Do not append to
+ variable.
+ [generic bits/local_lim.h] (common-generated): Likewise.
+ [generic sys/param.h] (before-compile): Do not append to variable.
+ [generic sys/param.h] ($(common-objpfx)sys/param.h): Remove rule.
+ [generic sys/param.h] ($(common-objpfx)param.h.c): Likewise.
+ [generic sys/param.h] ($(common-objpfx)param.h.dep): Likewise.
+ [generic sys/param.h] ($(common-objpfx)param.h.dep): Do not
+ include.
+ [generic sys/param.h] (sys/param.h-includes): Remove variable.
+ [generic sys/param.h] (sys/param.h-includes): Remove rule.
+ [generic sys/param.h] ($(addprefix
+ $(common-objpfx),$(sys/param.h-includes))): Likewise.
+ [generic sys/param.h] (common-generated): Do not append to
+ variable.
+ [generic sys/param.h] (sysdep_headers): Likewise.
+ [generic bits/errno.h] (before-compile): Do not append to
+ variable.
+ [generic bits/errno.h] ($(common-objpfx)bits/errno.h): Remove
+ rule.
+ [generic bits/errno.h] ($(common-objpfx)make-errnos): Likewise.
+ [generic bits/errno.h] ($(common-objpfx)make-errnos.c): Likewise.
+ [generic bits/errno.h] ($(common-objpfx)errnos): Likewise.
+ [generic bits/errno.h] (common-generated): Do not append to
+ variable.
+ [generic bits/ioctls.h] (before-compile): Do not append to
+ variable.
+ [generic bits/ioctls.h] ($(common-objpfx)bits/ioctls.h): Remove
+ rule.
+ [generic bits/ioctls.h] (ioctl-includes): Remove variable.
+ [generic bits/ioctls.h] (make-ioctls-CFLAGS): Likewise.
+ [generic bits/ioctls.h] ($(common-objpfx)make-ioctls): Remove
+ rule.
+ [generic bits/ioctls.h] ($(common-objpfx)make-ioctls.c): Likewise.
+ [generic bits/ioctls.h] (bits_termios.h): Remove variable.
+ [generic bits/ioctls.h] ($(common-objpfx)ioctls): Remove rule.
+ [generic bits/ioctls.h] (common-generated): Do not append to
+ variable.
+ [generic sys/syscall.h] (syscall.h): Remove variable.
+ [generic sys/syscall.h] ($(common-objpfx)sys/syscall.h): Remove
+ rule.
+ [generic sys/syscall.h] (before-compile): Do not append to
+ variable.
+ [generic sys/syscall.h] (common-generated): Likewise.
+ * sysdeps/unix/errnos-tmpl.c: Remove file.
+ * sysdeps/unix/errnos.awk: Likewise.
+ * sysdeps/unix/ioctls-tmpl.c: Likewise.
+ * sysdeps/unix/ioctls.awk: Likewise.
+ * sysdeps/unix/mk-local_lim.c: Likewise.
+ * sysdeps/unix/snarf-ioctls: Likewise.
+
+2012-03-19 Richard Henderson <rth@twiddle.net>
+
+ * sysdeps/i386/fpu/fenv_private.h: New file.
+ * sysdeps/i386/fpu/math_private.h: Use it.
+ (math_opt_barrier, math_force_eval): Remove.
+ (libc_feholdexcept_setround_53bit): Remove.
+ (libc_feupdateenv_53bit): Remove.
+ * sysdeps/x86_64/fpu/math_private.h: Likewise.
+ (math_opt_barrier, math_force_eval): Remove.
+ (libc_feholdexcept): Remove.
+ (libc_feholdexcept_setround): Remove.
+ (libc_fetestexcept, libc_fesetenv): Remove.
+ (libc_feupdateenv_test): Remove.
+ (libc_feupdateenv, libc_feholdsetround): Remove.
+ (libc_feresetround): Remove.
+
+ * sysdeps/i386/fpu/feholdexcpt.c (feholdexcept): Avoid the fldenv.
+ * sysdeps/x86_64/fpu/feholdexcpt.c (feholdexcept): Likewise.
+
+ * sysdeps/generic/math_private.h (default_libc_feupdateenv_test): New.
+ (libc_feupdateenv_test, libc_feupdateenv_testf): New.
+ (libc_feupdateenv_testl): New.
+ * sysdeps/x86_64/fpu/math_private.h (libc_feupdateenv_test): New.
+ (libc_feupdateenv_testf): New.
+ (libc_feupdateenv): Use libc_feupdateenv_test.
+ * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Use libc_feupdateenv_test.
+ * sysdeps/ieee754/dbl-64/s_fmaf.c (__fmaf): Likewise.
+
+ * sysdeps/generic/math_private.h (libc_feholdsetround): New.
+ (libc_feholdsetroundf, libc_feholdsetroundl): New.
+ (libc_feresetround, libc_feresetroundf, libc_feresetroundl): New.
+ (libc_feresetround_noex): New.
+ (libc_feresetround_noexf): New.
+ (libc_feresetround_noexl): New.
+ (SET_RESTORE_ROUND, SET_RESTORE_ROUNDF, SET_RESTORE_ROUNDL): New.
+ (SET_RESTORE_ROUND_NOEX, SET_RESTORE_ROUND_NOEXF): New.
+ (SET_RESTORE_ROUND_NOEXL, SET_RESTORE_ROUND_53BIT): New.
+ * sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Use
+ SET_RESTORE_ROUND.
+ * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Likewise.
+ * sysdeps/ieee754/dbl-64/s_sin.c (__sin): Use SET_RESTORE_ROUND_53BIT.
+ (__cos): Likewise.
+ * sysdeps/ieee754/dbl-64/s_tan.c (__tan): Likewise.
+ * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Use
+ SET_RESTORE_ROUND_NOEX.
+ * sysdeps/ieee754/dbl-64/e_exp2f.c (__ieee754_exp2f): Use
+ SET_RESTORE_ROUND_NOEXF.
+ * sysdeps/ieee754/flt-32/e_expf.c (__ieee754_expf): Likewise.
+ * sysdeps/x86_64/fpu/math_private.h (libc_feholdsetround): New.
+ (libc_feholdsetroundf): New.
+ (libc_feresetround, libc_feresetroundf): New.
+
+ * sysdeps/i386/fpu/math_private.h: Include <fenv.h>, <fpu_control.h>.
+ (libc_feholdexcept_setround_53bit): Convert from macro to function.
+ (libc_feupdateenv_53bit): Likewise. Don't force _FPU_EXTENDED.
+
+ * sysdeps/generic/math_private.h: Include <fenv.h>.
+ (default_libc_feholdexcept): New.
+ (default_libc_feholdexcept_setround): New.
+ (default_libc_fesetenv, default_libc_feupdateenv): New.
+ (libc_feholdexcept): Only define if undefined.
+ (libc_feholdexceptf, libc_feholdexceptl): Likewise.
+ (libc_feholdexcept_setround, libc_feholdexcept_setroundf): Likewise.
+ (libc_feholdexcept_setroundl): Likewise.
+ (libc_feholdexcept_setround_53bit): Likewise.
+ (libc_fetestexcept, libc_fetestexceptf, libc_fetestexceptl): Likewise.
+ (libc_fesetenv, libc_fesetenvf, libc_fesetenvl): Likewise.
+ (libc_feupdateenv, libc_feupdateenvf, libc_feupdateenvl): Likewise.
+ (libc_feupdateenv_53bit): Likewise.
+ * sysdeps/x86_64/fpu/math_private.h: Include <fenv.h>.
+ (libc_feholdexcept): Convert from macro to inline function.
+ (libc_feholdexcept_setround, libc_fetestexcept): Likewise.
+ (libc_fesetenv, libc_feupdateenv): Likewise.
+
+ * sysdeps/generic/math_private.h (GET_HIGH_WORD): Define only if
+ not previously defined.
+ (GET_LOW_WORD, EXTRACT_WORDS64, INSERT_WORDS): Likewise.
+ (INSERT_WORDS64, SET_HIGH_WORD, SET_LOW_WORD): Likewise.
+ (GET_FLOAT_WORD, SET_FLOAT_WORD): Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/math_private.h: New file.
+ * sysdeps/ieee754/flt-32/math_private.h: New file.
+ * sysdeps/x86_64/fpu/math_private.h: Move the include_next of
+ math_private.h below SET_FLOAT_WORD.
+ (__isnan, __isinf_ns, __finite): Remove.
+ (__isnanf, __isinf_nsf, __finitef): Remove.
+
+2012-03-18 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+2012-03-17 David S. Miller <davem@davemloft.net>
+
+ [BZ #6471]
+ * sysdeps/unix/sysv/linux/sparc/Versions: Add __getshmlba entry
+ for 2.16.
+
+2012-03-16 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/shmat.c (shmat): Use -1l to avoid
+ warnings.
+
+ [BZ #6471]
+ * sysdeps/unix/sysv/linux/shmat.c (shmat): Test for syscall errors
+ properly.
+ * sysdeps/unix/sysv/linux/sparc/getshmlba.c: New file.
+ * sysdeps/unix/sysv/linux/sparc/Makefile: Add getshmlba to
+ sysdep_routines when subdir is sysvipc.
+ * sysdeps/unix/sysv/linux/sparc/bits/shm.h (SHMLBA): Use new
+ __getshmlba helper.
+
+ * sysdeps/sparc/fpu/libm-test/ulps: Update.
+
+2012-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/ffsll.c (ffsl): Define alias only under
+ [__LP64__].
+
+2012-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c: Moved to ...
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c: This.
+ (__lround): Renamed to ...
+ (__llround): This. Replace long int with long long int.
+ Define lround functions as aliases of llround functions.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c: Empty file.
+
+2012-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/makecontext.c (__makecontext):
+ Use greg_t on sp. Use unsigned int on idx_uc_link. Cast
+ adresses to uintptr_t. Replace "long int" and "unsigned long
+ int" with "greg_t" on va_arg.
+
+2012-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/generic/ldconfig.h (FLAG_X8664_LIBX32): New macro.
+ * elf/cache.c (print_entry): Handle FLAG_X8664_LIBX32.
+
+ * sysdeps/unix/sysv/linux/i386/readelflib.c (process_elf_file):
+ Move e_machine check before EI_CLASS check. Handle x32
+ libraries. Check EM_IA_64 only if SKIP_EM_IA_64 isn't defined.
+ * sysdeps/unix/sysv/linux/x86_64/readelflib.c: Just define
+ SKIP_EM_IA_64 and include
+ <sysdeps/unix/sysv/linux/i386/readelflib.c>.
+
+ * sysdeps/unix/sysv/linux/x86_64/dl-cache.h:
+ Don't include <sysdeps/unix/sysv/linux/sparc/dl-cache.h>.
+ (add_system_dir): New macro.
+
+ * sysdeps/unix/sysv/linux/x86_64/ldconfig.h
+ (SYSDEP_KNOWN_INTERPRETER_NAMES): Add /libx32/ld-linux-x32.so.2.
+
+2012-03-16 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #2551]
+ [BZ #2552]
+ [BZ #2553]
+ [BZ #2554]
+ [BZ #2562]
+ [BZ #2563]
+ [BZ #2565]
+ [BZ #2566]
+ [BZ #2576]
+ * math/w_j0.c (j0): Don't produce TLOSS errors for POSIX libm.
+ (y0): Likewise.
+ * math/w_j0f.c (j0f): Likewise.
+ (y0f): Likewise.
+ * math/w_j0l.c (__j0l): Likewise.
+ (__y0l): Likewise.
+ * math/w_j1.c (j1): Likewise.
+ (y1): Likewise.
+ * math/w_j1f.c (j1f): Likewise.
+ (y1f): Likewise.
+ * math/w_j1l.c (__j1l): Likewise.
+ (__y1l): Likewise.
+ * math/w_jn.c (jn): Likewise.
+ (yn): Likewise.
+ * math/w_jnf.c (jnf): Likewise.
+ (ynf): Likewise.
+ * math/w_jnl.c (__jnl): Likewise.
+ (__ynl): Likewise.
+ * math/libm-test.inc (j0_test): Add more tests.
+ (j1_test): Likewise.
+ (jn_test): Likewise. Add trailing semicolon to existing test.
+ (y0_test): Likewise.
+ (y1_test): Likewise.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #13851]
+ [BZ #13854]
+ * sysdeps/ieee754/dbl-64/s_tan.c (tan): Use
+ libc_feholdexcept_setround_53bit and libc_feupdateenv_53bit.
+ * sysdeps/ieee754/ldbl-96/k_tanl.c: New file.
+ * sysdeps/ieee754/ldbl-96/s_tanl.c: Include <errno.h>.
+ (__tanl): Set errno for infinite argument.
+ * sysdeps/i386/fpu/mptan.c: Remove.
+ * sysdeps/i386/fpu/s_tan.S: Likewise.
+ * sysdeps/i386/fpu/s_tanl.S: Likewise.
+ * sysdeps/x86_64/fpu/k_tanl.c: Likewise.
+ * sysdeps/x86_64/fpu/s_tanl.S: Likewise.
+ * math/libm-test.inc (tan_test): Add more tests and enable more
+ tests for double and long double.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-16 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * sysdeps/x86_64/elf/start.S: Include <sysdep.h>.
+ (_start): Add cfi_startproc, cfi_undefined for rip and cfi_endproc.
+
+2012-03-16 Roland McGrath <roland@hack.frob.com>
+
+ * aclocal.m4 (LIBC_PRECONFIGURE): New macro.
+ * configure.in: Use it for both main tree and add-ons.
+ * configure: Regenerated.
+
+2012-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * time/offtime.c (__offtime): Use time_t on days, rem, y and yg.
+
+2012-03-16 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/ieee754/ldbl-96/t_sincosl.c: Include generator program
+ in comment.
+
+ [BZ #13851]
+ * sysdeps/ieee754/ldbl-96/e_rem_pio2l.c: New file.
+ * sysdeps/ieee754/ldbl-96/k_cosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/k_sinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/t_sincosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_cosl.c (__cosl): Correct test for
+ infinite argument.
+ * sysdeps/ieee754/ldbl-96/s_sinl.c (__sinl): Likewise.
+ * sysdeps/ieee754/dbl-64/k_rem_pio2.c: Handle __FLT_EVAL_METHOD__
+ != 0 for prec == 2.
+ * sysdeps/i386/fpu/e_rem_pio2l.c: Remove.
+ * sysdeps/i386/fpu/k_rem_pio2.c: Likewise.
+ * sysdeps/i386/fpu/s_cosl.S: Likewise.
+ * sysdeps/i386/fpu/s_sincosl.S: Likewise.
+ * sysdeps/i386/fpu/s_sinl.S: Likewise.
+ * sysdeps/x86_64/fpu/e_rem_pio2l.c: Likewise.
+ * sysdeps/x86_64/fpu/k_cosl.c: Likewise.
+ * sysdeps/x86_64/fpu/k_sinl.c: Likewise.
+ * sysdeps/x86_64/fpu/s_cosl.S: Likewise.
+ * sysdeps/x86_64/fpu/s_sincosl.S: Likewise.
+ * sysdeps/x86_64/fpu/s_sinl.S: Likewise.
+ * math/libm-test.inc (cos_test): Add more tests and enable more
+ tests for long double.
+ (sin_test): Likewise.
+ (sincos_test): Likewise.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-16 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/math_private.h: New file.
+
+2012-03-15 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/Makefile: Add fma/fmaf
+ sysdep routines.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: Likewise.
+
+ * sysdeps/sparc/sparc32/fpu/s_fma.c: New file.
+ * sysdeps/sparc/sparc64/fpu/s_fma.c: New file.
+
+ * sysdeps/sparc/sparc-ifunc.h: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil.S: Use
+ sparc-ifunc.h
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S:
+ Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_floor.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S: Likewise.
+
+2012-03-15 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/e_hypotf.c: Use double precision instead of
+ scaling.
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+2012-03-15 Andreas Jaeger <aj@suse.de>
+
+ [BZ #13852]
+ * sysdeps/i386/fpu/e_rem_pio2f.c: Delete so that i386 uses the
+ ieee754/flt-32 implementation for sin, cos and sincos.
+ * sysdeps/i386/fpu/k_rem_pio2f.c: Likewise.
+ * sysdeps/i386/fpu/s_cosf.S: Likewise.
+ * sysdeps/i386/fpu/s_sincosf.S: Likewise.
+ * sysdeps/i386/fpu/s_sinf.S: Likewise.
+ * sysdeps/i386/fpu/s_tanf.S: Delete so that i386 uses the
+ ieee754/flt-32 implementation for tan.
+
+ * math/libm-test.inc (cos_test): Enable some large input tests for
+ float as well
+ (sin_test): Likewise.
+ (sincos_test): Likewise.
+ (tan_test): Add tests for large input.
+
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+
+2012-03-15 Andreas Jaeger <aj@suse.de>
+
+ [BZ #13658]
+ * math/libm-test.inc (cos_test): Add more test cases.
+ (sin_test): Likewise.
+ (sincos_test): Likewise.
+
+2012-03-15 Andreas Jaeger <aj@suse.de>
+
+ [BZ #13837]
+ * math/libm-test.inc (cos_test): Add a test case for large input
+ value.
+ (sin_test): Likewise.
+ (sincos_test): Likewise.
+
+2012-03-15 Andreas Jaeger <aj@suse.de>,
+ Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13658]
+ * sysdeps/x86_64/fpu/s_sincos.S: Delete files so that
+ x86-64 and i386 use the iee754/dbl-64 sin and cos implementation.
+ * sysdeps/i386/fpu/branred.c: Likewise.
+ * sysdeps/i386/fpu/dosincos.c: Likewise.
+ * sysdeps/i386/fpu/mpa.c: Likewise.
+ * sysdeps/i386/fpu/s_cos.S: Likewise.
+ * sysdeps/i386/fpu/s_sin.S: Likewise.
+ * sysdeps/i386/fpu/s_sincos.S: Likewise.
+ * sysdeps/i386/fpu/sincos32.c: Likewise.
+
+ * sysdeps/generic/math_private.h (libc_feholdexcept_setround_53bit):
+ Define.
+ (libc_feupdateenv_53bit): Define.
+ * sysdeps/i386/fpu/math_private.h (libc_feholdexcept_setround_53bit):
+ Define.
+ (libc_feupdateenv_53bit): Define.
+
+ * sysdeps/ieee754/dbl-64/s_sin.c (__sin): Do double arithmetic in
+ 53 bit (without extend i386 double precision).
+
+ * math/libm-test.inc (sincos_test): Add tests for large input.
+ (sin): Likewise.
+ (cos): Likewise.
+
+ * sysdeps/i386/fpu/libm-test-ulps: Update ULPs.
+
+2012-03-15 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+2012-03-15 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc64/fpu/s_fmax.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_fmaxf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_fmin.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_fminf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_fmax.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_fmaxf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_fmin.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_fminf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmin-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fminf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/Makefile: Add new vis3
+ fmin/fmax sysdep routines.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: Likewise.
+
+2012-03-14 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_floor.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/Makefile: Add new VIS3
+ routines.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S:
+ New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf-vis3.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: Add new
+ VIS3 routines.
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/unix/sysv/linux/multiarch/Implies:
+ New file.
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+ * sysdeps/sparc/configure.in: New file.
+ * sysdeps/sparc/configure: Generate.
+ * configure.in (libc_cv_sparc_as_vis3): Substitute.
+ * configure: Regenerate.
+ * config.h.in (HAVE_AS_VIS3_SUPPORT): New.
+ * config.make.in (have-as-vis3): New.
+ * sysdeps/sparc/sparc32/sparcv9/Makefile (ASFLAGS-*): If VIS3 is
+ available use -Av9d instead of -Av9a.
+ * sysdeps/sparc/sparc64/Makefile: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S:
+ New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S: New
+ file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S:
+ New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S: New
+ file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/Makefile: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S: New file.
+ * sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S: New file.
+
+ * sysdeps/sparc/sparc64/fpu/s_copysign.S (__copysign): Use
+ fzeros/fnegs to load 0x80000000 into a float register instead of
+ using the stack.
+ * sysdeps/sparc/sparc64/fpu/s_copysignf.S (__copysignf): Likewise.
+
+2012-03-14 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
+ bits/syscall.h.
+ ($(objpfx)syscall-%.h): Rename rule to $(objpfx)bits/syscall%h.
+ ($(objpfx)syscall-%.d): Rename rule to $(objpfx)bits/syscall%d.
+ ($(inst_includedir)/bits/syscall.h): Remove rule.
+ ($(objpfx)bits/syscall.d): Include instead of
+ $(objpfx)syscall-list.d.
+ (generated): Change syscall-list.h and syscall-list.d to
+ bits/syscall.h and bits/syscall.d.
+
+2012-03-14 Roland McGrath <roland@hack.frob.com>
+
+ [BZ #13846]
+ * manual/llio.texi (Memory-mapped I/O): Fix wrong function name.
+
+2012-03-14 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13841]
+ * math/s_csqrt.c: Include <float.h>.
+ (__csqrt): Scale large or subnormal inputs.
+ * math/s_csqrtf.c: Likewise.
+ * math/s_csqrtl.c: Likewise.
+ * math/libm-test.inc (csqrt_test): Add more tests.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #13840]
+ * math/libm-test.inc (hypot_test): Add more tests.
+
+2012-03-13 David S. Miller <davem@davemloft.net>
+
+ [BZ #13840]
+ * sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Rewrite to use
+ double-precision for the calculation instead of scaling.
+
+2012-03-13 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/ieee754/dbl-64/s_nearbyint.c (__nearbyint): Do not
+ manipulate bits before adding and subtracting TWO52[sx].
+ * sysdeps/ieee754/dbl-64/s_rint.c (__rint): Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c (__nearbyint):
+ Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c (__rint): Likewise.
+
+2012-03-13 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/Makefile: Remove rtld-global-offsets.sym handling.
+ * sysdeps/sparc/elf/rtld-global-offsets.sym: Delete.
+ * sysdeps/sparc/sparc64/multiarch/memcpy.S: Don't include
+ rtld-global-offsets.h
+ * sysdeps/sparc/sparc64/multiarch/memset.S: Likewise.
+
+ * sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Use expl for
+ large parameters.
+
+ * sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c: New file.
+
+ * sysdeps/unix/sysv/linux/openat.c (OPENAT_NOT_CANCEL): Declare syscall
+ 'err' in the ifdef scope in which it is actually used.
+
+ * nss/nss_db/db-init.c: Include string.h
+
+2012-03-12 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard): Fix
+ masking out of the most significant byte of random value used.
+ * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard):
+ Fix coding style in previous change.
+
+ * sysdeps/unix/sysv/linux/kernel-features.h
+ (__ASSUME_CLONE_THREAD_FLAGS): Set on sparc when 2.5.64 and later.
+ (__ASSUME_TGKILL): Set on sparc when 2.6.1 and later, simplify
+ expression.
+ (__ASSUME_FADVISE64_64_SYSCALL): Set on sparc when 2.6.1 and
+ later.
+
+2012-03-11 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
+ (__makecontext): Fix signedness of pointer casts setting up 'sp'.
+ * sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_SYSCALL) Use 'long'
+ for 'resultvar' otherwise things get truncated on 64-bit.
+
+ * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard):
+ Fix masking out of the most significant byte of random value used.
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+2012-03-10 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+2012-03-09 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Protect local
+ variables with appropriate CPP guards.
+ * sysdeps/sparc/sparc32/dl-trampoline.S: Propagate the stack_ptr from the
+ frame pointer, not the stack pointer. Correct layout comments. Fix test
+ on resulting framesize and the management of the outregs buffer for pltexit.
+ Preserve floating point return values across _dl_call_pltexit call.
+ * sysdeps/sparc/sparc64/dl-trampoline.S: Fix test on resulting
+ framesize and the management of the outregs buffer for pltexit.
+ Preserve floating point return values across _dl_call_pltexit
+ call.
+ * elf/sotruss-lib.c (la_sparc32_gnu_pltenter, la_sparc64_gnu_pltenter,
+ la_sparc32_gnu_pltexit, la_sparc64_gnu_pltexit): New functions.
+ (print_exit): Fix format string for return register value.
+
+2012-03-10 Joseph Myers <joseph@codesourcery.com>
+
+ * sunrpc/Makefile (others): Add rpcgen.
+ ($(objpfx)rpcgen): Remove special build rule and dependency on
+ libc.
+ * sunrpc/rpcgen.c: New file.
+
+2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ [BZ #13673]
+ * posix/bug-regex33.c: Replace FSF snail mail address with URL.
+ * stdio-common/bug-vfprintf-nargs.c: Likewise.
+ * sysdeps/i386/crti.S: Likewise.
+ * sysdeps/i386/crtn.S: Likewise.
+ * sysdeps/powerpc/powerpc32/crti.S: Likewise.
+ * sysdeps/powerpc/powerpc32/crtn.S: Likewise.
+ * sysdeps/powerpc/powerpc64/crti.S: Likewise.
+ * sysdeps/powerpc/powerpc64/crtn.S: Likewise.
+ * sysdeps/sh/crti.S: Likewise.
+ * sysdeps/sh/crtn.S: Likewise.
+ * sysdeps/x86_64/fpu/e_expf.S: Likewise.
+
+ [BZ #13673]
+ * locale/programs/charmap-kw.gperf: Replace FSF snail mail address
+ with URL.
+ * locale/programs/locfile-kw.gperf: Likewise.
+ * locale/programs/charmap-kw.h: Regenerated.
+ * locale/programs/locfile-kw.h: Likewise.
+
+ [BZ #13673]
+ * intl/plural.y: Replace FSF snail mail address with URL.
+ * intl/plural.c: Regenerated.
+
+2012-03-09 Richard Henderson <rth@twiddle.net>
+
+ * include/math_private.h: Remove file.
+ * math/math_private.h: Move file ...
+ * sysdeps/generic/math_private.h: ... here.
+
+ * sysdeps/i386/fpu/math_private.h: Use include_next for math_private.h.
+ * sysdeps/powerpc/fpu/math_private.h: Likewise.
+ * sysdeps/x86_64/fpu/math_private.h: Likewise.
+
+ * sysdeps/i386/fpu/s_fpclassifyl.c: Use <> to include both <math.h>
+ and <math_private.h>.
+ * sysdeps/i386/fpu/s_isinfl.c: Likewise.
+ * sysdeps/i386/fpu/s_isnanl.c: Likewise.
+ * sysdeps/i386/fpu/s_nextafterl.c: Likewise.
+ * sysdeps/i386/fpu/s_nexttoward.c: Likewise.
+ * sysdeps/i386/fpu/s_nexttowardf.c: Likewise.
+ * sysdeps/ieee754/dbl-64/branred.c: Likewise.
+ * sysdeps/ieee754/dbl-64/doasin.c: Likewise.
+ * sysdeps/ieee754/dbl-64/dosincos.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_acosh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_asin.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_atan2.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_atanh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_cosh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_exp.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_fmod.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_hypot.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_j0.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_j1.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_jn.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_lgamma_r.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_log.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_log10.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_log2.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_pow.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_rem_pio2.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_remainder.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_sinh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/e_sqrt.c: Likewise.
+ * sysdeps/ieee754/dbl-64/halfulp.c: Likewise.
+ * sysdeps/ieee754/dbl-64/k_rem_pio2.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_asinh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_atan.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_cbrt.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_ceil.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_copysign.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_erf.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_expm1.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_fabs.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_finite.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_floor.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_fpclassify.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_frexp.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_ilogb.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_isinf.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_isinf_ns.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_isnan.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_llrint.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_llround.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_log1p.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_logb.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_lrint.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_lround.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_modf.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_nearbyint.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_remquo.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_rint.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_round.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_scalbln.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_scalbn.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_signbit.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_sin.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_sincos.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_tan.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_tanh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/s_trunc.c: Likewise.
+ * sysdeps/ieee754/dbl-64/sincos32.c: Likewise.
+ * sysdeps/ieee754/dbl-64/slowexp.c: Likewise.
+ * sysdeps/ieee754/dbl-64/slowpow.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_isinf_ns.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_round.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c: Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_acosf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_acoshf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_asinf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_atan2f.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_atanhf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_coshf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_fmodf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_hypotf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_j0f.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_j1f.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_jnf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_lgammaf_r.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_log2f.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_logf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_powf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_rem_pio2f.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_remainderf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_sinhf.c: Likewise.
+ * sysdeps/ieee754/flt-32/e_sqrtf.c: Likewise.
+ * sysdeps/ieee754/flt-32/k_cosf.c: Likewise.
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c: Likewise.
+ * sysdeps/ieee754/flt-32/k_sinf.c: Likewise.
+ * sysdeps/ieee754/flt-32/k_tanf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_asinhf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_atanf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_cbrtf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_ceilf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_copysignf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_erff.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_expm1f.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_fabsf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_finitef.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_floorf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_fpclassifyf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_frexpf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_ilogbf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_isinf_nsf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_isinff.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_isnanf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_llrintf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_llroundf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_log1pf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_logbf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_lrintf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_lroundf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_modff.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_nearbyintf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_nextafterf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_remquof.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_rintf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_roundf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_scalblnf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_scalbnf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_signbitf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_sincosf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_sinf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_tanf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_tanhf.c: Likewise.
+ * sysdeps/ieee754/flt-32/s_truncf.c: Likewise.
+ * sysdeps/ieee754/k_standard.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_acoshl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_acosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_asinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_atan2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_atanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_coshl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_fmodl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_hypotl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_j0l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_j1l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_jnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_log10l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_log2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_logl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_powl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_rem_pio2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_remainderl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/e_sinhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/k_cosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/k_sincosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/k_sinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/k_tanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_asinhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_atanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_cbrtl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_ceill.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_copysignl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_cosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_expm1l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_fabsl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_finitel.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_floorl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_fpclassifyl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_frexpl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_ilogbl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_isinf_nsl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_isinfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_isnanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_llrintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_llroundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_logbl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_lrintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_lroundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_modfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_nearbyintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_nextafterl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_nexttoward.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_nexttowardf.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_remquol.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_rintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_roundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_scalblnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_scalbnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_signbitl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_sincosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_sinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_tanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_tanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/s_truncl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/w_expl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_acosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_jnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_log10l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_log2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_logl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_powl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/k_cosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/k_sinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/k_tanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_ctanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_erfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_finitel.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_logbl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_modfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_remquol.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_acoshl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_asinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_atan2l.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_atanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_coshl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_hypotl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_j0l.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_j1l.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_jnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_lgammal_r.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_remainderl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/e_sinhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_asinhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_cbrtl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_ceill.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_copysignl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_cosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_erfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fabsl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_finitel.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_floorl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fpclassifyl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_frexpl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_ilogbl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_isinf_nsl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_isinfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_isnanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_llrintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_llroundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_logbl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_lrintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_lroundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_modfl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_nearbyintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_nextafterl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_nexttoward.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_nexttowardf.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_remquol.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_rintl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_roundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_scalblnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_scalbnl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_signbitl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_sincosl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_sinl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_tanhl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_tanl.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/s_truncl.c: Likewise.
+ * sysdeps/ieee754/s_lib_version.c: Likewise.
+ * sysdeps/ieee754/s_matherr.c: Likewise.
+ * sysdeps/ieee754/s_signgam.c: Likewise.
+ * sysdeps/powerpc/fpu/e_hypot.c: Likewise.
+ * sysdeps/powerpc/fpu/e_hypotf.c: Likewise.
+ * sysdeps/powerpc/fpu/e_rem_pio2f.c: Likewise.
+ * sysdeps/powerpc/fpu/k_cosf.c: Likewise.
+ * sysdeps/powerpc/fpu/k_rem_pio2f.c: Likewise.
+ * sysdeps/powerpc/fpu/k_sinf.c: Likewise.
+ * sysdeps/powerpc/fpu/s_cosf.c: Likewise.
+ * sysdeps/powerpc/fpu/s_float_bitwise.h: Likewise.
+ * sysdeps/powerpc/fpu/s_isnan.c: Likewise.
+ * sysdeps/powerpc/fpu/s_rint.c: Likewise.
+ * sysdeps/powerpc/fpu/s_rintf.c: Likewise.
+ * sysdeps/powerpc/fpu/s_sinf.c: Likewise.
+ * sysdeps/powerpc/fpu/w_sqrt.c: Likewise.
+ * sysdeps/powerpc/fpu/w_sqrtf.c: Likewise.
+ * sysdeps/powerpc/powerpc32/fpu/s_llrintf.c: Likewise.
+ * sysdeps/powerpc/powerpc32/power4/fpu/slowexp.c: Likewise.
+ * sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c: Likewise.
+ * sysdeps/powerpc/powerpc64/power4/fpu/slowexp.c: Likewise.
+ * sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c: Likewise.
+ * sysdeps/powerpc/powerpc64/power4/fpu/w_sqrt.c: Likewise.
+ * sysdeps/powerpc/powerpc64/power4/fpu/w_sqrtf.c: Likewise.
+
+2012-03-09 Joseph Myers <joseph@codesourcery.com>
+
+ * sunrpc/rpc_cout.c: Remove __GNU_LIBRARY__ conditionals.
+ * sunrpc/rpc_main.c: Likewise.
+ * sunrpc/rpc_svcout.c: Likewise.
+
+2012-03-09 David S. Miller <davem@davemloft.net>
+
+ * include/math_private.h: New file.
+
+2012-03-09 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/bits/socket_type.h: New file.
+ * sysdeps/unix/sysv/linux/sparc/bits/socket_type.h: Likewise.
+ * sysdeps/unix/sysv/linux/bits/socket.h: Get enum __socket_type
+ from <bits/socket_type.h>.
+ (enum __socket_type): Don't define here.
+ * sysdeps/unix/sysv/linux/sparc/bits/socket.h: Remove.
+ * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
+ bits/socket_type.h.
+
+ [BZ #13566]
+ * libio/stdio.h (gets): Always declare for C++ up to C++11 without
+ checking __USE_GNU.
+
+ * Makerules ($(inst_includedir)/%.h): New rule.
+ * stdio-common/Makefile (headers): Add bits/stdio_lim.h.
+ (install-others): Remove variable setting.
+ ($(inst_includedir)/bits/stdio_lim.h): Remove rule.
+
+2012-03-08 Richard Henderson <rth@twiddle.net>
+
+ * sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrt): Convert
+ from macro to inline function; merge with the
+ !__LIBC_INTERNAL_MATH_INLINES version.
+ (__ieee754_sqrtf): Likewise.
+
+ * sysdeps/x86_64/fpu/math_private.h (__rint): Convert from macro
+ to inline function.
+ (__rintf, __floor, __floorf): Likewise.
+
+ * sysdeps/x86_64/fpu/math_private.h (__ieee754_sqrt): Convert from
+ macro to inline function.
+ (__ieee754_sqrtf, __ieee754_sqrtl): Likewise.
+
+ * sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h: Include <math_private.h>,
+ not <math/math_private.h>.
+
+2012-03-08 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c: Update
+ copyright year.
+ * sysdeps/unix/sysv/linux/sparc/sysdep.h: Likewise.
+
+2012-03-08 Thomas Schwinge <thomas@codesourcery.com>
+
+ * resolv/gai_misc.c (handle_requests): Fix struct timespec
+ normalization.
+ * rt/tst-cpuclock2.c (test_nanosleep): Likewise.
+ * sysdeps/pthread/aio_misc.c (handle_fildes_io): Likewise.
+
+2012-03-08 Ulrich Drepper <drepper@gmail.com>
+
+ * stdio-common/tst-fphex.c: Various cleanups. The macros cannot
+ be defined individually, they must be defined as a block. Define
+ S for printing a string instead of hidint the different by using a
+ macro for adding the 'l'.
+ * stdio-common/tst-fphex-wide.c: Adjust.
+
+2012-03-07 Marek Polacek <polacek@redhat.com>
+
+ * stdio-common/tst-long-dbl-fphex.c: Fix test for non ldbl-96 targets.
+
+2012-03-08 Marek Polacek <polacek@redhat.com>
+
+ [BZ #13806]
+ * stdio-common/Makefile (tests): Add tst-fphex-wide.
+ * stdio-common/tst-fphex.c: Define a few macros to make the
+ test reusable. Use them.
+ * stdio-common/tst-fphex-wide.c: New file.
+
+2012-03-08 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #6911]
+ * manual/macros.texi (gnusystems): New macro.
+ (nongnusystems): Likewise.
+ (gnulinuxhurdsystems): Likewise.
+ (gnuhurdsystems): Likewise..
+ (gnulinuxsystems): Likewise.
+ * manual/charset.texi: Use new macros or @theglibc{} to refer to
+ variants of the GNU system, not "GNU system".
+ * manual/conf.texi: Likewise.
+ * manual/errno.texi: Likewise. Update example of errno macro
+ expansion.
+ * manual/filesys.texi: Likewise.
+ (getumask): Document as specific to GNU/Hurd.
+ * manual/install.texi: Likewise. Reword some references to
+ GNU/Linux.
+ * manual/intro.texi: Likewise.
+ * manual/io.texi: Likewise.
+ (File Name Portability): Detail which constraints are inapplicable
+ to all GNU systems and which are only inapplicable to GNU/Hurd.
+ * manual/job.texi: Likewise.
+ * manual/llio.texi: Likewise.
+ (O_NOCTTY): Document as present on GNU/Linux.
+ * manual/maint.texi: Likewise.
+ * manual/memory.texi: Likewise.
+ * manual/pattern.texi: Likewise.
+ * manual/pipe.texi: Likewise.
+ * manual/process.texi: Likewise.
+ * manual/resource.texi: Likewise.
+ (RUSAGE_CHILDREN): Remove statement about specifying a particular
+ child on GNU/Hurd.
+ * manual/setjmp.texi: Likewise.
+ * manual/signal.texi: Likewise.
+ * manual/startup.texi: Likewise.
+ * manual/stdio.texi: Likewise.
+ * manual/terminal.texi: Likewise.
+ (ONLCR): Document as POSIX.
+ (OXTABS): Document availability on GNU/Linux as XTABS.
+ (ONOEOT): Document availability separately from other bits.
+ (VLNEXT, VDISCARD, VSTATUS): Document availability individually.
+ * manual/time.texi: Likewise.
+ * manual/users.texi: Likewise.
+ * INSTALL: Regenerated.
+ * sysdeps/gnu/errlist.c: Regenerated.
+
+ * aclocal.m4 (LIBC_TRY_LINK_STATIC): New macro.
+ * configure.in (libc_cv_preinit_array): Use LIBC_TRY_LINK_STATIC.
+ (libc_cv_ctors_header): Likewise. Use asm ("") instead of calling
+ puts.
+ * configure: Regenerated.
+
+2012-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/i386/configure.in (cpuid.h): Use AC_CHECK_HEADER with no
+ default includes instead of AC_HEADER_CHECK.
+ * sysdeps/i386/configure: Regenerated.
+
+ [BZ #10716]
+ * math/s_cacosh.c (__cacosh): Convert negative log results to 0.
+ * math/s_cacoshf.c (__cacoshf): Likewise.
+ * math/s_cacoshl.c (__cacoshl): Likewise.
+ * math/s_casinh.c (__casinh): Set signs of result from argument.
+ * math/s_casinhf.c (__casinhf): Likewise.
+ * math/s_casinhl.c (__casinhl): Likewise.
+ * math/libm-test.inc (cacos_test, cacosh_test, casin_test)
+ (casinh_test): Add more tests.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-07 Ulrich Drepper <drepper@gmail.com>
+
+ * po/zh_TW.po: Update from translation team.
+
+ * login/Makefile (distribute): Remove variable.
+ * catgets/Makefile: Likewise.
+ * mach/Makefile: Likewise.
+ * malloc/Makefile: Likewise.
+ * misc/Makefile: Likewise.
+ * iconv/Makefile: Likewise.
+ * nscd/Makefile: Likewise.
+ * hurd/Makefile: Likewise.
+ * manual/Makefile: Likewise.
+ * locale/Makefile: Likewise.
+ * intl/Makefile: Likewise.
+ * conform/Makefile: Likewise.
+ * nss/Makefile: Likewise.
+ * time/Makefile: Likewise.
+ * soft-fp/Makefile: Likewise.
+ * dirent/Makefile: Likewise.
+ * gmon/Makefile: Likewise.
+ * po/Makefile: Likewise.
+ * rt/Makefile: Likewise.
+ * socket/Makefile: Likewise.
+ * math/Makefile: Likewise.
+ * signal/Makefile: Likewise.
+ * debug/Makefile: Likewise.
+ * elf/Makefile: Likewise.
+ * timezone/Makefile: Likewise.
+ * stdlib/Makefile: Likewise.
+ * iconvdata/Makefile: Likewise.
+ * sunrpc/Makefile: Likewise.
+ * io/Makefile: Likewise.
+ * argp/Makefile: Likewise.
+ * inet/Makefile: Likewise.
+ * hesiod/Makefile: Likewise.
+ * grp/Makefile: Likewise.
+ * csu/Makefile: Likewise.
+ * wctype/Makefile: Likewise.
+ * crypt/Makefile: Likewise.
+ * libio/Makefile: Likewise.
+ * string/Makefile: Likewise.
+ * nis/Makefile: Likewise.
+ * resolv/Makefile: Likewise.
+ * stdio-common/Makefile: Likewise.
+ * wcsmbs/Makefile: Likewise.
+ * dlfcn/Makefile: Likewise.
+ * posix/Makefile: Likewise.
+
+ * timezone/Makefile: Don't install timezone files, just the programs
+ and scripts.
+
+2012-03-06 Ulrich Drepper <drepper@gmail.com>
+
+ * nss/databases.def: Add missing gshadow entry.
+
+ * stdio-common/vfprintf.c: Fix formatting. Missing copyright update.
+
+2012-03-06 Marek Polacek <polacek@redhat.com>
+
+ [BZ #13726]
+ * sysdeps/ieee754/ldbl-96/printf_fphex.c: Adjust position of wnumstr.
+ * sysdeps/x86_64/fpu/printf_fphex.c: Likewise.
+ * stdio-common/Makefile (tests): Add tst-long-dbl-fphex.
+ * stdio-common/tst-long-dbl-fphex.c: New file.
+
+2012-03-06 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
+ (set_obp_int): New function.
+ (get_obp_int): New function.
+ (__get_clockfreq_via_dev_openprom): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sysdep.h (INTERNAL_SYSCALL_ERROR_P):
+ Avoid unused variable warnings on 'val' and use builtin_expect.
+ (INLINE_SYSCALL): Don't wrap INTERNAL_SYSCALL_ERROR_P with
+ __builtin_expect.
+ (INLINE_CLONE_SYSCALL): Likewise.
+
+2012-03-05 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+2012-03-05 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+ * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: Drop exp(-x) term
+ only for |x| >= 40.
+ * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: Likewise.
+
+2012-03-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/gettimeofday.c (gettimeofday_ifunc):
+ Replace gettimeofday with __vdso_gettimeofday.
+
+ * sysdeps/unix/sysv/linux/x86_64/init-first.c
+ (_libc_vdso_platform_setup): Replace clock_gettime and getcpu with
+ __vdso_clock_gettime and __vdso_getcpu.
+
+ * sysdeps/unix/sysv/linux/x86_64/time.c (time_ifunc): Replace
+ time with __vdso_time.
+
+2012-03-05 Joseph Myers <joseph@codesourcery.com>
+
+ * manual/lang.texi (size_t): Note types to which size_t may be
+ equivalent with the GNU C Library, but do not describe when
+ differences between them are significant.
+
+2012-03-05 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+
+2012-03-05 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #3976]
+ * sysdeps/ieee754/dbl-64/e_pow.c: Include <fenv.h>.
+ (__ieee754_pow): Save and restore rounding mode and use
+ round-to-nearest for main computations.
+ * math/libm-test.inc (pow_test_tonearest): New function.
+ (pow_test_towardzero): Likewise.
+ (pow_test_downward): Likewise.
+ (pow_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #3976]
+ * math/libm-test.inc (cosh_test_tonearest): New function.
+ (cosh_test_towardzero): Likewise.
+ (cosh_test_downward): Likewise.
+ (cosh_test_upward): Likewise.
+ (sinh_test_tonearest): Likewise.
+ (sinh_test_towardzero): Likewise.
+ (sinh_test_downward): Likewise.
+ (sinh_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-05 Tom de Vries <tom@codesourcery.com>
+
+ * sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard): Ensure
+ default stack guard is set in last bytes.
+ * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard): Same.
+
+2012-03-05 Kees Cook <keescook@chromium.org>
+
+ * stdio-common/vfprintf.c (vfprintf): add missing errno settings.
+
+ [BZ #13656]
+ * stdio-common/vfprintf.c (vfprintf): Check for nargs overflow and
+ possibly allocate from heap instead of stack.
+ * stdio-common/bug-vfprintf-nargs.c: New file.
+ * stdio-common/Makefile (tests): Add nargs overflow test.
+
+2012-03-03 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+2012-03-03 Marek Polacek <polacek@redhat.com>
+
+ * include/sys/cdefs.h: Remove __GNUC_PREREQ macro.
+ * math/math_private.h: Likewise.
+ * stdlib/tst-strtod.c: Likewise.
+ * sysdeps/i386/i486/bits/atomic.h: Likewise.
+ * sysdeps/x86_64/bits/atomic.h: Likewise.
+
+2012-03-02 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_lrint.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_llrint.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_llrintf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_lrint.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_lrintf.S: New file.
+
+2012-03-02 Roland McGrath <roland@hack.frob.com>
+
+ [BZ #13792]
+ * manual/examples/README: New file, says the example source files
+ can be used under GPL>=2.
+ * manual/Makefile (%.c.texi): Eat the leading part of the file until a
+ line containing just "*/".
+ * manual/examples/add.c: Add copyright header (GPL>=2).
+ * manual/examples/argp-ex1.c: Likewise.
+ * manual/examples/argp-ex2.c: Likewise.
+ * manual/examples/argp-ex3.c: Likewise.
+ * manual/examples/argp-ex4.c: Likewise.
+ * manual/examples/atexit.c: Likewise.
+ * manual/examples/db.c: Likewise.
+ * manual/examples/dir.c: Likewise.
+ * manual/examples/dir2.c: Likewise.
+ * manual/examples/execinfo.c: Likewise.
+ * manual/examples/filecli.c: Likewise.
+ * manual/examples/filesrv.c: Likewise.
+ * manual/examples/fmtmsgexpl.c: Likewise.
+ * manual/examples/genpass.c: Likewise.
+ * manual/examples/inetcli.c: Likewise.
+ * manual/examples/inetsrv.c: Likewise.
+ * manual/examples/isockad.c: Likewise.
+ * manual/examples/longopt.c: Likewise.
+ * manual/examples/memopen.c: Likewise.
+ * manual/examples/memstrm.c: Likewise.
+ * manual/examples/mkfsock.c: Likewise.
+ * manual/examples/mkisock.c: Likewise.
+ * manual/examples/mygetpass.c: Likewise.
+ * manual/examples/pipe.c: Likewise.
+ * manual/examples/popen.c: Likewise.
+ * manual/examples/rprintf.c: Likewise.
+ * manual/examples/search.c: Likewise.
+ * manual/examples/select.c: Likewise.
+ * manual/examples/setjmp.c: Likewise.
+ * manual/examples/sigh1.c: Likewise.
+ * manual/examples/sigusr.c: Likewise.
+ * manual/examples/stpcpy.c: Likewise.
+ * manual/examples/strdupa.c: Likewise.
+ * manual/examples/strftim.c: Likewise.
+ * manual/examples/strncat.c: Likewise.
+ * manual/examples/subopt.c: Likewise.
+ * manual/examples/swapcontext.c: Likewise.
+ * manual/examples/termios.c: Likewise.
+ * manual/examples/testopt.c: Likewise.
+ * manual/examples/testpass.c: Likewise.
+ * manual/examples/timeval_subtract.c: Likewise.
+
+ [BZ #13792]
+ * manual/time.texi (Elapsed Time): Move timeval_subtract example
+ function to ...
+ * manual/timeval_subtract.c.texi: ... here, new file.
+
+2012-03-02 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update for recently added tests.
+
+2012-03-02 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #3976]
+ * sysdeps/ieee754/dbl-64/s_sin.c: Include <fenv.h>
+ (__sin): Save and restore rounding mode and use round-to-nearest
+ for all computations.
+ (__cos): Save and restore rounding mode and use round-to-nearest
+ for all computations.
+ * sysdeps/ieee754/dbl-64/s_tan.c: Include "math_private.h" and
+ <fenv.h>.
+ (tan): Save and restore rounding mode and use round-to-nearest for
+ all computations.
+ * math/libm-test.inc (cos_test_tonearest): New function.
+ (cos_test_towardzero): Likewise.
+ (cos_test_downward): Likewise.
+ (cos_test_upward): Likewise.
+ (sin_test_tonearest): Likewise.
+ (sin_test_towardzero): Likewise.
+ (sin_test_downward): Likewise.
+ (sin_test_upward): Likewise.
+ (tan_test_tonearest): Likewise.
+ (tan_test_towardzero): Likewise.
+ (tan_test_downward): Likewise.
+ (tan_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #10135]
+ * sysdeps/ieee754/dbl-64/s_scalbln.c (__scalbln): First test for
+ small n, then large n, before computing and testing k+n.
+ * sysdeps/ieee754/dbl-64/s_scalbn.c (__scalbn): Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c (__scalbln):
+ Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c (__scalbn):
+ Likewise.
+ * sysdeps/ieee754/flt-32/s_scalblnf.c (__scalblnf): Likewise.
+ * sysdeps/ieee754/flt-32/s_scalbnf.c (__scalbnf): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_scalblnl.c (__scalblnl): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_scalbnl.c (__scalbnl): Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c (__scalblnl): Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c (__scalbnl): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_scalblnl.c (__scalblnl): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_scalbnl.c (__scalbnl): Likewise.
+ * math/libm-test.inc (scalbn_test): Add more tests.
+ (scalbln_test): Likewise.
+
+ * manual/filesys.texi (mode_t): Describe constraints on size and
+ signedness, not exact equivalence to a particular type.
+ (ino_t): Likewise.
+ (ino64_t): Likewise.
+ (dev_t): Likewise.
+ (nlink_t): Likewise.
+ (blkcnt_t): Likewise.
+ (blkcnt64_t): Likewise.
+ * manual/llio.texi (off_t): Likewise.
+
+ [BZ #3976]
+ * sysdeps/ieee754/dbl-64/e_exp.c: Include <fenv.h>.
+ (__ieee754_exp): Save and restore rounding mode and use
+ round-to-nearest for all computations.
+ * math/libm-test.inc (exp_test_tonearest): New function.
+ (exp_test_towardzero): Likewise.
+ (exp_test_downward): Likewise.
+ (exp_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-01 Chris Demetriou <cgd@google.com>
+
+ * sysdeps/gnu/errlist-compat.awk: Don't depend on AWK internals to
+ have predictable order.
+
+2012-03-01 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c: Delete.
+
+ * sysdeps/sparc/sparc64/fpu/s_finite.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_finitef.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_isinf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_isinff.S: New file.
+
+ * sysdeps/sparc/sparc32/fpu/s_signbit.S: New file.
+ * sysdeps/sparc/sparc32/fpu/s_signbitf.S: New file.
+ * sysdeps/sparc/sparc32/fpu/s_signbitl.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_isnan.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_isnanf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_signbit.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_signbitf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_signbitl.S: New file.
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update.
+
+ * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Move...
+ * sysdeps/sparc/fpu/libm-test-ulps: to here.
+ * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Delete.
+
+ * sysdeps/sparc/crti.S: Remove HAVE_BINUTILS_GOTDATA checks.
+ * sysdeps/sparc/sparc32/dl-machine.h: Likewise.
+ * sysdeps/sparc/sparc32/elf/start.S: Likewise.
+ * sysdeps/sparc/sparc32/fpu/w_sqrt.S: Likewise.
+ * sysdeps/sparc/sparc32/fpu/w_sqrtf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S: Likewise.
+ * sysdeps/sparc/sparc64/dl-machine.h: Likewise.
+ * sysdeps/sparc/sparc64/elf/start.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/w_sqrt.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/w_sqrtf.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/brk.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise.
+ * config.h.in (HAVE_BINUTILS_GOTDATA): Delete.
+ * sysdeps/sparc/elf/configure.in: Remove binutils GOTDATA checks.
+ * sysdeps/sparc/elf/configure: Regenerated.
+
+2012-03-01 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (AS, LD): Require binutils 2.20 or later.
+ * configure: Regenerated.
+ * manual/install.texi (Tools for Compilation): Give binutils 2.20
+ as required minimum version.
+ * INSTALL: Regenerated.
+
+ [BZ #2541]
+ [BZ #4108]
+ * sysdeps/ieee754/flt-32/s_erff.c (__erfcf): Mask out one more bit
+ before squaring exponent.
+ * sysdeps/ieee754/ldbl-128ibm/s_erfl.c (__erfcl): Mask out whole
+ bottom long double and 27 bits of top long double before squaring
+ exponent.
+ * math/libm-test.inc (erfc_test): Add more tests.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/powerpc/fpu/libm-test-ulps: Likewise.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-01 Kai Tietz <ktietz@redhat.com>
+
+ * soft-fp/soft-fp.h (_FP_STRUCT_LAYOUT): New macro.
+ * soft-fp/quad.h (_FP_UNION_Q): Use _FP_STRUCT_LAYOUT on struct
+ containing bit-fields.
+ * soft-fp/extended.h (_FP_UNION_E): Likewise.
+ * soft-fp/single.h (_FP_UNION_S): Likewise.
+ * soft-fp/double.h (_FP_UNION_D): Likewise.
+
+2012-02-29 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13786]
+ * sysdeps/i386/i686/multiarch/strcmp.S [USE_AS_STRCASECMP_L]: Do
+ not include ../strcmp.S.
+ [USE_AS_STRNCASECMP_L]: Likewise.
+ * sysdeps/i386/i686/multiarch/strcasecmp_l-c.c
+ (__strcasecmp_l_ia32): Define as alias to __strcasecmp_l_nonascii.
+ * sysdeps/i386/i686/multiarch/strncase_l-c.c
+ (__strncasecmp_l_ia32): Define as alias to
+ __strncasecmp_l_nonascii.
+
+ [BZ #5794]
+ * math/libm-test.inc (expm1_test): Add test for bug 5794.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ * sysdeps/i386/fpu/libm-test-ulps: Reduce some expected errors.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-02-29 Jeff Law <law@redhat.com>
+
+ * resolv/res_query.c (__libc_res_nquerydomain): Avoid
+ out of bounds read.
+
+2012-02-29 Marek Polacek <polacek@redhat.com>
+
+ [BZ #13706]
+ * elf/rtld.c (dl_main): Always set l_used to 1 for vDSO.
+ * elf/Makefile: Add rules to run tst-unused-dep.out.
+
+2012-02-28 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/fpu/w_sqrt.S: New file.
+ * sysdeps/sparc/sparc32/fpu/w_sqrtf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/w_sqrt.S: New file.
+ * sysdeps/sparc/sparc64/fpu/w_sqrtf.S: New file.
+
+2012-02-29 Joseph Myers <joseph@codesourcery.com>
+
+ * math/libm-test.inc (llround_test): Move one test from
+ lround_test. Use TEST_f_L in moved test.
+ (lround_test): Move misplaced test to llround_test. Add testcase
+ from bug 2561.
+
+2012-02-28 Ulrich Drepper <drepper@gmail.com>
+
+ * sysdeps/x86_64/fpu/e_expf.S: New file.
+ Contributed by Dmitrieva Liubov <liubov.dmitrieva@gmail.com>.
+
+2012-02-28 Stanislav Brabec <sbrabec@suse.cz>
+
+ [BZ #13637]
+ * posix/regex_internal.c (re_string_skip_chars): Fix miscomputation
+ of remain_len that may cause incomplete multi-byte character and
+ false match.
+ * posix/bug-regex33.c: New file.
+ * posix/Makefile (tests): Add bug-regex33.
+
+2012-02-28 Joseph Myers <joseph@codesourcery.com>
+
+ * manual/macros.texi: New file.
+ * Makefile (INSTALL, NOTES): Depend on manual/macros.texi.
+ * manual/libc.texinfo: Include macros.texi.
+ * manual/creatute.texi: Likewise.
+ * manual/install.texi: Likewise.
+ * manual/arith.texi: Use macros @Theglibc{}, @theglibc{} and
+ @glibcadj{} in references to the GNU C Library.
+ * manual/charset.texi: Likewise.
+ * manual/conf.texi: Likewise.
+ * manual/contrib.texi: Likewise. Consistently use "GNU C Library"
+ when not using those macros.
+ * manual/creature.texi: Likewise.
+ * manual/crypt.texi: Likewise.
+ * manual/errno.texi: Likewise.
+ * manual/filesys.texi: Likewise.
+ * manual/header.texi: Likewise.
+ * manual/install.texi: Likewise.
+ * manual/intro.texi: Likewise.
+ * manual/io.texi: Likewise.
+ * manual/job.texi: Likewise.
+ * manual/lang.texi: Likewise.
+ * manual/libc.texiinfo: Likewise.
+ * manual/llio.texi: Likewise.
+ * manual/locale.texi: Likewise.
+ * manual/maint.texi: Likewise.
+ * manual/math.texi: Likewise.
+ * manual/memory.texi: Likewise.
+ * manual/message.texi: Likewise.
+ * manual/nss.texi: Likewise.
+ * manual/pattern.texi: Likewise.
+ * manual/process.texi: Likewise.
+ * manual/resource.texi: Likewise.
+ * manual/search.texi: Likewise.
+ * manual/setjmp.texi: Likewise.
+ * manual/signal.texi: Likewise.
+ * manual/socket.texi: Likewise.
+ * manual/startup.texi: Likewise.
+ * manual/stdio.texi: Likewise.
+ * manual/string.texi: Likewise.
+ * manual/sysinfo.texi: Likewise.
+ * manual/syslog.texi: Likewise.
+ * manual/terminal.texi: Likewise.
+ * manual/time.texi: Likewise.
+ * manual/users.texi: Likewise.
+ * INSTALL: Regenerated.
+ * NOTES: Regenerated.
+ * sysdeps/gnu/errlist.c: Regenerated.
+
+2012-02-28 Andreas Schwab <schwab@linux-m68k.org>
+
+ * include/dirent.h: Include <dirstream.h> before
+ <dirent/dirent.h>.
+
+2012-02-28 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/fpu/s_copysign.S: New file.
+ * sysdeps/sparc/sparc32/fpu/s_copysignf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_copysign.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_copysignf.S: New file.
+
+2012-02-27 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_floor.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_floorf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_floor.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_floorf.S: New file.
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S: Fix accidental use of
+ frame pointer instead of stack pointer relative arg slot.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/s_ceil.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/s_ceilf.S: Likewise.
+
+2012-02-27 Carlos O'Donell <carlos_odonell@mentor.com>
+
+ [BZ #3992]
+ * stdlib/fmtmsg.c: Use of uint32_t requires stdint.h.
+
+2012-02-27 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S: Fix comment formatting.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S: Likewise.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/s_ceil.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/s_ceilf.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/s_rint.S: Likewise.
+ * sysdeps/sparc/sparc64/fpu/s_rintf.S: Likewise.
+
+2012-02-27 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.in (CC): Restrict allowed GCC versions to 4.3 and
+ later. Allow versions 5-9.
+ * configure: Regenerated.
+ * manual/install.texi (Tools for Compilation): Give GCC 4.3 as
+ required minimum version and 4.6 as recommended version. Do not
+ mention bugs in GCC 2.7 and 2.8.
+ * INSTALL: Regenerated.
+
+2012-02-27 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S: New file.
+ * sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_ceil.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_ceilf.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_rint.S: New file.
+ * sysdeps/sparc/sparc64/fpu/s_rintf.S: New file.
+
+ * sysdeps/ieee754/ldbl-128/s_nearbyintl.c (__nearbyintl): Do not
+ manipulate bits before adding and subtracting TWO112[sx].
+ * sysdeps/ieee754/ldbl-128/s_rintl.c (__rintl): Likewise.
+
+2012-02-27 Roland McGrath <roland@hack.frob.com>
+
+ [BZ #13775]
+ * libio/bits/stdio-ldbl.h (vdprintf, dprintf): Put these under
+ [__USE_XOPEN2K8] rather than [__USE_GNU], to match the stdio.h decls.
+ * libio/stdio.h (vdprintf, dprintf): Remove comment about these not
+ being in POSIX, because they are in 1003.1-2008.
+
+ * rt/tst-aio.c: Include <fcntl.h>.
+ * rt/tst-aio7.c: Likewise.
+ * rt/tst-aio64.c: Likewise.
+
+ * stdio-common/tst-fmemopen.c (main): Remove spurious const.
+
+2012-02-27 Joseph Myers <joseph@codesourcery.com>
+
+ * manual/install.texi (--with-headers): Describe headers as
+ interface headers, not private headers.
+ (Specific advice for GNU/Linux systems): Describe use of headers
+ from "make headers_install", not private headers from older
+ kernels.
+ * INSTALL: Regenerated.
+ * sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION):
+ Change to 2.6.19.
+ * sysdeps/unix/sysv/linux/configure: Regenerated.
+
+ * manual/llio.texi (fclean): Remove documentation.
+
+ * manual/Makefile (libc-texi-generated): New variable. Include
+ version.texi.
+ (libc.dvi, libc.pdf, libc.info, libc/index.html): Depend on
+ $(libc-texi-generated), not duplicated list of files.
+ (version.texi, stamp-version): New rules.
+ (realclean): Remove $(libc-texi-generated), not individual files
+ from that list. Do not remove dir-add.texinfo.
+ * manual/libc.texinfo: Comment out uses of edition numbers and
+ references to printed manual. Remove last-updated dates.
+ (EDITION): Comment out.
+ (ISBN): Likewise.
+ (VERSION, UPDATED): Remove.
+ (version.texi): Include.
+
+2012-02-27 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/posix/spawni.c: Include <signal.h>.
+ * sysdeps/pthread/aio_cancel.c: Include <fcntl.h>.
+ * sysdeps/pthread/aio_fsync.c: Likewise.
+
+2012-02-26 Ulrich Drepper <drepper@gmail.com>
+
+ * conform/Makefile (tests): Run only when not cross-compiling and
+ when fast-check is not defined.
+
+ * conform/conformtest.pl: XPG7 and POSIX2008 require C99.
+ * conform/data/limits.h-data: Fixes for POSIX2008.
+ * conform/run-conformtest.sh: Run all tests.
+ * include/arpa/inet.h: Changes to allow conformtest.pl to use the
+ headers.
+ * include/bits/dlfcn.h: Likewise.
+ * include/langinfo.h: Likewise.
+ * include/monetary.h: Likewise.
+ * include/sys/poll.h: Likewise.
+
+ * io/fcntl.h: Define AT_NO_AUTOMOUNT and AT_EMPTY_PATH only
+ for __USE_GNU.
+ * posix/spawn.h: Define __need_sigset_t.
+ * posix/sys/wait.h: Don't include <sys/resource.h>, define id_t here.
+ * posix/unistd.h: Declare ctermid only for XPG before XPG6.
+ * rt/aio.h: Don't include fcntl.h and signal.h. Use bits/siginfo.h
+ to get sigevent_t only.
+ * sysdeps/unix/sysv/linux/bits/socket.h: Declare sendmmsg and recvmmsg
+ only for __USE_GNU.
+ * sysdeps/unix/sysv/linux/sparc/bits/socket.h: Likewise.
+ * sysdeps/unix/sysv/linux/bits/uio.h: Declare process_vm_readv and
+ process_vm_writev only for __USE_GNU.
+ * termios/termios.h: Declare tcgetsid also for POSIX2008.
+
+ * conform/Makefile: For now ignore errors from run-conformtest.
+ * conform/conformtest.pl: Simplify code. Add -ansi to CFLAGS for
+ POSIX to avoid namespace pollution. Don't prepend headers.
+ * conform/data/aio.h-data: Fixes for POSIX testing.
+ * conform/data/fcntl.h-data: Likewise.
+ * conform/data/glob.h-data: Likewise.
+ * conform/data/grp.h-data: Likewise.
+ * conform/data/pthread.h-data: Likewise.
+ * conform/data/pwd.h-data: Likewise.
+ * conform/data/signal.h-data: Likewise.
+ * conform/data/spawn.h-data: Likewise.
+ * conform/data/stdio.h-data: Likewise.
+ * conform/data/stdlib.h-data: Likewise.
+ * conform/data/stropts.h-data: Likewise.
+ * conform/data/sys/mman.h-data: Likewise.
+ * conform/data/sys/stat.h-data: Likewise.
+ * conform/data/sys/types.h-data: Likewise.
+ * conform/data/sys/wait.h-data: Likewise.
+ * conform/data/time.h-data: Likewise.
+ * conform/data/unistd.h-data: Likewise.
+ * conform/data/utime.h-data: Likewise.
+
+ * io/sys/stat.h: fchmod was always in POSIX.
+ * posix/sys/wait.h: Include <sys/resource.h> only for waitid.
+ * posix/unistd.h: fsync and ftruncate were in early POSIX as well.
+ * rt/aio.h: Define __need_timespec before including <time.h>.
+ * sysdeps/unix/sysv/linux/bits/siginfo.h: Don't name siginfo_t
+ struct. Add forward declaration of pthread_attr_t and use it in
+ sigevent.
+ * sysdeps/unix/sysv/linux/s390/bits/siginfo.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise.
+ * sysdeps/unix/sysv/linux/bits/time.h: Don't let __STRICT_ANSI__
+ always remove CLK_TCK definition.
+
+2012-02-26 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/ieee754/dbl-64/k_tan.c: Replace with empty file.
+
2012-02-25 Ulrich Drepper <drepper@gmail.com>
+ * conform/run-conformtest.sh: New file.
+ * conform/Makefile: Run run-conformtest for tests.
+ * conform/conformtest.pl: Many bug fixes. Add ISO C99, ISO C11
+ support.
+
+ * conform/data/uchar.h-data: New file.
+ * conform/data/aio.h-data: Fixes for ISO C and POSIX 1995 testing.
+ * conform/data/arpa/inet.h-data: Likewise.
+ * conform/data/assert.h-data: Likewise.
+ * conform/data/complex.h-data: Likewise.
+ * conform/data/cpio.h-data: Likewise.
+ * conform/data/ctype.h-data: Likewise.
+ * conform/data/dirent.h-data: Likewise.
+ * conform/data/dlfcn.h-data: Likewise.
+ * conform/data/errno.h-data: Likewise.
+ * conform/data/fcntl.h-data: Likewise.
+ * conform/data/float.h-data: Likewise.
+ * conform/data/fmtmsg.h-data: Likewise.
+ * conform/data/fnmatch.h-data: Likewise.
+ * conform/data/ftw.h-data: Likewise.
+ * conform/data/glob.h-data: Likewise.
+ * conform/data/grp.h-data: Likewise.
+ * conform/data/iconv.h-data: Likewise.
+ * conform/data/inttypes.h-data: Likewise.
+ * conform/data/langinfo.h-data: Likewise.
+ * conform/data/libgen.h-data: Likewise.
+ * conform/data/limits.h-data: Likewise.
+ * conform/data/locale.h-data: Likewise.
+ * conform/data/math.h-data: Likewise.
+ * conform/data/monetary.h-data: Likewise.
+ * conform/data/mqueue.h-data: Likewise.
+ * conform/data/ndbm.h-data: Likewise.
+ * conform/data/net/if.h-data: Likewise.
+ * conform/data/netdb.h-data: Likewise.
+ * conform/data/netinet/in.h-data: Likewise.
+ * conform/data/nl_types.h-data: Likewise.
+ * conform/data/poll.h-data: Likewise.
+ * conform/data/pthread.h-data: Likewise.
+ * conform/data/pwd.h-data: Likewise.
+ * conform/data/regex.h-data: Likewise.
+ * conform/data/sched.h-data: Likewise.
+ * conform/data/search.h-data: Likewise.
+ * conform/data/semaphore.h-data: Likewise.
+ * conform/data/setjmp.h-data: Likewise.
+ * conform/data/signal.h-data: Likewise.
+ * conform/data/spawn.h-data: Likewise.
+ * conform/data/stdarg.h-data: Likewise.
+ * conform/data/stdio.h-data: Likewise.
+ * conform/data/stdlib.h-data: Likewise.
+ * conform/data/string.h-data: Likewise.
+ * conform/data/strings.h-data: Likewise.
+ * conform/data/stropts.h-data: Likewise.
+ * conform/data/sys/ipc.h-data: Likewise.
+ * conform/data/sys/mman.h-data: Likewise.
+ * conform/data/sys/msg.h-data: Likewise.
+ * conform/data/sys/resource.h-data: Likewise.
+ * conform/data/sys/select.h-data: Likewise.
+ * conform/data/sys/sem.h-data: Likewise.
+ * conform/data/sys/shm.h-data: Likewise.
+ * conform/data/sys/socket.h-data: Likewise.
+ * conform/data/sys/stat.h-data: Likewise.
+ * conform/data/sys/statvfs.h-data: Likewise.
+ * conform/data/sys/time.h-data: Likewise.
+ * conform/data/sys/timeb.h-data: Likewise.
+ * conform/data/sys/times.h-data: Likewise.
+ * conform/data/sys/types.h-data: Likewise.
+ * conform/data/sys/uio.h-data: Likewise.
+ * conform/data/sys/un.h-data: Likewise.
+ * conform/data/sys/utsname.h-data: Likewise.
+ * conform/data/sys/wait.h-data: Likewise.
+ * conform/data/syslog.h-data: Likewise.
+ * conform/data/tar.h-data: Likewise.
+ * conform/data/termios.h-data: Likewise.
+ * conform/data/utime.h-data: Likewise.
+ * conform/data/utmpx.h-data: Likewise.
+ * conform/data/varargs.h-data: Likewise.
+ * conform/data/wchar.h-data: Likewise.
+ * conform/data/wctype.h-data: Likewise.
+ * conform/data/wordexp.h-data: Likewise.
+
+ * include/stropts.h: New file.
+ * include/uchar.h: New file.
+ * include/aio.h: Changes to allow conformtest.pl to use the headers.
+ * include/assert.h: Likewise.
+ * include/ctype.h: Likewise.
+ * include/dirent.h: Likewise.
+ * include/dlfcn.h: Likewise.
+ * include/fcntl.h: Likewise.
+ * include/fnmatch.h: Likewise.
+ * include/glob.h: Likewise.
+ * include/grp.h: Likewise.
+ * include/libio.h: Likewise.
+ * include/locale.h: Likewise.
+ * include/math.h: Likewise.
+ * include/net/if.h: Likewise.
+ * include/netdb.h: Likewise.
+ * include/netinet/in.h: Likewise.
+ * include/pthread.h: Likewise.
+ * include/pwd.h: Likewise.
+ * include/regex.h: Likewise.
+ * include/sched.h: Likewise.
+ * include/search.h: Likewise.
+ * include/setjmp.h: Likewise.
+ * include/signal.h: Likewise.
+ * include/stdio.h: Likewise.
+ * include/stdlib.h: Likewise.
+ * include/string.h: Likewise.
+ * include/sys/cdefs.h: Likewise.
+ * include/sys/mman.h: Likewise.
+ * include/sys/msg.h: Likewise.
+ * include/sys/resource.h: Likewise.
+ * include/sys/select.h: Likewise.
+ * include/sys/socket.h: Likewise.
+ * include/sys/stat.h: Likewise.
+ * include/sys/statvfs.h: Likewise.
+ * include/sys/time.h: Likewise.
+ * include/sys/times.h: Likewise.
+ * include/sys/uio.h: Likewise.
+ * include/sys/utsname.h: Likewise.
+ * include/sys/wait.h: Likewise.
+ * include/termios.h: Likewise.
+ * include/time.h: Likewise.
+ * include/ulimit.h: Likewise.
+ * include/unistd.h: Likewise.
+ * include/utime.h: Likewise.
+ * include/wchar.h: Likewise.
+ * include/wctype.h: Likewise.
+ * include/wordexp.h: Likewise.
+
+ * posix/tar.h (TSVTX): Should not be visible for POSIX before 2008.
+
* time/time.h: TIME_UTC must be a macro.
Make timespec_get available for ISO C11 only as well.
diff --git a/INSTALL b/INSTALL
index 0b86eea709..e0433d459b 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,24 +6,24 @@ the top level of the source tree. This file answers common questions
and describes problems you may experience with compilation and
installation. It is updated more frequently than this manual.
- Features can be added to GNU Libc via "add-on" bundles. These are
-separate tar files, which you unpack into the top level of the source
-tree. Then you give `configure' the `--enable-add-ons' option to
-activate them, and they will be compiled into the library.
+ Features can be added to the GNU C Library via "add-on" bundles.
+These are separate tar files, which you unpack into the top level of
+the source tree. Then you give `configure' the `--enable-add-ons'
+option to activate them, and they will be compiled into the library.
You will need recent versions of several GNU tools: definitely GCC
and GNU Make, and possibly others. *Note Tools for Compilation::,
below.
-Configuring and compiling GNU Libc
-==================================
+Configuring and compiling the GNU C Library
+===========================================
-GNU libc cannot be compiled in the source directory. You must build it
-in a separate build directory. For example, if you have unpacked the
-glibc sources in `/src/gnu/glibc-VERSION', create a directory
-`/src/gnu/glibc-build' to put the object files in. This allows
-removing the whole build directory in case an error occurs, which is
-the safest way to get a fresh start and should always be done.
+The GNU C Library cannot be compiled in the source directory. You must
+build it in a separate build directory. For example, if you have
+unpacked the GNU C Library sources in `/src/gnu/glibc-VERSION', create
+a directory `/src/gnu/glibc-build' to put the object files in. This
+allows removing the whole build directory in case an error occurs,
+which is the safest way to get a fresh start and should always be done.
From your object directory, run the shell script `configure' located
at the top level of the source tree. In the scenario above, you'd type
@@ -36,10 +36,10 @@ directory, especially some files in the manual subdirectory.
`configure' takes many options, but the only one that is usually
mandatory is `--prefix'. This option tells `configure' where you want
-glibc installed. This defaults to `/usr/local', but the normal setting
-to install as the standard system library is `--prefix=/usr' for
-GNU/Linux systems and `--prefix=' (an empty prefix) for GNU/Hurd
-systems.
+the GNU C Library installed. This defaults to `/usr/local', but the
+normal setting to install as the standard system library is
+`--prefix=/usr' for GNU/Linux systems and `--prefix=' (an empty prefix)
+for GNU/Hurd systems.
It may also be useful to set the CC and CFLAGS variables in the
environment when running `configure'. CC selects the C compiler that
@@ -59,15 +59,16 @@ will be used, and CFLAGS sets optimization options for the compiler.
`--with-headers=DIRECTORY'
Look for kernel header files in DIRECTORY, not `/usr/include'.
- Glibc needs information from the kernel's private header files.
- Glibc will normally look in `/usr/include' for them, but if you
- specify this option, it will look in DIRECTORY instead.
+ The GNU C Library needs information from the kernel's header files
+ describing the interface to the kernel. The GNU C Library will
+ normally look in `/usr/include' for them, but if you specify this
+ option, it will look in DIRECTORY instead.
This option is primarily of use on a system where the headers in
- `/usr/include' come from an older version of glibc. Conflicts can
- occasionally happen in this case. You can also use this option if
- you want to compile glibc with a newer set of kernel headers than
- the ones found in `/usr/include'.
+ `/usr/include' come from an older version of the GNU C Library.
+ Conflicts can occasionally happen in this case. You can also use
+ this option if you want to compile the GNU C Library with a newer
+ set of kernel headers than the ones found in `/usr/include'.
`--enable-add-ons[=LIST]'
Specify add-on packages to include in the build. If this option is
@@ -92,7 +93,7 @@ will be used, and CFLAGS sets optimization options for the compiler.
Use the binutils (assembler and linker) in `DIRECTORY', not the
ones the C compiler would default to. You can use this option if
the default binutils on your system cannot deal with all the
- constructs in the GNU C library. In that case, `configure' will
+ constructs in the GNU C Library. In that case, `configure' will
detect the problem and suppress these constructs, so that the
library will still be usable, but functionality may be lost--for
example, you can't build a shared libc with old binutils.
@@ -131,10 +132,10 @@ will be used, and CFLAGS sets optimization options for the compiler.
`--host=HOST-SYSTEM'
These options are for cross-compiling. If you specify both
options and BUILD-SYSTEM is different from HOST-SYSTEM, `configure'
- will prepare to cross-compile glibc from BUILD-SYSTEM to be used
- on HOST-SYSTEM. You'll probably need the `--with-headers' option
- too, and you may have to override CONFIGURE's selection of the
- compiler and/or binutils.
+ will prepare to cross-compile the GNU C Library from BUILD-SYSTEM
+ to be used on HOST-SYSTEM. You'll probably need the
+ `--with-headers' option too, and you may have to override
+ CONFIGURE's selection of the compiler and/or binutils.
If you only specify `--host', `configure' will prepare for a
native compile but use what you specify instead of guessing what
@@ -166,8 +167,8 @@ facilities, type `make check'. If it does not complete successfully,
do not use the built library, and report a bug after verifying that the
problem is not already known. *Note Reporting Bugs::, for instructions
on reporting bugs. Note that some of the tests assume they are not
-being run by `root'. We recommend you compile and test glibc as an
-unprivileged user.
+being run by `root'. We recommend you compile and test the GNU C
+Library as an unprivileged user.
Before reporting bugs make sure there is no problem with your system.
The tests (and later installation) use some pre-existing files of the
@@ -187,7 +188,7 @@ build directory and add values as appropriate for your system. The
file is included and parsed by `make' and has to follow the conventions
for makefiles.
- It is easy to configure the GNU C library for cross-compilation by
+ It is easy to configure the GNU C Library for cross-compilation by
setting a few variables in `configparms'. Set `CC' to the
cross-compiler for the target you configured the library for; it is
important to use this same `CC' value when running `configure', like
@@ -203,16 +204,16 @@ Installing the C Library
To install the library and its header files, and the Info files of the
manual, type `env LANGUAGE=C LC_ALL=C make install'. This will build
things, if necessary, before installing them; however, you should still
-compile everything first. If you are installing glibc as your primary
-C library, we recommend that you shut the system down to single-user
-mode first, and reboot afterward. This minimizes the risk of breaking
-things when the library changes out from underneath.
+compile everything first. If you are installing the GNU C Library as
+your primary C library, we recommend that you shut the system down to
+single-user mode first, and reboot afterward. This minimizes the risk
+of breaking things when the library changes out from underneath.
`make install' will do the entire job of upgrading from a previous
-installation of glibc 2.x. There may sometimes be headers left behind
-from the previous installation, but those are generally harmless. If
-you want to avoid leaving headers behind you can do things in the
-following order.
+installation of the GNU C Library version 2.x. There may sometimes be
+headers left behind from the previous installation, but those are
+generally harmless. If you want to avoid leaving headers behind you
+can do things in the following order.
You must first build the library (`make'), optionally check it
(`make check'), switch the include directories and then install (`make
@@ -223,19 +224,20 @@ library requires the ability to compile and run programs against the old
library. The new `/usr/include', after switching the include
directories and before installing the library should contain the Linux
headers, but nothing else. If you do this, you will need to restore
-any headers from non-glibc libraries youself after installing the
-library.
+any headers from libraries other than the GNU C Library yourself after
+installing the library.
- You can install glibc somewhere other than where you configured it
-to go by setting the `install_root' variable on the command line for
-`make install'. The value of this variable is prepended to all the
-paths for installation. This is useful when setting up a chroot
-environment or preparing a binary distribution. The directory should be
-specified with an absolute file name.
+ You can install the GNU C Library somewhere other than where you
+configured it to go by setting the `install_root' variable on the
+command line for `make install'. The value of this variable is
+prepended to all the paths for installation. This is useful when
+setting up a chroot environment or preparing a binary distribution.
+The directory should be specified with an absolute file name.
- Glibc includes a daemon called `nscd', which you may or may not want
-to run. `nscd' caches name service lookups; it can dramatically
-improve performance with NIS+, and may help with DNS as well.
+ The GNU C Library includes a daemon called `nscd', which you may or
+may not want to run. `nscd' caches name service lookups; it can
+dramatically improve performance with NIS+, and may help with DNS as
+well.
One auxiliary program, `/usr/libexec/pt_chown', is installed setuid
`root'. This program is invoked by the `grantpt' function; it sets the
@@ -248,12 +250,12 @@ this program; otherwise you do. The source for `pt_chown' is in
`login/programs/pt_chown.c'.
After installation you might want to configure the timezone and
-locale installation of your system. The GNU C library comes with a
+locale installation of your system. The GNU C Library comes with a
locale database which gets configured with `localedef'. For example, to
set up a German locale with name `de_DE', simply issue the command
`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales
-that are supported by glibc, you can issue from your build directory the
-command `make localedata/install-locales'.
+that are supported by the GNU C Library, you can issue from your build
+directory the command `make localedata/install-locales'.
To configure the locally used timezone, set the `TZ' environment
variable. The script `tzselect' helps you to select the right value.
@@ -268,7 +270,7 @@ Recommended Tools for Compilation
=================================
We recommend installing the following GNU tools before attempting to
-build the GNU C library:
+build the GNU C Library:
* GNU `make' 3.79 or newer
@@ -278,29 +280,20 @@ build the GNU C library:
recommend GNU `make' version 3.79. All earlier versions have
severe bugs or lack features.
- * GCC 3.4 or newer, GCC 4.1 recommended
+ * GCC 4.3 or newer, GCC 4.6 recommended
- GCC 3.4 or higher is required; as of this writing, GCC 4.4 is the
- compiler we advise to use for current versions. On certain
- machines including `powerpc64', compilers prior to GCC 4.0 have
- bugs that prevent them compiling the C library code. On other
- machines, GCC 4.1 is required to build the C library with support
- for the correct `long double' type format; these include `powerpc'
- (32 bit), `s390' and `s390x'. For other architectures special
- compiler-provided headers are needed (like `cpuid.h' on x86) which
- only come with later compiler versions.
+ GCC 4.3 or higher is required; as of this writing, GCC 4.6 is the
+ compiler we advise to use to build the GNU C Library.
- You can use whatever compiler you like to compile programs that
- use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in
- their floating-point support that may be triggered by the math
- library.
+ You can use whatever compiler you like to compile programs that use
+ the GNU C Library.
Check the FAQ for any special compiler issues on particular
platforms.
- * GNU `binutils' 2.15 or later
+ * GNU `binutils' 2.20 or later
- You must use GNU `binutils' (as and ld) to build the GNU C library.
+ You must use GNU `binutils' (as and ld) to build the GNU C Library.
No other assembler or linker has the necessary functionality at the
moment.
@@ -346,44 +339,43 @@ patches, although we try to avoid this.
Specific advice for GNU/Linux systems
=====================================
-If you are installing GNU libc on a GNU/Linux system, you need to have
-the header files from a 2.2 or newer kernel around for reference. For
-some architectures, like ia64, sh and hppa, you need at least headers
-from kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64). You do not need to
-use that kernel, just have its headers where glibc can access at them.
-The easiest way to do this is to unpack it in a directory such as
-`/usr/src/linux-2.2.1'. In that directory, run `make config' and
-accept all the defaults. Then run `make include/linux/version.h'.
-Finally, configure glibc with the option
-`--with-headers=/usr/src/linux-2.2.1/include'. Use the most recent
-kernel you can get your hands on.
-
- An alternate tactic is to unpack the 2.2 kernel and run `make
-config' as above; then, rename or delete `/usr/include', create a new
-`/usr/include', and make symbolic links of `/usr/include/linux' and
-`/usr/include/asm' into the kernel sources. You can then configure
-glibc with no special options.
-
- After installing GNU libc, you may need to remove or rename
-`/usr/include/linux' and `/usr/include/asm', and replace them with
-copies of `include/linux' and `include/asm-$ARCHITECTURE' taken from
-the Linux source package which supplied kernel headers for building the
-library. ARCHITECTURE will be the machine architecture for which the
-library was built, such as `i386' or `alpha'. You do not need to do
-this if you did not specify an alternate kernel header source using
-`--with-headers'. The intent here is that these directories should be
-copies of, *not* symlinks to, the kernel headers used to build the
-library.
-
- Note that `/usr/include/net' and `/usr/include/scsi' should *not* be
-symlinks into the kernel sources. GNU libc provides its own versions
-of these files.
-
- GNU/Linux expects some components of the libc installation to be in
-`/lib' and some in `/usr/lib'. This is handled automatically if you
-configure glibc with `--prefix=/usr'. If you set some other prefix or
-allow it to default to `/usr/local', then all the components are
-installed there.
+If you are installing the GNU C Library on GNU/Linux systems, you need
+to have the header files from a 2.6.19.1 or newer kernel around for
+reference. These headers must be installed using `make
+headers_install'; the headers present in the kernel source directory
+are not suitable for direct use by the GNU C Library. You do not need
+to use that kernel, just have its headers installed where the GNU C
+Library can access them, referred to here as INSTALL-DIRECTORY. The
+easiest way to do this is to unpack it in a directory such as
+`/usr/src/linux-VERSION'. In that directory, run `make headers_install
+INSTALL_HDR_PATH=INSTALL-DIRECTORY'. Finally, configure the GNU C
+Library with the option `--with-headers=INSTALL-DIRECTORY/include'.
+Use the most recent kernel you can get your hands on. (If you are
+cross-compiling the GNU C Library, you need to specify
+`ARCH=ARCHITECTURE' in the `make headers_install' command, where
+ARCHITECTURE is the architecture name used by the Linux kernel, such as
+`x86' or `powerpc'.)
+
+ After installing the GNU C Library, you may need to remove or rename
+directories such as `/usr/include/linux' and `/usr/include/asm', and
+replace them with copies of directories such as `linux' and `asm' from
+`INSTALL-DIRECTORY/include'. All directories present in
+`INSTALL-DIRECTORY/include' should be copied, except that the GNU C
+Library provides its own version of `/usr/include/scsi'; the files
+provided by the kernel should be copied without replacing those
+provided by the GNU C Library. The `linux', `asm' and `asm-generic'
+directories are required to compile programs using the GNU C Library;
+the other directories describe interfaces to the kernel but are not
+required if not compiling programs using those interfaces. You do not
+need to copy kernel headers if you did not specify an alternate kernel
+header source using `--with-headers'.
+
+ The Filesystem Hierarchy Standard for GNU/Linux systems expects some
+components of the GNU C Library installation to be in `/lib' and some
+in `/usr/lib'. This is handled automatically if you configure the GNU
+C Library with `--prefix=/usr'. If you set some other prefix or allow
+it to default to `/usr/local', then all the components are installed
+there.
You cannot use `nscd' with 2.0 kernels, due to bugs in the
kernel-side thread support. `nscd' happens to hit these bugs
@@ -393,7 +385,7 @@ program.
Reporting Bugs
==============
-There are probably bugs in the GNU C library. There are certainly
+There are probably bugs in the GNU C Library. There are certainly
errors and omissions in this manual. If you report them, they will get
fixed. If you don't, no one will ever know about them and they will
remain unfixed for all eternity, if not longer.
@@ -407,14 +399,14 @@ includes a patch or a hint on solving the problem.
To report a bug, first you must find it. With any luck, this will
be the hard part. Once you've found a bug, make sure it's really a
-bug. A good way to do this is to see if the GNU C library behaves the
+bug. A good way to do this is to see if the GNU C Library behaves the
same way some other C library does. If so, probably you are wrong and
the libraries are right (but not necessarily). If not, one of the
-libraries is probably wrong. It might not be the GNU library. Many
+libraries is probably wrong. It might not be the GNU C Library. Many
historical Unix C libraries permit things that we don't, such as
closing a file twice.
- If you think you have found some way in which the GNU C library does
+ If you think you have found some way in which the GNU C Library does
not conform to the ISO and POSIX standards (*note Standards and
Portability::), that is definitely a bug. Report it!
diff --git a/Makefile b/Makefile
index 10a2cce4ea..fc6001d1fd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,4 @@
-# Copyright (C) 1991-2002,2003,2004,2005,2006,2008,2009,2011
-# Free Software Foundation, Inc.
+# Copyright (C) 1991-2012 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
@@ -364,7 +363,7 @@ TAGS:
generated := $(generated) stubs.h
-files-for-dist := README FAQ INSTALL NOTES configure ChangeLog NEWS
+files-for-dist := README FAQ INSTALL configure ChangeLog NEWS
# Regenerate stuff, then error if these things are not committed yet.
dist-prepare: $(files-for-dist)
@@ -398,8 +397,7 @@ define format-me
makeinfo --no-validate --plaintext --no-number-sections $< -o $@
-chmod a-w $@
endef
-INSTALL: manual/install.texi; $(format-me)
-NOTES: manual/creature.texi; $(format-me)
+INSTALL: manual/install.texi manual/macros.texi; $(format-me)
manual/dir-add.texi manual/dir-add.info: FORCE
$(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
FAQ: scripts/gen-FAQ.pl FAQ.in
diff --git a/Makerules b/Makerules
index 7d18f890fd..d184be6d20 100644
--- a/Makerules
+++ b/Makerules
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2012 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
@@ -1068,6 +1068,8 @@ ifdef headers
# headers in the sysdeps tree.
$(inst_includedir)/%.h: $(objpfx)%.h $(+force)
$(do-install)
+$(inst_includedir)/%.h: $(common-objpfx)%.h $(+force)
+ $(do-install)
$(inst_includedir)/%.h: %.h $(+force)
$(do-install)
$(inst_includedir)/%.h: $(..)include/%.h $(+force)
@@ -1120,14 +1122,6 @@ $(BUILD_CC) $($(basename $(<F))-CFLAGS) $(ALL_BUILD_CFLAGS) \
$(firstword $(filter /%,$< $(shell pwd)/$<)) -o $(@F)
endef
-# Command to compile $< in $(common-objdir) using the native libraries.
-# We must cd to $(objdir) anyway so that $(..)config.h is valid.
-define common-objdir-compile
-$(patsubst %/,cd % &&,$(objpfx)) \
-$(BUILD_CC) $($(basename $(<F))-CFLAGS) $(ALL_BUILD_CFLAGS) \
- $(firstword $(filter /%,$< $(shell pwd)/$<)) -o $(..)$(@F)
-endef
-
# We always want to use configuration definitions.
# Note that this is only used for commands running in $(objpfx).
ALL_BUILD_CFLAGS = $(BUILD_CFLAGS) -include $(..)config.h
diff --git a/NEWS b/NEWS
index 82d32c9c3f..ec8ecdb45d 100644
--- a/NEWS
+++ b/NEWS
@@ -9,11 +9,16 @@ Version 2.16
* The following bugs are resolved with this release:
- 174, 350, 411, 2547, 2548, 3335, 4026, 4596, 4822, 5077, 5461, 5805, 5993,
- 6884, 6907, 9739, 9902, 10110, 10140, 10210, 11174, 11322, 11365, 11494,
- 12047, 13058, 13525, 13526, 13527, 13528, 13529, 13530, 13531, 13532,
- 13533, 13547, 13551, 13552, 13553, 13555, 13559, 13583, 13618, 13695,
- 13704, 13738
+ 174, 350, 369, 411, 2541, 2547, 2548, 2551, 2552, 2553, 2554, 2562, 2563,
+ 2565, 2566, 2576, 2678, 3335, 3866, 3868, 3976, 3992, 4026, 4108, 4596,
+ 4822, 5077, 5461, 5805, 5993, 6471, 6730, 6884, 6907, 6911, 9739, 9902,
+ 10110, 10135, 10140, 10210, 10545, 10716, 11174, 11322, 11365, 11451,
+ 11494, 12047, 13058, 13525, 13526, 13527, 13528, 13529, 13530, 13531,
+ 13532, 13533, 13547, 13551, 13552, 13553, 13555, 13559, 13566, 13583,
+ 13618, 13637, 13656, 13658, 13673, 13695, 13704, 13706, 13726, 13738,
+ 13760, 13786, 13792, 13806, 13824, 13840, 13841, 13844, 13846, 13851,
+ 13852, 13854, 13871, 13879, 13883, 13892, 13910, 13911, 13912, 13913,
+ 13915, 13916, 13917, 13918, 13919, 13920, 13921
* ISO C11 support:
diff --git a/NOTES b/NOTES
deleted file mode 100644
index 9bef2425bd..0000000000
--- a/NOTES
+++ /dev/null
@@ -1,223 +0,0 @@
-Feature Test Macros
--------------------
-
-The exact set of features available when you compile a source file is
-controlled by which "feature test macros" you define.
-
- If you compile your programs using `gcc -ansi', you get only the
-ISO C library features, unless you explicitly request additional
-features by defining one or more of the feature macros. *Note GNU CC
-Command Options: (gcc.info)Invoking GCC, for more information about GCC
-options.
-
- You should define these macros by using `#define' preprocessor
-directives at the top of your source code files. These directives
-_must_ come before any `#include' of a system header file. It is best
-to make them the very first thing in the file, preceded only by
-comments. You could also use the `-D' option to GCC, but it's better
-if you make the source files indicate their own meaning in a
-self-contained way.
-
- This system exists to allow the library to conform to multiple
-standards. Although the different standards are often described as
-supersets of each other, they are usually incompatible because larger
-standards require functions with names that smaller ones reserve to the
-user program. This is not mere pedantry -- it has been a problem in
-practice. For instance, some non-GNU programs define functions named
-`getline' that have nothing to do with this library's `getline'. They
-would not be compilable if all features were enabled indiscriminately.
-
- This should not be used to verify that a program conforms to a
-limited standard. It is insufficient for this purpose, as it will not
-protect you from including header files outside the standard, or
-relying on semantics undefined within the standard.
-
- -- Macro: _POSIX_SOURCE
- If you define this macro, then the functionality from the POSIX.1
- standard (IEEE Standard 1003.1) is available, as well as all of the
- ISO C facilities.
-
- The state of `_POSIX_SOURCE' is irrelevant if you define the macro
- `_POSIX_C_SOURCE' to a positive integer.
-
- -- Macro: _POSIX_C_SOURCE
- Define this macro to a positive integer to control which POSIX
- functionality is made available. The greater the value of this
- macro, the more functionality is made available.
-
- If you define this macro to a value greater than or equal to `1',
- then the functionality from the 1990 edition of the POSIX.1
- standard (IEEE Standard 1003.1-1990) is made available.
-
- If you define this macro to a value greater than or equal to `2',
- then the functionality from the 1992 edition of the POSIX.2
- standard (IEEE Standard 1003.2-1992) is made available.
-
- If you define this macro to a value greater than or equal to
- `199309L', then the functionality from the 1993 edition of the
- POSIX.1b standard (IEEE Standard 1003.1b-1993) is made available.
-
- Greater values for `_POSIX_C_SOURCE' will enable future extensions.
- The POSIX standards process will define these values as necessary,
- and the GNU C Library should support them some time after they
- become standardized. The 1996 edition of POSIX.1 (ISO/IEC 9945-1:
- 1996) states that if you define `_POSIX_C_SOURCE' to a value
- greater than or equal to `199506L', then the functionality from
- the 1996 edition is made available.
-
- -- Macro: _BSD_SOURCE
- If you define this macro, functionality derived from 4.3 BSD Unix
- is included as well as the ISO C, POSIX.1, and POSIX.2 material.
-
- Some of the features derived from 4.3 BSD Unix conflict with the
- corresponding features specified by the POSIX.1 standard. If this
- macro is defined, the 4.3 BSD definitions take precedence over the
- POSIX definitions.
-
- Due to the nature of some of the conflicts between 4.3 BSD and
- POSIX.1, you need to use a special "BSD compatibility library"
- when linking programs compiled for BSD compatibility. This is
- because some functions must be defined in two different ways, one
- of them in the normal C library, and one of them in the
- compatibility library. If your program defines `_BSD_SOURCE', you
- must give the option `-lbsd-compat' to the compiler or linker when
- linking the program, to tell it to find functions in this special
- compatibility library before looking for them in the normal C
- library.
-
- -- Macro: _SVID_SOURCE
- If you define this macro, functionality derived from SVID is
- included as well as the ISO C, POSIX.1, POSIX.2, and X/Open
- material.
-
- -- Macro: _XOPEN_SOURCE
- -- Macro: _XOPEN_SOURCE_EXTENDED
- If you define this macro, functionality described in the X/Open
- Portability Guide is included. This is a superset of the POSIX.1
- and POSIX.2 functionality and in fact `_POSIX_SOURCE' and
- `_POSIX_C_SOURCE' are automatically defined.
-
- As the unification of all Unices, functionality only available in
- BSD and SVID is also included.
-
- If the macro `_XOPEN_SOURCE_EXTENDED' is also defined, even more
- functionality is available. The extra functions will make all
- functions available which are necessary for the X/Open Unix brand.
-
- If the macro `_XOPEN_SOURCE' has the value 500 this includes all
- functionality described so far plus some new definitions from the
- Single Unix Specification, version 2.
-
- -- Macro: _LARGEFILE_SOURCE
- If this macro is defined some extra functions are available which
- rectify a few shortcomings in all previous standards.
- Specifically, the functions `fseeko' and `ftello' are available.
- Without these functions the difference between the ISO C interface
- (`fseek', `ftell') and the low-level POSIX interface (`lseek')
- would lead to problems.
-
- This macro was introduced as part of the Large File Support
- extension (LFS).
-
- -- Macro: _LARGEFILE64_SOURCE
- If you define this macro an additional set of functions is made
- available which enables 32 bit systems to use files of sizes beyond
- the usual limit of 2GB. This interface is not available if the
- system does not support files that large. On systems where the
- natural file size limit is greater than 2GB (i.e., on 64 bit
- systems) the new functions are identical to the replaced functions.
-
- The new functionality is made available by a new set of types and
- functions which replace the existing ones. The names of these new
- objects contain `64' to indicate the intention, e.g., `off_t' vs.
- `off64_t' and `fseeko' vs. `fseeko64'.
-
- This macro was introduced as part of the Large File Support
- extension (LFS). It is a transition interface for the period when
- 64 bit offsets are not generally used (see `_FILE_OFFSET_BITS').
-
- -- Macro: _FILE_OFFSET_BITS
- This macro determines which file system interface shall be used,
- one replacing the other. Whereas `_LARGEFILE64_SOURCE' makes the
- 64 bit interface available as an additional interface,
- `_FILE_OFFSET_BITS' allows the 64 bit interface to replace the old
- interface.
-
- If `_FILE_OFFSET_BITS' is undefined, or if it is defined to the
- value `32', nothing changes. The 32 bit interface is used and
- types like `off_t' have a size of 32 bits on 32 bit systems.
-
- If the macro is defined to the value `64', the large file interface
- replaces the old interface. I.e., the functions are not made
- available under different names (as they are with
- `_LARGEFILE64_SOURCE'). Instead the old function names now
- reference the new functions, e.g., a call to `fseeko' now indeed
- calls `fseeko64'.
-
- This macro should only be selected if the system provides
- mechanisms for handling large files. On 64 bit systems this macro
- has no effect since the `*64' functions are identical to the
- normal functions.
-
- This macro was introduced as part of the Large File Support
- extension (LFS).
-
- -- Macro: _ISOC99_SOURCE
- Until the revised ISO C standard is widely adopted the new features
- are not automatically enabled. The GNU libc nevertheless has a
- complete implementation of the new standard and to enable the new
- features the macro `_ISOC99_SOURCE' should be defined.
-
- -- Macro: _GNU_SOURCE
- If you define this macro, everything is included: ISO C89,
- ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU
- extensions. In the cases where POSIX.1 conflicts with BSD, the
- POSIX definitions take precedence.
-
- If you want to get the full effect of `_GNU_SOURCE' but make the
- BSD definitions take precedence over the POSIX definitions, use
- this sequence of definitions:
-
- #define _GNU_SOURCE
- #define _BSD_SOURCE
- #define _SVID_SOURCE
-
- Note that if you do this, you must link your program with the BSD
- compatibility library by passing the `-lbsd-compat' option to the
- compiler or linker. *Note:* If you forget to do this, you may get
- very strange errors at run time.
-
- -- Macro: _REENTRANT
- -- Macro: _THREAD_SAFE
- If you define one of these macros, reentrant versions of several
- functions get declared. Some of the functions are specified in
- POSIX.1c but many others are only available on a few other systems
- or are unique to GNU libc. The problem is the delay in the
- standardization of the thread safe C library interface.
-
- Unlike on some other systems, no special version of the C library
- must be used for linking. There is only one version but while
- compiling this it must have been specified to compile as thread
- safe.
-
- We recommend you use `_GNU_SOURCE' in new programs. If you don't
-specify the `-ansi' option to GCC and don't define any of these macros
-explicitly, the effect is the same as defining `_POSIX_C_SOURCE' to 2
-and `_POSIX_SOURCE', `_SVID_SOURCE', and `_BSD_SOURCE' to 1.
-
- When you define a feature test macro to request a larger class of
-features, it is harmless to define in addition a feature test macro for
-a subset of those features. For example, if you define
-`_POSIX_C_SOURCE', then defining `_POSIX_SOURCE' as well has no effect.
-Likewise, if you define `_GNU_SOURCE', then defining either
-`_POSIX_SOURCE' or `_POSIX_C_SOURCE' or `_SVID_SOURCE' as well has no
-effect.
-
- Note, however, that the features of `_BSD_SOURCE' are not a subset of
-any of the other feature test macros supported. This is because it
-defines BSD features that take precedence over the POSIX features that
-are requested by the other macros. For this reason, defining
-`_BSD_SOURCE' in addition to the other feature test macros does have an
-effect: it causes the BSD features to take priority over the conflicting
-POSIX features.
-
diff --git a/README b/README
index 728e7d7da8..a4e39333c1 100644
--- a/README
+++ b/README
@@ -84,10 +84,6 @@ following the bug-reporting instructions below. Please be sure to check
the manual in the current development sources to see if your problem has
already been corrected.
-The file NOTES contains a description of the feature-test macros used
-in the GNU C library, explaining how you can tell the library what
-facilities you want it to make available.
-
Please see http://www.gnu.org/software/libc/bugs.html for bug reporting
information. We are now using the Bugzilla system to track all bug reports.
This web page gives detailed information on how to report bugs properly.
diff --git a/aclocal.m4 b/aclocal.m4
index dafa97244d..e89993237f 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -113,3 +113,37 @@ AC_CACHE_CHECK(whether $LD is GNU ld, libc_cv_prog_ld_gnu,
[LIBC_PROG_FOO_GNU($LD, libc_cv_prog_ld_gnu=yes, libc_cv_prog_ld_gnu=no)])
gnu_ld=$libc_cv_prog_ld_gnu
])
+
+dnl Run a static link test with -nostdlib -nostartfiles.
+dnl LIBC_TRY_LINK_STATIC([code], [action-if-true], [action-if-false])
+AC_DEFUN([LIBC_TRY_LINK_STATIC],
+[cat > conftest.c <<EOF
+int _start (void) { return 0; }
+int __start (void) { return 0; }
+$1
+EOF
+AS_IF([AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
+ conftest.c -static -nostartfiles -nostdlib
+ 1>&AS_MESSAGE_LOG_FD])],
+ [$2], [$3])
+rm -f conftest*])
+
+dnl Test a compiler option or options with an empty input file.
+dnl LIBC_TRY_CC_OPTION([options], [action-if-true], [action-if-false])
+AC_DEFUN([LIBC_TRY_CC_OPTION],
+[AS_IF([AC_TRY_COMMAND([${CC-cc} $1 -xc /dev/null -S -o /dev/null])],
+ [$2], [$3])])
+
+dnl Find and source sysdeps/*/preconfigure.
+dnl LIBC_PRECONFIGURE([$srcdir], [for])
+AC_DEFUN([LIBC_PRECONFIGURE], [dnl
+if frags=`ls -d $1/sysdeps/*/preconfigure 2> /dev/null`
+then
+ AC_MSG_CHECKING($2 preconfigure fragments)
+ for frag in $frags; do
+ name=`echo "$frag" | sed 's@/[[^/]]*[$]@@;s@^.*/@@'`
+ echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
+ . "$frag"
+ done
+ AC_MSG_RESULT()
+fi])
diff --git a/argp/Makefile b/argp/Makefile
index 7aa6804aa2..63cea6a222 100644
--- a/argp/Makefile
+++ b/argp/Makefile
@@ -1,4 +1,5 @@
-# Copyright (C) 1997,2002,2003,2006,2007,2010 Free Software Foundation, Inc.
+# Copyright (C) 1997,2002,2003,2006,2007,2010,2012
+# 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
@@ -21,7 +22,6 @@
subdir := argp
headers = argp.h
-distribute = argp-fmtstream.h argp-namefrob.h
routines = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \
pvh xinl eexst)
diff --git a/catgets/Makefile b/catgets/Makefile
index 9e308c50cf..a95028f2dd 100644
--- a/catgets/Makefile
+++ b/catgets/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1996-2000, 2002-2004, 2012 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
@@ -21,8 +21,6 @@
subdir := catgets
headers = nl_types.h
-distribute = catgetsinfo.h config.h xopen-msg.sed test1.msg test2.msg \
- test-gencat.sh sample.SJIS
routines = catgets open_catalog
others = gencat
install-bin = gencat
diff --git a/config.h.in b/config.h.in
index b5034545bc..3b938f8013 100644
--- a/config.h.in
+++ b/config.h.in
@@ -87,12 +87,12 @@
certain registers (CR0, MQ, CTR, LR) in asm statements. */
#undef BROKEN_PPC_ASM_CR0
-/* Defined on SPARC if as and ld both support GOTDATA relocations. */
-#undef HAVE_BINUTILS_GOTDATA
-
/* Defined on SPARC if GCC emits GOTDATA relocations. */
#undef HAVE_GCC_GOTDATA
+/* Define on SPARC if AS supports VIS3 instructions. */
+#undef HAVE_AS_VIS3_SUPPORT
+
/* Define if the linker supports the -z combreloc option. */
#undef HAVE_Z_COMBRELOC
diff --git a/config.make.in b/config.make.in
index 46a14b4f29..54e83934af 100644
--- a/config.make.in
+++ b/config.make.in
@@ -38,6 +38,7 @@ config-cflags-sse4 = @libc_cv_cc_sse4@
config-cflags-avx = @libc_cv_cc_avx@
config-cflags-sse2avx = @libc_cv_cc_sse2avx@
config-cflags-novzeroupper = @libc_cv_cc_novzeroupper@
+config-cflags-nofma = @libc_cv_cc_nofma@
config-asflags-i686 = @libc_cv_as_i686@
defines = @DEFINES@
@@ -58,6 +59,7 @@ enable-check-abi = @enable_check_abi@
have-forced-unwind = @libc_cv_forced_unwind@
have-fpie = @libc_cv_fpie@
have-mfma4 = @libc_cv_cc_fma4@
+have-as-vis3 = @libc_cv_sparc_as_vis3@
gnu89-inline-CFLAGS = @gnu89_inline@
have-ssp = @libc_cv_ssp@
have-selinux = @have_selinux@
diff --git a/configure b/configure
index c07f60e513..3d54d72dac 100755
--- a/configure
+++ b/configure
@@ -616,7 +616,9 @@ shared
static
ldd_rewrite_script
use_ldconfig
+libc_cv_sparc_as_vis3
libc_cv_as_i686
+libc_cv_cc_nofma
libc_cv_cc_fma4
libc_cv_cc_novzeroupper
libc_cv_cc_sse2avx
@@ -3818,6 +3820,19 @@ if test "${with_cpu+set}" = set; then :
fi
+if frags=`ls -d $srcdir/sysdeps/*/preconfigure 2> /dev/null`
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysdeps preconfigure fragments" >&5
+$as_echo_n "checking for sysdeps preconfigure fragments... " >&6; }
+ for frag in $frags; do
+ name=`echo "$frag" | sed 's@/[^/]*$@@;s@^.*/@@'`
+ echo $ECHO_N "$name $ECHO_C" >&6
+ . "$frag"
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
+$as_echo "" >&6; }
+fi
+
# An add-on can set this when it wants to disable the sanity check below.
libc_config_ok=no
@@ -3935,17 +3950,17 @@ $d-srcdir = $subdir_srcdir"
fi
if test -n "$libc_add_on"; then
if frags=`ls -d $libc_add_on_srcdir/sysdeps/*/preconfigure 2> /dev/null`
- then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking add-on $libc_add_on for preconfigure fragments" >&5
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking add-on $libc_add_on for preconfigure fragments" >&5
$as_echo_n "checking add-on $libc_add_on for preconfigure fragments... " >&6; }
- for frag in $frags; do
- name=`echo "$frag" | sed 's@/[^/]*$@@;s@^.*/@@'`
- echo $ECHO_N "$name $ECHO_C" >&6
- . "$frag"
- done
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
+ for frag in $frags; do
+ name=`echo "$frag" | sed 's@/[^/]*$@@;s@^.*/@@'`
+ echo $ECHO_N "$name $ECHO_C" >&6
+ . "$frag"
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
$as_echo "" >&6; }
- fi
+fi
use_add_ons="$use_add_ons $libc_add_on"
add_ons_pfx="$add_ons_pfx $libc_add_on/"
test -z "$libc_add_on_canonical" ||
@@ -4291,23 +4306,6 @@ fi
# We have now validated the configuration.
-
-# Look for an `elf' subdirectory of each machine directory.
-# We prepend these rather than inserting them whereever the machine appears
-# because things specified by the machine's ELF ABI should override
-# OS-specific things, and should always be the same for any OS on the
-# machine (otherwise what's the point of an ABI?).
-elf_dirs=
-for d in $add_ons_pfx ''; do
- for m in $mach; do
- if test -d $srcdir/${d}sysdeps$m/elf; then
- elf_dirs="$elf_dirs ${d}sysdeps$m/elf"
- fi
- done
-done
-sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
-
-
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
set $sysnames
@@ -4388,7 +4386,7 @@ $as_echo "$as_me: WARNING: $name/Implies specifies nonexistent $x" >&2;}
done
# Add the default directories.
-default_sysnames="sysdeps/generic/elf sysdeps/generic"
+default_sysnames="sysdeps/generic"
sysnames="$names $default_sysnames"
# The other names were emitted during the scan.
@@ -4618,7 +4616,7 @@ $as_echo "$libc_cv_prog_ld_gnu" >&6; }
gnu_ld=$libc_cv_prog_ld_gnu
-# Accept binutils 2.13 or newer.
+# Accept binutils 2.20 or newer.
for ac_prog in $AS
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -4670,7 +4668,7 @@ $as_echo_n "checking version of $AS... " >&6; }
ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*)
+ 2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*)
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
@@ -4733,7 +4731,7 @@ $as_echo_n "checking version of $LD... " >&6; }
ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*)
+ 2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*)
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
@@ -4799,7 +4797,7 @@ $as_echo_n "checking version of $CC... " >&6; }
ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 3.4* | 4.[0-9]* )
+ 4.[3-9].* | 4.[1-9][0-9].* | [5-9].* )
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
@@ -5999,17 +5997,19 @@ else
cat > conftest.c <<EOF
int _start (void) { return 0; }
int __start (void) { return 0; }
+
int foo (void) { return 1; }
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
+
EOF
-if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
- -static -nostartfiles -nostdlib 1>&5'
+if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
+ conftest.c -static -nostartfiles -nostdlib
+ 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
-then
+ test $ac_status = 0; }; }; then :
if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
libc_cv_initfini_array=yes
else
@@ -6019,6 +6019,7 @@ else
libc_cv_initfini_array=no
fi
rm -f conftest*
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_initfini_array" >&5
$as_echo "$libc_cv_initfini_array" >&6; }
@@ -6032,21 +6033,22 @@ if ${libc_cv_ctors_header+:} false; then :
$as_echo_n "(cached) " >&6
else
libc_cv_ctors_header=yes
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
+ cat > conftest.c <<EOF
+int _start (void) { return 0; }
+int __start (void) { return 0; }
-__attribute__ ((constructor)) void ctor (void) { puts("ctor"); }
-__attribute__ ((destructor)) void dtor (void) { puts("dtor"); }
+__attribute__ ((constructor)) void ctor (void) { asm (""); }
+__attribute__ ((destructor)) void dtor (void) { asm (""); }
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+EOF
+if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
+ conftest.c -static -nostartfiles -nostdlib
+ 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
if $READELF -WS conftest$ac_exeext | $AWK '
{ gsub(/\[ */, "[") }
$2 == ".ctors" || $2 == ".dtors" {
@@ -6068,8 +6070,7 @@ else
as_fn_error $? "missing __attribute__ ((constructor)) support??" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ctors_header" >&5
@@ -6626,23 +6627,17 @@ $as_echo_n "checking for -fstack-protector... " >&6; }
if ${libc_cv_ssp+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
-if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Werror -fstack-protector
- -o conftest conftest.c 1>&5'
+ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Werror -fstack-protector -xc /dev/null -S -o /dev/null'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
-then
+ test $ac_status = 0; }; }; then :
libc_cv_ssp=yes
else
libc_cv_ssp=no
fi
-rm -f conftest*
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ssp" >&5
$as_echo "$libc_cv_ssp" >&6; }
@@ -7024,6 +7019,26 @@ if test "$libc_cv_gcc_tls_model_attr" = no; then
as_fn_error $? "support for the tls_model attribute is required" "$LINENO" 5
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler option to disable generation of FMA instructions" >&5
+$as_echo_n "checking for compiler option to disable generation of FMA instructions... " >&6; }
+if ${libc_cv_cc_nofma+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ libc_cv_cc_nofma=
+for opt in -ffp-contract=off -mno-fused-madd; do
+ if { ac_try='${CC-cc} $opt -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ libc_cv_cc_nofma=$opt; break
+fi
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_nofma" >&5
+$as_echo "$libc_cv_cc_nofma" >&6; }
+
if test -n "$submachine"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler option for CPU variant" >&5
$as_echo_n "checking for compiler option for CPU variant... " >&6; }
@@ -7037,10 +7052,11 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
+
libc_cv_cc_submachine="$opt"
break
- fi
+fi
done
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_submachine" >&5
@@ -7644,6 +7660,8 @@ fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fPIC is default" >&5
$as_echo_n "checking whether -fPIC is default... " >&6; }
if ${libc_cv_pic_default+:} false; then :
diff --git a/configure.in b/configure.in
index 335c796c2b..d8c55b102e 100644
--- a/configure.in
+++ b/configure.in
@@ -317,6 +317,9 @@ AC_ARG_WITH([cpu],
esac
])
+dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
+LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
+
# An add-on can set this when it wants to disable the sanity check below.
libc_config_ok=no
@@ -436,16 +439,7 @@ relative path required for add-on using \$libc_add_on_config_subdirs) ;;
}
fi
if test -n "$libc_add_on"; then
- if frags=`ls -d $libc_add_on_srcdir/sysdeps/*/preconfigure 2> /dev/null`
- then
- AC_MSG_CHECKING(add-on $libc_add_on for preconfigure fragments)
- for frag in $frags; do
- name=`echo "$frag" | sed 's@/[[^/]]*$@@;s@^.*/@@'`
- echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
- . "$frag"
- done
- AC_MSG_RESULT()
- fi
+ LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
use_add_ons="$use_add_ons $libc_add_on"
add_ons_pfx="$add_ons_pfx $libc_add_on/"
test -z "$libc_add_on_canonical" ||
@@ -749,23 +743,6 @@ AC_SUBST(submachine)
# We have now validated the configuration.
-
-# Look for an `elf' subdirectory of each machine directory.
-# We prepend these rather than inserting them whereever the machine appears
-# because things specified by the machine's ELF ABI should override
-# OS-specific things, and should always be the same for any OS on the
-# machine (otherwise what's the point of an ABI?).
-elf_dirs=
-for d in $add_ons_pfx ''; do
- for m in $mach; do
- if test -d $srcdir/${d}sysdeps$m/elf; then
- elf_dirs="$elf_dirs ${d}sysdeps$m/elf"
- fi
- done
-done
-sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
-
-
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
set $sysnames
@@ -847,7 +824,7 @@ changequote([,])dnl
done
# Add the default directories.
-default_sysnames="sysdeps/generic/elf sysdeps/generic"
+default_sysnames="sysdeps/generic"
sysnames="$names $default_sysnames"
AC_SUBST(sysnames)
# The other names were emitted during the scan.
@@ -921,18 +898,18 @@ AC_PROG_LN_S
LIBC_PROG_BINUTILS
AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
-# Accept binutils 2.13 or newer.
+# Accept binutils 2.20 or newer.
AC_CHECK_PROG_VER(AS, $AS, --version,
[GNU assembler.* \([0-9]*\.[0-9.]*\)],
- [2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
+ [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
AC_CHECK_PROG_VER(LD, $LD, --version,
[GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
- [2.1[3-9]*|2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
+ [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
# These programs are version sensitive.
AC_CHECK_TOOL_PREFIX
AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
+ [version \([egcygnustpi-]*[0-9.]*\)], [4.[3-9].* | 4.[1-9][0-9].* | [5-9].* ],
critic_missing="$critic_missing gcc")
AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
[GNU Make[^0-9]*\([0-9][0-9.]*\)],
@@ -1349,24 +1326,17 @@ fi
AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
libc_cv_initfini_array, [dnl
-cat > conftest.c <<EOF
-int _start (void) { return 0; }
-int __start (void) { return 0; }
+LIBC_TRY_LINK_STATIC([
int foo (void) { return 1; }
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
-EOF
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
- -static -nostartfiles -nostdlib 1>&AS_MESSAGE_LOG_FD])
-then
- if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
+],
+ [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
libc_cv_initfini_array=yes
else
libc_cv_initfini_array=no
- fi
-else
- libc_cv_initfini_array=no
-fi
-rm -f conftest*])
+ fi],
+ [libc_cv_initfini_array=no])
+])
if test $libc_cv_initfini_array != yes; then
AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
fi
@@ -1374,9 +1344,9 @@ fi
AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
libc_cv_ctors_header, [dnl
libc_cv_ctors_header=yes
- AC_TRY_LINK([], [
-__attribute__ ((constructor)) void ctor (void) { puts("ctor"); }
-__attribute__ ((destructor)) void dtor (void) { puts("dtor"); }
+ LIBC_TRY_LINK_STATIC([
+__attribute__ ((constructor)) void ctor (void) { asm (""); }
+__attribute__ ((destructor)) void dtor (void) { asm (""); }
],
[dnl
AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
@@ -1766,18 +1736,10 @@ fi
AC_SUBST(fno_unit_at_a_time)
AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
-cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Werror -fstack-protector
- -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
-then
- libc_cv_ssp=yes
-else
- libc_cv_ssp=no
-fi
-rm -f conftest*])
+LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
+ [libc_cv_ssp=yes],
+ [libc_cv_ssp=no])
+])
AC_SUBST(libc_cv_ssp)
AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
@@ -2013,15 +1975,22 @@ if test "$libc_cv_gcc_tls_model_attr" = no; then
AC_MSG_ERROR([support for the tls_model attribute is required])
fi
+dnl Determine how to disable generation of FMA instructions.
+AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
+ libc_cv_cc_nofma, [dnl
+libc_cv_cc_nofma=
+for opt in -ffp-contract=off -mno-fused-madd; do
+ LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
+done])
+
if test -n "$submachine"; then
AC_CACHE_CHECK([for compiler option for CPU variant],
libc_cv_cc_submachine, [dnl
libc_cv_cc_submachine=no
for opt in "-march=$submachine" "-mcpu=$submachine"; do
- if AC_TRY_COMMAND([${CC-cc} $opt -xc /dev/null -S -o /dev/null]); then
+ LIBC_TRY_CC_OPTION([$opt], [
libc_cv_cc_submachine="$opt"
- break
- fi
+ break], [])
done])
if test "x$libc_cv_cc_submachine" = xno; then
AC_MSG_ERROR([${CC-cc} does not support $submachine])
@@ -2157,7 +2126,9 @@ AC_SUBST(libc_cv_cc_avx)
AC_SUBST(libc_cv_cc_sse2avx)
AC_SUBST(libc_cv_cc_novzeroupper)
AC_SUBST(libc_cv_cc_fma4)
+AC_SUBST(libc_cv_cc_nofma)
AC_SUBST(libc_cv_as_i686)
+AC_SUBST(libc_cv_sparc_as_vis3)
AC_SUBST(use_ldconfig)
AC_SUBST(ldd_rewrite_script)
diff --git a/conform/Makefile b/conform/Makefile
index ee5c540cfd..ae9ac141e6 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2012 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
@@ -20,7 +20,18 @@
#
subdir := conform
-distribute = conformtest.pl $(wildcard data/*.h-data) \
- $(wildcard data/*/*.h-data)
-
include ../Rules
+
+ifneq (yes,$(fast-check))
+ifeq (no,$(cross-compiling))
+tests: $(objpfx)run-conformtest.out
+endif
+endif
+
+$(objpfx)run-conformtest.out: run-conformtest.sh conformtest.pl \
+ $(wildcard data/*.h-data) \
+ $(wildcard data/*/*.h-data)
+ -$(BASH) -e $< $(objpfx) $(PERL) '$(CC)' \
+ '-I../include $(+sysdep-includes) $(sysincludes) -I..'
+
+generated = $(wildcard $(objpfx)conform-*.out)
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index d324d81c53..83650c2454 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -3,48 +3,66 @@
use Getopt::Long;
use POSIX;
+$standard = "XOPEN2K8";
$CC = "gcc";
-
-$dialect="XOPEN2K";
-GetOptions ('headers=s' => \@headers, 'dialect=s' => \$dialect);
+$tmpdir = "/tmp";
+GetOptions ('headers=s' => \@headers, 'standard=s' => \$standard,
+ 'flags=s' => \$flags, 'cc=s' => \$CC, 'tmpdir=s' => \$tmpdir);
@headers = split(/,/,join(',',@headers));
# List of the headers we are testing.
if (@headers == ()) {
@headers = ("wordexp.h", "wctype.h", "wchar.h", "varargs.h", "utmpx.h",
- "utime.h", "unistd.h", "ulimit.h", "ucontext.h", "time.h",
- "tgmath.h", "termios.h", "tar.h", "sys/wait.h", "sys/utsname.h",
- "sys/un.h", "sys/uio.h", "sys/types.h", "sys/times.h",
- "sys/timeb.h", "sys/time.h", "sys/statvfs.h", "sys/stat.h",
- "sys/socket.h", "sys/shm.h", "sys/sem.h", "sys/select.h",
- "sys/resource.h", "sys/msg.h", "sys/mman.h", "sys/ipc.h",
- "syslog.h", "stropts.h", "strings.h", "string.h", "stdlib.h",
- "stdio.h", "stdint.h", "stddef.h", "stdarg.h", "spawn.h",
- "signal.h", "setjmp.h", "semaphore.h", "search.h", "sched.h",
- "regex.h", "pwd.h", "pthread.h", "poll.h", "nl_types.h",
- "netinet/tcp.h", "netinet/in.h", "net/if.h", "netdb.h", "ndbm.h",
- "mqueue.h", "monetary.h", "math.h", "locale.h", "libgen.h",
- "limits.h", "langinfo.h", "iso646.h", "inttypes.h", "iconv.h",
- "grp.h", "glob.h", "ftw.h", "fnmatch.h", "fmtmsg.h", "float.h",
- "fcntl.h", "errno.h", "dlfcn.h", "dirent.h", "ctype.h", "cpio.h",
- "complex.h", "assert.h", "arpa/inet.h", "aio.h");
-}
-
-if ($dialect ne "ISO" && $dialect ne "POSIX" && $dialect ne "XPG3"
- && $dialect ne "XPG4" && $dialect ne "UNIX98" && $dialect ne "XOPEN2K"
- && $dialect ne "XOPEN2K8" && $dialect ne "POSIX2008") {
- die "unknown dialect \"$dialect\"";
+ "utime.h", "unistd.h", "ulimit.h", "ucontext.h", "uchar.h",
+ "time.h", "tgmath.h", "termios.h", "tar.h", "sys/wait.h",
+ "sys/utsname.h", "sys/un.h", "sys/uio.h", "sys/types.h",
+ "sys/times.h", "sys/timeb.h", "sys/time.h", "sys/statvfs.h",
+ "sys/stat.h", "sys/socket.h", "sys/shm.h", "sys/sem.h",
+ "sys/select.h", "sys/resource.h", "sys/msg.h", "sys/mman.h",
+ "sys/ipc.h", "syslog.h", "stropts.h", "strings.h", "string.h",
+ "stdlib.h", "stdio.h", "stdint.h", "stddef.h", "stdarg.h",
+ "spawn.h", "signal.h", "setjmp.h", "semaphore.h", "search.h",
+ "sched.h", "regex.h", "pwd.h", "pthread.h", "poll.h",
+ "nl_types.h", "netinet/tcp.h", "netinet/in.h", "net/if.h",
+ "netdb.h", "ndbm.h", "mqueue.h", "monetary.h", "math.h",
+ "locale.h", "libgen.h", "limits.h", "langinfo.h", "iso646.h",
+ "inttypes.h", "iconv.h", "grp.h", "glob.h", "ftw.h", "fnmatch.h",
+ "fmtmsg.h", "float.h", "fcntl.h", "errno.h", "dlfcn.h",
+ "dirent.h", "ctype.h", "cpio.h", "complex.h", "assert.h",
+ "arpa/inet.h", "aio.h");
}
-$CFLAGS{"ISO"} = "-I. -fno-builtin '-D__attribute__(x)=' -ansi";
-$CFLAGS{"POSIX"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_POSIX_C_SOURCE=199912";
-$CFLAGS{"XPG3"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_XOPEN_SOURCE";
-$CFLAGS{"XPG4"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_XOPEN_SOURCE_EXTENDED";
-$CFLAGS{"UNIX98"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_XOPEN_SOURCE=500";
-$CFLAGS{"XOPEN2K"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_XOPEN_SOURCE=600";
-$CFLAGS{"XOPEN2K8"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_XOPEN_SOURCE=700";
-$CFLAGS{"POSIX2008"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_POSIX_C_SOURCE=200809L";
-
+$CFLAGS{"ISO"} = "-ansi";
+$CFLAGS{"ISO99"} = "-std=c99";
+$CFLAGS{"ISO11"} = "-std=c1x -D_ISOC11_SOURCE";
+$CFLAGS{"POSIX"} = "-D_POSIX_C_SOURCE=199912 -ansi";
+$CFLAGS{"XPG3"} = "-D_XOPEN_SOURCE";
+$CFLAGS{"XPG4"} = "-D_XOPEN_SOURCE_EXTENDED";
+$CFLAGS{"UNIX98"} = "-D_XOPEN_SOURCE=500";
+$CFLAGS{"XOPEN2K"} = "-D_XOPEN_SOURCE=600";
+$CFLAGS{"XOPEN2K8"} = "-std=c99 -D_XOPEN_SOURCE=700";
+$CFLAGS{"POSIX2008"} = "-std=c99 -D_POSIX_C_SOURCE=200809L";
+
+$CFLAGS = "$flags -fno-builtin '-D__attribute__(x)=' $CFLAGS{$standard} -D_ISOMAC";
+
+# Check standard name for validity.
+die "unknown standard \"$standard\"" if ($CFLAGS{$standard} eq "");
+
+# if ($standard ne "XOPEN2K8" && $standard ne "POSIX2008") {
+# # Some headers need a bit more attention. At least with XPG7
+# # all headers should be self-contained.
+# $mustprepend{'inttypes.h'} = "#include <stddef.h>\n";
+# $mustprepend{'glob.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'grp.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'regex.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'pwd.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'sched.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'signal.h'} = "#include <pthread.h>\n#include <sys/types.h>\n";
+# $mustprepend{'stdio.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'sys/stat.h'} = "#include <sys/types.h>\n";
+# $mustprepend{'wchar.h'} = "#include <stdarg.h>\n";
+# $mustprepend{'wordexp.h'} = "#include <stddef.h>\n";
+# }
# These are the ISO C99 keywords.
@keywords = ('auto', 'break', 'case', 'char', 'const', 'continue', 'default',
@@ -53,36 +71,19 @@ $CFLAGS{"POSIX2008"} = "-I. -fno-builtin '-D__attribute__(x)=' -D_POSIX_C_SOURCE
'short', 'signed', 'sizeof', 'static', 'struct', 'switch',
'typedef', 'union', 'unsigned', 'void', 'volatile', 'while');
-# These are symbols which are known to pollute the namespace.
-@knownproblems = ('unix', 'linux', 'i386');
-
-if ($dialect ne "XOPEN2K8" && $dialect ne "POSIX2008") {
- # Some headers need a bit more attention. At least with XPG7
- # all headers should be self-contained.
- $mustprepend{'inttypes.h'} = "#include <stddef.h>\n";
- $mustprepend{'regex.h'} = "#include <sys/types.h>\n";
- $mustprepend{'sched.h'} = "#include <sys/types.h>\n";
- $mustprepend{'signal.h'} = "#include <pthread.h>\n";
- $mustprepend{'stdio.h'} = "#include <sys/types.h>\n";
- $mustprepend{'wchar.h'} = "#include <stdarg.h>\n";
- $mustprepend{'wordexp.h'} = "#include <stddef.h>\n";
-}
-
# Make a hash table from this information.
while ($#keywords >= 0) {
$iskeyword{pop (@keywords)} = 1;
}
+# These are symbols which are known to pollute the namespace.
+@knownproblems = ('unix', 'linux', 'i386');
+
# Make a hash table from the known problems.
while ($#knownproblems >= 0) {
$isknown{pop (@knownproblems)} = 1;
}
-$uid = getuid();
-($pwname,$pwpasswd,$pwuid,$pwgid,
- $pwquota,$pwcomment,$pwgcos,$pwdir,$pwshell,$pwexpire) = getpwuid($uid);
-$tmpdir = "$pwdir";
-
$verbose = 1;
$total = 0;
@@ -100,9 +101,17 @@ sub poorfnmatch {
$res = ($strlen >= $patlen
&& substr ($pattern, -$patlen, $patlen) eq substr ($string, -$patlen, $patlen));
} elsif (substr ($pattern, -1, 1) eq '*') {
- my($patlen) = length ($pattern) - 1;
- $res = ($strlen >= $patlen
- && substr ($pattern, 0, $patlen) eq substr ($string, 0, $patlen));
+ if (substr ($pattern, -2, 1) eq ']') {
+ my($patlen) = index ($pattern, '[');
+ my($range) = substr ($pattern, $patlen + 1, -2);
+ $res = ($strlen > $patlen
+ && substr ($pattern, 0, $patlen) eq substr ($string, 0, $patlen)
+ && index ($range, substr ($string, $patlen, 1)) != -1);
+ } else {
+ my($patlen) = length ($pattern) - 1;
+ $res = ($strlen >= $patlen
+ && substr ($pattern, 0, $patlen) eq substr ($string, 0, $patlen));
+ }
} else {
$res = $pattern eq $string;
}
@@ -123,7 +132,7 @@ sub compiletest
++$skipped;
printf (" SKIP\n");
} else {
- $ret = system "$CC $CFLAGS{$dialect} -c $fnamebase.c -o $fnamebase.o > $fnamebase.out 2>&1";
+ $ret = system "$CC $CFLAGS -c $fnamebase.c -o $fnamebase.o > $fnamebase.out 2>&1";
if ($ret != 0) {
if ($optional != 0) {
printf (" $errmsg\n");
@@ -175,7 +184,7 @@ sub runtest
++$skipped;
printf (" SKIP\n");
} else {
- $ret = system "$CC $CFLAGS{$dialect} -o $fnamebase $fnamebase.c > $fnamebase.out 2>&1";
+ $ret = system "$CC $CFLAGS -o $fnamebase $fnamebase.c > $fnamebase.out 2>&1";
if ($ret != 0) {
printf (" FAIL\n");
if ($verbose != 0) {
@@ -232,9 +241,7 @@ sub newtoken {
return if (poorfnmatch ($allow[$idx], $token));
}
- if ($isknown{$token}) {
- ++$nknown;
- } else {
+ unless ($isknown{$token}) {
$errors{$token} = 1;
}
}
@@ -264,7 +271,7 @@ sub checknamespace {
undef %errors;
$nknown = 0;
- open (CONTENT, "$CC $CFLAGS{$dialect} -E $fnamebase.c -P -Wp,-dN | sed -e '/^# [1-9]/d' -e '/^[[:space:]]*\$/d' |");
+ open (CONTENT, "$CC $CFLAGS -E $fnamebase.c -P -Wp,-dN | sed -e '/^# [1-9]/d' -e '/^[[:space:]]*\$/d' |");
loop: while (<CONTENT>) {
chop;
if (/^#define (.*)/) {
@@ -303,12 +310,7 @@ sub checknamespace {
}
if ($realerror == 0) {
- if ($nknown > 0) {
- printf ("EXPECTED FAILURES\n");
- ++$known;
- } else {
- printf ("OK\n");
- }
+ printf ("OK\n");
}
}
@@ -318,32 +320,36 @@ while ($#headers >= 0) {
my($hf) = $h;
$hf =~ s|/|-|;
my($fnamebase) = "$tmpdir/$hf-test";
- my($missing);
+ my($missing) = 1;
my(@allow) = ();
my(@allowheader) = ();
my(%seenheader) = ();
my($prepend) = $mustprepend{$h};
+ my($test_exist) = 1;
printf ("Testing <$h>\n");
printf ("----------" . "-" x length ($h) . "\n");
- # Generate a program to test for the availability of this header.
- open (TESTFILE, ">$fnamebase.c");
- print TESTFILE "$prepend";
- print TESTFILE "#include <$h>\n";
- close (TESTFILE);
-
- $missing = compiletest ($fnamebase, "Checking whether <$h> is available",
- "Header <$h> not available", 0, 0);
-
- printf ("\n");
-
- open (CONTROL, "$CC -E -D$dialect - < data/$h-data |");
+ open (CONTROL, "$CC -E -D$standard -x c data/$h-data |");
control: while (<CONTROL>) {
chop;
next control if (/^#/);
next control if (/^[ ]*$/);
+ if ($test_exist) {
+ $test_exist = 0;
+ # Generate a program to test for the availability of this header.
+ open (TESTFILE, ">$fnamebase.c");
+ print TESTFILE "$prepend";
+ print TESTFILE "#include <$h>\n";
+ close (TESTFILE);
+
+ $missing = compiletest ($fnamebase, "Checking whether <$h> is available",
+ "Header <$h> not available", 0, 0);
+ printf ("\n");
+ last control if ($missing);
+ }
+
if (/^element *({([^}]*)}|([^{ ]*)) *({([^}]*)}|([^{ ]*)) *([A-Za-z0-9_]*) *(.*)/) {
my($struct) = "$2$3";
my($type) = "$5$6";
@@ -421,7 +427,7 @@ while ($#headers >= 0) {
"Member \"$member\" does not have the correct type.",
$res, 0);
}
- } elsif (/^optional-constant *([a-zA-Z0-9_]*) ([>=<]+) ([A-Za-z0-9_]*)/) {
+ } elsif (/^optional-constant *([a-zA-Z0-9_]*) ([>=<!]+) ([A-Za-z0-9_-]*)/) {
my($const) = $1;
my($op) = $2;
my($value) = $3;
@@ -452,7 +458,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of constant $const",
"Constant \"$const\" has not the right value.", $res);
}
- } elsif (/^constant *([a-zA-Z0-9_]*) *([>=<]+) ([A-Za-z0-9_]*)/) {
+ } elsif (/^constant *([a-zA-Z0-9_]*) *([>=<!]+) ([A-Za-z0-9_-]*)/) {
my($const) = $1;
my($op) = $2;
my($value) = $3;
@@ -483,7 +489,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of constant $const",
"Constant \"$const\" has not the right value.", $res);
}
- } elsif (/^typed-constant *([a-zA-Z0-9_]*) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*)?/) {
+ } elsif (/^typed-constant *([a-zA-Z0-9_]*) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_-]*)?/) {
my($const) = $1;
my($type) = "$3$4";
my($value) = $5;
@@ -525,7 +531,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of constant $const",
"Constant \"$const\" has not the right value.", $res);
}
- } elsif (/^optional-constant *([a-zA-Z0-9_]*) *([A-Za-z0-9_]*)?/) {
+ } elsif (/^optional-constant *([a-zA-Z0-9_]*) *([A-Za-z0-9_-]*)?/) {
my($const) = $1;
my($value) = $2;
my($res) = $missing;
@@ -554,7 +560,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of constant $const",
"Constant \"$const\" has not the right value.", $res);
}
- } elsif (/^constant *([a-zA-Z0-9_]*) *([A-Za-z0-9_]*)?/) {
+ } elsif (/^constant *([a-zA-Z0-9_]*) *([A-Za-z0-9_-]*)?/) {
my($const) = $1;
my($value) = $2;
my($res) = $missing;
@@ -583,7 +589,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of constant $const",
"Constant \"$const\" has not the right value.", $res);
}
- } elsif (/^symbol *([a-zA-Z0-9_]*) *([A-Za-z0-9_]*)?/) {
+ } elsif (/^symbol *([a-zA-Z0-9_]*) *([A-Za-z0-9_-]*)?/) {
my($symbol) = $1;
my($value) = $2;
my($res) = $missing;
@@ -614,7 +620,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of symbol $symbol",
"Symbol \"$symbol\" has not the right value.", $res);
}
- } elsif (/^typed-constant *([a-zA-Z0-9_]*) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*)?/) {
+ } elsif (/^typed-constant *([a-zA-Z0-9_]*) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_-]*)?/) {
my($const) = $1;
my($type) = "$3$4";
my($value) = $5;
@@ -908,7 +914,7 @@ while ($#headers >= 0) {
print TESTFILE "#endif\n";
close (TESTFILE);
- $res = compiletest ($fnamebase, "Test availability of function $fname",
+ $res = compiletest ($fnamebase, "Test availability of macro $fname",
"Function \"$fname\" is not available.", $res, 0);
# Generate a program to test for the type of this function.
@@ -921,7 +927,7 @@ while ($#headers >= 0) {
print TESTFILE "#endif\n";
close (TESTFILE);
- compiletest ($fnamebase, "Test for type of function $fname",
+ compiletest ($fnamebase, "Test for type of macro $fname",
"Function \"$fname\" has incorrect type.", $res, 0);
} elsif (/^macro-str *([^ ]*) *(\".*\")/) {
# The above regex doesn't handle a \" in a string.
@@ -972,7 +978,7 @@ while ($#headers >= 0) {
compiletest ($fnamebase, "Test availability of macro $macro",
"NOT PRESENT", $missing, 1);
- } elsif (/^macro *([a-zA-Z0-9_]*) *([>=<]+) ([A-Za-z0-9_]*)/) {
+ } elsif (/^macro *([a-zA-Z0-9_]*) *([>=<!]+) ([A-Za-z0-9_]*)/) {
my($macro) = "$1";
my($op) = $2;
my($value) = $3;
@@ -1002,7 +1008,39 @@ while ($#headers >= 0) {
print TESTFILE "int main (void) { return !($macro $op $value); }\n";
close (TESTFILE);
- $res = runtest ($fnamebase, "Testing for value of constant $macro",
+ $res = runtest ($fnamebase, "Testing for value of macro $macro",
+ "Macro \"$macro\" has not the right value.", $res);
+ }
+ } elsif (/^macro *([a-zA-Z0-9_]*) *([A-Za-z0-9_]*)/) {
+ my($macro) = "$1";
+ my($value) = $2;
+ my($res) = $missing;
+
+ # Remember that this name is allowed.
+ push @allow, $macro;
+
+ # Generate a program to test for availability of this macro.
+ open (TESTFILE, ">$fnamebase.c");
+ print TESTFILE "$prepend";
+ print TESTFILE "#include <$h>\n";
+ print TESTFILE "#ifndef $macro\n";
+ print TESTFILE "# error \"Macro $macro not defined\"\n";
+ print TESTFILE "#endif\n";
+ close (TESTFILE);
+
+ $res = compiletest ($fnamebase, "Test availability of macro $macro",
+ "Macro \"$macro\" is not available.", $res, 0);
+
+ if ($value ne "") {
+ # Generate a program to test for the value of this constant.
+ open (TESTFILE, ">$fnamebase.c");
+ print TESTFILE "$prepend";
+ print TESTFILE "#include <$h>\n";
+ # Negate the value since 0 means ok
+ print TESTFILE "int main (void) { return !($macro == $value); }\n";
+ close (TESTFILE);
+
+ $res = runtest ($fnamebase, "Testing for value of macro $macro",
"Macro \"$macro\" has not the right value.", $res);
}
} elsif (/^macro *([^ ]*)/) {
@@ -1046,7 +1084,7 @@ while ($#headers >= 0) {
while ($#allowheader >= 0) {
my($ah) = pop @allowheader;
- open (ALLOW, "$CC -E -D$dialect - < data/$ah-data |");
+ open (ALLOW, "$CC -E -D$standard - < data/$ah-data |");
acontrol: while (<ALLOW>) {
chop;
next acontrol if (/^#/);
@@ -1091,13 +1129,17 @@ while ($#headers >= 0) {
close (ALLOW);
}
- # Now check the namespace.
- printf (" Checking the namespace of \"%s\"... ", $h);
- if ($missing) {
- ++$skipped;
- printf ("SKIP\n");
+ if ($test_exist) {
+ printf (" Not defined\n");
} else {
- checknamespace ($h, $fnamebase, @allow);
+ # Now check the namespace.
+ printf (" Checking the namespace of \"%s\"... ", $h);
+ if ($missing) {
+ ++$skipped;
+ printf ("SKIP\n");
+ } else {
+ checknamespace ($h, $fnamebase, @allow);
+ }
}
printf ("\n\n");
@@ -1106,14 +1148,6 @@ while ($#headers >= 0) {
printf "-" x 76 . "\n";
printf (" Total number of tests : %4d\n", $total);
-printf (" Number of known failures: %4d (", $known);
-$percent = ($known * 100) / $total;
-if ($known > 0 && $percent < 1.0) {
- printf (" <1%%)\n");
-} else {
- printf ("%3d%%)\n", $percent);
-}
-
printf (" Number of failed tests : %4d (", $errors);
$percent = ($errors * 100) / $total;
if ($errors > 0 && $percent < 1.0) {
@@ -1131,3 +1165,6 @@ if ($skipped > 0 && $percent < 1.0) {
}
exit $errors != 0;
+# Local Variables:
+# perl-indent-level: 2
+# End:
diff --git a/conform/data/aio.h-data b/conform/data/aio.h-data
index 75698cb39b..d6d0acbbe6 100644
--- a/conform/data/aio.h-data
+++ b/conform/data/aio.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type {struct aiocb}
// Test elements of the AIO control struct.
@@ -28,12 +28,12 @@ function int aio_suspend (const struct aiocb* const[], int, const struct timespe
function int aio_write (struct aiocb*)
function int lio_listio (int, struct aiocb *const[], int, struct sigevent*)
-# if !defined POSIX
+// POSIX in theory doesn't allow the header to be self contained but
+// this was fixed later and we do not test for this here.
allow-header fcntl.h
allow-header signal.h
allow-header sys/types.h
allow-header time.h
-# endif
allow aio_*
allow lio_*
diff --git a/conform/data/arpa/inet.h-data b/conform/data/arpa/inet.h-data
index 98f5e0ecaf..becee2fd1e 100644
--- a/conform/data/arpa/inet.h-data
+++ b/conform/data/arpa/inet.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
// in_port_t should have exactly 16 bits
type in_port_t
// in_addr_t should have exactly 32 bits
diff --git a/conform/data/assert.h-data b/conform/data/assert.h-data
index 1b1180838a..9c3cc046c6 100644
--- a/conform/data/assert.h-data
+++ b/conform/data/assert.h-data
@@ -1,3 +1,7 @@
macro assert
+#ifdef ISO11
+macro static_assert
+#endif
+
allow *_t
diff --git a/conform/data/complex.h-data b/conform/data/complex.h-data
index 006d6e4de7..8f31d22057 100644
--- a/conform/data/complex.h-data
+++ b/conform/data/complex.h-data
@@ -1,4 +1,4 @@
-#if defined XOPEN2K || defined POSIX2008
+#if defined ISO99 || defined ISO11 || defined XOPEN2K || defined POSIX2008
macro complex
macro _Complex_I
optional-macro imaginary
@@ -73,4 +73,10 @@ function {long double complex} csinl (long double complex)
function {long double complex} csqrtl (long double complex)
function {long double complex} ctanhl (long double complex)
function {long double complex} ctanl (long double complex)
+
+# if defined ISO11
+macro-function {double complex} CMPLX (double, double)
+macro-function {float complex} CMPLXF (float, float)
+macro-function {long double complex} CMPLXL (long double, long double)
+# endif
#endif
diff --git a/conform/data/cpio.h-data b/conform/data/cpio.h-data
index c6f4d8909c..6e71319274 100644
--- a/conform/data/cpio.h-data
+++ b/conform/data/cpio.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant C_IRUSR 0000400
constant C_IWUSR 0000200
constant C_IXUSR 0000100
diff --git a/conform/data/ctype.h-data b/conform/data/ctype.h-data
index 091d377bec..e2c6019d50 100644
--- a/conform/data/ctype.h-data
+++ b/conform/data/ctype.h-data
@@ -12,7 +12,7 @@ function int isxdigit (int)
function int tolower (int)
function int toupper (int)
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function int isascii (int)
function int toascii (int)
diff --git a/conform/data/dirent.h-data b/conform/data/dirent.h-data
index f1cd59cdaf..be7ad06fd8 100644
--- a/conform/data/dirent.h-data
+++ b/conform/data/dirent.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type DIR
type {struct dirent}
diff --git a/conform/data/dlfcn.h-data b/conform/data/dlfcn.h-data
index 93e3354635..59dd028911 100644
--- a/conform/data/dlfcn.h-data
+++ b/conform/data/dlfcn.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
macro RTLD_LAZY
macro RTLD_NOW
macro RTLD_GLOBAL
diff --git a/conform/data/errno.h-data b/conform/data/errno.h-data
index ffdf6b5c4d..328687f8dc 100644
--- a/conform/data/errno.h-data
+++ b/conform/data/errno.h-data
@@ -2,7 +2,10 @@ constant EDOM
constant EILSEQ
constant ERANGE
-#ifndef ISO
+// variable int errno
+allow errno
+
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant E2BIG
constant EACCES
constant EADDRINUSE
@@ -84,9 +87,9 @@ constant ENOTRECOVERABLE
constant EOWNERDEAD
# endif
-// variable int errno
-allow errno
-
allow E*
allow *_t
#endif
+
+allow E[0123456789]*
+allow E[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*
diff --git a/conform/data/fcntl.h-data b/conform/data/fcntl.h-data
index 7769a446dd..46892488b1 100644
--- a/conform/data/fcntl.h-data
+++ b/conform/data/fcntl.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant F_DUPFD
constant F_GETFD
constant F_SETFD
@@ -7,8 +7,10 @@ constant F_SETFL
constant F_GETLK
constant F_SETLK
constant F_SETLKW
+#if !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
constant F_GETOWN
constant F_SETOWN
+#endif
constant FD_CLOEXEC
@@ -16,9 +18,11 @@ constant F_RDLCK
constant F_UNLCK
constant F_WRLCK
+#if !defined POSIX
constant SEEK_SET
constant SEEK_CUR
constant SEEK_END
+#endif
constant O_CREAT
constant O_EXCL
@@ -37,6 +41,7 @@ constant O_RDONLY
constant O_RDWR
constant O_WRONLY
+#if !defined POSIX
constant S_IFMT
constant S_IFBLK
constant S_IFCHR
@@ -60,9 +65,10 @@ constant S_IWOTH
constant S_IXOTH
constant S_ISUID
constant S_ISGID
-#if !defined POSIX && !defined POSIX2008
+#if !defined POSIX2008
constant S_ISVTX
#endif
+#endif
#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
constant POSIX_FADV_NORMAL
@@ -103,7 +109,6 @@ constant O_EXEC
constant O_SEARCH
constant O_DIRECTORY
constant O_NOFOLLOW
-constant FD_CLOEXEC
constant F_DUPFD_CLOEXEC
constant AT_FDCWD
constant AT_EACCESS
diff --git a/conform/data/float.h-data b/conform/data/float.h-data
index 71a429b0bf..49d953aa6d 100644
--- a/conform/data/float.h-data
+++ b/conform/data/float.h-data
@@ -38,4 +38,23 @@ macro FLT_MIN
macro DBL_MIN
macro LDBL_MIN
+#if !defined ISO && !defined XPG3 && !defined XPG4 && !defined POSIX && !defined UNIX98
+constant DECIMAL_DIG >= 10
+constant FLT_EVAL_METHOD
+#endif
+
+#if defined ISO11
+constant DBL_HAS_SUBNORM
+constant FLT_HAS_SUBNORM
+constant LDBL_HAS_SUBNORM
+
+constant DBL_DECIMAL_DIG >= 10
+constant FLT_DECIMAL_DIG >= 6
+constant LDBL_DECIMAL_DIG >= 10
+
+constant DBL_TRUE_MIN <= 1E-37
+constant FLT_TRUE_MIN <= 1E-37
+constant LDBL_TRUE_MIN <= 1E-37
+#endif
+
allow *_t
diff --git a/conform/data/fmtmsg.h-data b/conform/data/fmtmsg.h-data
index 67c35c1c93..d6d0ff1e2d 100644
--- a/conform/data/fmtmsg.h-data
+++ b/conform/data/fmtmsg.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
macro MM_HARD
constant MM_HARD
diff --git a/conform/data/fnmatch.h-data b/conform/data/fnmatch.h-data
index 96591d6d43..12a9a4ac2e 100644
--- a/conform/data/fnmatch.h-data
+++ b/conform/data/fnmatch.h-data
@@ -1,9 +1,9 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant FNM_NOMATCH
constant FNM_PATHNAME
constant FNM_PERIOD
constant FNM_NOESCAPE
-#if !defined XOPEN2K8 && !defined POSIX2008
+#if !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
constant FNM_NOSYS
#endif
diff --git a/conform/data/ftw.h-data b/conform/data/ftw.h-data
index eb499243a5..0fa586a6fc 100644
--- a/conform/data/ftw.h-data
+++ b/conform/data/ftw.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type {struct FTW}
element {struct FTW} int base
element {struct FTW} int level
diff --git a/conform/data/glob.h-data b/conform/data/glob.h-data
index 9f90f8b84b..fc2c7febf6 100644
--- a/conform/data/glob.h-data
+++ b/conform/data/glob.h-data
@@ -1,4 +1,8 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
+#ifdef POSIX
+# define size_t __size_t
+#endif
+
type glob_t
element glob_t size_t gl_pathc
element glob_t {char**} gl_pathv
diff --git a/conform/data/grp.h-data b/conform/data/grp.h-data
index 16519506e5..1edba738bb 100644
--- a/conform/data/grp.h-data
+++ b/conform/data/grp.h-data
@@ -1,4 +1,8 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
+#ifdef POSIX
+# define gid_t __gid_t
+#endif
+
type {struct group}
element {struct group} {char*} gr_name
element {struct group} gid_t gr_gid
@@ -13,9 +17,9 @@ type size_t
function {struct group*} getgrgid (gid_t)
function {struct group*} getgrnam (const char*)
-# ifndef POSIX
function int getgrgid_r (gid_t, struct group*, char *, size_t, struct group**)
function int getgrnam_r (const char *, struct group *, char *, size_t, struct group**)
+# ifndef POSIX
function {struct group*} getgrent (void)
function void endgrent (void)
# ifndef POSIX2008
diff --git a/conform/data/iconv.h-data b/conform/data/iconv.h-data
index 7071d90f60..79fb2d6def 100644
--- a/conform/data/iconv.h-data
+++ b/conform/data/iconv.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type iconv_t
# if defined XOPEN2K8 || defined POSIX2008
type size_t
diff --git a/conform/data/inttypes.h-data b/conform/data/inttypes.h-data
index 17d2b9717a..d308a52255 100644
--- a/conform/data/inttypes.h-data
+++ b/conform/data/inttypes.h-data
@@ -1,3 +1,4 @@
+#if defined ISO99 || defined ISO11 || defined XOPEN2K || defined POSIX2008
type int8_t
type int16_t
type int32_t
@@ -141,3 +142,4 @@ allow INT*
allow UINT*
allow PRI[Xa-z]*
allow SCN[Xa-z]*
+#endif
diff --git a/conform/data/langinfo.h-data b/conform/data/langinfo.h-data
index 95bc3f934e..51dd925a8a 100644
--- a/conform/data/langinfo.h-data
+++ b/conform/data/langinfo.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
constant CODESET
constant D_T_FMT
constant D_FMT
diff --git a/conform/data/libgen.h-data b/conform/data/libgen.h-data
index b749b8dcde..f59bbb0007 100644
--- a/conform/data/libgen.h-data
+++ b/conform/data/libgen.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {char*} basename (char*)
function {char*} dirname (char*)
diff --git a/conform/data/limits.h-data b/conform/data/limits.h-data
index 2e720a9b78..d7c97969e5 100644
--- a/conform/data/limits.h-data
+++ b/conform/data/limits.h-data
@@ -1,3 +1,31 @@
+constant CHAR_BIT >= 8
+constant SCHAR_MIN <= -127
+constant SCHAR_MAX >= 127
+constant UCHAR_MAX >= 255
+#ifdef __CHAR_UNSIGNED__
+constant CHAR_MIN 0
+constant CHAR_MAX UCHAR_MAX
+#else
+constant CHAR_MIN SCHAR_MIN
+constant CHAR_MAX SCHAR_MAX
+#endif
+constant MB_LEN_MAX >= 1
+constant SHRT_MIN <= -32767
+constant SHRT_MAX >= 32767
+constant USHRT_MAX >= 65535
+constant INT_MAX >= 2147483647
+constant INT_MIN <= 2147483647
+constant UINT_MAX >= 4294967295
+constant LONG_MAX >= 2147483647
+constant LONG_MIN <= 2147483647
+constant ULONG_MAX >= 4294967295
+#if defined ISO99 || defined ISO11 || defined XOPEN2K8 || defined POSIX2008
+constant LLONG_MIN <= -9223372036854775807ll
+constant LLONG_MAX >= 9223372036854775807ll
+constant ULLONG_MAX >= 18446744073709551615ull
+#endif
+
+#if !defined ISO && !defined ISO99 && !defined ISO11
// if these values exist, we should check the minimal value
allow AIO_LIST_MAX
allow AIO_MAX
@@ -59,7 +87,7 @@ constant _POSIX_CLOCKRES_MIN <= 20000000
optional-constant _POSIX_AIO_LISTIO_MAX 2
optional-constant _POSIX_AIO_MAX 1
optional-constant _POSIX_ARG_MAX 4096
-#ifdef XOPEN2K
+#if !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
optional-constant _POSIX_CHILD_MAX 25
#else
optional-constant _POSIX_CHILD_MAX 6
@@ -72,12 +100,12 @@ optional-constant _POSIX_MAX_INPUT 255
optional-constant _POSIX_MQ_OPEN_MAX 8
optional-constant _POSIX_MQ_PRIO_MAX 32
optional-constant _POSIX_NAME_MAX 14
-#ifdef XOPEN2K
+#if !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
optional-constant _POSIX_NGROUPS_MAX 8
#else
optional-constant _POSIX_NGROUPS_MAX 0
#endif
-#ifdef XOPEN2K
+#if !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
optional-constant _POSIX_OPEN_MAX 20
#else
optional-constant _POSIX_OPEN_MAX 16
@@ -111,25 +139,11 @@ optional-constant _POSIX2_LINE_MAX 2048
optional-constant _POSIX2_RE_DUP_MAX 255
optional-constant _XOPEN_IOV_MAX 16
-constant CHAR_BIT >= 8
-constant CHAR_MAX
-constant INT_MAX >= 2147483647
+#if !defined POSIX && !defined POSIX2008
+constant WORD_BIT >= 16
constant LONG_BIT >= 32
-constant MB_LEN_MAX >= 1
-constant LONG_MAX >= 2147483647
-constant SCHAR_MAX >= 127
-constant SHRT_MAX >= 32767
+#endif
constant SSIZE_MAX
-constant UCHAR_MAX >= 255
-constant UINT_MAX >= 4294967295
-constant ULONG_MAX >= 4294967295
-constant USHRT_MAX >= 65535
-constant WORD_BIT >= 16
-constant CHAR_MIN
-constant INT_MIN <= 2147483647
-constant LONG_MIN <= 2147483647
-constant SCHAR_MIN <= -127
-constant SHRT_MIN <= -32767
optional-constant CHARCLASS_NAME_MAX >= 14
optional-constant NL_ARGMAX >= 9
@@ -149,3 +163,4 @@ optional-constant TMP_MAX >= 10000
allow *_MAX
allow *_MIN
+#endif
diff --git a/conform/data/locale.h-data b/conform/data/locale.h-data
index f6e6c22c80..8897ee08a1 100644
--- a/conform/data/locale.h-data
+++ b/conform/data/locale.h-data
@@ -17,7 +17,7 @@ element {struct lconv} char p_cs_precedes
element {struct lconv} char p_sep_by_space
element {struct lconv} char p_sign_posn
element {struct lconv} {char*} thousands_sep
-#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
element {struct lconv} char int_n_cs_precedes
element {struct lconv} char int_n_sep_by_space
element {struct lconv} char int_n_sign_posn
diff --git a/conform/data/math.h-data b/conform/data/math.h-data
index f55e63298c..5f1f11d64c 100644
--- a/conform/data/math.h-data
+++ b/conform/data/math.h-data
@@ -1,3 +1,5 @@
+constant HUGE_VAL
+
#if !defined ISO && !defined POSIX
macro fpclassify
macro isfinite
@@ -12,7 +14,7 @@ macro islessequal
macro islessgreater
macro isunordered
-# ifndef POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX2008
constant M_E
constant M_LOG2E
constant M_LOG10E
@@ -29,7 +31,6 @@ constant M_SQRT1_2
constant MAXFLOAT
# endif
-constant HUGE_VAL
constant HUGE_VALF
constant HUGE_VALL
constant INFINITY
@@ -48,22 +49,28 @@ optional-macro FP_FAST_FMAL
constant FP_ILOGB0
constant FP_ILOGBNAN
+# if !defined XPG3 && !defined XPG4 && !defined UNIX98
macro MATH_ERRNO == 1
macro MATH_ERREXCEPT == 2
-#endif
macro math_errhandling
+# endif
+#endif
function double acos (double)
function double asin (double)
function double atan (double)
function double atan2 (double, double)
function double ceil (double)
+#if !defined ISO && !defined POSIX
function double copysign (double, double)
+#endif
function double cos (double)
function double cosh (double)
function double exp (double)
+#if !defined ISO && !defined POSIX
function double exp2 (double)
+#endif
function double fabs (double)
function double floor (double)
function double fmod (double, double)
@@ -71,7 +78,9 @@ function double frexp (double, int*)
function double ldexp (double, int)
function double log (double)
function double log10 (double)
+#if !defined ISO && !defined POSIX
function double log2 (double)
+#endif
function double modf (double, double*)
function double pow (double, double)
function double sin (double)
@@ -79,24 +88,27 @@ function double sinh (double)
function double sqrt (double)
function double tan (double)
function double tanh (double)
+#if !defined ISO && !defined POSIX
function double erf (double)
function double erfc (double)
+#endif
#if defined XPG3 || defined XPG4 || defined UNIX98
function double gamma (double)
#endif
+#if !defined ISO && !defined POSIX
function double hypot (double, double)
-#if !defined POSIX && !defined POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function double j0 (double)
function double j1 (double)
function double jn (int, double)
-#endif
+# endif
function double lgamma (double)
function double tgamma (double)
-#if !defined POSIX && !defined POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function double y0 (double)
function double y1 (double)
function double yn (int, double)
-#endif
+# endif
function double acosh (double)
function double asinh (double)
function double atanh (double)
@@ -117,9 +129,9 @@ function {long long} llrint (double)
function long lround (double)
function {long long} llround (double)
function double remquo (double, double, int*)
-#if defined XPG3 && defined XPG4 && defined UNIX98 && defined XOPEN2K
+# if defined XPG3 && defined XPG4 && defined UNIX98 && defined XOPEN2K
function double scalb (double, double)
-#endif
+# endif
function double scalbn (double, int)
function double scalbln (double, long)
function double fdim (double, double)
@@ -128,9 +140,10 @@ function double fmin (double, double)
function double fma (double, double, double)
function double nan (const char*)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
// variable signgam
allow signgam
+# endif
#endif
#if !defined ISO && !defined POSIX
@@ -165,14 +178,14 @@ function float erfcf (float)
function float gammaf (float)
#endif
function float hypotf (float, float)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function float j0f (float)
function float j1f (float)
function float jnf (int, float)
#endif
function float lgammaf (float)
function float tgammaf (float)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function float y0f (float)
function float y1f (float)
function float ynf (int, float)
@@ -239,14 +252,14 @@ function {long double} erfcl (long double)
function {long double} gammal (long double)
#endif
function {long double} hypotl (long double, long double)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {long double} j0l (long double)
function {long double} j1l (long double)
function {long double} jnl (int, long double)
#endif
function {long double} lgammal (long double)
function {long double} tgammal (long double)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {long double} y0l (long double)
function {long double} y1l (long double)
function {long double} ynl (int, long double)
diff --git a/conform/data/monetary.h-data b/conform/data/monetary.h-data
index 7935f2ab85..4f0cb9b681 100644
--- a/conform/data/monetary.h-data
+++ b/conform/data/monetary.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type size_t
type ssize_t
# if defined XOPEN2K8 || defined POSIX2008
diff --git a/conform/data/mqueue.h-data b/conform/data/mqueue.h-data
index 16335a556f..d6313b3c56 100644
--- a/conform/data/mqueue.h-data
+++ b/conform/data/mqueue.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
// should test for not an array type.
type mqd_t
diff --git a/conform/data/ndbm.h-data b/conform/data/ndbm.h-data
index af091de0fd..5d1fc6a3c1 100644
--- a/conform/data/ndbm.h-data
+++ b/conform/data/ndbm.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type datum
element datum {void*} dptr
element datum size_t dsize
diff --git a/conform/data/net/if.h-data b/conform/data/net/if.h-data
index d019978ab5..2c3eb4d9d5 100644
--- a/conform/data/net/if.h-data
+++ b/conform/data/net/if.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct if_nameindex}
element {struct if_nameindex} {unsigned int} if_index
diff --git a/conform/data/netdb.h-data b/conform/data/netdb.h-data
index 95afed81f6..a73004c615 100644
--- a/conform/data/netdb.h-data
+++ b/conform/data/netdb.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
optional-type in_port_t
optional-type in_addr_t
diff --git a/conform/data/netinet/in.h-data b/conform/data/netinet/in.h-data
index 391e1a551c..020a97eeae 100644
--- a/conform/data/netinet/in.h-data
+++ b/conform/data/netinet/in.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type in_port_t
type in_addr_t
diff --git a/conform/data/nl_types.h-data b/conform/data/nl_types.h-data
index ec2c18bc3e..67a0d7a198 100644
--- a/conform/data/nl_types.h-data
+++ b/conform/data/nl_types.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type nl_catd
type nl_item
diff --git a/conform/data/poll.h-data b/conform/data/poll.h-data
index 69fd724a3e..395e4b5011 100644
--- a/conform/data/poll.h-data
+++ b/conform/data/poll.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct pollfd}
element {struct pollfd} int fd
element {struct pollfd} {short int} events
diff --git a/conform/data/pthread.h-data b/conform/data/pthread.h-data
index 70486cc1ed..4af4d05b5b 100644
--- a/conform/data/pthread.h-data
+++ b/conform/data/pthread.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant PTHREAD_CANCEL_ASYNCHRONOUS
constant PTHREAD_CANCEL_ENABLE
constant PTHREAD_CANCEL_DEFERRED
@@ -31,17 +31,21 @@ constant PTHREAD_MUTEX_STALLED
# endif
type pthread_attr_t
+# if !defined POSIX
type pthread_barrier_t
type pthread_barrierattr_t
+# endif
type pthread_cond_t
type pthread_condattr_t
type pthread_key_t
type pthread_mutex_t
type pthread_mutexattr_t
type pthread_once_t
+# if !defined POSIX
type pthread_rwlock_t
type pthread_rwlockattr_t
type pthread_spinlock_t
+# endif
type pthread_t
function int pthread_attr_destroy (pthread_attr_t*)
@@ -66,6 +70,7 @@ function int pthread_attr_setschedpolicy (pthread_attr_t*, int)
function int pthread_attr_setscope (pthread_attr_t*, int)
function int pthread_attr_setstackaddr (pthread_attr_t*, void*)
function int pthread_attr_setstacksize (pthread_attr_t*, size_t)
+# if !defined POSIX
function int pthread_barrier_destroy (pthread_barrier_t*)
function int pthread_barrier_init (pthread_barrier_t*, const pthread_barrierattr_t*, unsigned int)
function int pthread_barrier_wait (pthread_barrier_t*)
@@ -73,6 +78,7 @@ function int pthread_barrierattr_destroy (pthread_barrierattr_t*)
function int pthread_barrierattr_getpshared (const pthread_barrierattr_t*, int*)
function int pthread_barrierattr_init (pthread_barrierattr_t*)
function int pthread_barrierattr_setpshared (pthread_barrierattr_t*, int)
+# endif
function int pthread_cancel (pthread_t)
// function int pthread_cleanup_push (void (*) (void*), void*)
macro pthread_cleanup_push
@@ -85,10 +91,14 @@ function int pthread_cond_signal (pthread_cond_t*)
function int pthread_cond_timedwait (pthread_cond_t*, pthread_mutex_t*, const struct timespec*)
function int pthread_cond_wait (pthread_cond_t*, pthread_mutex_t*)
function int pthread_condattr_destroy (pthread_condattr_t*)
+#if !defined POSIX && !defined UNIX98 && !defined XOPEN2K
optional-function int pthread_condattr_getclock (const pthread_condattr_t*, clockid_t*)
+#endif
function int pthread_condattr_getpshared (const pthread_condattr_t*, int*)
function int pthread_condattr_init (pthread_condattr_t*)
+#if !defined POSIX && !defined UNIX98 && !defined XOPEN2K
optional-function int pthread_condattr_setclock (pthread_condattr_t*, clockid_t)
+#endif
function int pthread_condattr_setpshared (pthread_condattr_t*, int)
function int pthread_create (pthread_t*, const pthread_attr_t*, void *(*) (void*), void*)
function int pthread_detach (pthread_t)
@@ -97,7 +107,9 @@ function void pthread_exit (void*)
# if !defined POSIX && !defined POSIX2008
function int pthread_getconcurrency (void)
# endif
+# if !defined POSIX
function int pthread_getcpuclockid (pthread_t, clockid_t*)
+# endif
function int pthread_getschedparam (pthread_t, int*, struct sched_param*)
function {void*} pthread_getspecific (pthread_key_t)
function int pthread_join (pthread_t, void**)
@@ -108,21 +120,27 @@ optional-function int pthread_mutex_getprioceiling (const pthread_mutex_t*, int*
function int pthread_mutex_init (pthread_mutex_t*, const pthread_mutexattr_t*)
function int pthread_mutex_lock (pthread_mutex_t*)
optional-function int pthread_mutex_setprioceiling (pthread_mutex_t*, int, int*)
+# if !defined POSIX
function int pthread_mutex_timedlock (pthread_mutex_t*, const struct timespec*)
+# endif
function int pthread_mutex_trylock (pthread_mutex_t*)
function int pthread_mutex_unlock (pthread_mutex_t*)
function int pthread_mutexattr_destroy (pthread_mutexattr_t*)
optional-function int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t*, int*)
optional-function int pthread_mutexattr_getprotocol (const pthread_mutexattr_t*, int*)
function int pthread_mutexattr_getpshared (const pthread_mutexattr_t*, int*)
+# if !defined POSIX
function int pthread_mutexattr_gettype (const pthread_mutexattr_t*, int*)
+# endif
function int pthread_mutexattr_init (pthread_mutexattr_t*)
optional-function int pthread_mutexattr_setprioceiling (pthread_mutexattr_t*, int)
optional-function int pthread_mutexattr_setprotocol (pthread_mutexattr_t*, int)
function int pthread_mutexattr_setpshared (pthread_mutexattr_t*, int)
+# if !defined POSIX
function int pthread_mutexattr_settype (pthread_mutexattr_t*, int)
+# endif
function int pthread_once (pthread_once_t*, void (*) (void))
-# ifndef POSIX
+# if !defined POSIX
function int pthread_rwlock_init (pthread_rwlock_t*, const pthread_rwlockattr_t*)
function int pthread_rwlock_rdlock (pthread_rwlock_t*)
function int pthread_rwlock_timedrdlock (pthread_rwlock_t*, const struct timespec*)
@@ -144,14 +162,16 @@ function int pthread_setconcurrency (int)
# endif
function int pthread_setschedparam (pthread_t, int, const struct sched_param*)
function int pthread_setspecific (pthread_key_t, const void*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+# if !defined POSIX && !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function int pthread_sigmask (int, const sigset_t*, sigset_t*)
-#endif
+# endif
+# if !defined POSIX
function int pthread_spin_destroy (pthread_spinlock_t*)
function int pthread_spin_init (pthread_spinlock_t*, int)
function int pthread_spin_lock (pthread_spinlock_t*)
function int pthread_spin_trylock (pthread_spinlock_t*)
function int pthread_spin_unlock (pthread_spinlock_t*)
+# endif
function void pthread_testcancel (void)
# if defined XOPEN2K8 || defined POSIX2008
function int pthread_mutex_consistent (pthread_mutex_t *)
diff --git a/conform/data/pwd.h-data b/conform/data/pwd.h-data
index a8edf27730..64d617fdcf 100644
--- a/conform/data/pwd.h-data
+++ b/conform/data/pwd.h-data
@@ -1,4 +1,9 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
+#ifdef POSIX
+# define uid_t __uid_t
+# define gid_t __gid_t
+#endif
+
type {struct passwd}
element {struct passwd} {char*} pw_name
element {struct passwd} uid_t pw_uid
@@ -18,7 +23,7 @@ function {struct passwd*} getpwnam (const char*)
function {struct passwd*} getpwuid (uid_t)
function int getpwnam_r (const char*, struct passwd*, char*, size_t, struct passwd**)
function int getpwuid_r (uid_t, struct passwd*, char*, size_t, struct passwd**)
-# ifndef POSIX2008
+# if !defined POSIX && !defined POSIX2008
function void endpwent (void)
function {struct passwd*} getpwent (void)
function void setpwent (void)
diff --git a/conform/data/regex.h-data b/conform/data/regex.h-data
index 73e06a8266..2822f0b398 100644
--- a/conform/data/regex.h-data
+++ b/conform/data/regex.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type regex_t
element regex_t size_t re_nsub
@@ -28,7 +28,7 @@ constant REG_EBRACE
constant REG_BADBR
constant REG_ESPACE
constant REG_BADRPT
-# if !defined XOPEN2K8 && !defined POSIX2008
+# if !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
constant REG_ENOSYS
# endif
diff --git a/conform/data/sched.h-data b/conform/data/sched.h-data
index 585145011a..78eb2e4d78 100644
--- a/conform/data/sched.h-data
+++ b/conform/data/sched.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type {struct sched_param}
element {struct sched_param} int sched_priority
optional-element {struct sched_param} int sched_ss_low_priority
diff --git a/conform/data/search.h-data b/conform/data/search.h-data
index dadb1ff71c..3abbc6690f 100644
--- a/conform/data/search.h-data
+++ b/conform/data/search.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type ENTRY
type {struct entry}
element {struct entry} {char*} key
diff --git a/conform/data/semaphore.h-data b/conform/data/semaphore.h-data
index 5484884fff..9bb3d44d94 100644
--- a/conform/data/semaphore.h-data
+++ b/conform/data/semaphore.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type sem_t
constant SEM_FAILED
@@ -9,7 +9,9 @@ function int sem_getvalue (sem_t*, int*)
function int sem_init (sem_t*, int, unsigned int)
function {sem_t*} sem_open (const char*, int, ...)
function int sem_post (sem_t*)
+# if !defined POSIX
function int sem_timedwait (sem_t*, const struct timespec*)
+# endif
function int sem_trywait (sem_t*)
function int sem_unlink (const char*)
function int sem_wait (sem_t*)
diff --git a/conform/data/setjmp.h-data b/conform/data/setjmp.h-data
index a89a33fa73..310105b2a9 100644
--- a/conform/data/setjmp.h-data
+++ b/conform/data/setjmp.h-data
@@ -1,10 +1,10 @@
type jmp_buf
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type sigjmp_buf
#endif
function void longjmp (jmp_buf, int)
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
function void siglongjmp (sigjmp_buf, int)
# if !defined POSIX && !defined POSIX2008
function void _longjmp (jmp_buf, int)
@@ -12,7 +12,7 @@ function void _longjmp (jmp_buf, int)
#endif
macro-function int setjmp (jmp_buf)
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
macro-function int sigsetjmp (sigjmp_buf, int)
# if !defined POSIX && !defined POSIX2008
macro-function int _setjmp (jmp_buf)
diff --git a/conform/data/signal.h-data b/conform/data/signal.h-data
index 6dbf1fb847..18f1b9e096 100644
--- a/conform/data/signal.h-data
+++ b/conform/data/signal.h-data
@@ -1,13 +1,20 @@
typed-constant SIG_DFL {void(*)(int)}
typed-constant SIG_ERR {void(*)(int)}
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
typed-constant SIG_HOLD {void(*)(int)}
#endif
typed-constant SIG_IGN {void(*)(int)}
type sig_atomic_t
+#if !defined ISO && !defined ISO99 && !defined ISO11
type sigset_t
+#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type pid_t
+#elif defined POSIX
+# define pid_t __pid_t
+# define uid_t __uid_t
+#endif
#if defined XOPEN2K8 || defined POSIX2008
type size_t
type pthread_t
@@ -26,6 +33,7 @@ element {struct timespec} __time_t tv_sec
element {struct timespec} long tv_nsec
#endif
+#if defined POSIX || defined UNIX98 || defined XOPEN2K8 || defined POSIX2008
element {union sigval} int sival_int
element {union sigval} {void*} sival_ptr
@@ -46,19 +54,25 @@ type {union sigval}
macro SIGRTMIN
macro SIGRTMAX
+#endif
constant SIGABRT
-constant SIGALRM
constant SIGFPE
-constant SIGHUP
constant SIGILL
constant SIGINT
+constant SIGSEGV
+constant SIGTERM
+
+function void (*signal (int, void(*)(int)))(int)
+function int raise (int)
+
+#if !defined ISO && !defined ISO99 && !defined ISO11
+constant SIGALRM
+constant SIGHUP
constant SIGIO
constant SIGKILL
constant SIGPIPE
constant SIGQUIT
-constant SIGSEGV
-constant SIGTERM
constant SIGUSR1
constant SIGUSR2
constant SIGCHLD
@@ -71,9 +85,9 @@ constant SIGBUS
constant SIGPOLL
constant SIGPROF
constant SIGSYS
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
constant SIGTRAP
-#endif
+# endif
constant SIGURG
constant SIGVTALRM
constant SIGXCPU
@@ -90,21 +104,24 @@ constant SA_NOCLDSTOP
constant SIG_BLOCK
constant SIG_UNBLOCK
constant SIG_SETMASK
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
constant SA_ONSTACK
-#endif
+# endif
+# if !defined POSIX
constant SA_RESETHAND
constant SA_RESTART
constant SA_SIGINFO
constant SA_NOCLDWAIT
constant SA_NODEFER
-#if !defined POSIX && !defined POSIX2008
+# endif
+# if !defined POSIX && !defined POSIX2008
constant SS_ONSTACK
constant SS_DISABLE
constant MINSIGSTKSZ
constant SIGSTKSZ
-#endif
+# endif
+# if !defined POSIX
type ucontext_t
element ucontext_t {ucontext_t*} uc_link
@@ -122,13 +139,14 @@ type {struct sigstack}
element {struct sigstack} int ss_onstack
element {struct sigstack} {void*} ss_sp
+# endif
type siginfo_t
element siginfo_t int si_signo
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
element siginfo_t int si_errno
-#endif
+# endif
element siginfo_t int si_code
element siginfo_t pid_t si_pid
element siginfo_t uid_t si_uid
@@ -178,50 +196,50 @@ constant SI_TIMER
constant SI_ASYNCIO
constant SI_MESGQ
-#if !defined XOPEN2K8 && !defined POSIX && !defined POSIX2008
+# if !defined XOPEN2K8 && !defined POSIX && !defined POSIX2008
function void (*bsd_signal (int, void(*)(int)))(int)
-#endif
+# endif
function int kill (pid_t, int)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
function int killpg (pid_t, int)
-#endif
+# endif
function int pthread_kill (pthread_t, int)
function int pthread_sigmask (int, const sigset_t*, sigset_t*)
-function int raise (int)
function int sigaction (int, const struct sigaction*, struct sigaction*)
function int sigaddset (sigset_t*, int)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
function int sigaltstack (const stack_t*, stack_t*)
-#endif
+# endif
function int sigdelset (sigset_t*, int)
function int sigemptyset (sigset_t*)
function int sigfillset (sigset_t*)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
function int sighold (int)
function int sigignore (int)
function int siginterrupt (int, int)
-#endif
+# endif
function int sigismember (const sigset_t*, int)
-function void (*signal (int, void(*)(int)))(int)
#if !defined POSIX && !defined POSIX2008
function int sigpause (int)
-#endif
+# endif
function int sigpending (sigset_t*)
function int sigprocmask (int, const sigset_t*, sigset_t*)
function int sigqueue (pid_t, int, const union sigval)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
function int sigrelse (int)
function void (*sigset (int, void(*)(int)))(int)
-#endif
+# endif
+# if !defined POSIX
function int sigstack (struct sigstack*, struct sigstack*)
+# endif
function int sigsuspend (const sigset_t*)
function int sigtimedwait (const sigset_t*, siginfo_t*, const struct timespec*)
function int sigwait (const sigset_t*, int*)
function int sigwaitinfo (const sigset_t*, siginfo_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function void psiginfo (const siginfo_t*, const char*)
function void psignal (int, const char*)
-#endif
+# endif
// The following expressions are not entirely correct but the current
// poorfnmatch implementation doesn't grok the right form.
@@ -248,3 +266,7 @@ allow TRAP_*
allow *_t
allow-header time.h
+#endif
+
+allow SIG[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*
+allow SIG_*
diff --git a/conform/data/spawn.h-data b/conform/data/spawn.h-data
index 81f32d0308..637f2bf0d0 100644
--- a/conform/data/spawn.h-data
+++ b/conform/data/spawn.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type posix_spawnattr_t
type posix_spawn_file_actions_t
# if defined XOPEN2K8 || defined POSIX2008
diff --git a/conform/data/stdarg.h-data b/conform/data/stdarg.h-data
index ee228d0cd0..a9b5d6532b 100644
--- a/conform/data/stdarg.h-data
+++ b/conform/data/stdarg.h-data
@@ -4,6 +4,9 @@ type va_list
macro va_start
macro va_arg
macro va_end
+
+#if defined ISO99 || defined ISO11 || defined POSIX2008 || defined XOPEN2K8
macro va_copy
+#endif
allow *_t
diff --git a/conform/data/stdio.h-data b/conform/data/stdio.h-data
index cba7721d9a..abd3a8e8c1 100644
--- a/conform/data/stdio.h-data
+++ b/conform/data/stdio.h-data
@@ -6,9 +6,11 @@ constant _IOFBF
constant _IOLBF
constant _IONBF
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant L_ctermid
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+# if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
constant L_cuserid
+# endif
#endif
constant L_tmpnam
@@ -22,7 +24,7 @@ constant EOF
constant NULL
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
constant P_tmpdir
#endif
@@ -32,7 +34,11 @@ macro stderr
type FILE
type fpos_t
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type va_list
+#else
+#define va_list _G_va_list
+#endif
type size_t
#if defined XOPEN2K8 || defined POSIX2008
type off_t
@@ -40,23 +46,31 @@ type ssize_t
#endif
function void clearerr (FILE*)
+#if !defined ISO && !defined ISO99 && !defined ISO11
function {char*} ctermid (char*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+# if defined XPG3 || defined XPG4 || defined UNIX98
function {char*} cuserid (char*)
+# endif
#endif
#if defined XOPEN2K8 || defined POSIX2008
function int dprintf (int, const char*, ...)
#endif
function int fclose (FILE*)
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined XPG3 && !defined XPG4
function {FILE*} fdopen (int, const char*)
+#endif
function int feof (FILE*)
function int ferror (FILE*)
function int fflush (FILE*)
function int fgetc (FILE*)
function int fgetpos (FILE*, fpos_t*)
function {char*} fgets (char*, int, FILE*)
+#if !defined ISO && !defined ISO99 && !defined ISO11
function int fileno (FILE*)
+#endif
+#if defined POSIX || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function void flockfile (FILE*)
+#endif
#if defined XOPEN2K8 || defined POSIX2008
function {FILE*} fmemopen (void*, size_t, const char*)
#endif
@@ -68,41 +82,57 @@ function size_t fread (void*, size_t, size_t, FILE*)
function {FILE*} freopen (const char*, const char*, FILE*)
function int fscanf (FILE*, const char*, ...)
function int fseek (FILE*, long int, int)
+#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int fseeko (FILE*, off_t, int)
+#endif
function int fsetpos (FILE*, const fpos_t*)
function {long int} ftell (FILE*)
+#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function off_t ftello (FILE*)
+#endif
+#if defined POSIX || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int ftrylockfile (FILE*)
function void funlockfile (FILE*)
+#endif
function size_t fwrite (const void*, size_t, size_t, FILE*)
function int getc (FILE*)
function int getchar (void)
+#if defined POSIX || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int getc_unlocked (FILE*)
function int getchar_unlocked ()
+#endif
#if defined XOPEN2K8 || defined POSIX2008
function ssize_t getdelim (char**, size_t*, int, FILE*)
function ssize_t getline (char**, size_t*, FILE*)
#endif
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98
function int getopt (int, char *const[], const char *)
#endif
+#if !defined ISO11
function {char*} gets (char*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+#endif
+#if defined XPG3 || defined XPG4 || defined UNIX98
function int getw (FILE*)
#endif
#if defined XOPEN2K8 || defined POSIX2008
function {FILE*} open_memstream (char**, size_t*)
#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11
function int pclose (FILE*)
+#endif
function void perror (const char*)
+#if !defined ISO && !defined ISO99 && !defined ISO11
function {FILE*} popen (const char*, const char*)
+#endif
function int printf (const char*, ...)
function int putc (int, FILE*)
function int putchar (int)
+#if defined POSIX || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int putc_unlocked (int, FILE*)
function int putchar_unlocked (int)
+#endif
function int puts (const char*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98
function int putw (int, FILE*)
#endif
function int remove (const char*)
@@ -114,10 +144,12 @@ function void rewind (FILE*)
function int scanf (const char*, ...)
function void setbuf (FILE*, char*)
function int setvbuf (FILE*, char*, int, size_t)
+#if !defined ISO && !defined POSIX
function int snprintf (char*, size_t, const char*, ...)
+#endif
function int sprintf (char *, const char *, ...)
function int sscanf (const char*, const char*, ...)
-#if !defined POSIX && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8
function {char*} tempnam (const char*, const char*)
#endif
function {FILE*} tmpfile (void)
@@ -127,20 +159,22 @@ function int ungetc (int, FILE*)
function int vdprintf (int, const char*, va_list)
#endif
function int vfprintf (FILE*, const char*, va_list)
-#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
function int vfscanf (FILE*, const char*, va_list)
#endif
function int vprintf (const char*, va_list)
-#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
function int vscanf (const char*, va_list)
#endif
+#if !defined ISO && !defined POSIX
function int vsnprintf (char*, size_t, const char*, va_list)
+#endif
function int vsprintf (char*, const char*, va_list)
-#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
function int vsscanf (const char*, const char*, va_list)
#endif
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
variable {char*} optarg
variable int opterr
diff --git a/conform/data/stdlib.h-data b/conform/data/stdlib.h-data
index 760b5b3b4c..f42d4a7ac4 100644
--- a/conform/data/stdlib.h-data
+++ b/conform/data/stdlib.h-data
@@ -1,15 +1,17 @@
-macro EXIT_FAILURE
-constant EXIT_SUCCESS 0
-macro NULL
-constant RAND_MAX >= 32767
-macro MB_CUR_MAX
-
type div_t
element div_t int quot
element div_t int rem
type ldiv_t
element ldiv_t long quot
element ldiv_t long rem
+
+macro EXIT_FAILURE
+macro EXIT_SUCCESS 0
+
+macro NULL
+constant RAND_MAX >= 32767
+macro MB_CUR_MAX
+
#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
type lldiv_t
element lldiv_t {long long} quot
@@ -18,6 +20,7 @@ element lldiv_t {long long} rem
type size_t
type wchar_t
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
constant WNOHANG
constant WUNTRACED
@@ -27,58 +30,69 @@ macro WIFSIGNALED
macro WIFSTOPPED
macro WSTOPSIG
macro WTERMSIG
+#endif
+#if !defined ISO && !defined XPG3 && !defined XPG4 && !defined UNIX98 && !defined POSIX
function void _Exit (int)
-#if !defined POSIX && !defined POSIX2008
+#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function long a64l (const char*)
#endif
function void abort (void)
function int abs (int)
+#if defined ISO11
+function {void *} aligned_alloc (size_t, size_t)
+#endif
function int atexit (void(*)(void))
+#if defined ISO11
+function int at_quick_exit (void (*) (void))
+#endif
function double atof (const char*)
function int atoi (const char*)
function {long int} atol (const char*)
-#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
function {long long} atoll (const char*)
#endif
function {void*} bsearch (const void*, const void*, size_t, size_t, int(*)(const void*, const void*))
function {void*} calloc (size_t, size_t)
function div_t div (int, int)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function double drand48 (void)
#endif
-#if !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98 || defined XOPEN2K
function {char*} ecvt (double, int, int*, int*)
#endif
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function double erand48 (unsigned short int[3])
#endif
function void exit (int)
-#if !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98 || defined XOPEN2K
function {char*} fcvt (double, int, int*, int*)
#endif
function void free (void*)
-#if !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98 || defined XOPEN2K
function {char*} gcvt (double, int, char*)
#endif
function {char*} getenv (const char*)
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
function int getsubopt (char**, char *const*, char**)
-#if !defined POSIX && !defined POSIX2008
+#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function int grantpt (int)
function {char*} initstate (unsigned int, char*, size_t)
function {long int} jrand48 (unsigned short int[3])
function {char*} l64a (long)
#endif
function {long int} labs (long int)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function void lcong48 (unsigned short int[7])
#endif
function ldiv_t ldiv (long int, long int)
-#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
function {long long} llabs (long long)
function lldiv_t lldiv (long long, long long)
#endif
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {long int} lrand48 (void)
#endif
function {void*} malloc (size_t)
@@ -88,40 +102,51 @@ function int mbtowc (wchar_t*, const char*, size_t)
#if defined XOPEN2K8 || defined POSIX2008
function {char*} mkdtemp (char*)
#endif
-#if !defined XOPEN2K8 && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
function {char*} mktemp (char*)
#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
function int mkstemp (char*)
-#if !defined POSIX && !defined POSIX2008
+#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {long int} mrand48 (void)
function {long int} nrand48 (unsigned short int[3])
#endif
+#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int posix_memalign (void**, size_t, size_t)
+#endif
#if defined XOPEN2K || defined XOPEN2K8
function int posix_openpt (int)
#endif
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {char*} ptsname (int)
function int putenv (char*)
#endif
function void qsort (void*, size_t, size_t, int(*)(const void*, const void*))
+#if defined ISO11
+function void quick_exit (int)
+#endif
function int rand (void)
+#if defined POSIX || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int rand_r (unsigned int*)
-#if !defined POSIX && !defined POSIX2008
+#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function long random (void)
#endif
function {void*} realloc (void*, size_t)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function {char*} realpath (const char*, char*)
function {unsigned short int*} seed48 (unsigned short int[3])
#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
function int setenv (const char*, const char*, int)
-#if !defined POSIX && !defined POSIX2008
+#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function void setkey (const char*)
function {char*} setstate (char*)
#endif
function void srand (unsigned int)
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function void srand48 (long int)
function void srandom (unsigned)
#endif
@@ -129,14 +154,16 @@ function double strtod (const char*, char**)
function {long int} strtol (const char*, char**, int)
function {unsigned long int} strtoul (const char*, char**, int)
function int system (const char*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+#if defined XPG3 || defined XPG4 || defined UNIX98
function int ttyslot (void)
#endif
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function int unlockpt (int)
#endif
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
function int unsetenv (const char*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX && !defined POSIX2008
+#endif
+#if defined XPG3 || defined XPG4 || defined UNIX98
function {void*} valloc (size_t)
#endif
function size_t wcstombs (char*, const wchar_t*, size_t)
diff --git a/conform/data/string.h-data b/conform/data/string.h-data
index 1c4ae0814e..0403c2e328 100644
--- a/conform/data/string.h-data
+++ b/conform/data/string.h-data
@@ -5,7 +5,7 @@ type size_t
type locale_t
#endif
-#if !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 & !defined ISO11 && !defined POSIX && !defined POSIX2008
function {void*} memccpy (void*, const void*, int, size_t)
#endif
function {void*} memchr (const void*, int, size_t)
@@ -27,7 +27,9 @@ function int strcoll_l (const char*, const char*, locale_t)
#endif
function {char*} strcpy (char*, const char*)
function size_t strcspn (const char*, const char*)
+#if !defined ISO && !defined ISO99 & !defined ISO11 && !defined POSIX && !defined POSIX2008
function {char*} strdup (const char*)
+#endif
function {char*} strerror (int)
#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int strerror_r (int, char*, size_t)
@@ -51,7 +53,9 @@ function {char*} strsignal (int)
function size_t strspn (const char*, const char*)
function {char*} strstr (const char*, const char*)
function {char*} strtok (char*, const char*)
+#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function {char*} strtok_r (char*, const char*, char**)
+#endif
function size_t strxfrm (char*, const char*, size_t)
#if defined XOPEN2K8 || defined POSIX2008
function size_t strxfrm_l (char*, const char*, size_t, locale_t)
diff --git a/conform/data/strings.h-data b/conform/data/strings.h-data
index 01cd867426..b61ac50e6f 100644
--- a/conform/data/strings.h-data
+++ b/conform/data/strings.h-data
@@ -1,23 +1,25 @@
-#if !defined XOPEN2K8 && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
+# if !defined XOPEN2K8 && !defined POSIX2008
function int bcmp (const void*, const void*, size_t)
function void bcopy (const void*, void*, size_t)
function void bzero (void*, size_t)
function {char*} index (const char*, int)
function {char*} rindex (const char*, int)
-#endif
-#if !defined POSIX && !defined POSIX2008
+# endif
+# if !defined POSIX2008
function int ffs (int)
-#endif
+# endif
function int strcasecmp (const char*, const char*)
function int strncasecmp (const char*, const char*, size_t)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function int strcasecmp_l (const char*, const char*, locale_t)
function int strncasecmp_l (const char*, const char*, size_t, locale_t)
-#endif
+# endif
type size_t
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
type locale_t
-#endif
+# endif
allow *_t
+#endif
diff --git a/conform/data/stropts.h-data b/conform/data/stropts.h-data
index c760282046..d978a1c5e9 100644
--- a/conform/data/stropts.h-data
+++ b/conform/data/stropts.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct bandinfo}
element {struct bandinfo} {unsigned char} bi_pri
@@ -135,3 +136,4 @@ allow S_*
allow SND*
allow STR*
allow *_t
+#endif
diff --git a/conform/data/sys/ipc.h-data b/conform/data/sys/ipc.h-data
index 28918c196d..8f06d2ba0a 100644
--- a/conform/data/sys/ipc.h-data
+++ b/conform/data/sys/ipc.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type {struct ipc_perm}
element {struct ipc_perm} uid_t uid
diff --git a/conform/data/sys/mman.h-data b/conform/data/sys/mman.h-data
index c737efbc23..21be6ff59a 100644
--- a/conform/data/sys/mman.h-data
+++ b/conform/data/sys/mman.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11
constant PROT_READ
constant PROT_WRITE
constant PROT_EXEC
@@ -16,11 +17,13 @@ constant MCL_FUTURE
constant MAP_FAILED
+#ifndef POSIX
constant POSIX_MADV_NORMAL
constant POSIX_MADV_SEQUENTIAL
constant POSIX_MADV_RANDOM
constant POSIX_MADV_WILLNEED
constant POSIX_MADV_DONTNEED
+#endif
optional-constant POSIX_TYPED_MEM_ALLOCATE
optional-constant POSIX_TYPED_MEM_ALLOCATE_CONTIG
@@ -41,7 +44,9 @@ function int msync (void*, size_t, int)
function int munlock (const void*, size_t)
function int munlockall (void)
function int munmap (void*, size_t)
+#ifndef POSIX
function int posix_madvise (void*, size_t, int)
+#endif
optional-function int posix_mem_offset (const void*, size_t, off_t*, size_t*, int*)
optional-function int posix_typed_mem_get_info (int, struct posix_typed_mem_info*)
optional-function int posix_typed_mem_open (const char*, int, int)
@@ -54,3 +59,4 @@ allow MCL_*
allow MS_*
allow PROT_*
allow *_t
+#endif
diff --git a/conform/data/sys/msg.h-data b/conform/data/sys/msg.h-data
index ae83356b54..a8290cab52 100644
--- a/conform/data/sys/msg.h-data
+++ b/conform/data/sys/msg.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type {struct msqid_ds}
type msgqnum_t
diff --git a/conform/data/sys/resource.h-data b/conform/data/sys/resource.h-data
index 52f83f523b..67517adeda 100644
--- a/conform/data/sys/resource.h-data
+++ b/conform/data/sys/resource.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
constant PRIO_PROCESS
constant PRIO_PGRP
constant PRIO_USER
diff --git a/conform/data/sys/select.h-data b/conform/data/sys/select.h-data
index ea890d6ae9..84e07e9729 100644
--- a/conform/data/sys/select.h-data
+++ b/conform/data/sys/select.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type time_t
type suseconds_t
diff --git a/conform/data/sys/sem.h-data b/conform/data/sys/sem.h-data
index 665b397c58..61eecf2951 100644
--- a/conform/data/sys/sem.h-data
+++ b/conform/data/sys/sem.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
constant SEM_UNDO
constant GETNCNT
diff --git a/conform/data/sys/shm.h-data b/conform/data/sys/shm.h-data
index 39df8944ab..a006cdbb92 100644
--- a/conform/data/sys/shm.h-data
+++ b/conform/data/sys/shm.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
constant SHM_RDONLY
symbol SHMLBA
constant SHM_RND
diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data
index 5fdd6cf6bf..60d8b00a74 100644
--- a/conform/data/sys/socket.h-data
+++ b/conform/data/sys/socket.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type socklen_t
type sa_family_t
diff --git a/conform/data/sys/stat.h-data b/conform/data/sys/stat.h-data
index b0e10a4c7f..a7db93f576 100644
--- a/conform/data/sys/stat.h-data
+++ b/conform/data/sys/stat.h-data
@@ -1,4 +1,28 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
+
+#if !defined POSIX && !defined POSIX2008
+type blkcnt_t
+type blksize_t
+#endif
+#ifndef POSIX
+type dev_t
+type ino_t
+type mode_t
+type nlink_t
+type uid_t
+type gid_t
+type off_t
+type time_t
+#else
+# define dev_t __dev_t
+# define ino_t __ino_t
+# define mode_t __mode_t
+# define nlink_t __nlink_t
+# define uid_t __uid_t
+# define gid_t __gid_t
+# define off_t __off_t
+# define time_t __time_t
+#endif
type {struct stat}
@@ -20,18 +44,6 @@ element {struct stat} blksize_t st_blksize
element {struct stat} blkcnt_t st_blocks
#endif
-#if !defined POSIX && !defined POSIX2008
-type blkcnt_t
-type blksize_t
-#endif
-type dev_t
-type ino_t
-type mode_t
-type nlink_t
-type uid_t
-type gid_t
-type off_t
-type time_t
# if defined XOPEN2K8 || defined POSIX2008
type {struct timespec}
element {struct timespec} time_t tv_sec
@@ -97,7 +109,9 @@ function int fstat (int, struct stat*)
function int fstatat (int, const char*, struct stat*, int)
function int futimens (int, const struct timespec[2])
# endif
+#if !defined POSIX
function int lstat (const char*, struct stat*)
+#endif
function int mkdir (const char*, mode_t)
# if defined XOPEN2K8 || defined POSIX2008
function int mkdirat (int, const char*, mode_t)
diff --git a/conform/data/sys/statvfs.h-data b/conform/data/sys/statvfs.h-data
index d7312cdb87..750f22b4e1 100644
--- a/conform/data/sys/statvfs.h-data
+++ b/conform/data/sys/statvfs.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct statvfs}
element {struct statvfs} {unsigned long} f_bsize
@@ -24,3 +25,4 @@ function int fstatvfs (int, struct statvfs*)
allow f_*
allow ST_*
allow *_t
+#endif
diff --git a/conform/data/sys/time.h-data b/conform/data/sys/time.h-data
index 7e3407ab07..98e590989c 100644
--- a/conform/data/sys/time.h-data
+++ b/conform/data/sys/time.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type {struct timeval}
element {struct timeval} time_t tv_sec
diff --git a/conform/data/sys/timeb.h-data b/conform/data/sys/timeb.h-data
index d012f5d69a..460da6ee8c 100644
--- a/conform/data/sys/timeb.h-data
+++ b/conform/data/sys/timeb.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct timeb}
element {struct timeb} time_t time
@@ -10,3 +11,4 @@ type time_t
function int ftime (struct timeb*)
allow *_t
+#endif
diff --git a/conform/data/sys/times.h-data b/conform/data/sys/times.h-data
index 9c3237eb83..d10444d359 100644
--- a/conform/data/sys/times.h-data
+++ b/conform/data/sys/times.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct tms}
element {struct tms} clock_t tms_utime
@@ -11,3 +12,4 @@ function clock_t times (struct tms*)
allow tms_*
allow *_t
+#endif
diff --git a/conform/data/sys/types.h-data b/conform/data/sys/types.h-data
index 4070be5c59..824392d498 100644
--- a/conform/data/sys/types.h-data
+++ b/conform/data/sys/types.h-data
@@ -1,15 +1,19 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type blkcnt_t
+#if !defined POSIX
type blksize_t
type clock_t
type clockid_t
+#endif
type dev_t
# if !defined POSIX
type fsblkcnt_t
type fsfilcnt_t
# endif
type gid_t
+#if !defined POSIX
type id_t
+#endif
type ino_t
# if !defined POSIX && !defined POSIX2008
type key_t
@@ -19,17 +23,21 @@ type nlink_t
type off_t
type pid_t
type pthread_attr_t
+#if !defined POSIX
type pthread_barrier_t
type pthread_barrierattr_t
+#endif
type pthread_cond_t
type pthread_condattr_t
type pthread_key_t
type pthread_mutex_t
type pthread_mutexattr_t
type pthread_once_t
+#if !defined POSIX
type pthread_rwlock_t
type pthread_rwlockattr_t
type pthread_spinlock_t
+#endif
type pthread_t
type size_t
type ssize_t
diff --git a/conform/data/sys/uio.h-data b/conform/data/sys/uio.h-data
index 03d0a3bf3a..3352695104 100644
--- a/conform/data/sys/uio.h-data
+++ b/conform/data/sys/uio.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct iovec}
element {struct iovec} {void*} iov_base
diff --git a/conform/data/sys/un.h-data b/conform/data/sys/un.h-data
index bb976f2b0b..ee157ed5f8 100644
--- a/conform/data/sys/un.h-data
+++ b/conform/data/sys/un.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type {struct sockaddr_un}
element {struct sockaddr_un} sa_family_t sun_family
diff --git a/conform/data/sys/utsname.h-data b/conform/data/sys/utsname.h-data
index 680b666b1d..3564627394 100644
--- a/conform/data/sys/utsname.h-data
+++ b/conform/data/sys/utsname.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type {struct utsname}
element {struct utsname} char sysname []
diff --git a/conform/data/sys/wait.h-data b/conform/data/sys/wait.h-data
index 2fd4c8decf..818766921d 100644
--- a/conform/data/sys/wait.h-data
+++ b/conform/data/sys/wait.h-data
@@ -1,4 +1,9 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
+#ifdef POSIX
+# define pid_t __pid_t
+# define uid_t __uid_t
+#endif
+
constant WNOHANG
constant WUNTRACED
@@ -20,6 +25,7 @@ constant WCONTINUED
constant WNOHANG
constant WNOWAIT
+#if !defined POSIX
type idtype_t
constant P_ALL
@@ -27,6 +33,7 @@ constant P_PID
constant P_PGID
type id_t
+#endif
type siginfo_t
@@ -40,18 +47,22 @@ element siginfo_t int si_status
element siginfo_t long si_band
element siginfo_t {union sigval} si_value
+#if !defined POSIX
type {struct rusage}
element {struct rusage} {struct timeval} ru_utime
element {struct rusage} {struct timeval} ru_stime
+#endif
type pid_t
function pid_t wait (int*)
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+#if !defined POSIX && !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function pid_t wait3 (int*, int, struct rusage*)
#endif
+#if !defined POSIX
function int waitid (idtype_t, id_t, siginfo_t*, int)
+#endif
function pid_t waitpid (pid_t, int*, int)
allow-header signal.h
diff --git a/conform/data/syslog.h-data b/conform/data/syslog.h-data
index f0aa65c693..26fef76ac1 100644
--- a/conform/data/syslog.h-data
+++ b/conform/data/syslog.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
constant LOG_PID
constant LOG_CONS
constant LOG_NDELAY
diff --git a/conform/data/tar.h-data b/conform/data/tar.h-data
index fcbfb127b4..aa0cebc3f1 100644
--- a/conform/data/tar.h-data
+++ b/conform/data/tar.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
macro-str TMAGIC "ustar"
constant TMAGLEN 6
macro-str TVERSION "00"
diff --git a/conform/data/termios.h-data b/conform/data/termios.h-data
index d32bd6bf3c..3f7ab4b321 100644
--- a/conform/data/termios.h-data
+++ b/conform/data/termios.h-data
@@ -1,4 +1,4 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
type cc_t
type speed_t
type tcflag_t
@@ -39,7 +39,7 @@ constant INPCK
constant ISTRIP
# if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
constant IUCLC
-# <endif
+# endif
constant IXANY
constant IXOFF
constant IXON
@@ -118,7 +118,7 @@ constant IEXTEN
constant ISIG
constant NOFLSH
constant TOSTOP
-# if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+# if !defined POSIX && !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
constant XCASE
# endif
@@ -142,7 +142,9 @@ function int tcdrain (int)
function int tcflow (int, int)
function int tcflush (int, int)
function int tcgetattr (int, struct termios*)
+#ifndef POSIX
function pid_t tcgetsid (int)
+#endif
function int tcsendbreak (int, int)
function int tcsetattr (int, int, const struct termios*)
diff --git a/conform/data/time.h-data b/conform/data/time.h-data
index e2ff298ea7..0deb6be136 100644
--- a/conform/data/time.h-data
+++ b/conform/data/time.h-data
@@ -1,3 +1,21 @@
+constant NULL
+constant CLOCKS_PER_SEC
+
+#ifdef ISO11
+macro TIME_UTC
+#endif
+
+#if !defined ISO && !defined ISO99
+type {struct timespec}
+
+element {struct timespec} time_t tv_sec
+element {struct timespec} long tv_nsec
+#endif
+
+type size_t
+type clock_t
+type time_t
+
type {struct tm}
element {struct tm} int tm_sec
@@ -10,19 +28,26 @@ element {struct tm} int tm_wday
element {struct tm} int tm_yday
element {struct tm} int tm_isdst
-constant NULL
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
-constant CLK_TCK
+function clock_t clock (void)
+function double difftime (time_t, time_t)
+function time_t mktime (struct tm*)
+function time_t time (time_t*)
+function {char*} asctime (const struct tm*)
+function {char*} ctime (const time_t*)
+function {struct tm*} gmtime (const time_t*)
+function {struct tm*} localtime (const time_t*)
+function size_t strftime (char*, size_t, const char*, const struct tm*)
+#if defined ISO11
+function int timespec_get (struct timespec *, int)
#endif
-constant CLOCKS_PER_SEC
+
+#if !defined ISO && !defined ISO99 && !defined ISO11
+# if !defined XOPEN21K && !defined XOPEN2K8 && !defined POSIX2008
+symbol CLK_TCK
+# endif
constant CLOCK_PROCESS_CPUTIME_ID
constant CLOCK_THREAD_CPUTIME_ID
-type {struct timespec}
-
-element {struct timespec} time_t tv_sec
-element {struct timespec} long tv_nsec
-
type {struct itimerspec}
element {struct itimerspec} {struct timespec} it_interval
@@ -32,50 +57,42 @@ constant CLOCK_REALTIME
constant TIMER_ABSTIME
constant CLOCK_MONOTONIC
-type clock_t
type clockid_t
-type size_t
-type time_t
type timer_t
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
type pid_t
type locale_t
tag {struct sigevent}
-#endif
+# endif
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
variable int getdate_err
-#endif
+# endif
-function {char*} asctime (const struct tm*)
function {char*} asctime_r (const struct tm*, char*)
-function clock_t clock (void)
+#if !defined POSIX
function int clock_getcpuclockid (pid_t, clockid_t*)
+#endif
function int clock_getres (clockid_t, struct timespec*)
function int clock_gettime (clockid_t, struct timespec*)
+#if !defined POSIX
function int clock_nanosleep (clockid_t, int, const struct timespec*, struct timespec*)
+#endif
function int clock_settime (clockid_t, const struct timespec*)
-function {char*} ctime (const time_t*)
function {char*} ctime_r (const time_t*, char*)
-function double difftime (time_t, time_t)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
function {struct tm*} getdate (const char*)
-#endif
-function {struct tm*} gmtime (const time_t*)
+# endif
function {struct tm*} gmtime_r (const time_t*, struct tm*)
-function {struct tm*} localtime (const time_t*)
function {struct tm*} localtime_r (const time_t*, struct tm*)
-function time_t mktime (struct tm*)
function int nanosleep (const struct timespec*, struct timespec*)
-function size_t strftime (char*, size_t, const char*, const struct tm*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function size_t strftime_l (char*, size_t, const char*, const struct tm*, locale_t)
-#endif
-#if !defined POSIX && !defined POSIX2008
+# endif
+# if !defined POSIX && !defined POSIX2008
function {char*} strptime (const char*, const char*, struct tm*)
-#endif
-function time_t time (time_t*)
+# endif
function int timer_create (clockid_t, struct sigevent*, timer_t*)
function int timer_delete (timer_t)
function int timer_gettime (timer_t, struct itimerspec*)
@@ -83,10 +100,10 @@ function int timer_getoverrun (timer_t)
function int timer_settime (timer_t, int, const struct itimerspec*, struct itimerspec*)
function void tzset (void)
-#if !defined POSIX && !defined POSIX2008
+# if !defined POSIX && !defined POSIX2008
variable int daylight
variable {long int} timezone
-#endif
+# endif
variable {char*} tzname [2]
allow tm_*
@@ -98,3 +115,4 @@ allow CLOCK_*
allow TIMER_*
allow *_t
allow sigevent
+#endif
diff --git a/conform/data/uchar.h-data b/conform/data/uchar.h-data
new file mode 100644
index 0000000000..487d755fdb
--- /dev/null
+++ b/conform/data/uchar.h-data
@@ -0,0 +1,12 @@
+#if defined ISO11
+type mbstate_t
+type size_t
+type char16_t
+type char32_t
+
+function size_t mbrtoc16 (char16_t *, const char *, size_t, mbstate_t *)
+function size_t c16rtomb (char *, char16_t, mbstate_t *)16
+function size_t mbrtoc32 (char32_t *, const char *, size_t, mbstate_t *)
+function size_t c32rtomb (char *, char32_t, mbstate_t *)
+
+#endif
diff --git a/conform/data/ucontext.h-data b/conform/data/ucontext.h-data
index 3540fdd27f..2b5f3b4a6f 100644
--- a/conform/data/ucontext.h-data
+++ b/conform/data/ucontext.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
type mcontext_t
type ucontext_t
@@ -18,3 +19,4 @@ function int swapcontext (ucontext_t*, const ucontext_t*)
allow uc_*
allow ss_*
allow *_t
+#endif
diff --git a/conform/data/ulimit.h-data b/conform/data/ulimit.h-data
index 9e7e6f4e9a..1e5e5b471d 100644
--- a/conform/data/ulimit.h-data
+++ b/conform/data/ulimit.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
constant UL_GETFSIZE
constant UL_SETFSIZE
diff --git a/conform/data/unistd.h-data b/conform/data/unistd.h-data
index 72fbdd62b9..d23a68ff89 100644
--- a/conform/data/unistd.h-data
+++ b/conform/data/unistd.h-data
@@ -1,4 +1,11 @@
-#ifndef ISO
+#if !defined ISO && !defined ISO99 && !defined ISO11
+#ifdef POSIX
+# define uid_t __uid_t
+# define gid_t __gid_t
+# define off_t __off_t
+# define pid_t __pid_t
+#endif
+
optional-constant _POSIX_VERSION
optional-constant _POSIX2_C_VERSION
optional-constant _XOPEN_VERSION
@@ -336,9 +343,11 @@ type gid_t
type off_t
type pid_t
+#if !defined POSIX
type useconds_t
type intptr_t
+#endif
function int access (const char*, int)
function {unsigned int} alarm (unsigned int)
@@ -355,8 +364,8 @@ function size_t confstr (int, char*, size_t)
#if !defined POSIX && !defined POSIX2008
function {char*} crypt (const char*, const char*)
#endif
-function {char*} ctermid (char*)
#if defined XPG3 || defined XPG4 || defined UNIX98
+function {char*} ctermid (char*)
function {char*} cuserid (char*)
#endif
function int dup (int)
@@ -374,7 +383,9 @@ function void _exit (int)
# if defined XOPEN2K8 || defined POSIX2008
function int faccessat (int, const char*, int, int)
# endif
+#if !defined POSIX
function int fchown (int, uid_t, gid_t)
+#endif
# if defined XOPEN2K8 || defined POSIX2008
function int fchownat (int, const char*, uid_t, gid_t, int)
# endif
@@ -400,7 +411,9 @@ function int getgroups (int, gid_t[])
#if !defined POSIX && !defined POSIX2008
function long gethostid (void)
#endif
+#if !defined POSIX
function int gethostname (char*, size_t)
+#endif
function {char*} getlogin (void)
function int getlogin_r (char*, size_t)
function int getopt (int, char*const[], const char*)
@@ -442,14 +455,16 @@ function int pipe (int[2])
#ifndef POSIX
function ssize_t pread (int, void*, size_t, off_t)
#endif
-#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
+#if !defined POSIX && !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function int pthread_atfork (void(*)(void), void(*)(void), void(*)(void))
#endif
#ifndef POSIX
function ssize_t pwrite (int, const void*, size_t, off_t)
#endif
function ssize_t read (int, void*, size_t)
+#ifndef POSIX
function ssize_t readlink (const char*, char*, size_t)
+#endif
# if defined XOPEN2K8 || defined POSIX2008
function ssize_t readlinkat (int, const char*, char*, size_t)
# endif
@@ -457,8 +472,10 @@ function int rmdir (const char*)
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX && !defined POSIX2008
function {void*} sbrk (intptr_t)
#endif
+#ifndef POSIX
function int setegid (gid_t)
function int seteuid (uid_t)
+#endif
function int setgid (gid_t)
function int setpgid (pid_t, pid_t)
# if !defined POSIX && !defined POSIX2008
@@ -472,7 +489,9 @@ function {unsigned int} sleep (unsigned int)
# if !defined POSIX && !defined POSIX2008
function void swab (const void*, void*, ssize_t)
# endif
+#ifndef POSIX
function int symlink (const char*, const char*)
+# endif
# if defined XOPEN2K8 || defined POSIX2008
function int symlinkat (const char*, int, const char*)
# endif
diff --git a/conform/data/utime.h-data b/conform/data/utime.h-data
index 15d4487055..e3201651c1 100644
--- a/conform/data/utime.h-data
+++ b/conform/data/utime.h-data
@@ -1,3 +1,8 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11
+#ifdef POSIX
+# define time_t __time_t
+#endif
+
type {struct utimbuf}
element {struct utimbuf} time_t actime
@@ -9,3 +14,4 @@ function int utime (const char*, const struct utimbuf*)
allow utim_*
allow *_t
+#endif
diff --git a/conform/data/utmpx.h-data b/conform/data/utmpx.h-data
index af3c229fc0..b9dd0d5a59 100644
--- a/conform/data/utmpx.h-data
+++ b/conform/data/utmpx.h-data
@@ -1,4 +1,4 @@
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
type {struct utmpx}
element {struct utmpx} char ut_user []
diff --git a/conform/data/varargs.h-data b/conform/data/varargs.h-data
index 11dc38c2ab..a486b72603 100644
--- a/conform/data/varargs.h-data
+++ b/conform/data/varargs.h-data
@@ -1,3 +1,4 @@
+#if defined XPG3 || defined XPG4
macro va_alist
macro va_dcl
type va_list
@@ -6,3 +7,4 @@ macro va_arg
macro va_end
allow *_t
+#endif
diff --git a/conform/data/wchar.h-data b/conform/data/wchar.h-data
index bf9e1a92e5..fdb68d03b9 100644
--- a/conform/data/wchar.h-data
+++ b/conform/data/wchar.h-data
@@ -1,19 +1,24 @@
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4
type wchar_t
type wint_t
-# if !defined ISO && !defined POSIX && !defined POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX2008
type wctype_t
-#endif
+# endif
type mbstate_t
+# if !defined ISO99 && !defined ISO11
type FILE
+# else
+# define FILE __FILE
+# endif
type size_t
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
type locale_t
-#endif
+# endif
function wint_t btowc (int)
function int fwprintf (FILE*, const wchar_t*, ...)
function int fwscanf (FILE*, const wchar_t*, ...)
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX2008
function int iswalnum (wint_t)
function int iswalpha (wint_t)
function int iswcntrl (wint_t)
@@ -26,7 +31,7 @@ function int iswspace (wint_t)
function int iswupper (wint_t)
function int iswxdigit (wint_t)
function int iswctype (wint_t, wctype_t)
-#endif
+# endif
function wint_t fgetwc (FILE*)
function {wchar_t*} fgetws (wchar_t*, int, FILE*)
function wint_t fputwc (wchar_t, FILE*)
@@ -37,21 +42,21 @@ function wint_t getwchar (void)
function int mbsinit (const mbstate_t*)
function size_t mbrlen (const char*, size_t, mbstate_t*)
function size_t mbrtowc (wchar_t*, const char*, size_t, mbstate_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function size_t mbsnrtowcs (wchar_t*, const char**, size_t, size_t, mbstate_t*)
-#endif
+# endif
function size_t mbsrtowcs (wchar_t*, const char**, size_t, mbstate_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function {FILE*} open_wmemstream (wchar_t**, size_t*)
-#endif
+# endif
function wint_t putwc (wchar_t, FILE*)
function wint_t putwchar (wchar_t)
function int swprintf (wchar_t*, size_t, const wchar_t*, ...)
function int swscanf (const wchar_t*, const wchar_t*, ...)
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX2008
function wint_t towlower (wint_t)
function wint_t towupper (wint_t)
-#endif
+# endif
function wint_t ungetwc (wint_t, FILE*)
function int vfwprintf (FILE*, const wchar_t*, __gnuc_va_list)
function int vfwscanf (FILE*, const wchar_t*, __gnuc_va_list)
@@ -59,40 +64,40 @@ function int vwprintf (const wchar_t*, __gnuc_va_list)
function int vwscanf (const wchar_t*, __gnuc_va_list)
function int vswprintf (wchar_t*, size_t, const wchar_t*, __gnuc_va_list)
function int vswscanf (const wchar_t*, const wchar_t*, __gnuc_va_list)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function {wchar_t*} wcpcpy (wchar_t*, const wchar_t*)
function {wchar_t*} wcpncpy (wchar_t*, const wchar_t*, size_t)
-#endif
+# endif
function size_t wcrtomb (char*, wchar_t, mbstate_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function int wcscasecmp(const wchar_t*, const wchar_t*)
function int wcscasecmp_l(const wchar_t*, const wchar_t*, locale_t)
-#endif
+# endif
function {wchar_t*} wcscat (wchar_t*, const wchar_t*)
function {wchar_t*} wcschr (const wchar_t*, wchar_t)
function int wcscmp (const wchar_t*, const wchar_t*)
function int wcscoll (const wchar_t*, const wchar_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function int wcscoll_l (const wchar_t*, const wchar_t*, locale_t)
-#endif
+# endif
function {wchar_t*} wcscpy (wchar_t*, const wchar_t*)
function size_t wcscspn (const wchar_t*, const wchar_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function {wchar_t*} wcsdup (const wchar_t*)
-#endif
+# endif
function size_t wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*)
function size_t wcslen (const wchar_t*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function int wcsncasecmp (const wchar_t*, const wchar_t*, size_t)
function int wcsncasecmp_l (const wchar_t*, const wchar_t*, size_t, locale_t)
-#endif
+# endif
function {wchar_t*} wcsncat (wchar_t*, const wchar_t*, size_t)
function int wcsncmp (const wchar_t*, const wchar_t*, size_t)
function {wchar_t*} wcsncpy (wchar_t*, const wchar_t*, size_t)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function size_t wcsnlen (const wchar_t*, size_t)
function size_t wcsnrtombs (char*, const wchar_t**, size_t, size_t, mbstate_t*)
-#endif
+# endif
function {wchar_t*} wcspbrk (const wchar_t*, const wchar_t*)
function {wchar_t*} wcsrchr (const wchar_t*, wchar_t)
function size_t wcsrtombs (char*, const wchar_t**, size_t, mbstate_t*)
@@ -102,21 +107,21 @@ function double wcstod (const wchar_t*, wchar_t**)
function {wchar_t*} wcstok (wchar_t*, const wchar_t*, wchar_t**)
function {long int} wcstol (const wchar_t*, wchar_t**, int)
function {unsigned long int} wcstoul (const wchar_t*, wchar_t**, int)
-#if defined UNIX98 || defined XOPEN2K
+# if defined UNIX98 || defined XOPEN2K
function {wchar_t*} wcswcs (const wchar_t*, const wchar_t*)
-#endif
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+# endif
+# if !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
function int wcswidth (const wchar_t*, size_t)
-#endif
+# endif
function size_t wcsxfrm (wchar_t*, const wchar_t*, size_t)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function size_t wcsxfrm_l (wchar_t*, const wchar_t*, size_t, locale_t)
-#endif
+# endif
function int wctob (wint_t)
-#if !defined ISO && !defined POSIX && !defined POSIX2008
+# if !defined ISO99 && !defined ISO11 && !defined POSIX2008
function wctype_t wctype (const char*)
function int wcwidth (wchar_t)
-#endif
+# endif
function {wchar_t*} wmemchr (const wchar_t*, wchar_t, size_t)
function int wmemcmp (const wchar_t*, const wchar_t*, size_t)
function {wchar_t*} wmemcpy (wchar_t*, const wchar_t*, size_t)
@@ -140,3 +145,4 @@ allow-header time.h
allow wcs*
allow *_t
+#endif
diff --git a/conform/data/wctype.h-data b/conform/data/wctype.h-data
index a3f8c54a85..cbd1dac280 100644
--- a/conform/data/wctype.h-data
+++ b/conform/data/wctype.h-data
@@ -1,9 +1,10 @@
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4
type wint_t
type wctrans_t
type wctype_t
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
type locale_t
-#endif
+# endif
function int iswalnum (wint_t)
function int iswalpha (wint_t)
@@ -22,7 +23,7 @@ function wint_t towlower (wint_t)
function wint_t towupper (wint_t)
function wctrans_t wctrans (const char*)
function wctype_t wctype (const char*)
-#if defined XOPEN2K8 || defined POSIX2008
+# if defined XOPEN2K8 || defined POSIX2008
function int iswalnum_l (wint_t, locale_t)
function int iswalpha_l (wint_t, locale_t)
function int iswcntrl_l (wint_t, locale_t)
@@ -40,7 +41,7 @@ function wint_t towlower_l (wint_t, locale_t)
function wint_t towupper_l (wint_t, locale_t)
function wctrans_t wctrans_l (const char*, locale_t)
function wctype_t wctype_l (const char*, locale_t)
-#endif
+# endif
macro WEOF
@@ -56,3 +57,4 @@ allow-header wchar.h
allow is*
allow to*
allow *_t
+#endif
diff --git a/conform/data/wordexp.h-data b/conform/data/wordexp.h-data
index acbed7495e..821784a7fb 100644
--- a/conform/data/wordexp.h-data
+++ b/conform/data/wordexp.h-data
@@ -1,3 +1,4 @@
+#if !defined ISO && !defined ISO99 && !defined ISO11
type wordexp_t
element wordexp_t size_t we_wordc
@@ -14,9 +15,9 @@ constant WRDE_UNDEF
constant WRDE_BADCHAR
constant WRDE_CMDSUB
constant WRDE_NOSPACE
-#if !defined XOPEN2K8 && !defined POSIX2008
+# if !defined POSIX && !defined XOPEN2K8 && !defined POSIX2008
constant WRDE_NOSYS
-#endif
+# endif
constant WRDE_SYNTAX
function int wordexp (const char*, wordexp_t*, int)
@@ -25,3 +26,4 @@ function void wordfree (wordexp_t*)
allow WRDE_*
allow we_*
allow *_t
+#endif
diff --git a/conform/run-conformtest.sh b/conform/run-conformtest.sh
new file mode 100644
index 0000000000..c82fbcb5a4
--- /dev/null
+++ b/conform/run-conformtest.sh
@@ -0,0 +1,31 @@
+#! /bin/bash
+
+objpfx="$1"
+perl="$2"
+cc="$3"
+includes="$4"
+
+scratch=${objpfx}scratch
+mkdir -p "$scratch"
+
+standards=("ISO" "ISO99" "ISO11" "POSIX" "XPG3" "XPG4" "UNIX98"
+ "XOPEN2K" "XOPEN2K8" "POSIX2008")
+
+exitval=0
+> ${objpfx}run-conformtest.out
+for s in ${standards[*]}; do
+ echo -n $s...
+ e=0
+ if ! $perl conformtest.pl --tmpdir="$scratch" --cc="$cc" --flags="$includes" --standard=$s > ${objpfx}conform-$s.out; then
+ e=1
+ fi
+ printf "\n%s\n" $s >> ${objpfx}run-conformtest.out
+ tail -n 4 ${objpfx}conform-$s.out >> ${objpfx}run-conformtest.out
+ echo
+ if [ $e -ne 0 ]; then
+ tail -n 3 ${objpfx}conform-$s.out
+ exitval=1
+ fi
+done
+
+exit $exitval
diff --git a/crypt/Makefile b/crypt/Makefile
index 217588df5e..d276092215 100644
--- a/crypt/Makefile
+++ b/crypt/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996, 2000, 2001, 2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996,2000,2001,2007,2009,2012 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
@@ -30,9 +30,6 @@ libcrypt-routines := crypt-entry md5-crypt sha256-crypt sha512-crypt crypt \
tests := cert md5c-test sha256c-test sha512c-test
-distribute := ufc-crypt.h crypt-private.h ufc.c speeds.c README.ufc-crypt \
- Banner md5.h sha256.h sha512.h
-
include ../Makeconfig
ifeq ($(crypt-in-libc),yes)
diff --git a/csu/Makefile b/csu/Makefile
index 8e8a41ecad..31300a49d9 100644
--- a/csu/Makefile
+++ b/csu/Makefile
@@ -37,8 +37,6 @@ omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \
b$(start-installed-name) $(csu-dummies) \
S$(start-installed-name))
install-lib = $(start-installed-name) g$(start-installed-name) $(csu-dummies)
-distribute = gmon-start.c start.c \
- abi-note.S init.c c not-cancel.h
generated = version-info.h
before-compile = $(objpfx)version-info.h
diff --git a/debug/Makefile b/debug/Makefile
index 4055211083..fb8c28572f 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -21,7 +21,6 @@
subdir := debug
headers := execinfo.h
-distribute = sigcontextinfo.h register-dump.h frame.h
routines = backtrace backtracesyms backtracesymsfd noophooks \
memcpy_chk memmove_chk mempcpy_chk memset_chk stpcpy_chk \
@@ -138,7 +137,6 @@ install-bin-script = xtrace
include ../Makeconfig
-distribute += catchsegv.sh xtrace.sh
ifeq ($(build-shared),yes)
install-bin-script += catchsegv
endif
diff --git a/debug/backtracesyms.c b/debug/backtracesyms.c
index a0106647f1..3fabf26a8b 100644
--- a/debug/backtracesyms.c
+++ b/debug/backtracesyms.c
@@ -1,5 +1,5 @@
/* Return list with names for address in backtrace.
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -17,13 +17,20 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#include <assert.h>
#include <execinfo.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <ldsodefs.h>
-/* Assume the worst for the width of an address. */
-#define WORD_WIDTH 16
+#if __ELF_NATIVE_CLASS == 32
+# define WORD_WIDTH 8
+#else
+/* We assyme 64bits. */
+# define WORD_WIDTH 16
+#endif
char **
@@ -31,16 +38,37 @@ __backtrace_symbols (array, size)
void *const *array;
int size;
{
+ Dl_info info[size];
+ int status[size];
int cnt;
size_t total = 0;
char **result;
- /* We can compute the text size needed for the symbols since we print
- them all as "[+0x<addr>]". */
- total = size * (WORD_WIDTH + 6);
+ /* Fill in the information we can get from `dladdr'. */
+ for (cnt = 0; cnt < size; ++cnt)
+ {
+ struct link_map *map;
+ status[cnt] = _dl_addr (array[cnt], &info[cnt], &map, NULL);
+ if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')
+ {
+ /* We have some info, compute the length of the string which will be
+ "<file-name>(<sym-name>+offset) [address]. */
+ total += (strlen (info[cnt].dli_fname ?: "")
+ + strlen (info[cnt].dli_sname ?: "")
+ + 3 + WORD_WIDTH + 3 + WORD_WIDTH + 5);
+
+ /* The load bias is more useful to the user than the load
+ address. The use of these addresses is to calculate an
+ address in the ELF file, so its prelinked bias is not
+ something we want to subtract out. */
+ info[cnt].dli_fbase = (void *) map->l_addr;
+ }
+ else
+ total += 5 + WORD_WIDTH;
+ }
/* Allocate memory for the result. */
- result = malloc (size * sizeof (char *) + total);
+ result = (char **) malloc (size * sizeof (char *) + total);
if (result != NULL)
{
char *last = (char *) (result + size);
@@ -48,8 +76,45 @@ __backtrace_symbols (array, size)
for (cnt = 0; cnt < size; ++cnt)
{
result[cnt] = last;
- last += 1 + sprintf (last, "[+%p]", array[cnt]);
+
+ if (status[cnt]
+ && info[cnt].dli_fname != NULL && info[cnt].dli_fname[0] != '\0')
+ {
+ if (info[cnt].dli_sname == NULL)
+ /* We found no symbol name to use, so describe it as
+ relative to the file. */
+ info[cnt].dli_saddr = info[cnt].dli_fbase;
+
+ if (info[cnt].dli_sname == NULL && info[cnt].dli_saddr == 0)
+ last += 1 + sprintf (last, "%s(%s) [%p]",
+ info[cnt].dli_fname ?: "",
+ info[cnt].dli_sname ?: "",
+ array[cnt]);
+ else
+ {
+ char sign;
+ ptrdiff_t offset;
+ if (array[cnt] >= (void *) info[cnt].dli_saddr)
+ {
+ sign = '+';
+ offset = array[cnt] - info[cnt].dli_saddr;
+ }
+ else
+ {
+ sign = '-';
+ offset = info[cnt].dli_saddr - array[cnt];
+ }
+
+ last += 1 + sprintf (last, "%s(%s%c%#tx) [%p]",
+ info[cnt].dli_fname ?: "",
+ info[cnt].dli_sname ?: "",
+ sign, offset, array[cnt]);
+ }
+ }
+ else
+ last += 1 + sprintf (last, "[%p]", array[cnt]);
}
+ assert (last <= (char *) result + size * sizeof (char *) + total);
}
return result;
diff --git a/debug/backtracesymsfd.c b/debug/backtracesymsfd.c
index fe247d8cc8..297e32d6ba 100644
--- a/debug/backtracesymsfd.c
+++ b/debug/backtracesymsfd.c
@@ -1,5 +1,5 @@
/* Write formatted list with names for addresses in backtrace to a file.
- Copyright (C) 1998, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -21,8 +21,8 @@
#include <string.h>
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
-#include <not-cancel.h>
+#include <_itoa.h>
+#include <ldsodefs.h>
#if __ELF_NATIVE_CLASS == 32
# define WORD_WIDTH 8
@@ -38,25 +38,87 @@ __backtrace_symbols_fd (array, size, fd)
int size;
int fd;
{
- struct iovec iov[3];
+ struct iovec iov[9];
int cnt;
for (cnt = 0; cnt < size; ++cnt)
{
char buf[WORD_WIDTH];
+ char buf2[WORD_WIDTH];
+ Dl_info info;
+ struct link_map *map;
+ size_t last = 0;
- iov[0].iov_base = (void *) "[0x";
- iov[0].iov_len = 3;
+ if (_dl_addr (array[cnt], &info, &map, NULL)
+ && info.dli_fname != NULL && info.dli_fname[0] != '\0')
+ {
+ /* Name of the file. */
+ iov[0].iov_base = (void *) info.dli_fname;
+ iov[0].iov_len = strlen (info.dli_fname);
+ last = 1;
- iov[1].iov_base = _itoa_word ((unsigned long int) array[cnt],
- &buf[WORD_WIDTH], 16, 0);
- iov[1].iov_len = &buf[WORD_WIDTH] - (char *) iov[1].iov_base;
+ if (info.dli_sname != NULL || map->l_addr != 0)
+ {
+ size_t diff;
- iov[2].iov_base = (void *) "]\n";
- iov[2].iov_len = 2;
+ iov[last].iov_base = (void *) "(";
+ iov[last].iov_len = 1;
+ ++last;
- /* We prefer to use the non-cancelable interface if it is available. */
- writev_not_cancel_no_status (fd, iov, 3);
+ if (info.dli_sname != NULL)
+ {
+ /* We have a symbol name. */
+ iov[last].iov_base = (void *) info.dli_sname;
+ iov[last].iov_len = strlen (info.dli_sname);
+ ++last;
+ }
+ else
+ /* We have no symbol, so describe it as relative to the file.
+ The load bias is more useful to the user than the load
+ address. The use of these addresses is to calculate an
+ address in the ELF file, so its prelinked bias is not
+ something we want to subtract out. */
+ info.dli_saddr = (void *) map->l_addr;
+
+ if (array[cnt] >= (void *) info.dli_saddr)
+ {
+ iov[last].iov_base = (void *) "+0x";
+ diff = array[cnt] - info.dli_saddr;
+ }
+ else
+ {
+ iov[last].iov_base = (void *) "-0x";
+ diff = info.dli_saddr - array[cnt];
+ }
+ iov[last].iov_len = 3;
+ ++last;
+
+ iov[last].iov_base = _itoa_word ((unsigned long int) diff,
+ &buf2[WORD_WIDTH], 16, 0);
+ iov[last].iov_len = (&buf2[WORD_WIDTH]
+ - (char *) iov[last].iov_base);
+ ++last;
+
+ iov[last].iov_base = (void *) ")";
+ iov[last].iov_len = 1;
+ ++last;
+ }
+ }
+
+ iov[last].iov_base = (void *) "[0x";
+ iov[last].iov_len = 3;
+ ++last;
+
+ iov[last].iov_base = _itoa_word ((unsigned long int) array[cnt],
+ &buf[WORD_WIDTH], 16, 0);
+ iov[last].iov_len = &buf[WORD_WIDTH] - (char *) iov[last].iov_base;
+ ++last;
+
+ iov[last].iov_base = (void *) "]\n";
+ iov[last].iov_len = 2;
+ ++last;
+
+ __writev (fd, iov, last);
}
}
weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd)
diff --git a/debug/segfault.c b/debug/segfault.c
index 18f811580b..98886dbf15 100644
--- a/debug/segfault.c
+++ b/debug/segfault.c
@@ -29,7 +29,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <ldsodefs.h>
#include <bp-checks.h>
diff --git a/dirent/Makefile b/dirent/Makefile
index 8b504fdf09..0cdab68abf 100644
--- a/dirent/Makefile
+++ b/dirent/Makefile
@@ -1,4 +1,5 @@
-# Copyright (C) 1991-2000,2002,2003,2005,2006,2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2000,2002,2003,2005,2006,2011,2012
+# 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
@@ -26,7 +27,6 @@ routines := opendir closedir readdir readdir_r rewinddir \
getdents getdents64 dirfd readdir64 readdir64_r scandir64 \
alphasort64 versionsort64 fdopendir \
scandirat scandirat64
-distribute := dirstream.h
tests := list tst-seekdir opendir-tst1 bug-readdir1 tst-fdopendir \
tst-fdopendir2
diff --git a/dlfcn/Makefile b/dlfcn/Makefile
index e46744476c..1a2d2e84e6 100644
--- a/dlfcn/Makefile
+++ b/dlfcn/Makefile
@@ -22,12 +22,6 @@ libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr dladdr1 dlinfo \
dlmopen dlfcn
routines := $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines)))
elide-routines.os := $(routines)
-distribute := dlopenold.c glreflib1.c glreflib2.c glreflib3.c \
- failtestmod.c \
- defaultmod1.c defaultmod2.c errmsg1mod.c modatexit.c \
- modcxaatexit.c modstatic.c modstatic2.c \
- bug-dlsym1-lib1.c bug-dlsym1-lib2.c bug-atexit1-lib.c \
- bug-atexit2-lib.c
extra-libs-others := libdl
diff --git a/elf/Makefile b/elf/Makefile
index 8234ba7a51..59a3936a1b 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -41,91 +41,6 @@ shared-only-routines += dl-caller
rtld-routines := rtld $(dl-routines) dl-sysdep dl-environ dl-minimal
all-rtld-routines = $(rtld-routines) $(sysdep-rtld-routines)
-distribute := rtld-Rules \
- $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
- dl-cache.h dl-hash.h soinit.c sofini.c ldd.bash.in \
- genrtldtbl.awk atomicity.h dl-procinfo.h ldsodefs.h \
- dl-librecon.h interp.c sln.c dl-dst.h hp-timing.h \
- dl-lookupcfg.h sprof.c gen-trusted-dirs.awk \
- testobj1.c testobj2.c testobj3.c testobj4.c testobj5.c \
- testobj6.c testobj1_1.c failobj.c unloadmod.c \
- ldconfig.h ldconfig.c cache.c readlib.c readelflib.c \
- chroot_canon.c gccframe.h \
- dep1.c dep2.c dep3.c dep4.c dl-dtprocnum.h unsecvars.h \
- vismain.c vismod1.c vismod2.c vismod3.c \
- constload2.c constload3.c filtmod1.c filtmod2.c \
- nodlopenmod.c nodelete.c nodelmod1.c nodelmod2.c \
- nodelmod3.c nodelmod4.c nodlopen.c dl-osinfo.h \
- reldepmod1.c reldepmod2.c reldepmod3.c reldepmod4.c \
- reldepmod5.c reldepmod6.c \
- reldep4mod1.c reldep4mod2.c reldep4mod3.c reldep4mod4.c \
- nextmod1.c nextmod2.c pathoptobj.c tst-pathopt.sh \
- neededobj1.c neededobj2.c neededobj3.c neededobj4.c \
- neededobj5.c neededobj6.c firstobj.c \
- unload2mod.c unload2dep.c ltglobmod1.c ltglobmod2.c \
- testobj.h vismod.h globalmod1.c \
- dblloadmod1.c dblloadmod2.c dblloadmod3.c \
- reldep6mod4.c reldep6mod3.c reldep6mod2.c reldep6mod1.c \
- reldep6mod0.c reldep7mod1.c reldep7mod2.c \
- unwind-dw2.c unwind-dw2-fde.c unwind.h unwind-pe.h \
- unwind-dw2-fde.h dwarf2.h dl-procinfo.c tls.h dl-tls.h \
- tst-tlsmod1.c tst-tlsmod2.c tst-tlsmod3.c tst-tlsmod4.c \
- tst-tlsmod5.c tst-tlsmod6.c tst-tlsmod7.c tst-tlsmod8.c \
- tst-tlsmod9.c tst-tlsmod10.c tst-tlsmod11.c \
- tst-tlsmod12.c tst-tls10.h tst-alignmod.c tst-alignmod2.c \
- circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \
- circlemod3.c circlemod3a.c nodlopenmod2.c \
- tst-tls19mod1.c tst-tls19mod2.c tst-tls19mod3.c \
- tls-macros.h \
- reldep8mod1.c reldep8mod2.c reldep8mod3.c \
- nodel2mod1.c nodel2mod2.c nodel2mod3.c \
- reldep9.c reldep9mod1.c reldep9mod2.c reldep9mod3.c \
- tst-array1.exp tst-array2.exp tst-array4.exp \
- tst-array2dep.c tst-piemod1.c \
- tst-execstack-mod.c tst-dlmodcount.c \
- check-textrel.c dl-sysdep.h test-dlopenrpathmod.c \
- tst-deep1mod1.c tst-deep1mod2.c tst-deep1mod3.c \
- unload3mod1.c unload3mod2.c unload3mod3.c unload3mod4.c \
- unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
- unload6mod1.c unload6mod2.c unload6mod3.c \
- unload7mod1.c unload7mod2.c \
- unload8mod1.c unload8mod1x.c unload8mod2.c unload8mod3.c \
- tst-audit1.c tst-audit2.c tst-audit3.c tst-audit4.c \
- tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \
- tst-auditmod4a.c tst-auditmod4b.c \
- tst-audit5.c tst-auditmod5a.c tst-auditmod5b.c \
- tst-audit6.c tst-auditmod6a.c tst-auditmod6b.c \
- tst-auditmod6c.c \
- tst-audit7.c tst-auditmod7a.c tst-auditmod7b.c \
- order2mod1.c order2mod2.c order2mod3.c order2mod4.c \
- tst-stackguard1.c tst-stackguard1-static.c \
- tst-array5.c tst-array5-static.c tst-array5dep.c \
- tst-array5.exp tst-leaks1.c check-execstack.c \
- ifuncmain1.c ifuncmain1pic.c ifuncmain1vis.c \
- ifuncmain1vispic.c ifuncmain1static.c \
- ifuncmain1staticpic.c ifuncmain1picstatic.c \
- ifuncdep1.c ifuncdep1pic.c ifuncmod1.c \
- ifuncmain1pie.c ifuncmain1vispie.c \
- ifuncmain1staticpie.c \
- ifuncmain2.c ifuncmain2static.c ifuncdep2.c \
- ifuncmain2pic.c ifuncmain2picstatic.c ifuncdep2pic.c \
- ifuncmain3.c ifuncmod3.c \
- ifuncmain4.c ifuncmain4static.c ifuncmain4picstatic.c \
- ifuncmain5.c ifuncmain5pic.c ifuncmain5picstatic.c \
- ifuncmain5pie.c ifuncmain5static.c \
- ifuncmain5staticpic.c \
- ifuncdep5.c ifuncdep5pic.c ifuncmod5.c \
- ifuncmain6pie.c ifuncmod6.c \
- ifuncmain7.c ifuncmain7pic.c ifuncmain7picstatic.c \
- ifuncmain7pie.c ifuncmain7static.c \
- tst-unique1.c tst-unique1mod1.c tst-unique1mod2.c \
- tst-unique2.c tst-unique2mod1.c tst-unique2mod2.c \
- tst-initordera1.c tst-initordera2.c tst-initorderb1.c \
- tst-initorderb2.c tst-initordera3.c tst-initordera4.c \
- tst-initorder.c \
- tst-initorder2.c \
- tst-relsort1.c tst-relsort1mod1.c tst-relsort1mod2.c
-
CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-dl-iterate-phdr.c = $(uses-callbacks)
@@ -1203,3 +1118,14 @@ $(objpfx)tst-relsort1mod1.so: $(libm) $(objpfx)tst-relsort1mod2.so
$(objpfx)tst-relsort1mod2.so: $(libm)
$(objpfx)tst-relsort1.out: $(objpfx)tst-relsort1mod1.so \
$(objpfx)tst-relsort1mod2.so
+
+tests: $(objpfx)tst-unused-dep.out
+
+$(objpfx)tst-unused-dep.out: $(objpfx)testobj1.so
+ LD_TRACE_LOADED_OBJECTS=1 \
+ LD_DEBUG=unused \
+ LD_PRELOAD= \
+ $(elf-objpfx)${rtld-installed-name} \
+ --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+ $< > $@
+ cmp $@ /dev/null > /dev/null
diff --git a/elf/cache.c b/elf/cache.c
index dadab9132b..db8b9fa2fa 100644
--- a/elf/cache.c
+++ b/elf/cache.c
@@ -90,6 +90,10 @@ print_entry (const char *lib, int flag, unsigned int osversion,
break;
case FLAG_MIPS64_LIBN64:
fputs (",64bit", stdout);
+ break;
+ case FLAG_X8664_LIBX32:
+ fputs (",x32", stdout);
+ break;
case 0:
break;
default:
diff --git a/elf/dl-cache.c b/elf/dl-cache.c
index 2e6f88b326..0357dffc42 100644
--- a/elf/dl-cache.c
+++ b/elf/dl-cache.c
@@ -24,7 +24,7 @@
#include <dl-cache.h>
#include <dl-procinfo.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#ifndef _DL_PLATFORMS_COUNT
# define _DL_PLATFORMS_COUNT 0
diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
index 3a984afb1c..316de99b8f 100644
--- a/elf/dl-minimal.c
+++ b/elf/dl-minimal.c
@@ -26,7 +26,7 @@
#include <sys/param.h>
#include <sys/types.h>
#include <ldsodefs.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <assert.h>
diff --git a/elf/dl-misc.c b/elf/dl-misc.c
index 9bf642daaa..22fbba38d4 100644
--- a/elf/dl-misc.c
+++ b/elf/dl-misc.c
@@ -30,7 +30,7 @@
#include <sys/stat.h>
#include <sys/uio.h>
#include <sysdep.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <bits/libc-lock.h>
/* Read the whole contents of FILE into new mmap'd space with given
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
index 0920cc155a..1cb4460a02 100644
--- a/elf/dl-sysdep.c
+++ b/elf/dl-sysdep.c
@@ -29,7 +29,7 @@
#include <sys/stat.h>
#include <sys/mman.h>
#include <ldsodefs.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <fpu_control.h>
#include <entry.h>
diff --git a/elf/dl-version.c b/elf/dl-version.c
index e314e02d07..af7f89960d 100644
--- a/elf/dl-version.c
+++ b/elf/dl-version.c
@@ -23,7 +23,7 @@
#include <stdlib.h>
#include <string.h>
#include <ldsodefs.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <assert.h>
diff --git a/elf/rtld.c b/elf/rtld.c
index 2e4f97ffed..1cc9cf3fe5 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1,5 +1,5 @@
/* Run time dynamic linker.
- Copyright (C) 1995-2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1995-2012 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
@@ -27,7 +27,7 @@
#include <sys/param.h>
#include <sys/stat.h>
#include <ldsodefs.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <entry.h>
#include <fpu_control.h>
#include <hp-timing.h>
@@ -1375,6 +1375,9 @@ of this helper program; chances are you did not intend to run this program.\n\
_dl_setup_hash (l);
l->l_relocated = 1;
+ /* The vDSO is always used. */
+ l->l_used = 1;
+
/* Initialize l_local_scope to contain just this map. This allows
the use of dl_lookup_symbol_x to resolve symbols within the vdso.
So we create a single entry list pointing to l_real as its only
diff --git a/elf/sotruss-lib.c b/elf/sotruss-lib.c
index 542672692f..c2ab7330d4 100644
--- a/elf/sotruss-lib.c
+++ b/elf/sotruss-lib.c
@@ -1,5 +1,5 @@
/* Trace calls through PLTs and show caller, callee, and parameters.
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -288,6 +288,40 @@ la_x86_64_gnu_pltenter (Elf64_Sym *sym __attribute__ ((unused)),
return sym->st_value;
}
+#elif defined __sparc__ && !defined __arch64__
+Elf32_Addr
+la_sparc32_gnu_pltenter (Elf32_Sym *sym __attribute__ ((unused)),
+ unsigned int ndx __attribute__ ((unused)),
+ uintptr_t *refcook, uintptr_t *defcook,
+ La_sparc32_regs *regs, unsigned int *flags,
+ const char *symname, long int *framesizep)
+{
+ print_enter (refcook, defcook, symname,
+ regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2],
+ *flags);
+
+ /* No need to copy anything, we will not need the parameters in any case. */
+ *framesizep = 0;
+
+ return sym->st_value;
+}
+#elif defined __sparc__ && defined __arch64__
+Elf64_Addr
+la_sparc64_gnu_pltenter (Elf64_Sym *sym __attribute__ ((unused)),
+ unsigned int ndx __attribute__ ((unused)),
+ uintptr_t *refcook, uintptr_t *defcook,
+ La_sparc64_regs *regs, unsigned int *flags,
+ const char *symname, long int *framesizep)
+{
+ print_enter (refcook, defcook, symname,
+ regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2],
+ *flags);
+
+ /* No need to copy anything, we will not need the parameters in any case. */
+ *framesizep = 0;
+
+ return sym->st_value;
+}
#elif !defined HAVE_ARCH_PLTENTER
# warning "pltenter for architecture not supported"
#endif
@@ -302,7 +336,7 @@ print_exit (uintptr_t *refcook, uintptr_t *defcook, const char *symname,
if (print_pid)
snprintf (buf, sizeof (buf), "%5ld: ", (long int) getpid ());
- fprintf (out_file, "%s%15s -> %-15s:%s%s - 0x%lu\n",
+ fprintf (out_file, "%s%15s -> %-15s:%s%s - 0x%lx\n",
buf, (char *) *refcook, (char *) *defcook, " ", symname, reg);
}
@@ -327,6 +361,26 @@ la_x86_64_gnu_pltexit (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return 0;
}
+#elif defined __sparc__ && !defined __arch64__
+unsigned int
+la_sparc32_gnu_pltexit (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook,
+ uintptr_t *defcook, const struct La_sparc32_regs *inregs,
+ struct La_sparc32_retval *outregs, const char *symname)
+{
+ print_exit (refcook, defcook, symname, outregs->lrv_reg[0]);
+
+ return 0;
+}
+#elif defined __sparc__ && defined __arch64__
+unsigned int
+la_sparc64_gnu_pltexit (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
+ uintptr_t *defcook, const struct La_sparc64_regs *inregs,
+ struct La_sparc64_retval *outregs, const char *symname)
+{
+ print_exit (refcook, defcook, symname, outregs->lrv_reg[0]);
+
+ return 0;
+}
#elif !defined HAVE_ARCH_PLTEXIT
# warning "pltexit for architecture not supported"
#endif
diff --git a/elf/tst-auditmod1.c b/elf/tst-auditmod1.c
index 69da278f28..67fc758ac3 100644
--- a/elf/tst-auditmod1.c
+++ b/elf/tst-auditmod1.c
@@ -109,10 +109,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
# define La_retval La_i86_retval
# define int_retval lrv_eax
#elif defined __x86_64__
-# define pltenter la_x86_64_gnu_pltenter
-# define pltexit la_x86_64_gnu_pltexit
-# define La_regs La_x86_64_regs
-# define La_retval La_x86_64_retval
+# ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+# else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+# endif
# define int_retval lrv_rax
#elif defined __powerpc__ && __WORDSIZE == 32
# define pltenter la_ppc32_gnu_pltenter
@@ -188,7 +195,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
return 0;
}
diff --git a/elf/tst-auditmod3b.c b/elf/tst-auditmod3b.c
index 388ed6e49c..921eaca55a 100644
--- a/elf/tst-auditmod3b.c
+++ b/elf/tst-auditmod3b.c
@@ -105,10 +105,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return sym->st_value;
}
-#define pltenter la_x86_64_gnu_pltenter
-#define pltexit la_x86_64_gnu_pltexit
-#define La_regs La_x86_64_regs
-#define La_retval La_x86_64_retval
+#ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+#else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+#endif
#define int_retval lrv_rax
#include <tst-audit.h>
@@ -140,7 +147,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
__m128i xmm = _mm_set1_epi32 (-1);
asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" );
diff --git a/elf/tst-auditmod4b.c b/elf/tst-auditmod4b.c
index 761d97ce9d..75e85582bd 100644
--- a/elf/tst-auditmod4b.c
+++ b/elf/tst-auditmod4b.c
@@ -94,10 +94,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return sym->st_value;
}
-#define pltenter la_x86_64_gnu_pltenter
-#define pltexit la_x86_64_gnu_pltexit
-#define La_regs La_x86_64_regs
-#define La_retval La_x86_64_retval
+#ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+#else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+#endif
#define int_retval lrv_rax
#include <tst-audit.h>
@@ -177,7 +184,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
#ifdef __AVX__
if (check_avx () && strcmp (symname, "audit_test") == 0)
diff --git a/elf/tst-auditmod5b.c b/elf/tst-auditmod5b.c
index 7e1e941126..d2443c8d20 100644
--- a/elf/tst-auditmod5b.c
+++ b/elf/tst-auditmod5b.c
@@ -95,10 +95,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return sym->st_value;
}
-#define pltenter la_x86_64_gnu_pltenter
-#define pltexit la_x86_64_gnu_pltexit
-#define La_regs La_x86_64_regs
-#define La_retval La_x86_64_retval
+#ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+#else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+#endif
#define int_retval lrv_rax
#include <tst-audit.h>
@@ -150,7 +157,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
__m128i xmm;
diff --git a/elf/tst-auditmod6b.c b/elf/tst-auditmod6b.c
index a7a60b9927..b00dcd7c2e 100644
--- a/elf/tst-auditmod6b.c
+++ b/elf/tst-auditmod6b.c
@@ -94,10 +94,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return sym->st_value;
}
-#define pltenter la_x86_64_gnu_pltenter
-#define pltexit la_x86_64_gnu_pltexit
-#define La_regs La_x86_64_regs
-#define La_retval La_x86_64_retval
+#ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+#else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+#endif
#define int_retval lrv_rax
#include <tst-audit.h>
@@ -179,7 +186,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
#ifdef __AVX__
if (check_avx () && strcmp (symname, "audit_test") == 0)
diff --git a/elf/tst-auditmod6c.c b/elf/tst-auditmod6c.c
index e0b5ac2319..a78c913963 100644
--- a/elf/tst-auditmod6c.c
+++ b/elf/tst-auditmod6c.c
@@ -94,10 +94,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return sym->st_value;
}
-#define pltenter la_x86_64_gnu_pltenter
-#define pltexit la_x86_64_gnu_pltexit
-#define La_regs La_x86_64_regs
-#define La_retval La_x86_64_retval
+#ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+#else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+#endif
#define int_retval lrv_rax
#include <tst-audit.h>
@@ -185,7 +192,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
#ifdef __AVX__
if (check_avx () && strcmp (symname, "audit_test") == 0)
diff --git a/elf/tst-auditmod7b.c b/elf/tst-auditmod7b.c
index a27d38540e..d761149a2f 100644
--- a/elf/tst-auditmod7b.c
+++ b/elf/tst-auditmod7b.c
@@ -94,10 +94,17 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
return sym->st_value;
}
-#define pltenter la_x86_64_gnu_pltenter
-#define pltexit la_x86_64_gnu_pltexit
-#define La_regs La_x86_64_regs
-#define La_retval La_x86_64_retval
+#ifdef __LP64__
+# define pltenter la_x86_64_gnu_pltenter
+# define pltexit la_x86_64_gnu_pltexit
+# define La_regs La_x86_64_regs
+# define La_retval La_x86_64_retval
+#else
+# define pltenter la_x32_gnu_pltenter
+# define pltexit la_x32_gnu_pltexit
+# define La_regs La_x32_regs
+# define La_retval La_x32_retval
+#endif
#define int_retval lrv_rax
#include <tst-audit.h>
@@ -177,7 +184,8 @@ pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
const char *symname)
{
printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
- symname, (long int) sym->st_value, ndx, outregs->int_retval);
+ symname, (long int) sym->st_value, ndx,
+ (ptrdiff_t) outregs->int_retval);
#ifdef __AVX__
if (check_avx () && strcmp (symname, "audit_test") == 0)
diff --git a/gmon/Makefile b/gmon/Makefile
index 2f15d8ca3c..66c7916e1f 100644
--- a/gmon/Makefile
+++ b/gmon/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995,1996,1997,2001,2002,2005 Free Software Foundation, Inc.
+# Copyright (C) 1995-1997,2001,2002,2005,2012 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
@@ -21,7 +21,6 @@
subdir := gmon
headers := sys/gmon.h sys/gmon_out.h sys/profil.h
-distribute := machine-gmon.h profil-counter.h
routines := gmon mcount profil sprofil bb_init_func bb_exit_func prof-freq
elide-routines.os = bb_init_func bb_exit_func
diff --git a/grp/Makefile b/grp/Makefile
index f14212eed2..127310f0de 100644
--- a/grp/Makefile
+++ b/grp/Makefile
@@ -1,4 +1,5 @@
-# Copyright (C) 1991,1992,1996-2000,2003,2004 Free Software Foundation, Inc.
+# Copyright (C) 1991,1992,1996-2000,2003,2004,2012
+# 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
@@ -21,8 +22,6 @@
subdir := grp
headers := grp.h
-distribute := tst_fgetgrent.c tst_fgetgrent.sh compat-initgroups.c
-
routines := fgetgrent initgroups setgroups \
getgrent getgrgid getgrnam putgrent \
getgrent_r getgrgid_r getgrnam_r fgetgrent_r
@@ -38,12 +37,6 @@ endif
include ../Rules
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
-
-
ifeq ($(have-thread-library),yes)
CFLAGS-getgrgid_r.c = -DUSE_NSCD=1 -fexceptions
diff --git a/hesiod/Makefile b/hesiod/Makefile
index 6c31a08782..b9f9b07188 100644
--- a/hesiod/Makefile
+++ b/hesiod/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998, 2000, 2001, 2012 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
@@ -20,8 +20,6 @@
#
subdir := hesiod
-distribute := hesiod.h hesiod_p.h README.hesiod nss_hesiod/nss_hesiod.h
-
extra-libs := libnss_hesiod
extra-libs-others = $(extra-libs)
@@ -29,7 +27,7 @@ subdir-dirs = nss_hesiod
vpath %.c nss_hesiod
libnss_hesiod-routines := hesiod hesiod-grp hesiod-init hesiod-proto \
- hesiod-pwd hesiod-service
+ hesiod-pwd hesiod-service
# Build only shared library
libnss_hesiod-inhibit-o = $(filter-out .os,$(object-suffixes))
@@ -41,6 +39,6 @@ include ../Rules
# The Hesiod NSS modules also needs the resolver and some help from
# the file service.
$(objpfx)libnss_hesiod.so: $(common-objpfx)resolv/libresolv.so \
- $(common-objpfx)nss/libnss_files.so \
- $(common-objpfx)libc.so \
+ $(common-objpfx)nss/libnss_files.so \
+ $(common-objpfx)libc.so \
$(common-objpfx)libc_nonshared.a
diff --git a/hurd/Makefile b/hurd/Makefile
index bdad4ff90b..321e04ef13 100644
--- a/hurd/Makefile
+++ b/hurd/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991,92,93,94,95,96,97,98,99,2001,2002,2004,2006
+# Copyright (C) 1991,92,93,94,95,96,97,98,99,2001,2002,2004,2006,2012
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -29,7 +29,7 @@ headers = hurd.h $(interface-headers) \
userlink.h resource.h threadvar.h lookup.h)
inline-headers = hurd.h $(addprefix hurd/,fd.h signal.h \
- userlink.h threadvar.h port.h)
+ userlink.h threadvar.h port.h)
# The RPC interfaces go in a separate library.
interface-library := libhurduser
@@ -67,12 +67,9 @@ dtable = dtable port2fd new-fd alloc-fd intern-fd \
getdport openport \
fd-close fd-read fd-write hurdioctl ctty-input ctty-output
inlines = $(inline-headers:%.h=%-inlines)
-distribute = hurdstartup.h hurdfault.h hurdhost.h \
- faultexc.defs intr-rpc.defs intr-rpc.h intr-msg.h Notes
# XXX this is a temporary hack; see hurdmalloc.h
routines += hurdmalloc
-distribute += hurdmalloc.h
# Binary compatibility for libc.so.0.2[GLIBC_2.0].
ifeq ($(versioning),yes)
diff --git a/hurd/hurdsock.c b/hurd/hurdsock.c
index 170a3f6185..f3611ecf27 100644
--- a/hurd/hurdsock.c
+++ b/hurd/hurdsock.c
@@ -22,7 +22,7 @@
#include <string.h>
#include <hurd/paths.h>
#include <stdio.h>
-#include "stdio-common/_itoa.h"
+#include <_itoa.h>
#include <cthreads.h> /* For `struct mutex'. */
#include "hurdmalloc.h" /* XXX */
diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c
index c65eb5ad57..3c506a043a 100644
--- a/hurd/lookup-retry.c
+++ b/hurd/lookup-retry.c
@@ -24,7 +24,7 @@
#include <limits.h>
#include <fcntl.h>
#include <string.h>
-#include "stdio-common/_itoa.h"
+#include <_itoa.h>
/* Translate the error from dir_lookup into the error the user sees. */
static inline error_t
diff --git a/iconv/Makefile b/iconv/Makefile
index 87545bf2fe..6d7791103f 100644
--- a/iconv/Makefile
+++ b/iconv/Makefile
@@ -45,10 +45,6 @@ CFLAGS-simple-hash.c = -I../locale
tests = tst-iconv1 tst-iconv2 tst-iconv3 tst-iconv4 tst-iconv5
-distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \
- iconv_charmap.c dummy-repertoire.c gconv_charset.h strtab.c \
- iconvconfig.h
-
others = iconv_prog iconvconfig
install-others-programs = $(inst_bindir)/iconv
install-sbin = iconvconfig
diff --git a/iconvdata/Makefile b/iconvdata/Makefile
index 78d5da683c..eac51ba572 100644
--- a/iconvdata/Makefile
+++ b/iconvdata/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1997-2008, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1997-2008, 2011, 2012 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
@@ -127,83 +127,6 @@ LDFLAGS-libCNS.so = $(LDFLAGS-soname-fname)
LDFLAGS-libISOIR165.so = $(LDFLAGS-soname-fname)
LDFLAGS-libJISX0213.so = $(LDFLAGS-soname-fname)
-distribute := gconv-modules extra-module.mk gap.awk gaptab.awk gconv.map \
- gen-8bit.sh gen-8bit-gap.sh gen-8bit-gap-1.sh \
- TESTS $(wildcard testdata/*) \
- TESTS2 run-iconv-test.sh tst-tables.sh tst-table.sh \
- tst-table-charmap.sh tst-table-from.c tst-table-to.c \
- EUC-JP.irreversible ISIRI-3342.irreversible SJIS.irreversible \
- EUC-KR.irreversible BIG5HKSCS.irreversible BIG5.irreversible \
- CP1255.irreversible CP1258.irreversible EUC-TW.irreversible \
- IBM856.irreversible IBM922.irreversible IBM1132.irreversible \
- IBM1133.irreversible IBM1160.irreversible IBM1161.irreversible\
- IBM1163.irreversible IBM1164.irreversible \
- ARMSCII-8.irreversible TCVN5712-1.precomposed \
- JISX0213.TXT EUC-JISX0213.precomposed \
- SHIFT_JISX0213.precomposed SHIFT_JISX0213.irreversible \
- TSCII.irreversible TSCII.precomposed \
- 8bit-generic.c 8bit-gap.c \
- ansi_x3.110.c asmo_449.c big5.c cp737.c cp737.h \
- cp775.c cp775.h ibm874.c cns11643.c cns11643.h \
- cns11643l1.c cns11643l1.h cp1125.c cp1250.c cp1251.c cp1252.c \
- cp1253.c cp1254.c cp1255.c cp1256.c cp1257.c cp1258.c \
- csn_369103.c cwi.c dec-mcs.c ebcdic-at-de.c ebcdic-at-de-a.c \
- ebcdic-ca-fr.c ebcdic-dk-no.c ebcdic-dk-no-a.c ebcdic-es.c \
- ebcdic-es-a.c ebcdic-es-s.c ebcdic-fr.c ebcdic-fi-se.c \
- ebcdic-fi-se-a.c ebcdic-is-friss.c ebcdic-it.c ebcdic-pt.c \
- ebcdic-uk.c ebcdic-us.c ecma-cyrillic.c euc-cn.c euc-jp.c \
- euc-kr.c euc-tw.c gb2312.c gb2312.h gbk.c gost_19768-74.c \
- greek-ccitt.c greek7.c greek7-old.c hp-roman8.c ibm037.c \
- ibm038.c ibm256.c ibm273.c ibm274.c ibm275.c ibm277.c \
- ibm278.c ibm280.c ibm281.c ibm284.c ibm285.c ibm290.c \
- ibm297.c ibm420.c ibm423.c ibm424.c ibm437.c ibm500.c \
- ibm850.c ibm851.c ibm852.c ibm855.c ibm857.c ibm860.c \
- ibm861.c ibm862.c ibm863.c ibm864.c ibm865.c ibm866.c \
- ibm868.c ibm869.c ibm870.c ibm871.c ibm875.c ibm880.c \
- ibm891.c ibm903.c ibm904.c ibm905.c ibm918.c ibm1004.c \
- ibm856.c ibm930.c ibm933.c ibm935.c ibm937.c ibm939.c ibm1046.c \
- ibm856.h ibm930.h ibm933.h ibm935.h ibm937.h ibm939.h ibm1046.h \
- ibm922.c ibm922.h ibm1124.c ibm1124.h ibm1129.c ibm1129.h \
- ibm1132.c ibm1132.h ibm1133.c ibm1133.h ibm1162.c ibm1162.h \
- ibm1026.c ibm1047.c iec_p27-1.c inis.c inis-8.c viscii.c \
- inis-cyrillic.c iso-2022-jp.c iso-2022-kr.c iso646.c \
- iso8859-1.c iso8859-2.c iso8859-3.c iso8859-4.c iso8859-5.c \
- iso8859-6.c iso8859-7.c iso8859-8.c iso8859-9.c iso8859-10.c \
- iso8859-11.c iso8859-13.c iso8859-14.c iso8859-9e.c \
- iso8859-15.c iso_2033.c iso_5427-ext.c iso_5427.c iso_5428.c \
- iso_6937.c iso_6937-2.c iso_10367-box.c jis0201.c jis0201.h \
- jis0208.c jis0208.h jis0212.c jis0212.h johab.c koi-8.c \
- koi8-r.c ksc5601.c ksc5601.h latin-greek.c latin-greek-1.c \
- macintosh.c mac-is.c mac-uk.c nats-dano.c nats-sefi.c sjis.c \
- t.61.c uhc.c sami-ws2.c iso-ir-197.c tis-620.c koi8-u.c \
- isiri-3342.c isiri-3342.h gbgbk.c iso-2022-cn.c cns11643l2.h \
- iso8859-16.c utf-16.c unicode.c utf-32.c utf-7.c big5hkscs.c \
- iso-ir-165.c iso-ir-165.h gb18030.c iso-2022-cn-ext.c \
- ibm932.c ibm932.h ibm943.c ibm943.h gbbig5.c cp10007.c \
- koi8-t.c georgian-ps.c georgian-academy.c iso-ir-209.c \
- mac-sami.c ibm1160.c ibm1160.h ibm1161.c ibm1161.h \
- ibm1163.c ibm1163.h ibm1164.c ibm1164.h jisx0213.c jisx0213.h \
- euc-jisx0213.c shift_jisx0213.c iso-2022-jp-3.c \
- tcvn5712-1.c armscii-8.c tscii.c ibm866nav.c pt154.c rk1048.c \
- ibm1025.c ibm1025.h ibm1122.c ibm1122.h ibm1137.c ibm1137.h \
- ibm1153.c ibm1153.h ibm1154.c ibm1154.h ibm1155.c ibm1155.h \
- ibm1156.c ibm1156.h ibm1157.c ibm1157.h ibm1158.c ibm1158.h \
- ibm803.c ibm803.h ibm901.c ibm901.h ibm902.c ibm902.h \
- ibm921.c ibm921.h ibm1008.c ibm1008.h ibm1008_420.c \
- ibm1097.c ibm1097.h ibm1112.c ibm1112.h ibm1123.c ibm1123.h \
- ibm1130.c ibm1130.h ibm1140.c ibm1140.h ibm1141.c ibm1141.h \
- ibm1142.c ibm1142.h ibm1143.c ibm1143.h ibm1144.c ibm1144.h \
- ibm1145.c ibm1145.h ibm1146.c ibm1146.h ibm1147.c ibm1147.h \
- ibm1148.c ibm1148.h ibm1149.c ibm1149.h ibm1166.c ibm1166.h \
- ibm1167.c ibm1167.h ibm4517.c ibm4517.h ibm4899.c ibm4899.h \
- ibm4909.c ibm4909.h ibm4971.c ibm4971.h ibm5347.c ibm5347.h \
- ibm9030.c ibm9030.h ibm9066.c ibm9066.h ibm9448.c ibm9448.h \
- ibm12712.c ibm12712.h ibm16804.c ibm16804.h \
- ibm1364.c ibm1364.h ibm1371.c ibm1371.h ibm1388.c ibm1388.h \
- ibm1390.c ibm1390.h ibm1399.c ibm1399.h iso_11548-1.c mik.c \
- brf.c mac-centraleurope.c hp-roman9.c hp-turkish8.c \
- hp-thai8.c hp-greek8.c cp770.c cp771.c cp772.c cp773.c cp774.c
-
# We build the transformation modules only when we build shared libs.
ifeq (yes,$(build-shared))
diff --git a/include/aio.h b/include/aio.h
index c81dae9706..90c74f9951 100644
--- a/include/aio.h
+++ b/include/aio.h
@@ -1,6 +1,7 @@
#ifndef _AIO_H
#include <rt/aio.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern void __aio_init (const struct aioinit *__init);
@@ -8,5 +9,6 @@ extern void __aio_init (const struct aioinit *__init);
lio_listio and we do not issue events for each individual list
element. */
#define LIO_NO_INDIVIDUAL_EVENT 128
+#endif
#endif
diff --git a/include/arpa/inet.h b/include/arpa/inet.h
index dc44341140..63ece7029a 100644
--- a/include/arpa/inet.h
+++ b/include/arpa/inet.h
@@ -1,5 +1,6 @@
#include <inet/arpa/inet.h>
+#ifndef _ISOMAC
extern int __inet_aton (const char *__cp, struct in_addr *__inp);
libc_hidden_proto (__inet_aton)
@@ -8,3 +9,4 @@ libc_hidden_proto (inet_ntop)
libc_hidden_proto (inet_pton)
libc_hidden_proto (inet_makeaddr)
libc_hidden_proto (inet_netof)
+#endif
diff --git a/include/assert.h b/include/assert.h
index 573eb404ec..d0d9259ab3 100644
--- a/include/assert.h
+++ b/include/assert.h
@@ -1,5 +1,6 @@
#include <assert/assert.h>
+#ifndef _ISOMAC
/* This prints an "Assertion failed" message and aborts.
In installed assert.h this is only conditionally declared,
so it has to be repeated here. */
@@ -19,7 +20,8 @@ extern void __assert_fail_base (const char *fmt, const char *assertion,
const char *function)
__THROW __attribute__ ((__noreturn__));
-#if !defined NOT_IN_libc || defined IS_IN_rtld
+# if !defined NOT_IN_libc || defined IS_IN_rtld
hidden_proto (__assert_fail)
hidden_proto (__assert_perror_fail)
+# endif
#endif
diff --git a/include/bits/dlfcn.h b/include/bits/dlfcn.h
index c31a645bc8..47652a11a2 100644
--- a/include/bits/dlfcn.h
+++ b/include/bits/dlfcn.h
@@ -1,3 +1,5 @@
#include_next <bits/dlfcn.h>
+#ifndef _ISOMAC
libc_hidden_proto (_dl_mcount_wrapper_check)
+#endif
diff --git a/include/ctype.h b/include/ctype.h
index 4b5abda375..6a18039e3f 100644
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -1,5 +1,6 @@
#ifndef _CTYPE_H
+#ifndef _ISOMAC
/* Initialize ctype locale data. */
extern void __ctype_init (void);
libc_hidden_proto (__ctype_init)
@@ -46,9 +47,11 @@ __ctype_tolower_loc (void)
}
# endif /* Not NOT_IN_libc. */
+#endif
-# include <ctype/ctype.h>
+#include <ctype/ctype.h>
+#ifndef _ISOMAC
# if !defined __NO_CTYPE && !defined NOT_IN_libc
/* The spec says that isdigit must only match the decimal digits. We
can check this without a memory access. */
@@ -59,5 +62,6 @@ __ctype_tolower_loc (void)
# undef __isdigit_l
# define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
# endif
+#endif
#endif /* ctype.h */
diff --git a/include/dirent.h b/include/dirent.h
index 28bf432301..8e4823ce73 100644
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -1,6 +1,9 @@
#ifndef _DIRENT_H
-# include <dirstream.h>
+# ifndef _ISOMAC
+# include <dirstream.h>
+# endif
# include <dirent/dirent.h>
+# ifndef _ISOMAC
# include <sys/stat.h>
# include <stdbool.h>
@@ -44,5 +47,6 @@ extern void __scandir_cancel_handler (void *arg);
libc_hidden_proto (rewinddir)
libc_hidden_proto (scandirat)
libc_hidden_proto (scandirat64)
+# endif
#endif
diff --git a/include/dlfcn.h b/include/dlfcn.h
index ae9c886087..a67b2e3251 100644
--- a/include/dlfcn.h
+++ b/include/dlfcn.h
@@ -1,5 +1,6 @@
#ifndef _DLFCN_H
#include <dlfcn/dlfcn.h>
+#ifndef _ISOMAC
#include <link.h> /* For ElfW. */
#include <stdbool.h>
@@ -146,5 +147,6 @@ extern void __libc_register_dl_open_hook (struct link_map *map)
extern void __libc_register_dlfcn_hook (struct link_map *map)
attribute_hidden;
#endif
+#endif
#endif
diff --git a/include/fcntl.h b/include/fcntl.h
index 7afbd1c74c..b645ffc000 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -1,6 +1,7 @@
#ifndef _FCNTL_H
#include <io/fcntl.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __open64 (const char *__file, int __oflag, ...);
libc_hidden_proto (__open64)
@@ -44,5 +45,6 @@ extern int __have_atfcts attribute_hidden;
#ifdef O_CLOEXEC
extern int __have_o_cloexec attribute_hidden;
#endif
+#endif
#endif
diff --git a/include/fnmatch.h b/include/fnmatch.h
index 2cdad0a40f..9ef8150eda 100644
--- a/include/fnmatch.h
+++ b/include/fnmatch.h
@@ -2,6 +2,8 @@
#include <posix/fnmatch.h>
+#ifndef _ISOMAC
libc_hidden_proto (fnmatch)
+#endif
#endif
diff --git a/include/glob.h b/include/glob.h
index a0c05977f7..228fe30ca8 100644
--- a/include/glob.h
+++ b/include/glob.h
@@ -1,6 +1,7 @@
#ifndef _GLOB_H
#include <posix/glob.h>
+#ifndef _ISOMAC
libc_hidden_proto (glob)
libc_hidden_proto (glob64)
libc_hidden_proto (globfree)
@@ -11,5 +12,6 @@ extern int __glob_pattern_p (const char *__pattern, int __quote);
extern int __glob64 (const char *__pattern, int __flags,
int (*__errfunc) (const char *, int),
glob64_t *__pglob);
+#endif
#endif
diff --git a/include/grp.h b/include/grp.h
index 9fa71eac75..0fb5c9a574 100644
--- a/include/grp.h
+++ b/include/grp.h
@@ -1,6 +1,7 @@
#ifndef _GRP_H
#include <grp/grp.h>
+#ifndef _ISOMAC
libc_hidden_proto (setgroups)
/* Now define the internal interfaces. */
@@ -60,3 +61,4 @@ DECLARE_NSS_PROTOTYPES (nisplus)
#undef DECLARE_NSS_PROTOTYPES
#endif
+#endif
diff --git a/include/langinfo.h b/include/langinfo.h
index 37a91c699d..d60d7f6382 100644
--- a/include/langinfo.h
+++ b/include/langinfo.h
@@ -2,9 +2,11 @@
#include <locale/langinfo.h>
+#ifndef _ISOMAC
libc_hidden_proto (nl_langinfo)
extern __typeof (nl_langinfo_l) __nl_langinfo_l;
libc_hidden_proto (__nl_langinfo_l)
+#endif
#endif
diff --git a/include/libio.h b/include/libio.h
index 633ee51bb7..aca7000f8e 100644
--- a/include/libio.h
+++ b/include/libio.h
@@ -1,5 +1,6 @@
#include <libio/libio.h>
+#ifndef _ISOMAC
#ifndef _LIBC_LIBIO_H
#define _LIBC_LIBIO_H
@@ -22,3 +23,4 @@ libc_hidden_proto (__wuflow)
#endif
#endif
+#endif
diff --git a/include/link.h b/include/link.h
index c5265ee16f..2eb3179475 100644
--- a/include/link.h
+++ b/include/link.h
@@ -330,4 +330,9 @@ extern int __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
size_t size, void *data),
void *data);
+/* We use this macro to refer to ELF macros independent of the native
+ wordsize. `ELFW(R_TYPE)' is used in place of `ELF32_R_TYPE' or
+ `ELF64_R_TYPE'. */
+#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type)
+
#endif /* include/link.h */
diff --git a/include/locale.h b/include/locale.h
index a296a5f8f6..8091e1dc80 100644
--- a/include/locale.h
+++ b/include/locale.h
@@ -1,6 +1,7 @@
#ifndef _LOCALE_H
#include <locale/locale.h>
+#ifndef _ISOMAC
extern __typeof (uselocale) __uselocale;
libc_hidden_proto (setlocale)
@@ -22,3 +23,4 @@ extern struct lconv *__localeconv (void);
extern const char *__current_locale_name (int category) attribute_hidden;
#endif
+#endif
diff --git a/include/math.h b/include/math.h
index 3934880171..2b040c67fd 100644
--- a/include/math.h
+++ b/include/math.h
@@ -2,6 +2,7 @@
#include <math/math.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __matherr (struct exception *__exc);
@@ -36,3 +37,4 @@ extern int __isinf_nsf (float);
extern int __isinf_nsl (long double);
#endif
+#endif
diff --git a/include/monetary.h b/include/monetary.h
index 98b3dbf294..e6870138f8 100644
--- a/include/monetary.h
+++ b/include/monetary.h
@@ -1,5 +1,7 @@
#include <stdlib/monetary.h>
+#ifndef _ISOMAC
#include <stdarg.h>
extern ssize_t __vstrfmon_l (char *s, size_t maxsize, __locale_t loc,
const char *format, va_list ap);
+#endif
diff --git a/include/net/if.h b/include/net/if.h
index 872ab6da15..1d862260c7 100644
--- a/include/net/if.h
+++ b/include/net/if.h
@@ -2,9 +2,11 @@
# include_next <net/if.h>
+#ifndef _ISOMAC
libc_hidden_proto (if_nametoindex)
libc_hidden_proto (if_indextoname)
libc_hidden_proto (if_nameindex)
libc_hidden_proto (if_freenameindex)
+#endif
#endif
diff --git a/include/netdb.h b/include/netdb.h
index 0db3579259..3f2ae06451 100644
--- a/include/netdb.h
+++ b/include/netdb.h
@@ -1,6 +1,7 @@
#ifndef _NETDB_H
#include <resolv/netdb.h>
+#ifndef _ISOMAC
/* Macros for accessing h_errno from inside libc. */
# undef h_errno
# ifdef _LIBC_REENTRANT
@@ -280,5 +281,6 @@ DECLARE_NSS_PROTOTYPES (nis)
DECLARE_NSS_PROTOTYPES (nisplus)
#undef DECLARE_NSS_PROTOTYPES
+#endif
#endif /* !_NETDB_H */
diff --git a/include/netinet/in.h b/include/netinet/in.h
index 876f1a4369..6fb5c86de9 100644
--- a/include/netinet/in.h
+++ b/include/netinet/in.h
@@ -2,8 +2,10 @@
#include <inet/netinet/in.h>
+#ifndef _ISOMAC
libc_hidden_proto (bindresvport)
libc_hidden_proto (in6addr_loopback)
libc_hidden_proto (in6addr_any)
+#endif
#endif
diff --git a/include/pthread.h b/include/pthread.h
index f8860bdf93..51854f6053 100644
--- a/include/pthread.h
+++ b/include/pthread.h
@@ -1,4 +1,6 @@
#include_next <pthread.h>
+#ifndef _ISOMAC
/* This function is called to initialize the pthread library. */
extern void __pthread_initialize (void) __attribute__ ((weak));
+#endif
diff --git a/include/pwd.h b/include/pwd.h
index 465c17c50c..bd7fecc16e 100644
--- a/include/pwd.h
+++ b/include/pwd.h
@@ -1,6 +1,7 @@
#ifndef _PWD_H
#include <pwd/pwd.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __getpwent_r (struct passwd *__resultbuf, char *__buffer,
size_t __buflen, struct passwd **__result)
@@ -51,5 +52,6 @@ DECLARE_NSS_PROTOTYPES (nis)
DECLARE_NSS_PROTOTYPES (nisplus)
#undef DECLARE_NSS_PROTOTYPES
+#endif
#endif
diff --git a/include/regex.h b/include/regex.h
index a7606c5e0d..fd4beeff3d 100644
--- a/include/regex.h
+++ b/include/regex.h
@@ -1,6 +1,7 @@
#ifndef _REGEX_H
#include <posix/regex.h>
+#ifndef _ISOMAC
/* Document internal interfaces. */
extern reg_syntax_t __re_set_syntax (reg_syntax_t syntax);
@@ -41,3 +42,4 @@ extern size_t __regerror (int __errcode, const regex_t *__preg,
extern void __regfree (regex_t *__preg);
#endif
+#endif
diff --git a/include/sched.h b/include/sched.h
index 1eae9f72ff..4f59397090 100644
--- a/include/sched.h
+++ b/include/sched.h
@@ -1,6 +1,7 @@
#ifndef _SCHED_H
#include <posix/sched.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __sched_setparam (__pid_t __pid,
const struct sched_param *__param);
@@ -21,3 +22,4 @@ extern int __clone (int (*__fn) (void *__arg), void *__child_stack,
extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base,
size_t __child_stack_size, int __flags, void *__arg, ...);
#endif
+#endif
diff --git a/include/search.h b/include/search.h
index d1f3a92e83..cf9c343708 100644
--- a/include/search.h
+++ b/include/search.h
@@ -1,6 +1,7 @@
#ifndef _SEARCH_H
#include <misc/search.h>
+#ifndef _ISOMAC
libc_hidden_proto (hcreate_r)
libc_hidden_proto (hdestroy_r)
libc_hidden_proto (hsearch_r)
@@ -17,3 +18,4 @@ extern void *__tdelete (const void *__key, void **__rootp,
extern void __twalk (const void *__root, __action_fn_t action);
extern void __tdestroy (void *__root, __free_fn_t freefct);
#endif
+#endif
diff --git a/include/setjmp.h b/include/setjmp.h
index 6863f51c11..622bb319f3 100644
--- a/include/setjmp.h
+++ b/include/setjmp.h
@@ -1,6 +1,7 @@
#ifndef _SETJMP_H
#include <setjmp/setjmp.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
/* Internal machine-dependent function to restore context sans signal mask. */
@@ -16,12 +17,13 @@ extern int __sigjmp_save (jmp_buf __env, int __savemask);
extern void _longjmp_unwind (jmp_buf env, int val);
extern void __libc_siglongjmp (sigjmp_buf env, int val)
- __attribute__ ((noreturn));
+ __attribute__ ((noreturn));
extern void __libc_longjmp (sigjmp_buf env, int val)
__attribute__ ((noreturn));
libc_hidden_proto (__libc_longjmp)
libc_hidden_proto (_setjmp)
libc_hidden_proto (__sigsetjmp)
+#endif
#endif
diff --git a/include/signal.h b/include/signal.h
index 6250d30f77..c43f2abeec 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -4,6 +4,7 @@
#else
# include <signal/signal.h>
+# ifndef _ISOMAC
libc_hidden_proto (sigemptyset)
libc_hidden_proto (sigfillset)
libc_hidden_proto (sigaddset)
@@ -58,5 +59,6 @@ extern int __xpg_sigpause (int sig);
/* Allocate real-time signal with highest/lowest available priority. */
extern int __libc_allocate_rtsig (int __high);
+# endif
#endif
#endif
diff --git a/include/stdio.h b/include/stdio.h
index 48aa765e02..bd0209aaac 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -1,5 +1,5 @@
#ifndef _STDIO_H
-# if defined __need_FILE || defined __need___FILE
+# if defined __need_FILE || defined __need___FILE || defined _ISOMAC
# include <libio/stdio.h>
# else
# include <libio/stdio.h>
@@ -29,7 +29,7 @@ extern int __vsscanf (const char *__restrict __s,
_G_va_list __arg)
__attribute__ ((__format__ (__scanf__, 2, 0)));
-#ifndef __cplusplus
+# ifndef __cplusplus
extern int __sprintf_chk (char *, int, size_t, const char *, ...) __THROW;
extern int __snprintf_chk (char *, size_t, int, size_t, const char *, ...)
__THROW;
@@ -51,7 +51,7 @@ extern int __obstack_printf_chk (struct obstack *, int, const char *, ...)
__THROW;
extern int __obstack_vprintf_chk (struct obstack *, int, const char *,
_G_va_list) __THROW;
-#endif
+# endif
extern int __isoc99_fscanf (FILE *__restrict __stream,
const char *__restrict __format, ...) __wur;
@@ -119,7 +119,7 @@ extern int _sys_nerr_internal attribute_hidden;
extern int __asprintf_internal (char **__restrict __ptr,
const char *__restrict __fmt, ...)
attribute_hidden __attribute__ ((__format__ (__printf__, 2, 3)));
-# if !defined NOT_IN_libc && !defined _ISOMAC
+# if !defined NOT_IN_libc
# define __asprintf(ptr, fmt, args...) \
INTUSE(__asprintf) (ptr, fmt, ##args)
diff --git a/include/stdlib.h b/include/stdlib.h
index fc9ef7f5d6..de0b414d86 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -4,14 +4,14 @@
#define __Need_M_And_C
#endif
-#include <stddef.h>
+#ifndef _ISOMAC
+# include <stddef.h>
+#endif
#include <stdlib/stdlib.h>
/* Now define the internal interfaces. */
-#ifndef __Need_M_And_C
-# ifndef _ISOMAC
-# include <sys/stat.h>
-# endif
+#if !defined __Need_M_And_C && !defined _ISOMAC
+# include <sys/stat.h>
__BEGIN_DECLS
diff --git a/include/string.h b/include/string.h
index 0b49b8fe7c..f1077f66ed 100644
--- a/include/string.h
+++ b/include/string.h
@@ -1,5 +1,6 @@
#ifndef _STRING_H
+#ifndef _ISOMAC
#include <sys/types.h>
extern void *__memccpy (void *__dest, const void *__src,
@@ -43,11 +44,13 @@ extern void *__memchr (const void *__s, int __c, size_t __n)
extern int __ffs (int __i) __attribute__ ((const));
extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen);
+#endif
/* Now the real definitions. We do this here since some of the functions
above are defined as macros in the headers. */
#include <string/string.h>
+#ifndef _ISOMAC
extern __typeof (strcoll_l) __strcoll_l;
extern __typeof (strxfrm_l) __strxfrm_l;
extern __typeof (strcasecmp_l) __strcasecmp_l;
@@ -142,5 +145,6 @@ extern char *__strcat_chk (char *__restrict __dest,
extern char *__strncat_chk (char *__restrict __dest,
const char *__restrict __src,
size_t __len, size_t __destlen) __THROW;
+#endif
#endif
diff --git a/include/stropts.h b/include/stropts.h
new file mode 100644
index 0000000000..27ab60ac7f
--- /dev/null
+++ b/include/stropts.h
@@ -0,0 +1 @@
+#include <streams/stropts.h>
diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
index a2bdf20d93..71baa1a2d2 100644
--- a/include/sys/cdefs.h
+++ b/include/sys/cdefs.h
@@ -2,21 +2,19 @@
#include <misc/sys/cdefs.h>
+#ifndef _ISOMAC
/* The compiler will optimize based on the knowledge the parameter is
not NULL. This will omit tests. A robust implementation cannot allow
this so when compiling glibc itself we ignore this attribute. */
-#undef __nonnull
-#define __nonnull(params)
+# undef __nonnull
+# define __nonnull(params)
extern void __chk_fail (void) __attribute__ ((__noreturn__));
libc_hidden_proto (__chk_fail)
rtld_hidden_proto (__chk_fail)
-#if __GNUC_PREREQ (4,3)
# define __attribute_alloc_size(...) __attribute__ ((alloc_size (__VA_ARGS__)))
-#else
-# define __attribute_alloc_size(...)
#endif
#endif
diff --git a/include/sys/mman.h b/include/sys/mman.h
index a4687b30f7..0a0e4a6533 100644
--- a/include/sys/mman.h
+++ b/include/sys/mman.h
@@ -1,6 +1,7 @@
#ifndef _SYS_MMAN_H
#include <misc/sys/mman.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern void *__mmap (void *__addr, size_t __len, int __prot,
int __flags, int __fd, __off_t __offset);
@@ -14,5 +15,6 @@ extern void *__mremap (void *__addr, size_t __old_len,
size_t __new_len, int __flags, ...);
libc_hidden_proto (madvise);
+#endif
#endif
diff --git a/include/sys/msg.h b/include/sys/msg.h
index 03e17f915e..43ec5b9472 100644
--- a/include/sys/msg.h
+++ b/include/sys/msg.h
@@ -1,9 +1,11 @@
#ifndef _SYS_MSG_H
#include <sysvipc/sys/msg.h>
+#ifndef _ISOMAC
extern ssize_t __libc_msgrcv (int msqid, void *msgp, size_t msgsz,
long int msgtyp, int msgflg);
extern int __libc_msgsnd (int msqid, const void *msgp, size_t msgsz,
int msgflg);
+#endif
#endif
diff --git a/include/sys/poll.h b/include/sys/poll.h
index 4285eee55b..a42bc93873 100644
--- a/include/sys/poll.h
+++ b/include/sys/poll.h
@@ -1,9 +1,11 @@
#ifndef _SYS_POLL_H
# include <io/sys/poll.h>
+#ifndef _ISOMAC
extern int __poll (struct pollfd *__fds, unsigned long int __nfds,
int __timeout);
libc_hidden_proto (__poll)
libc_hidden_proto (ppoll)
+#endif
#endif
diff --git a/include/sys/resource.h b/include/sys/resource.h
index b4ea1ae592..c35df435a5 100644
--- a/include/sys/resource.h
+++ b/include/sys/resource.h
@@ -1,6 +1,7 @@
#ifndef _SYS_RESOURCE_H
#include <resource/sys/resource.h>
+#ifndef _ISOMAC
libc_hidden_proto (getpriority)
libc_hidden_proto (setpriority)
libc_hidden_proto (getrlimit64)
@@ -14,3 +15,4 @@ extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
extern int __setrlimit (enum __rlimit_resource __resource,
const struct rlimit *__rlimits);
#endif
+#endif
diff --git a/include/sys/select.h b/include/sys/select.h
index 2e5901c13d..07bb49b994 100644
--- a/include/sys/select.h
+++ b/include/sys/select.h
@@ -1,6 +1,7 @@
#ifndef _SYS_SELECT_H
#include <misc/sys/select.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __pselect (int __nfds, fd_set *__readfds,
fd_set *__writefds, fd_set *__exceptfds,
@@ -14,3 +15,4 @@ extern int __select (int __nfds, fd_set *__restrict __readfds,
libc_hidden_proto (__select)
#endif
+#endif
diff --git a/include/sys/socket.h b/include/sys/socket.h
index d45c99d1cf..2ae3428bdd 100644
--- a/include/sys/socket.h
+++ b/include/sys/socket.h
@@ -1,6 +1,7 @@
#ifndef _SYS_SOCKET_H
#include <socket/sys/socket.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
/* Create a new socket of type TYPE in domain DOMAIN, using
@@ -162,3 +163,4 @@ extern int __have_sock_cloexec;
#endif
#endif
+#endif
diff --git a/include/sys/stat.h b/include/sys/stat.h
index a6cf60f401..7a65d608c5 100644
--- a/include/sys/stat.h
+++ b/include/sys/stat.h
@@ -1,6 +1,7 @@
#ifndef _SYS_STAT_H
#include <io/sys/stat.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __stat (const char *__file, struct stat *__buf);
extern int __fstat (int __fd, struct stat *__buf);
@@ -55,3 +56,4 @@ libc_hidden_proto (__fxstatat64)
#define __fstatat64(dfd, fname, buf, flag) \
__fxstatat64 (_STAT_VER, dfd, fname, buf, flag)
#endif
+#endif
diff --git a/include/sys/statvfs.h b/include/sys/statvfs.h
index 74ef2db45d..fa3045386d 100644
--- a/include/sys/statvfs.h
+++ b/include/sys/statvfs.h
@@ -1,6 +1,7 @@
#ifndef _SYS_STATVFS_H
#include <io/sys/statvfs.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __statvfs64 (const char *__file, struct statvfs64 *__buf);
extern int __fstatvfs64 (int __fildes, struct statvfs64 *__buf);
@@ -8,3 +9,4 @@ extern int __fstatvfs64 (int __fildes, struct statvfs64 *__buf);
libc_hidden_proto (statvfs)
libc_hidden_proto (fstatvfs)
#endif
+#endif
diff --git a/include/sys/time.h b/include/sys/time.h
index a5ec500cde..d5de942ed6 100644
--- a/include/sys/time.h
+++ b/include/sys/time.h
@@ -1,6 +1,7 @@
#ifndef _SYS_TIME_H
#include <time/sys/time.h>
+#ifndef _ISOMAC
/* Now document the internal interfaces. */
extern int __gettimeofday (struct timeval *__tv,
struct timezone *__tz);
@@ -27,3 +28,4 @@ extern int __futimes (int fd, const struct timeval tvp[2]) attribute_hidden;
#endif
#endif
+#endif
diff --git a/include/sys/times.h b/include/sys/times.h
index 6ad39fb8c5..026d140fe1 100644
--- a/include/sys/times.h
+++ b/include/sys/times.h
@@ -1,6 +1,8 @@
#ifndef _SYS_TIMES_H
#include <posix/sys/times.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern clock_t __times (struct tms *__buffer);
#endif
+#endif
diff --git a/include/sys/uio.h b/include/sys/uio.h
index 1e5d64e47e..0ec9ab09a8 100644
--- a/include/sys/uio.h
+++ b/include/sys/uio.h
@@ -1,6 +1,7 @@
#ifndef _SYS_UIO_H
#include <misc/sys/uio.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern ssize_t __readv (int __fd, const struct iovec *__vector,
int __count);
@@ -11,3 +12,4 @@ extern ssize_t __writev (int __fd, const struct iovec *__vector,
extern ssize_t __libc_writev (int __fd, const struct iovec *__vector,
int __count);
#endif
+#endif
diff --git a/include/sys/utsname.h b/include/sys/utsname.h
index a6b4ceb97e..66a5289638 100644
--- a/include/sys/utsname.h
+++ b/include/sys/utsname.h
@@ -1,8 +1,10 @@
#ifndef _SYS_UTSNAME_H
#include <posix/sys/utsname.h>
+#ifndef _ISOMAC
extern int __uname (struct utsname *__name);
libc_hidden_proto (uname)
libc_hidden_proto (__uname)
#endif
+#endif
diff --git a/include/sys/wait.h b/include/sys/wait.h
index efabd0cc45..2239501614 100644
--- a/include/sys/wait.h
+++ b/include/sys/wait.h
@@ -1,6 +1,7 @@
#ifndef _SYS_WAIT_H
#include <posix/sys/wait.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern __pid_t __waitpid (__pid_t __pid, int *__stat_loc,
int __options);
@@ -16,3 +17,4 @@ extern __pid_t __wait4 (__pid_t __pid, __WAIT_STATUS __stat_loc,
int __options, struct rusage *__usage)
attribute_hidden;
#endif
+#endif
diff --git a/include/termios.h b/include/termios.h
index 8916f1434f..fad51f8385 100644
--- a/include/termios.h
+++ b/include/termios.h
@@ -1,6 +1,7 @@
#ifndef _TERMIOS_H
#include <termios/termios.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __tcgetattr (int __fd, struct termios *__termios_p);
@@ -11,3 +12,4 @@ libc_hidden_proto (cfsetispeed)
libc_hidden_proto (cfsetospeed)
#endif
+#endif
diff --git a/include/time.h b/include/time.h
index 0bda094cb4..f056542a10 100644
--- a/include/time.h
+++ b/include/time.h
@@ -1,5 +1,5 @@
#ifndef _TIME_H
-#if defined __need_time_t || defined __need_clock_t || defined __need_timespec
+#if defined __need_time_t || defined __need_clock_t || defined __need_timespec || defined _ISOMAC
# include <time/time.h>
#else
# include <time/time.h>
@@ -106,9 +106,7 @@ extern double __difftime (time_t time1, time_t time0);
/* Use in the clock_* functions. Size of the field representing the
actual clock ID. */
-#ifndef _ISOMAC
-# define CLOCK_IDFIELD_SIZE 3
-#endif
+#define CLOCK_IDFIELD_SIZE 3
__END_DECLS
diff --git a/include/uchar.h b/include/uchar.h
new file mode 100644
index 0000000000..f456684706
--- /dev/null
+++ b/include/uchar.h
@@ -0,0 +1 @@
+#include <wcsmbs/uchar.h>
diff --git a/include/ulimit.h b/include/ulimit.h
index d2430fa6a3..dd83faa049 100644
--- a/include/ulimit.h
+++ b/include/ulimit.h
@@ -1,6 +1,8 @@
#ifndef _ULIMIT_H
#include <resource/ulimit.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern long int __ulimit (int __cmd, ...);
#endif
+#endif
diff --git a/include/unistd.h b/include/unistd.h
index 4664dc2852..2e6101b0d0 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -1,6 +1,7 @@
#ifndef _UNISTD_H
# include <posix/unistd.h>
+# ifndef _ISOMAC
__BEGIN_DECLS
libc_hidden_proto (_exit, __noreturn__)
@@ -182,5 +183,6 @@ extern int __getlogin_r_loginuid (char *name, size_t namesize)
attribute_hidden;
__END_DECLS
+# endif
#endif
diff --git a/include/utime.h b/include/utime.h
index aecd6a14d8..5049251311 100644
--- a/include/utime.h
+++ b/include/utime.h
@@ -2,6 +2,8 @@
#include <io/utime.h>
+#ifndef _ISOMAC
libc_hidden_proto (utime)
+#endif
#endif /* utime.h */
diff --git a/include/wchar.h b/include/wchar.h
index d2f9e0d166..f927a95fdf 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -1,6 +1,7 @@
#ifndef _WCHAR_H
#include <wcsmbs/wchar.h>
+# ifndef _ISOMAC
# ifdef _WCHAR_H
extern __typeof (wcscasecmp_l) __wcscasecmp_l;
@@ -194,6 +195,7 @@ extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
# define __mbsinit(state) ((state)->__count == 0)
# endif
+# endif
#endif
/* Undefine all __need_* constants in case we are included to get those
diff --git a/include/wctype.h b/include/wctype.h
index 9833f958dd..a2ee9ff880 100644
--- a/include/wctype.h
+++ b/include/wctype.h
@@ -1,5 +1,6 @@
#ifndef _WCTYPE_H
+#ifndef _ISOMAC
/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
there. So define it ourselves if it remains undefined. */
# define __need_wint_t
@@ -33,9 +34,11 @@ libc_hidden_proto (iswspace)
libc_hidden_proto (iswxdigit)
libc_hidden_proto (towlower)
libc_hidden_proto (towupper)
+#endif
#include <wctype/wctype.h>
+#ifndef _ISOMAC
/* Internal interfaces. */
extern int __iswalpha_l_internal (wint_t __wc, __locale_t __locale)
attribute_hidden;
@@ -96,3 +99,4 @@ libc_hidden_proto (__towupper_l)
# endif
#endif
+#endif
diff --git a/include/wordexp.h b/include/wordexp.h
index 27ae0454c5..33c90c15c0 100644
--- a/include/wordexp.h
+++ b/include/wordexp.h
@@ -2,6 +2,8 @@
#include <posix/wordexp.h>
+#ifndef _ISOMAC
libc_hidden_proto (wordfree)
+#endif
#endif
diff --git a/inet/Makefile b/inet/Makefile
index 1e67cdf643..80e2d7ab2e 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2006, 2007, 2009, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2007, 2009, 2011, 2012 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
@@ -25,8 +25,6 @@ headers := netinet/ether.h netinet/in.h netinet/in_systm.h \
netinet/tcp.h netinet/ip.h $(wildcard arpa/*.h protocols/*.h) \
aliases.h ifaddrs.h netinet/ip6.h netinet/icmp6.h bits/in.h
-distribute := netgroup.h
-
routines := htonl htons \
inet_lnaof inet_mkadr \
inet_netof inet_ntoa inet_net herrno herrno-loc \
@@ -93,8 +91,3 @@ endif
ifeq ($(build-static-nss),yes)
CFLAGS += -DSTATIC_NSS
endif
-
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
diff --git a/intl/Makefile b/intl/Makefile
index c9a3575329..fc6af4446a 100644
--- a/intl/Makefile
+++ b/intl/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995-2003, 2005, 2008, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1995-2003,2005,2008,2011,2012 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
@@ -23,15 +23,6 @@ routines = bindtextdom dcgettext dgettext gettext \
dcigettext dcngettext dngettext ngettext \
finddomain loadmsgcat localealias textdomain
aux = l10nflist explodename plural plural-exp hash-string
-distribute = gmo.h gettextP.h hash-string.h loadinfo.h locale.alias \
- plural.y plural-exp.h plural-eval.c po2test.sed \
- tst-gettext.sh \
- tst-translit.sh translit.po \
- tst-gettext2.sh tstlang1.po tstlang2.po \
- tst-codeset.sh tstcodeset.po \
- tst-gettext3.sh \
- tst-gettext4.sh tst-gettext4-de.po tst-gettext4-fr.po \
- tst-gettext5.sh tst-gettext6.sh
include ../Makeconfig
diff --git a/intl/plural.c b/intl/plural.c
index dc89c343d1..0d8bf4c6d5 100644
--- a/intl/plural.c
+++ b/intl/plural.c
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.4.3. */
+/* A Bison parser, made by GNU Bison 2.5. */
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -45,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.4.3"
+#define YYBISON_VERSION "2.5"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -74,7 +73,7 @@
/* Copy the first part of user declarations. */
-/* Line 189 of yacc.c */
+/* Line 268 of yacc.c */
#line 1 "plural.y"
/* Expression parsing for plural form selection.
@@ -93,9 +92,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* The bison generated parser uses alloca. AIX 3 forces us to put this
declaration at the beginning of the file. The declaration in bison's
@@ -123,8 +121,8 @@
#define YYPARSE_PARAM arg
-/* Line 189 of yacc.c */
-#line 128 "plural.c"
+/* Line 268 of yacc.c */
+#line 126 "plural.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -158,6 +156,13 @@
NUMBER = 262
};
#endif
+/* Tokens. */
+#define EQUOP2 258
+#define CMPOP2 259
+#define ADDOP2 260
+#define MULOP2 261
+#define NUMBER 262
+
@@ -165,8 +170,8 @@
typedef union YYSTYPE
{
-/* Line 214 of yacc.c */
-#line 50 "plural.y"
+/* Line 293 of yacc.c */
+#line 49 "plural.y"
unsigned long int num;
enum operator op;
@@ -174,8 +179,8 @@ typedef union YYSTYPE
-/* Line 214 of yacc.c */
-#line 179 "plural.c"
+/* Line 293 of yacc.c */
+#line 184 "plural.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -185,8 +190,8 @@ typedef union YYSTYPE
/* Copy the second part of user declarations. */
-/* Line 264 of yacc.c */
-#line 56 "plural.y"
+/* Line 343 of yacc.c */
+#line 55 "plural.y"
/* Prototypes for local functions. */
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
@@ -286,8 +291,8 @@ new_exp_3 (op, bexp, tbranch, fbranch)
-/* Line 264 of yacc.c */
-#line 291 "plural.c"
+/* Line 343 of yacc.c */
+#line 296 "plural.c"
#ifdef short
# undef short
@@ -390,11 +395,11 @@ YYID (yyi)
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
# endif
# endif
# endif
@@ -417,24 +422,24 @@ YYID (yyi)
# ifndef YYSTACK_ALLOC_MAXIMUM
# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
&& (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
# endif
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
@@ -463,23 +468,7 @@ union yyalloc
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
+# define YYCOPY_NEEDED 1
/* Relocate STACK from its old location to the new one. The
local variables YYSIZE and YYSTACKSIZE give the old and new number of
@@ -499,6 +488,26 @@ union yyalloc
#endif
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 9
/* YYLAST -- Last index in YYTABLE. */
@@ -574,8 +583,8 @@ static const yytype_int8 yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 175, 175, 183, 187, 191, 195, 199, 203, 207,
- 211, 215, 219, 224
+ 0, 174, 174, 182, 186, 190, 194, 198, 202, 206,
+ 210, 214, 218, 223
};
#endif
@@ -614,8 +623,8 @@ static const yytype_uint8 yyr2[] =
2, 1, 1, 3
};
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
@@ -648,8 +657,7 @@ static const yytype_int8 yypgoto[] =
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
+ number is the opposite. If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -1
static const yytype_uint8 yytable[] =
{
@@ -661,6 +669,12 @@ static const yytype_uint8 yytable[] =
16, 13, 14, 15, 16
};
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-10))
+
+#define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
static const yytype_int8 yycheck[] =
{
1, 10, 11, 4, 13, 14, 8, 9, 0, 10,
@@ -713,7 +727,6 @@ do \
{ \
yychar = (Token); \
yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
YYPOPSTACK (1); \
goto yybackup; \
} \
@@ -755,19 +768,10 @@ while (YYID (0))
#endif
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
+/* This macro is provided for backward compatibility. */
#ifndef YY_LOCATION_PRINT
-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif
@@ -959,7 +963,6 @@ int yydebug;
# define YYMAXDEPTH 10000
#endif
-
#if YYERROR_VERBOSE
@@ -1062,115 +1065,142 @@ yytnamerr (char *yyres, const char *yystr)
}
# endif
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
{
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
}
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
}
#endif /* YYERROR_VERBOSE */
-
/*-----------------------------------------------.
| Release the memory associated to this symbol. |
@@ -1203,6 +1233,7 @@ yydestruct (yymsg, yytype, yyvaluep)
}
}
+
/* Prevent warnings from -Wmissing-prototypes. */
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
@@ -1219,12 +1250,9 @@ int yyparse ();
#endif /* ! YYPARSE_PARAM */
-
-
-
-/*-------------------------.
-| yyparse or yypush_parse. |
-`-------------------------*/
+/*----------.
+| yyparse. |
+`----------*/
#ifdef YYPARSE_PARAM
#if (defined __STDC__ || defined __C99__FUNC__ \
@@ -1411,7 +1439,7 @@ yybackup:
/* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
+ if (yypact_value_is_default (yyn))
goto yydefault;
/* Not known => get a lookahead token if don't already have one. */
@@ -1442,8 +1470,8 @@ yybackup:
yyn = yytable[yyn];
if (yyn <= 0)
{
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
@@ -1496,123 +1524,134 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 2:
+ case 2:
-/* Line 1464 of yacc.c */
-#line 176 "plural.y"
+/* Line 1806 of yacc.c */
+#line 175 "plural.y"
{
if ((yyvsp[(1) - (1)].exp) == NULL)
YYABORT;
((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp);
- ;}
+ }
break;
case 3:
-/* Line 1464 of yacc.c */
-#line 184 "plural.y"
+/* Line 1806 of yacc.c */
+#line 183 "plural.y"
{
(yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp));
- ;}
+ }
break;
case 4:
-/* Line 1464 of yacc.c */
-#line 188 "plural.y"
+/* Line 1806 of yacc.c */
+#line 187 "plural.y"
{
(yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- ;}
+ }
break;
case 5:
-/* Line 1464 of yacc.c */
-#line 192 "plural.y"
+/* Line 1806 of yacc.c */
+#line 191 "plural.y"
{
(yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- ;}
+ }
break;
case 6:
-/* Line 1464 of yacc.c */
-#line 196 "plural.y"
+/* Line 1806 of yacc.c */
+#line 195 "plural.y"
{
(yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- ;}
+ }
break;
case 7:
-/* Line 1464 of yacc.c */
-#line 200 "plural.y"
+/* Line 1806 of yacc.c */
+#line 199 "plural.y"
{
(yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- ;}
+ }
break;
case 8:
-/* Line 1464 of yacc.c */
-#line 204 "plural.y"
+/* Line 1806 of yacc.c */
+#line 203 "plural.y"
{
(yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- ;}
+ }
break;
case 9:
-/* Line 1464 of yacc.c */
-#line 208 "plural.y"
+/* Line 1806 of yacc.c */
+#line 207 "plural.y"
{
(yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
- ;}
+ }
break;
case 10:
-/* Line 1464 of yacc.c */
-#line 212 "plural.y"
+/* Line 1806 of yacc.c */
+#line 211 "plural.y"
{
(yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp));
- ;}
+ }
break;
case 11:
-/* Line 1464 of yacc.c */
-#line 216 "plural.y"
+/* Line 1806 of yacc.c */
+#line 215 "plural.y"
{
(yyval.exp) = new_exp_0 (var);
- ;}
+ }
break;
case 12:
-/* Line 1464 of yacc.c */
-#line 220 "plural.y"
+/* Line 1806 of yacc.c */
+#line 219 "plural.y"
{
if (((yyval.exp) = new_exp_0 (num)) != NULL)
(yyval.exp)->val.num = (yyvsp[(1) - (1)].num);
- ;}
+ }
break;
case 13:
-/* Line 1464 of yacc.c */
-#line 225 "plural.y"
+/* Line 1806 of yacc.c */
+#line 224 "plural.y"
{
(yyval.exp) = (yyvsp[(2) - (3)].exp);
- ;}
+ }
break;
-/* Line 1464 of yacc.c */
-#line 1614 "plural.c"
+/* Line 1806 of yacc.c */
+#line 1642 "plural.c"
default: break;
}
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
YYPOPSTACK (yylen);
@@ -1640,6 +1679,10 @@ yyreduce:
| yyerrlab -- here on detecting error |
`------------------------------------*/
yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
@@ -1647,37 +1690,36 @@ yyerrlab:
#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
{
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
}
+# undef YYSYNTAX_ERROR
#endif
}
@@ -1736,7 +1778,7 @@ yyerrlab1:
for (;;)
{
yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
+ if (!yypact_value_is_default (yyn))
{
yyn += YYTERROR;
if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -1795,8 +1837,13 @@ yyexhaustedlab:
yyreturn:
if (yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
/* Do not reclaim the symbols of the rule which action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
@@ -1821,8 +1868,8 @@ yyreturn:
-/* Line 1684 of yacc.c */
-#line 230 "plural.y"
+/* Line 2067 of yacc.c */
+#line 229 "plural.y"
void
diff --git a/intl/plural.y b/intl/plural.y
index a1ffb9e1ca..2df3604dcf 100644
--- a/intl/plural.y
+++ b/intl/plural.y
@@ -15,9 +15,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* The bison generated parser uses alloca. AIX 3 forces us to put this
declaration at the beginning of the file. The declaration in bison's
diff --git a/io/Makefile b/io/Makefile
index 1a849eca2b..6e3a737851 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -71,8 +71,6 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \
tst-mknodat tst-mkfifoat tst-ttyname_r bug-ftw5 \
tst-posix_fallocate
-distribute := ftwtest-sh
-
include ../Rules
CFLAGS-fcntl.c = -fexceptions -fasynchronous-unwind-tables
diff --git a/io/fcntl.h b/io/fcntl.h
index a11f823b89..1192cf584c 100644
--- a/io/fcntl.h
+++ b/io/fcntl.h
@@ -109,9 +109,11 @@ __BEGIN_DECLS
# define AT_REMOVEDIR 0x200 /* Remove directory instead of
unlinking file. */
# define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic links. */
-# define AT_NO_AUTOMOUNT 0x800 /* Suppress terminal automount
+# ifdef __USE_GNU
+# define AT_NO_AUTOMOUNT 0x800 /* Suppress terminal automount
traversal. */
-# define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname. */
+# define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname. */
+# endif
# define AT_EACCESS 0x200 /* Test access permitted for
effective IDs, not real IDs. */
#endif
diff --git a/io/sys/stat.h b/io/sys/stat.h
index 77d7ccd728..1b1fd7169f 100644
--- a/io/sys/stat.h
+++ b/io/sys/stat.h
@@ -294,7 +294,7 @@ extern int lchmod (const char *__file, __mode_t __mode)
#endif
/* Set file access permissions of the file FD is open on to MODE. */
-#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+#if defined __USE_BSD || defined __USE_POSIX
extern int fchmod (int __fd, __mode_t __mode) __THROW;
#endif
diff --git a/libidn/ChangeLog b/libidn/ChangeLog
index a718a9f2a3..58a95b1b93 100644
--- a/libidn/ChangeLog
+++ b/libidn/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-07 Ulrich Drepper <drepper@gmail.com>
+
+ * Makefile (distribute): Remove variable.
+
2011-12-03 Ulrich Drepper <drepper@gmail.com>
* idna.c (idna_to_unicode_4z4z): Remove variable rc.
diff --git a/libidn/Makefile b/libidn/Makefile
index ecabc1b1af..8342c461ff 100644
--- a/libidn/Makefile
+++ b/libidn/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2012 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
@@ -19,8 +19,6 @@
subdir := libidn
-distribute := punycode.h stringprep.h idna.h iconvme.h
-
routines = idn-stub
extra-libs = libcidn
diff --git a/libio/Makefile b/libio/Makefile
index 206cbacebc..02efe1b3a3 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995-2004,2006-2009,2011 Free Software Foundation, Inc.
+# Copyright (C) 1995-2004,2006-2009,2011,2012 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
@@ -167,9 +167,6 @@ shared-only-routines = oldiofopen oldiofdopen oldiofclose oldfileops \
oldiofgetpos oldiofgetpos64 oldiofsetpos \
oldiofsetpos64
-distribute := iolibio.h libioP.h strfile.h Banner test-freopen.sh \
- fd_to_filename.h
-
include ../Rules
ifeq (no,$(cross-compiling))
diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h
index 34b139bf92..5700dd9d7d 100644
--- a/libio/bits/stdio-ldbl.h
+++ b/libio/bits/stdio-ldbl.h
@@ -1,5 +1,5 @@
/* -mlong-double-64 compatibility mode for stdio functions.
- Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2006-2012 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
@@ -62,9 +62,12 @@ __LDBL_REDIR_DECL (vscanf)
__END_NAMESPACE_C99
#endif
-#ifdef __USE_GNU
+#ifdef __USE_XOPEN2K8
__LDBL_REDIR_DECL (vdprintf)
__LDBL_REDIR_DECL (dprintf)
+#endif
+
+#ifdef __USE_GNU
__LDBL_REDIR_DECL (vasprintf)
__LDBL_REDIR_DECL (__asprintf)
__LDBL_REDIR_DECL (asprintf)
diff --git a/libio/stdio.h b/libio/stdio.h
index 4c732c4e11..9ca3ad3a28 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -408,12 +408,7 @@ extern int asprintf (char **__restrict __ptr,
#endif
#ifdef __USE_XOPEN2K8
-/* Write formatted output to a file descriptor.
-
- These functions are not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation they are cancellation points and
- therefore not marked with __THROW. */
+/* Write formatted output to a file descriptor. */
extern int vdprintf (int __fd, const char *__restrict __fmt,
_G_va_list __arg)
__attribute__ ((__format__ (__printf__, 2, 0)));
@@ -628,7 +623,7 @@ extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
__wur;
#if !defined __USE_ISOC11 \
- || (defined __cplusplus && __cplusplus <= 201103L && !defined __USE_GNU)
+ || (defined __cplusplus && __cplusplus <= 201103L)
/* Get a newline-terminated string from stdin, removing the newline.
DO NOT USE THIS FUNCTION!! There is no limit on how much it will read.
diff --git a/locale/Makefile b/locale/Makefile
index 5cc1e7295d..42c6772ceb 100644
--- a/locale/Makefile
+++ b/locale/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991,1992,1995-2003,2005,2009,2011
+# Copyright (C) 1991,1992,1995-2003,2005,2009,2011,2012
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -22,19 +22,6 @@
subdir := locale
headers = locale.h bits/locale.h langinfo.h xlocale.h
-distribute = localeinfo.h categories.def iso-639.def iso-3166.def \
- iso-4217.def weight.h weightwc.h strlen-hash.h elem-hash.h \
- indigits.h indigitswc.h outdigits.h outdigitswc.h \
- coll-lookup.h C-translit.h.in C-translit.h gen-translit.pl \
- locarchive.h hashval.h \
- $(addprefix programs/, \
- locale.c localedef.c \
- $(localedef-modules:=.c) $(locale-modules:=.c) \
- $(lib-modules:=.c) config.h simple-hash.h \
- charmap-kw.gperf charmap-kw.h locfile-token.h \
- locfile-kw.gperf locfile-kw.h linereader.h \
- locfile.h charmap.h repertoire.h localedef.h \
- 3level.h charmap-dir.h locarchive.c)
routines = setlocale findlocale loadlocale loadarchive \
localeconv nl_langinfo nl_langinfo_l mb_cur_max \
newlocale duplocale freelocale uselocale
diff --git a/locale/programs/charmap-kw.gperf b/locale/programs/charmap-kw.gperf
index 03fea94844..4d5aecbf95 100644
--- a/locale/programs/charmap-kw.gperf
+++ b/locale/programs/charmap-kw.gperf
@@ -14,8 +14,8 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ along with this program; if not, see
+ <http://www.gnu.org/licenses/>. */
#include <string.h>
diff --git a/locale/programs/charmap-kw.h b/locale/programs/charmap-kw.h
index 8ad6421639..8a8e70003f 100644
--- a/locale/programs/charmap-kw.h
+++ b/locale/programs/charmap-kw.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.4 */
/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N charmap_hash charmap-kw.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -45,13 +45,13 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ along with this program; if not, see
+ <http://www.gnu.org/licenses/>. */
#include <string.h>
#include "locfile-token.h"
-#line 23 "charmap-kw.gperf"
+#line 24 "charmap-kw.gperf"
struct keyword_t ;
#define TOTAL_KEYWORDS 17
@@ -127,6 +127,9 @@ hash (register const char *str, register unsigned int len)
#ifdef __GNUC__
__inline
+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct keyword_t *
charmap_hash (register const char *str, register unsigned int len)
@@ -134,45 +137,45 @@ charmap_hash (register const char *str, register unsigned int len)
static const struct keyword_t wordlist[] =
{
{""}, {""}, {""},
-#line 38 "charmap-kw.gperf"
+#line 39 "charmap-kw.gperf"
{"END", tok_end, 0},
{""},
-#line 39 "charmap-kw.gperf"
+#line 40 "charmap-kw.gperf"
{"WIDTH", tok_width, 0},
-#line 34 "charmap-kw.gperf"
+#line 35 "charmap-kw.gperf"
{"escseq", tok_escseq, 1},
-#line 36 "charmap-kw.gperf"
+#line 37 "charmap-kw.gperf"
{"include", tok_include, 1},
{""}, {""},
-#line 27 "charmap-kw.gperf"
- {"mb_cur_min", tok_mb_cur_min, 1},
#line 28 "charmap-kw.gperf"
- {"escape_char", tok_escape_char, 1},
+ {"mb_cur_min", tok_mb_cur_min, 1},
#line 29 "charmap-kw.gperf"
+ {"escape_char", tok_escape_char, 1},
+#line 30 "charmap-kw.gperf"
{"comment_char", tok_comment_char, 1},
-#line 25 "charmap-kw.gperf"
+#line 26 "charmap-kw.gperf"
{"code_set_name", tok_code_set_name, 1},
-#line 40 "charmap-kw.gperf"
+#line 41 "charmap-kw.gperf"
{"WIDTH_VARIABLE", tok_width_variable, 0},
-#line 26 "charmap-kw.gperf"
+#line 27 "charmap-kw.gperf"
{"mb_cur_max", tok_mb_cur_max, 1},
-#line 35 "charmap-kw.gperf"
+#line 36 "charmap-kw.gperf"
{"addset", tok_addset, 1},
-#line 37 "charmap-kw.gperf"
+#line 38 "charmap-kw.gperf"
{"CHARMAP", tok_charmap, 0},
-#line 41 "charmap-kw.gperf"
+#line 42 "charmap-kw.gperf"
{"WIDTH_DEFAULT", tok_width_default, 0},
{""},
-#line 33 "charmap-kw.gperf"
+#line 34 "charmap-kw.gperf"
{"g3esc", tok_g3esc, 1},
{""}, {""}, {""}, {""},
-#line 32 "charmap-kw.gperf"
+#line 33 "charmap-kw.gperf"
{"g2esc", tok_g2esc, 1},
{""}, {""}, {""}, {""},
-#line 31 "charmap-kw.gperf"
+#line 32 "charmap-kw.gperf"
{"g1esc", tok_g1esc, 1},
{""}, {""}, {""}, {""},
-#line 30 "charmap-kw.gperf"
+#line 31 "charmap-kw.gperf"
{"g0esc", tok_g0esc, 1}
};
diff --git a/locale/programs/locfile-kw.gperf b/locale/programs/locfile-kw.gperf
index f0612e4882..ee9992dab7 100644
--- a/locale/programs/locfile-kw.gperf
+++ b/locale/programs/locfile-kw.gperf
@@ -14,8 +14,8 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ along with this program; if not, see
+ <http://www.gnu.org/licenses/>. */
#include <string.h>
diff --git a/locale/programs/locfile-kw.h b/locale/programs/locfile-kw.h
index c0f9ce7810..f96167343f 100644
--- a/locale/programs/locfile-kw.h
+++ b/locale/programs/locfile-kw.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.2 */
+/* ANSI-C code produced by gperf version 3.0.4 */
/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N locfile_hash locfile-kw.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -45,8 +45,8 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ along with this program; if not, see
+ <http://www.gnu.org/licenses/>. */
#include <string.h>
@@ -127,6 +127,9 @@ hash (register const char *str, register unsigned int len)
#ifdef __GNUC__
__inline
+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct keyword_t *
locfile_hash (register const char *str, register unsigned int len)
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index ff5851fcdc..8567c6cd8f 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,12 @@
+2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ [BZ #13673]
+ Replace FSF snail mail address with URLs, as per GNU coding standards.
+
+2012-03-07 Ulrich Drepper <drepper@gmail.com>
+
+ * Makefile (distribute): Remove variable.
+
2012-02-10 Joseph Myers <joseph@codesourcery.com>
Revert changes to locales from previous commit.
diff --git a/localedata/Makefile b/localedata/Makefile
index 6b48c874f1..13189607c6 100644
--- a/localedata/Makefile
+++ b/localedata/Makefile
@@ -1,4 +1,5 @@
-# Copyright (C) 1996-2003,2005,2007,2008,2009,2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-2003,2005,2007-2009,2011,2012
+# 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
@@ -56,19 +57,6 @@ generated := $(test-input) $(test-output) sort-test.out tst-locale.out \
generated-dirs := $(ld-test-names) tt_TT de_DE.437 \
$(addprefix tstfmon_,$(fmon-tests)) \
-distribute := CHECKSUMS README SUPPORTED ChangeLog \
- $(charmaps) $(locales) \
- tst-rpmatch.sh tst-locale.sh tst-fmon.sh sort-test.sh \
- tst-fmon.data $(test-input-data) $(ld-test-srcs) \
- th_TH.in cs_CZ.in tst-mbswcs.sh tst-trans.sh tst-ctype.sh \
- tst-ctype-de_DE.ISO-8859-1.in \
- tst-numeric.sh tst-numeric.data \
- $(wildcard tests-mbwc/*.[ch]) \
- $(addprefix tst-fmon-locales/tstfmon_,$(fmon-tests)) \
- gen-locale.sh show-ucs-data.c tst-langinfo.sh \
- tst-wctype.sh tst-wctype.input gen-unicode-ctype.c \
- dump-ctype.c
-
# Get $(inst_i18ndir) defined.
include ../Makeconfig
diff --git a/localedata/locales/br_FR@euro b/localedata/locales/br_FR@euro
index 62b1da934f..a28fcf61d2 100644
--- a/localedata/locales/br_FR@euro
+++ b/localedata/locales/br_FR@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Breton locale for France with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
email "bug-glibc-locales@gnu.org"
tel ""
fax ""
diff --git a/localedata/locales/ca_ES@euro b/localedata/locales/ca_ES@euro
index 50609df06e..b3e6ecb676 100644
--- a/localedata/locales/ca_ES@euro
+++ b/localedata/locales/ca_ES@euro
@@ -16,7 +16,7 @@ escape_char /
LC_IDENTIFICATION
title "Catalan locale for Catalonia with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/cs_CZ b/localedata/locales/cs_CZ
index 2f25e9a8f6..12fe5008e6 100644
--- a/localedata/locales/cs_CZ
+++ b/localedata/locales/cs_CZ
@@ -107,7 +107,7 @@ comment_char %
LC_IDENTIFICATION
title "Czech locale for the Czech Republic"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/de_BE@euro b/localedata/locales/de_BE@euro
index e5f02dcfc0..d9c4188e7a 100644
--- a/localedata/locales/de_BE@euro
+++ b/localedata/locales/de_BE@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "German locale for Belgium with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/de_DE b/localedata/locales/de_DE
index eac517a578..32cbd76dda 100644
--- a/localedata/locales/de_DE
+++ b/localedata/locales/de_DE
@@ -6,7 +6,7 @@ comment_char %
LC_IDENTIFICATION
title "German locale for Germany"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/de_DE@euro b/localedata/locales/de_DE@euro
index d639e3fa4d..7e9c97a733 100644
--- a/localedata/locales/de_DE@euro
+++ b/localedata/locales/de_DE@euro
@@ -6,7 +6,7 @@ comment_char %
LC_IDENTIFICATION
title "German locale for Germany with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/de_LU@euro b/localedata/locales/de_LU@euro
index 3c41ffb761..caff758712 100644
--- a/localedata/locales/de_LU@euro
+++ b/localedata/locales/de_LU@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "German locale for Luxemburg with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/el_GR@euro b/localedata/locales/el_GR@euro
index bd1f6be068..2a37cf640d 100644
--- a/localedata/locales/el_GR@euro
+++ b/localedata/locales/el_GR@euro
@@ -4,7 +4,7 @@ comment_char %
LC_IDENTIFICATION
title "Greek locale for Greece with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/en_AG b/localedata/locales/en_AG
index f39c410acb..b724eace81 100644
--- a/localedata/locales/en_AG
+++ b/localedata/locales/en_AG
@@ -6,7 +6,7 @@ comment_char %
LC_IDENTIFICATION
title "English language locale for Antigua and Barbuda"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/en_IE@euro b/localedata/locales/en_IE@euro
index dc429d7710..7f5d518b1c 100644
--- a/localedata/locales/en_IE@euro
+++ b/localedata/locales/en_IE@euro
@@ -14,7 +14,7 @@ comment_char %
LC_IDENTIFICATION
title "English locale for Ireland with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/en_US b/localedata/locales/en_US
index a41f5bc310..3560c5700b 100644
--- a/localedata/locales/en_US
+++ b/localedata/locales/en_US
@@ -6,7 +6,7 @@ comment_char %
LC_IDENTIFICATION
title "English locale for the USA"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/es_CR b/localedata/locales/es_CR
index f998c86246..d7be7f8fa1 100644
--- a/localedata/locales/es_CR
+++ b/localedata/locales/es_CR
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Spanish locale for Costa Rica"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/es_ES@euro b/localedata/locales/es_ES@euro
index 1d81e83652..721738e5b7 100644
--- a/localedata/locales/es_ES@euro
+++ b/localedata/locales/es_ES@euro
@@ -15,7 +15,7 @@ escape_char /
LC_IDENTIFICATION
title "Spanish locale for Spain with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/es_NI b/localedata/locales/es_NI
index 207f2dabf8..7371532079 100644
--- a/localedata/locales/es_NI
+++ b/localedata/locales/es_NI
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Spanish locale for Nicaragua"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/es_PR b/localedata/locales/es_PR
index 53496d48c0..b15ca45222 100644
--- a/localedata/locales/es_PR
+++ b/localedata/locales/es_PR
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Spanish locale for Puerto Rico"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/eu_ES@euro b/localedata/locales/eu_ES@euro
index f88fce4c7f..356bf622d7 100644
--- a/localedata/locales/eu_ES@euro
+++ b/localedata/locales/eu_ES@euro
@@ -15,7 +15,7 @@ escape_char /
LC_IDENTIFICATION
title "Basque language locale for Spain with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/fi_FI@euro b/localedata/locales/fi_FI@euro
index 836322b21f..39c51d64d1 100644
--- a/localedata/locales/fi_FI@euro
+++ b/localedata/locales/fi_FI@euro
@@ -15,7 +15,7 @@ comment_char %
LC_IDENTIFICATION
title "Finnish locale for Finland with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/fr_BE@euro b/localedata/locales/fr_BE@euro
index 51968f8304..08f9298a9a 100644
--- a/localedata/locales/fr_BE@euro
+++ b/localedata/locales/fr_BE@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "French locale for Belgium with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/fr_FR@euro b/localedata/locales/fr_FR@euro
index 63f805adc9..5f858fdddd 100644
--- a/localedata/locales/fr_FR@euro
+++ b/localedata/locales/fr_FR@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "French locale for France with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
email "bug-glibc-locales@gnu.org"
tel ""
fax ""
diff --git a/localedata/locales/fr_LU@euro b/localedata/locales/fr_LU@euro
index 3466e4081a..014ff1d5c4 100644
--- a/localedata/locales/fr_LU@euro
+++ b/localedata/locales/fr_LU@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "French locale for Luxemburg with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/fy_NL b/localedata/locales/fy_NL
index a787e78f7a..b0cde4b271 100644
--- a/localedata/locales/fy_NL
+++ b/localedata/locales/fy_NL
@@ -13,7 +13,7 @@ escape_char /
LC_IDENTIFICATION
title "Frisian locale for the Netherlands"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/ga_IE@euro b/localedata/locales/ga_IE@euro
index c7a929976e..c9474a594d 100644
--- a/localedata/locales/ga_IE@euro
+++ b/localedata/locales/ga_IE@euro
@@ -13,7 +13,7 @@ comment_char %
LC_IDENTIFICATION
title "Irish locale for Ireland with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/gl_ES@euro b/localedata/locales/gl_ES@euro
index b5214516c9..534a092bf4 100644
--- a/localedata/locales/gl_ES@euro
+++ b/localedata/locales/gl_ES@euro
@@ -15,7 +15,7 @@ escape_char /
LC_IDENTIFICATION
title "Galician locale for Spain with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/it_IT@euro b/localedata/locales/it_IT@euro
index e995eb385f..e34a8d55f6 100644
--- a/localedata/locales/it_IT@euro
+++ b/localedata/locales/it_IT@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Italian locale for Italy with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/nl_AW b/localedata/locales/nl_AW
index 9161977f0d..e9fe8f82e1 100644
--- a/localedata/locales/nl_AW
+++ b/localedata/locales/nl_AW
@@ -6,7 +6,7 @@ comment_char %
LC_IDENTIFICATION
title "Dutch language locale for Aruba"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/nl_BE@euro b/localedata/locales/nl_BE@euro
index 333305cf67..413e8def48 100644
--- a/localedata/locales/nl_BE@euro
+++ b/localedata/locales/nl_BE@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Dutch locale for Belgium with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/nl_NL@euro b/localedata/locales/nl_NL@euro
index 98ee41c573..b0cc689d10 100644
--- a/localedata/locales/nl_NL@euro
+++ b/localedata/locales/nl_NL@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Dutch locale for the Netherlands with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/pt_PT@euro b/localedata/locales/pt_PT@euro
index 658976a657..f0a5c27af5 100644
--- a/localedata/locales/pt_PT@euro
+++ b/localedata/locales/pt_PT@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Portuguese locale for Portugal with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/sv_FI@euro b/localedata/locales/sv_FI@euro
index 095ef677ed..f69e5b5ae3 100644
--- a/localedata/locales/sv_FI@euro
+++ b/localedata/locales/sv_FI@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Swedish locale for Finland with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/tr_CY b/localedata/locales/tr_CY
index bc63829a4a..daeffc1b9c 100644
--- a/localedata/locales/tr_CY
+++ b/localedata/locales/tr_CY
@@ -16,7 +16,7 @@ escape_char /
LC_IDENTIFICATION
title "Turkish language locale for Cyprus"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/localedata/locales/wa_BE@euro b/localedata/locales/wa_BE@euro
index a88b906997..78c6b6a01c 100644
--- a/localedata/locales/wa_BE@euro
+++ b/localedata/locales/wa_BE@euro
@@ -14,7 +14,7 @@ escape_char /
LC_IDENTIFICATION
title "Walloon locale for Belgium with Euro"
source "Free Software Foundation, Inc."
-address "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
+address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
diff --git a/login/Makefile b/login/Makefile
index 305d334d8a..9b6d2bb78c 100644
--- a/login/Makefile
+++ b/login/Makefile
@@ -1,4 +1,5 @@
-# Copyright (C) 1996-1998,2000-2003,2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-1998,2000-2003,2007,2009,2012
+# 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
@@ -32,8 +33,6 @@ others = utmpdump pt_chown
others-pie = pt_chown
install-others-programs = $(inst_libexecdir)/pt_chown
-distribute := utmp-private.h utmp-equal.h pty-private.h
-
subdir-dirs = programs
vpath %.c programs
@@ -49,11 +48,6 @@ include ../Rules
CFLAGS-getpt.c = -fexceptions
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a $(common-objpfx)libc.a
-endif
-
ifeq (yesyes,$(have-fpie)$(build-shared))
pt_chown-cflags += $(pie-ccflag)
endif
diff --git a/mach/Makefile b/mach/Makefile
index ec33fa72d4..00de7a505e 100644
--- a/mach/Makefile
+++ b/mach/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991,92,93,94,95,96,97,98,2001,02
+# Copyright (C) 1991,92,93,94,95,96,97,98,2001,02,12
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -27,7 +27,6 @@ include ../Makeconfig
headers = mach_init.h mach.h mach_error.h mach-shortcuts.h mach/mach_traps.h \
$(interface-headers) mach/mach.h mach/mig_support.h mach/error.h \
$(lock-headers) machine-sp.h
-distribute = thread_state.h
lock = spin-solid spin-lock mutex-init mutex-solid
lock-headers = lock-intern.h machine-lock.h spin-lock.h
routines = $(mach-syscalls) $(mach-shortcuts) \
@@ -52,17 +51,11 @@ mach/memory_object_user.defs = mach/memory_object.defs
user-interfaces := $(addprefix mach/,$(mach-interface-list) \
mach_port mach_host exc \
- )\
+ )\
$(addprefix device/,device device_request)
server-interfaces := mach/exc
-# It is important that we do not use the wildcard function to expand
-# `err_*.sub'. Leaving the wildcard allows Make-dist to find all matching
-# files in all sysdep directories.
-distribute += Machrules syscalls.awk shortcut.awk \
- errorlib.h err_*.sub errsystems.awk
-
# Clear any environment value.
generated =
diff --git a/malloc/Makefile b/malloc/Makefile
index 17421062f3..5d6d716a78 100644
--- a/malloc/Makefile
+++ b/malloc/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009, 2011
+# Copyright (C) 1991-2003, 2005, 2006, 2007, 2009, 2011, 2012
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -29,14 +29,7 @@ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
tst-mallocstate tst-mcheck tst-mallocfork tst-trim1
test-srcs = tst-mtrace
-distribute = thread-m.h mtrace.pl mcheck-init.c stackinfo.h memusage.h \
- memusage.sh memusagestat.c tst-mtrace.sh arena.c hooks.c
-
-# Things which get pasted together into gmalloc.c.
-gmalloc-routines := malloc morecore
-# Things to include in the standalone distribution.
-dist-routines = $(gmalloc-routines) mcheck mtrace
-routines = $(dist-routines) obstack
+routines = malloc morecore mcheck mtrace obstack
install-lib := libmcheck.a
non-lib.a := libmcheck.a
diff --git a/malloc/malloc.c b/malloc/malloc.c
index d7d79e03fa..79cdc52330 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -218,7 +218,7 @@
#include <malloc-machine.h>
#include <atomic.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <bits/wordsize.h>
#include <sys/sysinfo.h>
diff --git a/malloc/mallocbug.c b/malloc/mallocbug.c
index 84a6387954..fc607aed34 100644
--- a/malloc/mallocbug.c
+++ b/malloc/mallocbug.c
@@ -5,12 +5,15 @@
#define size_t unsigned int
+/* Defined as global variables to avoid warnings about unused variables. */
+char *dummy0;
+char *dummy1;
+char *fill_info_table1;
+
+
int
main (int argc, char *argv[])
{
- char *dummy0;
- char *dummy1;
- char *fill_info_table1;
char *over_top;
size_t over_top_size = 0x3000;
char *over_top_dup;
@@ -19,11 +22,11 @@ main (int argc, char *argv[])
size_t i;
/* Here's what memory is supposed to look like (hex):
- size contents
- 3000 original_info_table, later fill_info_table1
+ size contents
+ 3000 original_info_table, later fill_info_table1
3fa000 dummy0
3fa000 dummy1
- 6000 info_table_2
+ 6000 info_table_2
3000 over_top
*/
diff --git a/malloc/mtrace.c b/malloc/mtrace.c
index 67e3e44336..e299a16239 100644
--- a/malloc/mtrace.c
+++ b/malloc/mtrace.c
@@ -31,7 +31,7 @@
#include <string.h>
#include <stdlib.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <libc-internal.h>
diff --git a/manual/Makefile b/manual/Makefile
index df96abcafb..daddd29059 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -76,12 +76,15 @@ chapters.% top-menu.%: libc-texinfo.sh $(texis) Makefile
'$(add-chapters)' \
'$(appendices) $(licenses)'
-libc.dvi libc.pdf libc.info: chapters.texi top-menu.texi dir-add.texi \
- libm-err.texi
+# Generated files directly included from libc.texinfo.
+libc-texi-generated = chapters.texi top-menu.texi dir-add.texi \
+ libm-err.texi version.texi
+
+libc.dvi libc.pdf libc.info: $(libc-texi-generated)
libc.dvi libc.pdf: texinfo.tex
html: libc/index.html
-libc/index.html: chapters.texi top-menu.texi dir-add.texi libm-err.texi
+libc/index.html: $(libc-texi-generated)
$(MAKEINFO) --html libc.texinfo
# Generate the summary from the Texinfo source files for each chapter.
@@ -110,9 +113,17 @@ stamp-libm-err: libm-err-tab.pl $(wildcard $(foreach dir,$(sysdirs),\
$(move-if-change) libm-err-tmp libm-err.texi
touch $@
+# Generate a file with the version number.
+version.texi: stamp-version ;
+stamp-version: $(common-objpfx)config.make
+ echo "@set VERSION $(version)" > version-tmp
+ $(move-if-change) version-tmp version.texi
+ touch $@
+
# Generate Texinfo files from the C source for the example programs.
%.c.texi: examples/%.c
- sed -e 's,[{}],@&,g' \
+ sed -e '1,/^\*\/$$/d' \
+ -e 's,[{}],@&,g' \
-e 's,/\*\(@.*\)\*/,\1,g' \
-e 's,/\* *,/* @r{,g' -e 's, *\*/,} */,' \
-e 's/\(@[a-z][a-z]*\)@{\([^}]*\)@}/\1{\2}/g'\
@@ -134,17 +145,8 @@ minimal-dist = summary.awk texis.awk tsort.awk libc-texinfo.sh libc.texinfo \
$(filter-out summary.texi, $(nonexamples)) \
$(patsubst %.c.texi,examples/%.c, $(examples))
-doc-only-dist = Makefile COPYING.LIB
-distribute = $(minimal-dist) $(examples) stdio-fp.c \
- libc.info* libc.?? libc.??s texinfo.tex \
- xtract-typefun.awk dir-add.texi dir libm-err-tab.pl
-export distribute := $(distribute)
-
tar-it = tar chovf $@ $^
-manual.tar: $(doc-only-dist) $(minimal-dist) ; $(tar-it)
-mandist.tar: $(doc-only-dist) $(distribute) ; $(tar-it)
-
edition := $(shell sed -n 's/^@set EDITION \([0-9][0-9.]*\)[^0-9.]*.*$$/\1/p' \
libc.texinfo)
@@ -173,10 +175,10 @@ clean: mostlyclean
distclean: clean
indices = cp fn pg tp vr ky
realclean: distclean
- -rm -f texis summary.texi stamp-summary *.c.texi dir-add.texi
+ -rm -f texis summary.texi stamp-summary *.c.texi
-rm -f $(foreach index,$(indices),libc.$(index) libc.$(index)s)
- -rm -f libc.log libc.aux libc.toc dir-add.texinfo
- -rm -f top-menu.texi chapters.texi
+ -rm -f libc.log libc.aux libc.toc
+ -rm -f $(libc-texi-generated)
.PHONY: install subdir_install installdirs install-data
install-data subdir_install: install
diff --git a/manual/arith.texi b/manual/arith.texi
index e59da41c4b..572808c893 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -40,9 +40,9 @@ this is that a program often needs to be written for a particular range
of integers, and sometimes must be written for a particular size of
storage, regardless of what machine the program runs on.
-To address this problem, the GNU C library contains C type definitions
+To address this problem, @theglibc{} contains C type definitions
you can use to declare integers that meet your exact needs. Because the
-GNU C library header files are customized to a specific machine, your
+@glibcadj{} header files are customized to a specific machine, your
program source code doesn't have to be.
These @code{typedef}s are in @file{stdint.h}.
@@ -105,7 +105,7 @@ of the integer.
@item uintmax_t
@end itemize
-The GNU C library also provides macros that tell you the maximum and
+@Theglibc{} also provides macros that tell you the maximum and
minimum possible values for each integer data type. The macro names
follow these examples: @code{INT32_MAX}, @code{UINT8_MAX},
@code{INT_FAST32_MIN}, @code{INT_LEAST64_MIN}, @code{UINTMAX_MAX},
@@ -388,7 +388,7 @@ to
@end deftypefn
Another set of floating-point classification functions was provided by
-BSD. The GNU C library also supports these functions; however, we
+BSD. @Theglibc{} also supports these functions; however, we
recommend that you use the ISO C99 macros in new code. Those are standard
and will be available more widely. Also, since they are macros, you do
not have to worry about the type of their argument.
@@ -1019,7 +1019,7 @@ Implementation defined macros with names starting with @code{FE_} and
having type @code{fenv_t *}.
@vindex FE_NOMASK_ENV
-If possible, the GNU C Library defines a macro @code{FE_NOMASK_ENV}
+If possible, @theglibc{} defines a macro @code{FE_NOMASK_ENV}
which represents an environment where every exception raised causes a
trap to occur. You can test for this macro using @code{#ifdef}. It is
only defined if @code{_GNU_SOURCE} is defined.
@@ -1813,7 +1813,7 @@ On processors which do not implement multiply-add in hardware,
@file{math.h} defines the symbols @code{FP_FAST_FMA},
@code{FP_FAST_FMAF}, and @code{FP_FAST_FMAL} when the corresponding
version of @code{fma} is no slower than the expression @samp{x*y + z}.
-In the GNU C library, this always means the operation is implemented in
+In @theglibc{}, this always means the operation is implemented in
hardware.
@end deftypefun
@@ -2445,7 +2445,7 @@ is provided mostly for compatibility with existing code; using
@code{strtod} is more robust.
@end deftypefun
-The GNU C library also provides @samp{_l} versions of these functions,
+@Theglibc{} also provides @samp{_l} versions of these functions,
which take an additional argument, the locale to use in conversion.
@xref{Parsing of Integers}.
@@ -2453,10 +2453,10 @@ which take an additional argument, the locale to use in conversion.
@section Old-fashioned System V number-to-string functions
The old @w{System V} C library provided three functions to convert
-numbers to strings, with unusual and hard-to-use semantics. The GNU C
-library also provides these functions and some natural extensions.
+numbers to strings, with unusual and hard-to-use semantics. @Theglibc{}
+also provides these functions and some natural extensions.
-These functions are only available in glibc and on systems descended
+These functions are only available in @theglibc{} and on systems descended
from AT&T Unix. Therefore, unless these functions do precisely what you
need, it is better to use @code{sprintf}, which is standard.
@@ -2516,7 +2516,7 @@ If @var{ndigit} decimal digits would exceed the precision of a
@code{double} it is reduced to a system-specific value.
@end deftypefun
-As extensions, the GNU C library provides versions of these three
+As extensions, @theglibc{} provides versions of these three
functions that take @code{long double} arguments.
@comment stdlib.h
@@ -2547,7 +2547,7 @@ restricted by the precision of a @code{long double}.
@cindex gcvt_r
The @code{ecvt} and @code{fcvt} functions, and their @code{long double}
equivalents, all return a string located in a static buffer which is
-overwritten by the next call to the function. The GNU C library
+overwritten by the next call to the function. @Theglibc{}
provides another set of extended functions which write the converted
string into a user-supplied buffer. These have the conventional
@code{_r} suffix.
diff --git a/manual/charset.texi b/manual/charset.texi
index d7d82ad006..97fb2bed2d 100644
--- a/manual/charset.texi
+++ b/manual/charset.texi
@@ -112,7 +112,7 @@ this type is capable of storing all elements of the basic character set.
Therefore it would be legitimate to define @code{wchar_t} as @code{char},
which might make sense for embedded systems.
-But for GNU systems @code{wchar_t} is always 32 bits wide and, therefore,
+But in @theglibc{} @code{wchar_t} is always 32 bits wide and, therefore,
capable of representing all UCS-4 values and, therefore, covering all of
@w{ISO 10646}. Some Unix systems define @code{wchar_t} as a 16-bit type
and thereby follow Unicode very strictly. This definition is perfectly
@@ -361,7 +361,7 @@ the @code{LC_CTYPE} category of the current locale is used; see
The functions handling more than one character at a time require NUL
terminated strings as the argument (i.e., converting blocks of text
does not work unless one can add a NUL byte at an appropriate place).
-The GNU C library contains some extensions to the standard that allow
+@Theglibc{} contains some extensions to the standard that allow
specifying a size, but basically they also expect terminated strings.
@end itemize
@@ -393,7 +393,7 @@ We already said above that the currently selected locale for the
by the functions we are about to describe. Each locale uses its own
character set (given as an argument to @code{localedef}) and this is the
one assumed as the external multibyte encoding. The wide character
-set is always UCS-4, at least on GNU systems.
+set is always UCS-4 in @theglibc{}.
A characteristic of each multibyte character set is the maximum number
of bytes that can be necessary to represent one character. This
@@ -418,7 +418,7 @@ a compile-time constant and is defined in @file{limits.h}.
maximum number of bytes in a multibyte character in the current locale.
The value is never greater than @code{MB_LEN_MAX}. Unlike
@code{MB_LEN_MAX} this macro need not be a compile-time constant, and in
-the GNU C library it is not.
+@theglibc{} it is not.
@pindex stdlib.h
@code{MB_CUR_MAX} is defined in @file{stdlib.h}.
@@ -537,8 +537,8 @@ Code using @code{mbsinit} often looks similar to this:
The code to emit the escape sequence to get back to the initial state is
interesting. The @code{wcsrtombs} function can be used to determine the
-necessary output code (@pxref{Converting Strings}). Please note that on
-GNU systems it is not necessary to perform this extra action for the
+necessary output code (@pxref{Converting Strings}). Please note that with
+@theglibc{} it is not necessary to perform this extra action for the
conversion from multibyte text to wide character text since the wide
character encoding is not stateful. But there is nothing mentioned in
any standard that prohibits making @code{wchar_t} using a stateful
@@ -793,7 +793,7 @@ character sequence but the one representing the NUL wide character.
Therefore, the @code{mbrlen} function will never read invalid memory.
Now that this function is available (just to make this clear, this
-function is @emph{not} part of the GNU C library) we can compute the
+function is @emph{not} part of @theglibc{}) we can compute the
number of wide character required to store the converted multibyte
character string @var{s} using
@@ -949,7 +949,7 @@ The functions described in the previous section only convert a single
character at a time. Most operations to be performed in real-world
programs include strings and therefore the @w{ISO C} standard also
defines conversions on entire strings. However, the defined set of
-functions is quite limited; therefore, the GNU C library contains a few
+functions is quite limited; therefore, @theglibc{} contains a few
extensions that can help in some important situations.
@comment wchar.h
@@ -1030,7 +1030,7 @@ therefore, should never be used in generally used code.
The generic conversion interface (@pxref{Generic Charset Conversion})
does not have this limitation (it simply works on buffers, not
-strings), and the GNU C library contains a set of functions that take
+strings), and @theglibc{} contains a set of functions that take
additional parameters specifying the maximal number of bytes that are
consumed from the input string. This way the problem of
@code{mbsrtowcs}'s example above could be solved by determining the line
@@ -1528,8 +1528,8 @@ The conversion functions mentioned so far in this chapter all had in
common that they operate on character sets that are not directly
specified by the functions. The multibyte encoding used is specified by
the currently selected locale for the @code{LC_CTYPE} category. The
-wide character set is fixed by the implementation (in the case of GNU C
-library it is always UCS-4 encoded @w{ISO 10646}.
+wide character set is fixed by the implementation (in the case of @theglibc{}
+it is always UCS-4 encoded @w{ISO 10646}.
This has of course several problems when it comes to general character
conversion:
@@ -1648,7 +1648,7 @@ An @code{iconv} descriptor is like a file descriptor as for every use a
new descriptor must be created. The descriptor does not stand for all
of the conversions from @var{fromset} to @var{toset}.
-The GNU C library implementation of @code{iconv_open} has one
+The @glibcadj{} implementation of @code{iconv_open} has one
significant extension to other implementations. To ease the extension
of the set of available conversions, the implementation allows storing
the necessary files with data and code in an arbitrary number of
@@ -1740,7 +1740,7 @@ from the initial state. It is important that the programmer never makes
any assumption as to whether the conversion has to deal with states.
Even if the input and output character sets are not stateful, the
implementation might still have to keep states. This is due to the
-implementation chosen for the GNU C library as it is described below.
+implementation chosen for @theglibc{} as it is described below.
Therefore an @code{iconv} call to reset the state should always be
performed if some protocol requires this for the output text.
@@ -1761,7 +1761,7 @@ Since the character sets selected in the @code{iconv_open} call can be
almost arbitrary, there can be situations where the input buffer contains
valid characters, which have no identical representation in the output
character set. The behavior in this situation is undefined. The
-@emph{current} behavior of the GNU C library in this situation is to
+@emph{current} behavior of @theglibc{} in this situation is to
return with an error immediately. This certainly is not the most
desirable solution; therefore, future versions will provide better ones,
but they are not yet finished.
@@ -1980,7 +1980,7 @@ the door open for extensions and improvements, but this design is also
limiting on some platforms since not many platforms support dynamic
loading in statically linked programs. On platforms without this
capability it is therefore not possible to use this interface in
-statically linked programs. The GNU C library has, on ELF platforms, no
+statically linked programs. @Theglibc{} has, on ELF platforms, no
problems with dynamic loading in these situations; therefore, this
point is moot. The danger is that one gets acquainted with this
situation and forgets about the restrictions on other systems.
@@ -2054,38 +2054,38 @@ such conversion, one could make sure this also is true for indirect
routes.
@node glibc iconv Implementation
-@subsection The @code{iconv} Implementation in the GNU C library
+@subsection The @code{iconv} Implementation in @theglibc{}
After reading about the problems of @code{iconv} implementations in the
last section it is certainly good to note that the implementation in
-the GNU C library has none of the problems mentioned above. What
+@theglibc{} has none of the problems mentioned above. What
follows is a step-by-step analysis of the points raised above. The
evaluation is based on the current state of the development (as of
January 1999). The development of the @code{iconv} functions is not
complete, but basic functionality has solidified.
-The GNU C library's @code{iconv} implementation uses shared loadable
+@Theglibc{}'s @code{iconv} implementation uses shared loadable
modules to implement the conversions. A very small number of
conversions are built into the library itself but these are only rather
trivial conversions.
-All the benefits of loadable modules are available in the GNU C library
+All the benefits of loadable modules are available in the @glibcadj{}
implementation. This is especially appealing since the interface is
well documented (see below), and it, therefore, is easy to write new
conversion modules. The drawback of using loadable objects is not a
-problem in the GNU C library, at least on ELF systems. Since the
+problem in @theglibc{}, at least on ELF systems. Since the
library is able to load shared objects even in statically linked
binaries, static linking need not be forbidden in case one wants to use
@code{iconv}.
The second mentioned problem is the number of supported conversions.
-Currently, the GNU C library supports more than 150 character sets. The
+Currently, @theglibc{} supports more than 150 character sets. The
way the implementation is designed the number of supported conversions
is greater than 22350 (@math{150} times @math{149}). If any conversion
from or to a character set is missing, it can be added easily.
Particularly impressive as it may be, this high number is due to the
-fact that the GNU C library implementation of @code{iconv} does not have
+fact that the @glibcadj{} implementation of @code{iconv} does not have
the third problem mentioned above (i.e., whenever there is a conversion
from a character set @math{@cal{A}} to @math{@cal{B}} and from
@math{@cal{B}} to @math{@cal{C}} it is always possible to convert from
@@ -2115,7 +2115,7 @@ the input to @w{ISO 10646} first. The two character sets of interest
are much more similar to each other than to @w{ISO 10646}.
In such a situation one easily can write a new conversion and provide it
-as a better alternative. The GNU C library @code{iconv} implementation
+as a better alternative. The @glibcadj{} @code{iconv} implementation
would automatically use the module implementing the conversion if it is
specified to be more efficient.
@@ -2207,7 +2207,7 @@ file, however, specifies that the new conversion modules can perform this
conversion with only the cost of @math{1}.
A mysterious item about the @file{gconv-modules} file above (and also
-the file coming with the GNU C library) are the names of the character
+the file coming with @theglibc{}) are the names of the character
sets specified in the @code{module} lines. Why do almost all the names
end in @code{//}? And this is not all: the names can actually be
regular expressions. At this point in time this mystery should not be
@@ -2423,7 +2423,7 @@ loads the objects with the conversions.
It is often the case that one conversion is used more than once (i.e.,
there are several @code{iconv_open} calls for the same set of character
sets during one program run). The @code{mbsrtowcs} et.al.@: functions in
-the GNU C library also use the @code{iconv} functionality, which
+@theglibc{} also use the @code{iconv} functionality, which
increases the number of uses of the same functions even more.
Because of this multiple use of conversions, the modules do not get
@@ -2888,8 +2888,8 @@ gconv (struct __gconv_step *step, struct __gconv_step_data *data,
@end deftypevr
This information should be sufficient to write new modules. Anybody
-doing so should also take a look at the available source code in the GNU
-C library sources. It contains many examples of working and optimized
+doing so should also take a look at the available source code in the
+@glibcadj{} sources. It contains many examples of working and optimized
modules.
@c File charset.texi edited October 2001 by Dennis Grace, IBM Corporation
diff --git a/manual/conf.texi b/manual/conf.texi
index 30499d9c65..2cd41f6c73 100644
--- a/manual/conf.texi
+++ b/manual/conf.texi
@@ -147,7 +147,7 @@ should always be defined even if there is no specific imposed limit.
POSIX defines certain system-specific options that not all POSIX systems
support. Since these options are provided in the kernel, not in the
-library, simply using the GNU C library does not guarantee any of these
+library, simply using @theglibc{} does not guarantee any of these
features is supported; it depends on the system you are using.
@pindex unistd.h
@@ -190,7 +190,7 @@ to find out. @xref{Sysconf}.
@comment POSIX.2
@deftypevr Macro int _POSIX2_C_DEV
If this symbol is defined, it indicates that the system has the POSIX.2
-C compiler command, @code{c89}. The GNU C library always defines this
+C compiler command, @code{c89}. @Theglibc{} always defines this
as @code{1}, on the assumption that you would not have installed it if
you didn't have a C compiler.
@end deftypevr
@@ -199,7 +199,7 @@ you didn't have a C compiler.
@comment POSIX.2
@deftypevr Macro int _POSIX2_FORT_DEV
If this symbol is defined, it indicates that the system has the POSIX.2
-Fortran compiler command, @code{fort77}. The GNU C library never
+Fortran compiler command, @code{fort77}. @Theglibc{} never
defines this, because we don't know what the system has.
@end deftypevr
@@ -207,15 +207,15 @@ defines this, because we don't know what the system has.
@comment POSIX.2
@deftypevr Macro int _POSIX2_FORT_RUN
If this symbol is defined, it indicates that the system has the POSIX.2
-@code{asa} command to interpret Fortran carriage control. The GNU C
-library never defines this, because we don't know what the system has.
+@code{asa} command to interpret Fortran carriage control. @Theglibc{}
+never defines this, because we don't know what the system has.
@end deftypevr
@comment unistd.h
@comment POSIX.2
@deftypevr Macro int _POSIX2_LOCALEDEF
If this symbol is defined, it indicates that the system has the POSIX.2
-@code{localedef} command. The GNU C library never defines this, because
+@code{localedef} command. @Theglibc{} never defines this, because
we don't know what the system has.
@end deftypevr
@@ -223,7 +223,7 @@ we don't know what the system has.
@comment POSIX.2
@deftypevr Macro int _POSIX2_SW_DEV
If this symbol is defined, it indicates that the system has the POSIX.2
-commands @code{ar}, @code{make}, and @code{strip}. The GNU C library
+commands @code{ar}, @code{make}, and @code{strip}. @Theglibc{}
always defines this as @code{1}, on the assumption that you had to have
@code{ar} and @code{make} to install the library, and it's unlikely that
@code{strip} would be absent when those are present.
@@ -728,7 +728,7 @@ utilities can handle.
@item _SC_EQUIV_CLASS_MAX
Inquire about the maximum number of weights that can be assigned to an
entry of the @code{LC_COLLATE} category @samp{order} keyword in a locale
-definition. The GNU C library does not presently support locale
+definition. @Theglibc{} does not presently support locale
definitions.
@comment unistd.h
@@ -1185,7 +1185,7 @@ represents the maximum length of a file name string. It is defined in
Unlike @code{PATH_MAX}, this macro is defined even if there is no actual
limit imposed. In such a case, its value is typically a very large
-number. @strong{This is always the case on the GNU system.}
+number. @strong{This is always the case on @gnuhurdsystems{}.}
@strong{Usage Note:} Don't use @code{FILENAME_MAX} as the size of an
array in which to store a file name! You can't possibly make an array
@@ -1198,7 +1198,7 @@ that big! Use dynamic allocation (@pxref{Memory Allocation}) instead.
POSIX defines certain system-specific options in the system calls for
operating on files. Some systems support these options and others do
not. Since these options are provided in the kernel, not in the
-library, simply using the GNU C library does not guarantee that any of these
+library, simply using @theglibc{} does not guarantee that any of these
features is supported; it depends on the system you are using. They can
also vary between file systems on a single machine.
@@ -1210,11 +1210,10 @@ corresponding feature is supported. (A value of @code{-1} indicates no;
any other value indicates yes.) If the macro is undefined, it means
particular files may or may not support the feature.
-Since all the machines that support the GNU C library also support NFS,
+Since all the machines that support @theglibc{} also support NFS,
one can never make a general statement about whether all file systems
support the @code{_POSIX_CHOWN_RESTRICTED} and @code{_POSIX_NO_TRUNC}
-features. So these names are never defined as macros in the GNU C
-library.
+features. So these names are never defined as macros in @theglibc{}.
@comment unistd.h
@comment POSIX.1
@@ -1253,7 +1252,7 @@ particular file, call @code{pathconf} or @code{fpathconf}.
Here are the names for the POSIX minimum upper bounds for some of the
above parameters. The significance of these values is that you can
safely push to these limits without checking whether the particular
-system you are using can go that far. In most cases GNU systems do not
+system you are using can go that far. In most cases @gnusystems{} do not
have these strict limitations. The actual limit should be requested if
necessary.
@@ -1482,7 +1481,7 @@ The POSIX.2 standard specifies certain system limits that you can access
through @code{sysconf} that apply to utility behavior rather than the
behavior of the library or the operating system.
-The GNU C library defines macros for these limits, and @code{sysconf}
+@Theglibc{} defines macros for these limits, and @code{sysconf}
returns values for them if you ask; but these values convey no
meaningful information. They are simply the smallest values that
POSIX.2 permits.
@@ -1543,7 +1542,7 @@ memory, but there is no way that the library can tell you this.)
@deftypevr Macro int EQUIV_CLASS_MAX
The maximum number of weights that can be assigned to an entry of the
@code{LC_COLLATE} category @samp{order} keyword in a locale definition.
-The GNU C library does not presently support locale definitions.
+@Theglibc{} does not presently support locale definitions.
@end deftypevr
@node Utility Minimums
@@ -1601,7 +1600,7 @@ a text line that the text utilities can handle. Its value is
The most restrictive limit permitted by POSIX.2 for the maximum number
of weights that can be assigned to an entry of the @code{LC_COLLATE}
category @samp{order} keyword in a locale definition. Its value is
-@code{2}. The GNU C library does not presently support locale
+@code{2}. @Theglibc{} does not presently support locale
definitions.
@end table
diff --git a/manual/contrib.texi b/manual/contrib.texi
index 597635a184..ed1065659e 100644
--- a/manual/contrib.texi
+++ b/manual/contrib.texi
@@ -1,8 +1,8 @@
@node Contributors, Free Manuals, Maintenance, Top
-@c %MENU% Who wrote what parts of the GNU C library
-@appendix Contributors to the GNU C Library
+@c %MENU% Who wrote what parts of the GNU C Library
+@appendix Contributors to @theglibc{}
-The GNU C library was written originally by Roland McGrath, and is
+@Theglibc{} was written originally by Roland McGrath, and is
currently maintained by Ulrich Drepper. Some parts of the library were
contributed or worked on by other people.
@@ -93,7 +93,7 @@ Roland McGrath, based on a backend interface defined by Peter Eriksson.
@item
The port to Linux i386/ELF (@code{i386-@var{anything}-linux}) was
contributed by Ulrich Drepper, based in large part on work done in
-Hongjiu Lu's Linux version of the GNU C Library.
+Hongjiu Lu's Linux version of @theglibc{}.
@item
The port to Linux/m68k (@code{m68k-@var{anything}-linux}) was
@@ -178,7 +178,7 @@ The random number generation functions @code{random}, @code{srandom},
@code{rand} and @code{srand} functions, were written by Earl T. Cohen
for the University of California at Berkeley and are copyrighted by the
Regents of the University of California. They have undergone minor
-changes to fit into the GNU C library and to fit the @w{ISO C} standard,
+changes to fit into @theglibc{} and to fit the @w{ISO C} standard,
but the functional code is Berkeley's.@refill
@item
diff --git a/manual/creature.texi b/manual/creature.texi
index 96501568a0..1bf53147ee 100644
--- a/manual/creature.texi
+++ b/manual/creature.texi
@@ -65,7 +65,7 @@ then the functionality from the 1993 edition of the POSIX.1b standard
Greater values for @code{_POSIX_C_SOURCE} will enable future extensions.
The POSIX standards process will define these values as necessary, and
-the GNU C Library should support them some time after they become standardized.
+@theglibc{} should support them some time after they become standardized.
The 1996 edition of POSIX.1 (ISO/IEC 9945-1: 1996) states that
if you define @code{_POSIX_C_SOURCE} to a value greater than
or equal to @code{199506L}, then the functionality from the 1996
@@ -192,7 +192,7 @@ This macro was introduced as part of the Large File Support extension
@comment GNU
@defvr Macro _ISOC99_SOURCE
Until the revised @w{ISO C} standard is widely adopted the new features
-are not automatically enabled. The GNU libc nevertheless has a complete
+are not automatically enabled. @Theglibc{} nevertheless has a complete
implementation of the new standard and to enable the new features the
macro @code{_ISOC99_SOURCE} should be defined.
@end defvr
@@ -227,7 +227,7 @@ get very strange errors at run time.
@defvrx Macro _THREAD_SAFE
If you define one of these macros, reentrant versions of several functions get
declared. Some of the functions are specified in POSIX.1c but many others
-are only available on a few other systems or are unique to GNU libc.
+are only available on a few other systems or are unique to @theglibc{}.
The problem is the delay in the standardization of the thread safe C library
interface.
diff --git a/manual/crypt.texi b/manual/crypt.texi
index 0ea5ff85d4..ef905904ca 100644
--- a/manual/crypt.texi
+++ b/manual/crypt.texi
@@ -23,7 +23,7 @@ through a @dfn{one-way function}, a function which makes it difficult to
work out what its input was by looking at its output, before storing in
the file.
-The GNU C library provides a one-way function that is compatible with
+@Theglibc{} provides a one-way function that is compatible with
the behavior of the @code{crypt} function introduced in FreeBSD 2.0.
It supports two one-way algorithms: one based on the MD5
message-digest algorithm that is compatible with modern BSD systems,
@@ -103,7 +103,7 @@ The terminal is flushed before and after @code{getpass}, so that
characters of a mistyped password are not accidentally visible.
In other C libraries, @code{getpass} may only return the first
-@code{PASS_MAX} bytes of a password. The GNU C library has no limit, so
+@code{PASS_MAX} bytes of a password. @Theglibc{} has no limit, so
@code{PASS_MAX} is undefined.
The prototype for this function is in @file{unistd.h}. @code{PASS_MAX}
diff --git a/manual/ctype.texi b/manual/ctype.texi
index b275a54c57..3d13571ac2 100644
--- a/manual/ctype.texi
+++ b/manual/ctype.texi
@@ -273,7 +273,7 @@ The general design of the classification functions for wide characters
is more general. It allows extensions to the set of available
classifications, beyond those which are always available. The POSIX
standard specifies how extensions can be made, and this is already
-implemented in the GNU C library implementation of the @code{localedef}
+implemented in the @glibcadj{} implementation of the @code{localedef}
program.
The character class functions are normally implemented with bitsets,
@@ -589,7 +589,7 @@ iswctype (wc, wctype ("xdigit"))
It is declared in @file{wctype.h}.
@end deftypefun
-The GNU C library also provides a function which is not defined in the
+@Theglibc{} also provides a function which is not defined in the
@w{ISO C} standard but which is available as a version for single byte
characters as well.
@@ -607,7 +607,7 @@ It is declared in @file{wchar.h}.
The first note is probably not astonishing but still occasionally a
cause of problems. The @code{isw@var{XXX}} functions can be implemented
-using macros and in fact, the GNU C library does this. They are still
+using macros and in fact, @theglibc{} does this. They are still
available as real functions but when the @file{wctype.h} header is
included the macros will be used. This is the same as the
@code{char} type versions of these functions.
diff --git a/manual/errno.texi b/manual/errno.texi
index 868a28a59f..fa88b1e8a1 100644
--- a/manual/errno.texi
+++ b/manual/errno.texi
@@ -6,7 +6,7 @@
@cindex error codes
@cindex status codes
-Many functions in the GNU C library detect and report error conditions,
+Many functions in @theglibc{} detect and report error conditions,
and sometimes your programs need to check for these error conditions.
For example, when you open an input file, you should verify that the
file was actually opened correctly, and print an error message or take
@@ -66,8 +66,9 @@ function returns an error.
@strong{Portability Note:} @w{ISO C} specifies @code{errno} as a
``modifiable lvalue'' rather than as a variable, permitting it to be
implemented as a macro. For example, its expansion might involve a
-function call, like @w{@code{*_errno ()}}. In fact, that is what it is
-on the GNU system itself. The GNU library, on non-GNU systems, does
+function call, like @w{@code{*__errno_location ()}}. In fact, that is
+what it is
+on @gnulinuxhurdsystems{}. @Theglibc{}, on each system, does
whatever is right for the particular system.
There are a few library functions, like @code{sqrt} and @code{atan},
@@ -96,10 +97,10 @@ codes of their own for other situations. The only values that are
guaranteed to be meaningful for a particular library function are the
ones that this manual lists for that function.
-On non-GNU systems, almost any system call can return @code{EFAULT} if
+Except on @gnuhurdsystems{}, almost any system call can return @code{EFAULT} if
it is given an invalid pointer as an argument. Since this could only
happen as a result of a bug in your program, and since it will not
-happen on the GNU system, we have saved space by not mentioning
+happen on @gnuhurdsystems{}, we have saved space by not mentioning
@code{EFAULT} in the descriptions of individual functions.
In some Unix systems, many system calls can also return @code{EFAULT} if
@@ -114,8 +115,8 @@ allocated memory instead of stack memory on that system.
@pindex errno.h
The error code macros are defined in the header file @file{errno.h}.
All of them expand into integer constant values. Some of these error
-codes can't occur on the GNU system, but they can occur using the GNU
-library on other systems.
+codes can't occur on @gnusystems{}, but they can occur using @theglibc{}
+on other systems.
@comment errno.h
@comment POSIX.1: Operation not permitted
@@ -178,8 +179,8 @@ computer.
@comment errno 7 @c DO NOT REMOVE
Argument list too long; used when the arguments passed to a new program
being executed with one of the @code{exec} functions (@pxref{Executing a
-File}) occupy too much memory space. This condition never arises in the
-GNU system.
+File}) occupy too much memory space. This condition never arises on
+@gnuhurdsystems{}.
@end deftypevr
@comment errno.h
@@ -238,7 +239,7 @@ Permission denied; the file permissions do not allow the attempted operation.
@deftypevr Macro int EFAULT
@comment errno 14 @c DO NOT REMOVE
Bad address; an invalid pointer was detected.
-In the GNU system, this error never happens; you get a signal instead.
+On @gnuhurdsystems{}, this error never happens; you get a signal instead.
@end deftypevr
@comment errno.h
@@ -326,7 +327,7 @@ want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
@comment errno 23 @c DO NOT REMOVE
There are too many distinct file openings in the entire system. Note
that any number of linked channels count as just one file opening; see
-@ref{Linked Channels}. This error never occurs in the GNU system.
+@ref{Linked Channels}. This error never occurs on @gnuhurdsystems{}.
@end deftypevr
@comment errno.h
@@ -345,7 +346,7 @@ An attempt to execute a file that is currently open for writing, or
write to a file that is currently being executed. Often using a
debugger to run a program is considered having it open for writing and
will cause this error. (The name stands for ``text file busy''.) This
-is not an error in the GNU system; the text is copied as necessary.
+is not an error on @gnuhurdsystems{}; the text is copied as necessary.
@end deftypevr
@comment errno.h
@@ -419,7 +420,7 @@ not representable because of overflow or underflow.
@comment errno 35 @c DO NOT REMOVE
Resource temporarily unavailable; the call might work if you try again
later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
-they are always the same in the GNU C library.
+they are always the same in @theglibc{}.
This error can happen in a few different situations:
@@ -452,7 +453,7 @@ and return to its command loop.
@comment BSD: Operation would block
@deftypevr Macro int EWOULDBLOCK
@comment errno EAGAIN @c DO NOT REMOVE
-In the GNU C library, this is another name for @code{EAGAIN} (above).
+In @theglibc{}, this is another name for @code{EAGAIN} (above).
The values are always the same, on every operating system.
C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
@@ -533,7 +534,7 @@ The socket type is not supported.
@comment errno 45 @c DO NOT REMOVE
The operation you requested is not supported. Some socket functions
don't make sense for all types of sockets, and others may not be
-implemented for all communications protocols. In the GNU system, this
+implemented for all communications protocols. On @gnuhurdsystems{}, this
error can happen for many calls when the object does not support the
particular operation; it is a generic indication that the server knows
nothing to do for that call.
@@ -754,7 +755,7 @@ the NFS file system on the local host.
An attempt was made to NFS-mount a remote file system with a file name that
already specifies an NFS-mounted file.
(This is an error on some operating systems, but we expect it to work
-properly on the GNU system, making this error code impossible.)
+properly on @gnuhurdsystems{}, making this error code impossible.)
@end deftypevr
@comment errno.h
@@ -797,7 +798,7 @@ properly on the GNU system, making this error code impossible.)
@deftypevr Macro int ENOLCK
@comment errno 77 @c DO NOT REMOVE
No locks available. This is used by the file locking facilities; see
-@ref{File Locks}. This error is never generated by the GNU system, but
+@ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but
it can result from an operation to an NFS server running another
operating system.
@end deftypevr
@@ -868,7 +869,7 @@ or an incomplete sequence of bytes or the given wide character is invalid.
@comment GNU: Inappropriate operation for background process
@deftypevr Macro int EBACKGROUND
@comment errno 100 @c DO NOT REMOVE
-In the GNU system, servers supporting the @code{term} protocol return
+On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
this error for certain operations when the caller is not in the
foreground process group of the terminal. Users do not usually see this
error because functions such as @code{read} and @code{write} translate
@@ -880,7 +881,7 @@ for information on process groups and these signals.
@comment GNU: Translator died
@deftypevr Macro int EDIED
@comment errno 101 @c DO NOT REMOVE
-In the GNU system, opening a file returns this error when the file is
+On @gnuhurdsystems{}, opening a file returns this error when the file is
translated by a program and the translator program dies while starting
up, before it has connected to the file.
@end deftypevr
@@ -1346,8 +1347,8 @@ The function @code{perror} is declared in @file{stdio.h}.
@end deftypefun
@code{strerror} and @code{perror} produce the exact same message for any
-given error code; the precise text varies from system to system. On the
-GNU system, the messages are fairly short; there are no multi-line
+given error code; the precise text varies from system to system. With
+@theglibc{}, the messages are fairly short; there are no multi-line
messages or embedded newlines. Each error message begins with a capital
letter and does not include any terminating punctuation.
@@ -1572,7 +1573,7 @@ like this:
@code{error} and @code{error_at_line} are clearly the functions of
choice and enable the programmer to write applications which follow the
-GNU coding standard. The GNU libc additionally contains functions which
+GNU coding standard. @Theglibc{} additionally contains functions which
are used in BSD for the same purpose. These functions are declared in
@file{err.h}. It is generally advised to not use these functions. They
are included only for compatibility.
diff --git a/manual/examples/README b/manual/examples/README
new file mode 100644
index 0000000000..7d0070fdd5
--- /dev/null
+++ b/manual/examples/README
@@ -0,0 +1,8 @@
+These are source files for example code that appears in The GNU C
+Library Reference Manual.
+
+While the manual itself is licensed under the terms of the GNU Free
+Documentation License, you can use these source files on their own
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; version 2 of the License, or (at your
+option) any later version.
diff --git a/manual/examples/add.c b/manual/examples/add.c
index e4b1bba365..d4b9af9c99 100644
--- a/manual/examples/add.c
+++ b/manual/examples/add.c
@@ -1,3 +1,20 @@
+/* Example of a Variadic Function
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdarg.h>
#include <stdio.h>
diff --git a/manual/examples/argp-ex1.c b/manual/examples/argp-ex1.c
index 931a8264a5..01c3639218 100644
--- a/manual/examples/argp-ex1.c
+++ b/manual/examples/argp-ex1.c
@@ -1,4 +1,19 @@
-/* Argp example #1 -- a minimal program using argp */
+/* Argp example #1 -- a minimal program using argp
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
/* This is (probably) the smallest possible program that
uses argp. It won't do much except give an error
diff --git a/manual/examples/argp-ex2.c b/manual/examples/argp-ex2.c
index 097ce7622c..0e038bbc90 100644
--- a/manual/examples/argp-ex2.c
+++ b/manual/examples/argp-ex2.c
@@ -1,4 +1,19 @@
-/* Argp example #2 -- a pretty minimal program using argp */
+/* Argp example #2 -- a pretty minimal program using argp
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
/* This program doesn't use any options or arguments, but uses
argp to be compliant with the GNU standard command line
diff --git a/manual/examples/argp-ex3.c b/manual/examples/argp-ex3.c
index d5896ee139..689d7cfdaa 100644
--- a/manual/examples/argp-ex3.c
+++ b/manual/examples/argp-ex3.c
@@ -1,4 +1,19 @@
-/* Argp example #3 -- a program with options and arguments using argp */
+/* Argp example #3 -- a program with options and arguments using argp
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
/* This program uses the same features as example 2, and uses options and
arguments.
diff --git a/manual/examples/argp-ex4.c b/manual/examples/argp-ex4.c
index 2b61358c7e..b946dd106b 100644
--- a/manual/examples/argp-ex4.c
+++ b/manual/examples/argp-ex4.c
@@ -1,4 +1,19 @@
-/* Argp example #4 -- a program with somewhat more complicated options */
+/* Argp example #4 -- a program with somewhat more complicated options
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
/* This program uses the same features as example 3, but has more
options, and somewhat more structure in the -help output. It
diff --git a/manual/examples/atexit.c b/manual/examples/atexit.c
index 42bba71126..5f07c87511 100644
--- a/manual/examples/atexit.c
+++ b/manual/examples/atexit.c
@@ -1,7 +1,24 @@
+/* Cleanups on Exit
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
-void
+void
bye (void)
{
puts ("Goodbye, cruel world....");
diff --git a/manual/examples/db.c b/manual/examples/db.c
index 1a1cb0c0d7..d6405e50d1 100644
--- a/manual/examples/db.c
+++ b/manual/examples/db.c
@@ -1,3 +1,20 @@
+/* User and Group Database Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <grp.h>
#include <pwd.h>
#include <sys/types.h>
diff --git a/manual/examples/dir.c b/manual/examples/dir.c
index 8ab77dc34c..9ca63fec0e 100644
--- a/manual/examples/dir.c
+++ b/manual/examples/dir.c
@@ -1,3 +1,20 @@
+/* Simple Program to List a Directory
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
/*@group*/
#include <stdio.h>
#include <sys/types.h>
diff --git a/manual/examples/dir2.c b/manual/examples/dir2.c
index a75c885742..7f095c84d9 100644
--- a/manual/examples/dir2.c
+++ b/manual/examples/dir2.c
@@ -1,3 +1,20 @@
+/* Simple Program to List a Directory, Mark II
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
/*@group*/
#include <stdio.h>
#include <dirent.h>
diff --git a/manual/examples/execinfo.c b/manual/examples/execinfo.c
index 5a04901957..18a3a29731 100644
--- a/manual/examples/execinfo.c
+++ b/manual/examples/execinfo.c
@@ -1,3 +1,20 @@
+/* Obtain a backtrace and print it.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/manual/examples/filecli.c b/manual/examples/filecli.c
index 9f64445fa9..71dc461800 100644
--- a/manual/examples/filecli.c
+++ b/manual/examples/filecli.c
@@ -1,3 +1,20 @@
+/* Example of Reading Datagrams
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
diff --git a/manual/examples/filesrv.c b/manual/examples/filesrv.c
index 32507c6555..e1f80aa7bd 100644
--- a/manual/examples/filesrv.c
+++ b/manual/examples/filesrv.c
@@ -1,3 +1,20 @@
+/* Datagram Socket Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
diff --git a/manual/examples/fmtmsgexpl.c b/manual/examples/fmtmsgexpl.c
index 42b8bb517f..fd7b16bb25 100644
--- a/manual/examples/fmtmsgexpl.c
+++ b/manual/examples/fmtmsgexpl.c
@@ -1,3 +1,20 @@
+/* How to use fmtmsg and addseverity.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <fmtmsg.h>
int
diff --git a/manual/examples/genpass.c b/manual/examples/genpass.c
index a7626dbed5..cb4d99f069 100644
--- a/manual/examples/genpass.c
+++ b/manual/examples/genpass.c
@@ -1,31 +1,48 @@
+/* Encrypting Passwords
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <crypt.h>
-int
+int
main(void)
{
unsigned long seed[2];
char salt[] = "$1$........";
- const char *const seedchars =
+ const char *const seedchars =
"./0123456789ABCDEFGHIJKLMNOPQRST"
"UVWXYZabcdefghijklmnopqrstuvwxyz";
char *password;
int i;
-
- /* Generate a (not very) random seed.
+
+ /* Generate a (not very) random seed.
You should do it better than this... */
seed[0] = time(NULL);
seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);
-
+
/* Turn it into printable characters from `seedchars'. */
for (i = 0; i < 8; i++)
salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];
-
+
/* Read in the user's password and encrypt it. */
password = crypt(getpass("Password:"), salt);
-
+
/* Print the results. */
puts(password);
return 0;
diff --git a/manual/examples/inetcli.c b/manual/examples/inetcli.c
index 35dfb379e8..afd4a91a6a 100644
--- a/manual/examples/inetcli.c
+++ b/manual/examples/inetcli.c
@@ -1,3 +1,20 @@
+/* Byte Stream Socket Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
@@ -11,7 +28,7 @@
#define MESSAGE "Yow!!! Are we having fun yet?!?"
#define SERVERHOST "mescaline.gnu.org"
-void
+void
write_to_server (int filedes)
{
int nbytes;
diff --git a/manual/examples/inetsrv.c b/manual/examples/inetsrv.c
index 3d544c005c..d245f0d111 100644
--- a/manual/examples/inetsrv.c
+++ b/manual/examples/inetsrv.c
@@ -1,3 +1,20 @@
+/* Byte Stream Connection Server Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
diff --git a/manual/examples/isockad.c b/manual/examples/isockad.c
index 9c21149a85..b7c73a7f41 100644
--- a/manual/examples/isockad.c
+++ b/manual/examples/isockad.c
@@ -1,10 +1,27 @@
+/* Internet Socket Example using sockaddr_in.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
-void
+void
init_sockaddr (struct sockaddr_in *name,
const char *hostname,
uint16_t port)
@@ -14,7 +31,7 @@ init_sockaddr (struct sockaddr_in *name,
name->sin_family = AF_INET;
name->sin_port = htons (port);
hostinfo = gethostbyname (hostname);
- if (hostinfo == NULL)
+ if (hostinfo == NULL)
{
fprintf (stderr, "Unknown host %s.\n", hostname);
exit (EXIT_FAILURE);
diff --git a/manual/examples/longopt.c b/manual/examples/longopt.c
index 989e88713e..6e7d4d939a 100644
--- a/manual/examples/longopt.c
+++ b/manual/examples/longopt.c
@@ -1,3 +1,20 @@
+/* Example of Parsing Long Options with getopt_long.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
diff --git a/manual/examples/memopen.c b/manual/examples/memopen.c
index 682830fe5f..3fa29d5219 100644
--- a/manual/examples/memopen.c
+++ b/manual/examples/memopen.c
@@ -1,3 +1,20 @@
+/* String Streams
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
static char buffer[] = "foobar";
diff --git a/manual/examples/memstrm.c b/manual/examples/memstrm.c
index 1674c36e0b..be8366064f 100644
--- a/manual/examples/memstrm.c
+++ b/manual/examples/memstrm.c
@@ -1,3 +1,20 @@
+/* open_memstream example.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
int
diff --git a/manual/examples/mkfsock.c b/manual/examples/mkfsock.c
index 615ecd8684..e5c3b2847f 100644
--- a/manual/examples/mkfsock.c
+++ b/manual/examples/mkfsock.c
@@ -1,3 +1,20 @@
+/* Example of Local-Namespace Sockets
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stddef.h>
#include <stdio.h>
#include <errno.h>
diff --git a/manual/examples/mkisock.c b/manual/examples/mkisock.c
index 2fd8b3d2f9..68cf348f1b 100644
--- a/manual/examples/mkisock.c
+++ b/manual/examples/mkisock.c
@@ -1,9 +1,26 @@
+/* Internet Socket Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
-int
+int
make_socket (uint16_t port)
{
int sock;
diff --git a/manual/examples/mygetpass.c b/manual/examples/mygetpass.c
index 6fe06f4637..a927a13ac1 100644
--- a/manual/examples/mygetpass.c
+++ b/manual/examples/mygetpass.c
@@ -1,3 +1,20 @@
+/* Reading Passwords
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <termios.h>
#include <stdio.h>
@@ -14,12 +31,12 @@ my_getpass (char **lineptr, size_t *n, FILE *stream)
new.c_lflag &= ~ECHO;
if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
return -1;
-
+
/* Read the password. */
nread = getline (lineptr, n, stream);
/* Restore terminal. */
(void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
-
+
return nread;
}
diff --git a/manual/examples/pipe.c b/manual/examples/pipe.c
index 92d339a7b9..b03c90f8f0 100644
--- a/manual/examples/pipe.c
+++ b/manual/examples/pipe.c
@@ -1,3 +1,20 @@
+/* Creating a Pipe
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
diff --git a/manual/examples/popen.c b/manual/examples/popen.c
index 1b9ee826b4..6716dc2463 100644
--- a/manual/examples/popen.c
+++ b/manual/examples/popen.c
@@ -1,3 +1,20 @@
+/* Pipe to a Subprocess
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
diff --git a/manual/examples/rprintf.c b/manual/examples/rprintf.c
index 2b8f6bfe74..14de9d2432 100644
--- a/manual/examples/rprintf.c
+++ b/manual/examples/rprintf.c
@@ -1,3 +1,20 @@
+/* Printf Extension Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <printf.h>
diff --git a/manual/examples/search.c b/manual/examples/search.c
index 182e6e4a3f..e37656721b 100644
--- a/manual/examples/search.c
+++ b/manual/examples/search.c
@@ -1,3 +1,20 @@
+/* Searching and Sorting Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -35,7 +52,7 @@ int count = sizeof (muppets) / sizeof (struct critter);
/* This is the comparison function used for sorting and searching. */
-int
+int
critter_cmp (const struct critter *c1, const struct critter *c2)
{
return strcmp (c1->name, c2->name);
@@ -44,7 +61,7 @@ critter_cmp (const struct critter *c1, const struct critter *c2)
/* Print information about a critter. */
-void
+void
print_critter (const struct critter *c)
{
printf ("%s, the %s\n", c->name, c->species);
@@ -54,7 +71,7 @@ print_critter (const struct critter *c)
/*@group*/
/* Do the lookup into the sorted array. */
-void
+void
find_critter (const char *name)
{
struct critter target, *result;
diff --git a/manual/examples/select.c b/manual/examples/select.c
index a65ed77503..635163026c 100644
--- a/manual/examples/select.c
+++ b/manual/examples/select.c
@@ -1,3 +1,20 @@
+/* Waiting for Input or Output
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
/*@group*/
#include <errno.h>
#include <stdio.h>
diff --git a/manual/examples/setjmp.c b/manual/examples/setjmp.c
index 023339c602..ffd7744c1a 100644
--- a/manual/examples/setjmp.c
+++ b/manual/examples/setjmp.c
@@ -1,10 +1,27 @@
+/* Introduction to Non-Local Exits
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <setjmp.h>
#include <stdlib.h>
#include <stdio.h>
jmp_buf main_loop;
-void
+void
abort_to_main_loop (int status)
{
longjmp (main_loop, status);
@@ -21,7 +38,7 @@ main (void)
}
-void
+void
do_command (void)
{
char buffer[128];
diff --git a/manual/examples/sigh1.c b/manual/examples/sigh1.c
index 2c6e95b9c9..d05afd9af9 100644
--- a/manual/examples/sigh1.c
+++ b/manual/examples/sigh1.c
@@ -1,3 +1,20 @@
+/* Signal Handlers that Return
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -6,14 +23,14 @@
volatile sig_atomic_t keep_going = 1;
/* The signal handler just clears the flag and re-enables itself. */
-void
+void
catch_alarm (int sig)
{
keep_going = 0;
signal (sig, catch_alarm);
}
-void
+void
do_stuff (void)
{
puts ("Doing stuff while waiting for alarm....");
diff --git a/manual/examples/sigusr.c b/manual/examples/sigusr.c
index 11e3ceee8f..5bfbc80716 100644
--- a/manual/examples/sigusr.c
+++ b/manual/examples/sigusr.c
@@ -1,3 +1,20 @@
+/* Using kill for Communication
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
/*@group*/
#include <signal.h>
#include <stdio.h>
@@ -8,14 +25,14 @@
/* When a @code{SIGUSR1} signal arrives, set this variable. */
volatile sig_atomic_t usr_interrupt = 0;
-void
+void
synch_signal (int sig)
{
usr_interrupt = 1;
}
/* The child process executes this function. */
-void
+void
child_function (void)
{
/* Perform initialization. */
diff --git a/manual/examples/stpcpy.c b/manual/examples/stpcpy.c
index b83226354b..f94cb636b1 100644
--- a/manual/examples/stpcpy.c
+++ b/manual/examples/stpcpy.c
@@ -1,3 +1,20 @@
+/* stpcpy example.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <string.h>
#include <stdio.h>
diff --git a/manual/examples/strdupa.c b/manual/examples/strdupa.c
index 7d6ef39947..f01e115245 100644
--- a/manual/examples/strdupa.c
+++ b/manual/examples/strdupa.c
@@ -1,3 +1,20 @@
+/* strdupa example.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <paths.h>
#include <string.h>
#include <stdio.h>
diff --git a/manual/examples/strftim.c b/manual/examples/strftim.c
index 7f95ef02ad..93428177e4 100644
--- a/manual/examples/strftim.c
+++ b/manual/examples/strftim.c
@@ -1,3 +1,20 @@
+/* Time Functions Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <time.h>
#include <stdio.h>
diff --git a/manual/examples/strncat.c b/manual/examples/strncat.c
index 948d662a4e..fb7b7078a2 100644
--- a/manual/examples/strncat.c
+++ b/manual/examples/strncat.c
@@ -1,3 +1,20 @@
+/* strncat example.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <string.h>
#include <stdio.h>
diff --git a/manual/examples/subopt.c b/manual/examples/subopt.c
index a87bee1669..ecf75f9a91 100644
--- a/manual/examples/subopt.c
+++ b/manual/examples/subopt.c
@@ -1,3 +1,20 @@
+/* Parsing of Suboptions Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/manual/examples/swapcontext.c b/manual/examples/swapcontext.c
index f733510f88..c993d1450a 100644
--- a/manual/examples/swapcontext.c
+++ b/manual/examples/swapcontext.c
@@ -1,3 +1,20 @@
+/* Complete Context Control
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/manual/examples/termios.c b/manual/examples/termios.c
index 6db5990a0c..40d4325b5d 100644
--- a/manual/examples/termios.c
+++ b/manual/examples/termios.c
@@ -1,3 +1,20 @@
+/* Noncanonical Mode Example
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
@@ -7,13 +24,13 @@
struct termios saved_attributes;
-void
+void
reset_input_mode (void)
{
tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
}
-void
+void
set_input_mode (void)
{
struct termios tattr;
diff --git a/manual/examples/testopt.c b/manual/examples/testopt.c
index 44ca8e4ad0..081742d85d 100644
--- a/manual/examples/testopt.c
+++ b/manual/examples/testopt.c
@@ -1,3 +1,20 @@
+/* Example of Parsing Arguments with getopt.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
/*@group*/
#include <ctype.h>
#include <stdio.h>
diff --git a/manual/examples/testpass.c b/manual/examples/testpass.c
index 5bd616d2a0..4e05a90598 100644
--- a/manual/examples/testpass.c
+++ b/manual/examples/testpass.c
@@ -1,9 +1,26 @@
+/* Verify a password.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <crypt.h>
-int
+int
main(void)
{
/* Hashed form of "GNU libc manual". */
@@ -11,7 +28,7 @@ main(void)
char *result;
int ok;
-
+
/*@group*/
/* Read in the user's password and encrypt it,
passing the expected password in as the salt. */
diff --git a/manual/examples/timeval_subtract.c b/manual/examples/timeval_subtract.c
new file mode 100644
index 0000000000..f0f237568f
--- /dev/null
+++ b/manual/examples/timeval_subtract.c
@@ -0,0 +1,45 @@
+/* struct timeval subtraction.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* Subtract the `struct timeval' values X and Y,
+ storing the result in RESULT.
+ Return 1 if the difference is negative, otherwise 0. */
+
+int
+timeval_subtract (result, x, y)
+ struct timeval *result, *x, *y;
+{
+ /* Perform the carry for the later subtraction by updating @var{y}. */
+ if (x->tv_usec < y->tv_usec) {
+ int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
+ y->tv_usec -= 1000000 * nsec;
+ y->tv_sec += nsec;
+ }
+ if (x->tv_usec - y->tv_usec > 1000000) {
+ int nsec = (x->tv_usec - y->tv_usec) / 1000000;
+ y->tv_usec += 1000000 * nsec;
+ y->tv_sec -= nsec;
+ }
+
+ /* Compute the time remaining to wait.
+ @code{tv_usec} is certainly positive. */
+ result->tv_sec = x->tv_sec - y->tv_sec;
+ result->tv_usec = x->tv_usec - y->tv_usec;
+
+ /* Return 1 if result is negative. */
+ return x->tv_sec < y->tv_sec;
+}
diff --git a/manual/filesys.texi b/manual/filesys.texi
index 049e7e01b5..dc570df181 100644
--- a/manual/filesys.texi
+++ b/manual/filesys.texi
@@ -2,7 +2,7 @@
@c %MENU% Functions for manipulating files
@chapter File System Interface
-This chapter describes the GNU C library's functions for manipulating
+This chapter describes @theglibc{}'s functions for manipulating
files. Unlike the input and output functions (@pxref{I/O on Streams};
@pxref{Low-Level I/O}), these functions are concerned with operating
on the files themselves rather than on their contents.
@@ -63,7 +63,7 @@ the current working directory, storing it in the character array
@var{buffer} that you provide. The @var{size} argument is how you tell
the system the allocation size of @var{buffer}.
-The GNU library version of this function also permits you to specify a
+The @glibcadj{} version of this function also permits you to specify a
null pointer for the @var{buffer} argument. Then @code{getcwd}
allocates a buffer automatically, as with @code{malloc}
(@pxref{Unconstrained Allocation}). If the @var{size} is greater than
@@ -117,12 +117,12 @@ software.
@comment BSD
@deftypefn {Deprecated Function} {char *} getwd (char *@var{buffer})
This is similar to @code{getcwd}, but has no way to specify the size of
-the buffer. The GNU library provides @code{getwd} only
+the buffer. @Theglibc{} provides @code{getwd} only
for backwards compatibility with BSD.
The @var{buffer} argument should be a pointer to an array at least
-@code{PATH_MAX} bytes long (@pxref{Limits for Files}). In the GNU
-system there is no limit to the size of a file name, so this is not
+@code{PATH_MAX} bytes long (@pxref{Limits for Files}). On @gnuhurdsystems{}
+there is no limit to the size of a file name, so this is not
necessarily enough space to contain the directory name. That is why
this function is deprecated.
@end deftypefn
@@ -242,7 +242,7 @@ field you can count on in all POSIX systems.
@item ino_t d_fileno
This is the file serial number. For BSD compatibility, you can also
-refer to this member as @code{d_ino}. In the GNU system and most POSIX
+refer to this member as @code{d_ino}. On @gnulinuxhurdsystems{} and most POSIX
systems, for most files this the same as the @code{st_ino} member that
@code{stat} will return for the file. @xref{File Attributes}.
@@ -354,7 +354,7 @@ The process has too many files open.
@item ENFILE
The entire system, or perhaps the file system which contains the
directory, cannot support any additional open files at the moment.
-(This problem cannot happen on the GNU system.)
+(This problem cannot happen on @gnuhurdsystems{}.)
@item ENOMEM
Not enough memory available.
@@ -413,7 +413,7 @@ descriptor which is created by the @code{opendir} call. For instance,
to switch the current working directory to the directory just read the
@code{fchdir} function could be used. Historically the @code{DIR} type
was exposed and programs could access the fields. This does not happen
-in the GNU C library. Instead a separate function is provided to allow
+in @theglibc{}. Instead a separate function is provided to allow
access.
@comment dirent.h
@@ -634,7 +634,7 @@ the global variable @code{errno} contains more information on the error.
As described above the fourth argument to the @code{scandir} function
must be a pointer to a sorting function. For the convenience of the
-programmer the GNU C library contains implementations of functions which
+programmer @theglibc{} contains implementations of functions which
are very helpful for this purpose.
@comment dirent.h
@@ -1075,7 +1075,8 @@ The directory or file system that would contain the new link is full
and cannot be extended.
@item EPERM
-In the GNU system and some others, you cannot make links to directories.
+On @gnulinuxhurdsystems{} and some others, you cannot make links to
+directories.
Many systems allow only privileged users to do so. This error
is used to report the problem.
@@ -1099,7 +1100,7 @@ A hardware error occurred while trying to read or write the to filesystem.
@cindex symbolic link
@cindex link, symbolic
-The GNU system supports @dfn{soft links} or @dfn{symbolic links}. This
+@gnusystems{} support @dfn{soft links} or @dfn{symbolic links}. This
is a kind of ``file'' that is essentially a pointer to another file
name. Unlike hard links, symbolic links can be made to directories or
across file systems with no restrictions. You can also make a symbolic
@@ -1352,8 +1353,8 @@ The file name to be deleted doesn't exist.
@item EPERM
On some systems @code{unlink} cannot be used to delete the name of a
directory, or at least can only be used this way by a privileged user.
-To avoid such problems, use @code{rmdir} to delete directories. (In the
-GNU system @code{unlink} can never delete the name of a directory.)
+To avoid such problems, use @code{rmdir} to delete directories. (On
+@gnulinuxhurdsystems{} @code{unlink} can never delete the name of a directory.)
@item EROFS
The directory containing the file name to be deleted is on a read-only
@@ -1381,7 +1382,7 @@ The directory to be deleted is not empty.
@end table
These two error codes are synonymous; some systems use one, and some use
-the other. The GNU system always uses @code{ENOTEMPTY}.
+the other. @gnulinuxhurdsystems{} always use @code{ENOTEMPTY}.
The prototype for this function is declared in the header file
@file{unistd.h}.
@@ -1458,7 +1459,7 @@ that are the current working directories of processes.
@item ENOTEMPTY
@itemx EEXIST
-The directory @var{newname} isn't empty. The GNU system always returns
+The directory @var{newname} isn't empty. @gnulinuxhurdsystems{} always return
@code{ENOTEMPTY} for this, but some other systems return @code{EEXIST}.
@item EINVAL
@@ -1770,17 +1771,18 @@ Here is a list of them.
@comment sys/types.h
@comment POSIX.1
@deftp {Data Type} mode_t
-This is an integer data type used to represent file modes. In the
-GNU system, this is equivalent to @code{unsigned int}.
+This is an integer data type used to represent file modes. In
+@theglibc{}, this is an unsigned type no narrower than @code{unsigned
+int}.
@end deftp
@cindex inode number
@comment sys/types.h
@comment POSIX.1
@deftp {Data Type} ino_t
-This is an arithmetic data type used to represent file serial numbers.
+This is an unsigned integer type used to represent file serial numbers.
(In Unix jargon, these are sometimes called @dfn{inode numbers}.)
-In the GNU system, this type is equivalent to @code{unsigned long int}.
+In @theglibc{}, this type is no narrower than @code{unsigned int}.
If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type
is transparently replaced by @code{ino64_t}.
@@ -1789,9 +1791,9 @@ is transparently replaced by @code{ino64_t}.
@comment sys/types.h
@comment Unix98
@deftp {Data Type} ino64_t
-This is an arithmetic data type used to represent file serial numbers
-for the use in LFS. In the GNU system, this type is equivalent to
-@code{unsigned long long int}.
+This is an unsigned integer type used to represent file serial numbers
+for the use in LFS. In @theglibc{}, this type is no narrower than
+@code{unsigned int}.
When compiling with @code{_FILE_OFFSET_BITS == 64} this type is
available under the name @code{ino_t}.
@@ -1801,21 +1803,20 @@ available under the name @code{ino_t}.
@comment POSIX.1
@deftp {Data Type} dev_t
This is an arithmetic data type used to represent file device numbers.
-In the GNU system, this is equivalent to @code{int}.
+In @theglibc{}, this is an integer type no narrower than @code{int}.
@end deftp
@comment sys/types.h
@comment POSIX.1
@deftp {Data Type} nlink_t
-This is an arithmetic data type used to represent file link counts.
-In the GNU system, this is equivalent to @code{unsigned short int}.
+This is an integer type used to represent file link counts.
@end deftp
@comment sys/types.h
@comment Unix98
@deftp {Data Type} blkcnt_t
-This is an arithmetic data type used to represent block counts.
-In the GNU system, this is equivalent to @code{unsigned long int}.
+This is a signed integer type used to represent block counts.
+In @theglibc{}, this type is no narrower than @code{int}.
If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type
is transparently replaced by @code{blkcnt64_t}.
@@ -1824,9 +1825,8 @@ is transparently replaced by @code{blkcnt64_t}.
@comment sys/types.h
@comment Unix98
@deftp {Data Type} blkcnt64_t
-This is an arithmetic data type used to represent block counts for the
-use in LFS. In the GNU system, this is equivalent to @code{unsigned
-long long int}.
+This is a signed integer type used to represent block counts for the
+use in LFS. In @theglibc{}, this type is no narrower than @code{int}.
When compiling with @code{_FILE_OFFSET_BITS == 64} this type is
available under the name @code{blkcnt_t}.
@@ -2481,16 +2481,16 @@ read_umask (void)
@end smallexample
@noindent
-However, it is better to use @code{getumask} if you just want to read
-the mask value, because it is reentrant (at least if you use the GNU
-operating system).
+However, on @gnuhurdsystems{} it is better to use @code{getumask} if
+you just want to read the mask value, because it is reentrant.
@end deftypefun
@comment sys/stat.h
@comment GNU
@deftypefun mode_t getumask (void)
Return the current value of the file creation mask for the current
-process. This function is a GNU extension.
+process. This function is a GNU extension and is only available on
+@gnuhurdsystems{}.
@end deftypefun
@comment sys/stat.h
@@ -3035,7 +3035,7 @@ set the real size of the file.
@cindex special files
The @code{mknod} function is the primitive for making special files,
-such as files that correspond to devices. The GNU library includes
+such as files that correspond to devices. @Theglibc{} includes
this function for compatibility with BSD.
The prototype for @code{mknod} is declared in @file{sys/stat.h}.
@@ -3176,7 +3176,7 @@ you can create with @code{tmpnam}. You can rely on being able to call
@code{tmpnam} at least this many times before it might fail saying you
have made too many temporary file names.
-With the GNU library, you can create a very large number of temporary
+With @theglibc{}, you can create a very large number of temporary
file names. If you actually created the files, you would probably run
out of disk space before you ran out of names. Some other systems have
a fixed, small limit on the number of temporary files. The limit is
diff --git a/manual/header.texi b/manual/header.texi
index 7a4cb058fc..2a551cd6e1 100644
--- a/manual/header.texi
+++ b/manual/header.texi
@@ -3,7 +3,7 @@
@appendix Summary of Library Facilities
This appendix is a complete list of the facilities declared within the
-header files supplied with the GNU C library. Each entry also lists the
+header files supplied with @theglibc{}. Each entry also lists the
standard or other source from which each facility is derived, and tells
you where in the manual you can find more information about how to use
it.
diff --git a/manual/install.texi b/manual/install.texi
index 1656c5e052..00db2b8478 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -1,17 +1,18 @@
@c This is for making the `INSTALL' file for the distribution.
@c Makeinfo ignores it when processing the file from the include.
@setfilename INSTALL
+@include macros.texi
@node Installation, Maintenance, Library Summary, Top
-@c %MENU% How to install the GNU C library
-@appendix Installing the GNU C Library
+@c %MENU% How to install the GNU C Library
+@appendix Installing @theglibc{}
Before you do anything else, you should read the file @file{FAQ} located
at the top level of the source tree. This file answers common questions
and describes problems you may experience with compilation and
installation. It is updated more frequently than this manual.
-Features can be added to GNU Libc via @dfn{add-on} bundles. These are
+Features can be added to @theglibc{} via @dfn{add-on} bundles. These are
separate tar files, which you unpack into the top level of the source
tree. Then you give @code{configure} the @samp{--enable-add-ons} option
to activate them, and they will be compiled into the library.
@@ -29,13 +30,14 @@ GNU Make, and possibly others. @xref{Tools for Compilation}, below.
@end menu
@node Configuring and compiling
-@appendixsec Configuring and compiling GNU Libc
+@appendixsec Configuring and compiling @theglibc{}
@cindex configuring
@cindex compiling
-GNU libc cannot be compiled in the source directory. You must build
+@Theglibc{} cannot be compiled in the source directory. You must build
it in a separate build directory. For example, if you have unpacked
-the glibc sources in @file{/src/gnu/glibc-@var{version}}, create a directory
+the @glibcadj{} sources in @file{/src/gnu/glibc-@var{version}},
+create a directory
@file{/src/gnu/glibc-build} to put the object files in. This allows
removing the whole build directory in case an error occurs, which is
the safest way to get a fresh start and should always be done.
@@ -54,10 +56,10 @@ directory, especially some files in the manual subdirectory.
@noindent
@code{configure} takes many options, but the only one that is usually
mandatory is @samp{--prefix}. This option tells @code{configure}
-where you want glibc installed. This defaults to @file{/usr/local},
+where you want @theglibc{} installed. This defaults to @file{/usr/local},
but the normal setting to install as the standard system library is
-@samp{--prefix=/usr} for GNU/Linux systems and @samp{--prefix=} (an
-empty prefix) for GNU/Hurd systems.
+@samp{--prefix=/usr} for @gnulinuxsystems{} and @samp{--prefix=} (an
+empty prefix) for @gnuhurdsystems{}.
It may also be useful to set the @var{CC} and @var{CFLAGS} variables in
the environment when running @code{configure}. @var{CC} selects the C
@@ -79,14 +81,15 @@ directory if that option is specified, or @file{/usr/local} otherwise.
@item --with-headers=@var{directory}
Look for kernel header files in @var{directory}, not
-@file{/usr/include}. Glibc needs information from the kernel's private
-header files. Glibc will normally look in @file{/usr/include} for them,
+@file{/usr/include}. @Theglibc{} needs information from the kernel's header
+files describing the interface to the kernel. @Theglibc{} will normally
+look in @file{/usr/include} for them,
but if you specify this option, it will look in @var{DIRECTORY} instead.
This option is primarily of use on a system where the headers in
-@file{/usr/include} come from an older version of glibc. Conflicts can
+@file{/usr/include} come from an older version of @theglibc{}. Conflicts can
occasionally happen in this case. You can also use this option if you want to
-compile glibc with a newer set of kernel headers than the ones found in
+compile @theglibc{} with a newer set of kernel headers than the ones found in
@file{/usr/include}.
@item --enable-add-ons[=@var{list}]
@@ -101,7 +104,7 @@ relative to the build directory (that is, the current working directory).
For example, @samp{--enable-add-ons=nptl,../glibc-libidn-@var{version}}.
@item --enable-kernel=@var{version}
-This option is currently only useful on GNU/Linux systems. The
+This option is currently only useful on @gnulinuxsystems{}. The
@var{version} parameter should have the form X.Y.Z and describes the
smallest version of the Linux kernel the generated library is expected
to support. The higher the @var{version} number is, the less
@@ -111,7 +114,7 @@ compatibility code is added, and the faster the code gets.
Use the binutils (assembler and linker) in @file{@var{directory}}, not
the ones the C compiler would default to. You can use this option if
the default binutils on your system cannot deal with all the constructs
-in the GNU C library. In that case, @code{configure} will detect the
+in @theglibc{}. In that case, @code{configure} will detect the
problem and suppress these constructs, so that the library will still be
usable, but functionality may be lost---for example, you can't build a
shared libc with old binutils.
@@ -155,7 +158,7 @@ compatibility problems.
@itemx --host=@var{host-system}
These options are for cross-compiling. If you specify both options and
@var{build-system} is different from @var{host-system}, @code{configure}
-will prepare to cross-compile glibc from @var{build-system} to be used
+will prepare to cross-compile @theglibc{} from @var{build-system} to be used
on @var{host-system}. You'll probably need the @samp{--with-headers}
option too, and you may have to override @var{configure}'s selection of
the compiler and/or binutils.
@@ -192,7 +195,7 @@ successfully, do not use the built library, and report a bug after
verifying that the problem is not already known. @xref{Reporting Bugs},
for instructions on reporting bugs. Note that some of the tests assume
they are not being run by @code{root}. We recommend you compile and
-test glibc as an unprivileged user.
+test @theglibc{} as an unprivileged user.
Before reporting bugs make sure there is no problem with your system.
The tests (and later installation) use some pre-existing files of the
@@ -212,7 +215,7 @@ the file @file{configparms}. To change them, create a
for your system. The file is included and parsed by @code{make} and has
to follow the conventions for makefiles.
-It is easy to configure the GNU C library for cross-compilation by
+It is easy to configure @theglibc{} for cross-compilation by
setting a few variables in @file{configparms}. Set @code{CC} to the
cross-compiler for the target you configured the library for; it is
important to use this same @code{CC} value when running
@@ -231,13 +234,14 @@ object files for the target you configured for.
To install the library and its header files, and the Info files of the
manual, type @code{env LANGUAGE=C LC_ALL=C make install}. This will
build things, if necessary, before installing them; however, you should
-still compile everything first. If you are installing glibc as your
+still compile everything first. If you are installing @theglibc{} as your
primary C library, we recommend that you shut the system down to
single-user mode first, and reboot afterward. This minimizes the risk
of breaking things when the library changes out from underneath.
@samp{make install} will do the entire job of upgrading from a
-previous installation of glibc 2.x. There may sometimes be headers
+previous installation of @theglibc{} version 2.x. There may sometimes
+be headers
left behind from the previous installation, but those are generally
harmless. If you want to avoid leaving headers behind you can do
things in the following order.
@@ -251,17 +255,17 @@ library requires the ability to compile and run programs against the old
library. The new @file{/usr/include}, after switching the include
directories and before installing the library should contain the Linux
headers, but nothing else. If you do this, you will need to restore
-any headers from non-glibc libraries youself after installing the
+any headers from libraries other than @theglibc{} yourself after installing the
library.
-You can install glibc somewhere other than where you configured it to go
+You can install @theglibc{} somewhere other than where you configured it to go
by setting the @code{install_root} variable on the command line for
@samp{make install}. The value of this variable is prepended to all the
paths for installation. This is useful when setting up a chroot
environment or preparing a binary distribution. The directory should be
specified with an absolute file name.
-Glibc includes a daemon called @code{nscd}, which you
+@Theglibc{} includes a daemon called @code{nscd}, which you
may or may not want to run. @code{nscd} caches name service lookups; it
can dramatically improve performance with NIS+, and may help with DNS as
well.
@@ -277,11 +281,11 @@ providing pty slaves, you don't need this program; otherwise you do.
The source for @file{pt_chown} is in @file{login/programs/pt_chown.c}.
After installation you might want to configure the timezone and locale
-installation of your system. The GNU C library comes with a locale
+installation of your system. @Theglibc{} comes with a locale
database which gets configured with @code{localedef}. For example, to
set up a German locale with name @code{de_DE}, simply issue the command
@samp{localedef -i de_DE -f ISO-8859-1 de_DE}. To configure all locales
-that are supported by glibc, you can issue from your build directory the
+that are supported by @theglibc{}, you can issue from your build directory the
command @samp{make localedata/install-locales}.
To configure the locally used timezone, set the @code{TZ} environment
@@ -299,41 +303,33 @@ timezone file which is in @file{/usr/share/zoneinfo} to the file
@cindex tools, for installing library
We recommend installing the following GNU tools before attempting to
-build the GNU C library:
+build @theglibc{}:
@itemize @bullet
@item
GNU @code{make} 3.79 or newer
-You need the latest version of GNU @code{make}. Modifying the GNU C
-Library to work with other @code{make} programs would be so difficult that
+You need the latest version of GNU @code{make}. Modifying @theglibc{}
+to work with other @code{make} programs would be so difficult that
we recommend you port GNU @code{make} instead. @strong{Really.} We
recommend GNU @code{make} version 3.79. All earlier versions have severe
bugs or lack features.
@item
-GCC 3.4 or newer, GCC 4.1 recommended
-
-GCC 3.4 or higher is required; as of this
-writing, GCC 4.4 is the compiler we advise to use for current versions.
-On certain machines including @code{powerpc64}, compilers prior to GCC
-4.0 have bugs that prevent them compiling the C library code. On other
-machines, GCC 4.1 is required to build the C
-library with support for the correct @code{long double} type format;
-these include @code{powerpc} (32 bit), @code{s390} and @code{s390x}. For
-other architectures special compiler-provided headers are needed
-(like @file{cpuid.h} on x86) which only come with later compiler versions.
-
-You can use whatever compiler you like to compile programs that use GNU
-libc, but be aware that both GCC 2.7 and 2.8 have bugs in their
-floating-point support that may be triggered by the math library.
+GCC 4.3 or newer, GCC 4.6 recommended
+
+GCC 4.3 or higher is required; as of this writing, GCC 4.6 is the
+compiler we advise to use to build @theglibc{}.
+
+You can use whatever compiler you like to compile programs that use
+@theglibc{}.
Check the FAQ for any special compiler issues on particular platforms.
@item
-GNU @code{binutils} 2.15 or later
+GNU @code{binutils} 2.20 or later
-You must use GNU @code{binutils} (as and ld) to build the GNU C library.
+You must use GNU @code{binutils} (as and ld) to build @theglibc{}.
No other assembler or linker has the necessary functionality at the
moment.
@@ -390,46 +386,45 @@ You may also need these packages if you upgrade your source tree using
patches, although we try to avoid this.
@node Linux
-@appendixsec Specific advice for GNU/Linux systems
+@appendixsec Specific advice for @gnulinuxsystems{}
@cindex kernel header files
-If you are installing GNU libc on a GNU/Linux system, you need to have the
-header files from a 2.2 or newer kernel around for reference. For some
-architectures, like ia64, sh and hppa, you need at least headers from
-kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64). You do not need to use
-that kernel, just have its headers where glibc can access at them. The
-easiest way to do this is to unpack it in a directory such as
-@file{/usr/src/linux-2.2.1}. In that directory, run @samp{make config}
-and accept all the defaults. Then run @samp{make
-include/linux/version.h}. Finally, configure glibc with the option
-@samp{--with-headers=/usr/src/linux-2.2.1/include}. Use the most recent
-kernel you can get your hands on.
-
-An alternate tactic is to unpack the 2.2 kernel and run @samp{make
-config} as above; then, rename or delete @file{/usr/include}, create a
-new @file{/usr/include}, and make symbolic links of
-@file{/usr/include/linux} and @file{/usr/include/asm} into the kernel
-sources. You can then configure glibc with no special options.
-
-After installing GNU libc, you may need to remove or rename
-@file{/usr/include/linux} and @file{/usr/include/asm}, and replace them
-with copies of @file{include/linux} and
-@file{include/asm-$@var{ARCHITECTURE}} taken from the Linux source
-package which supplied kernel headers for building the library.
-@var{ARCHITECTURE} will be the machine architecture for which the
-library was built, such as @samp{i386} or @samp{alpha}. You do not need
-to do this if you did not specify an alternate kernel header source
-using @samp{--with-headers}. The intent here is that these directories
-should be copies of, @strong{not} symlinks to, the kernel headers used to
-build the library.
-
-Note that @file{/usr/include/net} and @file{/usr/include/scsi} should
-@strong{not} be symlinks into the kernel sources. GNU libc provides its
-own versions of these files.
-
-GNU/Linux expects some components of the libc installation to be in
+If you are installing @theglibc{} on @gnulinuxsystems{}, you need to have
+the header files from a 2.6.19.1 or newer kernel around for reference.
+These headers must be installed using @samp{make headers_install}; the
+headers present in the kernel source directory are not suitable for
+direct use by @theglibc{}. You do not need to use that kernel, just have
+its headers installed where @theglibc{} can access them, referred to here as
+@var{install-directory}. The easiest way to do this is to unpack it
+in a directory such as @file{/usr/src/linux-@var{version}}. In that
+directory, run @samp{make headers_install
+INSTALL_HDR_PATH=@var{install-directory}}. Finally, configure @theglibc{}
+with the option @samp{--with-headers=@var{install-directory}/include}.
+Use the most recent kernel you can get your hands on. (If you are
+cross-compiling @theglibc{}, you need to specify
+@samp{ARCH=@var{architecture}} in the @samp{make headers_install}
+command, where @var{architecture} is the architecture name used by the
+Linux kernel, such as @samp{x86} or @samp{powerpc}.)
+
+After installing @theglibc{}, you may need to remove or rename
+directories such as @file{/usr/include/linux} and
+@file{/usr/include/asm}, and replace them with copies of directories
+such as @file{linux} and @file{asm} from
+@file{@var{install-directory}/include}. All directories present in
+@file{@var{install-directory}/include} should be copied, except that
+@theglibc{} provides its own version of @file{/usr/include/scsi}; the
+files provided by the kernel should be copied without replacing those
+provided by @theglibc{}. The @file{linux}, @file{asm} and
+@file{asm-generic} directories are required to compile programs using
+@theglibc{}; the other directories describe interfaces to the kernel but
+are not required if not compiling programs using those interfaces.
+You do not need to copy kernel headers if you did not specify an
+alternate kernel header source using @samp{--with-headers}.
+
+The Filesystem Hierarchy Standard for @gnulinuxsystems{} expects some
+components of the @glibcadj{} installation to be in
@file{/lib} and some in @file{/usr/lib}. This is handled automatically
-if you configure glibc with @samp{--prefix=/usr}. If you set some other
+if you configure @theglibc{} with @samp{--prefix=/usr}. If you set some other
prefix or allow it to default to @file{/usr/local}, then all the
components are installed there.
@@ -443,7 +438,7 @@ program.
@cindex reporting bugs
@cindex bugs, reporting
-There are probably bugs in the GNU C library. There are certainly
+There are probably bugs in @theglibc{}. There are certainly
errors and omissions in this manual. If you report them, they will get
fixed. If you don't, no one will ever know about them and they will
remain unfixed for all eternity, if not longer.
@@ -458,14 +453,14 @@ normally includes a patch or a hint on solving the problem.
To report a bug, first you must find it. With any luck, this will be the
hard part. Once you've found a bug, make sure it's really a bug. A
-good way to do this is to see if the GNU C library behaves the same way
+good way to do this is to see if @theglibc{} behaves the same way
some other C library does. If so, probably you are wrong and the
libraries are right (but not necessarily). If not, one of the libraries
-is probably wrong. It might not be the GNU library. Many historical
+is probably wrong. It might not be @theglibc{}. Many historical
Unix C libraries permit things that we don't, such as closing a file
twice.
-If you think you have found some way in which the GNU C library does not
+If you think you have found some way in which @theglibc{} does not
conform to the ISO and POSIX standards (@pxref{Standards and
Portability}), that is definitely a bug. Report it!
diff --git a/manual/intro.texi b/manual/intro.texi
index d97e262356..deaf089b10 100644
--- a/manual/intro.texi
+++ b/manual/intro.texi
@@ -9,13 +9,13 @@ in a standard @dfn{library}, which you compile and link with your
programs.
@cindex library
-The GNU C library, described in this document, defines all of the
+@Theglibc{}, described in this document, defines all of the
library functions that are specified by the @w{ISO C} standard, as well as
additional features specific to POSIX and other derivatives of the Unix
-operating system, and extensions specific to the GNU system.
+operating system, and extensions specific to @gnusystems{}.
The purpose of this manual is to tell you how to use the facilities
-of the GNU library. We have mentioned which features belong to which
+of @theglibc{}. We have mentioned which features belong to which
standards to help you identify things that are potentially non-portable
to other systems. But the emphasis in this manual is not on strict
portability.
@@ -38,7 +38,7 @@ concepts. Specifically, familiarity with ISO standard C
(@pxref{ISO C}), rather than ``traditional'' pre-ISO C dialects, is
assumed.
-The GNU C library includes several @dfn{header files}, each of which
+@Theglibc{} includes several @dfn{header files}, each of which
provides definitions and declarations for a group of related facilities;
this information is used by the C compiler when processing your program.
For example, the header file @file{stdio.h} declares facilities for
@@ -48,7 +48,7 @@ generally follows the same division as the header files.
If you are reading this manual for the first time, you should read all
of the introductory material and skim the remaining chapters. There are
-a @emph{lot} of functions in the GNU C library and it's not realistic to
+a @emph{lot} of functions in @theglibc{} and it's not realistic to
expect that you will be able to remember exactly @emph{how} to use each
and every one of them. It's more important to become generally familiar
with the kinds of facilities that the library provides, so that when you
@@ -61,12 +61,12 @@ specific information about them.
@section Standards and Portability
@cindex standards
-This section discusses the various standards and other sources that the
-GNU C library is based upon. These sources include the @w{ISO C} and
+This section discusses the various standards and other sources that @theglibc{}
+is based upon. These sources include the @w{ISO C} and
POSIX standards, and the System V and Berkeley Unix implementations.
The primary focus of this manual is to tell you how to make effective
-use of the GNU library facilities. But if you are concerned about
+use of the @glibcadj{} facilities. But if you are concerned about
making your programs compatible with these standards, or portable to
operating systems other than GNU, this can affect how you use the
library. This section gives you an overview of these standards, so that
@@ -91,14 +91,14 @@ standards each function or symbol comes from.
@subsection ISO C
@cindex ISO C
-The GNU C library is compatible with the C standard adopted by the
+@Theglibc{} is compatible with the C standard adopted by the
American National Standards Institute (ANSI):
@cite{American National Standard X3.159-1989---``ANSI C''} and later
by the International Standardization Organization (ISO):
@cite{ISO/IEC 9899:1990, ``Programming languages---C''}.
We here refer to the standard as @w{ISO C} since this is the more
general standard in respect of ratification.
-The header files and library facilities that make up the GNU library are
+The header files and library facilities that make up @theglibc{} are
a superset of those specified by the @w{ISO C} standard.@refill
@pindex gcc
@@ -131,7 +131,7 @@ not aim for completeness.
@cindex IEEE Std 1003.2
@cindex ISO/IEC 9945-2
-The GNU library is also compatible with the ISO @dfn{POSIX} family of
+@Theglibc{} is also compatible with the ISO @dfn{POSIX} family of
standards, known more formally as the @dfn{Portable Operating System
Interface for Computer Environments} (ISO/IEC 9945). They were also
published as ANSI/IEEE Std 1003. POSIX is derived mostly from various
@@ -146,7 +146,7 @@ particular kind of operating system environment, rather than general
programming language support which can run in many diverse operating
system environments.@refill
-The GNU C library implements all of the functions specified in
+@Theglibc{} implements all of the functions specified in
@cite{ISO/IEC 9945-1:1996, the POSIX System Application Program
Interface}, commonly referred to as POSIX.1. The primary extensions to
the @w{ISO C} facilities specified by this standard include file system
@@ -155,7 +155,7 @@ terminal control functions (@pxref{Low-Level Terminal Interface}), and
process control functions (@pxref{Processes}).
Some facilities from @cite{ISO/IEC 9945-2:1993, the POSIX Shell and
-Utilities standard} (POSIX.2) are also implemented in the GNU library.
+Utilities standard} (POSIX.2) are also implemented in @theglibc{}.
These include utilities for dealing with regular expressions and other
pattern matching facilities (@pxref{Pattern Matching}).
@@ -181,7 +181,7 @@ pattern matching facilities (@pxref{Pattern Matching}).
@cindex SunOS
@cindex Unix, Berkeley
-The GNU C library defines facilities from some versions of Unix which
+@Theglibc{} defines facilities from some versions of Unix which
are not formally standardized, specifically from the 4.2 BSD, 4.3 BSD,
and 4.4 BSD Unix systems (also known as @dfn{Berkeley Unix}) and from
@dfn{SunOS} (a popular 4.2 BSD derivative that includes some Unix System
@@ -202,7 +202,7 @@ The @dfn{System V Interface Description} (SVID) is a document describing
the AT&T Unix System V operating system. It is to some extent a
superset of the POSIX standard (@pxref{POSIX}).
-The GNU C library defines most of the facilities required by the SVID
+@Theglibc{} defines most of the facilities required by the SVID
that are not also required by the @w{ISO C} or POSIX standards, for
compatibility with System V Unix and other Unix systems (such as
SunOS) which include these facilities. However, many of the more
@@ -222,7 +222,7 @@ a more general standard than POSIX. X/Open owns the Unix copyright and
the XPG specifies the requirements for systems which are intended to be
a Unix system.
-The GNU C library complies to the X/Open Portability Guide, Issue 4.2,
+@Theglibc{} complies to the X/Open Portability Guide, Issue 4.2,
with all extensions common to XSI (X/Open System Interface)
compliant systems and also all X/Open UNIX extensions.
@@ -238,7 +238,7 @@ functionality is available on commercial systems.
@section Using the Library
This section describes some of the practical issues involved in using
-the GNU C library.
+@theglibc{}.
@menu
* Header Files:: How to include the header files in your
@@ -269,7 +269,7 @@ variable or says what a function does.)
@cindex definition (compared to declaration)
@cindex declaration (compared to definition)
-In order to use the facilities in the GNU C library, you should be sure
+In order to use the facilities in @theglibc{}, you should be sure
that your program source files include the appropriate header files.
This is so that the compiler has declarations of these facilities
available and can correctly process references to them. Once your
@@ -310,7 +310,7 @@ For more information about the use of header files and @samp{#include}
directives, @pxref{Header Files,,, cpp.info, The GNU C Preprocessor
Manual}.@refill
-The GNU C library provides several header files, each of which contains
+@Theglibc{} provides several header files, each of which contains
the type and macro definitions and variable and function declarations
for a group of related facilities. This means that your programs may
need to include several header files, depending on exactly which
@@ -319,8 +319,8 @@ facilities you are using.
Some library header files include other library header files
automatically. However, as a matter of programming style, you should
not rely on this; it is better to explicitly include all the header
-files required for the library facilities you are using. The GNU C
-library header files have been written in such a way that it doesn't
+files required for the library facilities you are using. The @glibcadj{}
+header files have been written in such a way that it doesn't
matter if a header file is accidentally included more than once;
including a header file a second time has no effect. Likewise, if your
program needs to include multiple header files, the order in which they
@@ -548,7 +548,6 @@ The header file @file{termios.h} reserves names prefixed with @samp{c_},
@end itemize
@comment Include the section on Creature Nest Macros.
-@comment It is in a separate file so it can be formatted into ../NOTES.
@include creature.texi
@node Roadmap to the Manual, , Using the Library, Introduction
@@ -572,7 +571,7 @@ debugging mechanism which allows you to put assertions in your code, and
have diagnostic messages printed if the tests fail.
@item
-@ref{Memory}, describes the GNU library's facilities for managing and
+@ref{Memory}, describes @theglibc{}'s facilities for managing and
using virtual and real memory, including dynamic allocation of virtual
memory. If you do not know in advance how much memory your program
needs, you can allocate it dynamically instead, and manipulate it via
@@ -714,7 +713,7 @@ macros in the library, with complete data types and function prototypes,
and says what standard or system each is derived from.
@item
-@ref{Installation}, explains how to build and install the GNU C library on
+@ref{Installation}, explains how to build and install @theglibc{} on
your system, and how to report any bugs you might find.
@item
diff --git a/manual/io.texi b/manual/io.texi
index f839138f37..bd82f76ee8 100644
--- a/manual/io.texi
+++ b/manual/io.texi
@@ -3,8 +3,8 @@
@chapter Input/Output Overview
Most programs need to do either input (reading data) or output (writing
-data), or most frequently both, in order to do anything useful. The GNU
-C library provides such a large selection of input and output functions
+data), or most frequently both, in order to do anything useful. @Theglibc{}
+provides such a large selection of input and output functions
that the hardest part is often deciding which function is most
appropriate!
@@ -65,7 +65,7 @@ closed a stream or file descriptor, you cannot do any more input or
output operations on it.
@menu
-* Streams and File Descriptors:: The GNU Library provides two ways
+* Streams and File Descriptors:: The GNU C Library provides two ways
to access the contents of files.
* File Position:: The number of bytes from the
beginning of the file.
@@ -121,17 +121,17 @@ and formatted output functions (@pxref{Formatted Output}).
If you are concerned about portability of your programs to systems other
than GNU, you should also be aware that file descriptors are not as
portable as streams. You can expect any system running @w{ISO C} to
-support streams, but non-GNU systems may not support file descriptors at
+support streams, but @nongnusystems{} may not support file descriptors at
all, or may only implement a subset of the GNU functions that operate on
-file descriptors. Most of the file descriptor functions in the GNU
-library are included in the POSIX.1 standard, however.
+file descriptors. Most of the file descriptor functions in @theglibc{}
+are included in the POSIX.1 standard, however.
@node File Position, , Streams and File Descriptors, I/O Concepts
@subsection File Position
One of the attributes of an open file is its @dfn{file position} that
keeps track of where in the file the next character is to be read or
-written. In the GNU system, and all POSIX.1 systems, the file position
+written. On @gnusystems{}, and all POSIX.1 systems, the file position
is simply an integer representing the number of bytes from the beginning
of the file.
@@ -236,7 +236,7 @@ in @ref{File System Interface}.
@subsection File Name Resolution
A file name consists of file name components separated by slash
-(@samp{/}) characters. On the systems that the GNU C library supports,
+(@samp{/}) characters. On the systems that @theglibc{} supports,
multiple successive @samp{/} characters are equivalent to a single
@samp{/} character.
@@ -304,7 +304,7 @@ but the empty string is not a meaningful file name. If you want to
refer to the current working directory, use a file name of @file{.} or
@file{./}.
-Unlike some other operating systems, the GNU system doesn't have any
+Unlike some other operating systems, @gnusystems{} don't have any
built-in support for file types (or extensions) or file versions as part
of its file name syntax. Many programs and utilities use conventions
for file names---for example, files containing C source code usually
@@ -332,7 +332,7 @@ This error is used when either the total length of a file name is
greater than @code{PATH_MAX}, or when an individual file name component
has a length greater than @code{NAME_MAX}. @xref{Limits for Files}.
-In the GNU system, there is no imposed limit on overall file name
+On @gnuhurdsystems{}, there is no imposed limit on overall file name
length, but some file systems may place limits on the length of a
component.
@@ -357,7 +357,7 @@ way to detect loops. @xref{Symbolic Links}.
@subsection Portability of File Names
The rules for the syntax of file names discussed in @ref{File Names},
-are the rules normally used by the GNU system and by other POSIX
+are the rules normally used by @gnusystems{} and by other POSIX
systems. However, other operating systems may use other conventions.
There are two reasons why it can be important for you to be aware of
@@ -389,7 +389,7 @@ some operating systems and not by others.
The POSIX.1 standard allows implementations to put additional
restrictions on file name syntax, concerning what characters are
permitted in file names and on the length of file name and file name
-component strings. However, in the GNU system, you do not need to worry
-about these restrictions; any character except the null character is
-permitted in a file name string, and there are no limits on the length
-of file name strings.
+component strings. However, on @gnusystems{}, any character except
+the null character is permitted in a file name string, and
+on @gnuhurdsystems{} there are no limits on the length of file name
+strings.
diff --git a/manual/job.texi b/manual/job.texi
index fbc7ace2c2..4efeed3451 100644
--- a/manual/job.texi
+++ b/manual/job.texi
@@ -106,8 +106,8 @@ controlling terminal,
@section Job Control is Optional
@cindex job control is optional
-Not all operating systems support job control. The GNU system does
-support job control, but if you are using the GNU library on some other
+Not all operating systems support job control. @gnusystems{} do
+support job control, but if you are using @theglibc{} on some other
system, that system may not support job control itself.
You can use the @code{_POSIX_JOB_CONTROL} macro to test at compile-time
@@ -1026,7 +1026,7 @@ to job control.
@cindex controlling terminal, determining
You can use the @code{ctermid} function to get a file name that you can
-use to open the controlling terminal. In the GNU library, it returns
+use to open the controlling terminal. In @theglibc{}, it returns
the same string all the time: @code{"/dev/tty"}. That is a special
``magic'' file name that refers to the controlling terminal of the
current process (if it has one). To find the name of the specific
diff --git a/manual/lang.texi b/manual/lang.texi
index b93ad5b5e8..baaccaa30f 100644
--- a/manual/lang.texi
+++ b/manual/lang.texi
@@ -229,7 +229,6 @@ additional variable arguments. @xref{Calling Variadics}.
variable arguments functions.
* Argument Macros:: Detailed specification of the macros
for accessing variable arguments.
-* Old Varargs:: The pre-ISO way of defining variadic functions.
@end menu
@node Variadic Prototypes
@@ -427,9 +426,6 @@ The type @code{va_list} is used for argument pointer variables.
This macro initializes the argument pointer variable @var{ap} to point
to the first of the optional arguments of the current function;
@var{last-required} must be the last required argument to the function.
-
-@xref{Old Varargs}, for an alternate definition of @code{va_start}
-found in the header file @file{varargs.h}.
@end deftypefn
@comment stdarg.h
@@ -454,7 +450,7 @@ This ends the use of @var{ap}. After a @code{va_end} call, further
@code{va_end} before returning from the function in which @code{va_start}
was invoked with the same @var{ap} argument.
-In the GNU C library, @code{va_end} does nothing, and you need not ever
+In @theglibc{}, @code{va_end} does nothing, and you need not ever
use it except for reasons of portability.
@refill
@end deftypefn
@@ -511,68 +507,6 @@ arguments facility.
@include add.c.texi
@end smallexample
-@node Old Varargs
-@subsubsection Old-Style Variadic Functions
-
-@pindex varargs.h
-Before @w{ISO C}, programmers used a slightly different facility for
-writing variadic functions. The GNU C compiler still supports it;
-currently, it is more portable than the @w{ISO C} facility, since support
-for @w{ISO C} is still not universal. The header file which defines the
-old-fashioned variadic facility is called @file{varargs.h}.
-
-Using @file{varargs.h} is almost the same as using @file{stdarg.h}.
-There is no difference in how you call a variadic function;
-see @ref{Calling Variadics}. The only difference is in how you define
-them. First of all, you must use old-style non-prototype syntax, like
-this:
-
-@smallexample
-tree
-build (va_alist)
- va_dcl
-@{
-@end smallexample
-
-Secondly, you must give @code{va_start} only one argument, like this:
-
-@smallexample
- va_list p;
- va_start (p);
-@end smallexample
-
-These are the special macros used for defining old-style variadic
-functions:
-
-@comment varargs.h
-@comment Unix
-@deffn Macro va_alist
-This macro stands for the argument name list required in a variadic
-function.
-@end deffn
-
-@comment varargs.h
-@comment Unix
-@deffn Macro va_dcl
-This macro declares the implicit argument or arguments for a variadic
-function.
-@end deffn
-
-@comment varargs.h
-@comment Unix
-@deftypefn {Macro} void va_start (va_list @var{ap})
-This macro, as defined in @file{varargs.h}, initializes the argument
-pointer variable @var{ap} to point to the first argument of the current
-function.
-@end deftypefn
-
-The other argument macros, @code{va_arg} and @code{va_end}, are the same
-in @file{varargs.h} as in @file{stdarg.h}; see @ref{Argument Macros}, for
-details.
-
-It does not work to include both @file{varargs.h} and @file{stdarg.h} in
-the same compilation; they define @code{va_start} in conflicting ways.
-
@node Null Pointer Constant
@section Null Pointer Constant
@cindex null pointer constant
@@ -629,27 +563,13 @@ This is an unsigned integer type used to represent the sizes of objects.
The result of the @code{sizeof} operator is of this type, and functions
such as @code{malloc} (@pxref{Unconstrained Allocation}) and
@code{memcpy} (@pxref{Copying and Concatenation}) accept arguments of
-this type to specify object sizes.
+this type to specify object sizes. On systems using @theglibc{}, this
+will be @w{@code{unsigned int}} or @w{@code{unsigned long int}}.
@strong{Usage Note:} @code{size_t} is the preferred way to declare any
arguments or variables that hold the size of an object.
@end deftp
-In the GNU system @code{size_t} is equivalent to either
-@w{@code{unsigned int}} or @w{@code{unsigned long int}}. These types
-have identical properties on the GNU system and, for most purposes, you
-can use them interchangeably. However, they are distinct as data types,
-which makes a difference in certain contexts.
-
-For example, when you specify the type of a function argument in a
-function prototype, it makes a difference which one you use. If the
-system header files declare @code{malloc} with an argument of type
-@code{size_t} and you declare @code{malloc} with an argument of type
-@code{unsigned int}, you will get a compilation error if @code{size_t}
-happens to be @code{unsigned long int} on your system. To avoid any
-possibility of error, when a function argument or value is supposed to
-have type @code{size_t}, never declare its type in any other way.
-
@strong{Compatibility Note:} Implementations of C before the advent of
@w{ISO C} generally used @code{unsigned int} for representing object sizes
and @code{int} for pointer subtraction results. They did not
@@ -776,7 +696,7 @@ It's equal to @code{SCHAR_MAX} if @code{char} is signed, or
@item SHRT_MIN
This is the minimum value that can be represented by a @w{@code{signed
-short int}}. On most machines that the GNU C library runs on,
+short int}}. On most machines that @theglibc{} runs on,
@code{short} integers are 16-bit quantities.
@comment limits.h
@@ -795,7 +715,7 @@ respectively.
@item INT_MIN
This is the minimum value that can be represented by a @w{@code{signed
-int}}. On most machines that the GNU C system runs on, an @code{int} is
+int}}. On most machines that @theglibc{} runs on, an @code{int} is
a 32-bit quantity.
@comment limits.h
@@ -813,7 +733,7 @@ the type @w{@code{signed int}} and the type @w{@code{unsigned int}}.
@item LONG_MIN
This is the minimum value that can be represented by a @w{@code{signed
-long int}}. On most machines that the GNU C system runs on, @code{long}
+long int}}. On most machines that @theglibc{} runs on, @code{long}
integers are 32-bit quantities, the same size as @code{int}.
@comment limits.h
@@ -831,7 +751,7 @@ These are the maximum values that can be represented by a
@item LLONG_MIN
This is the minimum value that can be represented by a @w{@code{signed
-long long int}}. On most machines that the GNU C system runs on,
+long long int}}. On most machines that @theglibc{} runs on,
@w{@code{long long}} integers are 64-bit quantities.
@comment limits.h
@@ -939,8 +859,8 @@ Sometimes, in the actual bits representing the floating point number,
the exponent is @dfn{biased} by adding a constant to it, to make it
always be represented as an unsigned quantity. This is only important
if you have some reason to pick apart the bit fields making up the
-floating point number by hand, which is something for which the GNU
-library provides no support. So this is ignored in the discussion that
+floating point number by hand, which is something for which @theglibc{}
+provides no support. So this is ignored in the discussion that
follows.
@item
@@ -961,7 +881,7 @@ the mantissa. This is a bit which is present virtually in the mantissa,
but not stored in memory because its value is always 1 in a normalized
number. The precision figure (see above) includes any hidden bits.
-Again, the GNU library provides no facilities for dealing with such
+Again, @theglibc{} provides no facilities for dealing with such
low-level aspects of the representation.
@end itemize
diff --git a/manual/libc.texinfo b/manual/libc.texinfo
index e57e4d31d1..2c1344ac84 100644
--- a/manual/libc.texinfo
+++ b/manual/libc.texinfo
@@ -4,6 +4,8 @@
@settitle The GNU C Library
@c setchapternewpage odd
+@include macros.texi
+
@comment Tell install-info what to do.
@dircategory Software libraries
@direntry
@@ -17,19 +19,24 @@
@c @smallbook
@comment %**end of header (This is for running Texinfo on a region.)
+@c Everything related to printed editions is disabled until we have
+@c resolved how to keep them in sync with the master sources of the
+@c manual.
@c sold 0.06/1.09, print run out 21may96
-@set EDITION 0.13
-@set VERSION 2.14
-@set UPDATED 2011-07-19
-@set ISBN 1-882114-55-8
+@c @set EDITION 0.13
+@c @set ISBN 1-882114-55-8
+
+@include version.texi
@set FDL_VERSION 1.3
@copying
-This file documents the GNU C library.
+This file documents @theglibc{}.
-This is Edition @value{EDITION}, last updated @value{UPDATED},
-of @cite{The GNU C Library Reference Manual}, for version @value{VERSION}.
+This is
+@c Disabled (printed editions, see above).
+@c Edition @value{EDITION} of
+@cite{The GNU C Library Reference Manual}, for version @value{VERSION}.
Copyright @copyright{} 1993--2012 Free Software Foundation, Inc.
@@ -59,22 +66,23 @@ supports it in developing GNU and promoting software freedom.''
@center with
@center Richard M. Stallman, Roland McGrath, Andrew Oram, and Ulrich Drepper
@sp 3
-@center Edition @value{EDITION}
-@sp 1
-@center last updated @value{UPDATED}
-@sp 1
+@c Disabled (printed editions, see above).
+@c @center Edition @value{EDITION}
+@c @sp 1
@center for version @value{VERSION}
@page
@vskip 0pt plus 1filll
@insertcopying
-@sp 2
-Published by the @uref{http://www.fsf.org/, Free Software Foundation} @*
+@c Disabled (printed editions, see above).
+@c @sp 2
+@c Published by the @uref{http://www.fsf.org/, Free Software Foundation} @*
@c ISBN @value{ISBN} @*
-@sp 2
-Cover art for the Free Software Foundation's printed edition
-by Etienne Suvasa.
+@c Disabled (printed editions, see above).
+@c @sp 2
+@c Cover art for the Free Software Foundation's printed edition
+@c by Etienne Suvasa.
@end titlepage
@@ -84,9 +92,11 @@ by Etienne Suvasa.
@ifnottex
@node Top, Introduction, (dir), (dir)
@top Main Menu
-This is Edition @value{EDITION}, last updated @value{UPDATED}, of
+This is
+@c Disabled (printed editions, see above).
+@c Edition @value{EDITION} of
@cite{The GNU C Library Reference Manual}, for Version @value{VERSION}
-of the GNU C Library.
+of @theglibc{}.
@end ifnottex
@include top-menu.texi
diff --git a/manual/llio.texi b/manual/llio.texi
index 8154de7416..b33909fac8 100644
--- a/manual/llio.texi
+++ b/manual/llio.texi
@@ -120,7 +120,7 @@ The maximum number of file descriptors is controlled by the
@item ENFILE
The entire system, or perhaps the file system which contains the
directory, cannot support any additional open files at the moment.
-(This problem cannot happen on the GNU system.)
+(This problem cannot happen on @gnuhurdsystems{}.)
@item ENOENT
The named file does not exist, and @code{O_CREAT} is not specified.
@@ -332,7 +332,7 @@ some input. But if the @code{O_NONBLOCK} flag is set for the file
reading any data, and reports this error.
@strong{Compatibility Note:} Most versions of BSD Unix use a different
-error code for this: @code{EWOULDBLOCK}. In the GNU library,
+error code for this: @code{EWOULDBLOCK}. In @theglibc{},
@code{EWOULDBLOCK} is an alias for @code{EAGAIN}, so it doesn't matter
which name you use.
@@ -341,8 +341,8 @@ file can also fail with @code{EAGAIN} if the kernel cannot find enough
physical memory to lock down the user's pages. This is limited to
devices that transfer with direct memory access into the user's memory,
which means it does not include terminals, since they always use
-separate buffers inside the kernel. This problem never happens in the
-GNU system.
+separate buffers inside the kernel. This problem never happens on
+@gnuhurdsystems{}.
Any condition that could result in @code{EAGAIN} can instead result in a
successful @code{read} which returns fewer bytes than requested.
@@ -483,7 +483,7 @@ flow control, where output has been suspended by receipt of a STOP
character.
@strong{Compatibility Note:} Most versions of BSD Unix use a different
-error code for this: @code{EWOULDBLOCK}. In the GNU library,
+error code for this: @code{EWOULDBLOCK}. In @theglibc{},
@code{EWOULDBLOCK} is an alias for @code{EAGAIN}, so it doesn't matter
which name you use.
@@ -492,8 +492,8 @@ file can also fail with @code{EAGAIN} if the kernel cannot find enough
physical memory to lock down the user's pages. This is limited to
devices that transfer with direct memory access into the user's memory,
which means it does not include terminals, since they always use
-separate buffers inside the kernel. This problem does not arise in the
-GNU system.
+separate buffers inside the kernel. This problem does not arise on
+@gnuhurdsystems{}.
@item EBADF
The @var{filedes} argument is not a valid file descriptor,
@@ -687,7 +687,7 @@ file offset is not valid. A file offset is invalid.
@item ESPIPE
The @var{filedes} corresponds to an object that cannot be positioned,
such as a pipe, FIFO or terminal device. (POSIX.1 specifies this error
-only for pipes and FIFOs, but in the GNU system, you always get
+only for pipes and FIFOs, but on @gnusystems{}, you always get
@code{ESPIPE} if the object is not seekable.)
@end table
@@ -776,8 +776,8 @@ character.
@comment sys/types.h
@comment POSIX.1
@deftp {Data Type} off_t
-This is an arithmetic data type used to represent file sizes.
-In the GNU system, this is equivalent to @code{fpos_t} or @code{long int}.
+This is a signed integer type used to represent file sizes. In
+@theglibc{}, this type is no narrower than @code{int}.
If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type
is transparently replaced by @code{off64_t}.
@@ -830,7 +830,7 @@ The @code{fdopen} function returns a new stream for the file descriptor
The @var{opentype} argument is interpreted in the same way as for the
@code{fopen} function (@pxref{Opening Streams}), except that
-the @samp{b} option is not permitted; this is because GNU makes no
+the @samp{b} option is not permitted; this is because @gnusystems{} make no
distinction between text and binary files. Also, @code{"w"} and
@code{"w+"} do not cause truncation of the file; these have an effect only
when opening a file, and in this case the file has already been opened.
@@ -844,7 +844,7 @@ null pointer is returned instead.
In some other systems, @code{fdopen} may fail to detect that the modes
for file descriptor do not permit the access specified by
-@code{opentype}. The GNU C library always checks for this.
+@code{opentype}. @Theglibc{} always checks for this.
@end deftypefun
For an example showing the use of the @code{fdopen} function,
@@ -1000,21 +1000,10 @@ for linked channels; see @ref{Linked Channels}.
@node Cleaning Streams
@subsection Cleaning Streams
-On the GNU system, you can clean up any stream with @code{fclean}:
-
-@comment stdio.h
-@comment GNU
-@deftypefun int fclean (FILE *@var{stream})
-Clean up the stream @var{stream} so that its buffer is empty. If
-@var{stream} is doing output, force it out. If @var{stream} is doing
-input, give the data in the buffer back to the system, arranging to
-reread it.
-@end deftypefun
-
-On other systems, you can use @code{fflush} to clean a stream in most
+You can use @code{fflush} to clean a stream in most
cases.
-You can skip the @code{fclean} or @code{fflush} if you know the stream
+You can skip the @code{fflush} if you know the stream
is already clean. A stream is clean whenever its buffer is empty. For
example, an unbuffered stream is always clean. An input stream that is
at end-of-file is clean. A line-buffered stream is clean when the last
@@ -1028,12 +1017,10 @@ not random access, there is no way to give back the excess data already
read. When an input stream reads from a random-access file,
@code{fflush} does clean the stream, but leaves the file pointer at an
unpredictable place; you must set the file pointer before doing any
-further I/O. On the GNU system, using @code{fclean} avoids both of
-these problems.
+further I/O.
Closing an output-only stream also does @code{fflush}, so this is a
-valid way of cleaning an output stream. On the GNU system, closing an
-input stream does @code{fclean}.
+valid way of cleaning an output stream.
You need not clean a stream before using its descriptor for control
operations such as setting terminal modes; these operations don't affect
@@ -1056,8 +1043,8 @@ with multiple calls to @code{read} and @code{write}, it is inefficient
because there is overhead associated with each kernel call.
Instead, many platforms provide special high-speed primitives to perform
-these @dfn{scatter-gather} operations in a single kernel call. The GNU C
-library will provide an emulation on any system that lacks these
+these @dfn{scatter-gather} operations in a single kernel call. @Theglibc{}
+will provide an emulation on any system that lacks these
primitives, so they are not a portability threat. They are defined in
@code{sys/uio.h}.
@@ -1229,7 +1216,7 @@ systems. They are also useful to share data between multiple tasks
without creating a file.
On some systems using private anonymous mmaps is more efficient than using
-@code{malloc} for large blocks. This is not an issue with the GNU C library,
+@code{malloc} for large blocks. This is not an issue with @theglibc{},
as the included @code{malloc} automatically uses @code{mmap} where appropriate.
@c Linux has some other MAP_ options, which I have not discussed here.
@@ -1471,7 +1458,7 @@ This corresponds with BSD's @code{MADV_DONTNEED}.
@end table
-@code{msync} returns @math{0} for success and @math{-1} for
+@code{madvise} returns @math{0} for success and @math{-1} for
error. Errors include:
@table @code
@@ -2167,7 +2154,7 @@ the moment. The error status for each element of @var{list} must be
checked to determine which request failed.
Another reason could be that the system wide limit of AIO requests is
-exceeded. This cannot be the case for the implementation on GNU systems
+exceeded. This cannot be the case for the implementation on @gnusystems{}
since no arbitrary limits exist.
@item EINVAL
The @var{mode} parameter is invalid or @var{nent} is larger than
@@ -2511,7 +2498,7 @@ At the point of this writing, the available implementation is a userlevel
implementation which uses threads for handling the enqueued requests.
While this implementation requires making some decisions about
limitations, hard limitations are something which is best avoided
-in the GNU C library. Therefore, the GNU C library provides a means
+in @theglibc{}. Therefore, @theglibc{} provides a means
for tuning the AIO implementation according to the individual use.
@comment aio.h
@@ -2908,7 +2895,7 @@ The symbols in this section are defined in the header file
@subsection File Access Modes
The file access modes allow a file descriptor to be used for reading,
-writing, or both. (In the GNU system, they can also allow none of these,
+writing, or both. (On @gnuhurdsystems{}, they can also allow none of these,
and allow execution of the file as a program.) The access modes are chosen
when the file is opened, and never change.
@@ -2930,13 +2917,13 @@ Open the file for write access.
Open the file for both reading and writing.
@end deftypevr
-In the GNU system (and not in other systems), @code{O_RDONLY} and
+On @gnuhurdsystems{} (and not on other systems), @code{O_RDONLY} and
@code{O_WRONLY} are independent bits that can be bitwise-ORed together,
and it is valid for either bit to be set or clear. This means that
@code{O_RDWR} is the same as @code{O_RDONLY|O_WRONLY}. A file access
mode of zero is permissible; it allows no operations that do input or
output to the file, but does allow other operations such as
-@code{fchmod}. On the GNU system, since ``read-only'' or ``write-only''
+@code{fchmod}. On @gnuhurdsystems{}, since ``read-only'' or ``write-only''
is a misnomer, @file{fcntl.h} defines additional names for the file
access modes. These names are preferred when writing GNU-specific code.
But most programs will want to be portable to other POSIX.1 systems and
@@ -2961,8 +2948,9 @@ Open the file for executing. Only defined on GNU.
@end deftypevr
To determine the file access mode with @code{fcntl}, you must extract
-the access mode bits from the retrieved file status flags. In the GNU
-system, you can just test the @code{O_READ} and @code{O_WRITE} bits in
+the access mode bits from the retrieved file status flags. On
+@gnuhurdsystems{},
+you can just test the @code{O_READ} and @code{O_WRITE} bits in
the flags word. But in other POSIX.1 systems, reading and writing
access modes are not stored as distinct bit flags. The portable way to
extract the file access mode bits is with @code{O_ACCMODE}.
@@ -2973,7 +2961,7 @@ extract the file access mode bits is with @code{O_ACCMODE}.
This macro stands for a mask that can be bitwise-ANDed with the file
status flag value to produce a value representing the file access mode.
The mode will be @code{O_RDONLY}, @code{O_WRONLY}, or @code{O_RDWR}.
-(In the GNU system it could also be zero, and it never includes the
+(On @gnuhurdsystems{} it could also be zero, and it never includes the
@code{O_EXEC} bit.)
@end deftypevr
@@ -3046,15 +3034,16 @@ If the named file is a terminal device, don't make it the controlling
terminal for the process. @xref{Job Control}, for information about
what it means to be the controlling terminal.
-In the GNU system and 4.4 BSD, opening a file never makes it the
-controlling terminal and @code{O_NOCTTY} is zero. However, other
-systems may use a nonzero value for @code{O_NOCTTY} and set the
+On @gnuhurdsystems{} and 4.4 BSD, opening a file never makes it the
+controlling terminal and @code{O_NOCTTY} is zero. However, @gnulinuxsystems{}
+and some other systems use a nonzero value for @code{O_NOCTTY} and set the
controlling terminal when you open a file that is a terminal device; so
to be portable, use @code{O_NOCTTY} when it is important to avoid this.
@cindex controlling terminal, setting
@end deftypevr
-The following three file name translation flags exist only in the GNU system.
+The following three file name translation flags exist only on
+@gnuhurdsystems{}.
@comment fcntl.h
@comment GNU
@@ -3430,7 +3419,7 @@ function:
The lock cannot be set because it is blocked by an existing lock on the
file. Some systems use @code{EAGAIN} in this case, and other systems
use @code{EACCES}; your program should treat them alike, after
-@code{F_SETLK}. (The GNU system always uses @code{EAGAIN}.)
+@code{F_SETLK}. (@gnulinuxhurdsystems{} always use @code{EAGAIN}.)
@item EBADF
Either: the @var{filedes} argument is invalid; you requested a read lock
@@ -3607,7 +3596,7 @@ There is no process or process group corresponding to @var{pid}.
@cindex generic i/o control operations
@cindex IOCTLs
-The GNU system can handle most input/output operations on many different
+@gnusystems{} can handle most input/output operations on many different
devices and objects in terms of a few file primitives - @code{read},
@code{write} and @code{lseek}. However, most devices also have a few
peculiar operations which do not fit into this model. Such as:
diff --git a/manual/locale.texi b/manual/locale.texi
index 23ad8bcdb3..2f10fcd2af 100644
--- a/manual/locale.texi
+++ b/manual/locale.texi
@@ -350,8 +350,8 @@ The empty name says to select a locale based on environment variables.
@end table
Defining and installing named locales is normally a responsibility of
-the system administrator at your site (or the person who installed the
-GNU C library). It is also possible for the user to create private
+the system administrator at your site (or the person who installed
+@theglibc{}). It is also possible for the user to create private
locales. All this will be discussed later when describing the tool to
do so.
@comment (@pxref{Building Locale Files}).
@@ -889,7 +889,7 @@ The same as the value returned by @code{localeconv} in the
@item YESEXPR
The return value is a regular expression which can be used with the
@code{regex} function to recognize a positive response to a yes/no
-question. The GNU C library provides the @code{rpmatch} function for
+question. @Theglibc{} provides the @code{rpmatch} function for
easier handling in applications.
@item NOEXPR
The return value is a regular expression which can be used with the
@@ -1048,7 +1048,7 @@ than given by the field width, the displayed value is rounded. If the
number of fractional digits is selected to be zero, no decimal point is
printed.
-As a GNU extension, the @code{strfmon} implementation in the GNU libc
+As a GNU extension, the @code{strfmon} implementation in @theglibc{}
allows an optional @samp{L} next as a format modifier. If this modifier
is given, the argument is expected to be a @code{long double} instead of
a @code{double} value.
@@ -1179,7 +1179,7 @@ sure that you localize the answers too. It would be very bad habit to
ask a question in one language and request the answer in another, often
English.
-The GNU C library contains @code{rpmatch} to give applications easy
+@Theglibc{} contains @code{rpmatch} to give applications easy
access to the corresponding locale definitions.
@comment GNU
@@ -1203,7 +1203,7 @@ The answer matched neither the @code{YESEXPR} nor the @code{NOEXPR}
regular expression.
@end table
-This function is not standardized but available beside in GNU libc at
+This function is not standardized but available beside in @theglibc{} at
least also in the IBM AIX library.
@end deftypefun
diff --git a/manual/macros.texi b/manual/macros.texi
new file mode 100644
index 0000000000..daaf1c0aad
--- /dev/null
+++ b/manual/macros.texi
@@ -0,0 +1,50 @@
+@c Define common macros used to keep phrasing consistent in the manual.
+
+@ifclear MACROS
+@set MACROS
+
+@c Names used to refer to the library, as noun phrases at the start or
+@c not at the start of a sentence.
+@macro Theglibc
+The GNU C Library
+@end macro
+@macro theglibc
+the GNU C Library
+@end macro
+
+@c Name used to refer to the library as an adjective.
+@macro glibcadj
+GNU C Library
+@end macro
+
+@c Description applying to all GNU systems; that is, used in
+@c describing a property of a system such that no system without that
+@c property would be considered a variant of the GNU system.
+@macro gnusystems
+GNU systems
+@end macro
+
+@c Systems that are not GNU systems.
+@macro nongnusystems
+non-GNU systems
+@end macro
+
+@c Description applying to GNU/Linux and GNU/Hurd systems, but not
+@c necessarily to other variants of the GNU system.
+@macro gnulinuxhurdsystems
+GNU/Linux and GNU/Hurd systems
+@end macro
+
+@c Descrption applying to GNU/Hurd systems; that is, systems using the
+@c GNU Hurd with the GNU C Library.
+@macro gnuhurdsystems
+GNU/Hurd systems
+@end macro
+
+@c Descrption applying to GNU/Linux systems; that is, systems using
+@c the Linux kernel with the GNU C Library.
+@macro gnulinuxsystems
+GNU/Linux systems
+@end macro
+
+@end ifclear
diff --git a/manual/maint.texi b/manual/maint.texi
index 567db981a3..e1fdbdbd2c 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -4,8 +4,8 @@
@menu
* Source Layout:: How to add new functions or header files
- to the GNU C library.
-* Porting:: How to port the GNU C library to
+ to the GNU C Library.
+* Porting:: How to port the GNU C Library to
a new machine or operating system.
@end menu
@@ -105,9 +105,9 @@ This variable is used for secondary object files needed to build
@end table
@node Porting
-@appendixsec Porting the GNU C Library
+@appendixsec Porting @theglibc{}
-The GNU C library is written to be easily portable to a variety of
+@Theglibc{} is written to be easily portable to a variety of
machines and operating systems. Machine- and operating system-dependent
functions are well separated to make it easy to add implementations for
new machines or operating systems. This section describes the layout of
@@ -399,13 +399,13 @@ This directory is for @code{socket} and related functions on Unix systems.
@item mach
This is the directory for things based on the Mach microkernel from CMU
-(including the GNU operating system). Other basic operating systems
+(including @gnuhurdsystems{}). Other basic operating systems
(VMS, for example) would have their own directories at the top level of
the @file{sysdeps} hierarchy, parallel to @file{unix} and @file{mach}.
@end table
@node Porting to Unix
-@appendixsubsec Porting the GNU C Library to Unix Systems
+@appendixsubsec Porting @theglibc{} to Unix Systems
Most Unix systems are fundamentally very similar. There are variations
between different machines, and variations in what facilities are
@@ -452,10 +452,10 @@ generated are @file{ioctls.h}, @file{errnos.h}, @file{sys/param.h}, and
@c It's not anymore true. glibc 2.1 cannot be used with K&R compilers.
@c --drepper
-Although the GNU C library implements the @w{ISO C} library facilities, you
-@emph{can} use the GNU C library with traditional, ``pre-ISO'' C
+Although @theglibc{} implements the @w{ISO C} library facilities, you
+@emph{can} use @theglibc{} with traditional, ``pre-ISO'' C
compilers. However, you need to be careful because the content and
-organization of the GNU C library header files differs from that of
+organization of the @glibcadj{} header files differs from that of
traditional C implementations. This means you may need to make changes
to your program in order to get it to compile.
@end ignore
diff --git a/manual/math.texi b/manual/math.texi
index 01e258f415..9242b539ad 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -111,8 +111,8 @@ These constants come from the Unix98 standard and were also available in
defined. The default set of features includes these constants.
@xref{Feature Test Macros}.
-All values are of type @code{double}. As an extension, the GNU C
-library also defines these constants with type @code{long double}. The
+All values are of type @code{double}. As an extension, @theglibc{}
+also defines these constants with type @code{long double}. The
@code{long double} macros have a lowercase @samp{l} appended to their
names: @code{M_El}, @code{M_PIl}, and so forth. These are only
available if @code{_GNU_SOURCE} is defined.
@@ -121,7 +121,7 @@ available if @code{_GNU_SOURCE} is defined.
@emph{Note:} Some programs use a constant named @code{PI} which has the
same value as @code{M_PI}. This constant is not standard; it may have
appeared in some old AT&T headers, and is mentioned in Stroustrup's book
-on C++. It infringes on the user's name space, so the GNU C library
+on C++. It infringes on the user's name space, so @theglibc{}
does not define it. Fixing programs written to expect it is simple:
replace @code{PI} with @code{M_PI} throughout, or put @samp{-DPI=M_PI}
on the compiler command line.
@@ -217,7 +217,7 @@ to cope with its absence.
@cindex complex trigonometric functions
@w{ISO C99} defines variants of the trig functions which work on
-complex numbers. The GNU C library provides these functions, but they
+complex numbers. @Theglibc{} provides these functions, but they
are only useful if your compiler supports the new complex types defined
by the standard.
@c XXX Change this when gcc is fixed. -zw
@@ -1275,7 +1275,7 @@ generator. There is no standard meaning for a particular seed value;
the same seed, used in different C libraries or on different CPU types,
will give you different random numbers.
-The GNU library supports the standard @w{ISO C} random number functions
+@Theglibc{} supports the standard @w{ISO C} random number functions
plus two other sets derived from BSD and SVID. The BSD and @w{ISO C}
functions provide identical, somewhat limited functionality. If only a
small number of random bits are required, we recommend you use the
@@ -1306,7 +1306,7 @@ To use these facilities, you should include the header file
@comment ISO
@deftypevr Macro int RAND_MAX
The value of this macro is an integer constant representing the largest
-value the @code{rand} function can return. In the GNU library, it is
+value the @code{rand} function can return. In @theglibc{}, it is
@code{2147483647}, which is the largest signed integer representable in
32 bits. In other libraries, it may be as low as @code{32767}.
@end deftypevr
@@ -1355,7 +1355,7 @@ available.
This section describes a set of random number generation functions that
are derived from BSD. There is no advantage to using these functions
-with the GNU C library; we support them for BSD compatibility only.
+with @theglibc{}; we support them for BSD compatibility only.
The prototypes for these functions are in @file{stdlib.h}.
@pindex stdlib.h
@@ -1419,7 +1419,7 @@ the user and can only be modified by these functions. This makes it
hard to deal with situations where each thread should have its own
pseudo-random number generator.
-The GNU C library contains four additional functions which contain the
+@Theglibc{} contains four additional functions which contain the
state as an explicit parameter and therefore make it possible to handle
thread-local PRNGs. Beside this there is no difference. In fact, the
four functions already discussed are implemented internally using the
@@ -1824,7 +1824,7 @@ that the cost of the function calls themselves is not negligible.
Modern processors can often execute the operations themselves
very fast, but the function call disrupts the instruction pipeline.
-For this reason the GNU C Library provides optimizations for many of the
+For this reason @theglibc{} provides optimizations for many of the
frequently-used math functions. When GNU CC is used and the user
activates the optimizer, several new inline functions and macros are
defined. These new functions and macros have the same names as the
diff --git a/manual/memory.texi b/manual/memory.texi
index da1656c868..35fed23c7f 100644
--- a/manual/memory.texi
+++ b/manual/memory.texi
@@ -5,9 +5,9 @@
@cindex storage allocation
This chapter describes how processes manage and use memory in a system
-that uses the GNU C library.
+that uses @theglibc{}.
-The GNU C Library has several functions for dynamically allocating
+@Theglibc{} has several functions for dynamically allocating
virtual memory in various ways. They vary in generality and in
efficiency. The library also provides functions for controlling paging
and allocation of real memory.
@@ -47,7 +47,7 @@ just a flag saying it is all zeroes.
The same frame of real memory or backing store can back multiple virtual
pages belonging to multiple processes. This is normally the case, for
-example, with virtual memory occupied by GNU C library code. The same
+example, with virtual memory occupied by @glibcadj{} code. The same
real memory frame containing the @code{printf} function backs a virtual
memory page in each of the existing processes that has a @code{printf}
call in its program.
@@ -100,7 +100,7 @@ Allocation and C}).
@cindex constants
Once that program begins to execute, it uses programmatic allocation to
-gain additional memory. In a C program with the GNU C library, there
+gain additional memory. In a C program with @theglibc{}, there
are two kinds of programmatic allocation: automatic and dynamic.
@xref{Memory Allocation and C}.
@@ -158,7 +158,7 @@ grows, but doesn't shrink when the stack shrinks.
This section covers how ordinary programs manage storage for their data,
including the famous @code{malloc} function and some fancier facilities
-special the GNU C library and GNU Compiler.
+special @theglibc{} and GNU Compiler.
@menu
* Memory Allocation and C:: How to get different kinds of allocation in C.
@@ -202,7 +202,7 @@ that varies. In other C implementations, it must be a constant.
@end itemize
A third important kind of memory allocation, @dfn{dynamic allocation},
-is not supported by C variables but is available via GNU C library
+is not supported by C variables but is available via @glibcadj{}
functions.
@cindex dynamic memory allocation
@@ -234,8 +234,8 @@ as you want.
Dynamic allocation is not supported by C variables; there is no storage
class ``dynamic'', and there can never be a C variable whose value is
stored in dynamically allocated space. The only way to get dynamically
-allocated memory is via a system call (which is generally via a GNU C
-library function call), and the only way to refer to dynamically
+allocated memory is via a system call (which is generally via a @glibcadj{}
+function call), and the only way to refer to dynamically
allocated space is through a pointer. Because it is less convenient,
and because the actual process of dynamic allocation requires more
computation time, programmers generally use dynamic allocation only when
@@ -379,7 +379,7 @@ savestring (const char *ptr, size_t len)
@end smallexample
The block that @code{malloc} gives you is guaranteed to be aligned so
-that it can hold any type of data. In the GNU system, the address is
+that it can hold any type of data. On @gnusystems{}, the address is
always a multiple of eight on most systems, and a multiple of 16 on
64-bit systems. Only rarely is any higher boundary (such as a page
boundary) necessary; for those cases, use @code{memalign},
@@ -591,7 +591,7 @@ more time to minimize the wasted space.
@end ignore
-As opposed to other versions, the @code{malloc} in the GNU C Library
+As opposed to other versions, the @code{malloc} in @theglibc{}
does not round up block sizes to powers of two, neither for large nor
for small sizes. Neighboring chunks can be coalesced on a @code{free}
no matter what their size is. This makes the implementation suitable
@@ -614,13 +614,13 @@ after calling @code{free} wastes memory. The size threshold for
@cindex alignment (with @code{malloc})
@pindex stdlib.h
The address of a block returned by @code{malloc} or @code{realloc} in
-the GNU system is always a multiple of eight (or sixteen on 64-bit
+@gnusystems{} is always a multiple of eight (or sixteen on 64-bit
systems). If you need a block whose address is a multiple of a higher
power of two than that, use @code{memalign}, @code{posix_memalign}, or
@code{valloc}. @code{memalign} is declared in @file{malloc.h} and
@code{posix_memalign} is declared in @file{stdlib.h}.
-With the GNU library, you can use @code{free} to free the blocks that
+With @theglibc{}, you can use @code{free} to free the blocks that
@code{memalign}, @code{posix_memalign}, and @code{valloc} return. That
does not work in BSD, however---BSD does not provide any way to free
such blocks.
@@ -834,7 +834,7 @@ recompile your application.
@subsubsection Memory Allocation Hooks
@cindex allocation hooks, for @code{malloc}
-The GNU C library lets you modify the behavior of @code{malloc},
+@Theglibc{} lets you modify the behavior of @code{malloc},
@code{realloc}, and @code{free} by specifying appropriate hook
functions. You can use these hooks to help you debug programs that use
dynamic memory allocation, for example.
@@ -1149,7 +1149,7 @@ Long running programs must assure that dynamically allocated objects are
freed at the end of their lifetime. If this does not happen the system
runs out of memory, sooner or later.
-The @code{malloc} implementation in the GNU C library provides some
+The @code{malloc} implementation in @theglibc{} provides some
simple means to detect such leaks and obtain some information to find
the location. To do this the application must be started in a special
mode which is enabled by an environment variable. There are no speed
@@ -1313,8 +1313,8 @@ If you take a look at the output it will look similar to this:
What this all means is not really important since the trace file is not
meant to be read by a human. Therefore no attention is given to
-readability. Instead there is a program which comes with the GNU C
-library which interprets the traces and outputs a summary in an
+readability. Instead there is a program which comes with @theglibc{}
+which interprets the traces and outputs a summary in an
user-friendly way. The program is called @code{mtrace} (it is in fact a
Perl script) and it takes one or two arguments. In any case the name of
the file with the trace output must be specified. If an optional
@@ -2295,7 +2295,7 @@ the one you would get from an infinite recursion; probably a
segmentation violation (@pxref{Program Error Signals}).
@item
-Some non-GNU systems fail to support @code{alloca}, so it is less
+Some @nongnusystems{} fail to support @code{alloca}, so it is less
portable. However, a slower emulation of @code{alloca} written in C
is available for use on systems with this deficiency.
@end itemize
@@ -2344,7 +2344,7 @@ The symbols in this section are declared in @file{unistd.h}.
You will not normally use the functions in this section, because the
functions described in @ref{Memory Allocation} are easier to use. Those
-are interfaces to a GNU C Library memory allocator that uses the
+are interfaces to a @glibcadj{} memory allocator that uses the
functions below itself. The functions below are simple interfaces to
system calls.
@@ -2526,7 +2526,7 @@ define the macro @code{_POSIX_MEMLOCK_RANGE} and the file
@code{limits.h} define the macro @code{PAGESIZE} to be the size of a
memory page in bytes. It requires that when the @code{mlockall} and
@code{munlockall} functions are available, the @file{unistd.h} file
-define the macro @code{_POSIX_MEMLOCK}. The GNU C library conforms to
+define the macro @code{_POSIX_MEMLOCK}. @Theglibc{} conforms to
this requirement.
@comment sys/mman.h
diff --git a/manual/message.texi b/manual/message.texi
index e44545a311..3fc6d249f0 100644
--- a/manual/message.texi
+++ b/manual/message.texi
@@ -17,7 +17,7 @@ A better solution is to keep the message sets for each language are kept
in separate files which are loaded at runtime depending on the language
selection of the user.
-The GNU C Library provides two different sets of functions to support
+@Theglibc{} provides two different sets of functions to support
message translation. The problem is that neither of the interfaces is
officially defined by the POSIX standard. The @code{catgets} family of
functions is defined in the X/Open standard but this is derived from
@@ -170,8 +170,8 @@ is
@end smallexample
@noindent
-where @var{prefix} is given to @code{configure} while installing the GNU
-C Library (this value is in many cases @code{/usr} or the empty string).
+where @var{prefix} is given to @code{configure} while installing @theglibc{}
+(this value is in many cases @code{/usr} or the empty string).
The remaining problem is to decide which must be used. The value
decides about the substitution of the format elements mentioned above.
@@ -439,11 +439,11 @@ detail in the next section.
Files in this other format are not human readable. To be easy to use by
programs it is a binary file. But the format is byte order independent
so translation files can be shared by systems of arbitrary architecture
-(as long as they use the GNU C Library).
+(as long as they use @theglibc{}).
Details about the binary file format are not important to know since
these files are always created by the @code{gencat} program. The
-sources of the GNU C Library also provide the sources for the
+sources of @theglibc{} also provide the sources for the
@code{gencat} program and so the interested reader can look through
these source files to learn about the file format.
@@ -730,11 +730,10 @@ translation in the Uniforum group. There never was a real standard
defined but still the interface was used in Sun's operation systems.
Since this approach fits better in the development process of free
software it is also used throughout the GNU project and the GNU
-@file{gettext} package provides support for this outside the GNU C
-Library.
+@file{gettext} package provides support for this outside @theglibc{}.
The code of the @file{libintl} from GNU @file{gettext} is the same as
-the code in the GNU C Library. So the documentation in the GNU
+the code in @theglibc{}. So the documentation in the GNU
@file{gettext} manual is also valid for the functionality here. The
following text will describe the library functions in detail. But the
numerous helper programs are not described in this manual. Instead
@@ -982,7 +981,7 @@ As the functions described in the last sections already mention separate
sets of messages can be selected by a @dfn{domain name}. This is a
simple string which should be unique for each program part with uses a
separate domain. It is possible to use in one program arbitrary many
-domains at the same time. E.g., the GNU C Library itself uses a domain
+domains at the same time. E.g., @theglibc{} itself uses a domain
named @code{libc} while the program using the C Library could use a
domain named @code{foo}. The important point is that at any time
exactly one domain is active. This is controlled with the following
@@ -1128,7 +1127,7 @@ form, the second the plural form.
This has the consequence that programs without language catalogs can
display the correct strings only if the program itself is written using
-a Germanic language. This is a limitation but since the GNU C library
+a Germanic language. This is a limitation but since @theglibc{}
(as well as the GNU @code{gettext} package) are written as part of the
GNU package and the coding standards for the GNU project require program
being written in English, this solution nevertheless fulfills its
@@ -1552,7 +1551,7 @@ functions as well which look almost identical, except for the parameters
and the call to the underlying function.
Now there is of course the question why such functions do not exist in
-the GNU C library? There are two parts of the answer to this question.
+@theglibc{}? There are two parts of the answer to this question.
@itemize @bullet
@item
@@ -1666,8 +1665,8 @@ The @var{domain_name} part is the name which was either registered using
the @code{textdomain} function or which was given to @code{dgettext} or
@code{dcgettext} as the first parameter. Now it becomes obvious that a
good choice for the domain name in the program code is a string which is
-closely related to the program/package name. E.g., for the GNU C
-Library the domain name is @code{libc}.
+closely related to the program/package name. E.g., for @theglibc{}
+the domain name is @code{libc}.
@noindent
A limit piece of example code should show how the programmer is supposed
@@ -1787,7 +1786,7 @@ different character sets the user has to be careful.
@node Helper programs for gettext
@subsection Programs to handle message catalogs for @code{gettext}
-The GNU C Library does not contain the source code for the programs to
+@Theglibc{} does not contain the source code for the programs to
handle message catalogs for the @code{gettext} functions. As part of
the GNU project the GNU gettext package contains everything the
developer needs. The functionality provided by the tools in this
diff --git a/manual/nss.texi b/manual/nss.texi
index 962758329b..29fa4cc8d9 100644
--- a/manual/nss.texi
+++ b/manual/nss.texi
@@ -12,9 +12,9 @@ Network Information Service (NIS) and the Domain Name Service (DNS))
became popular, and were hacked into the C library, usually with a fixed
search order (@pxref{frobnicate, , ,jargon, The Jargon File}).
-The GNU C Library contains a cleaner solution of this problem. It is
+@Theglibc{} contains a cleaner solution of this problem. It is
designed after a method used by Sun Microsystems in the C library of
-@w{Solaris 2}. GNU C Library follows their name and calls this
+@w{Solaris 2}. @Theglibc{} follows their name and calls this
scheme @dfn{Name Service Switch} (NSS).
Though the interface might be similar to Sun's version there is no
@@ -39,7 +39,7 @@ advantages:
@enumerate
@item
-Contributors can add new services without adding them to GNU C Library.
+Contributors can add new services without adding them to @theglibc{}.
@item
The modules can be updated separately.
@item
@@ -364,7 +364,7 @@ system @file{nss_files.so.2}. This is the difference mentioned above.
Sun's NSS modules are usable as modules which get indirectly loaded
only.
-The NSS modules in the GNU C Library are prepared to be used as normal
+The NSS modules in @theglibc{} are prepared to be used as normal
libraries themselves. This is @emph{not} true at the moment, though.
However, the organization of the name space in the modules does not make it
impossible like it is for Solaris. Now you can see why the modules are
@@ -528,8 +528,8 @@ completely aside).
@node Adding another Service to NSS, NSS Module Function Internals, Extending NSS, Extending NSS
@subsection Adding another Service to NSS
-The sources for a new service need not (and should not) be part of the
-GNU C Library itself. The developer retains complete control over the
+The sources for a new service need not (and should not) be part of @theglibc{}
+itself. The developer retains complete control over the
sources and its development. The links between the C library and the
new service module consists solely of the interface functions.
diff --git a/manual/pattern.texi b/manual/pattern.texi
index c2a42cd843..28b1d74b9f 100644
--- a/manual/pattern.texi
+++ b/manual/pattern.texi
@@ -2,7 +2,7 @@
@c %MENU% Matching shell ``globs'' and regular expressions
@chapter Pattern Matching
-The GNU C Library provides pattern matching facilities for two kinds of
+@Theglibc{} provides pattern matching facilities for two kinds of
patterns: regular expressions and file-name wildcards. The library also
provides a facility for expanding variable and command references and
parsing text into words in the way the shell does.
@@ -36,7 +36,7 @@ returns the nonzero value @code{FNM_NOMATCH}. The arguments
The argument @var{flags} is a combination of flag bits that alter the
details of matching. See below for a list of the defined flags.
-In the GNU C Library, @code{fnmatch} cannot experience an ``error''---it
+In @theglibc{}, @code{fnmatch} cannot experience an ``error''---it
always returns an answer for whether the match succeeds. However, other
implementations of @code{fnmatch} might sometimes report ``errors''.
They would do so by returning nonzero values that are not equal to
@@ -668,9 +668,9 @@ type @code{glob64_t} which were allocated by @code{glob64}.
@node Regular Expressions
@section Regular Expression Matching
-The GNU C library supports two interfaces for matching regular
+@Theglibc{} supports two interfaces for matching regular
expressions. One is the standard POSIX.2 interface, and the other is
-what the GNU system has had for many years.
+what @theglibc{} has had for many years.
Both interfaces are declared in the header file @file{regex.h}.
If you define @w{@code{_POSIX_C_SOURCE}}, then only the POSIX.2
diff --git a/manual/pipe.texi b/manual/pipe.texi
index 67e446f2d1..21a8a34978 100644
--- a/manual/pipe.texi
+++ b/manual/pipe.texi
@@ -74,8 +74,8 @@ The process has too many files open.
@item ENFILE
There are too many open files in the entire system. @xref{Error Codes},
-for more information about @code{ENFILE}. This error never occurs in
-the GNU system.
+for more information about @code{ENFILE}. This error never occurs on
+@gnuhurdsystems{}.
@end table
@end deftypefun
diff --git a/manual/process.texi b/manual/process.texi
index 53d467c1c3..e962941503 100644
--- a/manual/process.texi
+++ b/manual/process.texi
@@ -55,8 +55,8 @@ until the subprogram terminates before you can do anything else.
@comment ISO
@deftypefun int system (const char *@var{command})
@pindex sh
-This function executes @var{command} as a shell command. In the GNU C
-library, it always uses the default shell @code{sh} to run the command.
+This function executes @var{command} as a shell command. In @theglibc{},
+it always uses the default shell @code{sh} to run the command.
In particular, it searches the directories in @code{PATH} to find
programs to execute. The return value is @code{-1} if it wasn't
possible to create the shell process, and otherwise is the status of the
@@ -151,7 +151,7 @@ program should include the header files @file{unistd.h} and
@comment POSIX.1
@deftp {Data Type} pid_t
The @code{pid_t} data type is a signed integer type which is capable
-of representing a process ID. In the GNU library, this is an @code{int}.
+of representing a process ID. In @theglibc{}, this is an @code{int}.
@end deftp
@comment unistd.h
@@ -260,8 +260,8 @@ do a long jump out of) the function that called @code{vfork}! This
would leave the parent process's control information very confused. If
in doubt, use @code{fork} instead.
-Some operating systems don't really implement @code{vfork}. The GNU C
-library permits you to use @code{vfork} on all systems, but actually
+Some operating systems don't really implement @code{vfork}. @Theglibc{}
+permits you to use @code{vfork} on all systems, but actually
executes @code{fork} if @code{vfork} isn't available. If you follow
the proper precautions for using @code{vfork}, your program will still
work even if the system uses @code{fork} instead.
@@ -350,8 +350,8 @@ file name searching as the @code{execvp} function.
@end deftypefun
The size of the argument list and environment list taken together must
-not be greater than @code{ARG_MAX} bytes. @xref{General Limits}. In
-the GNU system, the size (which compares against @code{ARG_MAX})
+not be greater than @code{ARG_MAX} bytes. @xref{General Limits}. On
+@gnuhurdsystems{}, the size (which compares against @code{ARG_MAX})
includes, for each string, the number of characters in the string, plus
the size of a @code{char *}, plus one, rounded up to a multiple of the
size of a @code{char *}. Other systems may have somewhat different
@@ -366,7 +366,7 @@ usual file name errors (@pxref{File Name Errors}), the following
@table @code
@item E2BIG
The combined size of the new program's argument list and environment
-list is larger than @code{ARG_MAX} bytes. The GNU system has no
+list is larger than @code{ARG_MAX} bytes. @gnuhurdsystems{} have no
specific limit on the argument list size, so this error code cannot
result, but you may get @code{ENOMEM} instead if the arguments are too
big for available memory.
@@ -406,7 +406,7 @@ Pending alarms. @xref{Setting an Alarm}.
@item
Current working directory and root directory. @xref{Working
-Directory}. In the GNU system, the root directory is not copied when
+Directory}. On @gnuhurdsystems{}, the root directory is not copied when
executing a setuid program; instead the system default root directory
is used for the new program.
@@ -694,11 +694,11 @@ signal number of the signal that caused the child process to stop.
@node BSD Wait Functions
@section BSD Process Wait Functions
-The GNU library also provides these related facilities for compatibility
+@Theglibc{} also provides these related facilities for compatibility
with BSD Unix. BSD uses the @code{union wait} data type to represent
status values rather than an @code{int}. The two representations are
-actually interchangeable; they describe the same bit patterns. The GNU
-C Library defines macros such as @code{WEXITSTATUS} so that they will
+actually interchangeable; they describe the same bit patterns. @Theglibc{}
+defines macros such as @code{WEXITSTATUS} so that they will
work on either kind of object, and the @code{wait} function is defined
to accept either type of pointer as its @var{status-ptr} argument.
diff --git a/manual/resource.texi b/manual/resource.texi
index 173ed41e7e..cb25d2440c 100644
--- a/manual/resource.texi
+++ b/manual/resource.texi
@@ -42,9 +42,6 @@ Just the current process.
All child processes (direct and indirect) that have already terminated.
@end table
-In the GNU system, you can also inquire about a particular child process
-by specifying its process ID.
-
The return value of @code{getrusage} is zero for success, and @code{-1}
for failure.
@@ -522,7 +519,7 @@ The process tried to set its current limit beyond its maximum limit.
When multiple processes simultaneously require CPU time, the system's
scheduling policy and process CPU priorities determine which processes
get it. This section describes how that determination is made and
-GNU C library functions to control it.
+@glibcadj{} functions to control it.
It is common to refer to CPU scheduling simply as scheduling and a
process' CPU priority simply as the process' priority, with the CPU
@@ -537,7 +534,7 @@ CPU scheduling is a complex issue and different systems do it in wildly
different ways. New ideas continually develop and find their way into
the intricacies of the various systems' scheduling algorithms. This
section discusses the general concepts, some specifics of systems
-that commonly use the GNU C library, and some standards.
+that commonly use @theglibc{}, and some standards.
For simplicity, we talk about CPU contention as if there is only one CPU
in the system. But all the same principles apply when a processor has
@@ -746,7 +743,7 @@ that has absolute priority higher than 0.
@node Basic Scheduling Functions
@subsection Basic Scheduling Functions
-This section describes functions in the GNU C library for setting the
+This section describes functions in @theglibc{} for setting the
absolute priority and scheduling policy of a process.
@strong{Portability Note:} On systems that have the functions in this
@@ -759,7 +756,7 @@ functions to fine tune the scheduling are in @ref{Traditional Scheduling}.
Don't try to make too much out of the naming and structure of these
functions. They don't match the concepts described in this manual
because the functions are as defined by POSIX.1b, but the implementation
-on systems that use the GNU C library is the inverse of what the POSIX
+on systems that use @theglibc{} is the inverse of what the POSIX
structure contemplates. The POSIX scheme assumes that the primary
scheduling parameter is the scheduling policy and that the priority
value, if any, is a parameter of the scheduling policy. In the
@@ -1107,7 +1104,7 @@ other process owned by the same user (or effective user). But only a
privileged process can lower its nice value. A privileged process can
also raise or lower another process' nice value.
-GNU C Library functions for getting and setting nice values are described in
+@glibcadj{} functions for getting and setting nice values are described in
@xref{Traditional Scheduling Functions}.
@node Traditional Scheduling Functions
@@ -1289,7 +1286,7 @@ The POSIX standard up to this date is of not much help to solve this
problem. The Linux kernel provides a set of interfaces to allow
specifying @emph{affinity sets} for a process. The scheduler will
schedule the thread or process on CPUs specified by the affinity
-masks. The interfaces which the GNU C library define follow to some
+masks. The interfaces which @theglibc{} define follow to some
extend the Linux kernel interface.
@comment sched.h
@@ -1554,7 +1551,7 @@ increases its memory usage). The value returned for
If all applications together constantly use more than that amount of
memory the system is in trouble.
-The GNU C library provides in addition to these already described way to
+@Theglibc{} provides in addition to these already described way to
get this information two functions. They are declared in the file
@file{sys/sysinfo.h}. Programmers should prefer to use the
@code{sysconf} method described above.
@@ -1610,7 +1607,7 @@ processors and so the call
returns the number of processors which are currently online (i.e.,
available).
-For these two pieces of information the GNU C library also provides
+For these two pieces of information @theglibc{} also provides
functions to get the information directly. The functions are declared
in @file{sys/sysinfo.h}.
diff --git a/manual/search.texi b/manual/search.texi
index 0afd0aecd0..498832bdd9 100644
--- a/manual/search.texi
+++ b/manual/search.texi
@@ -65,7 +65,7 @@ int comparison_fn_t (const void *, const void *);
@cindex array search function
Generally searching for a specific element in an array means that
-potentially all elements must be checked. The GNU C library contains
+potentially all elements must be checked. @Theglibc{} contains
functions to perform linear search. The prototypes for the following
two functions can be found in @file{search.h}.
@@ -269,8 +269,8 @@ information.
The weakest aspect of this function is that there can be at most one
hashing table used through the whole program. The table is allocated
-in local memory out of control of the programmer. As an extension the
-GNU C library provides an additional set of functions with an reentrant
+in local memory out of control of the programmer. As an extension @theglibc{}
+provides an additional set of functions with an reentrant
interface which provide a similar interface but which allow to keep
arbitrarily many hashing tables.
@@ -417,7 +417,7 @@ Another common form to organize data for efficient search is to use
trees. The @code{tsearch} function family provides a nice interface to
functions to organize possibly large amounts of data by providing a mean
access time proportional to the logarithm of the number of elements.
-The GNU C library implementation even guarantees that this bound is
+@Theglibc{} implementation even guarantees that this bound is
never exceeded even for input data which cause problems for simple
binary tree implementations.
diff --git a/manual/setjmp.texi b/manual/setjmp.texi
index 0cf8b84905..b0cd91ad1d 100644
--- a/manual/setjmp.texi
+++ b/manual/setjmp.texi
@@ -180,9 +180,9 @@ change the set of blocked signals, and provides an additional pair of
functions (@code{sigsetjmp} and @code{siglongjmp}) to get the BSD
behavior.
-The behavior of @code{setjmp} and @code{longjmp} in the GNU library is
+The behavior of @code{setjmp} and @code{longjmp} in @theglibc{} is
controlled by feature test macros; see @ref{Feature Test Macros}. The
-default in the GNU system is the POSIX.1 behavior rather than the BSD
+default in @theglibc{} is the POSIX.1 behavior rather than the BSD
behavior.
The facilities in this section are declared in the header file
@@ -221,7 +221,7 @@ and these functions are more powerful than those discussed in this
chapter so far. These function were part of the original @w{System V}
API and by this route were added to the Unix API. Beside on branded
Unix implementations these interfaces are not widely available. Not all
-platforms and/or architectures the GNU C Library is available on provide
+platforms and/or architectures @theglibc{} is available on provide
this interface. Use @file{configure} to detect the availability.
Similar to the @code{jmp_buf} and @code{sigjmp_buf} types used for the
@@ -325,7 +325,7 @@ execution using (@pxref{Memory-mapped I/O}).
@strong{Compatibility note}: The current Unix standard is very imprecise
about the way the stack is allocated. All implementations seem to agree
that the @code{uc_stack} element must be used but the values stored in
-the elements of the @code{stack_t} value are unclear. The GNU C library
+the elements of the @code{stack_t} value are unclear. @Theglibc{}
and most other Unix implementations require the @code{ss_sp} value of
the @code{uc_stack} element to point to the base of the memory region
allocated for the stack and the size of the memory region is stored in
diff --git a/manual/signal.texi b/manual/signal.texi
index 2fa525426f..18db3d2266 100644
--- a/manual/signal.texi
+++ b/manual/signal.texi
@@ -9,7 +9,7 @@ executing program. Some signals report errors such as references to
invalid memory addresses; others report asynchronous events, such as
disconnection of a phone line.
-The GNU C library defines a variety of signal types, each for a
+@Theglibc{} defines a variety of signal types, each for a
particular kind of event. Some kinds of events make it inadvisable or
impossible for the program to proceed as usual, and the corresponding
signals normally abort the program. Other kinds of signals that report
@@ -274,7 +274,7 @@ When one of these program error signals terminates a process, it also
writes a @dfn{core dump file} which records the state of the process at
the time of termination. The core dump file is named @file{core} and is
written in whichever directory is current in the process at the time.
-(On the GNU system, you can specify the file name for core dumps with
+(On @gnuhurdsystems{}, you can specify the file name for core dumps with
the environment variable @code{COREFILE}.) The purpose of core dump
files is so that you can examine them with a debugger to investigate
what caused the error.
@@ -307,9 +307,9 @@ BSD systems provide the @code{SIGFPE} handler with an extra argument
that distinguishes various causes of the exception. In order to access
this argument, you must define the handler to accept two arguments,
which means you must cast it to a one-argument function type in order to
-establish the handler. The GNU library does provide this extra
+establish the handler. @Theglibc{} does provide this extra
argument, but the value is meaningful only on operating systems that
-provide the information (BSD systems and GNU systems).
+provide the information (BSD systems and @gnusystems{}).
@table @code
@comment signal.h
@@ -625,7 +625,7 @@ On most operating systems, terminals and sockets are the only kinds of
files that can generate @code{SIGIO}; other kinds, including ordinary
files, never generate @code{SIGIO} even if you ask them to.
-In the GNU system @code{SIGIO} will always be generated properly
+On @gnusystems{} @code{SIGIO} will always be generated properly
if you successfully set asynchronous mode with @code{fcntl}.
@end deftypevr
@@ -759,14 +759,14 @@ process would probably not be very useful, since there is no shell
program that will notice it stop and allow the user to continue it.
What happens instead depends on the operating system you are using.
Some systems may do nothing; others may deliver another signal instead,
-such as @code{SIGKILL} or @code{SIGHUP}. In the GNU system, the process
+such as @code{SIGKILL} or @code{SIGHUP}. On @gnuhurdsystems{}, the process
dies with @code{SIGKILL}; this avoids the problem of many stopped,
orphaned processes lying around the system.
@ignore
-On the GNU system, it is possible to reattach to the orphaned process
+On @gnuhurdsystems{}, it is possible to reattach to the orphaned process
group and continue it, so stop signals do stop the process as usual on
-a GNU system unless you have requested POSIX compatibility ``till it
+@gnuhurdsystems{} unless you have requested POSIX compatibility ``till it
hurts.''
@end ignore
@@ -805,7 +805,7 @@ that isn't connected. @xref{Sending Data}.
Resource lost. This signal is generated when you have an advisory lock
on an NFS file, and the NFS server reboots and forgets about your lock.
-In the GNU system, @code{SIGLOST} is generated when any server program
+On @gnuhurdsystems{}, @code{SIGLOST} is generated when any server program
dies unexpectedly. It is usually fine to ignore the signal; whatever
call was made to the server that died just returns an error.
@end deftypevr
@@ -864,7 +864,7 @@ reformat its display accordingly.
@comment signal.h
@comment BSD
@deftypevr Macro int SIGINFO
-Information request. In 4.4 BSD and the GNU system, this signal is sent
+Information request. On 4.4 BSD and @gnuhurdsystems{}, this signal is sent
to all the processes in the foreground process group of the controlling
terminal when the user types the STATUS character in canonical mode;
@pxref{Signal Characters}.
@@ -933,7 +933,7 @@ The simplest way to change the action for a signal is to use the
@code{signal} function. You can specify a built-in action (such as to
ignore the signal), or you can @dfn{establish a handler}.
-The GNU library also implements the more versatile @code{sigaction}
+@Theglibc{} also implements the more versatile @code{sigaction}
facility. This section describes both facilities and gives suggestions
on which to use when.
@@ -1044,7 +1044,7 @@ a handler for @code{SIGKILL} or @code{SIGSTOP}.
@code{signal} function is that it has different semantics on BSD and
SVID systems. The difference is that on SVID systems the signal handler
is deinstalled after signal delivery. On BSD systems the
-handler must be explicitly deinstalled. In the GNU C Library we use the
+handler must be explicitly deinstalled. In @theglibc{} we use the
BSD version by default. To use the SVID version you can either use the
function @code{sysv_signal} (see below) or use the @code{_XOPEN_SOURCE}
feature select macro (@pxref{Feature Test Macros}). In general, use of these
@@ -1223,7 +1223,7 @@ examine it with @code{sigaction}, the handler address that you get may
not be the same as what you specified with @code{signal}. It may not
even be suitable for use as an action argument with @code{signal}. But
you can rely on using it as an argument to @code{sigaction}. This
-problem never happens on the GNU system.
+problem never happens on @gnusystems{}.
So, you're better off using one or the other of the mechanisms
consistently within a single program.
@@ -1320,7 +1320,7 @@ Each signal number has its own set of flags. Each call to
@code{sigaction} affects one particular signal number, and the flags
that you specify apply only to that particular signal.
-In the GNU C library, establishing a handler with @code{signal} sets all
+In @theglibc{}, establishing a handler with @code{signal} sets all
the flags to zero except for @code{SA_RESTART}, whose value depends on
the settings you have made with @code{siginterrupt}. @xref{Interrupted
Primitives}, to see what this is about.
@@ -1894,7 +1894,7 @@ could ``lose'' one of the objects.
@ignore
!!! not true
-On the GNU system, @code{malloc} and @code{free} are safe to use in
+In @theglibc{}, @code{malloc} and @code{free} are safe to use in
signal handlers because they block signals. As a result, the library
functions that allocate space for a result are also safe in signal
handlers. The obstack allocation functions are safe as long as you
@@ -2032,7 +2032,7 @@ atomically.
In practice, you can assume that @code{int} is atomic.
You can also assume that pointer
types are atomic; that is very convenient. Both of these assumptions
-are true on all of the machines that the GNU C library supports and on
+are true on all of the machines that @theglibc{} supports and on
all POSIX systems we know of.
@c ??? This might fail on a 386 that uses 64-bit pointers.
@@ -2077,7 +2077,7 @@ handlers must check for @code{EINTR} after each library function that
can return it, in order to try the call again. Often programmers forget
to check, which is a common source of error.
-The GNU library provides a convenient way to retry a call after a
+@Theglibc{} provides a convenient way to retry a call after a
temporary failure, with the macro @code{TEMP_FAILURE_RETRY}:
@comment unistd.h
@@ -2099,7 +2099,7 @@ approach: to restart the interrupted primitive, instead of making it
fail. If you choose this approach, you need not be concerned with
@code{EINTR}.
-You can choose either approach with the GNU library. If you use
+You can choose either approach with @theglibc{}. If you use
@code{sigaction} to establish a signal handler, you can specify how that
handler should behave. If you specify the @code{SA_RESTART} flag,
return from that handler will resume a primitive; otherwise, return from
@@ -2111,7 +2111,7 @@ function. @xref{BSD Handler}.
@c !!! not true now about _BSD_SOURCE
When you don't specify with @code{sigaction} or @code{siginterrupt} what
a particular handler should do, it uses a default choice. The default
-choice in the GNU library depends on the feature test macros you have
+choice in @theglibc{} depends on the feature test macros you have
defined. If you define @code{_BSD_SOURCE} or @code{_GNU_SOURCE} before
calling @code{signal}, the default is to resume primitives; otherwise,
the default is to make them fail with @code{EINTR}. (The library
diff --git a/manual/socket.texi b/manual/socket.texi
index 3e3410ec2f..a08ac4c675 100644
--- a/manual/socket.texi
+++ b/manual/socket.texi
@@ -15,7 +15,7 @@ network. Sockets are the primary means of communicating with other
machines; @code{telnet}, @code{rlogin}, @code{ftp}, @code{talk} and the
other familiar network programs use sockets.
-Not all operating systems support sockets. In the GNU library, the
+Not all operating systems support sockets. In @theglibc{}, the
header file @file{sys/socket.h} exists regardless of the operating
system, and the socket functions always exist, but if the system does
not really support sockets these functions always fail.
@@ -155,7 +155,7 @@ happy as implementations which use 64-bit values.
@node Communication Styles
@section Communication Styles
-The GNU library includes support for several different kinds of sockets,
+@Theglibc{} includes support for several different kinds of sockets,
each with different characteristics. This section describes the
supported socket types. The symbolic constants listed here are
defined in @file{sys/socket.h}.
@@ -1276,7 +1276,7 @@ associated Internet address.
The lookup functions above all have one in common: they are not
reentrant and therefore unusable in multi-threaded applications.
-Therefore provides the GNU C library a new set of functions which can be
+Therefore provides @theglibc{} a new set of functions which can be
used in this context.
@comment netdb.h
diff --git a/manual/startup.texi b/manual/startup.texi
index d5695bf7d0..93dca303ca 100644
--- a/manual/startup.texi
+++ b/manual/startup.texi
@@ -135,8 +135,8 @@ other words, the whitespace separating them is optional.) Thus,
@item
Options typically precede other non-option arguments.
-The implementations of @code{getopt} and @code{argp_parse} in the GNU C
-library normally make it appear as if all the option arguments were
+The implementations of @code{getopt} and @code{argp_parse} in @theglibc{}
+normally make it appear as if all the option arguments were
specified before all the non-option arguments for the purposes of
parsing, even if the user of your program intermixed option and
non-option arguments. They do this by reordering the elements of the
@@ -169,7 +169,7 @@ To specify an argument for a long option, write
@samp{--@var{name}=@var{value}}. This syntax enables a long option to
accept an argument that is itself optional.
-Eventually, the GNU system will provide completion for long option names
+Eventually, @gnusystems{} will provide completion for long option names
in the shell.
@node Parsing Program Arguments, , Argument Syntax, Program Arguments
@@ -319,7 +319,7 @@ can be safely used in multi-threaded programs
@deftypefun {char *} getenv (const char *@var{name})
This function returns a string that is the value of the environment
variable @var{name}. You must not modify this string. In some non-Unix
-systems not using the GNU library, it might be overwritten by subsequent
+systems not using @theglibc{}, it might be overwritten by subsequent
calls to @code{getenv} (but not by any other library function). If the
environment variable @var{name} is not defined, the value is a null
pointer.
@@ -423,7 +423,7 @@ If you just want to get the value of an environment variable, use
@code{getenv}.
@end deftypevar
-Unix systems, and the GNU system, pass the initial value of
+Unix systems, and @gnusystems{}, pass the initial value of
@code{environ} as the third argument to @code{main}.
@xref{Program Arguments}.
@@ -591,30 +591,30 @@ A system call is a request for service that a program makes of the
kernel. The service is generally something that only the kernel has
the privilege to do, such as doing I/O. Programmers don't normally
need to be concerned with system calls because there are functions in
-the GNU C library to do virtually everything that system calls do.
+@theglibc{} to do virtually everything that system calls do.
These functions work by making system calls themselves. For example,
there is a system call that changes the permissions of a file, but
-you don't need to know about it because you can just use the GNU C
-library's @code{chmod} function.
+you don't need to know about it because you can just use @theglibc{}'s
+@code{chmod} function.
@cindex kernel call
System calls are sometimes called kernel calls.
However, there are times when you want to make a system call explicitly,
-and for that, the GNU C library provides the @code{syscall} function.
+and for that, @theglibc{} provides the @code{syscall} function.
@code{syscall} is harder to use and less portable than functions like
@code{chmod}, but easier and more portable than coding the system call
in assembler instructions.
@code{syscall} is most useful when you are working with a system call
-which is special to your system or is newer than the GNU C library you
+which is special to your system or is newer than @theglibc{} you
are using. @code{syscall} is implemented in an entirely generic way;
the function does not know anything about what a particular system
call does or even if it is valid.
The description of @code{syscall} in this section assumes a certain
-protocol for system calls on the various platforms on which the GNU C
-library runs. That protocol is not defined by any strong authority, but
+protocol for system calls on the various platforms on which @theglibc{}
+runs. That protocol is not defined by any strong authority, but
we won't describe it here either because anyone who is coding
@code{syscall} probably won't accept anything less than kernel and C
library source code as a specification of the interface between them
@@ -864,7 +864,7 @@ pointer @var{arg}. At normal program termination, the @var{function} is
called with two arguments: the @var{status} value passed to @code{exit},
and the @var{arg}.
-This function is included in the GNU C library only for compatibility
+This function is included in @theglibc{} only for compatibility
for SunOS, and may not be supported by other implementations.
@end deftypefun
diff --git a/manual/stdio.texi b/manual/stdio.texi
index 2f27e31843..0d23daae2c 100644
--- a/manual/stdio.texi
+++ b/manual/stdio.texi
@@ -110,13 +110,13 @@ diagnostics issued by the program.
@end deftypevar
@cindex standard error stream
-In the GNU system, you can specify what files or processes correspond to
+On @gnusystems{}, you can specify what files or processes correspond to
these streams using the pipe and redirection facilities provided by the
shell. (The primitives shells use to implement these facilities are
described in @ref{File System Interface}.) Most other operating systems
provide similar mechanisms, but the details of how to use them can vary.
-In the GNU C library, @code{stdin}, @code{stdout}, and @code{stderr} are
+In @theglibc{}, @code{stdin}, @code{stdout}, and @code{stderr} are
normal variables which you can set just like any others. For example,
to redirect the standard output to a file, you could do:
@@ -196,7 +196,7 @@ Additional characters may appear after these to specify flags for the
call. Always put the mode (@samp{r}, @samp{w+}, etc.) first; that is
the only part you are guaranteed will be understood by all systems.
-The GNU C library defines one additional character for use in
+@Theglibc{} defines one additional character for use in
@var{opentype}: the character @samp{x} insists on creating a new
file---if a file @var{filename} already exists, @code{fopen} fails
rather than opening it. If you use @samp{x} you are guaranteed that
@@ -206,7 +206,7 @@ Closing Files}).
The character @samp{b} in @var{opentype} has a standard meaning; it
requests a binary stream rather than a text stream. But this makes no
-difference in POSIX systems (including the GNU system). If both
+difference in POSIX systems (including @gnusystems{}). If both
@samp{+} and @samp{b} are specified, they can appear in either order.
@xref{Binary Streams}.
@@ -290,7 +290,7 @@ If the operation fails, a null pointer is returned; otherwise,
@code{freopen} has traditionally been used to connect a standard stream
such as @code{stdin} with a file of your own choice. This is useful in
programs in which use of a standard stream for certain purposes is
-hard-coded. In the GNU C library, you can simply close the standard
+hard-coded. In @theglibc{}, you can simply close the standard
streams and open new ones with @code{fopen}. But other systems lack
this ability, so using @code{freopen} is more portable.
@@ -318,7 +318,7 @@ In some situations it is useful to know whether a given stream is
available for reading or writing. This information is normally not
available and would have to be remembered separately. Solaris
introduced a few functions to get this information from the stream
-descriptor and these functions are also available in the GNU C library.
+descriptor and these functions are also available in @theglibc{}.
@comment stdio_ext.h
@comment GNU
@@ -394,7 +394,7 @@ you are using NFS.
The function @code{fclose} is declared in @file{stdio.h}.
@end deftypefun
-To close all streams currently available the GNU C Library provides
+To close all streams currently available @theglibc{} provides
another function.
@comment stdio.h
@@ -562,7 +562,7 @@ conservative and use locking.
There are two basic mechanisms to avoid locking. The first is to use
the @code{_unlocked} variants of the stream operations. The POSIX
-standard defines quite a few of those and the GNU library adds a few
+standard defines quite a few of those and @theglibc{} adds a few
more. These variants of the functions behave just like the functions
with the name without the suffix except that they do not lock the
stream. Using these functions is very desirable since they are
@@ -598,7 +598,7 @@ the loop terminates. Writing it the way illustrated above allows the
manipulation of the buffer of the stream.
A second way to avoid locking is by using a non-standard function which
-was introduced in Solaris and is available in the GNU C library as well.
+was introduced in Solaris and is available in @theglibc{} as well.
@comment stdio_ext.h
@comment GNU
@@ -1143,7 +1143,7 @@ convenient to have functions to read a line of text from a stream.
Standard C has functions to do this, but they aren't very safe: null
characters and even (for @code{gets}) long lines can confuse them. So
-the GNU library provides the nonstandard @code{getline} function that
+@theglibc{} provides the nonstandard @code{getline} function that
makes it easy to read lines reliably.
Another GNU extension, @code{getdelim}, generalizes @code{getline}. It
@@ -1289,7 +1289,7 @@ returns a null pointer; otherwise it returns @var{s}.
@strong{Warning:} The @code{gets} function is @strong{very dangerous}
because it provides no protection against overflowing the string
-@var{s}. The GNU library includes it for compatibility only. You
+@var{s}. @Theglibc{} includes it for compatibility only. You
should @strong{always} use @code{fgets} or @code{getline} instead. To
remind you of this, the linker (if using GNU @code{ld}) will issue a
warning whenever you use @code{gets}.
@@ -1383,10 +1383,10 @@ character that was actually read from the stream. In fact, it isn't
necessary to actually read any characters from the stream before
unreading them with @code{ungetc}! But that is a strange way to write a
program; usually @code{ungetc} is used only to unread a character that
-was just read from the same stream. The GNU C library supports this
+was just read from the same stream. @Theglibc{} supports this
even on files opened in binary mode, but other systems might not.
-The GNU C library only supports one character of pushback---in other
+@Theglibc{} only supports one character of pushback---in other
words, it does not work to call @code{ungetc} twice without doing input
in between. Other systems might let you push back multiple characters;
then reading from the stream retrieves the characters in the reverse
@@ -1658,7 +1658,7 @@ actual value in effect at runtime can be retrieved by using
Definition}.
Some system have a quite low limit such as @math{9} for @w{System V}
-systems. The GNU C library has no real limit.
+systems. @Theglibc{} has no real limit.
@end defvr
If any of the formats has a specification for the parameter position all
@@ -2149,7 +2149,7 @@ prints @samp{ nowhere }.
If there is a @samp{l} modifier present the argument is expected to be of type @code{wchar_t} (or @code{const wchar_t *}).
If you accidentally pass a null pointer as the argument for a @samp{%s}
-conversion, the GNU library prints it as @samp{(null)}. We think this
+conversion, @theglibc{} prints it as @samp{(null)}. We think this
is more useful than crashing. But it's not good practice to pass a null
argument intentionally.
@@ -2168,13 +2168,13 @@ fprintf (stderr, "can't open `%s': %s\n", filename, strerror (errno));
@end smallexample
@noindent
-The @samp{%m} conversion is a GNU C library extension.
+The @samp{%m} conversion is a @glibcadj{} extension.
The @samp{%p} conversion prints a pointer value. The corresponding
argument must be of type @code{void *}. In practice, you can use any
type of pointer.
-In the GNU system, non-null pointers are printed as unsigned integers,
+In @theglibc{}, non-null pointers are printed as unsigned integers,
as if a @samp{%#x} conversion were used. Null pointers print as
@samp{(nil)}. (Pointers might print differently in other systems.)
@@ -2371,7 +2371,7 @@ make_message (char *name, char *value)
In practice, it is often easier just to use @code{asprintf}, below.
-@strong{Attention:} In versions of the GNU C library prior to 2.1 the
+@strong{Attention:} In versions of @theglibc{} prior to 2.1 the
return value is the number of characters stored, not including the
terminating null; unless there was not enough space in @var{s} to
store the result in which case @code{-1} is returned. This was
@@ -2814,7 +2814,7 @@ validate_args (char *format, int nargs, OBJECT *args)
@cindex defining new @code{printf} conversions
@cindex extending @code{printf}
-The GNU C library lets you define your own custom conversion specifiers
+@Theglibc{} lets you define your own custom conversion specifiers
for @code{printf} template strings, to teach @code{printf} clever ways
to print the important data structures of your program.
@@ -2887,7 +2887,7 @@ about this.
@c but if you are never going to call @code{parse_printf_format}, you do
@c not need to define an arginfo function.
-@strong{Attention:} In the GNU C library versions before 2.0 the
+@strong{Attention:} In @theglibc{} versions before 2.0 the
@var{arginfo-function} function did not need to be installed unless
the user used the @code{parse_printf_format} function. This has changed.
Now a call to any of the @code{printf} functions will call this
@@ -3000,7 +3000,7 @@ width. The value is @code{'0'} if the @samp{0} flag was specified, and
Now let's look at how to define the handler and arginfo functions
which are passed as arguments to @code{register_printf_function}.
-@strong{Compatibility Note:} The interface changed in GNU libc
+@strong{Compatibility Note:} The interface changed in @theglibc{}
version 2.0. Previously the third argument was of type
@code{va_list *}.
@@ -3098,7 +3098,7 @@ The output produced by this program looks like:
@node Predefined Printf Handlers
@subsection Predefined @code{printf} Handlers
-The GNU libc also contains a concrete and useful application of the
+@Theglibc{} also contains a concrete and useful application of the
@code{printf} handler extension. There are two functions available
which implement a special way to print floating-point numbers.
@@ -3926,7 +3926,7 @@ previous I/O operation on that stream.
@deftypevr Macro int EOF
This macro is an integer value that is returned by a number of narrow
stream functions to indicate an end-of-file condition, or some other
-error situation. With the GNU library, @code{EOF} is @code{-1}. In
+error situation. With @theglibc{}, @code{EOF} is @code{-1}. In
other libraries, its value may be some other negative number.
This symbol is declared in @file{stdio.h}.
@@ -3937,7 +3937,7 @@ This symbol is declared in @file{stdio.h}.
@deftypevr Macro int WEOF
This macro is an integer value that is returned by a number of wide
stream functions to indicate an end-of-file condition, or some other
-error situation. With the GNU library, @code{WEOF} is @code{-1}. In
+error situation. With @theglibc{}, @code{WEOF} is @code{-1}. In
other libraries, its value may be some other negative number.
This symbol is declared in @file{wchar.h}.
@@ -4045,7 +4045,7 @@ descriptor is not usually advisable.
@node Binary Streams
@section Text and Binary Streams
-The GNU system and other POSIX-compatible operating systems organize all
+@gnusystems{} and other POSIX-compatible operating systems organize all
files as uniform sequences of characters. However, some other systems
make a distinction between files containing text and files containing
binary data, and the input and output facilities of @w{ISO C} provide for
@@ -4094,7 +4094,7 @@ systems, text and binary streams use different file formats, and the
only way to read or write ``an ordinary file of text'' that can work
with other text-oriented programs is through a text stream.
-In the GNU library, and on all POSIX systems, there is no difference
+In @theglibc{}, and on all POSIX systems, there is no difference
between text streams and binary streams. When you open a stream, you
get the same kind of stream regardless of whether you ask for binary.
This stream can handle any file content, and has none of the
@@ -4108,7 +4108,7 @@ restrictions that text streams sometimes have.
The @dfn{file position} of a stream describes where in the file the
stream is currently reading or writing. I/O on the stream advances the
-file position through the file. In the GNU system, the file position is
+file position through the file. On @gnusystems{}, the file position is
represented as an integer, which counts the number of bytes from the
beginning of the file. @xref{File Position}.
@@ -4301,7 +4301,7 @@ An alias for @code{SEEK_END}.
@node Portable Positioning
@section Portable File-Position Functions
-On the GNU system, the file position is truly a character count. You
+On @gnusystems{}, the file position is truly a character count. You
can specify any character count value as an argument to @code{fseek} or
@code{fseeko} and get reliable results for any random access file.
However, some @w{ISO C} systems do not represent file positions in this
@@ -4361,7 +4361,7 @@ This is the type of an object that can encode information about the
file position of a stream, for use by the functions @code{fgetpos} and
@code{fsetpos}.
-In the GNU system, @code{fpos_t} is an opaque data structure that
+In @theglibc{}, @code{fpos_t} is an opaque data structure that
contains internal data to represent file offset and conversion state
information. In other systems, it might have a different internal
representation.
@@ -4378,7 +4378,7 @@ This is the type of an object that can encode information about the
file position of a stream, for use by the functions @code{fgetpos64} and
@code{fsetpos64}.
-In the GNU system, @code{fpos64_t} is an opaque data structure that
+In @theglibc{}, @code{fpos64_t} is an opaque data structure that
contains internal data to represent file offset and conversion state
information. In other systems, it might have a different internal
representation.
@@ -4562,7 +4562,7 @@ necessary since it might be done in situations when terminal input is
required and the program wants to be sure that all output is visible on
the terminal. But this means that only line buffered streams have to be
flushed. Solaris introduced a function especially for this. It was
-always available in the GNU C library in some form but never officially
+always available in @theglibc{} in some form but never officially
exported.
@comment stdio_ext.h
@@ -4578,13 +4578,13 @@ This function is declared in the @file{stdio_ext.h} header.
been known to be so thoroughly fixated on line-oriented input and output
that flushing a line buffered stream causes a newline to be written!
Fortunately, this ``feature'' seems to be becoming less common. You do
-not need to worry about this in the GNU system.
+not need to worry about this with @theglibc{}.
In some situations it might be useful to not flush the output pending
for a stream but instead simply forget it. If transmission is costly
and the output is not needed anymore this is valid reasoning. In this
situation a non-standard function introduced in Solaris and available in
-the GNU C library can be used.
+@theglibc{} can be used.
@comment stdio_ext.h
@comment GNU
@@ -4722,8 +4722,8 @@ This function is provided for compatibility with old BSD code. Use
@end deftypefun
It is possible to query whether a given stream is line buffered or not
-using a non-standard function introduced in Solaris and available in the
-GNU C library.
+using a non-standard function introduced in Solaris and available in
+@theglibc{}.
@comment stdio_ext.h
@comment GNU
@@ -4762,7 +4762,7 @@ This function is declared in the @file{stdio_ext.h} header.
@node Other Kinds of Streams
@section Other Kinds of Streams
-The GNU library provides ways for you to define additional kinds of
+@Theglibc{} provides ways for you to define additional kinds of
streams that do not necessarily correspond to an open file.
One such type of stream takes input from or writes output to a string.
diff --git a/manual/string.texi b/manual/string.texi
index e02c17f111..af21bccf48 100644
--- a/manual/string.texi
+++ b/manual/string.texi
@@ -3,7 +3,7 @@
@chapter String and Array Utilities
Operations on strings (or arrays of characters) are an important part of
-many programs. The GNU C library provides an extensive set of string
+many programs. @Theglibc{} provides an extensive set of string
utility functions, including functions for copying, concatenating,
comparing, and searching strings. Many of these functions can also
operate on arbitrary regions of storage; for example, the @code{memcpy}
@@ -669,7 +669,7 @@ the end of the string @var{wto} (that is, the address of the terminating
null character @code{wto + strlen (wfrom)}) rather than the beginning.
This function is not part of ISO or POSIX but was found useful while
-developing the GNU C Library itself.
+developing @theglibc{} itself.
The behavior of @code{wcpcpy} is undefined if the strings overlap.
@@ -695,7 +695,7 @@ is implemented to be useful in contexts where this behavior of the
@emph{first} written null character.
This function is not part of ISO or POSIX but was found useful while
-developing the GNU C Library itself.
+developing @theglibc{} itself.
Its behavior is undefined if the strings overlap. The function is
declared in @file{string.h}.
@@ -721,7 +721,7 @@ is implemented to be useful in contexts where this behavior of the
@emph{first} written null character.
This function is not part of ISO or POSIX but was found useful while
-developing the GNU C Library itself.
+developing @theglibc{} itself.
Its behavior is undefined if the strings overlap.
@@ -1712,7 +1712,7 @@ There is no restriction on the second parameter of @code{strchr} so it
could very well also be the NUL character. Those readers thinking very
hard about this might now point out that the @code{strchr} function is
more expensive than the @code{strlen} function since we have two abort
-criteria. This is right. But in the GNU C library the implementation of
+criteria. This is right. But in @theglibc{} the implementation of
@code{strchr} is optimized in a special way so that @code{strchr}
actually is faster.
@@ -2027,7 +2027,7 @@ when @code{strtok} or @code{wcstok} tries to modify it, your program
will get a fatal signal for writing in read-only memory. @xref{Program
Error Signals}. Even if the operation of @code{strtok} or @code{wcstok}
would not require a modification of the string (e.g., if there is
-exactly one token) the string can (and in the GNU libc case will) be
+exactly one token) the string can (and in the @glibcadj{} case will) be
modified.
This is a special case of a general principle: if a part of a program
@@ -2064,7 +2064,7 @@ token = strtok (NULL, delimiters); /* token => "punctuation" */
token = strtok (NULL, delimiters); /* token => NULL */
@end smallexample
-The GNU C library contains two more functions for tokenizing a string
+@Theglibc{} contains two more functions for tokenizing a string
which overcome the limitation of non-reentrancy. They are only
available for multibyte character strings.
@@ -2220,8 +2220,8 @@ function can be found in @file{libgen.h}.
The function below addresses the perennial programming quandary: ``How do
I take good data in string form and painlessly turn it into garbage?''
This is actually a fairly simple task for C programmers who do not use
-the GNU C library string functions, but for programs based on the GNU C
-library, the @code{strfry} function is the preferred method for
+@theglibc{} string functions, but for programs based on @theglibc{},
+the @code{strfry} function is the preferred method for
destroying string data.
The prototype for this function is in @file{string.h}.
@@ -2237,7 +2237,7 @@ input with the anagram in place. For each position in the string,
The return value of @code{strfry} is always @var{string}.
-@strong{Portability Note:} This function is unique to the GNU C library.
+@strong{Portability Note:} This function is unique to @theglibc{}.
@end deftypefun
@@ -2278,7 +2278,7 @@ want to see it or doesn't want to see it very much. To really prevent
people from retrieving the information, use stronger encryption such as
that described in @xref{Cryptographic Functions}.
-@strong{Portability Note:} This function is unique to the GNU C library.
+@strong{Portability Note:} This function is unique to @theglibc{}.
@end deftypefun
diff --git a/manual/sysinfo.texi b/manual/sysinfo.texi
index bf8b138dad..1733bc3b58 100644
--- a/manual/sysinfo.texi
+++ b/manual/sysinfo.texi
@@ -97,7 +97,7 @@ this array, in bytes. Note that this is @emph{not} the DNS hostname.
If the system participates in DNS, this is the FQDN (see above).
The return value is @code{0} on success and @code{-1} on failure. In
-the GNU C library, @code{gethostname} fails if @var{size} is not large
+@theglibc{}, @code{gethostname} fails if @var{size} is not large
enough; then you can try again with a larger array. The following
@code{errno} error condition is defined for this function:
@@ -251,8 +251,8 @@ system.
This is a description of the type of hardware that is in use.
Some systems provide a mechanism to interrogate the kernel directly for
-this information. On systems without such a mechanism, the GNU C
-library fills in this field based on the configuration name that was
+this information. On systems without such a mechanism, @theglibc{}
+fills in this field based on the configuration name that was
specified when building and installing the library.
GNU uses a three-part name to describe a system configuration; the three
@@ -276,8 +276,8 @@ hardware, it consists of the first two parts of the configuration name:
@end quotation
@item char nodename[]
-This is the host name of this particular computer. In the GNU C
-library, the value is the same as that returned by @code{gethostname};
+This is the host name of this particular computer. In @theglibc{},
+the value is the same as that returned by @code{gethostname};
see @ref{Host Identification}.
@ gethostname() is implemented with a call to uname().
@@ -344,7 +344,7 @@ gets stored.
For some programs it is desirable and necessary to access information
about whether a certain filesystem is mounted and, if it is, where, or
-simply to get lists of all the available filesystems. The GNU libc
+simply to get lists of all the available filesystems. @Theglibc{}
provides some functions to retrieve this information portably.
Traditionally Unix systems have a file named @file{/etc/fstab} which
@@ -465,7 +465,7 @@ related to the @code{dump} utility used on Unix systems.
@end deftp
-To read the entire content of the of the @file{fstab} file the GNU libc
+To read the entire content of the of the @file{fstab} file @theglibc{}
contains a set of three functions which are designed in the usual way.
@comment fstab.h
@@ -634,8 +634,8 @@ which is uninteresting for all programs beside @code{dump}.
For accessing the @file{mtab} file there is again a set of three
functions to access all entries in a row. Unlike the functions to
handle @file{fstab} these functions do not access a fixed file and there
-is even a thread safe variant of the get function. Beside this the GNU
-libc contains functions to alter the file and test for specific options.
+is even a thread safe variant of the get function. Beside this @theglibc
+contains functions to alter the file and test for specific options.
@comment mntent.h
@comment BSD
@@ -1184,7 +1184,7 @@ cat /proc/sys/vm/freepages
@c possible to create a sysctl-only parameter.
Some more traditional and more widely available, though less general,
-GNU C library functions for getting and setting some of the same system
+@glibcadj{} functions for getting and setting some of the same system
parameters are:
@itemize @bullet
diff --git a/manual/syslog.texi b/manual/syslog.texi
index 4699978477..6d338ece89 100644
--- a/manual/syslog.texi
+++ b/manual/syslog.texi
@@ -107,11 +107,11 @@ Syslog facility/priority (It can be both because the facility code for
the kernel is zero, and that makes priority and facility/priority the
same value).
-The GNU C library provides functions to submit messages to Syslog. They
+@Theglibc{} provides functions to submit messages to Syslog. They
do it by writing to the @file{/dev/log} socket. @xref{Submitting Syslog
Messages}.
-The GNU C library functions only work to submit messages to the Syslog
+The @glibcadj{} functions only work to submit messages to the Syslog
facility on the same system. To submit a message to the Syslog facility
on another system, use the socket I/O functions to write a UDP datagram
to the @code{syslog} UDP port on that system. @xref{Sockets}.
@@ -120,7 +120,7 @@ to the @code{syslog} UDP port on that system. @xref{Sockets}.
@node Submitting Syslog Messages
@section Submitting Syslog Messages
-The GNU C library provides functions to submit messages to the Syslog
+@Theglibc{} provides functions to submit messages to the Syslog
facility:
@menu
@@ -341,7 +341,7 @@ Results are undefined if the facility code is anything else.
the kernel. But you can't specify that facility code with these
functions. If you try, it looks the same to @code{syslog} as if you are
requesting the default facility. But you wouldn't want to anyway,
-because any program that uses the GNU C library is not the kernel.
+because any program that uses @theglibc{} is not the kernel.
You can use just a priority code as @var{facility_priority}. In that
case, @code{syslog} assumes the default facility established when the
@@ -429,8 +429,8 @@ to @var{ident}. The default identification string is the program name
taken from argv[0].
If you are writing shared library code that uses @code{openlog} to
-generate custom syslog output, you should use @code{closelog} to drop the
-GNU C library's internal reference to the @var{ident} pointer when you are
+generate custom syslog output, you should use @code{closelog} to drop
+@theglibc{}'s internal reference to the @var{ident} pointer when you are
done. Please read the section on @code{openlog} for more information:
@xref{openlog}.
diff --git a/manual/terminal.texi b/manual/terminal.texi
index db7780f65f..8321237f60 100644
--- a/manual/terminal.texi
+++ b/manual/terminal.texi
@@ -319,7 +319,7 @@ This is like @code{TCSADRAIN}, but also discards any queued input.
This is a flag bit that you can add to any of the above alternatives.
Its meaning is to inhibit alteration of the state of the terminal
hardware. It is a BSD extension; it is only supported on BSD systems
-and the GNU system.
+and @gnuhurdsystems{}.
Using @code{TCSASOFT} is exactly the same as setting the @code{CIGNORE}
bit in the @code{c_cflag} member of the structure @var{termios-p} points
@@ -574,7 +574,8 @@ If this bit is set, any input character restarts output when output has
been suspended with the STOP character. Otherwise, only the START
character restarts output.
-This is a BSD extension; it exists only on BSD systems and the GNU system.
+This is a BSD extension; it exists only on BSD systems and
+@gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -611,12 +612,10 @@ carriage return and linefeed pairs.
If this bit isn't set, the characters are transmitted as-is.
@end deftypevr
-The following three bits are BSD features, and they exist only BSD
-systems and the GNU system. They are effective only if @code{OPOST} is
-set.
+The following three bits are effective only if @code{OPOST} is set.
@comment termios.h
-@comment BSD
+@comment POSIX.1
@deftypevr Macro tcflag_t ONLCR
If this bit is set, convert the newline character on output into a pair
of characters, carriage return followed by linefeed.
@@ -626,7 +625,9 @@ of characters, carriage return followed by linefeed.
@comment BSD
@deftypevr Macro tcflag_t OXTABS
If this bit is set, convert tab characters on output into the appropriate
-number of spaces to emulate a tab stop every eight columns.
+number of spaces to emulate a tab stop every eight columns. This bit
+exists only on BSD systems and @gnuhurdsystems{}; on
+@gnulinuxsystems{} it is available as @code{XTABS}.
@end deftypevr
@comment termios.h
@@ -634,6 +635,7 @@ number of spaces to emulate a tab stop every eight columns.
@deftypevr Macro tcflag_t ONOEOT
If this bit is set, discard @kbd{C-d} characters (code @code{004}) on
output. These characters cause many dial-up terminals to disconnect.
+This bit exists only on BSD systems and @gnuhurdsystems{}.
@end deftypevr
@node Control Modes
@@ -747,8 +749,8 @@ This specifies seven bits per byte.
This specifies eight bits per byte.
@end deftypevr
-The following four bits are BSD extensions; this exist only on BSD
-systems and the GNU system.
+The following four bits are BSD extensions; these exist only on BSD
+systems and @gnuhurdsystems{}.
@comment termios.h
@comment BSD
@@ -839,8 +841,8 @@ character erased. Typing the ERASE character again just prints the next
character erased. Then, the next time you type a normal character, a
@samp{/} character is printed before the character echoes.
-This is a BSD extension, and exists only in BSD systems and the
-GNU system.
+This is a BSD extension, and exists only in BSD systems and
+@gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -865,8 +867,8 @@ input, without which @code{ECHOK} is simply irrelevant.
@deftypevr Macro tcflag_t ECHOKE
This bit is similar to @code{ECHOK}. It enables special display of the
KILL character by erasing on the screen the entire line that has been
-killed. This is a BSD extension, and exists only in BSD systems and the
-GNU system.
+killed. This is a BSD extension, and exists only in BSD systems and
+@gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -886,8 +888,8 @@ Thus, control-A echoes as @samp{^A}. This is usually the preferred mode
for interactive input, because echoing a control character back to the
terminal could have some undesired effect on the terminal.
-This is a BSD extension, and exists only in BSD systems and the
-GNU system.
+This is a BSD extension, and exists only in BSD systems and
+@gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -914,7 +916,8 @@ signals associated with these characters, or to escape from the program.
POSIX.1 gives @code{IEXTEN} implementation-defined meaning,
so you cannot rely on this interpretation on all systems.
-On BSD systems and the GNU system, it enables the LNEXT and DISCARD characters.
+On BSD systems and @gnulinuxhurdsystems{}, it enables the LNEXT and
+DISCARD characters.
@xref{Other Special}.
@end deftypevr
@@ -934,8 +937,8 @@ If this bit is set and the system supports job control, then
attempt to write to the terminal. @xref{Access to the Terminal}.
@end deftypevr
-The following bits are BSD extensions; they exist only in BSD systems
-and the GNU system.
+The following bits are BSD extensions; they exist only on BSD systems
+and @gnuhurdsystems{}.
@comment termios.h
@comment BSD
@@ -1068,7 +1071,7 @@ which device you plan to set the speed for. If you use @code{tcsetattr}
to set the speed of a particular device to a value that it cannot
handle, @code{tcsetattr} returns @math{-1}.
-@strong{Portability note:} In the GNU library, the functions above
+@strong{Portability note:} In @theglibc{}, the functions above
accept speeds measured in bits per second as input, and return speed
values measured in bits per second. Other libraries require speeds to
be indicated by special codes. For POSIX.1 portability, you must use
@@ -1245,7 +1248,7 @@ terminate an input line, by setting EOL to one of them and EOL2 to the
other.
The EOL2 character is a BSD extension; it exists only on BSD systems
-and the GNU system.
+and @gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -1404,7 +1407,7 @@ The DSUSP (suspend) character is recognized only if the implementation
supports job control (@pxref{Job Control}). It sends a @code{SIGTSTP}
signal, like the SUSP character, but not right away---only when the
program tries to read it as input. Not all systems with job control
-support DSUSP; only BSD-compatible systems (including the GNU system).
+support DSUSP; only BSD-compatible systems (including @gnuhurdsystems{}).
@xref{Signal Handling}, for more information about signals.
@@ -1461,8 +1464,6 @@ regardless of what you specify.
@node Other Special
@subsubsection Other Special Characters
-These special characters exist only in BSD systems and the GNU system.
-
@comment termios.h
@comment BSD
@deftypevr Macro int VLNEXT
@@ -1479,6 +1480,8 @@ signal, it is read as a plain character. This is the analogue of the
@kbd{C-q} command in Emacs. ``LNEXT'' stands for ``literal next.''
The LNEXT character is usually @kbd{C-v}.
+
+This character is available on BSD systems and @gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -1494,6 +1497,8 @@ in both canonical and noncanonical mode. Its effect is to toggle the
discard-output flag. When this flag is set, all program output is
discarded. Setting the flag also discards all output currently in the
output buffer. Typing any other character resets the flag.
+
+This character is available on BSD systems and @gnulinuxhurdsystems{}.
@end deftypevr
@comment termios.h
@@ -1509,6 +1514,8 @@ the current process is running.
The STATUS character is recognized only in canonical mode, and only if
@code{NOKERNINFO} is not set.
+
+This character is available only on BSD systems and @gnuhurdsystems{}.
@end deftypevr
@node Noncanonical Input
@@ -1612,7 +1619,7 @@ system for a subsequent call to @code{read}.
actually the same as the EOF and EOL slots. This causes no serious
problem because the MIN and TIME slots are used only in noncanonical
input and the EOF and EOL slots are used only in canonical input, but it
-isn't very clean. The GNU library allocates separate slots for these
+isn't very clean. @Theglibc{} allocates separate slots for these
uses.
@comment termios.h
@@ -1642,7 +1649,7 @@ It does exactly this:
The usual way to get and set terminal modes is with the functions described
in @ref{Terminal Modes}. However, on some systems you can use the
BSD-derived functions in this section to do some of the same thing. On
-many systems, these functions do not exist. Even with the GNU C library,
+many systems, these functions do not exist. Even with @theglibc{},
the functions simply fail with @code{errno} = @code{ENOSYS} with many
kernels, including Linux.
diff --git a/manual/time.texi b/manual/time.texi
index f1f4254e90..a410def3eb 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -84,13 +84,13 @@ time between calendar time @var{time1} and calendar time @var{time0}, as
a value of type @code{double}. The difference ignores leap seconds
unless leap second support is enabled.
-In the GNU system, you can simply subtract @code{time_t} values. But on
+In @theglibc{}, you can simply subtract @code{time_t} values. But on
other systems, the @code{time_t} data type might use some other encoding
where subtraction doesn't work directly.
@end deftypefun
-The GNU C library provides two data types specifically for representing
-an elapsed time. They are used by various GNU C library functions, and
+@Theglibc{} provides two data types specifically for representing
+an elapsed time. They are used by various @glibcadj{} functions, and
you can use them for your own purposes too. They're exactly the same
except that one has a resolution in microseconds, and the other, newer
one, is in nanoseconds.
@@ -139,41 +139,14 @@ this. It works even on some peculiar operating systems where the
@code{tv_sec} member has an unsigned type.
@smallexample
-/* @r{Subtract the `struct timeval' values X and Y,}
- @r{storing the result in RESULT.}
- @r{Return 1 if the difference is negative, otherwise 0.} */
-
-int
-timeval_subtract (result, x, y)
- struct timeval *result, *x, *y;
-@{
- /* @r{Perform the carry for the later subtraction by updating @var{y}.} */
- if (x->tv_usec < y->tv_usec) @{
- int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
- y->tv_usec -= 1000000 * nsec;
- y->tv_sec += nsec;
- @}
- if (x->tv_usec - y->tv_usec > 1000000) @{
- int nsec = (x->tv_usec - y->tv_usec) / 1000000;
- y->tv_usec += 1000000 * nsec;
- y->tv_sec -= nsec;
- @}
-
- /* @r{Compute the time remaining to wait.}
- @r{@code{tv_usec} is certainly positive.} */
- result->tv_sec = x->tv_sec - y->tv_sec;
- result->tv_usec = x->tv_usec - y->tv_usec;
-
- /* @r{Return 1 if result is negative.} */
- return x->tv_sec < y->tv_sec;
-@}
+@include timeval_subtract.c.texi
@end smallexample
Common functions that use @code{struct timeval} are @code{gettimeofday}
and @code{settimeofday}.
-There are no GNU C library functions specifically oriented toward
+There are no @glibcadj{} functions specifically oriented toward
dealing with elapsed times, but the calendar time, processor time, and
alarm and sleeping functions have a lot to do with them.
@@ -190,7 +163,7 @@ you can get the information with the functions in this section.
CPU time (@pxref{Time Basics}) is represented by the data type
@code{clock_t}, which is a number of @dfn{clock ticks}. It gives the
total amount of time a process has actively used a CPU since some
-arbitrary event. On the GNU system, that event is the creation of the
+arbitrary event. On @gnusystems{}, that event is the creation of the
process. While arbitrary in general, the event is always the same event
for any particular process, so you can always measure how much time on
the CPU a particular computation takes by examining the process' CPU
@@ -199,7 +172,7 @@ time before and after the computation.
@cindex clock ticks
@cindex ticks, clock
-In the GNU system, @code{clock_t} is equivalent to @code{long int} and
+On @gnulinuxhurdsystems{}, @code{clock_t} is equivalent to @code{long int} and
@code{CLOCKS_PER_SEC} is an integer value. But in other systems, both
@code{clock_t} and the macro @code{CLOCKS_PER_SEC} can be either integer
or floating-point types. Casting CPU time values to @code{double}, as
@@ -346,7 +319,7 @@ indicate failure.
@strong{Portability Note:} The @code{clock} function described in
@ref{CPU Time} is specified by the @w{ISO C} standard. The
-@code{times} function is a feature of POSIX.1. In the GNU system, the
+@code{times} function is a feature of POSIX.1. On @gnusystems{}, the
CPU time is defined to be equivalent to the sum of the @code{tms_utime}
and @code{tms_stime} fields returned by @code{times}.
@@ -356,7 +329,7 @@ and @code{tms_stime} fields returned by @code{times}.
This section describes facilities for keeping track of calendar time.
@xref{Time Basics}.
-The GNU C library represents calendar time three ways:
+@Theglibc{} represents calendar time three ways:
@itemize @bullet
@item
@@ -423,7 +396,7 @@ Note that a simple time has no concept of local time zone. Calendar
Time @var{T} is the same instant in time regardless of where on the
globe the computer is.
-In the GNU C library, @code{time_t} is equivalent to @code{long int}.
+In @theglibc{}, @code{time_t} is equivalent to @code{long int}.
In other systems, @code{time_t} might be either an integer or
floating-point type.
@end deftp
@@ -474,7 +447,7 @@ The process is not superuser.
The @code{time_t} data type used to represent simple times has a
resolution of only one second. Some applications need more precision.
-So, the GNU C library also contains functions which are capable of
+So, @theglibc{} also contains functions which are capable of
representing calendar times to a higher resolution than one second. The
functions and the associated data types described in this section are
declared in @file{sys/time.h}.
@@ -514,7 +487,7 @@ following @code{errno} error condition is defined for this function:
@table @code
@item ENOSYS
The operating system does not support getting time zone information, and
-@var{tzp} is not a null pointer. The GNU operating system does not
+@var{tzp} is not a null pointer. @gnusystems{} do not
support using @w{@code{struct timezone}} to represent time zone
information; that is an obsolete feature of 4.3 BSD.
Instead, use the facilities described in @ref{Time Zone Functions}.
@@ -616,7 +589,7 @@ This function is present only with a Linux kernel.
@cindex broken-down time
@cindex calendar time and broken-down time
-Calendar time is represented by the usual GNU C library functions as an
+Calendar time is represented by the usual @glibcadj{} functions as an
elapsed time since a fixed base calendar time. This is convenient for
computation, but has no relation to the way people normally think of
calendar time. By contrast, @dfn{broken-down time} is a binary
@@ -1018,7 +991,7 @@ The process specified a settings update, but is not superuser.
For more details see RFC1305 (Network Time Protocol, Version 3) and
related documents.
-@strong{Portability note:} Early versions of the GNU C library did not
+@strong{Portability note:} Early versions of @theglibc{} did not
have this function but did have the synonymous @code{adjtimex}.
@end deftypefun
@@ -1775,7 +1748,7 @@ which can match zero or more whitespace characters in the format string.
@strong{Portability Note:} The XPG standard advises applications to use
at least one whitespace character (as specified by @code{isspace}) or
other non-alphanumeric characters between any two conversion
-specifications. The @w{GNU C Library} does not have this limitation but
+specifications. @Theglibc{} does not have this limitation but
other libraries might have trouble parsing formats like
@code{"%d%m%Y%H%M%S"}.
@@ -1800,7 +1773,7 @@ does not specify what happens to those elements of @var{tm} which are
not directly initialized by the different formats. The
implementations on different Unix systems vary here.
-The GNU libc implementation does not touch those fields which are not
+The @glibcadj{} implementation does not touch those fields which are not
directly initialized. Exceptions are the @code{tm_wday} and
@code{tm_yday} elements, which are recomputed if any of the year, month,
or date elements changed. This has two implications:
@@ -2036,7 +2009,7 @@ different time zone, and would like times reported to you in the time
zone local to you, rather than what is local to the computer.
In POSIX.1 systems the value of the @code{TZ} variable can be in one of
-three formats. With the GNU C library, the most common format is the
+three formats. With @theglibc{}, the most common format is the
last one, which can specify a selection from a large database of time
zone information for many regions of the world. The first two formats
are used to describe the time zone information directly, which is both
@@ -2137,16 +2110,16 @@ The third format looks like this:
:@var{characters}
@end smallexample
-Each operating system interprets this format differently; in the GNU C
-library, @var{characters} is the name of a file which describes the time
+Each operating system interprets this format differently; in
+@theglibc{}, @var{characters} is the name of a file which describes the time
zone.
@pindex /etc/localtime
@pindex localtime
If the @code{TZ} environment variable does not have a value, the
-operation chooses a time zone by default. In the GNU C library, the
+operation chooses a time zone by default. In @theglibc{}, the
default time zone is like the specification @samp{TZ=:/etc/localtime}
-(or @samp{TZ=:/usr/local/etc/localtime}, depending on how GNU C library
+(or @samp{TZ=:/usr/local/etc/localtime}, depending on how @theglibc{}
was configured; @pxref{Installation}). Other C libraries use their own
rule for choosing the default time zone, so there is little we can say
about them.
@@ -2163,7 +2136,7 @@ subdirectories for geographical areas; for example,
@file{America/New_York}, @file{Europe/London}, @file{Asia/Hong_Kong}.
These data files are installed by the system administrator, who also
sets @file{/etc/localtime} to point to the data file for the local time
-zone. The GNU C library comes with a large database of time zone
+zone. @Theglibc{} comes with a large database of time zone
information for most regions of the world, which is maintained by a
community of volunteers and put in the public domain.
@@ -2489,7 +2462,7 @@ handler. And, if @code{sleep} is interrupted by delivery of a signal
whose handler requests an alarm or alters the handling of @code{SIGALRM},
this handler and @code{sleep} will interfere.
-On the GNU system, it is safe to use @code{sleep} and @code{SIGALRM} in
+On @gnusystems{}, it is safe to use @code{sleep} and @code{SIGALRM} in
the same program, because @code{sleep} does not work by means of
@code{SIGALRM}.
diff --git a/manual/users.texi b/manual/users.texi
index bdc2d6871d..1ee5a0b178 100644
--- a/manual/users.texi
+++ b/manual/users.texi
@@ -207,15 +207,15 @@ facilities, you must include the header files @file{sys/types.h} and
@comment sys/types.h
@comment POSIX.1
@deftp {Data Type} uid_t
-This is an integer data type used to represent user IDs. In the GNU
-library, this is an alias for @code{unsigned int}.
+This is an integer data type used to represent user IDs. In
+@theglibc{}, this is an alias for @code{unsigned int}.
@end deftp
@comment sys/types.h
@comment POSIX.1
@deftp {Data Type} gid_t
-This is an integer data type used to represent group IDs. In the GNU
-library, this is an alias for @code{unsigned int}.
+This is an integer data type used to represent group IDs. In
+@theglibc{}, this is an alias for @code{unsigned int}.
@end deftp
@comment unistd.h
@@ -884,7 +884,7 @@ The exit status of the process.
@deftp {Data Type} {struct utmp}
The @code{utmp} data structure is used to hold information about entries
-in the user accounting database. On the GNU system it has the following
+in the user accounting database. On @gnusystems{} it has the following
members:
@table @code
@@ -1118,7 +1118,7 @@ the user accounting database.
All the @code{get*} functions mentioned before store the information
they return in a static buffer. This can be a problem in multi-threaded
programs since the data returned for the request is overwritten by the
-return value data in another thread. Therefore the GNU C Library
+return value data in another thread. Therefore @theglibc{}
provides as extensions three more functions which return the data in a
user-provided buffer.
@@ -1202,7 +1202,7 @@ therefore the return value does not say anything about whether the
database can be successfully opened.
@end deftypefun
-Specially for maintaining log-like databases the GNU C Library provides
+Specially for maintaining log-like databases @theglibc{} provides
the following function:
@comment utmp.h
@@ -1217,7 +1217,7 @@ database specified by @var{wtmp_file}. For possible values for the
subset of these functions, they are not standardized. There are often
subtle differences in the return types, and there are considerable
differences between the various definitions of @code{struct utmp}. When
-programming for the GNU system, it is probably best to stick
+programming for @theglibc{}, it is probably best to stick
with the functions described in this section. If however, you want your
program to be portable, consider using the XPG functions described in
@ref{XPG Functions}, or take a look at the BSD compatible functions in
@@ -1257,14 +1257,14 @@ Time the entry was made. For entries of type @code{OLD_TIME} this is
the time when the system clock changed, and for entries of type
@code{NEW_TIME} this is the time the system clock was set to.
@end table
-On the GNU system, @code{struct utmpx} is identical to @code{struct
+In @theglibc{}, @code{struct utmpx} is identical to @code{struct
utmp} except for the fact that including @file{utmpx.h} does not make
visible the declaration of @code{struct exit_status}.
@end deftp
The following macros are defined for use as values for the
@code{ut_type} member of the @code{utmpx} structure. The values are
-integer constants and are, on the GNU system, identical to the
+integer constants and are, in @theglibc{}, identical to the
definitions in @file{utmp.h}.
@table @code
@@ -1330,7 +1330,7 @@ can be found using the @code{sizeof} operator.
@comment utmpx.h
@comment XPG4.2
@deftypefun void setutxent (void)
-This function is similar to @code{setutent}. On the GNU system it is
+This function is similar to @code{setutent}. In @theglibc{} it is
simply an alias for @code{setutent}.
@end deftypefun
@@ -1338,14 +1338,14 @@ simply an alias for @code{setutent}.
@comment XPG4.2
@deftypefun {struct utmpx *} getutxent (void)
The @code{getutxent} function is similar to @code{getutent}, but returns
-a pointer to a @code{struct utmpx} instead of @code{struct utmp}. On
-the GNU system it simply is an alias for @code{getutent}.
+a pointer to a @code{struct utmpx} instead of @code{struct utmp}. In
+@theglibc{} it simply is an alias for @code{getutent}.
@end deftypefun
@comment utmpx.h
@comment XPG4.2
@deftypefun void endutxent (void)
-This function is similar to @code{endutent}. On the GNU system it is
+This function is similar to @code{endutent}. In @theglibc{} it is
simply an alias for @code{endutent}.
@end deftypefun
@@ -1353,7 +1353,7 @@ simply an alias for @code{endutent}.
@comment XPG4.2
@deftypefun {struct utmpx *} getutxid (const struct utmpx *@var{id})
This function is similar to @code{getutid}, but uses @code{struct utmpx}
-instead of @code{struct utmp}. On the GNU system it is simply an alias
+instead of @code{struct utmp}. In @theglibc{} it is simply an alias
for @code{getutid}.
@end deftypefun
@@ -1361,7 +1361,7 @@ for @code{getutid}.
@comment XPG4.2
@deftypefun {struct utmpx *} getutxline (const struct utmpx *@var{line})
This function is similar to @code{getutid}, but uses @code{struct utmpx}
-instead of @code{struct utmp}. On the GNU system it is simply an alias
+instead of @code{struct utmp}. In @theglibc{} it is simply an alias
for @code{getutline}.
@end deftypefun
@@ -1370,7 +1370,7 @@ for @code{getutline}.
@deftypefun {struct utmpx *} pututxline (const struct utmpx *@var{utmp})
The @code{pututxline} function is functionally identical to
@code{pututline}, but uses @code{struct utmpx} instead of @code{struct
-utmp}. On the GNU system, @code{pututxline} is simply an alias for
+utmp}. In @theglibc{}, @code{pututxline} is simply an alias for
@code{pututline}.
@end deftypefun
@@ -1378,12 +1378,12 @@ utmp}. On the GNU system, @code{pututxline} is simply an alias for
@comment XPG4.2
@deftypefun int utmpxname (const char *@var{file})
The @code{utmpxname} function is functionally identical to
-@code{utmpname}. On the GNU system, @code{utmpxname} is simply an
+@code{utmpname}. In @theglibc{}, @code{utmpxname} is simply an
alias for @code{utmpname}.
@end deftypefun
You can translate between a traditional @code{struct utmp} and an XPG
-@code{struct utmpx} with the following functions. On the GNU system,
+@code{struct utmpx} with the following functions. In @theglibc{},
these functions are merely copies, since the two structures are
identical.
@@ -1941,7 +1941,7 @@ without loops.
Sun's implementation allows netgroups only for the @code{nis} or
@code{nisplus} service, @pxref{Services in the NSS configuration}. The
-implementation in the GNU C library has no such restriction. An entry
+implementation in @theglibc{} has no such restriction. An entry
in either of the input services must have the following form:
@smallexample
diff --git a/math/Makefile b/math/Makefile
index 6a6688dd0f..3a671aac71 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -26,9 +26,6 @@ headers := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \
bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \
bits/math-finite.h
-# Internal header files.
-distribute := math_ldbl.h math_private.h machine/asm.h
-
# FPU support code.
aux := setfpucw fpu_control
@@ -84,7 +81,6 @@ calls = s_isinf s_isnan s_finite s_copysign s_modf s_scalbn s_frexp s_ldexp \
generated += $(foreach s,.c .S l.c l.S f.c f.S,$(calls:s_%=m_%$s))
routines = $(calls) $(calls:=f) $(long-c-$(long-double-fcts))
long-c-yes = $(calls:=l)
-distribute += $(filter-out $(generated),$(long-m-yes:=.c) $(long-c-yes:=.c))
# Rules for the test suite.
tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
@@ -94,7 +90,6 @@ tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
# We do the `long double' tests only if this data type is available and
# distinct from `double'.
test-longdouble-yes = test-ldouble test-ildoubl
-distribute += $(test-longdouble-yes:=.c)
ifneq (no,$(PERL))
libm-tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \
@@ -139,15 +134,12 @@ CPPFLAGS-test-idouble.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \
CPPFLAGS-test-ildoubl.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \
-DTEST_FAST_MATH -fno-builtin
-distribute += libm-test.inc gen-libm-test.pl README.libm-test
-
# The -lieee module sets the _LIB_VERSION_ switch to IEEE mode
# for error handling in the -lm functions.
install-lib += libieee.a
non-lib.a += libieee.a
extra-objs += libieee.a ieee-math.o
-distribute += ieee-math.c
include ../Rules
diff --git a/math/e_exp2l.c b/math/e_exp2l.c
index e7e493933a..8904d3e4a0 100644
--- a/math/e_exp2l.c
+++ b/math/e_exp2l.c
@@ -1,11 +1,49 @@
+/* Compute 2^x.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
#include <math.h>
#include <math_private.h>
+#include <float.h>
long double
__ieee754_exp2l (long double x)
{
- /* This is a very stupid and inprecise implementation. It'll get
- replaced sometime (soon?). */
- return __ieee754_expl (M_LN2l * x);
+ if (__builtin_expect (isless (x, (long double) LDBL_MAX_EXP), 1))
+ {
+ if (__builtin_expect (isgreaterequal (x, (long double) (LDBL_MIN_EXP
+ - LDBL_MANT_DIG
+ - 1)), 1))
+ {
+ int intx = (int) x;
+ long double fractx = x - intx;
+ return __scalbnl (__ieee754_expl (M_LN2l * fractx), intx);
+ }
+ else
+ {
+ /* Underflow or exact zero. */
+ if (__isinfl (x))
+ return 0;
+ else
+ return LDBL_MIN * LDBL_MIN;
+ }
+ }
+ else
+ /* Infinity, NaN or overflow. */
+ return LDBL_MAX * x;
}
strong_alias (__ieee754_exp2l, __exp2l_finite)
diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl
index 579fbe5a9e..395bb65513 100755
--- a/math/gen-libm-test.pl
+++ b/math/gen-libm-test.pl
@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
-# Copyright (C) 1999, 2006 Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# Contributed by Andreas Jaeger <aj@suse.de>, 1999.
@@ -78,8 +78,10 @@ use vars qw ($output_dir $ulps_file);
"M_SQRT_PIl" => "sqrt (pi)",
"INVALID_EXCEPTION" => "invalid exception",
"DIVIDE_BY_ZERO_EXCEPTION" => "division by zero exception",
+ "OVERFLOW_EXCEPTION" => "overflow exception",
"INVALID_EXCEPTION_OK" => "invalid exception allowed",
"DIVIDE_BY_ZERO_EXCEPTION_OK" => "division by zero exception allowed",
+ "OVERFLOW_EXCEPTION_OK" => "overflow exception allowed",
"EXCEPTIONS_OK" => "exceptions allowed",
"IGNORE_ZERO_INF_SIGN" => "sign of zero/inf not specified",
"INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN" => "invalid exception and sign of zero/inf not specified"
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 1016753c78..32bce45140 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -78,8 +78,8 @@
against. These implemented tests should check all cases that are
specified in ISO C99.
- Exception testing: At the moment only divide-by-zero and invalid
- exceptions are tested. Overflow/underflow and inexact exceptions
+ Exception testing: At the moment only divide-by-zero, invalid and
+ overflow exceptions are tested. Underflow and inexact exceptions
aren't checked at the moment.
NaN values: There exist signalling and quiet NaNs. This implementation
@@ -132,12 +132,14 @@
#define NO_EXCEPTION 0x0
#define INVALID_EXCEPTION 0x1
#define DIVIDE_BY_ZERO_EXCEPTION 0x2
+#define OVERFLOW_EXCEPTION 0x4
/* The next flags signals that those exceptions are allowed but not required. */
-#define INVALID_EXCEPTION_OK 0x4
-#define DIVIDE_BY_ZERO_EXCEPTION_OK 0x8
+#define INVALID_EXCEPTION_OK 0x8
+#define DIVIDE_BY_ZERO_EXCEPTION_OK 0x10
+#define OVERFLOW_EXCEPTION_OK 0x20
#define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
/* Some special test flags, passed togther with exceptions. */
-#define IGNORE_ZERO_INF_SIGN 0x10
+#define IGNORE_ZERO_INF_SIGN 0x40
/* Various constants (we must supply them precalculated for accuracy). */
#define M_PI_6l .52359877559829887307710723054658383L
@@ -451,6 +453,11 @@ test_exceptions (const char *test_name, int exception)
test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
"Invalid operation");
#endif
+#ifdef FE_OVERFLOW
+ if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
+ test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
+ FE_OVERFLOW, "Overflow");
+#endif
feclearexcept (FE_ALL_EXCEPT);
}
@@ -739,6 +746,8 @@ acos_test (void)
/* |x| > 1: */
TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (acos, max_value, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (acos, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (acos, 0, M_PI_2l);
TEST_f_f (acos, minus_zero, M_PI_2l);
@@ -768,6 +777,7 @@ acosh_test (void)
/* x < 1: */
TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (acosh, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (acosh, 1, 0);
TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
@@ -793,6 +803,8 @@ asin_test (void)
/* asin x == NaN plus invalid exception for |x| > 1. */
TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (asin, max_value, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (asin, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (asin, 0, 0);
TEST_f_f (asin, minus_zero, minus_zero);
@@ -878,6 +890,8 @@ atanh_test (void)
/* atanh (x) == NaN plus invalid exception if |x| > 1. */
TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (atanh, max_value, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (atanh, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
@@ -949,6 +963,8 @@ atan2_test (void)
TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
TEST_ff_f (atan2, nan_value, nan_value, nan_value);
+ TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
+
TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
@@ -1065,6 +1081,32 @@ cacos_test (void)
TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
+ TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
+ TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
+ TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
+ TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
+ TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
+ TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
+ TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
+ TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
+ TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
+ TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
+ TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
+ TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
+
+ TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
+ TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
+ TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
+ TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
+ TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
+ TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
+ TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
+ TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
+ TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
+ TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
+ TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
+ TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
+
TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
@@ -1127,6 +1169,32 @@ cacosh_test (void)
TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
+ TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
+ TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
+ TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
+ TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
+ TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
+ TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
+ TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
+ TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
+ TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
+ TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
+ TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
+ TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
+
+ TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
+ TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
+ TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
+ TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
+ TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
+ TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
+ TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
+ TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
+ TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
+ TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
+ TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
+ TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
+
TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
@@ -1258,6 +1326,32 @@ casin_test (void)
TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
+ TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
+ TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
+ TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
+ TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
+ TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
+ TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
+ TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
+ TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
+ TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
+ TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
+ TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
+ TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
+
+ TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
+ TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
+ TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
+ TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
+ TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
+ TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
+ TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
+ TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
+ TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
+ TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
+ TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
+ TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
+
TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
@@ -1322,6 +1416,32 @@ casinh_test (void)
TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
+ TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
+ TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
+ TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
+ TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
+ TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
+ TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
+ TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
+ TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
+ TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
+ TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
+ TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
+ TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
+
+ TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
+ TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
+ TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
+ TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
+ TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
+ TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
+ TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
+ TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
+ TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
+ TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
+ TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
+ TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
+
TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
@@ -1781,6 +1901,50 @@ cexp_test (void)
TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
+ TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
+ TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
+ TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
+
+#ifndef TEST_FLOAT
+ TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
+ TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
+ TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
+ TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
+#endif
+
+ TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
+ TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L);
+
+#ifndef TEST_FLOAT
+ TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
+ TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
+ TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L);
+#endif
+
+#ifdef TEST_FLOAT
+ TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
+#endif
+
+#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
+ TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
+#endif
+
+ TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
+ TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
+
END (cexp, complex);
}
@@ -1863,6 +2027,24 @@ clog_test (void)
TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
+ TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
+ TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L);
+ TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
+ TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
+
+#ifndef TEST_FLOAT
+ TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
+ TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
+ TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
+ TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
+ TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
+ TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
+#endif
+
END (clog, complex);
}
@@ -1929,6 +2111,24 @@ clog10_test (void)
TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
+ TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
+ TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L);
+ TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
+ TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
+
+#ifndef TEST_FLOAT
+ TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
+ TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
+ TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
+ TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
+ TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
+ TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
+#endif
+
END (clog10, complex);
}
@@ -2008,15 +2208,163 @@ cos_test (void)
TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
+ TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
+ TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
+
#ifdef TEST_DOUBLE
TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
#endif
+#ifndef TEST_FLOAT
+ TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
+ TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
+#endif
+
END (cos);
}
static void
+cos_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cos_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cos_tonearest);
+}
+
+
+static void
+cos_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cos_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cos_towardzero);
+}
+
+
+static void
+cos_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cos_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cos_downward);
+}
+
+
+static void
+cos_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cos_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cos_upward);
+}
+
+
+static void
cosh_test (void)
{
errno = 0;
@@ -2042,6 +2390,114 @@ cosh_test (void)
static void
+cosh_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_tonearest);
+}
+
+
+static void
+cosh_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_towardzero);
+}
+
+
+static void
+cosh_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_downward);
+}
+
+
+static void
+cosh_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_upward);
+}
+
+
+static void
cpow_test (void)
{
errno = 0;
@@ -2309,6 +2765,24 @@ csqrt_test (void)
part). */
TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
+ TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
+ TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
+ TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
+ TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
+
+#ifndef TEST_FLOAT
+ TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
+ TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
+ TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
+ TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
+ TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
+ TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L, 8.297059146828716918029689466551384219370e-2476L);
+#endif
+
END (csqrt, complex);
}
@@ -2478,12 +2952,18 @@ erfc_test (void)
TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
+ TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
+ TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
+ TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
#ifdef TEST_LDOUBLE
/* The result can only be represented in long double. */
# if LDBL_MIN_10_EXP < -319
TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
+# endif
#endif
END (erfc);
@@ -2521,11 +3001,124 @@ exp_test (void)
TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
#endif
+ /* Bug 13922: OVERFLOW exception may be missing. */
+ TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+ /* Bug 13705: spurious OVERFLOW exception may be present. */
+ TEST_f_f (exp, -max_value, 0, OVERFLOW_EXCEPTION_OK);
+
END (exp);
}
static void
+exp_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(exp) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (exp_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (exp, 1, M_El);
+ TEST_f_f (exp, 2, M_E2l);
+ TEST_f_f (exp, 3, M_E3l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (exp_tonearest);
+}
+
+
+static void
+exp_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(exp) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (exp_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (exp, 1, M_El);
+ TEST_f_f (exp, 2, M_E2l);
+ TEST_f_f (exp, 3, M_E3l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (exp_towardzero);
+}
+
+
+static void
+exp_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(exp) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (exp_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (exp, 1, M_El);
+ TEST_f_f (exp, 2, M_E2l);
+ TEST_f_f (exp, 3, M_E3l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (exp_downward);
+}
+
+
+static void
+exp_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(exp) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (exp_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (exp, 1, M_El);
+ TEST_f_f (exp, 2, M_E2l);
+ TEST_f_f (exp, 3, M_E3l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (exp_upward);
+}
+
+
+static void
exp10_test (void)
{
errno = 0;
@@ -2544,8 +3137,13 @@ exp10_test (void)
TEST_f_f (exp10, nan_value, nan_value);
TEST_f_f (exp10, 3, 1000);
TEST_f_f (exp10, -1, 0.1L);
- TEST_f_f (exp10, 1e6, plus_infty);
+ TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
TEST_f_f (exp10, -1e6, 0);
+#ifndef TEST_LDOUBLE /* Bug 13914: spurious exceptions. */
+ TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
+ /* Bug 13924: spurious OVERFLOW exception may be present. */
+ TEST_f_f (exp10, -max_value, 0, OVERFLOW_EXCEPTION_OK);
+#endif
TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
END (exp10);
@@ -2571,10 +3169,27 @@ exp2_test (void)
TEST_f_f (exp2, 10, 1024);
TEST_f_f (exp2, -1, 0.5);
- TEST_f_f (exp2, 1e6, plus_infty);
+ TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
TEST_f_f (exp2, -1e6, 0);
+ TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_f_f (exp2, -max_value, 0);
TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
+ TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
+ TEST_f_f (exp2, 127, 0x1p127);
+ TEST_f_f (exp2, -149, 0x1p-149);
+
+#ifndef TEST_FLOAT
+ TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
+ TEST_f_f (exp2, 1023, 0x1p1023);
+ TEST_f_f (exp2, -1074, 0x1p-1074);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_f_f (exp2, 16383, 0x1p16383L);
+ TEST_f_f (exp2, -16400, 0x1p-16400L);
+#endif
+
END (exp2);
}
@@ -2602,9 +3217,19 @@ expm1_test (void)
TEST_f_f (expm1, 1, M_El - 1.0);
TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
+#endif
+
errno = 0;
- TEST_f_f (expm1, 100000.0, plus_infty);
+ /* Bug 13787: OVERFLOW exception may be missing. */
+ TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION_OK);
check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
+ /* Bug 13787: OVERFLOW exception may be missing. */
+ TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+#ifndef TEST_LDOUBLE /* Bug 13923. */
+ TEST_f_f (expm1, -max_value, -1);
+#endif
END (expm1);
}
@@ -3091,6 +3716,19 @@ hypot_test (void)
TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
+#if !(defined TEST_FLOAT && defined TEST_INLINE)
+ TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
+ TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
+#endif
+
+#ifndef TEST_FLOAT
+ TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
+ TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
+#endif
+
END (hypot);
}
@@ -3177,6 +3815,12 @@ j0_test (void)
TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
+ TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
+
+#ifndef TEST_FLOAT
+ TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
+#endif
+
END (j0);
}
@@ -3212,6 +3856,12 @@ j1_test (void)
TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
+ TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
+
+#ifndef TEST_FLOAT
+ TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
+#endif
+
END (j1);
}
@@ -3292,7 +3942,9 @@ jn_test (void)
TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
- TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L)
+ TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
+
+ TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L);
END (jn);
}
@@ -3340,6 +3992,8 @@ lgamma_test (void)
TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
TEST_f_f (lgamma, minus_infty, plus_infty);
+ TEST_f_f (lgamma, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ TEST_f_f (lgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
TEST_f_f1 (lgamma, 1, 0, 1);
@@ -4241,6 +4895,7 @@ log_test (void)
TEST_f_f (log, 1, 0);
TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (log, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_f_f (log, plus_infty, plus_infty);
TEST_f_f (log, nan_value, nan_value);
@@ -4273,6 +4928,7 @@ log10_test (void)
/* log10 (x) == NaN plus invalid exception if x < 0. */
TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (log10, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_f_f (log10, plus_infty, plus_infty);
@@ -4305,6 +4961,7 @@ log1p_test (void)
TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (log1p, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_f_f (log1p, plus_infty, plus_infty);
@@ -4336,6 +4993,7 @@ log2_test (void)
TEST_f_f (log2, 1, 0);
TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (log2, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_f_f (log2, plus_infty, plus_infty);
@@ -4395,7 +5053,7 @@ lround_test (void)
TEST_f_l (lround, 1073741824.01, 1073741824);
# if LONG_MAX > 281474976710656
TEST_f_l (lround, 281474976710656.025, 281474976710656);
- TEST_f_l (llround, -3.65309740835E17, -365309740835000000);
+ TEST_f_l (lround, 18014398509481974, 18014398509481974);
# endif
TEST_f_l (lround, 2097152.5, 2097153);
TEST_f_l (lround, -2097152.5, -2097153);
@@ -4438,6 +5096,7 @@ llround_test (void)
TEST_f_L (llround, -2097152.5, -2097153);
TEST_f_L (llround, 34359738368.5, 34359738369ll);
TEST_f_L (llround, -34359738368.5, -34359738369ll);
+ TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
#endif
/* Test boundary conditions. */
@@ -4680,8 +5339,8 @@ nextafter_test (void)
FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
LDBL_MAX, DBL_MAX, FLT_MAX);
- TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty);
- TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty);
+ TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
#ifdef TEST_LDOUBLE
// XXX Enable once gcc is fixed.
@@ -4860,11 +5519,75 @@ pow_test (void)
TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
errno = 0;
+ TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+#ifndef TEST_FLOAT
+ errno = 0;
+ TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ errno = 0;
+ TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+# endif
+# if LDBL_MANT_DIG >= 106
+ errno = 0;
+ TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+# endif
+# if LDBL_MANT_DIG >= 113
+ errno = 0;
+ TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+# endif
+#endif
TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
errno = 0;
TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
+#ifndef TEST_FLOAT
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
+# endif
+# if LDBL_MANT_DIG >= 106
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
+# endif
+# if LDBL_MANT_DIG >= 113
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
+# endif
+#endif
errno = 0;
TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
@@ -4873,16 +5596,36 @@ pow_test (void)
TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
errno = 0;
+ TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
errno = 0;
TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
+ errno = 0;
+ TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
+ check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
- TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty);
+ TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
TEST_ff_f (pow, 10, -0x1p72L, 0);
- TEST_ff_f (pow, max_value, max_value, plus_infty);
- TEST_ff_f (pow, 10, -max_value, 0);
+ /* Bug 13873: OVERFLOW exception may be missing. */
+ TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+ /* Bug 13872: spurious OVERFLOW exception may be present. */
+ TEST_ff_f (pow, 10, -max_value, 0, OVERFLOW_EXCEPTION_OK);
TEST_ff_f (pow, 0, 1, 0);
TEST_ff_f (pow, 0, 11, 0);
@@ -4914,32 +5657,155 @@ pow_test (void)
/* pow (+inf, y) == +inf for y > 0. */
TEST_ff_f (pow, plus_infty, 2, plus_infty);
+ TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
+# endif
+#endif
+ TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
+ TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
+ TEST_ff_f (pow, plus_infty, max_value, plus_infty);
/* pow (+inf, y) == +0 for y < 0. */
TEST_ff_f (pow, plus_infty, -1, 0.0);
+ TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
+# endif
+#endif
+ TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
+ TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
+ TEST_ff_f (pow, plus_infty, -max_value, 0.0);
/* pow (-inf, y) == -inf for y an odd integer > 0. */
TEST_ff_f (pow, minus_infty, 27, minus_infty);
+ TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
+# endif
+#endif
/* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
TEST_ff_f (pow, minus_infty, 28, plus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
+ TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
+ TEST_ff_f (pow, minus_infty, max_value, plus_infty);
/* pow (-inf, y) == -0 for y an odd integer < 0. */
TEST_ff_f (pow, minus_infty, -3, minus_zero);
+ TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
+ TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
+ TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
+ TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
+ TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
+ TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
+# endif
+#endif
/* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
TEST_ff_f (pow, minus_infty, -2.0, 0.0);
+ TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
+ TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
+ TEST_ff_f (pow, minus_infty, -max_value, 0.0);
/* pow (+0, y) == +0 for y an odd integer > 0. */
TEST_ff_f (pow, 0.0, 27, 0.0);
+ TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
+# endif
+#endif
/* pow (-0, y) == -0 for y an odd integer > 0. */
TEST_ff_f (pow, minus_zero, 27, minus_zero);
+ TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
+ TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
+ TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
+ TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
+ TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
+ TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
+# endif
+#endif
/* pow (+0, y) == +0 for y > 0 and not an odd integer. */
TEST_ff_f (pow, 0.0, 4, 0.0);
+ TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
+ TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
+ TEST_ff_f (pow, 0.0, max_value, 0.0);
/* pow (-0, y) == +0 for y > 0 and not an odd integer. */
TEST_ff_f (pow, minus_zero, 4, 0.0);
+ TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
+ TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
+ TEST_ff_f (pow, minus_zero, max_value, 0.0);
TEST_ff_f (pow, 16, 0.25L, 2);
TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
@@ -4952,9 +5818,367 @@ pow_test (void)
TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0);
#endif
+ TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
+ TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
+ TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
+ TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
+ TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
+ TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
+# endif
+#endif
+ TEST_ff_f (pow, -1.0, -max_value, 1.0);
+
+ TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
+ TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
+ TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
+ TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
+ TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
+ TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
+# endif
+#endif
+ TEST_ff_f (pow, -1.0, max_value, 1.0);
+
+ TEST_ff_f (pow, -2.0, 126, 0x1p126);
+ TEST_ff_f (pow, -2.0, 127, -0x1p127);
+ TEST_ff_f (pow, -2.0, -126, 0x1p-126);
+ TEST_ff_f (pow, -2.0, -127, -0x1p-127);
+
+ TEST_ff_f (pow, -2.0, -0xffffff, minus_zero);
+ TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero);
+ TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero);
+ TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
+ TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
+ TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
+# endif
+#endif
+ TEST_ff_f (pow, -2.0, -max_value, plus_zero);
+
+ TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+#endif
+ /* Bug 13873: OVERFLOW exception may be missing. */
+ TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+
+ TEST_ff_f (pow, -max_value, 0.5, nan_value, INVALID_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 1.5, nan_value, INVALID_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 1000.5, nan_value, INVALID_EXCEPTION);
+ TEST_ff_f (pow, -max_value, -2, plus_zero);
+ TEST_ff_f (pow, -max_value, -3, minus_zero);
+ TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
+
+ TEST_ff_f (pow, -max_value, -0xffffff, minus_zero);
+ TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero);
+ TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero);
+ TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
+ TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
+ TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
+# endif
+#endif
+ /* Bug 13872: spurious OVERFLOW exception may be present. */
+ TEST_ff_f (pow, -max_value, -max_value, plus_zero, OVERFLOW_EXCEPTION_OK);
+
+ TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+#endif
+ /* Bug 13873: OVERFLOW exception may be missing. */
+ TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+
+ TEST_ff_f (pow, -0.5, 126, 0x1p-126);
+ TEST_ff_f (pow, -0.5, 127, -0x1p-127);
+ TEST_ff_f (pow, -0.5, -126, 0x1p126);
+ TEST_ff_f (pow, -0.5, -127, -0x1p127);
+
+ TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+#endif
+ /* Bug 13873: OVERFLOW exception may be missing. */
+ TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+
+ TEST_ff_f (pow, -0.5, 0xffffff, minus_zero);
+ TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero);
+ TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero);
+ TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
+ TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
+ TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
+# endif
+#endif
+ TEST_ff_f (pow, -0.5, max_value, plus_zero);
+
+ TEST_ff_f (pow, -min_value, 0.5, nan_value, INVALID_EXCEPTION);
+ TEST_ff_f (pow, -min_value, 1.5, nan_value, INVALID_EXCEPTION);
+ TEST_ff_f (pow, -min_value, 1000.5, nan_value, INVALID_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, 1, -min_value);
+ TEST_ff_f (pow, -min_value, 2, plus_zero);
+ TEST_ff_f (pow, -min_value, 3, minus_zero);
+
+ TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
+# endif
+#endif
+ /* Bug 13873: OVERFLOW exception may be missing. */
+ TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
+
+ TEST_ff_f (pow, -min_value, 0xffffff, minus_zero);
+ TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero);
+#ifndef TEST_FLOAT
+ TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero);
+ TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero);
+#endif
+#ifdef TEST_LDOUBLE
+# if LDBL_MANT_DIG >= 64
+ TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero);
+ TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 106
+ TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
+ TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
+# endif
+# if LDBL_MANT_DIG >= 113
+ TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
+ TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
+# endif
+#endif
+ /* Bug 13872: spurious OVERFLOW exception may be present. */
+ TEST_ff_f (pow, -min_value, max_value, plus_zero, OVERFLOW_EXCEPTION_OK);
+
END (pow);
}
+
+static void
+pow_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_tonearest);
+}
+
+
+static void
+pow_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_towardzero);
+}
+
+
+static void
+pow_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_downward);
+}
+
+
+static void
+pow_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_upward);
+}
+
+
static void
remainder_test (void)
{
@@ -5671,6 +6895,15 @@ scalbn_test (void)
TEST_fi_f (scalbn, 1, 0L, 1);
+ TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbn, 1, INT_MIN, plus_zero);
+ TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero);
+ TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero);
+ TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero);
+
END (scalbn);
}
@@ -5693,6 +6926,35 @@ scalbln_test (void)
TEST_fl_f (scalbln, 1, 0L, 1);
+ TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, 1, INT_MIN, plus_zero);
+ TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero);
+ TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero);
+ TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero);
+
+ TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero);
+ TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero);
+ TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero);
+ TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero);
+
+#if LONG_MAX >= 0x100000000
+ TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero);
+ TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero);
+ TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero);
+ TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero);
+#endif
+
END (scalbn);
}
@@ -5746,17 +7008,165 @@ sin_test (void)
TEST_f_f (sin, -M_PI_2l, -1);
TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
+ TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
+ TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
+
#ifdef TEST_DOUBLE
TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
#endif
+#ifndef TEST_FLOAT
+ TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
+ TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
+#endif
+
END (sin);
}
static void
+sin_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sin_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sin_tonearest);
+}
+
+
+static void
+sin_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sin_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sin_towardzero);
+}
+
+
+static void
+sin_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sin_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sin_downward);
+}
+
+
+static void
+sin_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sin_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sin_upward);
+}
+
+
+static void
sincos_test (void)
{
FLOAT sin_res, cos_res;
@@ -5782,10 +7192,22 @@ sincos_test (void)
TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
+ TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
+ TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
+
#ifdef TEST_DOUBLE
TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
#endif
+#ifndef TEST_FLOAT
+ TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
+ TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
+#endif
+
END (sincos);
}
@@ -5814,6 +7236,115 @@ sinh_test (void)
END (sinh);
}
+
+static void
+sinh_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_tonearest);
+}
+
+
+static void
+sinh_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_towardzero);
+}
+
+
+static void
+sinh_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_downward);
+}
+
+
+static void
+sinh_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_upward);
+}
+
+
static void
sqrt_test (void)
{
@@ -5833,6 +7364,7 @@ sqrt_test (void)
/* sqrt (x) == NaN plus invalid exception for x < 0. */
TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (sqrt, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_f_f (sqrt, nan_value, nan_value);
@@ -5874,9 +7406,158 @@ tan_test (void)
TEST_f_f (tan, M_PI_4l, 1);
TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
+ TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
+ TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
+
+#ifndef TEST_FLOAT
+ TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
+ TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+ TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
+#endif
+
END (tan);
}
+
+static void
+tan_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(tan) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (tan_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (tan_tonearest);
+}
+
+
+static void
+tan_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(tan) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (tan_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (tan_towardzero);
+}
+
+
+static void
+tan_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(tan) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (tan_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (tan_downward);
+}
+
+
+static void
+tan_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(tan) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (tan_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (tan_upward);
+}
+
+
static void
tanh_test (void)
{
@@ -5922,10 +7603,12 @@ tgamma_test (void)
START (tgamma);
TEST_f_f (tgamma, plus_infty, plus_infty);
+ TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
/* tgamma (x) == NaN plus invalid exception for integer x <= 0. */
TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
+ TEST_f_f (tgamma, -max_value, nan_value, INVALID_EXCEPTION);
TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_f_f (tgamma, nan_value, nan_value);
@@ -6069,6 +7752,7 @@ y0_test (void)
START (y0);
TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
+ TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
TEST_f_f (y0, 0.0, minus_infty);
TEST_f_f (y0, nan_value, nan_value);
TEST_f_f (y0, plus_infty, 0);
@@ -6081,6 +7765,12 @@ y0_test (void)
TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
+ TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
+
+#ifndef TEST_FLOAT
+ TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
+#endif
+
END (y0);
}
@@ -6103,6 +7793,7 @@ y1_test (void)
START (y1);
TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
+ TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
TEST_f_f (y1, 0.0, minus_infty);
TEST_f_f (y1, plus_infty, 0);
TEST_f_f (y1, nan_value, nan_value);
@@ -6115,6 +7806,12 @@ y1_test (void)
TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
+ TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
+
+#ifndef TEST_FLOAT
+ TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
+#endif
+
END (y1);
}
@@ -6138,6 +7835,7 @@ yn_test (void)
/* yn (0, x) == y0 (x) */
TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
+ TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
TEST_ff_f (yn, 0, 0.0, minus_infty);
TEST_ff_f (yn, 0, nan_value, nan_value);
TEST_ff_f (yn, 0, plus_infty, 0);
@@ -6375,20 +8073,44 @@ main (int argc, char **argv)
atan_test ();
atan2_test ();
cos_test ();
+ cos_test_tonearest ();
+ cos_test_towardzero ();
+ cos_test_downward ();
+ cos_test_upward ();
sin_test ();
+ sin_test_tonearest ();
+ sin_test_towardzero ();
+ sin_test_downward ();
+ sin_test_upward ();
sincos_test ();
tan_test ();
+ tan_test_tonearest ();
+ tan_test_towardzero ();
+ tan_test_downward ();
+ tan_test_upward ();
/* Hyperbolic functions: */
acosh_test ();
asinh_test ();
atanh_test ();
cosh_test ();
+ cosh_test_tonearest ();
+ cosh_test_towardzero ();
+ cosh_test_downward ();
+ cosh_test_upward ();
sinh_test ();
+ sinh_test_tonearest ();
+ sinh_test_towardzero ();
+ sinh_test_downward ();
+ sinh_test_upward ();
tanh_test ();
/* Exponential and logarithmic functions: */
exp_test ();
+ exp_test_tonearest ();
+ exp_test_towardzero ();
+ exp_test_downward ();
+ exp_test_upward ();
exp10_test ();
exp2_test ();
expm1_test ();
@@ -6411,6 +8133,10 @@ main (int argc, char **argv)
fabs_test ();
hypot_test ();
pow_test ();
+ pow_test_tonearest ();
+ pow_test_towardzero ();
+ pow_test_downward ();
+ pow_test_upward ();
sqrt_test ();
/* Error and gamma functions: */
diff --git a/math/s_cacosh.c b/math/s_cacosh.c
index 95bf005cd3..ef49088c3d 100644
--- a/math/s_cacosh.c
+++ b/math/s_cacosh.c
@@ -1,5 +1,5 @@
/* Return arc hyperbole cosine for double value.
- Copyright (C) 1997, 2006, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -66,9 +66,13 @@ __cacosh (__complex__ double x)
}
/* The factor 16 is just a guess. */
else if (16.0 * fabs (__imag__ x) < fabs (__real__ x))
- /* Kahan's formula which avoid cancellation through subtraction in
- some cases. */
- res = 2.0 * __clog (__csqrt ((x + 1.0) / 2.0) + __csqrt ((x - 1.0) / 2.0));
+ {
+ /* Kahan's formula which avoid cancellation through subtraction in
+ some cases. */
+ res = 2.0 * __clog (__csqrt ((x + 1.0) / 2.0) + __csqrt ((x - 1.0) / 2.0));
+ if (signbit (__real__ res))
+ __real__ res = 0.0;
+ }
else
{
__complex__ double y;
diff --git a/math/s_cacoshf.c b/math/s_cacoshf.c
index d634a1b756..fc716ac519 100644
--- a/math/s_cacoshf.c
+++ b/math/s_cacoshf.c
@@ -1,5 +1,5 @@
/* Return arc hyperbole cosine for float value.
- Copyright (C) 1997, 2006, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -66,10 +66,14 @@ __cacoshf (__complex__ float x)
}
/* The factor 16 is just a guess. */
else if (16.0 * fabsf (__imag__ x) < fabsf (__real__ x))
- /* Kahan's formula which avoid cancellation through subtraction in
- some cases. */
- res = 2.0 * __clogf (__csqrtf ((x + 1.0) / 2.0)
- + __csqrtf ((x - 1.0) / 2.0));
+ {
+ /* Kahan's formula which avoid cancellation through subtraction in
+ some cases. */
+ res = 2.0 * __clogf (__csqrtf ((x + 1.0) / 2.0)
+ + __csqrtf ((x - 1.0) / 2.0));
+ if (signbit (__real__ res))
+ __real__ res = 0.0f;
+ }
else
{
__complex__ float y;
diff --git a/math/s_cacoshl.c b/math/s_cacoshl.c
index dcdb1d5a64..3bcab1d277 100644
--- a/math/s_cacoshl.c
+++ b/math/s_cacoshl.c
@@ -1,5 +1,5 @@
/* Return arc hyperbole cosine for long double value.
- Copyright (C) 1997, 1998, 2006, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -66,10 +66,14 @@ __cacoshl (__complex__ long double x)
}
/* The factor 16 is just a guess. */
else if (16.0L * fabsl (__imag__ x) < fabsl (__real__ x))
- /* Kahan's formula which avoid cancellation through subtraction in
- some cases. */
- res = 2.0L * __clogl (__csqrtl ((x + 1.0L) / 2.0L)
- + __csqrtl ((x - 1.0L) / 2.0L));
+ {
+ /* Kahan's formula which avoid cancellation through subtraction in
+ some cases. */
+ res = 2.0L * __clogl (__csqrtl ((x + 1.0L) / 2.0L)
+ + __csqrtl ((x - 1.0L) / 2.0L));
+ if (signbit (__real__ res))
+ __real__ res = 0.0L;
+ }
else
{
__complex__ long double y;
diff --git a/math/s_casinh.c b/math/s_casinh.c
index e06be1cdc6..24ae676a8f 100644
--- a/math/s_casinh.c
+++ b/math/s_casinh.c
@@ -1,5 +1,5 @@
/* Return arc hyperbole sine for double value.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -73,6 +73,11 @@ __casinh (__complex__ double x)
__imag__ y += __imag__ x;
res = __clog (y);
+
+ /* Ensure zeros have correct sign and results are correct if
+ very close to branch cuts. */
+ __real__ res = __copysign (__real__ res, __real__ x);
+ __imag__ res = __copysign (__imag__ res, __imag__ x);
}
return res;
diff --git a/math/s_casinhf.c b/math/s_casinhf.c
index 37c67401a3..c7098ef309 100644
--- a/math/s_casinhf.c
+++ b/math/s_casinhf.c
@@ -1,5 +1,5 @@
/* Return arc hyperbole sine for float value.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -73,6 +73,11 @@ __casinhf (__complex__ float x)
__imag__ y += __imag__ x;
res = __clogf (y);
+
+ /* Ensure zeros have correct sign and results are correct if
+ very close to branch cuts. */
+ __real__ res = __copysignf (__real__ res, __real__ x);
+ __imag__ res = __copysignf (__imag__ res, __imag__ x);
}
return res;
diff --git a/math/s_casinhl.c b/math/s_casinhl.c
index de41cb8999..80d7bf500d 100644
--- a/math/s_casinhl.c
+++ b/math/s_casinhl.c
@@ -1,5 +1,5 @@
/* Return arc hyperbole sine for long double value.
- Copyright (C) 1997, 1998, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -73,6 +73,11 @@ __casinhl (__complex__ long double x)
__imag__ y += __imag__ x;
res = __clogl (y);
+
+ /* Ensure zeros have correct sign and results are correct if
+ very close to branch cuts. */
+ __real__ res = __copysignl (__real__ res, __real__ x);
+ __imag__ res = __copysignl (__imag__ res, __imag__ x);
}
return res;
diff --git a/math/s_cexp.c b/math/s_cexp.c
index 82fe8148f7..1d7a5a2c40 100644
--- a/math/s_cexp.c
+++ b/math/s_cexp.c
@@ -1,5 +1,5 @@
/* Return value of complex exponential function for double complex value.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -21,7 +21,7 @@
#include <fenv.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ double
__cexp (__complex__ double x)
@@ -36,20 +36,35 @@ __cexp (__complex__ double x)
if (__builtin_expect (icls >= FP_ZERO, 1))
{
/* Imaginary part is finite. */
- double exp_val = __ieee754_exp (__real__ x);
+ const int t = (int) ((DBL_MAX_EXP - 1) * M_LN2);
double sinix, cosix;
__sincos (__imag__ x, &sinix, &cosix);
- if (isfinite (exp_val))
+ if (__real__ x > t)
{
- __real__ retval = exp_val * cosix;
- __imag__ retval = exp_val * sinix;
+ double exp_t = __ieee754_exp (t);
+ __real__ x -= t;
+ sinix *= exp_t;
+ cosix *= exp_t;
+ if (__real__ x > t)
+ {
+ __real__ x -= t;
+ sinix *= exp_t;
+ cosix *= exp_t;
+ }
+ }
+ if (__real__ x > t)
+ {
+ /* Overflow (original real part of x > 3t). */
+ __real__ retval = DBL_MAX * cosix;
+ __imag__ retval = DBL_MAX * sinix;
}
else
{
- __real__ retval = __copysign (exp_val, cosix);
- __imag__ retval = __copysign (exp_val, sinix);
+ double exp_val = __ieee754_exp (__real__ x);
+ __real__ retval = exp_val * cosix;
+ __imag__ retval = exp_val * sinix;
}
}
else
diff --git a/math/s_cexpf.c b/math/s_cexpf.c
index a9c28ed8c2..4aa9765818 100644
--- a/math/s_cexpf.c
+++ b/math/s_cexpf.c
@@ -1,5 +1,5 @@
/* Return value of complex exponential function for float complex value.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -21,7 +21,7 @@
#include <fenv.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ float
__cexpf (__complex__ float x)
@@ -36,20 +36,35 @@ __cexpf (__complex__ float x)
if (__builtin_expect (icls >= FP_ZERO, 1))
{
/* Imaginary part is finite. */
- float exp_val = __ieee754_expf (__real__ x);
+ const int t = (int) ((FLT_MAX_EXP - 1) * M_LN2);
float sinix, cosix;
__sincosf (__imag__ x, &sinix, &cosix);
- if (isfinite (exp_val))
+ if (__real__ x > t)
{
- __real__ retval = exp_val * cosix;
- __imag__ retval = exp_val * sinix;
+ float exp_t = __ieee754_expf (t);
+ __real__ x -= t;
+ sinix *= exp_t;
+ cosix *= exp_t;
+ if (__real__ x > t)
+ {
+ __real__ x -= t;
+ sinix *= exp_t;
+ cosix *= exp_t;
+ }
+ }
+ if (__real__ x > t)
+ {
+ /* Overflow (original real part of x > 3t). */
+ __real__ retval = FLT_MAX * cosix;
+ __imag__ retval = FLT_MAX * sinix;
}
else
{
- __real__ retval = __copysignf (exp_val, cosix);
- __imag__ retval = __copysignf (exp_val, sinix);
+ float exp_val = __ieee754_expf (__real__ x);
+ __real__ retval = exp_val * cosix;
+ __imag__ retval = exp_val * sinix;
}
}
else
diff --git a/math/s_cexpl.c b/math/s_cexpl.c
index 3059880dbc..256824924f 100644
--- a/math/s_cexpl.c
+++ b/math/s_cexpl.c
@@ -1,5 +1,5 @@
/* Return value of complex exponential function for long double complex value.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -21,7 +21,7 @@
#include <fenv.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ long double
__cexpl (__complex__ long double x)
@@ -36,20 +36,35 @@ __cexpl (__complex__ long double x)
if (__builtin_expect (icls >= FP_ZERO, 1))
{
/* Imaginary part is finite. */
- long double exp_val = __ieee754_expl (__real__ x);
+ const int t = (int) ((LDBL_MAX_EXP - 1) * M_LN2l);
long double sinix, cosix;
__sincosl (__imag__ x, &sinix, &cosix);
- if (isfinite (exp_val))
+ if (__real__ x > t)
{
- __real__ retval = exp_val * cosix;
- __imag__ retval = exp_val * sinix;
+ long double exp_t = __ieee754_expl (t);
+ __real__ x -= t;
+ sinix *= exp_t;
+ cosix *= exp_t;
+ if (__real__ x > t)
+ {
+ __real__ x -= t;
+ sinix *= exp_t;
+ cosix *= exp_t;
+ }
+ }
+ if (__real__ x > t)
+ {
+ /* Overflow (original real part of x > 3t). */
+ __real__ retval = LDBL_MAX * cosix;
+ __imag__ retval = LDBL_MAX * sinix;
}
else
{
- __real__ retval = __copysignl (exp_val, cosix);
- __imag__ retval = __copysignl (exp_val, sinix);
+ long double exp_val = __ieee754_expl (__real__ x);
+ __real__ retval = exp_val * cosix;
+ __imag__ retval = exp_val * sinix;
}
}
else
diff --git a/math/s_clog.c b/math/s_clog.c
index 5bbca00388..15e5e9c678 100644
--- a/math/s_clog.c
+++ b/math/s_clog.c
@@ -1,5 +1,5 @@
/* Compute complex natural logarithm.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -20,7 +20,7 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ double
__clog (__complex__ double x)
@@ -40,8 +40,27 @@ __clog (__complex__ double x)
else if (__builtin_expect (rcls != FP_NAN && icls != FP_NAN, 1))
{
/* Neither real nor imaginary part is NaN. */
- __real__ result = __ieee754_log (__ieee754_hypot (__real__ x,
- __imag__ x));
+ double d;
+ int scale = 0;
+
+ if (fabs (__real__ x) > DBL_MAX / 2.0
+ || fabs (__imag__ x) > DBL_MAX / 2.0)
+ {
+ scale = -1;
+ __real__ x = __scalbn (__real__ x, scale);
+ __imag__ x = __scalbn (__imag__ x, scale);
+ }
+ else if (fabs (__real__ x) < DBL_MIN
+ && fabs (__imag__ x) < DBL_MIN)
+ {
+ scale = DBL_MANT_DIG;
+ __real__ x = __scalbn (__real__ x, scale);
+ __imag__ x = __scalbn (__imag__ x, scale);
+ }
+
+ d = __ieee754_hypot (__real__ x, __imag__ x);
+
+ __real__ result = __ieee754_log (d) - scale * M_LN2;
__imag__ result = __ieee754_atan2 (__imag__ x, __real__ x);
}
else
diff --git a/math/s_clog10.c b/math/s_clog10.c
index 3eb9c518a8..9d366d6f2b 100644
--- a/math/s_clog10.c
+++ b/math/s_clog10.c
@@ -1,5 +1,5 @@
/* Compute complex base 10 logarithm.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -20,7 +20,10 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
+#include <float.h>
+/* log_10 (2). */
+#define M_LOG10_2 0.3010299956639811952137388947244930267682
__complex__ double
__clog10 (__complex__ double x)
@@ -40,8 +43,27 @@ __clog10 (__complex__ double x)
else if (__builtin_expect (rcls != FP_NAN && icls != FP_NAN, 1))
{
/* Neither real nor imaginary part is NaN. */
- __real__ result = __ieee754_log10 (__ieee754_hypot (__real__ x,
- __imag__ x));
+ double d;
+ int scale = 0;
+
+ if (fabs (__real__ x) > DBL_MAX / 2.0
+ || fabs (__imag__ x) > DBL_MAX / 2.0)
+ {
+ scale = -1;
+ __real__ x = __scalbn (__real__ x, scale);
+ __imag__ x = __scalbn (__imag__ x, scale);
+ }
+ else if (fabs (__real__ x) < DBL_MIN
+ && fabs (__imag__ x) < DBL_MIN)
+ {
+ scale = DBL_MANT_DIG;
+ __real__ x = __scalbn (__real__ x, scale);
+ __imag__ x = __scalbn (__imag__ x, scale);
+ }
+
+ d = __ieee754_hypot (__real__ x, __imag__ x);
+
+ __real__ result = __ieee754_log10 (d) - scale * M_LOG10_2;
__imag__ result = M_LOG10E * __ieee754_atan2 (__imag__ x, __real__ x);
}
else
diff --git a/math/s_clog10f.c b/math/s_clog10f.c
index e48d928b3c..11bb0bb9ad 100644
--- a/math/s_clog10f.c
+++ b/math/s_clog10f.c
@@ -1,5 +1,5 @@
/* Compute complex base 10 logarithm.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -20,7 +20,10 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
+#include <float.h>
+/* log_10 (2). */
+#define M_LOG10_2f 0.3010299956639811952137388947244930267682f
__complex__ float
__clog10f (__complex__ float x)
@@ -40,8 +43,27 @@ __clog10f (__complex__ float x)
else if (__builtin_expect (rcls != FP_NAN && icls != FP_NAN, 1))
{
/* Neither real nor imaginary part is NaN. */
- __real__ result = __ieee754_log10f (__ieee754_hypotf (__real__ x,
- __imag__ x));
+ float d;
+ int scale = 0;
+
+ if (fabsf (__real__ x) > FLT_MAX / 2.0f
+ || fabsf (__imag__ x) > FLT_MAX / 2.0f)
+ {
+ scale = -1;
+ __real__ x = __scalbnf (__real__ x, scale);
+ __imag__ x = __scalbnf (__imag__ x, scale);
+ }
+ else if (fabsf (__real__ x) < FLT_MIN
+ && fabsf (__imag__ x) < FLT_MIN)
+ {
+ scale = FLT_MANT_DIG;
+ __real__ x = __scalbnf (__real__ x, scale);
+ __imag__ x = __scalbnf (__imag__ x, scale);
+ }
+
+ d = __ieee754_hypotf (__real__ x, __imag__ x);
+
+ __real__ result = __ieee754_log10f (d) - scale * M_LOG10_2f;
__imag__ result = M_LOG10E * __ieee754_atan2f (__imag__ x, __real__ x);
}
else
diff --git a/math/s_clog10l.c b/math/s_clog10l.c
index 72b553152e..d1fc872cba 100644
--- a/math/s_clog10l.c
+++ b/math/s_clog10l.c
@@ -1,5 +1,5 @@
/* Compute complex base 10 logarithm.
- Copyright (C) 1997, 1998, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -20,7 +20,10 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
+#include <float.h>
+/* log_10 (2). */
+#define M_LOG10_2l 0.3010299956639811952137388947244930267682L
__complex__ long double
__clog10l (__complex__ long double x)
@@ -40,8 +43,27 @@ __clog10l (__complex__ long double x)
else if (__builtin_expect (rcls != FP_NAN && icls != FP_NAN, 1))
{
/* Neither real nor imaginary part is NaN. */
- __real__ result = __ieee754_log10l (__ieee754_hypotl (__real__ x,
- __imag__ x));
+ long double d;
+ int scale = 0;
+
+ if (fabsl (__real__ x) > LDBL_MAX / 2.0L
+ || fabsl (__imag__ x) > LDBL_MAX / 2.0L)
+ {
+ scale = -1;
+ __real__ x = __scalbnl (__real__ x, scale);
+ __imag__ x = __scalbnl (__imag__ x, scale);
+ }
+ else if (fabsl (__real__ x) < LDBL_MIN
+ && fabsl (__imag__ x) < LDBL_MIN)
+ {
+ scale = LDBL_MANT_DIG;
+ __real__ x = __scalbnl (__real__ x, scale);
+ __imag__ x = __scalbnl (__imag__ x, scale);
+ }
+
+ d = __ieee754_hypotl (__real__ x, __imag__ x);
+
+ __real__ result = __ieee754_log10l (d) - scale * M_LOG10_2l;
__imag__ result = M_LOG10El * __ieee754_atan2l (__imag__ x, __real__ x);
}
else
diff --git a/math/s_clogf.c b/math/s_clogf.c
index eb8433a280..0b27506fb4 100644
--- a/math/s_clogf.c
+++ b/math/s_clogf.c
@@ -1,5 +1,5 @@
/* Compute complex natural logarithm.
- Copyright (C) 1997, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -19,9 +19,8 @@
#include <complex.h>
#include <math.h>
-
#include <math_private.h>
-
+#include <float.h>
__complex__ float
__clogf (__complex__ float x)
@@ -41,8 +40,27 @@ __clogf (__complex__ float x)
else if (__builtin_expect (rcls != FP_NAN && icls != FP_NAN, 1))
{
/* Neither real nor imaginary part is NaN. */
- __real__ result = __ieee754_logf (__ieee754_hypotf (__real__ x,
- __imag__ x));
+ float d;
+ int scale = 0;
+
+ if (fabsf (__real__ x) > FLT_MAX / 2.0f
+ || fabsf (__imag__ x) > FLT_MAX / 2.0f)
+ {
+ scale = -1;
+ __real__ x = __scalbnf (__real__ x, scale);
+ __imag__ x = __scalbnf (__imag__ x, scale);
+ }
+ else if (fabsf (__real__ x) < FLT_MIN
+ && fabsf (__imag__ x) < FLT_MIN)
+ {
+ scale = FLT_MANT_DIG;
+ __real__ x = __scalbnf (__real__ x, scale);
+ __imag__ x = __scalbnf (__imag__ x, scale);
+ }
+
+ d = __ieee754_hypotf (__real__ x, __imag__ x);
+
+ __real__ result = __ieee754_logf (d) - scale * (float) M_LN2;
__imag__ result = __ieee754_atan2f (__imag__ x, __real__ x);
}
else
diff --git a/math/s_clogl.c b/math/s_clogl.c
index 11d4878252..8968eefee3 100644
--- a/math/s_clogl.c
+++ b/math/s_clogl.c
@@ -1,5 +1,5 @@
/* Compute complex natural logarithm.
- Copyright (C) 1997, 1998, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -20,7 +20,7 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ long double
__clogl (__complex__ long double x)
@@ -40,8 +40,27 @@ __clogl (__complex__ long double x)
else if (__builtin_expect (rcls != FP_NAN && icls != FP_NAN, 1))
{
/* Neither real nor imaginary part is NaN. */
- __real__ result = __ieee754_logl (__ieee754_hypotl (__real__ x,
- __imag__ x));
+ long double d;
+ int scale = 0;
+
+ if (fabsl (__real__ x) > LDBL_MAX / 2.0L
+ || fabsl (__imag__ x) > LDBL_MAX / 2.0L)
+ {
+ scale = -1;
+ __real__ x = __scalbnl (__real__ x, scale);
+ __imag__ x = __scalbnl (__imag__ x, scale);
+ }
+ else if (fabsl (__real__ x) < LDBL_MIN
+ && fabsl (__imag__ x) < LDBL_MIN)
+ {
+ scale = LDBL_MANT_DIG;
+ __real__ x = __scalbnl (__real__ x, scale);
+ __imag__ x = __scalbnl (__imag__ x, scale);
+ }
+
+ d = __ieee754_hypotl (__real__ x, __imag__ x);
+
+ __real__ result = __ieee754_logl (d) - scale * M_LN2l;
__imag__ result = __ieee754_atan2l (__imag__ x, __real__ x);
}
else
diff --git a/math/s_csqrt.c b/math/s_csqrt.c
index 76585e889c..002ea5fdc2 100644
--- a/math/s_csqrt.c
+++ b/math/s_csqrt.c
@@ -1,5 +1,5 @@
/* Complex square root of double value.
- Copyright (C) 1997, 1998, 2005, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Based on an algorithm by Stephen L. Moshier <moshier@world.std.com>.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -21,7 +21,7 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ double
__csqrt (__complex__ double x)
@@ -83,6 +83,22 @@ __csqrt (__complex__ double x)
else
{
double d, r, s;
+ int scale = 0;
+
+ if (fabs (__real__ x) > DBL_MAX / 2.0
+ || fabs (__imag__ x) > DBL_MAX / 2.0)
+ {
+ scale = 1;
+ __real__ x = __scalbn (__real__ x, -2 * scale);
+ __imag__ x = __scalbn (__imag__ x, -2 * scale);
+ }
+ else if (fabs (__real__ x) < DBL_MIN
+ && fabs (__imag__ x) < DBL_MIN)
+ {
+ scale = -(DBL_MANT_DIG / 2);
+ __real__ x = __scalbn (__real__ x, -2 * scale);
+ __imag__ x = __scalbn (__imag__ x, -2 * scale);
+ }
d = __ieee754_hypot (__real__ x, __imag__ x);
/* Use the identity 2 Re res Im res = Im x
@@ -98,6 +114,12 @@ __csqrt (__complex__ double x)
r = fabs ((0.5 * __imag__ x) / s);
}
+ if (scale)
+ {
+ r = __scalbn (r, scale);
+ s = __scalbn (s, scale);
+ }
+
__real__ res = r;
__imag__ res = __copysign (s, __imag__ x);
}
diff --git a/math/s_csqrtf.c b/math/s_csqrtf.c
index d9949c685b..6539ba2249 100644
--- a/math/s_csqrtf.c
+++ b/math/s_csqrtf.c
@@ -1,5 +1,5 @@
/* Complex square root of float value.
- Copyright (C) 1997, 1998, 2005, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Based on an algorithm by Stephen L. Moshier <moshier@world.std.com>.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -21,7 +21,7 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ float
__csqrtf (__complex__ float x)
@@ -83,6 +83,22 @@ __csqrtf (__complex__ float x)
else
{
float d, r, s;
+ int scale = 0;
+
+ if (fabsf (__real__ x) > FLT_MAX / 2.0f
+ || fabsf (__imag__ x) > FLT_MAX / 2.0f)
+ {
+ scale = 1;
+ __real__ x = __scalbnf (__real__ x, -2 * scale);
+ __imag__ x = __scalbnf (__imag__ x, -2 * scale);
+ }
+ else if (fabsf (__real__ x) < FLT_MIN
+ && fabsf (__imag__ x) < FLT_MIN)
+ {
+ scale = -(FLT_MANT_DIG / 2);
+ __real__ x = __scalbnf (__real__ x, -2 * scale);
+ __imag__ x = __scalbnf (__imag__ x, -2 * scale);
+ }
d = __ieee754_hypotf (__real__ x, __imag__ x);
/* Use the identity 2 Re res Im res = Im x
@@ -98,6 +114,12 @@ __csqrtf (__complex__ float x)
r = fabsf ((0.5f * __imag__ x) / s);
}
+ if (scale)
+ {
+ r = __scalbnf (r, scale);
+ s = __scalbnf (s, scale);
+ }
+
__real__ res = r;
__imag__ res = __copysignf (s, __imag__ x);
}
diff --git a/math/s_csqrtl.c b/math/s_csqrtl.c
index 0c624c7a73..64332f67b2 100644
--- a/math/s_csqrtl.c
+++ b/math/s_csqrtl.c
@@ -1,5 +1,5 @@
/* Complex square root of long double value.
- Copyright (C) 1997, 1998, 2005, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Based on an algorithm by Stephen L. Moshier <moshier@world.std.com>.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -21,7 +21,7 @@
#include <complex.h>
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
__complex__ long double
__csqrtl (__complex__ long double x)
@@ -83,6 +83,22 @@ __csqrtl (__complex__ long double x)
else
{
long double d, r, s;
+ int scale = 0;
+
+ if (fabsl (__real__ x) > LDBL_MAX / 2.0L
+ || fabsl (__imag__ x) > LDBL_MAX / 2.0L)
+ {
+ scale = 1;
+ __real__ x = __scalbnl (__real__ x, -2 * scale);
+ __imag__ x = __scalbnl (__imag__ x, -2 * scale);
+ }
+ else if (fabsl (__real__ x) < LDBL_MIN
+ && fabsl (__imag__ x) < LDBL_MIN)
+ {
+ scale = -(LDBL_MANT_DIG / 2);
+ __real__ x = __scalbnl (__real__ x, -2 * scale);
+ __imag__ x = __scalbnl (__imag__ x, -2 * scale);
+ }
d = __ieee754_hypotl (__real__ x, __imag__ x);
/* Use the identity 2 Re res Im res = Im x
@@ -98,6 +114,12 @@ __csqrtl (__complex__ long double x)
r = fabsl ((0.5L * __imag__ x) / s);
}
+ if (scale)
+ {
+ r = __scalbnl (r, scale);
+ s = __scalbnl (s, scale);
+ }
+
__real__ res = r;
__imag__ res = __copysignl (s, __imag__ x);
}
diff --git a/math/w_acoshl.c b/math/w_acoshl.c
index cc823b88e9..def7be435d 100644
--- a/math/w_acoshl.c
+++ b/math/w_acoshl.c
@@ -26,7 +26,7 @@ __acoshl (long double x)
{
if (__builtin_expect (isless (x, 1.0L), 0) && _LIB_VERSION != _IEEE_)
/* acosh(x<1) */
- return __kernel_standard (x, x, 229);
+ return __kernel_standard_l (x, x, 229);
return __ieee754_acoshl (x);
}
diff --git a/math/w_acosl.c b/math/w_acosl.c
index 05023b4298..394fce1944 100644
--- a/math/w_acosl.c
+++ b/math/w_acosl.c
@@ -30,7 +30,7 @@ __acosl (long double x)
{
/* acos(|x|>1) */
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 201);
+ return __kernel_standard_l (x, x, 201);
}
return __ieee754_acosl (x);
diff --git a/math/w_asinl.c b/math/w_asinl.c
index e4036d8806..e56e2e5273 100644
--- a/math/w_asinl.c
+++ b/math/w_asinl.c
@@ -30,7 +30,7 @@ __asinl (long double x)
{
/* asin(|x|>1) */
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 202);
+ return __kernel_standard_l (x, x, 202);
}
return __ieee754_asinl (x);
diff --git a/math/w_atan2l.c b/math/w_atan2l.c
index 855437699d..30f9512f91 100644
--- a/math/w_atan2l.c
+++ b/math/w_atan2l.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -28,7 +28,7 @@ long double
__atan2l (long double y, long double x)
{
if (__builtin_expect (x == 0.0L && y == 0.0L, 0) && _LIB_VERSION == _SVID_)
- return __kernel_standard (y, x, 203); /* atan2(+-0,+-0) */
+ return __kernel_standard_l (y, x, 203); /* atan2(+-0,+-0) */
return __ieee754_atan2l (y, x);
}
diff --git a/math/w_atanhl.c b/math/w_atanhl.c
index 319535d172..6b00bbb4ea 100644
--- a/math/w_atanhl.c
+++ b/math/w_atanhl.c
@@ -26,10 +26,10 @@ __atanhl (long double x)
{
if (__builtin_expect (isgreaterequal (fabsl (x), 1.0L), 0)
&& _LIB_VERSION != _IEEE_)
- return __kernel_standard (x, x,
- fabsl (x) > 1.0L
- ? 230 /* atanh(|x|>1) */
- : 231); /* atanh(|x|==1) */
+ return __kernel_standard_l (x, x,
+ fabsl (x) > 1.0L
+ ? 230 /* atanh(|x|>1) */
+ : 231); /* atanh(|x|==1) */
return __ieee754_atanhl (x);
}
diff --git a/math/w_coshl.c b/math/w_coshl.c
index abca8b05f5..9c638e91e0 100644
--- a/math/w_coshl.c
+++ b/math/w_coshl.c
@@ -28,7 +28,7 @@ __coshl (long double x)
long double z = __ieee754_coshl (x);
if (__builtin_expect (!__finitel (z), 0) && __finitel (x)
&& _LIB_VERSION != _IEEE_)
- return __kernel_standard (x, x, 205); /* cosh overflow */
+ return __kernel_standard_l (x, x, 205); /* cosh overflow */
return z;
}
diff --git a/math/w_exp10l.c b/math/w_exp10l.c
index bea6a1ee41..7f426ea32b 100644
--- a/math/w_exp10l.c
+++ b/math/w_exp10l.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -31,7 +31,7 @@ __exp10l (long double x)
if (__builtin_expect (!__finitel (z), 0)
&& __finitel (x) && _LIB_VERSION != _IEEE_)
/* exp10l overflow (246) if x > 0, underflow (247) if x < 0. */
- return __kernel_standard (x, x, 246 + !!__signbitl (x));
+ return __kernel_standard_l (x, x, 246 + !!__signbitl (x));
return z;
}
diff --git a/math/w_exp2.c b/math/w_exp2.c
index 7a3b0afb74..b5d8e25702 100644
--- a/math/w_exp2.c
+++ b/math/w_exp2.c
@@ -2,23 +2,19 @@
* wrapper exp2(x)
*/
-#include <float.h>
#include <math.h>
#include <math_private.h>
-static const double o_threshold = (double) DBL_MAX_EXP;
-static const double u_threshold = (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1);
-
double
__exp2 (double x)
{
- if (__builtin_expect (islessequal (x, u_threshold)
- || isgreater (x, o_threshold), 0)
- && _LIB_VERSION != _IEEE_ && __finite (x))
+ double z = __ieee754_exp2 (x);
+ if (__builtin_expect (!__finite (z), 0)
+ && __finite (x) && _LIB_VERSION != _IEEE_)
/* exp2 overflow: 44, exp2 underflow: 45 */
- return __kernel_standard (x, x, 44 + (x <= o_threshold));
+ return __kernel_standard (x, x, 44 + !!__signbit (x));
- return __ieee754_exp2 (x);
+ return z;
}
weak_alias (__exp2, exp2)
#ifdef NO_LONG_DOUBLE
diff --git a/math/w_exp2f.c b/math/w_exp2f.c
index c4e9e94164..7c277ef390 100644
--- a/math/w_exp2f.c
+++ b/math/w_exp2f.c
@@ -2,22 +2,18 @@
* wrapper exp2f(x)
*/
-#include <float.h>
#include <math.h>
#include <math_private.h>
-static const float o_threshold = (float) FLT_MAX_EXP;
-static const float u_threshold = (float) (FLT_MIN_EXP - FLT_MANT_DIG - 1);
-
float
__exp2f (float x)
{
- if (__builtin_expect (islessequal (x, u_threshold)
- || isgreater (x, o_threshold), 0)
- && _LIB_VERSION != _IEEE_ && __finitef (x))
+ float z = __ieee754_exp2f (x);
+ if (__builtin_expect (!__finitef (z), 0)
+ && __finitef (x) && _LIB_VERSION != _IEEE_)
/* exp2 overflow: 144, exp2 underflow: 145 */
- return __kernel_standard_f (x, x, 144 + (x <= o_threshold));
+ return __kernel_standard_f (x, x, 144 + !!__signbitf (x));
- return __ieee754_exp2f (x);
+ return z;
}
weak_alias (__exp2f, exp2f)
diff --git a/math/w_exp2l.c b/math/w_exp2l.c
index 442a637347..7f06805a0d 100644
--- a/math/w_exp2l.c
+++ b/math/w_exp2l.c
@@ -2,23 +2,18 @@
* wrapper exp2l(x)
*/
-#include <float.h>
#include <math.h>
#include <math_private.h>
-static const long double o_threshold = (long double) LDBL_MAX_EXP;
-static const long double u_threshold
- = (long double) (LDBL_MIN_EXP - LDBL_MANT_DIG - 1);
-
long double
__exp2l (long double x)
{
- if (__builtin_expect (islessequal (x, u_threshold)
- || isgreater (x, o_threshold), 0)
- && _LIB_VERSION != _IEEE_ && __finitel (x))
+ long double z = __ieee754_exp2l (x);
+ if (__builtin_expect (!__finitel (z), 0)
+ && __finitel (x) && _LIB_VERSION != _IEEE_)
/* exp2 overflow: 244, exp2 underflow: 245 */
- return __kernel_standard (x, x, 244 + (x <= o_threshold));
+ return __kernel_standard_l (x, x, 244 + !!__signbitl (x));
- return __ieee754_exp2l (x);
+ return z;
}
weak_alias (__exp2l, exp2l)
diff --git a/math/w_fmodl.c b/math/w_fmodl.c
index b088cc3707..f508a1f647 100644
--- a/math/w_fmodl.c
+++ b/math/w_fmodl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -26,7 +26,7 @@ __fmodl (long double x, long double y)
if (__builtin_expect (__isinf_nsl (x) || y == 0.0L, 0)
&& _LIB_VERSION != _IEEE_ && !__isnanl (y) && !__isnanl (x))
/* fmod(+-Inf,y) or fmod(x,0) */
- return __kernel_standard (x, y, 227);
+ return __kernel_standard_l (x, y, 227);
return __ieee754_fmodl (x, y);
}
diff --git a/math/w_hypotl.c b/math/w_hypotl.c
index 522eb63c39..2e942cae30 100644
--- a/math/w_hypotl.c
+++ b/math/w_hypotl.c
@@ -29,7 +29,7 @@ __hypotl(long double x, long double y)
z = __ieee754_hypotl(x,y);
if(__builtin_expect(!__finitel(z), 0)
&& __finitel(x) && __finitel(y) && _LIB_VERSION != _IEEE_)
- return __kernel_standard(x, y, 204); /* hypot overflow */
+ return __kernel_standard_l(x, y, 204); /* hypot overflow */
return z;
}
diff --git a/math/w_j0.c b/math/w_j0.c
index f8d3724756..0171a0bc72 100644
--- a/math/w_j0.c
+++ b/math/w_j0.c
@@ -26,7 +26,7 @@ double
j0 (double x)
{
if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j0(|x|>X_TLOSS) */
return __kernel_standard (x, x, 34);
@@ -53,7 +53,7 @@ y0 (double x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard (x, x, 8);
- else
+ else if (_LIB_VERSION != _POSIX_)
/* y0(x>X_TLOSS) */
return __kernel_standard (x, x, 35);
}
diff --git a/math/w_j0f.c b/math/w_j0f.c
index cef36aab1b..9e1681a243 100644
--- a/math/w_j0f.c
+++ b/math/w_j0f.c
@@ -26,7 +26,7 @@ float
j0f (float x)
{
if (__builtin_expect (isgreater (fabsf (x), (float) X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j0(|x|>X_TLOSS) */
return __kernel_standard_f (x, x, 134);
@@ -51,7 +51,7 @@ y0f (float x)
else if (x == 0.0f)
/* d = -one/(x-x) */
return __kernel_standard_f (x, x, 108);
- else
+ else if (_LIB_VERSION != _POSIX_)
/* y0(x>X_TLOSS) */
return __kernel_standard_f (x, x, 135);
}
diff --git a/math/w_j0l.c b/math/w_j0l.c
index 144f33c0db..1532d2ebde 100644
--- a/math/w_j0l.c
+++ b/math/w_j0l.c
@@ -26,9 +26,9 @@ long double
__j0l (long double x)
{
if (__builtin_expect (isgreater (fabsl (x), X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j0(|x|>X_TLOSS) */
- return __kernel_standard (x, x, 234);
+ return __kernel_standard_l (x, x, 234);
return __ieee754_j0l (x);
}
@@ -46,14 +46,14 @@ __y0l (long double x)
{
/* d = zero/(x-x) */
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 209);
+ return __kernel_standard_l (x, x, 209);
}
else if (x == 0.0L)
/* d = -one/(x-x) */
- return __kernel_standard (x, x, 208);
- else
+ return __kernel_standard_l (x, x, 208);
+ else if (_LIB_VERSION != _POSIX_)
/* y0(x>X_TLOSS) */
- return __kernel_standard (x, x, 235);
+ return __kernel_standard_l (x, x, 235);
}
return __ieee754_y0l (x);
diff --git a/math/w_j1.c b/math/w_j1.c
index e9a5357b76..40600503ee 100644
--- a/math/w_j1.c
+++ b/math/w_j1.c
@@ -26,7 +26,7 @@ double
j1 (double x)
{
if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j1(|x|>X_TLOSS) */
return __kernel_standard (x, x, 36);
@@ -53,7 +53,7 @@ y1 (double x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard (x, x, 10);
- else
+ else if (_LIB_VERSION != _POSIX_)
/* y1(x>X_TLOSS) */
return __kernel_standard (x, x, 37);
}
diff --git a/math/w_j1f.c b/math/w_j1f.c
index 29bd949eea..a3f5ee2e27 100644
--- a/math/w_j1f.c
+++ b/math/w_j1f.c
@@ -26,7 +26,7 @@ float
j1f (float x)
{
if (__builtin_expect (isgreater (fabsf (x), X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j1(|x|>X_TLOSS) */
return __kernel_standard_f (x, x, 136);
@@ -51,7 +51,7 @@ y1f (float x)
else if (x == 0.0f)
/* d = -one/(x-x) */
return __kernel_standard_f (x, x, 110);
- else
+ else if (_LIB_VERSION != _POSIX_)
/* y1(x>X_TLOSS) */
return __kernel_standard_f (x, x, 137);
}
diff --git a/math/w_j1l.c b/math/w_j1l.c
index 01b8551252..0b0136026a 100644
--- a/math/w_j1l.c
+++ b/math/w_j1l.c
@@ -26,9 +26,9 @@ long double
__j1l (long double x)
{
if (__builtin_expect (isgreater (fabsl (x), X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* j1(|x|>X_TLOSS) */
- return __kernel_standard (x, x, 236);
+ return __kernel_standard_l (x, x, 236);
return __ieee754_j1l (x);
}
@@ -46,14 +46,14 @@ __y1l (long double x)
{
/* d = zero/(x-x) */
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 211);
+ return __kernel_standard_l (x, x, 211);
}
else if (x == 0.0L)
/* d = -one/(x-x) */
- return __kernel_standard (x, x, 210);
- else
+ return __kernel_standard_l (x, x, 210);
+ else if (_LIB_VERSION != _POSIX_)
/* y1(x>X_TLOSS) */
- return __kernel_standard (x, x, 237);
+ return __kernel_standard_l (x, x, 237);
}
return __ieee754_y1l (x);
diff --git a/math/w_jn.c b/math/w_jn.c
index fd3fb162f2..63658a93c2 100644
--- a/math/w_jn.c
+++ b/math/w_jn.c
@@ -26,7 +26,7 @@ double
jn (int n, double x)
{
if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* jn(n,|x|>X_TLOSS) */
return __kernel_standard (n, x, 38);
@@ -53,7 +53,7 @@ yn (int n, double x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard (n, x, 12);
- else
+ else if (_LIB_VERSION != _POSIX_)
/* yn(n,x>X_TLOSS) */
return __kernel_standard (n, x, 39);
}
diff --git a/math/w_jnf.c b/math/w_jnf.c
index 36d6f6d573..41d9bc5711 100644
--- a/math/w_jnf.c
+++ b/math/w_jnf.c
@@ -26,7 +26,7 @@ float
jnf (int n, float x)
{
if (__builtin_expect (isgreater (fabsf (x), (float) X_TLOSS), 0)
- && _LIB_VERSION != _IEEE_)
+ && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
/* jn(n,|x|>X_TLOSS) */
return __kernel_standard_f (n, x, 138);
@@ -51,7 +51,7 @@ ynf (int n, float x)
else if (x == 0.0)
/* d = -one/(x-x) */
return __kernel_standard_f (n, x, 112);
- else
+ else if (_LIB_VERSION != _POSIX_)
/* yn(n,x>X_TLOSS) */
return __kernel_standard_f (n, x, 139);
}
diff --git a/math/w_jnl.c b/math/w_jnl.c
index 148817ff44..0263147b2f 100644
--- a/math/w_jnl.c
+++ b/math/w_jnl.c
@@ -54,9 +54,12 @@ long double __jnl(int n, long double x) /* wrapper jnl */
#else
long double z;
z = __ieee754_jnl(n,x);
- if(_LIB_VERSION == _IEEE_ || __isnanl(x) ) return z;
+ if (_LIB_VERSION == _IEEE_
+ || _LIB_VERSION == _POSIX_
+ || __isnanl(x))
+ return z;
if(fabsl(x)>X_TLOSS) {
- return __kernel_standard((double)n,x,238); /* jn(|x|>X_TLOSS,n) */
+ return __kernel_standard_l((double)n,x,238); /* jn(|x|>X_TLOSS,n) */
} else
return z;
#endif
@@ -74,13 +77,13 @@ long double __ynl(int n, long double x) /* wrapper ynl */
if(x <= 0.0){
if(x==0.0)
/* d= -one/(x-x); */
- return __kernel_standard((double)n,x,212);
+ return __kernel_standard_l((double)n,x,212);
else
/* d = zero/(x-x); */
- return __kernel_standard((double)n,x,213);
+ return __kernel_standard_l((double)n,x,213);
}
- if(x>X_TLOSS) {
- return __kernel_standard((double)n,x,239); /* yn(x>X_TLOSS,n) */
+ if(x>X_TLOSS && _LIB_VERSION != _POSIX_) {
+ return __kernel_standard_l((double)n,x,239); /* yn(x>X_TLOSS,n) */
} else
return z;
#endif
diff --git a/math/w_lgammal.c b/math/w_lgammal.c
index 7df38e761b..1dc7e58622 100644
--- a/math/w_lgammal.c
+++ b/math/w_lgammal.c
@@ -35,10 +35,10 @@ __lgammal(long double x)
: &local_signgam);
if(__builtin_expect(!__finitel(y), 0)
&& __finitel(x) && _LIB_VERSION != _IEEE_)
- return __kernel_standard(x, x,
- __floorl(x)==x&&x<=0.0L
- ? 215 /* lgamma pole */
- : 214); /* lgamma overflow */
+ return __kernel_standard_l(x, x,
+ __floorl(x)==x&&x<=0.0L
+ ? 215 /* lgamma pole */
+ : 214); /* lgamma overflow */
return y;
}
diff --git a/math/w_log10l.c b/math/w_log10l.c
index 0e5a137508..3371b7bd51 100644
--- a/math/w_log10l.c
+++ b/math/w_log10l.c
@@ -30,12 +30,12 @@ __log10l (long double x)
if (x == 0.0L)
{
feraiseexcept (FE_DIVBYZERO);
- return __kernel_standard (x, x, 218); /* log10(0) */
+ return __kernel_standard_l (x, x, 218); /* log10(0) */
}
else
{
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 219); /* log10(x<0) */
+ return __kernel_standard_l (x, x, 219); /* log10(x<0) */
}
}
diff --git a/math/w_log2l.c b/math/w_log2l.c
index eed04ff6cc..1400c938ee 100644
--- a/math/w_log2l.c
+++ b/math/w_log2l.c
@@ -30,12 +30,12 @@ __log2l (long double x)
if (x == 0.0L)
{
feraiseexcept (FE_DIVBYZERO);
- return __kernel_standard (x, x, 248); /* log2(0) */
+ return __kernel_standard_l (x, x, 248); /* log2(0) */
}
else
{
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 249); /* log2(x<0) */
+ return __kernel_standard_l (x, x, 249); /* log2(x<0) */
}
}
diff --git a/math/w_logl.c b/math/w_logl.c
index 593b37d81f..9ea4ff726a 100644
--- a/math/w_logl.c
+++ b/math/w_logl.c
@@ -30,12 +30,12 @@ __logl (long double x)
if (x == 0.0L)
{
feraiseexcept (FE_DIVBYZERO);
- return __kernel_standard (x, x, 216); /* log(0) */
+ return __kernel_standard_l (x, x, 216); /* log(0) */
}
else
{
feraiseexcept (FE_INVALID);
- return __kernel_standard (x, x, 217); /* log(x<0) */
+ return __kernel_standard_l (x, x, 217); /* log(x<0) */
}
}
diff --git a/math/w_powl.c b/math/w_powl.c
index 5bb85976e3..37863889c3 100644
--- a/math/w_powl.c
+++ b/math/w_powl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -33,25 +33,25 @@ __powl (long double x, long double y)
{
if (y == 0.0L)
/* pow(NaN,0.0) */
- return __kernel_standard (x, y, 242);
+ return __kernel_standard_l (x, y, 242);
}
else if (__finitel (x) && __finitel (y))
{
if (__isnanl (z))
/* pow neg**non-int */
- return __kernel_standard (x, y, 224);
+ return __kernel_standard_l (x, y, 224);
else if (x == 0.0L && y < 0.0L)
{
if (signbit (x) && signbit (z))
/* pow(-0.0,negative) */
- return __kernel_standard (x, y, 223);
+ return __kernel_standard_l (x, y, 223);
else
/* pow(+0.0,negative) */
- return __kernel_standard (x, y, 243);
+ return __kernel_standard_l (x, y, 243);
}
else
/* pow overflow */
- return __kernel_standard (x, y, 221);
+ return __kernel_standard_l (x, y, 221);
}
}
}
@@ -62,11 +62,11 @@ __powl (long double x, long double y)
{
if (y == 0.0L)
/* pow(0.0,0.0) */
- return __kernel_standard (x, y, 220);
+ return __kernel_standard_l (x, y, 220);
}
else
/* pow underflow */
- return __kernel_standard (x, y, 222);
+ return __kernel_standard_l (x, y, 222);
}
return z;
diff --git a/math/w_remainderl.c b/math/w_remainderl.c
index 3f67b5875f..a21065cd74 100644
--- a/math/w_remainderl.c
+++ b/math/w_remainderl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -27,7 +27,7 @@ __remainderl (long double x, long double y)
if (((__builtin_expect (y == 0.0L, 0) && ! __isnanl (x))
|| (__builtin_expect (__isinf_nsl (x), 0) && ! __isnanl (y)))
&& _LIB_VERSION != _IEEE_)
- return __kernel_standard (x, y, 228); /* remainder domain */
+ return __kernel_standard_l (x, y, 228); /* remainder domain */
return __ieee754_remainderl (x, y);
}
diff --git a/math/w_scalbl.c b/math/w_scalbl.c
index b3584dea0f..1181874cec 100644
--- a/math/w_scalbl.c
+++ b/math/w_scalbl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
@@ -30,12 +30,12 @@ sysv_scalbl (long double x, long double fn)
if (__builtin_expect (__isinfl (z), 0))
{
if (__finitel (x))
- return __kernel_standard (x, fn, 232); /* scalb overflow */
+ return __kernel_standard_l (x, fn, 232); /* scalb overflow */
else
__set_errno (ERANGE);
}
else if (__builtin_expect (z == 0.0L, 0) && z != x)
- return __kernel_standard (x, fn, 233); /* scalb underflow */
+ return __kernel_standard_l (x, fn, 233); /* scalb underflow */
return z;
}
diff --git a/math/w_sinhl.c b/math/w_sinhl.c
index 5e65cf9b95..f801b4dd92 100644
--- a/math/w_sinhl.c
+++ b/math/w_sinhl.c
@@ -27,7 +27,7 @@ __sinhl (long double x)
long double z = __ieee754_sinhl (x);
if (__builtin_expect (!__finitel (z), 0) && __finitel (x)
&& _LIB_VERSION != _IEEE_)
- return __kernel_standard (x, x, 225); /* sinh overflow */
+ return __kernel_standard_l (x, x, 225); /* sinh overflow */
return z;
}
diff --git a/math/w_sqrtl.c b/math/w_sqrtl.c
index 2a4a0481b0..74529f9e2c 100644
--- a/math/w_sqrtl.c
+++ b/math/w_sqrtl.c
@@ -25,7 +25,7 @@ long double
__sqrtl (long double x)
{
if (__builtin_expect (isless (x, 0.0L), 0) && _LIB_VERSION != _IEEE_)
- return __kernel_standard (x, x, 226); /* sqrt(negative) */
+ return __kernel_standard_l (x, x, 226); /* sqrt(negative) */
return __ieee754_sqrtl (x);
}
diff --git a/math/w_tgammal.c b/math/w_tgammal.c
index 6910f923aa..86adab29ea 100644
--- a/math/w_tgammal.c
+++ b/math/w_tgammal.c
@@ -30,11 +30,11 @@ __tgammal(long double x)
if(__builtin_expect(!__finitel(y), 0) && __finitel(x)
&& _LIB_VERSION != _IEEE_) {
if(x==0.0)
- return __kernel_standard(x,x,250); /* tgamma pole */
+ return __kernel_standard_l(x,x,250); /* tgamma pole */
else if(__floorl(x)==x&&x<0.0L)
- return __kernel_standard(x,x,241); /* tgamma domain */
+ return __kernel_standard_l(x,x,241); /* tgamma domain */
else
- return __kernel_standard(x,x,240); /* tgamma overflow */
+ return __kernel_standard_l(x,x,240); /* tgamma overflow */
}
return local_signgam < 0 ? - y : y;
}
diff --git a/misc/Makefile b/misc/Makefile
index 169f2fd7d1..f42347ab9d 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -66,8 +66,6 @@ routines := brk sbrk sstk ioctl \
listxattr lgetxattr llistxattr lremovexattr lsetxattr \
removexattr setxattr
-distribute := device-nrs.h
-
generated := tst-error1.mtrace tst-error1-mem
include ../Makeconfig
diff --git a/nis/Makefile b/nis/Makefile
index 3a187cac68..a48753f7a9 100644
--- a/nis/Makefile
+++ b/nis/Makefile
@@ -1,4 +1,5 @@
-# Copyright (C) 1996-1998,2001,2004,2006,2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-1998,2001,2004,2006,2011,2012
+# 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
@@ -22,10 +23,6 @@ subdir := nis
aux := nis_hash
-distribute := nss-nis.h nss-nisplus.h nis_intern.h Banner \
- nisplus-parser.h nis_xdr.h nss \
- $(wildcard rpcsvc/*.[hx])
-
# These are the databases available for the nis (and perhaps later nisplus)
# service. This must be a superset of the services in nss.
databases = proto service hosts network grp pwd rpc ethers \
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index f7400ff680..4622393a4f 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,121 @@
+2012-03-27 David S. Miller <davem@davemloft.net>
+
+ * tst-cond16.c (do_test): Use a thread stack size which is either
+ PTHREAD_STACK_MIN or the page size, whichever is larger.
+ * tst-cond18.c (do_test): Likewise.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/pthreaddef.h (CURRENT_STACK_FRAME): Use
+ register char * __asm__("rsp") to get stack frame.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (SYS_futex): Use
+ __NR_futex directly.
+
+2012-03-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ * unwind.c (unwind_stop): Cast _Unwind_GetCFA return to
+ _Unwind_Ptr first.
+
+2012-03-16 David S. Miller <davem@davemloft.net>
+
+ [BZ #13844]
+ * sysdeps/unix/sysv/linux/libc-lowlevellock.c: Include using <..>
+ instead of "...".
+ * sysdeps/unix/sysv/linux/sparc/sparc32/libc-lowlevellock.c:
+ Delete, not needed.
+
+2012-03-15 David S. Miller <davem@davemloft.net>
+
+ [BZ #13844]
+ * sysdeps/unix/sysv/linux/sparc/sparc32/libc-lowlevellock.c: New file.
+
+2012-03-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ [BZ #13673]
+ * pt-crti.S: Replace FSF snail mail address with URL.
+
+2012-03-09 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/pthread/pthread.h (__need_clockid_t, __need_timespec):
+ Do not define before including <time.h>.
+
+2012-03-08 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sem_post.c: Update copyright year.
+
+2012-03-08 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
+ Check for timestamp before the Epoch.
+
+ * sysdeps/unix/sysv/linux/sh/sem_timedwait.S (sem_timedwait): Fix
+ updating nwaiters.
+
+ * tst-sem13.c (do_test): Add another test case.
+ * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S (sem_timedwait):
+ Fix updating nwaiters.
+
+2012-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #10545]
+ * sysdeps/pthread/configure.in (libc_cv_forced_unwind): Change
+ link test to a compile test.
+ (libc_cv_c_cleanup): Likewise. Declare puts rather than including
+ <stdio.h>.
+ * sysdeps/pthread/configure: Regenerated.
+
+2012-03-07 Ulrich Drepper <drepper@gmail.com>
+
+ * Makefile (distribute): Remove variable.
+
+2012-01-23 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Get rid of
+ superfluous assignment.
+ * sysdeps/unix/sysv/linux/sparc/sem_timedwait.c (sem_timedwait):
+ Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c
+ (sem_timedwait): Likewise.
+
+2012-03-06 Ulrich Drepper <drepper@gmail.com>
+
+ * sysdeps/pthread/bits/libc-lock.h: Move information not needed in
+ installed headers to...
+ * sysdeps/pthread/bits/libc-lockP.h: ...here. New file.
+
+2012-03-06 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sem_post.c (__new_sem_post): Use
+ atomic_increment and remove unused local variable.
+ (__old_sem_post): Likewise.
+
+2012-02-27 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h: Don't refer to
+ non-existing __pthread_attr.
+ * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Likewise.
+
+2012-02-26 Ulrich Drepper <drepper@gmail.com>
+
+ * sysdeps/pthread/pthread.h: Define __need_clockid_t for __USE_XOPEN2K.
+
+ * sysdeps/pthread/pthread.h: Define __need_timespec before including
+ <time.h>.
+ * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h: Name pthread_attr_t
+ union.
+ * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Likewise.
+
2012-02-21 Joseph Myers <joseph@codesourcery.com>
[BZ #13695]
@@ -18,8 +136,8 @@
2012-02-16 Richard Henderson <rth@twiddle.net>
- * nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c: Remove file.
- * nptl/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c: Remove file.
+ * sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c: Remove file.
+ * sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c: Remove file.
2012-02-15 Kaz Kojima <kkojima@rr.iij4u.or.jp>
diff --git a/nptl/Makefile b/nptl/Makefile
index c39230d818..52277dd843 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -268,8 +268,6 @@ tests-nolibpthread = tst-unload
# of the page size since every architecture's page size is > 1k.
tst-oddstacklimit-ENV = ; ulimit -s 1023;
-distribute = eintr.c tst-cleanup4aux.c
-
gen-as-const-headers = pthread-errnos.sym
LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
diff --git a/nptl/pt-crti.S b/nptl/pt-crti.S
index 3ea359d7da..4c5cdddb90 100644
--- a/nptl/pt-crti.S
+++ b/nptl/pt-crti.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* Arrange for __pthread_initialize_minimal_internal to be called at
libpthread startup, instead of conditionally calling
diff --git a/nptl/sysdeps/pthread/bits/libc-lock.h b/nptl/sysdeps/pthread/bits/libc-lock.h
index 4d54e667de..02c0ae5f7e 100644
--- a/nptl/sysdeps/pthread/bits/libc-lock.h
+++ b/nptl/sysdeps/pthread/bits/libc-lock.h
@@ -24,42 +24,17 @@
#include <stddef.h>
-/* Fortunately Linux now has a mean to do locking which is realtime
- safe without the aid of the thread library. We also need no fancy
- options like error checking mutexes etc. We only need simple
- locks, maybe recursive. This can be easily and cheaply implemented
- using futexes. We will use them everywhere except in ld.so since
- ld.so might be used on old kernels with a different libc.so. */
-#ifdef _LIBC
-# include <lowlevellock.h>
-# include <tls.h>
-# include <pthread-functions.h>
-#endif
-
/* Mutex type. */
#if defined _LIBC || defined _IO_MTSAFE_IO
# if (defined NOT_IN_libc && !defined IS_IN_libpthread) || !defined _LIBC
-typedef pthread_mutex_t __libc_lock_t;
typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t;
# else
-typedef int __libc_lock_t;
typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t;
# endif
-typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
-# ifdef __USE_UNIX98
-typedef pthread_rwlock_t __libc_rwlock_t;
-# else
-typedef struct __libc_rwlock_opaque__ __libc_rwlock_t;
-# endif
#else
-typedef struct __libc_lock_opaque__ __libc_lock_t;
typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;
-typedef struct __libc_rwlock_opaque__ __libc_rwlock_t;
#endif
-/* Type for key to thread-specific data. */
-typedef pthread_key_t __libc_key_t;
-
/* Define a lock variable NAME with storage class CLASS. The lock must be
initialized with __libc_lock_init before it can be used (or define it
with __libc_lock_define_initialized, below). Use `extern' for CLASS to
@@ -67,44 +42,8 @@ typedef pthread_key_t __libc_key_t;
definitions you must use a pointer to the lock structure (i.e., NAME
begins with a `*'), because its storage size will not be known outside
of libc. */
-#define __libc_lock_define(CLASS,NAME) \
- CLASS __libc_lock_t NAME;
-#define __libc_rwlock_define(CLASS,NAME) \
- CLASS __libc_rwlock_t NAME;
#define __libc_lock_define_recursive(CLASS,NAME) \
CLASS __libc_lock_recursive_t NAME;
-#define __rtld_lock_define_recursive(CLASS,NAME) \
- CLASS __rtld_lock_recursive_t NAME;
-
-/* Define an initialized lock variable NAME with storage class CLASS.
-
- For the C library we take a deeper look at the initializer. For
- this implementation all fields are initialized to zero. Therefore
- we don't initialize the variable which allows putting it into the
- BSS section. (Except on PA-RISC and other odd architectures, where
- initialized locks must be set to one due to the lack of normal
- atomic operations.) */
-
-#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
-# if LLL_LOCK_INITIALIZER == 0
-# define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME;
-# else
-# define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER;
-# endif
-#else
-# if __LT_SPINLOCK_INIT == 0
-# define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME;
-# else
-# define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER;
-# endif
-#endif
-
-#define __libc_rwlock_define_initialized(CLASS,NAME) \
- CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
/* Define an initialized recursive lock variable NAME with storage
class CLASS. */
@@ -125,63 +64,7 @@ typedef pthread_key_t __libc_key_t;
{PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}
#endif
-#define __rtld_lock_define_initialized_recursive(CLASS,NAME) \
- CLASS __rtld_lock_recursive_t NAME = _RTLD_LOCK_RECURSIVE_INITIALIZER;
-#define _RTLD_LOCK_RECURSIVE_INITIALIZER \
- {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}
-
-#define __rtld_lock_initialize(NAME) \
- (void) ((NAME) = (__rtld_lock_recursive_t) _RTLD_LOCK_RECURSIVE_INITIALIZER)
-
-/* If we check for a weakly referenced symbol and then perform a
- normal jump to it te code generated for some platforms in case of
- PIC is unnecessarily slow. What would happen is that the function
- is first referenced as data and then it is called indirectly
- through the PLT. We can make this a direct jump. */
-#ifdef __PIC__
-# define __libc_maybe_call(FUNC, ARGS, ELSE) \
- (__extension__ ({ __typeof (FUNC) *_fn = (FUNC); \
- _fn != NULL ? (*_fn) ARGS : ELSE; }))
-#else
-# define __libc_maybe_call(FUNC, ARGS, ELSE) \
- (FUNC != NULL ? FUNC ARGS : ELSE)
-#endif
-
-/* Call thread functions through the function pointer table. */
-#if defined SHARED && !defined NOT_IN_libc
-# define PTFAVAIL(NAME) __libc_pthread_functions_init
-# define __libc_ptf_call(FUNC, ARGS, ELSE) \
- (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
-# define __libc_ptf_call_always(FUNC, ARGS) \
- PTHFCT_CALL (ptr_##FUNC, ARGS)
-#else
-# define PTFAVAIL(NAME) (NAME != NULL)
-# define __libc_ptf_call(FUNC, ARGS, ELSE) \
- __libc_maybe_call (FUNC, ARGS, ELSE)
-# define __libc_ptf_call_always(FUNC, ARGS) \
- FUNC ARGS
-#endif
-
-
-/* Initialize the named lock variable, leaving it in a consistent, unlocked
- state. */
-#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
-# define __libc_lock_init(NAME) ((NAME) = LLL_LOCK_INITIALIZER, 0)
-#else
-# define __libc_lock_init(NAME) \
- __libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)
-#endif
-#if defined SHARED && !defined NOT_IN_libc
-/* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER, 0) is
- inefficient. */
-# define __libc_rwlock_init(NAME) \
- (__builtin_memset (&(NAME), '\0', sizeof (NAME)), 0)
-#else
-# define __libc_rwlock_init(NAME) \
- __libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0)
-#endif
-
-/* Same as last but this time we initialize a recursive mutex. */
+/* Initialize a recursive mutex. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
# define __libc_lock_init_recursive(NAME) \
((NAME) = (__libc_lock_recursive_t) _LIBC_LOCK_RECURSIVE_INITIALIZER, 0)
@@ -199,34 +82,6 @@ typedef pthread_key_t __libc_key_t;
} while (0)
#endif
-#define __rtld_lock_init_recursive(NAME) \
- do { \
- if (__pthread_mutex_init != NULL) \
- { \
- pthread_mutexattr_t __attr; \
- __pthread_mutexattr_init (&__attr); \
- __pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \
- __pthread_mutex_init (&(NAME).mutex, &__attr); \
- __pthread_mutexattr_destroy (&__attr); \
- } \
- } while (0)
-
-/* Finalize the named lock variable, which must be locked. It cannot be
- used again until __libc_lock_init is called again on it. This must be
- called on a lock variable before the containing storage is reused. */
-#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
-# define __libc_lock_fini(NAME) ((void) 0)
-#else
-# define __libc_lock_fini(NAME) \
- __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
-#endif
-#if defined SHARED && !defined NOT_IN_libc
-# define __libc_rwlock_fini(NAME) ((void) 0)
-#else
-# define __libc_rwlock_fini(NAME) \
- __libc_maybe_call (__pthread_rwlock_destroy, (&(NAME)), 0)
-#endif
-
/* Finalize recursive named lock. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
# define __libc_lock_fini_recursive(NAME) ((void) 0)
@@ -235,19 +90,6 @@ typedef pthread_key_t __libc_key_t;
__libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
#endif
-/* Lock the named lock variable. */
-#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
-# define __libc_lock_lock(NAME) \
- ({ lll_lock (NAME, LLL_PRIVATE); 0; })
-#else
-# define __libc_lock_lock(NAME) \
- __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
-#endif
-#define __libc_rwlock_rdlock(NAME) \
- __libc_ptf_call (__pthread_rwlock_rdlock, (&(NAME)), 0)
-#define __libc_rwlock_wrlock(NAME) \
- __libc_ptf_call (__pthread_rwlock_wrlock, (&(NAME)), 0)
-
/* Lock the recursive named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
# define __libc_lock_lock_recursive(NAME) \
@@ -265,19 +107,6 @@ typedef pthread_key_t __libc_key_t;
__libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
#endif
-/* Try to lock the named lock variable. */
-#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
-# define __libc_lock_trylock(NAME) \
- lll_trylock (NAME)
-#else
-# define __libc_lock_trylock(NAME) \
- __libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0)
-#endif
-#define __libc_rwlock_tryrdlock(NAME) \
- __libc_maybe_call (__pthread_rwlock_tryrdlock, (&(NAME)), 0)
-#define __libc_rwlock_trywrlock(NAME) \
- __libc_maybe_call (__pthread_rwlock_trywrlock, (&(NAME)), 0)
-
/* Try to lock the recursive named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
# define __libc_lock_trylock_recursive(NAME) \
@@ -303,20 +132,6 @@ typedef pthread_key_t __libc_key_t;
__libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0)
#endif
-#define __rtld_lock_trylock_recursive(NAME) \
- __libc_maybe_call (__pthread_mutex_trylock, (&(NAME).mutex), 0)
-
-/* Unlock the named lock variable. */
-#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
-# define __libc_lock_unlock(NAME) \
- lll_unlock (NAME, LLL_PRIVATE)
-#else
-# define __libc_lock_unlock(NAME) \
- __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
-#endif
-#define __libc_rwlock_unlock(NAME) \
- __libc_ptf_call (__pthread_rwlock_unlock, (&(NAME)), 0)
-
/* Unlock the recursive named lock variable. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
/* We do no error checking here. */
@@ -333,58 +148,10 @@ typedef pthread_key_t __libc_key_t;
__libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
#endif
-#if defined _LIBC && defined SHARED
-# define __rtld_lock_default_lock_recursive(lock) \
- ++((pthread_mutex_t *)(lock))->__data.__count;
-
-# define __rtld_lock_default_unlock_recursive(lock) \
- --((pthread_mutex_t *)(lock))->__data.__count;
-
-# define __rtld_lock_lock_recursive(NAME) \
- GL(dl_rtld_lock_recursive) (&(NAME).mutex)
-
-# define __rtld_lock_unlock_recursive(NAME) \
- GL(dl_rtld_unlock_recursive) (&(NAME).mutex)
-#else
-# define __rtld_lock_lock_recursive(NAME) \
- __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
-
-# define __rtld_lock_unlock_recursive(NAME) \
- __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
-#endif
-
-/* Define once control variable. */
-#if PTHREAD_ONCE_INIT == 0
-/* Special case for static variables where we can avoid the initialization
- if it is zero. */
-# define __libc_once_define(CLASS, NAME) \
- CLASS pthread_once_t NAME
-#else
-# define __libc_once_define(CLASS, NAME) \
- CLASS pthread_once_t NAME = PTHREAD_ONCE_INIT
-#endif
-
-/* Call handler iff the first call. */
-#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \
- do { \
- if (PTFAVAIL (__pthread_once)) \
- __libc_ptf_call_always (__pthread_once, (&(ONCE_CONTROL), \
- INIT_FUNCTION)); \
- else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \
- INIT_FUNCTION (); \
- (ONCE_CONTROL) |= 2; \
- } \
- } while (0)
-
-
/* Note that for I/O cleanup handling we are using the old-style
- cancel handling. It does not have to be integrated with C++ snce
+ cancel handling. It does not have to be integrated with C++ since
no C++ code is called in the middle. The old-style handling is
faster and the support is not going away. */
-extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
- void (*routine) (void *), void *arg);
-extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
- int execute);
extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
void (*routine) (void *), void *arg);
extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
@@ -415,170 +182,11 @@ extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer
_buffer.__routine (_buffer.__arg); \
}
-/* Sometimes we have to exit the block in the middle. */
-#define __libc_cleanup_end(DOIT) \
- if (_avail) { \
- __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\
- } else if (DOIT) \
- _buffer.__routine (_buffer.__arg)
-
-
-/* Normal cleanup handling, based on C cleanup attribute. */
-__extern_inline void
-__libc_cleanup_routine (struct __pthread_cleanup_frame *f)
-{
- if (f->__do_it)
- f->__cancel_routine (f->__cancel_arg);
-}
-
-#define __libc_cleanup_push(fct, arg) \
- do { \
- struct __pthread_cleanup_frame __clframe \
- __attribute__ ((__cleanup__ (__libc_cleanup_routine))) \
- = { .__cancel_routine = (fct), .__cancel_arg = (arg), \
- .__do_it = 1 };
-
-#define __libc_cleanup_pop(execute) \
- __clframe.__do_it = (execute); \
- } while (0)
-
-
-/* Create thread-specific key. */
-#define __libc_key_create(KEY, DESTRUCTOR) \
- __libc_ptf_call (__pthread_key_create, (KEY, DESTRUCTOR), 1)
-/* Get thread-specific data. */
-#define __libc_getspecific(KEY) \
- __libc_ptf_call (__pthread_getspecific, (KEY), NULL)
-
-/* Set thread-specific data. */
-#define __libc_setspecific(KEY, VALUE) \
- __libc_ptf_call (__pthread_setspecific, (KEY, VALUE), 0)
-
-
-/* Register handlers to execute before and after `fork'. Note that the
- last parameter is NULL. The handlers registered by the libc are
- never removed so this is OK. */
-#define __libc_atfork(PREPARE, PARENT, CHILD) \
- __register_atfork (PREPARE, PARENT, CHILD, NULL)
-extern int __register_atfork (void (*__prepare) (void),
- void (*__parent) (void),
- void (*__child) (void),
- void *__dso_handle);
-
-/* Functions that are used by this file and are internal to the GNU C
- library. */
-
-extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
- const pthread_mutexattr_t *__mutex_attr);
-
-extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
-
-extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
-
-extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
-
-extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
-
-extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
-
-extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);
-
-extern int __pthread_mutexattr_settype (pthread_mutexattr_t *__attr,
- int __kind);
-
-#ifdef __USE_UNIX98
-extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
- const pthread_rwlockattr_t *__attr);
-
-extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
-
-extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
-
-extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
-
-extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
-
-extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
-
-extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
-#endif
-
-extern int __pthread_key_create (pthread_key_t *__key,
- void (*__destr_function) (void *));
-
-extern int __pthread_setspecific (pthread_key_t __key,
- const void *__pointer);
-
-extern void *__pthread_getspecific (pthread_key_t __key);
-
-extern int __pthread_once (pthread_once_t *__once_control,
- void (*__init_routine) (void));
-
-extern int __pthread_atfork (void (*__prepare) (void),
- void (*__parent) (void),
- void (*__child) (void));
-
-
-
-/* Make the pthread functions weak so that we can elide them from
- single-threaded processes. */
-#ifndef __NO_WEAK_PTHREAD_ALIASES
-# ifdef weak_extern
-# if _LIBC
-# include <bp-sym.h>
-# else
-# define BP_SYM(sym) sym
-# endif
-weak_extern (BP_SYM (__pthread_mutex_init))
-weak_extern (BP_SYM (__pthread_mutex_destroy))
-weak_extern (BP_SYM (__pthread_mutex_lock))
-weak_extern (BP_SYM (__pthread_mutex_trylock))
-weak_extern (BP_SYM (__pthread_mutex_unlock))
-weak_extern (BP_SYM (__pthread_mutexattr_init))
-weak_extern (BP_SYM (__pthread_mutexattr_destroy))
-weak_extern (BP_SYM (__pthread_mutexattr_settype))
-weak_extern (BP_SYM (__pthread_rwlock_init))
-weak_extern (BP_SYM (__pthread_rwlock_destroy))
-weak_extern (BP_SYM (__pthread_rwlock_rdlock))
-weak_extern (BP_SYM (__pthread_rwlock_tryrdlock))
-weak_extern (BP_SYM (__pthread_rwlock_wrlock))
-weak_extern (BP_SYM (__pthread_rwlock_trywrlock))
-weak_extern (BP_SYM (__pthread_rwlock_unlock))
-weak_extern (BP_SYM (__pthread_key_create))
-weak_extern (BP_SYM (__pthread_setspecific))
-weak_extern (BP_SYM (__pthread_getspecific))
-weak_extern (BP_SYM (__pthread_once))
-weak_extern (__pthread_initialize)
-weak_extern (__pthread_atfork)
-weak_extern (BP_SYM (_pthread_cleanup_push_defer))
-weak_extern (BP_SYM (_pthread_cleanup_pop_restore))
-weak_extern (BP_SYM (pthread_setcancelstate))
-# else
-# pragma weak __pthread_mutex_init
-# pragma weak __pthread_mutex_destroy
-# pragma weak __pthread_mutex_lock
-# pragma weak __pthread_mutex_trylock
-# pragma weak __pthread_mutex_unlock
-# pragma weak __pthread_mutexattr_init
-# pragma weak __pthread_mutexattr_destroy
-# pragma weak __pthread_mutexattr_settype
-# pragma weak __pthread_rwlock_destroy
-# pragma weak __pthread_rwlock_rdlock
-# pragma weak __pthread_rwlock_tryrdlock
-# pragma weak __pthread_rwlock_wrlock
-# pragma weak __pthread_rwlock_trywrlock
-# pragma weak __pthread_rwlock_unlock
-# pragma weak __pthread_key_create
-# pragma weak __pthread_setspecific
-# pragma weak __pthread_getspecific
-# pragma weak __pthread_once
-# pragma weak __pthread_initialize
-# pragma weak __pthread_atfork
-# pragma weak _pthread_cleanup_push_defer
-# pragma weak _pthread_cleanup_pop_restore
-# pragma weak pthread_setcancelstate
-# endif
+/* Hide the definitions which are only supposed to be used inside libc in
+ a separate file. This file is not present in the installation! */
+#ifdef _LIBC
+# include "libc-lockP.h"
#endif
#endif /* bits/libc-lock.h */
diff --git a/nptl/sysdeps/pthread/bits/libc-lockP.h b/nptl/sysdeps/pthread/bits/libc-lockP.h
new file mode 100644
index 0000000000..d08fb9db3c
--- /dev/null
+++ b/nptl/sysdeps/pthread/bits/libc-lockP.h
@@ -0,0 +1,434 @@
+/* Private libc-internal interface for mutex locks. NPTL version.
+ Copyright (C) 1996-2003, 2005, 2007, 2012 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 Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If
+ not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_LIBC_LOCKP_H
+#define _BITS_LIBC_LOCKP_H 1
+
+#include <pthread.h>
+#define __need_NULL
+#include <stddef.h>
+
+
+/* Fortunately Linux now has a mean to do locking which is realtime
+ safe without the aid of the thread library. We also need no fancy
+ options like error checking mutexes etc. We only need simple
+ locks, maybe recursive. This can be easily and cheaply implemented
+ using futexes. We will use them everywhere except in ld.so since
+ ld.so might be used on old kernels with a different libc.so. */
+#include <lowlevellock.h>
+#include <tls.h>
+#include <pthread-functions.h>
+
+/* Mutex type. */
+#if defined NOT_IN_libc && !defined IS_IN_libpthread
+typedef pthread_mutex_t __libc_lock_t;
+#else
+typedef int __libc_lock_t;
+#endif
+typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;
+typedef pthread_rwlock_t __libc_rwlock_t;
+
+/* Type for key to thread-specific data. */
+typedef pthread_key_t __libc_key_t;
+
+/* Define a lock variable NAME with storage class CLASS. The lock must be
+ initialized with __libc_lock_init before it can be used (or define it
+ with __libc_lock_define_initialized, below). Use `extern' for CLASS to
+ declare a lock defined in another module. In public structure
+ definitions you must use a pointer to the lock structure (i.e., NAME
+ begins with a `*'), because its storage size will not be known outside
+ of libc. */
+#define __libc_lock_define(CLASS,NAME) \
+ CLASS __libc_lock_t NAME;
+#define __libc_rwlock_define(CLASS,NAME) \
+ CLASS __libc_rwlock_t NAME;
+#define __rtld_lock_define_recursive(CLASS,NAME) \
+ CLASS __rtld_lock_recursive_t NAME;
+
+/* Define an initialized lock variable NAME with storage class CLASS.
+
+ For the C library we take a deeper look at the initializer. For
+ this implementation all fields are initialized to zero. Therefore
+ we don't initialize the variable which allows putting it into the
+ BSS section. (Except on PA-RISC and other odd architectures, where
+ initialized locks must be set to one due to the lack of normal
+ atomic operations.) */
+
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
+# if LLL_LOCK_INITIALIZER == 0
+# define __libc_lock_define_initialized(CLASS,NAME) \
+ CLASS __libc_lock_t NAME;
+# else
+# define __libc_lock_define_initialized(CLASS,NAME) \
+ CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER;
+# endif
+#else
+# if __LT_SPINLOCK_INIT == 0
+# define __libc_lock_define_initialized(CLASS,NAME) \
+ CLASS __libc_lock_t NAME;
+# else
+# define __libc_lock_define_initialized(CLASS,NAME) \
+ CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER;
+# endif
+#endif
+
+#define __libc_rwlock_define_initialized(CLASS,NAME) \
+ CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
+
+#define __rtld_lock_define_initialized_recursive(CLASS,NAME) \
+ CLASS __rtld_lock_recursive_t NAME = _RTLD_LOCK_RECURSIVE_INITIALIZER;
+#define _RTLD_LOCK_RECURSIVE_INITIALIZER \
+ {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}
+
+#define __rtld_lock_initialize(NAME) \
+ (void) ((NAME) = (__rtld_lock_recursive_t) _RTLD_LOCK_RECURSIVE_INITIALIZER)
+
+/* If we check for a weakly referenced symbol and then perform a
+ normal jump to it te code generated for some platforms in case of
+ PIC is unnecessarily slow. What would happen is that the function
+ is first referenced as data and then it is called indirectly
+ through the PLT. We can make this a direct jump. */
+#ifdef __PIC__
+# define __libc_maybe_call(FUNC, ARGS, ELSE) \
+ (__extension__ ({ __typeof (FUNC) *_fn = (FUNC); \
+ _fn != NULL ? (*_fn) ARGS : ELSE; }))
+#else
+# define __libc_maybe_call(FUNC, ARGS, ELSE) \
+ (FUNC != NULL ? FUNC ARGS : ELSE)
+#endif
+
+/* Call thread functions through the function pointer table. */
+#if defined SHARED && !defined NOT_IN_libc
+# define PTFAVAIL(NAME) __libc_pthread_functions_init
+# define __libc_ptf_call(FUNC, ARGS, ELSE) \
+ (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
+# define __libc_ptf_call_always(FUNC, ARGS) \
+ PTHFCT_CALL (ptr_##FUNC, ARGS)
+#else
+# define PTFAVAIL(NAME) (NAME != NULL)
+# define __libc_ptf_call(FUNC, ARGS, ELSE) \
+ __libc_maybe_call (FUNC, ARGS, ELSE)
+# define __libc_ptf_call_always(FUNC, ARGS) \
+ FUNC ARGS
+#endif
+
+
+/* Initialize the named lock variable, leaving it in a consistent, unlocked
+ state. */
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
+# define __libc_lock_init(NAME) ((NAME) = LLL_LOCK_INITIALIZER, 0)
+#else
+# define __libc_lock_init(NAME) \
+ __libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)
+#endif
+#if defined SHARED && !defined NOT_IN_libc
+/* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER, 0) is
+ inefficient. */
+# define __libc_rwlock_init(NAME) \
+ (__builtin_memset (&(NAME), '\0', sizeof (NAME)), 0)
+#else
+# define __libc_rwlock_init(NAME) \
+ __libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0)
+#endif
+
+#define __rtld_lock_init_recursive(NAME) \
+ do { \
+ if (__pthread_mutex_init != NULL) \
+ { \
+ pthread_mutexattr_t __attr; \
+ __pthread_mutexattr_init (&__attr); \
+ __pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \
+ __pthread_mutex_init (&(NAME).mutex, &__attr); \
+ __pthread_mutexattr_destroy (&__attr); \
+ } \
+ } while (0)
+
+/* Finalize the named lock variable, which must be locked. It cannot be
+ used again until __libc_lock_init is called again on it. This must be
+ called on a lock variable before the containing storage is reused. */
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
+# define __libc_lock_fini(NAME) ((void) 0)
+#else
+# define __libc_lock_fini(NAME) \
+ __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
+#endif
+#if defined SHARED && !defined NOT_IN_libc
+# define __libc_rwlock_fini(NAME) ((void) 0)
+#else
+# define __libc_rwlock_fini(NAME) \
+ __libc_maybe_call (__pthread_rwlock_destroy, (&(NAME)), 0)
+#endif
+
+/* Lock the named lock variable. */
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
+# define __libc_lock_lock(NAME) \
+ ({ lll_lock (NAME, LLL_PRIVATE); 0; })
+#else
+# define __libc_lock_lock(NAME) \
+ __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)
+#endif
+#define __libc_rwlock_rdlock(NAME) \
+ __libc_ptf_call (__pthread_rwlock_rdlock, (&(NAME)), 0)
+#define __libc_rwlock_wrlock(NAME) \
+ __libc_ptf_call (__pthread_rwlock_wrlock, (&(NAME)), 0)
+
+/* Try to lock the named lock variable. */
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
+# define __libc_lock_trylock(NAME) \
+ lll_trylock (NAME)
+#else
+# define __libc_lock_trylock(NAME) \
+ __libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0)
+#endif
+#define __libc_rwlock_tryrdlock(NAME) \
+ __libc_maybe_call (__pthread_rwlock_tryrdlock, (&(NAME)), 0)
+#define __libc_rwlock_trywrlock(NAME) \
+ __libc_maybe_call (__pthread_rwlock_trywrlock, (&(NAME)), 0)
+
+#define __rtld_lock_trylock_recursive(NAME) \
+ __libc_maybe_call (__pthread_mutex_trylock, (&(NAME).mutex), 0)
+
+/* Unlock the named lock variable. */
+#if !defined NOT_IN_libc || defined IS_IN_libpthread
+# define __libc_lock_unlock(NAME) \
+ lll_unlock (NAME, LLL_PRIVATE)
+#else
+# define __libc_lock_unlock(NAME) \
+ __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0)
+#endif
+#define __libc_rwlock_unlock(NAME) \
+ __libc_ptf_call (__pthread_rwlock_unlock, (&(NAME)), 0)
+
+#ifdef SHARED
+# define __rtld_lock_default_lock_recursive(lock) \
+ ++((pthread_mutex_t *)(lock))->__data.__count;
+
+# define __rtld_lock_default_unlock_recursive(lock) \
+ --((pthread_mutex_t *)(lock))->__data.__count;
+
+# define __rtld_lock_lock_recursive(NAME) \
+ GL(dl_rtld_lock_recursive) (&(NAME).mutex)
+
+# define __rtld_lock_unlock_recursive(NAME) \
+ GL(dl_rtld_unlock_recursive) (&(NAME).mutex)
+#else
+# define __rtld_lock_lock_recursive(NAME) \
+ __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)
+
+# define __rtld_lock_unlock_recursive(NAME) \
+ __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0)
+#endif
+
+/* Define once control variable. */
+#if PTHREAD_ONCE_INIT == 0
+/* Special case for static variables where we can avoid the initialization
+ if it is zero. */
+# define __libc_once_define(CLASS, NAME) \
+ CLASS pthread_once_t NAME
+#else
+# define __libc_once_define(CLASS, NAME) \
+ CLASS pthread_once_t NAME = PTHREAD_ONCE_INIT
+#endif
+
+/* Call handler iff the first call. */
+#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \
+ do { \
+ if (PTFAVAIL (__pthread_once)) \
+ __libc_ptf_call_always (__pthread_once, (&(ONCE_CONTROL), \
+ INIT_FUNCTION)); \
+ else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \
+ INIT_FUNCTION (); \
+ (ONCE_CONTROL) |= 2; \
+ } \
+ } while (0)
+
+
+/* Note that for I/O cleanup handling we are using the old-style
+ cancel handling. It does not have to be integrated with C++ snce
+ no C++ code is called in the middle. The old-style handling is
+ faster and the support is not going away. */
+extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
+ void (*routine) (void *), void *arg);
+extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
+ int execute);
+extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
+ void (*routine) (void *), void *arg);
+extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
+ int execute);
+
+/* Sometimes we have to exit the block in the middle. */
+#define __libc_cleanup_end(DOIT) \
+ if (_avail) { \
+ __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\
+ } else if (DOIT) \
+ _buffer.__routine (_buffer.__arg)
+
+
+/* Normal cleanup handling, based on C cleanup attribute. */
+__extern_inline void
+__libc_cleanup_routine (struct __pthread_cleanup_frame *f)
+{
+ if (f->__do_it)
+ f->__cancel_routine (f->__cancel_arg);
+}
+
+#define __libc_cleanup_push(fct, arg) \
+ do { \
+ struct __pthread_cleanup_frame __clframe \
+ __attribute__ ((__cleanup__ (__libc_cleanup_routine))) \
+ = { .__cancel_routine = (fct), .__cancel_arg = (arg), \
+ .__do_it = 1 };
+
+#define __libc_cleanup_pop(execute) \
+ __clframe.__do_it = (execute); \
+ } while (0)
+
+
+/* Create thread-specific key. */
+#define __libc_key_create(KEY, DESTRUCTOR) \
+ __libc_ptf_call (__pthread_key_create, (KEY, DESTRUCTOR), 1)
+
+/* Get thread-specific data. */
+#define __libc_getspecific(KEY) \
+ __libc_ptf_call (__pthread_getspecific, (KEY), NULL)
+
+/* Set thread-specific data. */
+#define __libc_setspecific(KEY, VALUE) \
+ __libc_ptf_call (__pthread_setspecific, (KEY, VALUE), 0)
+
+
+/* Register handlers to execute before and after `fork'. Note that the
+ last parameter is NULL. The handlers registered by the libc are
+ never removed so this is OK. */
+#define __libc_atfork(PREPARE, PARENT, CHILD) \
+ __register_atfork (PREPARE, PARENT, CHILD, NULL)
+extern int __register_atfork (void (*__prepare) (void),
+ void (*__parent) (void),
+ void (*__child) (void),
+ void *__dso_handle);
+
+/* Functions that are used by this file and are internal to the GNU C
+ library. */
+
+extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
+ const pthread_mutexattr_t *__mutex_attr);
+
+extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
+
+extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
+
+extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
+
+extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
+
+extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
+
+extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);
+
+extern int __pthread_mutexattr_settype (pthread_mutexattr_t *__attr,
+ int __kind);
+
+extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
+ const pthread_rwlockattr_t *__attr);
+
+extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
+
+extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
+
+extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
+
+extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
+
+extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
+
+extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
+
+extern int __pthread_key_create (pthread_key_t *__key,
+ void (*__destr_function) (void *));
+
+extern int __pthread_setspecific (pthread_key_t __key,
+ const void *__pointer);
+
+extern void *__pthread_getspecific (pthread_key_t __key);
+
+extern int __pthread_once (pthread_once_t *__once_control,
+ void (*__init_routine) (void));
+
+extern int __pthread_atfork (void (*__prepare) (void),
+ void (*__parent) (void),
+ void (*__child) (void));
+
+
+
+/* Make the pthread functions weak so that we can elide them from
+ single-threaded processes. */
+#ifndef __NO_WEAK_PTHREAD_ALIASES
+# ifdef weak_extern
+# include <bp-sym.h>
+weak_extern (BP_SYM (__pthread_mutex_init))
+weak_extern (BP_SYM (__pthread_mutex_destroy))
+weak_extern (BP_SYM (__pthread_mutex_lock))
+weak_extern (BP_SYM (__pthread_mutex_trylock))
+weak_extern (BP_SYM (__pthread_mutex_unlock))
+weak_extern (BP_SYM (__pthread_mutexattr_init))
+weak_extern (BP_SYM (__pthread_mutexattr_destroy))
+weak_extern (BP_SYM (__pthread_mutexattr_settype))
+weak_extern (BP_SYM (__pthread_rwlock_init))
+weak_extern (BP_SYM (__pthread_rwlock_destroy))
+weak_extern (BP_SYM (__pthread_rwlock_rdlock))
+weak_extern (BP_SYM (__pthread_rwlock_tryrdlock))
+weak_extern (BP_SYM (__pthread_rwlock_wrlock))
+weak_extern (BP_SYM (__pthread_rwlock_trywrlock))
+weak_extern (BP_SYM (__pthread_rwlock_unlock))
+weak_extern (BP_SYM (__pthread_key_create))
+weak_extern (BP_SYM (__pthread_setspecific))
+weak_extern (BP_SYM (__pthread_getspecific))
+weak_extern (BP_SYM (__pthread_once))
+weak_extern (__pthread_initialize)
+weak_extern (__pthread_atfork)
+weak_extern (BP_SYM (_pthread_cleanup_push_defer))
+weak_extern (BP_SYM (_pthread_cleanup_pop_restore))
+weak_extern (BP_SYM (pthread_setcancelstate))
+# else
+# pragma weak __pthread_mutex_init
+# pragma weak __pthread_mutex_destroy
+# pragma weak __pthread_mutex_lock
+# pragma weak __pthread_mutex_trylock
+# pragma weak __pthread_mutex_unlock
+# pragma weak __pthread_mutexattr_init
+# pragma weak __pthread_mutexattr_destroy
+# pragma weak __pthread_mutexattr_settype
+# pragma weak __pthread_rwlock_destroy
+# pragma weak __pthread_rwlock_rdlock
+# pragma weak __pthread_rwlock_tryrdlock
+# pragma weak __pthread_rwlock_wrlock
+# pragma weak __pthread_rwlock_trywrlock
+# pragma weak __pthread_rwlock_unlock
+# pragma weak __pthread_key_create
+# pragma weak __pthread_setspecific
+# pragma weak __pthread_getspecific
+# pragma weak __pthread_once
+# pragma weak __pthread_initialize
+# pragma weak __pthread_atfork
+# pragma weak _pthread_cleanup_push_defer
+# pragma weak _pthread_cleanup_pop_restore
+# pragma weak pthread_setcancelstate
+# endif
+#endif
+
+#endif /* bits/libc-lockP.h */
diff --git a/nptl/sysdeps/pthread/configure b/nptl/sysdeps/pthread/configure
index 6b3c79b8f4..221ce9bbb1 100644
--- a/nptl/sysdeps/pthread/configure
+++ b/nptl/sysdeps/pthread/configure
@@ -81,21 +81,21 @@ $as_echo X/"$0" |
}
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
+ (eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
@@ -106,10 +106,7 @@ $as_echo "$ac_try_echo"; } >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then :
+ } && test -s conftest.$ac_objext; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
@@ -117,15 +114,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
-} # ac_fn_c_try_link
+} # ac_fn_c_try_compile
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
if test "x$libc_cv_gcc___thread" != xyes; then
@@ -165,13 +157,12 @@ _Unwind_GetCFA (context)
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_forced_unwind=yes
else
libc_cv_forced_unwind=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_forced_unwind" >&5
$as_echo "$libc_cv_forced_unwind" >&6; }
@@ -188,25 +179,24 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdio.h>
+extern void some_function (void);
void cl (void *a) { }
int
main ()
{
int a __attribute__ ((cleanup (cl)));
- puts ("test")
+ some_function ()
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_c_cleanup=yes
else
libc_cv_c_cleanup=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_c_cleanup" >&5
$as_echo "$libc_cv_c_cleanup" >&6; }
diff --git a/nptl/sysdeps/pthread/configure.in b/nptl/sysdeps/pthread/configure.in
index 17f18f0fbf..413af96799 100644
--- a/nptl/sysdeps/pthread/configure.in
+++ b/nptl/sysdeps/pthread/configure.in
@@ -23,7 +23,7 @@ dnl Iff <unwind.h> is available, make sure it is the right one and it
dnl contains struct _Unwind_Exception.
AC_CACHE_CHECK(dnl
for forced unwind support, libc_cv_forced_unwind, [dnl
-AC_TRY_LINK([#include <unwind.h>], [
+AC_TRY_COMPILE([#include <unwind.h>], [
struct _Unwind_Exception exc;
struct _Unwind_Context *context;
_Unwind_GetCFA (context)],
@@ -34,11 +34,11 @@ dnl Check for C cleanup handling.
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -fexceptions"
AC_CACHE_CHECK([for C cleanup handling], libc_cv_c_cleanup, [dnl
- AC_TRY_LINK([
-#include <stdio.h>
+ AC_TRY_COMPILE([
+extern void some_function (void);
void cl (void *a) { }], [
int a __attribute__ ((cleanup (cl)));
- puts ("test")],
+ some_function ()],
libc_cv_c_cleanup=yes, libc_cv_c_cleanup=no)])
CFLAGS="$old_CFLAGS"
if test $libc_cv_c_cleanup = no; then
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index c2eb91aa0b..bd97e8556f 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -71,7 +71,7 @@ enum
#endif
-#ifdef __USE_UNIX98
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
/* Mutex protocols. */
enum
{
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
index 74359ff6c3..5952454e60 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2012 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
@@ -35,11 +35,15 @@
typedef unsigned long int pthread_t;
-typedef union
+union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
-} pthread_attr_t;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+#endif
typedef struct __pthread_internal_slist
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
index 4740aee10d..03892437f6 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2005, 2007, 2009, 2011-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -64,7 +64,7 @@ sem_timedwait:
/* Check for invalid nanosecond field. */
cmpl $1000000000, 4(%edi)
movl $EINVAL, %esi
- jae 6f
+ jae .Lerrno_exit
LOCK
incl NWAITERS(%ecx)
@@ -146,6 +146,10 @@ sem_timedwait:
.Lafter_ret:
3: negl %esi
6:
+ movl 28(%esp), %ebx /* Load semaphore address. */
+ LOCK
+ decl NWAITERS(%ebx)
+.Lerrno_exit:
#ifdef PIC
SETUP_PIC_REG(bx)
#else
@@ -162,7 +166,6 @@ sem_timedwait:
movl %esi, %gs:(%edx)
#endif
- movl 28(%esp), %ebx /* Load semaphore address. */
orl $-1, %eax
jmp 10b
.size sem_timedwait,.-sem_timedwait
diff --git a/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c b/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
index 28672a65f7..488376591b 100644
--- a/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
+++ b/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
@@ -17,4 +17,4 @@
<http://www.gnu.org/licenses/>. */
/* No difference to lowlevellock.c, except we lose a couple of functions. */
-#include "lowlevellock.c"
+#include <lowlevellock.c>
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index b7c62f411d..1a02520f6c 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
@@ -1,7 +1,6 @@
/* Machine-specific pthread type layouts. PowerPC version.
- Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003-2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -50,11 +49,15 @@
typedef unsigned long int pthread_t;
-typedef union
+union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
-} pthread_attr_t;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+#endif
#if __WORDSIZE == 64
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
index 3eb4c4a09b..2f80fa9b69 100644
--- a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
@@ -1,6 +1,5 @@
-/* Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -49,11 +48,15 @@
typedef unsigned long int pthread_t;
-typedef union
+union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
-} pthread_attr_t;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+#endif
#if __WORDSIZE == 64
diff --git a/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
index 903830ea7e..36e00426d9 100644
--- a/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
+++ b/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
@@ -1,5 +1,5 @@
/* sem_timedwait -- wait on a semaphore. Generic futex-using version.
- Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
@@ -83,7 +83,6 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime)
}
/* Already timed out? */
- err = -ETIMEDOUT;
if (sec < 0)
{
__set_errno (ETIMEDOUT);
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
index 150ae740f6..ce8bd713b4 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
@@ -1,7 +1,5 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
- Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -39,11 +37,15 @@
typedef unsigned long int pthread_t;
-typedef union
+union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
-} pthread_attr_t;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+#endif
typedef struct __pthread_internal_slist
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
index 9327860ac9..fe4e3b628b 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
@@ -1,5 +1,4 @@
-/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
- Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 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
@@ -243,6 +242,12 @@ __lll_timedlock_wait:
bt .Lreltmo
# endif
+ /* if (timeout->tv_sec < 0) return ETIMEDOUT; */
+ mov.l @r6, r1
+ cmp/pz r1
+ bf/s 5f
+ mov #ETIMEDOUT, r0
+
mov r4, r2
mov r5, r4
mov r7, r5
@@ -278,6 +283,7 @@ __lll_timedlock_wait:
neg r0, r3
3:
mov r3, r0
+5:
rts
mov.l @r15+, r12
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
index d47362fc68..c26e5aa4cb 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2007, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 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
@@ -69,8 +69,8 @@ sem_timedwait:
mov.l @(4,r9), r0
mov.l .L1g, r1
cmp/hs r1, r0
- bt/s 6f
- mov #EINVAL, r0
+ bt/s .Lerrno_exit
+ mov #EINVAL, r10
INC (@(NWAITERS,r8),r2)
7:
@@ -168,6 +168,8 @@ sem_timedwait:
neg r0, r0
6:
mov r0, r10
+ DEC (@(NWAITERS,r8), r2)
+.Lerrno_exit:
mova .Lgot2, r0
mov.l .Lgot2, r12
add r0, r12
@@ -182,7 +184,6 @@ sem_timedwait:
.long errno@GOTTPOFF
.Lexit:
mov.l r10, @r0
- DEC (@(NWAITERS,r8), r2)
bra 10b
mov #-1, r0
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
index 6b432c41c3..cc95367a61 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
@@ -1,7 +1,6 @@
/* Machine-specific pthread type layouts. SPARC version.
- Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003-2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -50,11 +49,15 @@
typedef unsigned long int pthread_t;
-typedef union
+union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
-} pthread_attr_t;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+#endif
#if __WORDSIZE == 64
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c b/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c
index 0b829927d6..f2c2113561 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c
@@ -1,5 +1,5 @@
/* sem_post -- post to a POSIX semaphore. SPARC version.
- Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@@ -30,7 +30,7 @@ __new_sem_post (sem_t *sem)
{
struct sparc_new_sem *isem = (struct sparc_new_sem *) sem;
- int nr = atomic_increment_val (&isem->value);
+ atomic_increment (&isem->value);
atomic_full_barrier ();
if (isem->nwaiters > 0)
{
@@ -53,10 +53,11 @@ attribute_compat_text_section
__old_sem_post (sem_t *sem)
{
struct sparc_old_sem *isem = (struct sparc_old_sem *) sem;
+ int err;
- int nr = atomic_increment_val (&isem->value);
- int err = lll_futex_wake (&isem->value, 1,
- isem->private ^ FUTEX_PRIVATE_FLAG);
+ atomic_increment (&isem->value);
+ err = lll_futex_wake (&isem->value, 1,
+ isem->private ^ FUTEX_PRIVATE_FLAG);
if (__builtin_expect (err, 0) < 0)
{
__set_errno (-err);
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c
index 7b4e8241a8..8e56bc9c19 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c
@@ -1,5 +1,5 @@
/* sem_timedwait -- wait on a semaphore. Generic futex-using version.
- Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
@@ -83,7 +83,6 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime)
}
/* Already timed out? */
- err = -ETIMEDOUT;
if (sec < 0)
{
__set_errno (ETIMEDOUT);
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c
index 5da15742cf..c9fcd595fc 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c
@@ -1,5 +1,5 @@
/* sem_timedwait -- wait on a semaphore. SPARC version.
- Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006, 2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
@@ -102,7 +102,6 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime)
}
/* Already timed out? */
- err = -ETIMEDOUT;
if (sec < 0)
{
__set_errno (ETIMEDOUT);
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
index 76b0b523e4..32be0b6421 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
@@ -1,6 +1,5 @@
-/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -49,11 +48,15 @@
typedef unsigned long int pthread_t;
-typedef union
+union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
-} pthread_attr_t;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+#endif
#if __WORDSIZE == 64
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
index ab7ca6ae9e..dada21c2a5 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
@@ -43,7 +43,7 @@
# endif
#endif
-#define SYS_futex 202
+#define SYS_futex __NR_futex
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
#define FUTEX_CMP_REQUEUE 4
diff --git a/nptl/sysdeps/x86_64/pthreaddef.h b/nptl/sysdeps/x86_64/pthreaddef.h
index 7e45be47ab..50587b8692 100644
--- a/nptl/sysdeps/x86_64/pthreaddef.h
+++ b/nptl/sysdeps/x86_64/pthreaddef.h
@@ -41,7 +41,7 @@
/* Location of current stack frame. The frame pointer is not usable. */
#define CURRENT_STACK_FRAME \
- ({ char *frame; asm ("movq %%rsp, %0" : "=r" (frame)); frame; })
+ ({ register char *frame __asm__("rsp"); frame; })
/* XXX Until we have a better place keep the definitions here. */
diff --git a/nptl/tst-cond16.c b/nptl/tst-cond16.c
index 44b98634b1..8a35d953cc 100644
--- a/nptl/tst-cond16.c
+++ b/nptl/tst-cond16.c
@@ -76,9 +76,15 @@ do_test (void)
count *= 4;
pthread_t th[count];
- int i, ret;
+ pthread_attr_t attr;
+ int i, ret, sz;
+ pthread_attr_init (&attr);
+ sz = __getpagesize ();
+ if (sz < PTHREAD_STACK_MIN)
+ sz = PTHREAD_STACK_MIN;
+ pthread_attr_setstacksize (&attr, sz);
for (i = 0; i < count; ++i)
- if ((ret = pthread_create (&th[i], NULL, tf, NULL)) != 0)
+ if ((ret = pthread_create (&th[i], &attr, tf, NULL)) != 0)
{
errno = ret;
printf ("pthread_create %d failed: %m\n", i);
diff --git a/nptl/tst-cond18.c b/nptl/tst-cond18.c
index a1bb947ac4..264c93238b 100644
--- a/nptl/tst-cond18.c
+++ b/nptl/tst-cond18.c
@@ -87,10 +87,16 @@ do_test (void)
count *= 8;
pthread_t th[count + 1];
- int i, ret;
+ pthread_attr_t attr;
+ int i, ret, sz;
+ pthread_attr_init (&attr);
+ sz = __getpagesize ();
+ if (sz < PTHREAD_STACK_MIN)
+ sz = PTHREAD_STACK_MIN;
+ pthread_attr_setstacksize (&attr, sz);
for (i = 0; i <= count; ++i)
- if ((ret = pthread_create (&th[i], NULL, tf, (void *) (long) i)) != 0)
+ if ((ret = pthread_create (&th[i], &attr, tf, (void *) (long) i)) != 0)
{
errno = ret;
printf ("pthread_create %d failed: %m\n", i);
diff --git a/nptl/tst-sem13.c b/nptl/tst-sem13.c
index 8756b2262f..068d79e85e 100644
--- a/nptl/tst-sem13.c
+++ b/nptl/tst-sem13.c
@@ -30,12 +30,31 @@ do_test (void)
}
if (errno != EINVAL)
{
- puts ("sem_timedwait did not fail with EINVAL");
+ perror ("sem_timedwait did not fail with EINVAL");
return 1;
}
if (u.ns.nwaiters != 0)
{
- puts ("nwaiters modified");
+ printf ("sem_timedwait modified nwaiters: %ld\n", u.ns.nwaiters);
+ return 1;
+ }
+
+ ts.tv_sec = /* Invalid. */ -2;
+ ts.tv_nsec = 0;
+ errno = 0;
+ if (sem_timedwait (&u.s, &ts) >= 0)
+ {
+ puts ("2nd sem_timedwait did not fail");
+ return 1;
+ }
+ if (errno != ETIMEDOUT)
+ {
+ perror ("2nd sem_timedwait did not fail with ETIMEDOUT");
+ return 1;
+ }
+ if (u.ns.nwaiters != 0)
+ {
+ printf ("2nd sem_timedwait modified nwaiters: %ld\n", u.ns.nwaiters);
return 1;
}
diff --git a/nptl/unwind.c b/nptl/unwind.c
index 05710269c1..7ccb21382b 100644
--- a/nptl/unwind.c
+++ b/nptl/unwind.c
@@ -68,7 +68,7 @@ unwind_stop (int version, _Unwind_Action actions,
registered with the old method which would be unwound by this
step. */
struct _pthread_cleanup_buffer *oldp = buf->priv.data.cleanup;
- void *cfa = (void *) _Unwind_GetCFA (context);
+ void *cfa = (void *) (_Unwind_Ptr) _Unwind_GetCFA (context);
if (curp != oldp && (do_longjump || FRAME_LEFT (cfa, curp, adj)))
{
diff --git a/nptl_db/ChangeLog b/nptl_db/ChangeLog
index 81ebfcdfc3..fe1778ee95 100644
--- a/nptl_db/ChangeLog
+++ b/nptl_db/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-07 Ulrich Drepper <drepper@gmail.com>
+
+ * Makefile (distribute): Remove variable.
+
2011-09-15 Andreas Schwab <schwab@redhat.com>
* thread_dbP.h: Include <list.h>
diff --git a/nptl_db/Makefile b/nptl_db/Makefile
index eb3c7e89f0..d15fb9e818 100644
--- a/nptl_db/Makefile
+++ b/nptl_db/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 2002,2003,2009 Free Software Foundation, Inc.
+# Copyright (C) 2002,2003,2009,2012 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
@@ -49,8 +49,6 @@ libthread_db-inhibit-o = $(filter-out .os,$(object-suffixes))
# The ps_* callback functions are not defined.
libthread_db.so-no-z-defs = yes
-distribute = thread_dbP.h shlib-versions proc_service.h \
- db_info.c structs.def db-symbols.h db-symbols.awk
include ../Rules
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
diff --git a/nscd/Makefile b/nscd/Makefile
index f6965dd9c6..ba052eb9de 100644
--- a/nscd/Makefile
+++ b/nscd/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,2000,2002-2009,2011 Free Software Foundation, Inc.
+# Copyright (C) 1998,2000,2002-2009,2011,2012 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
@@ -46,11 +46,6 @@ extra-objs = $(nscd-modules:=.o)
endif
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
-
all-nscd-modules := $(nscd-modules) selinux
ifeq (yes,$(have-selinux))
ifeq (yes,$(have-libaudit))
@@ -74,10 +69,6 @@ endif
LDLIBS-nscd = $(selinux-LIBS)
-distribute := nscd.h nscd-client.h dbg_log.h \
- $(addsuffix .c, $(filter-out xmalloc,$(all-nscd-modules))) \
- nscd.conf nscd.init nscd_proto.h nscd-types.h
-
include ../Rules
CFLAGS-nscd_getpw_r.c = -fexceptions
diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
index ac3d85fc39..54372e4ef0 100644
--- a/nscd/nscd_getgr_r.c
+++ b/nscd/nscd_getgr_r.c
@@ -31,7 +31,7 @@
#include <sys/uio.h>
#include <sys/un.h>
#include <not-cancel.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include "nscd-client.h"
#include "nscd_proto.h"
diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c
index 409b672ee0..e405057d16 100644
--- a/nscd/nscd_getpw_r.c
+++ b/nscd/nscd_getpw_r.c
@@ -30,7 +30,7 @@
#include <sys/uio.h>
#include <sys/un.h>
#include <not-cancel.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include "nscd-client.h"
#include "nscd_proto.h"
diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
index ff85d8299f..acf7e22f82 100644
--- a/nscd/nscd_getserv_r.c
+++ b/nscd/nscd_getserv_r.c
@@ -20,7 +20,7 @@
#include <errno.h>
#include <string.h>
#include <not-cancel.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include "nscd-client.h"
#include "nscd_proto.h"
diff --git a/nss/Makefile b/nss/Makefile
index 65c094d689..54d50d051c 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996-1998,2000-2002,2007,2009,2010,2011
+# Copyright (C) 1996-1998,2000-2002,2007,2009,2010,2011,2012
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -22,9 +22,6 @@
subdir := nss
headers := nss.h
-distribute := nsswitch.h XXX-lookup.c getXXbyYY.c getXXbyYY_r.c \
- getXXent.c getXXent_r.c databases.def \
- nsswitch.conf digits_dots.c function.def
# This is the trivial part which goes into libc itself.
routines = nsswitch getnssent getnssent_r digits_dots \
@@ -46,11 +43,6 @@ xtests = bug-erange
include ../Makeconfig
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
-
# Specify rules for the nss_* modules. We have some services.
services := files db
@@ -66,7 +58,6 @@ vpath %.c $(subdir-dirs) ../locale/programs ../intl
libnss_files-routines := $(addprefix files-,$(databases)) \
files-initgroups files-have_o_cloexec files-init
-distribute += files-XXX.c files-parse.c
libnss_db-dbs := $(addprefix db-,\
$(filter-out hosts network key alias,\
@@ -75,23 +66,19 @@ libnss_db-dbs := $(addprefix db-,\
libnss_db-routines := $(libnss_db-dbs) db-open db-init hash-string
generated += $(filter-out db-alias.c db-netgrp.c, \
$(addsuffix .c,$(libnss_db-dbs)))
-distribute += $(addprefix nss_db/, db-XXX.c nss_db.h)
install-others += $(inst_vardbdir)/Makefile
-# Build static module if requested
-ifneq ($(build-static-nss),yes)
+# Build static module into libc if requested
libnss_files-inhibit-o = $(filter-out .os,$(object-suffixes))
libnss_db-inhibit-o = $(filter-out .os,$(object-suffixes))
+ifeq ($(build-static-nss),yes)
+routines += $(libnss_files-routines)
+static-only-routines += $(libnss_files-routines)
endif
include ../Rules
-
-ifeq (yes,$(build-static-nss))
-$(objpfx)getent: $(objpfx)libnss_files.a
-endif
-
ifeq (yes,$(have-selinux))
LDLIBS-makedb := -lselinux
endif
@@ -118,8 +105,6 @@ $(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o)
$(inst_vardbdir)/Makefile: db-Makefile $(+force)
$(do-install)
-distribute += nss_test1.c
-
CFLAGS-nss_test1.c = -DNOT_IN_libc=1
$(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(common-objpfx)libc.so \
$(common-objpfx)libc_nonshared.a
diff --git a/nss/databases.def b/nss/databases.def
index 755fbe201a..0247aa9637 100644
--- a/nss/databases.def
+++ b/nss/databases.def
@@ -1,5 +1,5 @@
/* List of all databases defined for the NSS in GNU C Library.
- Copyright (C) 1996, 1997, 2005, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 2005, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -23,6 +23,7 @@
DEFINE_DATABASE (aliases)
DEFINE_DATABASE (ethers)
DEFINE_DATABASE (group)
+DEFINE_DATABASE (gshadow)
DEFINE_DATABASE (hosts)
DEFINE_DATABASE (initgroups)
DEFINE_DATABASE (netgroup)
diff --git a/nss/getnssent.c b/nss/getnssent.c
index 014b37681b..6c1eac9d6d 100644
--- a/nss/getnssent.c
+++ b/nss/getnssent.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2004, 2012 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
@@ -32,7 +32,7 @@ __nss_getent (getent_r_function func, void **resbuf, char **buffer,
*buffer = malloc (*buffer_size);
}
- while (buffer != NULL
+ while (*buffer != NULL
&& func (resbuf, *buffer, *buffer_size, &result, h_errnop) == ERANGE
&& (h_errnop == NULL || *h_errnop == NETDB_INTERNAL))
{
diff --git a/nss/nss_db/db-init.c b/nss/nss_db/db-init.c
index 906331ae0a..d23e8f81d6 100644
--- a/nss/nss_db/db-init.c
+++ b/nss/nss_db/db-init.c
@@ -1,5 +1,5 @@
/* Initialization in nss_db module.
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2012 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
@@ -18,7 +18,7 @@
#include <paths.h>
#include <nscd/nscd.h>
-
+#include <string.h>
static union
{
diff --git a/po/Makefile b/po/Makefile
index 7f523eeb36..4ca0d1c4d1 100644
--- a/po/Makefile
+++ b/po/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996-1999,2001,2002,2006,2007,2009,2011
+# Copyright (C) 1996-1999,2001,2002,2006,2007,2009,2011,2012
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -47,10 +47,6 @@ mo-installed = $(inst_msgcatdir)/%/LC_MESSAGES/$(domainname).mo
# Files to install: a $(domainname).mo file for each language.
install-others = $(LINGUAS:%=$(mo-installed))
-# Files to distribute: all the source and compiled binary translation files.
-distribute = $(ALL_LINGUAS:=.po) $(BROKEN_LINGUAS:=.po) $(ALL_LINGUAS:=.mo) \
- libc.pot header.pot
-
include ../Rules
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 6ccffec2bc..60e1ccd464 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,340 +1,1389 @@
-# Traditional Chinese Messages for libc
-# Copyright (C) 2000, 05 Free Software Foundation, Inc.
-# Tung-Han Hsieh <thhsieh@linux.org.tw>, 2000
-# Yuan-Chung Cheng <platin@ch.ntu.edu.tw>, 2000
-# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2005
+# Traditional Chinese Messages for libc.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glibc package.
+# Tung-Han Hsieh <thhsieh@linux.org.tw>, 2000.
+# Yuan-Chung Cheng <platin@ch.ntu.edu.tw>, 2000.
+# Wei-Lun Chao <william.chao@ossii.com.tw>, 2005, 2008, 2011.
+# Wei-Lun Chao <chaoweilun@gmail.com>, 2012.
#
msgid ""
msgstr ""
-"Project-Id-Version: libc 2.3.3\n"
-"POT-Creation-Date: 2004-08-05 09:16+0200\n"
-"PO-Revision-Date: 2005-07-26 11:27+0800\n"
-"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"Project-Id-Version: libc 2.14\n"
+"POT-Creation-Date: 2011-05-31 00:06-0400\n"
+"PO-Revision-Date: 2012-02-09 18:09+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: sysdeps/generic/siglist.h:29 stdio-common/../sysdeps/unix/siglist.c:27
-msgid "Hangup"
-msgstr "掛斷"
+#: argp/argp-help.c:228
+#, c-format
+msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+msgstr "%.*s: ARGP_HELP_FMT åƒæ•¸éœ€è¦ä¸€å€‹å€¼"
-#: sysdeps/generic/siglist.h:30 stdio-common/../sysdeps/unix/siglist.c:28
-msgid "Interrupt"
-msgstr "中斷"
+#: argp/argp-help.c:238
+#, c-format
+msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+msgstr "%.*s: 未知的 ARGP_HELP_FMT åƒæ•¸"
-#: sysdeps/generic/siglist.h:31 stdio-common/../sysdeps/unix/siglist.c:29
-msgid "Quit"
-msgstr "離開"
+#: argp/argp-help.c:251
+#, c-format
+msgid "Garbage in ARGP_HELP_FMT: %s"
+msgstr "ARGP_HELP_FMT 中無用的資訊: %s"
-#: sysdeps/generic/siglist.h:32 stdio-common/../sysdeps/unix/siglist.c:30
-msgid "Illegal instruction"
-msgstr "ä¸åˆæ³•çš„命令"
+#: argp/argp-help.c:1215
+msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."
+msgstr "é•·é¸é …的必須或å¯é¸ç”¨çš„引數也是相å°æ‡‰çŸ­é¸é …的必須或å¯é¸ç”¨çš„引數。"
-#: sysdeps/generic/siglist.h:33 stdio-common/../sysdeps/unix/siglist.c:31
-msgid "Trace/breakpoint trap"
-msgstr "追蹤與中斷點陷阱"
+#: argp/argp-help.c:1601
+msgid "Usage:"
+msgstr "使用方å¼:"
-#: sysdeps/generic/siglist.h:34
-msgid "Aborted"
-msgstr "已經終止"
+#: argp/argp-help.c:1605
+msgid " or: "
+msgstr " 或者: "
-#: sysdeps/generic/siglist.h:35 stdio-common/../sysdeps/unix/siglist.c:34
-msgid "Floating point exception"
-msgstr "浮點數出錯"
+#: argp/argp-help.c:1617
+msgid " [OPTION...]"
+msgstr " [åƒæ•¸...]"
-#: sysdeps/generic/siglist.h:36 stdio-common/../sysdeps/unix/siglist.c:35
-msgid "Killed"
-msgstr "å·²ç æŽ‰"
+#: argp/argp-help.c:1644
+#, c-format
+msgid "Try `%s --help' or `%s --usage' for more information.\n"
+msgstr "請試著用 `%s --help' 或 `%s --usage' 來ç²å¾—更多相關訊æ¯ã€‚\n"
-#: sysdeps/generic/siglist.h:37 stdio-common/../sysdeps/unix/siglist.c:36
-msgid "Bus error"
-msgstr "匯æµæŽ’錯誤 (Bus error)"
+#: argp/argp-help.c:1672
+#, c-format
+msgid "Report bugs to %s.\n"
+msgstr "請將程å¼å•é¡Œå›žå ±è‡³ %s。\n"
-#: sysdeps/generic/siglist.h:38 stdio-common/../sysdeps/unix/siglist.c:37
-msgid "Segmentation fault"
-msgstr "程å¼è¨˜æ†¶é«”å€æ®µéŒ¯èª¤"
+#: argp/argp-parse.c:102
+msgid "Give this help list"
+msgstr "給出這個使用方å¼åˆ—表"
-#. TRANS Broken pipe; there is no process reading from the other end of a pipe.
-#. TRANS Every library function that returns this error code also generates a
-#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled
-#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE}
-#. TRANS unless it has handled or blocked @code{SIGPIPE}.
-#: sysdeps/generic/siglist.h:39 stdio-common/../sysdeps/gnu/errlist.c:351
-#: stdio-common/../sysdeps/unix/siglist.c:39
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:62
-msgid "Broken pipe"
-msgstr "中斷的 pipe"
+#: argp/argp-parse.c:103
+msgid "Give a short usage message"
+msgstr "給出簡短的使用訊æ¯"
-#: sysdeps/generic/siglist.h:40 stdio-common/../sysdeps/unix/siglist.c:40
-msgid "Alarm clock"
-msgstr "鬧é˜"
+#: argp/argp-parse.c:104
+msgid "Set the program name"
+msgstr "設定程å¼å稱"
-#: sysdeps/generic/siglist.h:41 stdio-common/../sysdeps/unix/siglist.c:41
-msgid "Terminated"
-msgstr "終止"
+#: argp/argp-parse.c:106
+msgid "Hang for SECS seconds (default 3600)"
+msgstr "SECS 秒後掛斷 (é è¨­æ˜¯ 3600)"
-#: sysdeps/generic/siglist.h:42 stdio-common/../sysdeps/unix/siglist.c:42
-msgid "Urgent I/O condition"
-msgstr "緊急的輸出入狀態"
+#: argp/argp-parse.c:167
+msgid "Print program version"
+msgstr "å°å‡ºç¨‹å¼ç‰ˆæœ¬"
-#: sysdeps/generic/siglist.h:43 stdio-common/../sysdeps/unix/siglist.c:43
-msgid "Stopped (signal)"
-msgstr "åœæ­¢ (信號)"
+#: argp/argp-parse.c:183
+msgid "(PROGRAM ERROR) No version known!?"
+msgstr "(程å¼éŒ¯èª¤) 沒有èªå¾—的版本!?"
-#: sysdeps/generic/siglist.h:44 stdio-common/../sysdeps/unix/siglist.c:44
-msgid "Stopped"
-msgstr "åœæ­¢"
+#: argp/argp-parse.c:623
+#, c-format
+msgid "%s: Too many arguments\n"
+msgstr "%s: 太多的引數\n"
-#: sysdeps/generic/siglist.h:45 stdio-common/../sysdeps/unix/siglist.c:45
-msgid "Continued"
-msgstr "繼續"
+#: argp/argp-parse.c:766
+msgid "(PROGRAM ERROR) Option should have been recognized!?"
+msgstr "(程å¼éŒ¯èª¤) é¸é …應該已經å¯è¾¨è­˜!?"
-#: sysdeps/generic/siglist.h:46 stdio-common/../sysdeps/unix/siglist.c:46
-msgid "Child exited"
-msgstr "å­è¡Œç¨‹çµæŸ"
+#: assert/assert-perr.c:37
+#, c-format
+msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n"
+msgstr "%s%s%s:%u: %s%s無法é æ–™çš„錯誤: %s。\n"
-#: sysdeps/generic/siglist.h:47 stdio-common/../sysdeps/unix/siglist.c:47
-msgid "Stopped (tty input)"
-msgstr "åœæ­¢ (tty 輸入)"
+#: assert/assert.c:105
+#, c-format
+msgid ""
+"%s%s%s:%u: %s%sAssertion `%s' failed.\n"
+"%n"
+msgstr ""
+"%s%s%s:%u:%s%så‡è¨­ã€Ž%sã€å¤±æ•—。\n"
+"%n"
-#: sysdeps/generic/siglist.h:48 stdio-common/../sysdeps/unix/siglist.c:48
-msgid "Stopped (tty output)"
-msgstr "åœæ­¢ (tty 輸出)"
+#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:100 nss/makedb.c:61
+msgid "NAME"
+msgstr "å稱"
-#: sysdeps/generic/siglist.h:49 stdio-common/../sysdeps/unix/siglist.c:49
-msgid "I/O possible"
-msgstr "I/O å¯è¡Œ"
+#: catgets/gencat.c:111
+msgid "Create C header file NAME containing symbol definitions"
+msgstr "產生的 C 標頭檔åå…§å«ç¬¦è™Ÿå®šç¾©"
-#: sysdeps/generic/siglist.h:50 stdio-common/../sysdeps/unix/siglist.c:50
-msgid "CPU time limit exceeded"
-msgstr "CPU 時間上é™è¶…éŽäº†"
+#: catgets/gencat.c:113
+msgid "Do not use existing catalog, force new output file"
+msgstr "ä¸ä½¿ç”¨ç¾å­˜çš„ catalog, 強制使用新的輸出檔"
-#: sysdeps/generic/siglist.h:51 stdio-common/../sysdeps/unix/siglist.c:51
-msgid "File size limit exceeded"
-msgstr "檔案大å°è¶…éŽä¸Šé™"
+#: catgets/gencat.c:114 nss/makedb.c:61
+msgid "Write output to file NAME"
+msgstr "將輸出寫到檔案 NAME 中"
-#: sysdeps/generic/siglist.h:52 stdio-common/../sysdeps/unix/siglist.c:52
-msgid "Virtual timer expired"
-msgstr "虛擬計時器已éŽæ™‚å–消了"
+#: catgets/gencat.c:119
+msgid ""
+"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n"
+"is -, output is written to standard output.\n"
+msgstr ""
+"ç”¢ç”Ÿè¨Šæ¯ catelog。\\v如果輸入檔å是 -, 將從標準輸入讀å–輸入。\n"
+"如果輸出檔å是 -, 則輸出將寫到標準輸出去。\n"
-#: sysdeps/generic/siglist.h:53 stdio-common/../sysdeps/unix/siglist.c:53
-msgid "Profiling timer expired"
-msgstr "測速評估用的計時器已éŽæ™‚å–消了"
+#: catgets/gencat.c:124
+msgid ""
+"-o OUTPUT-FILE [INPUT-FILE]...\n"
+"[OUTPUT-FILE [INPUT-FILE]...]"
+msgstr ""
+"-o 輸出檔案å稱 [輸入檔案å稱]...\n"
+"[輸出檔案å稱 [輸入檔案å稱]...]"
-#: sysdeps/generic/siglist.h:54 stdio-common/../sysdeps/unix/siglist.c:54
-msgid "Window changed"
-msgstr "範åœæ”¹è®Šäº†"
+#: catgets/gencat.c:232 debug/pcprofiledump.c:208 debug/xtrace.sh:58
+#: elf/ldconfig.c:302 elf/ldd.bash.in:56 elf/sln.c:86 elf/sotruss.ksh:49
+#: elf/sprof.c:371 iconv/iconv_prog.c:408 iconv/iconvconfig.c:380
+#: locale/programs/locale.c:278 locale/programs/localedef.c:371
+#: login/programs/pt_chown.c:92 malloc/memusage.sh:65
+#: malloc/memusagestat.c:539 nscd/nscd.c:415 nss/getent.c:918 nss/makedb.c:231
+#: posix/getconf.c:1122 sunrpc/rpc_main.c:1492 sunrpc/rpcinfo.c:691
+#: sysdeps/unix/sysv/linux/lddlibc4.c:62
+msgid ""
+"For bug reporting instructions, please see:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+msgstr ""
+"用於錯誤報告指令,請åƒçœ‹ï¼š\n"
+"<http://www.gnu.org/software/libc/bugs.html>。\n"
-#: sysdeps/generic/siglist.h:55 stdio-common/../sysdeps/unix/siglist.c:56
-msgid "User defined signal 1"
-msgstr "使用者定義的訊號 1"
+#: catgets/gencat.c:246 debug/pcprofiledump.c:222 debug/xtrace.sh:66
+#: elf/ldconfig.c:316 elf/ldd.bash.in:39 elf/sotruss.ksh:76 elf/sprof.c:386
+#: iconv/iconv_prog.c:423 iconv/iconvconfig.c:395 locale/programs/locale.c:293
+#: locale/programs/localedef.c:387 login/programs/pt_chown.c:63
+#: malloc/memusage.sh:73 malloc/memusagestat.c:557 nscd/nscd.c:429
+#: nss/getent.c:87 nss/makedb.c:245 posix/getconf.c:1104
+#: sysdeps/unix/sysv/linux/lddlibc4.c:69
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"版權所有 (C) %s 自由軟體基金會。\n"
+"這是一個自由軟體;請見æºå§‹ç¢¼çš„授權æ¢æ¬¾ã€‚這沒有擔ä¿ï¼›ç”šè‡³ä¹Ÿæ²’有專為銷\n"
+"售或者é©åˆæŸäº›ç‰¹æ®Šç›®çš„。\n"
-#: sysdeps/generic/siglist.h:56 stdio-common/../sysdeps/unix/siglist.c:57
-msgid "User defined signal 2"
-msgstr "使用者定義的訊號 2"
+#: catgets/gencat.c:251 debug/pcprofiledump.c:227 debug/xtrace.sh:70
+#: elf/ldconfig.c:321 elf/sprof.c:392 iconv/iconv_prog.c:428
+#: iconv/iconvconfig.c:400 locale/programs/locale.c:298
+#: locale/programs/localedef.c:392 malloc/memusage.sh:77
+#: malloc/memusagestat.c:562 nscd/nscd.c:434 nss/getent.c:92 nss/makedb.c:250
+#: posix/getconf.c:1109
+#, c-format
+msgid "Written by %s.\n"
+msgstr "作者 %s。\n"
-#: sysdeps/generic/siglist.h:60 stdio-common/../sysdeps/unix/siglist.c:33
-msgid "EMT trap"
-msgstr "EMT 陷阱"
+#: catgets/gencat.c:282
+msgid "*standard input*"
+msgstr "*標準輸入*"
-#: sysdeps/generic/siglist.h:63 stdio-common/../sysdeps/unix/siglist.c:38
-msgid "Bad system call"
-msgstr "錯誤的系統呼å«"
+#: catgets/gencat.c:288 iconv/iconv_charmap.c:170 iconv/iconv_prog.c:294
+#: nss/makedb.c:170
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "無法開啟輸入檔 `%s'"
-#: sysdeps/generic/siglist.h:66
-msgid "Stack fault"
-msgstr "堆疊錯誤"
+#: catgets/gencat.c:417 catgets/gencat.c:494
+msgid "illegal set number"
+msgstr "ä¸åˆæ³•çš„集åˆç·¨è™Ÿ"
-#: sysdeps/generic/siglist.h:69
-msgid "Information request"
-msgstr "需è¦è³‡æ–™"
+#: catgets/gencat.c:444
+msgid "duplicate set definition"
+msgstr "複製集åˆå®šç¾©"
-#: sysdeps/generic/siglist.h:71
-msgid "Power failure"
-msgstr "é›»æºåš´é‡éŒ¯èª¤"
+#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
+msgid "this is the first definition"
+msgstr "此為第一個定義"
-#: sysdeps/generic/siglist.h:74 stdio-common/../sysdeps/unix/siglist.c:55
-msgid "Resource lost"
-msgstr "資æºæ¼å¤±"
+#: catgets/gencat.c:522
+#, c-format
+msgid "unknown set `%s'"
+msgstr "ä¸æ˜Žçš„é›†åˆ `%s'"
-#: sysdeps/mach/hurd/mips/dl-machine.c:68
-#: string/../sysdeps/mach/_strerror.c:57
-msgid "Error in unknown error system: "
-msgstr "未知å•é¡Œç³»çµ±éŒ¯èª¤: "
+#: catgets/gencat.c:563
+msgid "invalid quote character"
+msgstr "ä¸é©ç”¨çš„引用字元"
-#: sysdeps/mach/hurd/mips/dl-machine.c:83
-#: string/../sysdeps/generic/_strerror.c:44
-#: string/../sysdeps/mach/_strerror.c:87
-msgid "Unknown error "
-msgstr "未知的錯誤 "
+#: catgets/gencat.c:576
+#, c-format
+msgid "unknown directive `%s': line ignored"
+msgstr "ä¸æ˜Žçš„指令 `%s': 此列忽略"
+
+#: catgets/gencat.c:621
+msgid "duplicated message number"
+msgstr "é‡è¤‡çš„訊æ¯ç·¨è™Ÿ"
+
+#: catgets/gencat.c:674
+msgid "duplicated message identifier"
+msgstr "é‡è¤‡çš„訊æ¯è­˜åˆ¥ç¬¦è™Ÿ"
+
+#: catgets/gencat.c:731
+msgid "invalid character: message ignored"
+msgstr "ä¸é©ç”¨çš„å­—å…ƒ: 忽略此訊æ¯"
-#: sysdeps/unix/sysv/linux/lddlibc4.c:64
+#: catgets/gencat.c:774
+msgid "invalid line"
+msgstr "無效的輸入列"
+
+#: catgets/gencat.c:828
+msgid "malformed line ignored"
+msgstr "忽略奇怪的列"
+
+#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183
#, c-format
-msgid "cannot open `%s'"
-msgstr "無法開啟 `%s'"
+msgid "cannot open output file `%s'"
+msgstr "無法開啟輸出檔 `%s'"
+
+#: catgets/gencat.c:1195 locale/programs/linereader.c:560
+msgid "invalid escape sequence"
+msgstr "無效的跳脫åºåˆ—"
-#: sysdeps/unix/sysv/linux/lddlibc4.c:68
+#: catgets/gencat.c:1217
+msgid "unterminated message"
+msgstr "沒有çµå°¾çš„訊æ¯"
+
+#: catgets/gencat.c:1241
#, c-format
-msgid "cannot read header from `%s'"
-msgstr "無法從 `%s' 讀å–標頭資料"
+msgid "while opening old catalog file"
+msgstr "在開啟舊的類別檔案時"
-#: iconv/iconv_charmap.c:159 iconv/iconv_prog.c:295 catgets/gencat.c:288
+#: catgets/gencat.c:1332
#, c-format
-msgid "cannot open input file `%s'"
-msgstr "無法開啟輸入檔 `%s'"
+msgid "conversion modules not available"
+msgstr "轉æ›æ¨¡çµ„ä¸å­˜åœ¨"
+
+#: catgets/gencat.c:1358
+#, c-format
+msgid "cannot determine escape character"
+msgstr "無法決定跳脫字元"
+
+#: debug/pcprofiledump.c:53
+msgid "Don't buffer output"
+msgstr "ä¸è¦å°‡è¼¸å…¥å­˜å…¥ç·©è¡å€"
+
+#: debug/pcprofiledump.c:58
+msgid "Dump information generated by PC profiling."
+msgstr "將產生於 PC 測速評估的資料傾å¸å‡ºä¾†"
+
+#: debug/pcprofiledump.c:61
+msgid "[FILE]"
+msgstr "[檔案]"
+
+#: debug/pcprofiledump.c:108
+#, c-format
+msgid "cannot open input file"
+msgstr "無法開啟輸入檔"
+
+#: debug/pcprofiledump.c:115
+#, c-format
+msgid "cannot read header"
+msgstr "無法讀å–標頭資料"
+
+#: debug/pcprofiledump.c:179
+#, c-format
+msgid "invalid pointer size"
+msgstr "無效的指標大å°"
+
+#: debug/xtrace.sh:27 debug/xtrace.sh:45
+msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n"
+msgstr "用法:xtrace [é¸é …]… ç¨‹å¼ [PROGRAMOPTION]…\\n"
+
+#: debug/xtrace.sh:33 malloc/memusage.sh:27
+msgid "Try \\`%s --help' or `%s --usage' for more information.\\n"
+msgstr "請嘗試 \\『%s --helpã€æˆ–『%s --usageã€ä»¥ç²å¾—更多資訊。\\n"
+
+#: debug/xtrace.sh:39
+msgid "%s: option '%s' requires an argument.\\n"
+msgstr "%s:é¸é …『%sã€éœ€è¦ä¸€å€‹å¼•æ•¸.\\n"
+
+#: debug/xtrace.sh:46
+msgid ""
+"Trace execution of program by printing currently executed function.\n"
+"\n"
+" --data=FILE Don't run the program, just print the data from FILE.\n"
+"\n"
+" -?,--help Print this help and exit\n"
+" --usage Give a short usage message\n"
+" -V,--version Print version information and exit\n"
+"\n"
+"Mandatory arguments to long options are also mandatory for any corresponding\n"
+"short options.\n"
+"\n"
+msgstr ""
+"經由列å°ç›®å‰åŸ·è¡Œçš„函å¼ä¾†è¿½è¹¤ç¨‹å¼çš„執行。\n"
+"\n"
+" --data=檔案 無法é‹è¡Œç¨‹å¼ï¼Œåƒ…從檔案å°å‡ºè³‡æ–™ã€‚\n"
+"\n"
+" -?,--help 列å°é€™ä»½èªªæ˜Žç„¶å¾Œé›¢é–‹\n"
+" --usage 給出簡短用法訊æ¯\n"
+" -V,--version å°å‡ºç‰ˆæœ¬è³‡è¨Šç„¶å¾Œé›¢é–‹\n"
+"\n"
+"å°æ–¼é•·é¸é …å¿…è¦çš„引數åŒæ¨£å¿…è¦æ–¼ä»»ä½•ç›¸æ‡‰çš„\n"
+"短é¸é …。\n"
+"\n"
+
+#: debug/xtrace.sh:127
+msgid "xtrace: unrecognized option \\`$1'\\n"
+msgstr "xtrace:無法辨識的é¸é …「$1ã€\\n"
+
+#: debug/xtrace.sh:140
+msgid "No program name given\\n"
+msgstr "未給定程å¼å稱\\n"
+
+#: debug/xtrace.sh:148
+#, sh-format
+msgid "executable \\`$program' not found\\n"
+msgstr "å¯åŸ·è¡Œæª”案「$programã€æ‰¾ä¸åˆ°\\n"
+
+#: debug/xtrace.sh:152
+#, sh-format
+msgid "\\`$program' is no executable\\n"
+msgstr "「$programã€ä¸æ˜¯å¯åŸ·è¡Œæª”案\\n"
+
+#: dlfcn/dlinfo.c:64
+msgid "RTLD_SELF used in code not dynamically loaded"
+msgstr "程å¼ç¢¼æ‰€ä½¿ç”¨çš„ RTLD_SELF 沒有動態載入"
+
+#: dlfcn/dlinfo.c:73
+msgid "unsupported dlinfo request"
+msgstr "未支æ´çš„ dlinfo 請求"
+
+#: dlfcn/dlmopen.c:64
+msgid "invalid namespace"
+msgstr "無效的命å空間"
+
+#: dlfcn/dlmopen.c:69
+msgid "invalid mode"
+msgstr "無效的模å¼"
+
+#: dlfcn/dlopen.c:65
+msgid "invalid mode parameter"
+msgstr "無效的模å¼åƒæ•¸"
+
+#: elf/cache.c:69
+msgid "unknown"
+msgstr "未知"
+
+#: elf/cache.c:112
+msgid "Unknown OS"
+msgstr "未知的作業系統"
+
+#: elf/cache.c:117
+#, c-format
+msgid ", OS ABI: %s %d.%d.%d"
+msgstr ", OS ABI: %s %d.%d.%d"
+
+#: elf/cache.c:134 elf/ldconfig.c:1305
+#, c-format
+msgid "Can't open cache file %s\n"
+msgstr "無法開啟快å–檔 %s\n"
+
+#: elf/cache.c:148
+#, c-format
+msgid "mmap of cache file failed.\n"
+msgstr "å¿«å–檔案 mmap 失敗。\n"
+
+#: elf/cache.c:152 elf/cache.c:166
+#, c-format
+msgid "File is not a cache file.\n"
+msgstr "檔案並éžå¿«å–檔。\n"
+
+#: elf/cache.c:199 elf/cache.c:209
+#, c-format
+msgid "%d libs found in cache `%s'\n"
+msgstr "%d 函å¼åº«åœ¨å¿«å– `%s' 中找到\n"
+
+#: elf/cache.c:403
+#, c-format
+msgid "Can't create temporary cache file %s"
+msgstr "無法產生暫時的快å–檔 %s"
+
+#: elf/cache.c:411 elf/cache.c:421 elf/cache.c:425 elf/cache.c:430
+#, c-format
+msgid "Writing of cache data failed"
+msgstr "寫入快å–資料時發生錯誤"
+
+#: elf/cache.c:435
+#, c-format
+msgid "Changing access rights of %s to %#o failed"
+msgstr "更改 %s çš„å­˜å–權é™ç‚º %#o 失敗"
+
+#: elf/cache.c:440
+#, c-format
+msgid "Renaming of %s to %s failed"
+msgstr "å°‡ %s 改å為 %s 失敗"
+
+#: elf/dl-close.c:387 elf/dl-open.c:397
+msgid "cannot create scope list"
+msgstr "無法建立作用域列表"
+
+#: elf/dl-close.c:767
+msgid "shared object not open"
+msgstr "共用目的檔案沒有開啟"
+
+#: elf/dl-deps.c:114
+msgid "DST not allowed in SUID/SGID programs"
+msgstr "DST ä¸å…許在 SUID/SGID 的程å¼ä¸­"
+
+#: elf/dl-deps.c:127
+msgid "empty dynamic string token substitution"
+msgstr "空的動態字串字組替æ›"
+
+#: elf/dl-deps.c:133
+#, c-format
+msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n"
+msgstr "由於空的動態字串字組替æ›è€Œç„¡æ³•è¼‰å…¥å¤–部的 `%s'\n"
+
+#: elf/dl-deps.c:474
+msgid "cannot allocate dependency list"
+msgstr "無法é…置相關性列表"
+
+#: elf/dl-deps.c:514 elf/dl-deps.c:574
+msgid "cannot allocate symbol search list"
+msgstr "無法é…置符號æœå°‹åˆ—表"
+
+#: elf/dl-deps.c:554
+msgid "Filters not supported with LD_TRACE_PRELINKING"
+msgstr "éŽæ¿¾ç¨‹å¼ä¸æ”¯æ´èˆ‡ LD_TRACE_PRELINKING 共用"
+
+#: elf/dl-error.c:77
+msgid "DYNAMIC LINKER BUG!!!"
+msgstr "動態連接程å¼æœ‰å•é¡Œ!!!"
+
+#: elf/dl-error.c:124
+msgid "error while loading shared libraries"
+msgstr "載入共用函å¼åº«æ™‚發生錯誤"
+
+#: elf/dl-fptr.c:88
+msgid "cannot map pages for fdesc table"
+msgstr "無法將é é¢å°æ˜ æ–¼ fdesc 表格"
+
+#: elf/dl-fptr.c:192
+msgid "cannot map pages for fptr table"
+msgstr "無法將é é¢å°æ˜ æ–¼ fptr 表格"
+
+#: elf/dl-fptr.c:221
+msgid "internal error: symidx out of range of fptr table"
+msgstr "內部錯誤:symidx 超出 fptr 表格的範åœ"
+
+#: elf/dl-load.c:471
+msgid "cannot allocate name record"
+msgstr "無法é…ç½®å稱紀錄"
+
+#: elf/dl-load.c:548 elf/dl-load.c:664 elf/dl-load.c:749 elf/dl-load.c:862
+msgid "cannot create cache for search path"
+msgstr "無法為æœå°‹è·¯å¾‘建立快å–"
+
+#: elf/dl-load.c:639
+msgid "cannot create RUNPATH/RPATH copy"
+msgstr "無法建立 RUNPATH/RPATH 的副本"
+
+#: elf/dl-load.c:735
+msgid "cannot create search path array"
+msgstr "無法建立æœå°‹è·¯å¾‘陣列"
+
+#: elf/dl-load.c:931
+msgid "cannot stat shared object"
+msgstr "無法 stat 共用目的檔"
+
+#: elf/dl-load.c:1009
+msgid "cannot open zero fill device"
+msgstr "無法開啟以零填滿的è£ç½®"
+
+#: elf/dl-load.c:1055 elf/dl-load.c:2313
+msgid "cannot create shared object descriptor"
+msgstr "無法建立共用目的檔敘述項"
+
+#: elf/dl-load.c:1074 elf/dl-load.c:1730 elf/dl-load.c:1833
+msgid "cannot read file data"
+msgstr "無法讀å–檔案資料"
+
+#: elf/dl-load.c:1120
+msgid "ELF load command alignment not page-aligned"
+msgstr "ELF 載入命令å°é½Šä¸¦æ²’æœ‰æŒ‰ç…§è¨˜æ†¶é«”åˆ†é  (page) å°é½Š"
+
+#: elf/dl-load.c:1127
+msgid "ELF load command address/offset not properly aligned"
+msgstr "ELF 載入命令ä½å€/ä½ç§»ä¸¦æ²’有é©ç•¶åœ°å°é½Š"
+
+#: elf/dl-load.c:1210
+msgid "cannot allocate TLS data structures for initial thread"
+msgstr "無法é…ç½® TLS 資料çµæ§‹ç”¨ä»¥èµ·å§‹åŸ·è¡Œç·’"
+
+#: elf/dl-load.c:1233
+msgid "cannot handle TLS data"
+msgstr "ç„¡æ³•è™•ç† TLS 資料"
+
+#: elf/dl-load.c:1252
+msgid "object file has no loadable segments"
+msgstr "目的檔中沒有å¯è¼‰å…¥çš„節å€"
+
+#: elf/dl-load.c:1288
+msgid "failed to map segment from shared object"
+msgstr "從共用目的檔中å°æ˜ å€æ®µå¤±æ•—"
+
+#: elf/dl-load.c:1314
+msgid "cannot dynamically load executable"
+msgstr "無法動態載入執行檔"
+
+#: elf/dl-load.c:1376
+msgid "cannot change memory protections"
+msgstr "無法改變記憶體ä¿è­·ç‹€æ…‹"
+
+#: elf/dl-load.c:1395
+msgid "cannot map zero-fill pages"
+msgstr "無法å°æ‡‰ä»¥é›¶å¡«æ»¿çš„分é å€"
+
+#: elf/dl-load.c:1409
+msgid "object file has no dynamic section"
+msgstr "共用目的檔中沒有動態節å€"
+
+#: elf/dl-load.c:1432
+msgid "shared object cannot be dlopen()ed"
+msgstr "共用目的檔無法被 dlopen()"
+
+#: elf/dl-load.c:1445
+msgid "cannot allocate memory for program header"
+msgstr "無法é…置記憶體給程å¼æ¨™é ­å€ä½¿ç”¨"
+
+#: elf/dl-load.c:1462 elf/dl-open.c:180
+msgid "invalid caller"
+msgstr "無效的呼å«è€…"
+
+#: elf/dl-load.c:1501
+msgid "cannot enable executable stack as shared object requires"
+msgstr "無法開啟å¯åŸ·è¡Œå †ç–Šåšç‚ºå…±ç”¨ç›®çš„檔"
+
+#: elf/dl-load.c:1514
+msgid "cannot close file descriptor"
+msgstr "無法關閉檔案æ述符號"
+
+#: elf/dl-load.c:1730
+msgid "file too short"
+msgstr "檔案太å°"
+
+#: elf/dl-load.c:1766
+msgid "invalid ELF header"
+msgstr "無效的 ELF 標頭"
+
+#: elf/dl-load.c:1778
+msgid "ELF file data encoding not big-endian"
+msgstr "ELF 檔資料編碼並éžå¤§å°¾åº"
+
+#: elf/dl-load.c:1780
+msgid "ELF file data encoding not little-endian"
+msgstr "ELF 檔資料編碼並éžå°å°¾åº"
+
+#: elf/dl-load.c:1784
+msgid "ELF file version ident does not match current one"
+msgstr "ELF 檔版本 ident ä¸ç¬¦åˆç›®å‰æ‰€ä½¿ç”¨çš„"
+
+#: elf/dl-load.c:1788
+msgid "ELF file OS ABI invalid"
+msgstr "ELF 檔 OS ABI 版本ä¸é©ç”¨"
+
+#: elf/dl-load.c:1791
+msgid "ELF file ABI version invalid"
+msgstr "ELF 檔 ABI 版本ä¸é©ç”¨"
+
+#: elf/dl-load.c:1794
+msgid "nonzero padding in e_ident"
+msgstr "在 e_ident 中填補éžé›¶å€¼"
+
+#: elf/dl-load.c:1797
+msgid "internal error"
+msgstr "內部錯誤"
+
+#: elf/dl-load.c:1804
+msgid "ELF file version does not match current one"
+msgstr "ELF 檔版本ä¸ç¬¦åˆç›®å‰çš„版本"
+
+#: elf/dl-load.c:1812
+msgid "only ET_DYN and ET_EXEC can be loaded"
+msgstr "åªæœ‰ ET_DYN ä»¥åŠ ET_EXEC å¯ä»¥è¼‰å…¥"
+
+#: elf/dl-load.c:1818
+msgid "ELF file's phentsize not the expected size"
+msgstr "ELF 檔的 phentsize 並ä¸æ˜¯é æœŸä¸­çš„大å°"
+
+#: elf/dl-load.c:2332
+msgid "wrong ELF class: ELFCLASS64"
+msgstr "錯誤 ELF 類別:ELFCLASS64"
+
+#: elf/dl-load.c:2333
+msgid "wrong ELF class: ELFCLASS32"
+msgstr "錯誤 ELF 類別:ELFCLASS32"
+
+#: elf/dl-load.c:2336
+msgid "cannot open shared object file"
+msgstr "無法開啟共用目的檔"
+
+#: elf/dl-lookup.c:757
+msgid "relocation error"
+msgstr "é‡å®šå€éŒ¯èª¤"
+
+#: elf/dl-lookup.c:785
+msgid "symbol lookup error"
+msgstr "符號查找錯誤"
+
+#: elf/dl-open.c:115
+msgid "cannot extend global scope"
+msgstr "無法延展全域變數的作用域"
+
+#: elf/dl-open.c:440
+msgid "TLS generation counter wrapped! Please report this."
+msgstr "TLS 產生計數器被轉æ›åŸ·è¡Œï¼ 請報告這個情æ³ã€‚"
+
+#: elf/dl-open.c:462
+msgid "cannot load any more object with static TLS"
+msgstr "無法以éœæ…‹ TLS å†è¼‰å…¥ä»»ä½•ç‰©ä»¶"
+
+#: elf/dl-open.c:511
+msgid "invalid mode for dlopen()"
+msgstr "無效的 dlopen() 模å¼"
+
+#: elf/dl-open.c:528
+msgid "no more namespaces available for dlmopen()"
+msgstr "無更多命å空間å¯è¦‹æ–¼ dlmopen ()"
+
+#: elf/dl-open.c:547
+msgid "invalid target namespace in dlmopen()"
+msgstr "dlmopen() 中的無效目標命å空間"
+
+#: elf/dl-reloc.c:120
+msgid "cannot allocate memory in static TLS block"
+msgstr "無法在éœæ…‹ TLS å€å¡Šä¸­é…置記憶體"
+
+#: elf/dl-reloc.c:212
+msgid "cannot make segment writable for relocation"
+msgstr "在é‡æ–°å®šå€ä»¥å¾Œç„¡æ³•å°‡å€æ®µè¨­ç‚ºå¯å¯«å…¥ç‹€æ…‹"
+
+#: elf/dl-reloc.c:275
+#, c-format
+msgid "%s: no PLTREL found in object %s\n"
+msgstr "%s: 在目的檔 %s 中沒有找到 PLTREL\n"
+
+#: elf/dl-reloc.c:286
+#, c-format
+msgid "%s: out of memory to store relocation results for %s\n"
+msgstr "%s: 記憶體ä¸è¶³ä»¥å„²å­˜é‡å®šå€çµæžœç”¨æ–¼ %s\n"
+
+#: elf/dl-reloc.c:302
+msgid "cannot restore segment prot after reloc"
+msgstr "在 reloc 之後無法復原 segment prot"
+
+#: elf/dl-reloc.c:331
+msgid "cannot apply additional memory protection after relocation"
+msgstr "é‡å®šå€ä¹‹å¾Œç„¡æ³•å¥—用é¡å¤–記憶體ä¿è­·"
+
+#: elf/dl-sym.c:162
+msgid "RTLD_NEXT used in code not dynamically loaded"
+msgstr "程å¼ç¢¼æ‰€ä½¿ç”¨çš„ RTLD_NEXT 沒有動態載入"
+
+#: elf/dl-sysdep.c:488 elf/dl-sysdep.c:500
+msgid "cannot create capability list"
+msgstr "無法建立 capability 列表"
+
+#: elf/dl-tls.c:861
+msgid "cannot create TLS data structures"
+msgstr "無法建立 TLS 資料çµæ§‹"
+
+#: elf/dl-version.c:172
+msgid "version lookup error"
+msgstr "版本查找錯誤"
+
+#: elf/dl-version.c:303
+msgid "cannot allocate version reference table"
+msgstr "無法é…置版本åƒç…§è¡¨"
+
+#: elf/ldconfig.c:141
+msgid "Print cache"
+msgstr "å°å‡ºå¿«å–"
+
+#: elf/ldconfig.c:142
+msgid "Generate verbose messages"
+msgstr "產生更多的訊æ¯"
+
+#: elf/ldconfig.c:143
+msgid "Don't build cache"
+msgstr "ä¸å»ºç«‹å¿«å–"
+
+#: elf/ldconfig.c:144
+msgid "Don't generate links"
+msgstr "ä¸ç”¢ç”Ÿé€£çµ"
+
+#: elf/ldconfig.c:145
+msgid "Change to and use ROOT as root directory"
+msgstr "變æ›åˆ° ROOT 目錄並以它åšç‚ºæ ¹ç›®éŒ„"
+
+#: elf/ldconfig.c:145
+msgid "ROOT"
+msgstr "ROOT"
+
+#: elf/ldconfig.c:146
+msgid "CACHE"
+msgstr "CACHE"
+
+#: elf/ldconfig.c:146
+msgid "Use CACHE as cache file"
+msgstr "使用 CACHE 當作快å–檔案"
+
+#: elf/ldconfig.c:147
+msgid "CONF"
+msgstr "CONF"
+
+#: elf/ldconfig.c:147
+msgid "Use CONF as configuration file"
+msgstr "使用 CONF 當作設定檔"
+
+#: elf/ldconfig.c:148
+msgid "Only process directories specified on the command line. Don't build cache."
+msgstr "åªè™•ç†åœ¨å‘½ä»¤åˆ—引數中有指定的目錄,ä¸å»ºç«‹å¿«å–檔案。"
+
+#: elf/ldconfig.c:149
+msgid "Manually link individual libraries."
+msgstr "手動個別連çµå‡½å¼åº«"
+
+#: elf/ldconfig.c:150
+msgid "FORMAT"
+msgstr "FORMAT"
+
+#: elf/ldconfig.c:150
+msgid "Format to use: new, old or compat (default)"
+msgstr "將使用格å¼: æ–°ã€èˆŠæˆ–相容 (é è¨­)"
+
+#: elf/ldconfig.c:151
+msgid "Ignore auxiliary cache file"
+msgstr "忽略輔助設備快å–檔案"
+
+#: elf/ldconfig.c:159
+msgid "Configure Dynamic Linker Run Time Bindings."
+msgstr "設定執行時期動態連接"
+
+#: elf/ldconfig.c:339
+#, c-format
+msgid "Path `%s' given more than once"
+msgstr "路徑 `%s' 使用超éŽä¸€æ¬¡"
+
+#: elf/ldconfig.c:379
+#, c-format
+msgid "%s is not a known library type"
+msgstr "%s ä¸æ˜¯ä¸€å€‹å·²çŸ¥çš„函å¼åº«åž‹æ…‹"
+
+#: elf/ldconfig.c:407
+#, c-format
+msgid "Can't stat %s"
+msgstr "無法 stat %s"
+
+#: elf/ldconfig.c:481
+#, c-format
+msgid "Can't stat %s\n"
+msgstr "無法 stat %s\n"
+
+#: elf/ldconfig.c:491
+#, c-format
+msgid "%s is not a symbolic link\n"
+msgstr "%s ä¸æ˜¯ä¸€å€‹ç¬¦è™Ÿé€£æŽ¥æª”\n"
+
+#: elf/ldconfig.c:510
+#, c-format
+msgid "Can't unlink %s"
+msgstr "無法å–æ¶ˆé€£çµ %s"
+
+#: elf/ldconfig.c:516
+#, c-format
+msgid "Can't link %s to %s"
+msgstr "無法從 %s 連çµåˆ° %s"
+
+#: elf/ldconfig.c:522
+msgid " (changed)\n"
+msgstr " (已改變)\n"
+
+#: elf/ldconfig.c:524
+msgid " (SKIPPED)\n"
+msgstr " (已忽略)\n"
+
+#: elf/ldconfig.c:579
+#, c-format
+msgid "Can't find %s"
+msgstr "找ä¸åˆ° %s"
+
+#: elf/ldconfig.c:595 elf/ldconfig.c:768 elf/ldconfig.c:827 elf/ldconfig.c:861
+#, c-format
+msgid "Cannot lstat %s"
+msgstr "無法 lstat %s"
+
+#: elf/ldconfig.c:602
+#, c-format
+msgid "Ignored file %s since it is not a regular file."
+msgstr "忽略檔案 %s 因為它ä¸æ˜¯ä¸€å€‹æ­£å¸¸çš„檔案。"
+
+#: elf/ldconfig.c:611
+#, c-format
+msgid "No link created since soname could not be found for %s"
+msgstr "由於找ä¸åˆ° %s 的共用目的檔å稱,連çµä¸¦æœªè¢«å»ºç«‹"
+
+#: elf/ldconfig.c:694
+#, c-format
+msgid "Can't open directory %s"
+msgstr "無法開啟目錄 %s"
+
+#: elf/ldconfig.c:786 elf/ldconfig.c:848 elf/readlib.c:91
+#, c-format
+msgid "Input file %s not found.\n"
+msgstr "輸入檔 %s 找ä¸åˆ°ã€‚\n"
+
+#: elf/ldconfig.c:793
+#, c-format
+msgid "Cannot stat %s"
+msgstr "無法顯示狀態 %s"
+
+#: elf/ldconfig.c:922
+#, c-format
+msgid "libc5 library %s in wrong directory"
+msgstr "libc5 函å¼åº« %s 擺錯目錄了"
+
+#: elf/ldconfig.c:925
+#, c-format
+msgid "libc6 library %s in wrong directory"
+msgstr "libc6 函å¼åº« %s 擺錯目錄了"
+
+#: elf/ldconfig.c:928
+#, c-format
+msgid "libc4 library %s in wrong directory"
+msgstr "libc4 函å¼åº« %s 擺錯目錄了"
+
+#: elf/ldconfig.c:956
+#, c-format
+msgid "libraries %s and %s in directory %s have same soname but different type."
+msgstr "函å¼åº« %s è·Ÿ %s (在目錄 %s 底下) 有共åŒçš„共用函å¼åº«å稱,ä¸éŽå…¶æ ¼å¼å»ä¸åŒ"
+
+#: elf/ldconfig.c:1065
+#, c-format
+msgid "Can't open configuration file %s"
+msgstr "無法開啟設定檔 %s"
+
+#: elf/ldconfig.c:1129
+#, c-format
+msgid "%s:%u: bad syntax in hwcap line"
+msgstr "%s:%u: 在 hwcap 列中有ä¸ç•¶çš„語法"
+
+#: elf/ldconfig.c:1135
+#, c-format
+msgid "%s:%u: hwcap index %lu above maximum %u"
+msgstr "%s:%u:hwcap 索引 %lu 以上的最大值 %u"
+
+#: elf/ldconfig.c:1142 elf/ldconfig.c:1150
+#, c-format
+msgid "%s:%u: hwcap index %lu already defined as %s"
+msgstr "%s:%u: hwcap 索引 %lu 已經被定義為 %s"
+
+#: elf/ldconfig.c:1153
+#, c-format
+msgid "%s:%u: duplicate hwcap %lu %s"
+msgstr "%s:%u:é‡è£½ hwcap %lu %s"
+
+#: elf/ldconfig.c:1175
+#, c-format
+msgid "need absolute file name for configuration file when using -r"
+msgstr "需è¦çµ•å°æª”案å稱用於組態檔案時正在使用 -r"
+
+#: elf/ldconfig.c:1182 locale/programs/xmalloc.c:70 malloc/obstack.c:434
+#: malloc/obstack.c:436 posix/getconf.c:1077 posix/getconf.c:1297
+#, c-format
+msgid "memory exhausted"
+msgstr "記憶體耗盡"
+
+#: elf/ldconfig.c:1214
+#, c-format
+msgid "%s:%u: cannot read directory %s"
+msgstr "%s:%u: 無法讀å–目錄 %s"
+
+#: elf/ldconfig.c:1258
+#, c-format
+msgid "relative path `%s' used to build cache"
+msgstr "用來建置快å–的相å°è·¯å¾‘ `%s'"
+
+#: elf/ldconfig.c:1284
+#, c-format
+msgid "Can't chdir to /"
+msgstr "無法變更目錄到 /"
+
+#: elf/ldconfig.c:1325
+#, c-format
+msgid "Can't open cache file directory %s\n"
+msgstr "無法開啟快å–檔案目錄 %s\n"
+
+#: elf/ldd.bash.in:43
+msgid "Written by %s and %s.\n"
+msgstr "由 %s 和 %s 編寫。\n"
+
+#: elf/ldd.bash.in:48
+msgid ""
+"Usage: ldd [OPTION]... FILE...\n"
+" --help print this help and exit\n"
+" --version print version information and exit\n"
+" -d, --data-relocs process data relocations\n"
+" -r, --function-relocs process data and function relocations\n"
+" -u, --unused print unused direct dependencies\n"
+" -v, --verbose print all information\n"
+msgstr ""
+"用法:ldd [é¸é …]… 檔案…\n"
+" --help å°å‡ºé€™ä»½èªªæ˜Žç„¶å¾Œé›¢é–‹\n"
+" --version å°å‡ºç‰ˆæœ¬è³‡è¨Šç„¶å¾Œé›¢é–‹\n"
+" -d, --data-relocs 處ç†è³‡æ–™é‡å®šå€\n"
+" -r, --function-relocs 處ç†è³‡æ–™å’Œå‡½å¼é‡å®šå€\n"
+" -u, --unused å°å‡ºæœªä½¿ç”¨çš„直接相ä¾æ€§\n"
+" -v, --verbose å°å‡ºæ‰€æœ‰è³‡è¨Š\n"
+
+#: elf/ldd.bash.in:82
+msgid "ldd: option \\`$1' is ambiguous"
+msgstr "ldd:é¸é …「$1ã€ç‚ºæ¨¡ç¨œå…©å¯çš„"
+
+#: elf/ldd.bash.in:89
+msgid "unrecognized option"
+msgstr "無法辨識的é¸é …"
+
+#: elf/ldd.bash.in:90 elf/ldd.bash.in:128
+msgid "Try \\`ldd --help' for more information."
+msgstr "嘗試「ldd --helpã€ä»¥ç²å¾—更多資訊。"
+
+#: elf/ldd.bash.in:127
+msgid "missing file arguments"
+msgstr "缺少檔案引數"
+
+#. TRANS No such file or directory. This is a ``file doesn't exist'' error
+#. TRANS for ordinary files that are referenced in contexts where they are
+#. TRANS expected to already exist.
+#: elf/ldd.bash.in:150 sysdeps/gnu/errlist.c:36
+msgid "No such file or directory"
+msgstr "沒有此一檔案或目錄"
+
+#: elf/ldd.bash.in:153 inet/rcmd.c:488
+msgid "not regular file"
+msgstr "並éžæ­£å¸¸çš„檔案"
+
+#: elf/ldd.bash.in:156
+msgid "warning: you do not have execution permission for"
+msgstr "警告:您沒有執行權é™ç”¨æ–¼"
+
+#: elf/ldd.bash.in:185
+msgid "\tnot a dynamic executable"
+msgstr "\tä¸æ˜¯å‹•æ…‹å¯åŸ·è¡Œæª”案"
+
+#: elf/ldd.bash.in:193
+msgid "exited with unknown exit code"
+msgstr "離開的與ä¸æ˜Žçš„離開代碼"
+
+#: elf/ldd.bash.in:198
+msgid "error: you do not have read permission for"
+msgstr "錯誤:您沒有讀å–許å¯æ¬Šç”¨æ–¼"
+
+#: elf/readelflib.c:35
+#, c-format
+msgid "file %s is truncated\n"
+msgstr "檔案 %s 已截短\n"
+
+#: elf/readelflib.c:67
+#, c-format
+msgid "%s is a 32 bit ELF file.\n"
+msgstr "%s 是一個 32 ä½å…ƒçš„ ELF 檔案。\n"
+
+#: elf/readelflib.c:69
+#, c-format
+msgid "%s is a 64 bit ELF file.\n"
+msgstr "%s 是一個 64 ä½å…ƒçš„ ELF 檔案。\n"
+
+#: elf/readelflib.c:71
+#, c-format
+msgid "Unknown ELFCLASS in file %s.\n"
+msgstr "檔案 %s 中未知的 ELFCLASS。\n"
+
+#: elf/readelflib.c:78
+#, c-format
+msgid "%s is not a shared object file (Type: %d).\n"
+msgstr "%s ä¸æ˜¯ä¸€å€‹å…±ç”¨ç›®çš„檔 (åž‹æ…‹: %d)。\n"
+
+#: elf/readelflib.c:109
+#, c-format
+msgid "more than one dynamic segment\n"
+msgstr "超éŽä¸€å€‹çš„å‹•æ…‹å€æ®µ\n"
+
+#: elf/readlib.c:97
+#, c-format
+msgid "Cannot fstat file %s.\n"
+msgstr "無法 fstat 檔案 %s。\n"
+
+#: elf/readlib.c:108
+#, c-format
+msgid "File %s is empty, not checked."
+msgstr "檔案 %s 為空,ä¸åšæª¢æŸ¥ã€‚"
-#: iconv/iconv_charmap.c:177 iconv/iconv_prog.c:313
+#: elf/readlib.c:114
+#, c-format
+msgid "File %s is too small, not checked."
+msgstr "檔案 %s 太å°ï¼Œä¸åšæª¢æŸ¥ã€‚"
+
+#: elf/readlib.c:124
+#, c-format
+msgid "Cannot mmap file %s.\n"
+msgstr "無法 mmap 檔案 %s。\n"
+
+#: elf/readlib.c:162
+#, c-format
+msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n"
+msgstr "%s ä¸æ˜¯ä¸€å€‹ ELF 檔 - 其開頭的魔術ä½å…ƒçµ„是錯的。\n"
+
+#: elf/sln.c:85
+#, c-format
+msgid ""
+"Usage: sln src dest|file\n"
+"\n"
+msgstr ""
+"用法:sln 原始碼 目的|檔案\n"
+"\n"
+
+#: elf/sln.c:110
+#, c-format
+msgid "%s: file open error: %m\n"
+msgstr "%s:檔案開啟錯誤:%m\n"
+
+#: elf/sln.c:147
+#, c-format
+msgid "No target in line %d\n"
+msgstr "沒有目標於第 %d 列\n"
+
+#: elf/sln.c:179
+#, c-format
+msgid "%s: destination must not be a directory\n"
+msgstr "%s:目的必須ä¸æ˜¯ç›®éŒ„\n"
+
+#: elf/sln.c:185
+#, c-format
+msgid "%s: failed to remove the old destination\n"
+msgstr "%s:無法移除舊的目的\n"
+
+#: elf/sln.c:193
+#, c-format
+msgid "%s: invalid destination: %s\n"
+msgstr "%s:無效的目的:%s\n"
+
+#: elf/sln.c:208 elf/sln.c:217
+#, c-format
+msgid "Invalid link from \"%s\" to \"%s\": %s\n"
+msgstr "從「%sã€åˆ°ã€Œ%sã€çš„éˆçµç„¡æ•ˆï¼š%s\n"
+
+#: elf/sotruss.ksh:33
+#, sh-format
+msgid ""
+"Usage: sotruss [OPTION...] [--] EXECUTABLE [EXECUTABLE-OPTION...]\n"
+" -F, --from FROMLIST trace calls from objects on FORMLIST\n"
+" -T, --to TOLIST trace calls to objects on TOLIST\n"
+"\n"
+" -e, --exit also show exits from the function calls\n"
+" -f, --follow trace child processes\n"
+" -o, --output FILENAME write output to FILENAME (or FILENAME.$PID in case\n"
+"\t\t\t -f is also used) instead of standard error\n"
+"\n"
+" --help print this help and exit\n"
+" --version print version information and exit"
+msgstr ""
+"用法:sotruss [é¸é …...] [--] å¯åŸ·è¡Œæª”案 [EXECUTABLE-OPTION...]\n"
+" -F, --from FROMLIST 追蹤從物件的呼å«æ–¼ FORMLIST\n"
+" -T, --to TOLIST 追蹤到物件的呼å«æ–¼ TOLIST\n"
+"\n"
+" -e, --exit 也顯示從函å¼å‘¼å«çš„離開\n"
+" -f, --follow 追蹤å­é€²ç¨‹\n"
+" -o, --output 檔å 寫入輸出到檔å (或 FILENAME.$PID 當\n"
+"\t\t\t -f 也åŒæ™‚使用) 以代替標準錯誤\n"
+"\n"
+" --help å°å‡ºé€™ä»½èªªæ˜Žç„¶å¾Œé›¢é–‹\n"
+" --version å°å‡ºç‰ˆæœ¬è³‡è¨Šç„¶å¾Œé›¢é–‹"
+
+#: elf/sotruss.ksh:46
+msgid "Mandatory arguments to long options are also mandatory for any corresponding\\nshort options.\\n"
+msgstr "é•·é¸é …çš„å¿…è¦å¼•æ•¸åŒæ¨£ä¹Ÿæ˜¯ç›¸å°æ‡‰çŸ­é¸é …çš„å¿…è¦å¼•æ•¸ã€‚"
+
+#: elf/sotruss.ksh:56
+msgid "%s: option requires an argument -- '%s'\\n"
+msgstr "%s:é¸é …需è¦ä¸€å€‹å¼•æ•¸ --『%sã€\\n"
+
+#: elf/sotruss.ksh:57 elf/sotruss.ksh:68 elf/sotruss.ksh:134
+msgid "Try \\`%s --help' or \\`%s --usage' for more information.\\n"
+msgstr "請嘗試 \\『%s --helpã€æˆ–\\『%s --usageã€ä»¥ç²å¾—更多資訊。\\n"
+
+#: elf/sotruss.ksh:62
+msgid "%s: option is ambiguous; possibilities:"
+msgstr "%s:é¸é …是模稜兩å¯çš„ï¼›å¯èƒ½æ˜¯ï¼š"
+
+#: elf/sotruss.ksh:80
+msgid "Written by %s.\\n"
+msgstr "作者 %s。\\n"
+
+#: elf/sotruss.ksh:87
+msgid ""
+"Usage: %s [-ef] [-F FROMLIST] [-o FILENAME] [-T TOLIST] [--exit]\n"
+"\t [--follow] [--from FROMLIST] [--output FILENAME] [--to TOLIST]\\n"
+msgstr ""
+"用法:%s [-ef] [-F FROMLIST] [-o FILENAME] [-T TOLIST] [--exit]\n"
+"\t [--follow] [--from FROMLIST] [--output FILENAME] [--to TOLIST]\\n"
+
+#: elf/sotruss.ksh:133
+msgid "%s: unrecognized option '%c%s'\\n"
+msgstr "%s:無法辨識的é¸é …『%c%sã€\\n"
+
+#: elf/sprof.c:77
+msgid "Output selection:"
+msgstr "輸出é¸æ“‡:"
+
+#: elf/sprof.c:79
+msgid "print list of count paths and their number of use"
+msgstr "列出計數的路徑以åŠå®ƒå€‘使用的次數"
+
+#: elf/sprof.c:81
+msgid "generate flat profile with counts and ticks"
+msgstr "從執行次數與經歷時間的資料中產生直接的測速çµæžœ"
+
+#: elf/sprof.c:82
+msgid "generate call graph"
+msgstr "產生函å¼å‘¼å«åœ–å½¢"
+
+#: elf/sprof.c:89
+msgid "Read and display shared object profiling data."
+msgstr "讀å–和顯示共用物件è¦ç¯„資料。"
+
+#: elf/sprof.c:94
+msgid "SHOBJ [PROFDATA]"
+msgstr "SHOBJ [PROFDATA]"
+
+#: elf/sprof.c:431
+#, c-format
+msgid "failed to load shared object `%s'"
+msgstr "開啟共用目的檔 `%s' 失敗"
+
+#: elf/sprof.c:440
+#, c-format
+msgid "cannot create internal descriptors"
+msgstr "無法建立內部敘述項"
+
+#: elf/sprof.c:559
+#, c-format
+msgid "Reopening shared object `%s' failed"
+msgstr "é‡æ–°é–‹å•Ÿå…±ç”¨ç›®çš„檔 %s 失敗"
+
+#: elf/sprof.c:566 elf/sprof.c:660
+#, c-format
+msgid "reading of section headers failed"
+msgstr "讀å–å°ç¯€æ¨™é ­æ™‚失敗"
+
+#: elf/sprof.c:574 elf/sprof.c:668
+#, c-format
+msgid "reading of section header string table failed"
+msgstr "讀å–å°ç¯€æ¨™é ­å­—串表格時失敗"
+
+#: elf/sprof.c:600
+#, c-format
+msgid "*** Cannot read debuginfo file name: %m\n"
+msgstr "*** 無法讀å–除錯資訊檔案å稱:%m\n"
+
+#: elf/sprof.c:620
+#, c-format
+msgid "cannot determine file name"
+msgstr "無法決定檔案å稱"
+
+#: elf/sprof.c:653
+#, c-format
+msgid "reading of ELF header failed"
+msgstr "è®€å– ELF 標頭時失敗"
+
+#: elf/sprof.c:689
+#, c-format
+msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
+msgstr "*** 檔案 `%s' 被è£å‰ªäº†: 無法åšè©³ç´°çš„分æž\n"
+
+#: elf/sprof.c:719
+#, c-format
+msgid "failed to load symbol data"
+msgstr "載入函å¼ç¬¦è™Ÿè³‡æ–™å¤±æ•—"
+
+#: elf/sprof.c:784
+#, c-format
+msgid "cannot load profiling data"
+msgstr "無法載入測試資料"
+
+#: elf/sprof.c:793
+#, c-format
+msgid "while stat'ing profiling data file"
+msgstr "在å°æ¸¬è©¦è³‡æ–™æª”案進行統計的時候"
+
+#: elf/sprof.c:801
+#, c-format
+msgid "profiling data file `%s' does not match shared object `%s'"
+msgstr "測試資料檔 `%s' 與共用目的檔 `%s' ä¸ç¬¦åˆ"
+
+#: elf/sprof.c:812
+#, c-format
+msgid "failed to mmap the profiling data file"
+msgstr "測試資料檔案 mmap 失敗"
+
+#: elf/sprof.c:820
+#, c-format
+msgid "error while closing the profiling data file"
+msgstr "正在關閉測試資料檔案時發生錯誤"
+
+#: elf/sprof.c:829 elf/sprof.c:927
+#, c-format
+msgid "cannot create internal descriptor"
+msgstr "無法建立內部敘述項"
+
+#: elf/sprof.c:903
+#, c-format
+msgid "`%s' is no correct profile data file for `%s'"
+msgstr "`%s' ä¸æ˜¯ `%s' 中正確的測速評估資料檔"
+
+#: elf/sprof.c:1084 elf/sprof.c:1142
+#, c-format
+msgid "cannot allocate symbol data"
+msgstr "無法é…置函å¼ç¬¦è™Ÿè³‡æ–™"
+
+#: iconv/iconv_charmap.c:142 iconv/iconv_prog.c:446
+#, c-format
+msgid "cannot open output file"
+msgstr "無法開啟輸出檔"
+
+#: iconv/iconv_charmap.c:188 iconv/iconv_prog.c:312
#, c-format
msgid "error while closing input `%s'"
msgstr "正在關閉輸入 `%s' 的時候發生錯誤"
-#: iconv/iconv_charmap.c:443
+#: iconv/iconv_charmap.c:462
#, c-format
msgid "illegal input sequence at position %Zd"
msgstr "ä½ç½® %Zd 有ä¸åˆæ³•çš„輸入åºåˆ—"
-#: iconv/iconv_charmap.c:462 iconv/iconv_prog.c:506
+#: iconv/iconv_charmap.c:481 iconv/iconv_prog.c:537
+#, c-format
msgid "incomplete character or shift sequence at end of buffer"
msgstr "ç·©è¡å€çµå°¾æœ‰ä¸å®Œå…¨çš„字元或 shift sequence"
-#: iconv/iconv_charmap.c:507 iconv/iconv_charmap.c:543 iconv/iconv_prog.c:549
-#: iconv/iconv_prog.c:585
+#: iconv/iconv_charmap.c:526 iconv/iconv_charmap.c:562 iconv/iconv_prog.c:580
+#: iconv/iconv_prog.c:616
+#, c-format
msgid "error while reading the input"
msgstr "正在讀入資料的時候發生錯誤"
-#: iconv/iconv_charmap.c:525 iconv/iconv_prog.c:567
+#: iconv/iconv_charmap.c:544 iconv/iconv_prog.c:598
+#, c-format
msgid "unable to allocate buffer for input"
msgstr "無法é…置輸入用的緩è¡å€"
-#: iconv/iconv_prog.c:61
+#: iconv/iconv_prog.c:60
msgid "Input/Output format specification:"
msgstr "輸入/輸出格å¼è¨­å®š:"
-#: iconv/iconv_prog.c:62
+#: iconv/iconv_prog.c:61
msgid "encoding of original text"
msgstr "原始文字的編碼"
-#: iconv/iconv_prog.c:63
+#: iconv/iconv_prog.c:62
msgid "encoding for output"
msgstr "用來輸出的編碼"
-#: iconv/iconv_prog.c:64
+#: iconv/iconv_prog.c:63
msgid "Information:"
msgstr "資料:"
-#: iconv/iconv_prog.c:65
+#: iconv/iconv_prog.c:64
msgid "list all known coded character sets"
msgstr "列出所有已知的編碼字元集"
-#: iconv/iconv_prog.c:66 locale/programs/localedef.c:128
+#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127
msgid "Output control:"
msgstr "輸出控制:"
-#: iconv/iconv_prog.c:67
+#: iconv/iconv_prog.c:66
msgid "omit invalid characters from output"
msgstr "çœç•¥ç„¡æ•ˆå­—元的輸出"
-#: iconv/iconv_prog.c:68
+#: iconv/iconv_prog.c:67
msgid "output file"
msgstr "輸出檔案"
-#: iconv/iconv_prog.c:69
+#: iconv/iconv_prog.c:68
msgid "suppress warnings"
msgstr "åœæ­¢è¼¸å‡ºè­¦å‘Šè¨Šæ¯"
-#: iconv/iconv_prog.c:70
+#: iconv/iconv_prog.c:69
msgid "print progress information"
msgstr "å°å‡ºç¨‹åºç›¸é—œè³‡è¨Š"
-#: iconv/iconv_prog.c:75
+#: iconv/iconv_prog.c:74
msgid "Convert encoding of given files from one encoding to another."
msgstr "從給定的檔案的字元編碼轉æ›åˆ°å¦ä¸€å€‹"
-#: iconv/iconv_prog.c:79
+#: iconv/iconv_prog.c:78
msgid "[FILE...]"
msgstr "[FILE...]"
-#: iconv/iconv_prog.c:201
-msgid "cannot open output file"
-msgstr "無法開啟輸出檔"
-
-#: iconv/iconv_prog.c:243
+#: iconv/iconv_prog.c:234
#, c-format
msgid "conversions from `%s' and to `%s' are not supported"
msgstr "ä¸æ”¯æ´å¾ž `%s' 以åŠåˆ° `%s' 的轉æ›"
-#: iconv/iconv_prog.c:248
+#: iconv/iconv_prog.c:239
#, c-format
msgid "conversion from `%s' is not supported"
msgstr "ä¸æ”¯æ´å¾ž `%s' 的轉æ›"
-#: iconv/iconv_prog.c:255
+#: iconv/iconv_prog.c:246
#, c-format
msgid "conversion to `%s' is not supported"
msgstr "ä¸æ”¯æ´åˆ° `%s' 的轉æ›"
-#: iconv/iconv_prog.c:259
+#: iconv/iconv_prog.c:250
#, c-format
msgid "conversion from `%s' to `%s' is not supported"
msgstr "ä¸æ”¯æ´å¾ž `%s' 到 `%s' 的轉æ›"
-#: iconv/iconv_prog.c:265
+#: iconv/iconv_prog.c:260
+#, c-format
msgid "failed to start conversion processing"
msgstr "開始轉æ›ç¨‹åºå¤±æ•—"
-#: iconv/iconv_prog.c:360
+#: iconv/iconv_prog.c:358
+#, c-format
msgid "error while closing output file"
msgstr "正在關閉輸出檔案的時候發生錯誤"
-#: iconv/iconv_prog.c:409 iconv/iconvconfig.c:357 locale/programs/locale.c:279
-#: locale/programs/localedef.c:372 catgets/gencat.c:233
-#: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
-msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
-msgstr "請使用 `glibcbug' 命令稿將å•é¡Œå›žå ±è‡³ <bugs@gnu.org>。\n"
-
-#: iconv/iconv_prog.c:423 iconv/iconvconfig.c:371 locale/programs/locale.c:292
-#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:913
-#: nss/getent.c:74 nscd/nscd.c:355 nscd/nscd_nischeck.c:90 elf/ldconfig.c:274
-#: elf/sprof.c:349
+#: iconv/iconv_prog.c:456
#, c-format
-msgid ""
-"Copyright (C) %s Free Software Foundation, Inc.\n"
-"This is free software; see the source for copying conditions. There is NO\n"
-"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
-msgstr ""
-"版權所有 (C) %s 自由軟體基金會。\n"
-"這是一個自由軟體;請見æºå§‹ç¢¼çš„授權æ¢æ¬¾ã€‚這沒有擔ä¿ï¼›ç”šè‡³ä¹Ÿæ²’有專為銷\n"
-"售或者é©åˆæŸäº›ç‰¹æ®Šç›®çš„。\n"
-
-#: iconv/iconv_prog.c:428 iconv/iconvconfig.c:376 locale/programs/locale.c:297
-#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:918
-#: nss/getent.c:79 nscd/nscd.c:360 nscd/nscd_nischeck.c:95 elf/ldconfig.c:279
-#: elf/sprof.c:355
-#, c-format
-msgid "Written by %s.\n"
-msgstr "作者 %s。\n"
-
-#: iconv/iconv_prog.c:458 iconv/iconv_prog.c:484
msgid "conversion stopped due to problem in writing the output"
msgstr "因寫入輸出時發生錯誤而導致轉æ›åœæ­¢"
-#: iconv/iconv_prog.c:502
+#: iconv/iconv_prog.c:533
#, c-format
msgid "illegal input sequence at position %ld"
msgstr "ä½ç½® %ld 有ä¸åˆæ³•çš„輸入åºåˆ—"
-#: iconv/iconv_prog.c:510
+#: iconv/iconv_prog.c:541
+#, c-format
msgid "internal error (illegal descriptor)"
msgstr "內部錯誤 (ä¸åˆæ³•çš„敘述項)"
-#: iconv/iconv_prog.c:513
+#: iconv/iconv_prog.c:544
#, c-format
msgid "unknown iconv() error %d"
msgstr "ä¸æ˜Žçš„ iconv() 錯誤 %d"
-#: iconv/iconv_prog.c:756
+#: iconv/iconv_prog.c:790
msgid ""
"The following list contain all the coded character sets known. This does\n"
"not necessarily mean that all combinations of these names can be used for\n"
@@ -357,538 +1406,665 @@ msgstr "建立快速載入 iconv 模組的設定檔案。"
msgid "[DIR...]"
msgstr "[目錄...]"
-#: iconv/iconvconfig.c:126
+#: iconv/iconvconfig.c:127
msgid "Prefix used for all file accesses"
msgstr "使用於所有檔案存å–時的å‰ç½®æ–‡å­—"
-#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
+#: iconv/iconvconfig.c:128
+msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)"
+msgstr "在 FILE 中置放輸出以代替已安è£çš„ä½ç½® (--prefix ä¸å¥—用到 FILE)"
+
+#: iconv/iconvconfig.c:132
+msgid "Do not search standard directories, only those on the command line"
+msgstr "ä¸æœå°‹æ¨™æº–目錄,åªæœ‰é‚£äº›åœ¨ä¹‹ä¸Šå‘½ä»¤åˆ—"
+
+#: iconv/iconvconfig.c:301
+#, c-format
+msgid "Directory arguments required when using --nostdlib"
+msgstr "目錄引數必è¦é …時正在使用 --nostdlib"
+
+#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291
+#, c-format
msgid "no output file produced because warnings were issued"
msgstr "因為發出éŽè­¦å‘Šè¨Šæ¯ï¼Œæ‰€ä»¥æ²’有製造任何輸出檔"
-#: iconv/iconvconfig.c:405
+#: iconv/iconvconfig.c:429
+#, c-format
msgid "while inserting in search tree"
msgstr "當æ’入於æœå°‹æ¨¹ä¹‹ä¸­"
-#: iconv/iconvconfig.c:1204
+#: iconv/iconvconfig.c:1238
+#, c-format
msgid "cannot generate output file"
msgstr "無法產生輸出檔"
+#: inet/rcmd.c:163
+msgid "rcmd: Cannot allocate memory\n"
+msgstr "rcmd: 無法é…置記憶體\n"
+
+#: inet/rcmd.c:178
+msgid "rcmd: socket: All ports in use\n"
+msgstr "rcmd: socket: 所有的埠都在使用中\n"
+
+#: inet/rcmd.c:206
+#, c-format
+msgid "connect to address %s: "
+msgstr "連接到ä½å€ %s: "
+
+#: inet/rcmd.c:219
+#, c-format
+msgid "Trying %s...\n"
+msgstr "嘗試 %s...\n"
+
+#: inet/rcmd.c:255
+#, c-format
+msgid "rcmd: write (setting up stderr): %m\n"
+msgstr "rcmd: write (正在設定標準錯誤輸出): %m\n"
+
+#: inet/rcmd.c:271
+#, c-format
+msgid "rcmd: poll (setting up stderr): %m\n"
+msgstr "rcmd: poll (正在設定標準錯誤輸出): %m\n"
+
+#: inet/rcmd.c:274
+msgid "poll: protocol failure in circuit setup\n"
+msgstr "poll: 通訊å”定在設定線路時失效\n"
+
+#: inet/rcmd.c:306
+msgid "socket: protocol failure in circuit setup\n"
+msgstr "socket: 通訊å”定在設定線路時失效\n"
+
+#: inet/rcmd.c:330
+#, c-format
+msgid "rcmd: %s: short read"
+msgstr "rcmd: %s: 讀入資料éŽçŸ­"
+
+#: inet/rcmd.c:486
+msgid "lstat failed"
+msgstr "lstat 失敗"
+
+#: inet/rcmd.c:493
+msgid "cannot open"
+msgstr "無法開啟"
+
+#: inet/rcmd.c:495
+msgid "fstat failed"
+msgstr "fstat 失敗"
+
+#: inet/rcmd.c:497
+msgid "bad owner"
+msgstr "錯誤的æ“有者"
+
+#: inet/rcmd.c:499
+msgid "writeable by other than owner"
+msgstr "使用者以外的人亦å¯å¯«å…¥"
+
+#: inet/rcmd.c:501
+msgid "hard linked somewhere"
+msgstr "被實體連çµåˆ°æŸè™•"
+
+#: inet/ruserpass.c:170 inet/ruserpass.c:193
+msgid "out of memory"
+msgstr "記憶體ä¸è¶³"
+
+#: inet/ruserpass.c:184
+msgid "Error: .netrc file is readable by others."
+msgstr "錯誤: .netrc 檔å¯ä»¥è¢«åˆ¥äººè®€å–"
+
+#: inet/ruserpass.c:185
+msgid "Remove password or make file unreadable by others."
+msgstr "移除密碼或讓他人無法讀å–檔案"
+
+#: inet/ruserpass.c:277
+#, c-format
+msgid "Unknown .netrc keyword %s"
+msgstr "未知的 .netrc é—œéµå­— %s"
+
+#: libidn/nfkc.c:464
+msgid "Character out of range for UTF-8"
+msgstr "字元超出 UTF-8 範åœ"
+
#: locale/programs/charmap-dir.c:59
#, c-format
msgid "cannot read character map directory `%s'"
msgstr "無法讀å–字集å°ç…§æª”目錄 `%s'"
-#: locale/programs/charmap.c:136
+#: locale/programs/charmap.c:138
#, c-format
msgid "character map file `%s' not found"
msgstr "找ä¸åˆ°å­—集å°ç…§æª” `%s'"
-#: locale/programs/charmap.c:194
+#: locale/programs/charmap.c:195
#, c-format
msgid "default character map file `%s' not found"
msgstr "找ä¸åˆ°é è¨­çš„字集å°ç…§æª” `%s'"
-#: locale/programs/charmap.c:257
+#: locale/programs/charmap.c:258
#, c-format
msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n"
msgstr "å­—å…ƒå°æ‡‰ `%s' ä¸æ˜¯ ASCII 相容碼,å€åŸŸåŒ–資料庫ä¸ç¬¦åˆ ISO C\n"
-#: locale/programs/charmap.c:336
+#: locale/programs/charmap.c:337
#, c-format
msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
msgstr "%s: <mb_cur_max> 必須大於 <mb_cur_min>\n"
-#: locale/programs/charmap.c:356 locale/programs/charmap.c:373
-#: locale/programs/repertoire.c:175
+#: locale/programs/charmap.c:357 locale/programs/charmap.c:374
+#: locale/programs/repertoire.c:174
#, c-format
msgid "syntax error in prolog: %s"
msgstr "prolog 中有語法錯誤: %s"
-#: locale/programs/charmap.c:357
+#: locale/programs/charmap.c:358
msgid "invalid definition"
msgstr "無效的定義"
-#: locale/programs/charmap.c:374 locale/programs/locfile.c:126
-#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176
+#: locale/programs/charmap.c:375 locale/programs/locfile.c:126
+#: locale/programs/locfile.c:153 locale/programs/repertoire.c:175
msgid "bad argument"
msgstr "錯誤的引數"
-#: locale/programs/charmap.c:402
+#: locale/programs/charmap.c:403
#, c-format
msgid "duplicate definition of <%s>"
msgstr "<%s> 的定義é‡è¤‡äº†"
-#: locale/programs/charmap.c:409
+#: locale/programs/charmap.c:410
#, c-format
msgid "value for <%s> must be 1 or greater"
msgstr "<%s> 的值必須為 1 或者更大"
-#: locale/programs/charmap.c:421
+#: locale/programs/charmap.c:422
#, c-format
msgid "value of <%s> must be greater or equal than the value of <%s>"
msgstr "<%s> 的值必須等於或大於 <%s> 的值"
-#: locale/programs/charmap.c:444 locale/programs/repertoire.c:184
+#: locale/programs/charmap.c:445 locale/programs/repertoire.c:183
#, c-format
msgid "argument to <%s> must be a single character"
msgstr "給 <%s> 的引數必須是一個單字元"
-#: locale/programs/charmap.c:470
+#: locale/programs/charmap.c:471
msgid "character sets with locking states are not supported"
msgstr "ä¸æ”¯æ´ä½¿ç”¨ locking 狀態的字元集"
-#: locale/programs/charmap.c:497 locale/programs/charmap.c:551
-#: locale/programs/charmap.c:583 locale/programs/charmap.c:677
-#: locale/programs/charmap.c:732 locale/programs/charmap.c:773
-#: locale/programs/charmap.c:814
+#: locale/programs/charmap.c:498 locale/programs/charmap.c:552
+#: locale/programs/charmap.c:584 locale/programs/charmap.c:678
+#: locale/programs/charmap.c:733 locale/programs/charmap.c:774
+#: locale/programs/charmap.c:815
#, c-format
msgid "syntax error in %s definition: %s"
msgstr "定義 %s 的語法錯誤: %s"
-#: locale/programs/charmap.c:498 locale/programs/charmap.c:678
-#: locale/programs/charmap.c:774 locale/programs/repertoire.c:231
+#: locale/programs/charmap.c:499 locale/programs/charmap.c:679
+#: locale/programs/charmap.c:775 locale/programs/repertoire.c:230
msgid "no symbolic name given"
msgstr "沒有給予符號å稱"
-#: locale/programs/charmap.c:552
+#: locale/programs/charmap.c:553
msgid "invalid encoding given"
msgstr "給予的編碼是無效的"
-#: locale/programs/charmap.c:561
+#: locale/programs/charmap.c:562
msgid "too few bytes in character encoding"
msgstr "字元定義中的ä½å…ƒçµ„太少了"
-#: locale/programs/charmap.c:563
+#: locale/programs/charmap.c:564
msgid "too many bytes in character encoding"
msgstr "字元定義中的ä½å…ƒçµ„太多了"
-#: locale/programs/charmap.c:585 locale/programs/charmap.c:733
-#: locale/programs/charmap.c:816 locale/programs/repertoire.c:297
+#: locale/programs/charmap.c:586 locale/programs/charmap.c:734
+#: locale/programs/charmap.c:817 locale/programs/repertoire.c:296
msgid "no symbolic name given for end of range"
msgstr "沒有給此å€çš„最後一個字元符號å稱"
-#: locale/programs/charmap.c:609 locale/programs/locfile.c:818
-#: locale/programs/repertoire.c:314
+#: locale/programs/charmap.c:610 locale/programs/ld-address.c:602
+#: locale/programs/ld-collate.c:2769 locale/programs/ld-collate.c:3927
+#: locale/programs/ld-ctype.c:2257 locale/programs/ld-ctype.c:3009
+#: locale/programs/ld-identification.c:452
+#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332
+#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307
+#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241
+#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221
+#: locale/programs/repertoire.c:313
#, c-format
-msgid "`%1$s' definition does not end with `END %1$s'"
-msgstr "`%1$s' 定義沒有以 `END %1$s' çµæŸ"
+msgid "%1$s: definition does not end with `END %1$s'"
+msgstr "%1$s: 定義並沒有以 `END %1$s' åšç‚ºçµæŸ"
-#: locale/programs/charmap.c:642
+#: locale/programs/charmap.c:643
msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
msgstr "åªæœ‰ WIDTH 定義æ‰èƒ½ç›´æŽ¥å¯«åœ¨ CHARMAP 定義之後"
-#: locale/programs/charmap.c:650 locale/programs/charmap.c:713
+#: locale/programs/charmap.c:651 locale/programs/charmap.c:714
#, c-format
msgid "value for %s must be an integer"
msgstr "%s 的值必須是整數æ‰è¡Œ"
-#: locale/programs/charmap.c:841
+#: locale/programs/charmap.c:842
#, c-format
msgid "%s: error in state machine"
msgstr "%s: 狀態機錯誤"
-#: locale/programs/charmap.c:849 locale/programs/ld-address.c:605
-#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3818
-#: locale/programs/ld-ctype.c:2225 locale/programs/ld-ctype.c:2994
-#: locale/programs/ld-identification.c:469
-#: locale/programs/ld-measurement.c:255 locale/programs/ld-messages.c:349
-#: locale/programs/ld-monetary.c:958 locale/programs/ld-name.c:324
-#: locale/programs/ld-numeric.c:392 locale/programs/ld-paper.c:258
-#: locale/programs/ld-telephone.c:330 locale/programs/ld-time.c:1219
-#: locale/programs/locfile.c:825 locale/programs/repertoire.c:325
+#: locale/programs/charmap.c:850 locale/programs/ld-address.c:618
+#: locale/programs/ld-collate.c:2766 locale/programs/ld-collate.c:4120
+#: locale/programs/ld-ctype.c:2254 locale/programs/ld-ctype.c:3026
+#: locale/programs/ld-identification.c:468
+#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348
+#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323
+#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257
+#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237
+#: locale/programs/locfile.c:826 locale/programs/repertoire.c:324
#, c-format
msgid "%s: premature end of file"
msgstr "%s: 未完æˆå·²é”檔案的末尾"
-#: locale/programs/charmap.c:868 locale/programs/charmap.c:879
+#: locale/programs/charmap.c:869 locale/programs/charmap.c:880
#, c-format
msgid "unknown character `%s'"
msgstr "ä¸æ˜Žçš„å­—å…ƒ `%s'"
-#: locale/programs/charmap.c:887
+#: locale/programs/charmap.c:888
#, c-format
msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
msgstr "在範åœèµ·å§‹èˆ‡çµæŸçš„ä½å…ƒçµ„åºåˆ—中,ä½å…ƒçµ„的數目並ä¸ä¸€è‡´: %d vs %d"
-#: locale/programs/charmap.c:991 locale/programs/ld-collate.c:2930
-#: locale/programs/repertoire.c:420
+#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3046
+#: locale/programs/repertoire.c:419
msgid "invalid names for character range"
msgstr "無效的字元範åœå稱"
-#: locale/programs/charmap.c:1003 locale/programs/repertoire.c:432
+#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:431
msgid "hexadecimal range format should use only capital characters"
msgstr "在表示å六進ä½çš„範åœæ™‚åªèƒ½ç”¨å¤§å¯«çš„英文字æ¯è¡¨ç¤º"
-#: locale/programs/charmap.c:1021
+#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:449
#, c-format
-msgid "<%s> and <%s> are illegal names for range"
-msgstr "<%s> ä»¥åŠ <%s> 是ä¸åˆæ³•çš„範åœå稱"
+msgid "<%s> and <%s> are invalid names for range"
+msgstr "<%s> ä»¥åŠ <%s> 是ä¸é©ç”¨çš„範åœå稱"
-#: locale/programs/charmap.c:1027
-msgid "upper limit in range is not higher then lower limit"
-msgstr "å€åŸŸå®šç¾©ä¸­çš„最大值沒有比最å°å€¼é‚„è¦å¤§"
+#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:456
+msgid "upper limit in range is smaller than lower limit"
+msgstr "範åœä¸­ä¸Šé™å°æ–¼ä¸‹é™"
-#: locale/programs/charmap.c:1085
+#: locale/programs/charmap.c:1087
msgid "resulting bytes for range not representable."
msgstr "用來定義範åœçš„ä½å…ƒçµ„無法被表述出來"
-#: locale/programs/ld-address.c:134 locale/programs/ld-collate.c:1534
-#: locale/programs/ld-ctype.c:421 locale/programs/ld-identification.c:134
-#: locale/programs/ld-measurement.c:95 locale/programs/ld-messages.c:98
-#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:95
-#: locale/programs/ld-numeric.c:99 locale/programs/ld-paper.c:92
-#: locale/programs/ld-telephone.c:95 locale/programs/ld-time.c:160
+#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1558
+#: locale/programs/ld-ctype.c:421 locale/programs/ld-identification.c:133
+#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97
+#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94
+#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91
+#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159
#, c-format
msgid "No definition for %s category found"
msgstr "找ä¸åˆ° %s 類別的定義"
-#: locale/programs/ld-address.c:145 locale/programs/ld-address.c:183
-#: locale/programs/ld-address.c:201 locale/programs/ld-address.c:228
-#: locale/programs/ld-address.c:290 locale/programs/ld-address.c:309
-#: locale/programs/ld-address.c:322 locale/programs/ld-identification.c:147
-#: locale/programs/ld-measurement.c:106 locale/programs/ld-monetary.c:206
+#: locale/programs/ld-address.c:146 locale/programs/ld-address.c:184
+#: locale/programs/ld-address.c:202 locale/programs/ld-address.c:231
+#: locale/programs/ld-address.c:303 locale/programs/ld-address.c:322
+#: locale/programs/ld-address.c:335 locale/programs/ld-identification.c:146
+#: locale/programs/ld-measurement.c:105 locale/programs/ld-monetary.c:206
#: locale/programs/ld-monetary.c:250 locale/programs/ld-monetary.c:266
-#: locale/programs/ld-monetary.c:278 locale/programs/ld-name.c:106
-#: locale/programs/ld-name.c:143 locale/programs/ld-numeric.c:113
-#: locale/programs/ld-numeric.c:127 locale/programs/ld-paper.c:103
-#: locale/programs/ld-paper.c:112 locale/programs/ld-telephone.c:106
-#: locale/programs/ld-telephone.c:163 locale/programs/ld-time.c:176
-#: locale/programs/ld-time.c:197
+#: locale/programs/ld-monetary.c:278 locale/programs/ld-name.c:105
+#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112
+#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102
+#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105
+#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175
+#: locale/programs/ld-time.c:196
#, c-format
msgid "%s: field `%s' not defined"
msgstr "%s: æ¬„ä½ `%s' 沒有定義"
-#: locale/programs/ld-address.c:157 locale/programs/ld-address.c:209
-#: locale/programs/ld-address.c:235 locale/programs/ld-address.c:265
-#: locale/programs/ld-name.c:118 locale/programs/ld-telephone.c:118
+#: locale/programs/ld-address.c:158 locale/programs/ld-address.c:210
+#: locale/programs/ld-address.c:240 locale/programs/ld-address.c:278
+#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117
#, c-format
msgid "%s: field `%s' must not be empty"
msgstr "%s: æ¬„ä½ `%s' ä¸å¯ä»¥ç©ºç™½"
-#: locale/programs/ld-address.c:169
+#: locale/programs/ld-address.c:170
#, c-format
msgid "%s: invalid escape `%%%c' sequence in field `%s'"
msgstr "%s: ä¸é©ç”¨çš„跳脫åºåˆ— `%%%c', åœ¨æ¬„ä½ `%s' 中"
-#: locale/programs/ld-address.c:220
+#: locale/programs/ld-address.c:221
#, c-format
msgid "%s: terminology language code `%s' not defined"
msgstr "%s: 術語語言編碼 `%s' 未定義"
-#: locale/programs/ld-address.c:247 locale/programs/ld-address.c:276
+#: locale/programs/ld-address.c:246
+#, c-format
+msgid "%s: field `%s' must not be defined"
+msgstr "%s: 欄ä½ã€Œ%sã€å¿…須未被定義"
+
+#: locale/programs/ld-address.c:260 locale/programs/ld-address.c:289
#, c-format
msgid "%s: language abbreviation `%s' not defined"
msgstr "%s: 語言縮寫 `%s' 沒有定義"
-#: locale/programs/ld-address.c:254 locale/programs/ld-address.c:282
-#: locale/programs/ld-address.c:316 locale/programs/ld-address.c:328
+#: locale/programs/ld-address.c:267 locale/programs/ld-address.c:295
+#: locale/programs/ld-address.c:329 locale/programs/ld-address.c:341
#, c-format
msgid "%s: `%s' value does not match `%s' value"
msgstr "%s: `%s' 值與 `%s' 值ä¸ç¬¦åˆ"
-#: locale/programs/ld-address.c:301
+#: locale/programs/ld-address.c:314
#, c-format
msgid "%s: numeric country code `%d' not valid"
msgstr "%s: 國家數字代碼 `%d' 錯誤"
-#: locale/programs/ld-address.c:497 locale/programs/ld-address.c:534
-#: locale/programs/ld-address.c:572 locale/programs/ld-ctype.c:2601
-#: locale/programs/ld-identification.c:365
-#: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:302
-#: locale/programs/ld-monetary.c:700 locale/programs/ld-monetary.c:735
-#: locale/programs/ld-monetary.c:776 locale/programs/ld-name.c:281
-#: locale/programs/ld-numeric.c:264 locale/programs/ld-paper.c:225
-#: locale/programs/ld-telephone.c:289 locale/programs/ld-time.c:1108
-#: locale/programs/ld-time.c:1150
+#: locale/programs/ld-address.c:510 locale/programs/ld-address.c:547
+#: locale/programs/ld-address.c:585 locale/programs/ld-ctype.c:2633
+#: locale/programs/ld-identification.c:364
+#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301
+#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736
+#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280
+#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224
+#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126
+#: locale/programs/ld-time.c:1168
#, c-format
msgid "%s: field `%s' declared more than once"
msgstr "%s: `%s' 欄ä½ä¸åªä¸€æ¬¡åœ°å®£å‘Š"
-#: locale/programs/ld-address.c:501 locale/programs/ld-address.c:539
-#: locale/programs/ld-identification.c:369 locale/programs/ld-messages.c:312
-#: locale/programs/ld-monetary.c:704 locale/programs/ld-monetary.c:739
-#: locale/programs/ld-name.c:285 locale/programs/ld-numeric.c:268
-#: locale/programs/ld-telephone.c:293 locale/programs/ld-time.c:1002
-#: locale/programs/ld-time.c:1071 locale/programs/ld-time.c:1113
+#: locale/programs/ld-address.c:514 locale/programs/ld-address.c:552
+#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311
+#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740
+#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267
+#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020
+#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131
#, c-format
msgid "%s: unknown character in field `%s'"
msgstr "%s: æœªçŸ¥çš„å­—å…ƒåœ¨æ¬„ä½ `%s' 中"
-#: locale/programs/ld-address.c:586 locale/programs/ld-collate.c:3800
-#: locale/programs/ld-ctype.c:2974 locale/programs/ld-identification.c:450
-#: locale/programs/ld-measurement.c:236 locale/programs/ld-messages.c:331
-#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306
-#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:240
-#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1201
+#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:3925
+#: locale/programs/ld-ctype.c:3006 locale/programs/ld-identification.c:449
+#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330
+#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305
+#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239
+#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219
#, c-format
msgid "%s: incomplete `END' line"
-msgstr "%s: ä¸å®Œæ•´çš„ `END' è¡Œ"
-
-#: locale/programs/ld-address.c:589 locale/programs/ld-collate.c:2653
-#: locale/programs/ld-collate.c:3802 locale/programs/ld-ctype.c:2228
-#: locale/programs/ld-ctype.c:2977 locale/programs/ld-identification.c:453
-#: locale/programs/ld-measurement.c:239 locale/programs/ld-messages.c:333
-#: locale/programs/ld-monetary.c:942 locale/programs/ld-name.c:308
-#: locale/programs/ld-numeric.c:376 locale/programs/ld-paper.c:242
-#: locale/programs/ld-telephone.c:314 locale/programs/ld-time.c:1203
-#, c-format
-msgid "%1$s: definition does not end with `END %1$s'"
-msgstr "%1$s: 定義並沒有以 `END %1$s' åšç‚ºçµæŸ"
-
-#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:523
-#: locale/programs/ld-collate.c:575 locale/programs/ld-collate.c:871
-#: locale/programs/ld-collate.c:884 locale/programs/ld-collate.c:2640
-#: locale/programs/ld-collate.c:3809 locale/programs/ld-ctype.c:1956
-#: locale/programs/ld-ctype.c:2215 locale/programs/ld-ctype.c:2799
-#: locale/programs/ld-ctype.c:2985 locale/programs/ld-identification.c:460
-#: locale/programs/ld-measurement.c:246 locale/programs/ld-messages.c:340
-#: locale/programs/ld-monetary.c:949 locale/programs/ld-name.c:315
-#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:249
-#: locale/programs/ld-telephone.c:321 locale/programs/ld-time.c:1210
+msgstr "%s: ä¸å®Œæ•´çš„ `END' 列"
+
+#: locale/programs/ld-address.c:609 locale/programs/ld-collate.c:544
+#: locale/programs/ld-collate.c:596 locale/programs/ld-collate.c:892
+#: locale/programs/ld-collate.c:905 locale/programs/ld-collate.c:2735
+#: locale/programs/ld-collate.c:2756 locale/programs/ld-collate.c:4110
+#: locale/programs/ld-ctype.c:1985 locale/programs/ld-ctype.c:2244
+#: locale/programs/ld-ctype.c:2831 locale/programs/ld-ctype.c:3017
+#: locale/programs/ld-identification.c:459
+#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339
+#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314
+#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248
+#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228
#, c-format
msgid "%s: syntax error"
msgstr "%s: 語法錯誤"
-#: locale/programs/ld-collate.c:398
+#: locale/programs/ld-collate.c:419
#, c-format
msgid "`%.*s' already defined in charmap"
msgstr "`%.*s' 在字集å°ç…§è¡¨ä¸­å·²ç¶“定義éŽäº†"
-#: locale/programs/ld-collate.c:407
+#: locale/programs/ld-collate.c:428
#, c-format
msgid "`%.*s' already defined in repertoire"
msgstr "`%.*s' 在編碼å°æ˜ æª”中已經被定義éŽäº†"
-#: locale/programs/ld-collate.c:414
+#: locale/programs/ld-collate.c:435
#, c-format
msgid "`%.*s' already defined as collating symbol"
msgstr "`%.*s' 已被定義為å°ç…§ç¬¦è™Ÿ"
-#: locale/programs/ld-collate.c:421
+#: locale/programs/ld-collate.c:442
#, c-format
msgid "`%.*s' already defined as collating element"
msgstr "`%.*s' 已被定義為å°ç…§å…ƒç´ "
-#: locale/programs/ld-collate.c:452 locale/programs/ld-collate.c:478
+#: locale/programs/ld-collate.c:473 locale/programs/ld-collate.c:499
#, c-format
msgid "%s: `forward' and `backward' are mutually excluding each other"
msgstr "%s: `forward' ä»¥åŠ `backward' 彼此互相排斥"
-#: locale/programs/ld-collate.c:462 locale/programs/ld-collate.c:488
-#: locale/programs/ld-collate.c:504
+#: locale/programs/ld-collate.c:483 locale/programs/ld-collate.c:509
+#: locale/programs/ld-collate.c:525
#, c-format
msgid "%s: `%s' mentioned more than once in definition of weight %d"
msgstr "%s: `%s' ä¸åªä¸€æ¬¡åœ°åœ¨æ¬Šé‡ %d 中被æ到"
-#: locale/programs/ld-collate.c:560
+#: locale/programs/ld-collate.c:581
#, c-format
msgid "%s: too many rules; first entry only had %d"
msgstr "%s: 太多è¦å‰‡ï¼›ç¬¬ä¸€å€‹é …ç›®åªåŒ…å« %d"
-#: locale/programs/ld-collate.c:596
+#: locale/programs/ld-collate.c:617
#, c-format
msgid "%s: not enough sorting rules"
msgstr "%s: 排åºè¦å‰‡ä¸è¶³"
-#: locale/programs/ld-collate.c:761
+#: locale/programs/ld-collate.c:782
#, c-format
msgid "%s: empty weight string not allowed"
msgstr "%s: 空白的權é‡å­—串是ä¸å…許的"
-#: locale/programs/ld-collate.c:856
+#: locale/programs/ld-collate.c:877
#, c-format
msgid "%s: weights must use the same ellipsis symbol as the name"
msgstr "%s: 權é‡å¿…須使用與å稱相åŒçš„çœç•¥ç¬¦è™Ÿ"
-#: locale/programs/ld-collate.c:912
+#: locale/programs/ld-collate.c:933
#, c-format
msgid "%s: too many values"
msgstr "%s: 太多變數值"
-#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206
+#: locale/programs/ld-collate.c:1053 locale/programs/ld-collate.c:1228
#, c-format
msgid "order for `%.*s' already defined at %s:%Zu"
msgstr "`%.*s' çš„é †åºå·²ç¶“在 %s:%Zu 裡é¢å®šç¾©äº†"
-#: locale/programs/ld-collate.c:1081
+#: locale/programs/ld-collate.c:1103
#, c-format
msgid "%s: the start and the end symbol of a range must stand for characters"
msgstr "%s: 啟始與çµæŸç¬¦è™Ÿç¯„åœå¿…須代表字元"
-#: locale/programs/ld-collate.c:1108
+#: locale/programs/ld-collate.c:1130
#, c-format
msgid "%s: byte sequences of first and last character must have the same length"
msgstr "%s: 第一個與最後一個字元的ä½å…ƒçµ„åºåˆ—必須有相åŒçš„長度"
-#: locale/programs/ld-collate.c:1150
+#: locale/programs/ld-collate.c:1172
#, c-format
-msgid "%s: byte sequence of first character of sequence is not lower than that of the last character"
-msgstr "%s: 第一個字元åºåˆ—çš„ä½å…ƒçµ„åºåˆ—並沒有低於最後一個字元的ä½å…ƒçµ„åºåˆ—"
+msgid "%s: byte sequence of first character of range is not lower than that of the last character"
+msgstr "%s: 範åœé¦–字元的ä½å…ƒçµ„åºåˆ—沒有低於末字元的ä½å…ƒçµ„åºåˆ—"
-#: locale/programs/ld-collate.c:1275
+#: locale/programs/ld-collate.c:1297
#, c-format
msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
msgstr "%s: 符號範åœçš„çœç•¥ä¸å¯ä»¥ç›´æŽ¥åœ¨ `order_start' 之後"
-#: locale/programs/ld-collate.c:1279
+#: locale/programs/ld-collate.c:1301
#, c-format
msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
msgstr "%s: 符號範åœçš„çœç•¥ä¸å¯ä»¥ç›´æŽ¥åœ¨ `order_end' 之å‰"
-#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1476
+#: locale/programs/ld-collate.c:1321 locale/programs/ld-ctype.c:1502
#, c-format
msgid "`%s' and `%.*s' are not valid names for symbolic range"
msgstr "`%s' å’Œ `%.*s' 皆éžç¬¦è™Ÿç¯„åœä¸­é©ç”¨çš„å稱"
-#: locale/programs/ld-collate.c:1348 locale/programs/ld-collate.c:3737
+#: locale/programs/ld-collate.c:1371 locale/programs/ld-collate.c:3861
#, c-format
msgid "%s: order for `%.*s' already defined at %s:%Zu"
msgstr "%s: `%.*s' çš„é †åºå·²åœ¨ %s:%Zu 中定義"
-#: locale/programs/ld-collate.c:1357
+#: locale/programs/ld-collate.c:1380
#, c-format
msgid "%s: `%s' must be a character"
msgstr "%s: `%s' 必須是一個字元"
-#: locale/programs/ld-collate.c:1550
+#: locale/programs/ld-collate.c:1575
#, c-format
msgid "%s: `position' must be used for a specific level in all sections or none"
msgstr "%s: `position' 必須在所有å€å¡Šè£¡ç‰¹å®šçš„等級中使用,å¦å‰‡ä¸èƒ½ä½¿ç”¨"
-#: locale/programs/ld-collate.c:1575
+#: locale/programs/ld-collate.c:1600
#, c-format
msgid "symbol `%s' not defined"
msgstr "並未定義 `%s' 符號"
-#: locale/programs/ld-collate.c:1651 locale/programs/ld-collate.c:1757
+#: locale/programs/ld-collate.c:1676 locale/programs/ld-collate.c:1782
#, c-format
msgid "symbol `%s' has the same encoding as"
msgstr "跟符號 `%s' 有相åŒçš„編碼: "
-#: locale/programs/ld-collate.c:1655 locale/programs/ld-collate.c:1761
+#: locale/programs/ld-collate.c:1680 locale/programs/ld-collate.c:1786
#, c-format
msgid "symbol `%s'"
msgstr "符號 `%s'"
-#: locale/programs/ld-collate.c:1803
+#: locale/programs/ld-collate.c:1828
+#, c-format
msgid "no definition of `UNDEFINED'"
msgstr "沒有找到 `UNDEFINED' 的定義"
-#: locale/programs/ld-collate.c:1832
+#: locale/programs/ld-collate.c:1857
+#, c-format
msgid "too many errors; giving up"
msgstr "發生太多錯誤;放棄中"
-#: locale/programs/ld-collate.c:2735
+#: locale/programs/ld-collate.c:2661 locale/programs/ld-collate.c:4049
+#, c-format
+msgid "%s: nested conditionals not supported"
+msgstr "%s: ä¸æ”¯æ´å·¢ç‹€æ¢ä»¶"
+
+#: locale/programs/ld-collate.c:2679
+#, c-format
+msgid "%s: more then one 'else'"
+msgstr "%s: 使用多於一個「elseã€"
+
+#: locale/programs/ld-collate.c:2854
#, c-format
msgid "%s: duplicate definition of `%s'"
msgstr "%s: é‡è¤‡çš„定義 `%s'"
-#: locale/programs/ld-collate.c:2771
+#: locale/programs/ld-collate.c:2890
#, c-format
msgid "%s: duplicate declaration of section `%s'"
msgstr "%s: é‡è¤‡çš„ `%s' å€å¡Šå®£å‘Š"
-#: locale/programs/ld-collate.c:2910
+#: locale/programs/ld-collate.c:3026
#, c-format
msgid "%s: unknown character in collating symbol name"
msgstr "%s: 未知的字元在å°ç…§ç¬¦è™Ÿå稱中"
-#: locale/programs/ld-collate.c:3042
+#: locale/programs/ld-collate.c:3155
#, c-format
msgid "%s: unknown character in equivalent definition name"
msgstr "%s: 未知的字元在åŒç¾©å®šç¾©å稱中"
-#: locale/programs/ld-collate.c:3055
+#: locale/programs/ld-collate.c:3166
#, c-format
msgid "%s: unknown character in equivalent definition value"
msgstr "%s: 未知的字元在åŒç¾©å®šç¾©å€¼ä¸­"
-#: locale/programs/ld-collate.c:3065
+#: locale/programs/ld-collate.c:3176
#, c-format
msgid "%s: unknown symbol `%s' in equivalent definition"
msgstr "%s: 未知的符號 `%s' 在åŒç¾©å®šç¾©ä¸­"
-#: locale/programs/ld-collate.c:3074
+#: locale/programs/ld-collate.c:3185
msgid "error while adding equivalent collating symbol"
msgstr "正在加入åŒç¾©å°ç…§ç¬¦è™Ÿæ™‚發生錯誤"
-#: locale/programs/ld-collate.c:3104
+#: locale/programs/ld-collate.c:3223
#, c-format
msgid "duplicate definition of script `%s'"
msgstr "敘述 `%s' 的定義é‡è¤‡äº†"
-#: locale/programs/ld-collate.c:3152
+#: locale/programs/ld-collate.c:3271
#, c-format
-msgid "%s: unknown section name `%s'"
-msgstr "%s: 未知的å€å¡Šå稱 `%s'"
+msgid "%s: unknown section name `%.*s'"
+msgstr "%s: ä¸æ˜Žçš„節段å稱「%.*sã€"
-#: locale/programs/ld-collate.c:3180
+#: locale/programs/ld-collate.c:3300
#, c-format
msgid "%s: multiple order definitions for section `%s'"
msgstr "%s: `%s' å€å¡Šä¸­æœ‰å¤šå€‹é †åºå®šç¾©"
-#: locale/programs/ld-collate.c:3205
+#: locale/programs/ld-collate.c:3328
#, c-format
msgid "%s: invalid number of sorting rules"
msgstr "%s: ä¸é©ç”¨çš„排åºè¦å‰‡æ•¸ç›®"
-#: locale/programs/ld-collate.c:3232
+#: locale/programs/ld-collate.c:3355
#, c-format
msgid "%s: multiple order definitions for unnamed section"
msgstr "%s: 未命åçš„å€å¡Šä¸­æœ‰å¤šå€‹é †åºå®šç¾©"
-#: locale/programs/ld-collate.c:3286 locale/programs/ld-collate.c:3414
-#: locale/programs/ld-collate.c:3778
+#: locale/programs/ld-collate.c:3410 locale/programs/ld-collate.c:3540
+#: locale/programs/ld-collate.c:3903
#, c-format
msgid "%s: missing `order_end' keyword"
msgstr "%s: 缺少 `order_end' é—œéµå­—"
-#: locale/programs/ld-collate.c:3347
+#: locale/programs/ld-collate.c:3473
#, c-format
msgid "%s: order for collating symbol %.*s not yet defined"
msgstr "%s: å°ç…§ç¬¦è™Ÿ %.*s çš„é †åºå°šæœªå®šç¾©"
-#: locale/programs/ld-collate.c:3365
+#: locale/programs/ld-collate.c:3491
#, c-format
msgid "%s: order for collating element %.*s not yet defined"
msgstr "%s: å°ç…§å…ƒç´  %.*s çš„é †åºå°šæœªå®šç¾©"
-#: locale/programs/ld-collate.c:3376
+#: locale/programs/ld-collate.c:3502
#, c-format
msgid "%s: cannot reorder after %.*s: symbol not known"
msgstr "%s: 無法é‡æ–°æŽ’列在 %.*s 之後: 未知的符號"
-#: locale/programs/ld-collate.c:3428 locale/programs/ld-collate.c:3790
+#: locale/programs/ld-collate.c:3554 locale/programs/ld-collate.c:3915
#, c-format
msgid "%s: missing `reorder-end' keyword"
msgstr "%s: 缺少 `reorder-end' é—œéµå­—"
-#: locale/programs/ld-collate.c:3462 locale/programs/ld-collate.c:3662
+#: locale/programs/ld-collate.c:3588 locale/programs/ld-collate.c:3786
#, c-format
msgid "%s: section `%.*s' not known"
msgstr "%s: 未知的å€å¡Š `%.*s'"
-#: locale/programs/ld-collate.c:3527
+#: locale/programs/ld-collate.c:3653
#, c-format
msgid "%s: bad symbol <%.*s>"
msgstr "%s: ä¸ç•¶çš„符號 <%.*s>"
-#: locale/programs/ld-collate.c:3725
+#: locale/programs/ld-collate.c:3849
#, c-format
msgid "%s: cannot have `%s' as end of ellipsis range"
msgstr "%s: 無法用 `%s' åšç‚ºçœç•¥å€æ®µçš„çµå°¾"
-#: locale/programs/ld-collate.c:3774
+#: locale/programs/ld-collate.c:3899
#, c-format
msgid "%s: empty category description not allowed"
msgstr "%s: 空白的類別æ述是ä¸å…許的"
-#: locale/programs/ld-collate.c:3793
+#: locale/programs/ld-collate.c:3918
#, c-format
msgid "%s: missing `reorder-sections-end' keyword"
msgstr "%s: 缺少 `reorder-sections-end' é—œéµå­—"
+#: locale/programs/ld-collate.c:4082
+#, c-format
+msgid "%s: '%s' without matching 'ifdef' or 'ifndef'"
+msgstr "%s:「%sã€è€Œä¸éœ€å»åˆä¸­ã€Œifdefã€æˆ–「ifndefã€"
+
+#: locale/programs/ld-collate.c:4100
+#, c-format
+msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'"
+msgstr "%s:「endifã€è€Œä¸éœ€å»åˆä¸­ã€Œifdefã€æˆ–「ifndefã€"
+
#: locale/programs/ld-ctype.c:440
+#, c-format
msgid "No character set name specified in charmap"
msgstr "在字元å°æ‡‰ (charmap) 中沒有設定字集å稱"
@@ -905,7 +2081,7 @@ msgstr "character L'\\u%0*x' (放在類別 `%s' 之中) ä¸èƒ½åœ¨é¡žåˆ¥ `%s' 裡
#: locale/programs/ld-ctype.c:498 locale/programs/ld-ctype.c:556
#, c-format
msgid "internal error in %s, line %u"
-msgstr "%s 的第 %u 行發生內部錯誤"
+msgstr "%s 的第 %u 列發生內部錯誤"
#: locale/programs/ld-ctype.c:527
#, c-format
@@ -928,207 +2104,205 @@ msgid "<SP> character must not be in class `%s'"
msgstr "<SP> å­—å…ƒä¸å¯ä»¥åœ¨é¡žåˆ¥ `%s' 中"
#: locale/programs/ld-ctype.c:600
+#, c-format
msgid "character <SP> not defined in character map"
msgstr "å­—å…ƒ <SP> 在字集å°ç…§æª”中沒有定義"
-#: locale/programs/ld-ctype.c:714
+#: locale/programs/ld-ctype.c:736
+#, c-format
msgid "`digit' category has not entries in groups of ten"
msgstr "`digit' 類別在群組 \"å\" 中沒有項目"
-#: locale/programs/ld-ctype.c:763
+#: locale/programs/ld-ctype.c:785
+#, c-format
msgid "no input digits defined and none of the standard names in the charmap"
msgstr "沒有定義輸入數字,在字集å°ç…§æª”中也找ä¸åˆ°ç›¸ç¬¦çš„標準å稱"
-#: locale/programs/ld-ctype.c:828
+#: locale/programs/ld-ctype.c:850
+#, c-format
msgid "not all characters used in `outdigit' are available in the charmap"
msgstr "在字集å°ç…§è¡¨ä¸­ç„¡æ³•æ‰¾åˆ°æŸäº›åœ¨ `outdigit' 中用到的字元"
-#: locale/programs/ld-ctype.c:845
+#: locale/programs/ld-ctype.c:867
+#, c-format
msgid "not all characters used in `outdigit' are available in the repertoire"
msgstr "在編碼å°æ˜ æª”中無法找到æŸäº›åœ¨ `outdigit' 中用到的字元"
-#: locale/programs/ld-ctype.c:1244
+#: locale/programs/ld-ctype.c:1270
#, c-format
msgid "character class `%s' already defined"
msgstr "字元類別 `%s' 已經定義éŽäº†"
-#: locale/programs/ld-ctype.c:1250
+#: locale/programs/ld-ctype.c:1276
#, c-format
msgid "implementation limit: no more than %Zd character classes allowed"
msgstr "程å¼å¯¦ä½œçš„é™åˆ¶: ä¸èƒ½ä½¿ç”¨è¶…éŽ %Zd 個字集類別"
-#: locale/programs/ld-ctype.c:1276
+#: locale/programs/ld-ctype.c:1302
#, c-format
msgid "character map `%s' already defined"
msgstr "字集å°ç…§æª” `%s' 已經定義éŽäº†"
-#: locale/programs/ld-ctype.c:1282
+#: locale/programs/ld-ctype.c:1308
#, c-format
msgid "implementation limit: no more than %d character maps allowed"
msgstr "程å¼å¯¦ä½œçš„é™åˆ¶: ä¸èƒ½ä½¿ç”¨è¶…éŽ %d 個字集å°ç…§æª”"
-#: locale/programs/ld-ctype.c:1547 locale/programs/ld-ctype.c:1672
-#: locale/programs/ld-ctype.c:1778 locale/programs/ld-ctype.c:2464
-#: locale/programs/ld-ctype.c:3460
+#: locale/programs/ld-ctype.c:1573 locale/programs/ld-ctype.c:1698
+#: locale/programs/ld-ctype.c:1804 locale/programs/ld-ctype.c:2496
+#: locale/programs/ld-ctype.c:3492
#, c-format
msgid "%s: field `%s' does not contain exactly ten entries"
msgstr "%s: `%s' 欄ä½æ²’有精確包å«å個項目"
-#: locale/programs/ld-ctype.c:1575 locale/programs/ld-ctype.c:2146
+#: locale/programs/ld-ctype.c:1601 locale/programs/ld-ctype.c:2175
#, c-format
msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
msgstr "å€åŸŸå®šç¾©çš„çµå°¾å€¼ <U%0*X> 比起始值 <U%0*X> é‚„è¦å°"
-#: locale/programs/ld-ctype.c:1702
+#: locale/programs/ld-ctype.c:1728
msgid "start and end character sequence of range must have the same length"
msgstr "從起始到çµæŸä¹‹é–“çš„å­—å…ƒåºåˆ—長度跟編碼範åœå¿…須相åŒ"
-#: locale/programs/ld-ctype.c:1709
+#: locale/programs/ld-ctype.c:1735
msgid "to-value character sequence is smaller than from-value sequence"
msgstr "å­—å…ƒåºåˆ—定義的çµå°¾å€¼æ¯”起始值還è¦å°"
-#: locale/programs/ld-ctype.c:2066 locale/programs/ld-ctype.c:2117
+#: locale/programs/ld-ctype.c:2095 locale/programs/ld-ctype.c:2146
msgid "premature end of `translit_ignore' definition"
msgstr "`translit_ignore' 定義沒有按時çµæŸ"
-#: locale/programs/ld-ctype.c:2072 locale/programs/ld-ctype.c:2123
-#: locale/programs/ld-ctype.c:2165
+#: locale/programs/ld-ctype.c:2101 locale/programs/ld-ctype.c:2152
+#: locale/programs/ld-ctype.c:2194
msgid "syntax error"
msgstr "語法錯誤"
-#: locale/programs/ld-ctype.c:2296
+#: locale/programs/ld-ctype.c:2328
#, c-format
msgid "%s: syntax error in definition of new character class"
msgstr "%s: 在定義新字元類別時語法錯誤"
-#: locale/programs/ld-ctype.c:2311
+#: locale/programs/ld-ctype.c:2343
#, c-format
msgid "%s: syntax error in definition of new character map"
msgstr "%s: 在定義新字元å°æ‡‰æ™‚語法錯誤"
-#: locale/programs/ld-ctype.c:2486
+#: locale/programs/ld-ctype.c:2518
msgid "ellipsis range must be marked by two operands of same type"
msgstr "çœç•¥å€åŸŸå¿…須用兩個型別相åŒçš„é‹ç®—元標示出來"
-#: locale/programs/ld-ctype.c:2495
+#: locale/programs/ld-ctype.c:2527
msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
msgstr "用符號å稱來指定字元編碼範åœæ™‚ä¸å¯ä»¥ç”¨çµ•å°ä½ç½®çš„çœç•¥ç¬¦è™Ÿ `...'"
-#: locale/programs/ld-ctype.c:2510
+#: locale/programs/ld-ctype.c:2542
msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
msgstr "用來指定 UCS 值的範åœæ™‚得用å六進ä½è¡¨ç¤ºçš„çœç•¥ç¬¦è™Ÿ `..'"
-#: locale/programs/ld-ctype.c:2524
+#: locale/programs/ld-ctype.c:2556
msgid "with character code range values one must use the absolute ellipsis `...'"
msgstr "用來指定字元編碼值的範åœæ™‚得用絕å°ä½ç½®çš„çœç•¥ç¬¦è™Ÿ `...'"
-#: locale/programs/ld-ctype.c:2675
+#: locale/programs/ld-ctype.c:2707
#, c-format
msgid "duplicated definition for mapping `%s'"
msgstr "å°æ˜  `%s' 的定義é‡è¤‡äº†"
-#: locale/programs/ld-ctype.c:2761 locale/programs/ld-ctype.c:2905
+#: locale/programs/ld-ctype.c:2793 locale/programs/ld-ctype.c:2937
#, c-format
msgid "%s: `translit_start' section does not end with `translit_end'"
msgstr "%s: `translit_start' å°ç¯€ä¸¦æ²’有以 `translit_end' åšç‚ºçµæŸ"
-#: locale/programs/ld-ctype.c:2856
+#: locale/programs/ld-ctype.c:2888
#, c-format
msgid "%s: duplicate `default_missing' definition"
msgstr "%s: é‡è¤‡çš„ `default_missing' 定義"
-#: locale/programs/ld-ctype.c:2861
+#: locale/programs/ld-ctype.c:2893
msgid "previous definition was here"
msgstr "å…ˆå‰çš„設定在此"
-#: locale/programs/ld-ctype.c:2883
+#: locale/programs/ld-ctype.c:2915
#, c-format
msgid "%s: no representable `default_missing' definition found"
msgstr "%s: 找ä¸åˆ°å¯è¡¨ç¤ºç‚º `default_missing' 的定義"
-#: locale/programs/ld-ctype.c:3036
-#, c-format
-msgid "%s: character `%s' not defined in charmap while needed as default value"
-msgstr "%s: å­—å…ƒ `%s' 在字集å°ç…§è¡¨ä¸­æ²’有定義,但它是必需的é è¨­å€¼"
-
-#: locale/programs/ld-ctype.c:3041 locale/programs/ld-ctype.c:3125
-#: locale/programs/ld-ctype.c:3145 locale/programs/ld-ctype.c:3166
-#: locale/programs/ld-ctype.c:3187 locale/programs/ld-ctype.c:3208
-#: locale/programs/ld-ctype.c:3229 locale/programs/ld-ctype.c:3269
-#: locale/programs/ld-ctype.c:3290 locale/programs/ld-ctype.c:3357
-#, c-format
-msgid "%s: character `%s' in charmap not representable with one byte"
-msgstr "%s: 字集å°ç…§è¡¨ä¸­çš„å­—å…ƒ `%s' 無法表示為單一ä½å…ƒçµ„"
-
-#: locale/programs/ld-ctype.c:3120 locale/programs/ld-ctype.c:3140
-#: locale/programs/ld-ctype.c:3182 locale/programs/ld-ctype.c:3203
-#: locale/programs/ld-ctype.c:3224 locale/programs/ld-ctype.c:3264
-#: locale/programs/ld-ctype.c:3285 locale/programs/ld-ctype.c:3352
-#: locale/programs/ld-ctype.c:3394 locale/programs/ld-ctype.c:3419
+#: locale/programs/ld-ctype.c:3068 locale/programs/ld-ctype.c:3152
+#: locale/programs/ld-ctype.c:3172 locale/programs/ld-ctype.c:3193
+#: locale/programs/ld-ctype.c:3214 locale/programs/ld-ctype.c:3235
+#: locale/programs/ld-ctype.c:3256 locale/programs/ld-ctype.c:3296
+#: locale/programs/ld-ctype.c:3317 locale/programs/ld-ctype.c:3384
+#: locale/programs/ld-ctype.c:3426 locale/programs/ld-ctype.c:3451
#, c-format
msgid "%s: character `%s' not defined while needed as default value"
msgstr "%s: å­—å…ƒ `%s' 沒有定義,但它是必需的é è¨­å€¼"
-#: locale/programs/ld-ctype.c:3161
+#: locale/programs/ld-ctype.c:3073 locale/programs/ld-ctype.c:3157
+#: locale/programs/ld-ctype.c:3177 locale/programs/ld-ctype.c:3198
+#: locale/programs/ld-ctype.c:3219 locale/programs/ld-ctype.c:3240
+#: locale/programs/ld-ctype.c:3261 locale/programs/ld-ctype.c:3301
+#: locale/programs/ld-ctype.c:3322 locale/programs/ld-ctype.c:3389
#, c-format
-msgid "character `%s' not defined while needed as default value"
-msgstr "必須用來作為é è¨­å€¼çš„å­—å…ƒ `%s' 沒有被定義到"
+msgid "%s: character `%s' in charmap not representable with one byte"
+msgstr "%s: 字集å°ç…§è¡¨ä¸­çš„å­—å…ƒ `%s' 無法表示為單一ä½å…ƒçµ„"
-#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426
+#: locale/programs/ld-ctype.c:3433 locale/programs/ld-ctype.c:3458
#, c-format
msgid "%s: character `%s' needed as default value not representable with one byte"
msgstr "%s: åšç‚ºé è¨­å€¼æ‰€éœ€çš„å­—å…ƒ `%s' 無法表示為單一ä½å…ƒçµ„"
-#: locale/programs/ld-ctype.c:3481
+#: locale/programs/ld-ctype.c:3514
+#, c-format
msgid "no output digits defined and none of the standard names in the charmap"
msgstr "沒有定義輸出數字,在字集å°ç…§æª”中也找ä¸åˆ°ç›¸ç¬¦çš„標準å稱"
-#: locale/programs/ld-ctype.c:3772
+#: locale/programs/ld-ctype.c:3805
#, c-format
msgid "%s: transliteration data from locale `%s' not available"
msgstr "%s: 語å€è³‡æ–™`%s' 的音譯資料ä¸å­˜åœ¨"
-#: locale/programs/ld-ctype.c:3868
+#: locale/programs/ld-ctype.c:3906
#, c-format
msgid "%s: table for class \"%s\": %lu bytes\n"
msgstr "%s: 類別 \"%s\" 表格: %lu ä½å…ƒçµ„\n"
-#: locale/programs/ld-ctype.c:3937
+#: locale/programs/ld-ctype.c:3975
#, c-format
msgid "%s: table for map \"%s\": %lu bytes\n"
msgstr "%s: å°æ˜ è¡¨ \"%s\" 表格: %lu ä½å…ƒçµ„\n"
-#: locale/programs/ld-ctype.c:4070
+#: locale/programs/ld-ctype.c:4108
#, c-format
msgid "%s: table for width: %lu bytes\n"
msgstr "%s: 寬度表格: %lu ä½å…ƒçµ„\n"
-#: locale/programs/ld-identification.c:171
+#: locale/programs/ld-identification.c:170
#, c-format
msgid "%s: no identification for category `%s'"
msgstr "%s: 類別 `%s' 沒有èªè­‰"
-#: locale/programs/ld-identification.c:436
+#: locale/programs/ld-identification.c:435
#, c-format
msgid "%s: duplicate category version definition"
msgstr "%s: é‡è¤‡çš„類別版本定義"
-#: locale/programs/ld-measurement.c:114
+#: locale/programs/ld-measurement.c:113
#, c-format
msgid "%s: invalid value for field `%s'"
msgstr "%s: åœ¨æ¬„ä½ `%s' 中的值ä¸é©ç”¨"
-#: locale/programs/ld-messages.c:115 locale/programs/ld-messages.c:149
+#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148
#, c-format
msgid "%s: field `%s' undefined"
msgstr "%s: æ¬„ä½ `%s' 沒有定義"
-#: locale/programs/ld-messages.c:122 locale/programs/ld-messages.c:156
+#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155
+#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118
#, c-format
msgid "%s: value for field `%s' must not be an empty string"
msgstr "%s: æ¬„ä½ `%s' 值ä¸å¯ä»¥æ˜¯ç©ºå­—串"
-#: locale/programs/ld-messages.c:138 locale/programs/ld-messages.c:172
+#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171
#, c-format
msgid "%s: no correct regular expression for field `%s': %s"
msgstr "%s: æ²’æœ‰çµ¦æ¬„ä½ `%s' 正確的常è¦è¡¨ç¤ºå¼ï¼š %s"
@@ -1143,205 +2317,192 @@ msgstr "%s: æ¬„ä½ `int_curr_symbol' 值的長度錯誤"
msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217"
msgstr "%s: æ¬„ä½ `int_curr_symbol' 值並ä¸æ˜¯ ISO 4217 中åˆæ³•çš„å稱"
-#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:119
-#, c-format
-msgid "%s: value for field `%s' must not be the empty string"
-msgstr "%s: æ¬„ä½ `%s' 值ä¸å¯ä»¥æ˜¯ç©ºå­—串"
-
-#: locale/programs/ld-monetary.c:284 locale/programs/ld-monetary.c:314
+#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315
#, c-format
msgid "%s: value for field `%s' must be in range %d...%d"
msgstr "%s: æ¬„ä½ `%s' çš„å€¼å¿…é ˆåœ¨ç¯„åœ %d...%d"
-#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:275
+#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274
#, c-format
msgid "%s: value for field `%s' must be a single character"
msgstr "%s: æ¬„ä½ `%s' 的值必須是個單一字元"
-#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:319
+#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318
#, c-format
msgid "%s: `-1' must be last entry in `%s' field"
msgstr "%s: `-1' 在 `%s' 欄ä½ä¸­å¿…須是最後一個項目"
-#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:340
+#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335
#, c-format
msgid "%s: values for field `%s' must be smaller than 127"
msgstr "%s: æ¬„ä½ `%s' 的值必須å°æ–¼ 127"
-#: locale/programs/ld-monetary.c:908
+#: locale/programs/ld-monetary.c:909
msgid "conversion rate value cannot be zero"
msgstr "轉æ›çŽ‡çš„值ä¸å¯ä»¥æ˜¯é›¶"
-#: locale/programs/ld-name.c:130 locale/programs/ld-telephone.c:127
-#: locale/programs/ld-telephone.c:150
+#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126
+#: locale/programs/ld-telephone.c:149
#, c-format
msgid "%s: invalid escape sequence in field `%s'"
msgstr "%s: åœ¨æ¬„ä½ `%s' 中的跳脫åºåˆ—ä¸é©ç”¨"
-#: locale/programs/ld-time.c:248
+#: locale/programs/ld-time.c:247
#, c-format
msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'"
msgstr "%s: 在 `era' 欄ä½çš„字串 %Zd 中,方å‘旗標既ä¸æ˜¯ '+' 也ä¸æ˜¯ '-'"
-#: locale/programs/ld-time.c:259
+#: locale/programs/ld-time.c:258
#, c-format
msgid "%s: direction flag in string %Zd in `era' field is not a single character"
msgstr "%s: 在 `era' 欄ä½çš„字串 %Zd 中,方å‘旗標ä¸æ˜¯ä¸€å€‹å–®ä¸€å­—å…ƒ"
-#: locale/programs/ld-time.c:272
+#: locale/programs/ld-time.c:271
#, c-format
msgid "%s: invalid number for offset in string %Zd in `era' field"
msgstr "%s: 在 `era' 欄ä½ã€å­—串 %Zd 中的ä½ç§»æ•¸å­—ä¸é©ç”¨"
-#: locale/programs/ld-time.c:280
+#: locale/programs/ld-time.c:279
#, c-format
msgid "%s: garbage at end of offset value in string %Zd in `era' field"
msgstr "%s: 無用的資料,在 `era' 欄ä½ã€å­—串 %Zd 中末尾的ä½ç§»å€¼"
-#: locale/programs/ld-time.c:331
+#: locale/programs/ld-time.c:330
#, c-format
msgid "%s: invalid starting date in string %Zd in `era' field"
msgstr "%s: 在 `era' 欄ä½ã€å­—串 %Zd 中的起始日期ä¸é©ç”¨"
-#: locale/programs/ld-time.c:340
+#: locale/programs/ld-time.c:339
#, c-format
msgid "%s: garbage at end of starting date in string %Zd in `era' field "
msgstr "%s: 無用的資料,在 `era' 欄ä½ã€å­—串 %Zd 中末尾的起始日期"
-#: locale/programs/ld-time.c:359
+#: locale/programs/ld-time.c:358
#, c-format
msgid "%s: starting date is invalid in string %Zd in `era' field"
msgstr "%s: 在 `era' å€åŸŸçš„字串 %Zd 中的啟始日期是ä¸é©ç”¨çš„"
-#: locale/programs/ld-time.c:408
+#: locale/programs/ld-time.c:407 locale/programs/ld-time.c:435
#, c-format
msgid "%s: invalid stopping date in string %Zd in `era' field"
msgstr "%s: 在 `era' 欄ä½ã€å­—串 %Zd 中的çµæŸæ—¥æœŸä¸é©ç”¨"
-#: locale/programs/ld-time.c:417
+#: locale/programs/ld-time.c:416
#, c-format
msgid "%s: garbage at end of stopping date in string %Zd in `era' field"
msgstr "%s: 無用的資料,在 `era' å€åŸŸã€å­—串 %Zd 中末尾的çµæŸæ—¥æœŸ"
-#: locale/programs/ld-time.c:436
-#, c-format
-msgid "%s: stopping date is invalid in string %Zd in `era' field"
-msgstr "%s: 在 `era' å€åŸŸçš„字串 %Zd 中的çµæŸæ—¥æœŸæ˜¯ä¸é©ç”¨çš„"
-
-#: locale/programs/ld-time.c:445
+#: locale/programs/ld-time.c:444
#, c-format
msgid "%s: missing era name in string %Zd in `era' field"
msgstr "%s: 缺少 era å稱,在 `era' 欄ä½ã€å­—串 %Zd 中"
-#: locale/programs/ld-time.c:457
+#: locale/programs/ld-time.c:456
#, c-format
msgid "%s: missing era format in string %Zd in `era' field"
msgstr "%s: 缺少 era æ ¼å¼ï¼Œåœ¨ `era' 欄ä½ã€å­—串 %Zd 中"
-#: locale/programs/ld-time.c:486
+#: locale/programs/ld-time.c:497
#, c-format
msgid "%s: third operand for value of field `%s' must not be larger than %d"
msgstr "%s: æ¬„ä½ `%s' 值的第三個é‹ç®—å…ƒä¸å¯ä»¥æ¯” %d 大"
-#: locale/programs/ld-time.c:494 locale/programs/ld-time.c:502
-#, c-format
-msgid "%s: values of field `%s' must not be larger than %d"
-msgstr "%s: æ¬„ä½ `%s' 的值ä¸å¯ä»¥å¤§æ–¼ %d"
-
-#: locale/programs/ld-time.c:510
+#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513
+#: locale/programs/ld-time.c:521
#, c-format
msgid "%s: values for field `%s' must not be larger than %d"
msgstr "%s: æ¬„ä½ `%s' 的值ä¸å¯ä»¥å¤§æ–¼ %d"
-#: locale/programs/ld-time.c:986
+#: locale/programs/ld-time.c:1004
#, c-format
msgid "%s: too few values for field `%s'"
msgstr "%s: æ¬„ä½ `%s' 中的值太少"
-#: locale/programs/ld-time.c:1031
+#: locale/programs/ld-time.c:1049
msgid "extra trailing semicolon"
msgstr "多出的尾端分號"
-#: locale/programs/ld-time.c:1034
+#: locale/programs/ld-time.c:1052
#, c-format
msgid "%s: too many values for field `%s'"
msgstr "%s: æ¬„ä½ `%s' 中的值太多"
#: locale/programs/linereader.c:130
msgid "trailing garbage at end of line"
-msgstr "è¡Œçµå°¾çš„無用字元"
+msgstr "列çµå°¾çš„無用字元"
-#: locale/programs/linereader.c:304
+#: locale/programs/linereader.c:298
msgid "garbage at end of number"
msgstr "號碼çµæŸä½ç½®çš„無用資料"
-#: locale/programs/linereader.c:416
+#: locale/programs/linereader.c:410
msgid "garbage at end of character code specification"
msgstr "字元編碼設定çµæŸä½ç½®çš„無用資料"
-#: locale/programs/linereader.c:502
+#: locale/programs/linereader.c:496
msgid "unterminated symbolic name"
msgstr "沒有çµå°¾çš„符號å稱"
-#: locale/programs/linereader.c:566 catgets/gencat.c:1195
-msgid "invalid escape sequence"
-msgstr "無效的跳脫åºåˆ—"
-
-#: locale/programs/linereader.c:629
+#: locale/programs/linereader.c:623
msgid "illegal escape sequence at end of string"
msgstr "字串çµå°¾æœ‰ä¸åˆæ³•çš„跳脫åºåˆ—"
-#: locale/programs/linereader.c:633 locale/programs/linereader.c:861
+#: locale/programs/linereader.c:627 locale/programs/linereader.c:855
msgid "unterminated string"
msgstr "沒有çµå°¾çš„字串"
-#: locale/programs/linereader.c:675
+#: locale/programs/linereader.c:669
msgid "non-symbolic character value should not be used"
msgstr "éžç¬¦è™Ÿæ€§çš„字元值ä¸æ‡‰è©²è¢«ä½¿ç”¨æ‰å°"
-#: locale/programs/linereader.c:822
+#: locale/programs/linereader.c:816
#, c-format
msgid "symbol `%.*s' not in charmap"
msgstr "符號 `%.*s' 並ä¸åœ¨å­—集å°ç…§è¡¨ä¸­"
-#: locale/programs/linereader.c:843
+#: locale/programs/linereader.c:837
#, c-format
msgid "symbol `%.*s' not in repertoire map"
msgstr "符號 `%.*s' 並ä¸åœ¨ç·¨ç¢¼å°æ˜ æª”中"
-#: locale/programs/locale.c:75
+#: locale/programs/locale-spec.c:131
+#, c-format
+msgid "unknown name \"%s\""
+msgstr "ä¸æ˜Žå稱「%sã€"
+
+#: locale/programs/locale.c:74
msgid "System information:"
msgstr "系統相關資訊:"
-#: locale/programs/locale.c:77
+#: locale/programs/locale.c:76
msgid "Write names of available locales"
msgstr "寫出存在的語å€è³‡æ–™å稱"
-#: locale/programs/locale.c:79
+#: locale/programs/locale.c:78
msgid "Write names of available charmaps"
msgstr "寫出存在的字集å°ç…§è¡¨å稱"
-#: locale/programs/locale.c:80
+#: locale/programs/locale.c:79
msgid "Modify output format:"
msgstr "修改輸出格å¼:"
-#: locale/programs/locale.c:81
+#: locale/programs/locale.c:80
msgid "Write names of selected categories"
msgstr "寫出é¸å–的類別å稱"
-#: locale/programs/locale.c:82
+#: locale/programs/locale.c:81
msgid "Write names of selected keywords"
msgstr "寫出é¸å–çš„é—œéµå­—å稱"
-#: locale/programs/locale.c:83
+#: locale/programs/locale.c:82
msgid "Print more information"
msgstr "å°å‡ºæ›´å¤šçš„資訊"
-#: locale/programs/locale.c:88
+#: locale/programs/locale.c:87
msgid "Get locale-specific information."
msgstr "å–得語å€è³‡æ–™ç‰¹å®šçš„資訊"
-#: locale/programs/locale.c:91
+#: locale/programs/locale.c:90
msgid ""
"NAME\n"
"[-a|-m]"
@@ -1349,99 +2510,104 @@ msgstr ""
"å稱\n"
"[-a|-m]"
-#: locale/programs/locale.c:195
+#: locale/programs/locale.c:194
+#, c-format
msgid "Cannot set LC_CTYPE to default locale"
msgstr "無法將 LC_CTYPE 設置為é è¨­çš„語å€"
-#: locale/programs/locale.c:197
+#: locale/programs/locale.c:196
+#, c-format
msgid "Cannot set LC_MESSAGES to default locale"
msgstr "無法將 LC_MESSAGES 設置為é è¨­çš„語å€"
-#: locale/programs/locale.c:210
+#: locale/programs/locale.c:209
+#, c-format
msgid "Cannot set LC_COLLATE to default locale"
msgstr "無法將 LC_COLLATE 設置為é è¨­çš„語å€"
-#: locale/programs/locale.c:226
+#: locale/programs/locale.c:225
+#, c-format
msgid "Cannot set LC_ALL to default locale"
msgstr "無法將 LC_ALL 設置為é è¨­çš„語å€"
-#: locale/programs/locale.c:517
+#: locale/programs/locale.c:518
+#, c-format
msgid "while preparing output"
msgstr "在準備輸出時"
-#: locale/programs/localedef.c:121
+#: locale/programs/localedef.c:120
msgid "Input Files:"
msgstr "輸入檔:"
-#: locale/programs/localedef.c:123
+#: locale/programs/localedef.c:122
msgid "Symbolic character names defined in FILE"
msgstr "符號字元的å稱定義在檔案 FILE 中"
-#: locale/programs/localedef.c:124
+#: locale/programs/localedef.c:123
msgid "Source definitions are found in FILE"
msgstr "原始資料定義在檔案 FILE 中"
-#: locale/programs/localedef.c:126
+#: locale/programs/localedef.c:125
msgid "FILE contains mapping from symbolic names to UCS4 values"
msgstr "檔案 FILE å…§å«ç¬¦è™Ÿå與 UCS4 編碼之間的å°æ˜ "
-#: locale/programs/localedef.c:130
+#: locale/programs/localedef.c:129
msgid "Create output even if warning messages were issued"
msgstr "產生輸出å³ä½¿æ˜¯æœ‰è­¦å‘Šè¨Šæ¯"
-#: locale/programs/localedef.c:131
+#: locale/programs/localedef.c:130
msgid "Create old-style tables"
msgstr "產生舊格å¼çš„表格"
-#: locale/programs/localedef.c:132
+#: locale/programs/localedef.c:131
msgid "Optional output file prefix"
msgstr "å¯æœ‰å¯ç„¡çš„輸出檔路徑"
-#: locale/programs/localedef.c:133
+#: locale/programs/localedef.c:132
msgid "Be strictly POSIX conform"
msgstr "åš´æ ¼éµå¾ž POSIX"
-#: locale/programs/localedef.c:135
+#: locale/programs/localedef.c:134
msgid "Suppress warnings and information messages"
msgstr "忽略警告與æ示訊æ¯"
-#: locale/programs/localedef.c:136
+#: locale/programs/localedef.c:135
msgid "Print more messages"
msgstr "å°å‡ºæ›´å¤šçš„訊æ¯"
-#: locale/programs/localedef.c:137
+#: locale/programs/localedef.c:136
msgid "Archive control:"
msgstr "ä¿å­˜æª”控制:"
-#: locale/programs/localedef.c:139
+#: locale/programs/localedef.c:138
msgid "Don't add new data to archive"
msgstr "ä¸è¦åŠ å…¥æ–°è³‡æ–™åˆ°ä¿å­˜æª”"
-#: locale/programs/localedef.c:141
+#: locale/programs/localedef.c:140
msgid "Add locales named by parameters to archive"
msgstr "藉由åƒæ•¸åŠ å…¥èªžå€å稱到ä¿å­˜æª”"
-#: locale/programs/localedef.c:142
+#: locale/programs/localedef.c:141
msgid "Replace existing archive content"
msgstr "替æ›å·²æœ‰çš„ä¿å­˜æª”內容"
-#: locale/programs/localedef.c:144
+#: locale/programs/localedef.c:143
msgid "Remove locales named by parameters from archive"
msgstr "藉由åƒæ•¸å¾žä¿å­˜æª”中刪除語å€å稱"
-#: locale/programs/localedef.c:145
+#: locale/programs/localedef.c:144
msgid "List content of archive"
msgstr "列出ä¿å­˜æª”的內容"
-#: locale/programs/localedef.c:147
+#: locale/programs/localedef.c:146
msgid "locale.alias file to consult when making archive"
msgstr "製作ä¿å­˜æª”時查閱 locale.alias 檔案"
-#: locale/programs/localedef.c:152
+#: locale/programs/localedef.c:151
msgid "Compile locale specification"
msgstr "編譯語å€è³‡æ–™è¦æ ¼"
-#: locale/programs/localedef.c:155
+#: locale/programs/localedef.c:154
msgid ""
"NAME\n"
"[--add-to-archive|--delete-from-archive] FILE...\n"
@@ -1451,39 +2617,42 @@ msgstr ""
"[--add-to-archive|--delete-from-archive] 檔案...\n"
"--list-archive [檔案]"
-#: locale/programs/localedef.c:233
+#: locale/programs/localedef.c:232
+#, c-format
msgid "cannot create directory for output files"
msgstr "無法為輸出檔建立目錄"
-#: locale/programs/localedef.c:244
+#: locale/programs/localedef.c:243
+#, c-format
msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
msgstr "åš´é‡éŒ¯èª¤: 系統沒有定義 `_POSIX2_LOCALEDEF'"
-#: locale/programs/localedef.c:258 locale/programs/localedef.c:274
+#: locale/programs/localedef.c:257 locale/programs/localedef.c:273
#: locale/programs/localedef.c:599 locale/programs/localedef.c:619
#, c-format
msgid "cannot open locale definition file `%s'"
msgstr "無法開啟語å€è³‡æ–™å®šç¾©æª” `%s'"
-#: locale/programs/localedef.c:286
+#: locale/programs/localedef.c:285
#, c-format
msgid "cannot write output files to `%s'"
msgstr "無法將輸出檔案寫入 `%s'"
-#: locale/programs/localedef.c:367
+#: locale/programs/localedef.c:366
#, c-format
msgid ""
"System's directory for character maps : %s\n"
-" repertoire maps: %s\n"
-" locale path : %s\n"
+"\t\t repertoire maps: %s\n"
+"\t\t locale path : %s\n"
"%s"
msgstr ""
-"系統的字集å°ç…§æª” (character maps) 目錄 : %s\n"
-" 編碼å°æ˜ æª” (repertoire maps) 目錄 : %s\n"
-" 語å€è³‡æ–™è·¯å¾‘ : %s\n"
+"系統的字元å°æ‡‰ç›®éŒ„:%s\n"
+"\t\t 編碼å°æ‡‰ï¼š%s\n"
+"\t\t 語å€è·¯å¾‘ :%s\n"
"%s"
#: locale/programs/localedef.c:567
+#, c-format
msgid "circular dependencies between locale definitions"
msgstr "有語å€è³‡æ–™åœ¨å®šç¾©æ™‚發生循環相關的情æ³"
@@ -1492,117 +2661,135 @@ msgstr "有語å€è³‡æ–™åœ¨å®šç¾©æ™‚發生循環相關的情æ³"
msgid "cannot add already read locale `%s' a second time"
msgstr " `%s' 語å€è³‡æ–™å·²ç¶“用éŽï¼Œä¸èƒ½é‡è¤‡åŠ å…¥"
-#: locale/programs/locarchive.c:89 locale/programs/locarchive.c:259
+#: locale/programs/locarchive.c:92 locale/programs/locarchive.c:338
+#, c-format
msgid "cannot create temporary file"
msgstr "無法產生暫時檔"
-#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
+#: locale/programs/locarchive.c:122 locale/programs/locarchive.c:384
+#, c-format
msgid "cannot initialize archive file"
msgstr "無法起始ä¿å­˜æª”"
-#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
+#: locale/programs/locarchive.c:129 locale/programs/locarchive.c:391
+#, c-format
msgid "cannot resize archive file"
msgstr "無法改變ä¿å­˜æª”大å°"
-#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
-#: locale/programs/locarchive.c:511
+#: locale/programs/locarchive.c:152 locale/programs/locarchive.c:414
+#: locale/programs/locarchive.c:633
+#, c-format
msgid "cannot map archive header"
msgstr "無法註記ä¿å­˜æª”表頭"
-#: locale/programs/locarchive.c:156
+#: locale/programs/locarchive.c:174
+#, c-format
msgid "failed to create new locale archive"
msgstr "無法建立新的語å€ä¿å­˜æª”"
-#: locale/programs/locarchive.c:168
+#: locale/programs/locarchive.c:186
+#, c-format
msgid "cannot change mode of new locale archive"
msgstr "無法改變新的語å€è³‡æ–™ä¿å­˜æª”狀態"
-#: locale/programs/locarchive.c:253
+#: locale/programs/locarchive.c:285
+#, c-format
+msgid "cannot read data from locale archive"
+msgstr "無法從語å€æ­¸æª”讀å–資料"
+
+#: locale/programs/locarchive.c:318
+#, c-format
msgid "cannot map locale archive file"
msgstr "無法映射語å€è³‡æ–™ä¿å­˜æª”"
-#: locale/programs/locarchive.c:329
+#: locale/programs/locarchive.c:422
+#, c-format
msgid "cannot lock new archive"
msgstr "無法鎖定新的ä¿å­˜æª”"
-#: locale/programs/locarchive.c:380
+#: locale/programs/locarchive.c:488
+#, c-format
msgid "cannot extend locale archive file"
msgstr "無法延展語å€è³‡æ–™ä¿å­˜æª”"
-#: locale/programs/locarchive.c:389
+#: locale/programs/locarchive.c:497
+#, c-format
msgid "cannot change mode of resized locale archive"
msgstr "無法改變已變更大å°çš„語å€è³‡æ–™ä¿å­˜æª”狀態"
-#: locale/programs/locarchive.c:397
+#: locale/programs/locarchive.c:505
+#, c-format
msgid "cannot rename new archive"
msgstr "無法更改新ä¿å­˜æª”å稱"
-#: locale/programs/locarchive.c:450
+#: locale/programs/locarchive.c:558
#, c-format
msgid "cannot open locale archive \"%s\""
msgstr "無法開啟語å€è³‡æ–™ä¿å­˜æª” \"%s\""
-#: locale/programs/locarchive.c:455
+#: locale/programs/locarchive.c:563
#, c-format
msgid "cannot stat locale archive \"%s\""
msgstr "無法統計語å€è³‡æ–™ä¿å­˜æª” \"%s\""
-#: locale/programs/locarchive.c:474
+#: locale/programs/locarchive.c:582
#, c-format
msgid "cannot lock locale archive \"%s\""
msgstr "無法鎖定語å€è³‡æ–™ä¿å­˜æª” \"%s\""
-#: locale/programs/locarchive.c:497
+#: locale/programs/locarchive.c:605
+#, c-format
msgid "cannot read archive header"
msgstr "無法讀å–ä¿å­˜æª”表頭資料"
-#: locale/programs/locarchive.c:557
+#: locale/programs/locarchive.c:680
#, c-format
msgid "locale '%s' already exists"
msgstr "語å€è³‡æ–™ `%s' 已經存在"
-#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
-#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
-#: locale/programs/locfile.c:343
+#: locale/programs/locarchive.c:942 locale/programs/locarchive.c:957
+#: locale/programs/locarchive.c:969 locale/programs/locarchive.c:981
+#: locale/programs/locfile.c:344
+#, c-format
msgid "cannot add to locale archive"
msgstr "無法加入語å€è³‡æ–™ä¿å­˜æª”"
-#: locale/programs/locarchive.c:982
+#: locale/programs/locarchive.c:1139
#, c-format
msgid "locale alias file `%s' not found"
msgstr "找ä¸åˆ°èªžå€è³‡æ–™åˆ¥å檔 `%s'"
-#: locale/programs/locarchive.c:1126
+#: locale/programs/locarchive.c:1289
#, c-format
msgid "Adding %s\n"
msgstr "加入 %s 中\n"
-#: locale/programs/locarchive.c:1132
+#: locale/programs/locarchive.c:1295
#, c-format
msgid "stat of \"%s\" failed: %s: ignored"
msgstr "å–å¾— \"%s\" 的資訊時失敗: %s: 已忽略"
-#: locale/programs/locarchive.c:1138
+#: locale/programs/locarchive.c:1301
#, c-format
msgid "\"%s\" is no directory; ignored"
msgstr "\"%s\" 並éžç›®éŒ„; 已忽略"
-#: locale/programs/locarchive.c:1145
+#: locale/programs/locarchive.c:1308
#, c-format
msgid "cannot open directory \"%s\": %s: ignored"
msgstr "無法開啟目錄 \"%s\": %s: 已忽略"
-#: locale/programs/locarchive.c:1217
+#: locale/programs/locarchive.c:1380
#, c-format
msgid "incomplete set of locale files in \"%s\""
msgstr "ä¸å®Œæ•´çš„一組語å€è³‡æ–™æª”案存在於 \"%s\" 之中"
-#: locale/programs/locarchive.c:1281
+#: locale/programs/locarchive.c:1444
#, c-format
msgid "cannot read all files in \"%s\": ignored"
msgstr "ç„¡æ³•è®€å– \"%s\" 中的所有檔案: 已忽略"
-#: locale/programs/locarchive.c:1351
+#: locale/programs/locarchive.c:1514
#, c-format
msgid "locale \"%s\" not in archive"
msgstr "語å€è³‡æ–™ \"%s\" ä¸åœ¨ä¿å­˜æª”中"
@@ -1612,2135 +2799,1812 @@ msgstr "語å€è³‡æ–™ \"%s\" ä¸åœ¨ä¿å­˜æª”中"
msgid "argument to `%s' must be a single character"
msgstr "給 `%s' 的引數必須是一個單字元"
-#: locale/programs/locfile.c:251
+#: locale/programs/locfile.c:252
msgid "syntax error: not inside a locale definition section"
msgstr "語法錯誤: ä¸èƒ½åœ¨èªžå€è³‡æ–™å®šç¾©å€å¡Šè£¡é¢ä½¿ç”¨"
-#: locale/programs/locfile.c:625
+#: locale/programs/locfile.c:626
#, c-format
msgid "cannot open output file `%s' for category `%s'"
msgstr "無法開啟輸出檔 `%s' 供類別 `%s' 使用"
-#: locale/programs/locfile.c:649
+#: locale/programs/locfile.c:650
#, c-format
msgid "failure while writing data for category `%s'"
msgstr "正在為類別 `%s' 寫入資料時發生錯誤"
-#: locale/programs/locfile.c:745
+#: locale/programs/locfile.c:746
#, c-format
msgid "cannot create output file `%s' for category `%s'"
msgstr "無法建立輸出檔 `%s' 供類別 `%s' 使用"
-#: locale/programs/locfile.c:781
-msgid "expect string argument for `copy'"
-msgstr "`copy' çš„åƒæ•¸æ‡‰è©²æ˜¯å­—串æ‰å°"
+#: locale/programs/locfile.c:782
+msgid "expecting string argument for `copy'"
+msgstr "`copy' 的引數應該是字串æ‰å°"
-#: locale/programs/locfile.c:785
+#: locale/programs/locfile.c:786
msgid "locale name should consist only of portable characters"
-msgstr "語å€è³‡æ–™çš„å稱應該用泛用字元 (portable characters) 組æˆ"
+msgstr "語å€è³‡æ–™çš„å稱應該以常用字元組æˆ"
-#: locale/programs/locfile.c:804
+#: locale/programs/locfile.c:805
msgid "no other keyword shall be specified when `copy' is used"
msgstr "使用 `copy' 的時候ä¸æ‡‰è©²å†ç”¨åˆ°ä»»ä½•å…¶ä»–çš„é—œéµå­—了"
-#: locale/programs/repertoire.c:230 locale/programs/repertoire.c:271
-#: locale/programs/repertoire.c:296
+#: locale/programs/locfile.c:819
+#, c-format
+msgid "`%1$s' definition does not end with `END %1$s'"
+msgstr "`%1$s' 定義沒有以 `END %1$s' çµæŸ"
+
+#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270
+#: locale/programs/repertoire.c:295
#, c-format
msgid "syntax error in repertoire map definition: %s"
msgstr "編碼å°æ˜ æª”中的定義有語法錯誤: %s"
-#: locale/programs/repertoire.c:272
+#: locale/programs/repertoire.c:271
msgid "no <Uxxxx> or <Uxxxxxxxx> value given"
msgstr "沒有給定 <Uxxxx> 或 <Uxxxxxxxx> 的值"
-#: locale/programs/repertoire.c:332
+#: locale/programs/repertoire.c:331
+#, c-format
msgid "cannot save new repertoire map"
msgstr "無法儲存新的編碼å°æ˜ æª”"
-#: locale/programs/repertoire.c:343
+#: locale/programs/repertoire.c:342
#, c-format
msgid "repertoire map file `%s' not found"
msgstr "找ä¸åˆ°ç·¨ç¢¼å°æ˜ æª” `%s'"
-#: locale/programs/repertoire.c:450
+#: login/programs/pt_chown.c:78
#, c-format
-msgid "<%s> and <%s> are invalid names for range"
-msgstr "<%s> ä»¥åŠ <%s> 是ä¸é©ç”¨çš„範åœå稱"
+msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n"
+msgstr "設定æ“有者ã€ç¾¤çµ„和存å–許å¯çš„從屬 pseudo 終端機相應到主 pseudo 終端機傳éžæ–¼æª”案æ述符號「%dã€ã€‚ 這是輔助程å¼ç¨‹å¼ç”¨æ–¼ã€Œgrantptã€å‡½å¼ã€‚ 它並未é æƒ³çš„為é‹è¡Œç›´æŽ¥çš„地從命令列。\n"
-#: locale/programs/repertoire.c:457
-msgid "upper limit in range is not smaller then lower limit"
-msgstr "å€åŸŸå®šç¾©ä¸­çš„最大值沒有比最å°å€¼é‚„è¦å°"
-
-#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
-#: posix/getconf.c:1007
-msgid "memory exhausted"
-msgstr "記憶體耗盡"
-
-#: assert/assert-perr.c:57
+#: login/programs/pt_chown.c:88
#, c-format
-msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n"
-msgstr "%s%s%s:%u: %s%s無法é æ–™çš„錯誤: %s。\n"
+msgid ""
+"The owner is set to the current user, the group is set to `%s', and the access permission is set to `%o'.\n"
+"\n"
+"%s"
+msgstr ""
+"æ“有者為設定到目å‰ä½¿ç”¨è€…,群組為設定到「%sã€ï¼Œè€Œå­˜å–許å¯ç‚ºè¨­å®šåˆ°ã€Œ%oã€ã€‚\n"
+"\n"
+"%s"
-#: assert/assert.c:56
+#: login/programs/pt_chown.c:192
#, c-format
-msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n"
-msgstr "%s%s%s:%u: %s%sAssertion `%s' 失敗。\n"
+msgid "too many arguments"
+msgstr "太多引數"
-#: intl/tst-codeset.c:40 intl/tst-codeset.c:50
-msgid "cheese"
-msgstr "請微笑"
+#: login/programs/pt_chown.c:200
+#, c-format
+msgid "needs to be installed setuid `root'"
+msgstr "需è¦æ˜¯å·²å®‰è£çš„ setuid「根ã€"
-#: intl/tst-gettext2.c:37
-msgid "First string for testing."
-msgstr "第一個字串接å—測試。"
+#: malloc/mcheck.c:350
+msgid "memory is consistent, library is buggy\n"
+msgstr "記憶體內容一致,函å¼åº«æœ‰å•é¡Œ\n"
-#: intl/tst-gettext2.c:38
-msgid "Another string for testing."
-msgstr "å¦ä¸€å€‹å—測試的字串。"
+#: malloc/mcheck.c:353
+msgid "memory clobbered before allocated block\n"
+msgstr "記憶體在é…ç½®å€å¡Šä¹‹å‰å°± clobbered 了\n"
-#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:88
-msgid "NAME"
-msgstr "å稱"
+#: malloc/mcheck.c:356
+msgid "memory clobbered past end of allocated block\n"
+msgstr "記憶體在經éŽé…置的å€å¡Šå°¾éƒ¨æ™‚ clobbered 了\n"
-#: catgets/gencat.c:112
-msgid "Create C header file NAME containing symbol definitions"
-msgstr "產生的 C 標頭檔åå…§å«ç¬¦è™Ÿå®šç¾©"
+#: malloc/mcheck.c:359
+msgid "block freed twice\n"
+msgstr "æ­¤å€å¡Šè¢«ç”¨ free 指令釋放了兩次\n"
-#: catgets/gencat.c:114
-msgid "Do not use existing catalog, force new output file"
-msgstr "ä¸ä½¿ç”¨ç¾å­˜çš„ catalog, 強制使用新的輸出檔"
+#: malloc/mcheck.c:362
+msgid "bogus mcheck_status, library is buggy\n"
+msgstr "記憶體檢查狀態 (mcheck_ststus) 有誤,您所用的函å¼åº«æœ‰å•é¡Œ\n"
-#: catgets/gencat.c:115
-msgid "Write output to file NAME"
-msgstr "將輸出寫到檔案 NAME 中"
+#: malloc/memusage.sh:33
+msgid "%s: option '%s' requires an argument\\n"
+msgstr "%s:é¸é …『%sã€éœ€è¦ä¸€å€‹å¼•æ•¸\\n"
-#: catgets/gencat.c:120
+#: malloc/memusage.sh:39
msgid ""
-"Generate message catalog. If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n"
-"is -, output is written to standard output.\n"
+"Usage: memusage [OPTION]... PROGRAM [PROGRAMOPTION]...\n"
+"Profile memory usage of PROGRAM.\n"
+"\n"
+" -n,--progname=NAME Name of the program file to profile\n"
+" -p,--png=FILE Generate PNG graphic and store it in FILE\n"
+" -d,--data=FILE Generate binary data file and store it in FILE\n"
+" -u,--unbuffered Don't buffer output\n"
+" -b,--buffer=SIZE Collect SIZE entries before writing them out\n"
+" --no-timer Don't collect additional information through timer\n"
+" -m,--mmap Also trace mmap & friends\n"
+"\n"
+" -?,--help Print this help and exit\n"
+" --usage Give a short usage message\n"
+" -V,--version Print version information and exit\n"
+"\n"
+" The following options only apply when generating graphical output:\n"
+" -t,--time-based Make graph linear in time\n"
+" -T,--total Also draw graph of total memory use\n"
+" --title=STRING Use STRING as title of the graph\n"
+" -x,--x-size=SIZE Make graphic SIZE pixels wide\n"
+" -y,--y-size=SIZE Make graphic SIZE pixels high\n"
+"\n"
+"Mandatory arguments to long options are also mandatory for any corresponding\n"
+"short options.\n"
+"\n"
msgstr ""
-"ç”¢ç”Ÿè¨Šæ¯ catelog。\\v如果輸入檔å是 -, 將從標準輸入讀å–輸入。\n"
-"如果輸出檔å是 -, 則輸出將寫到標準輸出去。\n"
+"用法:memusage [é¸é …]… ç¨‹å¼ [PROGRAMOPTION]…\n"
+"å´å¯«æª”記憶體用法的程å¼ã€‚\n"
+"\n"
+" -n,--progname=å稱 åšç‚ºå´å¯«çš„程å¼æª”案å稱\n"
+" -p,--png=檔案 產生 PNG 圖形並儲存它於檔案\n"
+" -d,--data=檔案 產生二進ä½è³‡æ–™æª”案並儲存它於檔案\n"
+" -u,--unbuffered ä¸è¦å°‡è¼¸å‡ºç·©è¡\n"
+" -b,--buffer=å¤§å° æ–¼å¯«å‡ºå®ƒå€‘ä¹‹å‰æ”¶é›†å¤§å°é …ç›®\n"
+" --no-timer ä¸é€éŽè¨ˆæ™‚器收集附加資訊\n"
+" -m,--mmap åŒæ™‚追蹤 mmap 和相關者\n"
+"\n"
+" -?,--help å°å‡ºé€™å€‹èªªæ˜Žç„¶å¾Œé›¢é–‹\n"
+" --usage 給出短用法訊æ¯\n"
+" -V,--version å°å‡ºç‰ˆæœ¬è³‡è¨Šç„¶å¾Œé›¢é–‹\n"
+"\n"
+"下列的é¸é …åªæœ‰å¥—用時產生圖形輸出:\n"
+" -t,--time-based åŠæ™‚定製圖形線性\n"
+" -T,--total åŒæ™‚繪製記憶體使用總計圖形\n"
+" --title=字串 使用字串åšç‚ºåœ–形的標題\n"
+" -x,--x-size=å¤§å° å®šè£½åœ–å½¢å¤§å°åƒç´ å¯¬åº¦\n"
+" -y,--y-size=å¤§å° å®šè£½åœ–å½¢å¤§å°åƒç´ é«˜åº¦\n"
+"\n"
+"é•·é¸é …çš„å¿…è¦å¼•æ•¸åŒæ¨£ä¹Ÿæ˜¯ç›¸å°æ‡‰çŸ­é¸é …çš„å¿…è¦å¼•æ•¸ã€‚\n"
+"\n"
-#: catgets/gencat.c:125
+#: malloc/memusage.sh:101
msgid ""
-"-o OUTPUT-FILE [INPUT-FILE]...\n"
-"[OUTPUT-FILE [INPUT-FILE]...]"
+"Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n"
+"\t [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n"
+"\t [--title=STRING] [--x-size=SIZE] [--y-size=SIZE]\n"
+"\t PROGRAM [PROGRAMOPTION]..."
msgstr ""
-"-o 輸出檔案å稱 [輸入檔案å稱]...\n"
-"[輸出檔案å稱 [輸入檔案å稱]...]"
-
-#: catgets/gencat.c:282
-msgid "*standard input*"
-msgstr "*標準輸入*"
-
-#: catgets/gencat.c:417 catgets/gencat.c:494
-msgid "illegal set number"
-msgstr "ä¸åˆæ³•çš„集åˆç·¨è™Ÿ"
-
-#: catgets/gencat.c:444
-msgid "duplicate set definition"
-msgstr "複製集åˆå®šç¾©"
-
-#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
-msgid "this is the first definition"
-msgstr "此為第一個定義"
+"語法:memusage [--data=檔案] [--progname=å稱] [--png=檔案] [--unbuffered]\n"
+"\t [--buffer=大å°] [--no-timer] [--time-based] [--total]\n"
+"\t [--title=字串] [--x-size=大å°] [--y-size=大å°]\n"
+"\t ç¨‹å¼ [PROGRAMOPTION]…"
-#: catgets/gencat.c:522
-#, c-format
-msgid "unknown set `%s'"
-msgstr "ä¸æ˜Žçš„é›†åˆ `%s'"
+#: malloc/memusage.sh:193
+msgid "memusage: option \\`${1##*=}' is ambiguous"
+msgstr "memusage:é¸é … \\「${1##*=}ã€ç‚ºæ¨¡ç¨œå…©å¯çš„"
-#: catgets/gencat.c:563
-msgid "invalid quote character"
-msgstr "ä¸é©ç”¨çš„引用字元"
+#: malloc/memusage.sh:202
+msgid "memusage: unrecognized option \\`$1'"
+msgstr "memusage:無法辨識的é¸é …「$1ã€"
-#: catgets/gencat.c:576
-#, c-format
-msgid "unknown directive `%s': line ignored"
-msgstr "ä¸æ˜Žçš„指令 `%s': 此行忽略"
+#: malloc/memusage.sh:215
+msgid "No program name given"
+msgstr "未給定程å¼å稱"
-#: catgets/gencat.c:621
-msgid "duplicated message number"
-msgstr "é‡è¤‡çš„訊æ¯ç·¨è™Ÿ"
-
-#: catgets/gencat.c:674
-msgid "duplicated message identifier"
-msgstr "é‡è¤‡çš„訊æ¯è­˜åˆ¥ç¬¦è™Ÿ"
+#: malloc/memusagestat.c:57
+msgid "Name output file"
+msgstr "å稱輸出檔"
-#: catgets/gencat.c:731
-msgid "invalid character: message ignored"
-msgstr "ä¸é©ç”¨çš„å­—å…ƒ: 忽略此訊æ¯"
+#: malloc/memusagestat.c:58
+msgid "Title string used in output graphic"
+msgstr "在輸出的圖åƒä¸­ä½¿ç”¨æœ‰æ¨™é ­çš„字串"
-#: catgets/gencat.c:774
-msgid "invalid line"
-msgstr "無效的輸入列"
+#: malloc/memusagestat.c:59
+msgid "Generate output linear to time (default is linear to number of function calls)"
+msgstr "產生輸出與時間呈線性關係 (é è¨­æ˜¯èˆ‡å‡½å¼å‘¼å«æ•¸ç›®å‘ˆç·šæ€§é—œä¿‚)"
-#: catgets/gencat.c:828
-msgid "malformed line ignored"
-msgstr "忽略奇怪的行"
+#: malloc/memusagestat.c:61
+msgid "Also draw graph for total memory consumption"
+msgstr "åŒæ™‚å°ç¸½è¨˜æ†¶é«”用é‡ä½œåœ–"
-#: catgets/gencat.c:992 catgets/gencat.c:1033
-#, c-format
-msgid "cannot open output file `%s'"
-msgstr "無法開啟輸出檔 `%s'"
+#: malloc/memusagestat.c:62
+msgid "Make output graphic VALUE pixels wide"
+msgstr "定製輸出圖形的寬度åƒç´  VALUE"
-#: catgets/gencat.c:1217
-msgid "unterminated message"
-msgstr "沒有çµå°¾çš„訊æ¯"
+#: malloc/memusagestat.c:63
+msgid "Make output graphic VALUE pixels high"
+msgstr "定製輸出圖形的高度åƒç´  VALUE"
-#: catgets/gencat.c:1241
-msgid "while opening old catalog file"
-msgstr "在開啟舊的類別檔案時"
+#: malloc/memusagestat.c:68
+msgid "Generate graphic from memory profiling data"
+msgstr "從記憶體性能測試資料產生圖åƒ"
-#: catgets/gencat.c:1332
-msgid "conversion modules not available"
-msgstr "轉æ›æ¨¡çµ„ä¸å­˜åœ¨"
+#: malloc/memusagestat.c:71
+msgid "DATAFILE [OUTFILE]"
+msgstr "資料檔 [輸出檔]"
-#: catgets/gencat.c:1358
-msgid "cannot determine escape character"
-msgstr "無法決定跳脫 (escape) 字元"
+#: misc/error.c:118
+msgid "Unknown system error"
+msgstr "未知的系統錯誤"
-#: stdlib/../sysdeps/unix/sysv/linux/ia64/makecontext.c:63
-#, c-format
-msgid "makecontext: does not know how to handle more than 8 arguments\n"
-msgstr "makecontext: ä¸çŸ¥è¦å¦‚何處ç†è¶…éŽå…«å€‹å¼•æ•¸\n"
+#: nis/nis_callback.c:189
+msgid "unable to free arguments"
+msgstr "無法釋放åƒæ•¸"
-#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:147
-#: nis/nis_error.c:29 nis/ypclnt.c:778 nis/ypclnt.c:852
+#: nis/nis_error.h:1 nis/ypclnt.c:833 nis/ypclnt.c:921 posix/regcomp.c:132
+#: sysdeps/gnu/errlist.c:20
msgid "Success"
msgstr "æˆåŠŸ"
-#. TRANS Operation not permitted; only the owner of the file (or other resource)
-#. TRANS or processes with special privileges can perform the operation.
-#: stdio-common/../sysdeps/gnu/errlist.c:17
-msgid "Operation not permitted"
-msgstr "此項æ“作並ä¸è¢«å…許"
-
-#. TRANS No such file or directory. This is a ``file doesn't exist'' error
-#. TRANS for ordinary files that are referenced in contexts where they are
-#. TRANS expected to already exist.
-#: stdio-common/../sysdeps/gnu/errlist.c:28
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:32
-msgid "No such file or directory"
-msgstr "沒有此一檔案或目錄"
-
-#. TRANS No process matches the specified process ID.
-#: stdio-common/../sysdeps/gnu/errlist.c:37
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:33
-msgid "No such process"
-msgstr "沒有此一程åº"
-
-#. TRANS Interrupted function call; an asynchronous signal occurred and prevented
-#. TRANS completion of the call. When this happens, you should try the call
-#. TRANS again.
-#. TRANS
-#. TRANS You can choose to have functions resume after a signal that is handled,
-#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted
-#. TRANS Primitives}.
-#: stdio-common/../sysdeps/gnu/errlist.c:52
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:34
-msgid "Interrupted system call"
-msgstr "中斷的系統呼å«"
+#: nis/nis_error.h:2
+msgid "Probable success"
+msgstr "å¯èƒ½æˆåŠŸ"
-#. TRANS Input/output error; usually used for physical read or write errors.
-#: stdio-common/../sysdeps/gnu/errlist.c:61
-msgid "Input/output error"
-msgstr "輸入/輸出錯誤"
+#: nis/nis_error.h:3
+msgid "Not found"
+msgstr "找ä¸åˆ°"
-#. TRANS No such device or address. The system tried to use the device
-#. TRANS represented by a file you specified, and it couldn't find the device.
-#. TRANS This can mean that the device file was installed incorrectly, or that
-#. TRANS the physical device is missing or not correctly attached to the
-#. TRANS computer.
-#: stdio-common/../sysdeps/gnu/errlist.c:74
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:36
-msgid "No such device or address"
-msgstr "沒有此一è£ç½®æˆ–ä½å€"
+#: nis/nis_error.h:4
+msgid "Probably not found"
+msgstr "å¯èƒ½æ‰¾ä¸åˆ°"
-#. TRANS Argument list too long; used when the arguments passed to a new program
-#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
-#. TRANS File}) occupy too much memory space. This condition never arises in the
-#. TRANS GNU system.
-#: stdio-common/../sysdeps/gnu/errlist.c:86
-msgid "Argument list too long"
-msgstr "引數列項目éŽé•·"
+#: nis/nis_error.h:5
+msgid "Cache expired"
+msgstr "å¿«å–éŽæ™‚å–消了"
-#. TRANS Invalid executable file format. This condition is detected by the
-#. TRANS @code{exec} functions; see @ref{Executing a File}.
-#: stdio-common/../sysdeps/gnu/errlist.c:96
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:38
-msgid "Exec format error"
-msgstr "å¯åŸ·è¡Œæª”æ ¼å¼éŒ¯èª¤"
+#: nis/nis_error.h:6
+msgid "NIS+ servers unreachable"
+msgstr "NIS+ 伺æœå™¨ç„¡æ³•é€£ç·š"
-#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been
-#. TRANS closed or reading from a descriptor open only for writing (or vice
-#. TRANS versa).
-#: stdio-common/../sysdeps/gnu/errlist.c:107
-msgid "Bad file descriptor"
-msgstr "錯誤的檔案敘述項"
+#: nis/nis_error.h:7
+msgid "Unknown object"
+msgstr "未知的目的檔"
-#. TRANS There are no child processes. This error happens on operations that are
-#. TRANS supposed to manipulate child processes, when there aren't any processes
-#. TRANS to manipulate.
-#: stdio-common/../sysdeps/gnu/errlist.c:118
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:40
-msgid "No child processes"
-msgstr "沒有å­ç¨‹åºå­˜åœ¨"
+#: nis/nis_error.h:8
+msgid "Server busy, try again"
+msgstr "伺æœå™¨å¿™ç¢Œä¸­ï¼Œè«‹å†è©¦ä¸€æ¬¡"
-#. TRANS Deadlock avoided; allocating a system resource would have resulted in a
-#. TRANS deadlock situation. The system does not guarantee that it will notice
-#. TRANS all such situations. This error means you got lucky and the system
-#. TRANS noticed; it might just hang. @xref{File Locks}, for an example.
-#: stdio-common/../sysdeps/gnu/errlist.c:130
-msgid "Resource deadlock avoided"
-msgstr "é¿é–‹è³‡æºéŽ–定"
+#: nis/nis_error.h:9
+msgid "Generic system error"
+msgstr "一般系統錯誤"
-#. TRANS No memory available. The system cannot allocate more virtual memory
-#. TRANS because its capacity is full.
-#: stdio-common/../sysdeps/gnu/errlist.c:140
-msgid "Cannot allocate memory"
-msgstr "無法é…置記憶體"
+#: nis/nis_error.h:10
+msgid "First/next chain broken"
+msgstr "第一個/下一個åºåˆ—壞掉了"
#. TRANS Permission denied; the file permissions do not allow the attempted operation.
-#: stdio-common/../sysdeps/gnu/errlist.c:149
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:43
-#: nis/nis_error.c:39 nis/ypclnt.c:808
+#: nis/nis_error.h:11 nis/ypclnt.c:878 sysdeps/gnu/errlist.c:157
msgid "Permission denied"
msgstr "拒絕ä¸ç¬¦æ¬Šé™çš„æ“作"
-#. TRANS Bad address; an invalid pointer was detected.
-#. TRANS In the GNU system, this error never happens; you get a signal instead.
-#: stdio-common/../sysdeps/gnu/errlist.c:159
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:44
-msgid "Bad address"
-msgstr "錯誤的ä½å€"
-
-#. TRANS A file that isn't a block special file was given in a situation that
-#. TRANS requires one. For example, trying to mount an ordinary file as a file
-#. TRANS system in Unix gives this error.
-#: stdio-common/../sysdeps/gnu/errlist.c:170
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:45
-msgid "Block device required"
-msgstr "必須是å€å¡Šè£ç½® (Block device)"
-
-#. TRANS Resource busy; a system resource that can't be shared is already in use.
-#. TRANS For example, if you try to delete a file that is the root of a currently
-#. TRANS mounted filesystem, you get this error.
-#: stdio-common/../sysdeps/gnu/errlist.c:181
-msgid "Device or resource busy"
-msgstr "è£ç½®æˆ–系統資æºå¿™ç¢Œä¸­"
-
-#. TRANS File exists; an existing file was specified in a context where it only
-#. TRANS makes sense to specify a new file.
-#: stdio-common/../sysdeps/gnu/errlist.c:191
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:47
-msgid "File exists"
-msgstr "檔案已存在"
-
-#. TRANS An attempt to make an improper link across file systems was detected.
-#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but
-#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}).
-#: stdio-common/../sysdeps/gnu/errlist.c:202
-msgid "Invalid cross-device link"
-msgstr "ä¸é©ç”¨çš„è£ç½®é–“連çµ"
-
-#. TRANS The wrong type of device was given to a function that expects a
-#. TRANS particular sort of device.
-#: stdio-common/../sysdeps/gnu/errlist.c:212
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:49
-msgid "No such device"
-msgstr "沒有此一è£ç½®"
-
-#. TRANS A file that isn't a directory was specified when a directory is required.
-#: stdio-common/../sysdeps/gnu/errlist.c:221
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:50
-msgid "Not a directory"
-msgstr "並ä¸æ˜¯ä¸€å€‹ç›®éŒ„"
-
-#. TRANS File is a directory; you cannot open a directory for writing,
-#. TRANS or create or remove hard links to it.
-#: stdio-common/../sysdeps/gnu/errlist.c:231
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:51
-msgid "Is a directory"
-msgstr "是個目錄"
-
-#. TRANS Invalid argument. This is used to indicate various kinds of problems
-#. TRANS with passing the wrong argument to a library function.
-#: stdio-common/../sysdeps/gnu/errlist.c:241
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:52
-msgid "Invalid argument"
-msgstr "ä¸é©ç”¨çš„引數"
-
-#. TRANS The current process has too many files open and can't open any more.
-#. TRANS Duplicate descriptors do count toward this limit.
-#. TRANS
-#. TRANS In BSD and GNU, the number of open files is controlled by a resource
-#. TRANS limit that can usually be increased. If you get this error, you might
-#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
-#. TRANS @pxref{Limits on Resources}.
-#: stdio-common/../sysdeps/gnu/errlist.c:256
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:54
-msgid "Too many open files"
-msgstr "開啟太多檔案"
-
-#. TRANS There are too many distinct file openings in the entire system. Note
-#. TRANS that any number of linked channels count as just one file opening; see
-#. TRANS @ref{Linked Channels}. This error never occurs in the GNU system.
-#: stdio-common/../sysdeps/gnu/errlist.c:267
-msgid "Too many open files in system"
-msgstr "系統中太多的開啟檔案"
+#: nis/nis_error.h:12
+msgid "Not owner"
+msgstr "並éžæ“有者"
-#. TRANS Inappropriate I/O control operation, such as trying to set terminal
-#. TRANS modes on an ordinary file.
-#: stdio-common/../sysdeps/gnu/errlist.c:277
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:55
-msgid "Inappropriate ioctl for device"
-msgstr "ä¸å¸Œæœ›çš„è£ç½®è¼¸å‡ºå…¥æŽ§åˆ¶ (ioctl)"
+#: nis/nis_error.h:13
+msgid "Name not served by this server"
+msgstr "網域å稱æœå‹™ä¸æ˜¯ç”±æ­¤ä¼ºæœå™¨æä¾›"
-#. TRANS An attempt to execute a file that is currently open for writing, or
-#. TRANS write to a file that is currently being executed. Often using a
-#. TRANS debugger to run a program is considered having it open for writing and
-#. TRANS will cause this error. (The name stands for ``text file busy''.) This
-#. TRANS is not an error in the GNU system; the text is copied as necessary.
-#: stdio-common/../sysdeps/gnu/errlist.c:290
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:56
-msgid "Text file busy"
-msgstr "文字檔忙錄中"
+#: nis/nis_error.h:14
+msgid "Server out of memory"
+msgstr "伺æœå™¨è¨˜æ†¶é«”已用完"
-#. TRANS File too big; the size of a file would be larger than allowed by the system.
-#: stdio-common/../sysdeps/gnu/errlist.c:299
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:57
-msgid "File too large"
-msgstr "檔案太大"
+#: nis/nis_error.h:15
+msgid "Object with same name exists"
+msgstr "åŒå的目標已經存在"
-#. TRANS No space left on device; write operation on a file failed because the
-#. TRANS disk is full.
-#: stdio-common/../sysdeps/gnu/errlist.c:309
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:58
-msgid "No space left on device"
-msgstr "è£ç½®ä¸Šå·²ç„¡å¤šé¤˜ç©ºé–“"
+#: nis/nis_error.h:16
+msgid "Not master server for this domain"
+msgstr "並éžæ­¤ä¸€é ˜åŸŸçš„主伺æœå™¨"
-#. TRANS Invalid seek operation (such as on a pipe).
-#: stdio-common/../sysdeps/gnu/errlist.c:318
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:59
-msgid "Illegal seek"
-msgstr "ä¸åˆæ³•çš„æœå°‹"
+#: nis/nis_error.h:17
+msgid "Invalid object for operation"
+msgstr "ä¸é©ç”¨çš„é‹ä½œç‰©ä»¶"
-#. TRANS An attempt was made to modify something on a read-only file system.
-#: stdio-common/../sysdeps/gnu/errlist.c:327
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:60
-msgid "Read-only file system"
-msgstr "唯讀的檔案系統"
+#: nis/nis_error.h:18
+msgid "Malformed name, or illegal name"
+msgstr "奇怪的å字,或ä¸åˆæ³•çš„åå­—"
-#. TRANS Too many links; the link count of a single file would become too large.
-#. TRANS @code{rename} can cause this error if the file being renamed already has
-#. TRANS as many links as it can take (@pxref{Renaming Files}).
-#: stdio-common/../sysdeps/gnu/errlist.c:338
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:61
-msgid "Too many links"
-msgstr "太多連çµ"
+#: nis/nis_error.h:19
+msgid "Unable to create callback"
+msgstr "無法建立回å«è³‡æ–™ (callback)"
-#. TRANS Domain error; used by mathematical functions when an argument value does
-#. TRANS not fall into the domain over which the function is defined.
-#: stdio-common/../sysdeps/gnu/errlist.c:361
-msgid "Numerical argument out of domain"
-msgstr "數值åƒæ•¸çš„值超出範åœ"
+#: nis/nis_error.h:20
+msgid "Results sent to callback proc"
+msgstr "çµæžœå‚³é€çµ¦å›žå‚³ç¨‹åº"
-#. TRANS Range error; used by mathematical functions when the result value is
-#. TRANS not representable because of overflow or underflow.
-#: stdio-common/../sysdeps/gnu/errlist.c:371
-msgid "Numerical result out of range"
-msgstr "數值é‹ç®—çµæžœè¶…出範åœ"
+#: nis/nis_error.h:21
+msgid "Not found, no such name"
+msgstr "找ä¸åˆ°ï¼Œæ²’有此一å稱"
-#. TRANS Resource temporarily unavailable; the call might work if you try again
-#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
-#. TRANS they are always the same in the GNU C library.
-#. TRANS
-#. TRANS This error can happen in a few different situations:
-#. TRANS
-#. TRANS @itemize @bullet
-#. TRANS @item
-#. TRANS An operation that would block was attempted on an object that has
-#. TRANS non-blocking mode selected. Trying the same operation again will block
-#. TRANS until some external condition makes it possible to read, write, or
-#. TRANS connect (whatever the operation). You can use @code{select} to find out
-#. TRANS when the operation will be possible; @pxref{Waiting for I/O}.
-#. TRANS
-#. TRANS @strong{Portability Note:} In many older Unix systems, this condition
-#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
-#. TRANS different from @code{EAGAIN}. To make your program portable, you should
-#. TRANS check for both codes and treat them the same.
-#. TRANS
-#. TRANS @item
-#. TRANS A temporary resource shortage made an operation impossible. @code{fork}
-#. TRANS can return this error. It indicates that the shortage is expected to
-#. TRANS pass, so your program can try the call again later and it may succeed.
-#. TRANS It is probably a good idea to delay for a few seconds before trying it
-#. TRANS again, to allow time for other processes to release scarce resources.
-#. TRANS Such shortages are usually fairly serious and affect the whole system,
-#. TRANS so usually an interactive program should report the error to the user
-#. TRANS and return to its command loop.
-#. TRANS @end itemize
-#: stdio-common/../sysdeps/gnu/errlist.c:408
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:41
-msgid "Resource temporarily unavailable"
-msgstr "資æºæš«æ™‚無法å–å¾—"
+#: nis/nis_error.h:22
+msgid "Name/entry isn't unique"
+msgstr "å稱/é …ç›®ä¸æ˜¯å”¯ä¸€çš„"
-#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above).
-#. TRANS The values are always the same, on every operating system.
-#. TRANS
-#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
-#. TRANS separate error code.
-#: stdio-common/../sysdeps/gnu/errlist.c:421
-msgid "Operation would block"
-msgstr "æ“作將會暫åœ"
+#: nis/nis_error.h:23
+msgid "Modification failed"
+msgstr "修改失敗"
-#. TRANS An operation that cannot complete immediately was initiated on an object
-#. TRANS that has non-blocking mode selected. Some functions that must always
-#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return
-#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that
-#. TRANS the operation has begun and will take some time. Attempts to manipulate
-#. TRANS the object before the call completes return @code{EALREADY}. You can
-#. TRANS use the @code{select} function to find out when the pending operation
-#. TRANS has completed; @pxref{Waiting for I/O}.
-#: stdio-common/../sysdeps/gnu/errlist.c:437
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:180
-msgid "Operation now in progress"
-msgstr "æ“作正在處ç†ä¸­"
+#: nis/nis_error.h:24
+msgid "Database for table does not exist"
+msgstr "表格的資料庫ä¸å­˜åœ¨"
-#. TRANS An operation is already in progress on an object that has non-blocking
-#. TRANS mode selected.
-#: stdio-common/../sysdeps/gnu/errlist.c:447
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:179
-msgid "Operation already in progress"
-msgstr "此項æ“作已經在處ç†ç•¶ä¸­"
+#: nis/nis_error.h:25
+msgid "Entry/table type mismatch"
+msgstr "é …ç›®/表格型態ä¸ç¬¦"
-#. TRANS A file that isn't a socket was specified when a socket is required.
-#: stdio-common/../sysdeps/gnu/errlist.c:456
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:125
-msgid "Socket operation on non-socket"
-msgstr "Socket åœ¨éž socket 上é‹ä½œ"
+#: nis/nis_error.h:26
+msgid "Link points to illegal name"
+msgstr "連çµæŒ‡å‘ä¸åˆæ³•çš„å稱"
-#. TRANS The size of a message sent on a socket was larger than the supported
-#. TRANS maximum size.
-#: stdio-common/../sysdeps/gnu/errlist.c:466
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:127
-msgid "Message too long"
-msgstr "訊æ¯å¤ªé•·"
+#: nis/nis_error.h:27
+msgid "Partial success"
+msgstr "部分æˆåŠŸ"
-#. TRANS The socket type does not support the requested communications protocol.
-#: stdio-common/../sysdeps/gnu/errlist.c:475
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:128
-msgid "Protocol wrong type for socket"
-msgstr "socket çš„å”定錯誤型態"
+#: nis/nis_error.h:28
+msgid "Too many attributes"
+msgstr "太多的屬性"
-#. TRANS You specified a socket option that doesn't make sense for the
-#. TRANS particular protocol being used by the socket. @xref{Socket Options}.
-#: stdio-common/../sysdeps/gnu/errlist.c:485
-msgid "Protocol not available"
-msgstr "å”定ä¸å­˜åœ¨"
+#: nis/nis_error.h:29
+msgid "Error in RPC subsystem"
+msgstr "RPC å­ç³»çµ±éŒ¯èª¤"
-#. TRANS The socket domain does not support the requested communications protocol
-#. TRANS (perhaps because the requested protocol is completely invalid).
-#. TRANS @xref{Creating a Socket}.
-#: stdio-common/../sysdeps/gnu/errlist.c:496
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:150
-msgid "Protocol not supported"
-msgstr "å”定ä¸æ”¯æ´"
+#: nis/nis_error.h:30
+msgid "Missing or malformed attribute"
+msgstr "缺少或奇怪的屬性"
-#. TRANS The socket type is not supported.
-#: stdio-common/../sysdeps/gnu/errlist.c:505
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:151
-msgid "Socket type not supported"
-msgstr "Socket 型別ä¸æ”¯æ´"
+#: nis/nis_error.h:31
+msgid "Named object is not searchable"
+msgstr "有å稱的物件無法æœå°‹"
-#. TRANS The operation you requested is not supported. Some socket functions
-#. TRANS don't make sense for all types of sockets, and others may not be
-#. TRANS implemented for all communications protocols. In the GNU system, this
-#. TRANS error can happen for many calls when the object does not support the
-#. TRANS particular operation; it is a generic indication that the server knows
-#. TRANS nothing to do for that call.
-#: stdio-common/../sysdeps/gnu/errlist.c:519
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:78
-msgid "Operation not supported"
-msgstr "此項æ“作並ä¸è¢«æ”¯æ´"
+#: nis/nis_error.h:32
+msgid "Error while talking to callback proc"
+msgstr "在與 callback proc 通訊時錯誤"
-#. TRANS The socket communications protocol family you requested is not supported.
-#: stdio-common/../sysdeps/gnu/errlist.c:528
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:153
-msgid "Protocol family not supported"
-msgstr "å”定群組ä¸æ”¯æ´"
+#: nis/nis_error.h:33
+msgid "Non NIS+ namespace encountered"
+msgstr "é­é‡é•å NIS+ 命åè¦å‰‡çš„å稱"
-#. TRANS The address family specified for a socket is not supported; it is
-#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}.
-#: stdio-common/../sysdeps/gnu/errlist.c:538
-msgid "Address family not supported by protocol"
-msgstr "ä½å€æ—群ä¸è¢«å”定所支æ´"
+#: nis/nis_error.h:34
+msgid "Illegal object type for operation"
+msgstr "ä¸åˆæ³•çš„é‹ä½œç‰©ä»¶åž‹æ…‹"
-#. TRANS The requested socket address is already in use. @xref{Socket Addresses}.
-#: stdio-common/../sysdeps/gnu/errlist.c:547
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:155
-msgid "Address already in use"
-msgstr "ä½å€å·²ç¶“有在使用"
+#: nis/nis_error.h:35
+msgid "Passed object is not the same object on server"
+msgstr "經éŽçš„物件與伺æœå™¨ä¸Šçš„並ä¸ç›¸åŒ"
-#. TRANS The requested socket address is not available; for example, you tried
-#. TRANS to give a socket a name that doesn't match the local host name.
-#. TRANS @xref{Socket Addresses}.
-#: stdio-common/../sysdeps/gnu/errlist.c:558
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:156
-msgid "Cannot assign requested address"
-msgstr "無法指定所需的ä½å€"
+#: nis/nis_error.h:36
+msgid "Modify operation failed"
+msgstr "修改é‹ä½œæ–¹å¼å¤±æ•—"
-#. TRANS A socket operation failed because the network was down.
-#: stdio-common/../sysdeps/gnu/errlist.c:567
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:157
-msgid "Network is down"
-msgstr "網路åœæ“º"
+#: nis/nis_error.h:37
+msgid "Query illegal for named table"
+msgstr "å°è¨˜å表格的查詢並ä¸åˆæ³•"
-#. TRANS A socket operation failed because the subnet containing the remote host
-#. TRANS was unreachable.
-#: stdio-common/../sysdeps/gnu/errlist.c:577
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:158
-msgid "Network is unreachable"
-msgstr "無法接觸網路"
+#: nis/nis_error.h:38
+msgid "Attempt to remove a non-empty table"
+msgstr "嘗試刪除一個有內容的表格"
-#. TRANS A network connection was reset because the remote host crashed.
-#: stdio-common/../sysdeps/gnu/errlist.c:586
-msgid "Network dropped connection on reset"
-msgstr "在é‡è¨­æ™‚網路連線æ¼å¤±"
+#: nis/nis_error.h:39
+msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?"
+msgstr "å­˜å– NIS+ åŽŸå§‹å•Ÿå‹•æª”éŒ¯èª¤ã€‚æœ‰å®‰è£ NIS+ 嗎?"
-#. TRANS A network connection was aborted locally.
-#: stdio-common/../sysdeps/gnu/errlist.c:595
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:160
-msgid "Software caused connection abort"
-msgstr "軟體造æˆé€£ç·šä¸­æ–·"
+#: nis/nis_error.h:40
+msgid "Full resync required for directory"
+msgstr "目錄的 resync 請求已滿"
-#. TRANS A network connection was closed for reasons outside the control of the
-#. TRANS local host, such as by the remote machine rebooting or an unrecoverable
-#. TRANS protocol violation.
-#: stdio-common/../sysdeps/gnu/errlist.c:606
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:161
-msgid "Connection reset by peer"
-msgstr "連線被å°æ–¹é‡è¨­"
+#: nis/nis_error.h:41
+msgid "NIS+ operation failed"
+msgstr "NIS+ é‹ä½œå¤±æ•—"
-#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this
-#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the
-#. TRANS other from network operations.
-#: stdio-common/../sysdeps/gnu/errlist.c:617
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:162
-msgid "No buffer space available"
-msgstr "沒有å¯ç”¨çš„ç·©è¡ç©ºé–“了"
+#: nis/nis_error.h:42
+msgid "NIS+ service is unavailable or not installed"
+msgstr "NIS+ æœå‹™ç„¡æ³•å–得或者尚未安è£"
-#. TRANS You tried to connect a socket that is already connected.
-#. TRANS @xref{Connecting}.
-#: stdio-common/../sysdeps/gnu/errlist.c:627
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:163
-msgid "Transport endpoint is already connected"
-msgstr "傳輸的兩端已經完æˆé€£ç·šäº†"
+#: nis/nis_error.h:43
+msgid "Yes, 42 is the meaning of life"
+msgstr "是的,42 就是存在的æ„義"
-#. TRANS The socket is not connected to anything. You get this error when you
-#. TRANS try to transmit data over a socket, without first specifying a
-#. TRANS destination for the data. For a connectionless socket (for datagram
-#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead.
-#: stdio-common/../sysdeps/gnu/errlist.c:639
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:164
-msgid "Transport endpoint is not connected"
-msgstr "傳輸的兩端尚未連線"
+#: nis/nis_error.h:44
+msgid "Unable to authenticate NIS+ server"
+msgstr "ç„¡æ³•å° NIS+ 的伺æœç«¯é€²è¡Œèªè­‰"
-#. TRANS No default destination address was set for the socket. You get this
-#. TRANS error when you try to transmit data over a connectionless socket,
-#. TRANS without first specifying a destination for the data with @code{connect}.
-#: stdio-common/../sysdeps/gnu/errlist.c:650
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:126
-msgid "Destination address required"
-msgstr "需è¦ç›®æ¨™ä½å€"
+#: nis/nis_error.h:45
+msgid "Unable to authenticate NIS+ client"
+msgstr "ç„¡æ³•å° NIS+ 的請求端進行èªè­‰"
-#. TRANS The socket has already been shut down.
-#: stdio-common/../sysdeps/gnu/errlist.c:659
-msgid "Cannot send after transport endpoint shutdown"
-msgstr "無法在輸é€ç«¯é»žé—œé–‰å¾Œå‚³é€"
+#: nis/nis_error.h:46
+msgid "No file space on server"
+msgstr "伺æœå™¨ä¸Šæ²’有檔案空間"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:668
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:174
-msgid "Too many references: cannot splice"
-msgstr "太多的åƒè€ƒæŒ‡æ¨™: 無法連接"
+#: nis/nis_error.h:47
+msgid "Unable to create process on server"
+msgstr "無法在伺æœå™¨ä¸Šå»ºç«‹åŸ·è¡Œç¨‹åº"
-#. TRANS A socket operation with a specified timeout received no response during
-#. TRANS the timeout period.
-#: stdio-common/../sysdeps/gnu/errlist.c:678
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:175
-msgid "Connection timed out"
-msgstr "連線超éŽæ™‚é–“"
+#: nis/nis_error.h:48
+msgid "Master server busy, full dump rescheduled."
+msgstr "主è¦ä¼ºæœå™¨å¿™ç¢Œä¸­ï¼Œé‡æ–°é€²è¡Œå®Œæ•´è³‡æ–™å‚¾å¸æŽ’程。"
-#. TRANS A remote host refused to allow the network connection (typically because
-#. TRANS it is not running the requested service).
-#: stdio-common/../sysdeps/gnu/errlist.c:688
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:176
-msgid "Connection refused"
-msgstr "連線被拒絕"
+#: nis/nis_local_names.c:122
+#, c-format
+msgid "LOCAL entry for UID %d in directory %s not unique\n"
+msgstr "UID 為 %d 的項目在本地端中並ä¸æ˜¯å”¯ä¸€çš„ (在 %s 目錄裡é¢)\n"
-#. TRANS Too many levels of symbolic links were encountered in looking up a file name.
-#. TRANS This often indicates a cycle of symbolic links.
-#: stdio-common/../sysdeps/gnu/errlist.c:698
-msgid "Too many levels of symbolic links"
-msgstr "太多層級的符號連çµæª”"
+#: nis/nis_print.c:51
+msgid "UNKNOWN"
+msgstr "ä¸æ˜Ž"
-#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
-#. TRANS Files}) or host name too long (in @code{gethostname} or
-#. TRANS @code{sethostname}; @pxref{Host Identification}).
-#: stdio-common/../sysdeps/gnu/errlist.c:709
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:108
-msgid "File name too long"
-msgstr "檔å太長"
+#: nis/nis_print.c:109
+msgid "BOGUS OBJECT\n"
+msgstr "å‡çš„物件\n"
-#. TRANS The remote host for a requested network connection is down.
-#: stdio-common/../sysdeps/gnu/errlist.c:718
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:177
-msgid "Host is down"
-msgstr "é ç«¯ç³»çµ±å·²åœæ©Ÿäº†"
+#: nis/nis_print.c:112
+msgid "NO OBJECT\n"
+msgstr "沒有物件\n"
-#. TRANS The remote host for a requested network connection is not reachable.
-#: stdio-common/../sysdeps/gnu/errlist.c:727
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:178
-msgid "No route to host"
-msgstr "找ä¸åˆ°é€šå¾€è©²ä¸»æ©Ÿçš„路由路徑"
+#: nis/nis_print.c:115
+msgid "DIRECTORY\n"
+msgstr "目錄\n"
-#. TRANS Directory not empty, where an empty directory was expected. Typically,
-#. TRANS this error occurs when you are trying to delete a directory.
-#: stdio-common/../sysdeps/gnu/errlist.c:737
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:123
-msgid "Directory not empty"
-msgstr "目錄ä¸æ˜¯ç©ºçš„"
+#: nis/nis_print.c:118
+msgid "GROUP\n"
+msgstr "群組\n"
-#. TRANS This means that the per-user limit on new process would be exceeded by
-#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on
-#. TRANS the @code{RLIMIT_NPROC} limit.
-#: stdio-common/../sysdeps/gnu/errlist.c:748
-msgid "Too many processes"
-msgstr "太多的行程"
+#: nis/nis_print.c:121
+msgid "TABLE\n"
+msgstr "表格\n"
-#. TRANS The file quota system is confused because there are too many users.
-#. TRANS @c This can probably happen in a GNU system when using NFS.
-#: stdio-common/../sysdeps/gnu/errlist.c:758
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:124
-msgid "Too many users"
-msgstr "太多使用者"
+#: nis/nis_print.c:124
+msgid "ENTRY\n"
+msgstr "é …ç›®\n"
-#. TRANS The user's disk quota was exceeded.
-#: stdio-common/../sysdeps/gnu/errlist.c:767
-msgid "Disk quota exceeded"
-msgstr "硬碟 quota 滿了"
+#: nis/nis_print.c:127
+msgid "LINK\n"
+msgstr "連çµ\n"
-#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS
-#. TRANS system which is due to file system rearrangements on the server host.
-#. TRANS Repairing this condition usually requires unmounting and remounting
-#. TRANS the NFS file system on the local host.
-#: stdio-common/../sysdeps/gnu/errlist.c:779
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181
-msgid "Stale NFS file handle"
-msgstr "éŽèˆŠçš„ NFS 檔案控制碼"
+#: nis/nis_print.c:130
+msgid "PRIVATE\n"
+msgstr "ç§æœ‰çš„\n"
-#. TRANS An attempt was made to NFS-mount a remote file system with a file name that
-#. TRANS already specifies an NFS-mounted file.
-#. TRANS (This is an error on some operating systems, but we expect it to work
-#. TRANS properly on the GNU system, making this error code impossible.)
-#: stdio-common/../sysdeps/gnu/errlist.c:791
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:96
-msgid "Object is remote"
-msgstr "目標檔案ä½æ–¼é ç«¯"
+#: nis/nis_print.c:133
+msgid "(Unknown object)\n"
+msgstr "(未知的物件)\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:800
-msgid "RPC struct is bad"
-msgstr "RPC çµæ§‹æ˜¯å£žçš„"
+#: nis/nis_print.c:167
+#, c-format
+msgid "Name : `%s'\n"
+msgstr "å稱 : `%s'\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:809
-msgid "RPC version wrong"
-msgstr "RPC 版本錯誤"
+#: nis/nis_print.c:168
+#, c-format
+msgid "Type : %s\n"
+msgstr "æ ¼å¼ : %s\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:818
-msgid "RPC program not available"
-msgstr "RPC 程å¼ä¸å­˜åœ¨"
+#: nis/nis_print.c:173
+msgid "Master Server :\n"
+msgstr "主è¦ä¼ºæœå™¨ :\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:827
-msgid "RPC program version wrong"
-msgstr "RPC 程å¼ç‰ˆæœ¬éŒ¯èª¤"
+#: nis/nis_print.c:175
+msgid "Replicate :\n"
+msgstr "複製 :\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:836
-msgid "RPC bad procedure for program"
-msgstr "程å¼çš„ RPC 程åºéŒ¯èª¤"
+#: nis/nis_print.c:176
+#, c-format
+msgid "\tName : %s\n"
+msgstr "\tå稱 : %s\n"
-#. TRANS No locks available. This is used by the file locking facilities; see
-#. TRANS @ref{File Locks}. This error is never generated by the GNU system, but
-#. TRANS it can result from an operation to an NFS server running another
-#. TRANS operating system.
-#: stdio-common/../sysdeps/gnu/errlist.c:848
-msgid "No locks available"
-msgstr "無法鎖定資料"
+#: nis/nis_print.c:177
+msgid "\tPublic Key : "
+msgstr "\t公共鑰匙 : "
-#. TRANS Inappropriate file type or format. The file was the wrong type for the
-#. TRANS operation, or a data file had the wrong format.
-#. TRANS
-#. TRANS On some systems @code{chmod} returns this error if you try to set the
-#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}.
-#: stdio-common/../sysdeps/gnu/errlist.c:861
-msgid "Inappropriate file type or format"
-msgstr "ä¸å¸Œæœ›çš„檔案形態或格å¼"
+#: nis/nis_print.c:181
+msgid "None.\n"
+msgstr "ç„¡\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:870
-msgid "Authentication error"
-msgstr "鑑定錯誤"
+#: nis/nis_print.c:184
+#, c-format
+msgid "Diffie-Hellmann (%d bits)\n"
+msgstr "Diffie-Hellmann (%d ä½å…ƒ)\n"
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:879
-msgid "Need authenticator"
-msgstr "需è¦èªè­‰"
+#: nis/nis_print.c:189
+#, c-format
+msgid "RSA (%d bits)\n"
+msgstr "RSA (%d ä½å…ƒ)\n"
-#. TRANS Function not implemented. This indicates that the function called is
-#. TRANS not implemented at all, either in the C library itself or in the
-#. TRANS operating system. When you get this error, you can be sure that this
-#. TRANS particular function will always fail with @code{ENOSYS} unless you
-#. TRANS install a new version of the C library or the operating system.
-#: stdio-common/../sysdeps/gnu/errlist.c:892
-msgid "Function not implemented"
-msgstr "功能沒有實作"
+#: nis/nis_print.c:192
+msgid "Kerberos.\n"
+msgstr "Kerberos.\n"
-#. TRANS Not supported. A function returns this error when certain parameter
-#. TRANS values are valid, but the functionality they request is not available.
-#. TRANS This can mean that the function does not implement a particular command
-#. TRANS or option value or flag bit at all. For functions that operate on some
-#. TRANS object given in a parameter, such as a file descriptor or a port, it
-#. TRANS might instead mean that only @emph{that specific object} (file
-#. TRANS descriptor, port, etc.) is unable to support the other parameters given;
-#. TRANS different file descriptors might support different ranges of parameter
-#. TRANS values.
-#. TRANS
-#. TRANS If the entire function is not available at all in the implementation,
-#. TRANS it returns @code{ENOSYS} instead.
-#: stdio-common/../sysdeps/gnu/errlist.c:912
-msgid "Not supported"
-msgstr "並未支æ´"
+#: nis/nis_print.c:195
+#, c-format
+msgid "Unknown (type = %d, bits = %d)\n"
+msgstr "未知的 (åž‹æ…‹ = %d,ä½å…ƒ = %d)\n"
-#. TRANS While decoding a multibyte character the function came along an invalid
-#. TRANS or an incomplete sequence of bytes or the given wide character is invalid.
-#: stdio-common/../sysdeps/gnu/errlist.c:922
-msgid "Invalid or incomplete multibyte or wide character"
-msgstr "ä¸é©ç”¨æˆ–ä¸å®Œæ•´çš„多ä½å…ƒçµ„字元或寬字元"
+#: nis/nis_print.c:206
+#, c-format
+msgid "\tUniversal addresses (%u)\n"
+msgstr "\t絕å°ä½å€ (%u)\n"
-#. TRANS In the GNU system, servers supporting the @code{term} protocol return
-#. TRANS this error for certain operations when the caller is not in the
-#. TRANS foreground process group of the terminal. Users do not usually see this
-#. TRANS error because functions such as @code{read} and @code{write} translate
-#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control},
-#. TRANS for information on process groups and these signals.
-#: stdio-common/../sysdeps/gnu/errlist.c:936
-msgid "Inappropriate operation for background process"
-msgstr "ä¸å¸Œæœ›çš„背景行程é‹ä½œ"
+#: nis/nis_print.c:228
+msgid "Time to live : "
+msgstr "存在時間 : "
-#. TRANS In the GNU system, opening a file returns this error when the file is
-#. TRANS translated by a program and the translator program dies while starting
-#. TRANS up, before it has connected to the file.
-#: stdio-common/../sysdeps/gnu/errlist.c:947
-msgid "Translator died"
-msgstr "中介程å¼å·²ç¶“çµæŸ"
+#: nis/nis_print.c:230
+msgid "Default Access rights :\n"
+msgstr "é è¨­çš„å­˜å–æ¬Šé™ :\n"
-#. TRANS The experienced user will know what is wrong.
-#. TRANS @c This error code is a joke. Its perror text is part of the joke.
-#. TRANS @c Don't change it.
-#: stdio-common/../sysdeps/gnu/errlist.c:958
-msgid "?"
-msgstr "?"
+#: nis/nis_print.c:239
+#, c-format
+msgid "\tType : %s\n"
+msgstr "\t型別 : %s\n"
-#. TRANS You did @strong{what}?
-#: stdio-common/../sysdeps/gnu/errlist.c:967
-msgid "You really blew it this time"
-msgstr "這次真的被您打敗了"
+#: nis/nis_print.c:240
+msgid "\tAccess rights: "
+msgstr "\tå­˜å–權é™: "
-# This is error EIEIO, errno 104
-#
-# - Macro: int EIEIO
-# Go home and have a glass of warm, dairy-fresh milk.
-#
-# The following messages were copied & pasted
-# from es.po by Santiago Vila Doncel <sanvila@unex.es>.
-#
-# <es.po>
-# ç©Œu diablos es esto?, esperemos a tener las fuentes
-# estupendo, este error parece mostrarse en dos ocasiones
-# - Macro: int EIEIO
-# Go home and have a glass of warm, dairy-fresh milk.
-# Jochen tambien lo traduce as. em
-#
-# Okay. Since you are dying to know, I'll tell you.
-# This is a joke, obviously. There is a children's song which begins,
-# "Old McDonald had a farm, e-i-e-i-o." Every time I see the (real)
-# errno macro EIO, I think about that song. Probably most of my
-# compatriots who program on Unix do, too. One of them must have stayed
-# up a little too late one night and decided to add it to Hurd or Glibc.
-# Whoever did it should be castigated, but it made me laugh.
-# --jtobey@channel1.com
-#
-# "bought the farm" means "died". -jtobey
-#
-# Bueno, pues despu廥 de pensarlo mucho, he seguido el ejemplo de la
-# traduccié® francesa (traduccié® libre). sv
-# </es.po>
-#
-# 簡單的說,兒歌 "å”è€å…ˆç”Ÿæœ‰å¡Šåœ°...",然後呢?? ;-p
-#
-#. TRANS Go home and have a glass of warm, dairy-fresh milk.
-#: stdio-common/../sysdeps/gnu/errlist.c:976
-msgid "Computer bought the farm"
-msgstr "這å°é›»è…¦è²·äº†ä¸€å¡Šåœ°å›‰"
+#: nis/nis_print.c:254
+msgid "Group Flags :"
+msgstr "群組旗標 :"
-#. TRANS This error code has no purpose.
-#: stdio-common/../sysdeps/gnu/errlist.c:985
-msgid "Gratuitous error"
-msgstr "無故的錯誤"
+#: nis/nis_print.c:257
+msgid ""
+"\n"
+"Group Members :\n"
+msgstr ""
+"\n"
+"群組的æˆå“¡ :\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:993
-msgid "Bad message"
-msgstr "錯誤的訊æ¯"
+#: nis/nis_print.c:269
+#, c-format
+msgid "Table Type : %s\n"
+msgstr "è¡¨æ ¼å½¢å¼ : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1001
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:66
-msgid "Identifier removed"
-msgstr "識別符號移除"
+#: nis/nis_print.c:270
+#, c-format
+msgid "Number of Columns : %d\n"
+msgstr "欄ä½çš„數目 : %d\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1009
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:104
-msgid "Multihop attempted"
-msgstr "嘗試 Multihop"
+#: nis/nis_print.c:271
+#, c-format
+msgid "Character Separator : %c\n"
+msgstr "字元分隔號 : %c\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1017
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:91
-msgid "No data available"
-msgstr "沒有å¯ç”¨çš„資料"
+#: nis/nis_print.c:272
+#, c-format
+msgid "Search Path : %s\n"
+msgstr "æœå°‹è·¯å¾‘ : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1025
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:97
-msgid "Link has been severed"
-msgstr "連çµå·²æœ‰æœå‹™"
+#: nis/nis_print.c:273
+msgid "Columns :\n"
+msgstr "行 :\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1033
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:65
-msgid "No message of desired type"
-msgstr "沒有符åˆéœ€æ±‚æ ¼å¼çš„訊æ¯"
+#: nis/nis_print.c:276
+#, c-format
+msgid "\t[%d]\tName : %s\n"
+msgstr "\t[%d]\tå稱 : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1041
-msgid "Out of streams resources"
-msgstr "所有資料æµçš„資æºéƒ½å·²ç”¨ç›¡"
+#: nis/nis_print.c:278
+msgid "\t\tAttributes : "
+msgstr "\t\t屬性 : "
-#: stdio-common/../sysdeps/gnu/errlist.c:1049
-msgid "Device not a stream"
-msgstr "è£ç½®ä¸æ˜¯è³‡æ–™æµ"
+#: nis/nis_print.c:280
+msgid "\t\tAccess Rights : "
+msgstr "\t\tå­˜å–æ¬Šé™ : "
-#: stdio-common/../sysdeps/gnu/errlist.c:1057
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:109
-msgid "Value too large for defined data type"
-msgstr "有定義的資料型別值太大"
+#: nis/nis_print.c:290
+msgid "Linked Object Type : "
+msgstr "連çµçš„物件型態 : "
-#: stdio-common/../sysdeps/gnu/errlist.c:1065
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:101
-msgid "Protocol error"
-msgstr "å”定錯誤"
+#: nis/nis_print.c:292
+#, c-format
+msgid "Linked to : %s\n"
+msgstr "連çµåˆ° : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1073
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:92
-msgid "Timer expired"
-msgstr "計時器已éŽæ™‚å–消了"
+#: nis/nis_print.c:302
+#, c-format
+msgid "\tEntry data of type %s\n"
+msgstr "\t型別為 %s 的項目資料\n"
-#. TRANS Operation canceled; an asynchronous operation was canceled before it
-#. TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel},
-#. TRANS the normal result is for the operations affected to complete with this
-#. TRANS error; @pxref{Cancel AIO Operations}.
-#: stdio-common/../sysdeps/gnu/errlist.c:1085
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:77
-msgid "Operation canceled"
-msgstr "æ“作已被å–消"
+#: nis/nis_print.c:305
+#, c-format
+msgid "\t[%u] - [%u bytes] "
+msgstr "\t[%u] - [%u ä½å…ƒçµ„] "
-#: stdio-common/../sysdeps/gnu/errlist.c:1093
-msgid "Interrupted system call should be restarted"
-msgstr "中斷的系統呼å«å¿…é ˆé‡æ–°å•Ÿå‹•"
+#: nis/nis_print.c:308
+msgid "Encrypted data\n"
+msgstr "編碼資料\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1101
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:67
-msgid "Channel number out of range"
-msgstr "通é“號碼超出範åœ"
+#: nis/nis_print.c:310
+msgid "Binary data\n"
+msgstr "二進ä½è³‡æ–™\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1109
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:68
-msgid "Level 2 not synchronized"
-msgstr "層級 2 沒有åŒæ­¥"
+#: nis/nis_print.c:326
+#, c-format
+msgid "Object Name : %s\n"
+msgstr "物件å稱 : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1117
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:69
-msgid "Level 3 halted"
-msgstr "層級 3 åœæ­¢"
+#: nis/nis_print.c:327
+#, c-format
+msgid "Directory : %s\n"
+msgstr "目錄 : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1125
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:70
-msgid "Level 3 reset"
-msgstr "層級 3 é‡è¨­"
+#: nis/nis_print.c:328
+#, c-format
+msgid "Owner : %s\n"
+msgstr "æ“有者 : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1133
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:71
-msgid "Link number out of range"
-msgstr "連çµæ•¸ç›®è¶…éŽç¯„åœ"
+#: nis/nis_print.c:329
+#, c-format
+msgid "Group : %s\n"
+msgstr "群組 : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1141
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:72
-msgid "Protocol driver not attached"
-msgstr "å”定的驅動程å¼æœªé€£æŽ¥"
+#: nis/nis_print.c:330
+msgid "Access Rights : "
+msgstr "å­˜å–æ¬Šé™ : "
-#: stdio-common/../sysdeps/gnu/errlist.c:1149
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:73
-msgid "No CSI structure available"
-msgstr "沒有å¯ç”¨çš„ CSI çµæ§‹äº†"
+#: nis/nis_print.c:332
+#, c-format
+msgid ""
+"\n"
+"Time to Live : "
+msgstr ""
+"\n"
+"存在的時間 : "
-#: stdio-common/../sysdeps/gnu/errlist.c:1157
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:74
-msgid "Level 2 halted"
-msgstr "層級 2 åœæ­¢"
+#: nis/nis_print.c:335
+#, c-format
+msgid "Creation Time : %s"
+msgstr "產生時間 : %s"
-#: stdio-common/../sysdeps/gnu/errlist.c:1165
-msgid "Invalid exchange"
-msgstr "ä¸é©ç”¨çš„交æ›"
+#: nis/nis_print.c:337
+#, c-format
+msgid "Mod. Time : %s"
+msgstr "修改時間 : %s"
-#: stdio-common/../sysdeps/gnu/errlist.c:1173
-msgid "Invalid request descriptor"
-msgstr "ä¸é©ç”¨çš„請求敘述項"
+#: nis/nis_print.c:338
+msgid "Object Type : "
+msgstr "物件型別 : "
-#: stdio-common/../sysdeps/gnu/errlist.c:1181
-msgid "Exchange full"
-msgstr "交æ›å·²å……足"
+#: nis/nis_print.c:358
+#, c-format
+msgid " Data Length = %u\n"
+msgstr " 資料長度 = %u\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1189
-msgid "No anode"
-msgstr "沒有陽極"
+#: nis/nis_print.c:372
+#, c-format
+msgid "Status : %s\n"
+msgstr "狀態 : %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1197
-msgid "Invalid request code"
-msgstr "ä¸é©ç”¨çš„請求碼"
+#: nis/nis_print.c:373
+#, c-format
+msgid "Number of objects : %u\n"
+msgstr "物件的數目 : %u\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1205
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:85
-msgid "Invalid slot"
-msgstr "ä¸é©ç”¨çš„ slot"
+#: nis/nis_print.c:377
+#, c-format
+msgid "Object #%d:\n"
+msgstr "目的檔 #%d:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1213
-msgid "File locking deadlock error"
-msgstr "檔案鎖定åœé “錯誤"
+#: nis/nis_print_group_entry.c:117
+#, c-format
+msgid "Group entry for \"%s.%s\" group:\n"
+msgstr "群組 \"%s.%s\" 群組項目:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1221
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:87
-msgid "Bad font file format"
-msgstr "錯誤的字型檔格å¼"
+#: nis/nis_print_group_entry.c:125
+msgid " Explicit members:\n"
+msgstr " 明確的æˆå“¡:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1229
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:94
-msgid "Machine is not on the network"
-msgstr "機器ä¸åœ¨ç¶²è·¯ä¸­"
+#: nis/nis_print_group_entry.c:130
+msgid " No explicit members\n"
+msgstr " 沒有明確的æˆå“¡\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1237
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:95
-msgid "Package not installed"
-msgstr "套件並未安è£"
+#: nis/nis_print_group_entry.c:133
+msgid " Implicit members:\n"
+msgstr " ä¸æ˜Žç¢ºçš„æˆå“¡:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1245
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:98
-msgid "Advertise error"
-msgstr "通知錯誤"
+#: nis/nis_print_group_entry.c:138
+msgid " No implicit members\n"
+msgstr " 沒有ä¸æ˜Žç¢ºçš„æˆå“¡\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1253
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:99
-msgid "Srmount error"
-msgstr "Srmount 錯誤"
+#: nis/nis_print_group_entry.c:141
+msgid " Recursive members:\n"
+msgstr " éžè¿´çš„æˆå“¡:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1261
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:100
-msgid "Communication error on send"
-msgstr "在傳é€æ™‚通訊錯誤"
+#: nis/nis_print_group_entry.c:146
+msgid " No recursive members\n"
+msgstr " 沒有éžè¿´çš„æˆå“¡\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1269
-msgid "RFS specific error"
-msgstr "RFS 特定錯誤"
+#: nis/nis_print_group_entry.c:149
+msgid " Explicit nonmembers:\n"
+msgstr " 明確的éžæˆå“¡:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1277
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:110
-msgid "Name not unique on network"
-msgstr "網路上的å稱ä¸æ˜¯å”¯ä¸€çš„"
+#: nis/nis_print_group_entry.c:154
+msgid " No explicit nonmembers\n"
+msgstr " 沒有明確的éžæˆå“¡\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1285
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:111
-msgid "File descriptor in bad state"
-msgstr "檔案敘述項處於錯誤狀態"
+#: nis/nis_print_group_entry.c:157
+msgid " Implicit nonmembers:\n"
+msgstr " ä¸æ˜Žç¢ºçš„éžæˆå“¡:\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1293
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:112
-msgid "Remote address changed"
-msgstr "é ç«¯ä½å€æ”¹è®Šäº†"
+#: nis/nis_print_group_entry.c:162
+msgid " No implicit nonmembers\n"
+msgstr " 沒有ä¸æ˜Žç¢ºçš„éžæˆå“¡\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1301
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:113
-msgid "Can not access a needed shared library"
-msgstr "無法存å–所需的分享函å¼åº«"
+#: nis/nis_print_group_entry.c:165
+msgid " Recursive nonmembers:\n"
+msgstr " éžè¿´çš„éžæˆå“¡ï¼š\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1309
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:114
-msgid "Accessing a corrupted shared library"
-msgstr "å­˜å–一個毀掉的分享函å¼åº«"
+#: nis/nis_print_group_entry.c:170
+msgid " No recursive nonmembers\n"
+msgstr " 沒有éžè¿´çš„éžæˆå“¡\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1317
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:115
-msgid ".lib section in a.out corrupted"
-msgstr "a.out 中 .lib 節å€æ¯€æŽ‰äº†"
+#: nis/nss_nisplus/nisplus-publickey.c:101
+#: nis/nss_nisplus/nisplus-publickey.c:183
+#, c-format
+msgid "DES entry for netname %s not unique\n"
+msgstr "netname %s çš„ DES 項目並ä¸å”¯ä¸€\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1325
-msgid "Attempting to link in too many shared libraries"
-msgstr "嘗試去連çµå¤ªå¤šçš„分享資料庫"
+#: nis/nss_nisplus/nisplus-publickey.c:220
+#, c-format
+msgid "netname2user: missing group id list in `%s'"
+msgstr "netname2user:在「%sã€ä¸­ç¼ºå°‘群組識別號清單"
-#: stdio-common/../sysdeps/gnu/errlist.c:1333
-msgid "Cannot exec a shared library directly"
-msgstr "ä¸èƒ½ç›´æŽ¥åŸ·è¡Œä¸€å€‹åˆ†äº«å‡½å¼åº«"
+#: nis/nss_nisplus/nisplus-publickey.c:302
+#: nis/nss_nisplus/nisplus-publickey.c:308
+#: nis/nss_nisplus/nisplus-publickey.c:373
+#: nis/nss_nisplus/nisplus-publickey.c:382
+#, c-format
+msgid "netname2user: (nis+ lookup): %s\n"
+msgstr "netname2user: (nis+ æœå°‹): %s\n"
-#: stdio-common/../sysdeps/gnu/errlist.c:1341
-msgid "Streams pipe error"
-msgstr "資料æµç®¡ç·šéŒ¯èª¤"
+#: nis/nss_nisplus/nisplus-publickey.c:321
+#, c-format
+msgid "netname2user: DES entry for %s in directory %s not unique"
+msgstr "netname2user: %s çš„ DES 項目在 %s 目錄下並ä¸æ˜¯å”¯ä¸€çš„"
-#: stdio-common/../sysdeps/gnu/errlist.c:1349
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:165
-msgid "Structure needs cleaning"
-msgstr "çµæ§‹éœ€è¦æ¸…ç†"
+#: nis/nss_nisplus/nisplus-publickey.c:339
+#, c-format
+msgid "netname2user: principal name `%s' too long"
+msgstr "netname2user: 主è¦å稱 `%s' 太長了"
-#: stdio-common/../sysdeps/gnu/errlist.c:1357
-msgid "Not a XENIX named type file"
-msgstr "ä¸¦éž XENIX 命åæ ¼å¼çš„檔案"
+#: nis/nss_nisplus/nisplus-publickey.c:395
+#, c-format
+msgid "netname2user: LOCAL entry for %s in directory %s not unique"
+msgstr "netname2user: %s 的本地端項目在 %s 目錄下並ä¸æ˜¯å”¯ä¸€çš„"
-#: stdio-common/../sysdeps/gnu/errlist.c:1365
-msgid "No XENIX semaphores available"
-msgstr "沒有å¯ç”¨çš„ XENIX 信號標誌了"
+#: nis/nss_nisplus/nisplus-publickey.c:402
+msgid "netname2user: should not have uid 0"
+msgstr "netname2user: ä¸èƒ½æœ‰ä½¿ç”¨è€… id 為 0 的情æ³"
-#: stdio-common/../sysdeps/gnu/errlist.c:1373
-msgid "Is a named type file"
-msgstr "是個有å字形態的檔案"
+#: nis/ypclnt.c:836
+msgid "Request arguments bad"
+msgstr "必須引數有錯誤"
-#: stdio-common/../sysdeps/gnu/errlist.c:1381
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:170
-msgid "Remote I/O error"
-msgstr "é ç«¯è¼¸å‡ºå…¥éŒ¯èª¤"
+#: nis/ypclnt.c:839
+msgid "RPC failure on NIS operation"
+msgstr "NIS é‹ä½œ RPC 失敗"
-#: stdio-common/../sysdeps/gnu/errlist.c:1389
-msgid "No medium found"
-msgstr "找ä¸åˆ°åª’é«”"
+#: nis/ypclnt.c:842
+msgid "Can't bind to server which serves this domain"
+msgstr "無法與æœå‹™æ–¼æ­¤ç¶²åŸŸçš„伺æœå™¨è¯ç¹«"
-#: stdio-common/../sysdeps/gnu/errlist.c:1397
-msgid "Wrong medium type"
-msgstr "錯誤的媒介形態"
+#: nis/ypclnt.c:845
+msgid "No such map in server's domain"
+msgstr "在伺æœå™¨çš„領域資料中找ä¸åˆ°æ­¤ä¸€å°æ˜ è¡¨"
-#: stdio-common/../sysdeps/unix/siglist.c:26
-msgid "Signal 0"
-msgstr "訊號 0"
+#: nis/ypclnt.c:848
+msgid "No such key in map"
+msgstr "在å°æ˜ è¡¨ä¸­æ²’有此一éµå€¼"
-#: stdio-common/../sysdeps/unix/siglist.c:32
-msgid "IOT trap"
-msgstr "IOT 陷阱"
+#: nis/ypclnt.c:851
+msgid "Internal NIS error"
+msgstr "內部 NIS 錯誤"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:30
-msgid "Error 0"
-msgstr "第 0 號錯誤"
+#: nis/ypclnt.c:854
+msgid "Local resource allocation failure"
+msgstr "å€åŸŸè³‡æºé…置失敗"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:31
-#: nis/nis_error.c:40
-msgid "Not owner"
-msgstr "並éžæ“有者"
+#: nis/ypclnt.c:857
+msgid "No more records in map database"
+msgstr "在å°æ˜ è¡¨è³‡æ–™åº«ä¸­æ²’有其他紀錄了"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:35
-msgid "I/O error"
-msgstr "I/O 錯誤"
+#: nis/ypclnt.c:860
+msgid "Can't communicate with portmapper"
+msgstr "無法與 portmapper 通訊"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:37
-msgid "Arg list too long"
-msgstr "Arg 串列太長"
+#: nis/ypclnt.c:863
+msgid "Can't communicate with ypbind"
+msgstr "無法與 ypbind 通訊"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:39
-msgid "Bad file number"
-msgstr "錯誤的檔案號碼"
+#: nis/ypclnt.c:866
+msgid "Can't communicate with ypserv"
+msgstr "無法與 ypserv 通訊"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:42
-msgid "Not enough space"
-msgstr "空間ä¸è¶³"
+#: nis/ypclnt.c:869
+msgid "Local domain name not set"
+msgstr "å€åŸŸç¶²åŸŸå稱沒有設定"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:46
-msgid "Device busy"
-msgstr "è£ç½®å¿™ç¢Œä¸­"
+#: nis/ypclnt.c:872
+msgid "NIS map database is bad"
+msgstr "NIS å°æ˜ è³‡æ–™åº«æ˜¯å£žçš„"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:48
-msgid "Cross-device link"
-msgstr "è£ç½®ä¹‹é–“的連接"
+#: nis/ypclnt.c:875
+msgid "NIS client/server version mismatch - can't supply service"
+msgstr "NIS 請求端/伺æœç«¯ç‰ˆæœ¬ä¸ç¬¦åˆ - 無法æä¾›æœå‹™"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:53
-msgid "File table overflow"
-msgstr "檔案表已滿"
+#: nis/ypclnt.c:881
+msgid "Database is busy"
+msgstr "資料庫正在忙碌"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:63
-msgid "Argument out of domain"
-msgstr "引數超éŽç¯„åœ"
+#: nis/ypclnt.c:884
+msgid "Unknown NIS error code"
+msgstr "未知的 NIS 錯誤碼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:64
-msgid "Result too large"
-msgstr "çµæžœå¤ªå¤§äº†"
+#: nis/ypclnt.c:924
+msgid "Internal ypbind error"
+msgstr "內部 ypbind 錯誤"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:75
-msgid "Deadlock situation detected/avoided"
-msgstr "åµæ¸¬/é¿å…åœé “狀態"
+#: nis/ypclnt.c:927
+msgid "Domain not bound"
+msgstr "網域找ä¸åˆ°"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:76
-msgid "No record locks available"
-msgstr "沒有å¯ç”¨çš„紀錄鎖了"
+#: nis/ypclnt.c:930
+msgid "System resource allocation failure"
+msgstr "系統資æºé…置失敗"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:79
-msgid "Disc quota exceeded"
-msgstr "Disc quota 滿了"
+#: nis/ypclnt.c:933
+msgid "Unknown ypbind error"
+msgstr "未知的 ypbind 錯誤"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:80
-msgid "Bad exchange descriptor"
-msgstr "錯誤的交æ›æ•˜è¿°é …"
+#: nis/ypclnt.c:974
+msgid "yp_update: cannot convert host to netname\n"
+msgstr "yp_update: 無法轉æ›ä¸»æ©Ÿçš„網路å稱\n"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:81
-msgid "Bad request descriptor"
-msgstr "錯誤的請求敘述項"
+#: nis/ypclnt.c:992
+msgid "yp_update: cannot get server address\n"
+msgstr "yp_update: 無法å–得伺æœå™¨ä½å€\n"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:82
-msgid "Message tables full"
-msgstr "訊æ¯è¡¨æ ¼å·²æ»¿"
+#: nscd/aicache.c:83 nscd/hstcache.c:492
+#, c-format
+msgid "Haven't found \"%s\" in hosts cache!"
+msgstr "尚未在 hosts å¿«å–中找到 \"%s\"!"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:83
-msgid "Anode table overflow"
-msgstr "Anode 表格溢出"
+#: nscd/aicache.c:85 nscd/hstcache.c:494
+#, c-format
+msgid "Reloading \"%s\" in hosts cache!"
+msgstr "é‡æ–°è¼‰å…¥ã€Œ%sã€æ–¼ä¸»æ©Ÿå¿«å–ï¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:84
-msgid "Bad request code"
-msgstr "錯誤的請求訊號編碼"
+#: nscd/cache.c:150
+#, c-format
+msgid "add new entry \"%s\" of type %s for %s to cache%s"
+msgstr "加入新的項目「%sã€çš„åž‹æ…‹ %s 用於 %s 到 cache%s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:86
-msgid "File locking deadlock"
-msgstr "檔案鎖定åœé “"
+#: nscd/cache.c:152
+msgid " (first)"
+msgstr " (å…ˆ)"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:88
-msgid "Error 58"
-msgstr "第 58 號錯誤"
+#: nscd/cache.c:276 nscd/connections.c:861
+#, c-format
+msgid "cannot stat() file `%s': %s"
+msgstr "無法 stat() 檔案 `%s': %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:89
-msgid "Error 59"
-msgstr "第 59 號錯誤"
+#: nscd/cache.c:318
+#, c-format
+msgid "pruning %s cache; time %ld"
+msgstr "pruning %s å¿«å–;時間 %ld"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:90
-msgid "Not a stream device"
-msgstr "並éžè³‡æ–™æµè£ç½®"
+#: nscd/cache.c:347
+#, c-format
+msgid "considering %s entry \"%s\", timeout %<PRIu64>"
+msgstr "èªç‚ºä¸­ %s 項目「%sã€ï¼Œé€¾æ™‚ %<PRIu64>"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:93
-msgid "Out of stream resources"
-msgstr "資料æµè³‡æºç”¨ç›¡"
+#: nscd/connections.c:565
+#, c-format
+msgid "invalid persistent database file \"%s\": %s"
+msgstr "無效的永久性的資料庫檔案「%sã€ï¼š%s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:102
-msgid "Error 72"
-msgstr "第 72 號錯誤"
+#: nscd/connections.c:573
+msgid "uninitialized header"
+msgstr "未起始的標頭"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:103
-msgid "Error 73"
-msgstr "第 73 號錯誤"
+#: nscd/connections.c:578
+msgid "header size does not match"
+msgstr "é é¦–大å°ä¸å»åˆ"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:105
-msgid "Error 75"
-msgstr "第 75 號錯誤"
+#: nscd/connections.c:588
+msgid "file size does not match"
+msgstr "檔案大å°ä¸å»åˆ"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:106
-msgid "Error 76"
-msgstr "第 76 號錯誤"
+#: nscd/connections.c:605
+msgid "verification failed"
+msgstr "查核失敗"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:107
-msgid "Not a data message"
-msgstr "並ä¸æ˜¯ä¸€å€‹è³‡æ–™è¨Šæ¯"
+#: nscd/connections.c:619
+#, c-format
+msgid "suggested size of table for database %s larger than the persistent database's table"
+msgstr "用於資料庫 %s 的建議表格大å°å¤§æ–¼æ°¸ä¹…性的資料庫表格"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:116
-msgid "Attempting to link in more shared libraries than system limit"
-msgstr "嘗試去連çµè¶…éŽç³»çµ±ä¸Šé™çš„分享資料庫"
+#: nscd/connections.c:630 nscd/connections.c:715
+#, c-format
+msgid "cannot create read-only descriptor for \"%s\"; no mmap"
+msgstr "無法建立用於「%sã€çš„唯讀æ述元;無 mmap"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:117
-msgid "Can not exec a shared library directly"
-msgstr "無法直接執行分享函å¼åº«"
+#: nscd/connections.c:646
+#, c-format
+msgid "cannot access '%s'"
+msgstr "無法存å–『%sã€"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:118
-msgid "Illegal byte sequence"
-msgstr "ä¸åˆæ³•çš„ä½å…ƒçµ„åºåˆ—"
+#: nscd/connections.c:694
+#, c-format
+msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart"
+msgstr "資料庫用於 %s å·²æ壞或åŒæ­¥åœ°ä½¿ç”¨ï¼›ç§»é™¤ %s 手動地如果必è¦çš„話和é‡æ–°å•Ÿå‹•"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:119
-msgid "Operation not applicable"
-msgstr "此項æ“作並ä¸é©ç•¶"
+#: nscd/connections.c:701
+#, c-format
+msgid "cannot create %s; no persistent database used"
+msgstr "無法建立 %s; 未使用永久性的資料庫"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:120
-msgid "Number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS"
-msgstr "尋找路徑å稱時é­é‡çš„符號連çµæ•¸ç›®è¶…éŽ MAXSYMLINKS 裡é¢å®šç¾©çš„最大值"
+#: nscd/connections.c:704
+#, c-format
+msgid "cannot create %s; no sharing possible"
+msgstr "無法建立 %s; ä¸å¯èƒ½å…±äº«"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:121
-msgid "Error 91"
-msgstr "第 91 號錯誤"
+#: nscd/connections.c:775
+#, c-format
+msgid "cannot write to database file %s: %s"
+msgstr "無法寫入資料庫檔案 %s: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:122
-msgid "Error 92"
-msgstr "第 92 號錯誤"
+#: nscd/connections.c:814
+#, c-format
+msgid "cannot set socket to close on exec: %s; disabling paranoia mode"
+msgstr "無法設定通訊端到關閉於 exec:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:129
-msgid "Option not supported by protocol"
-msgstr "通訊å”定並ä¸æ”¯æ´æ­¤åƒæ•¸"
+#: nscd/connections.c:897
+#, c-format
+msgid "cannot open socket: %s"
+msgstr "無法開啟 socket: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:130
-msgid "Error 100"
-msgstr "第 100 號錯誤"
+#: nscd/connections.c:917
+#, c-format
+msgid "cannot change socket to nonblocking mode: %s"
+msgstr "無法變更通訊端為éžå€å¡Šæ¨¡å¼ï¼š%s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:131
-msgid "Error 101"
-msgstr "第 101 號錯誤"
+#: nscd/connections.c:925
+#, c-format
+msgid "cannot set socket to close on exec: %s"
+msgstr "無法設定通訊端於 exec:%s 時關閉"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:132
-msgid "Error 102"
-msgstr "第 102 號錯誤"
+#: nscd/connections.c:938
+#, c-format
+msgid "cannot enable socket to accept connections: %s"
+msgstr "無法開啟 socket 來接å—連線: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:133
-msgid "Error 103"
-msgstr "第 103 號錯誤"
+#: nscd/connections.c:1039
+#, c-format
+msgid "provide access to FD %d, for %s"
+msgstr "æ供存å–到 FD %d, 用於 %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:134
-msgid "Error 104"
-msgstr "第 104 號錯誤"
+#: nscd/connections.c:1051
+#, c-format
+msgid "cannot handle old request version %d; current version is %d"
+msgstr "ä¸èƒ½è™•ç†èˆŠ %d 版的請求;目å‰ä½¿ç”¨çš„版本是 %d"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:135
-msgid "Error 105"
-msgstr "第 105 號錯誤"
+#: nscd/connections.c:1073
+#, c-format
+msgid "request from %ld not handled due to missing permission"
+msgstr "由於缺少權é™è€Œç„¡æ³•è™•ç†ä¾†è‡ª %ld çš„è¦æ±‚"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:136
-msgid "Error 106"
-msgstr "第 106 號錯誤"
+#: nscd/connections.c:1078
+#, c-format
+msgid "request from '%s' [%ld] not handled due to missing permission"
+msgstr "由於缺少權é™è€Œç„¡æ³•è™•ç†ä¾†è‡ª '%s' [%ld] çš„è¦æ±‚"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:137
-msgid "Error 107"
-msgstr "第 107 號錯誤"
+#: nscd/connections.c:1083
+msgid "request not handled due to missing permission"
+msgstr "è¦æ±‚無法控柄的由於缺少權é™"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:138
-msgid "Error 108"
-msgstr "第 108 號錯誤"
+#: nscd/connections.c:1121 nscd/connections.c:1174
+#, c-format
+msgid "cannot write result: %s"
+msgstr "無法寫入çµæžœ: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:139
-msgid "Error 109"
-msgstr "第 109 號錯誤"
+#: nscd/connections.c:1257
+#, c-format
+msgid "error getting caller's id: %s"
+msgstr "å–得呼å«ç¨‹å¼è­˜åˆ¥ç¢¼æ™‚發生錯誤: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:140
-msgid "Error 110"
-msgstr "第 110 號錯誤"
+#: nscd/connections.c:1316
+#, c-format
+msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode"
+msgstr "無法開啟/proc/self/cmdline:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:141
-msgid "Error 111"
-msgstr "第 111 號錯誤"
+#: nscd/connections.c:1330
+#, c-format
+msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode"
+msgstr "無法讀å–/proc/self/cmdline:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:142
-msgid "Error 112"
-msgstr "第 112 號錯誤"
+#: nscd/connections.c:1370
+#, c-format
+msgid "cannot change to old UID: %s; disabling paranoia mode"
+msgstr "無法變更為舊的 UID:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:143
-msgid "Error 113"
-msgstr "第 113 號錯誤"
+#: nscd/connections.c:1380
+#, c-format
+msgid "cannot change to old GID: %s; disabling paranoia mode"
+msgstr "無法變更為舊的 GID:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:144
-msgid "Error 114"
-msgstr "第 114 號錯誤"
+#: nscd/connections.c:1393
+#, c-format
+msgid "cannot change to old working directory: %s; disabling paranoia mode"
+msgstr "無法變更為舊的工作目錄:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:145
-msgid "Error 115"
-msgstr "第 115 號錯誤"
+#: nscd/connections.c:1439
+#, c-format
+msgid "re-exec failed: %s; disabling paranoia mode"
+msgstr "re-exec 失敗:%s; åœç”¨ paranoia 模å¼"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:146
-msgid "Error 116"
-msgstr "第 116 號錯誤"
+#: nscd/connections.c:1448
+#, c-format
+msgid "cannot change current working directory to \"/\": %s"
+msgstr "無法變更目å‰çš„工作目錄到「/ã€ï¼š%s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:147
-msgid "Error 117"
-msgstr "第 117 號錯誤"
+#: nscd/connections.c:1641
+#, c-format
+msgid "short read while reading request: %s"
+msgstr "讀å–請求時發ç¾è¼¸å…¥å€¼éŽçŸ­: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:148
-msgid "Error 118"
-msgstr "第 118 號錯誤"
+#: nscd/connections.c:1674
+#, c-format
+msgid "key length in request too long: %d"
+msgstr "在此請求中使用的éµå€¼å¤ªé•·äº†: %d"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:149
-msgid "Error 119"
-msgstr "第 119 號錯誤"
+#: nscd/connections.c:1687
+#, c-format
+msgid "short read while reading request key: %s"
+msgstr "讀å–請求的éµå€¼æ™‚發ç¾è¼¸å…¥å€¼éŽçŸ­: %s"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:152
-msgid "Operation not supported on transport endpoint"
-msgstr "此項æ“作在傳輸終點時並ä¸è¢«æ”¯æ´"
+#: nscd/connections.c:1696
+#, c-format
+msgid "handle_request: request received (Version = %d) from PID %ld"
+msgstr "handle_request: è«‹æ±‚å·²è¢«æŽ¥å— (版本為 %d) 來自於 PID %ld"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:154
-msgid "Address family not supported by protocol family"
-msgstr "ä½å€æ—群ä¸è¢«å”定æ—群所支æ´"
+#: nscd/connections.c:1701
+#, c-format
+msgid "handle_request: request received (Version = %d)"
+msgstr "handle_request: è«‹æ±‚å·²è¢«æŽ¥å— (版本為 %d)"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:159
-msgid "Network dropped connection because of reset"
-msgstr "網路連線æ¼å¤±ï¼Œå› ç‚ºé‡è¨­"
+#: nscd/connections.c:1901 nscd/connections.c:2099
+#, c-format
+msgid "disabled inotify after read error %d"
+msgstr "è®€å– %d 錯誤之後已åœç”¨ inotify"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:166
-msgid "Error 136"
-msgstr "第 136 號錯誤"
+#: nscd/connections.c:2228
+msgid "could not initialize conditional variable"
+msgstr "無法åˆå§‹åŒ–æ¢ä»¶è®Šæ•¸"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:167
-msgid "Not a name file"
-msgstr "並ä¸æ˜¯ä¸€å€‹å‘½å檔案"
+#: nscd/connections.c:2236
+msgid "could not start clean-up thread; terminating"
+msgstr "無法開始清ç†åŸ·è¡Œç·’;終止中"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:168
-msgid "Not available"
-msgstr "ä¸å­˜åœ¨"
+#: nscd/connections.c:2250
+msgid "could not start any worker thread; terminating"
+msgstr "無法開始任何背景工作執行緒;終止中"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:169
-msgid "Is a name file"
-msgstr "是個有å字的檔案"
+#: nscd/connections.c:2301 nscd/connections.c:2302 nscd/connections.c:2319
+#: nscd/connections.c:2328 nscd/connections.c:2346 nscd/connections.c:2357
+#: nscd/connections.c:2368
+#, c-format
+msgid "Failed to run nscd as user '%s'"
+msgstr "以使用者 '%s' 的身分執行 nscd 失敗"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:171
-msgid "Reserved for future use"
-msgstr "ä¿ç•™çµ¦å°‡ä¾†ä½¿ç”¨"
+#: nscd/connections.c:2320
+#, c-format
+msgid "initial getgrouplist failed"
+msgstr "åˆå§‹ getgrouplist 失敗"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:172
-msgid "Error 142"
-msgstr "第 142 號錯誤"
+#: nscd/connections.c:2329
+#, c-format
+msgid "getgrouplist failed"
+msgstr "getgrouplist 失敗"
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:173
-msgid "Cannot send after socket shutdown"
-msgstr "無法在 socket 關閉後傳é€"
+#: nscd/connections.c:2347
+#, c-format
+msgid "setgroups failed"
+msgstr "setgroups 失敗"
-#: stdio-common/psignal.c:63
+#: nscd/grpcache.c:383 nscd/hstcache.c:439 nscd/initgrcache.c:406
+#: nscd/pwdcache.c:378 nscd/servicescache.c:332
#, c-format
-msgid "%s%sUnknown signal %d\n"
-msgstr "%s%s未知的訊號 %d\n"
+msgid "short write in %s: %s"
+msgstr "寫入 %s 的資料éŽçŸ­: %s"
-#: dlfcn/dlinfo.c:51
-msgid "RTLD_SELF used in code not dynamically loaded"
-msgstr "程å¼ç¢¼æ‰€ä½¿ç”¨çš„ RTLD_SELF 沒有動態載入"
+#: nscd/grpcache.c:428 nscd/initgrcache.c:78
+#, c-format
+msgid "Haven't found \"%s\" in group cache!"
+msgstr "尚未在群組快å–中找到 \"%s\"!"
-#: dlfcn/dlinfo.c:61
-msgid "unsupported dlinfo request"
-msgstr "未支æ´çš„ dlinfo 請求"
+#: nscd/grpcache.c:430 nscd/initgrcache.c:80
+#, c-format
+msgid "Reloading \"%s\" in group cache!"
+msgstr "é‡æ–°è¼‰å…¥ã€Œ%sã€æ–¼ç¾¤çµ„å¿«å–ï¼"
-#: malloc/mcheck.c:346
-msgid "memory is consistent, library is buggy\n"
-msgstr "記憶體內容一致,函å¼åº«æœ‰å•é¡Œ\n"
+#: nscd/grpcache.c:509
+#, c-format
+msgid "Invalid numeric gid \"%s\"!"
+msgstr "無效的 gid 數值 \"%s\"!"
-#: malloc/mcheck.c:349
-msgid "memory clobbered before allocated block\n"
-msgstr "記憶體在é…ç½®å€å¡Šä¹‹å‰å°± clobbered 了\n"
+#: nscd/mem.c:431
+#, c-format
+msgid "freed %zu bytes in %s cache"
+msgstr "在 %2$s å¿«å–中 %1$zu ä½å…ƒçµ„å¯ç”¨"
-#: malloc/mcheck.c:352
-msgid "memory clobbered past end of allocated block\n"
-msgstr "記憶體在經éŽé…置的å€å¡Šå°¾éƒ¨æ™‚ clobbered 了\n"
+#: nscd/mem.c:574
+#, c-format
+msgid "no more memory for database '%s'"
+msgstr "無記憶體å¯ç”¨æ–¼è³‡æ–™åº«ã€Œ%sã€"
-#: malloc/mcheck.c:355
-msgid "block freed twice\n"
-msgstr "æ­¤å€å¡Šè¢«ç”¨ free 指令釋放了兩次\n"
+#: nscd/nscd.c:101
+msgid "Read configuration data from NAME"
+msgstr "自å稱中讀å–設定資料"
-#: malloc/mcheck.c:358
-msgid "bogus mcheck_status, library is buggy\n"
-msgstr "記憶體檢查狀態 (mcheck_ststus) 有誤,您所用的函å¼åº«æœ‰å•é¡Œ\n"
+#: nscd/nscd.c:103
+msgid "Do not fork and display messages on the current tty"
+msgstr "ä¸åœ¨ç›®å‰çš„ tty 產生å­è¡Œç¨‹ (fork) 以åŠé¡¯ç¤ºè¨Šæ¯"
-#: malloc/memusagestat.c:53
-msgid "Name output file"
-msgstr "å稱輸出檔"
+#: nscd/nscd.c:104
+msgid "NUMBER"
+msgstr "號碼"
-#: malloc/memusagestat.c:54
-msgid "Title string used in output graphic"
-msgstr "在輸出的圖åƒä¸­ä½¿ç”¨æœ‰æ¨™é ­çš„字串"
+#: nscd/nscd.c:104
+msgid "Start NUMBER threads"
+msgstr "啟動執行緒"
-#: malloc/memusagestat.c:55
-msgid "Generate output linear to time (default is linear to number of function calls)"
-msgstr "產生輸出與時間呈線性關係 (é è¨­æ˜¯èˆ‡å‡½å¼å‘¼å«æ•¸ç›®å‘ˆç·šæ€§é—œä¿‚)"
+#: nscd/nscd.c:105
+msgid "Shut the server down"
+msgstr "將伺æœå™¨é—œé–‰"
-#: malloc/memusagestat.c:57
-msgid "Also draw graph for total memory consumption"
-msgstr "åŒæ™‚å°ç¸½è¨˜æ†¶é«”時用é‡ä½œåœ–"
+#: nscd/nscd.c:106
+msgid "Print current configuration statistics"
+msgstr "å°å‡ºç›®å‰çµ„態統計"
-#: malloc/memusagestat.c:58
-msgid "make output graphic VALUE pixel wide"
-msgstr "設定輸出的圖形寬度為 VALUE 個åƒç´ "
+#: nscd/nscd.c:107
+msgid "TABLE"
+msgstr "表格"
-#: malloc/memusagestat.c:59
-msgid "make output graphic VALUE pixel high"
-msgstr "設定輸出的圖形高度為 VALUE 個åƒç´ "
+#: nscd/nscd.c:108
+msgid "Invalidate the specified cache"
+msgstr "使é¸å®šçš„å¿«å–無效"
-#: malloc/memusagestat.c:64
-msgid "Generate graphic from memory profiling data"
-msgstr "從記憶體性能測試資料產生圖åƒ"
+#: nscd/nscd.c:109
+msgid "TABLE,yes"
+msgstr "è¦è£½ä½œè¡¨æ ¼"
-#: malloc/memusagestat.c:67
-msgid "DATAFILE [OUTFILE]"
-msgstr "資料檔 [輸出檔]"
+#: nscd/nscd.c:110
+msgid "Use separate cache for each user"
+msgstr "å°ä¸åŒä½¿ç”¨è€…使用ä¸åŒçš„å¿«å–檔案"
-#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
-msgid "Unknown error"
-msgstr "未知的錯誤"
+#: nscd/nscd.c:115
+msgid "Name Service Cache Daemon."
+msgstr "網域å稱快å–ç²¾éˆ"
-#: string/strsignal.c:69
+#: nscd/nscd.c:147 nss/getent.c:952 nss/makedb.c:123
#, c-format
-msgid "Real-time signal %d"
-msgstr "å³æ™‚的訊號 %d"
+msgid "wrong number of arguments"
+msgstr "åƒæ•¸æ•¸ç›®ä¸å°"
-#: string/strsignal.c:73
+#: nscd/nscd.c:157
#, c-format
-msgid "Unknown signal %d"
-msgstr "未知的訊號 %d"
+msgid "failure while reading configuration file; this is fatal"
+msgstr "讀å–組態檔案時失敗;這是一個嚴é‡éŒ¯èª¤"
-#: timezone/zdump.c:176
+#: nscd/nscd.c:166
#, c-format
-msgid "%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n"
-msgstr "%s: 用法是 %s [ --version ] [ -v ] [ -c 切斷 ] 地å€å稱 ...\n"
+msgid "already running"
+msgstr "已在執行"
-#: timezone/zdump.c:269
-msgid "Error writing to standard output"
-msgstr "寫入標準輸出時錯誤"
+#: nscd/nscd.c:181 nscd/nscd.c:236
+#, c-format
+msgid "cannot fork"
+msgstr "無法è¡ç”Ÿ"
-#: timezone/zic.c:361
+#: nscd/nscd.c:244
#, c-format
-msgid "%s: Memory exhausted: %s\n"
-msgstr "%s: 記憶體已用完: %s\n"
+msgid "cannot change current working directory to \"/\""
+msgstr "無法變更目å‰çš„工作目錄到「/ã€"
-#: timezone/zic.c:386 misc/error.c:129 misc/error.c:157
-msgid "Unknown system error"
-msgstr "未知的系統錯誤"
+#: nscd/nscd.c:252
+msgid "Could not create log file"
+msgstr "無法建立記錄檔"
-#: timezone/zic.c:420
+#: nscd/nscd.c:305 nscd/nscd.c:330 nscd/nscd_stat.c:174
#, c-format
-msgid "\"%s\", line %d: %s"
-msgstr "\"%s\", 第 %d 行: %s"
+msgid "Only root is allowed to use this option!"
+msgstr "åªæœ‰ root æ‰å¯ä»¥ä½¿ç”¨æ­¤ä¸€é¸é …!"
-#: timezone/zic.c:423
+#: nscd/nscd.c:345
#, c-format
-msgid " (rule from \"%s\", line %d)"
-msgstr " (è¦å‰‡ä¾†è‡ª \"%s\", 第 %d è¡Œ)"
+msgid "'%s' is not a known database"
+msgstr "『%sã€ä¸¦éžä¸€å·²çŸ¥è³‡æ–™åº«"
-#: timezone/zic.c:435
-msgid "warning: "
-msgstr "警告: "
-
-#: timezone/zic.c:445
+#: nscd/nscd.c:370 nscd/nscd_stat.c:193
#, c-format
-msgid ""
-"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
-"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
-msgstr ""
-"%s: 用法是 %s [ --version ] [ -s ] [ -v ] [ -l 當地時間 ] [ -p posixè¦å‰‡ ] \\\n"
-"\t[ -d 目錄 ] [ -L é–秒 ] [ -y 年份型態 ] [ 檔案å稱 ... ]\n"
+msgid "write incomplete"
+msgstr "寫入ä¸å®Œå…¨"
-#: timezone/zic.c:492
+#: nscd/nscd.c:381
#, c-format
-msgid "%s: More than one -d option specified\n"
-msgstr "%s: 您使用了超éŽä¸€å€‹ -d é¸é …\n"
+msgid "cannot read invalidate ACK"
+msgstr "無法讀å–設為無效的 ACK"
-#: timezone/zic.c:502
+#: nscd/nscd.c:387
#, c-format
-msgid "%s: More than one -l option specified\n"
-msgstr "%s: 您使用了超éŽä¸€å€‹ -l é¸é …\n"
+msgid "invalidation failed"
+msgstr "無效化失敗"
-#: timezone/zic.c:512
+#: nscd/nscd.c:397
#, c-format
-msgid "%s: More than one -p option specified\n"
-msgstr "%s: 您使用了超éŽä¸€å€‹ -p é¸é …\n"
+msgid "secure services not implemented anymore"
+msgstr "安全æœå‹™ä¸å†å¯¦ä½œ"
-#: timezone/zic.c:522
+#: nscd/nscd_conf.c:57
#, c-format
-msgid "%s: More than one -y option specified\n"
-msgstr "%s: 您使用了超éŽä¸€å€‹ -y é¸é …\n"
+msgid "database %s is not supported"
+msgstr "資料庫 %s 並未支æ´"
-#: timezone/zic.c:532
+#: nscd/nscd_conf.c:108
#, c-format
-msgid "%s: More than one -L option specified\n"
-msgstr "%s: 您使用了超éŽä¸€å€‹ -L é¸é …\n"
+msgid "Parse error: %s"
+msgstr "解æžéŒ¯èª¤: %s"
-#: timezone/zic.c:639
+#: nscd/nscd_conf.c:194
#, c-format
-msgid "%s: Can't unlink %s: %s\n"
-msgstr "%s: 無法å–æ¶ˆé€£çµ %s: %s\n"
-
-#: timezone/zic.c:646
-msgid "hard link failed, symbolic link used"
-msgstr "實體連çµå¤±æ•—,使用符號連çµä»£æ›¿"
+msgid "Must specify user name for server-user option"
+msgstr "必須為伺æœå™¨ä½¿ç”¨è€…é¸é …指定使用者å稱"
-#: timezone/zic.c:654
+#: nscd/nscd_conf.c:201
#, c-format
-msgid "%s: Can't link from %s to %s: %s\n"
-msgstr "%s: 無法從 %s 連çµåˆ° %s: %s\n"
-
-#: timezone/zic.c:752 timezone/zic.c:754
-msgid "same rule name in multiple files"
-msgstr "在多個檔案裡é¢æœ‰ç›¸åŒçš„è¦å‰‡å稱"
-
-#: timezone/zic.c:795
-msgid "unruly zone"
-msgstr "沒有è¦å‰‡çš„時å€"
+msgid "Must specify user name for stat-user option"
+msgstr "必須為 stat 使用者é¸é …指定使用者å稱"
-#: timezone/zic.c:802
+#: nscd/nscd_conf.c:245
#, c-format
-msgid "%s in ruleless zone"
-msgstr "%s 在沒有è¦å‰‡çš„å€æ®µ"
-
-#: timezone/zic.c:823
-msgid "standard input"
-msgstr "標準輸入"
+msgid "invalid value for 'reload-count': %u"
+msgstr "用於「reload-countã€çš„無效值:%u"
-#: timezone/zic.c:828
+#: nscd/nscd_conf.c:260
#, c-format
-msgid "%s: Can't open %s: %s\n"
-msgstr "%s: 無法開啟 %s: %s\n"
-
-#: timezone/zic.c:839
-msgid "line too long"
-msgstr "行的長度éŽé•·"
+msgid "Must specify value for restart-interval option"
+msgstr "必須指定用於 restart-interval é¸é …的值"
-#: timezone/zic.c:859
-msgid "input line of unknown type"
-msgstr "ä¸æ˜Žåž‹åˆ¥çš„輸入行"
-
-#: timezone/zic.c:875
+#: nscd/nscd_conf.c:274
#, c-format
-msgid "%s: Leap line in non leap seconds file %s\n"
-msgstr "%s: é–時設定行 (leap line) 出ç¾åœ¨ä¸å«é–秒的設定檔 %s 中\n"
+msgid "Unknown option: %s %s %s"
+msgstr "未知的é¸é …: %s %s %s"
-#: timezone/zic.c:882 timezone/zic.c:1297 timezone/zic.c:1322
+#: nscd/nscd_conf.c:287
#, c-format
-msgid "%s: panic: Invalid l_value %d\n"
-msgstr "%s: åš´é‡éŒ¯èª¤: 錯誤的左值 (l_value) %d\n"
+msgid "cannot get current working directory: %s; disabling paranoia mode"
+msgstr "無法å–å¾—ç›®å‰çš„工作目錄:%s; åœç”¨ paranoia 模å¼"
-#: timezone/zic.c:890
+#: nscd/nscd_conf.c:307
#, c-format
-msgid "%s: Error reading %s\n"
-msgstr "%s: 讀å–錯誤 %s\n"
+msgid "maximum file size for %s database too small"
+msgstr "最大值檔案大å°ç”¨æ–¼ %s 資料庫太å°"
-#: timezone/zic.c:897
+#: nscd/nscd_stat.c:143
#, c-format
-msgid "%s: Error closing %s: %s\n"
-msgstr "%s: 關閉錯誤 %s: %s\n"
-
-#: timezone/zic.c:902
-msgid "expected continuation line not found"
-msgstr "找ä¸åˆ°é æœŸçš„接續行"
-
-#: timezone/zic.c:958
-msgid "wrong number of fields on Rule line"
-msgstr "è¦å‰‡è¨­å®šè¡Œçš„欄ä½æ•¸ç›®éŒ¯èª¤"
-
-#: timezone/zic.c:962
-msgid "nameless rule"
-msgstr "è¦å‰‡æ²’有å稱"
+msgid "cannot write statistics: %s"
+msgstr "無法寫入統計資料: %s"
-#: timezone/zic.c:967
-msgid "invalid saved time"
-msgstr "無效的節約時間"
+#: nscd/nscd_stat.c:158
+msgid "yes"
+msgstr "是"
-#: timezone/zic.c:986
-msgid "wrong number of fields on Zone line"
-msgstr "時å€è¨­å®šè¡Œçš„欄ä½æ•¸ç›®éŒ¯èª¤"
+#: nscd/nscd_stat.c:159
+msgid "no"
+msgstr "ç„¡"
-#: timezone/zic.c:992
+#: nscd/nscd_stat.c:170
#, c-format
-msgid "\"Zone %s\" line and -l option are mutually exclusive"
-msgstr "\"å€æ®µ %s\" 行和 -l é¸é …是互斥的"
+msgid "Only root or %s is allowed to use this option!"
+msgstr "åªæœ‰ root 或 %s æ‰å…許使用此一é¸é …!"
-#: timezone/zic.c:1000
+#: nscd/nscd_stat.c:181
#, c-format
-msgid "\"Zone %s\" line and -p option are mutually exclusive"
-msgstr "\"å€æ®µ %s\" 行和 -p é¸é …是互斥的"
+msgid "nscd not running!\n"
+msgstr "nscd 並沒有在執行!\n"
-#: timezone/zic.c:1012
+#: nscd/nscd_stat.c:205
#, c-format
-msgid "duplicate zone name %s (file \"%s\", line %d)"
-msgstr "複製時å€å稱 %s (檔案 \"%s\", 第 %d è¡Œ)"
-
-#: timezone/zic.c:1028
-msgid "wrong number of fields on Zone continuation line"
-msgstr "時å€æŽ¥çºŒè¡Œçš„欄ä½æ•¸ç›®ä¸å°"
-
-#: timezone/zic.c:1068
-msgid "invalid UTC offset"
-msgstr "無效的 UTC ä½ç§»å€¼"
-
-#: timezone/zic.c:1071
-msgid "invalid abbreviation format"
-msgstr "無效的縮寫格å¼"
-
-#: timezone/zic.c:1097
-msgid "Zone continuation line end time is not after end time of previous line"
-msgstr "時å€æŽ¥çºŒè¡Œçš„çµæŸæ™‚é–“ä¸åœ¨ä¸Šä¸€è¡Œçš„çµæŸæ™‚間之後"
-
-#: timezone/zic.c:1124
-msgid "wrong number of fields on Leap line"
-msgstr "é–時設定行的欄ä½æ•¸ç›®éŒ¯èª¤"
-
-#: timezone/zic.c:1133
-msgid "invalid leaping year"
-msgstr "無效的é–å¹´"
-
-#: timezone/zic.c:1148 timezone/zic.c:1252
-msgid "invalid month name"
-msgstr "無效的月份å稱"
+msgid "cannot read statistics data"
+msgstr "無法讀å–統計資料"
-#: timezone/zic.c:1161 timezone/zic.c:1374 timezone/zic.c:1388
-msgid "invalid day of month"
-msgstr "無效的日期數字"
+#: nscd/nscd_stat.c:208
+#, c-format
+msgid ""
+"nscd configuration:\n"
+"\n"
+"%15d server debug level\n"
+msgstr ""
+"nscd 設定:\n"
+"\n"
+"%15d 伺æœç¨‹å¼éŒ¯èª¤è¨Šæ¯å ±å‘Šç­‰ç´š\n"
-#: timezone/zic.c:1166
-msgid "time before zero"
-msgstr "在零之å‰çš„時間"
+#: nscd/nscd_stat.c:232
+#, c-format
+msgid "%3ud %2uh %2um %2lus server runtime\n"
+msgstr "%3ud %2uh %2um %2lus 伺æœå™¨ 執行時期\n"
-#: timezone/zic.c:1170
-msgid "time too small"
-msgstr "時間太å°"
+#: nscd/nscd_stat.c:235
+#, c-format
+msgid " %2uh %2um %2lus server runtime\n"
+msgstr " %2uh %2um %2lus 伺æœå™¨ 執行時期\n"
-#: timezone/zic.c:1174
-msgid "time too large"
-msgstr "時間太大"
+#: nscd/nscd_stat.c:237
+#, c-format
+msgid " %2um %2lus server runtime\n"
+msgstr " %2um %2lus 伺æœå™¨ 執行時期\n"
-#: timezone/zic.c:1178 timezone/zic.c:1281
-msgid "invalid time of day"
-msgstr "無效的時間數字"
+#: nscd/nscd_stat.c:239
+#, c-format
+msgid " %2lus server runtime\n"
+msgstr " %2lus 伺æœå™¨ 執行時期\n"
-#: timezone/zic.c:1197
-msgid "illegal CORRECTION field on Leap line"
-msgstr "在é–時設定行中有ä¸åˆæ³•çš„ CORRECTION 欄ä½"
+#: nscd/nscd_stat.c:241
+#, c-format
+msgid ""
+"%15d current number of threads\n"
+"%15d maximum number of threads\n"
+"%15lu number of times clients had to wait\n"
+"%15s paranoia mode enabled\n"
+"%15lu restart internal\n"
+"%15u reload count\n"
+msgstr ""
+"%15d ç›®å‰åŸ·è¡Œç·’數é‡\n"
+"%15d 最大執行緒數é‡\n"
+"%15lu 客戶端必須等待的次數\n"
+"%15s paranoia 模å¼å·²å•Ÿç”¨\n"
+"%15lu 內部é‡æ–°å•Ÿå‹•\n"
+"%15u é‡æ–°è¼‰å…¥è¨ˆæ•¸\n"
-#: timezone/zic.c:1201
-msgid "illegal Rolling/Stationary field on Leap line"
-msgstr "在é–時設定行中有ä¸åˆæ³•çš„ Rolling/Stationary 欄ä½"
+#: nscd/nscd_stat.c:276
+#, c-format
+msgid ""
+"\n"
+"%s cache:\n"
+"\n"
+"%15s cache is enabled\n"
+"%15s cache is persistent\n"
+"%15s cache is shared\n"
+"%15zu suggested size\n"
+"%15zu total data pool size\n"
+"%15zu used data pool size\n"
+"%15lu seconds time to live for positive entries\n"
+"%15lu seconds time to live for negative entries\n"
+"%15<PRIuMAX> cache hits on positive entries\n"
+"%15<PRIuMAX> cache hits on negative entries\n"
+"%15<PRIuMAX> cache misses on positive entries\n"
+"%15<PRIuMAX> cache misses on negative entries\n"
+"%15lu%% cache hit rate\n"
+"%15zu current number of cached values\n"
+"%15zu maximum number of cached values\n"
+"%15zu maximum chain length searched\n"
+"%15<PRIuMAX> number of delays on rdlock\n"
+"%15<PRIuMAX> number of delays on wrlock\n"
+"%15<PRIuMAX> memory allocations failed\n"
+"%15s check /etc/%s for changes\n"
+msgstr ""
+"\n"
+"%s å¿«å–:\n"
+"\n"
+"%15s å¿«å–已啟用\n"
+"%15s å¿«å–為æŒçºŒçš„\n"
+"%15s å¿«å–為共享\n"
+"%15zu 建議的大å°\n"
+"%15zu 總計資料儲存池大å°\n"
+"%15zu 使用的資料儲存池大å°\n"
+"%15lu 正項目的存在時間(秒)\n"
+"%15lu 負項目的存在時間(秒)\n"
+"%15<PRIuMAX> 正項目中找到快å–數\n"
+"%15<PRIuMAX> 負項目中找到快å–數\n"
+"%15<PRIuMAX> 正項目中éºæ¼çš„å¿«å–數\n"
+"%15<PRIuMAX> 負項目中éºæ¼çš„å¿«å–數\n"
+"%15lu%% å¿«å–找到的比例\n"
+"%15zu ç›®å‰å¿«å–的數é‡å€¼\n"
+"%15zu 最大值快å–數é‡å€¼\n"
+"%15zu å·²æœå°‹æœ€å¤§å€¼éˆæŽ¥é•·åº¦\n"
+"%15<PRIuMAX> rdlock 延é²æ•¸é‡\n"
+"%15<PRIuMAX> wrlock 延é²æ•¸é‡\n"
+"%15<PRIuMAX> 記憶體é…置失敗\n"
+"%15s 檢查 /etc/%s 的變更\n"
-#: timezone/zic.c:1216
-msgid "wrong number of fields on Link line"
-msgstr "連çµè¨­å®šè¡Œçš„欄ä½æ•¸ç›®éŒ¯èª¤"
+#: nscd/pwdcache.c:423
+#, c-format
+msgid "Haven't found \"%s\" in password cache!"
+msgstr "尚未在密碼快å–中找到 \"%s\"!"
-#: timezone/zic.c:1220
-msgid "blank FROM field on Link line"
-msgstr "Link 行中空白的 FROM 欄ä½"
+#: nscd/pwdcache.c:425
+#, c-format
+msgid "Reloading \"%s\" in password cache!"
+msgstr "é‡æ–°è¼‰å…¥ã€Œ%sã€æ–¼å¯†ç¢¼å¿«å–ï¼"
-#: timezone/zic.c:1224
-msgid "blank TO field on Link line"
-msgstr "Link 行中空白的 TO 欄ä½"
+#: nscd/pwdcache.c:506
+#, c-format
+msgid "Invalid numeric uid \"%s\"!"
+msgstr "無效的 uid 數值 \"%s\"!"
-#: timezone/zic.c:1301
-msgid "invalid starting year"
-msgstr "無效的起始年份"
+#: nscd/selinux.c:156
+#, c-format
+msgid "Failed opening connection to the audit subsystem: %m"
+msgstr "失敗的開啟連線到稽核å­ç³»çµ±ï¼š%m"
-#: timezone/zic.c:1305
-msgid "starting year too low to be represented"
-msgstr "起始年份太低,無法表示"
+#: nscd/selinux.c:177
+msgid "Failed to set keep-capabilities"
+msgstr "設定功能ä¿æŒæ™‚失敗"
-#: timezone/zic.c:1307
-msgid "starting year too high to be represented"
-msgstr "起始年份太高,無法表示"
+#: nscd/selinux.c:178 nscd/selinux.c:241
+#, c-format
+msgid "prctl(KEEPCAPS) failed"
+msgstr "prctl(KEEPCAPS) 失敗"
-#: timezone/zic.c:1326
-msgid "invalid ending year"
-msgstr "無效的çµæŸå¹´ä»½"
+#: nscd/selinux.c:192
+msgid "Failed to initialize drop of capabilities"
+msgstr "åˆå§‹åŒ–功能放棄時失敗"
-#: timezone/zic.c:1330
-msgid "ending year too low to be represented"
-msgstr "çµæŸå¹´ä»½å¤ªä½Žï¼Œç„¡æ³•è¡¨ç¤º"
+#: nscd/selinux.c:193
+#, c-format
+msgid "cap_init failed"
+msgstr "cap_init 失敗"
-#: timezone/zic.c:1332
-msgid "ending year too high to be represented"
-msgstr "çµæŸå¹´ä»½å¤ªé«˜ï¼Œç„¡æ³•è¡¨ç¤º"
+#: nscd/selinux.c:214 nscd/selinux.c:231
+msgid "Failed to drop capabilities"
+msgstr "放棄功能時失敗"
-#: timezone/zic.c:1335
-msgid "starting year greater than ending year"
-msgstr "起始年份比çµæŸå¹´ä»½é‚„è¦å¤§"
+#: nscd/selinux.c:215 nscd/selinux.c:232
+#, c-format
+msgid "cap_set_proc failed"
+msgstr "cap_set_proc 失敗"
-#: timezone/zic.c:1342
-msgid "typed single year"
-msgstr "輸入的年份是åŒä¸€å¹´"
+#: nscd/selinux.c:240
+msgid "Failed to unset keep-capabilities"
+msgstr "解除設定功能ä¿æŒæ™‚失敗"
-#: timezone/zic.c:1379
-msgid "invalid weekday name"
-msgstr "無效的工作日 (weekday) å稱"
+#: nscd/selinux.c:256
+msgid "Failed to determine if kernel supports SELinux"
+msgstr "æ±ºå®šå¦‚æžœå…§æ ¸æ”¯æ´ SELinux 時失敗"
-#: timezone/zic.c:1494
+#: nscd/selinux.c:271
#, c-format
-msgid "%s: Can't remove %s: %s\n"
-msgstr "%s: 無法移除 %s: %s\n"
+msgid "Failed to start AVC thread"
+msgstr "開始 AVC 執行緒時失敗"
-#: timezone/zic.c:1504
+#: nscd/selinux.c:293
#, c-format
-msgid "%s: Can't create %s: %s\n"
-msgstr "%s: 無法產生 %s: %s\n"
+msgid "Failed to create AVC lock"
+msgstr "建立 AVC 鎖定時失敗"
-#: timezone/zic.c:1570
+#: nscd/selinux.c:333
#, c-format
-msgid "%s: Error writing %s\n"
-msgstr "%s: 寫入錯誤 %s\n"
+msgid "Failed to start AVC"
+msgstr "啟始 AVC 時失敗"
-#: timezone/zic.c:1760
-msgid "can't determine time zone abbreviation to use just after until time"
-msgstr "無法決定在çµæŸæ™‚é–“ (untiltime) 以後該使用的時å€ç°¡å¯«"
+#: nscd/selinux.c:335
+msgid "Access Vector Cache (AVC) started"
+msgstr "å­˜å–å‘é‡å¿«å– (AVC) 開始"
-#: timezone/zic.c:1803
-msgid "too many transitions?!"
-msgstr "太多時間轉æ›äº†?!"
+#: nscd/selinux.c:356
+msgid "Error getting context of socket peer"
+msgstr "å–å¾—å°ç­‰é€šè¨Šç«¯çš„狀態組åˆæ™‚發生錯誤"
-#: timezone/zic.c:1822
-msgid "internal error - addtype called with bad isdst"
-msgstr "內部錯誤 - 用錯誤的 isdst å‘¼å« addtype 函å¼"
-
-#: timezone/zic.c:1826
-msgid "internal error - addtype called with bad ttisstd"
-msgstr "內部錯誤 - 用錯誤的 ttisstd å‘¼å« addtype 函å¼"
-
-#: timezone/zic.c:1830
-msgid "internal error - addtype called with bad ttisgmt"
-msgstr "內部錯誤 - 用錯誤的 ttisgmt å‘¼å« addtype 函å¼"
-
-#: timezone/zic.c:1849
-msgid "too many local time types"
-msgstr "太多本地時間格å¼äº†"
+#: nscd/selinux.c:361
+msgid "Error getting context of nscd"
+msgstr "å–å¾— nscd 的狀態組åˆæ™‚發生錯誤"
-#: timezone/zic.c:1877
-msgid "too many leap seconds"
-msgstr "太多é–秒了"
+#: nscd/selinux.c:367
+msgid "Error getting sid from context"
+msgstr "從狀態組åˆå–å¾— sid 時發生錯誤"
-#: timezone/zic.c:1883
-msgid "repeated leap second moment"
-msgstr "é‡è¤‡çš„é–秒設定"
+#: nscd/selinux.c:374
+msgid "compile-time support for database policy missing"
+msgstr "compile-time 支æ´ç”¨æ–¼è³‡æ–™åº«ç­–略缺少"
-#: timezone/zic.c:1935
-msgid "Wild result from command execution"
-msgstr "命令執行導至奇怪的çµæžœ"
+#: nscd/selinux.c:407
+#, c-format
+msgid ""
+"\n"
+"SELinux AVC Statistics:\n"
+"\n"
+"%15u entry lookups\n"
+"%15u entry hits\n"
+"%15u entry misses\n"
+"%15u entry discards\n"
+"%15u CAV lookups\n"
+"%15u CAV hits\n"
+"%15u CAV probes\n"
+"%15u CAV misses\n"
+msgstr ""
+"\n"
+"SELinux AVC 統計:\n"
+"\n"
+"%15u 項目查找\n"
+"%15u 項目符åˆé …ç›®\n"
+"%15u 項目缺少\n"
+"%15u é …ç›®æ¨æ£„\n"
+"%15u CAV 查找\n"
+"%15u CAV 符åˆé …ç›®\n"
+"%15u CAV 探查\n"
+"%15u CAV 缺少\n"
-#: timezone/zic.c:1936
+#: nscd/servicescache.c:381
#, c-format
-msgid "%s: command was '%s', result was %d\n"
-msgstr "%s: 輸入命令為 '%s', çµæžœç‚º %d\n"
+msgid "Haven't found \"%s\" in services cache!"
+msgstr "尚未在æœå‹™å¿«å–中找到「%sã€!"
-#: timezone/zic.c:2031
-msgid "Odd number of quotation marks"
-msgstr "引號數目為奇數"
+#: nscd/servicescache.c:383
+#, c-format
+msgid "Reloading \"%s\" in services cache!"
+msgstr "é‡æ–°è¼‰å…¥ã€Œ%sã€æ–¼æœå‹™å¿«å–ï¼"
-#: timezone/zic.c:2051 timezone/zic.c:2070
-msgid "time overflow"
-msgstr "時間溢ä½"
+#: nss/getent.c:54
+msgid "database [key ...]"
+msgstr "資料庫 [éµå€¼...]"
-#: timezone/zic.c:2117
-msgid "use of 2/29 in non leap-year"
-msgstr "在éžé–年時用到 2/29 æ—¥"
+#: nss/getent.c:59
+msgid "Service configuration to be used"
+msgstr "å°‡è¦ä½¿ç”¨çš„æœå‹™è¨­å®š"
-#: timezone/zic.c:2151
-msgid "no day in month matches rule"
-msgstr "在月份資料中找ä¸åˆ°ç¬¦åˆè¦å‰‡çš„日數"
+#: nss/getent.c:60
+msgid "disable IDN encoding"
+msgstr "åœç”¨ IDN 編碼"
-#: timezone/zic.c:2175
-msgid "too many, or too long, time zone abbreviations"
-msgstr "時å€ç¸®å¯«å¤ªå¤šæˆ–者太長了"
+#: nss/getent.c:65
+msgid "Get entries from administrative database."
+msgstr "從管ç†è³‡æ–™åº«å–å¾—æ¢ç›®ã€‚"
-#: timezone/zic.c:2216
+#: nss/getent.c:149 nss/getent.c:479
#, c-format
-msgid "%s: Can't create directory %s: %s\n"
-msgstr "%s: 無法建立目錄 %s: %s\n"
+msgid "Enumeration not supported on %s\n"
+msgstr "此項目在 %s 中ä¸è¢«æ”¯æ´\n"
-#: timezone/zic.c:2238
+#: nss/getent.c:866
#, c-format
-msgid "%s: %d did not sign extend correctly\n"
-msgstr "%s: %d 無法正確地延展訊號\n"
-
-#: posix/../sysdeps/generic/wordexp.c:1797
-msgid "parameter null or not set"
-msgstr "åƒæ•¸ç‚ºç©ºå­—元或是未設置"
+msgid "Unknown database name"
+msgstr "ä¸æ˜Žçš„資料庫å稱"
-#: posix/../sysdeps/posix/gai_strerror.c:31
-msgid "Address family for hostname not supported"
-msgstr "hostname çš„ä½å€æ—群ä¸æ”¯æ´"
+#: nss/getent.c:896
+msgid "Supported databases:\n"
+msgstr "支æ´çš„資料庫:\n"
-#: posix/../sysdeps/posix/gai_strerror.c:32
-msgid "Temporary failure in name resolution"
-msgstr "解æžå稱時發生暫時性的錯誤"
+#: nss/getent.c:962
+#, c-format
+msgid "Unknown database: %s\n"
+msgstr "未知的資料庫: %s\n"
-#: posix/../sysdeps/posix/gai_strerror.c:33
-msgid "Bad value for ai_flags"
-msgstr "錯誤的 ai_flags 值"
+#: nss/makedb.c:60
+msgid "Convert key to lower case"
+msgstr "轉æ›éµè½‰æ›ç‚ºå°å¯«"
-#: posix/../sysdeps/posix/gai_strerror.c:34
-msgid "Non-recoverable failure in name resolution"
-msgstr "在解æžå稱時發生嚴é‡çš„錯誤"
+#: nss/makedb.c:63
+msgid "Do not print messages while building database"
+msgstr "ä¸å°å‡ºè¨Šæ¯ç•¶å»ºç«‹è³‡æ–™åº«"
-#: posix/../sysdeps/posix/gai_strerror.c:35
-msgid "ai_family not supported"
-msgstr "ai_family 沒有支æ´"
+#: nss/makedb.c:65
+msgid "Print content of database file, one entry a line"
+msgstr "å°å‡ºå…§å®¹çš„資料庫檔案,一個項目列"
-#: posix/../sysdeps/posix/gai_strerror.c:36
-msgid "Memory allocation failure"
-msgstr "記憶體é…置失敗"
+#: nss/makedb.c:70
+msgid "Create simple DB database from textual input."
+msgstr "建立簡單的庫料庫資料庫從文字輸入。"
-#: posix/../sysdeps/posix/gai_strerror.c:37
-msgid "No address associated with hostname"
-msgstr "沒有此主機å稱所å°æ‡‰çš„ä½å€"
-
-#: posix/../sysdeps/posix/gai_strerror.c:38
-msgid "Name or service not known"
-msgstr "未知的å稱或æœå‹™"
-
-#: posix/../sysdeps/posix/gai_strerror.c:39
-msgid "Servname not supported for ai_socktype"
-msgstr "ä¸æ”¯æ´ ai_socktype 的伺æœå稱"
+#: nss/makedb.c:73
+msgid ""
+"INPUT-FILE OUTPUT-FILE\n"
+"-o OUTPUT-FILE INPUT-FILE\n"
+"-u INPUT-FILE"
+msgstr ""
+"輸入檔案å稱 輸出檔案å稱\n"
+"-o 輸出檔案å稱 輸入檔案å稱\n"
+"-u 輸入檔案å稱"
-#: posix/../sysdeps/posix/gai_strerror.c:40
-msgid "ai_socktype not supported"
-msgstr "ai_socktype 沒有支æ´"
+#: nss/makedb.c:142
+#, c-format
+msgid "No usable database library found."
+msgstr "找ä¸åˆ°å¯ç”¨çš„資料庫函å¼åº«ã€‚"
-#: posix/../sysdeps/posix/gai_strerror.c:41
-msgid "System error"
-msgstr "系統錯誤"
+#: nss/makedb.c:149
+#, c-format
+msgid "cannot open database file `%s': %s"
+msgstr "無法開啟資料庫檔案「%sã€ï¼š%s"
-#: posix/../sysdeps/posix/gai_strerror.c:42
-msgid "Processing request in progress"
-msgstr "此項請求已經在處ç†ç•¶ä¸­"
+#: nss/makedb.c:151
+msgid "incorrectly formatted file"
+msgstr "ä¸æ­£ç¢ºæ ¼å¼åŒ–的檔案"
-#: posix/../sysdeps/posix/gai_strerror.c:43
-msgid "Request canceled"
-msgstr "請求已被å–消"
+#: nss/makedb.c:331
+msgid "duplicate key"
+msgstr "é‡è¤‡éµå€¼"
-#: posix/../sysdeps/posix/gai_strerror.c:44
-msgid "Request not canceled"
-msgstr "請求並未å–消"
+#: nss/makedb.c:337
+#, c-format
+msgid "while writing database file"
+msgstr "寫入資料庫檔案時"
-#: posix/../sysdeps/posix/gai_strerror.c:45
-msgid "All requests done"
-msgstr "所有請求已完æˆ"
+#: nss/makedb.c:348
+#, c-format
+msgid "problems while reading `%s'"
+msgstr "讀å–「%sã€æ™‚發生å•é¡Œ"
-#: posix/../sysdeps/posix/gai_strerror.c:46
-msgid "Interrupted by a signal"
-msgstr "由訊號所中斷"
+#: nss/makedb.c:368 nss/makedb.c:385
+#, c-format
+msgid "while reading database"
+msgstr "讀å–資料庫時"
-#: posix/getconf.c:892
+#: posix/getconf.c:1036
#, c-format
msgid "Usage: %s [-v specification] variable_name [pathname]\n"
msgstr "用法: %s [-v è¦æ ¼] 變數å稱 [路徑å稱]\n"
-#: posix/getconf.c:950
+#: posix/getconf.c:1039
+#, c-format
+msgid " %s -a [pathname]\n"
+msgstr " %s -a [路徑å稱]\n"
+
+#: posix/getconf.c:1115
+#, c-format
+msgid ""
+"Usage: getconf [-v SPEC] VAR\n"
+" or: getconf [-v SPEC] PATH_VAR PATH\n"
+"\n"
+"Get the configuration value for variable VAR, or for variable PATH_VAR\n"
+"for path PATH. If SPEC is given, give values for compilation\n"
+"environment SPEC.\n"
+"\n"
+msgstr ""
+"用法:getconf [-v SPEC] VAR\n"
+" 或: getconf [-v SPEC] PATH_VAR 路徑\n"
+"\n"
+"å–得變數 VAR 的組態值,或是變數 PATH_VAR\n"
+"用於路徑 PATH。 如果已æä¾› SPEC,就給出用於編譯的\n"
+"環境 SPEC 值。\n"
+"\n"
+
+#: posix/getconf.c:1173
#, c-format
msgid "unknown specification \"%s\""
msgstr "ä¸æ˜Žçš„è¦æ ¼ \"%s\""
-#: posix/getconf.c:979 posix/getconf.c:995
+#: posix/getconf.c:1225
+#, c-format
+msgid "Couldn't execute %s"
+msgstr "無法執行 %s"
+
+#: posix/getconf.c:1269 posix/getconf.c:1285
msgid "undefined"
msgstr "未定義"
-#: posix/getconf.c:1017
+#: posix/getconf.c:1307
#, c-format
msgid "Unrecognized variable `%s'"
msgstr "無法識別的變數 `%s'"
-#: posix/getopt.c:692 posix/getopt.c:711
+#: posix/getopt.c:594 posix/getopt.c:623
#, c-format
-msgid "%s: option '%s' is ambiguous\n"
-msgstr "%s: é¸é … `%s' å«ç¾©ä¸æ¸…\n"
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s:é¸é …『%sã€æ˜¯æ¨¡ç¨œå…©å¯çš„ï¼›å¯èƒ½æ˜¯ï¼š"
-#: posix/getopt.c:744 posix/getopt.c:748
+#: posix/getopt.c:664 posix/getopt.c:668
#, c-format
msgid "%s: option '--%s' doesn't allow an argument\n"
msgstr "%s: é¸é … `--%s' ä¸å…許附加引數\n"
-#: posix/getopt.c:757 posix/getopt.c:762
+#: posix/getopt.c:677 posix/getopt.c:682
#, c-format
msgid "%s: option '%c%s' doesn't allow an argument\n"
msgstr "%s: é¸é … `%c%s' ä¸å…許附加引數\n"
-#: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
-#: posix/getopt.c:1181
+#: posix/getopt.c:725 posix/getopt.c:744
#, c-format
-msgid "%s: option '%s' requires an argument\n"
-msgstr "%s: é¸é … `%s' 需è¦ä¸€å€‹å¼•æ•¸\n"
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s:é¸é …『--%sã€éœ€è¦ä¸€å€‹å¼•æ•¸\n"
-#: posix/getopt.c:867 posix/getopt.c:870
+#: posix/getopt.c:782 posix/getopt.c:785
#, c-format
msgid "%s: unrecognized option '--%s'\n"
msgstr "%s: 未知的é¸é … `--%s'\n"
-#: posix/getopt.c:878 posix/getopt.c:881
+#: posix/getopt.c:793 posix/getopt.c:796
#, c-format
msgid "%s: unrecognized option '%c%s'\n"
msgstr "%s: 未知的é¸é … `%c%s'\n"
-#: posix/getopt.c:936 posix/getopt.c:939
-#, c-format
-msgid "%s: illegal option -- '%c'\n"
-msgstr "%s: ä¸åˆæ³•çš„é¸é … -- %c\n"
-
-#: posix/getopt.c:945 posix/getopt.c:948
+#: posix/getopt.c:845 posix/getopt.c:848
#, c-format
msgid "%s: invalid option -- '%c'\n"
msgstr "%s: ä¸é©ç”¨çš„é¸é … -- %c\n"
-#: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
-#: posix/getopt.c:1255
+#: posix/getopt.c:898 posix/getopt.c:915 posix/getopt.c:1123
+#: posix/getopt.c:1141
#, c-format
msgid "%s: option requires an argument -- '%c'\n"
msgstr "%s: é¸é …需è¦ä¸€å€‹å¼•æ•¸ -- %c\n"
-#: posix/getopt.c:1074 posix/getopt.c:1093
+#: posix/getopt.c:971 posix/getopt.c:987
#, c-format
msgid "%s: option '-W %s' is ambiguous\n"
msgstr "%s: é¸é … `-W %s' å«ç¾©ä¸æ¸…\n"
-#: posix/getopt.c:1117 posix/getopt.c:1138
+#: posix/getopt.c:1011 posix/getopt.c:1029
#, c-format
msgid "%s: option '-W %s' doesn't allow an argument\n"
msgstr "%s: é¸é … `-W %s' ä¸å…許附加引數\n"
-#: posix/regcomp.c:150
+#: posix/getopt.c:1050 posix/getopt.c:1068
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s:é¸é …『-W %sã€éœ€è¦ä¸€å€‹å¼•æ•¸\n"
+
+#: posix/regcomp.c:135
msgid "No match"
msgstr "沒有符åˆçš„é …ç›®"
-#: posix/regcomp.c:153
+#: posix/regcomp.c:138
msgid "Invalid regular expression"
msgstr "ä¸é©ç”¨çš„常è¦è¡¨ç¤ºå¼"
-#: posix/regcomp.c:156
+#: posix/regcomp.c:141
msgid "Invalid collation character"
msgstr "ä¸é©ç”¨çš„å°ç…§å­—å…ƒ"
-#: posix/regcomp.c:159
+#: posix/regcomp.c:144
msgid "Invalid character class name"
msgstr "ä¸é©ç”¨çš„字元類別å"
-#: posix/regcomp.c:162
+#: posix/regcomp.c:147
msgid "Trailing backslash"
msgstr "尾端的å斜線"
-#: posix/regcomp.c:165
+#: posix/regcomp.c:150
msgid "Invalid back reference"
msgstr "ä¸é©ç”¨çš„後部索引"
-#: posix/regcomp.c:168
+#: posix/regcomp.c:153
msgid "Unmatched [ or [^"
msgstr "[ 或 [^ ä¸èƒ½åŒ¹é…"
-#: posix/regcomp.c:171
+#: posix/regcomp.c:156
msgid "Unmatched ( or \\("
msgstr "( 或 \\( ä¸èƒ½åŒ¹é…"
-#: posix/regcomp.c:174
+#: posix/regcomp.c:159
msgid "Unmatched \\{"
msgstr "\\{ ä¸èƒ½åŒ¹é…"
-#: posix/regcomp.c:177
+#: posix/regcomp.c:162
msgid "Invalid content of \\{\\}"
msgstr "ä¸é©ç”¨çš„ \\{\\} 內容"
-#: posix/regcomp.c:180
+#: posix/regcomp.c:165
msgid "Invalid range end"
msgstr "ä¸é©ç”¨çš„範åœçµæŸ"
-#: posix/regcomp.c:183
+#: posix/regcomp.c:168
msgid "Memory exhausted"
msgstr "記憶體用完了"
-#: posix/regcomp.c:186
+#: posix/regcomp.c:171
msgid "Invalid preceding regular expression"
msgstr "ä¸é©ç”¨çš„å‰ç½®å¸¸è¦è¡¨ç¤ºå¼"
-#: posix/regcomp.c:189
+#: posix/regcomp.c:174
msgid "Premature end of regular expression"
msgstr "常è¦è¡¨ç¤ºå¼å¤ªæ—©çµæŸäº†"
-#: posix/regcomp.c:192
+#: posix/regcomp.c:177
msgid "Regular expression too big"
msgstr "æ­£è¦è¡¨ç¤ºå¼å¤ªé•·äº†"
-#: posix/regcomp.c:195
+#: posix/regcomp.c:180
msgid "Unmatched ) or \\)"
msgstr ") 或 \\) ä¸èƒ½åŒ¹é…"
-#: posix/regcomp.c:661
+#: posix/regcomp.c:680
msgid "No previous regular expression"
msgstr "å…ˆå‰ä¸¦æœªä½¿ç”¨éŽå¸¸è¦è¡¨ç¤ºå¼"
-#: argp/argp-help.c:224
-#, c-format
-msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
-msgstr "%.*s: ARGP_HELP_FMT åƒæ•¸éœ€è¦ä¸€å€‹å€¼"
-
-#: argp/argp-help.c:233
-#, c-format
-msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr "%.*s: 未知的 ARGP_HELP_FMT åƒæ•¸"
-
-#: argp/argp-help.c:245
-#, c-format
-msgid "Garbage in ARGP_HELP_FMT: %s"
-msgstr "ARGP_HELP_FMT 中無用的資訊: %s"
-
-#: argp/argp-help.c:1205
-msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."
-msgstr "é•·é¸é …的必須或å¯é¸ç”¨çš„引數也是相å°æ‡‰çŸ­é¸é …的必須或å¯é¸ç”¨çš„引數。"
-
-#: argp/argp-help.c:1592
-msgid "Usage:"
-msgstr "使用方å¼:"
-
-#: argp/argp-help.c:1596
-msgid " or: "
-msgstr " 或者: "
-
-#: argp/argp-help.c:1608
-msgid " [OPTION...]"
-msgstr " [åƒæ•¸...]"
-
-#: argp/argp-help.c:1635
-#, c-format
-msgid "Try `%s --help' or `%s --usage' for more information.\n"
-msgstr "請試著用 `%s --help' 或 `%s --usage' 來ç²å¾—更多相關訊æ¯ã€‚\n"
-
-#: argp/argp-help.c:1663
-#, c-format
-msgid "Report bugs to %s.\n"
-msgstr "請將程å¼å•é¡Œå›žå ±è‡³ %s。\n"
-
-#: argp/argp-parse.c:115
-msgid "Give this help list"
-msgstr "給出這個使用方å¼åˆ—表"
-
-#: argp/argp-parse.c:116
-msgid "Give a short usage message"
-msgstr "給出簡短的使用訊æ¯"
-
-#: argp/argp-parse.c:117
-msgid "Set the program name"
-msgstr "設定程å¼å稱"
-
-#: argp/argp-parse.c:119
-msgid "Hang for SECS seconds (default 3600)"
-msgstr "SECS 秒後掛斷 (é è¨­æ˜¯ 3600)"
-
-#: argp/argp-parse.c:180
-msgid "Print program version"
-msgstr "å°å‡ºç¨‹å¼ç‰ˆæœ¬"
-
-#: argp/argp-parse.c:196
-msgid "(PROGRAM ERROR) No version known!?"
-msgstr "(程å¼éŒ¯èª¤) 沒有èªå¾—的版本!?"
-
-#: argp/argp-parse.c:672
-#, c-format
-msgid "%s: Too many arguments\n"
-msgstr "%s: 太多的引數\n"
-
-#: argp/argp-parse.c:813
-msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr "(程å¼éŒ¯èª¤) é¸é …應該已經å¯è¾¯è­˜!?"
+#: posix/wordexp.c:1832
+msgid "parameter null or not set"
+msgstr "åƒæ•¸ç‚ºç©ºå­—元或是未設置"
#: resolv/herror.c:68
msgid "Resolver Error 0 (no error)"
@@ -3762,381 +4626,411 @@ msgstr "未知的伺æœå™¨éŒ¯èª¤"
msgid "No address associated with name"
msgstr "沒有此å稱所å°æ‡‰çš„ä½å€"
-#: resolv/herror.c:108
+#: resolv/herror.c:107
msgid "Resolver internal error"
msgstr "內部解讀錯誤"
-#: resolv/herror.c:111
+#: resolv/herror.c:110
msgid "Unknown resolver error"
msgstr "未知的解讀錯誤"
-#: resolv/res_hconf.c:147
-#, c-format
-msgid "%s: line %d: expected service, found `%s'\n"
-msgstr "%s: 第 %d 列: 期待一項æœå‹™ï¼Œå»ç™¼ç¾ `%s'\n"
-
-#: resolv/res_hconf.c:165
-#, c-format
-msgid "%s: line %d: cannot specify more than %d services"
-msgstr "%s: 第 %d 列: ç„¡æ³•æŒ‡å®šè¶…éŽ %d 個æœå‹™"
-
-#: resolv/res_hconf.c:191
-#, c-format
-msgid "%s: line %d: list delimiter not followed by keyword"
-msgstr "%s: 第 %d 列: é—œéµå­—ä¸å¯è·Ÿåœ¨è¡¨åˆ—分隔字元之後"
-
-#: resolv/res_hconf.c:231
+#: resolv/res_hconf.c:124
#, c-format
msgid "%s: line %d: cannot specify more than %d trim domains"
msgstr "%s: 第 %d 列: ç„¡æ³•æŒ‡å®šè¶…éŽ %d 個修剪範åœ"
-#: resolv/res_hconf.c:256
+#: resolv/res_hconf.c:145
#, c-format
msgid "%s: line %d: list delimiter not followed by domain"
msgstr "%s: 第 %d 列: 範åœä¸å¯è·Ÿåœ¨è¡¨åˆ—分隔字元之後"
-#: resolv/res_hconf.c:319
+#: resolv/res_hconf.c:204
#, c-format
msgid "%s: line %d: expected `on' or `off', found `%s'\n"
msgstr "%s: 第 %d 列: é æœŸç‚º `on' 或 `off',å»ç™¼ç¾ `%s'\n"
-#: resolv/res_hconf.c:366
+#: resolv/res_hconf.c:247
#, c-format
msgid "%s: line %d: bad command `%s'\n"
msgstr "%s: 第 %d 列: ä¸ç•¶çš„命令 `%s'\n"
-#: resolv/res_hconf.c:395
+#: resolv/res_hconf.c:282
#, c-format
msgid "%s: line %d: ignoring trailing garbage `%s'\n"
msgstr "%s: 第 %d 列: 正在忽略尾端的無用資料 `%s'\n"
-#: nss/getent.c:51
-msgid "database [key ...]"
-msgstr "資料庫 [éµå€¼...]"
+#: stdio-common/psiginfo-data.h:2
+msgid "Illegal opcode"
+msgstr "ä¸åˆæ³•çš„ opcode"
-#: nss/getent.c:56
-msgid "Service configuration to be used"
-msgstr "å°‡è¦ä½¿ç”¨çš„æœå‹™è¨­å®š"
+#: stdio-common/psiginfo-data.h:3
+msgid "Illegal operand"
+msgstr "ä¸åˆæ³•çš„é‹ç®—å…ƒ"
-#: nss/getent.c:136 nss/getent.c:375
-#, c-format
-msgid "Enumeration not supported on %s\n"
-msgstr "此項目在 %s 中ä¸è¢«æ”¯æ´\n"
+#: stdio-common/psiginfo-data.h:4
+msgid "Illegal addressing mode"
+msgstr "ä¸åˆæ³•çš„定å€æ¨¡å¼"
-#: nss/getent.c:800
-msgid "getent - get entries from administrative database."
-msgstr "getent - 從管ç†è³‡æ–™åº«ä¸­å–得項目內容。"
+#: stdio-common/psiginfo-data.h:5
+msgid "Illegal trap"
+msgstr "ä¸åˆæ³•çš„陷阱"
-#: nss/getent.c:801
-msgid "Supported databases:"
-msgstr "支æ´çš„資料庫:"
+#: stdio-common/psiginfo-data.h:6
+msgid "Privileged opcode"
+msgstr "需è¦æ¬Šé™çš„ opcode"
-#: nss/getent.c:858 nscd/nscd.c:131 nscd/nscd_nischeck.c:64
-msgid "wrong number of arguments"
-msgstr "åƒæ•¸æ•¸ç›®ä¸å°"
+#: stdio-common/psiginfo-data.h:7
+msgid "Privileged register"
+msgstr "需è¦æ¬Šé™çš„暫存器"
-#: nss/getent.c:868
-#, c-format
-msgid "Unknown database: %s\n"
-msgstr "未知的資料庫: %s\n"
+#: stdio-common/psiginfo-data.h:8
+msgid "Coprocessor error"
+msgstr "輔助處ç†å™¨éŒ¯èª¤"
-#: debug/pcprofiledump.c:52
-msgid "Don't buffer output"
-msgstr "ä¸è¦å°‡è¼¸å…¥å­˜å…¥ç·©è¡å€"
+#: stdio-common/psiginfo-data.h:9
+msgid "Internal stack error"
+msgstr "內部堆疊錯誤"
-#: debug/pcprofiledump.c:57
-msgid "Dump information generated by PC profiling."
-msgstr "將產生於 PC 測速評估的資料傾å¸å‡ºä¾†"
+#: stdio-common/psiginfo-data.h:12
+msgid "Integer divide by zero"
+msgstr "整數被零除"
-#: debug/pcprofiledump.c:60
-msgid "[FILE]"
-msgstr "[檔案]"
+#: stdio-common/psiginfo-data.h:13
+msgid "Integer overflow"
+msgstr "整數溢ä½"
-#: debug/pcprofiledump.c:100
-msgid "cannot open input file"
-msgstr "無法開啟輸入檔"
+#: stdio-common/psiginfo-data.h:14
+msgid "Floating-point divide by zero"
+msgstr "浮點數被零除"
-#: debug/pcprofiledump.c:106
-msgid "cannot read header"
-msgstr "無法讀å–標頭資料"
+#: stdio-common/psiginfo-data.h:15
+msgid "Floating-point overflow"
+msgstr "浮點數溢ä½"
-#: debug/pcprofiledump.c:170
-msgid "invalid pointer size"
-msgstr "無效的指標大å°"
+#: stdio-common/psiginfo-data.h:16
+msgid "Floating-point underflow"
+msgstr "浮點數下é™æº¢ä½"
-#: inet/rcmd.c:163 inet/rcmd.c:166
-msgid "rcmd: Cannot allocate memory\n"
-msgstr "rcmd: 無法é…置記憶體\n"
+#: stdio-common/psiginfo-data.h:17
+msgid "Floating-poing inexact result"
+msgstr "ä¸ç²¾ç¢ºçš„浮點數çµæžœ"
-#: inet/rcmd.c:185 inet/rcmd.c:188
-msgid "rcmd: socket: All ports in use\n"
-msgstr "rcmd: socket: 所有的埠都在使用中\n"
+#: stdio-common/psiginfo-data.h:18
+msgid "Invalid floating-point operation"
+msgstr "無效的浮點數æ“作"
-#: inet/rcmd.c:222
-#, c-format
-msgid "connect to address %s: "
-msgstr "連接到ä½å€ %s: "
+#: stdio-common/psiginfo-data.h:19
+msgid "Subscript out of range"
+msgstr "註標超出範åœ"
-#: inet/rcmd.c:240
-#, c-format
-msgid "Trying %s...\n"
-msgstr "嘗試 %s...\n"
+#: stdio-common/psiginfo-data.h:22
+msgid "Address not mapped to object"
+msgstr "ä½å€æ²’有映射到物件"
-#: inet/rcmd.c:289
-#, c-format
-msgid "rcmd: write (setting up stderr): %m\n"
-msgstr "rcmd: write (正在設定標準錯誤輸出): %m\n"
+#: stdio-common/psiginfo-data.h:23
+msgid "Invalid permissions for mapped object"
+msgstr "å°æ–¼æ˜ å°„物件的權é™ç„¡æ•ˆ"
-#: inet/rcmd.c:310
-#, c-format
-msgid "rcmd: poll (setting up stderr): %m\n"
-msgstr "rcmd: poll (正在設定標準錯誤輸出): %m\n"
+#: stdio-common/psiginfo-data.h:26
+msgid "Invalid address alignment"
+msgstr "無效的ä½å€å°é½Š"
-#: inet/rcmd.c:313
-msgid "poll: protocol failure in circuit setup\n"
-msgstr "poll: 通訊å”定在設定線路時失效\n"
+#: stdio-common/psiginfo-data.h:27
+msgid "Nonexisting physical address"
+msgstr "ä¸å­˜åœ¨çš„實體ä½å€"
-#: inet/rcmd.c:358
-msgid "socket: protocol failure in circuit setup\n"
-msgstr "socket: 通訊å”定在設定線路時失效\n"
+#: stdio-common/psiginfo-data.h:28
+msgid "Object-specific hardware error"
+msgstr "物件特定的硬體錯誤"
-#: inet/rcmd.c:387
-#, c-format
-msgid "rcmd: %s: short read"
-msgstr "rcmd: %s: 讀入資料éŽçŸ­"
+#: stdio-common/psiginfo-data.h:31
+msgid "Process breakpoint"
+msgstr "處ç†ä¸­æ–·é»ž"
-#: inet/rcmd.c:549
-msgid "lstat failed"
-msgstr "lstat 失敗"
+#: stdio-common/psiginfo-data.h:32
+msgid "Process trace trap"
+msgstr "處ç†è¿½è¹¤é™·é˜±"
-#: inet/rcmd.c:551
-msgid "not regular file"
-msgstr "並éžæ­£å¸¸çš„檔案"
+#: stdio-common/psiginfo-data.h:35
+msgid "Child has exited"
+msgstr "å­è¡Œç¨‹å·²çµæŸ"
-#: inet/rcmd.c:556
-msgid "cannot open"
-msgstr "無法開啟"
+#: stdio-common/psiginfo-data.h:36
+msgid "Child has terminated abnormally and did not create a core file"
+msgstr "å­è¡Œç¨‹å·²ç•°å¸¸çµ‚止且未建立記憶體檔案"
-#: inet/rcmd.c:558
-msgid "fstat failed"
-msgstr "fstat 失敗"
+#: stdio-common/psiginfo-data.h:37
+msgid "Child hat terminated abnormally and created a core file"
+msgstr "å­è¡Œç¨‹å·²ç•°å¸¸çµ‚止並已建立了記憶體檔案"
-#: inet/rcmd.c:560
-msgid "bad owner"
-msgstr "錯誤的æ“有者"
+#: stdio-common/psiginfo-data.h:38
+msgid "Traced child has trapped"
+msgstr "追蹤的å­è¡Œç¨‹å·²è½å…¥é™·é˜±"
-#: inet/rcmd.c:562
-msgid "writeable by other than owner"
-msgstr "使用者以外的人亦å¯å¯«å…¥"
+#: stdio-common/psiginfo-data.h:39
+msgid "Child has stopped"
+msgstr "å­è¡Œç¨‹å·²åœæ­¢"
-#: inet/rcmd.c:564
-msgid "hard linked somewhere"
-msgstr "被實體連çµåˆ°æŸè™•"
+#: stdio-common/psiginfo-data.h:40
+msgid "Stopped child has continued"
+msgstr "åœæ­¢çš„å­è¡Œç¨‹å·²ç¹¼çºŒ"
-#: inet/ruserpass.c:170 inet/ruserpass.c:193
-msgid "out of memory"
-msgstr "記憶體ä¸è¶³"
+#: stdio-common/psiginfo-data.h:43
+msgid "Data input available"
+msgstr "資料輸入å¯ç”¨"
-#: inet/ruserpass.c:184
-msgid "Error: .netrc file is readable by others."
-msgstr "錯誤: .netrc 檔å¯ä»¥è¢«åˆ¥äººè®€å–"
+#: stdio-common/psiginfo-data.h:44
+msgid "Output buffers available"
+msgstr "輸出緩è¡å€å¯ç”¨"
-#: inet/ruserpass.c:185
-msgid "Remove password or make file unreadable by others."
-msgstr "移除密碼或讓他人無法讀å–檔案"
+#: stdio-common/psiginfo-data.h:45
+msgid "Input message available"
+msgstr "輸入訊æ¯å¯ç”¨"
-#: inet/ruserpass.c:277
+#: stdio-common/psiginfo-data.h:46
+msgid "I/O error"
+msgstr "I/O 錯誤"
+
+#: stdio-common/psiginfo-data.h:47
+msgid "High priority input available"
+msgstr "高優先權輸入å¯ç”¨"
+
+#: stdio-common/psiginfo-data.h:48
+msgid "Device disconnected"
+msgstr "è£ç½®å·²ç¶“çµæŸé€£ç·š"
+
+#: stdio-common/psiginfo.c:145
+msgid "Signal sent by kill()"
+msgstr "kill() 已發é€ä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:148
+msgid "Signal sent by sigqueue()"
+msgstr "sigqueue() 已發é€ä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:151
+msgid "Signal generated by the expiration of a timer"
+msgstr "計時器的逾期已產生信號"
+
+#: stdio-common/psiginfo.c:154
+msgid "Signal generated by the completion of an asynchronous I/O request"
+msgstr "éžåŒæ­¥ I/O è¦æ±‚的完æˆå·²ç”¢ç”Ÿä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:158
+msgid "Signal generated by the arrival of a message on an empty message queue"
+msgstr "空訊æ¯ä½‡åˆ—中到é”的訊æ¯å·²ç”¢ç”Ÿä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:163
+msgid "Signal sent by tkill()"
+msgstr "tkill() 已發é€ä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:168
+msgid "Signal generated by the completion of an asynchronous name lookup request"
+msgstr "éžåŒæ­¥å稱查找è¦æ±‚的完æˆå·²ç”¢ç”Ÿä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:174
+msgid "Signal generated by the completion of an I/O request"
+msgstr "I/O è¦æ±‚的完æˆå·²ç”¢ç”Ÿä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:180
+msgid "Signal sent by the kernel"
+msgstr "內核已發é€ä¿¡è™Ÿ"
+
+#: stdio-common/psiginfo.c:204
#, c-format
-msgid "Unknown .netrc keyword %s"
-msgstr "未知的 .netrc é—œéµå­— %s"
+msgid "Unknown signal %d\n"
+msgstr "ä¸æ˜Žä¿¡è™Ÿ %d\n"
+
+#: stdio-common/psignal.c:51
+#, c-format
+msgid "%s%sUnknown signal %d\n"
+msgstr "%s%s未知的信號 %d\n"
+
+#: stdio-common/psignal.c:52
+msgid "Unknown signal"
+msgstr "ä¸æ˜Žçš„信號"
+
+#: string/_strerror.c:47 sysdeps/mach/_strerror.c:87
+msgid "Unknown error "
+msgstr "未知的錯誤 "
+
+#: string/strerror.c:43
+msgid "Unknown error"
+msgstr "未知的錯誤"
+
+#: string/strsignal.c:65
+#, c-format
+msgid "Real-time signal %d"
+msgstr "å³æ™‚的信號 %d"
+
+#: string/strsignal.c:69
+#, c-format
+msgid "Unknown signal %d"
+msgstr "未知的信號 %d"
-#: sunrpc/auth_unix.c:115 sunrpc/auth_unix.c:118
-msgid "authunix_create: out of memory\n"
-msgstr "authunix_create: 記憶體ä¸è¶³\n"
+#: sunrpc/auth_unix.c:113 sunrpc/clnt_tcp.c:125 sunrpc/clnt_udp.c:136
+#: sunrpc/clnt_unix.c:126 sunrpc/svc_tcp.c:173 sunrpc/svc_tcp.c:218
+#: sunrpc/svc_udp.c:147 sunrpc/svc_unix.c:174 sunrpc/svc_unix.c:215
+#: sunrpc/xdr.c:632 sunrpc/xdr.c:792 sunrpc/xdr_array.c:100
+#: sunrpc/xdr_rec.c:154 sunrpc/xdr_ref.c:79
+msgid "out of memory\n"
+msgstr "記憶體ä¸è¶³\n"
-#: sunrpc/auth_unix.c:318
-msgid "auth_none.c - Fatal marshalling problem"
-msgstr "auth_none.c - åš´é‡çš„排åºå•é¡Œ"
+#: sunrpc/auth_unix.c:351
+msgid "auth_unix.c: Fatal marshalling problem"
+msgstr "auth_unix.c: åš´é‡çš„編組å•é¡Œ"
-#: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139
+#: sunrpc/clnt_perr.c:98 sunrpc/clnt_perr.c:114
#, c-format
-msgid "; low version = %lu, high version = %lu"
-msgstr "; 低版本 = %lu, 高版本 = %lu"
+msgid "%s: %s; low version = %lu, high version = %lu"
+msgstr "%s: %s; 低版本 = %lu,高版本 = %lu"
-#: sunrpc/clnt_perr.c:125
-msgid "; why = "
-msgstr "; 原因 = "
+#: sunrpc/clnt_perr.c:105
+#, c-format
+msgid "%s: %s; why = %s\n"
+msgstr "%s: %s; 原因 = %s\n"
-#: sunrpc/clnt_perr.c:132
+#: sunrpc/clnt_perr.c:107
#, c-format
-msgid "(unknown authentication error - %d)"
-msgstr "(未知鑑定錯誤 - %d)"
+msgid "%s: %s; why = (unknown authentication error - %d)\n"
+msgstr "%s: %s; 原因 = (ä¸æ˜Žçš„èªè­‰éŒ¯èª¤ - %d)\n"
-#: sunrpc/clnt_perr.c:177
+#: sunrpc/clnt_perr.c:156
msgid "RPC: Success"
msgstr "RPC: æˆåŠŸ"
-#: sunrpc/clnt_perr.c:180
+#: sunrpc/clnt_perr.c:159
msgid "RPC: Can't encode arguments"
msgstr "RPC: 無法將引數編碼"
-#: sunrpc/clnt_perr.c:184
+#: sunrpc/clnt_perr.c:163
msgid "RPC: Can't decode result"
msgstr "RPC: 無法解碼得出çµæžœ"
-#: sunrpc/clnt_perr.c:188
+#: sunrpc/clnt_perr.c:167
msgid "RPC: Unable to send"
msgstr "RPC: 無法傳é€"
-#: sunrpc/clnt_perr.c:192
+#: sunrpc/clnt_perr.c:171
msgid "RPC: Unable to receive"
msgstr "RPC: 無法接收"
-#: sunrpc/clnt_perr.c:196
+#: sunrpc/clnt_perr.c:175
msgid "RPC: Timed out"
msgstr "RPC: 超éŽæ™‚間上é™"
-#: sunrpc/clnt_perr.c:200
+#: sunrpc/clnt_perr.c:179
msgid "RPC: Incompatible versions of RPC"
msgstr "RPC: RPC 版本ä¸ç›¸å®¹"
-#: sunrpc/clnt_perr.c:204
+#: sunrpc/clnt_perr.c:183
msgid "RPC: Authentication error"
msgstr "RPC: èªè­‰éŒ¯èª¤"
-#: sunrpc/clnt_perr.c:208
+#: sunrpc/clnt_perr.c:187
msgid "RPC: Program unavailable"
msgstr "RPC: 程å¼ä¸å­˜åœ¨"
-#: sunrpc/clnt_perr.c:212
+#: sunrpc/clnt_perr.c:191
msgid "RPC: Program/version mismatch"
msgstr "RPC: 程å¼/版本ä¸ç¬¦"
-#: sunrpc/clnt_perr.c:216
+#: sunrpc/clnt_perr.c:195
msgid "RPC: Procedure unavailable"
msgstr "RPC: 無法å–得程åº"
-#: sunrpc/clnt_perr.c:220
+#: sunrpc/clnt_perr.c:199
msgid "RPC: Server can't decode arguments"
msgstr "RPC: 伺æœå™¨ç„¡æ³•å°‡å¼•æ•¸è§£ç¢¼"
-#: sunrpc/clnt_perr.c:224
+#: sunrpc/clnt_perr.c:203
msgid "RPC: Remote system error"
msgstr "RPC: é ç«¯ç¨‹å¼éŒ¯èª¤"
-#: sunrpc/clnt_perr.c:228
+#: sunrpc/clnt_perr.c:207
msgid "RPC: Unknown host"
msgstr "RPC: 未知的é ç«¯ä½å€"
-#: sunrpc/clnt_perr.c:232
+#: sunrpc/clnt_perr.c:211
msgid "RPC: Unknown protocol"
msgstr "RPC: 未知的å”定"
-#: sunrpc/clnt_perr.c:236
+#: sunrpc/clnt_perr.c:215
msgid "RPC: Port mapper failure"
msgstr "RPC: 通訊阜å°æ˜ éŒ¯èª¤"
-#: sunrpc/clnt_perr.c:240
+#: sunrpc/clnt_perr.c:219
msgid "RPC: Program not registered"
msgstr "RPC: 程å¼æ²’有註冊"
-#: sunrpc/clnt_perr.c:244
+#: sunrpc/clnt_perr.c:223
msgid "RPC: Failed (unspecified error)"
msgstr "RPC: 失敗 (éžç‰¹å®šçš„錯誤)"
-#: sunrpc/clnt_perr.c:285
+#: sunrpc/clnt_perr.c:264
msgid "RPC: (unknown error code)"
msgstr "RPC: (未知的錯誤碼)"
-#: sunrpc/clnt_perr.c:357
+#: sunrpc/clnt_perr.c:336
msgid "Authentication OK"
msgstr "鑑定完æˆ"
-#: sunrpc/clnt_perr.c:360
+#: sunrpc/clnt_perr.c:339
msgid "Invalid client credential"
-msgstr "ä¸é©ç”¨çš„請求端身份èªè­‰"
+msgstr "ä¸é©ç”¨çš„請求端身分èªè­‰"
-#: sunrpc/clnt_perr.c:364
+#: sunrpc/clnt_perr.c:343
msgid "Server rejected credential"
-msgstr "伺æœå™¨æ‹’絕身份證明"
+msgstr "伺æœå™¨æ‹’絕身分證明"
-#: sunrpc/clnt_perr.c:368
+#: sunrpc/clnt_perr.c:347
msgid "Invalid client verifier"
msgstr "ä¸é©ç”¨çš„請求端èªè­‰"
-#: sunrpc/clnt_perr.c:372
+#: sunrpc/clnt_perr.c:351
msgid "Server rejected verifier"
msgstr "伺æœå™¨æ‹’絕èªè­‰"
-#: sunrpc/clnt_perr.c:376
+#: sunrpc/clnt_perr.c:355
msgid "Client credential too weak"
msgstr "用戶端背景太弱"
-#: sunrpc/clnt_perr.c:380
+#: sunrpc/clnt_perr.c:359
msgid "Invalid server verifier"
msgstr "ä¸é©ç”¨çš„æœå‹™èªè­‰"
-#: sunrpc/clnt_perr.c:384
+#: sunrpc/clnt_perr.c:363
msgid "Failed (unspecified error)"
-msgstr "失敗 (沒有指定的錯誤)"
-
-#: sunrpc/clnt_raw.c:117
-msgid "clnt_raw.c - Fatal header serialization error."
-msgstr "clnt_raw.c - åš´é‡çš„標頭åºåˆ—化錯誤。"
-
-#: sunrpc/clnt_tcp.c:134 sunrpc/clnt_tcp.c:137
-msgid "clnttcp_create: out of memory\n"
-msgstr "clnttcp_create: 記憶體ä¸è¶³\n"
-
-#: sunrpc/clnt_udp.c:141 sunrpc/clnt_udp.c:144
-msgid "clntudp_create: out of memory\n"
-msgstr "clntudp_create: 記憶體ä¸è¶³\n"
+msgstr "失敗 (無特定的錯誤)"
-#: sunrpc/clnt_unix.c:131 sunrpc/clnt_unix.c:134
-msgid "clntunix_create: out of memory\n"
-msgstr "clntunix_create: 記憶體ä¸è¶³\n"
+#: sunrpc/clnt_raw.c:115
+msgid "clnt_raw.c: fatal header serialization error"
+msgstr "clnt_raw.c: åš´é‡çš„標頭åºåˆ—化錯誤"
-#: sunrpc/get_myaddr.c:78
-msgid "get_myaddress: ioctl (get interface configuration)"
-msgstr "get_myaddress: ioctl (å–得介é¢è¨­å®šè³‡æ–™)"
+#: sunrpc/pm_getmaps.c:77
+msgid "pmap_getmaps.c: rpc problem"
+msgstr "pmap_getmaps.c: é ç«¯ç¨‹åºå‘¼å«å•é¡Œ"
-#: sunrpc/pm_getmaps.c:74
-msgid "pmap_getmaps rpc problem"
-msgstr "pmap_getmaps é ç«¯ç¨‹åºå‘¼å«å•é¡Œ"
-
-#: sunrpc/pmap_clnt.c:72
-msgid "__get_myaddress: ioctl (get interface configuration)"
-msgstr "__get_myaddress: ioctl (å–得介é¢çµ„æ…‹)"
-
-#: sunrpc/pmap_clnt.c:137
+#: sunrpc/pmap_clnt.c:127
msgid "Cannot register service"
msgstr "無法註冊æœå‹™"
-#: sunrpc/pmap_rmt.c:190
-msgid "broadcast: ioctl (get interface configuration)"
-msgstr "broadcast: ioctl (å–得介é¢è¨­å®šå€¼)"
-
-#: sunrpc/pmap_rmt.c:199
-msgid "broadcast: ioctl (get interface flags)"
-msgstr "broadcast: ioctl (å–得介é¢æ——標)"
-
-#: sunrpc/pmap_rmt.c:269
+#: sunrpc/pmap_rmt.c:243
msgid "Cannot create socket for broadcast rpc"
msgstr "無法為廣播å¼é ç«¯ç¨‹åºå‘¼å« (broadcast rpc) 產生 socket"
-#: sunrpc/pmap_rmt.c:276
+#: sunrpc/pmap_rmt.c:250
msgid "Cannot set socket option SO_BROADCAST"
msgstr "無法設定 socket é¸é … SO_BROADCAST"
-#: sunrpc/pmap_rmt.c:328
+#: sunrpc/pmap_rmt.c:302
msgid "Cannot send broadcast packet"
msgstr "無法傳é€å»£æ’­å°åŒ…"
-#: sunrpc/pmap_rmt.c:353
+#: sunrpc/pmap_rmt.c:327
msgid "Broadcast poll problem"
msgstr "Broadcast 調查有å•é¡Œ"
-#: sunrpc/pmap_rmt.c:366
+#: sunrpc/pmap_rmt.c:340
msgid "Cannot receive reply to broadcast"
msgstr "無法接å—廣播後的回應"
@@ -4176,1853 +5070,1918 @@ msgstr "%s: C å‰ç½®è™•ç†å™¨å¤±æ•ˆï¼Œå…¶çµæŸç¢¼ç‚º %d\n"
#: sunrpc/rpc_main.c:462
#, c-format
-msgid "illegal nettype :`%s'\n"
-msgstr "ä¸åˆæ³•çš„ nettype :`%s'\n"
+msgid "illegal nettype: `%s'\n"
+msgstr "ä¸åˆæ³•çš„ nettype:「%sã€\n"
-#: sunrpc/rpc_main.c:1104
+#: sunrpc/rpc_main.c:1128
#, c-format
msgid "rpcgen: too many defines\n"
msgstr "rpcgen: 太多 define 了\n"
-#: sunrpc/rpc_main.c:1116
+#: sunrpc/rpc_main.c:1140
#, c-format
msgid "rpcgen: arglist coding error\n"
msgstr "rpcgen: arglist 編碼錯誤\n"
#. TRANS: the file will not be removed; this is an
#. TRANS: informative message.
-#: sunrpc/rpc_main.c:1149
+#: sunrpc/rpc_main.c:1173
#, c-format
msgid "file `%s' already exists and may be overwritten\n"
msgstr "檔案 `%s' 已經存在並有å¯èƒ½æœƒè¢«è¦†è“‹æŽ‰\n"
-#: sunrpc/rpc_main.c:1194
+#: sunrpc/rpc_main.c:1218
#, c-format
msgid "Cannot specify more than one input file!\n"
msgstr "無法指定超éŽä¸€å€‹è¼¸å…¥æª”!\n"
-#: sunrpc/rpc_main.c:1364
+#: sunrpc/rpc_main.c:1392
+#, c-format
msgid "This implementation doesn't support newstyle or MT-safe code!\n"
msgstr "此實作方å¼ä¸æ”¯æ´æ–°çš„å½¢å¼æˆ–多安全執行åºçš„程å¼!\n"
-#: sunrpc/rpc_main.c:1373
+#: sunrpc/rpc_main.c:1401
#, c-format
msgid "Cannot use netid flag with inetd flag!\n"
msgstr "無法將 netid 旗標與 inetd 旗標一起使用!\n"
-#: sunrpc/rpc_main.c:1385
+#: sunrpc/rpc_main.c:1413
+#, c-format
msgid "Cannot use netid flag without TIRPC!\n"
msgstr "無法在沒有 TIRPC 時使用 netid 旗標!\n"
-#: sunrpc/rpc_main.c:1392
+#: sunrpc/rpc_main.c:1420
+#, c-format
msgid "Cannot use table flags with newstyle!\n"
msgstr "無法將表格旗標與 newstyle 一起使用!\n"
-#: sunrpc/rpc_main.c:1411
+#: sunrpc/rpc_main.c:1439
#, c-format
msgid "\"infile\" is required for template generation flags.\n"
msgstr "\"infile\" 是樣版產生旗標所需的\n"
-#: sunrpc/rpc_main.c:1416
+#: sunrpc/rpc_main.c:1444
#, c-format
msgid "Cannot have more than one file generation flag!\n"
msgstr "無法使用超éŽä¸€å€‹çš„檔案產生旗標!\n"
-#: sunrpc/rpc_main.c:1425
+#: sunrpc/rpc_main.c:1453
#, c-format
msgid "usage: %s infile\n"
msgstr "用法: %s infile\n"
-#: sunrpc/rpc_main.c:1426
+#: sunrpc/rpc_main.c:1454
#, c-format
msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
msgstr "\t%s [-abkCLNTM][-Då稱[=值]] [-i 大å°] [-I [-K 秒數]] [-Y 路徑] 輸入檔案\n"
-#: sunrpc/rpc_main.c:1428
+#: sunrpc/rpc_main.c:1456
#, c-format
msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o 輸出檔案] [輸入檔案]\n"
-#: sunrpc/rpc_main.c:1430
+#: sunrpc/rpc_main.c:1458
#, c-format
msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
msgstr "\t%s [-s 網路型態]* [-o 輸出檔案] [輸入檔案]\n"
-#: sunrpc/rpc_main.c:1431
+#: sunrpc/rpc_main.c:1459
#, c-format
msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
msgstr "\t%s [-n 網路識別符號]* [-o 輸出檔案] [輸入檔案]\n"
-#: sunrpc/rpc_scan.c:116
+#: sunrpc/rpc_main.c:1467
+#, c-format
+msgid "options:\n"
+msgstr "é¸é …:\n"
+
+#: sunrpc/rpc_main.c:1468
+#, c-format
+msgid "-a\t\tgenerate all files, including samples\n"
+msgstr "-a\t\t產生所有檔案,包å«æ¨£æœ¬\n"
+
+#: sunrpc/rpc_main.c:1469
+#, c-format
+msgid "-b\t\tbackward compatibility mode (generates code for SunOS 4.1)\n"
+msgstr "-b\t\tå›žæº¯ç›¸å®¹æ¨¡å¼ (產生用於 SunOS 4.1 的編碼)\n"
+
+#: sunrpc/rpc_main.c:1470
+#, c-format
+msgid "-c\t\tgenerate XDR routines\n"
+msgstr "-c\t\t產生 XDR 常å¼\n"
+
+#: sunrpc/rpc_main.c:1471
+#, c-format
+msgid "-C\t\tANSI C mode\n"
+msgstr "-C\t\tANSI C 模å¼\n"
+
+#: sunrpc/rpc_main.c:1472
+#, c-format
+msgid "-Dname[=value]\tdefine a symbol (same as #define)\n"
+msgstr "-Då稱[=值]\t定義一個符號 (å¦‚åŒ #define)\n"
+
+#: sunrpc/rpc_main.c:1473
+#, c-format
+msgid "-h\t\tgenerate header file\n"
+msgstr "-h\t\t產生標頭檔\n"
+
+#: sunrpc/rpc_main.c:1474
+#, c-format
+msgid "-i size\t\tsize at which to start generating inline code\n"
+msgstr "-i 大å°\t\t啟始產生內è¯ç·¨ç¢¼çš„大å°\n"
+
+#: sunrpc/rpc_main.c:1475
+#, c-format
+msgid "-I\t\tgenerate code for inetd support in server (for SunOS 4.1)\n"
+msgstr "-I\t\t產生在伺æœå™¨ä¸­æ”¯æ´çš„ inetd 編碼 (用於 SunOS 4.1)\n"
+
+#: sunrpc/rpc_main.c:1476
+#, c-format
+msgid "-K seconds\tserver exits after K seconds of inactivity\n"
+msgstr "-K 秒\tä¸ä½œç”¨ K 秒之後離開伺æœå™¨\n"
+
+#: sunrpc/rpc_main.c:1477
+#, c-format
+msgid "-l\t\tgenerate client side stubs\n"
+msgstr "-l\t\t產生客戶端殘餘\n"
+
+#: sunrpc/rpc_main.c:1478
+#, c-format
+msgid "-L\t\tserver errors will be printed to syslog\n"
+msgstr "-L\t\t伺æœå™¨éŒ¯èª¤å°‡è¢«åˆ—å°åˆ° syslog\n"
+
+#: sunrpc/rpc_main.c:1479
+#, c-format
+msgid "-m\t\tgenerate server side stubs\n"
+msgstr "-m\t\t產生伺æœå™¨ç«¯æ®˜é¤˜\n"
+
+#: sunrpc/rpc_main.c:1480
+#, c-format
+msgid "-M\t\tgenerate MT-safe code\n"
+msgstr "-M\t\t產生 MT-safe 編碼\n"
+
+#: sunrpc/rpc_main.c:1481
+#, c-format
+msgid "-n netid\tgenerate server code that supports named netid\n"
+msgstr "-n netid\t產生支æ´å…·å netid 的伺æœå™¨ç·¨ç¢¼\n"
+
+#: sunrpc/rpc_main.c:1482
+#, c-format
+msgid "-N\t\tsupports multiple arguments and call-by-value\n"
+msgstr "-N\t\t支æ´å¤šé‡å¼•æ•¸å’Œå‚³å€¼å‘¼å«\n"
+
+#: sunrpc/rpc_main.c:1483
+#, c-format
+msgid "-o outfile\tname of the output file\n"
+msgstr "-o 輸出檔\t輸出檔案的å稱\n"
+
+#: sunrpc/rpc_main.c:1484
+#, c-format
+msgid "-s nettype\tgenerate server code that supports named nettype\n"
+msgstr "-s nettype\t產生支æ´å…·å nettype 的伺æœå™¨ç·¨ç¢¼\n"
+
+#: sunrpc/rpc_main.c:1485
+#, c-format
+msgid "-Sc\t\tgenerate sample client code that uses remote procedures\n"
+msgstr "-Sc\t\t產生使用é ç«¯ç¨‹åºçš„範例客戶端編碼\n"
+
+#: sunrpc/rpc_main.c:1486
+#, c-format
+msgid "-Ss\t\tgenerate sample server code that defines remote procedures\n"
+msgstr "-Ss\t\t產生定義é ç«¯ç¨‹åºçš„範例伺æœå™¨ç·¨ç¢¼\n"
+
+#: sunrpc/rpc_main.c:1487
+#, c-format
+msgid "-Sm \t\tgenerate makefile template \n"
+msgstr "-Sm\t\t產生 makefile 模æ¿\n"
+
+#: sunrpc/rpc_main.c:1488
+#, c-format
+msgid "-t\t\tgenerate RPC dispatch table\n"
+msgstr "-t\t\t產生 RPC æ´¾é€è¡¨\n"
+
+#: sunrpc/rpc_main.c:1489
+#, c-format
+msgid "-T\t\tgenerate code to support RPC dispatch tables\n"
+msgstr "-T\t\tç”¢ç”Ÿæ”¯æ´ RPC æ´¾é€è¡¨çš„編碼\n"
+
+#: sunrpc/rpc_main.c:1490
+#, c-format
+msgid "-Y path\t\tdirectory name to find C preprocessor (cpp)\n"
+msgstr "-Y 路徑\t\tè¦å°‹æ‰¾ C å‰ç½®è™•ç†å™¨ (cpp) 的目錄å稱\n"
+
+#: sunrpc/rpc_scan.c:112
msgid "constant or identifier expected"
msgstr "應該è¦æœ‰å¸¸æ•¸æˆ–識別符號æ‰å°"
-#: sunrpc/rpc_scan.c:312
+#: sunrpc/rpc_scan.c:308
msgid "illegal character in file: "
msgstr "檔案中有ä¸åˆæ³•çš„å­—å…ƒ: "
-#: sunrpc/rpc_scan.c:351 sunrpc/rpc_scan.c:377
+#: sunrpc/rpc_scan.c:347 sunrpc/rpc_scan.c:373
msgid "unterminated string constant"
msgstr "沒有çµå°¾çš„字串常數"
-#: sunrpc/rpc_scan.c:383
+#: sunrpc/rpc_scan.c:379
msgid "empty char string"
msgstr "空的字元字串"
-#: sunrpc/rpc_scan.c:525 sunrpc/rpc_scan.c:535
+#: sunrpc/rpc_scan.c:521 sunrpc/rpc_scan.c:531
msgid "preprocessor error"
msgstr "å‰ç½®è™•ç†å™¨éŒ¯èª¤"
-#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383
+#: sunrpc/rpcinfo.c:246 sunrpc/rpcinfo.c:392
#, c-format
msgid "program %lu is not available\n"
msgstr "ç¨‹å¼ %lu ä¸å­˜åœ¨\n"
-#: sunrpc/rpcinfo.c:264 sunrpc/rpcinfo.c:310 sunrpc/rpcinfo.c:333
-#: sunrpc/rpcinfo.c:407 sunrpc/rpcinfo.c:453 sunrpc/rpcinfo.c:476
-#: sunrpc/rpcinfo.c:510
+#: sunrpc/rpcinfo.c:273 sunrpc/rpcinfo.c:319 sunrpc/rpcinfo.c:342
+#: sunrpc/rpcinfo.c:416 sunrpc/rpcinfo.c:462 sunrpc/rpcinfo.c:485
+#: sunrpc/rpcinfo.c:519
#, c-format
msgid "program %lu version %lu is not available\n"
msgstr "ç¨‹å¼ %lu 的第 %lu 版並ä¸å­˜åœ¨\n"
-#: sunrpc/rpcinfo.c:515
+#: sunrpc/rpcinfo.c:524
#, c-format
msgid "program %lu version %lu ready and waiting\n"
msgstr "ç¨‹å¼ %lu 的第 %lu 版已經就緒並等待æœå‹™ä¸­\n"
-#: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563
+#: sunrpc/rpcinfo.c:565 sunrpc/rpcinfo.c:572
msgid "rpcinfo: can't contact portmapper"
msgstr "rpcinfo: 無法建立跟 portmapper 之間的連線"
-#: sunrpc/rpcinfo.c:570
+#: sunrpc/rpcinfo.c:579
msgid "No remote programs registered.\n"
msgstr "沒有註冊éŽçš„é ç«¯æ‡‰ç”¨ç¨‹å¼\n"
-#: sunrpc/rpcinfo.c:574
+#: sunrpc/rpcinfo.c:583
msgid " program vers proto port\n"
msgstr " 程å¼æŽ¡ç”¨çš„å”定連接阜\n"
-#: sunrpc/rpcinfo.c:613
+#: sunrpc/rpcinfo.c:622
msgid "(unknown)"
msgstr "(未知)"
-#: sunrpc/rpcinfo.c:637
+#: sunrpc/rpcinfo.c:646
#, c-format
msgid "rpcinfo: broadcast failed: %s\n"
msgstr "rpcinfo: 廣播失敗: %s\n"
-#: sunrpc/rpcinfo.c:658
+#: sunrpc/rpcinfo.c:667
msgid "Sorry. You are not root\n"
msgstr "ä¸å¥½æ„æ€ï¼Œä½ ä¸¦ä¸æ˜¯ root 使用者\n"
-#: sunrpc/rpcinfo.c:665
+#: sunrpc/rpcinfo.c:674
#, c-format
msgid "rpcinfo: Could not delete registration for prog %s version %s\n"
msgstr "rpcinfo: ç„¡æ³•åˆªé™¤ç¨‹å¼ %s (第 %s 版) 的註冊資料\n"
-#: sunrpc/rpcinfo.c:674
+#: sunrpc/rpcinfo.c:683
msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
msgstr "使用方å¼: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
-#: sunrpc/rpcinfo.c:676
+#: sunrpc/rpcinfo.c:685
msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"
msgstr " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"
-#: sunrpc/rpcinfo.c:678
+#: sunrpc/rpcinfo.c:687
msgid " rpcinfo -p [ host ]\n"
msgstr " rpcinfo -p [ host ]\n"
-#: sunrpc/rpcinfo.c:679
+#: sunrpc/rpcinfo.c:688
msgid " rpcinfo -b prognum versnum\n"
msgstr " rpcinfo -b prognum versnum\n"
-#: sunrpc/rpcinfo.c:680
+#: sunrpc/rpcinfo.c:689
msgid " rpcinfo -d prognum versnum\n"
msgstr " rpcinfo -d prognum versnum\n"
-#: sunrpc/rpcinfo.c:695
+#: sunrpc/rpcinfo.c:714
#, c-format
msgid "rpcinfo: %s is unknown service\n"
msgstr "rpcinfo: %s 是ä¸æ˜Žçš„æœå‹™\n"
-#: sunrpc/rpcinfo.c:732
+#: sunrpc/rpcinfo.c:751
#, c-format
msgid "rpcinfo: %s is unknown host\n"
msgstr "rpcinfo: %s 是ä¸æ˜Žçš„主機\n"
-#: sunrpc/svc_run.c:76
+#: sunrpc/svc_run.c:71
+msgid "svc_run: - out of memory"
+msgstr "svc_run:- 記憶體ä¸è¶³"
+
+#: sunrpc/svc_run.c:91
msgid "svc_run: - poll failed"
msgstr "svc_run: - poll 失敗"
-#: sunrpc/svc_simple.c:87
+#: sunrpc/svc_simple.c:81
#, c-format
msgid "can't reassign procedure number %ld\n"
msgstr "ä¸èƒ½é‡è¤‡æŒ‡å®šç¨‹åºè™Ÿç¢¼ %ld\n"
-#: sunrpc/svc_simple.c:96
+#: sunrpc/svc_simple.c:91
msgid "couldn't create an rpc server\n"
msgstr "ä¸èƒ½ç”¢ç”Ÿé ç«¯ç¨‹åºå‘¼å«ä¼ºæœç¨‹å¼\n"
-#: sunrpc/svc_simple.c:104
+#: sunrpc/svc_simple.c:99
#, c-format
msgid "couldn't register prog %ld vers %ld\n"
msgstr "ä¸èƒ½å°‡ç¨‹å¼ %ld 註冊到 %ld\n"
-#: sunrpc/svc_simple.c:111
+#: sunrpc/svc_simple.c:107
msgid "registerrpc: out of memory\n"
msgstr "registerrpc: 記憶體ä¸è¶³\n"
-#: sunrpc/svc_simple.c:175
+#: sunrpc/svc_simple.c:168
#, c-format
msgid "trouble replying to prog %d\n"
msgstr "å›žæ‡‰ç¨‹å¼ %d 時發生困難\n"
-#: sunrpc/svc_simple.c:183
+#: sunrpc/svc_simple.c:177
#, c-format
msgid "never registered prog %d\n"
msgstr "åƒè¬ä¸è¦è¨»å†Šç¨‹å¼ %d\n"
-#: sunrpc/svc_tcp.c:155
+#: sunrpc/svc_tcp.c:149
msgid "svc_tcp.c - tcp socket creation problem"
msgstr "svc_tcp.c - tcp socket 建立發生å•é¡Œ"
-#: sunrpc/svc_tcp.c:170
+#: sunrpc/svc_tcp.c:164
msgid "svc_tcp.c - cannot getsockname or listen"
msgstr "svc_tcp.c - 無法 getsockname 或 listen"
-#: sunrpc/svc_tcp.c:181 sunrpc/svc_tcp.c:184
-msgid "svctcp_create: out of memory\n"
-msgstr "svctcp_create: 記憶體ä¸è¶³\n"
-
-#: sunrpc/svc_tcp.c:225 sunrpc/svc_tcp.c:228
-msgid "svc_tcp: makefd_xprt: out of memory\n"
-msgstr "svc_tcp: makefd_xprt: 記憶體ä¸è¶³\n"
-
-#: sunrpc/svc_udp.c:128
+#: sunrpc/svc_udp.c:122
msgid "svcudp_create: socket creation problem"
msgstr "svcudp_create: socket 建立有å•é¡Œ"
-#: sunrpc/svc_udp.c:142
+#: sunrpc/svc_udp.c:136
msgid "svcudp_create - cannot getsockname"
msgstr "svcudp_create - 無法 getsockname"
-#: sunrpc/svc_udp.c:154 sunrpc/svc_udp.c:157
-msgid "svcudp_create: out of memory\n"
-msgstr "svcudp_create: 記憶體ä¸è¶³\n"
-
-#: sunrpc/svc_udp.c:182 sunrpc/svc_udp.c:185
+#: sunrpc/svc_udp.c:168
msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n"
msgstr "svcudp_create: xp_pad 太å°ä»¥è‡´æ–¼ç„¡æ³• IP_PKTINFO\n"
-#: sunrpc/svc_udp.c:493
+#: sunrpc/svc_udp.c:476
msgid "enablecache: cache already enabled"
msgstr "enablecache: å¿«å–已經開啟"
-#: sunrpc/svc_udp.c:499
+#: sunrpc/svc_udp.c:482
msgid "enablecache: could not allocate cache"
msgstr "enablecache: 無法é…置快å–"
-#: sunrpc/svc_udp.c:507
+#: sunrpc/svc_udp.c:491
msgid "enablecache: could not allocate cache data"
msgstr "enablecache: 無法é…置快å–資料"
-#: sunrpc/svc_udp.c:514
+#: sunrpc/svc_udp.c:499
msgid "enablecache: could not allocate cache fifo"
msgstr "enablecache: 無法é…ç½®å¿«å– fifo 管線"
-#: sunrpc/svc_udp.c:550
+#: sunrpc/svc_udp.c:535
msgid "cache_set: victim not found"
msgstr "cache_set: 找ä¸åˆ° victim"
-#: sunrpc/svc_udp.c:561
+#: sunrpc/svc_udp.c:546
msgid "cache_set: victim alloc failed"
msgstr "cache_set: victim é…置失敗"
-#: sunrpc/svc_udp.c:567
+#: sunrpc/svc_udp.c:553
msgid "cache_set: could not allocate new rpc_buffer"
msgstr "cache_set: 無法é…置新的é ç«¯ç¨‹åºå‘¼å«ç·©è¡å€ (rpc_buffer)"
-#: sunrpc/svc_unix.c:150
+#: sunrpc/svc_unix.c:148
msgid "svc_unix.c - AF_UNIX socket creation problem"
msgstr "svc_unix.c - AF_UNIX socket 建立有å•é¡Œ"
-#: sunrpc/svc_unix.c:166
+#: sunrpc/svc_unix.c:164
msgid "svc_unix.c - cannot getsockname or listen"
msgstr "svc_unix.c - 無法 getsockname 或 listen"
-#: sunrpc/svc_unix.c:178 sunrpc/svc_unix.c:181
-msgid "svcunix_create: out of memory\n"
-msgstr "svcunix_create: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:29 sysdeps/unix/siglist.c:27
+msgid "Hangup"
+msgstr "掛斷"
-#: sunrpc/svc_unix.c:222 sunrpc/svc_unix.c:225
-msgid "svc_unix: makefd_xprt: out of memory\n"
-msgstr "svc_unix: makefd_xprt: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:30 sysdeps/unix/siglist.c:28
+msgid "Interrupt"
+msgstr "中斷"
-#: sunrpc/xdr.c:570 sunrpc/xdr.c:573
-msgid "xdr_bytes: out of memory\n"
-msgstr "xdr_bytes: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:31 sysdeps/unix/siglist.c:29
+msgid "Quit"
+msgstr "離開"
-#: sunrpc/xdr.c:728 sunrpc/xdr.c:731
-msgid "xdr_string: out of memory\n"
-msgstr "xdr_string: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:32 sysdeps/unix/siglist.c:30
+msgid "Illegal instruction"
+msgstr "ä¸åˆæ³•çš„命令"
-#: sunrpc/xdr_array.c:111 sunrpc/xdr_array.c:114
-msgid "xdr_array: out of memory\n"
-msgstr "xdr_array: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:33 sysdeps/unix/siglist.c:31
+msgid "Trace/breakpoint trap"
+msgstr "追蹤與中斷點陷阱"
-#: sunrpc/xdr_rec.c:158 sunrpc/xdr_rec.c:161
-msgid "xdrrec_create: out of memory\n"
-msgstr "xdrrec_create: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:34
+msgid "Aborted"
+msgstr "已經終止"
-#: sunrpc/xdr_ref.c:88 sunrpc/xdr_ref.c:91
-msgid "xdr_reference: out of memory\n"
-msgstr "xdr_reference: 記憶體ä¸è¶³\n"
+#: sysdeps/generic/siglist.h:35 sysdeps/unix/siglist.c:34
+msgid "Floating point exception"
+msgstr "浮點數出錯"
-#: nis/nis_callback.c:189
-msgid "unable to free arguments"
-msgstr "無法釋放åƒæ•¸"
+#: sysdeps/generic/siglist.h:36 sysdeps/unix/siglist.c:35
+msgid "Killed"
+msgstr "å·²ç æŽ‰"
-#: nis/nis_error.c:30
-msgid "Probable success"
-msgstr "å¯èƒ½æˆåŠŸ"
+#: sysdeps/generic/siglist.h:37 sysdeps/unix/siglist.c:36
+msgid "Bus error"
+msgstr "匯æµæŽ’錯誤"
-#: nis/nis_error.c:31
-msgid "Not found"
-msgstr "找ä¸åˆ°"
+#: sysdeps/generic/siglist.h:38 sysdeps/unix/siglist.c:37
+msgid "Segmentation fault"
+msgstr "程å¼è¨˜æ†¶é«”å€æ®µéŒ¯èª¤"
-#: nis/nis_error.c:32
-msgid "Probably not found"
-msgstr "å¯èƒ½æ‰¾ä¸åˆ°"
+#. TRANS Broken pipe; there is no process reading from the other end of a pipe.
+#. TRANS Every library function that returns this error code also generates a
+#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled
+#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE}
+#. TRANS unless it has handled or blocked @code{SIGPIPE}.
+#: sysdeps/generic/siglist.h:39 sysdeps/gnu/errlist.c:359
+#: sysdeps/unix/siglist.c:39
+msgid "Broken pipe"
+msgstr "中斷的管線"
-#: nis/nis_error.c:33
-msgid "Cache expired"
-msgstr "å¿«å–éŽæ™‚å–消了"
+#: sysdeps/generic/siglist.h:40 sysdeps/unix/siglist.c:40
+msgid "Alarm clock"
+msgstr "鬧é˜"
-#: nis/nis_error.c:34
-msgid "NIS+ servers unreachable"
-msgstr "NIS+ 伺æœå™¨ç„¡æ³•é€£ç·š"
+#: sysdeps/generic/siglist.h:41 sysdeps/unix/siglist.c:41
+msgid "Terminated"
+msgstr "終止"
-#: nis/nis_error.c:35
-msgid "Unknown object"
-msgstr "未知的目的檔"
+#: sysdeps/generic/siglist.h:42 sysdeps/unix/siglist.c:42
+msgid "Urgent I/O condition"
+msgstr "緊急的輸出入狀態"
-#: nis/nis_error.c:36
-msgid "Server busy, try again"
-msgstr "伺æœå™¨å¿™ç¢Œä¸­ï¼Œè«‹å†è©¦ä¸€æ¬¡"
+#: sysdeps/generic/siglist.h:43 sysdeps/unix/siglist.c:43
+msgid "Stopped (signal)"
+msgstr "åœæ­¢ (信號)"
-#: nis/nis_error.c:37
-msgid "Generic system error"
-msgstr "一般系統錯誤"
+#: sysdeps/generic/siglist.h:44 sysdeps/unix/siglist.c:44
+msgid "Stopped"
+msgstr "åœæ­¢"
-#: nis/nis_error.c:38
-msgid "First/next chain broken"
-msgstr "第一個/下一個åºåˆ—壞掉了"
+#: sysdeps/generic/siglist.h:45 sysdeps/unix/siglist.c:45
+msgid "Continued"
+msgstr "繼續"
-#: nis/nis_error.c:41
-msgid "Name not served by this server"
-msgstr "網域å稱æœå‹™ä¸æ˜¯ç”±æ­¤ä¼ºæœå™¨æä¾›"
+#: sysdeps/generic/siglist.h:46 sysdeps/unix/siglist.c:46
+msgid "Child exited"
+msgstr "å­è¡Œç¨‹çµæŸ"
-#: nis/nis_error.c:42
-msgid "Server out of memory"
-msgstr "伺æœå™¨è¨˜æ†¶é«”已用完"
+#: sysdeps/generic/siglist.h:47 sysdeps/unix/siglist.c:47
+msgid "Stopped (tty input)"
+msgstr "åœæ­¢ (tty 輸入)"
-#: nis/nis_error.c:43
-msgid "Object with same name exists"
-msgstr "åŒå的目標已經存在"
+#: sysdeps/generic/siglist.h:48 sysdeps/unix/siglist.c:48
+msgid "Stopped (tty output)"
+msgstr "åœæ­¢ (tty 輸出)"
-#: nis/nis_error.c:44
-msgid "Not master server for this domain"
-msgstr "並éžæ­¤ä¸€é ˜åŸŸçš„主伺æœå™¨"
+#: sysdeps/generic/siglist.h:49 sysdeps/unix/siglist.c:49
+msgid "I/O possible"
+msgstr "I/O å¯è¡Œ"
-#: nis/nis_error.c:45
-msgid "Invalid object for operation"
-msgstr "ä¸é©ç”¨çš„é‹ä½œç‰©ä»¶"
+#: sysdeps/generic/siglist.h:50 sysdeps/unix/siglist.c:50
+msgid "CPU time limit exceeded"
+msgstr "CPU 時間上é™è¶…éŽäº†"
-#: nis/nis_error.c:46
-msgid "Malformed name, or illegal name"
-msgstr "奇怪的å字,或ä¸åˆæ³•çš„åå­—"
+#: sysdeps/generic/siglist.h:51 sysdeps/unix/siglist.c:51
+msgid "File size limit exceeded"
+msgstr "檔案大å°è¶…éŽä¸Šé™"
-#: nis/nis_error.c:47
-msgid "Unable to create callback"
-msgstr "無法建立回å«è³‡æ–™ (callback)"
+#: sysdeps/generic/siglist.h:52 sysdeps/unix/siglist.c:52
+msgid "Virtual timer expired"
+msgstr "虛擬計時器已éŽæ™‚å–消了"
-#: nis/nis_error.c:48
-msgid "Results sent to callback proc"
-msgstr "çµæžœå‚³é€çµ¦å›žå‚³ç¨‹åº"
+#: sysdeps/generic/siglist.h:53 sysdeps/unix/siglist.c:53
+msgid "Profiling timer expired"
+msgstr "測速評估用的計時器已éŽæ™‚å–消了"
-#: nis/nis_error.c:49
-msgid "Not found, no such name"
-msgstr "找ä¸åˆ°ï¼Œæ²’有此一å稱"
+#: sysdeps/generic/siglist.h:54 sysdeps/unix/siglist.c:54
+msgid "Window changed"
+msgstr "範åœæ”¹è®Šäº†"
-#: nis/nis_error.c:50
-msgid "Name/entry isn't unique"
-msgstr "å稱/é …ç›®ä¸æ˜¯å”¯ä¸€çš„"
+#: sysdeps/generic/siglist.h:55 sysdeps/unix/siglist.c:56
+msgid "User defined signal 1"
+msgstr "使用者定義的訊號 1"
-#: nis/nis_error.c:51
-msgid "Modification failed"
-msgstr "修改失敗"
+#: sysdeps/generic/siglist.h:56 sysdeps/unix/siglist.c:57
+msgid "User defined signal 2"
+msgstr "使用者定義的訊號 2"
-#: nis/nis_error.c:52
-msgid "Database for table does not exist"
-msgstr "表格的資料庫ä¸å­˜åœ¨"
+#: sysdeps/generic/siglist.h:60 sysdeps/unix/siglist.c:33
+msgid "EMT trap"
+msgstr "EMT 陷阱"
-#: nis/nis_error.c:53
-msgid "Entry/table type mismatch"
-msgstr "é …ç›®/表格形態ä¸ç¬¦"
+#: sysdeps/generic/siglist.h:63 sysdeps/unix/siglist.c:38
+msgid "Bad system call"
+msgstr "錯誤的系統呼å«"
-#: nis/nis_error.c:54
-msgid "Link points to illegal name"
-msgstr "連çµæŒ‡å‘ä¸åˆæ³•çš„å稱"
+#: sysdeps/generic/siglist.h:66
+msgid "Stack fault"
+msgstr "堆疊錯誤"
-#: nis/nis_error.c:55
-msgid "Partial success"
-msgstr "部份æˆåŠŸ"
+#: sysdeps/generic/siglist.h:69
+msgid "Information request"
+msgstr "需è¦è³‡æ–™"
-#: nis/nis_error.c:56
-msgid "Too many attributes"
-msgstr "太多的屬性"
+#: sysdeps/generic/siglist.h:71
+msgid "Power failure"
+msgstr "é›»æºåš´é‡éŒ¯èª¤"
-#: nis/nis_error.c:57
-msgid "Error in RPC subsystem"
-msgstr "RPC å­ç³»çµ±éŒ¯èª¤"
+#: sysdeps/generic/siglist.h:74 sysdeps/unix/siglist.c:55
+msgid "Resource lost"
+msgstr "資æºæ¼å¤±"
-#: nis/nis_error.c:58
-msgid "Missing or malformed attribute"
-msgstr "缺少或奇怪的屬性"
+#. TRANS Operation not permitted; only the owner of the file (or other resource)
+#. TRANS or processes with special privileges can perform the operation.
+#: sysdeps/gnu/errlist.c:25
+msgid "Operation not permitted"
+msgstr "此項æ“作並ä¸è¢«å…許"
-#: nis/nis_error.c:59
-msgid "Named object is not searchable"
-msgstr "有å稱的物件無法æœå°‹"
+#. TRANS No process matches the specified process ID.
+#: sysdeps/gnu/errlist.c:45
+msgid "No such process"
+msgstr "沒有此一程åº"
-#: nis/nis_error.c:60
-msgid "Error while talking to callback proc"
-msgstr "在與 callback proc 通訊時錯誤"
+#. TRANS Interrupted function call; an asynchronous signal occurred and prevented
+#. TRANS completion of the call. When this happens, you should try the call
+#. TRANS again.
+#. TRANS
+#. TRANS You can choose to have functions resume after a signal that is handled,
+#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted
+#. TRANS Primitives}.
+#: sysdeps/gnu/errlist.c:60
+msgid "Interrupted system call"
+msgstr "中斷的系統呼å«"
-#: nis/nis_error.c:61
-msgid "Non NIS+ namespace encountered"
-msgstr "é­é‡é•å NIS+ 命åè¦å‰‡çš„å稱"
+#. TRANS Input/output error; usually used for physical read or write errors.
+#: sysdeps/gnu/errlist.c:69
+msgid "Input/output error"
+msgstr "輸入/輸出錯誤"
-#: nis/nis_error.c:62
-msgid "Illegal object type for operation"
-msgstr "ä¸åˆæ³•çš„é‹ä½œç‰©ä»¶å½¢æ…‹"
+#. TRANS No such device or address. The system tried to use the device
+#. TRANS represented by a file you specified, and it couldn't find the device.
+#. TRANS This can mean that the device file was installed incorrectly, or that
+#. TRANS the physical device is missing or not correctly attached to the
+#. TRANS computer.
+#: sysdeps/gnu/errlist.c:82
+msgid "No such device or address"
+msgstr "沒有此一è£ç½®æˆ–ä½å€"
-#: nis/nis_error.c:63
-msgid "Passed object is not the same object on server"
-msgstr "經éŽçš„物件與伺æœå™¨ä¸Šçš„並ä¸ç›¸åŒ"
+#. TRANS Argument list too long; used when the arguments passed to a new program
+#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
+#. TRANS File}) occupy too much memory space. This condition never arises in the
+#. TRANS GNU system.
+#: sysdeps/gnu/errlist.c:94
+msgid "Argument list too long"
+msgstr "引數列項目éŽé•·"
-#: nis/nis_error.c:64
-msgid "Modify operation failed"
-msgstr "修改é‹ä½œæ–¹å¼å¤±æ•—"
+#. TRANS Invalid executable file format. This condition is detected by the
+#. TRANS @code{exec} functions; see @ref{Executing a File}.
+#: sysdeps/gnu/errlist.c:104
+msgid "Exec format error"
+msgstr "å¯åŸ·è¡Œæª”æ ¼å¼éŒ¯èª¤"
-#: nis/nis_error.c:65
-msgid "Query illegal for named table"
-msgstr "å°è¨˜å表格的查詢並ä¸åˆæ³•"
+#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been
+#. TRANS closed or reading from a descriptor open only for writing (or vice
+#. TRANS versa).
+#: sysdeps/gnu/errlist.c:115
+msgid "Bad file descriptor"
+msgstr "錯誤的檔案敘述項"
-#: nis/nis_error.c:66
-msgid "Attempt to remove a non-empty table"
-msgstr "嘗試刪除一個有內容的表格"
+#. TRANS There are no child processes. This error happens on operations that are
+#. TRANS supposed to manipulate child processes, when there aren't any processes
+#. TRANS to manipulate.
+#: sysdeps/gnu/errlist.c:126
+msgid "No child processes"
+msgstr "沒有å­ç¨‹åºå­˜åœ¨"
-#: nis/nis_error.c:67
-msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?"
-msgstr "å­˜å– NIS+ åŽŸå§‹å•Ÿå‹•æª”éŒ¯èª¤ã€‚æœ‰å®‰è£ NIS+ 嗎?"
+#. TRANS Deadlock avoided; allocating a system resource would have resulted in a
+#. TRANS deadlock situation. The system does not guarantee that it will notice
+#. TRANS all such situations. This error means you got lucky and the system
+#. TRANS noticed; it might just hang. @xref{File Locks}, for an example.
+#: sysdeps/gnu/errlist.c:138
+msgid "Resource deadlock avoided"
+msgstr "é¿é–‹è³‡æºéŽ–定"
-#: nis/nis_error.c:68
-msgid "Full resync required for directory"
-msgstr "目錄的 resync 請求已滿"
+#. TRANS No memory available. The system cannot allocate more virtual memory
+#. TRANS because its capacity is full.
+#: sysdeps/gnu/errlist.c:148
+msgid "Cannot allocate memory"
+msgstr "無法é…置記憶體"
-#: nis/nis_error.c:69
-msgid "NIS+ operation failed"
-msgstr "NIS+ é‹ä½œå¤±æ•—"
+#. TRANS Bad address; an invalid pointer was detected.
+#. TRANS In the GNU system, this error never happens; you get a signal instead.
+#: sysdeps/gnu/errlist.c:167
+msgid "Bad address"
+msgstr "錯誤的ä½å€"
-#: nis/nis_error.c:70
-msgid "NIS+ service is unavailable or not installed"
-msgstr "NIS+ æœå‹™ç„¡æ³•å–得或者尚未安è£"
+#. TRANS A file that isn't a block special file was given in a situation that
+#. TRANS requires one. For example, trying to mount an ordinary file as a file
+#. TRANS system in Unix gives this error.
+#: sysdeps/gnu/errlist.c:178
+msgid "Block device required"
+msgstr "必須是å€å¡Šè£ç½® (Block device)"
-#: nis/nis_error.c:71
-msgid "Yes, 42 is the meaning of life"
-msgstr "是的,42 就是存在的æ„義"
+#. TRANS Resource busy; a system resource that can't be shared is already in use.
+#. TRANS For example, if you try to delete a file that is the root of a currently
+#. TRANS mounted filesystem, you get this error.
+#: sysdeps/gnu/errlist.c:189
+msgid "Device or resource busy"
+msgstr "è£ç½®æˆ–系統資æºå¿™ç¢Œä¸­"
-#: nis/nis_error.c:72
-msgid "Unable to authenticate NIS+ server"
-msgstr "ç„¡æ³•å° NIS+ 的伺æœç«¯é€²è¡Œèªè­‰"
+#. TRANS File exists; an existing file was specified in a context where it only
+#. TRANS makes sense to specify a new file.
+#: sysdeps/gnu/errlist.c:199
+msgid "File exists"
+msgstr "檔案已存在"
-#: nis/nis_error.c:73
-msgid "Unable to authenticate NIS+ client"
-msgstr "ç„¡æ³•å° NIS+ 的請求端進行èªè­‰"
+#. TRANS An attempt to make an improper link across file systems was detected.
+#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but
+#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}).
+#: sysdeps/gnu/errlist.c:210
+msgid "Invalid cross-device link"
+msgstr "ä¸é©ç”¨çš„è£ç½®é–“連çµ"
-#: nis/nis_error.c:74
-msgid "No file space on server"
-msgstr "伺æœå™¨ä¸Šæ²’有檔案空間"
+#. TRANS The wrong type of device was given to a function that expects a
+#. TRANS particular sort of device.
+#: sysdeps/gnu/errlist.c:220
+msgid "No such device"
+msgstr "沒有此一è£ç½®"
-#: nis/nis_error.c:75
-msgid "Unable to create process on server"
-msgstr "無法在伺æœå™¨ä¸Šå»ºç«‹åŸ·è¡Œç¨‹åº"
+#. TRANS A file that isn't a directory was specified when a directory is required.
+#: sysdeps/gnu/errlist.c:229
+msgid "Not a directory"
+msgstr "並ä¸æ˜¯ä¸€å€‹ç›®éŒ„"
-#: nis/nis_error.c:76
-msgid "Master server busy, full dump rescheduled."
-msgstr "主è¦ä¼ºæœå™¨å¿™ç¢Œä¸­ï¼Œé‡æ–°é€²è¡Œå®Œæ•´è³‡æ–™å‚¾å¸æŽ’程。"
+#. TRANS File is a directory; you cannot open a directory for writing,
+#. TRANS or create or remove hard links to it.
+#: sysdeps/gnu/errlist.c:239
+msgid "Is a directory"
+msgstr "是個目錄"
-#: nis/nis_local_names.c:126
-#, c-format
-msgid "LOCAL entry for UID %d in directory %s not unique\n"
-msgstr "UID 為 %d 的項目在本地端中並ä¸æ˜¯å”¯ä¸€çš„ (在 %s 目錄裡é¢)\n"
+#. TRANS Invalid argument. This is used to indicate various kinds of problems
+#. TRANS with passing the wrong argument to a library function.
+#: sysdeps/gnu/errlist.c:249
+msgid "Invalid argument"
+msgstr "ä¸é©ç”¨çš„引數"
-#: nis/nis_print.c:51
-msgid "UNKNOWN"
-msgstr "ä¸æ˜Ž"
+#. TRANS The current process has too many files open and can't open any more.
+#. TRANS Duplicate descriptors do count toward this limit.
+#. TRANS
+#. TRANS In BSD and GNU, the number of open files is controlled by a resource
+#. TRANS limit that can usually be increased. If you get this error, you might
+#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
+#. TRANS @pxref{Limits on Resources}.
+#: sysdeps/gnu/errlist.c:264
+msgid "Too many open files"
+msgstr "開啟太多檔案"
-#: nis/nis_print.c:109
-msgid "BOGUS OBJECT\n"
-msgstr "å‡çš„物件\n"
+#. TRANS There are too many distinct file openings in the entire system. Note
+#. TRANS that any number of linked channels count as just one file opening; see
+#. TRANS @ref{Linked Channels}. This error never occurs in the GNU system.
+#: sysdeps/gnu/errlist.c:275
+msgid "Too many open files in system"
+msgstr "系統中太多的開啟檔案"
-#: nis/nis_print.c:112
-msgid "NO OBJECT\n"
-msgstr "沒有物件\n"
+#. TRANS Inappropriate I/O control operation, such as trying to set terminal
+#. TRANS modes on an ordinary file.
+#: sysdeps/gnu/errlist.c:285
+msgid "Inappropriate ioctl for device"
+msgstr "ä¸å¸Œæœ›çš„è£ç½®è¼¸å‡ºå…¥æŽ§åˆ¶ (ioctl)"
-#: nis/nis_print.c:115
-msgid "DIRECTORY\n"
-msgstr "目錄\n"
+#. TRANS An attempt to execute a file that is currently open for writing, or
+#. TRANS write to a file that is currently being executed. Often using a
+#. TRANS debugger to run a program is considered having it open for writing and
+#. TRANS will cause this error. (The name stands for ``text file busy''.) This
+#. TRANS is not an error in the GNU system; the text is copied as necessary.
+#: sysdeps/gnu/errlist.c:298
+msgid "Text file busy"
+msgstr "文字檔忙錄中"
-#: nis/nis_print.c:118
-msgid "GROUP\n"
-msgstr "群組\n"
+#. TRANS File too big; the size of a file would be larger than allowed by the system.
+#: sysdeps/gnu/errlist.c:307
+msgid "File too large"
+msgstr "檔案太大"
-#: nis/nis_print.c:121
-msgid "TABLE\n"
-msgstr "表格\n"
+#. TRANS No space left on device; write operation on a file failed because the
+#. TRANS disk is full.
+#: sysdeps/gnu/errlist.c:317
+msgid "No space left on device"
+msgstr "è£ç½®ä¸Šå·²ç„¡å¤šé¤˜ç©ºé–“"
-#: nis/nis_print.c:124
-msgid "ENTRY\n"
-msgstr "é …ç›®\n"
+#. TRANS Invalid seek operation (such as on a pipe).
+#: sysdeps/gnu/errlist.c:326
+msgid "Illegal seek"
+msgstr "ä¸åˆæ³•çš„æœå°‹"
-#: nis/nis_print.c:127
-msgid "LINK\n"
-msgstr "連çµ\n"
+#. TRANS An attempt was made to modify something on a read-only file system.
+#: sysdeps/gnu/errlist.c:335
+msgid "Read-only file system"
+msgstr "唯讀的檔案系統"
-#: nis/nis_print.c:130
-msgid "PRIVATE\n"
-msgstr "ç§æœ‰çš„\n"
+#. TRANS Too many links; the link count of a single file would become too large.
+#. TRANS @code{rename} can cause this error if the file being renamed already has
+#. TRANS as many links as it can take (@pxref{Renaming Files}).
+#: sysdeps/gnu/errlist.c:346
+msgid "Too many links"
+msgstr "太多連çµ"
-#: nis/nis_print.c:133
-msgid "(Unknown object)\n"
-msgstr "(未知的物件)\n"
+#. TRANS Domain error; used by mathematical functions when an argument value does
+#. TRANS not fall into the domain over which the function is defined.
+#: sysdeps/gnu/errlist.c:369
+msgid "Numerical argument out of domain"
+msgstr "數值åƒæ•¸çš„值超出範åœ"
-#: nis/nis_print.c:166
-#, c-format
-msgid "Name : `%s'\n"
-msgstr "å稱 : `%s'\n"
+#. TRANS Range error; used by mathematical functions when the result value is
+#. TRANS not representable because of overflow or underflow.
+#: sysdeps/gnu/errlist.c:379
+msgid "Numerical result out of range"
+msgstr "數值é‹ç®—çµæžœè¶…出範åœ"
-#: nis/nis_print.c:167
-#, c-format
-msgid "Type : %s\n"
-msgstr "æ ¼å¼ : %s\n"
+#. TRANS Resource temporarily unavailable; the call might work if you try again
+#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
+#. TRANS they are always the same in the GNU C library.
+#. TRANS
+#. TRANS This error can happen in a few different situations:
+#. TRANS
+#. TRANS @itemize @bullet
+#. TRANS @item
+#. TRANS An operation that would block was attempted on an object that has
+#. TRANS non-blocking mode selected. Trying the same operation again will block
+#. TRANS until some external condition makes it possible to read, write, or
+#. TRANS connect (whatever the operation). You can use @code{select} to find out
+#. TRANS when the operation will be possible; @pxref{Waiting for I/O}.
+#. TRANS
+#. TRANS @strong{Portability Note:} In many older Unix systems, this condition
+#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
+#. TRANS different from @code{EAGAIN}. To make your program portable, you should
+#. TRANS check for both codes and treat them the same.
+#. TRANS
+#. TRANS @item
+#. TRANS A temporary resource shortage made an operation impossible. @code{fork}
+#. TRANS can return this error. It indicates that the shortage is expected to
+#. TRANS pass, so your program can try the call again later and it may succeed.
+#. TRANS It is probably a good idea to delay for a few seconds before trying it
+#. TRANS again, to allow time for other processes to release scarce resources.
+#. TRANS Such shortages are usually fairly serious and affect the whole system,
+#. TRANS so usually an interactive program should report the error to the user
+#. TRANS and return to its command loop.
+#. TRANS @end itemize
+#: sysdeps/gnu/errlist.c:416
+msgid "Resource temporarily unavailable"
+msgstr "資æºæš«æ™‚無法å–å¾—"
-#: nis/nis_print.c:172
-msgid "Master Server :\n"
-msgstr "主è¦ä¼ºæœå™¨ :\n"
+#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above).
+#. TRANS The values are always the same, on every operating system.
+#. TRANS
+#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
+#. TRANS separate error code.
+#: sysdeps/gnu/errlist.c:429
+msgid "Operation would block"
+msgstr "æ“作將會暫åœ"
-#: nis/nis_print.c:174
-msgid "Replicate :\n"
-msgstr "複製 :\n"
+#. TRANS An operation that cannot complete immediately was initiated on an object
+#. TRANS that has non-blocking mode selected. Some functions that must always
+#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return
+#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that
+#. TRANS the operation has begun and will take some time. Attempts to manipulate
+#. TRANS the object before the call completes return @code{EALREADY}. You can
+#. TRANS use the @code{select} function to find out when the pending operation
+#. TRANS has completed; @pxref{Waiting for I/O}.
+#: sysdeps/gnu/errlist.c:445
+msgid "Operation now in progress"
+msgstr "æ“作正在處ç†"
-#: nis/nis_print.c:175
-#, c-format
-msgid "\tName : %s\n"
-msgstr "\tå稱 : %s\n"
+#. TRANS An operation is already in progress on an object that has non-blocking
+#. TRANS mode selected.
+#: sysdeps/gnu/errlist.c:455
+msgid "Operation already in progress"
+msgstr "此項æ“作已在處ç†ä¸­"
-#: nis/nis_print.c:176
-msgid "\tPublic Key : "
-msgstr "\t公共鑰匙 : "
+#. TRANS A file that isn't a socket was specified when a socket is required.
+#: sysdeps/gnu/errlist.c:464
+msgid "Socket operation on non-socket"
+msgstr "Socket åœ¨éž socket 上é‹ä½œ"
-#: nis/nis_print.c:180
-msgid "None.\n"
-msgstr "ç„¡\n"
+#. TRANS The size of a message sent on a socket was larger than the supported
+#. TRANS maximum size.
+#: sysdeps/gnu/errlist.c:474
+msgid "Message too long"
+msgstr "訊æ¯å¤ªé•·"
-#: nis/nis_print.c:183
-#, c-format
-msgid "Diffie-Hellmann (%d bits)\n"
-msgstr "Diffie-Hellmann (%d ä½å…ƒ)\n"
+#. TRANS The socket type does not support the requested communications protocol.
+#: sysdeps/gnu/errlist.c:483
+msgid "Protocol wrong type for socket"
+msgstr "通訊端的å”定錯誤型態"
-#: nis/nis_print.c:188
-#, c-format
-msgid "RSA (%d bits)\n"
-msgstr "RSA (%d ä½å…ƒ)\n"
+#. TRANS You specified a socket option that doesn't make sense for the
+#. TRANS particular protocol being used by the socket. @xref{Socket Options}.
+#: sysdeps/gnu/errlist.c:493
+msgid "Protocol not available"
+msgstr "å”定ä¸å­˜åœ¨"
-#: nis/nis_print.c:191
-msgid "Kerberos.\n"
-msgstr "Kerberos.\n"
+#. TRANS The socket domain does not support the requested communications protocol
+#. TRANS (perhaps because the requested protocol is completely invalid).
+#. TRANS @xref{Creating a Socket}.
+#: sysdeps/gnu/errlist.c:504
+msgid "Protocol not supported"
+msgstr "å”定ä¸æ”¯æ´"
-#: nis/nis_print.c:194
-#, c-format
-msgid "Unknown (type = %d, bits = %d)\n"
-msgstr "未知的 (形態 = %d,ä½å…ƒ = %d)\n"
+#. TRANS The socket type is not supported.
+#: sysdeps/gnu/errlist.c:513
+msgid "Socket type not supported"
+msgstr "通訊端型別ä¸æ”¯æ´"
-#: nis/nis_print.c:205
-#, c-format
-msgid "\tUniversal addresses (%u)\n"
-msgstr "\t絕å°ä½å€ (%u)\n"
+#. TRANS The operation you requested is not supported. Some socket functions
+#. TRANS don't make sense for all types of sockets, and others may not be
+#. TRANS implemented for all communications protocols. In the GNU system, this
+#. TRANS error can happen for many calls when the object does not support the
+#. TRANS particular operation; it is a generic indication that the server knows
+#. TRANS nothing to do for that call.
+#: sysdeps/gnu/errlist.c:527
+msgid "Operation not supported"
+msgstr "此項æ“作並ä¸è¢«æ”¯æ´"
-#: nis/nis_print.c:227
-msgid "Time to live : "
-msgstr "存在時間 : "
+#. TRANS The socket communications protocol family you requested is not supported.
+#: sysdeps/gnu/errlist.c:536
+msgid "Protocol family not supported"
+msgstr "å”定群組ä¸æ”¯æ´"
-#: nis/nis_print.c:229
-msgid "Default Access rights :\n"
-msgstr "é è¨­çš„å­˜å–æ¬Šé™ :\n"
+#. TRANS The address family specified for a socket is not supported; it is
+#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}.
+#: sysdeps/gnu/errlist.c:546
+msgid "Address family not supported by protocol"
+msgstr "ä½å€æ—群ä¸è¢«å”定所支æ´"
-#: nis/nis_print.c:238
-#, c-format
-msgid "\tType : %s\n"
-msgstr "\t型別 : %s\n"
+#. TRANS The requested socket address is already in use. @xref{Socket Addresses}.
+#: sysdeps/gnu/errlist.c:555
+msgid "Address already in use"
+msgstr "ä½å€å·²ç¶“有在使用"
-#: nis/nis_print.c:239
-msgid "\tAccess rights: "
-msgstr "\tå­˜å–權é™: "
+#. TRANS The requested socket address is not available; for example, you tried
+#. TRANS to give a socket a name that doesn't match the local host name.
+#. TRANS @xref{Socket Addresses}.
+#: sysdeps/gnu/errlist.c:566
+msgid "Cannot assign requested address"
+msgstr "無法指定所需的ä½å€"
-#: nis/nis_print.c:252
-msgid "Group Flags :"
-msgstr "群組旗標 :"
+#. TRANS A socket operation failed because the network was down.
+#: sysdeps/gnu/errlist.c:575
+msgid "Network is down"
+msgstr "網路åœæ“º"
-#: nis/nis_print.c:255
-msgid ""
-"\n"
-"Group Members :\n"
-msgstr ""
-"\n"
-"群組的æˆå“¡ :\n"
+#. TRANS A socket operation failed because the subnet containing the remote host
+#. TRANS was unreachable.
+#: sysdeps/gnu/errlist.c:585
+msgid "Network is unreachable"
+msgstr "無法接觸網路"
-#: nis/nis_print.c:266
-#, c-format
-msgid "Table Type : %s\n"
-msgstr "è¡¨æ ¼å½¢å¼ : %s\n"
+#. TRANS A network connection was reset because the remote host crashed.
+#: sysdeps/gnu/errlist.c:594
+msgid "Network dropped connection on reset"
+msgstr "在é‡è¨­æ™‚網路連線æ¼å¤±"
-#: nis/nis_print.c:267
-#, c-format
-msgid "Number of Columns : %d\n"
-msgstr "欄ä½çš„數目 : %d\n"
+#. TRANS A network connection was aborted locally.
+#: sysdeps/gnu/errlist.c:603
+msgid "Software caused connection abort"
+msgstr "軟體造æˆé€£ç·šä¸­æ–·"
-#: nis/nis_print.c:268
-#, c-format
-msgid "Character Separator : %c\n"
-msgstr "字元分隔號 : %c\n"
+#. TRANS A network connection was closed for reasons outside the control of the
+#. TRANS local host, such as by the remote machine rebooting or an unrecoverable
+#. TRANS protocol violation.
+#: sysdeps/gnu/errlist.c:614
+msgid "Connection reset by peer"
+msgstr "連線被å°æ–¹é‡è¨­"
-#: nis/nis_print.c:269
-#, c-format
-msgid "Search Path : %s\n"
-msgstr "æœå°‹è·¯å¾‘ : %s\n"
+#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this
+#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the
+#. TRANS other from network operations.
+#: sysdeps/gnu/errlist.c:625
+msgid "No buffer space available"
+msgstr "沒有å¯ç”¨çš„ç·©è¡ç©ºé–“了"
-#: nis/nis_print.c:270
-msgid "Columns :\n"
-msgstr "行 :\n"
+#. TRANS You tried to connect a socket that is already connected.
+#. TRANS @xref{Connecting}.
+#: sysdeps/gnu/errlist.c:635
+msgid "Transport endpoint is already connected"
+msgstr "傳輸的兩端已經完æˆé€£ç·šäº†"
-#: nis/nis_print.c:273
-#, c-format
-msgid "\t[%d]\tName : %s\n"
-msgstr "\t[%d]\tå稱 : %s\n"
+#. TRANS The socket is not connected to anything. You get this error when you
+#. TRANS try to transmit data over a socket, without first specifying a
+#. TRANS destination for the data. For a connectionless socket (for datagram
+#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead.
+#: sysdeps/gnu/errlist.c:647
+msgid "Transport endpoint is not connected"
+msgstr "傳輸的兩端尚未連線"
-#: nis/nis_print.c:275
-msgid "\t\tAttributes : "
-msgstr "\t\t屬性 : "
+#. TRANS No default destination address was set for the socket. You get this
+#. TRANS error when you try to transmit data over a connectionless socket,
+#. TRANS without first specifying a destination for the data with @code{connect}.
+#: sysdeps/gnu/errlist.c:658
+msgid "Destination address required"
+msgstr "需è¦ç›®æ¨™ä½å€"
-#: nis/nis_print.c:277
-msgid "\t\tAccess Rights : "
-msgstr "\t\tå­˜å–æ¬Šé™ : "
+#. TRANS The socket has already been shut down.
+#: sysdeps/gnu/errlist.c:667
+msgid "Cannot send after transport endpoint shutdown"
+msgstr "無法在輸é€ç«¯é»žé—œé–‰å¾Œå‚³é€"
-#: nis/nis_print.c:286
-msgid "Linked Object Type : "
-msgstr "連çµçš„物件形態 : "
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:676
+msgid "Too many references: cannot splice"
+msgstr "太多的åƒè€ƒæŒ‡æ¨™: 無法連接"
-#: nis/nis_print.c:288
-#, c-format
-msgid "Linked to : %s\n"
-msgstr "連çµåˆ° : %s\n"
+#. TRANS A socket operation with a specified timeout received no response during
+#. TRANS the timeout period.
+#: sysdeps/gnu/errlist.c:686
+msgid "Connection timed out"
+msgstr "連線超éŽæ™‚é–“"
-#: nis/nis_print.c:297
-#, c-format
-msgid "\tEntry data of type %s\n"
-msgstr "\t型別為 %s 的項目資料\n"
+#. TRANS A remote host refused to allow the network connection (typically because
+#. TRANS it is not running the requested service).
+#: sysdeps/gnu/errlist.c:696
+msgid "Connection refused"
+msgstr "連線被拒絕"
-#: nis/nis_print.c:300
-#, c-format
-msgid "\t[%u] - [%u bytes] "
-msgstr "\t[%u] - [%u ä½å…ƒçµ„] "
+#. TRANS Too many levels of symbolic links were encountered in looking up a file name.
+#. TRANS This often indicates a cycle of symbolic links.
+#: sysdeps/gnu/errlist.c:706
+msgid "Too many levels of symbolic links"
+msgstr "太多層級的符號連çµæª”"
-#: nis/nis_print.c:303
-msgid "Encrypted data\n"
-msgstr "編碼資料\n"
+#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
+#. TRANS Files}) or host name too long (in @code{gethostname} or
+#. TRANS @code{sethostname}; @pxref{Host Identification}).
+#: sysdeps/gnu/errlist.c:717
+msgid "File name too long"
+msgstr "檔å太長"
-#: nis/nis_print.c:305
-msgid "Binary data\n"
-msgstr "二進ä½è³‡æ–™\n"
+#. TRANS The remote host for a requested network connection is down.
+#: sysdeps/gnu/errlist.c:726
+msgid "Host is down"
+msgstr "é ç«¯ç³»çµ±å·²åœæ©Ÿäº†"
-#: nis/nis_print.c:320
-#, c-format
-msgid "Object Name : %s\n"
-msgstr "物件å稱 : %s\n"
+#. TRANS The remote host for a requested network connection is not reachable.
+#: sysdeps/gnu/errlist.c:735
+msgid "No route to host"
+msgstr "找ä¸åˆ°é€šå¾€è©²ä¸»æ©Ÿçš„路由路徑"
-#: nis/nis_print.c:321
-#, c-format
-msgid "Directory : %s\n"
-msgstr "目錄 : %s\n"
+#. TRANS Directory not empty, where an empty directory was expected. Typically,
+#. TRANS this error occurs when you are trying to delete a directory.
+#: sysdeps/gnu/errlist.c:745
+msgid "Directory not empty"
+msgstr "目錄ä¸æ˜¯ç©ºçš„"
-#: nis/nis_print.c:322
-#, c-format
-msgid "Owner : %s\n"
-msgstr "æ“有者 : %s\n"
+#. TRANS This means that the per-user limit on new process would be exceeded by
+#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on
+#. TRANS the @code{RLIMIT_NPROC} limit.
+#: sysdeps/gnu/errlist.c:756
+msgid "Too many processes"
+msgstr "太多的行程"
-#: nis/nis_print.c:323
-#, c-format
-msgid "Group : %s\n"
-msgstr "群組 : %s\n"
+#. TRANS The file quota system is confused because there are too many users.
+#. TRANS @c This can probably happen in a GNU system when using NFS.
+#: sysdeps/gnu/errlist.c:766
+msgid "Too many users"
+msgstr "太多使用者"
-#: nis/nis_print.c:324
-msgid "Access Rights : "
-msgstr "å­˜å–æ¬Šé™ : "
+#. TRANS The user's disk quota was exceeded.
+#: sysdeps/gnu/errlist.c:775
+msgid "Disk quota exceeded"
+msgstr "硬碟 quota 滿了"
-#: nis/nis_print.c:326
-#, c-format
-msgid ""
-"\n"
-"Time to Live : "
-msgstr ""
-"\n"
-"存在的時間 : "
+#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS
+#. TRANS system which is due to file system rearrangements on the server host.
+#. TRANS Repairing this condition usually requires unmounting and remounting
+#. TRANS the NFS file system on the local host.
+#: sysdeps/gnu/errlist.c:787
+msgid "Stale NFS file handle"
+msgstr "éŽèˆŠçš„ NFS 檔案控制碼"
-#: nis/nis_print.c:329
-#, c-format
-msgid "Creation Time : %s"
-msgstr "產生時間 : %s"
+#. TRANS An attempt was made to NFS-mount a remote file system with a file name that
+#. TRANS already specifies an NFS-mounted file.
+#. TRANS (This is an error on some operating systems, but we expect it to work
+#. TRANS properly on the GNU system, making this error code impossible.)
+#: sysdeps/gnu/errlist.c:799
+msgid "Object is remote"
+msgstr "目標檔案ä½æ–¼é ç«¯"
-#: nis/nis_print.c:331
-#, c-format
-msgid "Mod. Time : %s"
-msgstr "修改時間 : %s"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:808
+msgid "RPC struct is bad"
+msgstr "RPC çµæ§‹æ˜¯å£žçš„"
-#: nis/nis_print.c:332
-msgid "Object Type : "
-msgstr "物件型別 : "
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:817
+msgid "RPC version wrong"
+msgstr "RPC 版本錯誤"
-#: nis/nis_print.c:352
-#, c-format
-msgid " Data Length = %u\n"
-msgstr " 資料長度 = %u\n"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:826
+msgid "RPC program not available"
+msgstr "RPC 程å¼ä¸å­˜åœ¨"
-#: nis/nis_print.c:365
-#, c-format
-msgid "Status : %s\n"
-msgstr "狀態 : %s\n"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:835
+msgid "RPC program version wrong"
+msgstr "RPC 程å¼ç‰ˆæœ¬éŒ¯èª¤"
-#: nis/nis_print.c:366
-#, c-format
-msgid "Number of objects : %u\n"
-msgstr "物件的數目 : %u\n"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:844
+msgid "RPC bad procedure for program"
+msgstr "程å¼çš„ RPC 程åºéŒ¯èª¤"
-#: nis/nis_print.c:370
-#, c-format
-msgid "Object #%d:\n"
-msgstr "目的檔 #%d:\n"
+#. TRANS No locks available. This is used by the file locking facilities; see
+#. TRANS @ref{File Locks}. This error is never generated by the GNU system, but
+#. TRANS it can result from an operation to an NFS server running another
+#. TRANS operating system.
+#: sysdeps/gnu/errlist.c:856
+msgid "No locks available"
+msgstr "無法鎖定資料"
-#: nis/nis_print_group_entry.c:115
-#, c-format
-msgid "Group entry for \"%s.%s\" group:\n"
-msgstr "群組 \"%s.%s\" 群組項目:\n"
+#. TRANS Inappropriate file type or format. The file was the wrong type for the
+#. TRANS operation, or a data file had the wrong format.
+#. TRANS
+#. TRANS On some systems @code{chmod} returns this error if you try to set the
+#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}.
+#: sysdeps/gnu/errlist.c:869
+msgid "Inappropriate file type or format"
+msgstr "ä¸å¸Œæœ›çš„檔案型態或格å¼"
-#: nis/nis_print_group_entry.c:123
-msgid " Explicit members:\n"
-msgstr " 明確的æˆå“¡:\n"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:878
+msgid "Authentication error"
+msgstr "鑑定錯誤"
-#: nis/nis_print_group_entry.c:128
-msgid " No explicit members\n"
-msgstr " 沒有明確的æˆå“¡\n"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:887
+msgid "Need authenticator"
+msgstr "需è¦èªè­‰"
-#: nis/nis_print_group_entry.c:131
-msgid " Implicit members:\n"
-msgstr " ä¸æ˜Žç¢ºçš„æˆå“¡:\n"
+#. TRANS Function not implemented. This indicates that the function called is
+#. TRANS not implemented at all, either in the C library itself or in the
+#. TRANS operating system. When you get this error, you can be sure that this
+#. TRANS particular function will always fail with @code{ENOSYS} unless you
+#. TRANS install a new version of the C library or the operating system.
+#: sysdeps/gnu/errlist.c:900
+msgid "Function not implemented"
+msgstr "功能沒有實作"
-#: nis/nis_print_group_entry.c:136
-msgid " No implicit members\n"
-msgstr " 沒有ä¸æ˜Žç¢ºçš„æˆå“¡\n"
+#. TRANS Not supported. A function returns this error when certain parameter
+#. TRANS values are valid, but the functionality they request is not available.
+#. TRANS This can mean that the function does not implement a particular command
+#. TRANS or option value or flag bit at all. For functions that operate on some
+#. TRANS object given in a parameter, such as a file descriptor or a port, it
+#. TRANS might instead mean that only @emph{that specific object} (file
+#. TRANS descriptor, port, etc.) is unable to support the other parameters given;
+#. TRANS different file descriptors might support different ranges of parameter
+#. TRANS values.
+#. TRANS
+#. TRANS If the entire function is not available at all in the implementation,
+#. TRANS it returns @code{ENOSYS} instead.
+#: sysdeps/gnu/errlist.c:920
+msgid "Not supported"
+msgstr "並未支æ´"
-#: nis/nis_print_group_entry.c:139
-msgid " Recursive members:\n"
-msgstr " éžè¿´çš„æˆå“¡:\n"
+#. TRANS While decoding a multibyte character the function came along an invalid
+#. TRANS or an incomplete sequence of bytes or the given wide character is invalid.
+#: sysdeps/gnu/errlist.c:930
+msgid "Invalid or incomplete multibyte or wide character"
+msgstr "ä¸é©ç”¨æˆ–ä¸å®Œæ•´çš„多ä½å…ƒçµ„字元或寬字元"
-#: nis/nis_print_group_entry.c:144
-msgid " No recursive members\n"
-msgstr " 沒有éžè¿´çš„æˆå“¡\n"
+#. TRANS In the GNU system, servers supporting the @code{term} protocol return
+#. TRANS this error for certain operations when the caller is not in the
+#. TRANS foreground process group of the terminal. Users do not usually see this
+#. TRANS error because functions such as @code{read} and @code{write} translate
+#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control},
+#. TRANS for information on process groups and these signals.
+#: sysdeps/gnu/errlist.c:944
+msgid "Inappropriate operation for background process"
+msgstr "ä¸å¸Œæœ›çš„背景行程é‹ä½œ"
-#: nis/nis_print_group_entry.c:147 nis/nis_print_group_entry.c:163
-msgid " Explicit nonmembers:\n"
-msgstr " 明確的éžæˆå“¡:\n"
+#. TRANS In the GNU system, opening a file returns this error when the file is
+#. TRANS translated by a program and the translator program dies while starting
+#. TRANS up, before it has connected to the file.
+#: sysdeps/gnu/errlist.c:955
+msgid "Translator died"
+msgstr "中介程å¼å·²ç¶“çµæŸ"
-#: nis/nis_print_group_entry.c:152
-msgid " No explicit nonmembers\n"
-msgstr " 沒有明確的éžæˆå“¡\n"
+#. TRANS The experienced user will know what is wrong.
+#. TRANS @c This error code is a joke. Its perror text is part of the joke.
+#. TRANS @c Don't change it.
+#: sysdeps/gnu/errlist.c:966
+msgid "?"
+msgstr "?"
-#: nis/nis_print_group_entry.c:155
-msgid " Implicit nonmembers:\n"
-msgstr " ä¸æ˜Žç¢ºçš„éžæˆå“¡:\n"
+#. TRANS You did @strong{what}?
+#: sysdeps/gnu/errlist.c:975
+msgid "You really blew it this time"
+msgstr "這次真的被您打敗了"
-#: nis/nis_print_group_entry.c:160
-msgid " No implicit nonmembers\n"
-msgstr " 沒有ä¸æ˜Žç¢ºçš„éžæˆå“¡\n"
+# This is error EIEIO, errno 104
+#
+# - Macro: int EIEIO
+# Go home and have a glass of warm, dairy-fresh milk.
+#
+# The following messages were copied & pasted
+# from es.po by Santiago Vila Doncel <sanvila@unex.es>.
+#
+# <es.po>
+# ç©Œu diablos es esto?, esperemos a tener las fuentes
+# estupendo, este error parece mostrarse en dos ocasiones
+# - Macro: int EIEIO
+# Go home and have a glass of warm, dairy-fresh milk.
+# Jochen tambien lo traduce as. em
+#
+# Okay. Since you are dying to know, I'll tell you.
+# This is a joke, obviously. There is a children's song which begins,
+# "Old McDonald had a farm, e-i-e-i-o." Every time I see the (real)
+# errno macro EIO, I think about that song. Probably most of my
+# compatriots who program on Unix do, too. One of them must have stayed
+# up a little too late one night and decided to add it to Hurd or Glibc.
+# Whoever did it should be castigated, but it made me laugh.
+# --jtobey@channel1.com
+#
+# "bought the farm" means "died". -jtobey
+#
+# Bueno, pues despu廥 de pensarlo mucho, he seguido el ejemplo de la
+# traduccié® francesa (traduccié® libre). sv
+# </es.po>
+#
+# 簡單的說,兒歌 "å”è€å…ˆç”Ÿæœ‰å¡Šåœ°...",然後呢?? ;-p
+#
+#. TRANS Go home and have a glass of warm, dairy-fresh milk.
+#: sysdeps/gnu/errlist.c:984
+msgid "Computer bought the farm"
+msgstr "這å°é›»è…¦è²·äº†ä¸€å¡Šåœ°å›‰"
-#: nis/nis_print_group_entry.c:168
-msgid " No recursive nonmembers\n"
-msgstr " 沒有éžè¿´çš„éžæˆå“¡\n"
+#. TRANS This error code has no purpose.
+#: sysdeps/gnu/errlist.c:993
+msgid "Gratuitous error"
+msgstr "無故的錯誤"
-#: nis/nss_nisplus/nisplus-publickey.c:101
-#: nis/nss_nisplus/nisplus-publickey.c:182
-#, c-format
-msgid "DES entry for netname %s not unique\n"
-msgstr "netname %s çš„ DES 項目並ä¸å”¯ä¸€\n"
+#: sysdeps/gnu/errlist.c:1001
+msgid "Bad message"
+msgstr "錯誤的訊æ¯"
-#: nis/nss_nisplus/nisplus-publickey.c:218
-#, c-format
-msgid "netname2user: missing group id list in `%s'."
-msgstr "netname2user: `%s' 中缺少群組 id 列表。"
+#: sysdeps/gnu/errlist.c:1009
+msgid "Identifier removed"
+msgstr "識別符號移除"
-#: nis/nss_nisplus/nisplus-publickey.c:300
-#: nis/nss_nisplus/nisplus-publickey.c:306
-#: nis/nss_nisplus/nisplus-publickey.c:370
-#: nis/nss_nisplus/nisplus-publickey.c:379
-#, c-format
-msgid "netname2user: (nis+ lookup): %s\n"
-msgstr "netname2user: (nis+ æœå°‹): %s\n"
+#: sysdeps/gnu/errlist.c:1017
+msgid "Multihop attempted"
+msgstr "嘗試 Multihop"
-#: nis/nss_nisplus/nisplus-publickey.c:319
-#, c-format
-msgid "netname2user: DES entry for %s in directory %s not unique"
-msgstr "netname2user: %s çš„ DES 項目在 %s 目錄下並ä¸æ˜¯å”¯ä¸€çš„"
+#: sysdeps/gnu/errlist.c:1025
+msgid "No data available"
+msgstr "沒有å¯ç”¨çš„資料"
-#: nis/nss_nisplus/nisplus-publickey.c:337
-#, c-format
-msgid "netname2user: principal name `%s' too long"
-msgstr "netname2user: 主è¦å稱 `%s' 太長了"
+#: sysdeps/gnu/errlist.c:1033
+msgid "Link has been severed"
+msgstr "連çµå·²æœ‰æœå‹™"
-#: nis/nss_nisplus/nisplus-publickey.c:392
-#, c-format
-msgid "netname2user: LOCAL entry for %s in directory %s not unique"
-msgstr "netname2user: %s 的本地端項目在 %s 目錄下並ä¸æ˜¯å”¯ä¸€çš„"
+#: sysdeps/gnu/errlist.c:1041
+msgid "No message of desired type"
+msgstr "沒有符åˆéœ€æ±‚æ ¼å¼çš„訊æ¯"
-#: nis/nss_nisplus/nisplus-publickey.c:399
-msgid "netname2user: should not have uid 0"
-msgstr "netname2user: ä¸èƒ½æœ‰ä½¿ç”¨è€… id 為 0 的情æ³"
+#: sysdeps/gnu/errlist.c:1049
+msgid "Out of streams resources"
+msgstr "所有資料æµçš„資æºéƒ½å·²ç”¨ç›¡"
-#: nis/ypclnt.c:171
-#, c-format
-msgid "YPBINDPROC_DOMAIN: %s\n"
-msgstr "YPBINDPROC_DOMAIN: %s\n"
+#: sysdeps/gnu/errlist.c:1057
+msgid "Device not a stream"
+msgstr "è£ç½®ä¸æ˜¯è³‡æ–™æµ"
-#: nis/ypclnt.c:780
-msgid "Request arguments bad"
-msgstr "必須引數有錯誤"
+#: sysdeps/gnu/errlist.c:1065
+msgid "Value too large for defined data type"
+msgstr "有定義的資料型別值太大"
-#: nis/ypclnt.c:782
-msgid "RPC failure on NIS operation"
-msgstr "NIS é‹ä½œ RPC 失敗"
+#: sysdeps/gnu/errlist.c:1073
+msgid "Protocol error"
+msgstr "å”定錯誤"
-#: nis/ypclnt.c:784
-msgid "Can't bind to server which serves this domain"
-msgstr "無法與æœå‹™æ–¼æ­¤ç¶²åŸŸçš„伺æœå™¨è¯ç¹«"
+#: sysdeps/gnu/errlist.c:1081
+msgid "Timer expired"
+msgstr "計時器已逾時"
-#: nis/ypclnt.c:786
-msgid "No such map in server's domain"
-msgstr "在伺æœå™¨çš„領域資料中找ä¸åˆ°æ­¤ä¸€å°æ˜ è¡¨"
+#. TRANS Operation canceled; an asynchronous operation was canceled before it
+#. TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel},
+#. TRANS the normal result is for the operations affected to complete with this
+#. TRANS error; @pxref{Cancel AIO Operations}.
+#: sysdeps/gnu/errlist.c:1093
+msgid "Operation canceled"
+msgstr "æ“作已被å–消"
-#: nis/ypclnt.c:788
-msgid "No such key in map"
-msgstr "在å°æ˜ è¡¨ä¸­æ²’有此一éµå€¼"
+#: sysdeps/gnu/errlist.c:1101
+msgid "Interrupted system call should be restarted"
+msgstr "中斷的系統呼å«å¿…é ˆé‡æ–°å•Ÿå‹•"
-#: nis/ypclnt.c:790
-msgid "Internal NIS error"
-msgstr "內部 NIS 錯誤"
+#: sysdeps/gnu/errlist.c:1109
+msgid "Channel number out of range"
+msgstr "通é“號碼超出範åœ"
-#: nis/ypclnt.c:792
-msgid "Local resource allocation failure"
-msgstr "å€åŸŸè³‡æºé…置失敗"
+#: sysdeps/gnu/errlist.c:1117
+msgid "Level 2 not synchronized"
+msgstr "層級 2 沒有åŒæ­¥"
-#: nis/ypclnt.c:794
-msgid "No more records in map database"
-msgstr "在å°æ˜ è¡¨è³‡æ–™åº«ä¸­æ²’有其他紀錄了"
+#: sysdeps/gnu/errlist.c:1125
+msgid "Level 3 halted"
+msgstr "層級 3 åœæ­¢"
-#: nis/ypclnt.c:796
-msgid "Can't communicate with portmapper"
-msgstr "無法與 portmapper 通訊"
+#: sysdeps/gnu/errlist.c:1133
+msgid "Level 3 reset"
+msgstr "層級 3 é‡è¨­"
-#: nis/ypclnt.c:798
-msgid "Can't communicate with ypbind"
-msgstr "無法與 ypbind 通訊"
+#: sysdeps/gnu/errlist.c:1141
+msgid "Link number out of range"
+msgstr "連çµæ•¸ç›®è¶…éŽç¯„åœ"
-#: nis/ypclnt.c:800
-msgid "Can't communicate with ypserv"
-msgstr "無法與 ypserv 通訊"
+#: sysdeps/gnu/errlist.c:1149
+msgid "Protocol driver not attached"
+msgstr "å”定的驅動程å¼æœªé€£æŽ¥"
-#: nis/ypclnt.c:802
-msgid "Local domain name not set"
-msgstr "å€åŸŸç¶²åŸŸå稱沒有設定"
+#: sysdeps/gnu/errlist.c:1157
+msgid "No CSI structure available"
+msgstr "沒有å¯ç”¨çš„ CSI çµæ§‹äº†"
-#: nis/ypclnt.c:804
-msgid "NIS map database is bad"
-msgstr "NIS å°æ˜ è³‡æ–™åº«æ˜¯å£žçš„"
+#: sysdeps/gnu/errlist.c:1165
+msgid "Level 2 halted"
+msgstr "層級 2 åœæ­¢"
-#: nis/ypclnt.c:806
-msgid "NIS client/server version mismatch - can't supply service"
-msgstr "NIS 請求端/伺æœç«¯ç‰ˆæœ¬ä¸ç¬¦åˆ - 無法æä¾›æœå‹™"
+#: sysdeps/gnu/errlist.c:1173
+msgid "Invalid exchange"
+msgstr "ä¸é©ç”¨çš„交æ›"
-#: nis/ypclnt.c:810
-msgid "Database is busy"
-msgstr "資料庫正在忙碌"
+#: sysdeps/gnu/errlist.c:1181
+msgid "Invalid request descriptor"
+msgstr "ä¸é©ç”¨çš„請求敘述項"
-#: nis/ypclnt.c:812
-msgid "Unknown NIS error code"
-msgstr "未知的 NIS 錯誤碼"
+#: sysdeps/gnu/errlist.c:1189
+msgid "Exchange full"
+msgstr "交æ›å·²æ»¿"
-#: nis/ypclnt.c:854
-msgid "Internal ypbind error"
-msgstr "內部 ypbind 錯誤"
+#: sysdeps/gnu/errlist.c:1197
+msgid "No anode"
+msgstr "沒有 anode"
-#: nis/ypclnt.c:856
-msgid "Domain not bound"
-msgstr "網域找ä¸åˆ°"
+#: sysdeps/gnu/errlist.c:1205
+msgid "Invalid request code"
+msgstr "ä¸é©ç”¨çš„請求碼"
-#: nis/ypclnt.c:858
-msgid "System resource allocation failure"
-msgstr "系統資æºé…置失敗"
+#: sysdeps/gnu/errlist.c:1213
+msgid "Invalid slot"
+msgstr "ä¸é©ç”¨çš„ slot"
-#: nis/ypclnt.c:860
-msgid "Unknown ypbind error"
-msgstr "未知的 ypbind 錯誤"
+#: sysdeps/gnu/errlist.c:1221
+msgid "File locking deadlock error"
+msgstr "檔案鎖定åœé “錯誤"
-#: nis/ypclnt.c:899
-msgid "yp_update: cannot convert host to netname\n"
-msgstr "yp_update: 無法轉æ›ä¸»æ©Ÿçš„網路å稱\n"
+#: sysdeps/gnu/errlist.c:1229
+msgid "Bad font file format"
+msgstr "錯誤的字型檔格å¼"
-#: nis/ypclnt.c:911
-msgid "yp_update: cannot get server address\n"
-msgstr "yp_update: 無法å–得伺æœå™¨ä½å€\n"
+#: sysdeps/gnu/errlist.c:1237
+msgid "Machine is not on the network"
+msgstr "機器ä¸åœ¨ç¶²è·¯ä¸­"
-#: nscd/cache.c:94
-msgid "while allocating hash table entry"
-msgstr "在é…ç½® hash 表格項目時"
+#: sysdeps/gnu/errlist.c:1245
+msgid "Package not installed"
+msgstr "套件並未安è£"
-#: nscd/cache.c:162 nscd/connections.c:184
-#, c-format
-msgid "cannot stat() file `%s': %s"
-msgstr "無法 stat() 檔案 `%s': %s"
+#: sysdeps/gnu/errlist.c:1253
+msgid "Advertise error"
+msgstr "通知錯誤"
-#: nscd/connections.c:150
-msgid "Cannot run nscd in secure mode as unprivileged user"
-msgstr "無法以未ç²æŽˆæ¬Šçš„使用者身分在安全模å¼ä¸­åŸ·è¡Œ nscd"
+#: sysdeps/gnu/errlist.c:1261
+msgid "Srmount error"
+msgstr "Srmount 錯誤"
-#: nscd/connections.c:172
-#, c-format
-msgid "while allocating cache: %s"
-msgstr "當é…置快å–é …ç›®: %s"
+#: sysdeps/gnu/errlist.c:1269
+msgid "Communication error on send"
+msgstr "在傳é€æ™‚通訊錯誤"
-#: nscd/connections.c:197
-#, c-format
-msgid "cannot open socket: %s"
-msgstr "無法開啟 socket: %s"
+#: sysdeps/gnu/errlist.c:1277
+msgid "RFS specific error"
+msgstr "RFS 特定錯誤"
-#: nscd/connections.c:215
-#, c-format
-msgid "cannot enable socket to accept connections: %s"
-msgstr "無法開啟 socket 來接å—連線: %s"
+#: sysdeps/gnu/errlist.c:1285
+msgid "Name not unique on network"
+msgstr "網路上的å稱ä¸æ˜¯å”¯ä¸€çš„"
-#: nscd/connections.c:260
-#, c-format
-msgid "cannot handle old request version %d; current version is %d"
-msgstr "ä¸èƒ½è™•ç†èˆŠ %d 版的請求;目å‰ä½¿ç”¨çš„版本是 %d"
+#: sysdeps/gnu/errlist.c:1293
+msgid "File descriptor in bad state"
+msgstr "檔案敘述項處於錯誤狀態"
-#: nscd/connections.c:298 nscd/connections.c:324
-#, c-format
-msgid "cannot write result: %s"
-msgstr "無法寫入çµæžœ: %s"
+#: sysdeps/gnu/errlist.c:1301
+msgid "Remote address changed"
+msgstr "é ç«¯ä½å€æ”¹è®Šäº†"
-#: nscd/connections.c:392 nscd/connections.c:514
-#, c-format
-msgid "error getting caller's id: %s"
-msgstr "å–得呼å«ç¨‹å¼è­˜åˆ¥ç¢¼æ™‚發生錯誤: %s"
+#: sysdeps/gnu/errlist.c:1309
+msgid "Can not access a needed shared library"
+msgstr "無法存å–所需的分享函å¼åº«"
-#: nscd/connections.c:485
-#, c-format
-msgid "while accepting connection: %s"
-msgstr "在接å—連線時: %s"
+#: sysdeps/gnu/errlist.c:1317
+msgid "Accessing a corrupted shared library"
+msgstr "å­˜å–一個毀掉的分享函å¼åº«"
-#: nscd/connections.c:498
-#, c-format
-msgid "short read while reading request: %s"
-msgstr "讀å–請求時發ç¾è¼¸å…¥å€¼éŽçŸ­: %s"
+#: sysdeps/gnu/errlist.c:1325
+msgid ".lib section in a.out corrupted"
+msgstr "a.out 中 .lib 節å€æ¯€æŽ‰äº†"
-#: nscd/connections.c:542
-#, c-format
-msgid "key length in request too long: %d"
-msgstr "在此請求中使用的éµå€¼å¤ªé•·äº†: %d"
+#: sysdeps/gnu/errlist.c:1333
+msgid "Attempting to link in too many shared libraries"
+msgstr "嘗試去連çµå¤ªå¤šçš„分享資料庫"
-#: nscd/connections.c:556
-#, c-format
-msgid "short read while reading request key: %s"
-msgstr "讀å–請求的éµå€¼æ™‚發ç¾è¼¸å…¥å€¼éŽçŸ­: %s"
+#: sysdeps/gnu/errlist.c:1341
+msgid "Cannot exec a shared library directly"
+msgstr "ä¸èƒ½ç›´æŽ¥åŸ·è¡Œä¸€å€‹åˆ†äº«å‡½å¼åº«"
-#: nscd/connections.c:566
-#, c-format
-msgid "handle_request: request received (Version = %d) from PID %ld"
-msgstr "handle_request: è«‹æ±‚å·²è¢«æŽ¥å— (版本為 %d) 來自於 PID %ld"
+#: sysdeps/gnu/errlist.c:1349
+msgid "Streams pipe error"
+msgstr "資料æµç®¡ç·šéŒ¯èª¤"
-#: nscd/connections.c:571
-#, c-format
-msgid "handle_request: request received (Version = %d)"
-msgstr "handle_request: è«‹æ±‚å·²è¢«æŽ¥å— (版本為 %d)"
+#: sysdeps/gnu/errlist.c:1357
+msgid "Structure needs cleaning"
+msgstr "çµæ§‹éœ€è¦æ¸…ç†"
-#: nscd/connections.c:635 nscd/connections.c:636 nscd/connections.c:655
-#: nscd/connections.c:668 nscd/connections.c:674 nscd/connections.c:681
-#, c-format
-msgid "Failed to run nscd as user '%s'"
-msgstr "以使用者 '%s' 的身分執行 nscd 失敗"
+#: sysdeps/gnu/errlist.c:1365
+msgid "Not a XENIX named type file"
+msgstr "ä¸¦éž XENIX 命åæ ¼å¼çš„檔案"
-#: nscd/connections.c:656
-msgid "getgrouplist failed"
-msgstr "getgrouplist 失敗"
+#: sysdeps/gnu/errlist.c:1373
+msgid "No XENIX semaphores available"
+msgstr "沒有å¯ç”¨çš„ XENIX 信號標誌了"
-#: nscd/connections.c:669
-msgid "setgroups failed"
-msgstr "setgroups 失敗"
+#: sysdeps/gnu/errlist.c:1381
+msgid "Is a named type file"
+msgstr "是個具å的型態檔案"
-#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
-msgid "while allocating key copy"
-msgstr "在é…ç½®éµå€¼å‰¯æœ¬æ™‚"
+#: sysdeps/gnu/errlist.c:1389
+msgid "Remote I/O error"
+msgstr "é ç«¯è¼¸å‡ºå…¥éŒ¯èª¤"
-#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
-msgid "while allocating cache entry"
-msgstr "在é…置快å–項目時"
+#: sysdeps/gnu/errlist.c:1397
+msgid "No medium found"
+msgstr "找ä¸åˆ°åª’é«”"
-#: nscd/grpcache.c:197 nscd/hstcache.c:283 nscd/pwdcache.c:193
-#, c-format
-msgid "short write in %s: %s"
-msgstr "寫入 %s 的資料éŽçŸ­: %s"
+#: sysdeps/gnu/errlist.c:1405
+msgid "Wrong medium type"
+msgstr "錯誤的媒體型態"
-#: nscd/grpcache.c:219
-#, c-format
-msgid "Haven't found \"%s\" in group cache!"
-msgstr "尚未在群組快å–中找到 \"%s\"!"
+#: sysdeps/gnu/errlist.c:1413
+msgid "Required key not available"
+msgstr "å¿…è¦éµå€¼ç„¡æ³•ä½¿ç”¨"
-#: nscd/grpcache.c:285
-#, c-format
-msgid "Invalid numeric gid \"%s\"!"
-msgstr "無效的 gid 數值 \"%s\"!"
+#: sysdeps/gnu/errlist.c:1421
+msgid "Key has expired"
+msgstr "éµå€¼å·²éŽæœŸ"
-#: nscd/grpcache.c:292
-#, c-format
-msgid "Haven't found \"%d\" in group cache!"
-msgstr "尚未在群組快å–中找到 \"%d\"!"
+#: sysdeps/gnu/errlist.c:1429
+msgid "Key has been revoked"
+msgstr "éµå€¼å·²å–消"
-#: nscd/hstcache.c:305 nscd/hstcache.c:371 nscd/hstcache.c:436
-#: nscd/hstcache.c:501
-#, c-format
-msgid "Haven't found \"%s\" in hosts cache!"
-msgstr "尚未在 hosts å¿«å–中找到 \"%s\"!"
+#: sysdeps/gnu/errlist.c:1437
+msgid "Key was rejected by service"
+msgstr "éµå€¼è¢«æœå‹™æ‰€æ‹’絕"
-#: nscd/nscd.c:89
-msgid "Read configuration data from NAME"
-msgstr "自å稱中讀å–設定資料"
+#: sysdeps/gnu/errlist.c:1445
+msgid "Owner died"
+msgstr "æ“有者已消é€"
-#: nscd/nscd.c:91
-msgid "Do not fork and display messages on the current tty"
-msgstr "ä¸åœ¨ç›®å‰çš„ tty 產生å­è¡Œç¨‹ (fork) 以åŠé¡¯ç¤ºè¨Šæ¯"
+#: sysdeps/gnu/errlist.c:1453
+msgid "State not recoverable"
+msgstr "狀態無法回復"
-#: nscd/nscd.c:92
-msgid "NUMBER"
-msgstr "號碼"
+#: sysdeps/gnu/errlist.c:1461
+msgid "Operation not possible due to RF-kill"
+msgstr "由於 RF-kill 而無法æ“作"
-#: nscd/nscd.c:92
-msgid "Start NUMBER threads"
-msgstr "啟動執行緒"
+#: sysdeps/mach/_strerror.c:57
+msgid "Error in unknown error system: "
+msgstr "未知系統錯誤: "
-#: nscd/nscd.c:93
-msgid "Shut the server down"
-msgstr "將伺æœå™¨é—œé–‰"
+#: sysdeps/posix/gai_strerror-strs.h:1
+msgid "Address family for hostname not supported"
+msgstr "hostname çš„ä½å€æ—群ä¸æ”¯æ´"
-#: nscd/nscd.c:94
-msgid "Print current configuration statistic"
-msgstr "å°å‡ºç›®å‰çš„組態統計"
+#: sysdeps/posix/gai_strerror-strs.h:2
+msgid "Temporary failure in name resolution"
+msgstr "解æžå稱時發生暫時性的錯誤"
-#: nscd/nscd.c:95
-msgid "TABLE"
-msgstr "表格"
+#: sysdeps/posix/gai_strerror-strs.h:3
+msgid "Bad value for ai_flags"
+msgstr "錯誤的 ai_flags 值"
-#: nscd/nscd.c:96
-msgid "Invalidate the specified cache"
-msgstr "使é¸å®šçš„å¿«å–無效"
+#: sysdeps/posix/gai_strerror-strs.h:4
+msgid "Non-recoverable failure in name resolution"
+msgstr "在解æžå稱時發生嚴é‡çš„錯誤"
-#: nscd/nscd.c:97
-msgid "TABLE,yes"
-msgstr "è¦è£½ä½œè¡¨æ ¼"
+#: sysdeps/posix/gai_strerror-strs.h:5
+msgid "ai_family not supported"
+msgstr "ai_family 沒有支æ´"
-#: nscd/nscd.c:97
-msgid "Use separate cache for each user"
-msgstr "å°ä¸åŒä½¿ç”¨è€…使用ä¸åŒçš„å¿«å–檔案"
+#: sysdeps/posix/gai_strerror-strs.h:6
+msgid "Memory allocation failure"
+msgstr "記憶體é…置失敗"
-#: nscd/nscd.c:102
-msgid "Name Service Cache Daemon."
-msgstr "網域å稱快å–ç²¾éˆ"
+#: sysdeps/posix/gai_strerror-strs.h:7
+msgid "No address associated with hostname"
+msgstr "沒有此主機å稱所å°æ‡‰çš„ä½å€"
-#: nscd/nscd.c:141
-msgid "cannot read configuration file; this is fatal"
-msgstr "無法讀å–設定檔,這是一個嚴é‡éŒ¯èª¤"
+#: sysdeps/posix/gai_strerror-strs.h:8
+msgid "Name or service not known"
+msgstr "未知的å稱或æœå‹™"
-#: nscd/nscd.c:152
-msgid "already running"
-msgstr "已在執行"
+#: sysdeps/posix/gai_strerror-strs.h:9
+msgid "Servname not supported for ai_socktype"
+msgstr "ä¸æ”¯æ´ ai_socktype 的伺æœå稱"
-#: nscd/nscd.c:270 nscd/nscd.c:294 nscd/nscd_stat.c:132
-msgid "Only root is allowed to use this option!"
-msgstr "åªæœ‰ root æ‰å¯ä»¥ä½¿ç”¨æ­¤ä¸€é¸é …!"
+#: sysdeps/posix/gai_strerror-strs.h:10
+msgid "ai_socktype not supported"
+msgstr "ai_socktype 沒有支æ´"
-#: nscd/nscd_conf.c:88
-#, c-format
-msgid "Parse error: %s"
-msgstr "解æžéŒ¯èª¤: %s"
+#: sysdeps/posix/gai_strerror-strs.h:11
+msgid "System error"
+msgstr "系統錯誤"
-#: nscd/nscd_conf.c:171
-#, c-format
-msgid "Could not create log file \"%s\""
-msgstr "無法產生訊æ¯æª” \"%s\""
+#: sysdeps/posix/gai_strerror-strs.h:12
+msgid "Processing request in progress"
+msgstr "此項請求已經在處ç†ç•¶ä¸­"
-#: nscd/nscd_conf.c:187
-msgid "Must specify user name for server-user option"
-msgstr "必須為伺æœå™¨ä½¿ç”¨è€…é¸é …指定使用者å稱"
+#: sysdeps/posix/gai_strerror-strs.h:13
+msgid "Request canceled"
+msgstr "請求已被å–消"
-#: nscd/nscd_conf.c:194
-msgid "Must specify user name for stat-user option"
-msgstr "必須為 stat 使用者é¸é …指定使用者å稱"
+#: sysdeps/posix/gai_strerror-strs.h:14
+msgid "Request not canceled"
+msgstr "請求並未å–消"
-#: nscd/nscd_conf.c:205
-#, c-format
-msgid "Unknown option: %s %s %s"
-msgstr "未知的é¸é …: %s %s %s"
+#: sysdeps/posix/gai_strerror-strs.h:15
+msgid "All requests done"
+msgstr "所有請求已完æˆ"
-#: nscd/nscd_stat.c:103
-#, c-format
-msgid "cannot write statistics: %s"
-msgstr "無法寫入統計資料: %s"
+#: sysdeps/posix/gai_strerror-strs.h:16
+msgid "Interrupted by a signal"
+msgstr "由訊號所中斷"
-#: nscd/nscd_stat.c:128
-#, c-format
-msgid "Only root or %s is allowed to use this option!"
-msgstr "åªæœ‰ root 或 %s æ‰å…許使用此一é¸é …!"
+#: sysdeps/posix/gai_strerror-strs.h:17
+msgid "Parameter string not correctly encoded"
+msgstr "åƒæ•¸å­—串無法正確編碼"
-#: nscd/nscd_stat.c:139
-msgid "nscd not running!\n"
-msgstr "nscd 並沒有在執行!\n"
+#: sysdeps/unix/siglist.c:26
+msgid "Signal 0"
+msgstr "訊號 0"
-#: nscd/nscd_stat.c:150
-msgid "write incomplete"
-msgstr "寫入ä¸å®Œå…¨"
+#: sysdeps/unix/siglist.c:32
+msgid "IOT trap"
+msgstr "IOT 陷阱"
-#: nscd/nscd_stat.c:162
-msgid "cannot read statistics data"
-msgstr "無法讀å–統計資料"
+#: sysdeps/unix/sysv/linux/i386/readelflib.c:49
+#, c-format
+msgid "%s is for unknown machine %d.\n"
+msgstr "%s 是給未知的機器 %d。\n"
+
+#: sysdeps/unix/sysv/linux/ia64/makecontext.c:63
+#, c-format
+msgid "makecontext: does not know how to handle more than 8 arguments\n"
+msgstr "makecontext: ä¸çŸ¥è¦å¦‚何處ç†è¶…éŽå…«å€‹å¼•æ•¸\n"
-#: nscd/nscd_stat.c:165
+#: sysdeps/unix/sysv/linux/lddlibc4.c:61
#, c-format
msgid ""
-"nscd configuration:\n"
+"Usage: lddlibc4 FILE\n"
"\n"
-"%15d server debug level\n"
msgstr ""
-"nscd 設定:\n"
+"用法:lddlibc4 檔案\n"
"\n"
-"%15d 伺æœç¨‹å¼éŒ¯èª¤è¨Šæ¯å ±å‘Šç­‰ç´š\n"
-#: nscd/nscd_stat.c:189
+#: sysdeps/unix/sysv/linux/lddlibc4.c:82
#, c-format
-msgid "%3ud %2uh %2um %2lus server runtime\n"
-msgstr "%3ud %2uh %2um %2lus 伺æœå™¨ 執行時期\n"
+msgid "cannot open `%s'"
+msgstr "無法開啟 `%s'"
-#: nscd/nscd_stat.c:192
+#: sysdeps/unix/sysv/linux/lddlibc4.c:86
#, c-format
-msgid " %2uh %2um %2lus server runtime\n"
-msgstr " %2uh %2um %2lus 伺æœå™¨ 執行時期\n"
+msgid "cannot read header from `%s'"
+msgstr "無法從 `%s' 讀å–標頭資料"
-#: nscd/nscd_stat.c:194
-#, c-format
-msgid " %2um %2lus server runtime\n"
-msgstr " %2um %2lus 伺æœå™¨ 執行時期\n"
+#: timezone/zdump.c:215
+msgid "lacks alphabetic at start"
+msgstr "lacks å­—æ¯é †åºæ–¼é–‹å§‹"
-#: nscd/nscd_stat.c:196
-#, c-format
-msgid " %2lus server runtime\n"
-msgstr " %2lus 伺æœå™¨ 執行時期\n"
+#: timezone/zdump.c:217
+msgid "has fewer than 3 alphabetics"
+msgstr "有更少的比 3 å­—æ¯é †åº"
-#: nscd/nscd_stat.c:198
-#, c-format
-msgid "%15lu number of times clients had to wait\n"
-msgstr "%15lu 次數 須等待客戶端\n"
+#: timezone/zdump.c:219
+msgid "has more than 6 alphabetics"
+msgstr "æœ‰è¶…éŽ 6 å­—æ¯é †åº"
-#: nscd/nscd_stat.c:213 nscd/nscd_stat.c:215
-msgid " no"
-msgstr " ä¸"
+#: timezone/zdump.c:227
+msgid "differs from POSIX standard"
+msgstr "differs 從 POSIX 標準"
-#: nscd/nscd_stat.c:213 nscd/nscd_stat.c:215
-msgid " yes"
-msgstr " 是"
+#: timezone/zdump.c:233
+#, c-format
+msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"
+msgstr "%s: 警告:å€åŸŸã€Œ%sã€ç¸®å¯«ã€Œ%sã€%s\n"
-#: nscd/nscd_stat.c:221
+#: timezone/zdump.c:242
#, c-format
msgid ""
+"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"
"\n"
-"%s cache:\n"
-"\n"
-"%15s cache is enabled\n"
-"%15Zu suggested size\n"
-"%15lu seconds time to live for positive entries\n"
-"%15lu seconds time to live for negative entries\n"
-"%15lu cache hits on positive entries\n"
-"%15lu cache hits on negative entries\n"
-"%15lu cache misses on positive entries\n"
-"%15lu cache misses on negative entries\n"
-"%15lu%% cache hit rate\n"
-"%15lu current number of cached values\n"
-"%15lu maximum number of cached values\n"
-"%15lu maximum chain length searched\n"
-"%15lu number of delays on rdlock\n"
-"%15lu number of delays on wrlock\n"
-"%15s check /etc/%s for changes\n"
+"Report bugs to tz@elsie.nci.nih.gov.\n"
msgstr ""
+"%s:用法是 %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"
"\n"
-"%s å¿«å–:\n"
-"\n"
-"%15s å¿«å–已開啟\n"
-"%15Zu 希望的大å°\n"
-"%15lu 正項目的存在時間 (秒)\n"
-"%15lu 負項目的存在時間 (秒)\n"
-"%15lu 正項目中找到快å–數\n"
-"%15lu 負項目中找到快å–數\n"
-"%15lu 正項目中éºæ¼çš„å¿«å–數\n"
-"%15lu 負項目中éºæ¼çš„å¿«å–數\n"
-"%15lu%% å¿«å–找到的比例\n"
-"%15lu ç›®å‰å·²å¿«å–數值é‡\n"
-"%15lu 最大快å–數值é‡\n"
-"%15lu 最大已æœå°‹çš„éˆçµé•·åº¦\n"
-"%15lu 在 rdlock 上的延é²æ•¸é‡\n"
-"%15lu 在 wrlock 上的延é²æ•¸é‡\n"
-"%15s 檢查 /etc/%s 的改變\n"
+"請將錯誤通報給 tz@elsie.nci.nih.gov。\n"
-#: nscd/pwdcache.c:215
+#: timezone/zdump.c:311
#, c-format
-msgid "Haven't found \"%s\" in password cache!"
-msgstr "尚未在密碼快å–中找到 \"%s\"!"
+msgid "%s: wild -c argument %s\n"
+msgstr "%s: wild -c 引數 %s\n"
-#: nscd/pwdcache.c:281
-#, c-format
-msgid "Invalid numeric uid \"%s\"!"
-msgstr "無效的 uid 數值 \"%s\"!"
-
-#: nscd/pwdcache.c:288
-#, c-format
-msgid "Haven't found \"%d\" in password cache!"
-msgstr "尚未在密碼快å–中找到 \"%d\"!"
-
-#: elf/../sysdeps/generic/dl-sysdep.c:422
-msgid "cannot create capability list"
-msgstr "無法建立 capability 列表"
-
-#: elf/../sysdeps/generic/readelflib.c:35
-#, c-format
-msgid "file %s is truncated\n"
-msgstr "檔案 %s 已截短\n"
+#: timezone/zdump.c:398
+msgid "Error writing to standard output"
+msgstr "寫入標準輸出時錯誤"
-#: elf/../sysdeps/generic/readelflib.c:67
+#: timezone/zdump.c:421
#, c-format
-msgid "%s is a 32 bit ELF file.\n"
-msgstr "%s 是一個 32 ä½å…ƒçš„ ELF 檔案。\n"
+msgid "%s: use of -v on system with floating time_t other than float or double\n"
+msgstr "%s: 使用 -v 於具備浮點數 time_t 的系統而éžæµ®é»žæ•¸æˆ–é›™å€ç²¾åº¦\n"
-#: elf/../sysdeps/generic/readelflib.c:69
+#: timezone/zic.c:388
#, c-format
-msgid "%s is a 64 bit ELF file.\n"
-msgstr "%s 是一個 64 ä½å…ƒçš„ ELF 檔案。\n"
+msgid "%s: Memory exhausted: %s\n"
+msgstr "%s: 記憶體已用完: %s\n"
-#: elf/../sysdeps/generic/readelflib.c:71
+#: timezone/zic.c:434
#, c-format
-msgid "Unknown ELFCLASS in file %s.\n"
-msgstr "檔案 %s 中未知的 ELFCLASS。\n"
+msgid "\"%s\", line %d: %s"
+msgstr "\"%s\", 第 %d 列: %s"
-#: elf/../sysdeps/generic/readelflib.c:78
+#: timezone/zic.c:437
#, c-format
-msgid "%s is not a shared object file (Type: %d).\n"
-msgstr "%s ä¸æ˜¯ä¸€å€‹å…±ç”¨ç›®çš„檔 (åž‹æ…‹: %d)。\n"
+msgid " (rule from \"%s\", line %d)"
+msgstr " (è¦å‰‡ä¾†è‡ª \"%s\", 第 %d 列)"
-#: elf/../sysdeps/generic/readelflib.c:109
-msgid "more than one dynamic segment\n"
-msgstr "超éŽä¸€å€‹çš„å‹•æ…‹å€æ®µ\n"
+#: timezone/zic.c:449
+msgid "warning: "
+msgstr "警告: "
-#: elf/../sysdeps/unix/sysv/linux/i386/readelflib.c:49
+#: timezone/zic.c:459
#, c-format
-msgid "%s is for unknown machine %d.\n"
-msgstr "%s 是給未知的機器 %d。\n"
-
-#: elf/cache.c:70
-msgid "unknown"
-msgstr "未知"
+msgid ""
+"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
+"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
+"\n"
+"Report bugs to tz@elsie.nci.nih.gov.\n"
+msgstr ""
+"%s:用法是 %s [ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
+"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
+"\n"
+"請將錯誤通報給 tz@elsie.nci.nih.gov。\n"
-#: elf/cache.c:111
-msgid "Unknown OS"
-msgstr "未知的作業系統"
+#: timezone/zic.c:496
+msgid "wild compilation-time specification of zic_t"
+msgstr "zic_t çš„è¬ç”¨ç·¨è­¯æ™‚é–“è¦æ ¼"
-#: elf/cache.c:116
+#: timezone/zic.c:515
#, c-format
-msgid ", OS ABI: %s %d.%d.%d"
-msgstr ", OS ABI: %s %d.%d.%d"
+msgid "%s: More than one -d option specified\n"
+msgstr "%s: 您使用了超éŽä¸€å€‹ -d é¸é …\n"
-#: elf/cache.c:142 elf/ldconfig.c:1078
+#: timezone/zic.c:525
#, c-format
-msgid "Can't open cache file %s\n"
-msgstr "無法開啟快å–檔 %s\n"
-
-#: elf/cache.c:154
-msgid "mmap of cache file failed.\n"
-msgstr "å¿«å–檔案 mmap 失敗。\n"
-
-#: elf/cache.c:158 elf/cache.c:168
-msgid "File is not a cache file.\n"
-msgstr "檔案並éžå¿«å–檔。\n"
+msgid "%s: More than one -l option specified\n"
+msgstr "%s: 您使用了超éŽä¸€å€‹ -l é¸é …\n"
-#: elf/cache.c:201 elf/cache.c:211
+#: timezone/zic.c:535
#, c-format
-msgid "%d libs found in cache `%s'\n"
-msgstr "%d 函å¼åº«åœ¨å¿«å– `%s' 中找到\n"
+msgid "%s: More than one -p option specified\n"
+msgstr "%s: 您使用了超éŽä¸€å€‹ -p é¸é …\n"
-#: elf/cache.c:410
+#: timezone/zic.c:545
#, c-format
-msgid "Can't remove old temporary cache file %s"
-msgstr "無法刪除舊的暫時快å–檔 %s"
+msgid "%s: More than one -y option specified\n"
+msgstr "%s: 您使用了超éŽä¸€å€‹ -y é¸é …\n"
-#: elf/cache.c:417
+#: timezone/zic.c:555
#, c-format
-msgid "Can't create temporary cache file %s"
-msgstr "無法產生暫時的快å–檔 %s"
-
-#: elf/cache.c:425 elf/cache.c:434 elf/cache.c:438
-msgid "Writing of cache data failed"
-msgstr "寫入快å–資料時發生錯誤"
+msgid "%s: More than one -L option specified\n"
+msgstr "%s: 您使用了超éŽä¸€å€‹ -L é¸é …\n"
-#: elf/cache.c:442
-msgid "Writing of cache data failed."
-msgstr "寫入快å–資料時發生錯誤"
+#: timezone/zic.c:604
+msgid "link to link"
+msgstr "連çµåˆ°é€£çµ"
-#: elf/cache.c:449
-#, c-format
-msgid "Changing access rights of %s to %#o failed"
-msgstr "更改 %s çš„å­˜å–權é™ç‚º %#o 失敗"
+#: timezone/zic.c:669
+msgid "hard link failed, symbolic link used"
+msgstr "實體連çµå¤±æ•—,使用符號連çµä»£æ›¿"
-#: elf/cache.c:454
+#: timezone/zic.c:677
#, c-format
-msgid "Renaming of %s to %s failed"
-msgstr "å°‡ %s 改å為 %s 失敗"
-
-#: elf/dl-close.c:128
-msgid "shared object not open"
-msgstr "共用目的檔案沒有開啟"
-
-#: elf/dl-close.c:531 elf/dl-open.c:454
-msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script."
-msgstr "TLS 產生計數器已被轉包! 請寄出以 'glibcbug' 命令稿所åšçš„報告。"
+msgid "%s: Can't link from %s to %s: %s\n"
+msgstr "%s: 無法從 %s 連çµåˆ° %s: %s\n"
-#: elf/dl-deps.c:111 elf/dl-open.c:183
-msgid "DST not allowed in SUID/SGID programs"
-msgstr "DST ä¸å…許在 SUID/SGID 的程å¼ä¸­"
+#: timezone/zic.c:749 timezone/zic.c:751
+msgid "same rule name in multiple files"
+msgstr "在多個檔案裡é¢æœ‰ç›¸åŒçš„è¦å‰‡å稱"
-#: elf/dl-deps.c:124
-msgid "empty dynamics string token substitution"
-msgstr "空的動態字串記號替æ›"
+#: timezone/zic.c:792
+msgid "unruly zone"
+msgstr "沒有è¦å‰‡çš„時å€"
-#: elf/dl-deps.c:130
+#: timezone/zic.c:799
#, c-format
-msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n"
-msgstr "由於空的動態字串記號替æ›è€Œç„¡æ³•è¼‰å…¥å¤–部的 `%s'\n"
-
-#: elf/dl-deps.c:461
-msgid "cannot allocate dependency list"
-msgstr "無法é…置相關性列表"
-
-#: elf/dl-deps.c:494 elf/dl-deps.c:549
-msgid "cannot allocate symbol search list"
-msgstr "無法é…置符號æœå°‹åˆ—表"
-
-#: elf/dl-deps.c:534
-msgid "Filters not supported with LD_TRACE_PRELINKING"
-msgstr "éŽæ¿¾ç¨‹å¼ä¸æ”¯æ´èˆ‡ LD_TRACE_PRELINKING 共用"
-
-#: elf/dl-error.c:75
-msgid "DYNAMIC LINKER BUG!!!"
-msgstr "動態連接程å¼æœ‰å•é¡Œ!!!"
-
-#: elf/dl-error.c:108
-msgid "error while loading shared libraries"
-msgstr "正在載入共用函å¼åº«æ™‚發生錯誤"
-
-#: elf/dl-load.c:347
-msgid "cannot allocate name record"
-msgstr "無法é…ç½®å稱紀錄"
-
-#: elf/dl-load.c:449 elf/dl-load.c:528 elf/dl-load.c:648 elf/dl-load.c:743
-msgid "cannot create cache for search path"
-msgstr "無法為æœå°‹è·¯å¾‘建立快å–"
-
-#: elf/dl-load.c:551
-msgid "cannot create RUNPATH/RPATH copy"
-msgstr "無法建立 RUNPATH/RPATH 的副本"
-
-#: elf/dl-load.c:634
-msgid "cannot create search path array"
-msgstr "無法建立æœå°‹è·¯å¾‘陣列"
-
-#: elf/dl-load.c:830
-msgid "cannot stat shared object"
-msgstr "無法 stat 共用目的檔"
-
-#: elf/dl-load.c:874
-msgid "cannot open zero fill device"
-msgstr "無法開啟以零填滿的è£ç½®"
-
-#: elf/dl-load.c:883 elf/dl-load.c:1929
-msgid "cannot create shared object descriptor"
-msgstr "無法建立共用目的檔敘述項"
-
-#: elf/dl-load.c:902 elf/dl-load.c:1470 elf/dl-load.c:1553
-msgid "cannot read file data"
-msgstr "無法讀å–檔案資料"
-
-#: elf/dl-load.c:946
-msgid "ELF load command alignment not page-aligned"
-msgstr "ELF 載入命令å°é½Šä¸¦æ²’æœ‰æŒ‰ç…§è¨˜æ†¶é«”åˆ†é  (page) å°é½Š"
-
-#: elf/dl-load.c:953
-msgid "ELF load command address/offset not properly aligned"
-msgstr "ELF 載入命令ä½å€/ä½ç§»ä¸¦æ²’有é©ç•¶åœ°å°é½Š"
-
-#: elf/dl-load.c:1037
-msgid "cannot allocate TLS data structures for initial thread"
-msgstr "無法é…ç½® TLS 資料çµæ§‹ç”¨ä»¥èµ·å§‹åŸ·è¡Œç·’"
-
-#: elf/dl-load.c:1061
-msgid "cannot handle TLS data"
-msgstr "ç„¡æ³•è™•ç† TLS 資料"
-
-#: elf/dl-load.c:1075
-msgid "object file has no loadable segments"
-msgstr "目的檔中沒有å¯è¼‰å…¥çš„節å€"
-
-#: elf/dl-load.c:1110
-msgid "failed to map segment from shared object"
-msgstr "從共用目的檔中å°æ˜ å€æ®µå¤±æ•—"
-
-#: elf/dl-load.c:1135
-msgid "cannot dynamically load executable"
-msgstr "無法動態載入執行檔"
-
-#: elf/dl-load.c:1191
-msgid "cannot change memory protections"
-msgstr "無法改變記憶體ä¿è­·ç‹€æ…‹"
-
-#: elf/dl-load.c:1210
-msgid "cannot map zero-fill pages"
-msgstr "無法å°æ‡‰ä»¥é›¶å¡«æ»¿çš„分é å€"
-
-#: elf/dl-load.c:1228
-msgid "cannot allocate memory for program header"
-msgstr "無法é…置記憶體給程å¼æ¨™é ­å€ä½¿ç”¨"
-
-#: elf/dl-load.c:1259
-msgid "object file has no dynamic section"
-msgstr "共用目的檔中沒有動態節å€"
-
-#: elf/dl-load.c:1299
-msgid "shared object cannot be dlopen()ed"
-msgstr "共用目的檔無法被 dlopen()"
-
-#: elf/dl-load.c:1322
-msgid "cannot create searchlist"
-msgstr "無法建立æœå°‹åˆ—表"
-
-#: elf/dl-load.c:1352
-msgid "cannot enable executable stack as shared object requires"
-msgstr "無法開啟å¯åŸ·è¡Œå †ç–Šåšç‚ºå…±ç”¨ç›®çš„檔"
-
-#: elf/dl-load.c:1470
-msgid "file too short"
-msgstr "檔案太å°"
-
-#: elf/dl-load.c:1493
-msgid "invalid ELF header"
-msgstr "無效的 ELF 標頭"
-
-#: elf/dl-load.c:1502
-msgid "ELF file data encoding not big-endian"
-msgstr "ELF 檔資料編碼並éžå¤§å°¾åº"
-
-#: elf/dl-load.c:1504
-msgid "ELF file data encoding not little-endian"
-msgstr "ELF 檔資料編碼並éžå°å°¾åº"
-
-#: elf/dl-load.c:1508
-msgid "ELF file version ident does not match current one"
-msgstr "ELF 檔版本 ident ä¸ç¬¦åˆç›®å‰æ‰€ä½¿ç”¨çš„"
-
-#: elf/dl-load.c:1512
-msgid "ELF file OS ABI invalid"
-msgstr "ELF 檔 OS ABI 版本ä¸é©ç”¨"
-
-#: elf/dl-load.c:1514
-msgid "ELF file ABI version invalid"
-msgstr "ELF 檔 ABI 版本ä¸é©ç”¨"
-
-#: elf/dl-load.c:1517
-msgid "internal error"
-msgstr "內部錯誤"
-
-#: elf/dl-load.c:1524
-msgid "ELF file version does not match current one"
-msgstr "ELF 檔版本ä¸ç¬¦åˆç›®å‰çš„版本"
-
-#: elf/dl-load.c:1532
-msgid "ELF file's phentsize not the expected size"
-msgstr "ELF 檔的 phentsize 並ä¸æ˜¯é æœŸä¸­çš„大å°"
-
-#: elf/dl-load.c:1538
-msgid "only ET_DYN and ET_EXEC can be loaded"
-msgstr "åªæœ‰ ET_DYN ä»¥åŠ ET_EXEC å¯ä»¥è¼‰å…¥"
-
-#: elf/dl-load.c:1944
-msgid "cannot open shared object file"
-msgstr "無法開啟共用目的檔"
-
-#: elf/dl-lookup.c:265 elf/dl-lookup.c:443
-msgid "relocation error"
-msgstr "é‡å®šå€éŒ¯èª¤"
-
-#: elf/dl-open.c:111
-msgid "cannot extend global scope"
-msgstr "無法延展全域變數的作用域"
-
-#: elf/dl-open.c:214
-msgid "empty dynamic string token substitution"
-msgstr "空的動態字串記號替æ›"
-
-#: elf/dl-open.c:361 elf/dl-open.c:372
-msgid "cannot create scope list"
-msgstr "無法建立作用域列表"
+msgid "%s in ruleless zone"
+msgstr "%s 在沒有è¦å‰‡çš„å€æ®µ"
-#: elf/dl-open.c:434
-msgid "cannot create TLS data structures"
-msgstr "無法建立 TLS 資料çµæ§‹"
+#: timezone/zic.c:820
+msgid "standard input"
+msgstr "標準輸入"
-#: elf/dl-open.c:496
-msgid "invalid mode for dlopen()"
-msgstr "無效的 dlopen() 模å¼"
+#: timezone/zic.c:825
+#, c-format
+msgid "%s: Can't open %s: %s\n"
+msgstr "%s: 無法開啟 %s: %s\n"
-#: elf/dl-reloc.c:57
-msgid "cannot allocate memory in static TLS block"
-msgstr "無法在éœæ…‹ TLS å€å¡Šä¸­é…置記憶體"
+#: timezone/zic.c:836
+msgid "line too long"
+msgstr "列的長度éŽé•·"
-#: elf/dl-reloc.c:176
-msgid "cannot make segment writable for relocation"
-msgstr "在é‡æ–°å®šå€ä»¥å¾Œç„¡æ³•å°‡å€æ®µè¨­ç‚ºå¯å¯«å…¥ç‹€æ…‹"
+#: timezone/zic.c:856
+msgid "input line of unknown type"
+msgstr "ä¸æ˜Žåž‹åˆ¥çš„輸入列"
-#: elf/dl-reloc.c:277
+#: timezone/zic.c:872
#, c-format
-msgid "%s: profiler found no PLTREL in object %s\n"
-msgstr "%s: æ述程å¼åœ¨ç›®çš„檔 %s 中沒有找到 PLTREL\n"
+msgid "%s: Leap line in non leap seconds file %s\n"
+msgstr "%s: é–時設定列出ç¾åœ¨ä¸å«é–秒的設定檔 %s 中\n"
-#: elf/dl-reloc.c:289
+#: timezone/zic.c:879 timezone/zic.c:1316 timezone/zic.c:1338
#, c-format
-msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
-msgstr "%s: æ述程å¼é®è”½ %s çš„ PLTREL 時記憶體ä¸è¶³\n"
-
-#: elf/dl-reloc.c:304
-msgid "cannot restore segment prot after reloc"
-msgstr "在 reloc 之後無法復原 segment prot"
-
-#: elf/dl-sym.c:74 elf/dl-sym.c:145
-msgid "RTLD_NEXT used in code not dynamically loaded"
-msgstr "程å¼ç¢¼æ‰€ä½¿ç”¨çš„ RTLD_NEXT 沒有動態載入"
-
-#: elf/dl-version.c:303
-msgid "cannot allocate version reference table"
-msgstr "無法é…置版本åƒç…§è¡¨"
-
-#: elf/ldconfig.c:122
-msgid "Print cache"
-msgstr "列å°å¿«å–"
-
-#: elf/ldconfig.c:123
-msgid "Generate verbose messages"
-msgstr "產生更多的訊æ¯"
+msgid "%s: panic: Invalid l_value %d\n"
+msgstr "%s: åš´é‡éŒ¯èª¤: 錯誤的 l_value %d\n"
-#: elf/ldconfig.c:124
-msgid "Don't build cache"
-msgstr "ä¸å»ºç«‹å¿«å–"
+#: timezone/zic.c:887
+#, c-format
+msgid "%s: Error reading %s\n"
+msgstr "%s: 讀å–錯誤 %s\n"
-#: elf/ldconfig.c:125
-msgid "Don't generate links"
-msgstr "ä¸ç”¢ç”Ÿé€£çµ"
+#: timezone/zic.c:894
+#, c-format
+msgid "%s: Error closing %s: %s\n"
+msgstr "%s: 關閉錯誤 %s: %s\n"
-#: elf/ldconfig.c:126
-msgid "Change to and use ROOT as root directory"
-msgstr "變æ›åˆ° ROOT 目錄並以它åšç‚ºæ ¹ç›®éŒ„"
+#: timezone/zic.c:899
+msgid "expected continuation line not found"
+msgstr "找ä¸åˆ°é æœŸçš„接續列"
-#: elf/ldconfig.c:127
-msgid "Use CACHE as cache file"
-msgstr "使用 CACHE 當作快å–檔案"
+#: timezone/zic.c:943 timezone/zic.c:2480 timezone/zic.c:2499
+msgid "time overflow"
+msgstr "時間溢ä½"
-#: elf/ldconfig.c:128
-msgid "Use CONF as configuration file"
-msgstr "使用 CONF 當作設定檔"
+#: timezone/zic.c:947
+msgid "24:00 not handled by pre-1998 versions of zic"
+msgstr "24:00 無法由早於 1998 çš„ zic 版本所處ç†"
-#: elf/ldconfig.c:129
-msgid "Only process directories specified on the command line. Don't build cache."
-msgstr "åªè™•ç†åœ¨å‘½ä»¤åˆ—引數中有指定的目錄,ä¸å»ºç«‹å¿«å–檔案。"
+#: timezone/zic.c:950
+msgid "values over 24 hours not handled by pre-2007 versions of zic"
+msgstr "24 å°æ™‚以上的值無法由早於 2007 çš„ zic 版本所處ç†"
-#: elf/ldconfig.c:130
-msgid "Manually link individual libraries."
-msgstr "手動個別連çµå‡½å¼åº«"
+#: timezone/zic.c:963
+msgid "wrong number of fields on Rule line"
+msgstr "è¦å‰‡è¨­å®šåˆ—的欄ä½æ•¸ç›®éŒ¯èª¤"
-#: elf/ldconfig.c:131
-msgid "Format to use: new, old or compat (default)"
-msgstr "將使用格å¼: æ–°ã€èˆŠæˆ–相容 (é è¨­)"
+#: timezone/zic.c:967
+msgid "nameless rule"
+msgstr "沒有å稱的è¦å‰‡"
-#: elf/ldconfig.c:139
-msgid "Configure Dynamic Linker Run Time Bindings."
-msgstr "設定執行時期動態連接"
+#: timezone/zic.c:972
+msgid "invalid saved time"
+msgstr "無效的節約時間"
-#: elf/ldconfig.c:297
-#, c-format
-msgid "Path `%s' given more than once"
-msgstr "路徑 `%s' 使用超éŽä¸€æ¬¡"
+#: timezone/zic.c:993
+msgid "wrong number of fields on Zone line"
+msgstr "時å€è¨­å®šåˆ—的欄ä½æ•¸ç›®éŒ¯èª¤"
-#: elf/ldconfig.c:341
+#: timezone/zic.c:999
#, c-format
-msgid "%s is not a known library type"
-msgstr "%s ä¸æ˜¯ä¸€å€‹å·²çŸ¥çš„函å¼åº«åž‹æ…‹"
+msgid "\"Zone %s\" line and -l option are mutually exclusive"
+msgstr "\"å€æ®µ %s\" 列和 -l é¸é …是互斥的"
-#: elf/ldconfig.c:361
+#: timezone/zic.c:1007
#, c-format
-msgid "Can't stat %s"
-msgstr "無法 stat %s"
+msgid "\"Zone %s\" line and -p option are mutually exclusive"
+msgstr "\"å€æ®µ %s\" 列和 -p é¸é …是互斥的"
-#: elf/ldconfig.c:431
+#: timezone/zic.c:1019
#, c-format
-msgid "Can't stat %s\n"
-msgstr "無法 stat %s\n"
+msgid "duplicate zone name %s (file \"%s\", line %d)"
+msgstr "複製時å€å稱 %s (檔案 \"%s\", 第 %d 列)"
-#: elf/ldconfig.c:441
-#, c-format
-msgid "%s is not a symbolic link\n"
-msgstr "%s ä¸æ˜¯ä¸€å€‹ç¬¦è™Ÿé€£æŽ¥æª”\n"
+#: timezone/zic.c:1035
+msgid "wrong number of fields on Zone continuation line"
+msgstr "時å€æŽ¥çºŒåˆ—的欄ä½æ•¸ç›®ä¸å°"
-#: elf/ldconfig.c:460
-#, c-format
-msgid "Can't unlink %s"
-msgstr "無法å–æ¶ˆé€£çµ %s"
+#: timezone/zic.c:1075
+msgid "invalid UTC offset"
+msgstr "無效的 UTC ä½ç§»å€¼"
-#: elf/ldconfig.c:466
-#, c-format
-msgid "Can't link %s to %s"
-msgstr "無法從 %s 連çµåˆ° %s"
+#: timezone/zic.c:1078
+msgid "invalid abbreviation format"
+msgstr "無效的縮寫格å¼"
-#: elf/ldconfig.c:472
-msgid " (changed)\n"
-msgstr " (已改變)\n"
+#: timezone/zic.c:1107
+msgid "Zone continuation line end time is not after end time of previous line"
+msgstr "時å€æŽ¥çºŒåˆ—çš„çµæŸæ™‚é–“ä¸åœ¨ä¸Šä¸€åˆ—çš„çµæŸæ™‚間之後"
-#: elf/ldconfig.c:474
-msgid " (SKIPPED)\n"
-msgstr " (忽略)\n"
+#: timezone/zic.c:1135
+msgid "wrong number of fields on Leap line"
+msgstr "é–時設定列的欄ä½æ•¸ç›®éŒ¯èª¤"
-#: elf/ldconfig.c:529
-#, c-format
-msgid "Can't find %s"
-msgstr "找ä¸åˆ° %s"
+#: timezone/zic.c:1144
+msgid "invalid leaping year"
+msgstr "無效的é–å¹´"
-#: elf/ldconfig.c:545
-#, c-format
-msgid "Can't lstat %s"
-msgstr "無法 lstat %s"
+#: timezone/zic.c:1164 timezone/zic.c:1270
+msgid "invalid month name"
+msgstr "無效的月分å稱"
-#: elf/ldconfig.c:552
-#, c-format
-msgid "Ignored file %s since it is not a regular file."
-msgstr "忽略檔案 %s 因為它ä¸æ˜¯ä¸€å€‹æ­£å¸¸çš„檔案。"
+#: timezone/zic.c:1177 timezone/zic.c:1383 timezone/zic.c:1397
+msgid "invalid day of month"
+msgstr "無效的日期數字"
-#: elf/ldconfig.c:560
-#, c-format
-msgid "No link created since soname could not be found for %s"
-msgstr "由於找ä¸åˆ° %s 的共用目的檔å稱,連çµä¸¦æœªè¢«å»ºç«‹"
+#: timezone/zic.c:1182
+msgid "time before zero"
+msgstr "在零之å‰çš„時間"
-#: elf/ldconfig.c:651
-#, c-format
-msgid "Can't open directory %s"
-msgstr "無法開啟目錄 %s"
+#: timezone/zic.c:1186
+msgid "time too small"
+msgstr "時間太å°"
-#: elf/ldconfig.c:706 elf/ldconfig.c:753
-#, c-format
-msgid "Cannot lstat %s"
-msgstr "無法 lstat %s"
+#: timezone/zic.c:1190
+msgid "time too large"
+msgstr "時間太大"
-#: elf/ldconfig.c:718
-#, c-format
-msgid "Cannot stat %s"
-msgstr "無法 stat %s"
+#: timezone/zic.c:1194 timezone/zic.c:1299
+msgid "invalid time of day"
+msgstr "無效的時間數字"
-#: elf/ldconfig.c:775 elf/readlib.c:92
-#, c-format
-msgid "Input file %s not found.\n"
-msgstr "輸入檔 %s 找ä¸åˆ°ã€‚\n"
+#: timezone/zic.c:1213
+msgid "illegal CORRECTION field on Leap line"
+msgstr "在é–時設定列中有ä¸åˆæ³•çš„ CORRECTION 欄ä½"
-#: elf/ldconfig.c:826
-#, c-format
-msgid "libc5 library %s in wrong directory"
-msgstr "libc5 函å¼åº« %s 擺錯目錄了"
+#: timezone/zic.c:1218
+msgid "illegal Rolling/Stationary field on Leap line"
+msgstr "在é–時設定列中有ä¸åˆæ³•çš„ Rolling/Stationary 欄ä½"
-#: elf/ldconfig.c:829
-#, c-format
-msgid "libc6 library %s in wrong directory"
-msgstr "libc6 函å¼åº« %s 擺錯目錄了"
+#: timezone/zic.c:1234
+msgid "wrong number of fields on Link line"
+msgstr "連çµè¨­å®šåˆ—的欄ä½æ•¸ç›®éŒ¯èª¤"
-#: elf/ldconfig.c:832
-#, c-format
-msgid "libc4 library %s in wrong directory"
-msgstr "libc4 函å¼åº« %s 擺錯目錄了"
+#: timezone/zic.c:1238
+msgid "blank FROM field on Link line"
+msgstr "連çµåˆ—中空白的 FROM 欄ä½"
-#: elf/ldconfig.c:859
-#, c-format
-msgid "libraries %s and %s in directory %s have same soname but different type."
-msgstr "函å¼åº« %s è·Ÿ %s (在目錄 %s 底下) 有共åŒçš„共用函å¼åº«å稱,ä¸éŽå…¶æ ¼å¼å»ä¸åŒ"
+#: timezone/zic.c:1242
+msgid "blank TO field on Link line"
+msgstr "連çµåˆ—中空白的 TO 欄ä½"
-#: elf/ldconfig.c:962
-#, c-format
-msgid "Can't open configuration file %s"
-msgstr "無法開啟設定檔 %s"
+#: timezone/zic.c:1320
+msgid "invalid starting year"
+msgstr "無效的起始年分"
-#: elf/ldconfig.c:1033
-#, c-format
-msgid "relative path `%s' used to build cache"
-msgstr "用來建置快å–的相å°è·¯å¾‘ `%s'"
+#: timezone/zic.c:1342
+msgid "invalid ending year"
+msgstr "無效的çµæŸå¹´åˆ†"
-#: elf/ldconfig.c:1057
-msgid "Can't chdir to /"
-msgstr "無法變更目錄到 /"
+#: timezone/zic.c:1346
+msgid "starting year greater than ending year"
+msgstr "起始年分比çµæŸå¹´åˆ†é‚„è¦å¤§"
-#: elf/ldconfig.c:1099
-#, c-format
-msgid "Can't open cache file directory %s\n"
-msgstr "無法開啟快å–檔案目錄 %s\n"
+#: timezone/zic.c:1353
+msgid "typed single year"
+msgstr "輸入的年分是åŒä¸€å¹´"
-#: elf/readlib.c:98
-#, c-format
-msgid "Cannot fstat file %s.\n"
-msgstr "無法 fstat 檔案 %s。\n"
+#: timezone/zic.c:1388
+msgid "invalid weekday name"
+msgstr "無效的工作日å稱"
-#: elf/readlib.c:108
+#: timezone/zic.c:1566
#, c-format
-msgid "File %s is too small, not checked."
-msgstr "檔案 %s 太å°ï¼Œä¸åšæª¢æŸ¥ã€‚"
+msgid "%s: Can't remove %s: %s\n"
+msgstr "%s: 無法移除 %s: %s\n"
-#: elf/readlib.c:117
+#: timezone/zic.c:1576
#, c-format
-msgid "Cannot mmap file %s.\n"
-msgstr "無法 mmap 檔案 %s。\n"
+msgid "%s: Can't create %s: %s\n"
+msgstr "%s: 無法產生 %s: %s\n"
-#: elf/readlib.c:155
+#: timezone/zic.c:1726
#, c-format
-msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n"
-msgstr "%s ä¸æ˜¯ä¸€å€‹ ELF 檔 - 其開頭的魔術ä½å…ƒçµ„是錯的。\n"
+msgid "%s: Error writing %s\n"
+msgstr "%s: 寫入錯誤 %s\n"
-#: elf/sprof.c:72
-msgid "Output selection:"
-msgstr "輸出é¸æ“‡:"
+#: timezone/zic.c:2019
+msgid "no POSIX environment variable for zone"
+msgstr "ç„¡ POSIX 環境變數用於å€"
-#: elf/sprof.c:74
-msgid "print list of count paths and their number of use"
-msgstr "列出計數的路徑以åŠå®ƒå€‘使用的次數"
+#: timezone/zic.c:2176
+msgid "can't determine time zone abbreviation to use just after until time"
+msgstr "無法決定在çµæŸæ™‚間以後該使用的時å€ç°¡å¯«"
-#: elf/sprof.c:76
-msgid "generate flat profile with counts and ticks"
-msgstr "從執行次數與經歷時間的資料中產生直接的測速çµæžœ"
+#: timezone/zic.c:2222
+msgid "too many transitions?!"
+msgstr "太多時間轉æ›äº†?!"
-#: elf/sprof.c:77
-msgid "generate call graph"
-msgstr "產生函å¼å‘¼å«åœ–å½¢"
+#: timezone/zic.c:2241
+msgid "internal error - addtype called with bad isdst"
+msgstr "內部錯誤 - 用錯誤的 isdst å‘¼å« addtype 函å¼"
-#: elf/sprof.c:84
-msgid "Read and display shared object profiling data"
-msgstr "讀å–並顯示共用函å¼çš„測速評估資料"
+#: timezone/zic.c:2245
+msgid "internal error - addtype called with bad ttisstd"
+msgstr "內部錯誤 - 用錯誤的 ttisstd å‘¼å« addtype 函å¼"
-#: elf/sprof.c:87
-msgid "SHOBJ [PROFDATA]"
-msgstr "SHOBJ [PROFDATA]"
+#: timezone/zic.c:2249
+msgid "internal error - addtype called with bad ttisgmt"
+msgstr "內部錯誤 - 用錯誤的 ttisgmt å‘¼å« addtype 函å¼"
-#: elf/sprof.c:398
-#, c-format
-msgid "failed to load shared object `%s'"
-msgstr "開啟共用目的檔 `%s' 失敗"
+#: timezone/zic.c:2268
+msgid "too many local time types"
+msgstr "太多本地時間格å¼"
-#: elf/sprof.c:407
-msgid "cannot create internal descriptors"
-msgstr "無法建立內部敘述項"
+#: timezone/zic.c:2272
+msgid "UTC offset out of range"
+msgstr "UTC å移超出範åœ"
-#: elf/sprof.c:526
-#, c-format
-msgid "Reopening shared object `%s' failed"
-msgstr "é‡æ–°é–‹å•Ÿå…±ç”¨ç›®çš„檔 %s 失敗"
+#: timezone/zic.c:2300
+msgid "too many leap seconds"
+msgstr "太多é–秒"
-#: elf/sprof.c:534
-msgid "mapping of section headers failed"
-msgstr "映射çµå€æ¨™é ­å¤±æ•—"
+#: timezone/zic.c:2306
+msgid "repeated leap second moment"
+msgstr "é‡è¤‡çš„é–秒設定"
-#: elf/sprof.c:544
-msgid "mapping of section header string table failed"
-msgstr "映射çµå€çš„標頭字串表格失敗"
+#: timezone/zic.c:2358
+msgid "Wild result from command execution"
+msgstr "命令執行導致奇怪的çµæžœ"
-#: elf/sprof.c:564
+#: timezone/zic.c:2359
#, c-format
-msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
-msgstr "*** 檔案 `%s' 被è£å‰ªäº†: 無法åšè©³ç´°çš„分æž\n"
+msgid "%s: command was '%s', result was %d\n"
+msgstr "%s: 輸入命令為 '%s', çµæžœç‚º %d\n"
-#: elf/sprof.c:594
-msgid "failed to load symbol data"
-msgstr "載入函å¼ç¬¦è™Ÿè³‡æ–™å¤±æ•—"
+#: timezone/zic.c:2457
+msgid "Odd number of quotation marks"
+msgstr "引號數目為奇數"
-#: elf/sprof.c:664
-msgid "cannot load profiling data"
-msgstr "無法載入測試資料"
+#: timezone/zic.c:2546
+msgid "use of 2/29 in non leap-year"
+msgstr "在éžé–年時用到 2/29 æ—¥"
-#: elf/sprof.c:673
-msgid "while stat'ing profiling data file"
-msgstr "在å°æ¸¬è©¦è³‡æ–™æª”案進行統計的時候"
+#: timezone/zic.c:2581
+msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic"
+msgstr "è¦å‰‡è¶…éŽé–‹å§‹/çµæŸæœˆåˆ†--將無法é©ç”¨æ—©æ–¼ 2004 çš„ zic 版本"
-#: elf/sprof.c:681
-#, c-format
-msgid "profiling data file `%s' does not match shared object `%s'"
-msgstr "測試資料檔 `%s' 與共用目的檔 `%s' ä¸ç¬¦åˆ"
+#: timezone/zic.c:2613
+msgid "time zone abbreviation lacks alphabetic at start"
+msgstr "時å€ç¸®å¯«é–‹é ­ç¼ºå°‘å­—æ¯"
-#: elf/sprof.c:692
-msgid "failed to mmap the profiling data file"
-msgstr "測試資料檔案 mmap 失敗"
+#: timezone/zic.c:2615
+msgid "time zone abbreviation has more than 3 alphabetics"
+msgstr "時å€ç¸®å¯«è¶…éŽ 3 å­—æ¯"
-#: elf/sprof.c:700
-msgid "error while closing the profiling data file"
-msgstr "正在關閉測試資料檔案時發生錯誤"
+#: timezone/zic.c:2617
+msgid "time zone abbreviation has too many alphabetics"
+msgstr "時å€ç¸®å¯«æœ‰å¤ªå¤šå­—æ¯"
-#: elf/sprof.c:709 elf/sprof.c:779
-msgid "cannot create internal descriptor"
-msgstr "無法建立內部敘述項"
+#: timezone/zic.c:2627
+msgid "time zone abbreviation differs from POSIX standard"
+msgstr "時å€ç¸®å¯«èˆ‡ POSIX 標準ä¸åŒ"
+
+#: timezone/zic.c:2639
+msgid "too many, or too long, time zone abbreviations"
+msgstr "時å€ç¸®å¯«å¤ªå¤šæˆ–者太長"
-#: elf/sprof.c:755
+#: timezone/zic.c:2680
#, c-format
-msgid "`%s' is no correct profile data file for `%s'"
-msgstr "`%s' ä¸æ˜¯ `%s' 中正確的測速評估資料檔"
+msgid "%s: Can't create directory %s: %s\n"
+msgstr "%s: 無法建立目錄 %s: %s\n"
-#: elf/sprof.c:936 elf/sprof.c:988
-msgid "cannot allocate symbol data"
-msgstr "無法é…置函å¼ç¬¦è™Ÿè³‡æ–™"
+#: timezone/zic.c:2702
+#, c-format
+msgid "%s: %d did not sign extend correctly\n"
+msgstr "%s: %d 無法正確地延展訊號\n"
diff --git a/posix/Makefile b/posix/Makefile
index ba892f1893..922f9c0884 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2007,2009,2010,2011,2012 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
@@ -29,13 +29,6 @@ headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \
bits/sched.h re_comp.h wait.h bits/environments.h cpio.h \
sys/sysmacros.h spawn.h bits/unistd.h
-distribute := confstr.h TESTS TESTS2C.sed testcases.h \
- PTESTS PTESTS2C.sed ptestcases.h \
- globtest.c globtest.sh wordexp-tst.sh annexc.c fnmatch_loop.c \
- spawn_int.h tst-getconf.sh regcomp.c regexec.c regex_internal.c \
- regex_internal.h fork.h rxspencer/tests rxspencer/COPYRIGHT \
- PCRE.tests BOOST.tests
-
routines := \
uname \
times \
@@ -82,7 +75,7 @@ tests := tstgetopt testfnm runtests runptests \
bug-regex21 bug-regex22 bug-regex23 bug-regex24 \
bug-regex25 bug-regex26 bug-regex27 bug-regex28 \
bug-regex29 bug-regex30 bug-regex31 bug-regex32 \
- tst-nice tst-nanosleep tst-regex2 \
+ bug-regex33 tst-nice tst-nanosleep tst-regex2 \
transbug tst-rxspencer tst-pcre tst-boost \
bug-ga1 tst-vfork1 tst-vfork2 tst-vfork3 tst-waitid \
tst-getaddrinfo2 bug-glob1 bug-glob2 bug-glob3 tst-sysconf \
@@ -119,14 +112,6 @@ generated := $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \
include ../Rules
-ifeq (yes,$(build-static-nss))
-# We need it for "make check" only. We can skip them if they haven't
-# been built yet during "make".
-otherlibs += $(wildcard $(nssobjdir)/libnss_files.a \
- $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a)
-endif
-
ifeq (no,$(cross-compiling))
# globtest and wordexp-test currently only works with shared libraries
ifeq (yes,$(build-shared))
@@ -208,6 +193,7 @@ bug-regex25-ENV = LOCPATH=$(common-objpfx)localedata
bug-regex26-ENV = LOCPATH=$(common-objpfx)localedata
bug-regex30-ENV = LOCPATH=$(common-objpfx)localedata
bug-regex32-ENV = LOCPATH=$(common-objpfx)localedata
+bug-regex33-ENV = LOCPATH=$(common-objpfx)localedata
tst-rxspencer-ARGS = --utf8 rxspencer/tests
tst-rxspencer-ENV = LOCPATH=$(common-objpfx)localedata
tst-pcre-ARGS = PCRE.tests
diff --git a/posix/bug-regex33.c b/posix/bug-regex33.c
new file mode 100644
index 0000000000..f78b354f1a
--- /dev/null
+++ b/posix/bug-regex33.c
@@ -0,0 +1,119 @@
+/* Test re_search with multi-byte characters in EUC-JP.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Stanislav Brabec <sbrabec@suse.cz>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define _GNU_SOURCE 1
+#include <locale.h>
+#include <regex.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "regex_internal.h"
+
+static int
+do_test (void)
+{
+ struct re_pattern_buffer r;
+ struct re_registers s;
+ int e, rc = 0;
+ if (setlocale (LC_CTYPE, "ja_JP.EUC-JP") == NULL)
+ {
+ puts ("setlocale failed");
+ return 1;
+ }
+ memset (&r, 0, sizeof (r));
+ memset (&s, 0, sizeof (s));
+
+ /* The bug cannot be reproduced without initialized fastmap. */
+ r.fastmap = malloc (SBC_MAX);
+
+ /* 圭 */
+ re_compile_pattern ("\xb7\xbd", 2, &r);
+
+ /* aaaaa件a新処, \xb7\xbd constitutes a false match */
+ e = re_search (&r, "\x61\x61\x61\x61\x61\xb7\xef\x61\xbf\xb7\xbd\xe8",
+ 12, 0, 12, &s);
+ if (e != -1)
+ {
+ printf ("bug-regex33.1: false match or error: re_search() returned %d, should return -1\n", e);
+ rc = 1;
+ }
+
+ /* aaaa件a新処, \xb7\xbd constitutes a false match,
+ * this is a reproducer of BZ #13637 */
+ e = re_search (&r, "\x61\x61\x61\x61\xb7\xef\x61\xbf\xb7\xbd\xe8",
+ 11, 0, 11, &s);
+ if (e != -1)
+ {
+ printf ("bug-regex33.2: false match or error: re_search() returned %d, should return -1\n", e);
+ rc = 1;
+ }
+
+ /* aaa件a新処, \xb7\xbd constitutes a false match,
+ * this is a reproducer of BZ #13637 */
+ e = re_search (&r, "\x61\x61\x61\xb7\xef\x61\xbf\xb7\xbd\xe8",
+ 10, 0, 10, &s);
+ if (e != -1)
+ {
+ printf ("bug-regex33.3: false match or error: re_search() returned %d, should return -1\n", e);
+ rc = 1;
+ }
+
+ /* aa件a新処, \xb7\xbd constitutes a false match */
+ e = re_search (&r, "\x61\x61\xb7\xef\x61\xbf\xb7\xbd\xe8",
+ 9, 0, 9, &s);
+ if (e != -1)
+ {
+ printf ("bug-regex33.4: false match or error: re_search() returned %d, should return -1\n", e);
+ rc = 1;
+ }
+
+ /* a件a新処, \xb7\xbd constitutes a false match */
+ e = re_search (&r, "\x61\xb7\xef\x61\xbf\xb7\xbd\xe8",
+ 8, 0, 8, &s);
+ if (e != -1)
+ {
+ printf ("bug-regex33.5: false match or error: re_search() returned %d, should return -1\n", e);
+ rc = 1;
+ }
+
+ /* 新処圭新処, \xb7\xbd here really matches 圭, but second occurrence is a false match,
+ * this is a reproducer of bug-regex25 and BZ #13637 */
+ e = re_search (&r, "\xbf\xb7\xbd\xe8\xb7\xbd\xbf\xb7\xbd\xe8",
+ 10, 0, 10, &s);
+ if (e != 4)
+ {
+ printf ("bug-regex33.6: no match or false match: re_search() returned %d, should return 4\n", e);
+ rc = 1;
+ }
+
+ /* 新処圭新, \xb7\xbd here really matches 圭,
+ * this is a reproducer of bug-regex25 */
+ e = re_search (&r, "\xbf\xb7\xbd\xe8\xb7\xbd\xbf\xb7",
+ 10, 0, 10, &s);
+ if (e != 4)
+ {
+ printf ("bug-regex33.7: no match or false match: re_search() returned %d, should return 4\n", e);
+ rc = 1;
+ }
+
+ return rc;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/posix/confstr.c b/posix/confstr.c
index 3c9566d1cf..cad65615ad 100644
--- a/posix/confstr.c
+++ b/posix/confstr.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991,1996,1997,2000-2004,2009,2010 Free
- Software Foundation, Inc.
+/* Copyright (C) 1991-2012 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
@@ -35,6 +34,10 @@ confstr (name, buf, len)
const char *string = "";
size_t string_len = 1;
+ /* Note that this buffer must be large enough for the longest strings
+ used below. */
+ char restenvs[4 * sizeof "POSIX_V7_LPBIG_OFFBIG"];
+
switch (name)
{
case _CS_PATH:
@@ -53,59 +56,55 @@ confstr (name, buf, len)
wint_t types are no greater than the width of type long.
Currently this means all environment which the system allows. */
- {
- char restenvs[4 * sizeof "POSIX_V7_LPBIG_OFFBIG"];
-
- string_len = 0;
+ string_len = 0;
#ifndef _POSIX_V7_ILP32_OFF32
- if (__sysconf (_SC_V7_ILP32_OFF32) > 0)
+ if (__sysconf (_SC_V7_ILP32_OFF32) > 0)
#endif
#if !defined _POSIX_V7_ILP32_OFF32 || _POSIX_V7_ILP32_OFF32 > 0
- {
- memcpy (restenvs + string_len, "POSIX_V7_ILP32_OFF32",
- sizeof "POSIX_V7_ILP32_OFF32" - 1);
- string_len += sizeof "POSIX_V7_ILP32_OFF32" - 1;
- }
+ {
+ memcpy (restenvs + string_len, "POSIX_V7_ILP32_OFF32",
+ sizeof "POSIX_V7_ILP32_OFF32" - 1);
+ string_len += sizeof "POSIX_V7_ILP32_OFF32" - 1;
+ }
#endif
#ifndef _POSIX_V7_ILP32_OFFBIG
- if (__sysconf (_SC_V7_ILP32_OFFBIG) > 0)
+ if (__sysconf (_SC_V7_ILP32_OFFBIG) > 0)
#endif
#if !defined _POSIX_V7_ILP32_OFFBIG || _POSIX_V7_ILP32_OFFBIG > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "POSIX_V7_ILP32_OFFBIG",
- sizeof "POSIX_V7_ILP32_OFFBIG" - 1);
- string_len += sizeof "POSIX_V7_ILP32_OFFBIG" - 1;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "POSIX_V7_ILP32_OFFBIG",
+ sizeof "POSIX_V7_ILP32_OFFBIG" - 1);
+ string_len += sizeof "POSIX_V7_ILP32_OFFBIG" - 1;
+ }
#endif
#ifndef _POSIX_V7_LP64_OFF64
- if (__sysconf (_SC_V7_LP64_OFF64) > 0)
+ if (__sysconf (_SC_V7_LP64_OFF64) > 0)
#endif
#if !defined _POSIX_V7_LP64_OFF64 || _POSIX_V7_LP64_OFF64 > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "POSIX_V7_LP64_OFF64",
- sizeof "POSIX_V7_LP64_OFF64" - 1);
- string_len += sizeof "POSIX_V7_LP64_OFF64" - 1;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "POSIX_V7_LP64_OFF64",
+ sizeof "POSIX_V7_LP64_OFF64" - 1);
+ string_len += sizeof "POSIX_V7_LP64_OFF64" - 1;
+ }
#endif
#ifndef _POSIX_V7_LPBIG_OFFBIG
- if (__sysconf (_SC_V7_LPBIG_OFFBIG) > 0)
+ if (__sysconf (_SC_V7_LPBIG_OFFBIG) > 0)
#endif
#if !defined _POSIX_V7_LPBIG_OFFBIG || _POSIX_V7_LPBIG_OFFBIG > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "POSIX_V7_LPBIG_OFFBIG",
- sizeof "POSIX_V7_LPBIG_OFFBIG" - 1);
- string_len += sizeof "POSIX_V7_LPBIG_OFFBIG" - 1;
- }
-#endif
- restenvs[string_len++] = '\0';
- string = restenvs;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "POSIX_V7_LPBIG_OFFBIG",
+ sizeof "POSIX_V7_LPBIG_OFFBIG" - 1);
+ string_len += sizeof "POSIX_V7_LPBIG_OFFBIG" - 1;
+ }
+#endif
+ restenvs[string_len++] = '\0';
+ string = restenvs;
break;
case _CS_V6_WIDTH_RESTRICTED_ENVS:
@@ -116,59 +115,55 @@ confstr (name, buf, len)
wint_t types are no greater than the width of type long.
Currently this means all environment which the system allows. */
- {
- char restenvs[4 * sizeof "POSIX_V6_LPBIG_OFFBIG"];
-
- string_len = 0;
+ string_len = 0;
#ifndef _POSIX_V6_ILP32_OFF32
- if (__sysconf (_SC_V6_ILP32_OFF32) > 0)
+ if (__sysconf (_SC_V6_ILP32_OFF32) > 0)
#endif
#if !defined _POSIX_V6_ILP32_OFF32 || _POSIX_V6_ILP32_OFF32 > 0
- {
- memcpy (restenvs + string_len, "POSIX_V6_ILP32_OFF32",
- sizeof "POSIX_V6_ILP32_OFF32" - 1);
- string_len += sizeof "POSIX_V6_ILP32_OFF32" - 1;
- }
+ {
+ memcpy (restenvs + string_len, "POSIX_V6_ILP32_OFF32",
+ sizeof "POSIX_V6_ILP32_OFF32" - 1);
+ string_len += sizeof "POSIX_V6_ILP32_OFF32" - 1;
+ }
#endif
#ifndef _POSIX_V6_ILP32_OFFBIG
- if (__sysconf (_SC_V6_ILP32_OFFBIG) > 0)
+ if (__sysconf (_SC_V6_ILP32_OFFBIG) > 0)
#endif
#if !defined _POSIX_V6_ILP32_OFFBIG || _POSIX_V6_ILP32_OFFBIG > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "POSIX_V6_ILP32_OFFBIG",
- sizeof "POSIX_V6_ILP32_OFFBIG" - 1);
- string_len += sizeof "POSIX_V6_ILP32_OFFBIG" - 1;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "POSIX_V6_ILP32_OFFBIG",
+ sizeof "POSIX_V6_ILP32_OFFBIG" - 1);
+ string_len += sizeof "POSIX_V6_ILP32_OFFBIG" - 1;
+ }
#endif
#ifndef _POSIX_V6_LP64_OFF64
- if (__sysconf (_SC_V6_LP64_OFF64) > 0)
+ if (__sysconf (_SC_V6_LP64_OFF64) > 0)
#endif
#if !defined _POSIX_V6_LP64_OFF64 || _POSIX_V6_LP64_OFF64 > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "POSIX_V6_LP64_OFF64",
- sizeof "POSIX_V6_LP64_OFF64" - 1);
- string_len += sizeof "POSIX_V6_LP64_OFF64" - 1;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "POSIX_V6_LP64_OFF64",
+ sizeof "POSIX_V6_LP64_OFF64" - 1);
+ string_len += sizeof "POSIX_V6_LP64_OFF64" - 1;
+ }
#endif
#ifndef _POSIX_V6_LPBIG_OFFBIG
- if (__sysconf (_SC_V6_LPBIG_OFFBIG) > 0)
+ if (__sysconf (_SC_V6_LPBIG_OFFBIG) > 0)
#endif
#if !defined _POSIX_V6_LPBIG_OFFBIG || _POSIX_V6_LPBIG_OFFBIG > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "POSIX_V6_LPBIG_OFFBIG",
- sizeof "POSIX_V6_LPBIG_OFFBIG" - 1);
- string_len += sizeof "POSIX_V6_LPBIG_OFFBIG" - 1;
- }
-#endif
- restenvs[string_len++] = '\0';
- string = restenvs;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "POSIX_V6_LPBIG_OFFBIG",
+ sizeof "POSIX_V6_LPBIG_OFFBIG" - 1);
+ string_len += sizeof "POSIX_V6_LPBIG_OFFBIG" - 1;
+ }
+#endif
+ restenvs[string_len++] = '\0';
+ string = restenvs;
break;
case _CS_V5_WIDTH_RESTRICTED_ENVS:
@@ -179,59 +174,55 @@ confstr (name, buf, len)
wint_t types are no greater than the width of type long.
Currently this means all environment which the system allows. */
- {
- char restenvs[4 * sizeof "XBS5_LPBIG_OFFBIG"];
-
- string_len = 0;
+ string_len = 0;
#ifndef _XBS5_ILP32_OFF32
- if (__sysconf (_SC_XBS5_ILP32_OFF32) > 0)
+ if (__sysconf (_SC_XBS5_ILP32_OFF32) > 0)
#endif
#if !defined _XBS5_ILP32_OFF32 || _XBS5_ILP32_OFF32 > 0
- {
- memcpy (restenvs + string_len, "XBS5_ILP32_OFF32",
- sizeof "XBS5_ILP32_OFF32" - 1);
- string_len += sizeof "XBS5_ILP32_OFF32" - 1;
- }
+ {
+ memcpy (restenvs + string_len, "XBS5_ILP32_OFF32",
+ sizeof "XBS5_ILP32_OFF32" - 1);
+ string_len += sizeof "XBS5_ILP32_OFF32" - 1;
+ }
#endif
#ifndef _XBS5_ILP32_OFFBIG
- if (__sysconf (_SC_XBS5_ILP32_OFFBIG) > 0)
+ if (__sysconf (_SC_XBS5_ILP32_OFFBIG) > 0)
#endif
#if !defined _XBS5_ILP32_OFFBIG || _XBS5_ILP32_OFFBIG > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "XBS5_ILP32_OFFBIG",
- sizeof "XBS5_ILP32_OFFBIG" - 1);
- string_len += sizeof "XBS5_ILP32_OFFBIG" - 1;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "XBS5_ILP32_OFFBIG",
+ sizeof "XBS5_ILP32_OFFBIG" - 1);
+ string_len += sizeof "XBS5_ILP32_OFFBIG" - 1;
+ }
#endif
#ifndef _XBS5_LP64_OFF64
- if (__sysconf (_SC_XBS5_LP64_OFF64) > 0)
+ if (__sysconf (_SC_XBS5_LP64_OFF64) > 0)
#endif
#if !defined _XBS5_LP64_OFF64 || _XBS5_LP64_OFF64 > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "XBS5_LP64_OFF64",
- sizeof "XBS5_LP64_OFF64" - 1);
- string_len += sizeof "XBS5_LP64_OFF64" - 1;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "XBS5_LP64_OFF64",
+ sizeof "XBS5_LP64_OFF64" - 1);
+ string_len += sizeof "XBS5_LP64_OFF64" - 1;
+ }
#endif
#ifndef _XBS5_LPBIG_OFFBIG
- if (__sysconf (_SC_XBS5_LPBIG_OFFBIG) > 0)
+ if (__sysconf (_SC_XBS5_LPBIG_OFFBIG) > 0)
#endif
#if !defined _XBS5_LPBIG_OFFBIG || _XBS5_LPBIG_OFFBIG > 0
- {
- if (string_len)
- restenvs[string_len++] = '\n';
- memcpy (restenvs + string_len, "XBS5_LPBIG_OFFBIG",
- sizeof "XBS5_LPBIG_OFFBIG" - 1);
- string_len += sizeof "XBS5_LPBIG_OFFBIG" - 1;
- }
-#endif
- restenvs[string_len++] = '\0';
- string = restenvs;
- }
+ {
+ if (string_len)
+ restenvs[string_len++] = '\n';
+ memcpy (restenvs + string_len, "XBS5_LPBIG_OFFBIG",
+ sizeof "XBS5_LPBIG_OFFBIG" - 1);
+ string_len += sizeof "XBS5_LPBIG_OFFBIG" - 1;
+ }
+#endif
+ restenvs[string_len++] = '\0';
+ string = restenvs;
break;
case _CS_XBS5_ILP32_OFF32_CFLAGS:
diff --git a/posix/getopt_init.c b/posix/getopt_init.c
index 9bcbd9c00d..55003d4b7e 100644
--- a/posix/getopt_init.c
+++ b/posix/getopt_init.c
@@ -27,7 +27,7 @@
#include <unistd.h>
#include <sys/types.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* Variable to synchronize work. */
char *__getopt_nonoption_flags;
diff --git a/posix/regex_internal.c b/posix/regex_internal.c
index b71eae4c9f..9be8a532e6 100644
--- a/posix/regex_internal.c
+++ b/posix/regex_internal.c
@@ -499,7 +499,7 @@ re_string_skip_chars (re_string_t *pstr, int new_raw_idx, wint_t *last_wc)
rawbuf_idx < new_raw_idx;)
{
wchar_t wc2;
- int remain_len = pstr->len - rawbuf_idx;
+ int remain_len = pstr->raw_len - rawbuf_idx;
prev_st = pstr->cur_state;
mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx,
remain_len, &pstr->cur_state);
diff --git a/posix/spawn.h b/posix/spawn.h
index 36205da7a7..9a82f0367d 100644
--- a/posix/spawn.h
+++ b/posix/spawn.h
@@ -21,6 +21,7 @@
#include <features.h>
#include <sched.h>
+#define __need_sigset_t
#include <signal.h>
#include <sys/types.h>
diff --git a/posix/sys/wait.h b/posix/sys/wait.h
index f889ada2a5..07d0374b92 100644
--- a/posix/sys/wait.h
+++ b/posix/sys/wait.h
@@ -28,7 +28,6 @@
__BEGIN_DECLS
#include <signal.h>
-#include <sys/resource.h>
/* These macros could also be defined in <stdlib.h>. */
#if !defined _STDLIB_H || (!defined __USE_XOPEN && !defined __USE_XOPEN2K8)
@@ -138,8 +137,15 @@ extern __pid_t wait (__WAIT_STATUS __stat_loc);
extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options);
#if defined __USE_SVID || defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifndef __id_t_defined
+# include <bits/types.h>
+typedef __id_t id_t;
+# define __id_t_defined
+# endif
+
# define __need_siginfo_t
# include <bits/siginfo.h>
+
/* Wait for a childing matching IDTYPE and ID to change the status and
place appropriate information in *INFOP.
If IDTYPE is P_PID, match any process whose process ID is ID.
diff --git a/posix/tar.h b/posix/tar.h
index 9732d67cb5..be2961ce91 100644
--- a/posix/tar.h
+++ b/posix/tar.h
@@ -1,5 +1,5 @@
/* Extended tar format from POSIX.1.
- Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1996, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by David J. MacKenzie.
@@ -20,6 +20,9 @@
#ifndef _TAR_H
#define _TAR_H 1
+#include <features.h>
+
+
/* A tar archive consists of 512-byte blocks.
Each file in the archive has a header block followed by 0+ data blocks.
Two blocks of NUL bytes indicate the end of the archive. */
@@ -70,7 +73,9 @@
/* The bits in mode: */
#define TSUID 04000
#define TSGID 02000
-#define TSVTX 01000
+#ifdef __USE_XOPEN
+# define TSVTX 01000
+#endif
#define TUREAD 00400
#define TUWRITE 00200
#define TUEXEC 00100
diff --git a/posix/unistd.h b/posix/unistd.h
index ce43450cd4..1f4d64516e 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -971,13 +971,11 @@ extern char *getpass (const char *__prompt) __nonnull ((1));
#endif /* Use BSD || X/Open. */
-#if defined __USE_BSD || defined __USE_XOPEN || defined __USE_XOPEN2K
/* Make all changes done to FD actually appear on disk.
This function is a cancellation point and therefore not marked with
__THROW. */
extern int fsync (int __fd);
-#endif /* Use BSD || X/Open || Unix98. */
#ifdef __USE_GNU
@@ -1032,7 +1030,8 @@ extern int truncate64 (const char *__file, __off64_t __length)
#endif /* Use BSD || X/Open Unix || POSIX 2008. */
-#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+#if defined __USE_BSD || defined __USE_POSIX199309 \
+ || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
/* Truncate the file FD is open on to LENGTH bytes. */
# ifndef __USE_FILE_OFFSET64
@@ -1049,7 +1048,7 @@ extern int __REDIRECT_NTH (ftruncate, (int __fd, __off64_t __length),
extern int ftruncate64 (int __fd, __off64_t __length) __THROW __wur;
# endif
-#endif /* Use BSD || X/Open Unix || POSIX 2003. */
+#endif /* Use BSD || POSIX.1b || X/Open Unix || XPG6. */
#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
@@ -1159,7 +1158,7 @@ extern void swab (const void *__restrict __from, void *__restrict __to,
/* The Single Unix specification demands this prototype to be here.
It is also found in <stdio.h>. */
-#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+#if defined __USE_XOPEN && !defined __USE_XOPEN2K
/* Return the name of the controlling terminal. */
extern char *ctermid (char *__s) __THROW;
#endif
diff --git a/posix/wordexp.c b/posix/wordexp.c
index ece5109ae9..5ace13720b 100644
--- a/posix/wordexp.c
+++ b/posix/wordexp.c
@@ -42,7 +42,7 @@
#include <kernel-features.h>
#include <bits/libc-lock.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* Undefine the following line for the production version. */
/* #define NDEBUG 1 */
diff --git a/pwd/Makefile b/pwd/Makefile
index a99099c8ec..1da4059cb7 100644
--- a/pwd/Makefile
+++ b/pwd/Makefile
@@ -39,8 +39,3 @@ CFLAGS-getpw.c = -fexceptions
CFLAGS-fgetpwent_r.c = -D_IO_MTSAFE_IO
endif
-
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
diff --git a/resolv/Makefile b/resolv/Makefile
index 1c7b491cf4..4777317b17 100644
--- a/resolv/Makefile
+++ b/resolv/Makefile
@@ -25,8 +25,6 @@ headers := resolv.h \
netdb.h bits/netdb.h \
arpa/nameser.h arpa/nameser_compat.h \
sys/bitypes.h
-distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h \
- Banner res_hconf.h res_debug.h README gai_misc.h ga_test.c
routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init \
res_hconf res_libc res-state
@@ -57,8 +55,10 @@ subdir-dirs = nss_dns
vpath %.c nss_dns
libnss_dns-routines := dns-host dns-network dns-canon
-ifneq ($(build-static-nss),yes)
libnss_dns-inhibit-o = $(filter-out .os,$(object-suffixes))
+ifeq ($(build-static-nss),yes)
+routines += $(libnss_dns-routines) $(libresolv-routines)
+static-only-routines += $(libnss_dns-routines) $(libresolv-routines)
endif
ifeq (yesyes,$(build-shared)$(have-thread-library))
diff --git a/resolv/gai_misc.c b/resolv/gai_misc.c
index 33ebd54255..35f1133e69 100644
--- a/resolv/gai_misc.c
+++ b/resolv/gai_misc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -364,7 +364,7 @@ handle_requests (void *arg)
gettimeofday (&now, NULL);
wakeup_time.tv_sec = now.tv_sec + optim.gai_idle_time;
wakeup_time.tv_nsec = now.tv_usec * 1000;
- if (wakeup_time.tv_nsec > 1000000000)
+ if (wakeup_time.tv_nsec >= 1000000000)
{
wakeup_time.tv_nsec -= 1000000000;
++wakeup_time.tv_sec;
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index 01369f6076..10aecb8604 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -1219,7 +1219,13 @@ gaih_getanswer (const querybuf *answer1, int anslen1, const querybuf *answer2,
&first);
if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND
|| (status == NSS_STATUS_TRYAGAIN
- && (errno != ERANGE || *h_errnop != NO_RECOVERY)))
+ /* We want to look at the second answer in case of an
+ NSS_STATUS_TRYAGAIN only if the error is non-recoverable, i.e.
+ *h_errnop is NO_RECOVERY. If not, and if the failure was due to
+ an insufficient buffer (ERANGE), then we need to drop the results
+ and pass on the NSS_STATUS_TRYAGAIN to the caller so that it can
+ repeat the query with a larger buffer. */
+ && (*errnop != ERANGE || *h_errnop == NO_RECOVERY)))
&& answer2 != NULL && anslen2 > 0)
{
enum nss_status status2 = gaih_getanswer_slice(answer2, anslen2, qname,
diff --git a/resolv/res_query.c b/resolv/res_query.c
index 947c6513a2..abccd4a921 100644
--- a/resolv/res_query.c
+++ b/resolv/res_query.c
@@ -556,12 +556,16 @@ __libc_res_nquerydomain(res_state statp,
* copy without '.' if present.
*/
n = strlen(name);
- if (n >= MAXDNAME) {
+
+ /* Decrement N prior to checking it against MAXDNAME
+ so that we detect a wrap to SIZE_MAX and return
+ a reasonable error. */
+ n--;
+ if (n >= MAXDNAME - 1) {
RES_SET_H_ERRNO(statp, NO_RECOVERY);
return (-1);
}
- n--;
- if (n >= 0 && name[n] == '.') {
+ if (name[n] == '.') {
strncpy(nbuf, name, n);
nbuf[n] = '\0';
} else
diff --git a/rt/Makefile b/rt/Makefile
index 14a2df3903..941c471688 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -53,8 +53,6 @@ tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \
extra-libs := librt
extra-libs-others := $(extra-libs)
-distribute := aio_misc.h
-
include ../Rules
CFLAGS-aio_suspend.c = -fexceptions
@@ -80,8 +78,3 @@ $(tests:%=$(objpfx)%-bp): $(objpfx)librt_b.a $(bounded-thread-library)
endif
tst-mqueue7-ARGS = -- $(built-program-cmd)
-
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
diff --git a/rt/aio.h b/rt/aio.h
index 898a1e2db4..b0340e3a42 100644
--- a/rt/aio.h
+++ b/rt/aio.h
@@ -23,10 +23,11 @@
#define _AIO_H 1
#include <features.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <time.h>
#include <sys/types.h>
+#define __need_sigevent_t
+#include <bits/siginfo.h>
+#define __need_timespec
+#include <time.h>
__BEGIN_DECLS
diff --git a/rt/tst-aio.c b/rt/tst-aio.c
index 30b45672d0..1697cc28af 100644
--- a/rt/tst-aio.c
+++ b/rt/tst-aio.c
@@ -1,5 +1,5 @@
/* Tests for AIO in librt.
- Copyright (C) 1998,2000,02 Free Software Foundation, Inc.
+ Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -20,6 +20,7 @@
#include <aio.h>
#include <errno.h>
#include <error.h>
+#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
diff --git a/rt/tst-aio64.c b/rt/tst-aio64.c
index 4eeda5b15b..7648da46fd 100644
--- a/rt/tst-aio64.c
+++ b/rt/tst-aio64.c
@@ -1,5 +1,5 @@
/* Tests for 64bit AIO in librt.
- Copyright (C) 1998,99,2000,02 Free Software Foundation, Inc.
+ Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -21,6 +21,7 @@
#include <aio.h>
#include <errno.h>
#include <error.h>
+#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
diff --git a/rt/tst-aio7.c b/rt/tst-aio7.c
index 327d28f1bf..0de6088cc0 100644
--- a/rt/tst-aio7.c
+++ b/rt/tst-aio7.c
@@ -1,5 +1,5 @@
/* Test for AIO POSIX compliance.
- Copyright (C) 2001,02, 03 Free Software Foundation, Inc.
+ Copyright (C) 2001-2012 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
@@ -19,6 +19,7 @@
#include <aio.h>
#include <error.h>
#include <errno.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/rt/tst-cpuclock2.c b/rt/tst-cpuclock2.c
index e3545f2e3c..9a74eb014b 100644
--- a/rt/tst-cpuclock2.c
+++ b/rt/tst-cpuclock2.c
@@ -110,7 +110,7 @@ test_nanosleep (clockid_t clock, const char *which,
struct timespec sleeptimeabs = sleeptime;
sleeptimeabs.tv_sec += after.tv_sec;
sleeptimeabs.tv_nsec += after.tv_nsec;
- while (sleeptimeabs.tv_nsec > 1000000000)
+ while (sleeptimeabs.tv_nsec >= 1000000000)
{
++sleeptimeabs.tv_sec;
sleeptimeabs.tv_nsec -= 1000000000;
diff --git a/signal/Makefile b/signal/Makefile
index 4cf886cd71..9da8599847 100644
--- a/signal/Makefile
+++ b/signal/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-1998,2003,2006 Free Software Foundation, Inc.
+# Copyright (C) 1991-1998,2003,2006,2012 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
@@ -38,8 +38,6 @@ routines := signal raise killpg \
tests := tst-signal tst-sigset tst-sigsimple tst-raise tst-sigset2
-distribute := sigsetops.h testrtsig.h sigset-cvt-mask.h
-
include ../Rules
diff --git a/socket/Makefile b/socket/Makefile
index b5be39a672..e3a90b8a31 100644
--- a/socket/Makefile
+++ b/socket/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991,1995-2001,2005,2008 Free Software Foundation, Inc.
+# Copyright (C) 1991,1995-2001,2005,2008,2012 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
@@ -30,6 +30,4 @@ routines := accept bind connect getpeername getsockname getsockopt \
aux := have_sock_cloexec
-distribute := ifreq.h
-
include ../Rules
diff --git a/soft-fp/Makefile b/soft-fp/Makefile
index 11464dfac4..88ee6c5cb3 100644
--- a/soft-fp/Makefile
+++ b/soft-fp/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999, 2000, 2012 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
#
@@ -35,10 +35,4 @@ gcc-quad-routines := negtf2 addtf3 subtf3 multf3 divtf3 eqtf2 \
fixunstfdi floatditf extendsftf2 trunctfsf2 extenddftf2 \
trunctfdf2 sqrttf2 floatunsitf floatunditf
-distribute := double.h op-1.h op-2.h op-4.h op-common.h quad.h \
- single.h soft-fp.h extended.h Banner op-8.h testit.c \
- $(addsuffix .c,$(gcc-single-routines)) \
- $(addsuffix .c,$(gcc-double-routines)) \
- $(addsuffix .c,$(gcc-quad-routines))
-
include ../Rules
diff --git a/soft-fp/double.h b/soft-fp/double.h
index e247e6ebb3..5bad49c14d 100644
--- a/soft-fp/double.h
+++ b/soft-fp/double.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Double Precision
- Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009
+ Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009, 2012
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
@@ -67,7 +67,7 @@ typedef float DFtype __attribute__((mode(DF)));
union _FP_UNION_D
{
DFtype flt;
- struct {
+ struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1;
unsigned exp : _FP_EXPBITS_D;
@@ -166,7 +166,7 @@ union _FP_UNION_D
union _FP_UNION_D
{
DFtype flt;
- struct {
+ struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1;
unsigned exp : _FP_EXPBITS_D;
diff --git a/soft-fp/extended.h b/soft-fp/extended.h
index 3ab6b6aa25..af9c6e65a8 100644
--- a/soft-fp/extended.h
+++ b/soft-fp/extended.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Extended Precision.
- Copyright (C) 1999,2006,2007 Free Software Foundation, Inc.
+ Copyright (C) 1999,2006,2007,2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek (jj@ultra.linux.cz).
@@ -63,7 +63,7 @@ typedef float XFtype __attribute__((mode(XF)));
union _FP_UNION_E
{
XFtype flt;
- struct
+ struct _FP_STRUCT_LAYOUT
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned long pad1 : _FP_W_TYPE_SIZE;
@@ -262,7 +262,7 @@ union _FP_UNION_E
union _FP_UNION_E
{
XFtype flt;
- struct {
+ struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN
_FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
unsigned sign : 1;
diff --git a/soft-fp/quad.h b/soft-fp/quad.h
index ea70138790..b05bd2dba9 100644
--- a/soft-fp/quad.h
+++ b/soft-fp/quad.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Quad Precision.
- Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2006,2007,2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz),
@@ -66,7 +66,7 @@ typedef float TFtype __attribute__((mode(TF)));
union _FP_UNION_Q
{
TFtype flt;
- struct
+ struct _FP_STRUCT_LAYOUT
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1;
@@ -170,10 +170,10 @@ union _FP_UNION_Q
union _FP_UNION_Q
{
TFtype flt /* __attribute__((mode(TF))) */ ;
- struct {
+ struct _FP_STRUCT_LAYOUT {
_FP_W_TYPE a, b;
} longs;
- struct {
+ struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1;
unsigned exp : _FP_EXPBITS_Q;
diff --git a/soft-fp/single.h b/soft-fp/single.h
index c10d25a4a4..119d0db331 100644
--- a/soft-fp/single.h
+++ b/soft-fp/single.h
@@ -1,6 +1,6 @@
/* Software floating-point emulation.
Definitions for IEEE Single Precision.
- Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2006,2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz),
@@ -57,7 +57,7 @@ typedef float SFtype __attribute__((mode(SF)));
union _FP_UNION_S
{
SFtype flt;
- struct {
+ struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1;
unsigned exp : _FP_EXPBITS_S;
diff --git a/soft-fp/soft-fp.h b/soft-fp/soft-fp.h
index ed4d39d44c..46cb1cfaef 100644
--- a/soft-fp/soft-fp.h
+++ b/soft-fp/soft-fp.h
@@ -1,5 +1,5 @@
/* Software floating-point emulation.
- Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006,2007
+ Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006,2007,2012
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com),
@@ -84,6 +84,16 @@
#define FP_EX_DENORM 0
#endif
+/* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the
+ struct layout variant used for structures where bit-fields are used
+ to access specific parts of binary floating-point numbers. This is
+ required for systems where the default ABI uses struct layout with
+ differences in how consecutive bit-fields are laid out from the
+ default expected by soft-fp. */
+#ifndef _FP_STRUCT_LAYOUT
+#define _FP_STRUCT_LAYOUT
+#endif
+
#ifdef _FP_DECL_EX
#define FP_DECL_EX \
int _fex = 0; \
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index a847b28fbc..8cf6335bb5 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2009, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2009, 2011, 2012 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
@@ -20,7 +20,7 @@
#
subdir := stdio-common
-headers := stdio_ext.h printf.h bits/printf-ldbl.h
+headers := stdio_ext.h printf.h bits/printf-ldbl.h bits/stdio_lim.h
routines := \
ctermid cuserid \
@@ -39,13 +39,9 @@ routines := \
isoc99_vsscanf \
psiginfo
-install-others = $(inst_includedir)/bits/stdio_lim.h
-
include ../Makeconfig
aux := errlist siglist printf-parsemb printf-parsewc fxprintf
-distribute := _itoa.h _itowa.h _i18n_number.h \
- printf-parse.h stdio_lim.h.in tst-unbputc.sh tst-printf.sh
tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
temptest tst-fileno test-fwrite tst-ungetc tst-ferror \
@@ -59,15 +55,13 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
- scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24
+ scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \
+ bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide
test-srcs = tst-unbputc tst-printf
include ../Rules
-$(inst_includedir)/bits/stdio_lim.h: $(common-objpfx)bits/stdio_lim.h $(+force)
- $(do-install)
-
ifeq ($(cross-compiling),no)
.PHONY: do-tst-unbputc do-tst-printf
tests: do-tst-unbputc do-tst-printf
diff --git a/stdio-common/_itoa.c b/stdio-common/_itoa.c
index e52f666ffa..3dfff8ff64 100644
--- a/stdio-common/_itoa.c
+++ b/stdio-common/_itoa.c
@@ -25,7 +25,7 @@
#include <stdlib/gmp-impl.h>
#include <stdlib/longlong.h>
-#include "_itoa.h"
+#include <_itoa.h>
/* Canonize environment. For some architectures not all values might
diff --git a/stdio-common/_itowa.c b/stdio-common/_itowa.c
index 8047c877c9..9381d33b6c 100644
--- a/stdio-common/_itowa.c
+++ b/stdio-common/_itowa.c
@@ -24,7 +24,7 @@
#include <stdlib/gmp-impl.h>
#include <stdlib/longlong.h>
-#include "_itowa.h"
+#include <_itowa.h>
/* Canonize environment. For some architectures not all values might
@@ -85,7 +85,7 @@ extern const wchar_t _itowa_lower_digits[] attribute_hidden;
extern const wchar_t _itowa_upper_digits[] attribute_hidden;
-#if LLONG_MAX != LONG_MAX
+#if _ITOA_NEEDED
wchar_t *
_itowa (value, buflim, base, upper_case)
unsigned long long int value;
diff --git a/stdio-common/_itowa.h b/stdio-common/_itowa.h
index 0f3331144f..aa349573fc 100644
--- a/stdio-common/_itowa.h
+++ b/stdio-common/_itowa.h
@@ -20,6 +20,7 @@
#define _ITOWA_H 1
#include <features.h>
#include <wchar.h>
+#include <_itoa.h>
/* Convert VALUE into ASCII in base BASE (2..36).
Write backwards starting the character just before BUFLIM.
@@ -31,7 +32,7 @@ extern wchar_t *_itowa (unsigned long long int value, wchar_t *buflim,
static inline wchar_t *
__attribute__ ((unused, always_inline))
-_itowa_word (unsigned long value, wchar_t *buflim,
+_itowa_word (_ITOA_WORD_TYPE value, wchar_t *buflim,
unsigned int base, int upper_case)
{
extern const wchar_t _itowa_upper_digits[] attribute_hidden;
@@ -61,4 +62,10 @@ _itowa_word (unsigned long value, wchar_t *buflim,
}
#undef SPECIAL
+#if !_ITOA_NEEDED
+/* No need for special long long versions. */
+# define _itowa(value, buf, base, upper_case) \
+ _itowa_word (value, buf, base, upper_case)
+#endif
+
#endif /* itowa.h */
diff --git a/stdio-common/bug-vfprintf-nargs.c b/stdio-common/bug-vfprintf-nargs.c
new file mode 100644
index 0000000000..4f621064cc
--- /dev/null
+++ b/stdio-common/bug-vfprintf-nargs.c
@@ -0,0 +1,77 @@
+/* Test for vfprintf nargs allocation overflow (BZ #13656).
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Kees Cook <keescook@chromium.org>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <string.h>
+#include <signal.h>
+
+static int
+format_failed (const char *fmt, const char *expected)
+{
+ char output[80];
+
+ printf ("%s : ", fmt);
+
+ memset (output, 0, sizeof output);
+ /* Having sprintf itself detect a failure is good. */
+ if (sprintf (output, fmt, 1, 2, 3, "test") > 0
+ && strcmp (output, expected) != 0)
+ {
+ printf ("FAIL (output '%s' != expected '%s')\n", output, expected);
+ return 1;
+ }
+ puts ("ok");
+ return 0;
+}
+
+static int
+do_test (void)
+{
+ int rc = 0;
+ char buf[64];
+
+ /* Regular positionals work. */
+ if (format_failed ("%1$d", "1") != 0)
+ rc = 1;
+
+ /* Regular width positionals work. */
+ if (format_failed ("%1$*2$d", " 1") != 0)
+ rc = 1;
+
+ /* Positional arguments are constructed via read_int, so nargs can only
+ overflow on 32-bit systems. On 64-bit systems, it will attempt to
+ allocate a giant amount of memory and possibly crash, which is the
+ expected situation. Since the 64-bit behavior is arch-specific, only
+ test this on 32-bit systems. */
+ if (sizeof (long int) == 4)
+ {
+ sprintf (buf, "%%1$d %%%" PRIdPTR "$d", UINT32_MAX / sizeof (int));
+ if (format_failed (buf, "1 %$d") != 0)
+ rc = 1;
+ }
+
+ return rc;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c
index 01142f9f6d..97ed83be98 100644
--- a/stdio-common/printf_fphex.c
+++ b/stdio-common/printf_fphex.c
@@ -25,8 +25,8 @@
#include <stdio.h>
#include <string.h>
#include <wchar.h>
-#include "_itoa.h"
-#include "_itowa.h"
+#include <_itoa.h>
+#include <_itowa.h>
#include <locale/localeinfo.h>
/* #define NDEBUG 1*/ /* Undefine this for debugging assertions. */
diff --git a/stdio-common/tst-fmemopen.c b/stdio-common/tst-fmemopen.c
index 8aa047e3c1..206bfd74d2 100644
--- a/stdio-common/tst-fmemopen.c
+++ b/stdio-common/tst-fmemopen.c
@@ -11,7 +11,7 @@
int
main (int argc, char **argv)
{
- const char *test_file;
+ char *test_file;
const char blah[] = "BLAH";
FILE *fp;
char *mmap_data;
diff --git a/sysdeps/x86_64/fpu/s_sincosl.S b/stdio-common/tst-fphex-wide.c
index b394c04ca5..04d913561f 100644
--- a/sysdeps/x86_64/fpu/s_sincosl.S
+++ b/stdio-common/tst-fphex-wide.c
@@ -1,7 +1,7 @@
-/* Compute sine and cosine of argument.
- Copyright (C) 1997, 2000, 2001, 2005 Free Software Foundation, Inc.
+/* Test program for %a wprintf formats.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ Contributed by Marek Polacek <polacek@redhat.com>, 2012.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -17,43 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <machine/asm.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
+#include <wchar.h>
-#define PARMS LINKAGE /* no space for saved regs */
-#define ANGLE PARMS
-#define SINP ANGLE+12
-#define COSP SINP+PTR_SIZE
+#define WIDE 1
- .text
-ENTRY (BP_SYM (__sincosl))
- ENTER
-
- fldt 8(%rsp)
- fsincos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstpt (%rsi)
- fstpt (%rdi)
-
- LEAVE
- retq
-
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsincos
- fstpt (%rsi)
- fstpt (%rdi)
-
- LEAVE
- retq
-END (BP_SYM (__sincosl))
-weak_alias (BP_SYM (__sincosl), BP_SYM (sincosl))
+#include "tst-fphex.c"
diff --git a/stdio-common/tst-fphex.c b/stdio-common/tst-fphex.c
index 212e4ed9ec..c2e8961d62 100644
--- a/stdio-common/tst-fphex.c
+++ b/stdio-common/tst-fphex.c
@@ -3,30 +3,48 @@
#include <stdio.h>
#include <string.h>
+#ifndef WIDE
+# define STR_LEN strlen
+# define STR_CMP strcmp
+# define SPRINT snprintf
+# define CHAR_T char
+# define PRINT printf
+# define L_(Str) Str
+# define S "%s"
+#else
+# define STR_LEN wcslen
+# define SPRINT swprintf
+# define STR_CMP wcscmp
+# define CHAR_T wchar_t
+# define PRINT wprintf
+# define L_(Str) L##Str
+# define S "%ls"
+#endif
+
struct testcase
{
double value;
- const char *fmt;
- const char *expect;
+ const CHAR_T *fmt;
+ const CHAR_T *expect;
};
static const struct testcase testcases[] =
{
- { 0x0.0030p+0, "%a", "0x1.8p-11" },
- { 0x0.0040p+0, "%a", "0x1p-10" },
- { 0x0.0030p+0, "%040a", "0x00000000000000000000000000000001.8p-11" },
- { 0x0.0040p+0, "%040a", "0x0000000000000000000000000000000001p-10" },
- { 0x0.0040p+0, "%40a", " 0x1p-10" },
- { 0x0.0040p+0, "%#40a", " 0x1.p-10" },
- { 0x0.0040p+0, "%-40a", "0x1p-10 " },
- { 0x0.0040p+0, "%#-40a", "0x1.p-10 " },
- { 0x0.0030p+0, "%040e", "00000000000000000000000000007.324219e-04" },
- { 0x0.0040p+0, "%040e", "00000000000000000000000000009.765625e-04" },
+ { 0x0.0030p+0, L_("%a"), L_("0x1.8p-11") },
+ { 0x0.0040p+0, L_("%a"), L_("0x1p-10") },
+ { 0x0.0030p+0, L_("%040a"), L_("0x00000000000000000000000000000001.8p-11") },
+ { 0x0.0040p+0, L_("%040a"), L_("0x0000000000000000000000000000000001p-10") },
+ { 0x0.0040p+0, L_("%40a"), L_(" 0x1p-10") },
+ { 0x0.0040p+0, L_("%#40a"), L_(" 0x1.p-10") },
+ { 0x0.0040p+0, L_("%-40a"), L_("0x1p-10 ") },
+ { 0x0.0040p+0, L_("%#-40a"), L_("0x1.p-10 ") },
+ { 0x0.0030p+0, L_("%040e"), L_("00000000000000000000000000007.324219e-04") },
+ { 0x0.0040p+0, L_("%040e"), L_("00000000000000000000000000009.765625e-04") },
};
static int
-do_test (int argc, char **argv)
+do_test (void)
{
const struct testcase *t;
int result = 0;
@@ -35,12 +53,14 @@ do_test (int argc, char **argv)
t < &testcases[sizeof testcases / sizeof testcases[0]];
++t)
{
- char buf[1024];
- int n = snprintf (buf, sizeof buf, t->fmt, t->value);
- if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0)
+ CHAR_T buf[1024];
+ int n = SPRINT (buf, sizeof buf / sizeof (buf[0]), t->fmt, t->value);
+ if (n != STR_LEN (t->expect) || STR_CMP (buf, t->expect) != 0)
{
- printf ("%s\tExpected \"%s\" (%Zu)\n\tGot \"%s\" (%d, %Zu)\n",
- t->fmt, t->expect, strlen (t->expect), buf, n, strlen (buf));
+ PRINT (L_("" S "\tExpected \"" S "\" (%Zu)\n\tGot \""
+ S "\" (%d, %Zu)\n"),
+ t->fmt, t->expect, STR_LEN (t->expect),
+ buf, n, STR_LEN (buf));
result = 1;
}
}
@@ -48,4 +68,5 @@ do_test (int argc, char **argv)
return result;
}
+#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"
diff --git a/stdio-common/tst-long-dbl-fphex.c b/stdio-common/tst-long-dbl-fphex.c
new file mode 100644
index 0000000000..d879c98e88
--- /dev/null
+++ b/stdio-common/tst-long-dbl-fphex.c
@@ -0,0 +1,53 @@
+/* This file is part of the GNU C Library.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ Contributed by Marek Polacek <polacek@redhat.com>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <wchar.h>
+
+/* Prototype for our test function. */
+static int do_test (void);
+
+static int
+do_test (void)
+{
+#ifndef NO_LONG_DOUBLE
+ int result = 0;
+ const long double x = 24.5;
+ wchar_t a[16];
+ swprintf (a, sizeof (a), L"%La\n", x);
+ wchar_t A[16];
+ swprintf (A, sizeof (A) / sizeof (A[0]), L"%LA\n", x);
+
+ /* Here wprintf can return four valid variants. We must accept all
+ of them. */
+ result |= (wmemcmp (a, L"0xc.4p+1", 8) == 0
+ && wmemcmp (A, L"0XC.4P+1", 8) == 0);
+ result |= (wmemcmp (a, L"0x3.1p+3", 8) == 0
+ && wmemcmp (A, L"0X3.1P+3", 8) == 0);
+ result |= (wmemcmp (a, L"0x6.2p+2", 8) == 0
+ && wmemcmp (A, L"0X6.2P+2", 8) == 0);
+ result |= (wmemcmp (a, L"0x1.88p+4", 8) == 0
+ && wmemcmp (A, L"0X1.88P+4", 8) == 0);
+
+ return result != 1;
+#else
+ return 0;
+#endif
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index 863cd5d179..1e904833a3 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2011, 2012 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
@@ -26,7 +26,7 @@
#include <wchar.h>
#include <bits/libc-lock.h>
#include <sys/param.h>
-#include "_itoa.h"
+#include <_itoa.h>
#include <locale/localeinfo.h>
#include <stdio.h>
@@ -102,7 +102,7 @@
# define ISDIGIT(Ch) ((unsigned int) ((Ch) - L'0') < 10)
# define STR_LEN(Str) __wcslen (Str)
-# include "_itowa.h"
+# include <_itowa.h>
# define PUT(F, S, N) _IO_sputn ((F), (S), (N))
# define PAD(Padchar) \
@@ -235,6 +235,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
0 if unknown. */
int readonly_format = 0;
+ /* For the argument descriptions, which may be allocated on the heap. */
+ void *args_malloced = NULL;
+
/* This table maps a character into a number representing a
class. In each step there is a destination label for each
class. */
@@ -819,7 +822,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
\
if (function_done < 0) \
{ \
- /* Error in print handler. */ \
+ /* Error in print handler; up to handler to set errno. */ \
done = -1; \
goto all_done; \
} \
@@ -873,7 +876,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
\
if (function_done < 0) \
{ \
- /* Error in print handler. */ \
+ /* Error in print handler; up to handler to set errno. */ \
done = -1; \
goto all_done; \
} \
@@ -1114,7 +1117,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
&mbstate); \
if (len == (size_t) -1) \
{ \
- /* Something went wron gduring the conversion. Bail out. */ \
+ /* Something went wrong during the conversion. Bail out. */ \
done = -1; \
goto all_done; \
} \
@@ -1185,6 +1188,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
if (__mbsnrtowcs (ignore, &str2, strend - str2, \
ignore_size, &ps) == (size_t) -1) \
{ \
+ /* Conversion function has set errno. */ \
done = -1; \
goto all_done; \
} \
@@ -1602,6 +1606,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
if (spec == L_('\0'))
{
/* The format string ended before the specifier is complete. */
+ __set_errno (EINVAL);
done = -1;
goto all_done;
}
@@ -1647,9 +1652,10 @@ do_positional:
determine the size of the array needed to store the argument
attributes. */
size_t nargs = 0;
- int *args_type;
- union printf_arg *args_value = NULL;
+ size_t bytes_per_arg;
+ union printf_arg *args_value;
int *args_size;
+ int *args_type;
/* Positional parameters refer to arguments directly. This could
also determine the maximum number of arguments. Track the
@@ -1698,13 +1704,38 @@ do_positional:
/* Determine the number of arguments the format string consumes. */
nargs = MAX (nargs, max_ref_arg);
+ /* Calculate total size needed to represent a single argument across
+ all three argument-related arrays. */
+ bytes_per_arg = (sizeof (*args_value) + sizeof (*args_size)
+ + sizeof (*args_type));
+
+ /* Check for potential integer overflow. */
+ if (__builtin_expect (nargs > SIZE_MAX / bytes_per_arg, 0))
+ {
+ __set_errno (ERANGE);
+ done = -1;
+ goto all_done;
+ }
+
+ /* Allocate memory for all three argument arrays. */
+ if (__libc_use_alloca (nargs * bytes_per_arg))
+ args_value = alloca (nargs * bytes_per_arg);
+ else
+ {
+ args_value = args_malloced = malloc (nargs * bytes_per_arg);
+ if (args_value == NULL)
+ {
+ done = -1;
+ goto all_done;
+ }
+ }
- /* Allocate memory for the argument descriptions. */
- args_type = alloca (nargs * sizeof (int));
+ /* Set up the remaining two arrays to each point past the end of the
+ prior array, since space for all three has been allocated now. */
+ args_size = &args_value[nargs].pa_int;
+ args_type = &args_size[nargs];
memset (args_type, s->_flags2 & _IO_FLAGS2_FORTIFY ? '\xff' : '\0',
- nargs * sizeof (int));
- args_value = alloca (nargs * sizeof (union printf_arg));
- args_size = alloca (nargs * sizeof (int));
+ nargs * sizeof (*args_type));
/* XXX Could do sanity check here: If any element in ARGS_TYPE is
still zero after this loop, format is invalid. For now we
@@ -1919,6 +1950,7 @@ do_positional:
about # of chars. */
if (function_done < 0)
{
+ /* Function has set errno. */
done = -1;
goto all_done;
}
@@ -1953,6 +1985,7 @@ do_positional:
of chars. */
if (function_done < 0)
{
+ /* Function has set errno. */
done = -1;
goto all_done;
}
@@ -1973,8 +2006,8 @@ do_positional:
}
all_done:
- if (__builtin_expect (workstart != NULL, 0))
- free (workstart);
+ free (args_malloced);
+ free (workstart);
/* Unlock the stream. */
_IO_funlockfile (s);
_IO_cleanup_region_end (0);
diff --git a/stdlib/Makefile b/stdlib/Makefile
index efdf8731da..44eb20d681 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -59,8 +59,6 @@ aux = grouping groupingwc tens_in_limb
# linked against when the shared library will be used.
static-only-routines = atexit at_quick_exit
-distribute := exit.h grouping.h abort-instr.h isomac.c tst-fmtmsg.sh \
- allocalim.h
test-srcs := tst-fmtmsg
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
test-canon test-canon2 tst-strtoll tst-environ \
@@ -87,7 +85,6 @@ routines := $(strip $(routines) $(mpn-routines)) \
dbl2mpn ldbl2mpn \
mpn2flt mpn2dbl mpn2ldbl
aux += fpioconst mp_clz_tab
-distribute := $(distribute) $(mpn-headers) fpioconst.h tst-putenvmod.c
tests-extras += tst-putenvmod
extra-test-objs += tst-putenvmod.os
diff --git a/stdlib/fmtmsg.c b/stdlib/fmtmsg.c
index 4c02302851..69947e1cf1 100644
--- a/stdlib/fmtmsg.c
+++ b/stdlib/fmtmsg.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1999-2003,2005,2006,2011,2012
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -20,6 +19,7 @@
#include <fmtmsg.h>
#include <bits/libc-lock.h>
#include <stdio.h>
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syslog.h>
diff --git a/stdlib/tst-strtod.c b/stdlib/tst-strtod.c
index 9be7835e7f..25bee78f2e 100644
--- a/stdlib/tst-strtod.c
+++ b/stdlib/tst-strtod.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1996-2001,2003,2009,2011 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2012 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
@@ -64,12 +64,9 @@ static const struct ltest tests[] =
{ "0x0.8p-1022",
1.11253692925360069154511635866620203210960799023116591527666e-308,
'\0', ERANGE },
-#if __GNUC_PREREQ(2,96)
- /* For older GCC release HUGE_VAL is not a constant. */
{ "Inf", HUGE_VAL, '\0', 0 },
{ "-Inf", -HUGE_VAL, '\0', 0 },
{ "+InFiNiTy", HUGE_VAL, '\0', 0 },
-#endif
{ "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
{ "1e-324", 0, '\0', ERANGE },
{ NULL, 0, '\0', 0 }
diff --git a/string/Makefile b/string/Makefile
index a402602099..0e42d31dee 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2002, 2005-2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2002, 2005-2011, 2012 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
@@ -57,8 +57,6 @@ tests := tester inl-tester noinl-tester testcopy test-ffs \
bug-strtok1 $(addprefix test-,$(strop-tests)) \
bug-envz1 tst-strxfrm2 tst-endian tst-svc2 \
bug-strstr1 bug-strchr1
-distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h \
- str-two-way.h
include ../Rules
diff --git a/string/_strerror.c b/string/_strerror.c
index 87540797d9..6af622634f 100644
--- a/string/_strerror.c
+++ b/string/_strerror.c
@@ -22,7 +22,7 @@
#include <stdlib.h>
#include <string.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* It is critical here that we always use the `dcgettext' function for
the message translation. Since <libintl.h> only defines the macro
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index b7f63a50b2..48790f4da9 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1994-2004, 2005, 2006, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1994-2006, 2011, 2012 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
@@ -85,12 +85,8 @@ install-bin := rpcgen
rpcgen-objs = rpc_main.o rpc_hout.o rpc_cout.o rpc_parse.o \
rpc_scan.o rpc_util.o rpc_svcout.o rpc_clntout.o \
rpc_tblout.o rpc_sample.o
-# These headers are part of rpcgen.
-distribute := proto.h rpc_util.h rpc_parse.h rpc_scan.h \
- $(headers-in-tirpc) $(headers-not-in-tirpc) \
- $(rpcgen-objs:.o=.c) etc.rpc \
- errqueue.h
extra-objs = $(rpcgen-objs)
+others += rpcgen
all: # Make this the default target; it will be defined in Rules.
@@ -100,12 +96,6 @@ xtests := tst-getmyaddr
ifeq ($(have-thread-library),yes)
xtests += thrsvc
endif
-distribute += thrsvc.c
-
-ifeq (yes,$(build-static-nss))
-otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
- $(resolvobjdir)/libresolv.a
-endif
ifeq (no,$(cross-compiling))
# We can only build this library if we can run the rpcgen we build.
@@ -155,10 +145,7 @@ $(objpfx)tst-getmyaddr: $(common-objpfx)linkobj/libc.so
$(objpfx)tst-xdrmem: $(common-objpfx)linkobj/libc.so
$(objpfx)tst-xdrmem2: $(common-objpfx)linkobj/libc.so
-$(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs)) \
- $(sort $(filter $(common-objpfx)libc%,$(link-libc))) \
- $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
- $(+link)
+$(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs))
# This makes sure -DNOT_IN_libc is passed for all these modules.
cpp-srcs-left := $(rpcgen-objs:.o=.c)
diff --git a/sunrpc/rpc_cout.c b/sunrpc/rpc_cout.c
index d003ad7dca..db7b571b33 100644
--- a/sunrpc/rpc_cout.c
+++ b/sunrpc/rpc_cout.c
@@ -416,13 +416,11 @@ emit_union (const definition * def)
free (object);
f_print (fout, "\t\tbreak;\n");
}
-#ifdef __GNU_LIBRARY__
else
{
f_print (fout, "\tdefault:\n");
f_print (fout, "\t\tbreak;\n");
}
-#endif
}
else
{
diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c
index ad1b40055d..3096455eec 100644
--- a/sunrpc/rpc_main.c
+++ b/sunrpc/rpc_main.c
@@ -164,18 +164,10 @@ int indefinitewait; /* If started by port monitors, hang till it wants */
int exitnow; /* If started by port monitors, exit after the call */
int timerflag; /* TRUE if !indefinite && !exitnow */
int newstyle; /* newstyle of passing arguments (by value) */
-#ifdef __GNU_LIBRARY__
int Cflag = 1; /* ANSI C syntax */
-#else
-int Cflag; /* ANSI C/C++ syntax */
-#endif
int CCflag; /* C++ files */
static int allfiles; /* generate all files */
-#ifdef __GNU_LIBRARY__
int tirpcflag; /* generating code for tirpc, by default */
-#else
-int tirpcflag = 1; /* generating code for tirpc, by default */
-#endif
xdrfunc *xdrfunc_head; /* xdr function list */
xdrfunc *xdrfunc_tail; /* xdr function list */
@@ -707,37 +699,18 @@ s_output (int argc, const char *argv[], const char *infile, const char *define,
}
if (!tirpcflag && inetdflag)
-#ifdef __GNU_LIBRARY__
fprintf (fout, "#include <sys/ioctl.h> /* ioctl, TIOCNOTTY */\n");
-#else
- fprintf (fout, "#include <sys/ttycom.h>/* TIOCNOTTY */\n");
-#endif
if (Cflag && (inetdflag || pmflag))
{
-#ifdef __GNU_LIBRARY__
fprintf (fout, "#include <sys/types.h> /* open */\n");
fprintf (fout, "#include <sys/stat.h> /* open */\n");
fprintf (fout, "#include <fcntl.h> /* open */\n");
fprintf (fout, "#include <unistd.h> /* getdtablesize */\n");
-#else
- fprintf (fout, "#ifdef __cplusplus\n");
- fprintf (fout, "#include <sysent.h> /* getdtablesize, open */\n");
- fprintf (fout, "#endif /* __cplusplus */\n");
- if (tirpcflag)
- fprintf (fout, "#include <unistd.h> /* setsid */\n");
-#endif
}
-#ifdef __GNU_LIBRARY__
if (tirpcflag && !(Cflag && (inetdflag || pmflag)))
-#else
- if (tirpcflag)
-#endif
fprintf (fout, "#include <sys/types.h>\n");
fprintf (fout, "#include <memory.h>\n");
-#ifndef __GNU_LIBRARY__
- fprintf (fout, "#include <stropts.h>\n");
-#endif
if (inetdflag || !tirpcflag)
{
fprintf (fout, "#include <sys/socket.h>\n");
@@ -752,25 +725,13 @@ s_output (int argc, const char *argv[], const char *infile, const char *define,
fprintf (fout, "#include <sys/resource.h> /* rlimit */\n");
if (logflag || inetdflag || pmflag)
{
-#ifdef __GNU_LIBRARY__
fprintf (fout, "#include <syslog.h>\n");
-#else
- fprintf (fout, "#ifdef SYSLOG\n");
- fprintf (fout, "#include <syslog.h>\n");
- fprintf (fout, "#else\n");
- fprintf (fout, "#define LOG_ERR 1\n");
- fprintf (fout, "#define openlog(a, b, c)\n");
- fprintf (fout, "#endif\n");
-#endif
}
/* for ANSI-C */
if (Cflag)
fprintf (fout, "\n#ifndef SIG_PF\n#define SIG_PF void(*)(int)\n#endif\n");
-#ifndef __GNU_LIBRARY__
- fprintf (fout, "\n#ifdef DEBUG\n#define RPC_SVC_FG\n#endif\n");
-#endif
if (timerflag)
fprintf (fout, "\n#define _RPCSVC_CLOSEDOWN %s\n", svcclosetime);
while ((def = get_definition ()) != NULL)
@@ -1266,25 +1227,21 @@ parseargs (int argc, const char *argv[], struct commandline *cmd)
Cflag = 1;
break;
-#ifdef __GNU_LIBRARY__
case 'k': /* K&R C syntax */
Cflag = 0;
break;
-#endif
case 'b': /* turn TIRPC flag off for
generating backward compatible
*/
tirpcflag = 0;
break;
-#ifdef __GNU_LIBRARY__
case '5': /* turn TIRPC flag on for
generating SysVr4 compatible
*/
tirpcflag = 1;
break;
-#endif
case 'I':
inetdflag = 1;
break;
@@ -1405,9 +1362,6 @@ parseargs (int argc, const char *argv[], struct commandline *cmd)
else
{ /* 4.1 mode */
pmflag = 0; /* set pmflag only in tirpcmode */
-#ifndef __GNU_LIBRARY__
- inetdflag = 1; /* inetdflag is TRUE by default */
-#endif
if (cmd->nflag)
{ /* netid needs TIRPC */
f_print (stderr, _("Cannot use netid flag without TIRPC!\n"));
diff --git a/sunrpc/rpc_svcout.c b/sunrpc/rpc_svcout.c
index 71d9abd97d..be234aee8a 100644
--- a/sunrpc/rpc_svcout.c
+++ b/sunrpc/rpc_svcout.c
@@ -91,12 +91,8 @@ write_most (const char *infile /* our name */ , int netflag, int nomain)
if (inetdflag || pmflag)
{
const char *var_type;
-#ifdef __GNU_LIBRARY__
/* WHY? */
var_type = (nomain ? "extern" : "");
-#else
- var_type = (nomain ? "extern" : "static");
-#endif
f_print (fout, "%s int _rpcpmstart;", var_type);
f_print (fout, "\t\t/* Started by a port monitor ? */\n");
if (!tirpcflag)
@@ -133,7 +129,6 @@ write_most (const char *infile /* our name */ , int netflag, int nomain)
if (nomain)
return;
-#ifdef __GNU_LIBRARY__
if (Cflag)
f_print (fout, "\nint\nmain (int argc, char **argv)\n");
else
@@ -142,9 +137,6 @@ write_most (const char *infile /* our name */ , int netflag, int nomain)
f_print (fout, "\tint argc;\n");
f_print (fout, "\tchar **argv;\n");
}
-#else
- f_print (fout, "\nmain()\n");
-#endif
f_print (fout, "{\n");
if (inetdflag)
{
@@ -812,7 +804,7 @@ write_timeout_func (void)
f_print (fout, "closedown (sig)\n\tint sig;\n");
f_print (fout, "{\n");
-#if defined (__GNU_LIBRARY__) && 0
+#if 0
f_print (fout, "\t(void) signal (sig, %s closedown);\n",
Cflag ? "(SIG_PF)" : "(void(*)())");
#endif
diff --git a/sunrpc/rpcgen.c b/sunrpc/rpcgen.c
new file mode 100644
index 0000000000..1b455ba243
--- /dev/null
+++ b/sunrpc/rpcgen.c
@@ -0,0 +1,2 @@
+/* Empty file expected by glibc's standard build rules for
+ executables. */
diff --git a/stdio-common/_itoa.h b/sysdeps/generic/_itoa.h
index 8870ee0286..0a670431e4 100644
--- a/stdio-common/_itoa.h
+++ b/sysdeps/generic/_itoa.h
@@ -21,6 +21,21 @@
#include <limits.h>
+/* When long long is different from long, by default, _itoa_word is
+ provided to convert long to ASCII and _itoa is provided to convert
+ long long. A sysdeps _itoa.h can define _ITOA_NEEDED to 0 and define
+ _ITOA_WORD_TYPE to unsigned long long int to override it so that
+ _itoa_word is changed to convert long long to ASCII and _itoa is
+ mapped to _itoa_word. */
+
+#ifndef _ITOA_NEEDED
+# define _ITOA_NEEDED (LONG_MAX != LLONG_MAX)
+#endif
+#ifndef _ITOA_WORD_TYPE
+# define _ITOA_WORD_TYPE unsigned long int
+#endif
+
+
/* Convert VALUE into ASCII in base BASE (2..36).
Write backwards starting the character just before BUFLIM.
Return the address of the first (left-to-right) character in the number.
@@ -35,11 +50,11 @@ extern const char _itoa_lower_digits[];
extern const char _itoa_lower_digits_internal[] attribute_hidden;
#ifndef NOT_IN_libc
-extern char *_itoa_word (unsigned long value, char *buflim,
+extern char *_itoa_word (_ITOA_WORD_TYPE value, char *buflim,
unsigned int base, int upper_case);
#else
static inline char * __attribute__ ((unused, always_inline))
-_itoa_word (unsigned long value, char *buflim,
+_itoa_word (_ITOA_WORD_TYPE value, char *buflim,
unsigned int base, int upper_case)
{
const char *digits = (upper_case
@@ -76,12 +91,13 @@ _itoa_word (unsigned long value, char *buflim,
/* Similar to the _itoa functions, but output starts at buf and pointer
after the last written character is returned. */
-extern char *_fitoa_word (unsigned long value, char *buf, unsigned int base,
+extern char *_fitoa_word (_ITOA_WORD_TYPE value, char *buf,
+ unsigned int base,
int upper_case) attribute_hidden;
extern char *_fitoa (unsigned long long value, char *buf, unsigned int base,
int upper_case) attribute_hidden;
-#if LONG_MAX == LLONG_MAX
+#if !_ITOA_NEEDED
/* No need for special long long versions. */
# define _itoa(value, buf, base, upper_case) \
_itoa_word (value, buf, base, upper_case)
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
index 2eaab3b760..983cd557b0 100644
--- a/sysdeps/generic/dl-osinfo.h
+++ b/sysdeps/generic/dl-osinfo.h
@@ -30,16 +30,16 @@ _dl_setup_stack_chk_guard (void *dl_random)
if (dl_random == NULL)
{
- ret.bytes[sizeof (ret) - 2] = 255;
- ret.bytes[sizeof (ret) - 3] = '\n';
+ ret.bytes[sizeof (ret) - 1] = 255;
+ ret.bytes[sizeof (ret) - 2] = '\n';
}
else
{
memcpy (ret.bytes, dl_random, sizeof (ret));
#if BYTE_ORDER == LITTLE_ENDIAN
- ret.num &= ~0xff;
+ ret.num &= ~(uintptr_t) 0xff;
#elif BYTE_ORDER == BIG_ENDIAN
- ret.num &= ~(0xff << (8 * (sizeof (ret) - 1)));
+ ret.num &= ~((uintptr_t) 0xff << (8 * (sizeof (ret) - 1)));
#else
# error "BYTE_ORDER unknown"
#endif
diff --git a/sysdeps/generic/elf/backtracesyms.c b/sysdeps/generic/elf/backtracesyms.c
deleted file mode 100644
index d75ce0a321..0000000000
--- a/sysdeps/generic/elf/backtracesyms.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Return list with names for address in backtrace.
- Copyright (C) 1998,1999,2000,2001,2003,2009 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <assert.h>
-#include <execinfo.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <ldsodefs.h>
-
-#if __ELF_NATIVE_CLASS == 32
-# define WORD_WIDTH 8
-#else
-/* We assyme 64bits. */
-# define WORD_WIDTH 16
-#endif
-
-
-char **
-__backtrace_symbols (array, size)
- void *const *array;
- int size;
-{
- Dl_info info[size];
- int status[size];
- int cnt;
- size_t total = 0;
- char **result;
-
- /* Fill in the information we can get from `dladdr'. */
- for (cnt = 0; cnt < size; ++cnt)
- {
- struct link_map *map;
- status[cnt] = _dl_addr (array[cnt], &info[cnt], &map, NULL);
- if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')
- {
- /* We have some info, compute the length of the string which will be
- "<file-name>(<sym-name>+offset) [address]. */
- total += (strlen (info[cnt].dli_fname ?: "")
- + strlen (info[cnt].dli_sname ?: "")
- + 3 + WORD_WIDTH + 3 + WORD_WIDTH + 5);
-
- /* The load bias is more useful to the user than the load
- address. The use of these addresses is to calculate an
- address in the ELF file, so its prelinked bias is not
- something we want to subtract out. */
- info[cnt].dli_fbase = (void *) map->l_addr;
- }
- else
- total += 5 + WORD_WIDTH;
- }
-
- /* Allocate memory for the result. */
- result = (char **) malloc (size * sizeof (char *) + total);
- if (result != NULL)
- {
- char *last = (char *) (result + size);
-
- for (cnt = 0; cnt < size; ++cnt)
- {
- result[cnt] = last;
-
- if (status[cnt]
- && info[cnt].dli_fname != NULL && info[cnt].dli_fname[0] != '\0')
- {
- if (info[cnt].dli_sname == NULL)
- /* We found no symbol name to use, so describe it as
- relative to the file. */
- info[cnt].dli_saddr = info[cnt].dli_fbase;
-
- if (info[cnt].dli_sname == NULL && info[cnt].dli_saddr == 0)
- last += 1 + sprintf (last, "%s(%s) [%p]",
- info[cnt].dli_fname ?: "",
- info[cnt].dli_sname ?: "",
- array[cnt]);
- else
- {
- char sign;
- ptrdiff_t offset;
- if (array[cnt] >= (void *) info[cnt].dli_saddr)
- {
- sign = '+';
- offset = array[cnt] - info[cnt].dli_saddr;
- }
- else
- {
- sign = '-';
- offset = info[cnt].dli_saddr - array[cnt];
- }
-
- last += 1 + sprintf (last, "%s(%s%c%#tx) [%p]",
- info[cnt].dli_fname ?: "",
- info[cnt].dli_sname ?: "",
- sign, offset, array[cnt]);
- }
- }
- else
- last += 1 + sprintf (last, "[%p]", array[cnt]);
- }
- assert (last <= (char *) result + size * sizeof (char *) + total);
- }
-
- return result;
-}
-weak_alias (__backtrace_symbols, backtrace_symbols)
diff --git a/sysdeps/generic/elf/backtracesymsfd.c b/sysdeps/generic/elf/backtracesymsfd.c
deleted file mode 100644
index 8b4a836ce9..0000000000
--- a/sysdeps/generic/elf/backtracesymsfd.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Write formatted list with names for addresses in backtrace to a file.
- Copyright (C) 1998,2000,2003,2005,2009,2011 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <execinfo.h>
-#include <string.h>
-#include <sys/uio.h>
-
-#include <stdio-common/_itoa.h>
-#include <ldsodefs.h>
-
-#if __ELF_NATIVE_CLASS == 32
-# define WORD_WIDTH 8
-#else
-/* We assume 64bits. */
-# define WORD_WIDTH 16
-#endif
-
-
-void
-__backtrace_symbols_fd (array, size, fd)
- void *const *array;
- int size;
- int fd;
-{
- struct iovec iov[9];
- int cnt;
-
- for (cnt = 0; cnt < size; ++cnt)
- {
- char buf[WORD_WIDTH];
- char buf2[WORD_WIDTH];
- Dl_info info;
- struct link_map *map;
- size_t last = 0;
-
- if (_dl_addr (array[cnt], &info, &map, NULL)
- && info.dli_fname != NULL && info.dli_fname[0] != '\0')
- {
- /* Name of the file. */
- iov[0].iov_base = (void *) info.dli_fname;
- iov[0].iov_len = strlen (info.dli_fname);
- last = 1;
-
- if (info.dli_sname != NULL || map->l_addr != 0)
- {
- size_t diff;
-
- iov[last].iov_base = (void *) "(";
- iov[last].iov_len = 1;
- ++last;
-
- if (info.dli_sname != NULL)
- {
- /* We have a symbol name. */
- iov[last].iov_base = (void *) info.dli_sname;
- iov[last].iov_len = strlen (info.dli_sname);
- ++last;
- }
- else
- /* We have no symbol, so describe it as relative to the file.
- The load bias is more useful to the user than the load
- address. The use of these addresses is to calculate an
- address in the ELF file, so its prelinked bias is not
- something we want to subtract out. */
- info.dli_saddr = (void *) map->l_addr;
-
- if (array[cnt] >= (void *) info.dli_saddr)
- {
- iov[last].iov_base = (void *) "+0x";
- diff = array[cnt] - info.dli_saddr;
- }
- else
- {
- iov[last].iov_base = (void *) "-0x";
- diff = info.dli_saddr - array[cnt];
- }
- iov[last].iov_len = 3;
- ++last;
-
- iov[last].iov_base = _itoa_word ((unsigned long int) diff,
- &buf2[WORD_WIDTH], 16, 0);
- iov[last].iov_len = (&buf2[WORD_WIDTH]
- - (char *) iov[last].iov_base);
- ++last;
-
- iov[last].iov_base = (void *) ")";
- iov[last].iov_len = 1;
- ++last;
- }
- }
-
- iov[last].iov_base = (void *) "[0x";
- iov[last].iov_len = 3;
- ++last;
-
- iov[last].iov_base = _itoa_word ((unsigned long int) array[cnt],
- &buf[WORD_WIDTH], 16, 0);
- iov[last].iov_len = &buf[WORD_WIDTH] - (char *) iov[last].iov_base;
- ++last;
-
- iov[last].iov_base = (void *) "]\n";
- iov[last].iov_len = 2;
- ++last;
-
- __writev (fd, iov, last);
- }
-}
-weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd)
-libc_hidden_def (__backtrace_symbols_fd)
diff --git a/sysdeps/generic/elf/ifunc-sel.h b/sysdeps/generic/ifunc-sel.h
index 6a27b69c5b..6a27b69c5b 100644
--- a/sysdeps/generic/elf/ifunc-sel.h
+++ b/sysdeps/generic/ifunc-sel.h
diff --git a/sysdeps/generic/ldconfig.h b/sysdeps/generic/ldconfig.h
index 7e93ea8e50..ef3f4b99cb 100644
--- a/sysdeps/generic/ldconfig.h
+++ b/sysdeps/generic/ldconfig.h
@@ -33,6 +33,7 @@
#define FLAG_POWERPC_LIB64 0x0500
#define FLAG_MIPS64_LIBN32 0x0600
#define FLAG_MIPS64_LIBN64 0x0700
+#define FLAG_X8664_LIBX32 0x0800
/* Name of auxiliary cache. */
#define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache"
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index f4531b412a..9955430e3c 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -187,6 +187,8 @@ struct La_i86_regs;
struct La_i86_retval;
struct La_x86_64_regs;
struct La_x86_64_retval;
+struct La_x32_regs;
+struct La_x32_retval;
struct La_ppc32_regs;
struct La_ppc32_retval;
struct La_ppc64_regs;
@@ -225,6 +227,10 @@ struct audit_ifaces
uintptr_t *, struct La_x86_64_regs *,
unsigned int *, const char *name,
long int *framesizep);
+ Elf32_Addr (*x32_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *,
+ uintptr_t *, struct La_x32_regs *,
+ unsigned int *, const char *name,
+ long int *framesizep);
Elf32_Addr (*ppc32_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *,
uintptr_t *, struct La_ppc32_regs *,
unsigned int *, const char *name,
@@ -269,6 +275,11 @@ struct audit_ifaces
const struct La_x86_64_regs *,
struct La_x86_64_retval *,
const char *);
+ unsigned int (*x32_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *,
+ uintptr_t *,
+ const struct La_x32_regs *,
+ struct La_x86_64_retval *,
+ const char *);
unsigned int (*ppc32_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *,
uintptr_t *,
const struct La_ppc32_regs *,
diff --git a/math/math_private.h b/sysdeps/generic/math_private.h
index e4108d8f23..e2172246f2 100644
--- a/math/math_private.h
+++ b/sysdeps/generic/math_private.h
@@ -19,6 +19,7 @@
#include <endian.h>
#include <stdint.h>
#include <sys/types.h>
+#include <fenv.h>
/* The original fdlibm code used statements like:
n0 = ((*(int*)&one)>>29)^1; * index of high word *
@@ -76,50 +77,59 @@ do { \
/* Get the more significant 32 bit int from a double. */
-#define GET_HIGH_WORD(i,d) \
+#ifndef GET_HIGH_WORD
+# define GET_HIGH_WORD(i,d) \
do { \
ieee_double_shape_type gh_u; \
gh_u.value = (d); \
(i) = gh_u.parts.msw; \
} while (0)
+#endif
/* Get the less significant 32 bit int from a double. */
-#define GET_LOW_WORD(i,d) \
+#ifndef GET_LOW_WORD
+# define GET_LOW_WORD(i,d) \
do { \
ieee_double_shape_type gl_u; \
gl_u.value = (d); \
(i) = gl_u.parts.lsw; \
} while (0)
+#endif
/* Get all in one, efficient on 64-bit machines. */
-#define EXTRACT_WORDS64(i,d) \
+#ifndef EXTRACT_WORDS64
+# define EXTRACT_WORDS64(i,d) \
do { \
ieee_double_shape_type gh_u; \
gh_u.value = (d); \
(i) = gh_u.word; \
} while (0)
+#endif
/* Set a double from two 32 bit ints. */
-
-#define INSERT_WORDS(d,ix0,ix1) \
+#ifndef INSERT_WORDS
+# define INSERT_WORDS(d,ix0,ix1) \
do { \
ieee_double_shape_type iw_u; \
iw_u.parts.msw = (ix0); \
iw_u.parts.lsw = (ix1); \
(d) = iw_u.value; \
} while (0)
+#endif
/* Get all in one, efficient on 64-bit machines. */
-#define INSERT_WORDS64(d,i) \
+#ifndef INSERT_WORDS64
+# define INSERT_WORDS64(d,i) \
do { \
ieee_double_shape_type iw_u; \
iw_u.word = (i); \
(d) = iw_u.value; \
} while (0)
+#endif
/* Set the more significant 32 bits of a double from an int. */
-
+#ifndef SET_HIGH_WORD
#define SET_HIGH_WORD(d,v) \
do { \
ieee_double_shape_type sh_u; \
@@ -127,16 +137,18 @@ do { \
sh_u.parts.msw = (v); \
(d) = sh_u.value; \
} while (0)
+#endif
/* Set the less significant 32 bits of a double from an int. */
-
-#define SET_LOW_WORD(d,v) \
+#ifndef SET_LOW_WORD
+# define SET_LOW_WORD(d,v) \
do { \
ieee_double_shape_type sl_u; \
sl_u.value = (d); \
sl_u.parts.lsw = (v); \
(d) = sl_u.value; \
} while (0)
+#endif
/* A union which permits us to convert between a float and a 32 bit
int. */
@@ -148,22 +160,24 @@ typedef union
} ieee_float_shape_type;
/* Get a 32 bit int from a float. */
-
-#define GET_FLOAT_WORD(i,d) \
+#ifndef GET_FLOAT_WORD
+# define GET_FLOAT_WORD(i,d) \
do { \
ieee_float_shape_type gf_u; \
gf_u.value = (d); \
(i) = gf_u.word; \
} while (0)
+#endif
/* Set a float from a 32 bit int. */
-
-#define SET_FLOAT_WORD(d,i) \
+#ifndef SET_FLOAT_WORD
+# define SET_FLOAT_WORD(d,i) \
do { \
ieee_float_shape_type sf_u; \
sf_u.word = (i); \
(d) = sf_u.value; \
} while (0)
+#endif
/* Get long double macros from a separate header. */
#include <math_ldbl.h>
@@ -203,6 +217,7 @@ extern double __ieee754_scalb (double,double);
/* fdlibm kernel function */
extern double __kernel_standard (double,double,int);
extern float __kernel_standard_f (float,float,int);
+extern long double __kernel_standard_l (long double,long double,int);
extern double __kernel_sin (double,double,int);
extern double __kernel_cos (double,double);
extern double __kernel_tan (double,double,int);
@@ -211,10 +226,8 @@ extern int __kernel_rem_pio2 (double*,double*,int,int,int, const int32_t*);
/* internal functions. */
extern double __copysign (double x, double __y);
-#if __GNUC_PREREQ (4, 0)
extern inline double __copysign (double x, double y)
{ return __builtin_copysign (x, y); }
-#endif
/* ieee style elementary float functions */
extern float __ieee754_sqrtf (float);
@@ -258,10 +271,8 @@ extern int __kernel_rem_pio2f (float*,float*,int,int,int, const int32_t*);
/* internal functions. */
extern float __copysignf (float x, float __y);
-#if __GNUC_PREREQ (4, 0)
extern inline float __copysignf (float x, float y)
{ return __builtin_copysignf (x, y); }
-#endif
/* ieee style elementary long double functions */
extern long double __ieee754_sqrtl (long double);
@@ -326,10 +337,8 @@ extern void __sincosl (long double, long double *, long double *);
extern long double __logbl (long double x);
extern long double __significandl (long double x);
-#if __GNUC_PREREQ (4, 0)
extern inline long double __copysignl (long double x, long double y)
{ return __builtin_copysignl (x, y); }
-#endif
#endif
@@ -365,28 +374,176 @@ extern void __docos (double __x, double __dx, double __v[]);
know what operations are going to be performed. Therefore we
define additional interfaces. By default they refer to the normal
interfaces. */
-#define libc_feholdexcept(e) (void) feholdexcept (e)
-#define libc_feholdexceptf(e) (void) feholdexcept (e)
-#define libc_feholdexceptl(e) (void) feholdexcept (e)
-
-#define libc_feholdexcept_setround(e, r) \
- do { feholdexcept (e); fesetround (r); } while (0)
-#define libc_feholdexcept_setroundf(e, r) \
- do { feholdexcept (e); fesetround (r); } while (0)
-#define libc_feholdexcept_setroundl(e, r) \
- do { feholdexcept (e); fesetround (r); } while (0)
-
-#define libc_fetestexcept(e) fetestexcept (e)
-#define libc_fetestexceptf(e) fetestexcept (e)
-#define libc_fetestexceptl(e) fetestexcept (e)
-
-#define libc_fesetenv(e) (void) fesetenv (e)
-#define libc_fesetenvf(e) (void) fesetenv (e)
-#define libc_fesetenvl(e) (void) fesetenv (e)
-
-#define libc_feupdateenv(e) (void) feupdateenv (e)
-#define libc_feupdateenvf(e) (void) feupdateenv (e)
-#define libc_feupdateenvl(e) (void) feupdateenv (e)
+
+static __always_inline void
+default_libc_feholdexcept (fenv_t *e)
+{
+ (void) feholdexcept (e);
+}
+
+#ifndef libc_feholdexcept
+# define libc_feholdexcept default_libc_feholdexcept
+#endif
+#ifndef libc_feholdexceptf
+# define libc_feholdexceptf default_libc_feholdexcept
+#endif
+#ifndef libc_feholdexceptl
+# define libc_feholdexceptl default_libc_feholdexcept
+#endif
+
+static __always_inline void
+default_libc_feholdexcept_setround (fenv_t *e, int r)
+{
+ feholdexcept (e);
+ fesetround (r);
+}
+
+#ifndef libc_feholdexcept_setround
+# define libc_feholdexcept_setround default_libc_feholdexcept_setround
+#endif
+#ifndef libc_feholdexcept_setroundf
+# define libc_feholdexcept_setroundf default_libc_feholdexcept_setround
+#endif
+#ifndef libc_feholdexcept_setroundl
+# define libc_feholdexcept_setroundl default_libc_feholdexcept_setround
+#endif
+
+#ifndef libc_feholdexcept_setround_53bit
+# define libc_feholdexcept_setround_53bit libc_feholdexcept_setround
+#endif
+
+#ifndef libc_fetestexcept
+# define libc_fetestexcept fetestexcept
+#endif
+#ifndef libc_fetestexceptf
+# define libc_fetestexceptf fetestexcept
+#endif
+#ifndef libc_fetestexceptl
+# define libc_fetestexceptl fetestexcept
+#endif
+
+static __always_inline void
+default_libc_fesetenv (fenv_t *e)
+{
+ (void) fesetenv (e);
+}
+
+#ifndef libc_fesetenv
+# define libc_fesetenv default_libc_fesetenv
+#endif
+#ifndef libc_fesetenvf
+# define libc_fesetenvf default_libc_fesetenv
+#endif
+#ifndef libc_fesetenvl
+# define libc_fesetenvl default_libc_fesetenv
+#endif
+
+static __always_inline void
+default_libc_feupdateenv (fenv_t *e)
+{
+ (void) feupdateenv (e);
+}
+
+#ifndef libc_feupdateenv
+# define libc_feupdateenv default_libc_feupdateenv
+#endif
+#ifndef libc_feupdateenvf
+# define libc_feupdateenvf default_libc_feupdateenv
+#endif
+#ifndef libc_feupdateenvl
+# define libc_feupdateenvl default_libc_feupdateenv
+#endif
+
+#ifndef libc_feupdateenv_53bit
+# define libc_feupdateenv_53bit libc_feupdateenv
+#endif
+
+static __always_inline int
+default_libc_feupdateenv_test (fenv_t *e, int ex)
+{
+ int ret = fetestexcept (ex);
+ feupdateenv (e);
+ return ret;
+}
+
+#ifndef libc_feupdateenv_test
+# define libc_feupdateenv_test default_libc_feupdateenv_test
+#endif
+#ifndef libc_feupdateenv_testf
+# define libc_feupdateenv_testf default_libc_feupdateenv_test
+#endif
+#ifndef libc_feupdateenv_testl
+# define libc_feupdateenv_testl default_libc_feupdateenv_test
+#endif
+
+/* Save and set the rounding mode. The use of fenv_t to store the old mode
+ allows a target-specific version of this function to avoid converting the
+ rounding mode from the fpu format. By default we have no choice but to
+ manipulate the entire env. */
+
+#ifndef libc_feholdsetround
+# define libc_feholdsetround libc_feholdexcept_setround
+#endif
+#ifndef libc_feholdsetroundf
+# define libc_feholdsetroundf libc_feholdexcept_setroundf
+#endif
+#ifndef libc_feholdsetroundl
+# define libc_feholdsetroundl libc_feholdexcept_setroundl
+#endif
+
+/* ... and the reverse. */
+
+#ifndef libc_feresetround
+# define libc_feresetround libc_feupdateenv
+#endif
+#ifndef libc_feresetroundf
+# define libc_feresetroundf libc_feupdateenvf
+#endif
+#ifndef libc_feresetroundl
+# define libc_feresetroundl libc_feupdateenvl
+#endif
+
+/* ... and a version that may also discard exceptions. */
+
+#ifndef libc_feresetround_noex
+# define libc_feresetround_noex libc_fesetenv
+#endif
+#ifndef libc_feresetround_noexf
+# define libc_feresetround_noexf libc_fesetenvf
+#endif
+#ifndef libc_feresetround_noexl
+# define libc_feresetround_noexl libc_fesetenvl
+#endif
+
+/* Save and restore the rounding mode within a lexical block. */
+
+#define SET_RESTORE_ROUND(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround))); \
+ libc_feholdsetround (&__libc_save_rm, (RM))
+#define SET_RESTORE_ROUNDF(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetroundf))); \
+ libc_feholdsetroundf (&__libc_save_rm, (RM))
+#define SET_RESTORE_ROUNDL(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetroundl))); \
+ libc_feholdsetroundl (&__libc_save_rm, (RM))
+
+/* Save and restore the rounding mode within a lexical block, and also
+ the set of exceptions raised within the block may be discarded. */
+
+#define SET_RESTORE_ROUND_NOEX(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_noex))); \
+ libc_feholdsetround (&__libc_save_rm, (RM))
+#define SET_RESTORE_ROUND_NOEXF(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_noexf))); \
+ libc_feholdsetroundf (&__libc_save_rm, (RM))
+#define SET_RESTORE_ROUND_NOEXL(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_noexl))); \
+ libc_feholdsetroundl (&__libc_save_rm, (RM))
+
+/* Like SET_RESTORE_ROUND, but also set rounding precision to 53 bits. */
+#define SET_RESTORE_ROUND_53BIT(RM) \
+ fenv_t __libc_save_rm __attribute__((cleanup(libc_feupdateenv_53bit))); \
+ libc_feholdexcept_setround_53bit (&__libc_save_rm, (RM))
#define __nan(str) \
(__builtin_constant_p (str) && str[0] == '\0' ? NAN : __nan (str))
diff --git a/sysdeps/gnu/errlist-compat.awk b/sysdeps/gnu/errlist-compat.awk
index 0e97d05d66..4f70e927c5 100644
--- a/sysdeps/gnu/errlist-compat.awk
+++ b/sysdeps/gnu/errlist-compat.awk
@@ -84,7 +84,10 @@ END {
printf "#define ERR_MAX %d\n\n", highest;
}
- for (old in compat) {
+ # same regardless of awk's ordering of the associative array.
+ num_compat_elems = asorti(compat, compat_indices)
+ for (i = 1; i <= num_compat_elems; i++) {
+ old = compat_indices[i]
new = compat[old];
n = vcount[old];
printf "#if SHLIB_COMPAT (libc, %s, %s)\n", old, new;
diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c
index 75085c01f6..e3d2faf56e 100644
--- a/sysdeps/gnu/errlist.c
+++ b/sysdeps/gnu/errlist.c
@@ -89,8 +89,8 @@ TRANS computer. */
/*
TRANS Argument list too long; used when the arguments passed to a new program
TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
-TRANS File}) occupy too much memory space. This condition never arises in the
-TRANS GNU system. */
+TRANS File}) occupy too much memory space. This condition never arises on
+TRANS @gnuhurdsystems{}. */
[ERR_REMAP (E2BIG)] = N_("Argument list too long"),
# if E2BIG > ERR_MAX
# undef ERR_MAX
@@ -163,7 +163,7 @@ TRANS Permission denied; the file permissions do not allow the attempted operati
#ifdef EFAULT
/*
TRANS Bad address; an invalid pointer was detected.
-TRANS In the GNU system, this error never happens; you get a signal instead. */
+TRANS On @gnuhurdsystems{}, this error never happens; you get a signal instead. */
[ERR_REMAP (EFAULT)] = N_("Bad address"),
# if EFAULT > ERR_MAX
# undef ERR_MAX
@@ -271,7 +271,7 @@ TRANS @pxref{Limits on Resources}. */
/*
TRANS There are too many distinct file openings in the entire system. Note
TRANS that any number of linked channels count as just one file opening; see
-TRANS @ref{Linked Channels}. This error never occurs in the GNU system. */
+TRANS @ref{Linked Channels}. This error never occurs on @gnuhurdsystems{}. */
[ERR_REMAP (ENFILE)] = N_("Too many open files in system"),
# if ENFILE > ERR_MAX
# undef ERR_MAX
@@ -294,7 +294,7 @@ TRANS An attempt to execute a file that is currently open for writing, or
TRANS write to a file that is currently being executed. Often using a
TRANS debugger to run a program is considered having it open for writing and
TRANS will cause this error. (The name stands for ``text file busy''.) This
-TRANS is not an error in the GNU system; the text is copied as necessary. */
+TRANS is not an error on @gnuhurdsystems{}; the text is copied as necessary. */
[ERR_REMAP (ETXTBSY)] = N_("Text file busy"),
# if ETXTBSY > ERR_MAX
# undef ERR_MAX
@@ -386,7 +386,7 @@ TRANS not representable because of overflow or underflow. */
/*
TRANS Resource temporarily unavailable; the call might work if you try again
TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
-TRANS they are always the same in the GNU C library.
+TRANS they are always the same in @theglibc{}.
TRANS
TRANS This error can happen in a few different situations:
TRANS
@@ -421,7 +421,7 @@ TRANS @end itemize */
#endif
#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
/*
-TRANS In the GNU C library, this is another name for @code{EAGAIN} (above).
+TRANS In @theglibc{}, this is another name for @code{EAGAIN} (above).
TRANS The values are always the same, on every operating system.
TRANS
TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
@@ -520,7 +520,7 @@ TRANS The socket type is not supported. */
/*
TRANS The operation you requested is not supported. Some socket functions
TRANS don't make sense for all types of sockets, and others may not be
-TRANS implemented for all communications protocols. In the GNU system, this
+TRANS implemented for all communications protocols. On @gnuhurdsystems{}, this
TRANS error can happen for many calls when the object does not support the
TRANS particular operation; it is a generic indication that the server knows
TRANS nothing to do for that call. */
@@ -795,7 +795,7 @@ TRANS the NFS file system on the local host. */
TRANS An attempt was made to NFS-mount a remote file system with a file name that
TRANS already specifies an NFS-mounted file.
TRANS (This is an error on some operating systems, but we expect it to work
-TRANS properly on the GNU system, making this error code impossible.) */
+TRANS properly on @gnuhurdsystems{}, making this error code impossible.) */
[ERR_REMAP (EREMOTE)] = N_("Object is remote"),
# if EREMOTE > ERR_MAX
# undef ERR_MAX
@@ -850,7 +850,7 @@ TRANS ??? */
#ifdef ENOLCK
/*
TRANS No locks available. This is used by the file locking facilities; see
-TRANS @ref{File Locks}. This error is never generated by the GNU system, but
+TRANS @ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but
TRANS it can result from an operation to an NFS server running another
TRANS operating system. */
[ERR_REMAP (ENOLCK)] = N_("No locks available"),
@@ -935,7 +935,7 @@ TRANS or an incomplete sequence of bytes or the given wide character is invalid.
#endif
#ifdef EBACKGROUND
/*
-TRANS In the GNU system, servers supporting the @code{term} protocol return
+TRANS On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
TRANS this error for certain operations when the caller is not in the
TRANS foreground process group of the terminal. Users do not usually see this
TRANS error because functions such as @code{read} and @code{write} translate
@@ -949,7 +949,7 @@ TRANS for information on process groups and these signals. */
#endif
#ifdef EDIED
/*
-TRANS In the GNU system, opening a file returns this error when the file is
+TRANS On @gnuhurdsystems{}, opening a file returns this error when the file is
TRANS translated by a program and the translator program dies while starting
TRANS up, before it has connected to the file. */
[ERR_REMAP (EDIED)] = N_("Translator died"),
diff --git a/sysdeps/i386/Versions b/sysdeps/i386/Versions
index b0230d31cf..7be44aad7a 100644
--- a/sysdeps/i386/Versions
+++ b/sysdeps/i386/Versions
@@ -1,3 +1,9 @@
+ld {
+ GLIBC_2.3 {
+ # The alternative i386 runtime interface to TLS.
+ ___tls_get_addr;
+ }
+}
libc {
GLIBC_2.0 {
# Functions from libgcc.
diff --git a/sysdeps/i386/configure b/sysdeps/i386/configure
index bc7900ee2e..f56538f99a 100644
--- a/sysdeps/i386/configure
+++ b/sysdeps/i386/configure
@@ -16,23 +16,6 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
@@ -97,42 +80,6 @@ $as_echo X/"$0" |
exit
}
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
# ac_fn_c_try_compile LINENO
# --------------------------
@@ -172,172 +119,6 @@ fi
} # ac_fn_c_try_compile
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
@@ -372,267 +153,8 @@ $as_echo "$ac_res" >&6; }
# Local configure fragment for sysdeps/i386.
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */
"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "$ac_includes_default"
if test "x$ac_cv_header_cpuid_h" = xyes; then :
else
@@ -701,11 +223,12 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
libc_cv_cc_sse4=yes
else
libc_cv_cc_sse4=no
fi
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse4" >&5
$as_echo "$libc_cv_cc_sse4" >&6; }
@@ -724,11 +247,12 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
libc_cv_as_i686=yes
else
libc_cv_as_i686=no
fi
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_as_i686" >&5
$as_echo "$libc_cv_as_i686" >&6; }
@@ -743,11 +267,12 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
libc_cv_cc_avx=yes
else
libc_cv_cc_avx=no
fi
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx" >&5
$as_echo "$libc_cv_cc_avx" >&6; }
@@ -766,11 +291,12 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
libc_cv_cc_sse2avx=yes
else
libc_cv_cc_sse2avx=no
fi
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse2avx" >&5
$as_echo "$libc_cv_cc_sse2avx" >&6; }
@@ -789,11 +315,12 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
libc_cv_cc_fma4=yes
else
libc_cv_cc_fma4=no
fi
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_fma4" >&5
$as_echo "$libc_cv_cc_fma4" >&6; }
@@ -812,11 +339,55 @@ else
(eval $ac_try) 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
+ test $ac_status = 0; }; }; then :
libc_cv_cc_novzeroupper=yes
else
libc_cv_cc_novzeroupper=no
fi
+
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5
$as_echo "$libc_cv_cc_novzeroupper" >&6; }
+
+# Check for support of thread-local storage handling in assembler and
+# linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for i386 TLS support" >&5
+$as_echo_n "checking for i386 TLS support... " >&6; }
+if ${libc_cv_386_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.s <<\EOF
+ .section ".tdata", "awT", @progbits
+ .globl foo
+foo: .long 1
+ .section ".tbss", "awT", @nobits
+ .globl bar
+bar: .skip 4
+ .text
+baz: leal bar@TLSLDM(%ebx), %eax
+ leal bar@DTPOFF(%eax), %edx
+ subl foo@GOTTPOFF(%edx), %eax
+ subl $bar@TPOFF, %eax
+ movl foo@GOTNTPOFF(%edx), %ecx
+ movl %gs:(%ecx), %eax
+ movl %gs:bar@NTPOFF, %eax
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ libc_cv_386_tls=yes
+else
+ libc_cv_386_tls=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_386_tls" >&5
+$as_echo "$libc_cv_386_tls" >&6; }
+if test $libc_cv_386_tls = no; then
+ as_fn_error $? "the assembler must support TLS" "$LINENO" 5
+fi
+
+$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
diff --git a/sysdeps/i386/configure.in b/sysdeps/i386/configure.in
index 59a4cd6ea1..b9e6f9eef4 100644
--- a/sysdeps/i386/configure.in
+++ b/sysdeps/i386/configure.in
@@ -1,8 +1,9 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/i386.
-AC_HEADER_CHECK([cpuid.h], ,
- [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])])
+AC_CHECK_HEADER([cpuid.h], ,
+ [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
+ [/* No default includes. */])
AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
libc_cv_cpp_asm_debuginfo, [dnl
@@ -39,60 +40,82 @@ fi
dnl Check if -msse4 works.
AC_CACHE_CHECK(for SSE4 support, libc_cv_cc_sse4, [dnl
-if AC_TRY_COMMAND([${CC-cc} -msse4 -xc /dev/null -S -o /dev/null]); then
- libc_cv_cc_sse4=yes
-else
- libc_cv_cc_sse4=no
-fi])
+LIBC_TRY_CC_OPTION([-msse4], [libc_cv_cc_sse4=yes], [libc_cv_cc_sse4=no])
+])
if test $libc_cv_cc_sse4 = yes; then
AC_DEFINE(HAVE_SSE4_SUPPORT)
fi
dnl Check if -Wa,-mtune=i686 works.
AC_CACHE_CHECK(for assembler -mtune=i686 support, libc_cv_as_i686, [dnl
-if AC_TRY_COMMAND([${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null]); then
- libc_cv_as_i686=yes
-else
- libc_cv_as_i686=no
-fi])
+LIBC_TRY_CC_OPTION([-Wa,-mtune=i686],
+ [libc_cv_as_i686=yes],
+ [libc_cv_as_i686=no])
+])
dnl Check if -mavx works.
AC_CACHE_CHECK(for AVX support, libc_cv_cc_avx, [dnl
-if AC_TRY_COMMAND([${CC-cc} -mavx -xc /dev/null -S -o /dev/null]); then
- libc_cv_cc_avx=yes
-else
- libc_cv_cc_avx=no
-fi])
+LIBC_TRY_CC_OPTION([-mavx], [libc_cv_cc_avx=yes], [libc_cv_cc_avx=no])
+])
if test $libc_cv_cc_avx = yes; then
AC_DEFINE(HAVE_AVX_SUPPORT)
fi
dnl Check if -msse2avx works.
AC_CACHE_CHECK(for AVX encoding of SSE instructions, libc_cv_cc_sse2avx, [dnl
-if AC_TRY_COMMAND([${CC-cc} -msse2avx -xc /dev/null -S -o /dev/null]); then
- libc_cv_cc_sse2avx=yes
-else
- libc_cv_cc_sse2avx=no
-fi])
+LIBC_TRY_CC_OPTION([-msse2avx],
+ [libc_cv_cc_sse2avx=yes],
+ [libc_cv_cc_sse2avx=no])
+])
if test $libc_cv_cc_sse2avx = yes; then
AC_DEFINE(HAVE_SSE2AVX_SUPPORT)
fi
dnl Check if -mfma4 works.
AC_CACHE_CHECK(for FMA4 support, libc_cv_cc_fma4, [dnl
-if AC_TRY_COMMAND([${CC-cc} -mfma4 -xc /dev/null -S -o /dev/null]); then
- libc_cv_cc_fma4=yes
-else
- libc_cv_cc_fma4=no
-fi])
+LIBC_TRY_CC_OPTION([-mfma4], [libc_cv_cc_fma4=yes], [libc_cv_cc_fma4=no])
+])
if test $libc_cv_cc_fma4 = yes; then
AC_DEFINE(HAVE_FMA4_SUPPORT)
fi
dnl Check if -mno-vzeroupper works.
AC_CACHE_CHECK(for -mno-vzeroupper support, libc_cv_cc_novzeroupper, [dnl
-if AC_TRY_COMMAND([${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null]); then
- libc_cv_cc_novzeroupper=yes
+LIBC_TRY_CC_OPTION([-mno-vzeroupper],
+ [libc_cv_cc_novzeroupper=yes],
+ [libc_cv_cc_novzeroupper=no])
+])
+
+# Check for support of thread-local storage handling in assembler and
+# linker.
+AC_CACHE_CHECK(for i386 TLS support, libc_cv_386_tls, [dnl
+cat > conftest.s <<\EOF
+ .section ".tdata", "awT", @progbits
+ .globl foo
+foo: .long 1
+ .section ".tbss", "awT", @nobits
+ .globl bar
+bar: .skip 4
+ .text
+baz: leal bar@TLSLDM(%ebx), %eax
+ leal bar@DTPOFF(%eax), %edx
+ subl foo@GOTTPOFF(%edx), %eax
+ subl $bar@TPOFF, %eax
+ movl foo@GOTNTPOFF(%edx), %ecx
+ movl %gs:(%ecx), %eax
+ movl %gs:bar@NTPOFF, %eax
+EOF
+dnl
+if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_386_tls=yes
else
- libc_cv_cc_novzeroupper=no
-fi])
+ libc_cv_386_tls=no
+fi
+rm -f conftest*])
+if test $libc_cv_386_tls = no; then
+ AC_MSG_ERROR([the assembler must support TLS])
+fi
+
+dnl It is always possible to access static and hidden symbols in an
+dnl position independent way.
+AC_DEFINE(PI_STATIC_AND_HIDDEN)
diff --git a/sysdeps/i386/crti.S b/sysdeps/i386/crti.S
index dfec2cbcd6..2ecc40d3c4 100644
--- a/sysdeps/i386/crti.S
+++ b/sysdeps/i386/crti.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crti.S puts a function prologue at the beginning of the .init and
.fini sections and defines global symbols for those addresses, so
diff --git a/sysdeps/i386/crtn.S b/sysdeps/i386/crtn.S
index 2ea2a382cf..ad038fd4e9 100644
--- a/sysdeps/i386/crtn.S
+++ b/sysdeps/i386/crtn.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crtn.S puts function epilogues in the .init and .fini sections
corresponding to the prologues in crti.S. */
diff --git a/sysdeps/i386/elf/Versions b/sysdeps/i386/elf/Versions
deleted file mode 100644
index 5ca6686b83..0000000000
--- a/sysdeps/i386/elf/Versions
+++ /dev/null
@@ -1,6 +0,0 @@
-ld {
- GLIBC_2.3 {
- # The alternative i386 runtime interface to TLS.
- ___tls_get_addr;
- }
-}
diff --git a/sysdeps/i386/elf/configure.in b/sysdeps/i386/elf/configure.in
deleted file mode 100644
index 0c436f3f41..0000000000
--- a/sysdeps/i386/elf/configure.in
+++ /dev/null
@@ -1,36 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/i386/elf.
-
-# Check for support of thread-local storage handling in assembler and
-# linker.
-AC_CACHE_CHECK(for i386 TLS support, libc_cv_386_tls, [dnl
-cat > conftest.s <<\EOF
- .section ".tdata", "awT", @progbits
- .globl foo
-foo: .long 1
- .section ".tbss", "awT", @nobits
- .globl bar
-bar: .skip 4
- .text
-baz: leal bar@TLSLDM(%ebx), %eax
- leal bar@DTPOFF(%eax), %edx
- subl foo@GOTTPOFF(%edx), %eax
- subl $bar@TPOFF, %eax
- movl foo@GOTNTPOFF(%edx), %ecx
- movl %gs:(%ecx), %eax
- movl %gs:bar@NTPOFF, %eax
-EOF
-dnl
-if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_386_tls=yes
-else
- libc_cv_386_tls=no
-fi
-rm -f conftest*])
-if test $libc_cv_386_tls = no; then
- AC_MSG_ERROR([the assembler must support TLS])
-fi
-
-dnl It is always possible to access static and hidden symbols in an
-dnl position independent way.
-AC_DEFINE(PI_STATIC_AND_HIDDEN)
diff --git a/sysdeps/i386/fpu/branred.c b/sysdeps/i386/fpu/branred.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/branred.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/dosincos.c b/sysdeps/i386/fpu/dosincos.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/dosincos.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/e_pow.S b/sysdeps/i386/fpu/e_pow.S
index 63c44f1357..b61a946082 100644
--- a/sysdeps/i386/fpu/e_pow.S
+++ b/sysdeps/i386/fpu/e_pow.S
@@ -114,7 +114,7 @@ ENTRY(__ieee754_pow)
fucomp %st(1) // y : x
fnstsw
sahf
- jne 2f
+ jne 3f
/* OK, we have an integer value for y. */
popl %eax
@@ -157,7 +157,12 @@ ENTRY(__ieee754_pow)
cfi_adjust_cfa_offset (8)
.align ALIGNARG(4)
-2: /* y is a real number. */
+2: /* y is a large integer (so even). */
+ fxch // x : y
+ fabs // |x| : y
+ fxch // y : x
+ .align ALIGNARG(4)
+3: /* y is a real number. */
fxch // x : y
fldl MO(one) // 1.0 : x : y
fldl MO(limit) // 0.29 : 1.0 : x : y
@@ -230,6 +235,16 @@ ENTRY(__ieee754_pow)
testb $2, %dh
jz 16f // jump if x == +inf
+ // fistpll raises invalid exception for |y| >= 1L<<63, so test
+ // that (in which case y is certainly even) before testing
+ // whether y is odd.
+ fld %st // y : y
+ fabs // |y| : y
+ fcompl MO(p63) // y
+ fnstsw
+ sahf
+ jnc 16f
+
// We must find out whether y is an odd integer.
fld %st // y : y
fistpll (%esp) // y
@@ -239,20 +254,13 @@ ENTRY(__ieee754_pow)
sahf
jne 17f
- // OK, the value is an integer, but is the number of bits small
- // enough so that all are coming from the mantissa?
+ // OK, the value is an integer.
popl %eax
cfi_adjust_cfa_offset (-4)
popl %edx
cfi_adjust_cfa_offset (-4)
andb $1, %al
jz 18f // jump if not odd
- movl %edx, %eax
- orl %edx, %edx
- jns 155f
- negl %eax
-155: cmpl $0x00200000, %eax
- ja 18f // does not fit in mantissa bits
// It's an odd integer.
shrl $31, %edx
fldl MOX(minf_mzero, %edx, 8)
@@ -289,6 +297,16 @@ ENTRY(__ieee754_pow)
testb $2, %dh
jz 25f
+ // fistpll raises invalid exception for |y| >= 1L<<63, so test
+ // that (in which case y is certainly even) before testing
+ // whether y is odd.
+ fld %st // y : y
+ fabs // |y| : y
+ fcompl MO(p63) // y
+ fnstsw
+ sahf
+ jnc 25f
+
fld %st // y : y
fistpll (%esp) // y
fildll (%esp) // int(y) : y
@@ -297,16 +315,13 @@ ENTRY(__ieee754_pow)
sahf
jne 26f
- // OK, the value is an integer, but is the number of bits small
- // enough so that all are coming from the mantissa?
+ // OK, the value is an integer.
popl %eax
cfi_adjust_cfa_offset (-4)
popl %edx
cfi_adjust_cfa_offset (-4)
andb $1, %al
jz 27f // jump if not odd
- cmpl $0xffe00000, %edx
- jbe 27f // does not fit in mantissa bits
// It's an odd integer.
// Raise divide-by-zero exception and get minus infinity value.
fldl MO(one)
@@ -329,6 +344,14 @@ ENTRY(__ieee754_pow)
21: testb $2, %dh
jz 22f
+ // fistpll raises invalid exception for |y| >= 1L<<63, so test
+ // that (in which case y is certainly even) before testing
+ // whether y is odd.
+ fcoml MO(p63) // y
+ fnstsw
+ sahf
+ jnc 22f
+
fld %st // y : y
fistpll (%esp) // y
fildll (%esp) // int(y) : y
@@ -337,16 +360,13 @@ ENTRY(__ieee754_pow)
sahf
jne 23f
- // OK, the value is an integer, but is the number of bits small
- // enough so that all are coming from the mantissa?
+ // OK, the value is an integer.
popl %eax
cfi_adjust_cfa_offset (-4)
popl %edx
cfi_adjust_cfa_offset (-4)
andb $1, %al
jz 24f // jump if not odd
- cmpl $0xffe00000, %edx
- jae 24f // does not fit in mantissa bits
// It's an odd integer.
fldl MO(mzero)
ret
diff --git a/sysdeps/i386/fpu/e_powf.S b/sysdeps/i386/fpu/e_powf.S
index cc8456d280..529a96f953 100644
--- a/sysdeps/i386/fpu/e_powf.S
+++ b/sysdeps/i386/fpu/e_powf.S
@@ -114,7 +114,7 @@ ENTRY(__ieee754_powf)
fucomp %st(1) // y : x
fnstsw
sahf
- jne 2f
+ jne 3f
/* OK, we have an integer value for y. */
popl %edx
@@ -151,7 +151,12 @@ ENTRY(__ieee754_powf)
cfi_adjust_cfa_offset (4)
.align ALIGNARG(4)
-2: /* y is a real number. */
+2: /* y is a large integer (so even). */
+ fxch // x : y
+ fabs // |x| : y
+ fxch // y : x
+ .align ALIGNARG(4)
+3: /* y is a real number. */
fxch // x : y
fldl MO(one) // 1.0 : x : y
fldl MO(limit) // 0.29 : 1.0 : x : y
@@ -224,6 +229,16 @@ ENTRY(__ieee754_powf)
testb $2, %dh
jz 16f // jump if x == +inf
+ // fistpl raises invalid exception for |y| >= 1L<<31, so test
+ // that (in which case y is certainly even) before testing
+ // whether y is odd.
+ fld %st // y : y
+ fabs // |y| : y
+ fcompl MO(p31) // y
+ fnstsw
+ sahf
+ jnc 16f
+
// We must find out whether y is an odd integer.
fld %st // y : y
fistpl (%esp) // y
@@ -233,18 +248,11 @@ ENTRY(__ieee754_powf)
sahf
jne 17f
- // OK, the value is an integer, but is the number of bits small
- // enough so that all are coming from the mantissa?
+ // OK, the value is an integer.
popl %edx
cfi_adjust_cfa_offset (-4)
testb $1, %dl
jz 18f // jump if not odd
- movl %edx, %eax
- orl %edx, %edx
- jns 155f
- negl %eax
-155: cmpl $0x01000000, %eax
- ja 18f // does not fit in mantissa bits
// It's an odd integer.
shrl $31, %edx
fldl MOX(minf_mzero, %edx, 8)
@@ -281,6 +289,16 @@ ENTRY(__ieee754_powf)
testb $2, %dh
jz 25f
+ // fistpl raises invalid exception for |y| >= 1L<<31, so test
+ // that (in which case y is certainly even) before testing
+ // whether y is odd.
+ fld %st // y : y
+ fabs // |y| : y
+ fcompl MO(p31) // y
+ fnstsw
+ sahf
+ jnc 25f
+
fld %st // y : y
fistpl (%esp) // y
fildl (%esp) // int(y) : y
@@ -289,14 +307,11 @@ ENTRY(__ieee754_powf)
sahf
jne 26f
- // OK, the value is an integer, but is the number of bits small
- // enough so that all are coming from the mantissa?
+ // OK, the value is an integer.
popl %edx
cfi_adjust_cfa_offset (-4)
testb $1, %dl
jz 27f // jump if not odd
- cmpl $0xff000000, %edx
- jbe 27f // does not fit in mantissa bits
// It's an odd integer.
// Raise divide-by-zero exception and get minus infinity value.
fldl MO(one)
@@ -319,6 +334,14 @@ ENTRY(__ieee754_powf)
21: testb $2, %dh
jz 22f
+ // fistpl raises invalid exception for |y| >= 1L<<31, so test
+ // that (in which case y is certainly even) before testing
+ // whether y is odd.
+ fcoml MO(p31) // y
+ fnstsw
+ sahf
+ jnc 22f
+
fld %st // y : y
fistpl (%esp) // y
fildl (%esp) // int(y) : y
@@ -327,14 +350,11 @@ ENTRY(__ieee754_powf)
sahf
jne 23f
- // OK, the value is an integer, but is the number of bits small
- // enough so that all are coming from the mantissa?
+ // OK, the value is an integer.
popl %edx
cfi_adjust_cfa_offset (-4)
testb $1, %dl
jz 24f // jump if not odd
- cmpl $0xff000000, %edx
- jae 24f // does not fit in mantissa bits
// It's an odd integer.
fldl MO(mzero)
ret
diff --git a/sysdeps/i386/fpu/e_powl.S b/sysdeps/i386/fpu/e_powl.S
index 5d850897c5..0e7c05bb82 100644
--- a/sysdeps/i386/fpu/e_powl.S
+++ b/sysdeps/i386/fpu/e_powl.S
@@ -32,6 +32,9 @@ limit: .double 0.29
ASM_TYPE_DIRECTIVE(p63,@object)
p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43
ASM_SIZE_DIRECTIVE(p63)
+ ASM_TYPE_DIRECTIVE(p64,@object)
+p64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43
+ ASM_SIZE_DIRECTIVE(p64)
.section .rodata.cst16,"aM",@progbits,16
@@ -114,7 +117,7 @@ ENTRY(__ieee754_powl)
fucomp %st(1) // y : x
fnstsw
sahf
- jne 2f
+ jne 3f
/* OK, we have an integer value for y. */
popl %eax
@@ -157,7 +160,14 @@ ENTRY(__ieee754_powl)
cfi_adjust_cfa_offset (8)
.align ALIGNARG(4)
-2: /* y is a real number. */
+2: // y is a large integer (absolute value at least 1L<<63), but
+ // may be odd unless at least 1L<<64. So it may be necessary
+ // to adjust the sign of a negative result afterwards.
+ fxch // x : y
+ fabs // |x| : y
+ fxch // y : |x|
+ .align ALIGNARG(4)
+3: /* y is a real number. */
fxch // x : y
fldl MO(one) // 1.0 : x : y
fldl MO(limit) // 0.29 : 1.0 : x : y
@@ -187,18 +197,51 @@ ENTRY(__ieee754_powl)
f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x))
faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x))
fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
- ret
+ jmp 29f
- cfi_adjust_cfa_offset (8)
28: fstp %st(1) // y*log2(x)
fldl MO(one) // 1 : y*log2(x)
fscale // 2^(y*log2(x)) : y*log2(x)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
fstp %st(1) // 2^(y*log2(x))
+29: testb $2, %dh
+ jz 292f
+ // x is negative. If y is an odd integer, negate the result.
+ fldt 24(%esp) // y : abs(result)
+ fld %st // y : y : abs(result)
+ fabs // |y| : y : abs(result)
+ fcompl MO(p64) // y : abs(result)
+ fnstsw
+ sahf
+ jnc 291f
+ fldl MO(p63) // p63 : y : abs(result)
+ fxch // y : p63 : abs(result)
+ fprem // y%p63 : p63 : abs(result)
+ fstp %st(1) // y%p63 : abs(result)
+
+ // We must find out whether y is an odd integer.
+ fld %st // y : y : abs(result)
+ fistpll (%esp) // y : abs(result)
+ fildll (%esp) // int(y) : y : abs(result)
+ fucompp // abs(result)
+ fnstsw
+ sahf
+ jne 292f
+
+ // OK, the value is an integer, but is it odd?
+ popl %eax
+ cfi_adjust_cfa_offset (-4)
+ popl %edx
+ cfi_adjust_cfa_offset (-4)
+ andb $1, %al
+ jz 290f // jump if not odd
+ // It's an odd integer.
+ fchs
+290: ret
+ cfi_adjust_cfa_offset (8)
+291: fstp %st(0) // abs(result)
+292: addl $8, %esp
+ cfi_adjust_cfa_offset (-8)
ret
// pow(x,±0) = 1
@@ -243,6 +286,19 @@ ENTRY(__ieee754_powl)
testb $2, %dh
jz 16f // jump if x == +inf
+ // fistpll raises invalid exception for |y| >= 1L<<63, but y
+ // may be odd unless we know |y| >= 1L<<64.
+ fld %st // y : y
+ fabs // |y| : y
+ fcompl MO(p64) // y
+ fnstsw
+ sahf
+ jnc 16f
+ fldl MO(p63) // p63 : y
+ fxch // y : p63
+ fprem // y%p63 : p63
+ fstp %st(1) // y%p63
+
// We must find out whether y is an odd integer.
fld %st // y : y
fistpll (%esp) // y
@@ -295,6 +351,19 @@ ENTRY(__ieee754_powl)
testb $2, %dh
jz 25f
+ // fistpll raises invalid exception for |y| >= 1L<<63, but y
+ // may be odd unless we know |y| >= 1L<<64.
+ fld %st // y : y
+ fabs // |y| : y
+ fcompl MO(p64) // y
+ fnstsw
+ sahf
+ jnc 25f
+ fldl MO(p63) // p63 : y
+ fxch // y : p63
+ fprem // y%p63 : p63
+ fstp %st(1) // y%p63
+
fld %st // y : y
fistpll (%esp) // y
fildll (%esp) // int(y) : y
@@ -332,6 +401,18 @@ ENTRY(__ieee754_powl)
21: testb $2, %dh
jz 22f
+ // fistpll raises invalid exception for |y| >= 1L<<63, but y
+ // may be odd unless we know |y| >= 1L<<64.
+ fld %st // y : y
+ fcompl MO(p64) // y
+ fnstsw
+ sahf
+ jnc 22f
+ fldl MO(p63) // p63 : y
+ fxch // y : p63
+ fprem // y%p63 : p63
+ fstp %st(1) // y%p63
+
fld %st // y : y
fistpll (%esp) // y
fildll (%esp) // int(y) : y
diff --git a/sysdeps/i386/fpu/e_rem_pio2f.c b/sysdeps/i386/fpu/e_rem_pio2f.c
deleted file mode 100644
index 1347b0468c..0000000000
--- a/sysdeps/i386/fpu/e_rem_pio2f.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Empty. This file is only meant to avoid compiling the file with the
- same name in the libm-ieee754 directory. The code is not used since
- there is an assembler version for all users of this file. */
diff --git a/sysdeps/i386/fpu/e_rem_pio2l.c b/sysdeps/i386/fpu/e_rem_pio2l.c
deleted file mode 100644
index 1347b0468c..0000000000
--- a/sysdeps/i386/fpu/e_rem_pio2l.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Empty. This file is only meant to avoid compiling the file with the
- same name in the libm-ieee754 directory. The code is not used since
- there is an assembler version for all users of this file. */
diff --git a/sysdeps/i386/fpu/feholdexcpt.c b/sysdeps/i386/fpu/feholdexcpt.c
index a09d45ebd0..7e1038955f 100644
--- a/sysdeps/i386/fpu/feholdexcpt.c
+++ b/sysdeps/i386/fpu/feholdexcpt.c
@@ -1,6 +1,5 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997, 1999, 2003, 2004, 2005, 2007
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -26,19 +25,9 @@
int
feholdexcept (fenv_t *envp)
{
- fenv_t temp;
-
- /* Store the environment. */
- __asm__ ("fnstenv %0" : "=m" (temp));
- *envp = temp;
-
- /* Now set all exceptions to non-stop. */
- temp.__control_word |= 0x3f;
-
- /* And clear all exceptions. */
- temp.__status_word &= ~0x3f;
-
- __asm__ ("fldenv %0" : : "m" (temp));
+ /* Store the environment. Recall that fnstenv has a side effect of
+ masking all exceptions. Then clear all exceptions. */
+ __asm__ volatile ("fnstenv %0; fnclex" : "=m" (*envp));
/* If the CPU supports SSE we set the MXCSR as well. */
if ((GLRO(dl_hwcap) & HWCAP_I386_XMM) != 0)
diff --git a/sysdeps/i386/fpu/fenv_private.h b/sysdeps/i386/fpu/fenv_private.h
new file mode 100644
index 0000000000..f33f57c39c
--- /dev/null
+++ b/sysdeps/i386/fpu/fenv_private.h
@@ -0,0 +1,304 @@
+#ifndef FENV_PRIVATE_H
+#define FENV_PRIVATE_H 1
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+#ifdef __SSE2_MATH__
+# define math_opt_barrier(x) \
+ ({ __typeof(x) __x; \
+ if (sizeof (x) <= sizeof (double)) \
+ __asm ("" : "=x" (__x) : "0" (x)); \
+ else \
+ __asm ("" : "=t" (__x) : "0" (x)); \
+ __x; })
+# define math_force_eval(x) \
+ do { \
+ if (sizeof (x) <= sizeof (double)) \
+ __asm __volatile ("" : : "x" (x)); \
+ else \
+ __asm __volatile ("" : : "f" (x)); \
+ } while (0)
+#else
+# define math_opt_barrier(x) \
+ ({ __typeof (x) __x; \
+ __asm ("" : "=t" (__x) : "0" (x)); \
+ __x; })
+# define math_force_eval(x) \
+ do { \
+ __typeof (x) __x = (x); \
+ if (sizeof (x) <= sizeof (double)) \
+ __asm __volatile ("" : : "m" (__x)); \
+ else \
+ __asm __volatile ("" : : "f" (__x)); \
+ } while (0)
+#endif
+
+/* This file is used by both the 32- and 64-bit ports. The 64-bit port
+ has a field in the fenv_t for the mxcsr; the 32-bit port does not.
+ Instead, we (ab)use the only 32-bit field extant in the struct. */
+#ifndef __x86_64__
+# define __mxcsr __eip
+#endif
+
+
+/* All of these functions are private to libm, and are all used in pairs
+ to save+change the fp state and restore the original state. Thus we
+ need not care for both the 387 and the sse unit, only the one we're
+ actually using. */
+
+#if defined __AVX__ || defined SSE2AVX
+# define STMXCSR "vstmxcsr"
+# define LDMXCSR "vldmxcsr"
+#else
+# define STMXCSR "stmxcsr"
+# define LDMXCSR "ldmxcsr"
+#endif
+
+static __always_inline void
+libc_feholdexcept_sse (fenv_t *e)
+{
+ unsigned int mxcsr;
+ asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ e->__mxcsr = mxcsr;
+ mxcsr = (mxcsr | 0x1f80) & ~0x3f;
+ asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+}
+
+static __always_inline void
+libc_feholdexcept_387 (fenv_t *e)
+{
+ /* Recall that fnstenv has a side-effect of masking exceptions.
+ Clobber all of the fp registers so that the TOS field is 0. */
+ asm volatile ("fnstenv %0; fnclex"
+ : "=m"(*e)
+ : : "st", "st(1)", "st(2)", "st(3)",
+ "st(4)", "st(5)", "st(6)", "st(7)");
+}
+
+static __always_inline void
+libc_feholdexcept_setround_sse (fenv_t *e, int r)
+{
+ unsigned int mxcsr;
+ asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ e->__mxcsr = mxcsr;
+ mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3);
+ asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+}
+
+/* Set both rounding mode and precision. A convenience function for use
+ by libc_feholdexcept_setround and libc_feholdexcept_setround_53bit. */
+static __always_inline void
+libc_feholdexcept_setround_387_prec (fenv_t *e, int r)
+{
+ libc_feholdexcept_387 (e);
+
+ fpu_control_t cw = e->__control_word;
+ cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
+ cw |= r | 0x3f;
+ _FPU_SETCW (cw);
+}
+
+static __always_inline void
+libc_feholdexcept_setround_387 (fenv_t *e, int r)
+{
+ libc_feholdexcept_setround_387_prec (e, r | _FPU_EXTENDED);
+}
+
+static __always_inline void
+libc_feholdexcept_setround_387_53bit (fenv_t *e, int r)
+{
+ libc_feholdexcept_setround_387_prec (e, r | _FPU_DOUBLE);
+}
+
+static __always_inline int
+libc_fetestexcept_sse (int e)
+{
+ unsigned int mxcsr;
+ asm volatile (STMXCSR " %0" : "=m" (*&mxcsr));
+ return mxcsr & e & FE_ALL_EXCEPT;
+}
+
+static __always_inline int
+libc_fetestexcept_387 (int ex)
+{
+ fexcept_t temp;
+ asm volatile ("fnstsw %0" : "=a" (temp));
+ return temp & ex & FE_ALL_EXCEPT;
+}
+
+static __always_inline void
+libc_fesetenv_sse (fenv_t *e)
+{
+ asm volatile (LDMXCSR " %0" : : "m" (e->__mxcsr));
+}
+
+static __always_inline void
+libc_fesetenv_387 (fenv_t *e)
+{
+ /* Clobber all fp registers so that the TOS value we saved earlier is
+ compatible with the current state of the compiler. */
+ asm volatile ("fldenv %0"
+ : : "m" (*e)
+ : "st", "st(1)", "st(2)", "st(3)",
+ "st(4)", "st(5)", "st(6)", "st(7)");
+}
+
+static __always_inline int
+libc_feupdateenv_test_sse (fenv_t *e, int ex)
+{
+ unsigned int mxcsr, old_mxcsr, cur_ex;
+ asm volatile (STMXCSR " %0" : "=m" (*&mxcsr));
+ cur_ex = mxcsr & FE_ALL_EXCEPT;
+
+ /* Merge current exceptions with the old environment. */
+ old_mxcsr = e->__mxcsr;
+ mxcsr = old_mxcsr | cur_ex;
+ asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+
+ /* Raise SIGFPE for any new exceptions since the hold. Expect that
+ the normal environment has all exceptions masked. */
+ if (__builtin_expect ((old_mxcsr >> 7) & cur_ex, 0))
+ __feraiseexcept (cur_ex);
+
+ /* Test for exceptions raised since the hold. */
+ return cur_ex & ex;
+}
+
+static __always_inline int
+libc_feupdateenv_test_387 (fenv_t *e, int ex)
+{
+ fexcept_t cur_ex;
+
+ /* Save current exceptions. */
+ asm volatile ("fnstsw %0" : "=a" (cur_ex));
+ cur_ex &= FE_ALL_EXCEPT;
+
+ /* Reload original environment. */
+ libc_fesetenv_387 (e);
+
+ /* Merge current exceptions. */
+ __feraiseexcept (cur_ex);
+
+ /* Test for exceptions raised since the hold. */
+ return cur_ex & ex;
+}
+
+static __always_inline void
+libc_feupdateenv_sse (fenv_t *e)
+{
+ libc_feupdateenv_test_sse (e, 0);
+}
+
+static __always_inline void
+libc_feupdateenv_387 (fenv_t *e)
+{
+ libc_feupdateenv_test_387 (e, 0);
+}
+
+static __always_inline void
+libc_feholdsetround_sse (fenv_t *e, int r)
+{
+ unsigned int mxcsr;
+ asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ e->__mxcsr = mxcsr;
+ mxcsr = (mxcsr & ~0x6000) | (r << 3);
+ asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+}
+
+static __always_inline void
+libc_feholdsetround_387_prec (fenv_t *e, int r)
+{
+ fpu_control_t cw;
+
+ _FPU_GETCW (cw);
+ e->__control_word = cw;
+ cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
+ cw |= r;
+ _FPU_SETCW (cw);
+}
+
+static __always_inline void
+libc_feholdsetround_387 (fenv_t *e, int r)
+{
+ libc_feholdsetround_387_prec (e, r | _FPU_EXTENDED);
+}
+
+static __always_inline void
+libc_feholdsetround_387_53bit (fenv_t *e, int r)
+{
+ libc_feholdsetround_387_prec (e, r | _FPU_DOUBLE);
+}
+
+static __always_inline void
+libc_feresetround_sse (fenv_t *e)
+{
+ unsigned int mxcsr;
+ asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ mxcsr = (mxcsr & ~0x6000) | (e->__mxcsr & 0x6000);
+ asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+}
+
+static __always_inline void
+libc_feresetround_387 (fenv_t *e)
+{
+ _FPU_SETCW (e->__control_word);
+}
+
+#ifdef __SSE_MATH__
+# define libc_feholdexceptf libc_feholdexcept_sse
+# define libc_feholdexcept_setroundf libc_feholdexcept_setround_sse
+# define libc_fetestexceptf libc_fetestexcept_sse
+# define libc_fesetenvf libc_fesetenv_sse
+# define libc_feupdateenv_testf libc_feupdateenv_test_sse
+# define libc_feupdateenvf libc_feupdateenv_sse
+# define libc_feholdsetroundf libc_feholdsetround_sse
+# define libc_feresetroundf libc_feresetround_sse
+#else
+# define libc_feholdexceptf libc_feholdexcept_387
+# define libc_feholdexcept_setroundf libc_feholdexcept_setround_387
+# define libc_fetestexceptf libc_fetestexcept_387
+# define libc_fesetenvf libc_fesetenv_387
+# define libc_feupdateenv_testf libc_feupdateenv_test_387
+# define libc_feupdateenvf libc_feupdateenv_387
+# define libc_feholdsetroundf libc_feholdsetround_387
+# define libc_feresetroundf libc_feresetround_387
+#endif /* __SSE_MATH__ */
+
+#ifdef __SSE2_MATH__
+# define libc_feholdexcept libc_feholdexcept_sse
+# define libc_feholdexcept_setround libc_feholdexcept_setround_sse
+# define libc_fetestexcept libc_fetestexcept_sse
+# define libc_fesetenv libc_fesetenv_sse
+# define libc_feupdateenv_test libc_feupdateenv_test_sse
+# define libc_feupdateenv libc_feupdateenv_sse
+# define libc_feholdsetround libc_feholdsetround_sse
+# define libc_feresetround libc_feresetround_sse
+#else
+# define libc_feholdexcept libc_feholdexcept_387
+# define libc_feholdexcept_setround libc_feholdexcept_setround_387
+# define libc_fetestexcept libc_fetestexcept_387
+# define libc_fesetenv libc_fesetenv_387
+# define libc_feupdateenv_test libc_feupdateenv_test_387
+# define libc_feupdateenv libc_feupdateenv_387
+# define libc_feholdsetround libc_feholdsetround_387
+# define libc_feresetround libc_feresetround_387
+#endif /* __SSE2_MATH__ */
+
+#define libc_feholdexceptl libc_feholdexcept_387
+#define libc_feholdexcept_setroundl libc_feholdexcept_setround_387
+#define libc_fetestexceptl libc_fetestexcept_387
+#define libc_fesetenvl libc_fesetenv_387
+#define libc_feupdateenv_testl libc_feupdateenv_test_387
+#define libc_feupdateenvl libc_feupdateenv_387
+#define libc_feholdsetroundl libc_feholdsetround_387
+#define libc_feresetroundl libc_feresetround_387
+
+#ifndef __SSE2_MATH__
+# define libc_feholdexcept_setround_53bit libc_feholdexcept_setround_387_53bit
+# define libc_feholdsetround_53bit libc_feholdsetround_387_53bit
+#endif
+
+#undef __mxcsr
+
+#endif /* FENV_PRIVATE_H */
diff --git a/sysdeps/i386/fpu/k_rem_pio2.c b/sysdeps/i386/fpu/k_rem_pio2.c
deleted file mode 100644
index 1347b0468c..0000000000
--- a/sysdeps/i386/fpu/k_rem_pio2.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Empty. This file is only meant to avoid compiling the file with the
- same name in the libm-ieee754 directory. The code is not used since
- there is an assembler version for all users of this file. */
diff --git a/sysdeps/i386/fpu/k_rem_pio2f.c b/sysdeps/i386/fpu/k_rem_pio2f.c
deleted file mode 100644
index 1347b0468c..0000000000
--- a/sysdeps/i386/fpu/k_rem_pio2f.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Empty. This file is only meant to avoid compiling the file with the
- same name in the libm-ieee754 directory. The code is not used since
- there is an assembler version for all users of this file. */
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
index 83a68aff6c..1c791405ab 100644
--- a/sysdeps/i386/fpu/libm-test-ulps
+++ b/sysdeps/i386/fpu/libm-test-ulps
@@ -28,13 +28,147 @@ ildouble: 2
ldouble: 1
# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.5 - 0 i) == pi + 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
+Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (1.5 - 0 i) == +0 + 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
double: 1
float: 9
@@ -52,8 +186,74 @@ ldouble: 1
Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
ildouble: 1
ldouble: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.5 - 0 i) == -pi/2 - 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
double: 1
float: 1
@@ -66,8 +266,62 @@ float: 1
ifloat: 1
ildouble: 2
ldouble: 2
+Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.5 - 0 i) == pi/2 - 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
# casinh
+Test "Real part of: casinh (+0 + 1.5 i) == 0.9624236501192068949955178268487368462704 + pi/2 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (+0 - 1.5 i) == 0.9624236501192068949955178268487368462704 - pi/2 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+double: 2
+idouble: 2
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+double: 2
+idouble: 2
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
double: 5
float: 1
@@ -82,6 +336,12 @@ idouble: 3
ifloat: 6
ildouble: 5
ldouble: 5
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
float: 1
ifloat: 1
@@ -92,6 +352,22 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
# catan
Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
@@ -155,13 +431,74 @@ idouble: 1
ifloat: 1
# cexp
+Test "Real part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i":
+ildouble: 1
+ldouble: 1
Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
ildouble: 1
ldouble: 1
Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0 + 0x1p65 i) == 0.99888622066058013610642172179340364209972 - 0.047183876212354673805106149805700013943218 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (0 - 0x1p65 i) == 0.99888622066058013610642172179340364209972 + 0.047183876212354673805106149805700013943218 i":
+float: 1
+ifloat: 1
Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (11356.5625 + 0.75 i) == 9.052188470850960144814815984311663764287e4931 + 8.432986734191301036267148978260970230200e4931 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i plus overflow exception":
+double: 1
+idouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -171,6 +508,21 @@ float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.fffffep+127 + 0x1.fffffep+127 i) == 89.06941264234832570836679262104313101776 + pi/4 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i) == 11356.83823118610934184548269774874545400 + pi/4 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.fp+16383 + 0x1p+16383 i) == 11356.60974243783798653123798337822335902 + 0.4764674194737066993385333770295162295856 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p-149 + 0x1p-149 i) == -102.9323563131518784484589700365392203592 + pi/4 i":
+ildouble: 1
+ldouble: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
@@ -238,6 +590,51 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 308.4052305577487344482591243175787477115 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 308.3031705664207720674749211936626341569 + 0.2013595981366865903254995612594728746470 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i) == 4932.212175672014259683102930239951947672 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.fp+16383 + 0x1p+16383 i) == 4932.112944269463028900262609694408579449 + 0.2069271710841128115912940666587802677383 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i) == -322.8546703496198318667349645920187712089 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1p-16440 + 0x1p-16441 i) == -4948.884673709346821106688037612752099609 + 0.2013595981366865710389502301937289472543 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-16440 + 0x1p-16441 i) == -4948.884673709346821106688037612752099609 + 0.2013595981366865710389502301937289472543 i":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
double: 1
float: 1
@@ -280,10 +677,198 @@ ifloat: 1
ildouble: 1
ldouble: 1
+# cos_downward
+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cos_tonearest
+Test "cos_tonearest (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
+ildouble: 1
+ldouble: 1
+
+# cos_towardzero
+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
+double: 1
+idouble: 1
+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cos_upward
+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
+float: 1
+ifloat: 1
+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (2) == -0.4161468365471423869975682295007621897660":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
+double: 1
+idouble: 1
+Test "cos_upward (8) == -0.1455000338086135258688413818311946826093":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
+ildouble: 1
+ldouble: 1
+
# cosh
Test "cosh (0.75) == 1.29468328467684468784170818539018176":
ildouble: 1
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+double: 1
+float: 1
+ldouble: 2
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+double: 1
+float: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+double: 1
+float: 1
+ldouble: 2
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+double: 1
+float: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ldouble: 1
+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
+double: 1
+
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
float: 1
@@ -291,41 +876,55 @@ ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
-float: 3
-ifloat: 3
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
ildouble: 6
ldouble: 6
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
float: 1
ifloat: 1
Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
-double: 1
+double: 2
float: 3
-idouble: 1
+idouble: 2
ifloat: 3
ildouble: 3
ldouble: 3
+Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+double: 1
+idouble: 1
+Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
+ildouble: 1
+ldouble: 1
Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
double: 1
-float: 4
+float: 5
idouble: 1
-ifloat: 4
+ifloat: 5
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+float: 2
+ifloat: 2
+ildouble: 4
+ldouble: 4
Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
double: 2
float: 3
@@ -335,6 +934,9 @@ ildouble: 1
ldouble: 1
# csin
+Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
+float: 1
+ifloat: 1
Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
float: 1
ifloat: 1
@@ -366,12 +968,32 @@ Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.2592948545511627791533498306
float: 1
ifloat: 1
+# csqrt
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-1073 + 0x1p-1073 i) == 3.453664695497464982856905711457966660085e-162 + 1.430554756764195530630723976279903095110e-162 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-1074 + 0x1p-1074 i) == 2.442109726130830256743814843868934877597e-162 + 1.011554969366634726113090867589031782487e-162 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-147 + 0x1p-147 i) == 8.225610928685557596194006925540350401606e-23 + 3.407159605465907500737319471202779419102e-23 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-149 + 0x1p-149 i) == 4.112805464342778798097003462770175200803e-23 + 1.703579802732953750368659735601389709551e-23 i":
+ildouble: 1
+ldouble: 1
+
# ctan
Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
double: 1
idouble: 1
-ildouble: 439
-ldouble: 439
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
float: 1
ifloat: 1
@@ -390,13 +1012,13 @@ ldouble: 3
# ctanh
Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-ildouble: 5
-ldouble: 5
+ildouble: 3
+ldouble: 3
Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
float: 1
ifloat: 1
-ildouble: 25
-ldouble: 25
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
float: 1
ifloat: 1
@@ -422,6 +1044,17 @@ idouble: 1
Test "erfc (0.75) == 0.288844366346484868401062165408589223":
float: 1
ifloat: 1
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.ffffc8p+2) == 1.122671365033056305522366683719541099329e-29":
+double: 1
+idouble: 1
Test "erfc (1.25) == 0.0770998717435417698634765188027188596":
ildouble: 1
ldouble: 1
@@ -437,10 +1070,6 @@ ldouble: 1
# exp
Test "exp (0.75) == 2.11700001661267466854536981983709561":
ildouble: 1
-Test "exp (1000.0) == 0.197007111401704699388887935224332313e435":
-ildouble: 754
-Test "exp (50.0) == 5184705528587072464087.45332293348538":
-ildouble: 16
# exp10
Test "exp10 (-1) == 0.1":
@@ -453,9 +1082,56 @@ Test "exp10 (3) == 1000":
ildouble: 8
ldouble: 8
+# exp_downward
+Test "exp_downward (1) == e":
+ildouble: 1
+ldouble: 1
+Test "exp_downward (2) == e^2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "exp_downward (3) == e^3":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_towardzero
+Test "exp_towardzero (1) == e":
+ildouble: 1
+ldouble: 1
+Test "exp_towardzero (2) == e^2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "exp_towardzero (3) == e^3":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_upward
+Test "exp_upward (1) == e":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
# expm1
Test "expm1 (1) == M_El - 1.0":
ildouble: 1
+Test "expm1 (11356.25) == 9.05128237311923300051376115753226014206e+4931":
+ldouble: 1
# gamma
Test "gamma (-0.5) == log(2*sqrt(pi))":
@@ -483,13 +1159,19 @@ Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
float: 1
# j0
+Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90":
+ildouble: 2
+ldouble: 2
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+float: 1
+ifloat: 1
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
double: 3
float: 1
@@ -505,8 +1187,8 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "j0 (8.0) == 0.171650807137553906090869407851972001":
float: 1
ifloat: 1
@@ -515,10 +1197,18 @@ ifloat: 1
Test "j1 (0.75) == 0.349243602174862192523281016426251335":
double: 1
idouble: 1
-Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
-double: 1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
idouble: 1
+Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+double: 2
+float: 1
+idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
@@ -539,8 +1229,8 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
double: 3
float: 1
@@ -556,8 +1246,8 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
float: 1
ifloat: 1
@@ -565,9 +1255,9 @@ Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
double: 1
idouble: 1
Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
@@ -617,6 +1307,11 @@ double: 2
idouble: 2
ildouble: 1
ldouble: 1
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
double: 1
float: 1
@@ -719,7 +1414,207 @@ ifloat: 1
ildouble: 1
ldouble: 1
+# pow_downward
+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+# sin
+Test "sin (-0x1p65) == 0.047183876212354673805106149805700013943218":
+float: 1
+ifloat: 1
+Test "sin (0x1p65) == -0.047183876212354673805106149805700013943218":
+float: 1
+ifloat: 1
+
+# sin_downward
+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
+double: 1
+idouble: 1
+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (7) == 0.6569865987187890903969990915936351779369":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
+ildouble: 1
+ldouble: 1
+
+# sin_towardzero
+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
+double: 1
+idouble: 1
+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sin_upward
+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (8) == 0.9893582466233817778081235982452886721164":
+float: 1
+ifloat: 1
+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+
# sincos
+Test "sincos (-0x1p65, &sin_res, &cos_res) puts 0.047183876212354673805106149805700013943218 in sin_res":
+float: 1
+ifloat: 1
+Test "sincos (0x1p65, &sin_res, &cos_res) puts -0.047183876212354673805106149805700013943218 in sin_res":
+float: 1
+ifloat: 1
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
double: 1
float: 1
@@ -745,10 +1640,235 @@ Test "sinh (0.75) == 0.822316731935829980703661634446913849":
double: 1
ildouble: 1
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 4
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ldouble: 5
+
+# sinh_tonearest
+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
+ldouble: 3
+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
+ldouble: 1
+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
+ldouble: 6
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 4
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ldouble: 5
+
+# sinh_upward
+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
+ldouble: 16
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ldouble: 27
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+double: 1
+idouble: 1
+ldouble: 7
+
# tan
+Test "tan (0x1p16383) == 0.422722393732022337800504160054440141575":
+ildouble: 1
+ldouble: 1
+Test "tan (1e22) == -1.628778225606898878549375936939548513545":
+ildouble: 1
+ldouble: 1
Test "tan (pi/4) == 1":
double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# tan_downward
+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (3) == -0.1425465430742778052956354105339134932261":
+double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (4) == 1.1578212823495775831373424182673239231198":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (7) == 0.8714479827243187364564508896003135663222":
+double: 1
+idouble: 1
+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+
+# tan_tonearest
+Test "tan_tonearest (1) == 1.5574077246549022305069748074583601730873":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (2) == -2.1850398632615189916433061023136825434320":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087":
+ildouble: 1
+ldouble: 1
+
+# tan_towardzero
+Test "tan_towardzero (1) == 1.5574077246549022305069748074583601730873":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222":
+double: 1
+idouble: 1
+Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+# tan_upward
+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
+double: 1
+idouble: 1
+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (8) == -6.7997114552203786999252627596086333648814":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
# tgamma
Test "tgamma (-0.5) == -2 sqrt (pi)":
@@ -779,6 +1899,14 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
double: 2
float: 1
@@ -810,6 +1938,16 @@ ldouble: 1
Test "y1 (0.125) == -5.19993611253477499595928744876579921":
ildouble: 1
ldouble: 1
+Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90":
+ildouble: 2
+ldouble: 2
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
Test "y1 (1.0) == -0.781212821300288716547150000047964821":
double: 1
idouble: 1
@@ -911,9 +2049,9 @@ float: 2
idouble: 1
ifloat: 2
Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
-double: 1
+double: 2
float: 3
-idouble: 1
+idouble: 2
ifloat: 3
Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
double: 2
@@ -943,8 +2081,8 @@ ifloat: 1
# Maximal error of functions:
Function: "acos":
-ildouble: 622
-ldouble: 622
+ildouble: 1
+ldouble: 1
Function: "asin":
ildouble: 1
@@ -954,8 +2092,16 @@ Function: "atanh":
ildouble: 2
ldouble: 1
+Function: Real part of "cacos":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
Function: Imaginary part of "cacos":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 2
ldouble: 2
@@ -985,7 +2131,9 @@ ildouble: 2
ldouble: 2
Function: Imaginary part of "casin":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 2
ldouble: 2
@@ -1051,10 +2199,18 @@ ildouble: 1
ldouble: 1
Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
ildouble: 1
ldouble: 1
Function: Imaginary part of "cexp":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -1088,24 +2244,71 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "cosh":
+Function: "cos_downward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
+ldouble: 1
-Function: Real part of "cpow":
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_towardzero":
double: 1
-float: 4
+float: 1
idouble: 1
-ifloat: 4
-ildouble: 763
-ldouble: 763
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh":
+ildouble: 1
+
+Function: "cosh_downward":
+double: 1
+float: 1
+ldouble: 2
+
+Function: "cosh_tonearest":
+ldouble: 1
+
+Function: "cosh_towardzero":
+double: 1
+float: 1
+ldouble: 2
+
+Function: "cosh_upward":
+double: 1
+ldouble: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 5
+idouble: 2
+ifloat: 5
+ildouble: 5
+ldouble: 5
Function: Imaginary part of "cpow":
double: 2
float: 3
idouble: 2
ifloat: 3
-ildouble: 2
-ldouble: 2
+ildouble: 4
+ldouble: 4
Function: Real part of "csin":
float: 1
@@ -1133,11 +2336,15 @@ ifloat: 1
ildouble: 2
ldouble: 2
+Function: Imaginary part of "csqrt":
+ildouble: 1
+ldouble: 1
+
Function: Real part of "ctan":
double: 1
idouble: 1
-ildouble: 439
-ldouble: 439
+ildouble: 1
+ldouble: 1
Function: Imaginary part of "ctan":
double: 1
@@ -1152,16 +2359,16 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 5
-ldouble: 5
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "ctanh":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 25
-ldouble: 25
+ildouble: 1
+ldouble: 1
Function: "erf":
double: 1
@@ -1175,15 +2382,35 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "exp":
-ildouble: 754
-
Function: "exp10":
ildouble: 8
ldouble: 8
+Function: "exp_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
Function: "expm1":
ildouble: 1
+ldouble: 1
Function: "gamma":
double: 1
@@ -1199,13 +2426,13 @@ double: 3
float: 2
idouble: 3
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "j1":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
@@ -1236,6 +2463,64 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: "pow_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin":
+float: 1
+ifloat: 1
+
+Function: "sin_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "sincos":
double: 1
float: 1
@@ -1248,9 +2533,65 @@ Function: "sinh":
double: 1
ildouble: 1
+Function: "sinh_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 5
+
+Function: "sinh_tonearest":
+ldouble: 6
+
+Function: "sinh_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 5
+
+Function: "sinh_upward":
+double: 1
+idouble: 1
+ldouble: 27
+
Function: "tan":
double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tan_downward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "tan_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tan_towardzero":
+double: 1
+float: 1
idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "tan_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
Function: "tgamma":
double: 2
@@ -1273,8 +2614,8 @@ double: 2
float: 2
idouble: 2
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "yn":
double: 2
diff --git a/sysdeps/i386/fpu/math_private.h b/sysdeps/i386/fpu/math_private.h
index 8a51851377..541a7f8d93 100644
--- a/sysdeps/i386/fpu/math_private.h
+++ b/sysdeps/i386/fpu/math_private.h
@@ -1,19 +1,6 @@
#ifndef _MATH_PRIVATE_H
-#define math_opt_barrier(x) \
-({ __typeof (x) __x; \
- __asm ("" : "=t" (__x) : "0" (x)); \
- __x; })
-#define math_force_eval(x) \
-do \
- { \
- __typeof (x) __x = (x); \
- if (sizeof (x) <= sizeof (double)) \
- __asm __volatile ("" : : "m" (__x)); \
- else \
- __asm __volatile ("" : : "f" (__x)); \
- } \
-while (0)
+#include "fenv_private.h"
+#include_next <math_private.h>
-#include <math/math_private.h>
#endif
diff --git a/sysdeps/i386/fpu/mpa.c b/sysdeps/i386/fpu/mpa.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mpa.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/mptan.c b/sysdeps/i386/fpu/mptan.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mptan.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/s_cexp.S b/sysdeps/i386/fpu/s_cexp.S
deleted file mode 100644
index e5fdb7d735..0000000000
--- a/sysdeps/i386/fpu/s_cexp.S
+++ /dev/null
@@ -1,253 +0,0 @@
-/* ix87 specific implementation of complex exponential function for double.
- Copyright (C) 1997, 2005, 2012 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- ASM_TYPE_DIRECTIVE(huge_nan_null_null,@object)
-huge_nan_null_null:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .double 0.0
-zero: .double 0.0
-infinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .double 0.0
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(huge_nan_null_null)
-
- ASM_TYPE_DIRECTIVE(twopi,@object)
-twopi:
- .byte 0x35, 0xc2, 0x68, 0x21, 0xa2, 0xda, 0xf, 0xc9, 0x1, 0x40
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(twopi)
-
- ASM_TYPE_DIRECTIVE(l2e,@object)
-l2e:
- .byte 0xbc, 0xf0, 0x17, 0x5c, 0x29, 0x3b, 0xaa, 0xb8, 0xff, 0x3f
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(l2e)
-
- ASM_TYPE_DIRECTIVE(one,@object)
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
-
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%ecx)
-#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-#define MO(op) op
-#define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__cexp)
- fldl 8(%esp) /* x */
- fxam
- fnstsw
- fldl 16(%esp) /* y : x */
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- movb %ah, %dh
- andb $0x45, %ah
- cmpb $0x05, %ah
- je 1f /* Jump if real part is +-Inf */
- cmpb $0x01, %ah
- je 2f /* Jump if real part is NaN */
-
- fxam /* y : x */
- fnstsw
- /* If the imaginary part is not finite we return NaN+i NaN, as
- for the case when the real part is NaN. A test for +-Inf and
- NaN would be necessary. But since we know the stack register
- we applied `fxam' to is not empty we can simply use one test.
- Check your FPU manual for more information. */
- andb $0x01, %ah
- cmpb $0x01, %ah
- je 20f
-
- /* We have finite numbers in the real and imaginary part. Do
- the real work now. */
- fxch /* x : y */
- fldt MO(l2e) /* log2(e) : x : y */
- fmulp /* x * log2(e) : y */
- fld %st /* x * log2(e) : x * log2(e) : y */
- frndint /* int(x * log2(e)) : x * log2(e) : y */
- fsubr %st, %st(1) /* int(x * log2(e)) : frac(x * log2(e)) : y */
- fxch /* frac(x * log2(e)) : int(x * log2(e)) : y */
- f2xm1 /* 2^frac(x * log2(e))-1 : int(x * log2(e)) : y */
- faddl MO(one) /* 2^frac(x * log2(e)) : int(x * log2(e)) : y */
- fscale /* e^x : int(x * log2(e)) : y */
- fst %st(1) /* e^x : e^x : y */
- fxch %st(2) /* y : e^x : e^x */
- fsincos /* cos(y) : sin(y) : e^x : e^x */
- fnstsw
- testl $0x400, %eax
- jnz 7f
- fmulp %st, %st(3) /* sin(y) : e^x : e^x * cos(y) */
- fmulp %st, %st(1) /* e^x * sin(y) : e^x * cos(y) */
- movl 4(%esp), %eax /* Pointer to memory for result. */
- fstpl 8(%eax)
- fstpl (%eax)
- ret $4
-
- /* We have to reduce the argument to fsincos. */
- .align ALIGNARG(4)
-7: fldt MO(twopi) /* 2*pi : y : e^x : e^x */
- fxch /* y : 2*pi : e^x : e^x */
-8: fprem1 /* y%(2*pi) : 2*pi : e^x : e^x */
- fnstsw
- testl $0x400, %eax
- jnz 8b
- fstp %st(1) /* y%(2*pi) : e^x : e^x */
- fsincos /* cos(y) : sin(y) : e^x : e^x */
- fmulp %st, %st(3)
- fmulp %st, %st(1)
- movl 4(%esp), %eax /* Pointer to memory for result. */
- fstpl 8(%eax)
- fstpl (%eax)
- ret $4
-
- /* The real part is +-inf. We must make further differences. */
- .align ALIGNARG(4)
-1: fxam /* y : x */
- fnstsw
- movb %ah, %dl
- testb $0x01, %ah /* See above why 0x01 is usable here. */
- jne 3f
-
-
- /* The real part is +-Inf and the imaginary part is finite. */
- andl $0x245, %edx
- cmpb $0x40, %dl /* Imaginary part == 0? */
- je 4f /* Yes -> */
-
- fxch /* x : y */
- shrl $5, %edx
- fstp %st(0) /* y */ /* Drop the real part. */
- andl $16, %edx /* This puts the sign bit of the real part
- in bit 4. So we can use it to index a
- small array to select 0 or Inf. */
- fsincos /* cos(y) : sin(y) */
- fnstsw
- testl $0x0400, %eax
- jnz 5f
- fldl MOX(huge_nan_null_null,%edx,1)
- movl 4(%esp), %edx /* Pointer to memory for result. */
- fstl 8(%edx)
- fstpl (%edx)
- ftst
- fnstsw
- shll $23, %eax
- andl $0x80000000, %eax
- orl %eax, 4(%edx)
- fstp %st(0)
- ftst
- fnstsw
- shll $23, %eax
- andl $0x80000000, %eax
- orl %eax, 12(%edx)
- fstp %st(0)
- ret $4
- /* We must reduce the argument to fsincos. */
- .align ALIGNARG(4)
-5: fldt MO(twopi)
- fxch
-6: fprem1
- fnstsw
- testl $0x400, %eax
- jnz 6b
- fstp %st(1)
- fsincos
- fldl MOX(huge_nan_null_null,%edx,1)
- movl 4(%esp), %edx /* Pointer to memory for result. */
- fstl 8(%edx)
- fstpl (%edx)
- ftst
- fnstsw
- shll $23, %eax
- andl $0x80000000, %eax
- orl %eax, 4(%edx)
- fstp %st(0)
- ftst
- fnstsw
- shll $23, %eax
- andl $0x80000000, %eax
- orl %eax, 12(%edx)
- fstp %st(0)
- ret $4
-
- /* The real part is +-Inf and the imaginary part is +-0. So return
- +-Inf+-0i. */
- .align ALIGNARG(4)
-4: movl 4(%esp), %eax /* Pointer to memory for result. */
- fstpl 8(%eax)
- shrl $5, %edx
- fstp %st(0)
- andl $16, %edx
- fldl MOX(huge_nan_null_null,%edx,1)
- fstpl (%eax)
- ret $4
-
- /* The real part is +-Inf, the imaginary is also is not finite. */
- .align ALIGNARG(4)
-3: fstp %st(0)
- fstp %st(0) /* <empty> */
- andb $0x45, %ah
- andb $0x47, %dh
- xorb %dh, %ah
- jnz 30f
- fldl MO(infinity) /* Raise invalid exception. */
- fmull MO(zero)
- fstp %st(0)
-30: movl %edx, %eax
- shrl $5, %edx
- shll $4, %eax
- andl $16, %edx
- andl $32, %eax
- orl %eax, %edx
- movl 4(%esp), %eax /* Pointer to memory for result. */
-
- fldl MOX(huge_nan_null_null,%edx,1)
- fldl MOX(huge_nan_null_null+8,%edx,1)
- fxch
- fstpl (%eax)
- fstpl 8(%eax)
- ret $4
-
- /* The real part is NaN. */
- .align ALIGNARG(4)
-20: fldl MO(infinity) /* Raise invalid exception. */
- fmull MO(zero)
- fstp %st(0)
-2: fstp %st(0)
- fstp %st(0)
- movl 4(%esp), %eax /* Pointer to memory for result. */
- fldl MO(huge_nan_null_null+8)
- fstl (%eax)
- fstpl 8(%eax)
- ret $4
-
-END(__cexp)
-weak_alias (__cexp, cexp)
diff --git a/sysdeps/i386/fpu/s_cexpf.S b/sysdeps/i386/fpu/s_cexpf.S
deleted file mode 100644
index 6ed66e6d04..0000000000
--- a/sysdeps/i386/fpu/s_cexpf.S
+++ /dev/null
@@ -1,257 +0,0 @@
-/* ix87 specific implementation of complex exponential function for double.
- Copyright (C) 1997, 2005, 2012 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- ASM_TYPE_DIRECTIVE(huge_nan_null_null,@object)
-huge_nan_null_null:
- .byte 0, 0, 0x80, 0x7f
- .byte 0, 0, 0xc0, 0x7f
- .float 0.0
-zero: .float 0.0
-infinity:
- .byte 0, 0, 0x80, 0x7f
- .byte 0, 0, 0xc0, 0x7f
- .float 0.0
- .byte 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(huge_nan_null_null)
-
- ASM_TYPE_DIRECTIVE(twopi,@object)
-twopi:
- .byte 0x35, 0xc2, 0x68, 0x21, 0xa2, 0xda, 0xf, 0xc9, 0x1, 0x40
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(twopi)
-
- ASM_TYPE_DIRECTIVE(l2e,@object)
-l2e:
- .byte 0xbc, 0xf0, 0x17, 0x5c, 0x29, 0x3b, 0xaa, 0xb8, 0xff, 0x3f
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(l2e)
-
- ASM_TYPE_DIRECTIVE(one,@object)
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
-
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%ecx)
-#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-#define MO(op) op
-#define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__cexpf)
- flds 4(%esp) /* x */
- fxam
- fnstsw
- flds 8(%esp) /* y : x */
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- movb %ah, %dh
- andb $0x45, %ah
- cmpb $0x05, %ah
- je 1f /* Jump if real part is +-Inf */
- cmpb $0x01, %ah
- je 2f /* Jump if real part is NaN */
-
- fxam /* y : x */
- fnstsw
- /* If the imaginary part is not finite we return NaN+i NaN, as
- for the case when the real part is NaN. A test for +-Inf and
- NaN would be necessary. But since we know the stack register
- we applied `fxam' to is not empty we can simply use one test.
- Check your FPU manual for more information. */
- andb $0x01, %ah
- cmpb $0x01, %ah
- je 20f
-
- /* We have finite numbers in the real and imaginary part. Do
- the real work now. */
- fxch /* x : y */
- fldt MO(l2e) /* log2(e) : x : y */
- fmulp /* x * log2(e) : y */
- fld %st /* x * log2(e) : x * log2(e) : y */
- frndint /* int(x * log2(e)) : x * log2(e) : y */
- fsubr %st, %st(1) /* int(x * log2(e)) : frac(x * log2(e)) : y */
- fxch /* frac(x * log2(e)) : int(x * log2(e)) : y */
- f2xm1 /* 2^frac(x * log2(e))-1 : int(x * log2(e)) : y */
- faddl MO(one) /* 2^frac(x * log2(e)) : int(x * log2(e)) : y */
- fscale /* e^x : int(x * log2(e)) : y */
- fst %st(1) /* e^x : e^x : y */
- fxch %st(2) /* y : e^x : e^x */
- fsincos /* cos(y) : sin(y) : e^x : e^x */
- fnstsw
- testl $0x400, %eax
- jnz 7f
- fmulp %st, %st(3) /* sin(y) : e^x : e^x * cos(y) */
- fmulp %st, %st(1) /* e^x * sin(y) : e^x * cos(y) */
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fstps 4(%esp)
- fstps (%esp)
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- ret
-
- /* We have to reduce the argument to fsincos. */
- .align ALIGNARG(4)
-7: fldt MO(twopi) /* 2*pi : y : e^x : e^x */
- fxch /* y : 2*pi : e^x : e^x */
-8: fprem1 /* y%(2*pi) : 2*pi : e^x : e^x */
- fnstsw
- testl $0x400, %eax
- jnz 8b
- fstp %st(1) /* y%(2*pi) : e^x : e^x */
- fsincos /* cos(y) : sin(y) : e^x : e^x */
- fmulp %st, %st(3)
- fmulp %st, %st(1)
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fstps 4(%esp)
- fstps (%esp)
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- ret
-
- /* The real part is +-inf. We must make further differences. */
- .align ALIGNARG(4)
-1: fxam /* y : x */
- fnstsw
- movb %ah, %dl
- testb $0x01, %ah /* See above why 0x01 is usable here. */
- jne 3f
-
-
- /* The real part is +-Inf and the imaginary part is finite. */
- andl $0x245, %edx
- cmpb $0x40, %dl /* Imaginary part == 0? */
- je 4f /* Yes -> */
-
- fxch /* x : y */
- shrl $6, %edx
- fstp %st(0) /* y */ /* Drop the real part. */
- andl $8, %edx /* This puts the sign bit of the real part
- in bit 3. So we can use it to index a
- small array to select 0 or Inf. */
- fsincos /* cos(y) : sin(y) */
- fnstsw
- testl $0x0400, %eax
- jnz 5f
- fxch
- ftst
- fnstsw
- fstp %st(0)
- shll $23, %eax
- andl $0x80000000, %eax
- orl MOX(huge_nan_null_null,%edx,1), %eax
- movl MOX(huge_nan_null_null,%edx,1), %ecx
- movl %eax, %edx
- ftst
- fnstsw
- fstp %st(0)
- shll $23, %eax
- andl $0x80000000, %eax
- orl %ecx, %eax
- ret
- /* We must reduce the argument to fsincos. */
- .align ALIGNARG(4)
-5: fldt MO(twopi)
- fxch
-6: fprem1
- fnstsw
- testl $0x400, %eax
- jnz 6b
- fstp %st(1)
- fsincos
- fxch
- ftst
- fnstsw
- fstp %st(0)
- shll $23, %eax
- andl $0x80000000, %eax
- orl MOX(huge_nan_null_null,%edx,1), %eax
- movl MOX(huge_nan_null_null,%edx,1), %ecx
- movl %eax, %edx
- ftst
- fnstsw
- fstp %st(0)
- shll $23, %eax
- andl $0x80000000, %eax
- orl %ecx, %eax
- ret
-
- /* The real part is +-Inf and the imaginary part is +-0. So return
- +-Inf+-0i. */
- .align ALIGNARG(4)
-4: subl $4, %esp
- cfi_adjust_cfa_offset (4)
- fstps (%esp)
- shrl $6, %edx
- fstp %st(0)
- andl $8, %edx
- movl MOX(huge_nan_null_null,%edx,1), %eax
- popl %edx
- cfi_adjust_cfa_offset (-4)
- ret
-
- /* The real part is +-Inf, the imaginary is also is not finite. */
- .align ALIGNARG(4)
-3: fstp %st(0)
- fstp %st(0) /* <empty> */
- andb $0x45, %ah
- andb $0x47, %dh
- xorb %dh, %ah
- jnz 30f
- flds MO(infinity) /* Raise invalid exception. */
- fmuls MO(zero)
- fstp %st(0)
-30: movl %edx, %eax
- shrl $6, %edx
- shll $3, %eax
- andl $8, %edx
- andl $16, %eax
- orl %eax, %edx
-
- movl MOX(huge_nan_null_null,%edx,1), %eax
- movl MOX(huge_nan_null_null+4,%edx,1), %edx
- ret
-
- /* The real part is NaN. */
- .align ALIGNARG(4)
-20: flds MO(infinity) /* Raise invalid exception. */
- fmuls MO(zero)
- fstp %st(0)
-2: fstp %st(0)
- fstp %st(0)
- movl MO(huge_nan_null_null+4), %eax
- movl %eax, %edx
- ret
-
-END(__cexpf)
-weak_alias (__cexpf, cexpf)
diff --git a/sysdeps/i386/fpu/s_cexpl.S b/sysdeps/i386/fpu/s_cexpl.S
deleted file mode 100644
index ab02a172ad..0000000000
--- a/sysdeps/i386/fpu/s_cexpl.S
+++ /dev/null
@@ -1,256 +0,0 @@
-/* ix87 specific implementation of complex exponential function for double.
- Copyright (C) 1997, 2005, 2012 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- ASM_TYPE_DIRECTIVE(huge_nan_null_null,@object)
-huge_nan_null_null:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .double 0.0
-zero: .double 0.0
-infinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .double 0.0
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(huge_nan_null_null)
-
- ASM_TYPE_DIRECTIVE(twopi,@object)
-twopi:
- .byte 0x35, 0xc2, 0x68, 0x21, 0xa2, 0xda, 0xf, 0xc9, 0x1, 0x40
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(twopi)
-
- ASM_TYPE_DIRECTIVE(l2e,@object)
-l2e:
- .byte 0xbc, 0xf0, 0x17, 0x5c, 0x29, 0x3b, 0xaa, 0xb8, 0xff, 0x3f
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(l2e)
-
- ASM_TYPE_DIRECTIVE(one,@object)
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
-
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%ecx)
-#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-#define MO(op) op
-#define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__cexpl)
- fldt 8(%esp) /* x */
- fxam
- fnstsw
- fldt 20(%esp) /* y : x */
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- movb %ah, %dh
- andb $0x45, %ah
- cmpb $0x05, %ah
- je 1f /* Jump if real part is +-Inf */
- cmpb $0x01, %ah
- je 2f /* Jump if real part is NaN */
-
- fxam /* y : x */
- fnstsw
- /* If the imaginary part is not finite we return NaN+i NaN, as
- for the case when the real part is NaN. A test for +-Inf and
- NaN would be necessary. But since we know the stack register
- we applied `fxam' to is not empty we can simply use one test.
- Check your FPU manual for more information. */
- andb $0x01, %ah
- cmpb $0x01, %ah
- je 20f
-
- /* We have finite numbers in the real and imaginary part. Do
- the real work now. */
- fxch /* x : y */
- fldt MO(l2e) /* log2(e) : x : y */
- fmulp /* x * log2(e) : y */
- fld %st /* x * log2(e) : x * log2(e) : y */
- frndint /* int(x * log2(e)) : x * log2(e) : y */
- fsubr %st, %st(1) /* int(x * log2(e)) : frac(x * log2(e)) : y */
- fxch /* frac(x * log2(e)) : int(x * log2(e)) : y */
- f2xm1 /* 2^frac(x * log2(e))-1 : int(x * log2(e)) : y */
- faddl MO(one) /* 2^frac(x * log2(e)) : int(x * log2(e)) : y */
- fscale /* e^x : int(x * log2(e)) : y */
- fst %st(1) /* e^x : e^x : y */
- fxch %st(2) /* y : e^x : e^x */
- fsincos /* cos(y) : sin(y) : e^x : e^x */
- fnstsw
- testl $0x400, %eax
- jnz 7f
- fmulp %st, %st(3) /* sin(y) : e^x : e^x * cos(y) */
- fmulp %st, %st(1) /* e^x * sin(y) : e^x * cos(y) */
- movl 4(%esp), %eax /* Pointer to memory for result. */
- fstpt 12(%eax)
- fstpt (%eax)
- ret $4
-
- /* We have to reduce the argument to fsincos. */
- .align ALIGNARG(4)
-7: fldt MO(twopi) /* 2*pi : y : e^x : e^x */
- fxch /* y : 2*pi : e^x : e^x */
-8: fprem1 /* y%(2*pi) : 2*pi : e^x : e^x */
- fnstsw
- testl $0x400, %eax
- jnz 8b
- fstp %st(1) /* y%(2*pi) : e^x : e^x */
- fsincos /* cos(y) : sin(y) : e^x : e^x */
- fmulp %st, %st(3)
- fmulp %st, %st(1)
- movl 4(%esp), %eax /* Pointer to memory for result. */
- fstpt 12(%eax)
- fstpt (%eax)
- ret $4
-
- /* The real part is +-inf. We must make further differences. */
- .align ALIGNARG(4)
-1: fxam /* y : x */
- fnstsw
- movb %ah, %dl
- testb $0x01, %ah /* See above why 0x01 is usable here. */
- jne 3f
-
-
- /* The real part is +-Inf and the imaginary part is finite. */
- andl $0x245, %edx
- cmpb $0x40, %dl /* Imaginary part == 0? */
- je 4f /* Yes -> */
-
- fxch /* x : y */
- shrl $5, %edx
- fstp %st(0) /* y */ /* Drop the real part. */
- andl $16, %edx /* This puts the sign bit of the real part
- in bit 4. So we can use it to index a
- small array to select 0 or Inf. */
- fsincos /* cos(y) : sin(y) */
- fnstsw
- testl $0x0400, %eax
- jnz 5f
- fldl MOX(huge_nan_null_null,%edx,1)
- movl 4(%esp), %edx /* Pointer to memory for result. */
- fld %st
- fstpt 12(%edx)
- fstpt (%edx)
- ftst
- fnstsw
- shll $7, %eax
- andl $0x8000, %eax
- orl %eax, 8(%edx)
- fstp %st(0)
- ftst
- fnstsw
- shll $7, %eax
- andl $0x8000, %eax
- orl %eax, 20(%edx)
- fstp %st(0)
- ret $4
- /* We must reduce the argument to fsincos. */
- .align ALIGNARG(4)
-5: fldt MO(twopi)
- fxch
-6: fprem1
- fnstsw
- testl $0x400, %eax
- jnz 6b
- fstp %st(1)
- fsincos
- fldl MOX(huge_nan_null_null,%edx,1)
- movl 4(%esp), %edx /* Pointer to memory for result. */
- fld %st
- fstpt 12(%edx)
- fstpt (%edx)
- ftst
- fnstsw
- shll $7, %eax
- andl $0x8000, %eax
- orl %eax, 8(%edx)
- fstp %st(0)
- ftst
- fnstsw
- shll $7, %eax
- andl $0x8000, %eax
- orl %eax, 20(%edx)
- fstp %st(0)
- ret $4
-
- /* The real part is +-Inf and the imaginary part is +-0. So return
- +-Inf+-0i. */
- .align ALIGNARG(4)
-4: movl 4(%esp), %eax /* Pointer to memory for result. */
- fstpt 12(%eax)
- shrl $5, %edx
- fstp %st(0)
- andl $16, %edx
- fldl MOX(huge_nan_null_null,%edx,1)
- fstpt (%eax)
- ret $4
-
- /* The real part is +-Inf, the imaginary is also is not finite. */
- .align ALIGNARG(4)
-3: fstp %st(0)
- fstp %st(0) /* <empty> */
- andb $0x45, %ah
- andb $0x47, %dh
- xorb %dh, %ah
- jnz 30f
- fldl MO(infinity) /* Raise invalid exception. */
- fmull MO(zero)
- fstp %st(0)
-30: movl %edx, %eax
- shrl $5, %edx
- shll $4, %eax
- andl $16, %edx
- andl $32, %eax
- orl %eax, %edx
- movl 4(%esp), %eax /* Pointer to memory for result. */
-
- fldl MOX(huge_nan_null_null,%edx,1)
- fldl MOX(huge_nan_null_null+8,%edx,1)
- fxch
- fstpt (%eax)
- fstpt 12(%eax)
- ret $4
-
- /* The real part is NaN. */
- .align ALIGNARG(4)
-20: fldl MO(infinity) /* Raise invalid exception. */
- fmull MO(zero)
- fstp %st(0)
-2: fstp %st(0)
- fstp %st(0)
- movl 4(%esp), %eax /* Pointer to memory for result. */
- fldl MO(huge_nan_null_null+8)
- fld %st(0)
- fstpt (%eax)
- fstpt 12(%eax)
- ret $4
-
-END(__cexpl)
-weak_alias (__cexpl, cexpl)
diff --git a/sysdeps/i386/fpu/s_cos.S b/sysdeps/i386/fpu/s_cos.S
deleted file mode 100644
index d341d008c5..0000000000
--- a/sysdeps/i386/fpu/s_cos.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- * Public domain.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_cos.S,v 1.5 1995/05/08 23:54:00 jtc Exp $")
-
-ENTRY(__cos)
- fldl 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fcos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fcos
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__cos)
-weak_alias (__cos, cos)
diff --git a/sysdeps/i386/fpu/s_cosf.S b/sysdeps/i386/fpu/s_cosf.S
deleted file mode 100644
index 578967ad3c..0000000000
--- a/sysdeps/i386/fpu/s_cosf.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- * Public domain.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_cosf.S,v 1.3 1995/05/08 23:55:16 jtc Exp $")
-
-ENTRY(__cosf)
- flds 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fcos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fcos
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__cosf)
-weak_alias (__cosf, cosf)
diff --git a/sysdeps/i386/fpu/s_cosl.S b/sysdeps/i386/fpu/s_cosl.S
deleted file mode 100644
index 27dd74f21b..0000000000
--- a/sysdeps/i386/fpu/s_cosl.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-ENTRY(__cosl)
- fldt 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fcos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fcos
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__cosl)
-weak_alias (__cosl, cosl)
diff --git a/sysdeps/i386/fpu/s_fpclassifyl.c b/sysdeps/i386/fpu/s_fpclassifyl.c
index c7fd703cb6..3643db9254 100644
--- a/sysdeps/i386/fpu/s_fpclassifyl.c
+++ b/sysdeps/i386/fpu/s_fpclassifyl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
diff --git a/sysdeps/i386/fpu/s_isinfl.c b/sysdeps/i386/fpu/s_isinfl.c
index 7c9a82beda..cdd77183fa 100644
--- a/sysdeps/i386/fpu/s_isinfl.c
+++ b/sysdeps/i386/fpu/s_isinfl.c
@@ -14,8 +14,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __isinfl(long double x)
{
diff --git a/sysdeps/i386/fpu/s_isnanl.c b/sysdeps/i386/fpu/s_isnanl.c
index b00ee8832f..816396d8fb 100644
--- a/sysdeps/i386/fpu/s_isnanl.c
+++ b/sysdeps/i386/fpu/s_isnanl.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __isnanl(long double x)
{
diff --git a/sysdeps/i386/fpu/s_nextafterl.c b/sysdeps/i386/fpu/s_nextafterl.c
index f0325b7fcd..bafe7437fa 100644
--- a/sysdeps/i386/fpu/s_nextafterl.c
+++ b/sysdeps/i386/fpu/s_nextafterl.c
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
long double __nextafterl(long double x, long double y)
diff --git a/sysdeps/i386/fpu/s_nexttoward.c b/sysdeps/i386/fpu/s_nexttoward.c
index 075d0fd989..e5f0164ce1 100644
--- a/sysdeps/i386/fpu/s_nexttoward.c
+++ b/sysdeps/i386/fpu/s_nexttoward.c
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <float.h>
diff --git a/sysdeps/i386/fpu/s_nexttowardf.c b/sysdeps/i386/fpu/s_nexttowardf.c
index 0a540403e1..89e8771481 100644
--- a/sysdeps/i386/fpu/s_nexttowardf.c
+++ b/sysdeps/i386/fpu/s_nexttowardf.c
@@ -18,7 +18,7 @@
static char rcsid[] = "$NetBSD: $";
#endif
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <float.h>
diff --git a/sysdeps/i386/fpu/s_sin.S b/sysdeps/i386/fpu/s_sin.S
deleted file mode 100644
index 6b913992dc..0000000000
--- a/sysdeps/i386/fpu/s_sin.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- * Public domain.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_sin.S,v 1.5 1995/05/09 00:25:54 jtc Exp $")
-
-ENTRY(__sin)
- fldl 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fsin
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsin
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__sin)
-weak_alias (__sin, sin)
diff --git a/sysdeps/i386/fpu/s_sincos.S b/sysdeps/i386/fpu/s_sincos.S
deleted file mode 100644
index 86526c9725..0000000000
--- a/sysdeps/i386/fpu/s_sincos.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Compute sine and cosine of argument.
- Copyright (C) 1997, 2000 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
-
-#define PARMS LINKAGE /* no space for saved regs */
-#define ANGLE PARMS
-#define SINP ANGLE+8
-#define COSP SINP+PTR_SIZE
-
- .text
-ENTRY (BP_SYM (__sincos))
- ENTER
-
- fldl ANGLE(%esp)
- fsincos
- movl SINP(%esp), %ecx
- CHECK_BOUNDS_BOTH_WIDE (%ecx, SINP(%esp), $8)
- movl COSP(%esp), %edx
- CHECK_BOUNDS_BOTH_WIDE (%edx, COSP(%esp), $8)
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstpl (%edx)
- fstpl (%ecx)
-
- LEAVE
- ret
-
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsincos
- fstpl (%edx)
- fstpl (%ecx)
-
- LEAVE
- ret
-END (BP_SYM (__sincos))
-weak_alias (BP_SYM (__sincos), BP_SYM (sincos))
diff --git a/sysdeps/i386/fpu/s_sincosf.S b/sysdeps/i386/fpu/s_sincosf.S
deleted file mode 100644
index 677c7c41f9..0000000000
--- a/sysdeps/i386/fpu/s_sincosf.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Compute sine and cosine of argument.
- Copyright (C) 1997, 2000 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
-
-#define PARMS LINKAGE /* no space for saved regs */
-#define ANGLE PARMS
-#define SINP ANGLE+4
-#define COSP SINP+PTR_SIZE
-
- .text
-ENTRY (BP_SYM (__sincosf))
- ENTER
-
- flds ANGLE(%esp)
- fsincos
- movl SINP(%esp), %ecx
- CHECK_BOUNDS_BOTH_WIDE (%ecx, SINP(%esp), $4)
- movl COSP(%esp), %edx
- CHECK_BOUNDS_BOTH_WIDE (%edx, COSP(%esp), $4)
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstps (%edx)
- fstps (%ecx)
-
- LEAVE
- ret
-
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsincos
- fstps (%edx)
- fstps (%ecx)
-
- LEAVE
- ret
-END (BP_SYM (__sincosf))
-weak_alias (BP_SYM (__sincosf), BP_SYM (sincosf))
diff --git a/sysdeps/i386/fpu/s_sincosl.S b/sysdeps/i386/fpu/s_sincosl.S
deleted file mode 100644
index 42a96257ad..0000000000
--- a/sysdeps/i386/fpu/s_sincosl.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Compute sine and cosine of argument.
- Copyright (C) 1997, 2000 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
-
-#define PARMS LINKAGE /* no space for saved regs */
-#define ANGLE PARMS
-#define SINP ANGLE+12
-#define COSP SINP+PTR_SIZE
-
- .text
-ENTRY (BP_SYM (__sincosl))
- ENTER
-
- fldt ANGLE(%esp)
- fsincos
- movl SINP(%esp), %ecx
- CHECK_BOUNDS_BOTH_WIDE (%ecx, SINP(%esp), $12)
- movl COSP(%esp), %edx
- CHECK_BOUNDS_BOTH_WIDE (%edx, COSP(%esp), $12)
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstpt (%edx)
- fstpt (%ecx)
-
- LEAVE
- ret
-
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsincos
- fstpt (%edx)
- fstpt (%ecx)
-
- LEAVE
- ret
-END (BP_SYM (__sincosl))
-weak_alias (BP_SYM (__sincosl), BP_SYM (sincosl))
diff --git a/sysdeps/i386/fpu/s_sinf.S b/sysdeps/i386/fpu/s_sinf.S
deleted file mode 100644
index 67621f70f2..0000000000
--- a/sysdeps/i386/fpu/s_sinf.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- * Public domain.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_sinf.S,v 1.3 1995/05/09 00:27:53 jtc Exp $")
-
-ENTRY(__sinf)
- flds 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fsin
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsin
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__sinf)
-weak_alias (__sinf, sinf)
diff --git a/sysdeps/i386/fpu/s_sinl.S b/sysdeps/i386/fpu/s_sinl.S
deleted file mode 100644
index 68c4f99668..0000000000
--- a/sysdeps/i386/fpu/s_sinl.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-ENTRY(__sinl)
- fldt 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fsin
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsin
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__sinl)
-weak_alias (__sinl, sinl)
diff --git a/sysdeps/i386/fpu/s_tan.S b/sysdeps/i386/fpu/s_tan.S
deleted file mode 100644
index b35bb835de..0000000000
--- a/sysdeps/i386/fpu/s_tan.S
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- * Public domain.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_tan.S,v 1.5 1995/05/09 00:30:00 jtc Exp $")
-
-ENTRY(__tan)
- fldl 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fptan
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstp %st(0)
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fptan
- fstp %st(0)
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__tan)
-weak_alias (__tan, tan)
diff --git a/sysdeps/i386/fpu/s_tanf.S b/sysdeps/i386/fpu/s_tanf.S
deleted file mode 100644
index 74bc22fceb..0000000000
--- a/sysdeps/i386/fpu/s_tanf.S
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- * Public domain.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_tanf.S,v 1.3 1995/05/09 00:31:09 jtc Exp $")
-
-ENTRY(__tanf)
- flds 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fptan
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstp %st(0)
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fptan
- fstp %st(0)
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__tanf)
-weak_alias (__tanf, tanf)
diff --git a/sysdeps/i386/fpu/s_tanl.S b/sysdeps/i386/fpu/s_tanl.S
deleted file mode 100644
index 151b77113f..0000000000
--- a/sysdeps/i386/fpu/s_tanl.S
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-ENTRY(__tanl)
- fldt 4(%esp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fptan
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstp %st(0)
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fptan
- fstp %st(0)
- ret
-3:
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
- call __errno_location@PLT
- movl $EDOM, (%eax)
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- call __errno_location@PLT
- movl $EDOM, (%eax)
-#endif
- jmp 4b
-END (__tanl)
-weak_alias (__tanl, tanl)
diff --git a/sysdeps/i386/fpu/sincos32.c b/sysdeps/i386/fpu/sincos32.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/sincos32.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/i486/bits/atomic.h b/sysdeps/i386/i486/bits/atomic.h
index b633ce984a..b59a556db5 100644
--- a/sysdeps/i386/i486/bits/atomic.h
+++ b/sysdeps/i386/i486/bits/atomic.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2004,2006,2007,2009,2011 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -55,33 +55,10 @@ typedef uintmax_t uatomic_max_t;
#endif
-#if __GNUC_PREREQ (4, 1)
-# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
__sync_val_compare_and_swap (mem, oldval, newval)
-# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
+#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
(! __sync_bool_compare_and_swap (mem, oldval, newval))
-#else
-# define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgb %b2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "q" (newval), "m" (*mem), "0" (oldval)); \
- ret; })
-
-# define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgw %w2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "r" (newval), "m" (*mem), "0" (oldval)); \
- ret; })
-
-# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgl %2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "r" (newval), "m" (*mem), "0" (oldval)); \
- ret; })
-#endif
#define __arch_c_compare_and_exchange_val_8_acq(mem, newval, oldval) \
@@ -254,13 +231,8 @@ typedef uintmax_t uatomic_max_t;
} \
__result; })
-#if __GNUC_PREREQ (4, 1)
-# define atomic_exchange_and_add(mem, value) \
+#define atomic_exchange_and_add(mem, value) \
__sync_fetch_and_add (mem, value)
-#else
-# define atomic_exchange_and_add(mem, value) \
- __arch_exchange_and_add_body (LOCK_PREFIX, __arch, mem, value)
-#endif
#define __arch_exchange_and_add_cprefix \
"cmpl $0, %%gs:%P4\n\tje 0f\n\tlock\n0:\t"
diff --git a/sysdeps/i386/i686/hp-timing.h b/sysdeps/i386/i686/hp-timing.h
index 852f77820f..1d8684ce20 100644
--- a/sysdeps/i386/i686/hp-timing.h
+++ b/sysdeps/i386/i686/hp-timing.h
@@ -22,7 +22,7 @@
#include <string.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* The macros defined here use the timestamp counter in i586 and up versions
of the x86 processors. They provide a very accurate way to measure the
diff --git a/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c b/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c
index d10e872568..d4fcd2b4a1 100644
--- a/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c
+++ b/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c
@@ -6,6 +6,8 @@ extern __typeof (strcasecmp_l) __strcasecmp_l_nonascii;
#define USE_IN_EXTENDED_LOCALE_MODEL 1
#include <string/strcasecmp.c>
+strong_alias (__strcasecmp_l_nonascii, __strcasecmp_l_ia32)
+
/* The needs of strcasecmp in libc are minimal, no need to go through
the IFUNC. */
strong_alias (__strcasecmp_l_nonascii, __GI___strcasecmp_l)
diff --git a/sysdeps/i386/i686/multiarch/strcmp.S b/sysdeps/i386/i686/multiarch/strcmp.S
index 5410d17e09..b3b9eb87bc 100644
--- a/sysdeps/i386/i686/multiarch/strcmp.S
+++ b/sysdeps/i386/i686/multiarch/strcmp.S
@@ -111,6 +111,7 @@ END(STRCMP)
# endif
#endif
-#ifndef USE_AS_STRNCMP
+#if !defined USE_AS_STRNCMP && !defined USE_AS_STRCASECMP_L \
+ && !defined USE_AS_STRNCASECMP_L
# include "../strcmp.S"
#endif
diff --git a/sysdeps/i386/i686/multiarch/strncase_l-c.c b/sysdeps/i386/i686/multiarch/strncase_l-c.c
index 0c68b8d1cb..7e601af271 100644
--- a/sysdeps/i386/i686/multiarch/strncase_l-c.c
+++ b/sysdeps/i386/i686/multiarch/strncase_l-c.c
@@ -6,6 +6,8 @@ extern __typeof (strncasecmp_l) __strncasecmp_l_nonascii;
#define USE_IN_EXTENDED_LOCALE_MODEL 1
#include <string/strncase.c>
+strong_alias (__strncasecmp_l_nonascii, __strncasecmp_l_ia32)
+
/* The needs of strcasecmp in libc are minimal, no need to go through
the IFUNC. */
strong_alias (__strncasecmp_l_nonascii, __GI___strncasecmp_l)
diff --git a/sysdeps/i386/elf/start.S b/sysdeps/i386/start.S
index 992c358c07..990f3715d5 100644
--- a/sysdeps/i386/elf/start.S
+++ b/sysdeps/i386/start.S
@@ -1,6 +1,5 @@
/* Startup code compliant to the ELF i386 ABI.
- Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ Copyright (C) 1995-2012 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
diff --git a/sysdeps/ieee754/dbl-64/Makefile b/sysdeps/ieee754/dbl-64/Makefile
new file mode 100644
index 0000000000..1a7b31158d
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/Makefile
@@ -0,0 +1,4 @@
+ifeq ($(subdir),math)
+# branred depends on precise IEEE double rounding
+CFLAGS-branred.c = $(config-cflags-nofma)
+endif
diff --git a/sysdeps/ieee754/dbl-64/branred.c b/sysdeps/ieee754/dbl-64/branred.c
index 5b19c8ed8f..a32daa990d 100644
--- a/sysdeps/ieee754/dbl-64/branred.c
+++ b/sysdeps/ieee754/dbl-64/branred.c
@@ -35,7 +35,7 @@
#include "endian.h"
#include "mydefs.h"
#include "branred.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/doasin.c b/sysdeps/ieee754/dbl-64/doasin.c
index c48ae364df..c041612b60 100644
--- a/sysdeps/ieee754/dbl-64/doasin.c
+++ b/sysdeps/ieee754/dbl-64/doasin.c
@@ -31,7 +31,7 @@
#include "endian.h"
#include "mydefs.h"
#include <dla.h>
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/dosincos.c b/sysdeps/ieee754/dbl-64/dosincos.c
index c201d28cf0..e472438a95 100644
--- a/sysdeps/ieee754/dbl-64/dosincos.c
+++ b/sysdeps/ieee754/dbl-64/dosincos.c
@@ -36,7 +36,7 @@
#include "mydefs.h"
#include <dla.h>
#include "dosincos.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/e_acosh.c b/sysdeps/ieee754/dbl-64/e_acosh.c
index 6ef10cb84b..b24a6f6459 100644
--- a/sysdeps/ieee754/dbl-64/e_acosh.c
+++ b/sysdeps/ieee754/dbl-64/e_acosh.c
@@ -24,8 +24,8 @@
* acosh(NaN) is NaN without signal.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
one = 1.0,
diff --git a/sysdeps/ieee754/dbl-64/e_asin.c b/sysdeps/ieee754/dbl-64/e_asin.c
index 056650df2e..a9b1bc2165 100644
--- a/sysdeps/ieee754/dbl-64/e_asin.c
+++ b/sysdeps/ieee754/dbl-64/e_asin.c
@@ -39,7 +39,7 @@
#include "powtwo.tbl"
#include "MathLib.h"
#include "uasncs.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/e_atan2.c b/sysdeps/ieee754/dbl-64/e_atan2.c
index d25e3f9c94..497afcab1e 100644
--- a/sysdeps/ieee754/dbl-64/e_atan2.c
+++ b/sysdeps/ieee754/dbl-64/e_atan2.c
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001, 2011 Free Software Foundation
+ * Copyright (C) 2001-2012 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -41,7 +41,7 @@
#include "MathLib.h"
#include "uatan.tbl"
#include "atnat2.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
@@ -153,6 +153,13 @@ __ieee754_atan2(double y,double x) {
/* if either x or y is extremely close to zero, scale abs(x), abs(y). */
if (ax<twom500.d || ay<twom500.d) { ax*=two500.d; ay*=two500.d; }
+ /* Likewise for large x and y. */
+ if (ax > two500.d || ay > two500.d)
+ {
+ ax *= twom500.d;
+ ay *= twom500.d;
+ }
+
/* x,y which are neither special nor extreme */
if (ay<ax) {
u=ay/ax;
diff --git a/sysdeps/ieee754/dbl-64/e_atanh.c b/sysdeps/ieee754/dbl-64/e_atanh.c
index 5f471b1d79..6cec1093c3 100644
--- a/sysdeps/ieee754/dbl-64/e_atanh.c
+++ b/sysdeps/ieee754/dbl-64/e_atanh.c
@@ -36,8 +36,8 @@
*/
#include <inttypes.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double huge = 1e300;
diff --git a/sysdeps/ieee754/dbl-64/e_cosh.c b/sysdeps/ieee754/dbl-64/e_cosh.c
index b9f79e47a9..229d5a2fb3 100644
--- a/sysdeps/ieee754/dbl-64/e_cosh.c
+++ b/sysdeps/ieee754/dbl-64/e_cosh.c
@@ -31,8 +31,8 @@
* only cosh(0)=1 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0, half=0.5, huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c
index cfdb8e2c7d..5deba5e445 100644
--- a/sysdeps/ieee754/dbl-64/e_exp.c
+++ b/sysdeps/ieee754/dbl-64/e_exp.c
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001, 2011 Free Software Foundation
+ * Copyright (C) 2001-2012 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -37,7 +37,8 @@
#include "mydefs.h"
#include "MathLib.h"
#include "uexp.tbl"
-#include "math_private.h"
+#include <math_private.h>
+#include <fenv.h>
#ifndef SECTION
# define SECTION
@@ -58,6 +59,9 @@ __ieee754_exp(double x) {
int4 k;
#endif
int4 i,j,m,n,ex;
+ double retval;
+
+ SET_RESTORE_ROUND (FE_TONEAREST);
junk1.x = x;
m = junk1.i[HIGH_HALF];
@@ -90,18 +94,19 @@ __ieee754_exp(double x) {
rem=(bet + bet*eps)+al*eps;
res = al + rem;
cor = (al - res) + rem;
- if (res == (res+cor*err_0)) return res*binexp.x;
- else return __slowexp(x); /*if error is over bound */
+ if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; }
+ else { retval = __slowexp(x); goto ret; } /*if error is over bound */
}
- if (n <= smallint) return 1.0;
+ if (n <= smallint) { retval = 1.0; goto ret; }
if (n >= badint) {
- if (n > infint) return(x+x); /* x is NaN */
- if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) );
+ if (n > infint) { retval = x+x; goto ret; } /* x is NaN */
+ if (n < infint) { retval = (x>0) ? (hhuge*hhuge) : (tiny*tiny); goto ret; }
/* x is finite, cause either overflow or underflow */
- if (junk1.i[LOW_HALF] != 0) return (x+x); /* x is NaN */
- return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */
+ if (junk1.i[LOW_HALF] != 0) { retval = x+x; goto ret; } /* x is NaN */
+ retval = (x>0)?inf.x:zero; /* |x| = inf; return either inf or 0 */
+ goto ret;
}
y = x*log2e.x + three51.x;
@@ -126,8 +131,8 @@ __ieee754_exp(double x) {
if (res < 1.0) {res+=res; cor+=cor; ex-=1;}
if (ex >=-1022) {
binexp.i[HIGH_HALF] = (1023+ex)<<20;
- if (res == (res+cor*err_0)) return res*binexp.x;
- else return __slowexp(x); /*if error is over bound */
+ if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; }
+ else { retval = __slowexp(x); goto ret; } /*if error is over bound */
}
ex = -(1022+ex);
binexp.i[HIGH_HALF] = (1023-ex)<<20;
@@ -140,15 +145,18 @@ __ieee754_exp(double x) {
cor = (t-res)+y;
if (res == (res + eps*cor))
{ binexp.i[HIGH_HALF] = 0x00100000;
- return (res-1.0)*binexp.x;
+ retval = (res-1.0)*binexp.x;
+ goto ret;
}
- else return __slowexp(x); /* if error is over bound */
+ else { retval = __slowexp(x); goto ret; } /* if error is over bound */
}
else {
binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+767)<<20;
- if (res == (res+cor*err_0)) return res*binexp.x*t256.x;
- else return __slowexp(x);
+ if (res == (res+cor*err_0)) { retval = res*binexp.x*t256.x; goto ret; }
+ else { retval = __slowexp(x); goto ret; }
}
+ ret:
+ return retval;
}
#ifndef __ieee754_exp
strong_alias (__ieee754_exp, __exp_finite)
diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
index 4cf879b7f9..e57ec92116 100644
--- a/sysdeps/ieee754/dbl-64/e_exp2.c
+++ b/sysdeps/ieee754/dbl-64/e_exp2.c
@@ -61,57 +61,56 @@ __ieee754_exp2 (double x)
int tval, unsafe;
double rx, x22, result;
union ieee754_double ex2_u, scale_u;
- fenv_t oldenv;
-
- libc_feholdexcept_setround (&oldenv, FE_TONEAREST);
-
- /* 1. Argument reduction.
- Choose integers ex, -256 <= t < 256, and some real
- -1/1024 <= x1 <= 1024 so that
- x = ex + t/512 + x1.
-
- First, calculate rx = ex + t/512. */
- rx = x + THREEp42;
- rx -= THREEp42;
- x -= rx; /* Compute x=x1. */
- /* Compute tval = (ex*512 + t)+256.
- Now, t = (tval mod 512)-256 and ex=tval/512 [that's mod, NOT %; and
- /-round-to-nearest not the usual c integer /]. */
- tval = (int) (rx * 512.0 + 256.0);
-
- /* 2. Adjust for accurate table entry.
- Find e so that
- x = ex + t/512 + e + x2
- where -1e6 < e < 1e6, and
- (double)(2^(t/512+e))
- is accurate to one part in 2^-64. */
-
- /* 'tval & 511' is the same as 'tval%512' except that it's always
- positive.
- Compute x = x2. */
- x -= exp2_deltatable[tval & 511];
-
- /* 3. Compute ex2 = 2^(t/512+e+ex). */
- ex2_u.d = exp2_accuratetable[tval & 511];
- tval >>= 9;
- unsafe = abs(tval) >= -DBL_MIN_EXP - 1;
- ex2_u.ieee.exponent += tval >> unsafe;
- scale_u.d = 1.0;
- scale_u.ieee.exponent += tval - (tval >> unsafe);
-
- /* 4. Approximate 2^x2 - 1, using a fourth-degree polynomial,
- with maximum error in [-2^-10-2^-30,2^-10+2^-30]
- less than 10^-19. */
-
- x22 = (((.0096181293647031180
- * x + .055504110254308625)
- * x + .240226506959100583)
- * x + .69314718055994495) * ex2_u.d;
- math_opt_barrier (x22);
- /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
- libc_fesetenv (&oldenv);
+ {
+ SET_RESTORE_ROUND_NOEX (FE_TONEAREST);
+
+ /* 1. Argument reduction.
+ Choose integers ex, -256 <= t < 256, and some real
+ -1/1024 <= x1 <= 1024 so that
+ x = ex + t/512 + x1.
+
+ First, calculate rx = ex + t/512. */
+ rx = x + THREEp42;
+ rx -= THREEp42;
+ x -= rx; /* Compute x=x1. */
+ /* Compute tval = (ex*512 + t)+256.
+ Now, t = (tval mod 512)-256 and ex=tval/512 [that's mod, NOT %;
+ and /-round-to-nearest not the usual c integer /]. */
+ tval = (int) (rx * 512.0 + 256.0);
+
+ /* 2. Adjust for accurate table entry.
+ Find e so that
+ x = ex + t/512 + e + x2
+ where -1e6 < e < 1e6, and
+ (double)(2^(t/512+e))
+ is accurate to one part in 2^-64. */
+
+ /* 'tval & 511' is the same as 'tval%512' except that it's always
+ positive.
+ Compute x = x2. */
+ x -= exp2_deltatable[tval & 511];
+
+ /* 3. Compute ex2 = 2^(t/512+e+ex). */
+ ex2_u.d = exp2_accuratetable[tval & 511];
+ tval >>= 9;
+ unsafe = abs(tval) >= -DBL_MIN_EXP - 1;
+ ex2_u.ieee.exponent += tval >> unsafe;
+ scale_u.d = 1.0;
+ scale_u.ieee.exponent += tval - (tval >> unsafe);
+
+ /* 4. Approximate 2^x2 - 1, using a fourth-degree polynomial,
+ with maximum error in [-2^-10-2^-30,2^-10+2^-30]
+ less than 10^-19. */
+
+ x22 = (((.0096181293647031180
+ * x + .055504110254308625)
+ * x + .240226506959100583)
+ * x + .69314718055994495) * ex2_u.d;
+ math_opt_barrier (x22);
+ }
+ /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
result = x22 * x + ex2_u.d;
if (!unsafe)
diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c
index 0328b011d2..b8548fae4b 100644
--- a/sysdeps/ieee754/dbl-64/e_fmod.c
+++ b/sysdeps/ieee754/dbl-64/e_fmod.c
@@ -15,8 +15,8 @@
* Method: shift and subtract
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0, Zero[] = {0.0, -0.0,};
diff --git a/sysdeps/ieee754/dbl-64/e_hypot.c b/sysdeps/ieee754/dbl-64/e_hypot.c
index a89ccaa35e..2dd681cf1a 100644
--- a/sysdeps/ieee754/dbl-64/e_hypot.c
+++ b/sysdeps/ieee754/dbl-64/e_hypot.c
@@ -42,8 +42,8 @@
* than 1 ulps (units in the last place)
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
double
__ieee754_hypot(double x, double y)
diff --git a/sysdeps/ieee754/dbl-64/e_j0.c b/sysdeps/ieee754/dbl-64/e_j0.c
index 48584a60b4..f393a762b2 100644
--- a/sysdeps/ieee754/dbl-64/e_j0.c
+++ b/sysdeps/ieee754/dbl-64/e_j0.c
@@ -58,8 +58,8 @@
* 3. Special cases: y0(0)=-inf, y0(x<0)=NaN, y0(inf)=0.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static double pzero(double), qzero(double);
diff --git a/sysdeps/ieee754/dbl-64/e_j1.c b/sysdeps/ieee754/dbl-64/e_j1.c
index fdc6b5b896..cba4d46b18 100644
--- a/sysdeps/ieee754/dbl-64/e_j1.c
+++ b/sysdeps/ieee754/dbl-64/e_j1.c
@@ -58,8 +58,8 @@
* by method mentioned above.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static double pone(double), qone(double);
diff --git a/sysdeps/ieee754/dbl-64/e_jn.c b/sysdeps/ieee754/dbl-64/e_jn.c
index f8b8e2ee6a..63788c5a24 100644
--- a/sysdeps/ieee754/dbl-64/e_jn.c
+++ b/sysdeps/ieee754/dbl-64/e_jn.c
@@ -36,8 +36,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
invsqrtpi= 5.64189583547756279280e-01, /* 0x3FE20DD7, 0x50429B6D */
diff --git a/sysdeps/ieee754/dbl-64/e_lgamma_r.c b/sysdeps/ieee754/dbl-64/e_lgamma_r.c
index e26ce8a247..af7d06c82f 100644
--- a/sysdeps/ieee754/dbl-64/e_lgamma_r.c
+++ b/sysdeps/ieee754/dbl-64/e_lgamma_r.c
@@ -77,8 +77,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two52= 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
diff --git a/sysdeps/ieee754/dbl-64/e_log.c b/sysdeps/ieee754/dbl-64/e_log.c
index 97657d2941..15f3dccce3 100644
--- a/sysdeps/ieee754/dbl-64/e_log.c
+++ b/sysdeps/ieee754/dbl-64/e_log.c
@@ -38,7 +38,7 @@
#include <dla.h>
#include "mpa.h"
#include "MathLib.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/e_log10.c b/sysdeps/ieee754/dbl-64/e_log10.c
index 6a630bcef7..9fce937085 100644
--- a/sysdeps/ieee754/dbl-64/e_log10.c
+++ b/sysdeps/ieee754/dbl-64/e_log10.c
@@ -43,8 +43,8 @@
* shown.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
diff --git a/sysdeps/ieee754/dbl-64/e_log2.c b/sysdeps/ieee754/dbl-64/e_log2.c
index be41cb4e68..6891ee2389 100644
--- a/sysdeps/ieee754/dbl-64/e_log2.c
+++ b/sysdeps/ieee754/dbl-64/e_log2.c
@@ -54,8 +54,8 @@
* to produce the hexadecimal values shown.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
ln2 = 0.69314718055994530942,
diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
index 28435fd36d..26ffaaddc6 100644
--- a/sysdeps/ieee754/dbl-64/e_pow.c
+++ b/sysdeps/ieee754/dbl-64/e_pow.c
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001, 2002, 2004, 2011 Free Software Foundation
+ * Copyright (C) 2001-2012 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -40,7 +40,8 @@
#include "mydefs.h"
#include "MathLib.h"
#include "upow.tbl"
-#include "math_private.h"
+#include <math_private.h>
+#include <fenv.h>
#ifndef SECTION
# define SECTION
@@ -84,6 +85,10 @@ __ieee754_pow(double x, double y) {
(u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) &&
/* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */
(v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */
+ double retval;
+
+ SET_RESTORE_ROUND (FE_TONEAREST);
+
z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */
t = y*134217729.0;
y1 = t - (t-y);
@@ -97,14 +102,16 @@ __ieee754_pow(double x, double y) {
a2 = (a-a1)+aa;
error = error*ABS(y);
t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */
- return (t>0)?t:power1(x,y);
+ retval = (t>0)?t:power1(x,y);
+
+ return retval;
}
if (x == 0) {
if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0)
|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000)
return y;
- if (ABS(y) > 1.0e20) return (y>0)?0:INF.x;
+ if (ABS(y) > 1.0e20) return (y>0)?0:1.0/ABS(x);
k = checkint(y);
if (k == -1)
return y < 0 ? 1.0/x : x;
diff --git a/sysdeps/ieee754/dbl-64/e_rem_pio2.c b/sysdeps/ieee754/dbl-64/e_rem_pio2.c
index a82b291dd5..4478be0b07 100644
--- a/sysdeps/ieee754/dbl-64/e_rem_pio2.c
+++ b/sysdeps/ieee754/dbl-64/e_rem_pio2.c
@@ -17,8 +17,8 @@
* use __kernel_rem_pio2()
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/*
* Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi
diff --git a/sysdeps/ieee754/dbl-64/e_remainder.c b/sysdeps/ieee754/dbl-64/e_remainder.c
index af4730cf9e..304b45d95f 100644
--- a/sysdeps/ieee754/dbl-64/e_remainder.c
+++ b/sysdeps/ieee754/dbl-64/e_remainder.c
@@ -33,7 +33,7 @@
#include "mydefs.h"
#include "urem.h"
#include "MathLib.h"
-#include "math_private.h"
+#include <math_private.h>
/**************************************************************************/
/* An ultimate remainder routine. Given two IEEE double machine numbers x */
diff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c
index 50463c3048..b954100baa 100644
--- a/sysdeps/ieee754/dbl-64/e_sinh.c
+++ b/sysdeps/ieee754/dbl-64/e_sinh.c
@@ -32,8 +32,8 @@ static char rcsid[] = "$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $";
* only sinh(0)=0 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0, shuge = 1.0e307;
diff --git a/sysdeps/ieee754/dbl-64/e_sqrt.c b/sysdeps/ieee754/dbl-64/e_sqrt.c
index 33fec43d98..3dc64c7d50 100644
--- a/sysdeps/ieee754/dbl-64/e_sqrt.c
+++ b/sysdeps/ieee754/dbl-64/e_sqrt.c
@@ -37,7 +37,7 @@
#include <dla.h>
#include "MathLib.h"
#include "root.tbl"
-#include "math_private.h"
+#include <math_private.h>
/*********************************************************************/
/* An ultimate sqrt routine. Given an IEEE double machine number x */
diff --git a/sysdeps/ieee754/dbl-64/halfulp.c b/sysdeps/ieee754/dbl-64/halfulp.c
index 4ddd109cb6..33c14e1aa0 100644
--- a/sysdeps/ieee754/dbl-64/halfulp.c
+++ b/sysdeps/ieee754/dbl-64/halfulp.c
@@ -37,7 +37,7 @@
#include "endian.h"
#include "mydefs.h"
#include <dla.h>
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
index 53be066e05..fcf956afbe 100644
--- a/sysdeps/ieee754/dbl-64/k_rem_pio2.c
+++ b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
@@ -130,8 +130,8 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $
* to produce the hexadecimal values shown.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const int init_jk[] = {2,3,4,6}; /* initial value for jk */
@@ -273,13 +273,16 @@ recompute:
y[0] = (ih==0)? fw: -fw;
break;
case 1:
- case 2:
- fw = 0.0;
- for (i=jz;i>=0;i--) fw += fq[i];
- y[0] = (ih==0)? fw: -fw;
- fw = fq[0]-fw;
- for (i=1;i<=jz;i++) fw += fq[i];
- y[1] = (ih==0)? fw: -fw;
+ case 2:;
+#if __FLT_EVAL_METHOD__ != 0
+ volatile
+#endif
+ double fv = 0.0;
+ for (i=jz;i>=0;i--) fv += fq[i];
+ y[0] = (ih==0)? fv: -fv;
+ fv = fq[0]-fv;
+ for (i=1;i<=jz;i++) fv += fq[i];
+ y[1] = (ih==0)? fv: -fv;
break;
case 3: /* painful */
for (i=jz;i>0;i--) {
diff --git a/sysdeps/ieee754/dbl-64/k_tan.c b/sysdeps/ieee754/dbl-64/k_tan.c
index 7ef4103bc9..cc5c205a5f 100644
--- a/sysdeps/ieee754/dbl-64/k_tan.c
+++ b/sysdeps/ieee754/dbl-64/k_tan.c
@@ -1,136 +1 @@
-/* @(#)k_tan.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25,
- for performance improvement on pipelined processors.
-*/
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: k_tan.c,v 1.8 1995/05/10 20:46:37 jtc Exp $";
-#endif
-
-/* __kernel_tan( x, y, k )
- * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854
- * Input x is assumed to be bounded by ~pi/4 in magnitude.
- * Input y is the tail of x.
- * Input k indicates whether tan (if k=1) or
- * -1/tan (if k= -1) is returned.
- *
- * Algorithm
- * 1. Since tan(-x) = -tan(x), we need only to consider positive x.
- * 2. if x < 2^-28 (hx<0x3e300000 0), return x with inexact if x!=0.
- * 3. tan(x) is approximated by a odd polynomial of degree 27 on
- * [0,0.67434]
- * 3 27
- * tan(x) ~ x + T1*x + ... + T13*x
- * where
- *
- * |tan(x) 2 4 26 | -59.2
- * |----- - (1+T1*x +T2*x +.... +T13*x )| <= 2
- * | x |
- *
- * Note: tan(x+y) = tan(x) + tan'(x)*y
- * ~ tan(x) + (1+x*x)*y
- * Therefore, for better accuracy in computing tan(x+y), let
- * 3 2 2 2 2
- * r = x *(T2+x *(T3+x *(...+x *(T12+x *T13))))
- * then
- * 3 2
- * tan(x+y) = x + (T1*x + (x *(r+y)+y))
- *
- * 4. For x in [0.67434,pi/4], let y = pi/4 - x, then
- * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y))
- * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y)))
- */
-
-#include "math.h"
-#include "math_private.h"
-static const double
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-pio4 = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */
-pio4lo= 3.06161699786838301793e-17, /* 0x3C81A626, 0x33145C07 */
-T[] = {
- 3.33333333333334091986e-01, /* 0x3FD55555, 0x55555563 */
- 1.33333333333201242699e-01, /* 0x3FC11111, 0x1110FE7A */
- 5.39682539762260521377e-02, /* 0x3FABA1BA, 0x1BB341FE */
- 2.18694882948595424599e-02, /* 0x3F9664F4, 0x8406D637 */
- 8.86323982359930005737e-03, /* 0x3F8226E3, 0xE96E8493 */
- 3.59207910759131235356e-03, /* 0x3F6D6D22, 0xC9560328 */
- 1.45620945432529025516e-03, /* 0x3F57DBC8, 0xFEE08315 */
- 5.88041240820264096874e-04, /* 0x3F4344D8, 0xF2F26501 */
- 2.46463134818469906812e-04, /* 0x3F3026F7, 0x1A8D1068 */
- 7.81794442939557092300e-05, /* 0x3F147E88, 0xA03792A6 */
- 7.14072491382608190305e-05, /* 0x3F12B80F, 0x32F0A7E9 */
- -1.85586374855275456654e-05, /* 0xBEF375CB, 0xDB605373 */
- 2.59073051863633712884e-05, /* 0x3EFB2A70, 0x74BF7AD4 */
-};
-
-double __kernel_tan(double x, double y, int iy)
-{
- double z,r,v,w,s,r1,r2,r3,v1,v2,v3,w2,w4;
- int32_t ix,hx;
- GET_HIGH_WORD(hx,x);
- ix = hx&0x7fffffff; /* high word of |x| */
- if(ix<0x3e300000) /* x < 2**-28 */
- {if((int)x==0) { /* generate inexact */
- u_int32_t low;
- GET_LOW_WORD(low,x);
- if(((ix|low)|(iy+1))==0) return one/fabs(x);
- else return (iy==1)? x: -one/x;
- }
- }
- if(ix>=0x3FE59428) { /* |x|>=0.6744 */
- if(hx<0) {x = -x; y = -y;}
- z = pio4-x;
- w = pio4lo-y;
- x = z+w; y = 0.0;
- }
- z = x*x;
- w = z*z;
- /* Break x^5*(T[1]+x^2*T[2]+...) into
- * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
- * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
- */
-#ifdef DO_NOT_USE_THIS
- r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11]))));
- v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12])))));
-#else
- v1 = T[10]+w*T[12]; w2=w*w;
- v2 = T[6]+w*T[8]; w4=w2*w2;
- v3 = T[2]+w*T[4]; v1=z*v1;
- r1 = T[9]+w*T[11]; v2=z*v2;
- r2 = T[5]+w*T[7]; v3=z*v3;
- r3 = T[1]+w*T[3];
- v = v3 + w2*v2 + w4*v1;
- r = r3 + w2*r2 + w4*r1;
-#endif
- s = z*x;
- r = y + z*(s*(r+v)+y);
- r += T[0]*s;
- w = x+r;
- if(ix>=0x3FE59428) {
- v = (double)iy;
- return (double)(1-((hx>>30)&2))*(v-2.0*(x-(w*w/(w+v)-r)));
- }
- if(iy==1) return w;
- else { /* if allow error up to 2 ulp,
- simply return -1.0/(x+r) here */
- /* compute -1.0/(x+r) accurately */
- double a,t;
- z = w;
- SET_LOW_WORD(z,0);
- v = r-(z - x); /* z+v = r+x */
- t = a = -1.0/w; /* a = -1.0/w */
- SET_LOW_WORD(t,0);
- s = 1.0+t*z;
- return t+a*(s+t*v);
- }
-}
+/* Not needed anymore. */
diff --git a/sysdeps/ieee754/dbl-64/s_asinh.c b/sysdeps/ieee754/dbl-64/s_asinh.c
index 93789fb41e..68e854f5f4 100644
--- a/sysdeps/ieee754/dbl-64/s_asinh.c
+++ b/sysdeps/ieee754/dbl-64/s_asinh.c
@@ -21,8 +21,8 @@
* := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2)))
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
diff --git a/sysdeps/ieee754/dbl-64/s_atan.c b/sysdeps/ieee754/dbl-64/s_atan.c
index 545b818dcb..4e125deb45 100644
--- a/sysdeps/ieee754/dbl-64/s_atan.c
+++ b/sysdeps/ieee754/dbl-64/s_atan.c
@@ -41,7 +41,7 @@
#include "MathLib.h"
#include "uatan.tbl"
#include "atnat.h"
-#include "math.h"
+#include <math.h>
void __mpatan(mp_no *,mp_no *,int); /* see definition in mpatan.c */
static double atanMp(double,const int[]);
diff --git a/sysdeps/ieee754/dbl-64/s_cbrt.c b/sysdeps/ieee754/dbl-64/s_cbrt.c
index 114b862fcf..30bd3a630d 100644
--- a/sysdeps/ieee754/dbl-64/s_cbrt.c
+++ b/sysdeps/ieee754/dbl-64/s_cbrt.c
@@ -18,8 +18,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#define CBRT2 1.2599210498948731648 /* 2^(1/3) */
diff --git a/sysdeps/ieee754/dbl-64/s_ceil.c b/sysdeps/ieee754/dbl-64/s_ceil.c
index de50e29bf2..e048c81c20 100644
--- a/sysdeps/ieee754/dbl-64/s_ceil.c
+++ b/sysdeps/ieee754/dbl-64/s_ceil.c
@@ -19,8 +19,8 @@
* Inexact flag raised if x not equal to ceil(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/s_copysign.c b/sysdeps/ieee754/dbl-64/s_copysign.c
index 63f3bd3ccc..a541ceb05d 100644
--- a/sysdeps/ieee754/dbl-64/s_copysign.c
+++ b/sysdeps/ieee754/dbl-64/s_copysign.c
@@ -20,8 +20,8 @@ static char rcsid[] = "$NetBSD: s_copysign.c,v 1.8 1995/05/10 20:46:57 jtc Exp $
* with the sign bit of y.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
double __copysign(double x, double y)
{
diff --git a/sysdeps/ieee754/dbl-64/s_erf.c b/sysdeps/ieee754/dbl-64/s_erf.c
index 97d7e34ffa..e25e28d9d5 100644
--- a/sysdeps/ieee754/dbl-64/s_erf.c
+++ b/sysdeps/ieee754/dbl-64/s_erf.c
@@ -112,8 +112,8 @@ static char rcsid[] = "$NetBSD: s_erf.c,v 1.8 1995/05/10 20:47:05 jtc Exp $";
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
tiny = 1e-300,
diff --git a/sysdeps/ieee754/dbl-64/s_expm1.c b/sysdeps/ieee754/dbl-64/s_expm1.c
index 589128c08c..1a4bcd979a 100644
--- a/sysdeps/ieee754/dbl-64/s_expm1.c
+++ b/sysdeps/ieee754/dbl-64/s_expm1.c
@@ -109,8 +109,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#define one Q[0]
static const double
huge = 1.0e+300,
diff --git a/sysdeps/ieee754/dbl-64/s_fabs.c b/sysdeps/ieee754/dbl-64/s_fabs.c
index 6dca1dec06..86f1d52be6 100644
--- a/sysdeps/ieee754/dbl-64/s_fabs.c
+++ b/sysdeps/ieee754/dbl-64/s_fabs.c
@@ -18,8 +18,8 @@ static char rcsid[] = "$NetBSD: s_fabs.c,v 1.7 1995/05/10 20:47:13 jtc Exp $";
* fabs(x) returns the absolute value of x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
double __fabs(double x)
{
diff --git a/sysdeps/ieee754/dbl-64/s_finite.c b/sysdeps/ieee754/dbl-64/s_finite.c
index cf3d8d8914..47dad5df2c 100644
--- a/sysdeps/ieee754/dbl-64/s_finite.c
+++ b/sysdeps/ieee754/dbl-64/s_finite.c
@@ -19,8 +19,8 @@ static char rcsid[] = "$NetBSD: s_finite.c,v 1.8 1995/05/10 20:47:17 jtc Exp $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __finite
int __finite(double x)
diff --git a/sysdeps/ieee754/dbl-64/s_floor.c b/sysdeps/ieee754/dbl-64/s_floor.c
index 139e2f5cb5..5c7297842c 100644
--- a/sysdeps/ieee754/dbl-64/s_floor.c
+++ b/sysdeps/ieee754/dbl-64/s_floor.c
@@ -19,8 +19,8 @@
* Inexact flag raised if x not equal to floor(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
index a27e246a49..ab20a801a4 100644
--- a/sysdeps/ieee754/dbl-64/s_fma.c
+++ b/sysdeps/ieee754/dbl-64/s_fma.c
@@ -149,35 +149,36 @@ __fma (double x, double y, double z)
fenv_t env;
libc_feholdexcept_setround (&env, FE_TOWARDZERO);
+
/* Perform m2 + a2 addition with round to odd. */
u.d = a2 + m2;
+ if (__builtin_expect (adjust < 0, 0))
+ {
+ if ((u.ieee.mantissa1 & 1) == 0)
+ u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0;
+ v.d = a1 + u.d;
+ }
+
+ /* Reset rounding mode and test for inexact simultaneously. */
+ int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0;
+
if (__builtin_expect (adjust == 0, 1))
{
if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
- u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0;
- libc_feupdateenv (&env);
+ u.ieee.mantissa1 |= j;
/* Result is a1 + u.d. */
return a1 + u.d;
}
else if (__builtin_expect (adjust > 0, 1))
{
if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
- u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0;
- libc_feupdateenv (&env);
+ u.ieee.mantissa1 |= j;
/* Result is a1 + u.d, scaled up. */
return (a1 + u.d) * 0x1p53;
}
else
{
- if ((u.ieee.mantissa1 & 1) == 0)
- u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0;
- v.d = a1 + u.d;
- int j = libc_fetestexcept (FE_INEXACT) != 0;
- libc_feupdateenv (&env);
- /* Ensure the following computations are performed in default rounding
- mode instead of just reusing the round to zero computation. */
- asm volatile ("" : "=m" (u) : "m" (u));
/* If a1 + u.d is exact, the only rounding happens during
scaling down. */
if (j == 0)
diff --git a/sysdeps/ieee754/dbl-64/s_fmaf.c b/sysdeps/ieee754/dbl-64/s_fmaf.c
index 00cd38270f..7a939aaed1 100644
--- a/sysdeps/ieee754/dbl-64/s_fmaf.c
+++ b/sysdeps/ieee754/dbl-64/s_fmaf.c
@@ -35,12 +35,18 @@ __fmaf (float x, float y, float z)
/* Multiplication is always exact. */
double temp = (double) x * (double) y;
union ieee754_double u;
- libc_feholdexcept_setroundf (&env, FE_TOWARDZERO);
+
+ libc_feholdexcept_setround (&env, FE_TOWARDZERO);
+
/* Perform addition with round to odd. */
u.d = temp + (double) z;
+
+ /* Reset rounding mode and test for inexact simultaneously. */
+ int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0;
+
if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
- u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0;
- libc_feupdateenv (&env);
+ u.ieee.mantissa1 |= j;
+
/* And finally truncation with round to nearest. */
return (float) u.d;
}
diff --git a/sysdeps/ieee754/dbl-64/s_fpclassify.c b/sysdeps/ieee754/dbl-64/s_fpclassify.c
index 311b814c40..4884b377f8 100644
--- a/sysdeps/ieee754/dbl-64/s_fpclassify.c
+++ b/sysdeps/ieee754/dbl-64/s_fpclassify.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
diff --git a/sysdeps/ieee754/dbl-64/s_frexp.c b/sysdeps/ieee754/dbl-64/s_frexp.c
index e927274178..516f561a17 100644
--- a/sysdeps/ieee754/dbl-64/s_frexp.c
+++ b/sysdeps/ieee754/dbl-64/s_frexp.c
@@ -24,8 +24,8 @@ static char rcsid[] = "$NetBSD: s_frexp.c,v 1.9 1995/05/10 20:47:24 jtc Exp $";
* with *exp=0.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two54 = 1.80143985094819840000e+16; /* 0x43500000, 0x00000000 */
diff --git a/sysdeps/ieee754/dbl-64/s_ilogb.c b/sysdeps/ieee754/dbl-64/s_ilogb.c
index a2395a10a2..05c66d70fe 100644
--- a/sysdeps/ieee754/dbl-64/s_ilogb.c
+++ b/sysdeps/ieee754/dbl-64/s_ilogb.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: s_ilogb.c,v 1.9 1995/05/10 20:47:28 jtc Exp $";
*/
#include <limits.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __ilogb(double x)
{
diff --git a/sysdeps/ieee754/dbl-64/s_isinf.c b/sysdeps/ieee754/dbl-64/s_isinf.c
index 24b29ae013..886b346f51 100644
--- a/sysdeps/ieee754/dbl-64/s_isinf.c
+++ b/sysdeps/ieee754/dbl-64/s_isinf.c
@@ -13,8 +13,8 @@ static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinf (double x)
diff --git a/sysdeps/ieee754/dbl-64/s_isinf_ns.c b/sysdeps/ieee754/dbl-64/s_isinf_ns.c
index 065522ed80..0ce50352c7 100644
--- a/sysdeps/ieee754/dbl-64/s_isinf_ns.c
+++ b/sysdeps/ieee754/dbl-64/s_isinf_ns.c
@@ -7,8 +7,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __isinf_ns
int
diff --git a/sysdeps/ieee754/dbl-64/s_isnan.c b/sysdeps/ieee754/dbl-64/s_isnan.c
index c87eb69b18..f8958dcbbf 100644
--- a/sysdeps/ieee754/dbl-64/s_isnan.c
+++ b/sysdeps/ieee754/dbl-64/s_isnan.c
@@ -19,8 +19,8 @@ static char rcsid[] = "$NetBSD: s_isnan.c,v 1.8 1995/05/10 20:47:36 jtc Exp $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __isnan
int __isnan(double x)
diff --git a/sysdeps/ieee754/dbl-64/s_llrint.c b/sysdeps/ieee754/dbl-64/s_llrint.c
index b80fdb6dde..5bb50090cd 100644
--- a/sysdeps/ieee754/dbl-64/s_llrint.c
+++ b/sysdeps/ieee754/dbl-64/s_llrint.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const double two52[2] =
{
diff --git a/sysdeps/ieee754/dbl-64/s_llround.c b/sysdeps/ieee754/dbl-64/s_llround.c
index 6d931062e0..89516bae59 100644
--- a/sysdeps/ieee754/dbl-64/s_llround.c
+++ b/sysdeps/ieee754/dbl-64/s_llround.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long long int
diff --git a/sysdeps/ieee754/dbl-64/s_log1p.c b/sysdeps/ieee754/dbl-64/s_log1p.c
index f82048f204..e3e6860966 100644
--- a/sysdeps/ieee754/dbl-64/s_log1p.c
+++ b/sysdeps/ieee754/dbl-64/s_log1p.c
@@ -78,8 +78,8 @@
* See HP-15C Advanced Functions Handbook, p.193.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
diff --git a/sysdeps/ieee754/dbl-64/s_logb.c b/sysdeps/ieee754/dbl-64/s_logb.c
index 46743c0cbf..2382fbb414 100644
--- a/sysdeps/ieee754/dbl-64/s_logb.c
+++ b/sysdeps/ieee754/dbl-64/s_logb.c
@@ -20,8 +20,8 @@ static char rcsid[] = "$NetBSD: s_logb.c,v 1.8 1995/05/10 20:47:50 jtc Exp $";
* Use ilogb instead.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
double __logb(double x)
{
diff --git a/sysdeps/ieee754/dbl-64/s_lrint.c b/sysdeps/ieee754/dbl-64/s_lrint.c
index 61dc164ac2..d1561bfd25 100644
--- a/sysdeps/ieee754/dbl-64/s_lrint.c
+++ b/sysdeps/ieee754/dbl-64/s_lrint.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const double two52[2] =
{
diff --git a/sysdeps/ieee754/dbl-64/s_lround.c b/sysdeps/ieee754/dbl-64/s_lround.c
index 523cc7c6a5..4cb9ca42f4 100644
--- a/sysdeps/ieee754/dbl-64/s_lround.c
+++ b/sysdeps/ieee754/dbl-64/s_lround.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long int
diff --git a/sysdeps/ieee754/dbl-64/s_modf.c b/sysdeps/ieee754/dbl-64/s_modf.c
index a884de5d5f..b9911c1af6 100644
--- a/sysdeps/ieee754/dbl-64/s_modf.c
+++ b/sysdeps/ieee754/dbl-64/s_modf.c
@@ -19,8 +19,8 @@
* No exception.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0;
diff --git a/sysdeps/ieee754/dbl-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/s_nearbyint.c
index 184fa70177..60afafdedd 100644
--- a/sysdeps/ieee754/dbl-64/s_nearbyint.c
+++ b/sysdeps/ieee754/dbl-64/s_nearbyint.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: s_rint.c,v 1.8 1995/05/10 20:48:04 jtc Exp $";
*/
#include <fenv.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
TWO52[2]={
@@ -38,18 +38,12 @@ double __nearbyint(double x)
{
fenv_t env;
int32_t i0,j0,sx;
- u_int32_t i,i1;
double w,t;
- EXTRACT_WORDS(i0,i1,x);
+ GET_HIGH_WORD(i0,x);
sx = (i0>>31)&1;
j0 = ((i0>>20)&0x7ff)-0x3ff;
- if(j0<20) {
+ if(j0<52) {
if(j0<0) {
- if(((i0&0x7fffffff)|i1)==0) return x;
- i1 |= (i0&0x0fffff);
- i0 &= 0xfffe0000;
- i0 |= ((i1|-i1)>>12)&0x80000;
- SET_HIGH_WORD(x,i0);
feholdexcept (&env);
w = TWO52[sx]+x;
t = w-TWO52[sx];
@@ -57,32 +51,11 @@ double __nearbyint(double x)
GET_HIGH_WORD(i0,t);
SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
return t;
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if (j0==19)
- i1 = 0x40000000;
- else if (j0<18)
- i0 = (i0&(~i))|((0x20000)>>j0);
- else
- {
- i0 &= ~i;
- i1 = 0x80000000;
- }
- }
}
- } else if (j0>51) {
+ } else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
}
- INSERT_WORDS(x,i0,i1);
feholdexcept (&env);
w = TWO52[sx]+x;
t = w-TWO52[sx];
diff --git a/sysdeps/ieee754/dbl-64/s_remquo.c b/sysdeps/ieee754/dbl-64/s_remquo.c
index 4498c564da..174dde40f8 100644
--- a/sysdeps/ieee754/dbl-64/s_remquo.c
+++ b/sysdeps/ieee754/dbl-64/s_remquo.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const double zero = 0.0;
diff --git a/sysdeps/ieee754/dbl-64/s_rint.c b/sysdeps/ieee754/dbl-64/s_rint.c
index a671a6277e..8458909165 100644
--- a/sysdeps/ieee754/dbl-64/s_rint.c
+++ b/sysdeps/ieee754/dbl-64/s_rint.c
@@ -20,8 +20,8 @@
* Inexact flag raised if x not equal to rint(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
TWO52[2]={
@@ -33,49 +33,22 @@ double
__rint(double x)
{
int32_t i0,j0,sx;
- u_int32_t i,i1;
double w,t;
- EXTRACT_WORDS(i0,i1,x);
+ GET_HIGH_WORD(i0,x);
sx = (i0>>31)&1;
j0 = ((i0>>20)&0x7ff)-0x3ff;
- if(j0<20) {
+ if(j0<52) {
if(j0<0) {
- if(((i0&0x7fffffff)|i1)==0) return x;
- i1 |= (i0&0x0fffff);
- i0 &= 0xfffe0000;
- i0 |= ((i1|-i1)>>12)&0x80000;
- SET_HIGH_WORD(x,i0);
w = TWO52[sx]+x;
t = w-TWO52[sx];
GET_HIGH_WORD(i0,t);
SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
return t;
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if (j0==19)
- i1 = 0x40000000;
- else if (j0<18)
- i0 = (i0&(~i))|((0x20000)>>j0);
- else
- {
- i0 &= ~i;
- i1 = 0x80000000;
- }
- }
}
- } else if (j0>51) {
+ } else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
}
- INSERT_WORDS(x,i0,i1);
w = TWO52[sx]+x;
return w-TWO52[sx];
}
diff --git a/sysdeps/ieee754/dbl-64/s_round.c b/sysdeps/ieee754/dbl-64/s_round.c
index 12b0b3749f..046d5863ad 100644
--- a/sysdeps/ieee754/dbl-64/s_round.c
+++ b/sysdeps/ieee754/dbl-64/s_round.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const double huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/s_scalbln.c b/sysdeps/ieee754/dbl-64/s_scalbln.c
index 89174b47fb..271a24c3ea 100644
--- a/sysdeps/ieee754/dbl-64/s_scalbln.c
+++ b/sysdeps/ieee754/dbl-64/s_scalbln.c
@@ -16,8 +16,8 @@
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
@@ -38,11 +38,13 @@ __scalbln (double x, long int n)
k = ((hx&0x7ff00000)>>20) - 54;
}
if (__builtin_expect(k==0x7ff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0x7fe, 0))
- return huge*__copysign(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysign(tiny,x); /*underflow*/
+ if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0))
+ return huge*__copysign(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
if (k <= -54)
diff --git a/sysdeps/ieee754/dbl-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/s_scalbn.c
index 1e67dbe5eb..1f302557ef 100644
--- a/sysdeps/ieee754/dbl-64/s_scalbn.c
+++ b/sysdeps/ieee754/dbl-64/s_scalbn.c
@@ -16,8 +16,8 @@
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
@@ -38,11 +38,13 @@ __scalbn (double x, int n)
k = ((hx&0x7ff00000)>>20) - 54;
}
if (__builtin_expect(k==0x7ff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0x7fe, 0))
- return huge*__copysign(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysign(tiny,x); /*underflow*/
+ if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0))
+ return huge*__copysign(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
if (k <= -54)
diff --git a/sysdeps/ieee754/dbl-64/s_signbit.c b/sysdeps/ieee754/dbl-64/s_signbit.c
index c893ad36d1..3e576f7a31 100644
--- a/sysdeps/ieee754/dbl-64/s_signbit.c
+++ b/sysdeps/ieee754/dbl-64/s_signbit.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
__signbit (double x)
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
index 5b79854004..7b9252f81e 100644
--- a/sysdeps/ieee754/dbl-64/s_sin.c
+++ b/sysdeps/ieee754/dbl-64/s_sin.c
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001, 2009, 2011 Free Software Foundation
+ * Copyright (C) 2001-2012 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -52,7 +52,8 @@
#include "mydefs.h"
#include "usncs.h"
#include "MathLib.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <fenv.h>
#ifndef SECTION
# define SECTION
@@ -107,12 +108,15 @@ __sin(double x){
#if 0
int4 nn;
#endif
+ double retval = 0;
+
+ SET_RESTORE_ROUND_53BIT (FE_TONEAREST);
u.x = x;
m = u.i[HIGH_HALF];
k = 0x7fffffff&m; /* no sign */
if (k < 0x3e500000) /* if x->0 =>sin(x)=x */
- return x;
+ { retval = x; goto ret; }
/*---------------------------- 2^-26 < |x|< 0.25 ----------------------*/
else if (k < 0x3fd00000){
xx = x*x;
@@ -120,7 +124,8 @@ __sin(double x){
t = ((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*(xx*x);
res = x+t;
cor = (x-res)+t;
- return (res == res + 1.07*cor)? res : slow(x);
+ retval = (res == res + 1.07*cor)? res : slow(x);
+ goto ret;
} /* else if (k < 0x3fd00000) */
/*---------------------------- 0.25<|x|< 0.855469---------------------- */
else if (k < 0x3feb6000) {
@@ -137,7 +142,8 @@ __sin(double x){
cor=(ssn+s*ccs-sn*c)+cs*s;
res=sn+cor;
cor=(sn-res)+cor;
- return (res==res+1.096*cor)? res : slow1(x);
+ retval = (res==res+1.096*cor)? res : slow1(x);
+ goto ret;
} /* else if (k < 0x3feb6000) */
/*----------------------- 0.855469 <|x|<2.426265 ----------------------*/
@@ -163,7 +169,8 @@ __sin(double x){
cor=(ccs-s*ssn-cs*c)-sn*s;
res=cs+cor;
cor=(cs-res)+cor;
- return (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x);
+ retval = (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x);
+ goto ret;
} /* else if (k < 0x400368fd) */
/*-------------------------- 2.426265<|x|< 105414350 ----------------------*/
@@ -189,7 +196,8 @@ __sin(double x){
res = a+t;
cor = (a-res)+t;
cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
- return (res == res + cor)? res : sloww(a,da,x);
+ retval = (res == res + cor)? res : sloww(a,da,x);
+ goto ret;
}
else {
if (a>0)
@@ -210,7 +218,8 @@ __sin(double x){
res=sn+cor;
cor=(sn-res)+cor;
cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
- return (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x);
+ retval = (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x);
+ goto ret;
}
break;
@@ -232,7 +241,8 @@ __sin(double x){
res=cs+cor;
cor=(cs-res)+cor;
cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
- return (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n);
+ retval = (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n);
+ goto ret;
break;
@@ -268,7 +278,8 @@ __sin(double x){
res = a+t;
cor = (a-res)+t;
cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
- return (res == res + cor)? res : bsloww(a,da,x,n);
+ retval = (res == res + cor)? res : bsloww(a,da,x,n);
+ goto ret;
}
else {
if (a>0) {m=1;t=a;db=da;}
@@ -287,7 +298,8 @@ __sin(double x){
res=sn+cor;
cor=(sn-res)+cor;
cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
- return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
+ retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
+ goto ret;
}
break;
@@ -309,7 +321,8 @@ __sin(double x){
res=cs+cor;
cor=(cs-res)+cor;
cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
- return (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n);
+ retval = (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n);
+ goto ret;
break;
@@ -323,17 +336,20 @@ __sin(double x){
n = __branred(x,&a,&da);
switch (n) {
case 0:
- if (a*a < 0.01588) return bsloww(a,da,x,n);
- else return bsloww1(a,da,x,n);
+ if (a*a < 0.01588) retval = bsloww(a,da,x,n);
+ else retval = bsloww1(a,da,x,n);
+ goto ret;
break;
case 2:
- if (a*a < 0.01588) return bsloww(-a,-da,x,n);
- else return bsloww1(-a,-da,x,n);
+ if (a*a < 0.01588) retval = bsloww(-a,-da,x,n);
+ else retval = bsloww1(-a,-da,x,n);
+ goto ret;
break;
case 1:
case 3:
- return bsloww2(a,da,x,n);
+ retval = bsloww2(a,da,x,n);
+ goto ret;
break;
}
@@ -343,9 +359,12 @@ __sin(double x){
else {
if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
__set_errno (EDOM);
- return x / x;
+ retval = x / x;
+ goto ret;
}
- return 0; /* unreachable */
+
+ ret:
+ return retval;
}
@@ -362,11 +381,15 @@ __cos(double x)
mynumber u,v;
int4 k,m,n;
+ double retval = 0;
+
+ SET_RESTORE_ROUND_53BIT (FE_TONEAREST);
+
u.x = x;
m = u.i[HIGH_HALF];
k = 0x7fffffff&m;
- if (k < 0x3e400000 ) return 1.0; /* |x|<2^-27 => cos(x)=1 */
+ if (k < 0x3e400000 ) { retval = 1.0; goto ret; } /* |x|<2^-27 => cos(x)=1 */
else if (k < 0x3feb6000 ) {/* 2^-27 < |x| < 0.855469 */
y=ABS(x);
@@ -383,7 +406,8 @@ __cos(double x)
cor=(ccs-s*ssn-cs*c)-sn*s;
res=cs+cor;
cor=(cs-res)+cor;
- return (res==res+1.020*cor)? res : cslow2(x);
+ retval = (res==res+1.020*cor)? res : cslow2(x);
+ goto ret;
} /* else if (k < 0x3feb6000) */
@@ -397,7 +421,8 @@ __cos(double x)
res = a+t;
cor = (a-res)+t;
cor = (cor>0)? 1.02*cor+1.0e-31 : 1.02*cor -1.0e-31;
- return (res == res + cor)? res : csloww(a,da,x);
+ retval = (res == res + cor)? res : csloww(a,da,x);
+ goto ret;
}
else {
if (a>0) {m=1;t=a;db=da;}
@@ -416,7 +441,8 @@ __cos(double x)
res=sn+cor;
cor=(sn-res)+cor;
cor = (cor>0)? 1.035*cor+1.0e-31 : 1.035*cor-1.0e-31;
- return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
+ retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
+ goto ret;
}
} /* else if (k < 0x400368fd) */
@@ -443,7 +469,8 @@ __cos(double x)
res = a+t;
cor = (a-res)+t;
cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
- return (res == res + cor)? res : csloww(a,da,x);
+ retval = (res == res + cor)? res : csloww(a,da,x);
+ goto ret;
}
else {
if (a>0) {m=1;t=a;db=da;}
@@ -462,7 +489,8 @@ __cos(double x)
res=sn+cor;
cor=(sn-res)+cor;
cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
- return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
+ retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
+ goto ret;
}
break;
@@ -483,7 +511,8 @@ __cos(double x)
res=cs+cor;
cor=(cs-res)+cor;
cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
- return (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n);
+ retval = (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n);
+ goto ret;
break;
@@ -518,7 +547,8 @@ __cos(double x)
res = a+t;
cor = (a-res)+t;
cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
- return (res == res + cor)? res : bsloww(a,da,x,n);
+ retval = (res == res + cor)? res : bsloww(a,da,x,n);
+ goto ret;
}
else {
if (a>0) {m=1;t=a;db=da;}
@@ -537,7 +567,8 @@ __cos(double x)
res=sn+cor;
cor=(sn-res)+cor;
cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
- return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
+ retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
+ goto ret;
}
break;
@@ -558,7 +589,8 @@ __cos(double x)
res=cs+cor;
cor=(cs-res)+cor;
cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
- return (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n);
+ retval = (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n);
+ goto ret;
break;
}
@@ -570,17 +602,20 @@ __cos(double x)
n = __branred(x,&a,&da);
switch (n) {
case 1:
- if (a*a < 0.01588) return bsloww(-a,-da,x,n);
- else return bsloww1(-a,-da,x,n);
+ if (a*a < 0.01588) retval = bsloww(-a,-da,x,n);
+ else retval = bsloww1(-a,-da,x,n);
+ goto ret;
break;
case 3:
- if (a*a < 0.01588) return bsloww(a,da,x,n);
- else return bsloww1(a,da,x,n);
+ if (a*a < 0.01588) retval = bsloww(a,da,x,n);
+ else retval = bsloww1(a,da,x,n);
+ goto ret;
break;
case 0:
case 2:
- return bsloww2(a,da,x,n);
+ retval = bsloww2(a,da,x,n);
+ goto ret;
break;
}
@@ -592,10 +627,12 @@ __cos(double x)
else {
if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
__set_errno (EDOM);
- return x / x; /* |x| > 2^1024 */
+ retval = x / x; /* |x| > 2^1024 */
+ goto ret;
}
- return 0;
+ ret:
+ return retval;
}
/************************************************************************/
diff --git a/sysdeps/ieee754/dbl-64/s_sincos.c b/sysdeps/ieee754/dbl-64/s_sincos.c
index 73258b352b..4d55c71dad 100644
--- a/sysdeps/ieee754/dbl-64/s_sincos.c
+++ b/sysdeps/ieee754/dbl-64/s_sincos.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
void
diff --git a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c
index 962a4eba6b..f8507eaa4c 100644
--- a/sysdeps/ieee754/dbl-64/s_tan.c
+++ b/sysdeps/ieee754/dbl-64/s_tan.c
@@ -38,7 +38,9 @@
#include <dla.h>
#include "mpa.h"
#include "MathLib.h"
-#include "math.h"
+#include <math.h>
+#include <math_private.h>
+#include <fenv.h>
#ifndef SECTION
# define SECTION
@@ -66,21 +68,26 @@ tan(double x) {
mp_no mpy;
#endif
+ double retval;
+
int __branred(double, double *, double *);
int __mpranred(double, mp_no *, int);
+ SET_RESTORE_ROUND_53BIT (FE_TONEAREST);
+
/* x=+-INF, x=NaN */
num.d = x; ux = num.i[HIGH_HALF];
if ((ux&0x7ff00000)==0x7ff00000) {
if ((ux&0x7fffffff)==0x7ff00000)
__set_errno (EDOM);
- return x-x;
+ retval = x-x;
+ goto ret;
}
w=(x<ZERO) ? -x : x;
/* (I) The case abs(x) <= 1.259e-8 */
- if (w<=g1.d) return x;
+ if (w<=g1.d) { retval = x; goto ret; }
/* (II) The case 1.259e-8 < abs(x) <= 0.0608 */
if (w<=g2.d) {
@@ -88,7 +95,7 @@ tan(double x) {
/* First stage */
x2 = x*x;
t2 = x*x2*(d3.d+x2*(d5.d+x2*(d7.d+x2*(d9.d+x2*d11.d))));
- if ((y=x+(t2-u1.d*t2)) == x+(t2+u1.d*t2)) return y;
+ if ((y=x+(t2-u1.d*t2)) == x+(t2+u1.d*t2)) { retval = y; goto ret; }
/* Second stage */
c1 = x2*(a15.d+x2*(a17.d+x2*(a19.d+x2*(a21.d+x2*(a23.d+x2*(a25.d+
@@ -108,8 +115,9 @@ tan(double x) {
MUL2(x2,xx2,c2,cc2,c1,cc1,t1,t2,t3,t4,t5,t6,t7,t8)
MUL2(x ,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8)
ADD2(x ,zero.d,c2,cc2,c1,cc1,t1,t2)
- if ((y=c1+(cc1-u2.d*c1)) == c1+(cc1+u2.d*c1)) return y;
- return tanMp(x);
+ if ((y=c1+(cc1-u2.d*c1)) == c1+(cc1+u2.d*c1)) { retval = y; goto ret; }
+ retval = tanMp(x);
+ goto ret;
}
/* (III) The case 0.0608 < abs(x) <= 0.787 */
@@ -120,10 +128,10 @@ tan(double x) {
z = w-xfg[i][0].d; z2 = z*z; s = (x<ZERO) ? MONE : ONE;
pz = z+z*z2*(e0.d+z2*e1.d);
fi = xfg[i][1].d; gi = xfg[i][2].d; t2 = pz*(gi+fi)/(gi-pz);
- if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) return (s*y);
+ if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) { retval = (s*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = fi*ua3.d+t3*ub3.d;
- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (s*y);
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (s*y); goto ret; }
/* Second stage */
ffi = xfg[i][3].d;
@@ -141,8 +149,9 @@ tan(double x) {
SUB2(one.d,zero.d,c3,cc3,c1,cc1,t1,t2)
DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u4.d*c3))==c3+(cc3+u4.d*c3)) return (s*y);
- return tanMp(x);
+ if ((y=c3+(cc3-u4.d*c3))==c3+(cc3+u4.d*c3)) { retval = (s*y); goto ret; }
+ retval = tanMp(x);
+ goto ret;
}
/* (---) The case 0.787 < abs(x) <= 25 */
@@ -160,7 +169,7 @@ tan(double x) {
else {ya= a; yya= da; sy= ONE;}
/* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */
- if (ya<=gy1.d) return tanMp(x);
+ if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
/* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */
if (ya<=gy2.d) {
@@ -170,10 +179,10 @@ tan(double x) {
/* First stage -cot */
EADD(a,t2,b,db)
DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c+(dc-u6.d*c))==c+(dc+u6.d*c)) return (-y); }
+ if ((y=c+(dc-u6.d*c))==c+(dc+u6.d*c)) { retval = (-y); goto ret; } }
else {
/* First stage tan */
- if ((y=a+(t2-u5.d*a))==a+(t2+u5.d*a)) return y; }
+ if ((y=a+(t2-u5.d*a))==a+(t2+u5.d*a)) { retval = y; goto ret; } }
/* Second stage */
/* Range reduction by algorithm ii */
t = (x*hpinv.d + toint.d);
@@ -211,11 +220,12 @@ tan(double x) {
if (n) {
/* Second stage -cot */
DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c2+(cc2-u8.d*c2)) == c2+(cc2+u8.d*c2)) return (-y); }
+ if ((y=c2+(cc2-u8.d*c2)) == c2+(cc2+u8.d*c2)) { retval = (-y); goto ret; } }
else {
/* Second stage tan */
- if ((y=c1+(cc1-u7.d*c1)) == c1+(cc1+u7.d*c1)) return y; }
- return tanMp(x);
+ if ((y=c1+(cc1-u7.d*c1)) == c1+(cc1+u7.d*c1)) { retval = y; goto ret; } }
+ retval = tanMp(x);
+ goto ret;
}
/* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */
@@ -229,17 +239,17 @@ tan(double x) {
if (n) {
/* -cot */
t2 = pz*(fi+gi)/(fi+pz);
- if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) return (-sy*y);
+ if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) { retval = (-sy*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = gi*ua10.d+t3*ub10.d;
- if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
+ if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
else {
/* tan */
t2 = pz*(gi+fi)/(gi-pz);
- if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) return (sy*y);
+ if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) { retval = (sy*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = fi*ua9.d+t3*ub9.d;
- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
/* Second stage */
ffi = xfg[i][3].d;
@@ -260,13 +270,14 @@ tan(double x) {
if (n) {
/* -cot */
DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u12.d*c3))==c3+(cc3+u12.d*c3)) return (-sy*y); }
+ if ((y=c3+(cc3-u12.d*c3))==c3+(cc3+u12.d*c3)) { retval = (-sy*y); goto ret; } }
else {
/* tan */
DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u11.d*c3))==c3+(cc3+u11.d*c3)) return (sy*y); }
+ if ((y=c3+(cc3-u11.d*c3))==c3+(cc3+u11.d*c3)) { retval = (sy*y); goto ret; } }
- return tanMp(x);
+ retval = tanMp(x);
+ goto ret;
}
/* (---) The case 25 < abs(x) <= 1e8 */
@@ -288,7 +299,7 @@ tan(double x) {
else {ya= a; yya= da; sy= ONE;}
/* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */
- if (ya<=gy1.d) return tanMp(x);
+ if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
/* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */
if (ya<=gy2.d) {
@@ -298,10 +309,10 @@ tan(double x) {
/* First stage -cot */
EADD(a,t2,b,db)
DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c+(dc-u14.d*c))==c+(dc+u14.d*c)) return (-y); }
+ if ((y=c+(dc-u14.d*c))==c+(dc+u14.d*c)) { retval = (-y); goto ret; } }
else {
/* First stage tan */
- if ((y=a+(t2-u13.d*a))==a+(t2+u13.d*a)) return y; }
+ if ((y=a+(t2-u13.d*a))==a+(t2+u13.d*a)) { retval = y; goto ret; } }
/* Second stage */
MUL2(a,da,a,da,x2,xx2,t1,t2,t3,t4,t5,t6,t7,t8)
@@ -325,11 +336,12 @@ tan(double x) {
if (n) {
/* Second stage -cot */
DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c2+(cc2-u16.d*c2)) == c2+(cc2+u16.d*c2)) return (-y); }
+ if ((y=c2+(cc2-u16.d*c2)) == c2+(cc2+u16.d*c2)) { retval = (-y); goto ret; } }
else {
/* Second stage tan */
- if ((y=c1+(cc1-u15.d*c1)) == c1+(cc1+u15.d*c1)) return (y); }
- return tanMp(x);
+ if ((y=c1+(cc1-u15.d*c1)) == c1+(cc1+u15.d*c1)) { retval = (y); goto ret; } }
+ retval = tanMp(x);
+ goto ret;
}
/* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */
@@ -342,17 +354,17 @@ tan(double x) {
if (n) {
/* -cot */
t2 = pz*(fi+gi)/(fi+pz);
- if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) return (-sy*y);
+ if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) { retval = (-sy*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = gi*ua18.d+t3*ub18.d;
- if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
+ if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
else {
/* tan */
t2 = pz*(gi+fi)/(gi-pz);
- if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) return (sy*y);
+ if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) { retval = (sy*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = fi*ua17.d+t3*ub17.d;
- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
/* Second stage */
ffi = xfg[i][3].d;
@@ -373,12 +385,13 @@ tan(double x) {
if (n) {
/* -cot */
DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u20.d*c3))==c3+(cc3+u20.d*c3)) return (-sy*y); }
+ if ((y=c3+(cc3-u20.d*c3))==c3+(cc3+u20.d*c3)) { retval = (-sy*y); goto ret; } }
else {
/* tan */
DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u19.d*c3))==c3+(cc3+u19.d*c3)) return (sy*y); }
- return tanMp(x);
+ if ((y=c3+(cc3-u19.d*c3))==c3+(cc3+u19.d*c3)) { retval = (sy*y); goto ret; } }
+ retval = tanMp(x);
+ goto ret;
}
/* (---) The case 1e8 < abs(x) < 2**1024 */
@@ -389,7 +402,7 @@ tan(double x) {
else {ya= a; yya= da; sy= ONE;}
/* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */
- if (ya<=gy1.d) return tanMp(x);
+ if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
/* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */
if (ya<=gy2.d) {
@@ -399,10 +412,10 @@ tan(double x) {
/* First stage -cot */
EADD(a,t2,b,db)
DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c+(dc-u22.d*c))==c+(dc+u22.d*c)) return (-y); }
+ if ((y=c+(dc-u22.d*c))==c+(dc+u22.d*c)) { retval = (-y); goto ret; } }
else {
/* First stage tan */
- if ((y=a+(t2-u21.d*a))==a+(t2+u21.d*a)) return y; }
+ if ((y=a+(t2-u21.d*a))==a+(t2+u21.d*a)) { retval = y; goto ret; } }
/* Second stage */
/* Reduction by algorithm iv */
@@ -431,11 +444,12 @@ tan(double x) {
if (n) {
/* Second stage -cot */
DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c2+(cc2-u24.d*c2)) == c2+(cc2+u24.d*c2)) return (-y); }
+ if ((y=c2+(cc2-u24.d*c2)) == c2+(cc2+u24.d*c2)) { retval = (-y); goto ret; } }
else {
/* Second stage tan */
- if ((y=c1+(cc1-u23.d*c1)) == c1+(cc1+u23.d*c1)) return y; }
- return tanMp(x);
+ if ((y=c1+(cc1-u23.d*c1)) == c1+(cc1+u23.d*c1)) { retval = y; goto ret; } }
+ retval = tanMp(x);
+ goto ret;
}
/* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */
@@ -448,17 +462,17 @@ tan(double x) {
if (n) {
/* -cot */
t2 = pz*(fi+gi)/(fi+pz);
- if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) return (-sy*y);
+ if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) { retval = (-sy*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = gi*ua26.d+t3*ub26.d;
- if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
+ if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
else {
/* tan */
t2 = pz*(gi+fi)/(gi-pz);
- if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) return (sy*y);
+ if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) { retval = (sy*y); goto ret; }
t3 = (t2<ZERO) ? -t2 : t2;
t4 = fi*ua25.d+t3*ub25.d;
- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
/* Second stage */
ffi = xfg[i][3].d;
@@ -479,14 +493,17 @@ tan(double x) {
if (n) {
/* -cot */
DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u28.d*c3))==c3+(cc3+u28.d*c3)) return (-sy*y); }
+ if ((y=c3+(cc3-u28.d*c3))==c3+(cc3+u28.d*c3)) { retval = (-sy*y); goto ret; } }
else {
/* tan */
DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
- if ((y=c3+(cc3-u27.d*c3))==c3+(cc3+u27.d*c3)) return (sy*y); }
- return tanMp(x);
-}
+ if ((y=c3+(cc3-u27.d*c3))==c3+(cc3+u27.d*c3)) { retval = (sy*y); goto ret; } }
+ retval = tanMp(x);
+ goto ret;
+ ret:
+ return retval;
+}
/* multiple precision stage */
/* Convert x to multi precision number,compute tan(x) by mptan() routine */
diff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c
index 63ef4b88a4..ded0d6025d 100644
--- a/sysdeps/ieee754/dbl-64/s_tanh.c
+++ b/sysdeps/ieee754/dbl-64/s_tanh.c
@@ -38,8 +38,8 @@ static char rcsid[] = "$NetBSD: s_tanh.c,v 1.7 1995/05/10 20:48:22 jtc Exp $";
* only tanh(0)=0 is exact for finite argument.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one=1.0, two=2.0, tiny = 1.0e-300;
diff --git a/sysdeps/ieee754/dbl-64/s_trunc.c b/sysdeps/ieee754/dbl-64/s_trunc.c
index 359a2ff3d4..cf43482f21 100644
--- a/sysdeps/ieee754/dbl-64/s_trunc.c
+++ b/sysdeps/ieee754/dbl-64/s_trunc.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
double
diff --git a/sysdeps/ieee754/dbl-64/sincos32.c b/sysdeps/ieee754/dbl-64/sincos32.c
index f3418fe964..038d1bdf22 100644
--- a/sysdeps/ieee754/dbl-64/sincos32.c
+++ b/sysdeps/ieee754/dbl-64/sincos32.c
@@ -42,7 +42,7 @@
#include "endian.h"
#include "mpa.h"
#include "sincos32.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/slowexp.c b/sysdeps/ieee754/dbl-64/slowexp.c
index fa32826cf7..887a06b2dd 100644
--- a/sysdeps/ieee754/dbl-64/slowexp.c
+++ b/sysdeps/ieee754/dbl-64/slowexp.c
@@ -28,7 +28,7 @@
/* e^x */
/**************************************************************************/
#include "mpa.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/slowpow.c b/sysdeps/ieee754/dbl-64/slowpow.c
index 89a914adcd..7c829c74f7 100644
--- a/sysdeps/ieee754/dbl-64/slowpow.c
+++ b/sysdeps/ieee754/dbl-64/slowpow.c
@@ -32,7 +32,7 @@
/*************************************************************************/
#include "mpa.h"
-#include "math_private.h"
+#include <math_private.h>
#ifndef SECTION
# define SECTION
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c
index 83c28479d3..26268f2498 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c
@@ -24,8 +24,8 @@
* acosh(NaN) is NaN without signal.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
one = 1.0,
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
index 41dc42c0af..b8ab748304 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
@@ -31,8 +31,8 @@
* only cosh(0)=1 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0, half=0.5, huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c
index 0e20571a74..6d2540447f 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c
@@ -16,8 +16,8 @@
* Method: shift and subtract
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0, Zero[] = {0.0, -0.0,};
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/math_private.h b/sysdeps/ieee754/dbl-64/wordsize-64/math_private.h
new file mode 100644
index 0000000000..b66085eb1b
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/math_private.h
@@ -0,0 +1,35 @@
+#ifndef _MATH_PRIVATE_H_
+
+#include_next <math_private.h>
+
+#ifndef __isnan
+extern __always_inline int
+__isnan (double d)
+{
+ uint64_t di;
+ EXTRACT_WORDS64 (di, d);
+ return (di & 0x7fffffffffffffffull) > 0x7ff0000000000000ull;
+}
+#endif
+
+#ifndef __isinf_ns
+extern __always_inline int
+__isinf_ns (double d)
+{
+ uint64_t di;
+ EXTRACT_WORDS64 (di, d);
+ return (di & 0x7fffffffffffffffull) == 0x7ff0000000000000ull;
+}
+#endif
+
+#ifndef __finite
+extern __always_inline int
+__finite (double d)
+{
+ uint64_t di;
+ EXTRACT_WORDS64 (di, d);
+ return (di & 0x7fffffffffffffffull) < 0x7ff0000000000000ull;
+}
+#endif
+
+#endif /* _MATH_PRIVATE_H_ */
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
index 346dab7995..c687525d4b 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
@@ -19,8 +19,8 @@
* Inexact flag raised if x not equal to ceil(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
index 93a39a6835..f25ede8f9c 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
@@ -14,8 +14,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __finite
int
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c
index 8ee914e321..34fa6dad5e 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c
@@ -30,8 +30,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/*
* floor(x)
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c
index 0d5da875a2..5ca6b0f97e 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c
@@ -17,8 +17,8 @@
<http://www.gnu.org/licenses/>. */
#include <inttypes.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/*
* for non-zero, finite x
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
index c48e979a84..163fc31efc 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
@@ -9,8 +9,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinf (double x)
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf_ns.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf_ns.c
index 09dcc94532..9d78ed13ae 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf_ns.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf_ns.c
@@ -7,8 +7,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __isinf_ns
int
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
index 86d0ac8bbc..70a620cf64 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
@@ -15,8 +15,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __isnan
int __isnan(double x)
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c
index f7c9ea568f..4a72005d05 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c
@@ -1 +1,79 @@
-/* The code is the same as lround. Use an alias, see l_round.c. */
+/* Round double value to long long int.
+ Copyright (C) 1997-2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define lround __hidden_lround
+#define __lround __hidden___lround
+
+#include <math.h>
+
+#include <math_private.h>
+
+
+long long int
+__llround (double x)
+{
+ int32_t j0;
+ int64_t i0;
+ long long int result;
+ int sign;
+
+ EXTRACT_WORDS64 (i0, x);
+ j0 = ((i0 >> 52) & 0x7ff) - 0x3ff;
+ sign = i0 < 0 ? -1 : 1;
+ i0 &= UINT64_C(0xfffffffffffff);
+ i0 |= UINT64_C(0x10000000000000);
+
+ if (j0 < (int32_t) (8 * sizeof (long long int)) - 1)
+ {
+ if (j0 < 0)
+ return j0 < -1 ? 0 : sign;
+ else if (j0 >= 52)
+ result = i0 << (j0 - 52);
+ else
+ {
+ i0 += UINT64_C(0x8000000000000) >> j0;
+
+ result = i0 >> (52 - j0);
+ }
+ }
+ else
+ {
+ /* The number is too large. It is left implementation defined
+ what happens. */
+ return (long long int) x;
+ }
+
+ return sign * result;
+}
+
+weak_alias (__llround, llround)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__llround, __lroundl)
+weak_alias (__llround, lroundl)
+#endif
+
+/* long has the same width as long long on 64-bit machines. */
+#undef lround
+#undef __lround
+strong_alias (__llround, __lround)
+weak_alias (__llround, lround)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__llround, __llroundl)
+weak_alias (__llround, llroundl)
+#endif
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
index 7760266290..2ad6c7ddbd 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
double
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c
index 7fa2685e47..1e06fcb16e 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c
@@ -1,79 +1 @@
-/* Round double value to long int.
- Copyright (C) 1997, 2004, 2009 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#define llround __hidden_llround
-#define __llround __hidden___llround
-
-#include <math.h>
-
-#include "math_private.h"
-
-
-long int
-__lround (double x)
-{
- int32_t j0;
- int64_t i0;
- long int result;
- int sign;
-
- EXTRACT_WORDS64 (i0, x);
- j0 = ((i0 >> 52) & 0x7ff) - 0x3ff;
- sign = i0 < 0 ? -1 : 1;
- i0 &= UINT64_C(0xfffffffffffff);
- i0 |= UINT64_C(0x10000000000000);
-
- if (j0 < (int32_t) (8 * sizeof (long int)) - 1)
- {
- if (j0 < 0)
- return j0 < -1 ? 0 : sign;
- else if (j0 >= 52)
- result = i0 << (j0 - 52);
- else
- {
- i0 += UINT64_C(0x8000000000000) >> j0;
-
- result = i0 >> (52 - j0);
- }
- }
- else
- {
- /* The number is too large. It is left implementation defined
- what happens. */
- return (long int) x;
- }
-
- return sign * result;
-}
-
-weak_alias (__lround, lround)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__lround, __lroundl)
-weak_alias (__lround, lroundl)
-#endif
-
-/* long long has the same width as long on 64-bit machines. */
-#undef llround
-#undef __llround
-strong_alias (__lround, __llround)
-weak_alias (__lround, llround)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__lround, __llroundl)
-weak_alias (__lround, llroundl)
-#endif
+/* The code is the same as llround. Use an alias, see s_llround.c. */
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c
index 0cba548abd..89743168cb 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c
@@ -20,8 +20,8 @@
* No exception.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double one = 1.0;
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
index 861da20b10..a58a6202ef 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
@@ -21,8 +21,8 @@
*/
#include <fenv.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
TWO52[2]={
@@ -41,29 +41,17 @@ __nearbyint(double x)
j0 = ((i0>>52)&0x7ff)-0x3ff;
if(__builtin_expect(j0<52, 1)) {
if(j0<0) {
- if((i0&UINT64_C(0x7fffffffffffffff))==0) return x;
- uint64_t i = i0 & UINT64_C(0xfffffffffffff);
- i0 &= UINT64_C(0xfffe000000000000);
- i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000));
- INSERT_WORDS64(x,i0);
libc_feholdexcept (&env);
double w = TWO52[sx]+x;
double t = w-TWO52[sx];
math_opt_barrier(t);
libc_fesetenv (&env);
return copysign(t, x);
- } else {
- uint64_t i = UINT64_C(0x000fffffffffffff)>>j0;
- if((i0&i)==0) return x; /* x is integral */
- i>>=1;
- if((i0&i)!=0)
- i0 = (i0&(~i))|(UINT64_C(0x4000000000000)>>j0);
}
} else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
}
- INSERT_WORDS64(x,i0);
libc_feholdexcept (&env);
double w = TWO52[sx]+x;
double t = w-TWO52[sx];
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c
index 6b645b9af7..d634d67f46 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const double zero = 0.0;
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c
index 571b3811ab..87b2339d43 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c
@@ -19,8 +19,8 @@
* Inexact flag raised if x not equal to rint(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
TWO52[2]={
@@ -38,28 +38,16 @@ __rint(double x)
j0 = ((i0>>52)&0x7ff)-0x3ff;
if(j0<52) {
if(j0<0) {
- if((i0 & UINT64_C(0x7fffffffffffffff))==0) return x;
- uint64_t i = i0 & UINT64_C(0xfffffffffffff);
- i0 &= UINT64_C(0xfffe000000000000);
- i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000));
- INSERT_WORDS64(x,i0);
double w = TWO52[sx]+x;
double t = w-TWO52[sx];
EXTRACT_WORDS64(i0,t);
INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63));
return t;
- } else {
- uint64_t i = UINT64_C(0x000fffffffffffff)>>j0;
- if((i0&i)==0) return x; /* x is integral */
- i>>=1;
- if((i0&i)!=0)
- i0 = (i0&(~i))|(UINT64_C(0x4000000000000)>>j0);
}
} else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
}
- INSERT_WORDS64(x,i0);
double w = TWO52[sx]+x;
return w-TWO52[sx];
}
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c
index 6a26197fd2..4d2012ae2f 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const double huge = 1.0e300;
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c
index d6b97b5483..c00db68ddf 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c
@@ -16,8 +16,8 @@
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
@@ -39,11 +39,13 @@ __scalbln (double x, long int n)
k = ((ix >> 52) & 0x7ff) - 54;
}
if (__builtin_expect(k==0x7ff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0x7fe, 0))
- return huge*__copysign(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysign(tiny,x); /*underflow*/
+ if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0))
+ return huge*__copysign(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{INSERT_WORDS64(x,(ix&UINT64_C(0x800fffffffffffff))|(k<<52));
return x;}
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c
index 7f0e21f646..3822e1737d 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c
@@ -16,8 +16,8 @@
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
@@ -39,11 +39,13 @@ __scalbn (double x, int n)
k = ((ix >> 52) & 0x7ff) - 54;
}
if (__builtin_expect(k==0x7ff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0x7fe, 0))
- return huge*__copysign(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysign(tiny,x); /*underflow*/
+ if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0))
+ return huge*__copysign(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{INSERT_WORDS64(x,(ix&UINT64_C(0x800fffffffffffff))|(k<<52));
return x;}
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c
index f94826a8f5..bfb773d3a9 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
double
diff --git a/sysdeps/ieee754/flt-32/e_acosf.c b/sysdeps/ieee754/flt-32/e_acosf.c
index a258e2f918..c0f1d4ea74 100644
--- a/sysdeps/ieee754/flt-32/e_acosf.c
+++ b/sysdeps/ieee754/flt-32/e_acosf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
one = 1.0000000000e+00, /* 0x3F800000 */
diff --git a/sysdeps/ieee754/flt-32/e_acoshf.c b/sysdeps/ieee754/flt-32/e_acoshf.c
index 5999b747a2..aabfb85df7 100644
--- a/sysdeps/ieee754/flt-32/e_acoshf.c
+++ b/sysdeps/ieee754/flt-32/e_acoshf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: e_acoshf.c,v 1.5 1995/05/12 04:57:20 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
one = 1.0,
diff --git a/sysdeps/ieee754/flt-32/e_asinf.c b/sysdeps/ieee754/flt-32/e_asinf.c
index 595f957f6b..91ca9afd00 100644
--- a/sysdeps/ieee754/flt-32/e_asinf.c
+++ b/sysdeps/ieee754/flt-32/e_asinf.c
@@ -39,8 +39,8 @@
static char rcsid[] = "$NetBSD: e_asinf.c,v 1.5 1995/05/12 04:57:25 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
one = 1.0000000000e+00, /* 0x3F800000 */
diff --git a/sysdeps/ieee754/flt-32/e_atan2f.c b/sysdeps/ieee754/flt-32/e_atan2f.c
index abbde88bdf..29eefc0dd6 100644
--- a/sysdeps/ieee754/flt-32/e_atan2f.c
+++ b/sysdeps/ieee754/flt-32/e_atan2f.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
tiny = 1.0e-30,
diff --git a/sysdeps/ieee754/flt-32/e_atanhf.c b/sysdeps/ieee754/flt-32/e_atanhf.c
index 7af2f6ce67..84e080df5a 100644
--- a/sysdeps/ieee754/flt-32/e_atanhf.c
+++ b/sysdeps/ieee754/flt-32/e_atanhf.c
@@ -36,8 +36,8 @@
*/
#include <inttypes.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float huge = 1e30;
diff --git a/sysdeps/ieee754/flt-32/e_coshf.c b/sysdeps/ieee754/flt-32/e_coshf.c
index 1887639a6b..7eeea4d8da 100644
--- a/sysdeps/ieee754/flt-32/e_coshf.c
+++ b/sysdeps/ieee754/flt-32/e_coshf.c
@@ -14,8 +14,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float huge = 1.0e30;
static const float one = 1.0, half=0.5;
diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c
index e728e6ec74..267d81b23f 100644
--- a/sysdeps/ieee754/flt-32/e_exp2f.c
+++ b/sysdeps/ieee754/flt-32/e_exp2f.c
@@ -54,53 +54,52 @@ __ieee754_exp2f (float x)
int tval, unsafe;
float rx, x22, result;
union ieee754_float ex2_u, scale_u;
- fenv_t oldenv;
-
- libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST);
-
- /* 1. Argument reduction.
- Choose integers ex, -128 <= t < 128, and some real
- -1/512 <= x1 <= 1/512 so that
- x = ex + t/512 + x1.
-
- First, calculate rx = ex + t/256. */
- rx = x + THREEp14;
- rx -= THREEp14;
- x -= rx; /* Compute x=x1. */
- /* Compute tval = (ex*256 + t)+128.
- Now, t = (tval mod 256)-128 and ex=tval/256 [that's mod, NOT %; and
- /-round-to-nearest not the usual c integer /]. */
- tval = (int) (rx * 256.0f + 128.0f);
-
- /* 2. Adjust for accurate table entry.
- Find e so that
- x = ex + t/256 + e + x2
- where -7e-4 < e < 7e-4, and
- (float)(2^(t/256+e))
- is accurate to one part in 2^-64. */
-
- /* 'tval & 255' is the same as 'tval%256' except that it's always
- positive.
- Compute x = x2. */
- x -= __exp2f_deltatable[tval & 255];
-
- /* 3. Compute ex2 = 2^(t/255+e+ex). */
- ex2_u.f = __exp2f_atable[tval & 255];
- tval >>= 8;
- unsafe = abs(tval) >= -FLT_MIN_EXP - 1;
- ex2_u.ieee.exponent += tval >> unsafe;
- scale_u.f = 1.0;
- scale_u.ieee.exponent += tval - (tval >> unsafe);
-
- /* 4. Approximate 2^x2 - 1, using a second-degree polynomial,
- with maximum error in [-2^-9 - 2^-14, 2^-9 + 2^-14]
- less than 1.3e-10. */
-
- x22 = (.24022656679f * x + .69314736128f) * ex2_u.f;
- /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
- libc_fesetenv (&oldenv);
+ {
+ SET_RESTORE_ROUND_NOEXF (FE_TONEAREST);
+
+ /* 1. Argument reduction.
+ Choose integers ex, -128 <= t < 128, and some real
+ -1/512 <= x1 <= 1/512 so that
+ x = ex + t/512 + x1.
+
+ First, calculate rx = ex + t/256. */
+ rx = x + THREEp14;
+ rx -= THREEp14;
+ x -= rx; /* Compute x=x1. */
+ /* Compute tval = (ex*256 + t)+128.
+ Now, t = (tval mod 256)-128 and ex=tval/256 [that's mod, NOT %;
+ and /-round-to-nearest not the usual c integer /]. */
+ tval = (int) (rx * 256.0f + 128.0f);
+
+ /* 2. Adjust for accurate table entry.
+ Find e so that
+ x = ex + t/256 + e + x2
+ where -7e-4 < e < 7e-4, and
+ (float)(2^(t/256+e))
+ is accurate to one part in 2^-64. */
+
+ /* 'tval & 255' is the same as 'tval%256' except that it's always
+ positive.
+ Compute x = x2. */
+ x -= __exp2f_deltatable[tval & 255];
+
+ /* 3. Compute ex2 = 2^(t/255+e+ex). */
+ ex2_u.f = __exp2f_atable[tval & 255];
+ tval >>= 8;
+ unsafe = abs(tval) >= -FLT_MIN_EXP - 1;
+ ex2_u.ieee.exponent += tval >> unsafe;
+ scale_u.f = 1.0;
+ scale_u.ieee.exponent += tval - (tval >> unsafe);
+
+ /* 4. Approximate 2^x2 - 1, using a second-degree polynomial,
+ with maximum error in [-2^-9 - 2^-14, 2^-9 + 2^-14]
+ less than 1.3e-10. */
+
+ x22 = (.24022656679f * x + .69314736128f) * ex2_u.f;
+ }
+ /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
result = x22 * x + ex2_u.f;
if (!unsafe)
diff --git a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c
index e69e7f6ae0..57aff16ab7 100644
--- a/sysdeps/ieee754/flt-32/e_expf.c
+++ b/sysdeps/ieee754/flt-32/e_expf.c
@@ -80,40 +80,39 @@ __ieee754_expf (float x)
double x22, t, result, dx;
float n, delta;
union ieee754_double ex2_u;
- fenv_t oldenv;
- libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST);
+ {
+ SET_RESTORE_ROUND_NOEXF (FE_TONEAREST);
- /* Calculate n. */
- n = x * M_1_LN2 + THREEp22;
- n -= THREEp22;
- dx = x - n*M_LN2;
+ /* Calculate n. */
+ n = x * M_1_LN2 + THREEp22;
+ n -= THREEp22;
+ dx = x - n*M_LN2;
- /* Calculate t/512. */
- t = dx + THREEp42;
- t -= THREEp42;
- dx -= t;
+ /* Calculate t/512. */
+ t = dx + THREEp42;
+ t -= THREEp42;
+ dx -= t;
- /* Compute tval = t. */
- tval = (int) (t * 512.0);
+ /* Compute tval = t. */
+ tval = (int) (t * 512.0);
- if (t >= 0)
- delta = - __exp_deltatable[tval];
- else
- delta = __exp_deltatable[-tval];
+ if (t >= 0)
+ delta = - __exp_deltatable[tval];
+ else
+ delta = __exp_deltatable[-tval];
- /* Compute ex2 = 2^n e^(t/512+delta[t]). */
- ex2_u.d = __exp_atable[tval+177];
- ex2_u.ieee.exponent += (int) n;
+ /* Compute ex2 = 2^n e^(t/512+delta[t]). */
+ ex2_u.d = __exp_atable[tval+177];
+ ex2_u.ieee.exponent += (int) n;
- /* Approximate e^(dx+delta) - 1, using a second-degree polynomial,
- with maximum error in [-2^-10-2^-28,2^-10+2^-28]
- less than 5e-11. */
- x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
+ /* Approximate e^(dx+delta) - 1, using a second-degree polynomial,
+ with maximum error in [-2^-10-2^-28,2^-10+2^-28]
+ less than 5e-11. */
+ x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
+ }
/* Return result. */
- libc_fesetenvf (&oldenv);
-
result = x22 * ex2_u.d + ex2_u.d;
return (float) result;
}
diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c
index e82a9ceab7..8d8fad4eb5 100644
--- a/sysdeps/ieee754/flt-32/e_fmodf.c
+++ b/sysdeps/ieee754/flt-32/e_fmodf.c
@@ -19,8 +19,8 @@
* Method: shift and subtract
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one = 1.0, Zero[] = {0.0, -0.0,};
diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c
index 7ec8ae66bc..8f499b5fde 100644
--- a/sysdeps/ieee754/flt-32/e_hypotf.c
+++ b/sysdeps/ieee754/flt-32/e_hypotf.c
@@ -13,68 +13,41 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float
__ieee754_hypotf(float x, float y)
{
- float a,b,t1,t2,y1,y2,w;
- int32_t j,k,ha,hb;
+ double d_x, d_y;
+ int32_t ha, hb;
GET_FLOAT_WORD(ha,x);
ha &= 0x7fffffff;
GET_FLOAT_WORD(hb,y);
hb &= 0x7fffffff;
- if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;}
- SET_FLOAT_WORD(a,ha); /* a <- |a| */
- SET_FLOAT_WORD(b,hb); /* b <- |b| */
- if((ha-hb)>0xf000000) {return a+b;} /* x/y > 2**30 */
- k=0;
- if(__builtin_expect(ha > 0x58800000, 0)) { /* a>2**50 */
- if(ha >= 0x7f800000) { /* Inf or NaN */
- w = a+b; /* for sNaN */
- if(ha == 0x7f800000) w = a;
- if(hb == 0x7f800000) w = b;
- return w;
- }
- /* scale a and b by 2**-60 */
- ha -= 0x1e000000; hb -= 0x1e000000; k += 60;
- SET_FLOAT_WORD(a,ha);
- SET_FLOAT_WORD(b,hb);
- }
- if(__builtin_expect(hb < 0x26800000, 0)) { /* b < 2**-50 */
- if(hb <= 0x007fffff) { /* subnormal b or 0 */
- if(hb==0) return a;
- SET_FLOAT_WORD(t1,0x7e800000); /* t1=2^126 */
- b *= t1;
- a *= t1;
- k -= 126;
- } else { /* scale a and b by 2^60 */
- ha += 0x1e000000; /* a *= 2^60 */
- hb += 0x1e000000; /* b *= 2^60 */
- k -= 60;
- SET_FLOAT_WORD(a,ha);
- SET_FLOAT_WORD(b,hb);
- }
- }
- /* medium size a and b */
- w = a-b;
- if (w>b) {
- SET_FLOAT_WORD(t1,ha&0xfffff000);
- t2 = a-t1;
- w = __ieee754_sqrtf(t1*t1-(b*(-b)-t2*(a+t1)));
- } else {
- a = a+a;
- SET_FLOAT_WORD(y1,hb&0xfffff000);
- y2 = b - y1;
- SET_FLOAT_WORD(t1,ha+0x00800000);
- t2 = a - t1;
- w = __ieee754_sqrtf(t1*y1-(w*(-w)-(t1*y2+t2*b)));
- }
- if(k!=0) {
- SET_FLOAT_WORD(t1,0x3f800000+(k<<23));
- return t1*w;
- } else return w;
+ if (ha == 0x7f800000)
+ {
+ if (x == y)
+ return fabsf(y);
+ return fabsf(x);
+ }
+ else if (hb == 0x7f800000)
+ {
+ if (x == y)
+ return fabsf(x);
+ return fabsf(y);
+ }
+ else if (ha > 0x7f800000 || hb > 0x7f800000)
+ return fabsf(x) * fabsf(y);
+ else if (ha == 0)
+ return fabsf(y);
+ else if (hb == 0)
+ return fabsf(x);
+
+ d_x = (double) x;
+ d_y = (double) y;
+
+ return (float) __ieee754_sqrt(d_x * d_x + d_y * d_y);
}
strong_alias (__ieee754_hypotf, __hypotf_finite)
diff --git a/sysdeps/ieee754/flt-32/e_j0f.c b/sysdeps/ieee754/flt-32/e_j0f.c
index 0cc52c94c4..0729cd04e0 100644
--- a/sysdeps/ieee754/flt-32/e_j0f.c
+++ b/sysdeps/ieee754/flt-32/e_j0f.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static float pzerof(float), qzerof(float);
diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
index bb335a7403..30b7d8e250 100644
--- a/sysdeps/ieee754/flt-32/e_j1f.c
+++ b/sysdeps/ieee754/flt-32/e_j1f.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static float ponef(float), qonef(float);
diff --git a/sysdeps/ieee754/flt-32/e_jnf.c b/sysdeps/ieee754/flt-32/e_jnf.c
index 1e55485b02..bed9cee7ab 100644
--- a/sysdeps/ieee754/flt-32/e_jnf.c
+++ b/sysdeps/ieee754/flt-32/e_jnf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
two = 2.0000000000e+00, /* 0x40000000 */
diff --git a/sysdeps/ieee754/flt-32/e_lgammaf_r.c b/sysdeps/ieee754/flt-32/e_lgammaf_r.c
index cbee9db8fb..2e92269085 100644
--- a/sysdeps/ieee754/flt-32/e_lgammaf_r.c
+++ b/sysdeps/ieee754/flt-32/e_lgammaf_r.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
two23= 8.3886080000e+06, /* 0x4b000000 */
diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
index 72dcea6250..96f0e81c52 100644
--- a/sysdeps/ieee754/flt-32/e_log10f.c
+++ b/sysdeps/ieee754/flt-32/e_log10f.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
two25 = 3.3554432000e+07, /* 0x4c000000 */
diff --git a/sysdeps/ieee754/flt-32/e_log2f.c b/sysdeps/ieee754/flt-32/e_log2f.c
index 7453214516..245be4e6f7 100644
--- a/sysdeps/ieee754/flt-32/e_log2f.c
+++ b/sysdeps/ieee754/flt-32/e_log2f.c
@@ -15,8 +15,8 @@
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
ln2 = 0.69314718055994530942,
diff --git a/sysdeps/ieee754/flt-32/e_logf.c b/sysdeps/ieee754/flt-32/e_logf.c
index b870b31957..7da64896c1 100644
--- a/sysdeps/ieee754/flt-32/e_logf.c
+++ b/sysdeps/ieee754/flt-32/e_logf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
ln2_hi = 6.9313812256e-01, /* 0x3f317180 */
diff --git a/sysdeps/ieee754/flt-32/e_powf.c b/sysdeps/ieee754/flt-32/e_powf.c
index 460055204f..43069479a5 100644
--- a/sysdeps/ieee754/flt-32/e_powf.c
+++ b/sysdeps/ieee754/flt-32/e_powf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float huge = 1.0e+30, tiny = 1.0e-30;
diff --git a/sysdeps/ieee754/flt-32/e_rem_pio2f.c b/sysdeps/ieee754/flt-32/e_rem_pio2f.c
index c2b9793df9..702fbf520d 100644
--- a/sysdeps/ieee754/flt-32/e_rem_pio2f.c
+++ b/sysdeps/ieee754/flt-32/e_rem_pio2f.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp
* use __kernel_rem_pio2f()
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/*
* Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi
diff --git a/sysdeps/ieee754/flt-32/e_remainderf.c b/sysdeps/ieee754/flt-32/e_remainderf.c
index aaf15dfe54..cc0167862e 100644
--- a/sysdeps/ieee754/flt-32/e_remainderf.c
+++ b/sysdeps/ieee754/flt-32/e_remainderf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float zero = 0.0;
diff --git a/sysdeps/ieee754/flt-32/e_sinhf.c b/sysdeps/ieee754/flt-32/e_sinhf.c
index 5813963488..0a3cc90cd1 100644
--- a/sysdeps/ieee754/flt-32/e_sinhf.c
+++ b/sysdeps/ieee754/flt-32/e_sinhf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one = 1.0, shuge = 1.0e37;
diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c
index 6d6688c52c..c02206ac01 100644
--- a/sysdeps/ieee754/flt-32/e_sqrtf.c
+++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one = 1.0, tiny=1.0e-30;
diff --git a/sysdeps/ieee754/flt-32/k_cosf.c b/sysdeps/ieee754/flt-32/k_cosf.c
index 81259470e0..fe4b453b77 100644
--- a/sysdeps/ieee754/flt-32/k_cosf.c
+++ b/sysdeps/ieee754/flt-32/k_cosf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
one = 1.0000000000e+00, /* 0x3f800000 */
diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
index 395cc789f1..06c2f378dc 100644
--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: k_rem_pio2f.c,v 1.4 1995/05/10 20:46:28 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* In the float version, the input parameter x contains 8 bit
integers, not 24 bit integers. 113 bit precision is not supported. */
diff --git a/sysdeps/ieee754/flt-32/k_sinf.c b/sysdeps/ieee754/flt-32/k_sinf.c
index 572363d755..e65fb988b7 100644
--- a/sysdeps/ieee754/flt-32/k_sinf.c
+++ b/sysdeps/ieee754/flt-32/k_sinf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
half = 5.0000000000e-01,/* 0x3f000000 */
diff --git a/sysdeps/ieee754/flt-32/k_tanf.c b/sysdeps/ieee754/flt-32/k_tanf.c
index 8b34811e4f..92206069c8 100644
--- a/sysdeps/ieee754/flt-32/k_tanf.c
+++ b/sysdeps/ieee754/flt-32/k_tanf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: k_tanf.c,v 1.4 1995/05/10 20:46:39 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
one = 1.0000000000e+00, /* 0x3f800000 */
pio4 = 7.8539812565e-01, /* 0x3f490fda */
diff --git a/sysdeps/ieee754/flt-32/math_private.h b/sysdeps/ieee754/flt-32/math_private.h
new file mode 100644
index 0000000000..e33db02b4c
--- /dev/null
+++ b/sysdeps/ieee754/flt-32/math_private.h
@@ -0,0 +1,35 @@
+#ifndef _MATH_PRIVATE_H_
+
+#include_next <math_private.h>
+
+#ifndef __isnanf
+extern __always_inline int
+__isnanf (float d)
+{
+ u_int32_t di;
+ GET_FLOAT_WORD (di, d);
+ return (di & 0x7fffffff) > 0x7f800000;
+}
+#endif
+
+#ifndef __isinf_nsf
+extern __always_inline int
+__isinf_nsf (float d)
+{
+ u_int32_t di;
+ GET_FLOAT_WORD (di, d);
+ return (di & 0x7fffffff) == 0x7f800000;
+}
+#endif
+
+#ifndef __finitef
+extern __always_inline int
+__finitef (float d)
+{
+ u_int32_t di;
+ GET_FLOAT_WORD (di, d);
+ return (di & 0x7fffffff) < 0x7f800000;
+}
+#endif
+
+#endif /* _MATH_PRIVATE_H_ */
diff --git a/sysdeps/ieee754/flt-32/s_asinhf.c b/sysdeps/ieee754/flt-32/s_asinhf.c
index aa46f90004..b7fa2b4443 100644
--- a/sysdeps/ieee754/flt-32/s_asinhf.c
+++ b/sysdeps/ieee754/flt-32/s_asinhf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
one = 1.0000000000e+00, /* 0x3F800000 */
diff --git a/sysdeps/ieee754/flt-32/s_atanf.c b/sysdeps/ieee754/flt-32/s_atanf.c
index 8a3aa811b2..be7e67456a 100644
--- a/sysdeps/ieee754/flt-32/s_atanf.c
+++ b/sysdeps/ieee754/flt-32/s_atanf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float atanhi[] = {
4.6364760399e-01, /* atan(0.5)hi 0x3eed6338 */
diff --git a/sysdeps/ieee754/flt-32/s_cbrtf.c b/sysdeps/ieee754/flt-32/s_cbrtf.c
index 14233abf1b..ca792dbe6f 100644
--- a/sysdeps/ieee754/flt-32/s_cbrtf.c
+++ b/sysdeps/ieee754/flt-32/s_cbrtf.c
@@ -18,8 +18,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#define CBRT2 1.2599210498948731648 /* 2^(1/3) */
diff --git a/sysdeps/ieee754/flt-32/s_ceilf.c b/sysdeps/ieee754/flt-32/s_ceilf.c
index af926600b0..37659ea2ae 100644
--- a/sysdeps/ieee754/flt-32/s_ceilf.c
+++ b/sysdeps/ieee754/flt-32/s_ceilf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float huge = 1.0e30;
diff --git a/sysdeps/ieee754/flt-32/s_copysignf.c b/sysdeps/ieee754/flt-32/s_copysignf.c
index 3a7893d8af..8bdf997d6b 100644
--- a/sysdeps/ieee754/flt-32/s_copysignf.c
+++ b/sysdeps/ieee754/flt-32/s_copysignf.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: s_copysignf.c,v 1.4 1995/05/10 20:46:59 jtc Exp
* with the sign bit of y.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float __copysignf(float x, float y)
{
diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
index dfe576c7be..f4bd81904b 100644
--- a/sysdeps/ieee754/flt-32/s_cosf.c
+++ b/sysdeps/ieee754/flt-32/s_cosf.c
@@ -18,8 +18,8 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
#endif
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one=1.0;
diff --git a/sysdeps/ieee754/flt-32/s_erff.c b/sysdeps/ieee754/flt-32/s_erff.c
index 576618309b..17eeca4b51 100644
--- a/sysdeps/ieee754/flt-32/s_erff.c
+++ b/sysdeps/ieee754/flt-32/s_erff.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: s_erff.c,v 1.4 1995/05/10 20:47:07 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
tiny = 1e-30,
@@ -200,7 +200,7 @@ float __erfcf(float x)
sb5+s*(sb6+s*sb7))))));
}
GET_FLOAT_WORD(ix,x);
- SET_FLOAT_WORD(z,ix&0xfffff000);
+ SET_FLOAT_WORD(z,ix&0xffffe000);
r = __ieee754_expf(-z*z-(float)0.5625)*
__ieee754_expf((z-x)*(z+x)+R/S);
if(hx>0) return r/x; else return two-r/x;
diff --git a/sysdeps/ieee754/flt-32/s_expm1f.c b/sysdeps/ieee754/flt-32/s_expm1f.c
index 1d707120b0..ca8839fa22 100644
--- a/sysdeps/ieee754/flt-32/s_expm1f.c
+++ b/sysdeps/ieee754/flt-32/s_expm1f.c
@@ -14,8 +14,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float huge = 1.0e+30;
static const float tiny = 1.0e-30;
diff --git a/sysdeps/ieee754/flt-32/s_fabsf.c b/sysdeps/ieee754/flt-32/s_fabsf.c
index b6a02da184..619526574a 100644
--- a/sysdeps/ieee754/flt-32/s_fabsf.c
+++ b/sysdeps/ieee754/flt-32/s_fabsf.c
@@ -21,8 +21,8 @@ static char rcsid[] = "$NetBSD: s_fabsf.c,v 1.4 1995/05/10 20:47:15 jtc Exp $";
* fabsf(x) returns the absolute value of x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float __fabsf(float x)
{
diff --git a/sysdeps/ieee754/flt-32/s_finitef.c b/sysdeps/ieee754/flt-32/s_finitef.c
index fe4f0525fa..dfdf4ad0b7 100644
--- a/sysdeps/ieee754/flt-32/s_finitef.c
+++ b/sysdeps/ieee754/flt-32/s_finitef.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: s_finitef.c,v 1.4 1995/05/10 20:47:18 jtc Exp $"
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __finitef
int __finitef(float x)
diff --git a/sysdeps/ieee754/flt-32/s_floorf.c b/sysdeps/ieee754/flt-32/s_floorf.c
index de160d2114..99d6c01833 100644
--- a/sysdeps/ieee754/flt-32/s_floorf.c
+++ b/sysdeps/ieee754/flt-32/s_floorf.c
@@ -22,8 +22,8 @@
* Inexact flag raised if x not equal to floorf(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float huge = 1.0e30;
diff --git a/sysdeps/ieee754/flt-32/s_fpclassifyf.c b/sysdeps/ieee754/flt-32/s_fpclassifyf.c
index eb3461f639..95cba2bd3f 100644
--- a/sysdeps/ieee754/flt-32/s_fpclassifyf.c
+++ b/sysdeps/ieee754/flt-32/s_fpclassifyf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
diff --git a/sysdeps/ieee754/flt-32/s_frexpf.c b/sysdeps/ieee754/flt-32/s_frexpf.c
index ba3777553c..abb8c0a65e 100644
--- a/sysdeps/ieee754/flt-32/s_frexpf.c
+++ b/sysdeps/ieee754/flt-32/s_frexpf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: s_frexpf.c,v 1.5 1995/05/10 20:47:26 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
two25 = 3.3554432000e+07; /* 0x4c000000 */
diff --git a/sysdeps/ieee754/flt-32/s_ilogbf.c b/sysdeps/ieee754/flt-32/s_ilogbf.c
index 74babe140f..21f9cd9704 100644
--- a/sysdeps/ieee754/flt-32/s_ilogbf.c
+++ b/sysdeps/ieee754/flt-32/s_ilogbf.c
@@ -18,8 +18,8 @@ static char rcsid[] = "$NetBSD: s_ilogbf.c,v 1.4 1995/05/10 20:47:31 jtc Exp $";
#endif
#include <limits.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __ilogbf(float x)
{
diff --git a/sysdeps/ieee754/flt-32/s_isinf_nsf.c b/sysdeps/ieee754/flt-32/s_isinf_nsf.c
index 1e46e2ce4a..284d61926a 100644
--- a/sysdeps/ieee754/flt-32/s_isinf_nsf.c
+++ b/sysdeps/ieee754/flt-32/s_isinf_nsf.c
@@ -7,8 +7,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __isinf_nsf
int
diff --git a/sysdeps/ieee754/flt-32/s_isinff.c b/sysdeps/ieee754/flt-32/s_isinff.c
index 03a95fcc0f..6eec050bb5 100644
--- a/sysdeps/ieee754/flt-32/s_isinff.c
+++ b/sysdeps/ieee754/flt-32/s_isinff.c
@@ -12,8 +12,8 @@ static char rcsid[] = "$NetBSD: s_isinff.c,v 1.3 1995/05/11 23:20:21 jtc Exp $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinff (float x)
diff --git a/sysdeps/ieee754/flt-32/s_isnanf.c b/sysdeps/ieee754/flt-32/s_isnanf.c
index 028b9bbb35..820b31a2b4 100644
--- a/sysdeps/ieee754/flt-32/s_isnanf.c
+++ b/sysdeps/ieee754/flt-32/s_isnanf.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: s_isnanf.c,v 1.4 1995/05/10 20:47:38 jtc Exp $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#undef __isnanf
int __isnanf(float x)
diff --git a/sysdeps/ieee754/flt-32/s_llrintf.c b/sysdeps/ieee754/flt-32/s_llrintf.c
index 69da3ca7a0..1dc5beb2f5 100644
--- a/sysdeps/ieee754/flt-32/s_llrintf.c
+++ b/sysdeps/ieee754/flt-32/s_llrintf.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const float two23[2] =
{
diff --git a/sysdeps/ieee754/flt-32/s_llroundf.c b/sysdeps/ieee754/flt-32/s_llroundf.c
index 8b9b978609..457f38608f 100644
--- a/sysdeps/ieee754/flt-32/s_llroundf.c
+++ b/sysdeps/ieee754/flt-32/s_llroundf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long long int
diff --git a/sysdeps/ieee754/flt-32/s_log1pf.c b/sysdeps/ieee754/flt-32/s_log1pf.c
index 9e555ed570..0307277106 100644
--- a/sysdeps/ieee754/flt-32/s_log1pf.c
+++ b/sysdeps/ieee754/flt-32/s_log1pf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
ln2_hi = 6.9313812256e-01, /* 0x3f317180 */
diff --git a/sysdeps/ieee754/flt-32/s_logbf.c b/sysdeps/ieee754/flt-32/s_logbf.c
index 6504eb6c66..b6aa0f057d 100644
--- a/sysdeps/ieee754/flt-32/s_logbf.c
+++ b/sysdeps/ieee754/flt-32/s_logbf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: s_logbf.c,v 1.4 1995/05/10 20:47:51 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float __logbf(float x)
{
diff --git a/sysdeps/ieee754/flt-32/s_lrintf.c b/sysdeps/ieee754/flt-32/s_lrintf.c
index e7f36b8e3e..cf00996e18 100644
--- a/sysdeps/ieee754/flt-32/s_lrintf.c
+++ b/sysdeps/ieee754/flt-32/s_lrintf.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const float two23[2] =
{
diff --git a/sysdeps/ieee754/flt-32/s_lroundf.c b/sysdeps/ieee754/flt-32/s_lroundf.c
index be05f9c548..57a6dfdc56 100644
--- a/sysdeps/ieee754/flt-32/s_lroundf.c
+++ b/sysdeps/ieee754/flt-32/s_lroundf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long int
diff --git a/sysdeps/ieee754/flt-32/s_modff.c b/sysdeps/ieee754/flt-32/s_modff.c
index 741b1c9b16..23f6a902b3 100644
--- a/sysdeps/ieee754/flt-32/s_modff.c
+++ b/sysdeps/ieee754/flt-32/s_modff.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one = 1.0;
diff --git a/sysdeps/ieee754/flt-32/s_nearbyintf.c b/sysdeps/ieee754/flt-32/s_nearbyintf.c
index a6d602bb4d..48debadde3 100644
--- a/sysdeps/ieee754/flt-32/s_nearbyintf.c
+++ b/sysdeps/ieee754/flt-32/s_nearbyintf.c
@@ -16,8 +16,8 @@
#include <fenv.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
TWO23[2]={
diff --git a/sysdeps/ieee754/flt-32/s_nextafterf.c b/sysdeps/ieee754/flt-32/s_nextafterf.c
index 19da4246ac..b0de3d9ce2 100644
--- a/sysdeps/ieee754/flt-32/s_nextafterf.c
+++ b/sysdeps/ieee754/flt-32/s_nextafterf.c
@@ -17,7 +17,7 @@
static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp $";
#endif
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <float.h>
diff --git a/sysdeps/ieee754/flt-32/s_remquof.c b/sysdeps/ieee754/flt-32/s_remquof.c
index 295dcfc229..6128c209ed 100644
--- a/sysdeps/ieee754/flt-32/s_remquof.c
+++ b/sysdeps/ieee754/flt-32/s_remquof.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const float zero = 0.0;
diff --git a/sysdeps/ieee754/flt-32/s_rintf.c b/sysdeps/ieee754/flt-32/s_rintf.c
index 9ba6b57d94..8a907488f7 100644
--- a/sysdeps/ieee754/flt-32/s_rintf.c
+++ b/sysdeps/ieee754/flt-32/s_rintf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
TWO23[2]={
diff --git a/sysdeps/ieee754/flt-32/s_roundf.c b/sysdeps/ieee754/flt-32/s_roundf.c
index 06e79254e3..92239c77eb 100644
--- a/sysdeps/ieee754/flt-32/s_roundf.c
+++ b/sysdeps/ieee754/flt-32/s_roundf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const float huge = 1.0e30;
diff --git a/sysdeps/ieee754/flt-32/s_scalblnf.c b/sysdeps/ieee754/flt-32/s_scalblnf.c
index 5256c32592..aa45164d2f 100644
--- a/sysdeps/ieee754/flt-32/s_scalblnf.c
+++ b/sysdeps/ieee754/flt-32/s_scalblnf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
two25 = 3.355443200e+07, /* 0x4c000000 */
@@ -35,11 +35,13 @@ __scalblnf (float x, long int n)
k = ((ix&0x7f800000)>>23) - 25;
}
if (__builtin_expect(k==0xff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0xfe, 0))
- return huge*copysignf(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*copysignf(tiny,x); /*underflow*/
+ if (__builtin_expect(n> 50000 || k+n > 0xfe, 0))
+ return huge*copysignf(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;}
if (k <= -25)
diff --git a/sysdeps/ieee754/flt-32/s_scalbnf.c b/sysdeps/ieee754/flt-32/s_scalbnf.c
index 3be2925a03..5d9bdd647b 100644
--- a/sysdeps/ieee754/flt-32/s_scalbnf.c
+++ b/sysdeps/ieee754/flt-32/s_scalbnf.c
@@ -13,8 +13,8 @@
* ====================================================
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float
two25 = 3.355443200e+07, /* 0x4c000000 */
@@ -35,11 +35,13 @@ __scalbnf (float x, int n)
k = ((ix&0x7f800000)>>23) - 25;
}
if (__builtin_expect(k==0xff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0xfe, 0))
- return huge*__copysignf(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysignf(tiny,x); /*underflow*/
+ if (__builtin_expect(n> 50000 || k+n > 0xfe, 0))
+ return huge*__copysignf(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;}
if (k <= -25)
diff --git a/sysdeps/ieee754/flt-32/s_signbitf.c b/sysdeps/ieee754/flt-32/s_signbitf.c
index 9d37651e87..619e26b4b2 100644
--- a/sysdeps/ieee754/flt-32/s_signbitf.c
+++ b/sysdeps/ieee754/flt-32/s_signbitf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
__signbitf (float x)
diff --git a/sysdeps/ieee754/flt-32/s_sincosf.c b/sysdeps/ieee754/flt-32/s_sincosf.c
index 29c44a7da8..1b4d000e11 100644
--- a/sysdeps/ieee754/flt-32/s_sincosf.c
+++ b/sysdeps/ieee754/flt-32/s_sincosf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
void
diff --git a/sysdeps/ieee754/flt-32/s_sinf.c b/sysdeps/ieee754/flt-32/s_sinf.c
index 680fe07dae..02fa29f23b 100644
--- a/sysdeps/ieee754/flt-32/s_sinf.c
+++ b/sysdeps/ieee754/flt-32/s_sinf.c
@@ -18,8 +18,8 @@ static char rcsid[] = "$NetBSD: s_sinf.c,v 1.4 1995/05/10 20:48:16 jtc Exp $";
#endif
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float __sinf(float x)
{
diff --git a/sysdeps/ieee754/flt-32/s_tanf.c b/sysdeps/ieee754/flt-32/s_tanf.c
index b69f3f5f79..685df8fa35 100644
--- a/sysdeps/ieee754/flt-32/s_tanf.c
+++ b/sysdeps/ieee754/flt-32/s_tanf.c
@@ -18,8 +18,8 @@ static char rcsid[] = "$NetBSD: s_tanf.c,v 1.4 1995/05/10 20:48:20 jtc Exp $";
#endif
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float __tanf(float x)
{
diff --git a/sysdeps/ieee754/flt-32/s_tanhf.c b/sysdeps/ieee754/flt-32/s_tanhf.c
index a3a2cd3e50..dc96da9a5b 100644
--- a/sysdeps/ieee754/flt-32/s_tanhf.c
+++ b/sysdeps/ieee754/flt-32/s_tanhf.c
@@ -17,8 +17,8 @@
static char rcsid[] = "$NetBSD: s_tanhf.c,v 1.4 1995/05/10 20:48:24 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one=1.0, two=2.0, tiny = 1.0e-30;
diff --git a/sysdeps/ieee754/flt-32/s_truncf.c b/sysdeps/ieee754/flt-32/s_truncf.c
index 6cbd235f5e..7e7053aeac 100644
--- a/sysdeps/ieee754/flt-32/s_truncf.c
+++ b/sysdeps/ieee754/flt-32/s_truncf.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
float
diff --git a/sysdeps/ieee754/k_standard.c b/sysdeps/ieee754/k_standard.c
index 53b0775ddf..4e65bb16ce 100644
--- a/sysdeps/ieee754/k_standard.c
+++ b/sysdeps/ieee754/k_standard.c
@@ -14,8 +14,9 @@
static char rcsid[] = "$NetBSD: k_standard.c,v 1.6 1995/05/10 20:46:35 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
+#include <float.h>
#include <errno.h>
#include <assert.h>
@@ -507,6 +508,9 @@ __kernel_standard(double x, double y, int type)
exc.type = UNDERFLOW;
exc.name = type < 100 ? "pow" : (type < 200 ? "powf" : "powl");
exc.retval = zero;
+ y *= 0.5;
+ if (x < zero && __rint (y) != y)
+ exc.retval = -zero;
if (_LIB_VERSION == _POSIX_)
__set_errno (ERANGE);
else if (!matherr(&exc)) {
@@ -998,3 +1002,83 @@ __kernel_standard_f(float x, float y, int type)
{
return __kernel_standard(x, y, type);
}
+
+long double
+__kernel_standard_l (long double x, long double y, int type)
+{
+ double dx, dy;
+ struct exception exc;
+
+ if (isfinite (x))
+ {
+ long double ax = fabsl (x);
+ if (ax > DBL_MAX)
+ dx = __copysignl (DBL_MAX, x);
+ else if (ax > 0 && ax < DBL_MIN)
+ dx = __copysignl (DBL_MIN, x);
+ else
+ dx = x;
+ }
+ else
+ dx = x;
+ if (isfinite (y))
+ {
+ long double ay = fabsl (y);
+ if (ay > DBL_MAX)
+ dy = __copysignl (DBL_MAX, y);
+ else if (ay > 0 && ay < DBL_MIN)
+ dy = __copysignl (DBL_MIN, y);
+ else
+ dy = y;
+ }
+ else
+ dy = y;
+
+ switch (type)
+ {
+ case 221:
+ /* powl (x, y) overflow. */
+ exc.arg1 = dx;
+ exc.arg2 = dy;
+ exc.type = OVERFLOW;
+ exc.name = "powl";
+ if (_LIB_VERSION == _SVID_)
+ {
+ exc.retval = HUGE;
+ y *= 0.5;
+ if (x < zero && __rintl (y) != y)
+ exc.retval = -HUGE;
+ }
+ else
+ {
+ exc.retval = HUGE_VAL;
+ y *= 0.5;
+ if (x < zero && __rintl (y) != y)
+ exc.retval = -HUGE_VAL;
+ }
+ if (_LIB_VERSION == _POSIX_)
+ __set_errno (ERANGE);
+ else if (!matherr (&exc))
+ __set_errno (ERANGE);
+ return exc.retval;
+
+ case 222:
+ /* powl (x, y) underflow. */
+ exc.arg1 = dx;
+ exc.arg2 = dy;
+ exc.type = UNDERFLOW;
+ exc.name = "powl";
+ exc.retval = zero;
+ y *= 0.5;
+ if (x < zero && __rintl (y) != y)
+ exc.retval = -zero;
+ if (_LIB_VERSION == _POSIX_)
+ __set_errno (ERANGE);
+ else if (!matherr (&exc))
+ __set_errno (ERANGE);
+ return exc.retval;
+
+ default:
+ return __kernel_standard (dx, dy, type);
+ }
+}
diff --git a/sysdeps/ieee754/ldbl-128/e_acoshl.c b/sysdeps/ieee754/ldbl-128/e_acoshl.c
index 2a74e9cd74..6234289e1e 100644
--- a/sysdeps/ieee754/ldbl-128/e_acoshl.c
+++ b/sysdeps/ieee754/ldbl-128/e_acoshl.c
@@ -27,8 +27,8 @@
* acoshl(NaN) is NaN without signal.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0,
diff --git a/sysdeps/ieee754/ldbl-128/e_acosl.c b/sysdeps/ieee754/ldbl-128/e_acosl.c
index bf8f5b4be4..28c94ed404 100644
--- a/sysdeps/ieee754/ldbl-128/e_acosl.c
+++ b/sysdeps/ieee754/ldbl-128/e_acosl.c
@@ -54,8 +54,8 @@
* Functions needed: __ieee754_sqrtl.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
diff --git a/sysdeps/ieee754/ldbl-128/e_asinl.c b/sysdeps/ieee754/ldbl-128/e_asinl.c
index 85c59d0281..cd1a8da42c 100644
--- a/sysdeps/ieee754/ldbl-128/e_asinl.c
+++ b/sysdeps/ieee754/ldbl-128/e_asinl.c
@@ -59,8 +59,8 @@
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double sqrtl (long double);
static const long double
diff --git a/sysdeps/ieee754/ldbl-128/e_atan2l.c b/sysdeps/ieee754/ldbl-128/e_atan2l.c
index bba3c9bcf1..d31ee70dbd 100644
--- a/sysdeps/ieee754/ldbl-128/e_atan2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_atan2l.c
@@ -40,8 +40,8 @@
* to produce the hexadecimal values shown.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
tiny = 1.0e-4900L,
diff --git a/sysdeps/ieee754/ldbl-128/e_atanhl.c b/sysdeps/ieee754/ldbl-128/e_atanhl.c
index 334c4bd701..c5cceb5224 100644
--- a/sysdeps/ieee754/ldbl-128/e_atanhl.c
+++ b/sysdeps/ieee754/ldbl-128/e_atanhl.c
@@ -32,8 +32,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0L, huge = 1e4900L;
diff --git a/sysdeps/ieee754/ldbl-128/e_coshl.c b/sysdeps/ieee754/ldbl-128/e_coshl.c
index c40c850f1c..59f2030d54 100644
--- a/sysdeps/ieee754/ldbl-128/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-128/e_coshl.c
@@ -51,8 +51,8 @@
* only coshl(0)=1 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, half = 0.5, huge = 1.0e4900L,
ovf_thresh = 1.1357216553474703894801348310092223067821E4L;
diff --git a/sysdeps/ieee754/ldbl-128/e_fmodl.c b/sysdeps/ieee754/ldbl-128/e_fmodl.c
index 05665a9c8b..33280030f1 100644
--- a/sysdeps/ieee754/ldbl-128/e_fmodl.c
+++ b/sysdeps/ieee754/ldbl-128/e_fmodl.c
@@ -18,8 +18,8 @@
* Method: shift and subtract
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, Zero[] = {0.0, -0.0,};
diff --git a/sysdeps/ieee754/ldbl-128/e_hypotl.c b/sysdeps/ieee754/ldbl-128/e_hypotl.c
index dad78fef1d..f5ab901e6a 100644
--- a/sysdeps/ieee754/ldbl-128/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-128/e_hypotl.c
@@ -45,8 +45,8 @@
* than 1 ulps (units in the last place)
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double
__ieee754_hypotl(long double x, long double y)
diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c
index 7d88709b8e..112a8f3f9c 100644
--- a/sysdeps/ieee754/ldbl-128/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j0l.c
@@ -91,8 +91,8 @@
License along with this library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* 1 / sqrt(pi) */
static const long double ONEOSQPI = 5.6418958354775628694807945156077258584405E-1L;
diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c
index 389657729a..1f62bd0920 100644
--- a/sysdeps/ieee754/ldbl-128/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-128/e_j1l.c
@@ -95,8 +95,8 @@
License along with this library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* 1 / sqrt(pi) */
static const long double ONEOSQPI = 5.6418958354775628694807945156077258584405E-1L;
diff --git a/sysdeps/ieee754/ldbl-128/e_jnl.c b/sysdeps/ieee754/ldbl-128/e_jnl.c
index 4c2ec85470..e320d994bf 100644
--- a/sysdeps/ieee754/ldbl-128/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-128/e_jnl.c
@@ -56,8 +56,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
invsqrtpi = 5.6418958354775628694807945156077258584405E-1L,
diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
index a88b11af94..2b44afb759 100644
--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
@@ -68,8 +68,8 @@
License along with this library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
diff --git a/sysdeps/ieee754/ldbl-128/e_log10l.c b/sysdeps/ieee754/ldbl-128/e_log10l.c
index 58516cd17b..b403f815fb 100644
--- a/sysdeps/ieee754/ldbl-128/e_log10l.c
+++ b/sysdeps/ieee754/ldbl-128/e_log10l.c
@@ -60,8 +60,8 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
* 1/sqrt(2) <= x < sqrt(2)
diff --git a/sysdeps/ieee754/ldbl-128/e_log2l.c b/sysdeps/ieee754/ldbl-128/e_log2l.c
index f312057e72..6c7da0e44b 100644
--- a/sysdeps/ieee754/ldbl-128/e_log2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_log2l.c
@@ -59,8 +59,8 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
* 1/sqrt(2) <= x < sqrt(2)
diff --git a/sysdeps/ieee754/ldbl-128/e_logl.c b/sysdeps/ieee754/ldbl-128/e_logl.c
index e8a62ea5c4..395a76302a 100644
--- a/sysdeps/ieee754/ldbl-128/e_logl.c
+++ b/sysdeps/ieee754/ldbl-128/e_logl.c
@@ -58,7 +58,7 @@
License along with this library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math_private.h"
+#include <math_private.h>
/* log(1+x) = x - .5 x^2 + x^3 l(x)
-.0078125 <= x <= +.0078125
diff --git a/sysdeps/ieee754/ldbl-128/e_powl.c b/sysdeps/ieee754/ldbl-128/e_powl.c
index 807cf6190a..40fc314730 100644
--- a/sysdeps/ieee754/ldbl-128/e_powl.c
+++ b/sysdeps/ieee754/ldbl-128/e_powl.c
@@ -64,8 +64,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double bp[] = {
1.0L,
diff --git a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c
index cd27024311..b8833ba137 100644
--- a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c
+++ b/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/*
* Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi
diff --git a/sysdeps/ieee754/ldbl-128/e_remainderl.c b/sysdeps/ieee754/ldbl-128/e_remainderl.c
index 84233808ef..88df6f54c2 100644
--- a/sysdeps/ieee754/ldbl-128/e_remainderl.c
+++ b/sysdeps/ieee754/ldbl-128/e_remainderl.c
@@ -21,8 +21,8 @@
* Based on fmodl() return x-[x/p]chopped*p exactlp.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double zero = 0.0L;
diff --git a/sysdeps/ieee754/ldbl-128/e_sinhl.c b/sysdeps/ieee754/ldbl-128/e_sinhl.c
index 65e9246a1f..1ca3c6e507 100644
--- a/sysdeps/ieee754/ldbl-128/e_sinhl.c
+++ b/sysdeps/ieee754/ldbl-128/e_sinhl.c
@@ -53,8 +53,8 @@
* only sinhl(0)=0 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, shuge = 1.0e4931L,
ovf_thresh = 1.1357216553474703894801348310092223067821E4L;
diff --git a/sysdeps/ieee754/ldbl-128/k_cosl.c b/sysdeps/ieee754/ldbl-128/k_cosl.c
index b5f57ba727..aa447ec1db 100644
--- a/sysdeps/ieee754/ldbl-128/k_cosl.c
+++ b/sysdeps/ieee754/ldbl-128/k_cosl.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double c[] = {
#define ONE c[0]
@@ -105,7 +105,11 @@ __kernel_cosl(long double x, long double y)
cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */
index = 0x3ffe - (tix >> 16);
hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
- x = fabsl (x);
+ if (signbit (x))
+ {
+ x = -x;
+ y = -y;
+ }
switch (index)
{
case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
diff --git a/sysdeps/ieee754/ldbl-128/k_sincosl.c b/sysdeps/ieee754/ldbl-128/k_sincosl.c
index 3cb8c79d0e..00a21c45d1 100644
--- a/sysdeps/ieee754/ldbl-128/k_sincosl.c
+++ b/sysdeps/ieee754/ldbl-128/k_sincosl.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double c[] = {
#define ONE c[0]
@@ -132,7 +132,11 @@ __kernel_sincosl(long double x, long double y, long double *sinx, long double *c
cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */
index = 0x3ffe - (tix >> 16);
hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
- x = fabsl (x);
+ if (signbit (x))
+ {
+ x = -x;
+ y = -y;
+ }
switch (index)
{
case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
diff --git a/sysdeps/ieee754/ldbl-128/k_sinl.c b/sysdeps/ieee754/ldbl-128/k_sinl.c
index 176a50218c..1f0ca8c7f9 100644
--- a/sysdeps/ieee754/ldbl-128/k_sinl.c
+++ b/sysdeps/ieee754/ldbl-128/k_sinl.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double c[] = {
#define ONE c[0]
@@ -116,7 +116,7 @@ __kernel_sinl(long double x, long double y, int iy)
SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
if (iy)
- l = y - (h - x);
+ l = (ix < 0 ? -y : y) - (h - x);
else
l = x - h;
z = l * l;
diff --git a/sysdeps/ieee754/ldbl-128/k_tanl.c b/sysdeps/ieee754/ldbl-128/k_tanl.c
index 8d63e6d6f3..cb2e9473d9 100644
--- a/sysdeps/ieee754/ldbl-128/k_tanl.c
+++ b/sysdeps/ieee754/ldbl-128/k_tanl.c
@@ -56,8 +56,8 @@
* = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y)))
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
pio4hi = 7.8539816339744830961566084581987569936977E-1L,
diff --git a/sysdeps/ieee754/ldbl-128/s_asinhl.c b/sysdeps/ieee754/ldbl-128/s_asinhl.c
index 0a83413845..e5a3636beb 100644
--- a/sysdeps/ieee754/ldbl-128/s_asinhl.c
+++ b/sysdeps/ieee754/ldbl-128/s_asinhl.c
@@ -29,8 +29,8 @@ static char rcsid[] = "$NetBSD: $";
* := signl(x)*log1pl(|x| + x^2/(1 + sqrtl(1+x^2)))
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
diff --git a/sysdeps/ieee754/ldbl-128/s_atanl.c b/sysdeps/ieee754/ldbl-128/s_atanl.c
index c687ab3aff..0138e792aa 100644
--- a/sysdeps/ieee754/ldbl-128/s_atanl.c
+++ b/sysdeps/ieee754/ldbl-128/s_atanl.c
@@ -59,7 +59,7 @@
<http://www.gnu.org/licenses/>. */
-#include "math_private.h"
+#include <math_private.h>
/* arctan(k/8), k = 0, ..., 82 */
static const long double atantbl[84] = {
diff --git a/sysdeps/ieee754/ldbl-128/s_cbrtl.c b/sysdeps/ieee754/ldbl-128/s_cbrtl.c
index 3f418f30e0..07ed567e4d 100644
--- a/sysdeps/ieee754/ldbl-128/s_cbrtl.c
+++ b/sysdeps/ieee754/ldbl-128/s_cbrtl.c
@@ -54,8 +54,8 @@ Adapted for glibc October, 2001.
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double CBRT2 = 1.259921049894873164767210607278228350570251L;
static const long double CBRT4 = 1.587401051968199474751705639272308260391493L;
diff --git a/sysdeps/ieee754/ldbl-128/s_ceill.c b/sysdeps/ieee754/ldbl-128/s_ceill.c
index fe1fc8382b..9f6bc4ce15 100644
--- a/sysdeps/ieee754/ldbl-128/s_ceill.c
+++ b/sysdeps/ieee754/ldbl-128/s_ceill.c
@@ -26,8 +26,8 @@ static char rcsid[] = "$NetBSD: $";
* Inexact flag raised if x not equal to ceil(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double huge = 1.0e4930L;
diff --git a/sysdeps/ieee754/ldbl-128/s_copysignl.c b/sysdeps/ieee754/ldbl-128/s_copysignl.c
index 3426ccddf0..19b6880940 100644
--- a/sysdeps/ieee754/ldbl-128/s_copysignl.c
+++ b/sysdeps/ieee754/ldbl-128/s_copysignl.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* with the sign bit of y.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __copysignl(long double x, long double y)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_cosl.c b/sysdeps/ieee754/ldbl-128/s_cosl.c
index ae26d359d0..2c3bff6e0f 100644
--- a/sysdeps/ieee754/ldbl-128/s_cosl.c
+++ b/sysdeps/ieee754/ldbl-128/s_cosl.c
@@ -45,8 +45,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __cosl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
index c8a4aedca3..85c6356373 100644
--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
+++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
@@ -96,8 +96,8 @@
* erfc/erf(NaN) is NaN
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */
diff --git a/sysdeps/ieee754/ldbl-128/s_expm1l.c b/sysdeps/ieee754/ldbl-128/s_expm1l.c
index 04139908c2..ea63501819 100644
--- a/sysdeps/ieee754/ldbl-128/s_expm1l.c
+++ b/sysdeps/ieee754/ldbl-128/s_expm1l.c
@@ -54,8 +54,8 @@
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* exp(x) - 1 = x + 0.5 x^2 + x^3 P(x)/Q(x)
-.5 ln 2 < x < .5 ln 2
@@ -102,6 +102,11 @@ __expm1l (long double x)
ix = u.parts32.w0;
sign = ix & 0x80000000;
ix &= 0x7fffffff;
+ if (!sign && ix >= 0x40060000)
+ {
+ /* If num is positive and exp >= 6 use plain exp. */
+ return __expl (x);
+ }
if (ix >= 0x7fff0000)
{
/* Infinity. */
diff --git a/sysdeps/ieee754/ldbl-128/s_fabsl.c b/sysdeps/ieee754/ldbl-128/s_fabsl.c
index 73de8f07c1..a1bb6c5dff 100644
--- a/sysdeps/ieee754/ldbl-128/s_fabsl.c
+++ b/sysdeps/ieee754/ldbl-128/s_fabsl.c
@@ -21,8 +21,8 @@ static char rcsid[] = "$NetBSD: $";
* fabsl(x) returns the absolute value of x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __fabsl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_finitel.c b/sysdeps/ieee754/ldbl-128/s_finitel.c
index b789735892..f862a448ed 100644
--- a/sysdeps/ieee754/ldbl-128/s_finitel.c
+++ b/sysdeps/ieee754/ldbl-128/s_finitel.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __finitel(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_floorl.c b/sysdeps/ieee754/ldbl-128/s_floorl.c
index 2799d1c7ed..c72d5d4330 100644
--- a/sysdeps/ieee754/ldbl-128/s_floorl.c
+++ b/sysdeps/ieee754/ldbl-128/s_floorl.c
@@ -26,8 +26,8 @@ static char rcsid[] = "$NetBSD: $";
* Inexact flag raised if x not equal to floor(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double huge = 1.0e4930L;
diff --git a/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c
index d6f35cbef6..a98f586f91 100644
--- a/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c
+++ b/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
diff --git a/sysdeps/ieee754/ldbl-128/s_frexpl.c b/sysdeps/ieee754/ldbl-128/s_frexpl.c
index 7f899e470a..d61dddaaaa 100644
--- a/sysdeps/ieee754/ldbl-128/s_frexpl.c
+++ b/sysdeps/ieee754/ldbl-128/s_frexpl.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* with *exp=0.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
two114 = 2.0769187434139310514121985316880384E+34L; /* 0x4071000000000000, 0 */
diff --git a/sysdeps/ieee754/ldbl-128/s_ilogbl.c b/sysdeps/ieee754/ldbl-128/s_ilogbl.c
index a6f52c3f78..d52eb050d4 100644
--- a/sysdeps/ieee754/ldbl-128/s_ilogbl.c
+++ b/sysdeps/ieee754/ldbl-128/s_ilogbl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include <limits.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __ilogbl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_isinf_nsl.c b/sysdeps/ieee754/ldbl-128/s_isinf_nsl.c
index 1ebc1accbc..7d6cfb9a62 100644
--- a/sysdeps/ieee754/ldbl-128/s_isinf_nsl.c
+++ b/sysdeps/ieee754/ldbl-128/s_isinf_nsl.c
@@ -7,8 +7,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinf_nsl (long double x)
diff --git a/sysdeps/ieee754/ldbl-128/s_isinfl.c b/sysdeps/ieee754/ldbl-128/s_isinfl.c
index 0b3526bd79..03e4d13371 100644
--- a/sysdeps/ieee754/ldbl-128/s_isinfl.c
+++ b/sysdeps/ieee754/ldbl-128/s_isinfl.c
@@ -13,8 +13,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinfl (long double x)
diff --git a/sysdeps/ieee754/ldbl-128/s_isnanl.c b/sysdeps/ieee754/ldbl-128/s_isnanl.c
index ef7bc7b332..74960e7ff2 100644
--- a/sysdeps/ieee754/ldbl-128/s_isnanl.c
+++ b/sysdeps/ieee754/ldbl-128/s_isnanl.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __isnanl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_llrintl.c b/sysdeps/ieee754/ldbl-128/s_llrintl.c
index 5ebd43eb2e..be7cb5df11 100644
--- a/sysdeps/ieee754/ldbl-128/s_llrintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_llrintl.c
@@ -21,7 +21,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double two112[2] =
{
diff --git a/sysdeps/ieee754/ldbl-128/s_llroundl.c b/sysdeps/ieee754/ldbl-128/s_llroundl.c
index c5f28af15a..16eea8f68a 100644
--- a/sysdeps/ieee754/ldbl-128/s_llroundl.c
+++ b/sysdeps/ieee754/ldbl-128/s_llroundl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long long int
diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
index 285c40e9ba..4ecea0fddd 100644
--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
+++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
@@ -53,8 +53,8 @@
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x)
* 1/sqrt(2) <= 1+x < sqrt(2)
diff --git a/sysdeps/ieee754/ldbl-128/s_logbl.c b/sysdeps/ieee754/ldbl-128/s_logbl.c
index 8d7b4c65ad..0b09b289c2 100644
--- a/sysdeps/ieee754/ldbl-128/s_logbl.c
+++ b/sysdeps/ieee754/ldbl-128/s_logbl.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* Use ilogb instead.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __logbl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_lrintl.c b/sysdeps/ieee754/ldbl-128/s_lrintl.c
index 5216f63ce4..11594a314f 100644
--- a/sysdeps/ieee754/ldbl-128/s_lrintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_lrintl.c
@@ -21,7 +21,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double two112[2] =
{
diff --git a/sysdeps/ieee754/ldbl-128/s_lroundl.c b/sysdeps/ieee754/ldbl-128/s_lroundl.c
index ab2043678d..efe71bc391 100644
--- a/sysdeps/ieee754/ldbl-128/s_lroundl.c
+++ b/sysdeps/ieee754/ldbl-128/s_lroundl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long int
diff --git a/sysdeps/ieee754/ldbl-128/s_modfl.c b/sysdeps/ieee754/ldbl-128/s_modfl.c
index 36572680cc..597a5c9a0c 100644
--- a/sysdeps/ieee754/ldbl-128/s_modfl.c
+++ b/sysdeps/ieee754/ldbl-128/s_modfl.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* No exception.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0;
diff --git a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
index b97c1ac403..b335adcaa1 100644
--- a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
@@ -24,8 +24,8 @@
*/
#include <fenv.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
TWO112[2]={
@@ -37,18 +37,13 @@ long double __nearbyintl(long double x)
{
fenv_t env;
int64_t i0,j0,sx;
- u_int64_t i,i1;
+ u_int64_t i1;
long double w,t;
GET_LDOUBLE_WORDS64(i0,i1,x);
sx = (((u_int64_t)i0)>>63);
j0 = ((i0>>48)&0x7fff)-0x3fff;
- if(j0<48) {
+ if(j0<112) {
if(j0<0) {
- if(((i0&0x7fffffffffffffffLL)|i1)==0) return x;
- i1 |= (i0&0x0000ffffffffffffLL);
- i0 &= 0xffffe00000000000ULL;
- i0 |= ((i1|-i1)>>16)&0x0000800000000000LL;
- SET_LDOUBLE_MSW64(x,i0);
feholdexcept (&env);
w = TWO112[sx]+x;
t = w-TWO112[sx];
@@ -56,25 +51,11 @@ long double __nearbyintl(long double x)
GET_LDOUBLE_MSW64(i0,t);
SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63));
return t;
- } else {
- i = (0x0000ffffffffffffLL)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if(j0==47) i1 = 0x4000000000000000ULL; else
- i0 = (i0&(~i))|((0x0000200000000000LL)>>j0);
- }
}
- } else if (j0>111) {
+ } else {
if(j0==0x4000) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = -1ULL>>(j0-48);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x4000000000000000LL)>>(j0-48));
}
- SET_LDOUBLE_WORDS64(x,i0,i1);
feholdexcept (&env);
w = TWO112[sx]+x;
t = w-TWO112[sx];
diff --git a/sysdeps/ieee754/ldbl-128/s_nextafterl.c b/sysdeps/ieee754/ldbl-128/s_nextafterl.c
index 0bf9339ef5..e345bc8c40 100644
--- a/sysdeps/ieee754/ldbl-128/s_nextafterl.c
+++ b/sysdeps/ieee754/ldbl-128/s_nextafterl.c
@@ -24,7 +24,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
long double __nextafterl(long double x, long double y)
diff --git a/sysdeps/ieee754/ldbl-128/s_nexttoward.c b/sysdeps/ieee754/ldbl-128/s_nexttoward.c
index 6506722c4d..87a9a6cac3 100644
--- a/sysdeps/ieee754/ldbl-128/s_nexttoward.c
+++ b/sysdeps/ieee754/ldbl-128/s_nexttoward.c
@@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <float.h>
diff --git a/sysdeps/ieee754/ldbl-128/s_nexttowardf.c b/sysdeps/ieee754/ldbl-128/s_nexttowardf.c
index e7265e7627..371fa80771 100644
--- a/sysdeps/ieee754/ldbl-128/s_nexttowardf.c
+++ b/sysdeps/ieee754/ldbl-128/s_nexttowardf.c
@@ -18,8 +18,8 @@
static char rcsid[] = "$NetBSD: $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
float __nexttowardf(float x, long double y)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_remquol.c b/sysdeps/ieee754/ldbl-128/s_remquol.c
index e44ae84974..a985546ea4 100644
--- a/sysdeps/ieee754/ldbl-128/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-128/s_remquol.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double zero = 0.0;
diff --git a/sysdeps/ieee754/ldbl-128/s_rintl.c b/sysdeps/ieee754/ldbl-128/s_rintl.c
index 833ad42944..088d3c4d59 100644
--- a/sysdeps/ieee754/ldbl-128/s_rintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_rintl.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* Inexact flag raised if x not equal to rintl(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
TWO112[2]={
@@ -39,42 +39,23 @@ TWO112[2]={
long double __rintl(long double x)
{
int64_t i0,j0,sx;
- u_int64_t i,i1;
+ u_int64_t i1;
long double w,t;
GET_LDOUBLE_WORDS64(i0,i1,x);
sx = (((u_int64_t)i0)>>63);
j0 = ((i0>>48)&0x7fff)-0x3fff;
- if(j0<48) {
+ if(j0<112) {
if(j0<0) {
- if(((i0&0x7fffffffffffffffLL)|i1)==0) return x;
- i1 |= (i0&0x0000ffffffffffffLL);
- i0 &= 0xffffe00000000000ULL;
- i0 |= ((i1|-i1)>>16)&0x0000800000000000LL;
- SET_LDOUBLE_MSW64(x,i0);
w = TWO112[sx]+x;
t = w-TWO112[sx];
GET_LDOUBLE_MSW64(i0,t);
SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63));
return t;
- } else {
- i = (0x0000ffffffffffffLL)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if(j0==47) i1 = 0x4000000000000000ULL; else
- i0 = (i0&(~i))|((0x0000200000000000LL)>>j0);
- }
}
- } else if (j0>111) {
+ } else {
if(j0==0x4000) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = -1ULL>>(j0-48);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x4000000000000000LL)>>(j0-48));
}
- SET_LDOUBLE_WORDS64(x,i0,i1);
w = TWO112[sx]+x;
return w-TWO112[sx];
}
diff --git a/sysdeps/ieee754/ldbl-128/s_roundl.c b/sysdeps/ieee754/ldbl-128/s_roundl.c
index d8eff871ee..1139d2781f 100644
--- a/sysdeps/ieee754/ldbl-128/s_roundl.c
+++ b/sysdeps/ieee754/ldbl-128/s_roundl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double huge = 1.0E4930L;
diff --git a/sysdeps/ieee754/ldbl-128/s_scalblnl.c b/sysdeps/ieee754/ldbl-128/s_scalblnl.c
index f5624e2a73..f0df2da9ea 100644
--- a/sysdeps/ieee754/ldbl-128/s_scalblnl.c
+++ b/sysdeps/ieee754/ldbl-128/s_scalblnl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: $";
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
two114 = 2.0769187434139310514121985316880384E+34L, /* 0x4071000000000000, 0 */
@@ -46,10 +46,12 @@ long double __scalblnl (long double x, long int n)
k = ((hx>>48)&0x7fff) - 114;
}
if (k==0x7fff) return x+x; /* NaN or Inf */
- k = k+n;
- if (n> 50000 || k > 0x7ffe)
- return huge*__copysignl(huge,x); /* overflow */
if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow*/
+ if (n> 50000 || k+n > 0x7ffe)
+ return huge*__copysignl(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (k > 0) /* normal result */
{SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); return x;}
if (k <= -114)
diff --git a/sysdeps/ieee754/ldbl-128/s_scalbnl.c b/sysdeps/ieee754/ldbl-128/s_scalbnl.c
index b9de0f74fc..a14848d8fd 100644
--- a/sysdeps/ieee754/ldbl-128/s_scalbnl.c
+++ b/sysdeps/ieee754/ldbl-128/s_scalbnl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: $";
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
two114 = 2.0769187434139310514121985316880384E+34L, /* 0x4071000000000000, 0 */
@@ -46,10 +46,12 @@ long double __scalbnl (long double x, int n)
k = ((hx>>48)&0x7fff) - 114;
}
if (k==0x7fff) return x+x; /* NaN or Inf */
- k = k+n;
- if (n> 50000 || k > 0x7ffe)
- return huge*__copysignl(huge,x); /* overflow */
if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow*/
+ if (n> 50000 || k+n > 0x7ffe)
+ return huge*__copysignl(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (k > 0) /* normal result */
{SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); return x;}
if (k <= -114)
diff --git a/sysdeps/ieee754/ldbl-128/s_signbitl.c b/sysdeps/ieee754/ldbl-128/s_signbitl.c
index 0f519fb6cb..da74213075 100644
--- a/sysdeps/ieee754/ldbl-128/s_signbitl.c
+++ b/sysdeps/ieee754/ldbl-128/s_signbitl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
__signbitl (long double x)
diff --git a/sysdeps/ieee754/ldbl-128/s_sincosl.c b/sysdeps/ieee754/ldbl-128/s_sincosl.c
index 8ff70148d3..5747ad464e 100644
--- a/sysdeps/ieee754/ldbl-128/s_sincosl.c
+++ b/sysdeps/ieee754/ldbl-128/s_sincosl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
void
__sincosl (long double x, long double *sinx, long double *cosx)
diff --git a/sysdeps/ieee754/ldbl-128/s_sinl.c b/sysdeps/ieee754/ldbl-128/s_sinl.c
index 63a920bd80..582a53fd7a 100644
--- a/sysdeps/ieee754/ldbl-128/s_sinl.c
+++ b/sysdeps/ieee754/ldbl-128/s_sinl.c
@@ -45,8 +45,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __sinl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_tanhl.c b/sysdeps/ieee754/ldbl-128/s_tanhl.c
index 979eb86557..129735b1b5 100644
--- a/sysdeps/ieee754/ldbl-128/s_tanhl.c
+++ b/sysdeps/ieee754/ldbl-128/s_tanhl.c
@@ -41,8 +41,8 @@
* only tanhl(0)=0 is exact for finite argument.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, two = 2.0, tiny = 1.0e-4900L;
diff --git a/sysdeps/ieee754/ldbl-128/s_tanl.c b/sysdeps/ieee754/ldbl-128/s_tanl.c
index 41e590250e..c4bb8c80ec 100644
--- a/sysdeps/ieee754/ldbl-128/s_tanl.c
+++ b/sysdeps/ieee754/ldbl-128/s_tanl.c
@@ -45,8 +45,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __tanl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-128/s_truncl.c b/sysdeps/ieee754/ldbl-128/s_truncl.c
index 526071a587..092ff9cdf4 100644
--- a/sysdeps/ieee754/ldbl-128/s_truncl.c
+++ b/sysdeps/ieee754/ldbl-128/s_truncl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long double
diff --git a/sysdeps/ieee754/ldbl-128/w_expl.c b/sysdeps/ieee754/ldbl-128/w_expl.c
index ab82ef1e76..10193befa9 100644
--- a/sysdeps/ieee754/ldbl-128/w_expl.c
+++ b/sysdeps/ieee754/ldbl-128/w_expl.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* wrapper expl(x)
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
o_threshold= 1.1356523406294143949491931077970763428449E4L,
@@ -39,9 +39,9 @@ long double __expl(long double x) /* wrapper exp */
if(_LIB_VERSION == _IEEE_) return z;
if(__finitel(x)) {
if(x>o_threshold)
- return __kernel_standard(x,x,206); /* exp overflow */
+ return __kernel_standard_l(x,x,206); /* exp overflow */
else if(x<u_threshold)
- return __kernel_standard(x,x,207); /* exp underflow */
+ return __kernel_standard_l(x,x,207); /* exp underflow */
}
return z;
#endif
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c b/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
index 20d94eaa1e..117bd0f052 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
@@ -24,8 +24,8 @@
* acosh(NaN) is NaN without signal.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_acosl.c b/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
index 55ee30f02c..533b59786d 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
@@ -54,8 +54,8 @@
* Functions needed: __ieee754_sqrtl.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_asinl.c b/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
index 402c244360..fb6f5720d0 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
@@ -59,8 +59,8 @@
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double sqrtl (long double);
static const long double
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
index a5b6621006..fe5c8bd8dc 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
@@ -40,8 +40,8 @@
* to produce the hexadecimal values shown.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
tiny = 1.0e-300L,
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c b/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
index c879e4518e..075855b5fe 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
@@ -28,8 +28,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0L, huge = 1e300L;
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
index ebc9436396..3e8e1875c6 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
@@ -20,9 +20,9 @@
* 2*exp(x)
*
* exp(x) + 1/exp(x)
- * ln2/2 <= x <= 22 : cosh(x) := -------------------
+ * ln2/2 <= x <= 40 : cosh(x) := -------------------
* 2
- * 22 <= x <= lnovft : cosh(x) := exp(x)/2
+ * 40 <= x <= lnovft : cosh(x) := exp(x)/2
* lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2)
* ln2ovft < x : cosh(x) := huge*huge (overflow)
*
@@ -31,8 +31,8 @@
* only cosh(0)=1 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0L, half=0.5L, huge = 1.0e300L;
@@ -57,13 +57,13 @@ __ieee754_coshl (long double x)
return one+(t*t)/(w+w);
}
- /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */
- if (ix < 0x4036000000000000LL) {
+ /* |x| in [0.5*ln2,40], return (exp(|x|)+1/exp(|x|)/2; */
+ if (ix < 0x4044000000000000LL) {
t = __ieee754_expl(fabsl(x));
return half*t+half/t;
}
- /* |x| in [22, log(maxdouble)] return half*exp(|x|) */
+ /* |x| in [40, log(maxdouble)] return half*exp(|x|) */
if (ix < 0x40862e42fefa39efLL) return half*__ieee754_expl(fabsl(x));
/* |x| in [log(maxdouble), overflowthresold] */
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_expl.c b/sysdeps/ieee754/ldbl-128ibm/e_expl.c
index 133adc273a..5618eb3d0f 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_expl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_expl.c
@@ -1,5 +1,5 @@
/* Quad-precision floating point e^x.
- Copyright (C) 1999,2004,2006, 2008, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1999-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jj@ultra.linux.cz>
Partly based on double-precision code
@@ -74,7 +74,7 @@ static const long double C[] = {
/* Largest integer x for which e^x underflows. */
#define lomark C[1]
--709.08956571282405153382846025171462914L,
+-744.44007192138121808966388925909996033L,
/* 3x2^96 */
#define THREEp96 C[2]
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c b/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
index 4ad59a0916..10cda317a9 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
@@ -18,8 +18,8 @@
* Method: shift and subtract
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <ieee754.h>
static const long double one = 1.0, Zero[] = {0.0, -0.0,};
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
index 4ef076741f..00bfb15926 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
@@ -42,8 +42,8 @@
* than 1 ulps (units in the last place)
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double two600 = 0x1.0p+600L;
static const long double two1022 = 0x1.0p+1022L;
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_jnl.c b/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
index 2f8fa88820..930a2bcbdf 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
@@ -56,8 +56,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
invsqrtpi = 5.6418958354775628694807945156077258584405E-1L,
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_log10l.c b/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
index e398d93a9d..fae774cea8 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
@@ -60,8 +60,8 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
* 1/sqrt(2) <= x < sqrt(2)
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_log2l.c b/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
index 28363f2cf6..f0098f6c73 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
@@ -59,8 +59,8 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
* 1/sqrt(2) <= x < sqrt(2)
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c
index 0912284c5c..14f47ebade 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_logl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_logl.c
@@ -58,7 +58,7 @@
License along with this library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math_private.h"
+#include <math_private.h>
/* log(1+x) = x - .5 x^2 + x^3 l(x)
-.0078125 <= x <= +.0078125
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_powl.c b/sysdeps/ieee754/ldbl-128ibm/e_powl.c
index ac7ca31ca4..0fd4820e4e 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_powl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_powl.c
@@ -64,8 +64,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double bp[] = {
1.0L,
@@ -88,8 +88,8 @@ static const long double zero = 0.0L,
one = 1.0L,
two = 2.0L,
two113 = 1.0384593717069655257060992658440192E34L,
- huge = 1.0e3000L,
- tiny = 1.0e-3000L;
+ huge = 1.0e300L,
+ tiny = 1.0e-300L;
/* 3/2 log x = 3 z + z^3 + z^3 (z^2 R(z^2))
z = (x-1)/(x+1)
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
index b584e53042..5352de9453 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <ieee754.h>
/*
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
index d4a847dbed..67d7db7fbe 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
@@ -21,8 +21,8 @@
* Based on fmodl() return x-[x/p]chopped*p exactlp.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double zero = 0.0L;
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
index b8e86b1a6b..4bae85a5a4 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
@@ -16,10 +16,10 @@
* 1. Replace x by |x| (sinh(-x) = -sinh(x)).
* 2.
* E + E/(E+1)
- * 0 <= x <= 22 : sinh(x) := --------------, E=expm1(x)
+ * 0 <= x <= 40 : sinh(x) := --------------, E=expm1(x)
* 2
*
- * 22 <= x <= lnovft : sinh(x) := exp(x)/2
+ * 40 <= x <= lnovft : sinh(x) := exp(x)/2
* lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2)
* ln2ovft < x : sinh(x) := x*shuge (overflow)
*
@@ -28,8 +28,8 @@
* only sinh(0)=0 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, shuge = 1.0e307;
@@ -48,8 +48,8 @@ __ieee754_sinhl(long double x)
h = 0.5;
if (jx<0) h = -h;
- /* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */
- if (ix < 0x4036000000000000LL) { /* |x|<22 */
+ /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */
+ if (ix < 0x4044000000000000LL) { /* |x|<40 */
if (ix<0x3e20000000000000LL) /* |x|<2**-29 */
if(shuge+x>one) return x;/* sinhl(tiny) = tiny with inexact */
t = __expm1l(fabsl(x));
@@ -57,7 +57,7 @@ __ieee754_sinhl(long double x)
return h*(t+t/(t+one));
}
- /* |x| in [22, log(maxdouble)] return 0.5*exp(|x|) */
+ /* |x| in [40, log(maxdouble)] return 0.5*exp(|x|) */
if (ix < 0x40862e42fefa39efLL) return h*__ieee754_expl(fabsl(x));
/* |x| in [log(maxdouble), overflowthresold] */
diff --git a/sysdeps/ieee754/ldbl-128ibm/k_cosl.c b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c
index 7ab9b5da06..fc01374688 100644
--- a/sysdeps/ieee754/ldbl-128ibm/k_cosl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double c[] = {
#define ONE c[0]
@@ -123,7 +123,11 @@ __kernel_cosl(long double x, long double y)
index = 0x3fe - (tix >> 20);
hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
- x = fabsl (x);
+ if (signbit (x))
+ {
+ x = -x;
+ y = -y;
+ }
switch (index)
{
case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break;
diff --git a/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c
index 23b726a6f3..98fe07d7a7 100644
--- a/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double c[] = {
#define ONE c[0]
@@ -151,7 +151,11 @@ __kernel_sincosl(long double x, long double y, long double *sinx, long double *c
index = 0x3fe - (tix >> 20);
hix = (tix + (0x2000 << index)) & (0xffffc000 << index);
- x = fabsl (x);
+ if (signbit (x))
+ {
+ x = -x;
+ y = -y;
+ }
switch (index)
{
case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break;
diff --git a/sysdeps/ieee754/ldbl-128ibm/k_sinl.c b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c
index a51f55cd43..94aba0b62d 100644
--- a/sysdeps/ieee754/ldbl-128ibm/k_sinl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double c[] = {
#define ONE c[0]
@@ -134,7 +134,7 @@ __kernel_sinl(long double x, long double y, int iy)
*/
SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
if (iy)
- l = y - (h - x);
+ l = (ix < 0 ? -y : y) - (h - x);
else
l = x - h;
z = l * l;
diff --git a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c
index 478e501c81..1f6bad241b 100644
--- a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c
@@ -56,8 +56,8 @@
* = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y)))
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
pio4hi = 7.8539816339744830961566084581987569936977E-1L,
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c b/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c
index bc5a066edf..a833457eab 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: s_asinh.c,v 1.9 1995/05/12 04:57:37 jtc Exp $";
* := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2)))
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
static const long double
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_atanl.c b/sysdeps/ieee754/ldbl-128ibm/s_atanl.c
index 49c4728c95..779209d3d7 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_atanl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_atanl.c
@@ -60,7 +60,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
/* arctan(k/8), k = 0, ..., 82 */
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c b/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c
index f3a906e657..a16a886852 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* with the sign bit of y.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
long double __copysignl(long double x, long double y)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_cosl.c b/sysdeps/ieee754/ldbl-128ibm/s_cosl.c
index 57bae0cab6..23148392f1 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_cosl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_cosl.c
@@ -45,8 +45,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
long double __cosl(long double x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c b/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c
index 2945909f95..e4126395bd 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c
@@ -22,7 +22,7 @@
#include <math.h>
#include <math_ldbl_opt.h>
-#include "math_private.h"
+#include <math_private.h>
__complex__ long double
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c b/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c
index 8d59535c64..0b1bc4f70e 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c
@@ -22,7 +22,7 @@
#include <math.h>
#include <math_ldbl_opt.h>
-#include "math_private.h"
+#include <math_private.h>
__complex__ long double
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_erfl.c b/sysdeps/ieee754/ldbl-128ibm/s_erfl.c
index 85cdbe0ff8..f91a00ff5d 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_erfl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_erfl.c
@@ -96,8 +96,8 @@
* erfc/erf(NaN) is NaN
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */
@@ -920,7 +920,8 @@ __erfcl (long double x)
}
u.value = x;
u.parts32.w3 = 0;
- u.parts32.w2 &= 0xffffe000;
+ u.parts32.w2 = 0;
+ u.parts32.w1 &= 0xf8000000;
z = u.value;
r = __ieee754_expl (-z * z - 0.5625) *
__ieee754_expl ((z - x) * (z + x) + p);
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c b/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c
index 968d8f9722..98ae4e1cee 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c
@@ -52,8 +52,8 @@
<http://www.gnu.org/licenses/>. */
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
/* exp(x) - 1 = x + 0.5 x^2 + x^3 P(x)/Q(x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c b/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c
index a288eac373..99146d8021 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* fabsl(x) returns the absolute value of x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
long double __fabsl(long double x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_finitel.c b/sysdeps/ieee754/ldbl-128ibm/s_finitel.c
index 49f2c92385..8edb34154d 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_finitel.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_finitel.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
int
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c
index c6ac22e08d..c0246d2594 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
/*
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
index 215083bc27..3ac5374116 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* with *exp=0.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
static const long double
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c b/sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c
index 106c7311c7..a6f0e1e678 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include <limits.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
int __ilogbl(long double x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c b/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c
index edeaba5f7c..c8dd9ff98a 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c
@@ -3,8 +3,8 @@
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinf_nsl (long double x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c b/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c
index 717b57466d..5f5b0144b2 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c
@@ -13,8 +13,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
int
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c b/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c
index ae5ba8e1ff..157666cfbd 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
int
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
index 30a53300c3..77c4fdea84 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
@@ -53,8 +53,8 @@
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_logbl.c b/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
index 10ae684d1c..f38b129971 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* Use ilogb instead.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
long double __logbl(long double x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_modfl.c b/sysdeps/ieee754/ldbl-128ibm/s_modfl.c
index 1fe323595a..39de9d4bfb 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_modfl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_modfl.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* No exception.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
static const long double one = 1.0;
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
index bcf265d401..9ecfef179b 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
@@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <math_ldbl_opt.h>
#include <float.h>
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
index e88361a936..a674583744 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
@@ -18,7 +18,7 @@
static char rcsid[] = "$NetBSD: $";
#endif
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <math_ldbl_opt.h>
#include <float.h>
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
index d081aee7a1..bb7a987af9 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c b/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c
index a1632e77fc..e84561701f 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: $";
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
static const long double
@@ -52,10 +52,12 @@ long double __scalblnl (long double x, long int n)
k = ((hx>>52)&0x7ff) - 54;
}
else if (k==0x7ff) return x+x; /* NaN or Inf */
- k = k+n;
- if (n> 50000 || k > 0x7fe)
- return huge*__copysignl(huge,x); /* overflow */
if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow */
+ if (n> 50000 || k+n > 0x7fe)
+ return huge*__copysignl(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (k > 0) { /* normal result */
hx = (hx&0x800fffffffffffffULL)|(k<<52);
if ((lx & 0x7fffffffffffffffULL) == 0) { /* low part +-0 */
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c b/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c
index a52cd42f0b..01cdb70e1d 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c
@@ -25,8 +25,8 @@ static char rcsid[] = "$NetBSD: $";
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
static const long double
@@ -52,10 +52,12 @@ long double __scalbnl (long double x, int n)
k = ((hx>>52)&0x7ff) - 54;
}
else if (k==0x7ff) return x+x; /* NaN or Inf */
- k = k+n;
- if (n> 50000 || k > 0x7fe)
- return huge*__copysignl(huge,x); /* overflow */
if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow */
+ if (n> 50000 || k+n > 0x7fe)
+ return huge*__copysignl(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (k > 0) { /* normal result */
hx = (hx&0x800fffffffffffffULL)|(k<<52);
if ((lx & 0x7fffffffffffffffULL) == 0) { /* low part +-0 */
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c b/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
index 082f86ffdb..964972750f 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
@@ -18,7 +18,7 @@
<http://www.gnu.org/licenses/>. */
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
int
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c b/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c
index f099fec200..0b9d661591 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include <math_ldbl_opt.h>
void
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_sinl.c b/sysdeps/ieee754/ldbl-128ibm/s_sinl.c
index e26d998888..6fec16f851 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_sinl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_sinl.c
@@ -45,8 +45,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
long double __sinl(long double x)
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c b/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c
index 40df484c8a..138b63cd1a 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c
@@ -38,8 +38,8 @@ static char rcsid[] = "$NetBSD: s_tanh.c,v 1.7 1995/05/10 20:48:22 jtc Exp $";
* only tanh(0)=0 is exact for finite argument.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
static const long double one=1.0L, two=2.0L, tiny = 1.0e-300L;
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_tanl.c b/sysdeps/ieee754/ldbl-128ibm/s_tanl.c
index 3de0a0da27..9967d0c206 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_tanl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_tanl.c
@@ -45,8 +45,8 @@
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <math_ldbl_opt.h>
long double __tanl(long double x)
diff --git a/sysdeps/ieee754/ldbl-96/e_acoshl.c b/sysdeps/ieee754/ldbl-96/e_acoshl.c
index 29004ec267..bbaef680bd 100644
--- a/sysdeps/ieee754/ldbl-96/e_acoshl.c
+++ b/sysdeps/ieee754/ldbl-96/e_acoshl.c
@@ -28,8 +28,8 @@
* acoshl(NaN) is NaN without signal.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0,
diff --git a/sysdeps/ieee754/ldbl-96/e_asinl.c b/sysdeps/ieee754/ldbl-96/e_asinl.c
index f71cd93128..c33701f11e 100644
--- a/sysdeps/ieee754/ldbl-96/e_asinl.c
+++ b/sysdeps/ieee754/ldbl-96/e_asinl.c
@@ -58,8 +58,8 @@
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.0L,
diff --git a/sysdeps/ieee754/ldbl-96/e_atan2l.c b/sysdeps/ieee754/ldbl-96/e_atan2l.c
index 535d0d6123..209f29bbd2 100644
--- a/sysdeps/ieee754/ldbl-96/e_atan2l.c
+++ b/sysdeps/ieee754/ldbl-96/e_atan2l.c
@@ -41,8 +41,8 @@
* to produce the hexadecimal values shown.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
tiny = 1.0e-4900L,
diff --git a/sysdeps/ieee754/ldbl-96/e_atanhl.c b/sysdeps/ieee754/ldbl-96/e_atanhl.c
index 0f3c7fb596..4c29243695 100644
--- a/sysdeps/ieee754/ldbl-96/e_atanhl.c
+++ b/sysdeps/ieee754/ldbl-96/e_atanhl.c
@@ -32,8 +32,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, huge = 1e4900L;
diff --git a/sysdeps/ieee754/ldbl-96/e_coshl.c b/sysdeps/ieee754/ldbl-96/e_coshl.c
index 6113f0719f..995c9922cb 100644
--- a/sysdeps/ieee754/ldbl-96/e_coshl.c
+++ b/sysdeps/ieee754/ldbl-96/e_coshl.c
@@ -34,8 +34,8 @@ static char rcsid[] = "$NetBSD: e_cosh.c,v 1.7 1995/05/10 20:44:58 jtc Exp $";
* only coshl(0)=1 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, half=0.5, huge = 1.0e4900L;
diff --git a/sysdeps/ieee754/ldbl-96/e_hypotl.c b/sysdeps/ieee754/ldbl-96/e_hypotl.c
index 7a1ad3fd23..306f92924c 100644
--- a/sysdeps/ieee754/ldbl-96/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-96/e_hypotl.c
@@ -46,8 +46,8 @@
* than 1 ulps (units in the last place)
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __ieee754_hypotl(long double x, long double y)
{
diff --git a/sysdeps/ieee754/ldbl-96/e_j0l.c b/sysdeps/ieee754/ldbl-96/e_j0l.c
index 0e64bee7c2..3939259d81 100644
--- a/sysdeps/ieee754/ldbl-96/e_j0l.c
+++ b/sysdeps/ieee754/ldbl-96/e_j0l.c
@@ -71,8 +71,8 @@
* 3. Special cases: y0(0)=-inf, y0(x<0)=NaN, y0(inf)=0.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static long double pzero (long double), qzero (long double);
diff --git a/sysdeps/ieee754/ldbl-96/e_j1l.c b/sysdeps/ieee754/ldbl-96/e_j1l.c
index 8710e38934..785c0b0676 100644
--- a/sysdeps/ieee754/ldbl-96/e_j1l.c
+++ b/sysdeps/ieee754/ldbl-96/e_j1l.c
@@ -71,8 +71,8 @@
* by method mentioned above.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static long double pone (long double), qone (long double);
diff --git a/sysdeps/ieee754/ldbl-96/e_jnl.c b/sysdeps/ieee754/ldbl-96/e_jnl.c
index 5c9c0530f1..2e206e7e22 100644
--- a/sysdeps/ieee754/ldbl-96/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-96/e_jnl.c
@@ -56,8 +56,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
invsqrtpi = 5.64189583547756286948079e-1L, two = 2.0e0L, one = 1.0e0L;
diff --git a/sysdeps/ieee754/ldbl-96/e_lgammal_r.c b/sysdeps/ieee754/ldbl-96/e_lgammal_r.c
index 741a26f4d0..1a95f846ae 100644
--- a/sysdeps/ieee754/ldbl-96/e_lgammal_r.c
+++ b/sysdeps/ieee754/ldbl-96/e_lgammal_r.c
@@ -91,8 +91,8 @@
*
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
half = 0.5L,
diff --git a/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c
new file mode 100644
index 0000000000..b72230962d
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c
@@ -0,0 +1,236 @@
+/* Extended-precision floating point argument reduction.
+ Copyright (C) 1999-2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Based on quad-precision code by Jakub Jelinek <jj@ultra.linux.cz>
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+/* Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi. */
+static const int32_t two_over_pi[] = {
+0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62,
+0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a,
+0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129,
+0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41,
+0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8,
+0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf,
+0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5,
+0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08,
+0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3,
+0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880,
+0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b,
+0x47c419, 0xc367cd, 0xdce809, 0x2a8359, 0xc4768b, 0x961ca6,
+0xddaf44, 0xd15719, 0x053ea5, 0xff0705, 0x3f7e33, 0xe832c2,
+0xde4f98, 0x327dbb, 0xc33d26, 0xef6b1e, 0x5ef89f, 0x3a1f35,
+0xcaf27f, 0x1d87f1, 0x21907c, 0x7c246a, 0xfa6ed5, 0x772d30,
+0x433b15, 0xc614b5, 0x9d19c3, 0xc2c4ad, 0x414d2c, 0x5d000c,
+0x467d86, 0x2d71e3, 0x9ac69b, 0x006233, 0x7cd2b4, 0x97a7b4,
+0xd55537, 0xf63ed7, 0x1810a3, 0xfc764d, 0x2a9d64, 0xabd770,
+0xf87c63, 0x57b07a, 0xe71517, 0x5649c0, 0xd9d63b, 0x3884a7,
+0xcb2324, 0x778ad6, 0x23545a, 0xb91f00, 0x1b0af1, 0xdfce19,
+0xff319f, 0x6a1e66, 0x615799, 0x47fbac, 0xd87f7e, 0xb76522,
+0x89e832, 0x60bfe6, 0xcdc4ef, 0x09366c, 0xd43f5d, 0xd7de16,
+0xde3b58, 0x929bde, 0x2822d2, 0xe88628, 0x4d58e2, 0x32cac6,
+0x16e308, 0xcb7de0, 0x50c017, 0xa71df3, 0x5be018, 0x34132e,
+0x621283, 0x014883, 0x5b8ef5, 0x7fb0ad, 0xf2e91e, 0x434a48,
+0xd36710, 0xd8ddaa, 0x425fae, 0xce616a, 0xa4280a, 0xb499d3,
+0xf2a606, 0x7f775c, 0x83c2a3, 0x883c61, 0x78738a, 0x5a8caf,
+0xbdd76f, 0x63a62d, 0xcbbff4, 0xef818d, 0x67c126, 0x45ca55,
+0x36d9ca, 0xd2a828, 0x8d61c2, 0x77c912, 0x142604, 0x9b4612,
+0xc459c4, 0x44c5c8, 0x91b24d, 0xf31700, 0xad43d4, 0xe54929,
+0x10d5fd, 0xfcbe00, 0xcc941e, 0xeece70, 0xf53e13, 0x80f1ec,
+0xc3e7b3, 0x28f8c7, 0x940593, 0x3e71c1, 0xb3092e, 0xf3450b,
+0x9c1288, 0x7b20ab, 0x9fb52e, 0xc29247, 0x2f327b, 0x6d550c,
+0x90a772, 0x1fe76b, 0x96cb31, 0x4a1679, 0xe27941, 0x89dff4,
+0x9794e8, 0x84e6e2, 0x973199, 0x6bed88, 0x365f5f, 0x0efdbb,
+0xb49a48, 0x6ca467, 0x427271, 0x325d8d, 0xb8159f, 0x09e5bc,
+0x25318d, 0x3974f7, 0x1c0530, 0x010c0d, 0x68084b, 0x58ee2c,
+0x90aa47, 0x02e774, 0x24d6bd, 0xa67df7, 0x72486e, 0xef169f,
+0xa6948e, 0xf691b4, 0x5153d1, 0xf20acf, 0x339820, 0x7e4bf5,
+0x6863b2, 0x5f3edd, 0x035d40, 0x7f8985, 0x295255, 0xc06437,
+0x10d86d, 0x324832, 0x754c5b, 0xd4714e, 0x6e5445, 0xc1090b,
+0x69f52a, 0xd56614, 0x9d0727, 0x50045d, 0xdb3bb4, 0xc576ea,
+0x17f987, 0x7d6b49, 0xba271d, 0x296996, 0xacccc6, 0x5414ad,
+0x6ae290, 0x89d988, 0x50722c, 0xbea404, 0x940777, 0x7030f3,
+0x27fc00, 0xa871ea, 0x49c266, 0x3de064, 0x83dd97, 0x973fa3,
+0xfd9443, 0x8c860d, 0xde4131, 0x9d3992, 0x8c70dd, 0xe7b717,
+0x3bdf08, 0x2b3715, 0xa0805c, 0x93805a, 0x921110, 0xd8e80f,
+0xaf806c, 0x4bffdb, 0x0f9038, 0x761859, 0x15a562, 0xbbcb61,
+0xb989c7, 0xbd4010, 0x04f2d2, 0x277549, 0xf6b6eb, 0xbb22db,
+0xaa140a, 0x2f2689, 0x768364, 0x333b09, 0x1a940e, 0xaa3a51,
+0xc2a31d, 0xaeedaf, 0x12265c, 0x4dc26d, 0x9c7a2d, 0x9756c0,
+0x833f03, 0xf6f009, 0x8c402b, 0x99316d, 0x07b439, 0x15200c,
+0x5bc3d8, 0xc492f5, 0x4badc6, 0xa5ca4e, 0xcd37a7, 0x36a9e6,
+0x9492ab, 0x6842dd, 0xde6319, 0xef8c76, 0x528b68, 0x37dbfc,
+0xaba1ae, 0x3115df, 0xa1ae00, 0xdafb0c, 0x664d64, 0xb705ed,
+0x306529, 0xbf5657, 0x3aff47, 0xb9f96a, 0xf3be75, 0xdf9328,
+0x3080ab, 0xf68c66, 0x15cb04, 0x0622fa, 0x1de4d9, 0xa4b33d,
+0x8f1b57, 0x09cd36, 0xe9424e, 0xa4be13, 0xb52333, 0x1aaaf0,
+0xa8654f, 0xa5c1d2, 0x0f3f0b, 0xcd785b, 0x76f923, 0x048b7b,
+0x721789, 0x53a6c6, 0xe26e6f, 0x00ebef, 0x584a9b, 0xb7dac4,
+0xba66aa, 0xcfcf76, 0x1d02d1, 0x2df1b1, 0xc1998c, 0x77adc3,
+0xda4886, 0xa05df7, 0xf480c6, 0x2ff0ac, 0x9aecdd, 0xbc5c3f,
+0x6dded0, 0x1fc790, 0xb6db2a, 0x3a25a3, 0x9aaf00, 0x9353ad,
+0x0457b6, 0xb42d29, 0x7e804b, 0xa707da, 0x0eaa76, 0xa1597b,
+0x2a1216, 0x2db7dc, 0xfde5fa, 0xfedb89, 0xfdbe89, 0x6c76e4,
+0xfca906, 0x70803e, 0x156e85, 0xff87fd, 0x073e28, 0x336761,
+0x86182a, 0xeabd4d, 0xafe7b3, 0x6e6d8f, 0x396795, 0x5bbf31,
+0x48d784, 0x16df30, 0x432dc7, 0x356125, 0xce70c9, 0xb8cb30,
+0xfd6cbf, 0xa200a4, 0xe46c05, 0xa0dd5a, 0x476f21, 0xd21262,
+0x845cb9, 0x496170, 0xe0566b, 0x015299, 0x375550, 0xb7d51e,
+0xc4f133, 0x5f6e13, 0xe4305d, 0xa92e85, 0xc3b21d, 0x3632a1,
+0xa4b708, 0xd4b1ea, 0x21f716, 0xe4698f, 0x77ff27, 0x80030c,
+0x2d408d, 0xa0cd4f, 0x99a520, 0xd3a2b3, 0x0a5d2f, 0x42f9b4,
+0xcbda11, 0xd0be7d, 0xc1db9b, 0xbd17ab, 0x81a2ca, 0x5c6a08,
+0x17552e, 0x550027, 0xf0147f, 0x8607e1, 0x640b14, 0x8d4196,
+0xdebe87, 0x2afdda, 0xb6256b, 0x34897b, 0xfef305, 0x9ebfb9,
+0x4f6a68, 0xa82a4a, 0x5ac44f, 0xbcf82d, 0x985ad7, 0x95c7f4,
+0x8d4d0d, 0xa63a20, 0x5f57a4, 0xb13f14, 0x953880, 0x0120cc,
+0x86dd71, 0xb6dec9, 0xf560bf, 0x11654d, 0x6b0701, 0xacb08c,
+0xd0c0b2, 0x485551, 0x0efb1e, 0xc37295, 0x3b06a3, 0x3540c0,
+0x7bdc06, 0xcc45e0, 0xfa294e, 0xc8cad6, 0x41f3e8, 0xde647c,
+0xd8649b, 0x31bed9, 0xc397a4, 0xd45877, 0xc5e369, 0x13daf0,
+0x3c3aba, 0x461846, 0x5f7555, 0xf5bdd2, 0xc6926e, 0x5d2eac,
+0xed440e, 0x423e1c, 0x87c461, 0xe9fd29, 0xf3d6e7, 0xca7c22,
+0x35916f, 0xc5e008, 0x8dd7ff, 0xe26a6e, 0xc6fdb0, 0xc10893,
+0x745d7c, 0xb2ad6b, 0x9d6ecd, 0x7b723e, 0x6a11c6, 0xa9cff7,
+0xdf7329, 0xbac9b5, 0x5100b7, 0x0db2e2, 0x24ba74, 0x607de5,
+0x8ad874, 0x2c150d, 0x0c1881, 0x94667e, 0x162901, 0x767a9f,
+0xbefdfd, 0xef4556, 0x367ed9, 0x13d9ec, 0xb9ba8b, 0xfc97c4,
+0x27a831, 0xc36ef1, 0x36c594, 0x56a8d8, 0xb5a8b4, 0x0ecccf,
+0x2d8912, 0x34576f, 0x89562c, 0xe3ce99, 0xb920d6, 0xaa5e6b,
+0x9c2a3e, 0xcc5f11, 0x4a0bfd, 0xfbf4e1, 0x6d3b8e, 0x2c86e2,
+0x84d4e9, 0xa9b4fc, 0xd1eeef, 0xc9352e, 0x61392f, 0x442138,
+0xc8d91b, 0x0afc81, 0x6a4afb, 0xd81c2f, 0x84b453, 0x8c994e,
+0xcc2254, 0xdc552a, 0xd6c6c0, 0x96190b, 0xb8701a, 0x649569,
+0x605a26, 0xee523f, 0x0f117f, 0x11b5f4, 0xf5cbfc, 0x2dbc34,
+0xeebc34, 0xcc5de8, 0x605edd, 0x9b8e67, 0xef3392, 0xb817c9,
+0x9b5861, 0xbc57e1, 0xc68351, 0x103ed8, 0x4871dd, 0xdd1c2d,
+0xa118af, 0x462c21, 0xd7f359, 0x987ad9, 0xc0549e, 0xfa864f,
+0xfc0656, 0xae79e5, 0x362289, 0x22ad38, 0xdc9367, 0xaae855,
+0x382682, 0x9be7ca, 0xa40d51, 0xb13399, 0x0ed7a9, 0x480569,
+0xf0b265, 0xa7887f, 0x974c88, 0x36d1f9, 0xb39221, 0x4a827b,
+0x21cf98, 0xdc9f40, 0x5547dc, 0x3a74e1, 0x42eb67, 0xdf9dfe,
+0x5fd45e, 0xa4677b, 0x7aacba, 0xa2f655, 0x23882b, 0x55ba41,
+0x086e59, 0x862a21, 0x834739, 0xe6e389, 0xd49ee5, 0x40fb49,
+0xe956ff, 0xca0f1c, 0x8a59c5, 0x2bfa94, 0xc5c1d3, 0xcfc50f,
+0xae5adb, 0x86c547, 0x624385, 0x3b8621, 0x94792c, 0x876110,
+0x7b4c2a, 0x1a2c80, 0x12bf43, 0x902688, 0x893c78, 0xe4c4a8,
+0x7bdbe5, 0xc23ac4, 0xeaf426, 0x8a67f7, 0xbf920d, 0x2ba365,
+0xb1933d, 0x0b7cbd, 0xdc51a4, 0x63dd27, 0xdde169, 0x19949a,
+0x9529a8, 0x28ce68, 0xb4ed09, 0x209f44, 0xca984e, 0x638270,
+0x237c7e, 0x32b90f, 0x8ef5a7, 0xe75614, 0x08f121, 0x2a9db5,
+0x4d7e6f, 0x5119a5, 0xabf9b5, 0xd6df82, 0x61dd96, 0x023616,
+0x9f3ac4, 0xa1a283, 0x6ded72, 0x7a8d39, 0xa9b882, 0x5c326b,
+0x5b2746, 0xed3400, 0x7700d2, 0x55f4fc, 0x4d5901, 0x8071e0,
+0xe13f89, 0xb295f3, 0x64a8f1, 0xaea74b, 0x38fc4c, 0xeab2bb,
+0x47270b, 0xabc3a7, 0x34ba60, 0x52dd34, 0xf8563a, 0xeb7e8a,
+0x31bb36, 0x5895b7, 0x47f7a9, 0x94c3aa, 0xd39225, 0x1e7f3e,
+0xd8974e, 0xbba94f, 0xd8ae01, 0xe661b4, 0x393d8e, 0xa523aa,
+0x33068e, 0x1633b5, 0x3bb188, 0x1d3a9d, 0x4013d0, 0xcc1be5,
+0xf862e7, 0x3bf28f, 0x39b5bf, 0x0bc235, 0x22747e, 0xa247c0,
+0xd52d1f, 0x19add3, 0x9094df, 0x9311d0, 0xb42b25, 0x496db2,
+0xe264b2, 0x5ef135, 0x3bc6a4, 0x1a4ad0, 0xaac92e, 0x64e886,
+0x573091, 0x982cfb, 0x311b1a, 0x08728b, 0xbdcee1, 0x60e142,
+0xeb641d, 0xd0bba3, 0xe559d4, 0x597b8c, 0x2a4483, 0xf332ba,
+0xf84867, 0x2c8d1b, 0x2fa9b0, 0x50f3dd, 0xf9f573, 0xdb61b4,
+0xfe233e, 0x6c41a6, 0xeea318, 0x775a26, 0xbc5e5c, 0xcea708,
+0x94dc57, 0xe20196, 0xf1e839, 0xbe4851, 0x5d2d2f, 0x4e9555,
+0xd96ec2, 0xe7d755, 0x6304e0, 0xc02e0e, 0xfc40a0, 0xbbf9b3,
+0x7125a7, 0x222dfb, 0xf619d8, 0x838c1c, 0x6619e6, 0xb20d55,
+0xbb5137, 0x79e809, 0xaf9149, 0x0d73de, 0x0b0da5, 0xce7f58,
+0xac1934, 0x724667, 0x7a1a13, 0x9e26bc, 0x4555e7, 0x585cb5,
+0x711d14, 0x486991, 0x480d60, 0x56adab, 0xd62f64, 0x96ee0c,
+0x212ff3, 0x5d6d88, 0xa67684, 0x95651e, 0xab9e0a, 0x4ddefe,
+0x571010, 0x836a39, 0xf8ea31, 0x9e381d, 0xeac8b1, 0xcac96b,
+0x37f21e, 0xd505e9, 0x984743, 0x9fc56c, 0x0331b7, 0x3b8bf8,
+0x86e56a, 0x8dc343, 0x6230e7, 0x93cfd5, 0x6a8f2d, 0x733005,
+0x1af021, 0xa09fcb, 0x7415a1, 0xd56b23, 0x6ff725, 0x2f4bc7,
+0xb8a591, 0x7fac59, 0x5c55de, 0x212c38, 0xb13296, 0x5cff50,
+0x366262, 0xfa7b16, 0xf4d9a6, 0x2acfe7, 0xf07403, 0xd4d604,
+0x6fd916, 0x31b1bf, 0xcbb450, 0x5bd7c8, 0x0ce194, 0x6bd643,
+0x4fd91c, 0xdf4543, 0x5f3453, 0xe2b5aa, 0xc9aec8, 0x131485,
+0xf9d2bf, 0xbadb9e, 0x76f5b9, 0xaf15cf, 0xca3182, 0x14b56d,
+0xe9fe4d, 0x50fc35, 0xf5aed5, 0xa2d0c1, 0xc96057, 0x192eb6,
+0xe91d92, 0x07d144, 0xaea3c6, 0x343566, 0x26d5b4, 0x3161e2,
+0x37f1a2, 0x209eff, 0x958e23, 0x493798, 0x35f4a6, 0x4bdc02,
+0xc2be13, 0xbe80a0, 0x0b72a3, 0x115c5f, 0x1e1bd1, 0x0db4d3,
+0x869e85, 0x96976b, 0x2ac91f, 0x8a26c2, 0x3070f0, 0x041412,
+0xfc9fa5, 0xf72a38, 0x9c6878, 0xe2aa76, 0x50cfe1, 0x559274,
+0x934e38, 0x0a92f7, 0x5533f0, 0xa63db4, 0x399971, 0xe2b755,
+0xa98a7c, 0x008f19, 0xac54d2, 0x2ea0b4, 0xf5f3e0, 0x60c849,
+0xffd269, 0xae52ce, 0x7a5fdd, 0xe9ce06, 0xfb0ae8, 0xa50cce,
+0xea9d3e, 0x3766dd, 0xb834f5, 0x0da090, 0x846f88, 0x4ae3d5,
+0x099a03, 0x2eae2d, 0xfcb40a, 0xfb9b33, 0xe281dd, 0x1b16ba,
+0xd8c0af, 0xd96b97, 0xb52dc9, 0x9c277f, 0x5951d5, 0x21ccd6,
+0xb6496b, 0x584562, 0xb3baf2, 0xa1a5c4, 0x7ca2cf, 0xa9b93d,
+0x7b7b89, 0x483d38,
+};
+
+int32_t
+__ieee754_rem_pio2l (long double x, long double *y)
+{
+ double tx[3], ty[3];
+ int32_t se, j0;
+ u_int32_t i0, i1;
+ int sx;
+ int n, exp;
+
+ GET_LDOUBLE_WORDS (se, i0, i1, x);
+ sx = (se >> 15) & 1;
+ j0 = (se & 0x7fff) - 0x3fff;
+
+ if (j0 < -1)
+ {
+ /* |x| < pi/4. */
+ y[0] = x;
+ y[1] = 0;
+ return 0;
+ }
+
+ if (j0 >= 0x8000)
+ {
+ /* x is infinite or NaN. */
+ y[0] = x - x;
+ y[1] = y[0];
+ return 0;
+ }
+
+ /* Split the 64 bits of the mantissa into three 24-bit integers
+ stored in a double array. */
+ exp = j0 - 23;
+ tx[0] = (double) (i0 >> 8);
+ tx[1] = (double) (((i0 << 16) | (i1 >> 16)) & 0xffffff);
+ tx[2] = (double) ((i1 << 8) & 0xffffff);
+
+ n = __kernel_rem_pio2 (tx, ty, exp, 3, 2, two_over_pi);
+
+ /* The result is now stored in two double values, we need to convert
+ it into two long double values. */
+ if (sx == 0)
+ {
+ y[0] = (long double) ty[0] + (long double) ty[1];
+ y[1] = ty[1] - (y[0] - ty[0]);
+ return n;
+ }
+ else
+ {
+ y[0] = -((long double) ty[0] + (long double) ty[1]);
+ y[1] = -ty[1] - (y[0] + ty[0]);
+ return -n;
+ }
+}
diff --git a/sysdeps/ieee754/ldbl-96/e_remainderl.c b/sysdeps/ieee754/ldbl-96/e_remainderl.c
index 41c4c7b34e..290e483ae5 100644
--- a/sysdeps/ieee754/ldbl-96/e_remainderl.c
+++ b/sysdeps/ieee754/ldbl-96/e_remainderl.c
@@ -23,8 +23,8 @@
* Based on fmod() return x-[x/p]chopped*p exactlp.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double zero = 0.0;
diff --git a/sysdeps/ieee754/ldbl-96/e_sinhl.c b/sysdeps/ieee754/ldbl-96/e_sinhl.c
index 8593272406..4978f348bb 100644
--- a/sysdeps/ieee754/ldbl-96/e_sinhl.c
+++ b/sysdeps/ieee754/ldbl-96/e_sinhl.c
@@ -36,8 +36,8 @@ static char rcsid[] = "$NetBSD: $";
* only sinhl(0)=0 is exact for finite x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0, shuge = 1.0e4931L;
diff --git a/sysdeps/ieee754/ldbl-96/k_cosl.c b/sysdeps/ieee754/ldbl-96/k_cosl.c
new file mode 100644
index 0000000000..9e8f33a283
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/k_cosl.c
@@ -0,0 +1,123 @@
+/* Extended-precision floating point cosine on <-pi/4,pi/4>.
+ Copyright (C) 1999-2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Based on quad-precision cosine by Jakub Jelinek <jj@ultra.linux.cz>
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+/* The polynomials have not been optimized for extended-precision and
+ may contain more terms than needed. */
+
+static const long double c[] = {
+#define ONE c[0]
+ 1.00000000000000000000000000000000000E+00L,
+
+/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 )
+ x in <0,1/256> */
+#define SCOS1 c[1]
+#define SCOS2 c[2]
+#define SCOS3 c[3]
+#define SCOS4 c[4]
+#define SCOS5 c[5]
+-5.00000000000000000000000000000000000E-01L,
+ 4.16666666666666666666666666556146073E-02L,
+-1.38888888888888888888309442601939728E-03L,
+ 2.48015873015862382987049502531095061E-05L,
+-2.75573112601362126593516899592158083E-07L,
+
+/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 )
+ x in <0,0.1484375> */
+#define COS1 c[6]
+#define COS2 c[7]
+#define COS3 c[8]
+#define COS4 c[9]
+#define COS5 c[10]
+#define COS6 c[11]
+#define COS7 c[12]
+#define COS8 c[13]
+-4.99999999999999999999999999999999759E-01L,
+ 4.16666666666666666666666666651287795E-02L,
+-1.38888888888888888888888742314300284E-03L,
+ 2.48015873015873015867694002851118210E-05L,
+-2.75573192239858811636614709689300351E-07L,
+ 2.08767569877762248667431926878073669E-09L,
+-1.14707451049343817400420280514614892E-11L,
+ 4.77810092804389587579843296923533297E-14L,
+
+/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 )
+ x in <0,1/256> */
+#define SSIN1 c[14]
+#define SSIN2 c[15]
+#define SSIN3 c[16]
+#define SSIN4 c[17]
+#define SSIN5 c[18]
+-1.66666666666666666666666666666666659E-01L,
+ 8.33333333333333333333333333146298442E-03L,
+-1.98412698412698412697726277416810661E-04L,
+ 2.75573192239848624174178393552189149E-06L,
+-2.50521016467996193495359189395805639E-08L,
+};
+
+#define SINCOSL_COS_HI 0
+#define SINCOSL_COS_LO 1
+#define SINCOSL_SIN_HI 2
+#define SINCOSL_SIN_LO 3
+extern const long double __sincosl_table[];
+
+long double
+__kernel_cosl(long double x, long double y)
+{
+ long double h, l, z, sin_l, cos_l_m1;
+ int index;
+
+ if (signbit (x))
+ {
+ x = -x;
+ y = -y;
+ }
+ if (x < 0.1484375L)
+ {
+ /* Argument is small enough to approximate it by a Chebyshev
+ polynomial of degree 16. */
+ if (x < 0x1p-33L)
+ if (!((int)x)) return ONE; /* generate inexact */
+ z = x * x;
+ return ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+
+ z*(COS5+z*(COS6+z*(COS7+z*COS8))))))));
+ }
+ else
+ {
+ /* So that we don't have to use too large polynomial, we find
+ l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83
+ possible values for h. We look up cosl(h) and sinl(h) in
+ pre-computed tables, compute cosl(l) and sinl(l) using a
+ Chebyshev polynomial of degree 10(11) and compute
+ cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */
+ index = (int) (128 * (x - (0.1484375L - 1.0L / 256.0L)));
+ h = 0.1484375L + index / 128.0;
+ index *= 4;
+ l = y - (h - x);
+ z = l * l;
+ sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5)))));
+ cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5))));
+ return __sincosl_table [index + SINCOSL_COS_HI]
+ + (__sincosl_table [index + SINCOSL_COS_LO]
+ - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l
+ - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1));
+ }
+}
diff --git a/sysdeps/ieee754/ldbl-96/k_sinl.c b/sysdeps/ieee754/ldbl-96/k_sinl.c
new file mode 100644
index 0000000000..feb24d9e79
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/k_sinl.c
@@ -0,0 +1,126 @@
+/* Quad-precision floating point sine on <-pi/4,pi/4>.
+ Copyright (C) 1999-2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Based on quad-precision sine by Jakub Jelinek <jj@ultra.linux.cz>
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The polynomials have not been optimized for extended-precision and
+ may contain more terms than needed. */
+
+#include <math.h>
+#include <math_private.h>
+
+/* The polynomials have not been optimized for extended-precision and
+ may contain more terms than needed. */
+
+static const long double c[] = {
+#define ONE c[0]
+ 1.00000000000000000000000000000000000E+00L,
+
+/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 )
+ x in <0,1/256> */
+#define SCOS1 c[1]
+#define SCOS2 c[2]
+#define SCOS3 c[3]
+#define SCOS4 c[4]
+#define SCOS5 c[5]
+-5.00000000000000000000000000000000000E-01L,
+ 4.16666666666666666666666666556146073E-02L,
+-1.38888888888888888888309442601939728E-03L,
+ 2.48015873015862382987049502531095061E-05L,
+-2.75573112601362126593516899592158083E-07L,
+
+/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 )
+ x in <0,0.1484375> */
+#define SIN1 c[6]
+#define SIN2 c[7]
+#define SIN3 c[8]
+#define SIN4 c[9]
+#define SIN5 c[10]
+#define SIN6 c[11]
+#define SIN7 c[12]
+#define SIN8 c[13]
+-1.66666666666666666666666666666666538e-01L,
+ 8.33333333333333333333333333307532934e-03L,
+-1.98412698412698412698412534478712057e-04L,
+ 2.75573192239858906520896496653095890e-06L,
+-2.50521083854417116999224301266655662e-08L,
+ 1.60590438367608957516841576404938118e-10L,
+-7.64716343504264506714019494041582610e-13L,
+ 2.81068754939739570236322404393398135e-15L,
+
+/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 )
+ x in <0,1/256> */
+#define SSIN1 c[14]
+#define SSIN2 c[15]
+#define SSIN3 c[16]
+#define SSIN4 c[17]
+#define SSIN5 c[18]
+-1.66666666666666666666666666666666659E-01L,
+ 8.33333333333333333333333333146298442E-03L,
+-1.98412698412698412697726277416810661E-04L,
+ 2.75573192239848624174178393552189149E-06L,
+-2.50521016467996193495359189395805639E-08L,
+};
+
+#define SINCOSL_COS_HI 0
+#define SINCOSL_COS_LO 1
+#define SINCOSL_SIN_HI 2
+#define SINCOSL_SIN_LO 3
+extern const long double __sincosl_table[];
+
+long double
+__kernel_sinl(long double x, long double y, int iy)
+{
+ long double absx, h, l, z, sin_l, cos_l_m1;
+ int index;
+
+ absx = fabsl (x);
+ if (absx < 0.1484375L)
+ {
+ /* Argument is small enough to approximate it by a Chebyshev
+ polynomial of degree 17. */
+ if (absx < 0x1p-33L)
+ if (!((int)x)) return x; /* generate inexact */
+ z = x * x;
+ return x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+
+ z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8)))))))));
+ }
+ else
+ {
+ /* So that we don't have to use too large polynomial, we find
+ l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83
+ possible values for h. We look up cosl(h) and sinl(h) in
+ pre-computed tables, compute cosl(l) and sinl(l) using a
+ Chebyshev polynomial of degree 10(11) and compute
+ sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l). */
+ index = (int) (128 * (absx - (0.1484375L - 1.0L / 256.0L)));
+ h = 0.1484375L + index / 128.0;
+ index *= 4;
+ if (iy)
+ l = (x < 0 ? -y : y) - (h - absx);
+ else
+ l = absx - h;
+ z = l * l;
+ sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5)))));
+ cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5))));
+ z = __sincosl_table [index + SINCOSL_SIN_HI]
+ + (__sincosl_table [index + SINCOSL_SIN_LO]
+ + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1)
+ + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l));
+ return (x < 0) ? -z : z;
+ }
+}
diff --git a/sysdeps/ieee754/ldbl-96/k_tanl.c b/sysdeps/ieee754/ldbl-96/k_tanl.c
new file mode 100644
index 0000000000..31cd236aa2
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/k_tanl.c
@@ -0,0 +1,137 @@
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ Long double expansions are
+ Copyright (C) 2001 Stephen L. Moshier <moshier@na-net.ornl.gov>
+ and are incorporated herein by permission of the author. The author
+ reserves the right to distribute this material elsewhere under different
+ copying permissions. These modifications are distributed here under
+ the following terms:
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* __kernel_tanl( x, y, k )
+ * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854
+ * Input x is assumed to be bounded by ~pi/4 in magnitude.
+ * Input y is the tail of x.
+ * Input k indicates whether tan (if k=1) or
+ * -1/tan (if k= -1) is returned.
+ *
+ * Algorithm
+ * 1. Since tan(-x) = -tan(x), we need only to consider positive x.
+ * 2. if x < 2^-33, return x with inexact if x!=0.
+ * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2)
+ * on [0,0.67433].
+ *
+ * Note: tan(x+y) = tan(x) + tan'(x)*y
+ * ~ tan(x) + (1+x*x)*y
+ * Therefore, for better accuracy in computing tan(x+y), let
+ * r = x^3 * R(x^2)
+ * then
+ * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y))
+ *
+ * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then
+ * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y))
+ * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y)))
+ */
+
+#include <math.h>
+#include <math_private.h>
+static const long double
+ one = 1.0L,
+ pio4hi = 0xc.90fdaa22168c235p-4L,
+ pio4lo = -0x3.b399d747f23e32ecp-68L,
+
+ /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2)
+ 0 <= x <= 0.6743316650390625
+ Peak relative error 8.0e-36 */
+ TH = 3.333333333333333333333333333333333333333E-1L,
+ T0 = -1.813014711743583437742363284336855889393E7L,
+ T1 = 1.320767960008972224312740075083259247618E6L,
+ T2 = -2.626775478255838182468651821863299023956E4L,
+ T3 = 1.764573356488504935415411383687150199315E2L,
+ T4 = -3.333267763822178690794678978979803526092E-1L,
+
+ U0 = -1.359761033807687578306772463253710042010E8L,
+ U1 = 6.494370630656893175666729313065113194784E7L,
+ U2 = -4.180787672237927475505536849168729386782E6L,
+ U3 = 8.031643765106170040139966622980914621521E4L,
+ U4 = -5.323131271912475695157127875560667378597E2L;
+ /* 1.000000000000000000000000000000000000000E0 */
+
+
+long double
+__kernel_tanl (long double x, long double y, int iy)
+{
+ long double z, r, v, w, s;
+ long double absx = fabsl (x);
+ int sign;
+
+ if (absx < 0x1p-33)
+ {
+ if ((int) x == 0)
+ { /* generate inexact */
+ if (x == 0 && iy == -1)
+ return one / fabsl (x);
+ else
+ return (iy == 1) ? x : -one / x;
+ }
+ }
+ if (absx >= 0.6743316650390625L)
+ {
+ if (signbit (x))
+ {
+ x = -x;
+ y = -y;
+ sign = -1;
+ }
+ else
+ sign = 1;
+ z = pio4hi - x;
+ w = pio4lo - y;
+ x = z + w;
+ y = 0.0;
+ }
+ z = x * x;
+ r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4)));
+ v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z))));
+ r = r / v;
+
+ s = z * x;
+ r = y + z * (s * r + y);
+ r += TH * s;
+ w = x + r;
+ if (absx >= 0.6743316650390625L)
+ {
+ v = (long double) iy;
+ w = (v - 2.0 * (x - (w * w / (w + v) - r)));
+ if (sign < 0)
+ w = -w;
+ return w;
+ }
+ if (iy == 1)
+ return w;
+ else
+ return -1.0 / (x + r);
+}
diff --git a/sysdeps/ieee754/ldbl-96/printf_fphex.c b/sysdeps/ieee754/ldbl-96/printf_fphex.c
index b1c9d7364c..acb0508b87 100644
--- a/sysdeps/ieee754/ldbl-96/printf_fphex.c
+++ b/sysdeps/ieee754/ldbl-96/printf_fphex.c
@@ -1,5 +1,5 @@
/* Print floating point number in hexadecimal notation according to ISO C99.
- Copyright (C) 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 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
@@ -58,6 +58,7 @@ do { \
\
/* We use a full nibble for the leading digit. */ \
leading = *numstr++; \
+ wnumstr++; \
\
/* We have 3 bits from the mantissa in the leading nibble. \
Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \
diff --git a/sysdeps/ieee754/ldbl-96/s_asinhl.c b/sysdeps/ieee754/ldbl-96/s_asinhl.c
index 415be5f19e..5e679bd719 100644
--- a/sysdeps/ieee754/ldbl-96/s_asinhl.c
+++ b/sysdeps/ieee754/ldbl-96/s_asinhl.c
@@ -29,8 +29,8 @@ static char rcsid[] = "$NetBSD: $";
* := signl(x)*log1pl(|x| + x^2/(1 + sqrtl(1+x^2)))
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
one = 1.000000000000000000000e+00L, /* 0x3FFF, 0x00000000, 0x00000000 */
diff --git a/sysdeps/ieee754/ldbl-96/s_cbrtl.c b/sysdeps/ieee754/ldbl-96/s_cbrtl.c
index a1286d32e8..07236345b9 100644
--- a/sysdeps/ieee754/ldbl-96/s_cbrtl.c
+++ b/sysdeps/ieee754/ldbl-96/s_cbrtl.c
@@ -18,8 +18,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#define CBRT2 1.2599210498948731648 /* 2^(1/3) */
diff --git a/sysdeps/ieee754/ldbl-96/s_ceill.c b/sysdeps/ieee754/ldbl-96/s_ceill.c
index 96cc27003e..aef8a32f63 100644
--- a/sysdeps/ieee754/ldbl-96/s_ceill.c
+++ b/sysdeps/ieee754/ldbl-96/s_ceill.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* Inexact flag raised if x not equal to ceil(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double huge = 1.0e4930;
diff --git a/sysdeps/ieee754/ldbl-96/s_copysignl.c b/sysdeps/ieee754/ldbl-96/s_copysignl.c
index 3a390e9ef3..b1c442452f 100644
--- a/sysdeps/ieee754/ldbl-96/s_copysignl.c
+++ b/sysdeps/ieee754/ldbl-96/s_copysignl.c
@@ -24,8 +24,8 @@ static char rcsid[] = "$NetBSD: $";
* with the sign bit of y.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __copysignl(long double x, long double y)
{
diff --git a/sysdeps/ieee754/ldbl-96/s_cosl.c b/sysdeps/ieee754/ldbl-96/s_cosl.c
index 6cfebf6382..8b0b7d3cc2 100644
--- a/sysdeps/ieee754/ldbl-96/s_cosl.c
+++ b/sysdeps/ieee754/ldbl-96/s_cosl.c
@@ -50,8 +50,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __cosl(long double x)
{
@@ -68,7 +68,7 @@ long double __cosl(long double x)
/* cos(Inf or NaN) is NaN */
else if (se==0x7fff) {
- if ((i0 | i1) == 0)
+ if (i1 == 0 && i0 == 0x80000000)
__set_errno (EDOM);
return x-x;
}
diff --git a/sysdeps/ieee754/ldbl-96/s_erfl.c b/sysdeps/ieee754/ldbl-96/s_erfl.c
index 9b25a18a8b..b49a49be98 100644
--- a/sysdeps/ieee754/ldbl-96/s_erfl.c
+++ b/sysdeps/ieee754/ldbl-96/s_erfl.c
@@ -104,8 +104,8 @@
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
tiny = 1e-4931L,
diff --git a/sysdeps/ieee754/ldbl-96/s_fabsl.c b/sysdeps/ieee754/ldbl-96/s_fabsl.c
index 3f5106dba2..fdc70e0dcd 100644
--- a/sysdeps/ieee754/ldbl-96/s_fabsl.c
+++ b/sysdeps/ieee754/ldbl-96/s_fabsl.c
@@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: $";
* fabsl(x) returns the absolute value of x.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __fabsl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-96/s_finitel.c b/sysdeps/ieee754/ldbl-96/s_finitel.c
index f30a4d2a22..fbf4cc691c 100644
--- a/sysdeps/ieee754/ldbl-96/s_finitel.c
+++ b/sysdeps/ieee754/ldbl-96/s_finitel.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __finitel(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-96/s_floorl.c b/sysdeps/ieee754/ldbl-96/s_floorl.c
index d44e36e908..cad7935b33 100644
--- a/sysdeps/ieee754/ldbl-96/s_floorl.c
+++ b/sysdeps/ieee754/ldbl-96/s_floorl.c
@@ -27,8 +27,8 @@ static char rcsid[] = "$NetBSD: $";
* Inexact flag raised if x not equal to floor(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double huge = 1.0e4930;
diff --git a/sysdeps/ieee754/ldbl-96/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-96/s_fpclassifyl.c
index e0b34a093a..3df59c2239 100644
--- a/sysdeps/ieee754/ldbl-96/s_fpclassifyl.c
+++ b/sysdeps/ieee754/ldbl-96/s_fpclassifyl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
diff --git a/sysdeps/ieee754/ldbl-96/s_frexpl.c b/sysdeps/ieee754/ldbl-96/s_frexpl.c
index 57444c5a48..ab217a659b 100644
--- a/sysdeps/ieee754/ldbl-96/s_frexpl.c
+++ b/sysdeps/ieee754/ldbl-96/s_frexpl.c
@@ -29,8 +29,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include <float.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
#if LDBL_MANT_DIG == 64
diff --git a/sysdeps/ieee754/ldbl-96/s_ilogbl.c b/sysdeps/ieee754/ldbl-96/s_ilogbl.c
index fd030a7f4c..7534599941 100644
--- a/sysdeps/ieee754/ldbl-96/s_ilogbl.c
+++ b/sysdeps/ieee754/ldbl-96/s_ilogbl.c
@@ -26,8 +26,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include <limits.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __ilogbl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-96/s_isinf_nsl.c b/sysdeps/ieee754/ldbl-96/s_isinf_nsl.c
index aa590307ea..9c7868b490 100644
--- a/sysdeps/ieee754/ldbl-96/s_isinf_nsl.c
+++ b/sysdeps/ieee754/ldbl-96/s_isinf_nsl.c
@@ -6,8 +6,8 @@
* __isinf_nsl(x) returns != 0 if x is ±inf, else 0;
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinf_nsl (long double x)
diff --git a/sysdeps/ieee754/ldbl-96/s_isinfl.c b/sysdeps/ieee754/ldbl-96/s_isinfl.c
index 9583234efa..94639f00f8 100644
--- a/sysdeps/ieee754/ldbl-96/s_isinfl.c
+++ b/sysdeps/ieee754/ldbl-96/s_isinfl.c
@@ -13,8 +13,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
__isinfl (long double x)
diff --git a/sysdeps/ieee754/ldbl-96/s_isnanl.c b/sysdeps/ieee754/ldbl-96/s_isnanl.c
index 9814aa7888..fd270fd849 100644
--- a/sysdeps/ieee754/ldbl-96/s_isnanl.c
+++ b/sysdeps/ieee754/ldbl-96/s_isnanl.c
@@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: $";
* no branching!
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int __isnanl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-96/s_llrintl.c b/sysdeps/ieee754/ldbl-96/s_llrintl.c
index 71efe13521..32a614b66d 100644
--- a/sysdeps/ieee754/ldbl-96/s_llrintl.c
+++ b/sysdeps/ieee754/ldbl-96/s_llrintl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double two63[2] =
{
diff --git a/sysdeps/ieee754/ldbl-96/s_llroundl.c b/sysdeps/ieee754/ldbl-96/s_llroundl.c
index a2ad2dc145..e75cd43301 100644
--- a/sysdeps/ieee754/ldbl-96/s_llroundl.c
+++ b/sysdeps/ieee754/ldbl-96/s_llroundl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long long int
diff --git a/sysdeps/ieee754/ldbl-96/s_logbl.c b/sysdeps/ieee754/ldbl-96/s_logbl.c
index 27f5ed7ca2..95b644c030 100644
--- a/sysdeps/ieee754/ldbl-96/s_logbl.c
+++ b/sysdeps/ieee754/ldbl-96/s_logbl.c
@@ -24,8 +24,8 @@ static char rcsid[] = "$NetBSD: $";
* Use ilogb instead.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __logbl(long double x)
{
diff --git a/sysdeps/ieee754/ldbl-96/s_lrintl.c b/sysdeps/ieee754/ldbl-96/s_lrintl.c
index 078985c4f8..3f61099dd0 100644
--- a/sysdeps/ieee754/ldbl-96/s_lrintl.c
+++ b/sysdeps/ieee754/ldbl-96/s_lrintl.c
@@ -20,7 +20,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double two63[2] =
{
diff --git a/sysdeps/ieee754/ldbl-96/s_lroundl.c b/sysdeps/ieee754/ldbl-96/s_lroundl.c
index 01b51fbb84..d41b7ca95b 100644
--- a/sysdeps/ieee754/ldbl-96/s_lroundl.c
+++ b/sysdeps/ieee754/ldbl-96/s_lroundl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long int
diff --git a/sysdeps/ieee754/ldbl-96/s_modfl.c b/sysdeps/ieee754/ldbl-96/s_modfl.c
index c7659119f3..e9401d0f5d 100644
--- a/sysdeps/ieee754/ldbl-96/s_modfl.c
+++ b/sysdeps/ieee754/ldbl-96/s_modfl.c
@@ -24,8 +24,8 @@
* No exception.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one = 1.0;
diff --git a/sysdeps/ieee754/ldbl-96/s_nearbyintl.c b/sysdeps/ieee754/ldbl-96/s_nearbyintl.c
index e9ba5027ad..ed9836c879 100644
--- a/sysdeps/ieee754/ldbl-96/s_nearbyintl.c
+++ b/sysdeps/ieee754/ldbl-96/s_nearbyintl.c
@@ -26,8 +26,8 @@
*/
#include <fenv.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
TWO63[2]={
diff --git a/sysdeps/ieee754/ldbl-96/s_nextafterl.c b/sysdeps/ieee754/ldbl-96/s_nextafterl.c
index 66d7580e99..6859349b7c 100644
--- a/sysdeps/ieee754/ldbl-96/s_nextafterl.c
+++ b/sysdeps/ieee754/ldbl-96/s_nextafterl.c
@@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
long double __nextafterl(long double x, long double y)
diff --git a/sysdeps/ieee754/ldbl-96/s_nexttoward.c b/sysdeps/ieee754/ldbl-96/s_nexttoward.c
index 2ea61a78ca..9b93ecae64 100644
--- a/sysdeps/ieee754/ldbl-96/s_nexttoward.c
+++ b/sysdeps/ieee754/ldbl-96/s_nexttoward.c
@@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
* Special cases:
*/
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <float.h>
diff --git a/sysdeps/ieee754/ldbl-96/s_nexttowardf.c b/sysdeps/ieee754/ldbl-96/s_nexttowardf.c
index 665a8c6ca8..aeb92b623b 100644
--- a/sysdeps/ieee754/ldbl-96/s_nexttowardf.c
+++ b/sysdeps/ieee754/ldbl-96/s_nexttowardf.c
@@ -17,7 +17,7 @@
static char rcsid[] = "$NetBSD: $";
#endif
-#include "math.h"
+#include <math.h>
#include <math_private.h>
#include <float.h>
diff --git a/sysdeps/ieee754/ldbl-96/s_remquol.c b/sysdeps/ieee754/ldbl-96/s_remquol.c
index b162ab4351..a0825c9521 100644
--- a/sysdeps/ieee754/ldbl-96/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-96/s_remquol.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double zero = 0.0;
diff --git a/sysdeps/ieee754/ldbl-96/s_rintl.c b/sysdeps/ieee754/ldbl-96/s_rintl.c
index b69f306d7b..b6f899d4ef 100644
--- a/sysdeps/ieee754/ldbl-96/s_rintl.c
+++ b/sysdeps/ieee754/ldbl-96/s_rintl.c
@@ -28,8 +28,8 @@ static char rcsid[] = "$NetBSD: $";
* Inexact flag raised if x not equal to rintl(x).
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
TWO63[2]={
diff --git a/sysdeps/ieee754/ldbl-96/s_roundl.c b/sysdeps/ieee754/ldbl-96/s_roundl.c
index 170aee8c4d..b8626a509e 100644
--- a/sysdeps/ieee754/ldbl-96/s_roundl.c
+++ b/sysdeps/ieee754/ldbl-96/s_roundl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double huge = 1.0e4930L;
diff --git a/sysdeps/ieee754/ldbl-96/s_scalblnl.c b/sysdeps/ieee754/ldbl-96/s_scalblnl.c
index ada587b9d5..76a4c59e6b 100644
--- a/sysdeps/ieee754/ldbl-96/s_scalblnl.c
+++ b/sysdeps/ieee754/ldbl-96/s_scalblnl.c
@@ -21,8 +21,8 @@
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
two63 = 4.50359962737049600000e+15,
@@ -43,11 +43,13 @@ __scalblnl (long double x, long int n)
k = (hx&0x7fff) - 63;
}
if (__builtin_expect(k==0x7fff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0x7ffe, 0))
- return huge*__copysignl(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysignl(tiny,x);
+ if (__builtin_expect(n> 50000 || k+n > 0x7ffe, 0))
+ return huge*__copysignl(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{SET_LDOUBLE_EXP(x,(es&0x8000)|k); return x;}
if (k <= -63)
diff --git a/sysdeps/ieee754/ldbl-96/s_scalbnl.c b/sysdeps/ieee754/ldbl-96/s_scalbnl.c
index 6a41920aca..266a37b9c0 100644
--- a/sysdeps/ieee754/ldbl-96/s_scalbnl.c
+++ b/sysdeps/ieee754/ldbl-96/s_scalbnl.c
@@ -21,8 +21,8 @@
* exponentiation or a multiplication.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double
two64 = 1.8446744073709551616e19L,
@@ -43,11 +43,13 @@ __scalbnl (long double x, int n)
k = (hx&0x7fff) - 64;
}
if (__builtin_expect(k==0x7fff, 0)) return x+x; /* NaN or Inf */
- k = k+n;
- if (__builtin_expect(n> 50000 || k > 0x7ffe, 0))
- return huge*__copysignl(huge,x); /* overflow */
if (__builtin_expect(n< -50000, 0))
return tiny*__copysignl(tiny,x);
+ if (__builtin_expect(n> 50000 || k+n > 0x7ffe, 0))
+ return huge*__copysignl(huge,x); /* overflow */
+ /* Now k and n are bounded we know that k = k+n does not
+ overflow. */
+ k = k+n;
if (__builtin_expect(k > 0, 1)) /* normal result */
{SET_LDOUBLE_EXP(x,(es&0x8000)|k); return x;}
if (k <= -64)
diff --git a/sysdeps/ieee754/ldbl-96/s_signbitl.c b/sysdeps/ieee754/ldbl-96/s_signbitl.c
index a213d46d71..ffded99494 100644
--- a/sysdeps/ieee754/ldbl-96/s_signbitl.c
+++ b/sysdeps/ieee754/ldbl-96/s_signbitl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
int
__signbitl (long double x)
diff --git a/sysdeps/ieee754/ldbl-96/s_sincosl.c b/sysdeps/ieee754/ldbl-96/s_sincosl.c
index 7ad84a0ddf..2858954b32 100644
--- a/sysdeps/ieee754/ldbl-96/s_sincosl.c
+++ b/sysdeps/ieee754/ldbl-96/s_sincosl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
void
diff --git a/sysdeps/ieee754/ldbl-96/s_sinl.c b/sysdeps/ieee754/ldbl-96/s_sinl.c
index 4f7ed91e3e..11e1899822 100644
--- a/sysdeps/ieee754/ldbl-96/s_sinl.c
+++ b/sysdeps/ieee754/ldbl-96/s_sinl.c
@@ -50,8 +50,8 @@ static char rcsid[] = "$NetBSD: $";
*/
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
long double __sinl(long double x)
{
@@ -68,7 +68,7 @@ long double __sinl(long double x)
/* sin(Inf or NaN) is NaN */
else if (se==0x7fff) {
- if ((i0 | i1) == 0)
+ if (i1 == 0 && i0 == 0x80000000)
__set_errno (EDOM);
return x-x;
}
diff --git a/sysdeps/ieee754/ldbl-96/s_tanhl.c b/sysdeps/ieee754/ldbl-96/s_tanhl.c
index 4547517e93..7ec6247315 100644
--- a/sysdeps/ieee754/ldbl-96/s_tanhl.c
+++ b/sysdeps/ieee754/ldbl-96/s_tanhl.c
@@ -42,8 +42,8 @@ static char rcsid[] = "$NetBSD: $";
* only tanhl(0)=0 is exact for finite argument.
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const long double one=1.0, two=2.0, tiny = 1.0e-4900L;
diff --git a/sysdeps/ieee754/ldbl-96/s_tanl.c b/sysdeps/ieee754/ldbl-96/s_tanl.c
index 8e1686003d..3fbe4a8f6b 100644
--- a/sysdeps/ieee754/ldbl-96/s_tanl.c
+++ b/sysdeps/ieee754/ldbl-96/s_tanl.c
@@ -48,23 +48,28 @@ static char rcsid[] = "$NetBSD: $";
* TRIG(x) returns trig(x) nearly rounded
*/
-#include "math.h"
-#include "math_private.h"
+#include <errno.h>
+#include <math.h>
+#include <math_private.h>
long double __tanl(long double x)
{
long double y[2],z=0.0;
- int32_t n, se;
+ int32_t n, se, i0, i1;
/* High word of x. */
- GET_LDOUBLE_EXP(se,x);
+ GET_LDOUBLE_WORDS(se,i0,i1,x);
/* |x| ~< pi/4 */
se &= 0x7fff;
if(se <= 0x3ffe) return __kernel_tanl(x,z,1);
/* tan(Inf or NaN) is NaN */
- else if (se==0x7fff) return x-x; /* NaN */
+ else if (se==0x7fff) {
+ if (i1 == 0 && i0 == 0x80000000)
+ __set_errno (EDOM);
+ return x-x;
+ }
/* argument reduction needed */
else {
diff --git a/sysdeps/ieee754/ldbl-96/s_truncl.c b/sysdeps/ieee754/ldbl-96/s_truncl.c
index 827088ae10..75a38261af 100644
--- a/sysdeps/ieee754/ldbl-96/s_truncl.c
+++ b/sysdeps/ieee754/ldbl-96/s_truncl.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
long double
diff --git a/sysdeps/ieee754/ldbl-96/t_sincosl.c b/sysdeps/ieee754/ldbl-96/t_sincosl.c
new file mode 100644
index 0000000000..50dd84b948
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-96/t_sincosl.c
@@ -0,0 +1,483 @@
+/* Extended-precision floating point sine and cosine tables.
+ Copyright (C) 1999-2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Based on quad-precision tables by Jakub Jelinek <jj@ultra.linux.cz>
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* For 0.1484375 + n/128.0, n=0..82 this table contains
+ first 64 bits of cosine, then at least 64 additional
+ bits and the same for sine.
+ 0.1484375+82.0/128.0 is the smallest number among above defined numbers
+ larger than pi/4.
+ Computed using MPFR:
+
+ #include <stdio.h>
+ #include <mpfr.h>
+
+ int
+ main (void)
+ {
+ int j;
+ mpfr_t t, b, i, rs, rc, ts, tc, tsl, tcl;
+ mpfr_init2 (b, 64);
+ mpfr_init2 (i, 64);
+ mpfr_init2 (t, 64);
+ mpfr_set_str (b, "0.1484375", 0, MPFR_RNDN);
+ mpfr_set_str (i, "0x1p-7", 0, MPFR_RNDN);
+ mpfr_init2 (rs, 300);
+ mpfr_init2 (rc, 300);
+ mpfr_init2 (ts, 64);
+ mpfr_init2 (tc, 64);
+ mpfr_init2 (tsl, 64);
+ mpfr_init2 (tcl, 64);
+ for (j = 0; j <= 82; j++)
+ {
+ mpfr_mul_ui (t, i, j, MPFR_RNDN);
+ mpfr_add (t, t, b, MPFR_RNDN);
+ printf (" /" "* x = 0.1484375 + %d/128. *" "/\n", j);
+ mpfr_cos (rc, t, MPFR_RNDN);
+ mpfr_sin (rs, t, MPFR_RNDN);
+ mpfr_set (tc, rc, MPFR_RNDN);
+ mpfr_set (ts, rs, MPFR_RNDN);
+ mpfr_sub (tcl, rc, tc, MPFR_RNDN);
+ mpfr_sub (tsl, rs, ts, MPFR_RNDN);
+ mpfr_printf (" %.17RaL,\n", tc);
+ mpfr_printf (" %.17RaL,\n", tcl);
+ mpfr_printf (" %.17RaL,\n", ts);
+ mpfr_printf (" %.17RaL,\n", tsl);
+ }
+ return 0;
+ }
+
+*/
+
+const long double __sincosl_table[] = {
+ /* x = 0.1484375 + 0/128. */
+ 0xf.d2f5320e1b7902100p-4L,
+ -0x6.4b225d06708635580p-68L,
+ 0x2.5dc50bc95711d0d80p-4L,
+ 0x1.787d108fd438cf5a0p-68L,
+ /* x = 0.1484375 + 1/128. */
+ 0xf.ce1a053e621438b00p-4L,
+ 0x6.d60c76e8c45bf0a80p-68L,
+ 0x2.7d66258bacd96a400p-4L,
+ -0x1.4cca4c9a3782a6bc0p-68L,
+ /* x = 0.1484375 + 2/128. */
+ 0xf.c8ffa01ba68074100p-4L,
+ 0x7.e05962b0d9fdf2000p-68L,
+ 0x2.9cfd49b8be4f66540p-4L,
+ -0x1.89354fe340fbd96c0p-68L,
+ /* x = 0.1484375 + 3/128. */
+ 0xf.c3a6170f767ac7300p-4L,
+ 0x5.d63d99a9d439e1d80p-68L,
+ 0x2.bc89f9f424de54840p-4L,
+ 0x1.de7ce03b2514952c0p-68L,
+ /* x = 0.1484375 + 4/128. */
+ 0xf.be0d7f7fef11e7100p-4L,
+ -0x5.5bc47540b095ba800p-68L,
+ 0x2.dc0bb80b49a97ffc0p-4L,
+ -0xc.b1722e07246208500p-72L,
+ /* x = 0.1484375 + 5/128. */
+ 0xf.b835efcf670dd2d00p-4L,
+ -0x1.90186db968115ec20p-68L,
+ 0x2.fb8205f75e56a2b40p-4L,
+ 0x1.6a1c4792f85625880p-68L,
+ /* x = 0.1484375 + 6/128. */
+ 0xf.b21f7f5c156696b00p-4L,
+ 0xa.c1fe28ac5fd766700p-76L,
+ 0x3.1aec65df552876f80p-4L,
+ 0x2.ece9a235671324700p-72L,
+ /* x = 0.1484375 + 7/128. */
+ 0xf.abca467fb3cb8f200p-4L,
+ -0x2.f960fe2715cc521c0p-68L,
+ 0x3.3a4a5a19d86246700p-4L,
+ 0x1.0f602c44df4fa5140p-68L,
+ /* x = 0.1484375 + 8/128. */
+ 0xf.a5365e8f1d3ca2800p-4L,
+ -0x4.1e24a289519b26800p-68L,
+ 0x3.599b652f40ec999c0p-4L,
+ 0x1.f12a0a4c8561de160p-68L,
+ /* x = 0.1484375 + 9/128. */
+ 0xf.9e63e1d9e8b6f6f00p-4L,
+ 0x2.e296bae5b5ed9c100p-68L,
+ 0x3.78df09db8c332ce00p-4L,
+ 0xd.2b53d865582e45200p-72L,
+ /* x = 0.1484375 + 10/128. */
+ 0xf.9752eba9fff6b9900p-4L,
+ -0x7.bd415254fab56cd00p-68L,
+ 0x3.9814cb10513453cc0p-4L,
+ -0x6.84de43e3595cc8500p-72L,
+ /* x = 0.1484375 + 11/128. */
+ 0xf.90039843324f9b900p-4L,
+ 0x4.0416c1984b6cbed00p-68L,
+ 0x3.b73c2bf6b4b9f6680p-4L,
+ 0xe.f9499c81f0d965100p-72L,
+ /* x = 0.1484375 + 12/128. */
+ 0xf.887604e2c39dbb200p-4L,
+ 0xe.4ec5825059a78a000p-72L,
+ 0x3.d654aff15cb457a00p-4L,
+ 0xf.ca854698aba330400p-72L,
+ /* x = 0.1484375 + 13/128. */
+ 0xf.80aa4fbef750ba800p-4L,
+ -0x7.c2cc346a06b075c00p-68L,
+ 0x3.f55dda9e62aed7500p-4L,
+ 0x1.3bd7b8e6a3d1635e0p-68L,
+ /* x = 0.1484375 + 14/128. */
+ 0xf.78a098069792dab00p-4L,
+ -0x4.3611bda6e483a5980p-68L,
+ 0x4.14572fd94556e6480p-4L,
+ -0xc.29dfd8ec7722b8400p-72L,
+ /* x = 0.1484375 + 15/128. */
+ 0xf.7058fde0788dfc800p-4L,
+ 0x5.b8fe88789e4f42500p-72L,
+ 0x4.334033bcd90d66080p-4L,
+ -0x3.0a0c93e2b47bbae40p-68L,
+ /* x = 0.1484375 + 16/128. */
+ 0xf.67d3a26af7d07aa00p-4L,
+ 0x4.bd6d42af8c0068000p-68L,
+ 0x4.52186aa5377ab2080p-4L,
+ 0x3.bf2524f52e3a06a80p-68L,
+ /* x = 0.1484375 + 17/128. */
+ 0xf.5f10a7bb77d3dfa00p-4L,
+ 0xc.1da8b578427832800p-72L,
+ 0x4.70df5931ae1d94600p-4L,
+ 0x7.6fe0dcff47fe31b80p-72L,
+ /* x = 0.1484375 + 18/128. */
+ 0xf.561030ddd7a789600p-4L,
+ 0xe.a9f4a32c652155500p-72L,
+ 0x4.8f948446abcd6b100p-4L,
+ -0x8.0334eff185e4d9100p-72L,
+ /* x = 0.1484375 + 19/128. */
+ 0xf.4cd261d3e6c15bb00p-4L,
+ 0x3.69c8758630d2ac000p-68L,
+ 0x4.ae37710fad27c8a80p-4L,
+ 0x2.9c4cf96c03519b9c0p-68L,
+ /* x = 0.1484375 + 20/128. */
+ 0xf.43575f94d4f6b2700p-4L,
+ 0x2.f5fb76b14d2a64ac0p-68L,
+ 0x4.ccc7a50127e1de100p-4L,
+ -0x3.494bf3cfd39ae0840p-68L,
+ /* x = 0.1484375 + 21/128. */
+ 0xf.399f500c9e9fd3800p-4L,
+ -0x5.166a8d9c254778900p-68L,
+ 0x4.eb44a5da74f600200p-4L,
+ 0x7.aaa090f0734e28880p-72L,
+ /* x = 0.1484375 + 22/128. */
+ 0xf.2faa5a1b74e82fd00p-4L,
+ 0x6.1fa05f9177380e900p-68L,
+ 0x5.09adf9a7b9a5a0f80p-4L,
+ -0x1.c75705c59f5e66be0p-68L,
+ /* x = 0.1484375 + 23/128. */
+ 0xf.2578a595224dd2e00p-4L,
+ 0x6.bfa2eb2f99cc67500p-68L,
+ 0x5.280326c3cf4818200p-4L,
+ 0x3.ba6bb08eac82c2080p-68L,
+ /* x = 0.1484375 + 24/128. */
+ 0xf.1b0a5b406b526d900p-4L,
+ -0x7.93aa0152372f23380p-68L,
+ 0x5.4643b3da29de9b380p-4L,
+ -0x2.8eaa110f0ccd04c00p-68L,
+ /* x = 0.1484375 + 25/128. */
+ 0xf.105fa4d66b607a600p-4L,
+ 0x7.d44e0427252044380p-68L,
+ 0x5.646f27e8bd65cbe00p-4L,
+ 0x3.a5d61ff0657229100p-68L,
+ /* x = 0.1484375 + 26/128. */
+ 0xf.0578ad01ede708000p-4L,
+ -0x5.c63f6239467b50100p-68L,
+ 0x5.82850a41e1dd46c80p-4L,
+ -0x9.fd15dbb3244403200p-76L,
+ /* x = 0.1484375 + 27/128. */
+ 0xe.fa559f5ec3aec3a00p-4L,
+ 0x4.eb03319278a2d4200p-68L,
+ 0x5.a084e28e35fda2780p-4L,
+ -0x9.202444aace28b3100p-72L,
+ /* x = 0.1484375 + 28/128. */
+ 0xe.eef6a879146af0c00p-4L,
+ -0x6.46a15d15f53f2c200p-72L,
+ 0x5.be6e38ce809554280p-4L,
+ 0x3.c14ee9da0d3648400p-68L,
+ /* x = 0.1484375 + 29/128. */
+ 0xe.e35bf5ccac8905300p-4L,
+ -0x3.26e2248cb2c5b81c0p-68L,
+ 0x5.dc40955d9084f4880p-4L,
+ 0x2.94675a2498de5d840p-68L,
+ /* x = 0.1484375 + 30/128. */
+ 0xe.d785b5c44741b4500p-4L,
+ -0x6.c3a943462cc75eb00p-68L,
+ 0x5.f9fb80f21b5364a00p-4L,
+ -0x3.bcdabf5af1dd3ad00p-68L,
+ /* x = 0.1484375 + 31/128. */
+ 0xe.cb7417b8d4ee3ff00p-4L,
+ -0x3.c8545bf8c55b70e00p-68L,
+ 0x6.179e84a09a5258a80p-4L,
+ -0x3.f164a0531fc1ada00p-68L,
+ /* x = 0.1484375 + 32/128. */
+ 0xe.bf274bf0bda4f6200p-4L,
+ 0x4.47e56a09362679900p-68L,
+ 0x6.352929dd264bd4480p-4L,
+ 0x2.02ea766325d8aa8c0p-68L,
+ /* x = 0.1484375 + 33/128. */
+ 0xe.b29f839f201fd1400p-4L,
+ -0x4.6c8697d86e9587100p-68L,
+ 0x6.529afa7d51b129600p-4L,
+ 0x3.1ec197c0a840a11c0p-68L,
+ /* x = 0.1484375 + 34/128. */
+ 0xe.a5dcf0e30cf03e700p-4L,
+ -0x6.8910f4e13d9aea080p-68L,
+ 0x6.6ff380ba014410a00p-4L,
+ -0x1.c65cdf4f5c05a02a0p-68L,
+ /* x = 0.1484375 + 35/128. */
+ 0xe.98dfc6c6be031e600p-4L,
+ 0xd.d3089cbdd18a75b00p-72L,
+ 0x6.8d324731433279700p-4L,
+ 0x3.bc712bcc4ccddc480p-68L,
+ /* x = 0.1484375 + 36/128. */
+ 0xe.8ba8393eca7821b00p-4L,
+ -0x5.a9c27cb6e49efee80p-68L,
+ 0x6.aa56d8e8249db4e80p-4L,
+ 0x3.60a761fe3f9e559c0p-68L,
+ /* x = 0.1484375 + 37/128. */
+ 0xe.7e367d2956cfb1700p-4L,
+ -0x4.955ee1abe632ffa80p-68L,
+ 0x6.c760c14c8585a5200p-4L,
+ -0x2.42cb99f5193ad5380p-68L,
+ /* x = 0.1484375 + 38/128. */
+ 0xe.708ac84d4172a3e00p-4L,
+ 0x2.737662213429e1400p-68L,
+ 0x6.e44f8c36eb10a1c80p-4L,
+ -0xa.d2f6c3ff0b2b84600p-72L,
+ /* x = 0.1484375 + 39/128. */
+ 0xe.62a551594b970a700p-4L,
+ 0x7.0b15d41d4c0e48400p-68L,
+ 0x7.0122c5ec5028c8d00p-4L,
+ -0xc.c540b02cbf333c800p-76L,
+ /* x = 0.1484375 + 40/128. */
+ 0xe.54864fe33e8575d00p-4L,
+ -0x5.40a42f1a30e4e5780p-68L,
+ 0x7.1dd9fb1ff46778500p-4L,
+ 0x3.acb970a9f6729c700p-68L,
+ /* x = 0.1484375 + 41/128. */
+ 0xe.462dfc670d421ab00p-4L,
+ 0x3.d1a15901228f146c0p-68L,
+ 0x7.3a74b8f52947b6800p-4L,
+ 0x1.baf6928eb3fb02180p-68L,
+ /* x = 0.1484375 + 42/128. */
+ 0xe.379c9045f29d51800p-4L,
+ -0x3.b7f755b683dfa84c0p-68L,
+ 0x7.56f28d011d9852880p-4L,
+ 0x2.44a75fc29c779bd80p-68L,
+ /* x = 0.1484375 + 43/128. */
+ 0xe.28d245c58baef7200p-4L,
+ 0x2.25e232abc003c4380p-68L,
+ 0x7.7353054ca72690d80p-4L,
+ -0x3.391e8e0266194c600p-68L,
+ /* x = 0.1484375 + 44/128. */
+ 0xe.19cf580eeec046b00p-4L,
+ -0x5.ebdd058b7f8131080p-68L,
+ 0x7.8f95b0560a9a3bd80p-4L,
+ -0x1.2084267e23c739ee0p-68L,
+ /* x = 0.1484375 + 45/128. */
+ 0xe.0a94032dbea7cee00p-4L,
+ -0x4.222625d0505267a80p-68L,
+ 0x7.abba1d12c17bfa200p-4L,
+ -0x2.6d0f26c09f2126680p-68L,
+ /* x = 0.1484375 + 46/128. */
+ 0xd.fb20840f3a9b36f00p-4L,
+ 0x7.ae2c515342890b600p-68L,
+ 0x7.c7bfdaf13e5ed1700p-4L,
+ 0x2.12f8a7525bfb113c0p-68L,
+ /* x = 0.1484375 + 47/128. */
+ 0xd.eb7518814a7a93200p-4L,
+ -0x4.433773ef632be3b00p-68L,
+ 0x7.e3a679daaf25c6780p-4L,
+ -0x1.abd434bfd72f69be0p-68L,
+ /* x = 0.1484375 + 48/128. */
+ 0xd.db91ff31879917300p-4L,
+ -0x4.2dbad2f5c7760ae80p-68L,
+ 0x7.ff6d8a34bd5e8fa80p-4L,
+ -0x2.b368b7d24aea62100p-68L,
+ /* x = 0.1484375 + 49/128. */
+ 0xd.cb7777ac420705100p-4L,
+ 0x6.8f31e3eb780ce9c80p-68L,
+ 0x8.1b149ce34caa5a500p-4L,
+ -0x1.9af072f602b295580p-68L,
+ /* x = 0.1484375 + 50/128. */
+ 0xd.bb25c25b8260c1500p-4L,
+ -0x9.1843671366e48f400p-72L,
+ 0x8.369b434a372da7f00p-4L,
+ -0x4.a3758e01c931e1f80p-68L,
+ /* x = 0.1484375 + 51/128. */
+ 0xd.aa9d2086082706400p-4L,
+ -0x2.1ae3f617aa166cd00p-72L,
+ 0x8.52010f4f080052100p-4L,
+ 0x3.78bd8dd614753d080p-68L,
+ /* x = 0.1484375 + 52/128. */
+ 0xd.99ddd44e44a43d500p-4L,
+ -0x2.b5c5c126adfbef900p-68L,
+ 0x8.6d45935ab396cb500p-4L,
+ -0x1.bde17dd211ab0caa0p-68L,
+ /* x = 0.1484375 + 53/128. */
+ 0xd.88e820b1526311e00p-4L,
+ -0x2.a9e1043f3e565ac80p-68L,
+ 0x8.8868625b4e1dbb200p-4L,
+ 0x3.13310133022527200p-68L,
+ /* x = 0.1484375 + 54/128. */
+ 0xd.77bc4985e93a60800p-4L,
+ -0x3.6279746f944394400p-68L,
+ 0x8.a3690fc5bfc11c000p-4L,
+ -0x6.aca1d8c657aed0b80p-68L,
+ /* x = 0.1484375 + 55/128. */
+ 0xd.665a937b4ef2b1f00p-4L,
+ 0x6.d51bad6d988a44180p-68L,
+ 0x8.be472f9776d809b00p-4L,
+ -0xd.477e8edbc29c29900p-72L,
+ /* x = 0.1484375 + 56/128. */
+ 0xd.54c3441844897fd00p-4L,
+ -0x7.07ac0f9aa0e459680p-68L,
+ 0x8.d902565817ee78400p-4L,
+ -0x6.431c32ed7f9fee680p-68L,
+ /* x = 0.1484375 + 57/128. */
+ 0xd.42f6a1b9f0168ce00p-4L,
+ -0xf.ce3d09c3726cfb200p-72L,
+ 0x8.f39a191b2ba612300p-4L,
+ -0x5.c05b0be2a5c002c00p-68L,
+ /* x = 0.1484375 + 58/128. */
+ 0xd.30f4f392c357ab000p-4L,
+ 0x6.61c5fa8a7d9b26600p-68L,
+ 0x9.0e0e0d81ca6787900p-4L,
+ 0x6.cc92c8ea8c2815c00p-68L,
+ /* x = 0.1484375 + 59/128. */
+ 0xd.1ebe81a95ee752e00p-4L,
+ 0x4.8a26bcd32d6e92300p-68L,
+ 0x9.285dc9bc45dd9ea00p-4L,
+ 0x3.d02457bcce59c4180p-68L,
+ /* x = 0.1484375 + 60/128. */
+ 0xd.0c5394d7722281900p-4L,
+ 0x5.e25736c0357470800p-68L,
+ 0x9.4288e48bd0335fc00p-4L,
+ 0x4.1c4cbd2920497a900p-68L,
+ /* x = 0.1484375 + 61/128. */
+ 0xc.f9b476c897c25c600p-4L,
+ -0x4.018af22c0cf715080p-68L,
+ 0x9.5c8ef544210ec0c00p-4L,
+ -0x6.e3b642d55f617ae80p-68L,
+ /* x = 0.1484375 + 62/128. */
+ 0xc.e6e171f92f2e27f00p-4L,
+ 0x3.2225327ec440ddb00p-68L,
+ 0x9.766f93cd18413a700p-4L,
+ -0x5.503e303903d754480p-68L,
+ /* x = 0.1484375 + 63/128. */
+ 0xc.d3dad1b5328a2e400p-4L,
+ 0x5.9f993f4f510881a00p-68L,
+ 0x9.902a58a45e27bed00p-4L,
+ 0x6.8412b426b675ed500p-68L,
+ /* x = 0.1484375 + 64/128. */
+ 0xc.c0a0e21709883a400p-4L,
+ -0xf.f6ee1ee5f811c4300p-76L,
+ 0x9.a9bedcdf01b38da00p-4L,
+ -0x6.c0c287df87e21d700p-68L,
+ /* x = 0.1484375 + 65/128. */
+ 0xc.ad33f00658fe5e800p-4L,
+ 0x2.04bbc0f3a66a0e6c0p-68L,
+ 0x9.c32cba2b14156ef00p-4L,
+ 0x5.256c4f857991ca680p-72L,
+ /* x = 0.1484375 + 66/128. */
+ 0xc.99944936cf48c8900p-4L,
+ 0x1.1ff93fe64b3ddb7a0p-68L,
+ 0x9.dc738ad14204e6900p-4L,
+ -0x6.53a7d2f07a7d9a700p-68L,
+ /* x = 0.1484375 + 67/128. */
+ 0xc.85c23c26ed7b6f000p-4L,
+ 0x1.4ef546c4792968220p-68L,
+ 0x9.f592e9b66a9cf9000p-4L,
+ 0x6.a3c7aa3c101998480p-68L,
+ /* x = 0.1484375 + 68/128. */
+ 0xc.71be181ecd6875d00p-4L,
+ -0x1.d25a9ea5fc335df80p-68L,
+ 0xa.0e8a725d33c828c00p-4L,
+ 0x1.1fa50fd9e9a15ffe0p-68L,
+ /* x = 0.1484375 + 69/128. */
+ 0xc.5d882d2ee48030c00p-4L,
+ 0x7.c07d28e981e348080p-68L,
+ 0xa.2759c0e79c3558200p-4L,
+ 0x5.27c32b55f5405c180p-68L,
+ /* x = 0.1484375 + 70/128. */
+ 0xc.4920cc2ec38fb8900p-4L,
+ 0x1.b38827db08884fc60p-68L,
+ 0xa.400072188acf49d00p-4L,
+ -0x2.94e8c7da1fc7cb900p-68L,
+ /* x = 0.1484375 + 71/128. */
+ 0xc.348846bbd36313400p-4L,
+ -0x7.001d401622ec7e600p-68L,
+ 0xa.587e23555bb080800p-4L,
+ 0x6.d02b9c662cdd29300p-68L,
+ /* x = 0.1484375 + 72/128. */
+ 0xc.1fbeef380e4ffdd00p-4L,
+ 0x5.a613ec8722f644000p-68L,
+ 0xa.70d272a76a8d4b700p-4L,
+ -0x2.5f136f8ed448b7480p-68L,
+ /* x = 0.1484375 + 73/128. */
+ 0xc.0ac518c8b6ae71100p-4L,
+ -0x4.5c85c1146f34ea500p-68L,
+ 0xa.88fcfebd9a8dd4800p-4L,
+ -0x1.d0c3891061dbc66e0p-68L,
+ /* x = 0.1484375 + 74/128. */
+ 0xb.f59b17550a4406800p-4L,
+ 0x7.5969296567cf3e380p-68L,
+ 0xa.a0fd66eddb9212300p-4L,
+ 0x2.c28520d3911b8a040p-68L,
+ /* x = 0.1484375 + 75/128. */
+ 0xb.e0413f84f2a771c00p-4L,
+ 0x6.14946a88cbf4da200p-68L,
+ 0xa.b8d34b36acd987200p-4L,
+ 0x1.0ed343ec65d7e3ae0p-68L,
+ /* x = 0.1484375 + 76/128. */
+ 0xb.cab7e6bfb2a14aa00p-4L,
+ -0x4.edd3a8b5c89413680p-68L,
+ 0xa.d07e4c409d08c5000p-4L,
+ -0x5.c56fa844f53db4780p-68L,
+ /* x = 0.1484375 + 77/128. */
+ 0xb.b4ff632a908f73f00p-4L,
+ -0x3.eae7c6346266c4b00p-68L,
+ 0xa.e7fe0b5fc786b2e00p-4L,
+ -0x6.991e2950ebf5b7780p-68L,
+ /* x = 0.1484375 + 78/128. */
+ 0xb.9f180ba77dd075100p-4L,
+ 0x6.28e135a9508299000p-68L,
+ 0xa.ff522a954f2ba1700p-4L,
+ -0x2.621023be91cc0a180p-68L,
+ /* x = 0.1484375 + 79/128. */
+ 0xb.890237d3bb3c28500p-4L,
+ -0x4.9eb5fac6fe9405f00p-68L,
+ 0xb.167a4c90d63c42400p-4L,
+ 0x4.cf5493b7cc23bd400p-68L,
+ /* x = 0.1484375 + 80/128. */
+ 0xb.72be40067aaf2c000p-4L,
+ 0x5.0dbdb7a14c3d7d500p-68L,
+ 0xb.2d7614b1f3aaa2500p-4L,
+ -0x2.0d291df5881e35c00p-68L,
+ /* x = 0.1484375 + 81/128. */
+ 0xb.5c4c7d4f7dae91600p-4L,
+ -0x5.3879330b4e5b67300p-68L,
+ 0xb.44452709a59752900p-4L,
+ 0x5.913765434a59d1100p-72L,
+ /* x = 0.1484375 + 82/128. */
+ 0xb.45ad4975b1294cb00p-4L,
+ -0x2.35b30bf1370dd5980p-68L,
+ 0xb.5ae7285bc10cf5100p-4L,
+ 0x5.753847e8f8b7a3100p-68L,
+};
diff --git a/sysdeps/ieee754/ldbl-96/w_expl.c b/sysdeps/ieee754/ldbl-96/w_expl.c
index d61c0a37bb..55c68462bd 100644
--- a/sysdeps/ieee754/ldbl-96/w_expl.c
+++ b/sysdeps/ieee754/ldbl-96/w_expl.c
@@ -33,12 +33,12 @@ __expl (long double x)
if (__builtin_expect (isgreater (x, o_threshold), 0))
{
if (_LIB_VERSION != _IEEE_)
- return __kernel_standard (x, x, 206);
+ return __kernel_standard_l (x, x, 206);
}
else if (__builtin_expect (isless (x, u_threshold), 0))
{
if (_LIB_VERSION != _IEEE_)
- return __kernel_standard (x, x, 207);
+ return __kernel_standard_l (x, x, 207);
}
return __ieee754_expl (x);
diff --git a/sysdeps/ieee754/ldbl-opt/configure b/sysdeps/ieee754/ldbl-opt/configure
index 065a3c8364..d1f3177cfd 100644
--- a/sysdeps/ieee754/ldbl-opt/configure
+++ b/sysdeps/ieee754/ldbl-opt/configure
@@ -1,19 +1,135 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/ieee754/ldbl-opt/.
-{ $as_echo "$as_me:$LINENO: checking whether $CC $CFLAGS supports -mlong-double-128" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC $CFLAGS supports -mlong-double-128" >&5
$as_echo_n "checking whether $CC $CFLAGS supports -mlong-double-128... " >&6; }
-if test "${libc_cv_mlong_double_128+set}" = set; then
+if ${libc_cv_mlong_double_128+:} false; then :
$as_echo_n "(cached) " >&6
else
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -mlong-double-128"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -28,39 +144,16 @@ long double foobar (long double x) { return x; }
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_mlong_double_128=yes
else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- libc_cv_mlong_double_128=no
+ libc_cv_mlong_double_128=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS="$save_CFLAGS"
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_mlong_double_128" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mlong_double_128" >&5
$as_echo "$libc_cv_mlong_double_128" >&6; }
if test "$libc_cv_mlong_double_128" = no; then
- { { $as_echo "$as_me:$LINENO: error: this configuration requires -mlong-double-128 support" >&5
-$as_echo "$as_me: error: this configuration requires -mlong-double-128 support" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "this configuration requires -mlong-double-128 support" "$LINENO" 5
fi
diff --git a/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h b/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h
index 77ab26370d..b0b863cba5 100644
--- a/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h
+++ b/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h
@@ -37,7 +37,7 @@
#ifndef __ASSEMBLER__
# include <math.h>
-# include <math/math_private.h>
+# include <math_private.h>
/* Set temporarily to non-zero if long double should be considered
the same as double. */
diff --git a/sysdeps/ieee754/s_lib_version.c b/sysdeps/ieee754/s_lib_version.c
index 121bdaa540..a377ab1f78 100644
--- a/sysdeps/ieee754/s_lib_version.c
+++ b/sysdeps/ieee754/s_lib_version.c
@@ -18,8 +18,8 @@ static char rcsid[] = "$NetBSD: s_lib_version.c,v 1.6 1995/05/10 20:47:44 jtc Ex
* MACRO for standards
*/
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
/*
* define and initialize _LIB_VERSION
diff --git a/sysdeps/ieee754/s_matherr.c b/sysdeps/ieee754/s_matherr.c
index 88d2dbed2c..d5dc6f122d 100644
--- a/sysdeps/ieee754/s_matherr.c
+++ b/sysdeps/ieee754/s_matherr.c
@@ -14,8 +14,8 @@
static char rcsid[] = "$NetBSD: s_matherr.c,v 1.6 1995/05/10 20:47:53 jtc Exp $";
#endif
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int
weak_function
diff --git a/sysdeps/ieee754/s_signgam.c b/sysdeps/ieee754/s_signgam.c
index 021b0ffca1..ee207d6505 100644
--- a/sysdeps/ieee754/s_signgam.c
+++ b/sysdeps/ieee754/s_signgam.c
@@ -1,3 +1,3 @@
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
int signgam;
diff --git a/sysdeps/mach/_strerror.c b/sysdeps/mach/_strerror.c
index 3c0928825f..e3a5c8e3c8 100644
--- a/sysdeps/mach/_strerror.c
+++ b/sysdeps/mach/_strerror.c
@@ -21,7 +21,7 @@
#include <mach/error.h>
#include <errorlib.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* It is critical here that we always use the `dcgettext' function for
the message translation. Since <libintl.h> only defines the macro
diff --git a/sysdeps/mach/hurd/powerpc/register-dump.h b/sysdeps/mach/hurd/powerpc/register-dump.h
index 258579727e..80d545e488 100644
--- a/sysdeps/mach/hurd/powerpc/register-dump.h
+++ b/sysdeps/mach/hurd/powerpc/register-dump.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* This prints out the information in the following form: */
static const char dumpform[] = "\
diff --git a/sysdeps/mach/hurd/sethostid.c b/sysdeps/mach/hurd/sethostid.c
index d1ff1b0f5b..7fadf6aa85 100644
--- a/sysdeps/mach/hurd/sethostid.c
+++ b/sysdeps/mach/hurd/sethostid.c
@@ -18,7 +18,7 @@
#include <unistd.h>
#include <hurd.h>
#include "hurdhost.h"
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* Set the current machine's Internet number to ID.
This call is restricted to the super-user. */
diff --git a/sysdeps/mach/hurd/xmknodat.c b/sysdeps/mach/hurd/xmknodat.c
index a37b918822..acd1a8c683 100644
--- a/sysdeps/mach/hurd/xmknodat.c
+++ b/sysdeps/mach/hurd/xmknodat.c
@@ -23,7 +23,7 @@
#include <hurd/fd.h>
#include <hurd/paths.h>
#include <fcntl.h>
-#include "stdio-common/_itoa.h"
+#include <_itoa.h>
#include <string.h>
#include <sys/types.h>
diff --git a/sysdeps/mach/xpg-strerror.c b/sysdeps/mach/xpg-strerror.c
index 997c5b6a3f..421d75803d 100644
--- a/sysdeps/mach/xpg-strerror.c
+++ b/sysdeps/mach/xpg-strerror.c
@@ -23,7 +23,7 @@
#include <mach/error.h>
#include <errorlib.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* It is critical here that we always use the `dcgettext' function for
the message translation. Since <libintl.h> only defines the macro
diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
index 11a74b53b3..abbf956226 100644
--- a/sysdeps/posix/spawni.c
+++ b/sysdeps/posix/spawni.c
@@ -1,5 +1,5 @@
/* Guts of POSIX spawn interface. Generic POSIX.1 version.
- Copyright (C) 2000-2005, 2006, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2000-2005, 2006, 2011, 2012 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
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <signal.h>
#include <sys/resource.h>
#include "spawn_int.h"
#include <not-cancel.h>
diff --git a/sysdeps/powerpc/configure b/sysdeps/powerpc/configure
index b347754f35..c3ad67f012 100644
--- a/sysdeps/powerpc/configure
+++ b/sysdeps/powerpc/configure
@@ -1,10 +1,92 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc.
# Accept binutils which knows about ".machine".
-{ $as_echo "$as_me:$LINENO: checking for .machine support" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for .machine support" >&5
$as_echo_n "checking for .machine support... " >&6; }
-if test "${libc_cv_ppc_machine+set}" = set; then
+if ${libc_cv_ppc_machine+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
@@ -12,27 +94,22 @@ else
blr
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
libc_cv_ppc_machine=yes
else
libc_cv_ppc_machine=no
fi
rm -f conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_ppc_machine" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_machine" >&5
$as_echo "$libc_cv_ppc_machine" >&6; }
if test $libc_cv_ppc_machine != yes; then
- { { $as_echo "$as_me:$LINENO: error:
-*** A binutils version which can handle
-*** .machine \"altivec\"
-*** is needed." >&5
-$as_echo "$as_me: error:
+ as_fn_error $? "
*** A binutils version which can handle
*** .machine \"altivec\"
-*** is needed." >&2;}
- { (exit 1); exit 1; }; }
+*** is needed." "$LINENO" 5
fi
diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c
index 3323bb87ea..cfadd5c856 100644
--- a/sysdeps/powerpc/fpu/e_hypot.c
+++ b/sysdeps/powerpc/fpu/e_hypot.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; see the file COPYING.LIB. If
not, see <http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const double two60 = 1.152921504606847e+18;
static const double two500 = 3.2733906078961419e+150;
diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c
index 541b597d54..92e824dafc 100644
--- a/sysdeps/powerpc/fpu/e_hypotf.c
+++ b/sysdeps/powerpc/fpu/e_hypotf.c
@@ -1,5 +1,5 @@
/* Pythagorean addition using floats
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
@@ -17,26 +17,18 @@
License along with the GNU C Library; see the file COPYING.LIB. If
not, see <http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float two30 = 1.0737418e09;
-static const float two50 = 1.1259000e15;
-static const float two60 = 1.1529221e18;
-static const float two126 = 8.5070592e+37;
-static const float twoM50 = 8.8817842e-16;
-static const float twoM60 = 6.7762644e-21;
-static const float pdnum = 1.1754939e-38;
-
/* __ieee754_hypotf(x,y)
- *
- * This a FP only version without any FP->INT conversion.
- * It is similar to default C version, making appropriates
- * overflow and underflows checks as well scaling when it
- * is needed.
- */
+
+ This a FP only version without any FP->INT conversion.
+ It is similar to default C version, making appropriates
+ overflow and underflows checks as using double precision
+ instead of scaling. */
#ifdef _ARCH_PWR7
/* POWER7 isinf and isnan optimizations are fast. */
@@ -92,27 +84,7 @@ __ieee754_hypotf (float x, float y)
{
return x + y;
}
- if (x > two50)
- {
- x *= twoM60;
- y *= twoM60;
- return __ieee754_sqrtf (x * x + y * y) / twoM60;
- }
- if (y < twoM50)
- {
- if (y <= pdnum)
- {
- x *= two126;
- y *= two126;
- return __ieee754_sqrtf (x * x + y * y) / two126;
- }
- else
- {
- x *= two60;
- y *= two60;
- return __ieee754_sqrtf (x * x + y * y) / two60;
- }
- }
- return __ieee754_sqrtf (x * x + y * y);
+
+ return __ieee754_sqrt ((double) x * x + (double) y * y);
}
strong_alias (__ieee754_hypotf, __hypotf_finite)
diff --git a/sysdeps/powerpc/fpu/e_rem_pio2f.c b/sysdeps/powerpc/fpu/e_rem_pio2f.c
index 1d170d9786..8dfbdaf6db 100644
--- a/sysdeps/powerpc/fpu/e_rem_pio2f.c
+++ b/sysdeps/powerpc/fpu/e_rem_pio2f.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include "s_float_bitwise.h"
/* defined in sysdeps/powerpc/fpu/k_rem_pio2f.c */
diff --git a/sysdeps/powerpc/fpu/k_cosf.c b/sysdeps/powerpc/fpu/k_cosf.c
index 04a69fd948..e2571d6802 100644
--- a/sysdeps/powerpc/fpu/k_cosf.c
+++ b/sysdeps/powerpc/fpu/k_cosf.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; see the file COPYING.LIB. If
not, see <http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float twom27 = 7.4505806e-09;
static const float dot3 = 3.0000001e-01;
diff --git a/sysdeps/powerpc/fpu/k_rem_pio2f.c b/sysdeps/powerpc/fpu/k_rem_pio2f.c
index 6f91e57e71..2060642743 100644
--- a/sysdeps/powerpc/fpu/k_rem_pio2f.c
+++ b/sysdeps/powerpc/fpu/k_rem_pio2f.c
@@ -19,7 +19,7 @@
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
#include "s_float_bitwise.h"
diff --git a/sysdeps/powerpc/fpu/k_sinf.c b/sysdeps/powerpc/fpu/k_sinf.c
index e0dc48db29..ab4561e65e 100644
--- a/sysdeps/powerpc/fpu/k_sinf.c
+++ b/sysdeps/powerpc/fpu/k_sinf.c
@@ -17,8 +17,8 @@
License along with the GNU C Library; see the file COPYING.LIB. If
not, see <http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float twom27 = 7.4505806000e-09;
diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
index 589bae1227..1ab3d4ad4f 100644
--- a/sysdeps/powerpc/fpu/libm-test-ulps
+++ b/sysdeps/powerpc/fpu/libm-test-ulps
@@ -32,11 +32,172 @@ float: 1
ifloat: 1
# cabs
+Test "cabs (-0.75 + 12.390625 i) == 12.4133028598606664302388810868156657":
+float: 1
+ifloat: 1
+Test "cabs (-0.75 - 12.390625 i) == 12.4133028598606664302388810868156657":
+float: 1
+ifloat: 1
+Test "cabs (-12.390625 + 0.75 i) == 12.4133028598606664302388810868156657":
+float: 1
+ifloat: 1
+Test "cabs (-12.390625 - 0.75 i) == 12.4133028598606664302388810868156657":
+float: 1
+ifloat: 1
Test "cabs (0.75 + 1.25 i) == 1.45773797371132511771853821938639577":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cabs (0.75 + 12.390625 i) == 12.4133028598606664302388810868156657":
+float: 1
+ifloat: 1
+
+# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.5 + +0 i) == 2.094395102393195492308428922186335256131 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.5 - 0 i) == 2.094395102393195492308428922186335256131 + +0 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
double: 1
float: 7
@@ -47,18 +208,200 @@ double: 1
float: 3
idouble: 1
ifloat: 3
+Test "Imaginary part of: cacosh (0.5 + +0 i) == +0 + 1.047197551196597746154214461093167628066 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0 i) == +0 - 1.047197551196597746154214461093167628066 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0.5 + +0 i) == -0.5235987755982988730771072305465838140329 + +0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (-0.5 - 0 i) == -0.5235987755982988730771072305465838140329 - 0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i":
ildouble: 1
ldouble: 1
+Test "Real part of: casin (0.5 + +0 i) == 0.5235987755982988730771072305465838140329 + +0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (0.5 - 0 i) == 0.5235987755982988730771072305465838140329 - 0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
# casinh
+Test "Imaginary part of: casinh (+0 + 0.5 i) == +0 + 0.5235987755982988730771072305465838140329 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (+0 - 0.5 i) == +0 - 0.5235987755982988730771072305465838140329 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (-0 + 0.5 i) == -0 + 0.5235987755982988730771072305465838140329 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0 - 0.5 i) == -0 - 0.5235987755982988730771072305465838140329 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
double: 5
float: 1
@@ -73,6 +416,12 @@ idouble: 3
ifloat: 6
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
float: 1
ifloat: 1
@@ -81,6 +430,22 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
# catan
Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
@@ -156,6 +521,11 @@ ldouble: 2
Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
float: 1
ifloat: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
float: 1
ifloat: 1
@@ -164,6 +534,41 @@ ldouble: 2
Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i plus overflow exception":
+double: 1
+idouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 2
+ifloat: 2
# clog
Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
@@ -172,13 +577,22 @@ ifloat: 3
ildouble: 1
ldouble: 1
Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
-float: 1
-ifloat: 1
+float: 2
+ifloat: 2
ildouble: 2
ldouble: 2
Test "Imaginary part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 709.8942846690411016323109979483151967689 + 0.4636476090008061606231772164674799632783 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
+float: 1
+ifloat: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
@@ -195,6 +609,9 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+double: 1
+idouble: 1
Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
double: 1
float: 5
@@ -262,10 +679,55 @@ ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
-float: 1
-ifloat: 1
+float: 2
+ifloat: 2
ildouble: 3
ldouble: 3
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 308.4052305577487344482591243175787477115 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 308.3031705664207720674749211936626341569 + 0.2013595981366865903254995612594728746470 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i) == -322.8546703496198318667349645920187712089 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
double: 1
float: 1
@@ -315,6 +777,152 @@ float: 1
idouble: 1
ifloat: 1
+# cos_downward
+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
+float: 1
+ifloat: 1
+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
+ildouble: 1
+ldouble: 1
+
+# cos_tonearest
+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+
+# cos_towardzero
+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
+ildouble: 2
+ldouble: 2
+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+# cos_upward
+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
+float: 1
+ifloat: 1
+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
+float: 2
+ifloat: 2
+
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (24) == 13244561064.92173614708845674912733665919":
+ildouble: 1
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
+ildouble: 2
+ldouble: 2
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ildouble: 2
+ldouble: 2
+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
+ildouble: 2
+ldouble: 2
+
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
float: 1
@@ -322,8 +930,8 @@ ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
-float: 1
-ifloat: 1
+float: 2
+ifloat: 2
ildouble: 1
ldouble: 1
Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
@@ -331,14 +939,22 @@ double: 1
float: 4
idouble: 1
ifloat: 4
+Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
+float: 1
+ifloat: 1
Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
+float: 1
+ifloat: 1
ildouble: 2
ldouble: 2
Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
double: 2
-float: 3
+float: 4
idouble: 2
-ifloat: 3
+ifloat: 4
+Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+float: 1
+ifloat: 1
Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
ildouble: 1
ldouble: 1
@@ -381,9 +997,57 @@ ldouble: 1
Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
float: 1
ifloat: 1
+Test "Imaginary part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
float: 1
ifloat: 1
+Test "Imaginary part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0 - 1 i) == M_SQRT_2_2 - M_SQRT_2_2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0 - 1 i) == M_SQRT_2_2 - M_SQRT_2_2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0x1p-1073 + 0x1p-1073 i) == 3.453664695497464982856905711457966660085e-162 + 1.430554756764195530630723976279903095110e-162 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1p-1073 + 0x1p-1073 i) == 3.453664695497464982856905711457966660085e-162 + 1.430554756764195530630723976279903095110e-162 i":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0x1p-147 + 0x1p-147 i) == 8.225610928685557596194006925540350401606e-23 + 3.407159605465907500737319471202779419102e-23 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1p-147 + 0x1p-147 i) == 8.225610928685557596194006925540350401606e-23 + 3.407159605465907500737319471202779419102e-23 i":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0x1p-149 + 0x1p-149 i) == 4.112805464342778798097003462770175200803e-23 + 1.703579802732953750368659735601389709551e-23 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Imaginary part of: csqrt (0x1p-149 + 0x1p-149 i) == 4.112805464342778798097003462770175200803e-23 + 1.703579802732953750368659735601389709551e-23 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
# ctan
Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
@@ -422,6 +1086,15 @@ idouble: 1
Test "erfc (0.75) == 0.288844366346484868401062165408589223":
float: 1
ifloat: 1
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+float: 1
+ifloat: 1
+Test "erfc (0x1.ffff56789abcdef0123456789a8p+2) == 1.123161416304655390092138725253789378459e-29":
+ildouble: 1
+ldouble: 1
Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
double: 1
idouble: 1
@@ -465,6 +1138,33 @@ Test "exp2 (10) == 1024":
ildouble: 2
ldouble: 2
+# exp_downward
+Test "exp_downward (2) == e^2":
+float: 1
+ifloat: 1
+Test "exp_downward (3) == e^3":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_towardzero
+Test "exp_towardzero (2) == e^2":
+float: 1
+ifloat: 1
+Test "exp_towardzero (3) == e^3":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_upward
+Test "exp_upward (1) == e":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
# expm1
Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
double: 1
@@ -477,34 +1177,58 @@ ifloat: 1
# hypot
Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (0.75, 1.25) == 1.45773797371132511771853821938639577":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
+Test "hypot (0x1.234566p-126, 0x1.234566p-126) == 1.891441686191081936598531534017449451173e-38":
+double: 1
+idouble: 1
Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+double: 1
float: 1
+idouble: 1
ifloat: 1
# j0
+Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90":
+ildouble: 2
+ldouble: 2
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
float: 2
@@ -512,6 +1236,13 @@ idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
double: 3
float: 1
@@ -520,7 +1251,9 @@ ifloat: 1
ildouble: 1
ldouble: 1
Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+double: 1
float: 2
+idouble: 1
ifloat: 2
Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
@@ -530,12 +1263,22 @@ ifloat: 2
ildouble: 1
ldouble: 1
Test "j0 (8.0) == 0.171650807137553906090869407851972001":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
# j1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
+double: 1
+idouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
float: 2
ifloat: 2
@@ -566,7 +1309,9 @@ ifloat: 1
ildouble: 1
ldouble: 1
Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+double: 1
float: 2
+idouble: 1
ifloat: 2
Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
@@ -576,7 +1321,9 @@ ifloat: 2
ildouble: 1
ldouble: 1
Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
@@ -612,7 +1359,9 @@ Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
ildouble: 1
ldouble: 1
Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 4
ldouble: 4
@@ -621,6 +1370,11 @@ double: 1
float: 4
idouble: 1
ifloat: 4
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
double: 2
float: 1
@@ -693,9 +1447,9 @@ ifloat: 2
ildouble: 4
ldouble: 4
Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
ildouble: 7
ldouble: 7
@@ -734,11 +1488,124 @@ Test "log2 (e) == M_LOG2El":
ildouble: 1
ldouble: 1
+# pow_downward
+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+ildouble: 1
+ldouble: 1
+
# sin
Test "sin (16.0) == -0.2879033166650652947844562482186175296207":
ildouble: 2
ldouble: 2
+# sin_downward
+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
+ildouble: 4
+ldouble: 4
+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
+ildouble: 1
+ldouble: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+
+# sin_towardzero
+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sin_upward
+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
+float: 2
+ifloat: 2
+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+
# sincos
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
double: 1
@@ -764,6 +1631,52 @@ Test "sinh (0.75) == 0.822316731935829980703661634446913849":
ildouble: 1
ldouble: 1
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sinh_upward
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+ildouble: 1
+ldouble: 1
+
+# sqrt
+Test "sqrt (0.75) == 0.866025403784438646763723170752936183":
+double: 1
+idouble: 1
+Test "sqrt (2) == M_SQRT2l":
+double: 1
+idouble: 1
+
# tan
Test "tan (pi/4) == 1":
double: 1
@@ -771,6 +1684,102 @@ idouble: 1
ildouble: 1
ldouble: 1
+# tan_downward
+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
+float: 1
+ifloat: 1
+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# tan_tonearest
+Test "tan_tonearest (10) == 0.6483608274590866712591249330098086768169":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (4) == 1.1578212823495775831373424182673239231198":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (7) == 0.8714479827243187364564508896003135663222":
+ildouble: 1
+ldouble: 1
+
+# tan_towardzero
+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
+float: 1
+ifloat: 1
+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222":
+ildouble: 2
+ldouble: 2
+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# tan_upward
+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
+ildouble: 1
+ldouble: 1
+
# tanh
Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
ildouble: 1
@@ -801,6 +1810,14 @@ ldouble: 1
Test "y0 (0.75) == -0.137172769385772397522814379396581855":
ildouble: 1
ldouble: 1
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+double: 1
+idouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
double: 2
float: 1
@@ -835,6 +1852,16 @@ ldouble: 1
Test "y1 (0.125) == -5.19993611253477499595928744876579921":
double: 1
idouble: 1
+Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90":
+ildouble: 2
+ldouble: 2
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
Test "y1 (1.5) == -0.412308626973911295952829820633445323":
float: 1
ifloat: 1
@@ -846,7 +1873,7 @@ ifloat: 1
ildouble: 2
ldouble: 2
Test "y1 (2.0) == -0.107032431540937546888370772277476637":
-double: 1
+double: 2
float: 1
idouble: 2
ifloat: 2
@@ -908,9 +1935,9 @@ ifloat: 1
ildouble: 2
ldouble: 2
Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
double: 1
@@ -989,16 +2016,24 @@ float: 1
ifloat: 1
Function: "cabs":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: Real part of "cacos":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
Function: Imaginary part of "cacos":
-ildouble: 1
-ldouble: 1
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 2
+ldouble: 2
Function: Real part of "cacosh":
double: 1
@@ -1013,6 +2048,8 @@ double: 1
float: 3
idouble: 1
ifloat: 3
+ildouble: 1
+ldouble: 1
Function: Real part of "casin":
double: 1
@@ -1023,8 +2060,12 @@ ildouble: 1
ldouble: 1
Function: Imaginary part of "casin":
-ildouble: 1
-ldouble: 1
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 2
+ldouble: 2
Function: Real part of "casinh":
double: 5
@@ -1099,40 +2140,50 @@ ildouble: 2
ldouble: 2
Function: Real part of "cexp":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 2
ldouble: 2
Function: Imaginary part of "cexp":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
Function: Real part of "clog":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 2
ldouble: 2
Function: Imaginary part of "clog":
+double: 1
float: 3
+idouble: 1
ifloat: 3
ildouble: 1
ldouble: 1
Function: Real part of "clog10":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 3
ldouble: 3
Function: Imaginary part of "clog10":
double: 1
-float: 5
+float: 1
idouble: 1
-ifloat: 5
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -1144,10 +2195,54 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: "cos_downward":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cos_upward":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
Function: "cosh":
ildouble: 1
ldouble: 1
+Function: "cosh_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_upward":
+ildouble: 2
+ldouble: 2
+
Function: Real part of "cpow":
double: 2
float: 5
@@ -1187,12 +2282,18 @@ ildouble: 1
ldouble: 1
Function: Real part of "csqrt":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
Function: Imaginary part of "csqrt":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
@@ -1252,6 +2353,28 @@ Function: "exp2":
ildouble: 2
ldouble: 2
+Function: "exp_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "exp_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "expm1":
double: 1
float: 1
@@ -1263,7 +2386,9 @@ ildouble: 1
ldouble: 1
Function: "hypot":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
@@ -1273,8 +2398,8 @@ double: 3
float: 2
idouble: 3
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "j1":
double: 1
@@ -1326,10 +2451,52 @@ Function: "pow":
ildouble: 1
ldouble: 1
+Function: "pow_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "sin":
ildouble: 1
ldouble: 1
+Function: "sin_downward":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sin_upward":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
Function: "sincos":
double: 1
float: 1
@@ -1342,12 +2509,58 @@ Function: "sinh":
ildouble: 1
ldouble: 1
+Function: "sinh_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sinh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "sinh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sinh_upward":
+ildouble: 1
+ldouble: 1
+
+Function: "sqrt":
+double: 1
+idouble: 1
+
Function: "tan":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Function: "tan_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "tan_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "tan_towardzero":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+
+Function: "tan_upward":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+
Function: "tanh":
ildouble: 1
ldouble: 1
diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h
index 7bacecb245..a916be31eb 100644
--- a/sysdeps/powerpc/fpu/math_private.h
+++ b/sysdeps/powerpc/fpu/math_private.h
@@ -23,35 +23,49 @@
#include <sysdep.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
-
-#include <math/math_private.h>
+#include_next <math_private.h>
# if __WORDSIZE == 64 || defined _ARCH_PWR4
# define __CPU_HAS_FSQRT 1
-
-#ifndef __ieee754_sqrt
-# define __ieee754_sqrt(x) \
- ({ double __z; \
- __asm __volatile ( \
- " fsqrt %0,%1\n" \
- : "=f" (__z) \
- : "f"(x)); \
- __z; })
-#endif
-#ifndef __ieee754_sqrtf
-# define __ieee754_sqrtf(x) \
- ({ float __z; \
- __asm __volatile ( \
- " fsqrts %0,%1\n" \
- : "=f" (__z) \
- : "f"(x)); \
- __z; })
-#endif
-
# else
# define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
-# endif // __WORDSIZE == 64 || defined _ARCH_PWR4
+# endif
+
+extern double __slow_ieee754_sqrt (double);
+extern __always_inline double
+__ieee754_sqrt (double __x)
+{
+ double __z;
+ if (__CPU_HAS_FSQRT)
+ {
+ /* Volatile is required to prevent the compiler from moving the
+ fsqrt instruction above the branch. */
+ __asm __volatile ("fsqrt %0,%1" : "=f" (__z) : "f" (__x));
+ }
+ else
+ __z = __slow_ieee754_sqrt(__x);
+
+ return __z;
+}
+
+extern float __slow_ieee754_sqrtf (float);
+extern __always_inline float
+__ieee754_sqrtf (float __x)
+{
+ float __z;
+
+ if (__CPU_HAS_FSQRT)
+ {
+ /* Volatile is required to prevent the compiler from moving the
+ fsqrts instruction above the branch. */
+ __asm __volatile ("fsqrts %0,%1" : "=f" (__z) : "f" (__x));
+ }
+ else
+ __z = __slow_ieee754_sqrtf(__x);
+
+ return __z;
+}
#if defined _ARCH_PWR5X
@@ -162,52 +176,4 @@
#endif /* defined _ARCH_PWR6 */
-
-# ifndef __LIBC_INTERNAL_MATH_INLINES
-extern double __slow_ieee754_sqrt (double);
-__inline double
-__ieee754_sqrt (double __x)
-{
- double __z;
-
- /* If the CPU is 64-bit we can use the optional FP instructions. */
- if (__CPU_HAS_FSQRT)
- {
- /* Volatile is required to prevent the compiler from moving the
- fsqrt instruction above the branch. */
- __asm __volatile (
- " fsqrt %0,%1\n"
- : "=f" (__z)
- : "f" (__x));
- }
- else
- __z = __slow_ieee754_sqrt(__x);
-
- return __z;
-}
-
-extern float __slow_ieee754_sqrtf (float);
-
-__inline float
-__ieee754_sqrtf (float __x)
-{
- float __z;
-
- /* If the CPU is 64-bit we can use the optional FP instructions. */
- if (__CPU_HAS_FSQRT)
- {
- /* Volatile is required to prevent the compiler from moving the
- fsqrts instruction above the branch. */
- __asm __volatile (
- " fsqrts %0,%1\n"
- : "=f" (__z)
- : "f" (__x));
- }
- else
- __z = __slow_ieee754_sqrtf(__x);
-
- return __z;
-}
-#endif /* __LIBC_INTERNAL_MATH_INLINES */
-
#endif /* _PPC_MATH_PRIVATE_H_ */
diff --git a/sysdeps/powerpc/fpu/s_cosf.c b/sysdeps/powerpc/fpu/s_cosf.c
index bdd663d381..6314155528 100644
--- a/sysdeps/powerpc/fpu/s_cosf.c
+++ b/sysdeps/powerpc/fpu/s_cosf.c
@@ -18,8 +18,8 @@
not, see <http://www.gnu.org/licenses/>. */
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float one = 1.0;
static const float pio4 = 7.8539801e-1;
diff --git a/sysdeps/powerpc/fpu/s_float_bitwise.h b/sysdeps/powerpc/fpu/s_float_bitwise.h
index 9ef947b66e..d01a0e00e4 100644
--- a/sysdeps/powerpc/fpu/s_float_bitwise.h
+++ b/sysdeps/powerpc/fpu/s_float_bitwise.h
@@ -20,7 +20,7 @@
#ifndef _FLOAT_BITWISE_
#define _FLOAT_BITWISE_ 1
-#include "math_private.h"
+#include <math_private.h>
/* Returns (int)(num & 0x7FFFFFF0 == value) */
static inline
diff --git a/sysdeps/powerpc/fpu/s_isnan.c b/sysdeps/powerpc/fpu/s_isnan.c
index 98ed237d74..777d3518f6 100644
--- a/sysdeps/powerpc/fpu/s_isnan.c
+++ b/sysdeps/powerpc/fpu/s_isnan.c
@@ -21,7 +21,7 @@
#define isnanf Xisnanf
#define __GI___isnanf __GI___Xisnanf
-#include "math.h"
+#include <math.h>
#include <math_ldbl_opt.h>
#include <fenv_libc.h>
diff --git a/sysdeps/powerpc/fpu/s_rint.c b/sysdeps/powerpc/fpu/s_rint.c
index ca72b40a52..3888009670 100644
--- a/sysdeps/powerpc/fpu/s_rint.c
+++ b/sysdeps/powerpc/fpu/s_rint.c
@@ -16,7 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
+#include <math.h>
double
__rint (double x)
diff --git a/sysdeps/powerpc/fpu/s_rintf.c b/sysdeps/powerpc/fpu/s_rintf.c
index 50f9b000bc..de584e5f61 100644
--- a/sysdeps/powerpc/fpu/s_rintf.c
+++ b/sysdeps/powerpc/fpu/s_rintf.c
@@ -16,7 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
+#include <math.h>
float
__rintf (float x)
diff --git a/sysdeps/powerpc/fpu/s_sinf.c b/sysdeps/powerpc/fpu/s_sinf.c
index 680ee3eeff..3440b862de 100644
--- a/sysdeps/powerpc/fpu/s_sinf.c
+++ b/sysdeps/powerpc/fpu/s_sinf.c
@@ -18,8 +18,8 @@
not, see <http://www.gnu.org/licenses/>. */
#include <errno.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
static const float pio4 = 7.8539801e-1;
diff --git a/sysdeps/powerpc/fpu/w_sqrt.c b/sysdeps/powerpc/fpu/w_sqrt.c
index a3a68acb98..c8ee010b7c 100644
--- a/sysdeps/powerpc/fpu/w_sqrt.c
+++ b/sysdeps/powerpc/fpu/w_sqrt.c
@@ -16,8 +16,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <fenv_libc.h>
double
diff --git a/sysdeps/powerpc/fpu/w_sqrtf.c b/sysdeps/powerpc/fpu/w_sqrtf.c
index 2989563f60..39b5b20a03 100644
--- a/sysdeps/powerpc/fpu/w_sqrtf.c
+++ b/sysdeps/powerpc/fpu/w_sqrtf.c
@@ -16,8 +16,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <fenv_libc.h>
#include <sysdep.h>
diff --git a/sysdeps/powerpc/elf/ifunc-sel.h b/sysdeps/powerpc/ifunc-sel.h
index 526d8ed88b..526d8ed88b 100644
--- a/sysdeps/powerpc/elf/ifunc-sel.h
+++ b/sysdeps/powerpc/ifunc-sel.h
diff --git a/sysdeps/powerpc/powerpc32/elf/bzero.S b/sysdeps/powerpc/powerpc32/bzero.S
index aa5a237a6a..aa5a237a6a 100644
--- a/sysdeps/powerpc/powerpc32/elf/bzero.S
+++ b/sysdeps/powerpc/powerpc32/bzero.S
diff --git a/sysdeps/powerpc/powerpc32/configure b/sysdeps/powerpc/powerpc32/configure
index da8ec0b87c..da0e7f4afd 100644
--- a/sysdeps/powerpc/powerpc32/configure
+++ b/sysdeps/powerpc/powerpc32/configure
@@ -1,10 +1,92 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc/powerpc32.
# See whether gas has R_PPC_REL16 relocs.
-{ $as_echo "$as_me:$LINENO: checking for R_PPC_REL16 gas support" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for R_PPC_REL16 gas support" >&5
$as_echo_n "checking for R_PPC_REL16 gas support... " >&6; }
-if test "${libc_cv_ppc_rel16+set}" = set; then
+if ${libc_cv_ppc_rel16+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.s <<\EOF
@@ -12,50 +94,91 @@ else
addis 11,30,_GLOBAL_OFFSET_TABLE_-.@ha
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
libc_cv_ppc_rel16=yes
else
libc_cv_ppc_rel16=no
fi
rm -f conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_ppc_rel16" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_rel16" >&5
$as_echo "$libc_cv_ppc_rel16" >&6; }
if test $libc_cv_ppc_rel16 = no; then
- { { $as_echo "$as_me:$LINENO: error: R_PPC_REL16 is not supported. Binutils is too old." >&5
-$as_echo "$as_me: error: R_PPC_REL16 is not supported. Binutils is too old." >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "R_PPC_REL16 is not supported. Binutils is too old." "$LINENO" 5
fi
# See whether GCC uses -msecure-plt.
-{ $as_echo "$as_me:$LINENO: checking for -msecure-plt by default" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -msecure-plt by default" >&5
$as_echo_n "checking for -msecure-plt by default... " >&6; }
-if test "${libc_cv_ppc_secure_plt+set}" = set; then
+if ${libc_cv_ppc_secure_plt+:} false; then :
$as_echo_n "(cached) " >&6
else
echo 'int foo (void) { extern int bar; return bar; }' > conftest.c
libc_cv_ppc_secure_plt=no
if { ac_try='${CC-cc} -S $CFLAGS conftest.c -fpic -o conftest.s 1>&5'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
if grep '_GLOBAL_OFFSET_TABLE_-.*@ha' conftest.s > /dev/null 2>&1; then
libc_cv_ppc_secure_plt=yes
fi
fi
rm -rf conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_ppc_secure_plt" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_secure_plt" >&5
$as_echo "$libc_cv_ppc_secure_plt" >&6; }
if test $libc_cv_ppc_secure_plt = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_PPC_SECURE_PLT 1
-_ACEOF
+ $as_echo "#define HAVE_PPC_SECURE_PLT 1" >>confdefs.h
+
+fi
+# Check for support of thread-local storage handling in assembler and
+# linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for powerpc32 TLS support" >&5
+$as_echo_n "checking for powerpc32 TLS support... " >&6; }
+if ${libc_cv_powerpc32_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.s <<\EOF
+ .section ".tdata","awT",@progbits
+x: .long 1
+x1: .long 1
+x2: .long 1
+ .text
+ addi 3,31,x@got@tlsgd
+ addi 3,31,x1@got@tlsld
+ addi 9,3,x1@dtprel
+ addis 9,3,x2@dtprel@ha
+ addi 9,9,x2@dtprel@l
+ lwz 0,x1@dtprel(3)
+ addis 9,3,x2@dtprel@ha
+ lwz 0,x2@dtprel@l(9)
+ lwz 9,x3@got@tprel(31)
+ add 9,9,x@tls
+ addi 9,2,x1@tprel
+ addis 9,2,x2@tprel@ha
+ addi 9,9,x2@tprel@l
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ libc_cv_powerpc32_tls=yes
+else
+ libc_cv_powerpc32_tls=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_powerpc32_tls" >&5
+$as_echo "$libc_cv_powerpc32_tls" >&6; }
+if test $libc_cv_powerpc32_tls = no; then
+ as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
diff --git a/sysdeps/powerpc/powerpc32/configure.in b/sysdeps/powerpc/powerpc32/configure.in
index 21d3f5ee5b..bc775bb139 100644
--- a/sysdeps/powerpc/powerpc32/configure.in
+++ b/sysdeps/powerpc/powerpc32/configure.in
@@ -30,3 +30,37 @@ rm -rf conftest*])
if test $libc_cv_ppc_secure_plt = yes; then
AC_DEFINE(HAVE_PPC_SECURE_PLT)
fi
+
+# Check for support of thread-local storage handling in assembler and
+# linker.
+AC_CACHE_CHECK(for powerpc32 TLS support, libc_cv_powerpc32_tls, [dnl
+cat > conftest.s <<\EOF
+ .section ".tdata","awT",@progbits
+x: .long 1
+x1: .long 1
+x2: .long 1
+ .text
+ addi 3,31,x@got@tlsgd
+ addi 3,31,x1@got@tlsld
+ addi 9,3,x1@dtprel
+ addis 9,3,x2@dtprel@ha
+ addi 9,9,x2@dtprel@l
+ lwz 0,x1@dtprel(3)
+ addis 9,3,x2@dtprel@ha
+ lwz 0,x2@dtprel@l(9)
+ lwz 9,x3@got@tprel(31)
+ add 9,9,x@tls
+ addi 9,2,x1@tprel
+ addis 9,2,x2@tprel@ha
+ addi 9,9,x2@tprel@l
+EOF
+dnl
+if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_powerpc32_tls=yes
+else
+ libc_cv_powerpc32_tls=no
+fi
+rm -f conftest*])
+if test $libc_cv_powerpc32_tls = no; then
+ AC_MSG_ERROR([the assembler must support TLS])
+fi
diff --git a/sysdeps/powerpc/powerpc32/crti.S b/sysdeps/powerpc/powerpc32/crti.S
index 72e9cf4ce0..b0e92fadfb 100644
--- a/sysdeps/powerpc/powerpc32/crti.S
+++ b/sysdeps/powerpc/powerpc32/crti.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crti.S puts a function prologue at the beginning of the .init and
.fini sections and defines global symbols for those addresses, so
diff --git a/sysdeps/powerpc/powerpc32/crtn.S b/sysdeps/powerpc/powerpc32/crtn.S
index af690c1260..62a31df6b0 100644
--- a/sysdeps/powerpc/powerpc32/crtn.S
+++ b/sysdeps/powerpc/powerpc32/crtn.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crtn.S puts function epilogues in the .init and .fini sections
corresponding to the prologues in crti.S. */
diff --git a/sysdeps/powerpc/powerpc32/dl-machine.c b/sysdeps/powerpc/powerpc32/dl-machine.c
index 9ad6bbbc0b..e535480133 100644
--- a/sysdeps/powerpc/powerpc32/dl-machine.c
+++ b/sysdeps/powerpc/powerpc32/dl-machine.c
@@ -23,7 +23,7 @@
#include <ldsodefs.h>
#include <elf/dynamic-link.h>
#include <dl-machine.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* The value __cache_line_size is defined in dl-sysdep.c and is initialised
by _dl_sysdep_start via DL_PLATFORM_INIT. */
diff --git a/sysdeps/powerpc/powerpc32/elf/configure b/sysdeps/powerpc/powerpc32/elf/configure
deleted file mode 100644
index bce17df1ab..0000000000
--- a/sysdeps/powerpc/powerpc32/elf/configure
+++ /dev/null
@@ -1,129 +0,0 @@
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/powerpc32/elf.
-
-# Check for support of thread-local storage handling in assembler and
-# linker.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for powerpc32 TLS support" >&5
-$as_echo_n "checking for powerpc32 TLS support... " >&6; }
-if ${libc_cv_powerpc32_tls+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat > conftest.s <<\EOF
- .section ".tdata","awT",@progbits
-x: .long 1
-x1: .long 1
-x2: .long 1
- .text
- addi 3,31,x@got@tlsgd
- addi 3,31,x1@got@tlsld
- addi 9,3,x1@dtprel
- addis 9,3,x2@dtprel@ha
- addi 9,9,x2@dtprel@l
- lwz 0,x1@dtprel(3)
- addis 9,3,x2@dtprel@ha
- lwz 0,x2@dtprel@l(9)
- lwz 9,x3@got@tprel(31)
- add 9,9,x@tls
- addi 9,2,x1@tprel
- addis 9,2,x2@tprel@ha
- addi 9,9,x2@tprel@l
-EOF
-if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- libc_cv_powerpc32_tls=yes
-else
- libc_cv_powerpc32_tls=no
-fi
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_powerpc32_tls" >&5
-$as_echo "$libc_cv_powerpc32_tls" >&6; }
-if test $libc_cv_powerpc32_tls = no; then
- as_fn_error $? "the assembler must support TLS" "$LINENO" 5
-fi
diff --git a/sysdeps/powerpc/powerpc32/elf/configure.in b/sysdeps/powerpc/powerpc32/elf/configure.in
deleted file mode 100644
index e527b454c1..0000000000
--- a/sysdeps/powerpc/powerpc32/elf/configure.in
+++ /dev/null
@@ -1,36 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/powerpc32/elf.
-
-# Check for support of thread-local storage handling in assembler and
-# linker.
-AC_CACHE_CHECK(for powerpc32 TLS support, libc_cv_powerpc32_tls, [dnl
-cat > conftest.s <<\EOF
- .section ".tdata","awT",@progbits
-x: .long 1
-x1: .long 1
-x2: .long 1
- .text
- addi 3,31,x@got@tlsgd
- addi 3,31,x1@got@tlsld
- addi 9,3,x1@dtprel
- addis 9,3,x2@dtprel@ha
- addi 9,9,x2@dtprel@l
- lwz 0,x1@dtprel(3)
- addis 9,3,x2@dtprel@ha
- lwz 0,x2@dtprel@l(9)
- lwz 9,x3@got@tprel(31)
- add 9,9,x@tls
- addi 9,2,x1@tprel
- addis 9,2,x2@tprel@ha
- addi 9,9,x2@tprel@l
-EOF
-dnl
-if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_powerpc32_tls=yes
-else
- libc_cv_powerpc32_tls=no
-fi
-rm -f conftest*])
-if test $libc_cv_powerpc32_tls = no; then
- AC_MSG_ERROR([the assembler must support TLS])
-fi
diff --git a/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c b/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c
index df86846f78..d2112b8cb1 100644
--- a/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c
+++ b/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c
@@ -16,7 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
+#include <math.h>
long long int
__llrintf (float x)
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/slowexp.c b/sysdeps/powerpc/powerpc32/power4/fpu/slowexp.c
index db57f62ef7..2db82810eb 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/slowexp.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/slowexp.c
@@ -27,7 +27,7 @@
/*Converting from double precision to Multi-precision and calculating */
/* e^x */
/**************************************************************************/
-#include "math_private.h"
+#include <math_private.h>
#ifdef NO_LONG_DOUBLE
#include "mpa.h"
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c b/sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c
index e01e53360c..fdb27718e2 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c
@@ -32,7 +32,7 @@
/*************************************************************************/
#include "mpa.h"
-#include "math_private.h"
+#include <math_private.h>
void __mpexp (mp_no * x, mp_no * y, int p);
void __mplog (mp_no * x, mp_no * y, int p);
diff --git a/sysdeps/powerpc/powerpc32/power4/hp-timing.h b/sysdeps/powerpc/powerpc32/power4/hp-timing.h
index 8370f72691..a80168a7c9 100644
--- a/sysdeps/powerpc/powerpc32/power4/hp-timing.h
+++ b/sysdeps/powerpc/powerpc32/power4/hp-timing.h
@@ -22,7 +22,7 @@
#include <string.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <atomic.h>
/* The macros defined here use the powerpc 64-bit time base register.
diff --git a/sysdeps/powerpc/powerpc32/register-dump.h b/sysdeps/powerpc/powerpc32/register-dump.h
index d9b520e5e7..2936de240b 100644
--- a/sysdeps/powerpc/powerpc32/register-dump.h
+++ b/sysdeps/powerpc/powerpc32/register-dump.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* This prints out the information in the following form: */
static const char dumpform[] = "\
diff --git a/sysdeps/powerpc/powerpc32/elf/start.S b/sysdeps/powerpc/powerpc32/start.S
index 4935e64976..4935e64976 100644
--- a/sysdeps/powerpc/powerpc32/elf/start.S
+++ b/sysdeps/powerpc/powerpc32/start.S
diff --git a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile
index 01889e1314..171e89b3ba 100644
--- a/sysdeps/powerpc/powerpc64/Makefile
+++ b/sysdeps/powerpc/powerpc64/Makefile
@@ -25,6 +25,16 @@ no-special-regs := $(sort $(foreach n,40 41 50 51 60 61 62 63 \
-ffixed-v$n)) \
-ffixed-vrsave -ffixed-vscr -mno-altivec -mno-vsx
+# Need to prevent gcc from using fprs in code used during dynamic linking.
+
+CFLAGS-dl-runtime.os = $(no-special-regs)
+CFLAGS-dl-lookup.os = $(no-special-regs)
+CFLAGS-dl-misc.os = $(no-special-regs)
+CFLAGS-rtld-mempcpy.os = $(no-special-regs)
+CFLAGS-rtld-memmove.os = $(no-special-regs)
+CFLAGS-rtld-memchr.os = $(no-special-regs)
+CFLAGS-rtld-strnlen.os = $(no-special-regs)
+
ifeq ($(subdir),csu)
sysdep_routines += hp-timing
elide-routines.os += hp-timing
diff --git a/sysdeps/powerpc/powerpc64/elf/bzero.S b/sysdeps/powerpc/powerpc64/bzero.S
index b79f88511d..3a1c972abf 100644
--- a/sysdeps/powerpc/powerpc64/elf/bzero.S
+++ b/sysdeps/powerpc/powerpc64/bzero.S
@@ -16,5 +16,5 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-/* This code was moved into memset.S to solve a double stub call problem.
+/* This code was moved into memset.S to solve a double stub call problem.
@local would have worked but it is not supported in PowerPC64 asm. */
diff --git a/sysdeps/powerpc/powerpc64/configure b/sysdeps/powerpc/powerpc64/configure
index a9b6722c11..762ae4a25d 100644
--- a/sysdeps/powerpc/powerpc64/configure
+++ b/sysdeps/powerpc/powerpc64/configure
@@ -1,21 +1,103 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc/powerpc64.
# The Aix ld uses global .symbol_names instead of symbol_names
# and unfortunately early Linux PPC64 linkers use it as well.
-{ $as_echo "$as_me:$LINENO: checking for support for omitting dot symbols" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for support for omitting dot symbols" >&5
$as_echo_n "checking for support for omitting dot symbols... " >&6; }
-if test "${libc_cv_omit_dot_syms+set}" = set; then
+if ${libc_cv_omit_dot_syms+:} false; then :
$as_echo_n "(cached) " >&6
else
libc_cv_omit_dot_syms=no
echo 'void foo (void) {}' > conftest.c
if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s 1>&5'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
if grep -w '\.foo' conftest.s > /dev/null; then
:
else
@@ -25,28 +107,26 @@ fi
rm -f conftest.c conftest.s
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_omit_dot_syms" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_omit_dot_syms" >&5
$as_echo "$libc_cv_omit_dot_syms" >&6; }
if test x$libc_cv_omit_dot_syms != xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_ASM_GLOBAL_DOT_NAME 1
-_ACEOF
+ $as_echo "#define HAVE_ASM_GLOBAL_DOT_NAME 1" >>confdefs.h
fi
-{ $as_echo "$as_me:$LINENO: checking for linker support for overlapping .opd entries" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker support for overlapping .opd entries" >&5
$as_echo_n "checking for linker support for overlapping .opd entries... " >&6; }
-if test "${libc_cv_overlapping_opd+set}" = set; then
+if ${libc_cv_overlapping_opd+:} false; then :
$as_echo_n "(cached) " >&6
else
libc_cv_overlapping_opd=no
echo 'void foo (void) {}' > conftest.c
if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s 1>&5'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
if grep '\.TOC\.@tocbase' conftest.s > /dev/null; then
if grep '\.TOC\.@tocbase[ ]*,[ ]*0' conftest.s > /dev/null; then
:
@@ -58,11 +138,73 @@ fi
rm -f conftest.c conftest.s
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_overlapping_opd" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_overlapping_opd" >&5
$as_echo "$libc_cv_overlapping_opd" >&6; }
if test x$libc_cv_overlapping_opd = xyes; then
- cat >>confdefs.h <<\_ACEOF
-#define USE_PPC64_OVERLAPPING_OPD 1
-_ACEOF
+ $as_echo "#define USE_PPC64_OVERLAPPING_OPD 1" >>confdefs.h
+
+fi
+# Check for support of thread-local storage handling in assembler and
+# linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for powerpc64 TLS support" >&5
+$as_echo_n "checking for powerpc64 TLS support... " >&6; }
+if ${libc_cv_powerpc64_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.s <<\EOF
+ .section ".tdata","awT",@progbits
+x: .quad 1
+x1: .quad 1
+x2: .quad 1
+x3: .quad 1
+x4: .long 1
+ .section ".toc","aw"
+.LC0:
+ .quad x@dtpmod
+ .quad x@dtprel
+.LC1:
+ .quad x1@dtpmod
+ .quad 0
+.LC2:
+ .quad x@tprel
+ .text
+ addi 3,2,x@got@tlsgd
+ addi 3,2,.LC0@toc
+ addi 3,2,x1@got@tlsld
+ addi 9,3,x1@dtprel
+ addis 9,3,x2@dtprel@ha
+ addi 9,9,x2@dtprel@l
+ ld 9,x3@got@dtprel(2)
+ addi 3,2,.LC0@toc
+ lwz 0,x1@dtprel(3)
+ ld 0,x1@dtprel(3)
+ addis 9,3,x2@dtprel@ha
+ lwz 0,x2@dtprel@l(9)
+ ld 0,x2@dtprel@l(9)
+ ld 9,x3@got@dtprel(2)
+ ld 9,x@got@tprel(2)
+ add 9,9,x@tls
+ ld 9,.LC2@toc(2)
+ add 9,9,.LC2@tls
+ addi 9,13,x1@tprel
+ addis 9,13,x2@tprel@ha
+ addi 9,9,x2@tprel@l
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ libc_cv_powerpc64_tls=yes
+else
+ libc_cv_powerpc64_tls=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_powerpc64_tls" >&5
+$as_echo "$libc_cv_powerpc64_tls" >&6; }
+if test $libc_cv_powerpc64_tls = no; then
+ as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
diff --git a/sysdeps/powerpc/powerpc64/configure.in b/sysdeps/powerpc/powerpc64/configure.in
index 67aac663d8..7d333a7c57 100644
--- a/sysdeps/powerpc/powerpc64/configure.in
+++ b/sysdeps/powerpc/powerpc64/configure.in
@@ -40,3 +40,56 @@ rm -f conftest.c conftest.s
if test x$libc_cv_overlapping_opd = xyes; then
AC_DEFINE(USE_PPC64_OVERLAPPING_OPD)
fi
+
+# Check for support of thread-local storage handling in assembler and
+# linker.
+AC_CACHE_CHECK(for powerpc64 TLS support, libc_cv_powerpc64_tls, [dnl
+cat > conftest.s <<\EOF
+ .section ".tdata","awT",@progbits
+x: .quad 1
+x1: .quad 1
+x2: .quad 1
+x3: .quad 1
+x4: .long 1
+ .section ".toc","aw"
+.LC0:
+ .quad x@dtpmod
+ .quad x@dtprel
+.LC1:
+ .quad x1@dtpmod
+ .quad 0
+.LC2:
+ .quad x@tprel
+ .text
+ addi 3,2,x@got@tlsgd
+ addi 3,2,.LC0@toc
+ addi 3,2,x1@got@tlsld
+ addi 9,3,x1@dtprel
+ addis 9,3,x2@dtprel@ha
+ addi 9,9,x2@dtprel@l
+ ld 9,x3@got@dtprel(2)
+ addi 3,2,.LC0@toc
+ lwz 0,x1@dtprel(3)
+ ld 0,x1@dtprel(3)
+ addis 9,3,x2@dtprel@ha
+ lwz 0,x2@dtprel@l(9)
+ ld 0,x2@dtprel@l(9)
+ ld 9,x3@got@dtprel(2)
+ ld 9,x@got@tprel(2)
+ add 9,9,x@tls
+ ld 9,.LC2@toc(2)
+ add 9,9,.LC2@tls
+ addi 9,13,x1@tprel
+ addis 9,13,x2@tprel@ha
+ addi 9,9,x2@tprel@l
+EOF
+dnl
+if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_powerpc64_tls=yes
+else
+ libc_cv_powerpc64_tls=no
+fi
+rm -f conftest*])
+if test $libc_cv_powerpc64_tls = no; then
+ AC_MSG_ERROR([the assembler must support TLS])
+fi
diff --git a/sysdeps/powerpc/powerpc64/crti.S b/sysdeps/powerpc/powerpc64/crti.S
index bce256d9ca..96726b4317 100644
--- a/sysdeps/powerpc/powerpc64/crti.S
+++ b/sysdeps/powerpc/powerpc64/crti.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crti.S puts a function prologue at the beginning of the .init and
.fini sections and defines global symbols for those addresses, so
diff --git a/sysdeps/powerpc/powerpc64/crtn.S b/sysdeps/powerpc/powerpc64/crtn.S
index 52d46b3364..39f5c143da 100644
--- a/sysdeps/powerpc/powerpc64/crtn.S
+++ b/sysdeps/powerpc/powerpc64/crtn.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crtn.S puts function epilogues in the .init and .fini sections
corresponding to the prologues in crti.S. */
diff --git a/sysdeps/powerpc/powerpc64/dl-machine.c b/sysdeps/powerpc/powerpc64/dl-machine.c
index 6a8e68f39e..8e216ed87c 100644
--- a/sysdeps/powerpc/powerpc64/dl-machine.c
+++ b/sysdeps/powerpc/powerpc64/dl-machine.c
@@ -19,7 +19,7 @@
#include <string.h>
#include <unistd.h>
#include <ldsodefs.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <dl-machine.h>
void
diff --git a/sysdeps/powerpc/powerpc64/elf/Makefile b/sysdeps/powerpc/powerpc64/elf/Makefile
deleted file mode 100644
index 6a77e116bd..0000000000
--- a/sysdeps/powerpc/powerpc64/elf/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-# powerpc64/ELF specific definitions.
-
-# Need to prevent gcc from using fprs in code used during dynamic linking.
-
-CFLAGS-dl-runtime.os = $(no-special-regs)
-CFLAGS-dl-lookup.os = $(no-special-regs)
-CFLAGS-dl-misc.os = $(no-special-regs)
-CFLAGS-rtld-mempcpy.os = $(no-special-regs)
-CFLAGS-rtld-memmove.os = $(no-special-regs)
-CFLAGS-rtld-memchr.os = $(no-special-regs)
-CFLAGS-rtld-strnlen.os = $(no-special-regs)
diff --git a/sysdeps/powerpc/powerpc64/elf/configure b/sysdeps/powerpc/powerpc64/elf/configure
deleted file mode 100644
index a3d24a3827..0000000000
--- a/sysdeps/powerpc/powerpc64/elf/configure
+++ /dev/null
@@ -1,148 +0,0 @@
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/powerpc64/elf.
-
-# Check for support of thread-local storage handling in assembler and
-# linker.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for powerpc64 TLS support" >&5
-$as_echo_n "checking for powerpc64 TLS support... " >&6; }
-if ${libc_cv_powerpc64_tls+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat > conftest.s <<\EOF
- .section ".tdata","awT",@progbits
-x: .quad 1
-x1: .quad 1
-x2: .quad 1
-x3: .quad 1
-x4: .long 1
- .section ".toc","aw"
-.LC0:
- .quad x@dtpmod
- .quad x@dtprel
-.LC1:
- .quad x1@dtpmod
- .quad 0
-.LC2:
- .quad x@tprel
- .text
- addi 3,2,x@got@tlsgd
- addi 3,2,.LC0@toc
- addi 3,2,x1@got@tlsld
- addi 9,3,x1@dtprel
- addis 9,3,x2@dtprel@ha
- addi 9,9,x2@dtprel@l
- ld 9,x3@got@dtprel(2)
- addi 3,2,.LC0@toc
- lwz 0,x1@dtprel(3)
- ld 0,x1@dtprel(3)
- addis 9,3,x2@dtprel@ha
- lwz 0,x2@dtprel@l(9)
- ld 0,x2@dtprel@l(9)
- ld 9,x3@got@dtprel(2)
- ld 9,x@got@tprel(2)
- add 9,9,x@tls
- ld 9,.LC2@toc(2)
- add 9,9,.LC2@tls
- addi 9,13,x1@tprel
- addis 9,13,x2@tprel@ha
- addi 9,9,x2@tprel@l
-EOF
-if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- libc_cv_powerpc64_tls=yes
-else
- libc_cv_powerpc64_tls=no
-fi
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_powerpc64_tls" >&5
-$as_echo "$libc_cv_powerpc64_tls" >&6; }
-if test $libc_cv_powerpc64_tls = no; then
- as_fn_error $? "the assembler must support TLS" "$LINENO" 5
-fi
diff --git a/sysdeps/powerpc/powerpc64/elf/configure.in b/sysdeps/powerpc/powerpc64/elf/configure.in
deleted file mode 100644
index 9a375c66a4..0000000000
--- a/sysdeps/powerpc/powerpc64/elf/configure.in
+++ /dev/null
@@ -1,55 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/powerpc64/elf.
-
-# Check for support of thread-local storage handling in assembler and
-# linker.
-AC_CACHE_CHECK(for powerpc64 TLS support, libc_cv_powerpc64_tls, [dnl
-cat > conftest.s <<\EOF
- .section ".tdata","awT",@progbits
-x: .quad 1
-x1: .quad 1
-x2: .quad 1
-x3: .quad 1
-x4: .long 1
- .section ".toc","aw"
-.LC0:
- .quad x@dtpmod
- .quad x@dtprel
-.LC1:
- .quad x1@dtpmod
- .quad 0
-.LC2:
- .quad x@tprel
- .text
- addi 3,2,x@got@tlsgd
- addi 3,2,.LC0@toc
- addi 3,2,x1@got@tlsld
- addi 9,3,x1@dtprel
- addis 9,3,x2@dtprel@ha
- addi 9,9,x2@dtprel@l
- ld 9,x3@got@dtprel(2)
- addi 3,2,.LC0@toc
- lwz 0,x1@dtprel(3)
- ld 0,x1@dtprel(3)
- addis 9,3,x2@dtprel@ha
- lwz 0,x2@dtprel@l(9)
- ld 0,x2@dtprel@l(9)
- ld 9,x3@got@dtprel(2)
- ld 9,x@got@tprel(2)
- add 9,9,x@tls
- ld 9,.LC2@toc(2)
- add 9,9,.LC2@tls
- addi 9,13,x1@tprel
- addis 9,13,x2@tprel@ha
- addi 9,9,x2@tprel@l
-EOF
-dnl
-if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_powerpc64_tls=yes
-else
- libc_cv_powerpc64_tls=no
-fi
-rm -f conftest*])
-if test $libc_cv_powerpc64_tls = no; then
- AC_MSG_ERROR([the assembler must support TLS])
-fi
diff --git a/sysdeps/powerpc/powerpc64/elf/entry.h b/sysdeps/powerpc/powerpc64/entry.h
index 2a54fe728d..2a54fe728d 100644
--- a/sysdeps/powerpc/powerpc64/elf/entry.h
+++ b/sysdeps/powerpc/powerpc64/entry.h
diff --git a/sysdeps/powerpc/powerpc64/hp-timing.h b/sysdeps/powerpc/powerpc64/hp-timing.h
index b4cf2a42cb..dc10bc4f65 100644
--- a/sysdeps/powerpc/powerpc64/hp-timing.h
+++ b/sysdeps/powerpc/powerpc64/hp-timing.h
@@ -22,7 +22,7 @@
#include <string.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <atomic.h>
/* The macros defined here use the powerpc 64-bit time base register.
diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/slowexp.c b/sysdeps/powerpc/powerpc64/power4/fpu/slowexp.c
index db57f62ef7..2db82810eb 100644
--- a/sysdeps/powerpc/powerpc64/power4/fpu/slowexp.c
+++ b/sysdeps/powerpc/powerpc64/power4/fpu/slowexp.c
@@ -27,7 +27,7 @@
/*Converting from double precision to Multi-precision and calculating */
/* e^x */
/**************************************************************************/
-#include "math_private.h"
+#include <math_private.h>
#ifdef NO_LONG_DOUBLE
#include "mpa.h"
diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c b/sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c
index e01e53360c..fdb27718e2 100644
--- a/sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c
+++ b/sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c
@@ -32,7 +32,7 @@
/*************************************************************************/
#include "mpa.h"
-#include "math_private.h"
+#include <math_private.h>
void __mpexp (mp_no * x, mp_no * y, int p);
void __mplog (mp_no * x, mp_no * y, int p);
diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrt.c b/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrt.c
index ef733c0b95..1bd6a67a92 100644
--- a/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrt.c
+++ b/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrt.c
@@ -17,8 +17,8 @@
<http://www.gnu.org/licenses/>. */
#include <math_ldbl_opt.h>
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <fenv_libc.h>
double
diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrtf.c b/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrtf.c
index 615b7133ae..0e7e6923ab 100644
--- a/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrtf.c
+++ b/sysdeps/powerpc/powerpc64/power4/fpu/w_sqrtf.c
@@ -16,8 +16,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
#include <fenv_libc.h>
#include <sysdep.h>
diff --git a/sysdeps/powerpc/powerpc64/register-dump.h b/sysdeps/powerpc/powerpc64/register-dump.h
index e301b0fe61..917886db2f 100644
--- a/sysdeps/powerpc/powerpc64/register-dump.h
+++ b/sysdeps/powerpc/powerpc64/register-dump.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* This prints out the information in the following form: */
static const char dumpform[] = "\
diff --git a/sysdeps/powerpc/powerpc64/elf/start.S b/sysdeps/powerpc/powerpc64/start.S
index d9c92d139f..d9c92d139f 100644
--- a/sysdeps/powerpc/powerpc64/elf/start.S
+++ b/sysdeps/powerpc/powerpc64/start.S
diff --git a/sysdeps/powerpc/elf/rtld-global-offsets.sym b/sysdeps/powerpc/rtld-global-offsets.sym
index ff4e97f2a6..ff4e97f2a6 100644
--- a/sysdeps/powerpc/elf/rtld-global-offsets.sym
+++ b/sysdeps/powerpc/rtld-global-offsets.sym
diff --git a/sysdeps/pthread/aio_cancel.c b/sysdeps/pthread/aio_cancel.c
index b160f556a7..e405e66cdf 100644
--- a/sysdeps/pthread/aio_cancel.c
+++ b/sysdeps/pthread/aio_cancel.c
@@ -1,5 +1,5 @@
/* Cancel requests associated with given file descriptor.
- Copyright (C) 1997, 1998, 2000, 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 2000, 2002, 2005, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -32,6 +32,7 @@
#include <assert.h>
#include <errno.h>
+#include <fcntl.h>
#include <aio_misc.h>
diff --git a/sysdeps/pthread/aio_fsync.c b/sysdeps/pthread/aio_fsync.c
index 1fc39b9ac8..046e25c171 100644
--- a/sysdeps/pthread/aio_fsync.c
+++ b/sysdeps/pthread/aio_fsync.c
@@ -1,5 +1,5 @@
/* Synchronize I/O in given file descriptor.
- Copyright (C) 1997, 1999, 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2002, 2005, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -28,6 +28,7 @@
/* And undo the hack. */
#undef aio_fsync64
#include <errno.h>
+#include <fcntl.h>
#include <aio_misc.h>
diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c
index 601feb8980..d5bb95bd49 100644
--- a/sysdeps/pthread/aio_misc.c
+++ b/sysdeps/pthread/aio_misc.c
@@ -1,6 +1,5 @@
/* Handle general operations.
- Copyright (C) 1997-2001, 2003, 2004, 2006, 2007, 2009, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -635,7 +634,7 @@ handle_fildes_io (void *arg)
gettimeofday (&now, NULL);
wakeup_time.tv_sec = now.tv_sec + optim.aio_idle_time;
wakeup_time.tv_nsec = now.tv_usec * 1000;
- if (wakeup_time.tv_nsec > 1000000000)
+ if (wakeup_time.tv_nsec >= 1000000000)
{
wakeup_time.tv_nsec -= 1000000000;
++wakeup_time.tv_sec;
diff --git a/sysdeps/s390/s390-32/bsd-_setjmp.S b/sysdeps/s390/s390-32/bsd-_setjmp.S
index 8dfa640a9f..1417270201 100644
--- a/sysdeps/s390/s390-32/bsd-_setjmp.S
+++ b/sysdeps/s390/s390-32/bsd-_setjmp.S
@@ -1,46 +1 @@
-/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. s390 version.
- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
- We cannot do it in C because it must be a tail-call, so frame-unwinding
- in setjmp doesn't clobber the state restored by longjmp. */
-
-#include <sysdep.h>
-
-ENTRY(_setjmp)
-#ifdef PIC
- /* We cannot use the PLT, because it requires that %r12 be set, but
- we can't save and restore our caller's value. Instead, we do an
- indirect jump through the GOT. */
- basr %r1,0
-.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */
- /* get address of __sigjmp_save from got */
- l %r1,__sigjmp_save@GOT12(0,%r1)
- lhi %r3,0 /* second argument of one */
- br %r1
-.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0
-#else
- basr %r1,0
-.L0: l %r1,.L1 - .L0(0,%r1) /* load address of __sigsetjmp */
- lhi %r3,0 /* second argument of zero */
- br %r1 /* branch to __sigsetjmp */
-.L1: .long __sigsetjmp
-#endif
-END (_setjmp)
-libc_hidden_def (_setjmp)
+/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-32/bsd-setjmp.S b/sysdeps/s390/s390-32/bsd-setjmp.S
index 93faf4cefc..1417270201 100644
--- a/sysdeps/s390/s390-32/bsd-setjmp.S
+++ b/sysdeps/s390/s390-32/bsd-setjmp.S
@@ -1,45 +1 @@
-/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. s390 version.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
- We cannot do it in C because it must be a tail-call, so frame-unwinding
- in setjmp doesn't clobber the state restored by longjmp. */
-
-#include <sysdep.h>
-
-ENTRY(setjmp)
-#ifdef PIC
- /* We cannot use the PLT, because it requires that %r12 be set, but
- we can't save and restore our caller's value. Instead, we do an
- indirect jump through the GOT. */
- basr %r1,0
-.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */
- /* get address of __sigjmp_save from got */
- l %r1,__sigjmp_save@GOT12(0,%r1)
- lhi %r3,1 /* second argument of one */
- br %r1
-.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0
-#else
- basr %r1,0
-.L0: l %r1,.L1 - .L0(0,%r1) /* load address of __sigsetjmp */
- lhi %r3,1 /* second argument of zero */
- br %r1 /* branch to __sigsetjmp */
-.L1: .long __sigsetjmp
-#endif
-END (setjmp)
+/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-32/elf/configure b/sysdeps/s390/s390-32/configure
index 3012328834..4845484549 100644
--- a/sysdeps/s390/s390-32/elf/configure
+++ b/sysdeps/s390/s390-32/configure
@@ -81,7 +81,7 @@ $as_echo X/"$0" |
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/s390/elf.
+ # Local configure fragment for sysdeps/s390.
# Check for support of thread-local storage handling in assembler and
# linker.
@@ -124,4 +124,3 @@ if test $libc_cv_390_tls = no; then
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
-
diff --git a/sysdeps/s390/s390-32/elf/configure.in b/sysdeps/s390/s390-32/configure.in
index d1f40a375a..529bdda36a 100644
--- a/sysdeps/s390/s390-32/elf/configure.in
+++ b/sysdeps/s390/s390-32/configure.in
@@ -1,5 +1,5 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/s390/elf.
+# Local configure fragment for sysdeps/s390.
# Check for support of thread-local storage handling in assembler and
# linker.
diff --git a/sysdeps/s390/s390-32/elf/bsd-_setjmp.S b/sysdeps/s390/s390-32/elf/bsd-_setjmp.S
deleted file mode 100644
index 1417270201..0000000000
--- a/sysdeps/s390/s390-32/elf/bsd-_setjmp.S
+++ /dev/null
@@ -1 +0,0 @@
-/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-32/elf/bsd-setjmp.S b/sysdeps/s390/s390-32/elf/bsd-setjmp.S
deleted file mode 100644
index 1417270201..0000000000
--- a/sysdeps/s390/s390-32/elf/bsd-setjmp.S
+++ /dev/null
@@ -1 +0,0 @@
-/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-32/elf/setjmp.S b/sysdeps/s390/s390-32/elf/setjmp.S
deleted file mode 100644
index c54620871e..0000000000
--- a/sysdeps/s390/s390-32/elf/setjmp.S
+++ /dev/null
@@ -1,80 +0,0 @@
-/* setjmp for s390, ELF version.
- Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#define _ASM
-#define _SETJMP_H
-#include <bits/setjmp.h>
-
- /* We include the BSD entry points here as well but we make
- them weak. */
-ENTRY (setjmp)
- .weak C_SYMBOL_NAME (setjmp)
- lhi %r3,1 /* second argument of one */
- j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
-END (setjmp)
-
- /* Binary compatibility entry point. */
-ENTRY(_setjmp)
- .weak C_SYMBOL_NAME (_setjmp)
- lhi %r3,0 /* second argument of zero */
- j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
-END (_setjmp)
-libc_hidden_def (_setjmp)
-
-ENTRY(__setjmp)
- lhi %r3,0 /* second argument of zero */
- j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
-END (__setjmp)
-
-ENTRY(__sigsetjmp)
-.Linternal_sigsetjmp:
-#ifdef PTR_MANGLE
- stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
- lr %r4,%r14
- lr %r5,%r15
- PTR_MANGLE (%r4, %r1)
- PTR_MANGLE2 (%r5, %r1)
- stm %r4,%r5,32(%r2)
-#else
- stm %r6,%r15,0(%r2) /* store registers in jmp_buf */
-#endif
- std %f4,40(%r2)
- std %f6,48(%r2)
-#if defined NOT_IN_libc && defined IS_IN_rtld
- /* In ld.so we never save the signal mask. */
- lhi %r2,0
- br %r14
-#elif defined PIC
- /* We cannot use the PLT, because it requires that %r12 be set, but
- we can't save and restore our caller's value. Instead, we do an
- indirect jump through the GOT. */
- basr %r1,0
-.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */
- /* get address of __sigjmp_save from got */
- l %r1,__sigjmp_save@GOT12(0,%r1)
- br %r1
-.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0
-#else
- basr %r1,0
-.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */
- br %r1 /* tail-call __sigjmp_save */
-.L1: .long __sigjmp_save
-#endif
-END (__sigsetjmp)
diff --git a/sysdeps/s390/s390-32/setjmp.S b/sysdeps/s390/s390-32/setjmp.S
index 506772b95d..c54620871e 100644
--- a/sysdeps/s390/s390-32/setjmp.S
+++ b/sysdeps/s390/s390-32/setjmp.S
@@ -1,5 +1,5 @@
-/*
- Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
+/* setjmp for s390, ELF version.
+ Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of the GNU C Library.
@@ -17,17 +17,34 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _ASM
-#define _ASM
-#endif
-
#include <sysdep.h>
+#define _ASM
+#define _SETJMP_H
#include <bits/setjmp.h>
-/* Save the current program position in ENV and return 0. */
-/* R2 = pointer to jmp_buf, R3 = savemask */
+ /* We include the BSD entry points here as well but we make
+ them weak. */
+ENTRY (setjmp)
+ .weak C_SYMBOL_NAME (setjmp)
+ lhi %r3,1 /* second argument of one */
+ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
+END (setjmp)
+
+ /* Binary compatibility entry point. */
+ENTRY(_setjmp)
+ .weak C_SYMBOL_NAME (_setjmp)
+ lhi %r3,0 /* second argument of zero */
+ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
+END (_setjmp)
+libc_hidden_def (_setjmp)
+
+ENTRY(__setjmp)
+ lhi %r3,0 /* second argument of zero */
+ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
+END (__setjmp)
ENTRY(__sigsetjmp)
+.Linternal_sigsetjmp:
#ifdef PTR_MANGLE
stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
lr %r4,%r14
@@ -58,6 +75,6 @@ ENTRY(__sigsetjmp)
basr %r1,0
.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */
br %r1 /* tail-call __sigjmp_save */
-.L1: .long __sigjmp_save
+.L1: .long __sigjmp_save
#endif
END (__sigsetjmp)
diff --git a/sysdeps/s390/s390-32/elf/start.S b/sysdeps/s390/s390-32/start.S
index d7f3df7f66..d7f3df7f66 100644
--- a/sysdeps/s390/s390-32/elf/start.S
+++ b/sysdeps/s390/s390-32/start.S
diff --git a/sysdeps/s390/s390-64/bsd-_setjmp.S b/sysdeps/s390/s390-64/bsd-_setjmp.S
index 58c7767f95..1417270201 100644
--- a/sysdeps/s390/s390-64/bsd-_setjmp.S
+++ b/sysdeps/s390/s390-64/bsd-_setjmp.S
@@ -1,34 +1 @@
-/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. 64 bit S/390 version.
- Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
- We cannot do it in C because it must be a tail-call, so frame-unwinding
- in setjmp doesn't clobber the state restored by longjmp. */
-
-#include <sysdep.h>
-
-ENTRY(_setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
-#ifdef PIC
- jg __sigsetjmp@PLT /* Branch to PLT of __sigsetjmp. */
-#else
- jg __sigsetjmp /* Branch to __sigsetjmp. */
-#endif
-END (_setjmp)
-libc_hidden_def (_setjmp)
+/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-64/bsd-setjmp.S b/sysdeps/s390/s390-64/bsd-setjmp.S
index 956e5c4968..1417270201 100644
--- a/sysdeps/s390/s390-64/bsd-setjmp.S
+++ b/sysdeps/s390/s390-64/bsd-setjmp.S
@@ -1,33 +1 @@
-/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. 64 bit S/390 version.
- Copyright (C) 2001 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
- We cannot do it in C because it must be a tail-call, so frame-unwinding
- in setjmp doesn't clobber the state restored by longjmp. */
-
-#include <sysdep.h>
-
-ENTRY(setjmp)
- lghi %r1,1 /* Second argument of one. */
-#ifdef PIC
- jg __sigsetjmp@PLT /* Branch to PLT of __sigsetjmp. */
-#else
- jg __sigsetjmp /* Branch to __sigsetjmp. */
-#endif
-END (setjmp)
+/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-64/elf/configure b/sysdeps/s390/s390-64/configure
index e81655e0d0..0e71b82a11 100644
--- a/sysdeps/s390/s390-64/elf/configure
+++ b/sysdeps/s390/s390-64/configure
@@ -81,7 +81,7 @@ $as_echo X/"$0" |
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/s390/elf.
+ # Local configure fragment for sysdeps/s390.
# Check for support of thread-local storage handling in assembler and
# linker.
@@ -124,4 +124,3 @@ if test $libc_cv_390_tls = no; then
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
-
diff --git a/sysdeps/s390/s390-64/elf/configure.in b/sysdeps/s390/s390-64/configure.in
index 007e3838a4..235b5f03ec 100644
--- a/sysdeps/s390/s390-64/elf/configure.in
+++ b/sysdeps/s390/s390-64/configure.in
@@ -1,5 +1,5 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/s390/elf.
+# Local configure fragment for sysdeps/s390.
# Check for support of thread-local storage handling in assembler and
# linker.
diff --git a/sysdeps/s390/s390-64/elf/bsd-_setjmp.S b/sysdeps/s390/s390-64/elf/bsd-_setjmp.S
deleted file mode 100644
index 1417270201..0000000000
--- a/sysdeps/s390/s390-64/elf/bsd-_setjmp.S
+++ /dev/null
@@ -1 +0,0 @@
-/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-64/elf/bsd-setjmp.S b/sysdeps/s390/s390-64/elf/bsd-setjmp.S
deleted file mode 100644
index 1417270201..0000000000
--- a/sysdeps/s390/s390-64/elf/bsd-setjmp.S
+++ /dev/null
@@ -1 +0,0 @@
-/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-64/elf/setjmp.S b/sysdeps/s390/s390-64/elf/setjmp.S
deleted file mode 100644
index cbf68bce53..0000000000
--- a/sysdeps/s390/s390-64/elf/setjmp.S
+++ /dev/null
@@ -1,71 +0,0 @@
-/* setjmp for 64 bit S/390, ELF version.
- Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#define _ASM
-#define _SETJMP_H
-#include <bits/setjmp.h>
-
- /* We include the BSD entry points here as well but we make
- them weak. */
-ENTRY (setjmp)
- .weak C_SYMBOL_NAME (setjmp)
- lghi %r3,1 /* Second argument of one. */
- j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
-END (setjmp)
-
- /* Binary compatibility entry point. */
-ENTRY(_setjmp)
- .weak C_SYMBOL_NAME (_setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
- j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
-END (setjmp)
-libc_hidden_def (_setjmp)
-
-ENTRY(__setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
- j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
-END (setjmp)
-
-ENTRY(__sigsetjmp)
-.Linternal_sigsetjmp:
-#ifdef PTR_MANGLE
- stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
- lgr %r4,%r14
- lgr %r5,%r15
- PTR_MANGLE (%r4, %r1)
- PTR_MANGLE2 (%r5, %r1)
- stmg %r4,%r5,64(%r2)
-#else
- stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
-#endif
- std %f1,80(%r2)
- std %f3,88(%r2)
- std %f5,96(%r2)
- std %f7,104(%r2)
-#if defined NOT_IN_libc && defined IS_IN_rtld
- /* In ld.so we never save the signal mask. */
- lghi %r2,0
- br %r14
-#elif defined PIC
- jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */
-#else
- jg __sigjmp_save
-#endif
-END (__sigsetjmp)
diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/s390-64/setjmp.S
index 0c5f1fbf3f..cbf68bce53 100644
--- a/sysdeps/s390/s390-64/setjmp.S
+++ b/sysdeps/s390/s390-64/setjmp.S
@@ -1,4 +1,5 @@
-/* Copyright (C) 2001, 2005 Free Software Foundation, Inc.
+/* setjmp for 64 bit S/390, ELF version.
+ Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of the GNU C Library.
@@ -16,17 +17,34 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifndef _ASM
-#define _ASM
-#endif
-
#include <sysdep.h>
+#define _ASM
+#define _SETJMP_H
#include <bits/setjmp.h>
-/* Save the current program position in ENV and return 0. */
-/* R2 = pointer to jmp_buf, R3 = savemask. */
+ /* We include the BSD entry points here as well but we make
+ them weak. */
+ENTRY (setjmp)
+ .weak C_SYMBOL_NAME (setjmp)
+ lghi %r3,1 /* Second argument of one. */
+ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
+END (setjmp)
+
+ /* Binary compatibility entry point. */
+ENTRY(_setjmp)
+ .weak C_SYMBOL_NAME (_setjmp)
+ slgr %r3,%r3 /* Second argument of zero. */
+ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
+END (setjmp)
+libc_hidden_def (_setjmp)
+
+ENTRY(__setjmp)
+ slgr %r3,%r3 /* Second argument of zero. */
+ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
+END (setjmp)
ENTRY(__sigsetjmp)
+.Linternal_sigsetjmp:
#ifdef PTR_MANGLE
stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
lgr %r4,%r14
@@ -46,8 +64,8 @@ ENTRY(__sigsetjmp)
lghi %r2,0
br %r14
#elif defined PIC
- jg __sigjmp_save@PLT /* Tail-call __sigjmp_save. */
+ jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */
#else
- jg __sigjmp_save /* Tail-call __sigjmp_save. */
+ jg __sigjmp_save
#endif
END (__sigsetjmp)
diff --git a/sysdeps/s390/s390-64/elf/start.S b/sysdeps/s390/s390-64/start.S
index 6256f97292..6256f97292 100644
--- a/sysdeps/s390/s390-64/elf/start.S
+++ b/sysdeps/s390/s390-64/start.S
diff --git a/sysdeps/sh/elf/configure b/sysdeps/sh/configure
index 8235c3c01b..29a924b08a 100644
--- a/sysdeps/sh/elf/configure
+++ b/sysdeps/sh/configure
@@ -81,7 +81,7 @@ $as_echo X/"$0" |
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/sh/elf.
+ # Local configure fragment for sysdeps/sh.
# Check for support of thread-local storage handling in assembler and
# linker.
@@ -119,4 +119,3 @@ if test $libc_cv_sh_tls = no; then
fi
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
-
diff --git a/sysdeps/sh/elf/configure.in b/sysdeps/sh/configure.in
index 9c41a24f4f..538e34e9f5 100644
--- a/sysdeps/sh/elf/configure.in
+++ b/sysdeps/sh/configure.in
@@ -1,5 +1,5 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/sh/elf.
+# Local configure fragment for sysdeps/sh.
# Check for support of thread-local storage handling in assembler and
# linker.
diff --git a/sysdeps/sh/crti.S b/sysdeps/sh/crti.S
index 62b6c1cda8..c390485e98 100644
--- a/sysdeps/sh/crti.S
+++ b/sysdeps/sh/crti.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crti.S puts a function prologue at the beginning of the .init and
.fini sections and defines global symbols for those addresses, so
diff --git a/sysdeps/sh/crtn.S b/sysdeps/sh/crtn.S
index 1b52770041..78537e754d 100644
--- a/sysdeps/sh/crtn.S
+++ b/sysdeps/sh/crtn.S
@@ -30,9 +30,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* crtn.S puts function epilogues in the .init and .fini sections
corresponding to the prologues in crti.S. */
diff --git a/sysdeps/sh/elf/start.S b/sysdeps/sh/start.S
index 0d7557d096..0d7557d096 100644
--- a/sysdeps/sh/elf/start.S
+++ b/sysdeps/sh/start.S
diff --git a/sysdeps/sparc/Makefile b/sysdeps/sparc/Makefile
index 45609d55f1..3f0c096400 100644
--- a/sysdeps/sparc/Makefile
+++ b/sysdeps/sparc/Makefile
@@ -12,8 +12,9 @@ CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_SPARC_GCC=1
endif
ifeq ($(subdir),csu)
-# get offset to rtld_global._dl_hwcap
-gen-as-const-headers += rtld-global-offsets.sym
CPPFLAGS-crti.S += -fPIC
CPPFLAGS-crtn.S += -fPIC
endif
+
+# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
+ASFLAGS-.os += -fPIC
diff --git a/sysdeps/sparc/elf/configure b/sysdeps/sparc/configure
index a2545403ef..13d9c63b9d 100644
--- a/sysdeps/sparc/elf/configure
+++ b/sysdeps/sparc/configure
@@ -81,7 +81,47 @@ $as_echo X/"$0" |
}
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/sparc/elf.
+ # Local configure fragment for sysdeps/sparc.
+
+# Check for support of VIS3 et al. instructions in the assembler.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc assembler VIS3 support" >&5
+$as_echo_n "checking for sparc assembler VIS3 support... " >&6; }
+if ${libc_cv_sparc_as_vis3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.S <<\EOF
+ .text
+foo: fmadds %f1, %f2, %f3, %f5
+ fmaddd %f2, %f4, %f8, %f10
+ fhadds %f2, %f3, %f5
+ fhaddd %f4, %f8, %f10
+ pdistn %f2, %f4, %g1
+ movdtox %f10, %o0
+ movstouw %f9, %o1
+ movstosw %f7, %o2
+ movxtod %o3, %f18
+ movwtos %o4, %f15
+ flcmps %fcc0, %f3, %f5
+ flcmpd %fcc1, %f4, %f6
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS -Wa,-Av9d conftest.S'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ libc_cv_sparc_as_vis3=yes
+else
+ libc_cv_sparc_as_vis3=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_as_vis3" >&5
+$as_echo "$libc_cv_sparc_as_vis3" >&6; }
+if test $libc_cv_sparc_as_vis3 = yes; then
+ $as_echo "#define HAVE_AS_VIS3_SUPPORT 1" >>confdefs.h
+
+fi
# Check for support of thread-local storage handling in assembler and linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc TLS support" >&5
@@ -137,45 +177,6 @@ if test $libc_cv_sparc_tls = no; then
as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
-# Check for GOTDATA relocation support in assembler and linker.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc binutils GOTDATA reloc support" >&5
-$as_echo_n "checking for sparc binutils GOTDATA reloc support... " >&6; }
-if ${libc_cv_sparc_gotdata+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat > conftest.S <<\EOF
- .data
- .globl data
-data: .word 0
- .text
- .globl foo
-foo: sethi %gdop_hix22(data), %g1
- xor %g1, %gdop_lox10(data), %g1
-#ifdef __arch64__
- ldx [%l7 + %g1], %g1, %gdop(data)
-#else
- ld [%l7 + %g1], %g1, %gdop(data)
-#endif
-EOF
-if { ac_try='${CC-cc} -c $CFLAGS conftest.S 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- libc_cv_sparc_gotdata=yes
-else
- libc_cv_sparc_gotdata=no
-fi
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_gotdata" >&5
-$as_echo "$libc_cv_sparc_gotdata" >&6; }
-if test $libc_cv_sparc_gotdata = yes; then
- $as_echo "#define HAVE_BINUTILS_GOTDATA 1" >>confdefs.h
-
-fi
-
# Check for a GCC emitting GOTDATA relocations.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc gcc GOTDATA reloc support" >&5
$as_echo_n "checking for sparc gcc GOTDATA reloc support... " >&6; }
@@ -210,8 +211,7 @@ if test $libc_cv_sparc_gcc_gotdata = yes; then
fi
-if test $libc_cv_sparc_gcc_gotdata = yes \
- && test $libc_cv_sparc_gotdata = yes; then
+if test $libc_cv_sparc_gcc_gotdata = yes; then
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
fi
diff --git a/sysdeps/sparc/elf/configure.in b/sysdeps/sparc/configure.in
index 1a2f61a90c..a85d0544f0 100644
--- a/sysdeps/sparc/elf/configure.in
+++ b/sysdeps/sparc/configure.in
@@ -1,5 +1,33 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/sparc/elf.
+# Local configure fragment for sysdeps/sparc.
+
+# Check for support of VIS3 et al. instructions in the assembler.
+AC_CACHE_CHECK(for sparc assembler VIS3 support, libc_cv_sparc_as_vis3, [dnl
+cat > conftest.S <<\EOF
+ .text
+foo: fmadds %f1, %f2, %f3, %f5
+ fmaddd %f2, %f4, %f8, %f10
+ fhadds %f2, %f3, %f5
+ fhaddd %f4, %f8, %f10
+ pdistn %f2, %f4, %g1
+ movdtox %f10, %o0
+ movstouw %f9, %o1
+ movstosw %f7, %o2
+ movxtod %o3, %f18
+ movwtos %o4, %f15
+ flcmps %fcc0, %f3, %f5
+ flcmpd %fcc1, %f4, %f6
+EOF
+dnl
+if AC_TRY_COMMAND([${CC-cc} -c $CFLAGS -Wa,-Av9d conftest.S]); then
+ libc_cv_sparc_as_vis3=yes
+else
+ libc_cv_sparc_as_vis3=no
+fi
+rm -f conftest*])
+if test $libc_cv_sparc_as_vis3 = yes; then
+ AC_DEFINE(HAVE_AS_VIS3_SUPPORT)
+fi
# Check for support of thread-local storage handling in assembler and linker.
AC_CACHE_CHECK(for sparc TLS support, libc_cv_sparc_tls, [dnl
@@ -46,35 +74,6 @@ if test $libc_cv_sparc_tls = no; then
AC_MSG_ERROR([the assembler must support TLS])
fi
-# Check for GOTDATA relocation support in assembler and linker.
-AC_CACHE_CHECK(for sparc binutils GOTDATA reloc support, libc_cv_sparc_gotdata, [dnl
-changequote(,)dnl
-cat > conftest.S <<\EOF
- .data
- .globl data
-data: .word 0
- .text
- .globl foo
-foo: sethi %gdop_hix22(data), %g1
- xor %g1, %gdop_lox10(data), %g1
-#ifdef __arch64__
- ldx [%l7 + %g1], %g1, %gdop(data)
-#else
- ld [%l7 + %g1], %g1, %gdop(data)
-#endif
-EOF
-changequote([,])dnl
-dnl
-if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.S 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_sparc_gotdata=yes
-else
- libc_cv_sparc_gotdata=no
-fi
-rm -f conftest*])
-if test $libc_cv_sparc_gotdata = yes; then
- AC_DEFINE(HAVE_BINUTILS_GOTDATA)
-fi
-
# Check for a GCC emitting GOTDATA relocations.
AC_CACHE_CHECK(for sparc gcc GOTDATA reloc support, libc_cv_sparc_gcc_gotdata, [dnl
changequote(,)dnl
@@ -99,7 +98,6 @@ if test $libc_cv_sparc_gcc_gotdata = yes; then
AC_DEFINE(HAVE_GCC_GOTDATA)
fi
-if test $libc_cv_sparc_gcc_gotdata = yes \
- && test $libc_cv_sparc_gotdata = yes; then
+if test $libc_cv_sparc_gcc_gotdata = yes; then
AC_DEFINE(PI_STATIC_AND_HIDDEN)
fi
diff --git a/sysdeps/sparc/crti.S b/sysdeps/sparc/crti.S
index caed362293..7aa54537da 100644
--- a/sysdeps/sparc/crti.S
+++ b/sysdeps/sparc/crti.S
@@ -71,15 +71,9 @@ _init:
save %sp, -STACKFRAME_SIZE, %sp
#if PREINIT_FUNCTION_WEAK
SETUP_PIC_REG(l7)
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(PREINIT_FUNCTION), %g1
xor %g1, %gdop_lox10(PREINIT_FUNCTION), %g1
GOT_LOAD [%l7 + %g1], %g1, %gdop(PREINIT_FUNCTION)
-#else
- sethi %hi(PREINIT_FUNCTION), %g1
- or %g1, %lo(PREINIT_FUNCTION), %g1
- GOT_LOAD [%l7 + %g1], %g1
-#endif
cmp %g1, 0
be 1f
nop
diff --git a/sysdeps/sparc/elf/rtld-global-offsets.sym b/sysdeps/sparc/elf/rtld-global-offsets.sym
deleted file mode 100644
index ff4e97f2a6..0000000000
--- a/sysdeps/sparc/elf/rtld-global-offsets.sym
+++ /dev/null
@@ -1,7 +0,0 @@
-#define SHARED 1
-
-#include <ldsodefs.h>
-
-#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem)
-
-RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap)
diff --git a/sysdeps/sparc/fpu/fenv_private.h b/sysdeps/sparc/fpu/fenv_private.h
new file mode 100644
index 0000000000..a6e8e95a55
--- /dev/null
+++ b/sysdeps/sparc/fpu/fenv_private.h
@@ -0,0 +1,106 @@
+#ifndef FENV_PRIVATE_H
+#define FENV_PRIVATE_H 1
+
+#include <fenv.h>
+
+static __always_inline void
+libc_feholdexcept (fenv_t *e)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ *(e) = etmp;
+ etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline void
+libc_feholdexcept_setround (fenv_t *e, int r)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ *(e) = etmp;
+ etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT);
+ etmp = (etmp & ~__FE_ROUND_MASK) | (r);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline int
+libc_fetestexcept (int e)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ return etmp & (e) & FE_ALL_EXCEPT;
+}
+
+static __always_inline void
+libc_fesetenv (fenv_t *e)
+{
+ __fenv_ldfsr(*e);
+}
+
+static __always_inline int
+libc_feupdateenv_test (fenv_t *e, int ex)
+{
+ fenv_t etmp;
+
+ __fenv_stfsr(etmp);
+ etmp &= FE_ALL_EXCEPT;
+
+ __fenv_ldfsr(*e);
+
+ __feraiseexcept (etmp);
+
+ return etmp & ex;
+}
+
+static __always_inline void
+libc_feupdateenv (fenv_t *e)
+{
+ libc_feupdateenv_test (e, 0);
+}
+
+static __always_inline void
+libc_feholdsetround (fenv_t *e, int r)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ *(e) = etmp;
+ etmp = (etmp & ~__FE_ROUND_MASK) | (r);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline void
+libc_feresetround (fenv_t *e)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ etmp = (etmp & ~__FE_ROUND_MASK) | (*e & __FE_ROUND_MASK);
+ __fenv_ldfsr(etmp);
+}
+
+#define libc_feholdexceptf libc_feholdexcept
+#define libc_feholdexcept_setroundf libc_feholdexcept_setround
+#define libc_fetestexceptf libc_fetestexcept
+#define libc_fesetenvf libc_fesetenv
+#define libc_feupdateenv_testf libc_feupdateenv_test
+#define libc_feupdateenvf libc_feupdateenv
+#define libc_feholdsetroundf libc_feholdsetround
+#define libc_feresetroundf libc_feresetround
+#define libc_feholdexcept libc_feholdexcept
+#define libc_feholdexcept_setround libc_feholdexcept_setround
+#define libc_fetestexcept libc_fetestexcept
+#define libc_fesetenv libc_fesetenv
+#define libc_feupdateenv_test libc_feupdateenv_test
+#define libc_feupdateenv libc_feupdateenv
+#define libc_feholdsetround libc_feholdsetround
+#define libc_feresetround libc_feresetround
+#define libc_feholdexceptl libc_feholdexcept
+#define libc_feholdexcept_setroundl libc_feholdexcept_setround
+#define libc_fetestexceptl libc_fetestexcept
+#define libc_fesetenvl libc_fesetenv
+#define libc_feupdateenv_testl libc_feupdateenv_test
+#define libc_feupdateenvl libc_feupdateenv
+#define libc_feholdsetroundl libc_feholdsetround
+#define libc_feresetroundl libc_feresetround
+
+#endif /* FENV_PRIVATE_H */
diff --git a/sysdeps/sparc/fpu/libm-test-ulps b/sysdeps/sparc/fpu/libm-test-ulps
new file mode 100644
index 0000000000..60a53aa43f
--- /dev/null
+++ b/sysdeps/sparc/fpu/libm-test-ulps
@@ -0,0 +1,2432 @@
+# Begin of automatic generation
+
+# atan2
+Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# atanh
+Test "atanh (0.75) == 0.972955074527656652552676371721589865":
+float: 1
+ifloat: 1
+
+# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# casinh
+Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
+double: 5
+float: 1
+idouble: 5
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
+double: 3
+float: 6
+idouble: 3
+ifloat: 6
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+# catan
+Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
+ildouble: 1
+ldouble: 1
+
+# catanh
+Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+double: 4
+idouble: 4
+Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+ildouble: 1
+ldouble: 1
+
+# cbrt
+Test "cbrt (-0.001) == -0.1":
+ildouble: 1
+ldouble: 1
+Test "cbrt (-27.0) == -3.0":
+double: 1
+idouble: 1
+Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
+double: 1
+idouble: 1
+Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
+double: 1
+idouble: 1
+
+# ccos
+Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+float: 1
+ifloat: 1
+
+# ccosh
+Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-720 + 0.75 i) == 1.486960657116368433685753325516638551722e-313 + 1.385247284245720590980701226843815229385e-313 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i plus overflow exception":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (22730 + 0x1p-16434 i) == inf + 2.435706297811211974162115164702304105374e4924 i plus overflow exception":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# clog
+Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i) == 11356.83823118610934184548269774874545400 + pi/4 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
+float: 1
+ifloat: 1
+
+# clog10
+Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 308.4052305577487344482591243175787477115 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i) == 4932.212175672014259683102930239951947672 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.fp+16383 + 0x1p+16383 i) == 4932.112944269463028900262609694408579449 + 0.2069271710841128115912940666587802677383 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i) == -322.8546703496198318667349645920187712089 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# cos
+Test "cos (M_PI_6l * 2.0) == 0.5":
+double: 1
+idouble: 1
+Test "cos (M_PI_6l * 4.0) == -0.5":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cos_downward
+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
+float: 1
+ifloat: 1
+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
+float: 1
+ifloat: 1
+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+# cos_tonearest
+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+
+# cos_towardzero
+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (6) == 0.9601702866503660205456522979229244054519":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+# cos_upward
+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
+float: 1
+ifloat: 1
+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
+float: 1
+ifloat: 1
+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
+ildouble: 1
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
+ildouble: 1
+ldouble: 1
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ildouble: 1
+ldouble: 1
+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
+ildouble: 1
+ldouble: 1
+
+# cpow
+Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+ildouble: 4
+ldouble: 4
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+ildouble: 11
+ldouble: 11
+Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
+ildouble: 2
+ldouble: 2
+Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# csin
+Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
+ildouble: 1
+ldouble: 1
+
+# csinh
+Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+double: 1
+idouble: 1
+Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+
+# csqrt
+Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1p+16383 i) == 1.106698967236475180613254276996359485630e+2466 + 2.687568007603946993388538156299100955642e+2465 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-16440 + 0x1p-16441 i) == 3.514690655930285351254618340783294558136e-2475 + 8.297059146828716918029689466551384219370e-2476 i":
+ildouble: 1
+ldouble: 1
+
+# ctan
+Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+
+# ctanh
+Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+ildouble: 1
+ldouble: 1
+
+# erf
+Test "erf (1.25) == 0.922900128256458230136523481197281140":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.ffffc8p+2) == 1.122671365033056305522366683719541099329e-29":
+ildouble: 1
+ldouble: 1
+Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
+double: 1
+idouble: 1
+Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318":
+ildouble: 1
+ldouble: 1
+Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
+double: 1
+idouble: 1
+
+# exp10
+Test "exp10 (-1) == 0.1":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "exp10 (3) == 1000":
+double: 6
+float: 2
+idouble: 6
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# exp2
+Test "exp2 (100.5) == 1.792728671193156477399422023278661496394e+30":
+ildouble: 1
+ldouble: 1
+
+# exp_downward
+Test "exp_downward (2) == e^2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "exp_downward (3) == e^3":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_towardzero
+Test "exp_towardzero (2) == e^2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "exp_towardzero (3) == e^3":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_upward
+Test "exp_upward (1) == e":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# expm1
+Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
+double: 1
+idouble: 1
+Test "expm1 (1) == M_El - 1.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# gamma
+Test "gamma (-0.5) == log(2*sqrt(pi))":
+ildouble: 1
+ldouble: 1
+
+# hypot
+Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+
+# j0
+Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90":
+ildouble: 1
+ldouble: 1
+Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "j0 (10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# j1
+Test "j1 (-1.0) == -0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
+Test "j1 (0.75) == 0.349243602174862192523281016426251335":
+ildouble: 1
+ldouble: 1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "j1 (1.0) == 0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
+Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "j1 (2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+
+# jn
+Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (1, -1.0) == -0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 1.0) == 0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
+float: 1
+ifloat: 1
+Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
+double: 3
+idouble: 3
+ildouble: 1
+ldouble: 1
+Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 5
+ldouble: 5
+Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
+double: 3
+float: 5
+idouble: 3
+ifloat: 5
+ildouble: 3
+ldouble: 3
+Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+ildouble: 8
+ldouble: 8
+Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 3
+ldouble: 3
+
+# lgamma
+Test "lgamma (-0.5) == log(2*sqrt(pi))":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# log10
+Test "log10 (0.75) == -0.124938736608299953132449886193870744":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "log10 (e) == log10(e)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# log1p
+Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
+float: 1
+ifloat: 1
+
+# log2
+Test "log2 (0.75) == -.415037499278843818546261056052183492":
+ildouble: 1
+ldouble: 1
+
+# pow_downward
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sin_downward
+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
+float: 1
+ifloat: 1
+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
+ildouble: 1
+ldouble: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+Test "sin_tonearest (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+
+# sin_towardzero
+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sin_upward
+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
+float: 2
+ifloat: 2
+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+
+# sincos
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+double: 1
+idouble: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
+float: 1
+ifloat: 1
+
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+
+# sinh_upward
+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+ildouble: 1
+ldouble: 1
+
+# sqrt
+Test "sqrt (2) == M_SQRT2l":
+ildouble: 1
+ldouble: 1
+
+# tan_downward
+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
+float: 1
+ifloat: 1
+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+
+# tan_towardzero
+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# tan_upward
+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
+float: 1
+ifloat: 1
+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
+ildouble: 1
+ldouble: 1
+
+# tanh
+Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
+ildouble: 1
+ldouble: 1
+Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
+ildouble: 1
+ldouble: 1
+Test "tanh (0.75) == 0.635148952387287319214434357312496495":
+ildouble: 1
+ldouble: 1
+Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
+ildouble: 1
+ldouble: 1
+
+# tgamma
+Test "tgamma (-0.5) == -2 sqrt (pi)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (0.5) == sqrt (pi)":
+float: 1
+ifloat: 1
+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (4) == 6":
+ildouble: 1
+ldouble: 1
+
+# y0
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+
+# y1
+Test "y1 (0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "y1 (0.75) == -1.03759455076928541973767132140642198":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+idouble: 1
+Test "y1 (1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "y1 (10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# yn
+Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "yn (1, 0.75) == -1.03759455076928541973767132140642198":
+ildouble: 1
+ldouble: 1
+Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
+double: 2
+idouble: 2
+ildouble: 2
+ldouble: 2
+Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
+double: 1
+idouble: 1
+Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
+double: 1
+idouble: 1
+
+# Maximal error of functions:
+Function: "atan2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "atanh":
+float: 1
+ifloat: 1
+
+Function: Real part of "cacos":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "cacos":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+
+Function: Real part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casin":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+
+Function: Real part of "casinh":
+double: 5
+float: 1
+idouble: 5
+ifloat: 1
+ildouble: 4
+ldouble: 4
+
+Function: Imaginary part of "casinh":
+double: 3
+float: 6
+idouble: 3
+ifloat: 6
+ildouble: 2
+ldouble: 2
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "catanh":
+double: 4
+idouble: 4
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "catanh":
+ildouble: 1
+ldouble: 1
+
+Function: "cbrt":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "ccos":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "ccosh":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "clog":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+
+Function: "cos_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cos_upward":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_upward":
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+ildouble: 11
+ldouble: 11
+
+Function: Imaginary part of "cpow":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "csin":
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "csin":
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "ctan":
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "ctan":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+
+Function: Real part of "ctanh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "ctanh":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "erf":
+double: 1
+idouble: 1
+
+Function: "erfc":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp10":
+double: 6
+float: 2
+idouble: 6
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "exp2":
+ildouble: 1
+ldouble: 1
+
+Function: "exp_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "gamma":
+ildouble: 1
+ldouble: 1
+
+Function: "hypot":
+float: 1
+ifloat: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 4
+ldouble: 4
+
+Function: "jn":
+double: 4
+float: 5
+idouble: 4
+ifloat: 5
+ildouble: 8
+ldouble: 8
+
+Function: "lgamma":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "log10":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "log1p":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "log2":
+ildouble: 1
+ldouble: 1
+
+Function: "pow_downward":
+float: 1
+ifloat: 1
+
+Function: "pow_towardzero":
+float: 1
+ifloat: 1
+
+Function: "pow_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_upward":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "sincos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sinh_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sinh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sinh_upward":
+ildouble: 1
+ldouble: 1
+
+Function: "sqrt":
+ildouble: 1
+ldouble: 1
+
+Function: "tan":
+double: 1
+idouble: 1
+
+Function: "tan_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tan_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tan_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tanh":
+ildouble: 1
+ldouble: 1
+
+Function: "tgamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 3
+ldouble: 3
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "yn":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+ildouble: 5
+ldouble: 5
+
+# end of automatic generation
diff --git a/sysdeps/sparc/fpu/math_private.h b/sysdeps/sparc/fpu/math_private.h
new file mode 100644
index 0000000000..27946cec7b
--- /dev/null
+++ b/sysdeps/sparc/fpu/math_private.h
@@ -0,0 +1,7 @@
+#ifndef SPARC_MATH_PRIVATE_H
+#define SPARC_MATH_PRIVATE_H 1
+
+#include "fenv_private.h"
+#include_next <math_private.h>
+
+#endif /* SPARC_MATH_PRIVATE_H */
diff --git a/sysdeps/sparc/mempcpy.S b/sysdeps/sparc/mempcpy.S
new file mode 100644
index 0000000000..4c98013757
--- /dev/null
+++ b/sysdeps/sparc/mempcpy.S
@@ -0,0 +1 @@
+/* mempcpy is in memcpy.S */
diff --git a/sysdeps/sparc/sparc-ifunc.h b/sysdeps/sparc/sparc-ifunc.h
new file mode 100644
index 0000000000..db53a7126e
--- /dev/null
+++ b/sysdeps/sparc/sparc-ifunc.h
@@ -0,0 +1,112 @@
+/* This file is part of the GNU C Library.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#ifdef __ASSEMBLER__
+
+# ifdef SHARED
+
+# define SPARC_ASM_IFUNC_DFLT(name, dflt) \
+ENTRY (__##name) \
+ .type __##name, @gnu_indirect_function; \
+ SETUP_PIC_REG_LEAF(o3, o5); \
+ sethi %gdop_hix22(dflt), %o1; \
+ xor %o1, %gdop_lox10(dflt), %o1; \
+ add %o3, %o1, %o1; \
+ retl; \
+ mov %o1, %o0; \
+END (__##name)
+
+# define SPARC_ASM_IFUNC1(name, m1, f1, dflt) \
+ENTRY (__##name) \
+ .type __##name, @gnu_indirect_function; \
+ SETUP_PIC_REG_LEAF(o3, o5); \
+ set m1, %o1; \
+ andcc %o0, %o1, %g0; \
+ be 9f; \
+ nop; \
+ sethi %gdop_hix22(f1), %o1; \
+ xor %o1, %gdop_lox10(f1), %o1; \
+ ba 10f; \
+ nop; \
+9: sethi %gdop_hix22(dflt), %o1; \
+ xor %o1, %gdop_lox10(dflt), %o1; \
+10: add %o3, %o1, %o1; \
+ retl; \
+ mov %o1, %o0; \
+END (__##name)
+
+# else /* SHARED */
+
+# ifdef __arch64__
+# define SET(SYM, TMP, REG) setx SYM, TMP, REG
+# else
+# define SET(SYM, TMP, REG) set SYM, REG
+# endif
+
+# define SPARC_ASM_IFUNC_DFLT(name, dflt) \
+ENTRY (__##name) \
+ .type __##name, @gnu_indirect_function; \
+ SET(dflt, %g1, %o1); \
+ retl; \
+ mov %o1, %o0; \
+END (__##name)
+
+# define SPARC_ASM_IFUNC1(name, m1, f1, dflt) \
+ENTRY (__##name) \
+ .type __##name, @gnu_indirect_function; \
+ set m1, %o1; \
+ andcc %o0, %o1, %g0; \
+ be 9f; \
+ nop; \
+ SET(f1, %g1, %o1); \
+ ba 10f; \
+ nop; \
+9: SET(dflt, %g1, %o1); \
+10: retl; \
+ mov %o1, %o0; \
+END (__##name)
+
+# endif /* SHARED */
+
+# ifdef HAVE_AS_VIS3_SUPPORT
+
+#define SPARC_ASM_VIS3_IFUNC(name) \
+ SPARC_ASM_IFUNC1(name, HWCAP_SPARC_VIS3, \
+ __##name##_vis3, __##name##_generic)
+
+# else /* HAVE_AS_VIS3_SUPPORT */
+
+#define SPARC_ASM_VIS3_IFUNC(name) \
+ SPARC_ASM_IFUNC_DFLT(name, __##name##_generic)
+
+# endif /* HAVE_AS_VIS3_SUPPORT */
+
+
+#else /* __ASSEMBLER__ */
+
+# define sparc_libm_ifunc(name, expr) \
+ extern void *name##_ifunc (int) __asm__ (#name); \
+ void *name##_ifunc (int hwcap) \
+ { \
+ __typeof (name) *res = expr; \
+ return res; \
+ } \
+ __asm__ (".type " #name ", %gnu_indirect_function");
+
+#endif /* __ASSEMBLER__ */
diff --git a/sysdeps/sparc/sparc32/Makefile b/sysdeps/sparc/sparc32/Makefile
index fb1adafcd8..fb7132ee95 100644
--- a/sysdeps/sparc/sparc32/Makefile
+++ b/sysdeps/sparc/sparc32/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-1998, 2000, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-1998, 2000, 2011, 2012 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
diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h
index 7ea97fbffd..f85683d1b0 100644
--- a/sysdeps/sparc/sparc32/dl-machine.h
+++ b/sysdeps/sparc/sparc32/dl-machine.h
@@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. SPARC version.
- Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011
+ Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -216,17 +216,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
The C function `_dl_start' is the real entry point;
its return value is the user program's entry point. */
-#ifdef HAVE_BINUTILS_GOTDATA
#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \
"sethi %gdop_hix22(" #symbol "), " #reg "\n\t" \
"xor " #reg ", %gdop_lox10(" #symbol "), " #reg "\n\t" \
"ld [" #pic_reg " + " #reg "], " #reg ", %gdop(" #symbol ")"
-#else
-#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \
- "sethi %hi(" #symbol "), " #reg "\n\t" \
- "or " #reg ", %lo(" #symbol "), " #reg "\n\t" \
- "ld [" #pic_reg " + " #reg "], " #reg
-#endif
#define RTLD_START __asm__ ("\
.text\n\
@@ -348,10 +341,14 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
void *const reloc_addr_arg, int skip_ifunc)
{
Elf32_Addr *const reloc_addr = reloc_addr_arg;
+#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP
const Elf32_Sym *const refsym = sym;
+#endif
Elf32_Addr value;
const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
+#if !defined RESOLVE_CONFLICT_FIND_MAP
struct link_map *sym_map = NULL;
+#endif
#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
/* This is defined in rtld.c, but nowhere in the static libc.a; make the
diff --git a/sysdeps/sparc/sparc32/dl-trampoline.S b/sysdeps/sparc/sparc32/dl-trampoline.S
index 79ec79fe9e..44794592aa 100644
--- a/sysdeps/sparc/sparc32/dl-trampoline.S
+++ b/sysdeps/sparc/sparc32/dl-trampoline.S
@@ -1,5 +1,5 @@
/* PLT trampolines. Sparc 32-bit version.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2012 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
@@ -48,17 +48,20 @@ _dl_runtime_resolve:
.size _dl_runtime_resolve, .-_dl_runtime_resolve
/* For the profiling cases we pass in our stack frame
- * as the base of the La_sparc64_regs, so it looks
+ * as the base of the La_sparc32_regs, so it looks
* like:
- * %l0 %sp
+ * %l0 %sp + (0 * 8)
+ * %l1 %sp + (0 * 8) + 4
* ...
- * %l7 %sp + (7 * 8)
- * %i0 %sp + (8 * 8)
+ * %l6 %sp + (3 * 8)
+ * %l7 %sp + (3 * 8) + 4
+ * %i0 %sp + (4 * 8)
+ * %i1 %sp + (4 * 8) + 4
* ...
- * %i7 %sp + (15 * 8)
- * %f0 %sp + (16 * 8)
- * %f16 %sp + (31 * 8)
- * framesize %sp + (32 * 8)
+ * %i6 %sp + (7 * 8)
+ * %i7 %sp + (7 * 8) + 4
+ * struct_ret_ptr %sp + (8 * 8)
+ * framesize %sp + (9 * 8)
*/
.globl _dl_profile_save_regs
@@ -74,7 +77,7 @@ _dl_profile_save_regs:
std %i2, [%sp + ( 5 * 8)]
std %i4, [%sp + ( 6 * 8)]
std %i6, [%sp + ( 7 * 8)]
- ld [%sp + (8 * 8)], %l4
+ ld [%fp + (8 * 8)], %l4
retl
st %l4, [%sp + (8 * 8)]
@@ -91,8 +94,11 @@ _dl_profile_save_regs:
_dl_profile_invoke:
cfi_startproc
- sub %sp, %l0, %sp
-1:
+ add %l0, 7, %l0
+ andn %l0, 7, %l0
+ add %l0, 2 * 8, %g1
+
+ sub %sp, %g1, %sp
srl %l0, 3, %l7
mov %o0, %l1
mov %i0, %o0
@@ -101,8 +107,10 @@ _dl_profile_invoke:
mov %i3, %o3
mov %i4, %o4
mov %i5, %o5
+ cmp %l0, 0
mov %fp, %l2
- mov %sp, %l3
+ be 2f
+ add %sp, (11 * 8), %l3
1: ldd [%l2], %g2
add %l2, 0x8, %l2
subcc %l7, 1, %l7
@@ -110,7 +118,7 @@ _dl_profile_invoke:
bne 1b
add %l3, 0x8, %l3
- jmpl %l1, %o7
+2: jmpl %l1, %o7
nop
std %o0, [%sp + ( 9 * 8)]
@@ -118,11 +126,12 @@ _dl_profile_invoke:
mov %l5, %o0
mov %l6, %o1
- add %sp, %l0, %o2
+ add %sp, (11 * 8), %o2
call _dl_call_pltexit
- add %sp, (16 * 8), %o3
+ add %sp, ( 9 * 8), %o3
- ldd [%sp + (9 * 8)], %i0
+ ldd [%sp + ( 9 * 8)], %i0
+ ldd [%sp + (10 * 8)], %f0
jmpl %i7 + 8, %g0
restore
@@ -142,11 +151,7 @@ _dl_profile_invoke:
_dl_runtime_profile:
cfi_startproc
- cmp %fp, 0
- be,a 1f
- mov 104, %g3
- sub %fp, %sp, %g3
-1: save %sp, -104, %sp
+ save %sp, -104, %sp
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)
@@ -156,20 +161,19 @@ _dl_runtime_profile:
mov %i7, %o2
sub %o1, 4*12, %o1
- mov %g3, %l0
mov %o0, %l5
mov %o1, %l6
- call _dl_profile_save_regs
+ call _dl_profile_save_regs
nop
mov %sp, %o3
call _dl_profile_fixup
add %sp, (9 * 8), %o4
- ld [%sp + (9 * 8)], %o1
- cmp %o1, 0
- bgeu 1f
+ ld [%sp + (9 * 8)], %l0
+ cmp %l0, 0
+ bl 1f
nop
call _dl_profile_invoke
diff --git a/sysdeps/sparc/sparc32/elf/Makefile b/sysdeps/sparc/sparc32/elf/Makefile
deleted file mode 100644
index a995e6cdf1..0000000000
--- a/sysdeps/sparc/sparc32/elf/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sparc/ELF specific definitions.
-
-# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS-.os = -fPIC
diff --git a/sysdeps/sparc/sparc32/fpu/libm-test-ulps b/sysdeps/sparc/sparc32/fpu/libm-test-ulps
deleted file mode 100644
index 91e6760d52..0000000000
--- a/sysdeps/sparc/sparc32/fpu/libm-test-ulps
+++ /dev/null
@@ -1,1376 +0,0 @@
-# Begin of automatic generation
-
-# atan2
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
-ildouble: 1
-ldouble: 1
-Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
-ildouble: 1
-ldouble: 1
-Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# atanh
-Test "atanh (0.75) == 0.972955074527656652552676371721589865":
-float: 1
-ifloat: 1
-
-# cacos
-Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
-ildouble: 1
-ldouble: 1
-
-# cacosh
-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-ildouble: 5
-ldouble: 5
-Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 1
-ldouble: 1
-
-# casin
-Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
-ildouble: 1
-ldouble: 1
-
-# casinh
-Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-ildouble: 4
-ldouble: 4
-Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
-double: 3
-float: 6
-idouble: 3
-ifloat: 6
-ildouble: 2
-ldouble: 2
-Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# catan
-Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-float: 3
-ifloat: 3
-Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
-float: 4
-ifloat: 4
-Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
-ildouble: 1
-ldouble: 1
-
-# catanh
-Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-double: 4
-idouble: 4
-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-float: 4
-ifloat: 4
-Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-
-# cbrt
-Test "cbrt (-0.001) == -0.1":
-ildouble: 1
-ldouble: 1
-Test "cbrt (-27.0) == -3.0":
-double: 1
-idouble: 1
-Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
-double: 1
-idouble: 1
-Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
-double: 1
-idouble: 1
-
-# ccos
-Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
-float: 1
-ifloat: 1
-
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
-float: 1
-ifloat: 1
-
-# cexp
-Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
-ildouble: 1
-ldouble: 1
-
-# clog
-Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
-float: 3
-ifloat: 3
-Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# clog10
-Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
-double: 1
-float: 5
-idouble: 1
-ifloat: 5
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# cos
-Test "cos (M_PI_6l * 2.0) == 0.5":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "cos (M_PI_6l * 4.0) == -0.5":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "cos (pi/2) == 0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
-float: 1
-ifloat: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-ildouble: 4
-ldouble: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
-ildouble: 1
-ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 10
-ldouble: 10
-Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
-ildouble: 2
-ldouble: 2
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-ildouble: 3
-ldouble: 3
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# csin
-Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
-ildouble: 1
-ldouble: 1
-Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
-ildouble: 1
-ldouble: 1
-
-# csinh
-Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
-double: 1
-idouble: 1
-Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
-float: 1
-ifloat: 1
-
-# csqrt
-Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i":
-ildouble: 1
-ldouble: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-# ctanh
-Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
-float: 1
-ifloat: 1
-Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
-double: 1
-idouble: 1
-
-# erf
-Test "erf (1.25) == 0.922900128256458230136523481197281140":
-double: 1
-idouble: 1
-
-# erfc
-Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
-double: 1
-idouble: 1
-Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318":
-ildouble: 1
-ldouble: 1
-Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
-double: 1
-idouble: 1
-
-# exp10
-Test "exp10 (-1) == 0.1":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "exp10 (3) == 1000":
-double: 6
-float: 2
-idouble: 6
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# exp2
-Test "exp2 (10) == 1024":
-ildouble: 2
-ldouble: 2
-
-# expm1
-Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
-double: 1
-idouble: 1
-Test "expm1 (1) == M_El - 1.0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# gamma
-Test "gamma (-0.5) == log(2*sqrt(pi))":
-ildouble: 1
-ldouble: 1
-
-# hypot
-Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-
-# j0
-Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "j0 (0.75) == 0.864242275166648623555731103820923211":
-float: 1
-ifloat: 1
-Test "j0 (10.0) == -0.245935764451348335197760862485328754":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "j0 (2.0) == 0.223890779141235668051827454649948626":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "j0 (8.0) == 0.171650807137553906090869407851972001":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# j1
-Test "j1 (-1.0) == -0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "j1 (0.75) == 0.349243602174862192523281016426251335":
-ildouble: 1
-ldouble: 1
-Test "j1 (1.0) == 0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "j1 (2.0) == 0.576724807756873387202448242269137087":
-double: 1
-idouble: 1
-Test "j1 (8.0) == 0.234636346853914624381276651590454612":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-
-# jn
-Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (1, -1.0) == -0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 1.0) == 0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
-double: 1
-idouble: 1
-Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
-ildouble: 1
-ldouble: 1
-Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
-ildouble: 1
-ldouble: 1
-Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 2
-ldouble: 2
-Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
-double: 3
-idouble: 3
-ildouble: 1
-ldouble: 1
-Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
-double: 3
-float: 5
-idouble: 3
-ifloat: 5
-ildouble: 3
-ldouble: 3
-Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 8
-ldouble: 8
-Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-# lgamma
-Test "lgamma (-0.5) == log(2*sqrt(pi))":
-ildouble: 1
-ldouble: 1
-Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# log10
-Test "log10 (0.75) == -0.124938736608299953132449886193870744":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "log10 (e) == log10(e)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# log1p
-Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
-float: 1
-ifloat: 1
-Test "log1p (M_El - 1.0) == 1":
-ildouble: 1
-ldouble: 1
-
-# log2
-Test "log2 (0.75) == -.415037499278843818546261056052183492":
-ildouble: 1
-ldouble: 1
-
-# sincos
-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
-float: 1
-ifloat: 1
-
-# sqrt
-Test "sqrt (2) == M_SQRT2l":
-ildouble: 1
-ldouble: 1
-
-# tan
-Test "tan (pi/4) == 1":
-double: 1
-idouble: 1
-
-# tanh
-Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
-ildouble: 1
-ldouble: 1
-Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
-ildouble: 1
-ldouble: 1
-Test "tanh (0.75) == 0.635148952387287319214434357312496495":
-ildouble: 1
-ldouble: 1
-Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
-ildouble: 1
-ldouble: 1
-
-# tgamma
-Test "tgamma (-0.5) == -2 sqrt (pi)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (0.5) == sqrt (pi)":
-float: 1
-ifloat: 1
-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (4) == 6":
-ildouble: 1
-ldouble: 1
-
-# y0
-Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5) == 0.382448923797758843955068554978089862":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
-float: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-Test "y0 (8.0) == 0.223521489387566220527323400498620359":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-# y1
-Test "y1 (0.125) == -5.19993611253477499595928744876579921":
-double: 1
-idouble: 1
-Test "y1 (0.75) == -1.03759455076928541973767132140642198":
-ildouble: 1
-ldouble: 1
-Test "y1 (1.5) == -0.412308626973911295952829820633445323":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "y1 (10.0) == 0.249015424206953883923283474663222803":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "y1 (2.0) == -0.107032431540937546888370772277476637":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "y1 (8.0) == -0.158060461731247494255555266187483550":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# yn
-Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
-float: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
-double: 1
-idouble: 1
-Test "yn (1, 0.75) == -1.03759455076928541973767132140642198":
-ildouble: 1
-ldouble: 1
-Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
-double: 2
-idouble: 2
-ildouble: 2
-ldouble: 2
-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
-double: 1
-idouble: 1
-Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
-double: 1
-idouble: 1
-
-# Maximal error of functions:
-Function: "atan2":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-
-Function: "atanh":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "cacos":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cacosh":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "casin":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casinh":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "casinh":
-double: 3
-float: 6
-idouble: 3
-ifloat: 6
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "catan":
-float: 4
-ifloat: 4
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "catanh":
-double: 4
-idouble: 4
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catanh":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-
-Function: "cbrt":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccos":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccosh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cexp":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "cexp":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "clog":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "clog":
-float: 3
-ifloat: 3
-
-Function: Real part of "clog10":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "clog10":
-double: 1
-float: 5
-idouble: 1
-ifloat: 5
-ildouble: 1
-ldouble: 1
-
-Function: "cos":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cpow":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "cpow":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csin":
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csin":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csinh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csqrt":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csqrt":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ctan":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ctanh":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ctanh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erf":
-double: 1
-idouble: 1
-
-Function: "erfc":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp10":
-double: 6
-float: 2
-idouble: 6
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "exp2":
-ildouble: 2
-ldouble: 2
-
-Function: "expm1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "gamma":
-ildouble: 1
-ldouble: 1
-
-Function: "hypot":
-float: 1
-ifloat: 1
-
-Function: "j0":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "j1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "jn":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-ildouble: 8
-ldouble: 8
-
-Function: "lgamma":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log10":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log1p":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log2":
-ildouble: 1
-ldouble: 1
-
-Function: "sincos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sqrt":
-ildouble: 1
-ldouble: 1
-
-Function: "tan":
-double: 1
-idouble: 1
-
-Function: "tanh":
-ildouble: 1
-ldouble: 1
-
-Function: "tgamma":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "y0":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "y1":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "yn":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-# end of automatic generation
diff --git a/sysdeps/sparc/sparc32/fpu/s_copysign.S b/sysdeps/sparc/sparc32/fpu/s_copysign.S
new file mode 100644
index 0000000000..18c44c5d3c
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/s_copysign.S
@@ -0,0 +1,31 @@
+/* copysign function, sparc32 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__copysign)
+ sethi %hi(0x80000000), %g1
+ and %o2, %g1, %o4
+ andn %o0, %g1, %o0
+ or %o0, %o4, %o0
+ std %o0, [%sp + 72]
+ retl
+ ldd [%sp + 72], %f0
+END (__copysign)
+weak_alias (__copysign, copysign) \ No newline at end of file
diff --git a/sysdeps/sparc/sparc32/fpu/s_copysignf.S b/sysdeps/sparc/sparc32/fpu/s_copysignf.S
new file mode 100644
index 0000000000..7753c35e87
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/s_copysignf.S
@@ -0,0 +1,31 @@
+/* float copysign function, sparc32 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__copysignf)
+ sethi %hi(0x80000000), %g1
+ and %o1, %g1, %o4
+ andn %o0, %g1, %o0
+ or %o0, %o4, %o0
+ st %o0, [%sp + 68]
+ retl
+ ld [%sp + 68], %f0
+END (__copysignf)
+weak_alias (__copysignf, copysignf) \ No newline at end of file
diff --git a/sysdeps/sparc/sparc32/fpu/s_fma.c b/sysdeps/sparc/sparc32/fpu/s_fma.c
new file mode 100644
index 0000000000..8f62605870
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/s_fma.c
@@ -0,0 +1,2 @@
+/* Always use dbl-64 version because long double is emulated in software. */
+#include <sysdeps/ieee754/dbl-64/s_fma.c>
diff --git a/sysdeps/sparc/sparc32/fpu/s_signbit.S b/sysdeps/sparc/sparc32/fpu/s_signbit.S
new file mode 100644
index 0000000000..3756bf431a
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/s_signbit.S
@@ -0,0 +1,32 @@
+/* signbit(). sparc32 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__signbit)
+ retl
+ srl %o0, 31, %o0
+END (__signbit)
+weak_alias (__signbit, signbit)
+
+/* On 32-bit the double version will also always work for
+ single-precision since in both cases the word with the
+ sign bit in it is passed always in register %o0. */
+strong_alias (__signbit, __signbitf)
+hidden_def (__signbitf)
+weak_alias (__signbitf, signbitf)
diff --git a/sysdeps/sparc/sparc32/fpu/s_signbitf.S b/sysdeps/sparc/sparc32/fpu/s_signbitf.S
new file mode 100644
index 0000000000..91886af6d5
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/s_signbitf.S
@@ -0,0 +1 @@
+/* signbitf is implemented in s_signbit.S */ \ No newline at end of file
diff --git a/sysdeps/sparc/sparc32/fpu/s_signbitl.S b/sysdeps/sparc/sparc32/fpu/s_signbitl.S
new file mode 100644
index 0000000000..2feaee0361
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/s_signbitl.S
@@ -0,0 +1,32 @@
+/* signbitl(). sparc32 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include <math_ldbl_opt.h>
+
+ENTRY (___signbitl)
+ ld [%o0], %o1
+ retl
+ srl %o1, 31, %o0
+END (___signbitl)
+
+#ifdef IS_IN_libm
+long_double_symbol (libm, ___signbitl, __signbitl);
+#else
+long_double_symbol (libc, ___signbitl, __signbitl);
+#endif
diff --git a/sysdeps/sparc/sparc32/fpu/w_sqrt.S b/sysdeps/sparc/sparc32/fpu/w_sqrt.S
new file mode 100644
index 0000000000..667c71c625
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/w_sqrt.S
@@ -0,0 +1,53 @@
+/* sqrt function. sparc32 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrt)
+ clr %g1
+ std %g0, [%sp + 72]
+ std %o0, [%sp + 80]
+ ldd [%sp + 72], %f8
+ ldd [%sp + 80], %f0
+ fcmpd %f0, %f8
+ fbl 1f
+ nop
+8: retl
+ fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be 8b
+ mov %o0, %o2
+ mov %o1, %o3
+ mov 26, %o4
+ mov %o7, %g1
+ call __kernel_standard
+ mov %g1, %o7
+END (__sqrt)
+
+weak_alias (__sqrt, sqrt)
diff --git a/sysdeps/sparc/sparc32/fpu/w_sqrtf.S b/sysdeps/sparc/sparc32/fpu/w_sqrtf.S
new file mode 100644
index 0000000000..5260bec373
--- /dev/null
+++ b/sysdeps/sparc/sparc32/fpu/w_sqrtf.S
@@ -0,0 +1,51 @@
+/* sqrtf function. sparc32 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrtf)
+ st %g0, [%sp + 68]
+ st %o0, [%sp + 72]
+ ld [%sp + 68], %f8
+ ld [%sp + 72], %f0
+ fcmps %f0, %f8
+ fbl 1f
+ nop
+8: retl
+ fsqrts %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be 8b
+ mov %o0, %o1
+ mov 126, %o2
+ mov %o7, %g1
+ call __kernel_standard_f
+ mov %g1, %o7
+END (__sqrtf)
+
+weak_alias (__sqrtf, sqrtf)
diff --git a/sysdeps/sparc/sparc32/memcpy.S b/sysdeps/sparc/sparc32/memcpy.S
index a36f1d6aa0..82fa6d1045 100644
--- a/sysdeps/sparc/sparc32/memcpy.S
+++ b/sysdeps/sparc/sparc32/memcpy.S
@@ -104,11 +104,17 @@
std %t2, [%dst + offset + offset2 + 0x08];
.text
- .align 4
+ENTRY(__mempcpy)
+ add %o0, %o2, %g1
+ ba 101f
+ st %g1, [%sp + 64]
+END(__mempcpy)
+ .align 4
ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */
- sub %o0, %o1, %o4
st %o0, [%sp + 64]
+101:
+ sub %o0, %o1, %o4
9: andcc %o4, 3, %o5
0: bne 86f
cmp %o2, 15
@@ -641,3 +647,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */
END(memcpy)
libc_hidden_builtin_def (memcpy)
+
+libc_hidden_def (__mempcpy)
+weak_alias (__mempcpy, mempcpy)
+libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/sparc/sparc32/sparcv9/Makefile b/sysdeps/sparc/sparc32/sparcv9/Makefile
index 58f5759b3f..8a9330f7a6 100644
--- a/sysdeps/sparc/sparc32/sparcv9/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/Makefile
@@ -5,9 +5,18 @@ sysdep_routines += hp-timing
elide-routines.os += hp-timing
endif
+ifeq ($(have-as-vis3),yes)
+ASFLAGS-.o += -Wa,-Av9d
+ASFLAGS-.os += -Wa,-Av9d
+ASFLAGS-.op += -Wa,-Av9d
+ASFLAGS-.og += -Wa,-Av9d
+ASFLAGS-.ob += -Wa,-Av9d
+ASFLAGS-.oS += -Wa,-Av9d
+else
ASFLAGS-.o += -Wa,-Av9a
ASFLAGS-.os += -Wa,-Av9a
ASFLAGS-.op += -Wa,-Av9a
ASFLAGS-.og += -Wa,-Av9a
ASFLAGS-.ob += -Wa,-Av9a
ASFLAGS-.oS += -Wa,-Av9a
+endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
new file mode 100644
index 0000000000..ee9f6ffce7
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
@@ -0,0 +1,11 @@
+ifeq ($(subdir),math)
+ifeq ($(have-as-vis3),yes)
+libm-sysdep_routines += m_copysignf-vis3 m_copysign-vis3 s_ceilf-vis3 \
+ s_ceil-vis3 s_fabs-vis3 s_fabsf-vis3 s_floor-vis3 \
+ s_floorf-vis3 s_llrintf-vis3 s_llrint-vis3 \
+ s_rintf-vis3 s_rint-vis3 w_sqrt-vis3 w_sqrtf-vis3 \
+ s_fminf-vis3 s_fmin-vis3 s_fmaxf-vis3 s_fmax-vis3 \
+ s_fmaf-vis3 s_fma-vis3
+sysdep_routines += s_copysignf-vis3 s_copysign-vis3
+endif
+endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil-vis3.S
new file mode 100644
index 0000000000..be41219cef
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil-vis3.S
@@ -0,0 +1,78 @@
+/* ceil function, sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceil_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+ sethi %hi(ONE_DOT_ZERO), %o3
+ or %o0, %o1, %o0
+ movxtod %o0, %f0
+ sllx %o2, 32, %o2
+ fzero ZERO
+ sllx %o3, 32, %o3
+
+ fnegd ZERO, SIGN_BIT
+
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ movxtod %o3, %f20
+
+ fmovduge %fcc2, ZERO, %f20
+ faddd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__ceil_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil.S
new file mode 100644
index 0000000000..fa4c7c353f
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceil.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(ceil)
+
+weak_alias (__ceil, ceil)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __ceil __ceil_generic
+
+#include "../s_ceil.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf-vis3.S
new file mode 100644
index 0000000000..c35a85f24f
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf-vis3.S
@@ -0,0 +1,74 @@
+/* Float ceil function, sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceilf_vis3)
+ movwtos %o0, %f0
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ movwtos %o2, %f16
+ fabss %f0, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f0, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f0, %f16, %f1
+ fsubs %f1, %f16, %f1
+ fcmps %fcc2, %f1, %f0
+ movwtos %o3, %f9
+
+ fmovsuge %fcc2, ZERO, %f9
+ fadds %f1, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__ceilf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf.S
new file mode 100644
index 0000000000..3047dd8faa
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_ceilf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(ceilf)
+
+weak_alias (__ceilf, ceilf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __ceilf __ceilf_generic
+
+#include "../s_ceilf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S
new file mode 100644
index 0000000000..db27bb7f52
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S
@@ -0,0 +1,30 @@
+/* copysign function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__copysign_vis3)
+ sethi %hi(0x80000000), %g1
+ and %o2, %g1, %o4
+ andn %o0, %g1, %o0
+ or %o0, %o4, %o0
+ movwtos %o0, %f0
+ retl
+ movwtos %o1, %f1
+END (__copysign_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S
new file mode 100644
index 0000000000..cdd98c00f4
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(copysign)
+
+weak_alias (__copysign, copysign)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __copysign __copysign_generic
+
+#include "../../../fpu/s_copysign.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S
new file mode 100644
index 0000000000..7cdc540842
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S
@@ -0,0 +1,29 @@
+/* float copysign function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__copysignf_vis3)
+ sethi %hi(0x80000000), %g1
+ and %o1, %g1, %o4
+ andn %o0, %g1, %o0
+ or %o0, %o4, %o0
+ retl
+ movwtos %o0, %f0
+END (__copysignf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S
new file mode 100644
index 0000000000..cd409550de
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(copysignf)
+
+weak_alias (__copysignf, copysignf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __copysignf __copysignf_generic
+
+#include "../../../fpu/s_copysignf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S
new file mode 100644
index 0000000000..733ec90e42
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S
@@ -0,0 +1,26 @@
+/* Float absolute value, sparc32+v9 vis3 version.
+ Copyright (C) 2011 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fabs_vis3)
+ movwtos %o0, %f0
+ movwtos %o1, %f1
+ retl
+ fabsd %f0, %f0
+END (__fabs_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S
new file mode 100644
index 0000000000..86c63989a4
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fabs)
+
+weak_alias (__fabs, fabs)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fabs __fabs_generic
+
+#include "../s_fabs.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S
new file mode 100644
index 0000000000..82b577580e
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S
@@ -0,0 +1,26 @@
+/* Float absolute value, sparc32 vis3 version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2006.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fabsf_vis3)
+ movwtos %o0, %f0
+ retl
+ fabss %f0, %f0
+END (__fabsf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S
new file mode 100644
index 0000000000..0f2e11e01f
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fabsf)
+
+weak_alias (__fabsf, fabsf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fabsf __fabsf_generic
+
+#include "../../../fpu/s_fabsf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor-vis3.S
new file mode 100644
index 0000000000..d7e5d24c17
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor-vis3.S
@@ -0,0 +1,79 @@
+/* floor function, sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floor_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+ sethi %hi(ONE_DOT_ZERO), %o3
+ or %o0, %o1, %o0
+ movxtod %o0, %f0
+ sllx %o2, 32, %o2
+ fzero ZERO
+ sllx %o3, 32, %o3
+
+ fnegd ZERO, SIGN_BIT
+
+ stx %o2, [%sp + 72]
+ fabsd %f0, %f14
+
+ ldd [%sp + 72], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ movxtod %o3, %f20
+
+ fmovdule %fcc2, ZERO, %f20
+ fsubd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__floor_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor.S
new file mode 100644
index 0000000000..6ae9947a7a
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floor.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(floor)
+
+weak_alias (__floor, floor)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __floor __floor_generic
+
+#include "../s_floor.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf-vis3.S
new file mode 100644
index 0000000000..24c8764fa6
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf-vis3.S
@@ -0,0 +1,74 @@
+/* Float floor function, sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floorf_vis3)
+ movwtos %o0, %f0
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ movwtos %o2, %f16
+ fabss %f0, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f0, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f0, %f16, %f1
+ fsubs %f1, %f16, %f1
+ fcmps %fcc2, %f1, %f0
+ movwtos %o3, %f9
+
+ fmovsule %fcc2, ZERO, %f9
+ fsubs %f1, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__floorf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf.S
new file mode 100644
index 0000000000..31cda385b7
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_floorf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(floorf)
+
+weak_alias (__floorf, floorf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __floorf __floorf_generic
+
+#include "../s_floorf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S
new file mode 100644
index 0000000000..ee2790023e
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S
@@ -0,0 +1,31 @@
+/* fma function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fma_vis3)
+ movwtos %o0, %f0
+ movwtos %o1, %f1
+ movwtos %o2, %f2
+ movwtos %o3, %f3
+ movwtos %o4, %f4
+ movwtos %o5, %f5
+ retl
+ fmaddd %f0, %f2, %f4, %f0
+END (__fma_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c
new file mode 100644
index 0000000000..3f2f1622c8
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c
@@ -0,0 +1,14 @@
+#ifdef HAVE_AS_VIS3_SUPPORT
+# include <sparc-ifunc.h>
+# include <math.h>
+
+extern double __fma_vis3 (double, double, double);
+extern double __fma_generic (double, double, double);
+
+sparc_libm_ifunc(__fma, hwcap & HWCAP_SPARC_FMAF ? __fma_vis3 : __fma_generic);
+weak_alias (__fma, fma)
+
+# define __fma __fma_generic
+#endif
+
+#include <sysdeps/ieee754/dbl-64/s_fma.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S
new file mode 100644
index 0000000000..1a934f614c
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S
@@ -0,0 +1,28 @@
+/* fmaf function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmaf_vis3)
+ movwtos %o0, %f1
+ movwtos %o1, %f3
+ movwtos %o2, %f5
+ retl
+ fmadds %f1, %f3, %f5, %f0
+END (__fmaf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c
new file mode 100644
index 0000000000..7a273a3b13
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c
@@ -0,0 +1,14 @@
+#ifdef HAVE_AS_VIS3_SUPPORT
+# include <sparc-ifunc.h>
+# include <math.h>
+
+extern float __fmaf_vis3 (float, float, float);
+extern float __fmaf_generic (float, float, float);
+
+sparc_libm_ifunc(__fmaf, hwcap & HWCAP_SPARC_FMAF ? __fmaf_vis3 : __fmaf_generic);
+weak_alias (__fmaf, fmaf)
+
+# define __fmaf __fmaf_generic
+#endif
+
+#include <sysdeps/ieee754/dbl-64/s_fmaf.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax-vis3.S
new file mode 100644
index 0000000000..9fdee2c4c9
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax-vis3.S
@@ -0,0 +1,30 @@
+/* fmax function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmax_vis3)
+ movwtos %o0, %f0
+ movwtos %o1, %f1
+ movwtos %o2, %f2
+ movwtos %o3, %f3
+ flcmpd %fcc1, %f0, %f2
+ retl
+ fmovdlg %fcc1, %f2, %f0
+END (__fmax_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S
new file mode 100644
index 0000000000..d5e59d8d1e
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fmax)
+
+weak_alias (__fmax, fmax)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fmax __fmax_generic
+
+#include "../s_fmax.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf-vis3.S
new file mode 100644
index 0000000000..731a04aefc
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf-vis3.S
@@ -0,0 +1,28 @@
+/* fmaxf function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmaxf_vis3)
+ movwtos %o0, %f0
+ movwtos %o1, %f1
+ flcmps %fcc1, %f0, %f1
+ retl
+ fmovslg %fcc1, %f1, %f0
+END (__fmaxf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S
new file mode 100644
index 0000000000..daa91579c4
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fmaxf)
+
+weak_alias (__fmaxf, fmaxf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fmaxf __fmaxf_generic
+
+#include "../s_fmaxf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin-vis3.S
new file mode 100644
index 0000000000..54c32bd5b7
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin-vis3.S
@@ -0,0 +1,30 @@
+/* fmin function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmin_vis3)
+ movwtos %o0, %f0
+ movwtos %o1, %f1
+ movwtos %o2, %f2
+ movwtos %o3, %f3
+ flcmpd %fcc1, %f0, %f2
+ retl
+ fmovdge %fcc1, %f2, %f0
+END (__fmin_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S
new file mode 100644
index 0000000000..b2aec1bbc0
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fmin)
+
+weak_alias (__fmin, fmin)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fmin __fmin_generic
+
+#include "../s_fmin.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf-vis3.S
new file mode 100644
index 0000000000..a13f33238f
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf-vis3.S
@@ -0,0 +1,28 @@
+/* fminf function, sparc32 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fminf_vis3)
+ movwtos %o0, %f0
+ movwtos %o1, %f1
+ flcmps %fcc1, %f0, %f1
+ retl
+ fmovsge %fcc1, %f1, %f0
+END (__fminf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S
new file mode 100644
index 0000000000..c4690e1df9
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fminf)
+
+weak_alias (__fminf, fminf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fminf __fminf_generic
+
+#include "../s_fminf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S
new file mode 100644
index 0000000000..8a90722b54
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S
@@ -0,0 +1,58 @@
+/* llrint(), sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__llrint_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+
+ or %o0, %o1, %o0
+ fzero ZERO
+
+ movxtod %o0, %f0
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ for %f0, SIGN_BIT, %f0
+ fdtox %f0, %f4
+ movstouw %f4, %o0
+ retl
+ movstouw %f5, %o1
+END (__llrint_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S
new file mode 100644
index 0000000000..a904aeca2a
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S
@@ -0,0 +1,17 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(llrint)
+
+weak_alias (__llrint, llrint)
+
+strong_alias (__llrint, __lllrint)
+weak_alias (__lllrint, lllrint)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef strong_alias
+# define strong_alias(a, b)
+
+#define __llrint __llrint_generic
+
+#include "../s_llrint.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S
new file mode 100644
index 0000000000..8590af2bb4
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S
@@ -0,0 +1,54 @@
+/* llrintf(), sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__llrintf_vis3)
+ movwtos %o0, %f1
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ movwtos %o2, %f16
+ fabss %f1, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ fors %f0, SIGN_BIT, %f0
+ fstox %f0, %f4
+ movstouw %f4, %o0
+ retl
+ movstouw %f5, %o1
+END (__llrintf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S
new file mode 100644
index 0000000000..8af5244e7e
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S
@@ -0,0 +1,17 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(llrintf)
+
+weak_alias (__llrintf, llrintf)
+
+strong_alias (__llrintf, __lllrintf)
+weak_alias (__lllrintf, lllrintf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef strong_alias
+# define strong_alias(a, b)
+
+#define __llrintf __llrintf_generic
+
+#include "../s_llrintf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S
new file mode 100644
index 0000000000..6c4a3e00dd
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S
@@ -0,0 +1,55 @@
+/* Round float to int floating-point values, sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rint_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+
+ or %o0, %o1, %o0
+ fzero ZERO
+
+ movxtod %o0, %f0
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__rint_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S
new file mode 100644
index 0000000000..cc980eb8c7
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(rint)
+
+weak_alias (__rint, rint)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __rint __rint_generic
+
+#include "../s_rint.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S
new file mode 100644
index 0000000000..ec0bb37b13
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S
@@ -0,0 +1,51 @@
+/* Round float to int floating-point values, sparc32 v9 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rintf_vis3)
+ movwtos %o0, %f1
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ movwtos %o2, %f16
+ fabss %f1, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__rintf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S
new file mode 100644
index 0000000000..38fd936086
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(rintf)
+
+weak_alias (__rintf, rintf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __rintf __rintf_generic
+
+#include "../s_rintf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt-vis3.S
new file mode 100644
index 0000000000..3880da0d8e
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt-vis3.S
@@ -0,0 +1,49 @@
+/* sqrt function. sparc32 v9 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrt_vis3)
+ movwtos %o0, %f0
+ fzero %f8
+ movwtos %o1, %f1
+ fcmpd %f0, %f8
+ fbl 1f
+ nop
+8: retl
+ fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be 8b
+ mov %o0, %o2
+ mov %o1, %o3
+ mov 26, %o4
+ mov %o7, %g1
+ call __kernel_standard
+ mov %g1, %o7
+END (__sqrt_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt.S
new file mode 100644
index 0000000000..3b070721d2
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(sqrt)
+
+weak_alias (__sqrt, sqrt)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __sqrt __sqrt_generic
+
+#include "../w_sqrt.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf-vis3.S
new file mode 100644
index 0000000000..2d4270f9cd
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf-vis3.S
@@ -0,0 +1,47 @@
+/* sqrtf function. sparc32 v9 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrtf_vis3)
+ movwtos %o0, %f0
+ fzeros %f8
+ fcmps %f0, %f8
+ fbl 1f
+ nop
+8: retl
+ fsqrts %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be 8b
+ mov %o0, %o1
+ mov 126, %o2
+ mov %o7, %g1
+ call __kernel_standard_f
+ mov %g1, %o7
+END (__sqrtf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf.S
new file mode 100644
index 0000000000..777a04058c
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(sqrtf)
+
+weak_alias (__sqrtf, sqrtf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __sqrtf __sqrtf_generic
+
+#include "../w_sqrtf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S
new file mode 100644
index 0000000000..1d940e3ac7
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_ceil.S
@@ -0,0 +1,87 @@
+/* ceil function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceil)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+ sethi %hi(ONE_DOT_ZERO), %o3
+ or %o0, %o1, %o0
+ stx %o0, [%sp + 72]
+ sllx %o2, 32, %o2
+ fzero ZERO
+ sllx %o3, 32, %o3
+
+ ldd [%sp + 72], %f0
+ fnegd ZERO, SIGN_BIT
+
+ stx %o2, [%sp + 72]
+ fabsd %f0, %f14
+
+ ldd [%sp + 72], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ stx %o3, [%sp + 72]
+
+ ldd [%sp + 72], %f20
+ fmovduge %fcc2, ZERO, %f20
+ faddd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__ceil)
+weak_alias (__ceil, ceil)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S
new file mode 100644
index 0000000000..1407423fef
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_ceilf.S
@@ -0,0 +1,83 @@
+/* Float ceil function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceilf)
+ st %o0, [%sp + 68]
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ ld [%sp + 68], %f0
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + 68]
+ fabss %f0, %f14
+
+ ld [%sp + 68], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f0, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f0, %f16, %f1
+ fsubs %f1, %f16, %f1
+ fcmps %fcc2, %f1, %f0
+ st %o3, [%sp + 68]
+
+ ld [%sp + 68], %f9
+ fmovsuge %fcc2, ZERO, %f9
+ fadds %f1, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__ceilf)
+weak_alias (__ceilf, ceilf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_floor.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_floor.S
new file mode 100644
index 0000000000..bd94c7fd09
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_floor.S
@@ -0,0 +1,87 @@
+/* floor function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floor)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+ sethi %hi(ONE_DOT_ZERO), %o3
+ or %o0, %o1, %o0
+ stx %o0, [%sp + 72]
+ sllx %o2, 32, %o2
+ fzero ZERO
+ sllx %o3, 32, %o3
+
+ ldd [%sp + 72], %f0
+ fnegd ZERO, SIGN_BIT
+
+ stx %o2, [%sp + 72]
+ fabsd %f0, %f14
+
+ ldd [%sp + 72], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ stx %o3, [%sp + 72]
+
+ ldd [%sp + 72], %f20
+ fmovdule %fcc2, ZERO, %f20
+ fsubd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__floor)
+weak_alias (__floor, floor)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_floorf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_floorf.S
new file mode 100644
index 0000000000..864644f4cf
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_floorf.S
@@ -0,0 +1,83 @@
+/* Float floor function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floorf)
+ st %o0, [%sp + 68]
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ ld [%sp + 68], %f0
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + 68]
+ fabss %f0, %f14
+
+ ld [%sp + 68], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f0, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f0, %f16, %f1
+ fsubs %f1, %f16, %f1
+ fcmps %fcc2, %f1, %f0
+ st %o3, [%sp + 68]
+
+ ld [%sp + 68], %f9
+ fmovsule %fcc2, ZERO, %f9
+ fsubs %f1, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__floorf)
+weak_alias (__floorf, floorf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmax.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmax.S
new file mode 100644
index 0000000000..351eaaca69
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmax.S
@@ -0,0 +1,40 @@
+/* fmax function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fmax)
+ std %o0, [%sp + 72]
+ std %o2, [%sp + 80]
+ ldd [%sp + 72], %f0
+ ldd [%sp + 80], %f2
+ fcmpd %fcc1, %f2, %f2
+ fzero SIGN_BIT
+ fmovdu %fcc1, %f0, %f2
+ fnegd SIGN_BIT, SIGN_BIT
+ fcmpd %fcc2, %f0, %f2
+ fmovdul %fcc2, %f2, %f0
+ fand %f0, %f2, %f4
+ fandnot2 SIGN_BIT, %f4, %f4
+ retl
+ fandnot2 %f0, %f4, %f0
+END (__fmax)
+weak_alias (__fmax, fmax)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmaxf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmaxf.S
new file mode 100644
index 0000000000..3018210566
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmaxf.S
@@ -0,0 +1,40 @@
+/* fmaxf function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fmaxf)
+ st %o0, [%sp + 72]
+ st %o1, [%sp + 76]
+ ld [%sp + 72], %f1
+ ld [%sp + 76], %f3
+ fcmps %fcc1, %f3, %f3
+ fzeros SIGN_BIT
+ fmovsu %fcc1, %f1, %f3
+ fnegs SIGN_BIT, SIGN_BIT
+ fcmps %fcc2, %f1, %f3
+ fmovsul %fcc2, %f3, %f1
+ fands %f1, %f3, %f4
+ fandnot2s SIGN_BIT, %f4, %f4
+ retl
+ fandnot2s %f1, %f4, %f0
+END (__fmaxf)
+weak_alias (__fmaxf, fmaxf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmin.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmin.S
new file mode 100644
index 0000000000..059f15a612
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fmin.S
@@ -0,0 +1,40 @@
+/* fmin function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fmin)
+ std %o0, [%sp + 72]
+ std %o2, [%sp + 80]
+ ldd [%sp + 72], %f0
+ ldd [%sp + 80], %f2
+ fcmpd %fcc1, %f2, %f2
+ fzero SIGN_BIT
+ fmovdu %fcc1, %f0, %f2
+ fnegd SIGN_BIT, SIGN_BIT
+ fcmpd %fcc2, %f0, %f2
+ fmovdug %fcc2, %f2, %f0
+ for %f0, %f2, %f4
+ fand %f4, SIGN_BIT, %f4
+ retl
+ for %f0, %f4, %f0
+END (__fmin)
+weak_alias (__fmin, fmin)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fminf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fminf.S
new file mode 100644
index 0000000000..168020bb60
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fminf.S
@@ -0,0 +1,40 @@
+/* fminf function, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fminf)
+ st %o0, [%sp + 72]
+ st %o1, [%sp + 76]
+ ld [%sp + 72], %f1
+ ld [%sp + 76], %f3
+ fcmps %fcc1, %f3, %f3
+ fzeros SIGN_BIT
+ fmovsu %fcc1, %f1, %f3
+ fnegs SIGN_BIT, SIGN_BIT
+ fcmps %fcc2, %f1, %f3
+ fmovsug %fcc2, %f3, %f1
+ fors %f1, %f3, %f4
+ fands %f4, SIGN_BIT, %f4
+ retl
+ fors %f1, %f4, %f0
+END (__fminf)
+weak_alias (__fminf, fminf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S
new file mode 100644
index 0000000000..3122528a06
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S
@@ -0,0 +1,32 @@
+/* isnan(). sparc32 v9 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isnan)
+ sethi %hi(0x7ff00000), %g1
+ sllx %o0, 33, %o0
+ sllx %g1, 32, %g1
+ srlx %o0, 1, %o0
+ or %o0, %o1, %o0
+ sub %g1, %o0, %o0
+ retl
+ srlx %o0, 63, %o0
+END (__isnan)
+hidden_def (__isnan)
+weak_alias (__isnan, isnan)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S
new file mode 100644
index 0000000000..8ec9b4dcb4
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S
@@ -0,0 +1,67 @@
+/* llrint(), sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__llrint)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+
+ or %o0, %o1, %o0
+ fzero ZERO
+
+ stx %o0, [%sp + 72]
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ ldd [%sp + 72], %f0
+
+ stx %o2, [%sp + 72]
+ fabsd %f0, %f14
+
+ ldd [%sp + 72], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ for %f0, SIGN_BIT, %f0
+ fdtox %f0, %f4
+ std %f4, [%sp + 72]
+ retl
+ ldd [%sp + 72], %o0
+END (__llrint)
+weak_alias (__llrint, llrint)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S
new file mode 100644
index 0000000000..73e9d64875
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S
@@ -0,0 +1,62 @@
+/* llrintf(), sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__llrintf)
+ st %o0, [%sp + 68]
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ ld [%sp + 68], %f1
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + 68]
+ fabss %f1, %f14
+
+ ld [%sp + 68], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ fors %f0, SIGN_BIT, %f0
+ fstox %f0, %f4
+ std %f4, [%sp + 72]
+ retl
+ ldd [%sp + 72], %o0
+END (__llrintf)
+weak_alias (__llrintf, llrintf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrint.S
new file mode 100644
index 0000000000..062faba170
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrint.S
@@ -0,0 +1,67 @@
+/* lrint(), sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__lrint)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+
+ or %o0, %o1, %o0
+ fzero ZERO
+
+ stx %o0, [%sp + 72]
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ ldd [%sp + 72], %f0
+
+ stx %o2, [%sp + 72]
+ fabsd %f0, %f14
+
+ ldd [%sp + 72], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ for %f0, SIGN_BIT, %f0
+ fdtoi %f0, %f3
+ st %f3, [%sp + 72]
+ retl
+ ld [%sp + 72], %o0
+END (__lrint)
+weak_alias (__lrint, lrint)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S
new file mode 100644
index 0000000000..c546e67c27
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S
@@ -0,0 +1,62 @@
+/* lrintf(), sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__lrintf)
+ st %o0, [%sp + 68]
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ ld [%sp + 68], %f1
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + 68]
+ fabss %f1, %f14
+
+ ld [%sp + 68], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ fors %f0, SIGN_BIT, %f0
+ fstoi %f0, %f3
+ st %f3, [%sp + 68]
+ retl
+ ld [%sp + 68], %o0
+END (__lrintf)
+weak_alias (__lrintf, lrintf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S
new file mode 100644
index 0000000000..9f9fddd462
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S
@@ -0,0 +1,64 @@
+/* Round float to int floating-point values, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rint)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o0, 32, %o0
+
+ or %o0, %o1, %o0
+ fzero ZERO
+
+ stx %o0, [%sp + 72]
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ ldd [%sp + 72], %f0
+
+ stx %o2, [%sp + 72]
+ fabsd %f0, %f14
+
+ ldd [%sp + 72], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__rint)
+weak_alias (__rint, rint)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S
new file mode 100644
index 0000000000..c053c55b8d
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S
@@ -0,0 +1,59 @@
+/* Round float to int floating-point values, sparc32 v9 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rintf)
+ st %o0, [%sp + 68]
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ ld [%sp + 68], %f1
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + 68]
+ fabss %f1, %f14
+
+ ld [%sp + 68], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__rintf)
+weak_alias (__rintf, rintf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/unix/sysv/linux/multiarch/Implies b/sysdeps/sparc/sparc32/sparcv9/fpu/unix/sysv/linux/multiarch/Implies
new file mode 100644
index 0000000000..a380d8a739
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/unix/sysv/linux/multiarch/Implies
@@ -0,0 +1,4 @@
+# We must list this here to move it ahead of the ldbl-opt code.
+sparc/sparc32/sparcv9/fpu/multiarch
+sparc/sparc32/sparcv9/fpu
+sparc/sparc32/fpu
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S
new file mode 100644
index 0000000000..ce7491e438
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S
@@ -0,0 +1,51 @@
+/* sqrt function. sparc32 v9 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrt)
+ std %o0, [%sp + 80]
+ fzero %f8
+ ldd [%sp + 80], %f0
+ fcmpd %f0, %f8
+ fbl 1f
+ nop
+8: retl
+ fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be 8b
+ mov %o0, %o2
+ mov %o1, %o3
+ mov 26, %o4
+ mov %o7, %g1
+ call __kernel_standard
+ mov %g1, %o7
+END (__sqrt)
+
+weak_alias (__sqrt, sqrt)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S
new file mode 100644
index 0000000000..0e00b66964
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S
@@ -0,0 +1,50 @@
+/* sqrtf function. sparc32 v9 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrtf)
+ st %o0, [%sp + 72]
+ fzeros %f8
+ ld [%sp + 72], %f0
+ fcmps %f0, %f8
+ fbl 1f
+ nop
+8: retl
+ fsqrts %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be 8b
+ mov %o0, %o1
+ mov 126, %o2
+ mov %o7, %g1
+ call __kernel_standard_f
+ mov %g1, %o7
+END (__sqrtf)
+
+weak_alias (__sqrtf, sqrtf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/hp-timing.h b/sysdeps/sparc/sparc32/sparcv9/hp-timing.h
index b90bb84152..d0f896da5c 100644
--- a/sysdeps/sparc/sparc32/sparcv9/hp-timing.h
+++ b/sysdeps/sparc/sparc32/sparcv9/hp-timing.h
@@ -22,7 +22,7 @@
#include <string.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#define HP_TIMING_AVAIL (1)
#define HP_TIMING_INLINE (1)
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c
new file mode 100644
index 0000000000..304ad4ef18
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c
@@ -0,0 +1 @@
+#include <sparc64/multiarch/rtld-memcpy.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c
new file mode 100644
index 0000000000..f24ae880a9
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c
@@ -0,0 +1 @@
+#include <sparc64/multiarch/rtld-memset.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c b/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c
new file mode 100644
index 0000000000..6f8386bc76
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c
@@ -0,0 +1 @@
+#include <sparc64/rtld-memcpy.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/rtld-memset.c b/sysdeps/sparc/sparc32/sparcv9/rtld-memset.c
new file mode 100644
index 0000000000..49b29f5733
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/rtld-memset.c
@@ -0,0 +1 @@
+#include <sparc64/rtld-memset.c>
diff --git a/sysdeps/sparc/sparc32/elf/start.S b/sysdeps/sparc/sparc32/start.S
index 0426714c5e..1efa8e8393 100644
--- a/sysdeps/sparc/sparc32/elf/start.S
+++ b/sysdeps/sparc/sparc32/start.S
@@ -66,7 +66,6 @@ _start:
or %o3, %lo(__libc_csu_init), %o3
or %o4, %lo(__libc_csu_fini), %o4
#else
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(main), %o0
sethi %gdop_hix22(__libc_csu_init), %o3
sethi %gdop_hix22(__libc_csu_fini), %o4
@@ -76,17 +75,6 @@ _start:
ld [%l7 + %o0], %o0, %gdop(main)
ld [%l7 + %o3], %o3, %gdop(__libc_csu_init)
ld [%l7 + %o4], %o4, %gdop(__libc_csu_fini)
-#else
- sethi %hi(main), %o0
- sethi %hi(__libc_csu_init), %o3
- sethi %hi(__libc_csu_fini), %o4
- or %o0, %lo(main), %o0
- or %o3, %lo(__libc_csu_init), %o3
- or %o4, %lo(__libc_csu_fini), %o4
- ld [%l7 + %o0], %o0
- ld [%l7 + %o3], %o3
- ld [%l7 + %o4], %o4
-#endif
#endif
/* When starting a binary via the dynamic linker, %g1 contains the
diff --git a/sysdeps/sparc/sparc64/Makefile b/sysdeps/sparc/sparc64/Makefile
index fb8b011d53..2b7b83035a 100644
--- a/sysdeps/sparc/sparc64/Makefile
+++ b/sysdeps/sparc/sparc64/Makefile
@@ -6,3 +6,12 @@ endif
ifeq ($(subdir),string)
sysdep_routines += align-cpy
endif
+
+ifeq ($(have-as-vis3),yes)
+ASFLAGS-.o += -Wa,-Av9d
+ASFLAGS-.os += -Wa,-Av9d
+ASFLAGS-.op += -Wa,-Av9d
+ASFLAGS-.og += -Wa,-Av9d
+ASFLAGS-.ob += -Wa,-Av9d
+ASFLAGS-.oS += -Wa,-Av9d
+endif
diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h
index 6bab5ce310..87655d28ad 100644
--- a/sysdeps/sparc/sparc64/dl-machine.h
+++ b/sysdeps/sparc/sparc64/dl-machine.h
@@ -264,17 +264,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
The C function `_dl_start' is the real entry point;
its return value is the user program's entry point. */
-#ifdef HAVE_BINUTILS_GOTDATA
#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \
"sethi %gdop_hix22(" #symbol "), " #reg "\n\t" \
"xor " #reg ", %gdop_lox10(" #symbol "), " #reg "\n\t" \
"ldx [" #pic_reg " + " #reg "], " #reg ", %gdop(" #symbol ")\n"
-#else
-#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \
- "sethi %hi(" #symbol "), " #reg "\n\t" \
- "or " #reg ", %lo(" #symbol "), " #reg "\n\t" \
- "ldx [" #pic_reg " + " #reg "], " #reg "\n"
-#endif
#define __S1(x) #x
#define __S(x) __S1(x)
diff --git a/sysdeps/sparc/sparc64/dl-trampoline.S b/sysdeps/sparc/sparc64/dl-trampoline.S
index 7caece3430..7d74fd0af8 100644
--- a/sysdeps/sparc/sparc64/dl-trampoline.S
+++ b/sysdeps/sparc/sparc64/dl-trampoline.S
@@ -1,5 +1,5 @@
/* PLT trampolines. Sparc 64-bit version.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2012 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
@@ -158,8 +158,11 @@ _dl_profile_save_regs:
_dl_profile_invoke:
cfi_startproc
- sub %sp, %l0, %sp
-1:
+ add %l0, 7, %l0
+ andn %l0, 7, %l0
+ add %l0, (8 * 8), %g1
+
+ sub %sp, %g1, %sp
srlx %l0, 3, %l7
mov %o0, %l1
mov %i0, %o0
@@ -169,7 +172,8 @@ _dl_profile_invoke:
mov %i4, %o4
mov %i5, %o5
add %fp, STACK_BIAS, %l2
- add %sp, STACK_BIAS, %l3
+ brz %l0, 2f
+ add %sp, STACK_BIAS, %l3
1: ldx [%l2], %l4
add %l2, 0x8, %l2
subcc %l7, 1, %l7
@@ -177,7 +181,7 @@ _dl_profile_invoke:
bne,pt %xcc, 1b
add %l3, 0x8, %l3
- jmpl %l1, %o7
+2: jmpl %l1, %o7
nop
stx %o0, [%sp + STACK_BIAS + (16 * 8)]
@@ -191,15 +195,18 @@ _dl_profile_invoke:
mov %l5, %o0
mov %l6, %o1
- add %sp, %l0, %o2
- add %sp, STACK_BIAS + (16 * 8), %o3
+ add %sp, STACK_BIAS + (24 * 8), %o2
call _dl_call_pltexit
- add %o2, STACK_BIAS, %o2
+ add %sp, STACK_BIAS + (16 * 8), %o3
ldx [%sp + STACK_BIAS + (16 * 8)], %i0
ldx [%sp + STACK_BIAS + (17 * 8)], %i1
ldx [%sp + STACK_BIAS + (18 * 8)], %i2
ldx [%sp + STACK_BIAS + (19 * 8)], %i3
+ ldd [%sp + STACK_BIAS + (20 * 8)], %f0
+ ldd [%sp + STACK_BIAS + (21 * 8)], %f2
+ ldd [%sp + STACK_BIAS + (22 * 8)], %f4
+ ldd [%sp + STACK_BIAS + (23 * 8)], %f8
jmpl %i7 + 8, %g0
restore
@@ -219,10 +226,7 @@ _dl_profile_invoke:
_dl_runtime_profile_0:
cfi_startproc
- brz,a,pn %fp, 1f
- mov 192, %g5
- sub %fp, %sp, %g5
-1: save %sp, -336, %sp
+ save %sp, -336, %sp
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)
@@ -250,7 +254,6 @@ _dl_runtime_profile_0:
mov %i7, %o2
sllx %l0, 3, %o1
- mov %g5, %l0
mov %o0, %l5
mov %o1, %l6
@@ -261,8 +264,8 @@ _dl_runtime_profile_0:
call _dl_profile_fixup
add %sp, (STACK_BIAS + (32 * 8)), %o4
- ldx [%sp + STACK_BIAS + (32 * 8)], %o1
- brgez,pt %o1, 1f
+ ldx [%sp + STACK_BIAS + (32 * 8)], %l0
+ brlz,pt %l0, 1f
nop
call _dl_profile_invoke
@@ -285,10 +288,7 @@ _dl_runtime_profile_0:
_dl_runtime_profile_1:
cfi_startproc
- brz,a,pn %fp, 1f
- mov 192, %g5
- sub %fp, %sp, %g5
-1: save %sp, -336, %sp
+ save %sp, -336, %sp
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)
@@ -300,7 +300,6 @@ _dl_runtime_profile_1:
mov %i7, %o2
add %o1, %o3, %o1
- mov %g5, %l0
mov %o0, %l5
mov %o1, %l6
@@ -311,8 +310,8 @@ _dl_runtime_profile_1:
call _dl_profile_fixup
add %sp, (STACK_BIAS + (32 * 8)), %o4
- ldx [%sp + STACK_BIAS + (32 * 8)], %o1
- brgez,pt %o1, 1f
+ ldx [%sp + STACK_BIAS + (32 * 8)], %l0
+ brlz,pt %l0, 1f
nop
call _dl_profile_invoke
diff --git a/sysdeps/sparc/sparc64/elf/Makefile b/sysdeps/sparc/sparc64/elf/Makefile
deleted file mode 100644
index a995e6cdf1..0000000000
--- a/sysdeps/sparc/sparc64/elf/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sparc/ELF specific definitions.
-
-# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS-.os = -fPIC
diff --git a/sysdeps/sparc/sparc64/fpu/libm-test-ulps b/sysdeps/sparc/sparc64/fpu/libm-test-ulps
deleted file mode 100644
index 91e6760d52..0000000000
--- a/sysdeps/sparc/sparc64/fpu/libm-test-ulps
+++ /dev/null
@@ -1,1376 +0,0 @@
-# Begin of automatic generation
-
-# atan2
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
-ildouble: 1
-ldouble: 1
-Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
-ildouble: 1
-ldouble: 1
-Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# atanh
-Test "atanh (0.75) == 0.972955074527656652552676371721589865":
-float: 1
-ifloat: 1
-
-# cacos
-Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
-ildouble: 1
-ldouble: 1
-
-# cacosh
-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-ildouble: 5
-ldouble: 5
-Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 1
-ldouble: 1
-
-# casin
-Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
-ildouble: 1
-ldouble: 1
-
-# casinh
-Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-ildouble: 4
-ldouble: 4
-Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
-double: 3
-float: 6
-idouble: 3
-ifloat: 6
-ildouble: 2
-ldouble: 2
-Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# catan
-Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-float: 3
-ifloat: 3
-Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
-float: 4
-ifloat: 4
-Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
-ildouble: 1
-ldouble: 1
-
-# catanh
-Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-double: 4
-idouble: 4
-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-float: 4
-ifloat: 4
-Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-
-# cbrt
-Test "cbrt (-0.001) == -0.1":
-ildouble: 1
-ldouble: 1
-Test "cbrt (-27.0) == -3.0":
-double: 1
-idouble: 1
-Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
-double: 1
-idouble: 1
-Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
-double: 1
-idouble: 1
-
-# ccos
-Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
-float: 1
-ifloat: 1
-
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
-float: 1
-ifloat: 1
-
-# cexp
-Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
-ildouble: 1
-ldouble: 1
-
-# clog
-Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
-float: 3
-ifloat: 3
-Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# clog10
-Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
-double: 1
-float: 5
-idouble: 1
-ifloat: 5
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# cos
-Test "cos (M_PI_6l * 2.0) == 0.5":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "cos (M_PI_6l * 4.0) == -0.5":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "cos (pi/2) == 0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
-float: 1
-ifloat: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-ildouble: 4
-ldouble: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
-ildouble: 1
-ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 10
-ldouble: 10
-Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
-ildouble: 2
-ldouble: 2
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-ildouble: 3
-ldouble: 3
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# csin
-Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
-ildouble: 1
-ldouble: 1
-Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
-ildouble: 1
-ldouble: 1
-
-# csinh
-Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
-double: 1
-idouble: 1
-Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
-float: 1
-ifloat: 1
-
-# csqrt
-Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i":
-ildouble: 1
-ldouble: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-# ctanh
-Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
-float: 1
-ifloat: 1
-Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
-double: 1
-idouble: 1
-
-# erf
-Test "erf (1.25) == 0.922900128256458230136523481197281140":
-double: 1
-idouble: 1
-
-# erfc
-Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
-double: 1
-idouble: 1
-Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318":
-ildouble: 1
-ldouble: 1
-Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
-double: 1
-idouble: 1
-
-# exp10
-Test "exp10 (-1) == 0.1":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "exp10 (3) == 1000":
-double: 6
-float: 2
-idouble: 6
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# exp2
-Test "exp2 (10) == 1024":
-ildouble: 2
-ldouble: 2
-
-# expm1
-Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
-double: 1
-idouble: 1
-Test "expm1 (1) == M_El - 1.0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# gamma
-Test "gamma (-0.5) == log(2*sqrt(pi))":
-ildouble: 1
-ldouble: 1
-
-# hypot
-Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-
-# j0
-Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "j0 (0.75) == 0.864242275166648623555731103820923211":
-float: 1
-ifloat: 1
-Test "j0 (10.0) == -0.245935764451348335197760862485328754":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "j0 (2.0) == 0.223890779141235668051827454649948626":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "j0 (8.0) == 0.171650807137553906090869407851972001":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# j1
-Test "j1 (-1.0) == -0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "j1 (0.75) == 0.349243602174862192523281016426251335":
-ildouble: 1
-ldouble: 1
-Test "j1 (1.0) == 0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "j1 (2.0) == 0.576724807756873387202448242269137087":
-double: 1
-idouble: 1
-Test "j1 (8.0) == 0.234636346853914624381276651590454612":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-
-# jn
-Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (1, -1.0) == -0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 1.0) == 0.440050585744933515959682203718914913":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
-double: 1
-idouble: 1
-Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
-ildouble: 1
-ldouble: 1
-Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
-ildouble: 1
-ldouble: 1
-Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 2
-ldouble: 2
-Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
-double: 3
-idouble: 3
-ildouble: 1
-ldouble: 1
-Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
-double: 3
-float: 5
-idouble: 3
-ifloat: 5
-ildouble: 3
-ldouble: 3
-Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 8
-ldouble: 8
-Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-# lgamma
-Test "lgamma (-0.5) == log(2*sqrt(pi))":
-ildouble: 1
-ldouble: 1
-Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# log10
-Test "log10 (0.75) == -0.124938736608299953132449886193870744":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "log10 (e) == log10(e)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# log1p
-Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
-float: 1
-ifloat: 1
-Test "log1p (M_El - 1.0) == 1":
-ildouble: 1
-ldouble: 1
-
-# log2
-Test "log2 (0.75) == -.415037499278843818546261056052183492":
-ildouble: 1
-ldouble: 1
-
-# sincos
-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
-float: 1
-ifloat: 1
-
-# sqrt
-Test "sqrt (2) == M_SQRT2l":
-ildouble: 1
-ldouble: 1
-
-# tan
-Test "tan (pi/4) == 1":
-double: 1
-idouble: 1
-
-# tanh
-Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
-ildouble: 1
-ldouble: 1
-Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
-ildouble: 1
-ldouble: 1
-Test "tanh (0.75) == 0.635148952387287319214434357312496495":
-ildouble: 1
-ldouble: 1
-Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
-ildouble: 1
-ldouble: 1
-
-# tgamma
-Test "tgamma (-0.5) == -2 sqrt (pi)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (0.5) == sqrt (pi)":
-float: 1
-ifloat: 1
-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (4) == 6":
-ildouble: 1
-ldouble: 1
-
-# y0
-Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5) == 0.382448923797758843955068554978089862":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
-float: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-Test "y0 (8.0) == 0.223521489387566220527323400498620359":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-# y1
-Test "y1 (0.125) == -5.19993611253477499595928744876579921":
-double: 1
-idouble: 1
-Test "y1 (0.75) == -1.03759455076928541973767132140642198":
-ildouble: 1
-ldouble: 1
-Test "y1 (1.5) == -0.412308626973911295952829820633445323":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "y1 (10.0) == 0.249015424206953883923283474663222803":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "y1 (2.0) == -0.107032431540937546888370772277476637":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "y1 (8.0) == -0.158060461731247494255555266187483550":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-# yn
-Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
-float: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
-double: 1
-idouble: 1
-Test "yn (1, 0.75) == -1.03759455076928541973767132140642198":
-ildouble: 1
-ldouble: 1
-Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
-double: 2
-idouble: 2
-ildouble: 2
-ldouble: 2
-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
-double: 1
-idouble: 1
-Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
-double: 1
-idouble: 1
-
-# Maximal error of functions:
-Function: "atan2":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-
-Function: "atanh":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "cacos":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cacosh":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "casin":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casinh":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "casinh":
-double: 3
-float: 6
-idouble: 3
-ifloat: 6
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "catan":
-float: 4
-ifloat: 4
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "catanh":
-double: 4
-idouble: 4
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catanh":
-float: 6
-ifloat: 6
-ildouble: 1
-ldouble: 1
-
-Function: "cbrt":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccos":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccosh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cexp":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "cexp":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "clog":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "clog":
-float: 3
-ifloat: 3
-
-Function: Real part of "clog10":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "clog10":
-double: 1
-float: 5
-idouble: 1
-ifloat: 5
-ildouble: 1
-ldouble: 1
-
-Function: "cos":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cpow":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "cpow":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csin":
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csin":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csinh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csqrt":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csqrt":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ctan":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ctanh":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ctanh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erf":
-double: 1
-idouble: 1
-
-Function: "erfc":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp10":
-double: 6
-float: 2
-idouble: 6
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "exp2":
-ildouble: 2
-ldouble: 2
-
-Function: "expm1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "gamma":
-ildouble: 1
-ldouble: 1
-
-Function: "hypot":
-float: 1
-ifloat: 1
-
-Function: "j0":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "j1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "jn":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-ildouble: 8
-ldouble: 8
-
-Function: "lgamma":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log10":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log1p":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log2":
-ildouble: 1
-ldouble: 1
-
-Function: "sincos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sqrt":
-ildouble: 1
-ldouble: 1
-
-Function: "tan":
-double: 1
-idouble: 1
-
-Function: "tanh":
-ildouble: 1
-ldouble: 1
-
-Function: "tgamma":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "y0":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "y1":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "yn":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-# end of automatic generation
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile b/sysdeps/sparc/sparc64/fpu/multiarch/Makefile
new file mode 100644
index 0000000000..83458484a7
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/Makefile
@@ -0,0 +1,15 @@
+ifeq ($(subdir),math)
+ifeq ($(have-as-vis3),yes)
+libm-sysdep_routines += m_signbitf-vis3 m_signbit-vis3 s_ceilf-vis3 \
+ s_ceil-vis3 m_finitef-vis3 m_finite-vis3 \
+ s_floorf-vis3 s_floor-vis3 m_isinff-vis3 \
+ m_isinf-vis3 m_isnanf-vis3 m_isnan-vis3 \
+ s_lrintf-vis3 s_lrint-vis3 s_rintf-vis3 \
+ s_rint-vis3 s_fminf-vis3 s_fmin-vis3 \
+ s_fmaxf-vis3 s_fmax-vis3 s_fmaf-vis3 \
+ s_fma-vis3
+sysdep_routines += s_signbitf-vis3 s_signbit-vis3 s_finitef-vis3 \
+ s_finite-vis3 s_isinff-vis3 s_isinf-vis3 \
+ s_isnanf-vis3 s_isnan-vis3
+endif
+endif
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.S
new file mode 100644
index 0000000000..ebf9d80b89
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.S
@@ -0,0 +1,75 @@
+/* ceil function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceil_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzero ZERO
+
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ sllx %o3, 32, %o3
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ movxtod %o3, %f20
+
+ fmovduge %fcc2, ZERO, %f20
+ faddd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__ceil_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.S
new file mode 100644
index 0000000000..fa4c7c353f
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(ceil)
+
+weak_alias (__ceil, ceil)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __ceil __ceil_generic
+
+#include "../s_ceil.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.S
new file mode 100644
index 0000000000..09d2d3dbe3
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.S
@@ -0,0 +1,73 @@
+/* Float ceil function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceilf_vis3)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ movwtos %o2, %f16
+ fabss %f1, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f5
+ fcmps %fcc2, %f5, %f1
+ movwtos %o3, %f9
+
+ fmovsuge %fcc2, ZERO, %f9
+ fadds %f5, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__ceilf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.S
new file mode 100644
index 0000000000..3047dd8faa
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(ceilf)
+
+weak_alias (__ceilf, ceilf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __ceilf __ceilf_generic
+
+#include "../s_ceilf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S
new file mode 100644
index 0000000000..6929b56ba2
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S
@@ -0,0 +1,28 @@
+/* finite(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__finite_vis3)
+ fabsd %f0, %f0
+ movstouw %f0, %o0
+ sethi %hi(0x7ff00000), %o2
+ sub %o0, %o2, %o0
+ retl
+ srl %o0, 31, %o0
+END (__finite_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S
new file mode 100644
index 0000000000..78406a62b1
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S
@@ -0,0 +1,15 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(finite)
+
+hidden_def (__finite)
+weak_alias (__finite, finite)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __finite __finite_generic
+
+#include "../s_finite.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S
new file mode 100644
index 0000000000..93420ff6a7
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S
@@ -0,0 +1,28 @@
+/* finitef(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__finitef_vis3)
+ fabss %f1, %f0
+ movstouw %f0, %o0
+ sethi %hi(0x7f800000), %o2
+ sub %o0, %o2, %o0
+ retl
+ srl %o0, 31, %o0
+END (__finitef_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S
new file mode 100644
index 0000000000..cafd41fd92
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S
@@ -0,0 +1,15 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(finitef)
+
+hidden_def (__finitef)
+weak_alias (__finitef, finitef)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __finitef __finitef_generic
+
+#include "../s_finitef.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.S
new file mode 100644
index 0000000000..86ed1ae92b
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.S
@@ -0,0 +1,75 @@
+/* floor function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floor_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzero ZERO
+
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ sllx %o3, 32, %o3
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ movxtod %o3, %f20
+
+ fmovdule %fcc2, ZERO, %f20
+ fsubd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__floor_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.S
new file mode 100644
index 0000000000..6ae9947a7a
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(floor)
+
+weak_alias (__floor, floor)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __floor __floor_generic
+
+#include "../s_floor.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.S
new file mode 100644
index 0000000000..b663b64753
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.S
@@ -0,0 +1,73 @@
+/* Float floor function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floorf_vis3)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ movwtos %o2, %f16
+ fabss %f1, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f5
+ fcmps %fcc2, %f5, %f1
+ movwtos %o3, %f9
+
+ fmovsule %fcc2, ZERO, %f9
+ fsubs %f5, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__floorf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.S
new file mode 100644
index 0000000000..31cda385b7
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(floorf)
+
+weak_alias (__floorf, floorf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __floorf __floorf_generic
+
+#include "../s_floorf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S
new file mode 100644
index 0000000000..8b57eb234f
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S
@@ -0,0 +1,25 @@
+/* fma function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fma_vis3)
+ retl
+ fmaddd %f0, %f2, %f4, %f0
+END (__fma_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c
new file mode 100644
index 0000000000..3f2f1622c8
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c
@@ -0,0 +1,14 @@
+#ifdef HAVE_AS_VIS3_SUPPORT
+# include <sparc-ifunc.h>
+# include <math.h>
+
+extern double __fma_vis3 (double, double, double);
+extern double __fma_generic (double, double, double);
+
+sparc_libm_ifunc(__fma, hwcap & HWCAP_SPARC_FMAF ? __fma_vis3 : __fma_generic);
+weak_alias (__fma, fma)
+
+# define __fma __fma_generic
+#endif
+
+#include <sysdeps/ieee754/dbl-64/s_fma.c>
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S
new file mode 100644
index 0000000000..e431e7170b
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S
@@ -0,0 +1,25 @@
+/* fmaf function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmaf_vis3)
+ retl
+ fmadds %f1, %f3, %f5, %f0
+END (__fmaf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c
new file mode 100644
index 0000000000..7a273a3b13
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c
@@ -0,0 +1,14 @@
+#ifdef HAVE_AS_VIS3_SUPPORT
+# include <sparc-ifunc.h>
+# include <math.h>
+
+extern float __fmaf_vis3 (float, float, float);
+extern float __fmaf_generic (float, float, float);
+
+sparc_libm_ifunc(__fmaf, hwcap & HWCAP_SPARC_FMAF ? __fmaf_vis3 : __fmaf_generic);
+weak_alias (__fmaf, fmaf)
+
+# define __fmaf __fmaf_generic
+#endif
+
+#include <sysdeps/ieee754/dbl-64/s_fmaf.c>
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmax-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmax-vis3.S
new file mode 100644
index 0000000000..777bb6eee9
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmax-vis3.S
@@ -0,0 +1,26 @@
+/* fmax function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmax_vis3)
+ flcmpd %fcc1, %f0, %f2
+ retl
+ fmovdlg %fcc1, %f2, %f0
+END (__fmax_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S
new file mode 100644
index 0000000000..d5e59d8d1e
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fmax)
+
+weak_alias (__fmax, fmax)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fmax __fmax_generic
+
+#include "../s_fmax.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf-vis3.S
new file mode 100644
index 0000000000..b3f2e85cd3
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf-vis3.S
@@ -0,0 +1,27 @@
+/* fmaxf function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmaxf_vis3)
+ flcmps %fcc1, %f1, %f3
+ fmovs %f1, %f0
+ retl
+ fmovslg %fcc1, %f3, %f0
+END (__fmaxf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S
new file mode 100644
index 0000000000..daa91579c4
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fmaxf)
+
+weak_alias (__fmaxf, fmaxf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fmaxf __fmaxf_generic
+
+#include "../s_fmaxf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmin-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmin-vis3.S
new file mode 100644
index 0000000000..edb5823b41
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmin-vis3.S
@@ -0,0 +1,26 @@
+/* fmin function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fmin_vis3)
+ flcmpd %fcc1, %f0, %f2
+ retl
+ fmovdge %fcc1, %f2, %f0
+END (__fmin_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S
new file mode 100644
index 0000000000..b2aec1bbc0
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fmin)
+
+weak_alias (__fmin, fmin)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fmin __fmin_generic
+
+#include "../s_fmin.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fminf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fminf-vis3.S
new file mode 100644
index 0000000000..81d5fb1781
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fminf-vis3.S
@@ -0,0 +1,27 @@
+/* fminf function, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__fminf_vis3)
+ flcmps %fcc1, %f1, %f3
+ fmovs %f1, %f0
+ retl
+ fmovsge %fcc1, %f3, %f0
+END (__fminf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S
new file mode 100644
index 0000000000..c4690e1df9
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(fminf)
+
+weak_alias (__fminf, fminf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __fminf __fminf_generic
+
+#include "../s_fminf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S
new file mode 100644
index 0000000000..7f7cd5ee69
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S
@@ -0,0 +1,31 @@
+/* isinf(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isinf_vis3)
+ movdtox %f0, %g1
+ sethi %hi(0x7ff00000), %o2
+ sllx %o2, 32, %o2
+ sllx %g1, 1, %o4
+ srlx %o4, 1, %o5
+ srax %g1, 62, %o0
+ xor %o5, %o2, %o3
+ retl
+ movrne %o3, %g0, %o0
+END (__isinf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S
new file mode 100644
index 0000000000..ed9b62640d
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S
@@ -0,0 +1,15 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(isinf)
+
+hidden_def (__isinf)
+weak_alias (__isinf, isinf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __isinf __isinf_generic
+
+#include "../s_isinf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S
new file mode 100644
index 0000000000..7d59d5db3f
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S
@@ -0,0 +1,30 @@
+/* isinff(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isinff_vis3)
+ movstouw %f1, %g1
+ sethi %hi(0x7f800000), %o2
+ sll %g1, 1, %o4
+ srl %o4, 1, %o5
+ sra %g1, 30, %o0
+ xor %o5, %o2, %o3
+ retl
+ movrne %o3, %g0, %o0
+END (__isinff_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S
new file mode 100644
index 0000000000..04517398f8
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S
@@ -0,0 +1,15 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(isinff)
+
+hidden_def (__isinff)
+weak_alias (__isinff, isinff)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __isinff __isinff_generic
+
+#include "../s_isinff.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S
new file mode 100644
index 0000000000..b3b1014443
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S
@@ -0,0 +1,30 @@
+/* isnan(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isnan_vis3)
+ movdtox %f0, %o0
+ sethi %hi(0x7ff00000), %g1
+ sllx %g1, 32, %g1
+ sllx %o0, 1, %o0
+ srlx %o0, 1, %o0
+ sub %g1, %o0, %o0
+ retl
+ srlx %o0, 63, %o0
+END (__isnan_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S
new file mode 100644
index 0000000000..40e985a5d4
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S
@@ -0,0 +1,15 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(isnan)
+
+hidden_def (__isnan)
+weak_alias (__isnan, isnan)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __isnan __isnan_generic
+
+#include "../s_isnan.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S
new file mode 100644
index 0000000000..cd60d3e563
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S
@@ -0,0 +1,29 @@
+/* isnanf(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isnanf_vis3)
+ movstouw %f1, %o0
+ sethi %hi(0x7f800000), %g1
+ sll %o0, 1, %o0
+ srl %o0, 1, %o0
+ sub %g1, %o0, %o0
+ retl
+ srl %o0, 31, %o0
+END (__isnanf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S
new file mode 100644
index 0000000000..6b53b69d2e
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S
@@ -0,0 +1,15 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(isnanf)
+
+hidden_def (__isnanf)
+weak_alias (__isnanf, isnanf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __isnanf __isnanf_generic
+
+#include "../s_isnanf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S
new file mode 100644
index 0000000000..4633017fc5
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S
@@ -0,0 +1,52 @@
+/* lrint(), sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__lrint_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o2, 32, %o2
+ fzero ZERO
+
+ fnegd ZERO, SIGN_BIT
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ for %f0, SIGN_BIT, %f0
+ fdtox %f0, %f4
+ retl
+ movdtox %f4, %o0
+END (__lrint_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S
new file mode 100644
index 0000000000..94af8f028c
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S
@@ -0,0 +1,17 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(lrint)
+
+weak_alias (__lrint, lrint)
+
+strong_alias (__lrint, __llrint)
+weak_alias (__llrint, llrint)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef strong_alias
+# define strong_alias(a, b)
+
+#define __lrint __lrint_generic
+
+#include "../s_lrint.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S
new file mode 100644
index 0000000000..6358732f12
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S
@@ -0,0 +1,51 @@
+/* lrintf(), sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__lrintf_vis3)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+ movwtos %o2, %f16
+ fabss %f1, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ fors %f0, SIGN_BIT, %f0
+ fstox %f0, %f4
+ retl
+ movdtox %f4, %o0
+END (__lrintf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S
new file mode 100644
index 0000000000..e6ea4061c3
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S
@@ -0,0 +1,17 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(lrintf)
+
+weak_alias (__lrintf, lrintf)
+
+strong_alias (__lrintf, __llrintf)
+weak_alias (__llrintf, llrintf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef strong_alias
+# define strong_alias(a, b)
+
+#define __lrintf __lrintf_generic
+
+#include "../s_lrintf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S
new file mode 100644
index 0000000000..d4fcd19d9b
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S
@@ -0,0 +1,50 @@
+/* Round float to int floating-point values, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rint_vis3)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o2, 32, %o2
+ fzero ZERO
+
+ fnegd ZERO, SIGN_BIT
+ movxtod %o2, %f16
+ fabsd %f0, %f14
+
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__rint_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S
new file mode 100644
index 0000000000..cc980eb8c7
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(rint)
+
+weak_alias (__rint, rint)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __rint __rint_generic
+
+#include "../s_rint.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S
new file mode 100644
index 0000000000..ea640589e4
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S
@@ -0,0 +1,49 @@
+/* Round float to int floating-point values, sparc64 vis3 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rintf_vis3)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+ movwtos %o2, %f16
+ fabss %f1, %f14
+
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__rintf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S
new file mode 100644
index 0000000000..38fd936086
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(rintf)
+
+weak_alias (__rintf, rintf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __rintf __rintf_generic
+
+#include "../s_rintf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S
new file mode 100644
index 0000000000..8d54e32ac4
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S
@@ -0,0 +1,25 @@
+/* signbit(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__signbit_vis3)
+ movdtox %f0, %o0
+ retl
+ srlx %o0, 63, %o0
+END (__signbit_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S
new file mode 100644
index 0000000000..e69550c474
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S
@@ -0,0 +1,23 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(signbit)
+
+weak_alias (__signbit, signbit)
+
+/* On 64-bit the double version will also always work for
+ long-double-precision since in both cases the word with the
+ sign bit in it is passed always in register %f0. */
+strong_alias (__signbit, __signbitl)
+hidden_def (__signbitl)
+weak_alias (__signbitl, signbitl)
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef strong_alias
+# define strong_alias(a, b)
+# undef hidden_def
+# define hidden_def(a)
+
+#define __signbit __signbit_generic
+
+#include "../s_signbit.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S
new file mode 100644
index 0000000000..004b0870d6
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S
@@ -0,0 +1,25 @@
+/* signbitf(). sparc64 vis3 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__signbitf_vis3)
+ movstouw %f1, %o0
+ retl
+ srl %o0, 31, %o0
+END (__signbitf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S
new file mode 100644
index 0000000000..c35c79f88a
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(signbitf)
+
+weak_alias (__signbitf, signbitf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __signbitf __signbitf_generic
+
+#include "../s_signbitf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/s_ceil.S b/sysdeps/sparc/sparc64/fpu/s_ceil.S
new file mode 100644
index 0000000000..0bda19b613
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_ceil.S
@@ -0,0 +1,83 @@
+/* ceil function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceil)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzero ZERO
+
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ sllx %o3, 32, %o3
+ stx %o2, [%sp + STACK_BIAS + 128]
+ fabsd %f0, %f14
+
+ ldd [%sp + STACK_BIAS + 128], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ stx %o3, [%sp + STACK_BIAS + 128]
+
+ ldd [%sp + STACK_BIAS + 128], %f20
+ fmovduge %fcc2, ZERO, %f20
+ faddd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__ceil)
+weak_alias (__ceil, ceil)
diff --git a/sysdeps/sparc/sparc64/fpu/s_ceilf.S b/sysdeps/sparc/sparc64/fpu/s_ceilf.S
new file mode 100644
index 0000000000..bd5f0fb7e1
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_ceilf.S
@@ -0,0 +1,81 @@
+/* Float ceil function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__ceilf)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + STACK_BIAS + 128]
+ fabss %f1, %f14
+
+ ld [%sp + STACK_BIAS + 128], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f5
+ fcmps %fcc2, %f5, %f1
+ st %o3, [%sp + STACK_BIAS + 128]
+
+ ld [%sp + STACK_BIAS + 128], %f9
+ fmovsuge %fcc2, ZERO, %f9
+ fadds %f5, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__ceilf)
+weak_alias (__ceilf, ceilf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_copysign.S b/sysdeps/sparc/sparc64/fpu/s_copysign.S
new file mode 100644
index 0000000000..f7f69fb8d9
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_copysign.S
@@ -0,0 +1,30 @@
+/* copysign function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__copysign)
+ fzeros %f7
+ fnegs %f7, %f7
+ fands %f2, %f7, %f9
+ fandnot2s %f0, %f7, %f0
+ retl
+ fors %f0, %f9, %f0
+END (__copysign)
+weak_alias (__copysign, copysign) \ No newline at end of file
diff --git a/sysdeps/sparc/sparc64/fpu/s_copysignf.S b/sysdeps/sparc/sparc64/fpu/s_copysignf.S
new file mode 100644
index 0000000000..85577a7170
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_copysignf.S
@@ -0,0 +1,30 @@
+/* float copysign function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__copysignf)
+ fzeros %f7
+ fnegs %f7, %f7
+ fands %f3, %f7, %f9
+ fandnot2s %f1, %f7, %f1
+ retl
+ fors %f1, %f9, %f0
+END (__copysignf)
+weak_alias (__copysignf, copysignf) \ No newline at end of file
diff --git a/sysdeps/sparc/sparc64/fpu/s_finite.S b/sysdeps/sparc/sparc64/fpu/s_finite.S
new file mode 100644
index 0000000000..f93297e27b
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_finite.S
@@ -0,0 +1,31 @@
+/* finite(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__finite)
+ fabsd %f0, %f0
+ st %f0, [%sp + STACK_BIAS + 128]
+ sethi %hi(0x7ff00000), %o2
+ ld [%sp + STACK_BIAS + 128], %o0
+ sub %o0, %o2, %o0
+ retl
+ srl %o0, 31, %o0
+END (__finite)
+hidden_def (__finite)
+weak_alias (__finite, finite)
diff --git a/sysdeps/sparc/sparc64/fpu/s_finitef.S b/sysdeps/sparc/sparc64/fpu/s_finitef.S
new file mode 100644
index 0000000000..2ebac99b34
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_finitef.S
@@ -0,0 +1,31 @@
+/* finitef(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__finitef)
+ fabss %f1, %f0
+ st %f0, [%sp + STACK_BIAS + 128]
+ sethi %hi(0x7f800000), %o2
+ ld [%sp + STACK_BIAS + 128], %o0
+ sub %o0, %o2, %o0
+ retl
+ srl %o0, 31, %o0
+END (__finitef)
+hidden_def (__finitef)
+weak_alias (__finitef, finitef)
diff --git a/sysdeps/sparc/sparc64/fpu/s_floor.S b/sysdeps/sparc/sparc64/fpu/s_floor.S
new file mode 100644
index 0000000000..88d9c4d193
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_floor.S
@@ -0,0 +1,83 @@
+/* floor function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+#define ONE_DOT_ZERO 0x3ff00000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floor)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzero ZERO
+
+ sllx %o2, 32, %o2
+ fnegd ZERO, SIGN_BIT
+
+ sllx %o3, 32, %o3
+ stx %o2, [%sp + STACK_BIAS + 128]
+ fabsd %f0, %f14
+
+ ldd [%sp + STACK_BIAS + 128], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f18
+ fsubd %f18, %f16, %f18
+ fcmpd %fcc2, %f18, %f0
+ stx %o3, [%sp + STACK_BIAS + 128]
+
+ ldd [%sp + STACK_BIAS + 128], %f20
+ fmovdule %fcc2, ZERO, %f20
+ fsubd %f18, %f20, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__floor)
+weak_alias (__floor, floor)
diff --git a/sysdeps/sparc/sparc64/fpu/s_floorf.S b/sysdeps/sparc/sparc64/fpu/s_floorf.S
new file mode 100644
index 0000000000..711cbe4d1e
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_floorf.S
@@ -0,0 +1,81 @@
+/* Float floor function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* Since changing the rounding mode is extremely expensive, we
+ try to round up using a method that is rounding mode
+ agnostic.
+
+ We add then subtract (or subtract than add if the initial
+ value was negative) 2**23 to the value, then subtract it
+ back out.
+
+ This will clear out the fractional portion of the value.
+ One of two things will happen for non-whole initial values.
+ Either the rounding mode will round it up, or it will be
+ rounded down. If the value started out whole, it will be
+ equal after the addition and subtraction. This means we
+ can accurately detect with one test whether we need to add
+ another 1.0 to round it up properly.
+
+ We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any
+ PIC references. We also thus avoid having to allocate a
+ register window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+#define ONE_DOT_ZERO 0x3f800000 /* 1.0 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__floorf)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ sethi %hi(ONE_DOT_ZERO), %o3
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+
+ st %o2, [%sp + STACK_BIAS + 128]
+ fabss %f1, %f14
+
+ ld [%sp + STACK_BIAS + 128], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f5
+ fcmps %fcc2, %f5, %f1
+ st %o3, [%sp + STACK_BIAS + 128]
+
+ ld [%sp + STACK_BIAS + 128], %f9
+ fmovsule %fcc2, ZERO, %f9
+ fsubs %f5, %f9, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__floorf)
+weak_alias (__floorf, floorf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_fma.c b/sysdeps/sparc/sparc64/fpu/s_fma.c
new file mode 100644
index 0000000000..8f62605870
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_fma.c
@@ -0,0 +1,2 @@
+/* Always use dbl-64 version because long double is emulated in software. */
+#include <sysdeps/ieee754/dbl-64/s_fma.c>
diff --git a/sysdeps/sparc/sparc64/fpu/s_fmax.S b/sysdeps/sparc/sparc64/fpu/s_fmax.S
new file mode 100644
index 0000000000..21a2c80958
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_fmax.S
@@ -0,0 +1,36 @@
+/* fmax function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fmax)
+ fcmpd %fcc1, %f2, %f2
+ fzero SIGN_BIT
+ fmovdu %fcc1, %f0, %f2
+ fnegd SIGN_BIT, SIGN_BIT
+ fcmpd %fcc2, %f0, %f2
+ fmovdul %fcc2, %f2, %f0
+ fand %f0, %f2, %f4
+ fandnot2 SIGN_BIT, %f4, %f4
+ retl
+ fandnot2 %f0, %f4, %f0
+END (__fmax)
+weak_alias (__fmax, fmax)
diff --git a/sysdeps/sparc/sparc64/fpu/s_fmaxf.S b/sysdeps/sparc/sparc64/fpu/s_fmaxf.S
new file mode 100644
index 0000000000..989c5c300d
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_fmaxf.S
@@ -0,0 +1,36 @@
+/* fmaxf function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fmaxf)
+ fcmps %fcc1, %f3, %f3
+ fzeros SIGN_BIT
+ fmovsu %fcc1, %f1, %f3
+ fnegs SIGN_BIT, SIGN_BIT
+ fcmps %fcc2, %f1, %f3
+ fmovsul %fcc2, %f3, %f1
+ fands %f1, %f3, %f4
+ fandnot2s SIGN_BIT, %f4, %f4
+ retl
+ fandnot2s %f1, %f4, %f0
+END (__fmaxf)
+weak_alias (__fmaxf, fmaxf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_fmin.S b/sysdeps/sparc/sparc64/fpu/s_fmin.S
new file mode 100644
index 0000000000..01105e6972
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_fmin.S
@@ -0,0 +1,36 @@
+/* fmin function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fmin)
+ fcmpd %fcc1, %f2, %f2
+ fzero SIGN_BIT
+ fmovdu %fcc1, %f0, %f2
+ fnegd SIGN_BIT, SIGN_BIT
+ fcmpd %fcc2, %f0, %f2
+ fmovdug %fcc2, %f2, %f0
+ for %f0, %f2, %f4
+ fand %f4, SIGN_BIT, %f4
+ retl
+ for %f0, %f4, %f0
+END (__fmin)
+weak_alias (__fmin, fmin)
diff --git a/sysdeps/sparc/sparc64/fpu/s_fminf.S b/sysdeps/sparc/sparc64/fpu/s_fminf.S
new file mode 100644
index 0000000000..13a0ef40e1
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_fminf.S
@@ -0,0 +1,36 @@
+/* fminf function, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__fminf)
+ fcmps %fcc1, %f3, %f3
+ fzeros SIGN_BIT
+ fmovsu %fcc1, %f1, %f3
+ fnegs SIGN_BIT, SIGN_BIT
+ fcmps %fcc2, %f1, %f3
+ fmovsug %fcc2, %f3, %f1
+ fors %f1, %f3, %f4
+ fands %f4, SIGN_BIT, %f4
+ retl
+ fors %f1, %f4, %f0
+END (__fminf)
+weak_alias (__fminf, fminf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isinf.S b/sysdeps/sparc/sparc64/fpu/s_isinf.S
new file mode 100644
index 0000000000..20b54c0e1d
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_isinf.S
@@ -0,0 +1,34 @@
+/* isinf(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isinf)
+ std %f0, [%sp + STACK_BIAS + 128]
+ sethi %hi(0x7ff00000), %o2
+ ldx [%sp + STACK_BIAS + 128], %g1
+ sllx %o2, 32, %o2
+ sllx %g1, 1, %o4
+ srlx %o4, 1, %o5
+ srax %g1, 62, %o0
+ xor %o5, %o2, %o3
+ retl
+ movrne %o3, %g0, %o0
+END (__isinf)
+hidden_def (__isinf)
+weak_alias (__isinf, isinf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isinff.S b/sysdeps/sparc/sparc64/fpu/s_isinff.S
new file mode 100644
index 0000000000..302ff8dba5
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_isinff.S
@@ -0,0 +1,33 @@
+/* isinff(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isinff)
+ st %f1, [%sp + STACK_BIAS + 128]
+ sethi %hi(0x7f800000), %o2
+ lduw [%sp + STACK_BIAS + 128], %g1
+ sll %g1, 1, %o4
+ srl %o4, 1, %o5
+ sra %g1, 30, %o0
+ xor %o5, %o2, %o3
+ retl
+ movrne %o3, %g0, %o0
+END (__isinff)
+hidden_def (__isinff)
+weak_alias (__isinff, isinff)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isnan.S b/sysdeps/sparc/sparc64/fpu/s_isnan.S
new file mode 100644
index 0000000000..00041caa54
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_isnan.S
@@ -0,0 +1,33 @@
+/* isnan(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isnan)
+ std %f0, [%sp + STACK_BIAS + 128]
+ sethi %hi(0x7ff00000), %g1
+ ldx [%sp + STACK_BIAS + 128], %o0
+ sllx %g1, 32, %g1
+ sllx %o0, 1, %o0
+ srlx %o0, 1, %o0
+ sub %g1, %o0, %o0
+ retl
+ srlx %o0, 63, %o0
+END (__isnan)
+hidden_def (__isnan)
+weak_alias (__isnan, isnan)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/s_isnanf.S
new file mode 100644
index 0000000000..f82c8194c5
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_isnanf.S
@@ -0,0 +1,32 @@
+/* isnanf(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__isnanf)
+ st %f1, [%sp + STACK_BIAS + 128]
+ sethi %hi(0x7f800000), %g1
+ lduw [%sp + STACK_BIAS + 128], %o0
+ sll %o0, 1, %o0
+ srl %o0, 1, %o0
+ sub %g1, %o0, %o0
+ retl
+ srl %o0, 31, %o0
+END (__isnanf)
+hidden_def (__isnanf)
+weak_alias (__isnanf, isnanf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_llrint.S b/sysdeps/sparc/sparc64/fpu/s_llrint.S
new file mode 100644
index 0000000000..7c8e941b77
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_llrint.S
@@ -0,0 +1 @@
+/* llrint is implemented in s_lrint.S */
diff --git a/sysdeps/sparc/sparc64/fpu/s_llrintf.S b/sysdeps/sparc/sparc64/fpu/s_llrintf.S
new file mode 100644
index 0000000000..abab3b9a2b
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_llrintf.S
@@ -0,0 +1 @@
+/* llrintf is implemented in s_lrint.S */
diff --git a/sysdeps/sparc/sparc64/fpu/s_lrint.S b/sysdeps/sparc/sparc64/fpu/s_lrint.S
new file mode 100644
index 0000000000..6bf56e4d06
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_lrint.S
@@ -0,0 +1,63 @@
+/* lrint(), sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__lrint)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o2, 32, %o2
+ fzero ZERO
+
+ fnegd ZERO, SIGN_BIT
+ stx %o2, [%sp + STACK_BIAS + 128]
+ fabsd %f0, %f14
+
+ ldd [%sp + STACK_BIAS + 128], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ for %f0, SIGN_BIT, %f0
+ fdtox %f0, %f4
+ std %f4, [%sp + STACK_BIAS + 128]
+ retl
+ ldx [%sp + STACK_BIAS + 128], %o0
+END (__lrint)
+weak_alias (__lrint, lrint)
+
+strong_alias (__lrint, __llrint)
+weak_alias (__llrint, llrint)
diff --git a/sysdeps/sparc/sparc64/fpu/s_lrintf.S b/sysdeps/sparc/sparc64/fpu/s_lrintf.S
new file mode 100644
index 0000000000..2f2938b985
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_lrintf.S
@@ -0,0 +1,62 @@
+/* lrintf(), sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__lrintf)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+ st %o2, [%sp + STACK_BIAS + 128]
+ fabss %f1, %f14
+
+ ld [%sp + STACK_BIAS + 128], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ fors %f0, SIGN_BIT, %f0
+ fstox %f0, %f4
+ std %f4, [%sp + STACK_BIAS + 128]
+ retl
+ ldx [%sp + STACK_BIAS + 128], %o0
+END (__lrintf)
+weak_alias (__lrintf, lrintf)
+
+strong_alias (__lrintf, __llrintf)
+weak_alias (__llrintf, llrintf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_rint.S b/sysdeps/sparc/sparc64/fpu/s_rint.S
new file mode 100644
index 0000000000..4589e2cbc0
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_rint.S
@@ -0,0 +1,57 @@
+/* Round float to int floating-point values, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_FIFTYTWO 0x43300000 /* 2**52 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rint)
+ sethi %hi(TWO_FIFTYTWO), %o2
+ sllx %o2, 32, %o2
+ fzero ZERO
+
+ fnegd ZERO, SIGN_BIT
+ stx %o2, [%sp + STACK_BIAS + 128]
+ fabsd %f0, %f14
+
+ ldd [%sp + STACK_BIAS + 128], %f16
+ fcmpd %fcc3, %f14, %f16
+
+ fmovduge %fcc3, ZERO, %f16
+ fand %f0, SIGN_BIT, SIGN_BIT
+
+ for %f16, SIGN_BIT, %f16
+ faddd %f0, %f16, %f6
+ fsubd %f6, %f16, %f0
+ fabsd %f0, %f0
+ retl
+ for %f0, SIGN_BIT, %f0
+END (__rint)
+weak_alias (__rint, rint)
diff --git a/sysdeps/sparc/sparc64/fpu/s_rintf.S b/sysdeps/sparc/sparc64/fpu/s_rintf.S
new file mode 100644
index 0000000000..7f7caa832e
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_rintf.S
@@ -0,0 +1,56 @@
+/* Round float to int floating-point values, sparc64 version.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David S. Miller <davem@davemloft.net>, 2012.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ /* We pop constants into the FPU registers using the incoming
+ argument stack slots, since this avoid having to use any PIC
+ references. We also thus avoid having to allocate a register
+ window.
+
+ VIS instructions are used to facilitate the formation of
+ easier constants, and the propagation of the sign bit. */
+
+#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */
+
+#define ZERO %f10 /* 0.0 */
+#define SIGN_BIT %f12 /* -0.0 */
+
+ENTRY (__rintf)
+ sethi %hi(TWO_TWENTYTHREE), %o2
+ fzeros ZERO
+
+ fnegs ZERO, SIGN_BIT
+ st %o2, [%sp + STACK_BIAS + 128]
+ fabss %f1, %f14
+
+ ld [%sp + STACK_BIAS + 128], %f16
+ fcmps %fcc3, %f14, %f16
+
+ fmovsuge %fcc3, ZERO, %f16
+ fands %f1, SIGN_BIT, SIGN_BIT
+
+ fors %f16, SIGN_BIT, %f16
+ fadds %f1, %f16, %f5
+ fsubs %f5, %f16, %f0
+ fabss %f0, %f0
+ retl
+ fors %f0, SIGN_BIT, %f0
+END (__rintf)
+weak_alias (__rintf, rintf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_signbit.S b/sysdeps/sparc/sparc64/fpu/s_signbit.S
new file mode 100644
index 0000000000..3c1ea000f1
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_signbit.S
@@ -0,0 +1,34 @@
+/* signbit(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__signbit)
+ st %f0, [%sp + STACK_BIAS + 128]
+ ld [%sp + STACK_BIAS + 128], %o0
+ retl
+ srl %o0, 31, %o0
+END (__signbit)
+weak_alias (__signbit, signbit)
+
+/* On 64-bit the double version will also always work for
+ long-double-precision since in both cases the word with the
+ sign bit in it is passed always in register %f0. */
+strong_alias (__signbit, __signbitl)
+hidden_def (__signbitl)
+weak_alias (__signbitl, signbitl)
diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/s_signbitf.S
new file mode 100644
index 0000000000..d2a7aa5bdd
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_signbitf.S
@@ -0,0 +1,27 @@
+/* signbitf(). sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__signbitf)
+ st %f1, [%sp + STACK_BIAS + 128]
+ ld [%sp + STACK_BIAS + 128], %o0
+ retl
+ srl %o0, 31, %o0
+END (__signbitf)
+weak_alias (__signbitf, signbitf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitl.S b/sysdeps/sparc/sparc64/fpu/s_signbitl.S
new file mode 100644
index 0000000000..f5e5fb9253
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_signbitl.S
@@ -0,0 +1 @@
+/* signbitl is implemented in s_signbit.S */
diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrt.S b/sysdeps/sparc/sparc64/fpu/w_sqrt.S
new file mode 100644
index 0000000000..dd6039aa75
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/w_sqrt.S
@@ -0,0 +1,48 @@
+/* sqrt function. sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrt)
+ fzero %f8
+ fcmpd %fcc2, %f0, %f8
+ fbl,pn %fcc2, 1f
+ nop
+8: retl
+ fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ldx [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be,pt %icc, 8b
+ fmovd %f0, %f2
+ mov 26, %o2
+ mov %o7, %g1
+ call __kernel_standard
+ mov %g1, %o7
+END (__sqrt)
+
+weak_alias (__sqrt, sqrt)
diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrtf.S b/sysdeps/sparc/sparc64/fpu/w_sqrtf.S
new file mode 100644
index 0000000000..1472e34552
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/w_sqrtf.S
@@ -0,0 +1,48 @@
+/* sqrtf function. sparc64 version.
+ Copyright (C) 2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ENTRY (__sqrtf)
+ fzeros %f8
+ fcmps %fcc2, %f1, %f8
+ fbl,pn %fcc2, 1f
+ nop
+8: retl
+ fsqrts %f1, %f0
+1:
+#ifdef SHARED
+ SETUP_PIC_REG_LEAF(o5, g1)
+ sethi %gdop_hix22(_LIB_VERSION), %g1
+ xor %g1, %gdop_lox10(_LIB_VERSION), %g1
+ ldx [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+ sethi %hi(_LIB_VERSION), %g1
+ or %g1, %lo(_LIB_VERSION), %g1
+#endif
+ ld [%g1], %g1
+ cmp %g1, -1
+ be,pt %icc, 8b
+ fmovs %f1, %f3
+ mov 126, %o2
+ mov %o7, %g1
+ call __kernel_standard_f
+ mov %g1, %o7
+END (__sqrtf)
+
+weak_alias (__sqrtf, sqrtf)
diff --git a/sysdeps/sparc/sparc64/hp-timing.h b/sysdeps/sparc/sparc64/hp-timing.h
index b68f653fb8..684b846f55 100644
--- a/sysdeps/sparc/sparc64/hp-timing.h
+++ b/sysdeps/sparc/sparc64/hp-timing.h
@@ -22,7 +22,7 @@
#include <string.h>
#include <sys/param.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#define HP_TIMING_AVAIL (1)
#define HP_TIMING_INLINE (1)
diff --git a/sysdeps/sparc/sparc64/memcpy.S b/sysdeps/sparc/sparc64/memcpy.S
index a77c4e441f..668ebecef1 100644
--- a/sysdeps/sparc/sparc64/memcpy.S
+++ b/sysdeps/sparc/sparc64/memcpy.S
@@ -374,19 +374,24 @@ ENTRY(__memcpy_large)
mov %g4, %o0
END(__memcpy_large)
+ENTRY(__mempcpy)
+ ba,pt %xcc, 210f
+ add %o0, %o2, %g4
+END(__mempcpy)
+
.align 32
ENTRY(memcpy)
+ mov %o0, %g4 /* IEU0 Group */
210:
#ifndef USE_BPR
- srl %o2, 0, %o2 /* IEU1 Group */
+ srl %o2, 0, %o2 /* IEU1 */
#endif
brz,pn %o2, 209b /* CTI Group */
- mov %o0, %g4 /* IEU0 */
-218: cmp %o2, 15 /* IEU1 Group */
- bleu,pn %xcc, 208b /* CTI */
- cmp %o2, (64 * 6) /* IEU1 Group */
- bgeu,pn %xcc, 200b /* CTI */
- andcc %o0, 7, %g2 /* IEU1 Group */
+218: cmp %o2, 15 /* IEU1 */
+ bleu,pn %xcc, 208b /* CTI Group */
+ cmp %o2, (64 * 6) /* IEU1 */
+ bgeu,pn %xcc, 200b /* CTI Group */
+ andcc %o0, 7, %g2 /* IEU1 */
sub %o0, %o1, %g5 /* IEU0 */
andcc %g5, 3, %o5 /* IEU1 Group */
bne,pn %xcc, 212f /* CTI */
@@ -569,3 +574,7 @@ ENTRY(memcpy)
END(memcpy)
libc_hidden_builtin_def (memcpy)
+
+libc_hidden_def (__mempcpy)
+weak_alias (__mempcpy, mempcpy)
+libc_hidden_builtin_def (mempcpy)
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
index 8bada0eeec..6ba1b0c6e9 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
@@ -43,13 +43,19 @@
.text
+ENTRY(__mempcpy_niagara1)
+ ba,pt %XCC, 101f
+ add %o0, %o2, %g5
+END(__mempcpy_niagara1)
+
.align 32
ENTRY(__memcpy_niagara1)
+100: /* %o0=dst, %o1=src, %o2=len */
+ mov %o0, %g5
+101:
# ifndef USE_BPR
srl %o2, 0, %o2
# endif
-100: /* %o0=dst, %o1=src, %o2=len */
- mov %o0, %g5
cmp %o2, 0
be,pn %XCC, 85f
218: or %o0, %o1, %o3
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
index ccbb0252f3..0e9442de5f 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
@@ -145,13 +145,19 @@
.text
+ENTRY(__mempcpy_niagara2)
+ ba,pt %XCC, 101f
+ add %o0, %o2, %g5
+END(__mempcpy_niagara2)
+
.align 32
ENTRY(__memcpy_niagara2)
+100: /* %o0=dst, %o1=src, %o2=len */
+ mov %o0, %g5
+101:
# ifndef USE_BPR
srl %o2, 0, %o2
# endif
-100: /* %o0=dst, %o1=src, %o2=len */
- mov %o0, %g5
cmp %o2, 0
be,pn %XCC, 85f
218: or %o0, %o1, %o3
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S b/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
index 7e21665d5f..0784ba9b5d 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
@@ -38,6 +38,11 @@
.text
+ENTRY(__mempcpy_ultra3)
+ ba,pt %XCC, 101f
+ add %o0, %o2, %g5
+END(__mempcpy_ultra3)
+
/* Special/non-trivial issues of this code:
*
* 1) %o5 is preserved from VISEntryHalf to VISExitHalf
@@ -57,6 +62,7 @@ ENTRY(__memcpy_ultra3)
100: /* %o0=dst, %o1=src, %o2=len */
mov %o0, %g5
+101:
cmp %o2, 0
be,pn %XCC, out
218: or %o0, %o1, %o3
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S
index 739687f3b8..20c72d9bbd 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy.S
@@ -1,5 +1,5 @@
/* Multiple versions of memcpy
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
Contributed by David S. Miller (davem@davemloft.net)
This file is part of the GNU C Library.
@@ -18,7 +18,6 @@
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
-#include <rtld-global-offsets.h>
#if !defined NOT_IN_libc
.text
@@ -73,12 +72,72 @@ ENTRY(memcpy)
mov %o1, %o0
END(memcpy)
-# undef libc_hidden_builtin_def
-/* IFUNC doesn't work with the hidden functions in a shared library. */
-# define libc_hidden_builtin_def(name) \
- .globl __GI_memcpy; __GI_memcpy = __memcpy_ultra1
+ENTRY(__mempcpy)
+ .type __mempcpy, @gnu_indirect_function
+# ifdef SHARED
+ SETUP_PIC_REG_LEAF(o3, o5)
+# endif
+ andcc %o0, HWCAP_SPARC_N2, %g0
+ be 1f
+ andcc %o0, HWCAP_SPARC_BLKINIT, %g0
+# ifdef SHARED
+ sethi %gdop_hix22(__mempcpy_niagara2), %o1
+ xor %o1, %gdop_lox10(__mempcpy_niagara2), %o1
+# else
+ set __mempcpy_niagara2, %o1
+# endif
+ ba 10f
+ nop
+1: be 1f
+ andcc %o0, HWCAP_SPARC_ULTRA3, %g0
+# ifdef SHARED
+ sethi %gdop_hix22(__mempcpy_niagara1), %o1
+ xor %o1, %gdop_lox10(__mempcpy_niagara1), %o1
+# else
+ set __mempcpy_niagara1, %o1
+# endif
+ ba 10f
+ nop
+1: be 9f
+ nop
+# ifdef SHARED
+ sethi %gdop_hix22(__mempcpy_ultra3), %o1
+ xor %o1, %gdop_lox10(__mempcpy_ultra3), %o1
+# else
+ set __mempcpy_ultra3, %o1
+# endif
+ ba 10f
+ nop
+9:
+# ifdef SHARED
+ sethi %gdop_hix22(__mempcpy_ultra1), %o1
+ xor %o1, %gdop_lox10(__mempcpy_ultra1), %o1
+# else
+ set __mempcpy_ultra1, %o1
+# endif
+10:
+# ifdef SHARED
+ add %o3, %o1, %o1
+# endif
+ retl
+ mov %o1, %o0
+END(__mempcpy)
+
+libc_hidden_builtin_def (memcpy)
+
+libc_hidden_def (__mempcpy)
+weak_alias (__mempcpy, mempcpy)
+libc_hidden_builtin_def (mempcpy)
+
+#undef libc_hidden_builtin_def
+#define libc_hidden_builtin_def(name)
+#undef weak_alias
+#define weak_alias(x, y)
+#undef libc_hidden_def
+#define libc_hidden_def(name)
#define memcpy __memcpy_ultra1
+#define __mempcpy __mempcpy_ultra1
#endif
diff --git a/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S
index 5247bb3f94..1d1b3cc5f1 100644
--- a/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S
+++ b/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S
@@ -1,5 +1,5 @@
/* Set a block of memory to some byte value. For SUN4V Niagara.
- Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2008, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David S. Miller (davem@davemloft.net)
@@ -60,7 +60,7 @@ ENTRY(__bzero_niagara1)
wr %g0, ASI_P, %asi
cmp %o1, 15
- bl,pn %icc, 70f
+ blu,pn %XCC, 70f
andcc %o0, 0x7, %g1
be,pt %XCC, 2f
mov 8, %g2
@@ -71,7 +71,7 @@ ENTRY(__bzero_niagara1)
bne,pt %XCC, 1b
add %o0, 1, %o0
2: cmp %o1, 128
- bl,pn %icc, 60f
+ blu,pn %XCC, 60f
andcc %o0, (64 - 1), %g1
be,pt %XCC, 40f
mov 64, %g2
@@ -86,6 +86,51 @@ ENTRY(__bzero_niagara1)
wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
andn %o1, (64 - 1), %g1
sub %o1, %g1, %o1
+
+ andn %g1, (256 - 1), %g2
+ brz,pt %g2, 50f
+ and %g1, (256 - 1), %g1
+
+45:
+ stxa %o2, [%o0 + 0x00] %asi
+ stxa %o2, [%o0 + 0x08] %asi
+ stxa %o2, [%o0 + 0x10] %asi
+ stxa %o2, [%o0 + 0x18] %asi
+ stxa %o2, [%o0 + 0x20] %asi
+ stxa %o2, [%o0 + 0x28] %asi
+ stxa %o2, [%o0 + 0x30] %asi
+ stxa %o2, [%o0 + 0x38] %asi
+ stxa %o2, [%o0 + 0x40] %asi
+ stxa %o2, [%o0 + 0x48] %asi
+ stxa %o2, [%o0 + 0x50] %asi
+ stxa %o2, [%o0 + 0x58] %asi
+ stxa %o2, [%o0 + 0x60] %asi
+ stxa %o2, [%o0 + 0x68] %asi
+ stxa %o2, [%o0 + 0x70] %asi
+ stxa %o2, [%o0 + 0x78] %asi
+ stxa %o2, [%o0 + 0x80] %asi
+ stxa %o2, [%o0 + 0x88] %asi
+ stxa %o2, [%o0 + 0x90] %asi
+ stxa %o2, [%o0 + 0x98] %asi
+ stxa %o2, [%o0 + 0xa0] %asi
+ stxa %o2, [%o0 + 0xa8] %asi
+ stxa %o2, [%o0 + 0xb0] %asi
+ stxa %o2, [%o0 + 0xb8] %asi
+ stxa %o2, [%o0 + 0xc0] %asi
+ stxa %o2, [%o0 + 0xc8] %asi
+ stxa %o2, [%o0 + 0xd0] %asi
+ stxa %o2, [%o0 + 0xd8] %asi
+ stxa %o2, [%o0 + 0xe0] %asi
+ stxa %o2, [%o0 + 0xe8] %asi
+ stxa %o2, [%o0 + 0xf0] %asi
+ stxa %o2, [%o0 + 0xf8] %asi
+ subcc %g2, 256, %g2
+ bne,pt %XCC, 45b
+ add %o0, 256, %o0
+
+ brz,pn %g1, 55f
+ nop
+
50:
stxa %o2, [%o0 + 0x00] %asi
stxa %o2, [%o0 + 0x08] %asi
@@ -99,6 +144,7 @@ ENTRY(__bzero_niagara1)
bne,pt %XCC, 50b
add %o0, 64, %o0
+55:
wr %g0, ASI_P, %asi
brz,pn %o1, 80f
60:
@@ -115,7 +161,7 @@ ENTRY(__bzero_niagara1)
70:
1: stba %o2, [%o0 + 0x00] %asi
subcc %o1, 1, %o1
- bne,pt %icc, 1b
+ bne,pt %XCC, 1b
add %o0, 1, %o0
/* fallthrough */
diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S
index 13533450c2..26cc669d6f 100644
--- a/sysdeps/sparc/sparc64/multiarch/memset.S
+++ b/sysdeps/sparc/sparc64/multiarch/memset.S
@@ -1,5 +1,5 @@
/* Multiple versions of memset and bzero
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
Contributed by David S. Miller (davem@davemloft.net)
This file is part of the GNU C Library.
@@ -18,7 +18,6 @@
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
-#include <rtld-global-offsets.h>
#if !defined NOT_IN_libc
.text
@@ -89,10 +88,10 @@ weak_alias (__bzero, bzero)
# undef weak_alias
# define weak_alias(a, b)
-# undef libc_hidden_builtin_def
-/* IFUNC doesn't work with the hidden functions in a shared library. */
-# define libc_hidden_builtin_def(name) \
- .globl __GI_memset; __GI_memset = __memset_ultra1
+libc_hidden_builtin_def (memset)
+
+#undef libc_hidden_builtin_def
+#define libc_hidden_builtin_def(name)
#define memset __memset_ultra1
#define __bzero __bzero_ultra1
diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c
new file mode 100644
index 0000000000..2452575343
--- /dev/null
+++ b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c
@@ -0,0 +1 @@
+#include "../rtld-memcpy.c"
diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memset.c b/sysdeps/sparc/sparc64/multiarch/rtld-memset.c
new file mode 100644
index 0000000000..c01eb0beb9
--- /dev/null
+++ b/sysdeps/sparc/sparc64/multiarch/rtld-memset.c
@@ -0,0 +1 @@
+#include "../rtld-memset.c"
diff --git a/sysdeps/sparc/sparc64/rtld-memcpy.c b/sysdeps/sparc/sparc64/rtld-memcpy.c
new file mode 100644
index 0000000000..b1b06479d2
--- /dev/null
+++ b/sysdeps/sparc/sparc64/rtld-memcpy.c
@@ -0,0 +1,2 @@
+#include <string/memcpy.c>
+#include <string/mempcpy.c>
diff --git a/sysdeps/sparc/sparc64/rtld-memset.c b/sysdeps/sparc/sparc64/rtld-memset.c
new file mode 100644
index 0000000000..55f3835790
--- /dev/null
+++ b/sysdeps/sparc/sparc64/rtld-memset.c
@@ -0,0 +1 @@
+#include <string/memset.c>
diff --git a/sysdeps/sparc/sparc64/elf/start.S b/sysdeps/sparc/sparc64/start.S
index 50f2df2c7e..7924fb4828 100644
--- a/sysdeps/sparc/sparc64/elf/start.S
+++ b/sysdeps/sparc/sparc64/start.S
@@ -67,7 +67,6 @@ _start:
or %o3, %lo(__libc_csu_init), %o3
or %o4, %lo(__libc_csu_fini), %o4
#else
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(main), %o0
sethi %gdop_hix22(__libc_csu_init), %o3
sethi %gdop_hix22(__libc_csu_fini), %o4
@@ -77,17 +76,6 @@ _start:
ldx [%l7 + %o0], %o0, %gdop(main)
ldx [%l7 + %o3], %o3, %gdop(__libc_csu_init)
ldx [%l7 + %o4], %o4, %gdop(__libc_csu_fini)
-#else
- sethi %hi(main), %o0
- sethi %hi(__libc_csu_init), %o3
- sethi %hi(__libc_csu_fini), %o4
- or %o0, %lo(main), %o0
- or %o3, %lo(__libc_csu_init), %o3
- or %o4, %lo(__libc_csu_fini), %o4
- ldx [%l7 + %o0], %o0
- ldx [%l7 + %o3], %o3
- ldx [%l7 + %o4], %o4
-#endif
#endif
/* When starting a binary via the dynamic linker, %g1 contains the
diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile
index 4b887a7a87..c8ef96d50e 100644
--- a/sysdeps/unix/Makefile
+++ b/sysdeps/unix/Makefile
@@ -1,5 +1,4 @@
-# Copyright (C) 1991,1992,1993,1994,1995,1996,1997,1998,1999,2003,2006,2008,2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1991-2012 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
@@ -16,243 +15,6 @@
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.
-# The unix-specific configure fragment writes `unix-generated' in config.make.
-config-generated := $(config-generated) $(unix-generated)
-
-ifeq (,$(filter-out $(sysdep_dir)/generic/ $(common-objpfx),\
- $(dir $(firstword $(wildcard $(+sysdep_dirs:%=%/bits/local_lim.h))))))
-
-ifneq (,$(wildcard $(sysincludedir)/sys/param.h))
-mk-local_lim-CFLAGS += -DHAVE_SYS_PARAM_H
-endif
-ifneq (,$(wildcard $(sysincludedir)/sys/limits.h))
-mk-local_lim-CFLAGS += -DHAVE_SYS_LIMITS_H
-endif
-ifneq (,$(wildcard $(sysincludedir)/limits.h))
-mk-local_lim-CFLAGS += -DHAVE_LIMITS_H
-endif
-
-$(common-objpfx)bits/local_lim.h: $(common-objpfx)mk-local_lim
- $(dir $<)$(notdir $<) > $@-t
- mv -f $@-t $@
-$(common-objpfx)mk-local_lim: $(sysdep_dir)/unix/mk-local_lim.c
- $(common-objdir-compile)
-
-before-compile += $(common-objpfx)bits/local_lim.h
-common-generated += bits/local_lim.h mk-local_lim
-
-endif
-
-ifeq (,$(filter-out $(sysdep_dir)/generic/ $(common-objpfx),\
- $(patsubst %/sys/param.h,%/,\
- $(firstword $(wildcard $(+sysdep_dirs:%=%/sys/param.h))))))
-
-before-compile := $(before-compile) $(common-objpfx)sys/param.h
-
-$(common-objpfx)sys/param.h: $(sysincludedir)/sys/param.h
- $(make-target-directory)
- (echo '#ifndef _SYS_PARAM_H'; \
- echo '#define _SYS_PARAM_H 1'; \
- echo '#include <endian.h>'; \
- $(AWK) < $< \
- '/^#define[ ]*NULL/ { print "#ifndef NULL"; \
- print $$0; \
- print "#endif"; \
- was_null = 1 } \
- { if (!was_null) print $$0; \
- was_null = 0 }'; \
- echo '#ifndef MAXHOSTNAMELEN'; \
- echo '#define MAXHOSTNAMELEN 64 /* XXX */'; \
- echo '#endif /* No MAXHOSTNAMELEN. */'; \
- echo '#endif /* sys/param.h */') > $@-tmp
- mv $@-tmp $@
-
-$(common-objpfx)param.h.c: $(sysincludedir)/sys/param.h
- rm -f $@
- cp $< $@
-$(common-objpfx)param.h.dep: $(common-objpfx)param.h.c \
- $(sysdep_dir)/unix/Makefile
- $(+mkdep) -I$(sysincludedir) $< \
- | sed > $@-t \
- -e 's@$(sysincludedir)/sys/param.h@@' \
- -e 's@^.*:@@' \
- -e 's@$<@@g' \
- -e 's@$(sysincludedir)/*@@g' \
- -e 's@\\$$@@' \
- -e 's@^@sys/param.h-includes := $$(sys/param.h-includes) @'
- mv $@-t $@
-
-# Get the generated definition of sys/param.h-includes.
-ifndef no_deps
--include $(common-objpfx)param.h.dep
-endif
-
-# Don't preempt our own headers.
-sys/param.h-includes := \
- $(filter-out $(patsubst $(..)%,%,\
- $(wildcard $(addprefix $(..),\
- $(sys/param.h-includes)))),\
- $(sys/param.h-includes))
-
-
-.PHONY: sys/param.h-includes
-sys/param.h-includes: $(addprefix $(common-objpfx),$(sys/param.h-includes))
-
-ifdef sys/param.h-includes
-# Copy the system files to $(common-objdir).
-$(addprefix $(common-objpfx),$(sys/param.h-includes)): $(common-objpfx)%: \
- $(sysincludedir)/%
- $(make-target-directory)
-# Some of these files sometimes contain conflicting declarations for htons,
-# ntohs, etc. They also often contain definitions of *_ENDIAN and
-# BYTE_ORDER, which we define ourselves in <endian.h>.
- sed -e '/[ ]*[hn]to[nh][sl][ (]*/d' \
- -e '/^#define[ ]*[A-Z]*_ENDIAN/d' \
- -e '/^#define[ ]*BYTE_ORDER/d' \
- $< > $@-t
- mv $@-t $@
-endif
-
-common-generated := $(common-generated) \
- sys/param.h $(sys/param.h-includes) param.h.c param.h.dep
-
-
-ifeq ($(subdir),misc)
-
-# Install system headers the system sys/param.h uses.
-
-sysdep_headers := $(sysdep_headers) $(sys/param.h-includes)
-
-endif # misc
-
-endif # No sysdep sys/param.h.
-
-ifeq (,$(filter-out $(sysdep_dir)/generic/ $(common-objpfx),\
- $(dir $(firstword $(wildcard $(+sysdep_dirs:%=%/bits/errno.h))))))
-
-# These need to exist before any compiling is done,
-# so cpp doesn't instead find the generic versions.
-before-compile := $(before-compile) $(common-objpfx)bits/errno.h
-
-$(common-objpfx)bits/errno.h: $(common-objpfx)make-errnos
- $(dir $<)$(notdir $<) > $@-tmp
- mv $@-tmp $@
-
-$(common-objpfx)make-errnos: $(common-objpfx)make-errnos.c
- $(common-objdir-compile)
-
-$(common-objpfx)make-errnos.c: $(sysdep_dir)/unix/errnos-tmpl.c \
- $(sysdep_dir)/unix/errnos.awk $(common-objpfx)errnos
- $(AWK) -f $(word 2,$^) errnos="`tr '\012' ' ' < $(word 3,$^)`" $< > $@T
- mv $@T $@
-
-$(common-objpfx)errnos: $(wildcard $(sysincludedir)/errno.h \
- $(sysincludedir)/sys/errno.h)
- sed -n 's/^#define[ ]*\(E[A-Z0-9][A-Z0-9]*\)[ ].*$$/\1/p' \
- $^ > $@-tmp
- mv $@-tmp $@
-
-common-generated := $(common-generated) \
- errnos.h errnos make-errnos make-errnos.c
-endif
-
-ifeq (,$(filter-out $(sysdep_dir)/generic/ $(common-objpfx),\
- $(dir $(firstword $(wildcard $(+sysdep_dirs:%=%/bits/ioctls.h))))))
-
-before-compile := $(before-compile) $(common-objpfx)bits/ioctls.h
-
-$(common-objpfx)bits/ioctls.h: $(common-objpfx)make-ioctls
- $(dir $<)$(notdir $<) > $@-tmp
- mv $@-tmp $@
-
-ioctl-includes := sys/termios.h net/nit.h
-ioctl-includes := $(wildcard $(addprefix $(sysincludedir)/,$(ioctl-includes)))
-make-ioctls-CFLAGS := $(subst /,_,$(subst .,_,\
- $(patsubst $(sysincludedir)/%,-DHAVE_%,\
- $(ioctl-includes))))
-
-$(common-objpfx)make-ioctls: $(common-objpfx)make-ioctls.c
- $(common-objdir-compile)
-
-$(common-objpfx)make-ioctls.c: $(sysdep_dir)/unix/ioctls-tmpl.c \
- $(sysdep_dir)/unix/ioctls.awk \
- $(common-objpfx)ioctls
- $(AWK) -f $(word 2,$^) requests="`cat $(word 3,$^)`" $< > $@T
- mv $@T $@
-
-
-bits_termios.h := $(firstword $(wildcard $(+sysdep_dirs:%=%/bits/termios.h)))
-ifeq ($(bits_termios.h),$(sysdep_dir)/generic/bits/termios.h)
-bits_termios.h := # Ignore the generic version.
-endif
-
-# If there is a system-specific <bits/termios.h> file, we want to omit
-# all the symbols it defines from ioctls. Otherwise, both
-# <bits/ioctls.h> and <bits/termios.h> would define them. The
-# system-specific <bits/termios.h> file presumably defines them with
-# the same values as we find from the system's headers. We also want
-# to omit from ioctls the symbols defined in our own
-# <sys/ttydefaults.h>, to avoid multiple definition conflicts. We use
-# snarf-ioctls on these files to find what symbols we want to omit.
-# fgrep -xv gives all lines which do not match in their entirety;
-# without -x, CSTOP's presence elided TIOCSTOP.
-
-$(common-objpfx)ioctls: $(sysdep_dir)/unix/snarf-ioctls \
- $(sysincludedir)/sys/ioctl.h $(ioctl-includes)
- $(dir $<)$(notdir $<) $(filter-out $<,$^) \
- | fgrep -xv "`($(dir $<)$(notdir $<) $(bits_termios.h) \
- $(..)sysdeps/generic/sys/ttydefaults.h; \
- echo NULL) \
- | sort | uniq`" \
- | sort | uniq | tr '\012' ' ' > $@-tmp
- mv $@-tmp $@
-
-common-generated := $(common-generated) \
- bits/ioctls.h ioctls make-ioctls make-ioctls.c
-endif
-
-ifeq (,$(filter-out $(sysdep_dir)/generic/ $(common-objpfx),\
- $(dir $(firstword $(wildcard $(+sysdep_dirs:%=%/sys/syscall.h))))))
-
-# The syscall code assumes a file <sys/syscall.h> that defines macros
-# `SYS_call' for syscall `call'. Variations on this I have seen include:
-# it's in <sys/syscall.h>;
-# it's in <sys.s>;
-# it defines `CALL' instead of `SYS_call'.
-# Irix has a <syscall.h> which is not what we want, so check for <sys.s> first.
-
-# Find a file that might have these. NOTE: This list of possibilities is
-# repeated in sysdeps/unix/configure and the two should be kept in sync.
-syscall.h := $(firstword $(wildcard $(addprefix $(sysincludedir)/, \
- sys.s sys/sys.s \
- sys.S sys/sys.S \
- syscall.h sys/syscall.h \
- )))
-ifdef syscall.h
-
-# Transmogrify any of several formats of the file into the one we want.
-$(common-objpfx)sys/syscall.h: $(syscall.h)
- $(make-target-directory)
- tr '[A-Z]' '[a-z]' < $< | \
- sed -e 's/[ ]sys_/ /' \
- -e 's/^#define[ ]*\([a-z0-9_]*\)[ ]*/#define SYS_\1 /' \
- -e 's/[ ]sys_/ SYS_/' \
- -e 's/SYS_syscall_basenum/syscall_basenum/g' \
- -e 's/SYS_kerncall_basenum/kerncall_basenum/g' \
- -e 's/SYS_sysvoffset/sysvoffset/g' \
- -e '/^#/!d' \
- -e '/^#ident/d' \
- -e 's-\(/\*[^*]*\)$$-\1\*/-' \
- > $@-tmp
- mv $@-tmp $@
-
-before-compile += $(common-objpfx)sys/syscall.h
-common-generated += sys/syscall.h
-
-endif
-
-endif
-
ifndef inhibit-unix-syscalls
# Sysdep dirs unix/... can contain a file syscalls.list,
diff --git a/sysdeps/unix/errnos-tmpl.c b/sysdeps/unix/errnos-tmpl.c
deleted file mode 100644
index 3a9793ead9..0000000000
--- a/sysdeps/unix/errnos-tmpl.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright (C) 1991, 1993, 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-
-static char iferrno[] = "#ifdef _ERRNO_H";
-static char endiferrno[] = "#endif /* <errno.h> included. */";
-static char ifEmath[] = "#if !defined(__Emath_defined) && \
- (defined(_ERRNO_H) || defined(__need_Emath))";
-static char endifEmath[] = "#endif /* Emath not defined and <errno.h> \
-included or need Emath. */";
-
-static int biggest_value = 0;
-static int done_ENOSYS = 0;
-static int done_ERANGE = 0, done_EDOM = 0;
-
-static void
-DO(name, value)
- char *name;
- int value;
-{
- int is_ERANGE = !done_ERANGE && !strcmp(name, "ERANGE");
- int is_EDOM = !done_EDOM && !strcmp(name, "EDOM");
- int is_Emath = is_ERANGE || is_EDOM;
-
- if (is_Emath)
- {
- puts(endiferrno);
- puts(ifEmath);
- }
-
- if (!strcmp (name, "EWOULDBLOCK"))
- {
- puts ("#define EWOULDBLOCK EAGAIN /* Translated in glibc. */");
- name = "EWOULDBLOCK_sys /* Value actually returned by kernel. */";
- }
-
- printf ("#define %s %d\n", name, value);
-
- if (is_Emath)
- {
- puts(endifEmath);
- puts(iferrno);
- }
-
- if (value > biggest_value)
- biggest_value = value;
-
- if (is_ERANGE)
- done_ERANGE = 1;
- else if (is_EDOM)
- done_EDOM = 1;
- else if (!done_ENOSYS && !strcmp(name, "ENOSYS"))
- done_ENOSYS = 1;
-}
-
-int
-main()
-{
- puts(iferrno);
-
- ERRNOS;
-
- if (!done_EDOM || !done_ERANGE)
- {
- puts(endiferrno);
- puts(ifEmath);
- if (!done_EDOM)
- printf("#define EDOM %d\n", ++biggest_value);
- if (!done_ERANGE)
- printf("#define ERANGE %d\n", ++biggest_value);
- puts(endifEmath);
- }
-
- if (!done_ENOSYS)
- printf("#define ENOSYS %d\n", ++biggest_value);
-
- puts(endiferrno);
-
- puts("#undef __need_Emath");
- puts("#ifndef __Emath_defined\n#define __Emath_defined 1\n#endif");
-
- exit(0);
-}
diff --git a/sysdeps/unix/errnos.awk b/sysdeps/unix/errnos.awk
deleted file mode 100644
index 8648f41fb2..0000000000
--- a/sysdeps/unix/errnos.awk
+++ /dev/null
@@ -1,12 +0,0 @@
-BEGIN { special = 0 }
-
-/ERRNOS/ { nerrnos = split(errnos, errs)
- for (i = 1; i <= nerrnos; ++i)
- # Some systems define errno codes inside undefined #ifdefs,
- # and then never actually use them.
- printf "#ifdef %s\n DO(\"%s\", %s);\n#endif\n", \
- errs[i], errs[i], errs[i]
- special = 1 }
-
-
-{ if (special == 0) print $0; special = 0 }
diff --git a/sysdeps/unix/i386/start.c b/sysdeps/unix/i386/start.c
deleted file mode 100644
index e6c89ee3f3..0000000000
--- a/sysdeps/unix/i386/start.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define DUMMIES dummy0
-#include <sysdeps/unix/start.c>
diff --git a/sysdeps/unix/ioctls-tmpl.c b/sysdeps/unix/ioctls-tmpl.c
deleted file mode 100644
index 1c973c945a..0000000000
--- a/sysdeps/unix/ioctls-tmpl.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* On SVR4, this #define is necessary to make <sys/ioctl.h> define
- many of the ioctls. */
-#define BSD_COMP
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-/* On SunOS 4.1, <sys/ioctl.h> and <sys/termios.h> define some symbols
- with different values, but <sys/termios.h> defines some ioctl symbols
- not in <sys/ioctl.h>, so we need it. Our <sys/ioctl.h> should define
- them with the values from Sun's <sys/ioctl.h>, not <sys/termios.h>.
- So we include <sys/termios.h> and let <sys/ioctl.h> redefine things.
- This produces some spurious warnings. */
-
-#ifdef HAVE_sys_termios_h
-#include <sys/termios.h>
-#endif
-
-/* This causes <sys/ioctl.h> to define some necessary data structure. */
-#ifdef sony_news
-#define KANJI
-#endif
-
-#include <sys/ioctl.h>
-
-#ifdef SIOCGIFCONF
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <net/if.h>
-#include <net/route.h>
-#if defined(SIOCGARP) && !defined(ARPOP_REQUEST)
-#include <net/if_arp.h>
-#endif
-#ifdef SIOCGNIT
-#ifdef HAVE_net_nit_h
-#include <net/nit.h>
-#else /* No net/nit.h. */
-#undef SIOCGNIT
-#undef SIOCSNIT
-#endif /* net/nit.h. */
-#endif /* SIOCGNIT. */
-#endif /* SIOCGIFCONF. */
-
-/* These exist on Sequents. */
-#ifdef SMIOSTATS
-#include <sec/sec.h>
-#include <sec/sm.h>
-#endif
-#ifdef SMIOGETREBOOT0
-#include <i386/cfg.h>
-#endif
-#ifdef ZIOCBCMD
-#include <zdc/zdc.h>
-#endif
-
-/* These exist under Ultrix, but I figured there may be others. */
-#ifdef DIOCGETPT
-#include <ufs/fs.h> /* for DIOC* */
-#endif
-#ifdef DEVGETGEOM
-#include <sys/devio.h>
-#endif
-
-#ifdef ultrix
-/* Ultrix has a conditional include that brings these in; we have to force
- their inclusion when we actually compile them. */
-#undef TCGETA
-#undef TCSETA
-#undef TCSETAW
-#undef TCSETAF
-#undef TCGETP
-#undef TCSANOW
-#undef TCSADRAIN
-#undef TCSAFLUSH
-#ifdef ELSETPID
-#include <sys/un.h> /* get sockaddr_un for elcsd.h */
-#include <elcsd.h>
-#endif
-#ifdef DKIOCDOP
-#include <sys/dkio.h>
-#endif
-/* Couldn't find the header where the structures used by these are
- defined; it looks like an unbundled LAT package or something. */
-#undef LIOCSOL
-#undef LIOCRES
-#undef LIOCCMD
-#undef LIOCINI
-#undef LIOCTTYI
-#undef LIOCCONN
-/* struct mtop hasn't been in sys/mtio.h since 4.1 */
-#undef MTIOCTOP
-#undef MTIOCGET
-#endif
-
-#if defined(__osf__) && defined(__alpha__)
-#include <sys/ioctl_compat.h> /* To get TIOCGETP, etc. */
-#include <alpha/pt.h> /* for DIOC* */
-#include <sys/mtio.h> /* for MTIOC* */
-/* The binlog_getstatus structure doesn't seem to be defined. */
-#undef BINLOG_GETSTATUS
-/* Can't find `struct ifdata' anywhere. */
-#undef SIOCMANREQ
-#undef SIOCGETEVENTS
-/* OSF/1 smells an awful lot like Ultrix. */
-#undef TCGETA
-#undef TCSETA
-#undef TCSETAF
-#undef TCSETAW
-/* This macro looks screwed in sys/devio.h. */
-#undef DEV_DISKPART
-/* This is in sys/dkio.h, but we don't need it. */
-#undef DKIOCACC
-#undef DKIOCDOP
-#undef DKIOCEXCL
-#undef DKIOCGET
-#undef DKIOCHDR
-/* Introduced by OSF/1 2.0. */
-#undef FIOPIPESTAT
-#undef SIOCSRREQR
-#undef SIOCSRREQW
-#undef SRVC_REQUEST
-#endif
-
-#define DEFINE(name, value) \
- printf("#define %s 0x%.8x\n", (name), (value))
-
-int
-main()
-{
- REQUESTS
-
- exit(0);
- return 0;
-}
diff --git a/sysdeps/unix/ioctls.awk b/sysdeps/unix/ioctls.awk
deleted file mode 100644
index b05140af7a..0000000000
--- a/sysdeps/unix/ioctls.awk
+++ /dev/null
@@ -1,10 +0,0 @@
-BEGIN { special = 0 }
-
-/REQUESTS/ { nreqs = split(requests, reqs)
- for (i = 1; i <= nreqs; ++i)
- printf "#ifdef\t%s\n DEFINE(\"%s\", %s);\n#endif\n", \
- reqs[i], reqs[i], reqs[i]
- special = 1 }
-
-
-{ if (special == 0) print $0; special = 0 }
diff --git a/sysdeps/unix/mk-local_lim.c b/sysdeps/unix/mk-local_lim.c
deleted file mode 100644
index 3ed2426a87..0000000000
--- a/sysdeps/unix/mk-local_lim.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (C) 1993, 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifdef HAVE_SYS_LIMITS_H
-#include <sys/limits.h>
-#endif
-
-/* Generate bits/local_lim.h from the values defined in the system's
- headers. */
-
-struct param
- {
- char *name;
- int value;
- };
-
-static struct param params[] =
- {
-
-#if !defined (ARG_MAX) && defined (NCARGS)
-#define ARG_MAX NCARGS
-#endif
-#ifdef ARG_MAX
- { "ARG_MAX", ARG_MAX },
-#endif
-
-#if !defined (CHILD_MAX) && defined (MAXUPRC)
-#define CHILD_MAX MAXUPRC
-#endif
-#ifdef CHILD_MAX
- { "CHILD_MAX", CHILD_MAX },
-#endif
-
-#if !defined (LINK_MAX) && defined (MAXLINK)
-#define LINK_MAX MAXLINK
-#endif
-#ifdef LINK_MAX
- { "LINK_MAX", LINK_MAX },
-#endif
-
-#if !defined (OPEN_MAX) && defined (NOFILE)
-#define OPEN_MAX NOFILE
-#endif
-#ifdef OPEN_MAX
- { "OPEN_MAX", OPEN_MAX },
-#endif
-
-#if !defined (MAX_CANON) && defined (CANBSIZ)
-#define MAX_CANON CANBSIZ
-#endif
-#ifdef MAX_CANON
- { "MAX_CANON", MAX_CANON },
-#endif
-
-#if !defined (NAME_MAX) && defined (MAXNAMLEN)
-#define NAME_MAX MAXNAMLEN
-#endif
-#ifndef NAME_MAX
-#define NAME_MAX 255 /* XXX ? */
-#endif
- { "NAME_MAX", NAME_MAX },
-
-#if !defined (PATH_MAX) && defined (MAXPATHLEN)
-#define PATH_MAX MAXPATHLEN
-#endif
-#ifdef PATH_MAX
- { "PATH_MAX", PATH_MAX },
-#endif
-
-#if !defined (SYMLOOP_MAX) && defined (MAXSYMLINKS)
-#define SYMLOOP_MAX MAXSYMLINKS
-#endif
-#ifdef SYMLOOP_MAX
- { "SYMLOOP_MAX", SYMLOOP_MAX },
-#endif
-
- { NULL, 0 }
- };
-
-int
-main()
-{
- extern char *ctime ();
- extern time_t time ();
- time_t now = time ((time_t *) NULL);
- register struct param *p;
-
- if (! params[0].name)
- /* We have no information to give, so let the caller know. */
- exit (1);
-
- printf ("\
-/* Implementation-specific limits.\n\
- Generated at %.24s. */\n\n", ctime (&now));
-
- for (p = params; p->name != NULL; ++p)
- printf ("#define %s %d\n", p->name, p->value);
-
- exit (0);
-}
diff --git a/sysdeps/unix/snarf-ioctls b/sysdeps/unix/snarf-ioctls
deleted file mode 100755
index a2fc023429..0000000000
--- a/sysdeps/unix/snarf-ioctls
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1991, 1992, 1995, 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 Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 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
-# Lesser General Public License for more details.
-
-# You should have received a copy of the GNU Lesser General Public
-# License along with the GNU C Library; if not, see
-# <http://www.gnu.org/licenses/>.
-
-sysincludedir=${sysincludedir-/usr/include}
-
-if [ ! "$snarfexclude" ]; then
- # Filter out some headers which cause trouble.
- # Reportedly a bug in sunos4.1.2's sed makes this lose if
- # the two cmds are in a single sed invocation.
- snarfexclude="`echo !${sysincludedir}/sys/param.h! \
- !${sysincludedir}/sys/time.h! \
- !${sysincludedir}/sys/types.h! \
- | sed 's,/,\\\\/,g' \
- | sed 's,!\\([^!]*\\)!,-e /\\1/d,g'`"
-fi
-
-for file in $*; do
- sed -n 's/^#define[ ]*\([A-Z][A-Z0-9_]*\)[ ][ ]*[^ ].*$/\1/p' \
- < $file
-
- snarfexclude="$snarfexclude \
- `echo $file | sed -e 's,/,\\\\/,g' -e 's,^.*$,-e /&/d,'`"
- export snarfexclude
-
- included="`sed -n < $file \
- -e 's,^#include[ ]*<\(.*\)>.*$,'${sysincludedir}'/\1,p'\
- | sed $snarfexclude`"
- if [ "$included" ]; then
- $0 $included
- fi
-done
-
-exit 0
diff --git a/sysdeps/unix/sparc/start.c b/sysdeps/unix/sparc/start.c
deleted file mode 100644
index 86fb8bb0a5..0000000000
--- a/sysdeps/unix/sparc/start.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Copyright (C) 1991-1997,2004,2012 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#ifndef NO_SHLIB
-#include <sys/exec.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <link.h>
-#include <syscall.h>
-#endif
-
-#if !defined (__GNUC__) || __GNUC__ < 2
- #error This file uses GNU C extensions; you must compile with GCC version 2.
-#endif
-
-/* The first piece of initialized data. */
-int __data_start = 0;
-weak_alias (__data_start, data_start)
-
-extern void __libc_init (int argc, char **argv, char **envp) __THROW;
-extern int main (int argc, char **argv, char **envp) __THROW;
-
-register long int sp asm("%sp"), fp asm("%fp");
-
-#ifndef NO_SHLIB
-static void init_shlib (void) __THROW;
-#endif
-
-#ifndef NO_EXPLICIT_START
-/* Declare _start with an explicit assembly symbol name of `start'
- (note no leading underscore). This is the name Sun's crt0.o uses,
- and programs are often linked with `ld -e start'. */
-void _start (void) asm ("start");
-#endif
-
-void
-_start (void)
-{
- /* It is important that these be declared `register'.
- Otherwise, when compiled without optimization, they are put on the
- stack, which loses completely after we zero the FP. */
- register int argc;
- register char **argv, **envp;
-
- /* Unwind the frame built when we entered the function. */
- asm("restore");
-
- /* And clear the frame pointer. */
- fp = 0;
-
- /* The argument info starts after one register
- window (64 bytes) past the SP. */
- argc = ((int *) sp)[16];
- argv = (char **) &((int *) sp)[17];
- envp = &argv[argc + 1];
- __environ = envp;
-
-#ifndef NO_SHLIB
- init_shlib ();
-#endif
-
- /* Allocate 24 bytes of stack space for the register save area. */
- sp -= 24;
- __libc_init (argc, argv, envp);
-
- exit (main (argc, argv, envp));
-}
-
-#ifndef NO_SHLIB
-
-/* System calls for use by the bootstrap routine.
- These are defined here since the usual calls may be dynamically linked. */
-
-int syscall (int sysno, ...) asm ("init_syscall");
-asm ("init_syscall:\n"
- " clr %g1\n"
- " ta 0\n"
- " bcc 1f\n"
- " sethi %hi(_errno), %g1\n"
- " st %o0, [%g1 + %lo(_errno)]\n"
- " sub %g0, 1, %o0\n"
- "1:retl\n"
- " nop");
-
-static void
-init_shlib ()
-{
- extern struct link_dynamic _DYNAMIC;
- int so, zf;
- caddr_t somap;
- caddr_t sodmap;
- caddr_t sobssmap;
- void (*ldstart) (int, int);
- struct exec soexec;
- struct
- {
- caddr_t crt_ba;
- int crt_dzfd;
- int crt_ldfd;
- struct link_dynamic *crt_dp;
- char **crt_ep;
- caddr_t crt_bp;
- } soarg;
-
- /* If not dynamically linked, do nothing. */
- if (&_DYNAMIC == 0)
- return;
-
- /* Map in the dynamic linker. */
- so = syscall (SYS_open, "/usr/lib/ld.so", O_RDONLY);
- if (syscall (SYS_read, so, &soexec, sizeof (soexec)) != sizeof (soexec)
- || soexec.a_magic != ZMAGIC)
- {
- static const char emsg[] = "crt0: no /usr/lib/ld.so\n";
-
- syscall (SYS_write, 2, emsg, sizeof (emsg) - 1);
- syscall (SYS_exit, 127);
- }
- somap = (caddr_t) syscall (SYS_mmap, 0,
- soexec.a_text + soexec.a_data + soexec.a_bss,
- PROT_READ | PROT_EXEC, _MAP_NEW | MAP_PRIVATE,
- so, 0);
- sodmap = (caddr_t) syscall (SYS_mmap, somap + soexec.a_text, soexec.a_data,
- PROT_READ | PROT_WRITE | PROT_EXEC,
- _MAP_NEW | MAP_FIXED | MAP_PRIVATE,
- so, soexec.a_text);
- zf = syscall (SYS_open, "/dev/zero", O_RDONLY);
- if (soexec.a_bss != 0)
- sobssmap = (caddr_t) syscall (SYS_mmap,
- somap + soexec.a_text + soexec.a_data,
- soexec.a_bss,
- PROT_READ | PROT_WRITE | PROT_EXEC,
- _MAP_NEW | MAP_FIXED | MAP_PRIVATE,
- zf, 0);
-
- /* Call the entry point of the dynamic linker. */
- soarg.crt_ba = somap;
- soarg.crt_dzfd = zf;
- soarg.crt_ldfd = so;
- soarg.crt_dp = &_DYNAMIC;
- soarg.crt_ep = __environ;
- soarg.crt_bp = (caddr_t) &&retaddr;
-
- ldstart = (__typeof (ldstart)) (somap + soexec.a_entry);
- (*ldstart) (1, (char *) &soarg - (char *) sp);
-
- retaddr:
-}
-
-#endif
diff --git a/sysdeps/unix/start.c b/sysdeps/unix/start.c
deleted file mode 100644
index ecedc55119..0000000000
--- a/sysdeps/unix/start.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (C) 1991, 93, 1995-1998, 2000, 2012 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sysdep.h> /* In case it wants to define anything. */
-
-/* The first piece of initialized data. */
-int __data_start = 0;
-weak_alias (__data_start, data_start)
-
-#ifdef DUMMIES
-#define ARG_DUMMIES DUMMIES,
-#define DECL_DUMMIES int DUMMIES;
-#else
-#define ARG_DUMMIES
-#define DECL_DUMMIES
-#endif
-
-extern void __libc_init (int argc, char **argv, char **envp);
-extern int main (int argc, char **argv, char **envp);
-
-
-/* Not a prototype because it gets called strangely. */
-static void start1();
-
-#ifndef HAVE__start
-
-/* N.B.: It is important that this be the first function.
- This file is the first thing in the text section. */
-void
-_start ()
-{
- start1 ();
-}
-
-#endif
-
-/* ARGSUSED */
-static void
-start1 (ARG_DUMMIES argc, argp)
- DECL_DUMMIES
- int argc;
- char *argp;
-{
- char **argv = &argp;
-
- /* The environment starts just after ARGV. */
- __environ = &argv[argc + 1];
-
- /* If the first thing after ARGV is the arguments
- themselves, there is no environment. */
- if ((char *) __environ == *argv)
- /* The environment is empty. Make __environ
- point at ARGV[ARGC], which is NULL. */
- --__environ;
-
- /* Do C library initializations. */
- __libc_init (argc, argv, __environ);
-
- /* Call the user program. */
- exit (main (argc, argv, __environ));
-}
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 458658df29..120d544289 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -33,9 +33,8 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
sys/ultrasound.h sys/raw.h sys/personality.h sys/epoll.h \
bits/a.out.h sys/inotify.h sys/signalfd.h sys/eventfd.h \
sys/timerfd.h sys/fanotify.h bits/eventfd.h bits/inotify.h \
- bits/signalfd.h bits/timerfd.h bits/epoll.h
-
-install-others += $(inst_includedir)/bits/syscall.h
+ bits/signalfd.h bits/timerfd.h bits/epoll.h \
+ bits/socket_type.h bits/syscall.h
tests += tst-clone
@@ -61,7 +60,7 @@ ifndef syscall-list-includes
syscall-list-includes := bits/wordsize.h
endif
-$(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/sys/syscall.h
+$(objpfx)bits/syscall%h $(objpfx)bits/syscall%d: ../sysdeps/unix/sysv/linux/sys/syscall.h
$(make-target-directory)
{ \
echo '/* Generated at libc build time from kernel syscall list. */';\
@@ -96,17 +95,11 @@ endif
rm -f $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v))
mv -f $(@:.h=.d)-t3 $(@:.h=.d)
-$(inst_includedir)/bits/syscall.h: $(objpfx)syscall-list.h $(+force)
- $(make-target-directory)
- if test -r $@ && cmp -s $< $@; \
- then echo 'bits/syscall.h unchanged'; \
- else $(INSTALL_DATA) $< $@; fi
-
ifndef no_deps
# Get the generated list of dependencies (probably /usr/include/asm/unistd.h).
--include $(objpfx)syscall-list.d
+-include $(objpfx)bits/syscall.d
endif
-generated += syscall-list.h syscall-list.d
+generated += bits/syscall.h bits/syscall.d
endif
ifeq ($(subdir),time)
diff --git a/sysdeps/unix/sysv/linux/bits/siginfo.h b/sysdeps/unix/sysv/linux/bits/siginfo.h
index ecef39da6a..d68a493e66 100644
--- a/sysdeps/unix/sysv/linux/bits/siginfo.h
+++ b/sysdeps/unix/sysv/linux/bits/siginfo.h
@@ -1,5 +1,5 @@
/* siginfo_t, sigevent and constants. Linux version.
- Copyright (C) 1997-2002, 2003, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2002, 2003, 2011, 2012 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
@@ -47,7 +47,7 @@ typedef union sigval
# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
# endif
-typedef struct siginfo
+typedef struct
{
int si_signo; /* Signal number. */
int si_errno; /* If non-zero, an errno value associated with
@@ -269,6 +269,12 @@ enum
# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
# endif
+/* Forward declaration. */
+# ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+# endif
+
typedef struct sigevent
{
sigval_t sigev_value;
@@ -286,7 +292,7 @@ typedef struct sigevent
struct
{
void (*_function) (sigval_t); /* Function to start. */
- void *_attribute; /* Really pthread_attr_t. */
+ pthread_attr_t *_attribute; /* Thread attributes. */
} _sigev_thread;
} _sigev_un;
} sigevent_t;
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index e4ae3c2315..7fa7eea6cf 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -35,39 +35,8 @@ typedef __socklen_t socklen_t;
# define __socklen_t_defined
#endif
-/* Types of sockets. */
-enum __socket_type
-{
- SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
- byte streams. */
-#define SOCK_STREAM SOCK_STREAM
- SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
- of fixed maximum length. */
-#define SOCK_DGRAM SOCK_DGRAM
- SOCK_RAW = 3, /* Raw protocol interface. */
-#define SOCK_RAW SOCK_RAW
- SOCK_RDM = 4, /* Reliably-delivered messages. */
-#define SOCK_RDM SOCK_RDM
- SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
- datagrams of fixed maximum length. */
-#define SOCK_SEQPACKET SOCK_SEQPACKET
- SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
-#define SOCK_DCCP SOCK_DCCP
- SOCK_PACKET = 10, /* Linux specific way of getting packets
- at the dev level. For writing rarp and
- other similar things on the user level. */
-#define SOCK_PACKET SOCK_PACKET
-
- /* Flags to be ORed into the type parameter of socket and socketpair and
- used for the flags parameter of paccept. */
-
- SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
- new descriptor(s). */
-#define SOCK_CLOEXEC SOCK_CLOEXEC
- SOCK_NONBLOCK = 04000 /* Atomically mark descriptor(s) as
- non-blocking. */
-#define SOCK_NONBLOCK SOCK_NONBLOCK
-};
+/* Get the architecture-dependent definition of enum __socket_type. */
+#include <bits/socket_type.h>
/* Protocol families. */
#define PF_UNSPEC 0 /* Unspecified. */
@@ -422,6 +391,7 @@ struct linger
__BEGIN_DECLS
+#ifdef __USE_GNU
/* Receive up to VLEN messages as described by VMESSAGES from socket FD.
Returns the number of bytes read or -1 for errors.
@@ -437,6 +407,7 @@ This function is a cancellation point and therefore not marked with
__THROW. */
extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
unsigned int __vlen, int __flags);
+#endif
__END_DECLS
diff --git a/sysdeps/unix/sysv/linux/bits/socket_type.h b/sysdeps/unix/sysv/linux/bits/socket_type.h
new file mode 100644
index 0000000000..7df2b18f8e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/bits/socket_type.h
@@ -0,0 +1,55 @@
+/* Define enum __socket_type for generic Linux.
+ Copyright (C) 1991-2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
+#endif
+
+/* Types of sockets. */
+enum __socket_type
+{
+ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
+ byte streams. */
+#define SOCK_STREAM SOCK_STREAM
+ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
+ of fixed maximum length. */
+#define SOCK_DGRAM SOCK_DGRAM
+ SOCK_RAW = 3, /* Raw protocol interface. */
+#define SOCK_RAW SOCK_RAW
+ SOCK_RDM = 4, /* Reliably-delivered messages. */
+#define SOCK_RDM SOCK_RDM
+ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
+ datagrams of fixed maximum length. */
+#define SOCK_SEQPACKET SOCK_SEQPACKET
+ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
+#define SOCK_DCCP SOCK_DCCP
+ SOCK_PACKET = 10, /* Linux specific way of getting packets
+ at the dev level. For writing rarp and
+ other similar things on the user level. */
+#define SOCK_PACKET SOCK_PACKET
+
+ /* Flags to be ORed into the type parameter of socket and socketpair and
+ used for the flags parameter of paccept. */
+
+ SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
+ new descriptor(s). */
+#define SOCK_CLOEXEC SOCK_CLOEXEC
+ SOCK_NONBLOCK = 00004000 /* Atomically mark descriptor(s) as
+ non-blocking. */
+#define SOCK_NONBLOCK SOCK_NONBLOCK
+};
diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
index 977155c4c2..7805ce7e01 100644
--- a/sysdeps/unix/sysv/linux/bits/time.h
+++ b/sysdeps/unix/sysv/linux/bits/time.h
@@ -1,5 +1,5 @@
/* System-dependent timing definitions. Linux version.
- Copyright (C) 1996,1997,1999-2003,2010,2011 Free Software Foundation, Inc.
+ Copyright (C) 1996,1997,1999-2003,2010,2011,2012 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
@@ -47,7 +47,8 @@ struct timeval
XSI-conformant systems. */
# define CLOCKS_PER_SEC 1000000l
-# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
+# if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \
+ && !defined __USE_XOPEN2K
/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
presents the real value for clock ticks per second for the system. */
# include <bits/types.h>
diff --git a/sysdeps/unix/sysv/linux/bits/uio.h b/sysdeps/unix/sysv/linux/bits/uio.h
index 0706845657..fd4dff5c64 100644
--- a/sysdeps/unix/sysv/linux/bits/uio.h
+++ b/sysdeps/unix/sysv/linux/bits/uio.h
@@ -48,8 +48,10 @@ struct iovec
#endif
-#if defined _SYS_UIO_H && !defined _BITS_UIO_H_FOR_SYS_UIO_H
-#define _BITS_UIO_H_FOR_SYS_UIO_H 1
+
+#ifdef __USE_GNU
+# if defined _SYS_UIO_H && !defined _BITS_UIO_H_FOR_SYS_UIO_H
+# define _BITS_UIO_H_FOR_SYS_UIO_H 1
__BEGIN_DECLS
@@ -71,4 +73,5 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
__END_DECLS
+# endif
#endif
diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
index c5fd66b778..31031613d3 100644
--- a/sysdeps/unix/sysv/linux/configure
+++ b/sysdeps/unix/sysv/linux/configure
@@ -242,33 +242,33 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking installed Linux kernel header files" >&5
$as_echo_n "checking installed Linux kernel header files... " >&6; }
-if ${libc_cv_linux2010+:} false; then :
+if ${libc_cv_linux2619+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <linux/version.h>
-#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (2 *65536+ 0 *256+ 10) /* 2.0.10 */
+#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (2 *65536+ 6 *256+ 19) /* 2.6.19 */
eat flaming death
#endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "eat flaming death" >/dev/null 2>&1; then :
- libc_cv_linux2010='TOO OLD!'
+ libc_cv_linux2619='TOO OLD!'
else
- libc_cv_linux2010='2.0.10 or later'
+ libc_cv_linux2619='2.6.19 or later'
fi
rm -f conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_linux2010" >&5
-$as_echo "$libc_cv_linux2010" >&6; }
-if test "$libc_cv_linux2010" != '2.0.10 or later'; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_linux2619" >&5
+$as_echo "$libc_cv_linux2619" >&6; }
+if test "$libc_cv_linux2619" != '2.6.19 or later'; then
as_fn_error $? "GNU libc requires kernel header files from
-Linux 2.0.10 or later to be installed before configuring.
+Linux 2.6.19 or later to be installed before configuring.
The kernel header files are found usually in /usr/include/asm and
/usr/include/linux; make sure these directories use files from
-Linux 2.0.10 or later. This check uses <linux/version.h>, so
+Linux 2.6.19 or later. This check uses <linux/version.h>, so
make sure that file was built correctly when installing the kernel header
files. To use kernel headers not from /usr/include/linux, use the
configure option --with-headers." "$LINENO" 5
@@ -393,7 +393,7 @@ case "$prefix" in
# and libc_cv_localedir.
test -n "$libc_cv_slibdir" || \
case $machine in
- sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64)
+ sparc/sparc64 | x86_64* | powerpc/powerpc64 | s390/s390-64)
libc_cv_slibdir="/lib64"
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib64';
diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in
index a73c3e51e1..556ca84517 100644
--- a/sysdeps/unix/sysv/linux/configure.in
+++ b/sysdeps/unix/sysv/linux/configure.in
@@ -5,7 +5,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# existing system library, because we are the only system library.
inhibit_glue=yes
-define([LIBC_LINUX_VERSION],[2.0.10])dnl
+define([LIBC_LINUX_VERSION],[2.6.19])dnl
if test -n "$sysheaders"; then
OLD_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $SYSINCLUDES"
@@ -132,7 +132,7 @@ case "$prefix" in
# and libc_cv_localedir.
test -n "$libc_cv_slibdir" || \
case $machine in
- sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64)
+ sparc/sparc64 | x86_64* | powerpc/powerpc64 | s390/s390-64)
libc_cv_slibdir="/lib64"
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib64';
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
index 874660be13..d0f41a7b2c 100644
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
@@ -84,8 +84,8 @@ _dl_setup_stack_chk_guard (void *dl_random)
return ret.num;
}
# endif
- ret.bytes[filllen - 2] = 255;
- ret.bytes[filllen - 3] = '\n';
+ ret.bytes[filllen] = 255;
+ ret.bytes[filllen - 1] = '\n';
}
else
#endif
@@ -95,9 +95,9 @@ _dl_setup_stack_chk_guard (void *dl_random)
directly and not use the kernel-provided data to seed a PRNG. */
memcpy (ret.bytes, dl_random, sizeof (ret));
#if BYTE_ORDER == LITTLE_ENDIAN
- ret.num &= ~0xff;
+ ret.num &= ~(uintptr_t) 0xff;
#elif BYTE_ORDER == BIG_ENDIAN
- ret.num &= ~(0xff << (8 * (sizeof (ret) - 1)));
+ ret.num &= ~((uintptr_t) 0xff << (8 * (sizeof (ret) - 1)));
#else
# error "BYTE_ORDER unknown"
#endif
diff --git a/sysdeps/unix/sysv/linux/fd_to_filename.h b/sysdeps/unix/sysv/linux/fd_to_filename.h
index feefc2b78e..ee939af159 100644
--- a/sysdeps/unix/sysv/linux/fd_to_filename.h
+++ b/sysdeps/unix/sysv/linux/fd_to_filename.h
@@ -19,7 +19,7 @@
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
static inline const char *
fd_to_filename (int fd)
diff --git a/sysdeps/unix/sysv/linux/futimes.c b/sysdeps/unix/sysv/linux/futimes.c
index cd76f6ffba..913bd105fc 100644
--- a/sysdeps/unix/sysv/linux/futimes.c
+++ b/sysdeps/unix/sysv/linux/futimes.c
@@ -22,7 +22,7 @@
#include <time.h>
#include <utime.h>
#include <sys/time.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <fcntl.h>
#include <kernel-features.h>
diff --git a/sysdeps/unix/sysv/linux/i386/readelflib.c b/sysdeps/unix/sysv/linux/i386/readelflib.c
index bdd5e70bc8..fab830ef5b 100644
--- a/sysdeps/unix/sysv/linux/i386/readelflib.c
+++ b/sysdeps/unix/sysv/linux/i386/readelflib.c
@@ -32,40 +32,52 @@ process_elf_file (const char *file_name, const char *lib, int *flag,
size_t file_length)
{
ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents;
- int ret;
+ int ret, file_flag = 0;
- if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
- return process_elf32_file (file_name, lib, flag, osversion, soname,
- file_contents, file_length);
- else
+ switch (elf_header->e_machine)
{
- switch (elf_header->e_machine)
+ case EM_X86_64:
+ if (elf_header->e_ident[EI_CLASS] == ELFCLASS64)
+ /* X86-64 64bit libraries are always libc.so.6+. */
+ file_flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6;
+ else
+ /* X32 libraries are always libc.so.6+. */
+ file_flag = FLAG_X8664_LIBX32|FLAG_ELF_LIBC6;
+ break;
+#ifndef SKIP_EM_IA_64
+ case EM_IA_64:
+ if (elf_header->e_ident[EI_CLASS] == ELFCLASS64)
{
- case EM_IA_64:
- case EM_X86_64:
+ /* IA64 64bit libraries are always libc.so.6+. */
+ file_flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6;
break;
- default:
- error (0, 0, _("%s is for unknown machine %d.\n"),
- file_name, elf_header->e_machine);
- return 1;
}
+ goto failed;
+#endif
+ case EM_386:
+ if (elf_header->e_ident[EI_CLASS] == ELFCLASS32)
+ break;
+ /* Fall through. */
+ default:
+#ifndef SKIP_EM_IA_64
+failed:
+#endif
+ error (0, 0, _("%s is for unknown machine %d.\n"),
+ file_name, elf_header->e_machine);
+ return 1;
+ }
- ret = process_elf64_file (file_name, lib, flag, osversion, soname,
- file_contents, file_length);
- /* IA64/X86-64 64bit libraries are always libc.so.6+. */
- if (!ret)
- switch (elf_header->e_machine)
- {
- case EM_IA_64:
- *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6;
- break;
- case EM_X86_64:
- *flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6;
- break;
- }
+ if (elf_header->e_ident[EI_CLASS] == ELFCLASS32)
+ ret = process_elf32_file (file_name, lib, flag, osversion, soname,
+ file_contents, file_length);
+ else
+ ret = process_elf64_file (file_name, lib, flag, osversion, soname,
+ file_contents, file_length);
- return ret;
- }
+ if (!ret && file_flag)
+ *flag = file_flag;
+
+ return ret;
}
#undef __ELF_NATIVE_CLASS
diff --git a/sysdeps/unix/sysv/linux/i386/register-dump.h b/sysdeps/unix/sysv/linux/i386/register-dump.h
index d2c5c3fcaf..7f54f67430 100644
--- a/sysdeps/unix/sysv/linux/i386/register-dump.h
+++ b/sysdeps/unix/sysv/linux/i386/register-dump.h
@@ -18,7 +18,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 3125be3131..ffaae5d144 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -273,11 +273,11 @@
their availability with one define. The changes were made first
for i386 and the have to be done separately for the other archs.
For i386 we pick 2.5.50 as the first version with support.
- For s390*, PPC, x86-64, and SH we pick 2.5.64 as the first
+ For s390*, SPARC, PPC, x86-64, and SH we pick 2.5.64 as the first
version with support. */
#if ((__LINUX_KERNEL_VERSION >= 132402 && defined __i386__) \
|| (__LINUX_KERNEL_VERSION >= 132416 \
- && (defined __s390__ \
+ && (defined __s390__ || defined __sparc__ \
|| defined __powerpc__ || defined __x86_64__ || defined __sh__)))
# define __ASSUME_CLONE_THREAD_FLAGS 1
#endif
@@ -322,11 +322,11 @@
#endif
/* The tgkill syscall was instroduced for i386 in 2.5.75. On x86-64,
- ppc, and ppc64 it was introduced in 2.6.0-test3. */
+ sparc, SH, ppc, and ppc64 it was introduced in 2.6.0-test3. */
#if (__LINUX_KERNEL_VERSION >= 132427 && defined __i386__) \
- || (__LINUX_KERNEL_VERSION >= 132609 && defined __x86_64__) \
- || (__LINUX_KERNEL_VERSION >= 132609 && defined __powerpc__) \
- || (__LINUX_KERNEL_VERSION >= 132609 && defined __sh__)
+ || (__LINUX_KERNEL_VERSION >= 132609 \
+ && (defined __x86_64__ || defined __powerpc__ \
+ || defined __sh__ || defined __sparc__))
# define __ASSUME_TGKILL 1
#endif
@@ -350,9 +350,10 @@
#endif
/* The fixed version of the posix_fadvise64 syscall appeared in
- 2.6.0-test3. At least for x86. Powerpc support appeared in
- 2.6.2, but for 32-bit userspace only. */
-#if (__LINUX_KERNEL_VERSION >= 132609 && defined __i386__) \
+ 2.6.0-test3. At least for x86 and sparc. Powerpc support appeared
+ in 2.6.2, but for 32-bit userspace only. */
+#if (__LINUX_KERNEL_VERSION >= 132609 \
+ && (defined __i386__ || defined __sparc__)) \
|| (__LINUX_KERNEL_VERSION >= 132610 && defined __powerpc__ \
&& !defined __powerpc64__)
# define __ASSUME_FADVISE64_64_SYSCALL 1
diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c
index 11e673fe61..62ea1e3c97 100644
--- a/sysdeps/unix/sysv/linux/openat.c
+++ b/sysdeps/unix/sysv/linux/openat.c
@@ -84,7 +84,6 @@ OPENAT_NOT_CANCEL (fd, file, oflag, mode)
oflag |= MORE_OFLAGS;
#endif
- INTERNAL_SYSCALL_DECL (err);
int res;
#ifdef __NR_openat
@@ -104,6 +103,7 @@ OPENAT_NOT_CANCEL (fd, file, oflag, mode)
#endif
#ifndef __ASSUME_ATFCTS
+ INTERNAL_SYSCALL_DECL (err);
char *buf = NULL;
if (fd != AT_FDCWD && file[0] != '/')
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
index 25491b5ca8..c02492cfbf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
@@ -1,6 +1,5 @@
/* Definitions for POSIX memory map interface. Linux/PowerPC version.
- Copyright (C) 1997,2000,2003,2005,2006,2008,2009,2011
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 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
@@ -64,6 +63,8 @@
# define MAP_NORESERVE 0x00040 /* Don't check for reservations. */
# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+# define MAP_STACK 0x20000 /* Allocation is for a stack. */
+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */
#endif
/* Flags to `msync'. */
diff --git a/sysdeps/unix/sysv/linux/powerpc/configure b/sysdeps/unix/sysv/linux/powerpc/configure
index df2813d9cd..802b371601 100644
--- a/sysdeps/unix/sysv/linux/powerpc/configure
+++ b/sysdeps/unix/sysv/linux/powerpc/configure
@@ -1,19 +1,135 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/unix/sysv/linux/powerpc/.
-{ $as_echo "$as_me:$LINENO: checking whether $CC $CFLAGS -mlong-double-128 uses IBM extended format" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC $CFLAGS -mlong-double-128 uses IBM extended format" >&5
$as_echo_n "checking whether $CC $CFLAGS -mlong-double-128 uses IBM extended format... " >&6; }
-if test "${libc_cv_mlong_double_128ibm+set}" = set; then
+if ${libc_cv_mlong_double_128ibm+:} false; then :
$as_echo_n "(cached) " >&6
else
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -mlong-double-128"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <float.h>
int
@@ -28,51 +144,26 @@ long double foobar (long double x) { return x; }
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_mlong_double_128ibm=yes
else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- libc_cv_mlong_double_128ibm=no
+ libc_cv_mlong_double_128ibm=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS="$save_CFLAGS"
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_mlong_double_128ibm" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mlong_double_128ibm" >&5
$as_echo "$libc_cv_mlong_double_128ibm" >&6; }
if test "$libc_cv_mlong_double_128ibm" = no; then
- { $as_echo "$as_me:$LINENO: checking whether $CC $CFLAGS supports -mabi=ibmlongdouble" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC $CFLAGS supports -mabi=ibmlongdouble" >&5
$as_echo_n "checking whether $CC $CFLAGS supports -mabi=ibmlongdouble... " >&6; }
-if test "${libc_cv_mabi_ibmlongdouble+set}" = set; then
+if ${libc_cv_mabi_ibmlongdouble+:} false; then :
$as_echo_n "(cached) " >&6
else
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -mlong-double-128 -mabi=ibmlongdouble"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <float.h>
int
@@ -87,43 +178,20 @@ long double foobar (long double x) { return x; }
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_mabi_ibmlongdouble=yes
else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- libc_cv_mabi_ibmlongdouble=no
+ libc_cv_mabi_ibmlongdouble=no
fi
-
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS="$save_CFLAGS"
fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_mabi_ibmlongdouble" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mabi_ibmlongdouble" >&5
$as_echo "$libc_cv_mabi_ibmlongdouble" >&6; }
if test "$libc_cv_mabi_ibmlongdouble" = yes; then
CFLAGS="$CFLAGS -mabi=ibmlongdouble"
else
- { { $as_echo "$as_me:$LINENO: error: this configuration requires -mlong-double-128 IBM extended format support" >&5
-$as_echo "$as_me: error: this configuration requires -mlong-double-128 IBM extended format support" >&2;}
- { (exit 1); exit 1; }; }
+ as_fn_error $? "this configuration requires -mlong-double-128 IBM extended format support" "$LINENO" 5
fi
fi
diff --git a/sysdeps/unix/sysv/linux/ptsname.c b/sysdeps/unix/sysv/linux/ptsname.c
index 41edd8f8fe..fb097698fb 100644
--- a/sysdeps/unix/sysv/linux/ptsname.c
+++ b/sysdeps/unix/sysv/linux/ptsname.c
@@ -26,7 +26,7 @@
#include <termios.h>
#include <unistd.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* Check if DEV corresponds to a master pseudo terminal device. */
#define MASTER_P(Dev) \
diff --git a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/bits/mman.h
index 2498e575f4..094afbe56c 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/mman.h
@@ -1,5 +1,5 @@
/* Definitions for POSIX memory map interface. Linux/s390 version.
- Copyright (C) 2000-2003,2005,2006,2009,2011 Free Software Foundation, Inc.
+ Copyright (C) 2000-2012 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
@@ -63,6 +63,8 @@
# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+# define MAP_STACK 0x20000 /* Allocation is for a stack. */
+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */
#endif
/* Flags to `msync'. */
diff --git a/sysdeps/unix/sysv/linux/s390/bits/siginfo.h b/sysdeps/unix/sysv/linux/s390/bits/siginfo.h
index 0c4bc5d2a9..baa989195b 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/siginfo.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/siginfo.h
@@ -1,5 +1,5 @@
/* siginfo_t, sigevent and constants. S/390 version.
- Copyright (C) 2001, 2002, 2003, 2009, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2009, 2011, 2012 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
@@ -47,7 +47,7 @@ typedef union sigval
# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
# endif
-typedef struct siginfo
+typedef struct
{
int si_signo; /* Signal number. */
int si_errno; /* If non-zero, an errno value associated with
@@ -271,6 +271,12 @@ enum
# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
# endif
+/* Forward declaration. */
+# ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+# endif
+
typedef struct sigevent
{
sigval_t sigev_value;
@@ -288,7 +294,7 @@ typedef struct sigevent
struct
{
void (*_function) (sigval_t); /* Function to start. */
- void *_attribute; /* Really pthread_attr_t. */
+ pthread_attr_t *_attribute; /* Thread attributes. */
} _sigev_thread;
} _sigev_un;
} sigevent_t;
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h b/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h
index 0c3b83c24b..1f1a85983e 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h
@@ -18,7 +18,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h b/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h
index 0cf89f14ca..671481df75 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h
@@ -18,7 +18,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/sh/bits/mman.h b/sysdeps/unix/sysv/linux/sh/bits/mman.h
index a15490104d..d7f2ed53ac 100644
--- a/sysdeps/unix/sysv/linux/sh/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/sh/bits/mman.h
@@ -1,6 +1,5 @@
/* Definitions for POSIX memory map interface. Linux/SH version.
- Copyright (C) 1997,1999,2000,2003,2005,2006,2009,2011
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 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
@@ -63,6 +62,8 @@
# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
# define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */
# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+# define MAP_STACK 0x20000 /* Allocation is for a stack. */
+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */
#endif
/* Flags to `msync'. */
diff --git a/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h b/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h
index 9562882eda..510863e7bf 100644
--- a/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h
+++ b/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h b/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h
index d31ca1f914..f05447c373 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h
+++ b/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/shmat.c b/sysdeps/unix/sysv/linux/shmat.c
index 2eec6a6e62..d01bb1bdb7 100644
--- a/sysdeps/unix/sysv/linux/shmat.c
+++ b/sysdeps/unix/sysv/linux/shmat.c
@@ -35,7 +35,8 @@ shmat (shmid, shmaddr, shmflg)
const void *shmaddr;
int shmflg;
{
- void *__unbounded result;
+ INTERNAL_SYSCALL_DECL(err);
+ unsigned long resultvar;
void *__unbounded raddr;
#if __BOUNDED_POINTERS__
@@ -47,12 +48,15 @@ shmat (shmid, shmaddr, shmflg)
length = shmds.shm_segsz;
#endif
- result = (void *__unbounded) INLINE_SYSCALL (ipc, 5, IPCOP_shmat,
- shmid, shmflg,
- (long int) __ptrvalue (&raddr),
- __ptrvalue ((void *) shmaddr));
- if ((unsigned long) result <= -(unsigned long) SHMLBA)
- result = raddr;
-
- return BOUNDED_N (result, length);
+ resultvar = INTERNAL_SYSCALL (ipc, err, 5, IPCOP_shmat,
+ shmid, shmflg,
+ (long int) __ptrvalue (&raddr),
+ __ptrvalue ((void *) shmaddr));
+ if (INTERNAL_SYSCALL_ERROR_P (resultvar, err))
+ {
+ __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err));
+ return (void *) -1l;
+ }
+
+ return BOUNDED_N (raddr, length);
}
diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile
index 96bf0bbd16..d769c48526 100644
--- a/sysdeps/unix/sysv/linux/sparc/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/Makefile
@@ -7,3 +7,7 @@ syscall-list-64bit-condition := __WORDSIZE == 64
ifeq ($(subdir),rt)
librt-routines += rt-sysdep
endif
+
+ifeq ($(subdir),sysvipc)
+sysdep_routines += getshmlba
+endif
diff --git a/sysdeps/unix/sysv/linux/sparc/Versions b/sysdeps/unix/sysv/linux/sparc/Versions
index 3da1a25be8..5d31d1d14a 100644
--- a/sysdeps/unix/sysv/linux/sparc/Versions
+++ b/sysdeps/unix/sysv/linux/sparc/Versions
@@ -26,6 +26,8 @@ libc {
GLIBC_2.16 {
#errlist-compat 136
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
+
+ __getshmlba;
}
}
librt {
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
index faa40c04d4..fb9c75fe2a 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
@@ -1,6 +1,5 @@
/* Definitions for POSIX memory map interface. Linux/SPARC version.
- Copyright (C) 1997,1999,2000,2003,2005,2006,2009,2011
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 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
@@ -65,6 +64,8 @@
# define _MAP_NEW 0x80000000 /* Binary compatibility with SunOS. */
# define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */
# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+# define MAP_STACK 0x20000 /* Allocation is for a stack. */
+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */
#endif
/* Flags to `msync'. */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm.h b/sysdeps/unix/sysv/linux/sparc/bits/shm.h
index b0966d61c2..eb530de98f 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/shm.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/shm.h
@@ -40,8 +40,8 @@
__BEGIN_DECLS
/* Segment low boundary address multiple. */
-#define SHMLBA (__getpagesize ())
-extern int __getpagesize (void) __THROW __attribute__ ((__const__));
+#define SHMLBA (__getshmlba ())
+extern int __getshmlba (void) __attribute__ ((__const__));
/* Type to count number of attaches. */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
index 772e54f607..4ce1bbfda5 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
@@ -1,5 +1,5 @@
/* siginfo_t, sigevent and constants. Linux/SPARC version.
- Copyright (C) 1997-2002, 2003, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-2002, 2003, 2011, 2012 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
@@ -47,7 +47,7 @@ typedef union sigval
# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
# endif
-typedef struct siginfo
+typedef struct
{
int si_signo; /* Signal number. */
int si_errno; /* If non-zero, an errno value associated with
@@ -278,6 +278,12 @@ enum
# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
# endif
+/* Forward declaration. */
+# ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t 1
+# endif
+
typedef struct sigevent
{
sigval_t sigev_value;
@@ -295,7 +301,7 @@ typedef struct sigevent
struct
{
void (*_function) (sigval_t); /* Function to start. */
- void *_attribute; /* Really pthread_attr_t. */
+ pthread_attr_t *_attribute; /* Thread attributes. */
} _sigev_thread;
} _sigev_un;
} sigevent_t;
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket.h b/sysdeps/unix/sysv/linux/sparc/bits/socket.h
deleted file mode 100644
index e1fb9416e4..0000000000
--- a/sysdeps/unix/sysv/linux/sparc/bits/socket.h
+++ /dev/null
@@ -1,436 +0,0 @@
-/* System-specific socket constants and types. Linux/SPARC version.
- Copyright (C) 1991, 1992, 1994-2001, 2004, 2006, 2007, 2008, 2009, 2011, 2012
- 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef __BITS_SOCKET_H
-#define __BITS_SOCKET_H
-
-#ifndef _SYS_SOCKET_H
-# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
-#endif
-
-#define __need_size_t
-#include <stddef.h>
-
-#include <sys/types.h>
-
-/* Type for length arguments in socket calls. */
-#ifndef __socklen_t_defined
-typedef __socklen_t socklen_t;
-# define __socklen_t_defined
-#endif
-
-/* Types of sockets. */
-enum __socket_type
-{
- SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
- byte streams. */
-#define SOCK_STREAM SOCK_STREAM
- SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
- of fixed maximum length. */
-#define SOCK_DGRAM SOCK_DGRAM
- SOCK_RAW = 3, /* Raw protocol interface. */
-#define SOCK_RAW SOCK_RAW
- SOCK_RDM = 4, /* Reliably-delivered messages. */
-#define SOCK_RDM SOCK_RDM
- SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
- datagrams of fixed maximum length. */
-#define SOCK_SEQPACKET SOCK_SEQPACKET
- SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
-#define SOCK_DCCP SOCK_DCCP
- SOCK_PACKET = 10, /* Linux specific way of getting packets
- at the dev level. For writing rarp and
- other similar things on the user level. */
-#define SOCK_PACKET SOCK_PACKET
-
- /* Flags to be ORed into the type parameter of socket and socketpair and
- used for the flags parameter of paccept. */
-
- SOCK_CLOEXEC = 0x400000, /* Atomically set close-on-exec flag for the
- new descriptor(s). */
-#define SOCK_CLOEXEC SOCK_CLOEXEC
- SOCK_NONBLOCK = 0x4000 /* Atomically mark descriptor(s) as
- non-blocking. */
-#define SOCK_NONBLOCK SOCK_NONBLOCK
-};
-
-/* Protocol families. */
-#define PF_UNSPEC 0 /* Unspecified. */
-#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */
-#define PF_UNIX PF_LOCAL /* POSIX name for PF_LOCAL. */
-#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */
-#define PF_INET 2 /* IP protocol family. */
-#define PF_AX25 3 /* Amateur Radio AX.25. */
-#define PF_IPX 4 /* Novell Internet Protocol. */
-#define PF_APPLETALK 5 /* Appletalk DDP. */
-#define PF_NETROM 6 /* Amateur radio NetROM. */
-#define PF_BRIDGE 7 /* Multiprotocol bridge. */
-#define PF_ATMPVC 8 /* ATM PVCs. */
-#define PF_X25 9 /* Reserved for X.25 project. */
-#define PF_INET6 10 /* IP version 6. */
-#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */
-#define PF_DECnet 12 /* Reserved for DECnet project. */
-#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */
-#define PF_SECURITY 14 /* Security callback pseudo AF. */
-#define PF_KEY 15 /* PF_KEY key management API. */
-#define PF_NETLINK 16
-#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */
-#define PF_PACKET 17 /* Packet family. */
-#define PF_ASH 18 /* Ash. */
-#define PF_ECONET 19 /* Acorn Econet. */
-#define PF_ATMSVC 20 /* ATM SVCs. */
-#define PF_RDS 21 /* RDS sockets. */
-#define PF_SNA 22 /* Linux SNA Project */
-#define PF_IRDA 23 /* IRDA sockets. */
-#define PF_PPPOX 24 /* PPPoX sockets. */
-#define PF_WANPIPE 25 /* Wanpipe API sockets. */
-#define PF_LLC 26 /* Linux LLC. */
-#define PF_CAN 29 /* Controller Area Network. */
-#define PF_TIPC 30 /* TIPC sockets. */
-#define PF_BLUETOOTH 31 /* Bluetooth sockets. */
-#define PF_IUCV 32 /* IUCV sockets. */
-#define PF_RXRPC 33 /* RxRPC sockets. */
-#define PF_ISDN 34 /* mISDN sockets. */
-#define PF_PHONET 35 /* Phonet sockets. */
-#define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */
-#define PF_CAIF 37 /* CAIF sockets. */
-#define PF_ALG 38 /* Algorithm sockets. */
-#define PF_NFC 39 /* NFC sockets. */
-#define PF_MAX 40 /* For now.. */
-
-/* Address families. */
-#define AF_UNSPEC PF_UNSPEC
-#define AF_LOCAL PF_LOCAL
-#define AF_UNIX PF_UNIX
-#define AF_FILE PF_FILE
-#define AF_INET PF_INET
-#define AF_AX25 PF_AX25
-#define AF_IPX PF_IPX
-#define AF_APPLETALK PF_APPLETALK
-#define AF_NETROM PF_NETROM
-#define AF_BRIDGE PF_BRIDGE
-#define AF_ATMPVC PF_ATMPVC
-#define AF_X25 PF_X25
-#define AF_INET6 PF_INET6
-#define AF_ROSE PF_ROSE
-#define AF_DECnet PF_DECnet
-#define AF_NETBEUI PF_NETBEUI
-#define AF_SECURITY PF_SECURITY
-#define AF_KEY PF_KEY
-#define AF_NETLINK PF_NETLINK
-#define AF_ROUTE PF_ROUTE
-#define AF_PACKET PF_PACKET
-#define AF_ASH PF_ASH
-#define AF_ECONET PF_ECONET
-#define AF_ATMSVC PF_ATMSVC
-#define AF_RDS PF_RDS
-#define AF_SNA PF_SNA
-#define AF_IRDA PF_IRDA
-#define AF_PPPOX PF_PPPOX
-#define AF_WANPIPE PF_WANPIPE
-#define AF_LLC PF_LLC
-#define AF_CAN PF_CAN
-#define AF_TIPC PF_TIPC
-#define AF_BLUETOOTH PF_BLUETOOTH
-#define AF_IUCV PF_IUCV
-#define AF_RXRPC PF_RXRPC
-#define AF_ISDN PF_ISDN
-#define AF_PHONET PF_PHONET
-#define AF_IEEE802154 PF_IEEE802154
-#define AF_CAIF PF_CAIF
-#define AF_ALG PF_ALG
-#define AF_NFC PF_NFC
-#define AF_MAX PF_MAX
-
-/* Socket level values. Others are defined in the appropriate headers.
-
- XXX These definitions also should go into the appropriate headers as
- far as they are available. */
-#define SOL_RAW 255
-#define SOL_DECNET 261
-#define SOL_X25 262
-#define SOL_PACKET 263
-#define SOL_ATM 264 /* ATM layer (cell level). */
-#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */
-#define SOL_IRDA 266
-
-/* Maximum queue length specifiable by listen. */
-#define SOMAXCONN 128
-
-/* Get the definition of the macro to define the common sockaddr members. */
-#include <bits/sockaddr.h>
-
-/* Structure describing a generic socket address. */
-struct sockaddr
- {
- __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
- char sa_data[14]; /* Address data. */
- };
-
-
-/* Structure large enough to hold any socket address (with the historical
- exception of AF_UNIX). We reserve 128 bytes. */
-#define __ss_aligntype unsigned long int
-#define _SS_SIZE 128
-#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
-
-struct sockaddr_storage
- {
- __SOCKADDR_COMMON (ss_); /* Address family, etc. */
- __ss_aligntype __ss_align; /* Force desired alignment. */
- char __ss_padding[_SS_PADSIZE];
- };
-
-
-/* Bits in the FLAGS argument to `send', `recv', et al. */
-enum
- {
- MSG_OOB = 0x01, /* Process out-of-band data. */
-#define MSG_OOB MSG_OOB
- MSG_PEEK = 0x02, /* Peek at incoming messages. */
-#define MSG_PEEK MSG_PEEK
- MSG_DONTROUTE = 0x04, /* Don't use local routing. */
-#define MSG_DONTROUTE MSG_DONTROUTE
-#ifdef __USE_GNU
- /* DECnet uses a different name. */
- MSG_TRYHARD = MSG_DONTROUTE,
-# define MSG_TRYHARD MSG_DONTROUTE
-#endif
- MSG_CTRUNC = 0x08, /* Control data lost before delivery. */
-#define MSG_CTRUNC MSG_CTRUNC
- MSG_PROXY = 0x10, /* Supply or ask second address. */
-#define MSG_PROXY MSG_PROXY
- MSG_TRUNC = 0x20,
-#define MSG_TRUNC MSG_TRUNC
- MSG_DONTWAIT = 0x40, /* Nonblocking IO. */
-#define MSG_DONTWAIT MSG_DONTWAIT
- MSG_EOR = 0x80, /* End of record. */
-#define MSG_EOR MSG_EOR
- MSG_WAITALL = 0x100, /* Wait for a full request. */
-#define MSG_WAITALL MSG_WAITALL
- MSG_FIN = 0x200,
-#define MSG_FIN MSG_FIN
- MSG_SYN = 0x400,
-#define MSG_SYN MSG_SYN
- MSG_CONFIRM = 0x800, /* Confirm path validity. */
-#define MSG_CONFIRM MSG_CONFIRM
- MSG_RST = 0x1000,
-#define MSG_RST MSG_RST
- MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */
-#define MSG_ERRQUEUE MSG_ERRQUEUE
- MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */
-#define MSG_NOSIGNAL MSG_NOSIGNAL
- MSG_MORE = 0x8000, /* Sender will send more. */
-#define MSG_MORE MSG_MORE
- MSG_WAITFORONE = 0x10000, /* Wait for at least one packet to return.*/
-#define MSG_WAITFORONE MSG_WAITFORONE
-
- MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file
- descriptor received through
- SCM_RIGHTS. */
-#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
- };
-
-
-/* Structure describing messages sent by
- `sendmsg' and received by `recvmsg'. */
-struct msghdr
- {
- void *msg_name; /* Address to send to/receive from. */
- socklen_t msg_namelen; /* Length of address data. */
-
- struct iovec *msg_iov; /* Vector of data to send/receive into. */
- size_t msg_iovlen; /* Number of elements in the vector. */
-
- void *msg_control; /* Ancillary data (eg BSD filedesc passing). */
- size_t msg_controllen; /* Ancillary data buffer length.
- !! The type should be socklen_t but the
- definition of the kernel is incompatible
- with this. */
-
- int msg_flags; /* Flags on received message. */
- };
-
-#ifdef __USE_GNU
-/* For `recvmmsg'. */
-struct mmsghdr
- {
- struct msghdr msg_hdr; /* Actual message header. */
- unsigned int msg_len; /* Number of received bytes for the entry. */
- };
-#endif
-
-/* Structure used for storage of ancillary data object information. */
-struct cmsghdr
- {
- size_t cmsg_len; /* Length of data in cmsg_data plus length
- of cmsghdr structure.
- !! The type should be socklen_t but the
- definition of the kernel is incompatible
- with this. */
- int cmsg_level; /* Originating protocol. */
- int cmsg_type; /* Protocol specific type. */
-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
- __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
-#endif
- };
-
-/* Ancillary data object manipulation macros. */
-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
-#else
-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
-#endif
-#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
-#define CMSG_FIRSTHDR(mhdr) \
- ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
- ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
-#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
- & (size_t) ~(sizeof (size_t) - 1))
-#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
- + CMSG_ALIGN (sizeof (struct cmsghdr)))
-#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
-
-extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
- struct cmsghdr *__cmsg) __THROW;
-#ifdef __USE_EXTERN_INLINES
-# ifndef _EXTERN_INLINE
-# define _EXTERN_INLINE __extern_inline
-# endif
-_EXTERN_INLINE struct cmsghdr *
-__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
-{
- if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
- /* The kernel header does this so there may be a reason. */
- return (struct cmsghdr *) 0;
-
- __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
- + CMSG_ALIGN (__cmsg->cmsg_len));
- if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
- + __mhdr->msg_controllen)
- || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
- > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
- /* No more entries. */
- return (struct cmsghdr *) 0;
- return __cmsg;
-}
-#endif /* Use `extern inline'. */
-
-/* Socket level message types. This must match the definitions in
- <linux/socket.h>. */
-enum
- {
- SCM_RIGHTS = 0x01 /* Transfer file descriptors. */
-#define SCM_RIGHTS SCM_RIGHTS
-#ifdef __USE_GNU
- , SCM_CREDENTIALS = 0x02 /* Credentials passing. */
-# define SCM_CREDENTIALS SCM_CREDENTIALS
-#endif
- };
-
-#ifdef __USE_GNU
-/* User visible structure for SCM_CREDENTIALS message */
-struct ucred
-{
- pid_t pid; /* PID of sending process. */
- uid_t uid; /* UID of sending process. */
- gid_t gid; /* GID of sending process. */
-};
-#endif
-
-/* Ugly workaround for unclean kernel headers. */
-#if !defined __USE_MISC && !defined __USE_GNU
-# ifndef FIOGETOWN
-# define __SYS_SOCKET_H_undef_FIOGETOWN
-# endif
-# ifndef FIOSETOWN
-# define __SYS_SOCKET_H_undef_FIOSETOWN
-# endif
-# ifndef SIOCATMARK
-# define __SYS_SOCKET_H_undef_SIOCATMARK
-# endif
-# ifndef SIOCGPGRP
-# define __SYS_SOCKET_H_undef_SIOCGPGRP
-# endif
-# ifndef SIOCGSTAMP
-# define __SYS_SOCKET_H_undef_SIOCGSTAMP
-# endif
-# ifndef SIOCGSTAMPNS
-# define __SYS_SOCKET_H_undef_SIOCGSTAMPNS
-# endif
-# ifndef SIOCSPGRP
-# define __SYS_SOCKET_H_undef_SIOCSPGRP
-# endif
-#endif
-
-/* Get socket manipulation related informations from kernel headers. */
-#include <asm/socket.h>
-
-#if !defined __USE_MISC && !defined __USE_GNU
-# ifdef __SYS_SOCKET_H_undef_FIOGETOWN
-# undef __SYS_SOCKET_H_undef_FIOGETOWN
-# undef FIOGETOWN
-# endif
-# ifdef __SYS_SOCKET_H_undef_FIOSETOWN
-# undef __SYS_SOCKET_H_undef_FIOSETOWN
-# undef FIOSETOWN
-# endif
-# ifdef __SYS_SOCKET_H_undef_SIOCATMARK
-# undef __SYS_SOCKET_H_undef_SIOCATMARK
-# undef SIOCATMARK
-# endif
-# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP
-# undef __SYS_SOCKET_H_undef_SIOCGPGRP
-# undef SIOCGPGRP
-# endif
-# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP
-# undef __SYS_SOCKET_H_undef_SIOCGSTAMP
-# undef SIOCGSTAMP
-# endif
-# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
-# undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
-# undef SIOCGSTAMPNS
-# endif
-# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP
-# undef __SYS_SOCKET_H_undef_SIOCSPGRP
-# undef SIOCSPGRP
-# endif
-#endif
-
-/* Structure used to manipulate the SO_LINGER option. */
-struct linger
- {
- int l_onoff; /* Nonzero to linger on close. */
- int l_linger; /* Time to linger. */
- };
-
-
-__BEGIN_DECLS
-
-/* Receive a message as described by MESSAGE from socket FD.
- Returns the number of bytes read or -1 for errors.
-
- This function is a cancellation point and therefore not marked with
- __THROW. */
-extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
- unsigned int __vlen, int __flags,
- const struct timespec *__tmo);
-
-__END_DECLS
-
-#endif /* bits/socket.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket_type.h b/sysdeps/unix/sysv/linux/sparc/bits/socket_type.h
new file mode 100644
index 0000000000..b9f429e80a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/bits/socket_type.h
@@ -0,0 +1,55 @@
+/* Define enum __socket_type for Linux/SPARC.
+ Copyright (C) 1991-2012 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
+#endif
+
+/* Types of sockets. */
+enum __socket_type
+{
+ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
+ byte streams. */
+#define SOCK_STREAM SOCK_STREAM
+ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
+ of fixed maximum length. */
+#define SOCK_DGRAM SOCK_DGRAM
+ SOCK_RAW = 3, /* Raw protocol interface. */
+#define SOCK_RAW SOCK_RAW
+ SOCK_RDM = 4, /* Reliably-delivered messages. */
+#define SOCK_RDM SOCK_RDM
+ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
+ datagrams of fixed maximum length. */
+#define SOCK_SEQPACKET SOCK_SEQPACKET
+ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
+#define SOCK_DCCP SOCK_DCCP
+ SOCK_PACKET = 10, /* Linux specific way of getting packets
+ at the dev level. For writing rarp and
+ other similar things on the user level. */
+#define SOCK_PACKET SOCK_PACKET
+
+ /* Flags to be ORed into the type parameter of socket and socketpair and
+ used for the flags parameter of paccept. */
+
+ SOCK_CLOEXEC = 0x400000, /* Atomically set close-on-exec flag for the
+ new descriptor(s). */
+#define SOCK_CLOEXEC SOCK_CLOEXEC
+ SOCK_NONBLOCK = 0x004000 /* Atomically mark descriptor(s) as
+ non-blocking. */
+#define SOCK_NONBLOCK SOCK_NONBLOCK
+};
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c b/sysdeps/unix/sysv/linux/sparc/getshmlba.c
index c30d8e0aaa..205bed2720 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c
+++ b/sysdeps/unix/sysv/linux/sparc/getshmlba.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997, 2002, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2012
+ 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
@@ -16,30 +17,24 @@
<http://www.gnu.org/licenses/>. */
#include <unistd.h>
-#include <sys/param.h>
+#include <sys/shm.h>
#include <ldsodefs.h>
-#include <sysdep.h>
-
-/* Return the system page size. This value will either be 4k or 8k depending
- on whether or not we are running on Sparc v9 machine. */
-
-/* If we are not a static program, this value is collected from the system
- via the AT_PAGESZ auxiliary argument. If we are a static program, we
- use the getpagesize system call. */
int
-__getpagesize ()
+__getshmlba (void)
{
- int ret = GLRO(dl_pagesize);
- if (ret == 0)
+ uint64_t hwcap = GLRO(dl_hwcap);
+ int pgsz = GLRO(dl_pagesize);
+
+ if (hwcap & HWCAP_SPARC_V9)
{
- INTERNAL_SYSCALL_DECL (err);
- ret = INTERNAL_SYSCALL (getpagesize, err, 0);
-#ifndef SHARED
- GLRO(dl_pagesize) = ret;
-#endif
+ if (pgsz < (16 * 1024))
+ return 16 * 1024;
+ else
+ return pgsz;
}
- return ret;
+ else if (!(hwcap & HWCAP_SPARC_FLUSH))
+ return 64 * 1024;
+ else
+ return 256 * 1024;
}
-libc_hidden_def (__getpagesize)
-weak_alias (__getpagesize, getpagesize)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S
index 7246e893a7..0b3361b0f0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S
@@ -67,15 +67,9 @@ ENTRY (____longjmp_chk)
or %o0, %lo(longjmp_msg), %o0
#else
SETUP_PIC_REG(l7)
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(longjmp_msg), %o0
xor %o0, %gdop_lox10(longjmp_msg), %o0
ld [%l7 + %o0], %o0, %gdop(longjmp_msg)
-#else
- sethi %hi(longjmp_msg), %o0
- or %o0, %lo(longjmp_msg), %o0
- ld [%l7 + %o0], %o0
-#endif
#endif
call HIDDEN_JUMPTARGET(__fortify_fail)
nop
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h b/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h
index 0d0cdd6bb2..be6ad74ae1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h
@@ -18,7 +18,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
index 3d6042e9ec..3424598566 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
@@ -88,8 +88,7 @@ ENTRY(name); \
mov %g1, %o7;
#else
# if RTLD_PRIVATE_ERRNO
-# ifdef HAVE_BINUTILS_GOTDATA
-# define SYSCALL_ERROR_HANDLER \
+# define SYSCALL_ERROR_HANDLER \
0: SETUP_PIC_REG_LEAF(o2,g1) \
sethi %gdop_hix22(rtld_errno), %g1; \
xor %g1, %gdop_lox10(rtld_errno), %g1;\
@@ -97,16 +96,6 @@ ENTRY(name); \
st %o0, [%g1]; \
jmp %o7 + 8; \
mov -1, %o0;
-# else
-# define SYSCALL_ERROR_HANDLER \
-0: SETUP_PIC_REG_LEAF(o2,g1) \
- sethi %hi(rtld_errno), %g1; \
- or %g1, %lo(rtld_errno), %g1; \
- ld [%o2 + %g1], %g1; \
- st %o0, [%g1]; \
- jmp %o7 + 8; \
- mov -1, %o0;
-# endif
# elif defined _LIBC_REENTRANT
# ifndef NOT_IN_libc
@@ -123,8 +112,7 @@ ENTRY(name); \
jmp %o7 + 8; \
mov -1, %o0;
# else
-# ifdef HAVE_BINUTILS_GOTDATA
-# define SYSCALL_ERROR_HANDLER \
+# define SYSCALL_ERROR_HANDLER \
0: SETUP_PIC_REG_LEAF(o2,g1) \
sethi %gdop_hix22(errno), %g1;\
xor %g1, %gdop_lox10(errno), %g1;\
@@ -132,16 +120,6 @@ ENTRY(name); \
st %o0, [%g1]; \
jmp %o7 + 8; \
mov -1, %o0;
-# else
-# define SYSCALL_ERROR_HANDLER \
-0: SETUP_PIC_REG_LEAF(o2,g1) \
- sethi %hi(errno), %g1; \
- or %g1, %lo(errno), %g1; \
- ld [%o2 + %g1], %g1; \
- st %o0, [%g1]; \
- jmp %o7 + 8; \
- mov -1, %o0;
-# endif
# endif /* _LIBC_REENTRANT */
#endif /* PIC */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S
index 69cf5acb38..9b4e1e74f8 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S
@@ -67,15 +67,9 @@ ENTRY (____longjmp_chk)
or %o0, %lo(longjmp_msg), %o0
#else
SETUP_PIC_REG(l7)
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(longjmp_msg), %o0
xor %o0, %gdop_lox10(longjmp_msg), %o0
ldx [%l7 + %o0], %o0, %gdop(longjmp_msg)
-#else
- sethi %hi(longjmp_msg), %o0
- or %o0, %lo(longjmp_msg), %o0
- ldx [%l7 + %o0], %o0
-#endif
#endif
call HIDDEN_JUMPTARGET(__fortify_fail)
nop
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
index a89d8775e1..14b2967acb 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
@@ -64,15 +64,9 @@ ENTRY (__brk)
sethi %hi(__curbrk), %g1
or %g1, %lo(__curbrk), %g1
#else
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(__curbrk), %g1
xor %g1, %gdop_lox10(__curbrk), %g1
ldx [%l7 + %g1], %g1, %gdop(__curbrk)
-#else
- sethi %hi(__curbrk), %g1
- or %g1, %lo(__curbrk), %g1
- ldx [%l7 + %g1], %g1
-#endif
#endif
stx %o0, [%g1]
mov %g0, %i0
@@ -89,15 +83,9 @@ ENTRY (__brk)
sethi %hi(errno), %g1
or %g1, %lo(errno), %g1
#else
-#ifdef HAVE_BINUTILS_GOTDATA
sethi %gdop_hix22(errno), %g1
xor %g1, %gdop_lox10(errno), %g1
ldx [%l7 + %g1], %g1, %gdop(errno)
-#else
- sethi %hi(errno), %g1
- or %g1, %lo(errno), %g1
- ldx [%l7 + %g1], %g1
-#endif
#endif
st %o0, [%g1]
#else
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c
new file mode 100644
index 0000000000..339e5f4335
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c
@@ -0,0 +1,6 @@
+/* In this implementation we do not really care whether the call fails
+ because of missing kernel support since we do not even call the
+ function in this case. */
+#undef __ASSUME_ATFCTS
+#define __ASSUME_ATFCTS 1
+#include "fxstatat.c"
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c b/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
index e181d9d36b..e3cea9fb50 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
@@ -1,5 +1,5 @@
/* Get frequency of the system processor. sparc64 version.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2012 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
@@ -154,6 +154,22 @@ __get_clockfreq_via_proc_openprom (void)
return result;
}
+static void set_obp_int (struct openpromio *op, int val)
+{
+ char *cp = op->oprom_array;
+ int *ip = (int *) cp;
+
+ *ip = val;
+}
+
+static int get_obp_int (struct openpromio *op)
+{
+ char *cp = op->oprom_array;
+ int *ip = (int *) cp;
+
+ return *ip;
+}
+
static hp_timing_t
__get_clockfreq_via_dev_openprom (void)
{
@@ -171,11 +187,11 @@ __get_clockfreq_via_dev_openprom (void)
obp_cmd->oprom_size =
sizeof (obp_buf) - sizeof (unsigned int);
- *(int *) obp_cmd->oprom_array = 0;
+ set_obp_int (obp_cmd, 0);
ret = ioctl (obp_dev_fd, OPROMCHILD, (char *) obp_cmd);
if (ret == 0)
{
- int cur_node = *(int *) obp_cmd->oprom_array;
+ int cur_node = get_obp_int (obp_cmd);
while (cur_node != 0 && cur_node != -1)
{
@@ -190,15 +206,14 @@ __get_clockfreq_via_dev_openprom (void)
strcpy (obp_cmd->oprom_array, "clock-frequency");
ret = ioctl (obp_dev_fd, OPROMGETPROP, (char *) obp_cmd);
if (ret == 0)
- result =
- (hp_timing_t) *(unsigned int *) obp_cmd->oprom_array;
+ result = (hp_timing_t) get_obp_int (obp_cmd);
}
obp_cmd->oprom_size = sizeof (obp_buf) - sizeof (unsigned int);
- *(int *) obp_cmd->oprom_array = cur_node;
+ set_obp_int (obp_cmd, cur_node);
ret = ioctl (obp_dev_fd, OPROMNEXT, (char *) obp_cmd);
if (ret < 0)
break;
- cur_node = *(int *)obp_cmd->oprom_array;
+ cur_node = get_obp_int (obp_cmd);
}
}
}
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
index 3bb4e7a28b..e925040d14 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c
@@ -29,9 +29,9 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
va_list ap;
int i;
- sp = (long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
+ sp = (unsigned long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
sp -= (argc > 6 ? argc : 6) + 32;
- sp = (long *) (((long) sp) & -16L);
+ sp = (unsigned long *) (((long) sp) & -16L);
topsp = sp + (argc > 6 ? argc : 6) + 16;
ucp->uc_mcontext.mc_gregs[MC_PC] = (long) func;
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h b/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h
index 8ef6fde2fb..d8e76264f5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h
@@ -18,7 +18,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
index 33e1a41165..1bf75973fc 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
@@ -95,8 +95,7 @@ ENTRY(name); \
mov %g1, %o7;
#else
# if RTLD_PRIVATE_ERRNO
-# ifdef HAVE_BINUTILS_GOTDATA
-# define SYSCALL_ERROR_HANDLER \
+# define SYSCALL_ERROR_HANDLER \
0: SETUP_PIC_REG_LEAF(o2,g1) \
sethi %gdop_hix22(rtld_errno), %g1; \
xor %g1, %gdop_lox10(rtld_errno), %g1;\
@@ -104,16 +103,6 @@ ENTRY(name); \
st %o0, [%g1]; \
jmp %o7 + 8; \
mov -1, %o0;
-# else
-# define SYSCALL_ERROR_HANDLER \
-0: SETUP_PIC_REG_LEAF(o2,g1) \
- sethi %hi(rtld_errno), %g1; \
- or %g1, %lo(rtld_errno), %g1; \
- ldx [%o2 + %g1], %g1; \
- st %o0, [%g1]; \
- jmp %o7 + 8; \
- mov -1, %o0;
-# endif
# elif defined _LIBC_REENTRANT
# ifndef NOT_IN_libc
@@ -130,8 +119,7 @@ ENTRY(name); \
jmp %o7 + 8; \
mov -1, %o0;
# else
-# ifdef HAVE_BINUTILS_GOTDATA
-# define SYSCALL_ERROR_HANDLER \
+# define SYSCALL_ERROR_HANDLER \
0: SETUP_PIC_REG_LEAF(o2,g1) \
sethi %gdop_hix22(errno), %g1;\
xor %g1, %gdop_lox10(errno), %g1;\
@@ -139,16 +127,6 @@ ENTRY(name); \
st %o0, [%g1]; \
jmp %o7 + 8; \
mov -1, %o0;
-# else
-# define SYSCALL_ERROR_HANDLER \
-0: SETUP_PIC_REG_LEAF(o2,g1) \
- sethi %hi(errno), %g1; \
- or %g1, %lo(errno), %g1; \
- ldx [%o2 + %g1], %g1; \
- st %o0, [%g1]; \
- jmp %o7 + 8; \
- mov -1, %o0;
-# endif
# endif /* _LIBC_REENTRANT */
#endif /* PIC */
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h
index 336c8538b5..fc955c236c 100644
--- a/sysdeps/unix/sysv/linux/sparc/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002-2004, 2007, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2000.
@@ -22,13 +22,13 @@
#undef INLINE_SYSCALL
#define INLINE_SYSCALL(name, nr, args...) \
({ INTERNAL_SYSCALL_DECL(err); \
- unsigned int resultvar = INTERNAL_SYSCALL(name, err, nr, args); \
- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, err), 0)) \
+ unsigned long resultvar = INTERNAL_SYSCALL(name, err, nr, args);\
+ if (INTERNAL_SYSCALL_ERROR_P (resultvar, err)) \
{ \
__set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err)); \
- resultvar = 0xffffffff; \
+ resultvar = (unsigned long) -1; \
} \
- (int) resultvar; \
+ (long) resultvar; \
})
#undef INTERNAL_SYSCALL_DECL
@@ -44,7 +44,8 @@
inline_syscall##nr(__SYSCALL_STRING, err, name, args)
#undef INTERNAL_SYSCALL_ERROR_P
-#define INTERNAL_SYSCALL_ERROR_P(val, err) ((err) != 0)
+#define INTERNAL_SYSCALL_ERROR_P(val, err) \
+ ((void) (val), __builtin_expect((err) != 0, 0))
#undef INTERNAL_SYSCALL_ERRNO
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
@@ -152,7 +153,7 @@
"0" (__g1), "1" (__o0), "2" (__o1), \
"r" (__o2), "r" (__o3), "r" (__o4) : \
__SYSCALL_CLOBBERS); \
- if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (__o0, __g1), 0)) \
+ if (INTERNAL_SYSCALL_ERROR_P (__o0, __g1)) \
{ \
__set_errno (INTERNAL_SYSCALL_ERRNO (__o0, __g1)); \
__o0 = -1L; \
diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
index 70b2d51a00..0cfb4740b8 100644
--- a/sysdeps/unix/sysv/linux/ttyname.c
+++ b/sysdeps/unix/sysv/linux/ttyname.c
@@ -27,7 +27,7 @@
#include <string.h>
#include <stdlib.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <kernel-features.h>
#if 0
diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
index a12849a777..f097311a15 100644
--- a/sysdeps/unix/sysv/linux/ttyname_r.c
+++ b/sysdeps/unix/sysv/linux/ttyname_r.c
@@ -27,7 +27,7 @@
#include <string.h>
#include <stdlib.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
#include <kernel-features.h>
static int getttyname_r (char *buf, size_t buflen,
diff --git a/sysdeps/unix/sysv/linux/x86_64/dl-cache.h b/sysdeps/unix/sysv/linux/x86_64/dl-cache.h
index 8463fea3d9..e14151d42b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/dl-cache.h
+++ b/sysdeps/unix/sysv/linux/x86_64/dl-cache.h
@@ -21,4 +21,31 @@
#define _dl_cache_check_flags(flags) \
((flags) == _DL_CACHE_DEFAULT_ID)
-#include <sysdeps/unix/sysv/linux/sparc/dl-cache.h>
+#define add_system_dir(dir) \
+ do \
+ { \
+ size_t len = strlen (dir); \
+ char path[len + 4]; \
+ memcpy (path, dir, len + 1); \
+ if (len >= 6 && ! memcmp (path + len - 6, "/lib64", 6)) \
+ { \
+ len -= 2; \
+ path[len] = '\0'; \
+ } \
+ else if (len >= 7 \
+ && ! memcmp (path + len - 7, "/libx32", 7)) \
+ { \
+ len -= 3; \
+ path[len] = '\0'; \
+ } \
+ add_dir (path); \
+ if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \
+ { \
+ memcpy (path + len, "64", 3); \
+ add_dir (path); \
+ memcpy (path + len, "x32", 4); \
+ add_dir (path); \
+ } \
+ } while (0)
+
+#include <sysdeps/generic/dl-cache.h>
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
index a13948b10f..e41fddb297 100644
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
+++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
@@ -30,7 +30,7 @@ gettimeofday_ifunc (void)
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
/* If the vDSO is not available we fall back on the old vsyscall. */
- return (_dl_vdso_vsym ("gettimeofday", &linux26)
+ return (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26)
?: (void *) VSYSCALL_ADDR_vgettimeofday);
}
__asm (".type __gettimeofday, %gnu_indirect_function");
diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c
index 0a9948b3fe..e8b52eacb0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/init-first.c
+++ b/sysdeps/unix/sysv/linux/x86_64/init-first.c
@@ -36,13 +36,13 @@ _libc_vdso_platform_setup (void)
{
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
- void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
+ void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
if (p == NULL)
p = __syscall_clock_gettime;
PTR_MANGLE (p);
__GI___vdso_clock_gettime = p;
- p = _dl_vdso_vsym ("getcpu", &linux26);
+ p = _dl_vdso_vsym ("__vdso_getcpu", &linux26);
/* If the vDSO is not available we fall back on the old vsyscall. */
#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
if (p == NULL)
diff --git a/sysdeps/unix/sysv/linux/x86_64/ldconfig.h b/sysdeps/unix/sysv/linux/x86_64/ldconfig.h
index af4d1b5ad9..6f5b828f44 100644
--- a/sysdeps/unix/sysv/linux/x86_64/ldconfig.h
+++ b/sysdeps/unix/sysv/linux/x86_64/ldconfig.h
@@ -19,6 +19,7 @@
#define SYSDEP_KNOWN_INTERPRETER_NAMES \
{ "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, \
+ { "/libx32/ld-linux-x32.so.2", FLAG_ELF_LIBC6 }, \
{ "/lib64/ld-linux-x86-64.so.2", FLAG_ELF_LIBC6 },
#define SYSDEP_KNOWN_LIBRARY_NAMES \
{ "libc.so.6", FLAG_ELF_LIBC6 }, \
diff --git a/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
index 3f1530d314..44d76e8aa1 100644
--- a/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
+++ b/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
@@ -1,3 +1,3 @@
/LD_TRACE_LOADED_OBJECTS=1/a\
add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"
-s_^\(RTLDLIST=\)\(.*lib\)\(\|64\)\(/[^/]*\)\(-x86-64\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \264\4\5\6"_
+s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-x32\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \264\4-x86-64\6 \2x32\4-x32\6"_
diff --git a/sysdeps/unix/sysv/linux/x86_64/makecontext.c b/sysdeps/unix/sysv/linux/x86_64/makecontext.c
index 860925f46d..54730312ad 100644
--- a/sysdeps/unix/sysv/linux/x86_64/makecontext.c
+++ b/sysdeps/unix/sysv/linux/x86_64/makecontext.c
@@ -52,29 +52,30 @@ void
__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
{
extern void __start_context (void);
- unsigned long int *sp, idx_uc_link;
+ greg_t *sp;
+ unsigned int idx_uc_link;
va_list ap;
int i;
/* Generate room on stack for parameter if needed and uc_link. */
- sp = (unsigned long int *) ((uintptr_t) ucp->uc_stack.ss_sp
- + ucp->uc_stack.ss_size);
+ sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp
+ + ucp->uc_stack.ss_size);
sp -= (argc > 6 ? argc - 6 : 0) + 1;
/* Align stack and make space for trampoline address. */
- sp = (unsigned long int *) ((((uintptr_t) sp) & -16L) - 8);
+ sp = (greg_t *) ((((uintptr_t) sp) & -16L) - 8);
idx_uc_link = (argc > 6 ? argc - 6 : 0) + 1;
/* Setup context ucp. */
/* Address to jump to. */
- ucp->uc_mcontext.gregs[REG_RIP] = (long int) func;
+ ucp->uc_mcontext.gregs[REG_RIP] = (uintptr_t) func;
/* Setup rbx.*/
- ucp->uc_mcontext.gregs[REG_RBX] = (long int) &sp[idx_uc_link];
- ucp->uc_mcontext.gregs[REG_RSP] = (long int) sp;
+ ucp->uc_mcontext.gregs[REG_RBX] = (uintptr_t) &sp[idx_uc_link];
+ ucp->uc_mcontext.gregs[REG_RSP] = (uintptr_t) sp;
/* Setup stack. */
- sp[0] = (unsigned long int) &__start_context;
- sp[idx_uc_link] = (unsigned long int) ucp->uc_link;
+ sp[0] = (uintptr_t) &__start_context;
+ sp[idx_uc_link] = (uintptr_t) ucp->uc_link;
va_start (ap, argc);
/* Handle arguments.
@@ -90,26 +91,26 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
switch (i)
{
case 0:
- ucp->uc_mcontext.gregs[REG_RDI] = va_arg (ap, long int);
+ ucp->uc_mcontext.gregs[REG_RDI] = va_arg (ap, greg_t);
break;
case 1:
- ucp->uc_mcontext.gregs[REG_RSI] = va_arg (ap, long int);
+ ucp->uc_mcontext.gregs[REG_RSI] = va_arg (ap, greg_t);
break;
case 2:
- ucp->uc_mcontext.gregs[REG_RDX] = va_arg (ap, long int);
+ ucp->uc_mcontext.gregs[REG_RDX] = va_arg (ap, greg_t);
break;
case 3:
- ucp->uc_mcontext.gregs[REG_RCX] = va_arg (ap, long int);
+ ucp->uc_mcontext.gregs[REG_RCX] = va_arg (ap, greg_t);
break;
case 4:
- ucp->uc_mcontext.gregs[REG_R8] = va_arg (ap, long int);
+ ucp->uc_mcontext.gregs[REG_R8] = va_arg (ap, greg_t);
break;
case 5:
- ucp->uc_mcontext.gregs[REG_R9] = va_arg (ap, long int);
+ ucp->uc_mcontext.gregs[REG_R9] = va_arg (ap, greg_t);
break;
default:
/* Put value on stack. */
- sp[i - 5] = va_arg (ap, unsigned long int);
+ sp[i - 5] = va_arg (ap, greg_t);
break;
}
va_end (ap);
diff --git a/sysdeps/unix/sysv/linux/x86_64/readelflib.c b/sysdeps/unix/sysv/linux/x86_64/readelflib.c
index 7aa68ff7e5..4c4e5f9d1a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/readelflib.c
+++ b/sysdeps/unix/sysv/linux/x86_64/readelflib.c
@@ -1,61 +1,2 @@
-/* Copyright (C) 1999, 2001, 2002, 2005 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Andreas Jaeger <aj@suse.de>, 1999 and
- Jakub Jelinek <jakub@redhat.com>, 1999.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-
-int process_elf32_file (const char *file_name, const char *lib, int *flag,
- unsigned int *osversion, char **soname,
- void *file_contents, size_t file_length);
-int process_elf64_file (const char *file_name, const char *lib, int *flag,
- unsigned int *osversion, char **soname,
- void *file_contents, size_t file_length);
-
-/* Returns 0 if everything is ok, != 0 in case of error. */
-int
-process_elf_file (const char *file_name, const char *lib, int *flag,
- unsigned int *osversion, char **soname, void *file_contents,
- size_t file_length)
-{
- ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents;
- int ret;
-
- if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
- return process_elf32_file (file_name, lib, flag, osversion, soname,
- file_contents, file_length);
- else
- {
- ret = process_elf64_file (file_name, lib, flag, osversion, soname,
- file_contents, file_length);
- /* x86-64 64bit libraries are always libc.so.6+. */
- if (!ret)
- *flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6;
- return ret;
- }
-}
-
-#undef __ELF_NATIVE_CLASS
-#undef process_elf_file
-#define process_elf_file process_elf32_file
-#define __ELF_NATIVE_CLASS 32
-#include "elf/readelflib.c"
-
-#undef __ELF_NATIVE_CLASS
-#undef process_elf_file
-#define process_elf_file process_elf64_file
-#define __ELF_NATIVE_CLASS 64
-#include "elf/readelflib.c"
+#define SKIP_EM_IA_64
+#include <sysdeps/unix/sysv/linux/i386/readelflib.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/register-dump.h b/sysdeps/unix/sysv/linux/x86_64/register-dump.h
index 83157916d9..3ef8e09b6b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/register-dump.h
+++ b/sysdeps/unix/sysv/linux/x86_64/register-dump.h
@@ -17,7 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <sys/uio.h>
-#include <stdio-common/_itoa.h>
+#include <_itoa.h>
/* We will print the register dump in this format:
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.c
index 67afff3061..0e05ddd523 100644
--- a/sysdeps/unix/sysv/linux/x86_64/time.c
+++ b/sysdeps/unix/sysv/linux/x86_64/time.c
@@ -28,7 +28,7 @@ time_ifunc (void)
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
/* If the vDSO is not available we fall back on the old vsyscall. */
- return _dl_vdso_vsym ("time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
+ return _dl_vdso_vsym ("__vdso_time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
}
__asm (".type time, %gnu_indirect_function");
diff --git a/sysdeps/x86_64/bits/atomic.h b/sysdeps/x86_64/bits/atomic.h
index 4a0d40b34c..100943fa1e 100644
--- a/sysdeps/x86_64/bits/atomic.h
+++ b/sysdeps/x86_64/bits/atomic.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2004, 2006, 2007, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -55,41 +55,10 @@ typedef uintmax_t uatomic_max_t;
#endif
-#if __GNUC_PREREQ (4, 1)
-# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
__sync_val_compare_and_swap (mem, oldval, newval)
-# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
+#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
(! __sync_bool_compare_and_swap (mem, oldval, newval))
-#else
-# define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgb %b2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "q" (newval), "m" (*mem), "0" (oldval)); \
- ret; })
-
-# define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgw %w2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "r" (newval), "m" (*mem), "0" (oldval)); \
- ret; })
-
-# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgl %2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "r" (newval), "m" (*mem), "0" (oldval)); \
- ret; })
-
-# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
- ({ __typeof (*mem) ret; \
- __asm __volatile (LOCK_PREFIX "cmpxchgq %q2, %1" \
- : "=a" (ret), "=m" (*mem) \
- : "r" ((long int) (newval)), "m" (*mem), \
- "0" ((long int) (oldval))); \
- ret; })
-#endif
#define __arch_c_compare_and_exchange_val_8_acq(mem, newval, oldval) \
@@ -132,8 +101,8 @@ typedef uintmax_t uatomic_max_t;
"lock\n" \
"0:\tcmpxchgq %q2, %1" \
: "=a" (ret), "=m" (*mem) \
- : "q" ((long int) (newval)), "m" (*mem), \
- "0" ((long int)oldval), \
+ : "q" ((atomic64_t) (newval)), "m" (*mem), \
+ "0" ((atomic64_t) (oldval)), \
"i" (offsetof (tcbhead_t, multiple_threads))); \
ret; })
@@ -156,7 +125,7 @@ typedef uintmax_t uatomic_max_t;
else \
__asm __volatile ("xchgq %q0, %1" \
: "=r" (result), "=m" (*mem) \
- : "0" ((long) (newvalue)), "m" (*mem)); \
+ : "0" ((atomic64_t) (newvalue)), "m" (*mem)); \
result; })
@@ -180,17 +149,12 @@ typedef uintmax_t uatomic_max_t;
else \
__asm __volatile (lock "xaddq %q0, %1" \
: "=r" (result), "=m" (*mem) \
- : "0" ((long) (value)), "m" (*mem), \
+ : "0" ((atomic64_t) (value)), "m" (*mem), \
"i" (offsetof (tcbhead_t, multiple_threads))); \
result; })
-#if __GNUC_PREREQ (4, 1)
-# define atomic_exchange_and_add(mem, value) \
+#define atomic_exchange_and_add(mem, value) \
__sync_fetch_and_add (mem, value)
-#else
-# define atomic_exchange_and_add(mem, value) \
- __arch_exchange_and_add_body (LOCK_PREFIX, mem, value)
-#endif
#define __arch_exchange_and_add_cprefix \
"cmpl $0, %%fs:%P4\n\tje 0f\n\tlock\n0:\t"
@@ -223,7 +187,7 @@ typedef uintmax_t uatomic_max_t;
else \
__asm __volatile (lock "addq %q1, %0" \
: "=m" (*mem) \
- : "ir" ((long) (value)), "m" (*mem), \
+ : "ir" ((atomic64_t) (value)), "m" (*mem), \
"i" (offsetof (tcbhead_t, multiple_threads))); \
} while (0)
@@ -254,7 +218,7 @@ typedef uintmax_t uatomic_max_t;
else \
__asm __volatile (LOCK_PREFIX "addq %q2, %0; sets %1" \
: "=m" (*mem), "=qm" (__result) \
- : "ir" ((long) (value)), "m" (*mem)); \
+ : "ir" ((atomic64_t) (value)), "m" (*mem)); \
__result; })
@@ -275,7 +239,7 @@ typedef uintmax_t uatomic_max_t;
else \
__asm __volatile (LOCK_PREFIX "addq %q2, %0; setz %1" \
: "=m" (*mem), "=qm" (__result) \
- : "ir" ((long) (value)), "m" (*mem)); \
+ : "ir" ((atomic64_t) (value)), "m" (*mem)); \
__result; })
diff --git a/sysdeps/x86_64/bits/link.h b/sysdeps/x86_64/bits/link.h
index c79eda846d..fa2091085f 100644
--- a/sysdeps/x86_64/bits/link.h
+++ b/sysdeps/x86_64/bits/link.h
@@ -20,7 +20,7 @@
#endif
-#if __ELF_NATIVE_CLASS == 32
+#ifndef __x86_64__
/* Registers for entry into PLT on IA-32. */
typedef struct La_i86_regs
{
@@ -105,6 +105,8 @@ typedef struct La_x86_64_retval
La_x86_64_vector lrv_vector1;
} La_x86_64_retval;
+#define La_x32_regs La_x86_64_regs
+#define La_x32_retval La_x86_64_retval
__BEGIN_DECLS
@@ -124,6 +126,22 @@ extern unsigned int la_x86_64_gnu_pltexit (Elf64_Sym *__sym,
La_x86_64_retval *__outregs,
const char *__symname);
+extern Elf32_Addr la_x32_gnu_pltenter (Elf32_Sym *__sym,
+ unsigned int __ndx,
+ uintptr_t *__refcook,
+ uintptr_t *__defcook,
+ La_x32_regs *__regs,
+ unsigned int *__flags,
+ const char *__symname,
+ long int *__framesizep);
+extern unsigned int la_x32_gnu_pltexit (Elf32_Sym *__sym,
+ unsigned int __ndx,
+ uintptr_t *__refcook,
+ uintptr_t *__defcook,
+ const La_x32_regs *__inregs,
+ La_x32_retval *__outregs,
+ const char *__symname);
+
__END_DECLS
#endif
diff --git a/sysdeps/x86_64/bits/mathdef.h b/sysdeps/x86_64/bits/mathdef.h
index 846a350a0e..c202ad5928 100644
--- a/sysdeps/x86_64/bits/mathdef.h
+++ b/sysdeps/x86_64/bits/mathdef.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2004, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2012 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
@@ -22,9 +22,7 @@
#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
# define _MATH_H_MATHDEF 1
-# include <bits/wordsize.h>
-
-# if __WORDSIZE == 64 || (defined __FLT_EVAL_METHOD__ && __FLT_EVAL_METHOD__ == 0)
+# if defined __x86_64__ || (defined __FLT_EVAL_METHOD__ && __FLT_EVAL_METHOD__ == 0)
/* The x86-64 architecture computes values with the precission of the
used type. Similarly for -m32 -mfpmath=sse. */
typedef float float_t; /* `float' expressions are evaluated as `float'. */
diff --git a/sysdeps/x86_64/bits/setjmp.h b/sysdeps/x86_64/bits/setjmp.h
index a66ca0fa5a..bb6920d44e 100644
--- a/sysdeps/x86_64/bits/setjmp.h
+++ b/sysdeps/x86_64/bits/setjmp.h
@@ -29,6 +29,8 @@
# if __WORDSIZE == 64
typedef long int __jmp_buf[8];
+# elif defined __x86_64__
+typedef long long int __jmp_buf[8];
# else
typedef int __jmp_buf[6];
# endif
diff --git a/sysdeps/x86_64/configure b/sysdeps/x86_64/configure
index bd699bbccb..d737107566 100644
--- a/sysdeps/x86_64/configure
+++ b/sysdeps/x86_64/configure
@@ -1,3 +1,371 @@
-# The i386 fragment also works for x86_64.
-. $srcdir/sysdeps/i386/configure
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+# This file is generated from configure.in by Autoconf. DO NOT EDIT!
+ # Local configure fragment for sysdeps/x86_64.
+
+
+ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */
+"
+if test "x$ac_cv_header_cpuid_h" = xyes; then :
+
+else
+ as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -g produces usable source locations for assembler-with-cpp" >&5
+$as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; }
+if ${libc_cv_cpp_asm_debuginfo+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.S <<EOF
+#include "confdefs.h"
+
+/* comment on
+ two lines */
+ ${libc_cv_dot_text}
+ ${libc_cv_asm_global_directive} foo
+foo:
+ /* Unfortunately this test only works for a real instruction,
+ not for any of the machine-independent pseudo-ops.
+ So we just have to assume everybody has a "nop". */
+ nop
+ /* comment */
+ nop
+ /* comment */
+ nop
+EOF
+if { ac_try='${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } && {
+ ac_pattern='conftest\.S'
+ { ac_try='readelf --debug-dump=line conftest.o |
+ grep $ac_pattern 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ }; then
+ libc_cv_cpp_asm_debuginfo=yes
+else
+ libc_cv_cpp_asm_debuginfo=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cpp_asm_debuginfo" >&5
+$as_echo "$libc_cv_cpp_asm_debuginfo" >&6; }
+if test $libc_cv_cpp_asm_debuginfo = yes; then
+ $as_echo "#define HAVE_CPP_ASM_DEBUGINFO 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5
+$as_echo_n "checking for SSE4 support... " >&6; }
+if ${libc_cv_cc_sse4+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ libc_cv_cc_sse4=yes
+else
+ libc_cv_cc_sse4=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse4" >&5
+$as_echo "$libc_cv_cc_sse4" >&6; }
+if test $libc_cv_cc_sse4 = yes; then
+ $as_echo "#define HAVE_SSE4_SUPPORT 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5
+$as_echo_n "checking for AVX support... " >&6; }
+if ${libc_cv_cc_avx+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if { ac_try='${CC-cc} -mavx -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ libc_cv_cc_avx=yes
+else
+ libc_cv_cc_avx=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx" >&5
+$as_echo "$libc_cv_cc_avx" >&6; }
+if test $libc_cv_cc_avx = yes; then
+ $as_echo "#define HAVE_AVX_SUPPORT 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX encoding of SSE instructions" >&5
+$as_echo_n "checking for AVX encoding of SSE instructions... " >&6; }
+if ${libc_cv_cc_sse2avx+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if { ac_try='${CC-cc} -msse2avx -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ libc_cv_cc_sse2avx=yes
+else
+ libc_cv_cc_sse2avx=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse2avx" >&5
+$as_echo "$libc_cv_cc_sse2avx" >&6; }
+if test $libc_cv_cc_sse2avx = yes; then
+ $as_echo "#define HAVE_SSE2AVX_SUPPORT 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA4 support" >&5
+$as_echo_n "checking for FMA4 support... " >&6; }
+if ${libc_cv_cc_fma4+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if { ac_try='${CC-cc} -mfma4 -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ libc_cv_cc_fma4=yes
+else
+ libc_cv_cc_fma4=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_fma4" >&5
+$as_echo "$libc_cv_cc_fma4" >&6; }
+if test $libc_cv_cc_fma4 = yes; then
+ $as_echo "#define HAVE_FMA4_SUPPORT 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mno-vzeroupper support" >&5
+$as_echo_n "checking for -mno-vzeroupper support... " >&6; }
+if ${libc_cv_cc_novzeroupper+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if { ac_try='${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ libc_cv_cc_novzeroupper=yes
+else
+ libc_cv_cc_novzeroupper=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5
+$as_echo "$libc_cv_cc_novzeroupper" >&6; }
+
+# Check for support of thread-local storage handling in assembler and linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86-64 TLS support" >&5
+$as_echo_n "checking for x86-64 TLS support... " >&6; }
+if ${libc_cv_x86_64_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.s <<\EOF
+ .section ".tdata", "awT", @progbits
+ .globl foo
+foo: .quad 1
+ .section ".tbss", "awT", @nobits
+ .globl bar
+bar: .skip 8
+ .text
+baz: leaq bar@TLSLD(%rip), %rdi
+ leaq bar@DTPOFF(%rax), %rcx
+ addq foo@GOTTPOFF(%rip), %rax
+ movq $bar@TPOFF, %rdx
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ libc_cv_x86_64_tls=yes
+else
+ libc_cv_x86_64_tls=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x86_64_tls" >&5
+$as_echo "$libc_cv_x86_64_tls" >&6; }
+if test $libc_cv_x86_64_tls = no; then
+ as_fn_error $? "the assembler must support TLS" "$LINENO" 5
+fi
+
+$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
+
+# work around problem with autoconf and empty lines at the end of files
diff --git a/sysdeps/x86_64/configure.in b/sysdeps/x86_64/configure.in
new file mode 100644
index 0000000000..e3bf103fd1
--- /dev/null
+++ b/sysdeps/x86_64/configure.in
@@ -0,0 +1,111 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/x86_64.
+
+AC_CHECK_HEADER([cpuid.h], ,
+ [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
+ [/* No default includes. */])
+
+AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
+ libc_cv_cpp_asm_debuginfo, [dnl
+cat > conftest.S <<EOF
+#include "confdefs.h"
+
+/* comment on
+ two lines */
+ ${libc_cv_dot_text}
+ ${libc_cv_asm_global_directive} foo
+foo:
+ /* Unfortunately this test only works for a real instruction,
+ not for any of the machine-independent pseudo-ops.
+ So we just have to assume everybody has a "nop". */
+ nop
+ /* comment */
+ nop
+ /* comment */
+ nop
+EOF
+if AC_TRY_COMMAND([${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&AS_MESSAGE_LOG_FD]) && {
+ ac_pattern='conftest\.S'
+ AC_TRY_COMMAND([readelf --debug-dump=line conftest.o |
+ grep $ac_pattern 1>&AS_MESSAGE_LOG_FD])
+ }; then
+ libc_cv_cpp_asm_debuginfo=yes
+else
+ libc_cv_cpp_asm_debuginfo=no
+fi
+rm -f conftest*])AC_SUBST(libc_cv_cpp_asm_debuginfo)
+if test $libc_cv_cpp_asm_debuginfo = yes; then
+ AC_DEFINE(HAVE_CPP_ASM_DEBUGINFO)
+fi
+
+dnl Check if -msse4 works.
+AC_CACHE_CHECK(for SSE4 support, libc_cv_cc_sse4, [dnl
+LIBC_TRY_CC_OPTION([-msse4], [libc_cv_cc_sse4=yes], [libc_cv_cc_sse4=no])
+])
+if test $libc_cv_cc_sse4 = yes; then
+ AC_DEFINE(HAVE_SSE4_SUPPORT)
+fi
+
+dnl Check if -mavx works.
+AC_CACHE_CHECK(for AVX support, libc_cv_cc_avx, [dnl
+LIBC_TRY_CC_OPTION([-mavx], [libc_cv_cc_avx=yes], [libc_cv_cc_avx=no])
+])
+if test $libc_cv_cc_avx = yes; then
+ AC_DEFINE(HAVE_AVX_SUPPORT)
+fi
+
+dnl Check if -msse2avx works.
+AC_CACHE_CHECK(for AVX encoding of SSE instructions, libc_cv_cc_sse2avx, [dnl
+LIBC_TRY_CC_OPTION([-msse2avx],
+ [libc_cv_cc_sse2avx=yes],
+ [libc_cv_cc_sse2avx=no])
+])
+if test $libc_cv_cc_sse2avx = yes; then
+ AC_DEFINE(HAVE_SSE2AVX_SUPPORT)
+fi
+
+dnl Check if -mfma4 works.
+AC_CACHE_CHECK(for FMA4 support, libc_cv_cc_fma4, [dnl
+LIBC_TRY_CC_OPTION([-mfma4], [libc_cv_cc_fma4=yes], [libc_cv_cc_fma4=no])
+])
+if test $libc_cv_cc_fma4 = yes; then
+ AC_DEFINE(HAVE_FMA4_SUPPORT)
+fi
+
+dnl Check if -mno-vzeroupper works.
+AC_CACHE_CHECK(for -mno-vzeroupper support, libc_cv_cc_novzeroupper, [dnl
+LIBC_TRY_CC_OPTION([-mno-vzeroupper],
+ [libc_cv_cc_novzeroupper=yes],
+ [libc_cv_cc_novzeroupper=no])
+])
+
+# Check for support of thread-local storage handling in assembler and linker.
+AC_CACHE_CHECK(for x86-64 TLS support, libc_cv_x86_64_tls, [dnl
+cat > conftest.s <<\EOF
+ .section ".tdata", "awT", @progbits
+ .globl foo
+foo: .quad 1
+ .section ".tbss", "awT", @nobits
+ .globl bar
+bar: .skip 8
+ .text
+baz: leaq bar@TLSLD(%rip), %rdi
+ leaq bar@DTPOFF(%rax), %rcx
+ addq foo@GOTTPOFF(%rip), %rax
+ movq $bar@TPOFF, %rdx
+EOF
+dnl
+if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_x86_64_tls=yes
+else
+ libc_cv_x86_64_tls=no
+fi
+rm -f conftest*])
+if test $libc_cv_x86_64_tls = no; then
+ AC_MSG_ERROR([the assembler must support TLS])
+fi
+
+dnl It is always possible to access static and hidden symbols in an
+dnl position independent way.
+AC_DEFINE(PI_STATIC_AND_HIDDEN)
+# work around problem with autoconf and empty lines at the end of files
diff --git a/sysdeps/x86_64/dl-irel.h b/sysdeps/x86_64/dl-irel.h
index bc7e54e985..830f5db8c8 100644
--- a/sysdeps/x86_64/dl-irel.h
+++ b/sysdeps/x86_64/dl-irel.h
@@ -25,23 +25,23 @@
#define ELF_MACHINE_IRELA 1
-static inline Elf64_Addr
+static inline ElfW(Addr)
__attribute ((always_inline))
-elf_ifunc_invoke (Elf64_Addr addr)
+elf_ifunc_invoke (ElfW(Addr) addr)
{
- return ((Elf64_Addr (*) (void)) (addr)) ();
+ return ((ElfW(Addr) (*) (void)) (addr)) ();
}
static inline void
__attribute ((always_inline))
-elf_irela (const Elf64_Rela *reloc)
+elf_irela (const ElfW(Rela) *reloc)
{
- Elf64_Addr *const reloc_addr = (void *) reloc->r_offset;
- const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info);
+ ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset;
+ const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info);
if (__builtin_expect (r_type == R_X86_64_IRELATIVE, 1))
{
- Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend);
+ ElfW(Addr) value = elf_ifunc_invoke(reloc->r_addend);
*reloc_addr = value;
}
else
diff --git a/sysdeps/x86_64/dl-tls.h b/sysdeps/x86_64/dl-tls.h
index 4de5815605..56162ee64a 100644
--- a/sysdeps/x86_64/dl-tls.h
+++ b/sysdeps/x86_64/dl-tls.h
@@ -20,8 +20,8 @@
/* Type used for the representation of TLS information in the GOT. */
typedef struct dl_tls_index
{
- unsigned long int ti_module;
- unsigned long int ti_offset;
+ uint64_t ti_module;
+ uint64_t ti_offset;
} tls_index;
diff --git a/sysdeps/x86_64/dl-tlsdesc.h b/sysdeps/x86_64/dl-tlsdesc.h
index 82a010922d..06ede02148 100644
--- a/sysdeps/x86_64/dl-tlsdesc.h
+++ b/sysdeps/x86_64/dl-tlsdesc.h
@@ -29,14 +29,24 @@
/* Type used to represent a TLS descriptor in the GOT. */
struct tlsdesc
{
- ptrdiff_t (*entry)(struct tlsdesc *on_rax);
- void *arg;
+ /* Anonymous union is used here to ensure that GOT entry slot is always
+ 8 bytes for both x32 and x86-64. */
+ union
+ {
+ ptrdiff_t (*entry) (struct tlsdesc *on_rax);
+ uint64_t entry_slot;
+ };
+ union
+ {
+ void *arg;
+ uint64_t arg_slot;
+ };
};
typedef struct dl_tls_index
{
- unsigned long int ti_module;
- unsigned long int ti_offset;
+ uint64_t ti_module;
+ uint64_t ti_offset;
} tls_index;
/* Type used as the argument in a TLS descriptor for a symbol that
diff --git a/sysdeps/x86_64/elf/configure b/sysdeps/x86_64/elf/configure
deleted file mode 100644
index 7f2b313bc4..0000000000
--- a/sysdeps/x86_64/elf/configure
+++ /dev/null
@@ -1,125 +0,0 @@
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/x86_64/elf.
-
-# Check for support of thread-local storage handling in assembler and linker.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86-64 TLS support" >&5
-$as_echo_n "checking for x86-64 TLS support... " >&6; }
-if ${libc_cv_x86_64_tls+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat > conftest.s <<\EOF
- .section ".tdata", "awT", @progbits
- .globl foo
-foo: .quad 1
- .section ".tbss", "awT", @nobits
- .globl bar
-bar: .skip 8
- .text
-baz: leaq bar@TLSLD(%rip), %rdi
- leaq bar@DTPOFF(%rax), %rcx
- addq foo@GOTTPOFF(%rip), %rax
- movq $bar@TPOFF, %rdx
-EOF
-if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- libc_cv_x86_64_tls=yes
-else
- libc_cv_x86_64_tls=no
-fi
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x86_64_tls" >&5
-$as_echo "$libc_cv_x86_64_tls" >&6; }
-if test $libc_cv_x86_64_tls = no; then
- as_fn_error $? "the assembler must support TLS" "$LINENO" 5
-fi
-
-$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
-
-# work around problem with autoconf and empty lines at the end of files
diff --git a/sysdeps/x86_64/elf/configure.in b/sysdeps/x86_64/elf/configure.in
deleted file mode 100644
index c53328b4c9..0000000000
--- a/sysdeps/x86_64/elf/configure.in
+++ /dev/null
@@ -1,33 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/x86_64/elf.
-
-# Check for support of thread-local storage handling in assembler and linker.
-AC_CACHE_CHECK(for x86-64 TLS support, libc_cv_x86_64_tls, [dnl
-cat > conftest.s <<\EOF
- .section ".tdata", "awT", @progbits
- .globl foo
-foo: .quad 1
- .section ".tbss", "awT", @nobits
- .globl bar
-bar: .skip 8
- .text
-baz: leaq bar@TLSLD(%rip), %rdi
- leaq bar@DTPOFF(%rax), %rcx
- addq foo@GOTTPOFF(%rip), %rax
- movq $bar@TPOFF, %rdx
-EOF
-dnl
-if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_x86_64_tls=yes
-else
- libc_cv_x86_64_tls=no
-fi
-rm -f conftest*])
-if test $libc_cv_x86_64_tls = no; then
- AC_MSG_ERROR([the assembler must support TLS])
-fi
-
-dnl It is always possible to access static and hidden symbols in an
-dnl position independent way.
-AC_DEFINE(PI_STATIC_AND_HIDDEN)
-# work around problem with autoconf and empty lines at the end of files
diff --git a/sysdeps/x86_64/ffsll.c b/sysdeps/x86_64/ffsll.c
index 2808770868..a7a5dc8583 100644
--- a/sysdeps/x86_64/ffsll.c
+++ b/sysdeps/x86_64/ffsll.c
@@ -1,7 +1,7 @@
/* ffsll -- find first set bit in a word, counted from least significant end.
For AMD x86-64.
This file is part of the GNU C Library.
- Copyright (C) 1991,92,93,94,97,98,2001 Free Software Foundation, Inc.
+ Copyright (C) 1991-2012 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@cygnus.com>.
The GNU C Library is free software; you can redistribute it and/or
@@ -36,5 +36,7 @@ ffsll (long long int x)
return cnt + 1;
}
+#ifdef __LP64__
#undef ffsl
weak_alias (ffsll, ffsl)
+#endif
diff --git a/sysdeps/x86_64/fpu/bits/fenv.h b/sysdeps/x86_64/fpu/bits/fenv.h
index 502437676d..bb790c936a 100644
--- a/sysdeps/x86_64/fpu/bits/fenv.h
+++ b/sysdeps/x86_64/fpu/bits/fenv.h
@@ -19,9 +19,6 @@
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
#endif
-#include <bits/wordsize.h>
-
-
/* Define bits representing the exception. We use the bit positions
of the appropriate bits in the FPU control word. */
enum
@@ -81,7 +78,7 @@ typedef struct
unsigned int __data_offset;
unsigned short int __data_selector;
unsigned short int __unused5;
-#if __WORDSIZE == 64
+#ifdef __x86_64__
unsigned int __mxcsr;
#endif
}
diff --git a/sysdeps/x86_64/fpu/bits/mathinline.h b/sysdeps/x86_64/fpu/bits/mathinline.h
index 5a9ce8b1b0..c072f16a21 100644
--- a/sysdeps/x86_64/fpu/bits/mathinline.h
+++ b/sysdeps/x86_64/fpu/bits/mathinline.h
@@ -20,8 +20,6 @@
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
#endif
-#include <bits/wordsize.h>
-
#ifndef __extern_always_inline
# define __MATH_INLINE __inline
#else
@@ -38,7 +36,7 @@ __BEGIN_NAMESPACE_C99
__MATH_INLINE int
__NTH (__signbitf (float __x))
{
-# if __WORDSIZE == 32
+# ifndef __x86_64__
__extension__ union { float __f; int __i; } __u = { __f: __x };
return __u.__i < 0;
# else
@@ -50,7 +48,7 @@ __NTH (__signbitf (float __x))
__MATH_INLINE int
__NTH (__signbit (double __x))
{
-# if __WORDSIZE == 32
+# ifndef __x86_64__
__extension__ union { double __d; int __i[2]; } __u = { __d: __x };
return __u.__i[1] < 0;
# else
@@ -94,7 +92,7 @@ __NTH (lrint (double __x))
return __res;
}
# endif
-# if __WORDSIZE == 64
+# ifdef __x86_64__
__MATH_INLINE long long int
__NTH (llrintf (float __x))
{
diff --git a/sysdeps/x86_64/fpu/e_expf.S b/sysdeps/x86_64/fpu/e_expf.S
new file mode 100644
index 0000000000..340a1c2f07
--- /dev/null
+++ b/sysdeps/x86_64/fpu/e_expf.S
@@ -0,0 +1,339 @@
+/* Optimized __ieee754_expf function.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ Contributed by Intel Corporation.
+ 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+/* Short algorithm description:
+ *
+ * Let K = 64 (table size).
+ * e^x = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y))
+ * where
+ * x = m*log(2)/K + y, y in [0.0..log(2)/K]
+ * m = n*K + j, m,n,j - signed integer, j in [0..K-1]
+ * values of 2^(j/K) are tabulated as T[j].
+ *
+ * P(y) is a minimax polynomial approximation of expf(x)-1
+ * on small interval [0.0..log(2)/K].
+ *
+ * P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as
+ * z = y*y; P(y) = (P3*z + P1)*z + (P2*z + P0)*y
+ *
+ * Special cases:
+ * expf(NaN) = NaN
+ * expf(+INF) = +INF
+ * expf(-INF) = 0
+ * expf(x) = 1 for subnormals
+ * for finite argument, only expf(0)=1 is exact
+ * expf(x) overflows if x>88.7228317260742190
+ * expf(x) underflows if x<-103.972076416015620
+ */
+
+ .text
+ENTRY(__ieee754_expf)
+ /* Input: single precision x in %xmm0 */
+ cvtss2sd %xmm0, %xmm1 /* Convert x to double precision */
+ movd %xmm0, %ecx /* Copy x */
+ movsd L(DP_KLN2)(%rip), %xmm2 /* DP K/log(2) */
+ movsd L(DP_P2)(%rip), %xmm3 /* DP P2 */
+ movl %ecx, %eax /* x */
+ mulsd %xmm1, %xmm2 /* DP x*K/log(2) */
+ andl $0x7fffffff, %ecx /* |x| */
+ lea L(DP_T)(%rip), %rsi /* address of table T[j] */
+ cmpl $0x42ad496b, %ecx /* |x|<125*log(2) ? */
+ movsd L(DP_P3)(%rip), %xmm4 /* DP P3 */
+ addsd L(DP_RS)(%rip), %xmm2 /* DP x*K/log(2)+RS */
+ jae L(special_paths)
+
+ /* Here if |x|<125*log(2) */
+ cmpl $0x31800000, %ecx /* |x|<2^(-28) ? */
+ jb L(small_arg)
+
+ /* Main path: here if 2^(-28)<=|x|<125*log(2) */
+ cvtsd2ss %xmm2, %xmm2 /* SP x*K/log(2)+RS */
+ movd %xmm2, %eax /* bits of n*K+j with trash */
+ subss L(SP_RS)(%rip), %xmm2 /* SP t=round(x*K/log(2)) */
+ movl %eax, %edx /* n*K+j with trash */
+ cvtss2sd %xmm2, %xmm2 /* DP t */
+ andl $0x3f, %eax /* bits of j */
+ mulsd L(DP_NLN2K)(%rip), %xmm2/* DP -t*log(2)/K */
+ andl $0xffffffc0, %edx /* bits of n */
+#ifdef __AVX__
+ vaddsd %xmm1, %xmm2, %xmm0 /* DP y=x-t*log(2)/K */
+ vmulsd %xmm0, %xmm0, %xmm2 /* DP z=y*y */
+#else
+ addsd %xmm1, %xmm2 /* DP y=x-t*log(2)/K */
+ movaps %xmm2, %xmm0 /* DP y */
+ mulsd %xmm2, %xmm2 /* DP z=y*y */
+#endif
+ mulsd %xmm2, %xmm4 /* DP P3*z */
+ addl $0x1fc0, %edx /* bits of n + SP exponent bias */
+ mulsd %xmm2, %xmm3 /* DP P2*z */
+ shll $17, %edx /* SP 2^n */
+ addsd L(DP_P1)(%rip), %xmm4 /* DP P3*z+P1 */
+ addsd L(DP_P0)(%rip), %xmm3 /* DP P2*z+P0 */
+ movd %edx, %xmm1 /* SP 2^n */
+ mulsd %xmm2, %xmm4 /* DP (P3*z+P1)*z */
+ mulsd %xmm3, %xmm0 /* DP (P2*z+P0)*y */
+ addsd %xmm4, %xmm0 /* DP P(y) */
+ mulsd (%rsi,%rax,8), %xmm0 /* DP P(y)*T[j] */
+ addsd (%rsi,%rax,8), %xmm0 /* DP T[j]*(P(y)+1) */
+ cvtsd2ss %xmm0, %xmm0 /* SP T[j]*(P(y)+1) */
+ mulss %xmm1, %xmm0 /* SP result=2^n*(T[j]*(P(y)+1)) */
+ ret
+
+ .p2align 4
+L(small_arg):
+ /* Here if 0<=|x|<2^(-28) */
+ addss L(SP_ONE)(%rip), %xmm0 /* 1.0 + x */
+ /* Return 1.0 with inexact raised, except for x==0 */
+ ret
+
+ .p2align 4
+L(special_paths):
+ /* Here if 125*log(2)<=|x| */
+ shrl $31, %eax /* Get sign bit of x, and depending on it: */
+ lea L(SP_RANGE)(%rip), %rdx /* load over/underflow bound */
+ cmpl (%rdx,%rax,4), %ecx /* |x|<under/overflow bound ? */
+ jbe L(near_under_or_overflow)
+
+ /* Here if |x|>under/overflow bound */
+ cmpl $0x7f800000, %ecx /* |x| is finite ? */
+ jae L(arg_inf_or_nan)
+
+ /* Here if |x|>under/overflow bound, and x is finite */
+ testq %rax, %rax /* sign of x nonzero ? */
+ je L(res_overflow)
+
+ /* Here if -inf<x<underflow bound (x<0) */
+ movss L(SP_SMALL)(%rip), %xmm0/* load small value 2^(-100) */
+ mulss %xmm0, %xmm0 /* Return underflowed result (zero or subnormal) */
+ ret
+
+ .p2align 4
+L(res_overflow):
+ /* Here if overflow bound<x<inf (x>0) */
+ movss L(SP_LARGE)(%rip), %xmm0/* load large value 2^100 */
+ mulss %xmm0, %xmm0 /* Return overflowed result (Inf or max normal) */
+ ret
+
+ .p2align 4
+L(arg_inf_or_nan):
+ /* Here if |x| is Inf or NAN */
+ jne L(arg_nan) /* |x| is Inf ? */
+
+ /* Here if |x| is Inf */
+ lea L(SP_INF_0)(%rip), %rdx /* depending on sign of x: */
+ movss (%rdx,%rax,4), %xmm0 /* return zero or Inf */
+ ret
+
+ .p2align 4
+L(arg_nan):
+ /* Here if |x| is NaN */
+ addss %xmm0, %xmm0 /* Return x+x (raise invalid) */
+ ret
+
+ .p2align 4
+L(near_under_or_overflow):
+ /* Here if 125*log(2)<=|x|<under/overflow bound */
+ cvtsd2ss %xmm2, %xmm2 /* SP x*K/log(2)+RS */
+ movd %xmm2, %eax /* bits of n*K+j with trash */
+ subss L(SP_RS)(%rip), %xmm2 /* SP t=round(x*K/log(2)) */
+ movl %eax, %edx /* n*K+j with trash */
+ cvtss2sd %xmm2, %xmm2 /* DP t */
+ andl $0x3f, %eax /* bits of j */
+ mulsd L(DP_NLN2K)(%rip), %xmm2/* DP -t*log(2)/K */
+ andl $0xffffffc0, %edx /* bits of n */
+#ifdef __AVX__
+ vaddsd %xmm1, %xmm2, %xmm0 /* DP y=x-t*log(2)/K */
+ vmulsd %xmm0, %xmm0, %xmm2 /* DP z=y*y */
+#else
+ addsd %xmm1, %xmm2 /* DP y=x-t*log(2)/K */
+ movaps %xmm2, %xmm0 /* DP y */
+ mulsd %xmm2, %xmm2 /* DP z=y*y */
+#endif
+ mulsd %xmm2, %xmm4 /* DP P3*z */
+ addl $0xffc0, %edx /* bits of n + DP exponent bias */
+ mulsd %xmm2, %xmm3 /* DP P2*z */
+ shlq $46, %rdx /* DP 2^n */
+ addsd L(DP_P1)(%rip), %xmm4 /* DP P3*z+P1 */
+ addsd L(DP_P0)(%rip), %xmm3 /* DP P2*z+P0 */
+ movd %rdx, %xmm1 /* DP 2^n */
+ mulsd %xmm2, %xmm4 /* DP (P3*z+P1)*z */
+ mulsd %xmm3, %xmm0 /* DP (P2*z+P0)*y */
+ addsd %xmm4, %xmm0 /* DP P(y) */
+ mulsd (%rsi,%rax,8), %xmm0 /* DP P(y)*T[j] */
+ addsd (%rsi,%rax,8), %xmm0 /* DP T[j]*(P(y)+1) */
+ mulsd %xmm1, %xmm0 /* DP result=2^n*(T[j]*(P(y)+1)) */
+ cvtsd2ss %xmm0, %xmm0 /* convert result to single precision */
+ ret
+END(__ieee754_expf)
+
+ .section .rodata, "a"
+ .p2align 3
+L(DP_T): /* table of double precision values 2^(j/K) for j=[0..K-1] */
+ .long 0x00000000, 0x3ff00000
+ .long 0x3e778061, 0x3ff02c9a
+ .long 0xd3158574, 0x3ff059b0
+ .long 0x18759bc8, 0x3ff08745
+ .long 0x6cf9890f, 0x3ff0b558
+ .long 0x32d3d1a2, 0x3ff0e3ec
+ .long 0xd0125b51, 0x3ff11301
+ .long 0xaea92de0, 0x3ff1429a
+ .long 0x3c7d517b, 0x3ff172b8
+ .long 0xeb6fcb75, 0x3ff1a35b
+ .long 0x3168b9aa, 0x3ff1d487
+ .long 0x88628cd6, 0x3ff2063b
+ .long 0x6e756238, 0x3ff2387a
+ .long 0x65e27cdd, 0x3ff26b45
+ .long 0xf51fdee1, 0x3ff29e9d
+ .long 0xa6e4030b, 0x3ff2d285
+ .long 0x0a31b715, 0x3ff306fe
+ .long 0xb26416ff, 0x3ff33c08
+ .long 0x373aa9cb, 0x3ff371a7
+ .long 0x34e59ff7, 0x3ff3a7db
+ .long 0x4c123422, 0x3ff3dea6
+ .long 0x21f72e2a, 0x3ff4160a
+ .long 0x6061892d, 0x3ff44e08
+ .long 0xb5c13cd0, 0x3ff486a2
+ .long 0xd5362a27, 0x3ff4bfda
+ .long 0x769d2ca7, 0x3ff4f9b2
+ .long 0x569d4f82, 0x3ff5342b
+ .long 0x36b527da, 0x3ff56f47
+ .long 0xdd485429, 0x3ff5ab07
+ .long 0x15ad2148, 0x3ff5e76f
+ .long 0xb03a5585, 0x3ff6247e
+ .long 0x82552225, 0x3ff66238
+ .long 0x667f3bcd, 0x3ff6a09e
+ .long 0x3c651a2f, 0x3ff6dfb2
+ .long 0xe8ec5f74, 0x3ff71f75
+ .long 0x564267c9, 0x3ff75feb
+ .long 0x73eb0187, 0x3ff7a114
+ .long 0x36cf4e62, 0x3ff7e2f3
+ .long 0x994cce13, 0x3ff82589
+ .long 0x9b4492ed, 0x3ff868d9
+ .long 0x422aa0db, 0x3ff8ace5
+ .long 0x99157736, 0x3ff8f1ae
+ .long 0xb0cdc5e5, 0x3ff93737
+ .long 0x9fde4e50, 0x3ff97d82
+ .long 0x82a3f090, 0x3ff9c491
+ .long 0x7b5de565, 0x3ffa0c66
+ .long 0xb23e255d, 0x3ffa5503
+ .long 0x5579fdbf, 0x3ffa9e6b
+ .long 0x995ad3ad, 0x3ffae89f
+ .long 0xb84f15fb, 0x3ffb33a2
+ .long 0xf2fb5e47, 0x3ffb7f76
+ .long 0x904bc1d2, 0x3ffbcc1e
+ .long 0xdd85529c, 0x3ffc199b
+ .long 0x2e57d14b, 0x3ffc67f1
+ .long 0xdcef9069, 0x3ffcb720
+ .long 0x4a07897c, 0x3ffd072d
+ .long 0xdcfba487, 0x3ffd5818
+ .long 0x03db3285, 0x3ffda9e6
+ .long 0x337b9b5f, 0x3ffdfc97
+ .long 0xe78b3ff6, 0x3ffe502e
+ .long 0xa2a490da, 0x3ffea4af
+ .long 0xee615a27, 0x3ffefa1b
+ .long 0x5b6e4540, 0x3fff5076
+ .long 0x819e90d8, 0x3fffa7c1
+ ASM_TYPE_DIRECTIVE(L(DP_T), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_T))
+
+ .section .rodata.cst8,"aM",@progbits,8
+ .p2align 3
+L(DP_KLN2): /* double precision K/log(2) */
+ .long 0x652b82fe, 0x40571547
+ ASM_TYPE_DIRECTIVE(L(DP_KLN2), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_KLN2))
+
+ .p2align 3
+L(DP_NLN2K): /* double precision -log(2)/K */
+ .long 0xfefa39ef, 0xbf862e42
+ ASM_TYPE_DIRECTIVE(L(DP_NLN2K), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_NLN2K))
+
+ .p2align 3
+L(DP_RS): /* double precision 2^23+2^22 */
+ .long 0x00000000, 0x41680000
+ ASM_TYPE_DIRECTIVE(L(DP_RS), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_RS))
+
+ .p2align 3
+L(DP_P3): /* double precision polynomial coefficient P3 */
+ .long 0xeb78fa85, 0x3fa56420
+ ASM_TYPE_DIRECTIVE(L(DP_P3), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_P3))
+
+ .p2align 3
+L(DP_P1): /* double precision polynomial coefficient P1 */
+ .long 0x008d6118, 0x3fe00000
+ ASM_TYPE_DIRECTIVE(L(DP_P1), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_P1))
+
+ .p2align 3
+L(DP_P2): /* double precision polynomial coefficient P2 */
+ .long 0xda752d4f, 0x3fc55550
+ ASM_TYPE_DIRECTIVE(L(DP_P2), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_P2))
+
+ .p2align 3
+L(DP_P0): /* double precision polynomial coefficient P0 */
+ .long 0xffffe7c6, 0x3fefffff
+ ASM_TYPE_DIRECTIVE(L(DP_P0), @object)
+ ASM_SIZE_DIRECTIVE(L(DP_P0))
+
+ .p2align 2
+L(SP_RANGE): /* single precision overflow/underflow bounds */
+ .long 0x42b17217 /* if x>this bound, then result overflows */
+ .long 0x42cff1b4 /* if x<this bound, then result underflows */
+ ASM_TYPE_DIRECTIVE(L(SP_RANGE), @object)
+ ASM_SIZE_DIRECTIVE(L(SP_RANGE))
+
+ .p2align 2
+L(SP_INF_0):
+ .long 0x7f800000 /* single precision Inf */
+ .long 0 /* single precision zero */
+ ASM_TYPE_DIRECTIVE(L(SP_INF_0), @object)
+ ASM_SIZE_DIRECTIVE(L(SP_INF_0))
+
+ .section .rodata.cst4,"aM",@progbits,4
+ .p2align 2
+L(SP_RS): /* single precision 2^23+2^22 */
+ .long 0x4b400000
+ ASM_TYPE_DIRECTIVE(L(SP_RS), @object)
+ ASM_SIZE_DIRECTIVE(L(SP_RS))
+
+ .p2align 2
+L(SP_SMALL): /* single precision small value 2^(-100) */
+ .long 0x0d800000
+ ASM_TYPE_DIRECTIVE(L(SP_SMALL), @object)
+ ASM_SIZE_DIRECTIVE(L(SP_SMALL))
+
+ .p2align 2
+L(SP_LARGE): /* single precision large value 2^100 */
+ .long 0x71800000
+ ASM_TYPE_DIRECTIVE(L(SP_LARGE), @object)
+ ASM_SIZE_DIRECTIVE(L(SP_LARGE))
+
+ .p2align 2
+L(SP_ONE): /* single precision 1.0 */
+ .long 0x3f800000
+ ASM_TYPE_DIRECTIVE(L(SP_ONE), @object)
+ ASM_SIZE_DIRECTIVE(L(SP_ONE))
+
+strong_alias (__ieee754_expf, __expf_finite)
diff --git a/sysdeps/x86_64/fpu/e_powl.S b/sysdeps/x86_64/fpu/e_powl.S
index bd6d828027..0626ce4172 100644
--- a/sysdeps/x86_64/fpu/e_powl.S
+++ b/sysdeps/x86_64/fpu/e_powl.S
@@ -32,6 +32,9 @@ limit: .double 0.29
ASM_TYPE_DIRECTIVE(p63,@object)
p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43
ASM_SIZE_DIRECTIVE(p63)
+ ASM_TYPE_DIRECTIVE(p64,@object)
+p64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43
+ ASM_SIZE_DIRECTIVE(p64)
.section .rodata.cst16,"aM",@progbits,16
@@ -104,7 +107,7 @@ ENTRY(__ieee754_powl)
fistpll -8(%rsp) // y : x
fildll -8(%rsp) // int(y) : y : x
fucomip %st(1),%st // y : x
- jne 2f
+ jne 3f
/* OK, we have an integer value for y. */
mov -8(%rsp),%eax
@@ -142,7 +145,14 @@ ENTRY(__ieee754_powl)
ret
.align ALIGNARG(4)
-2: /* y is a real number. */
+2: // y is a large integer (absolute value at least 1L<<63), but
+ // may be odd unless at least 1L<<64. So it may be necessary
+ // to adjust the sign of a negative result afterwards.
+ fxch // x : y
+ fabs // |x| : y
+ fxch // y : |x|
+ .align ALIGNARG(4)
+3: /* y is a real number. */
fxch // x : y
fldl MO(one) // 1.0 : x : y
fldl MO(limit) // 0.29 : 1.0 : x : y
@@ -173,13 +183,45 @@ ENTRY(__ieee754_powl)
faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x))
fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
- ret
+ jmp 29f
28: fstp %st(1) // y*log2(x)
fldl MO(one) // 1 : y*log2(x)
fscale // 2^(y*log2(x)) : y*log2(x)
fstp %st(1) // 2^(y*log2(x))
- ret
+29: testb $2, %dh
+ jz 292f
+ // x is negative. If y is an odd integer, negate the result.
+ fldt 24(%rsp) // y : abs(result)
+ fldl MO(p64) // 1L<<64 : y : abs(result)
+ fld %st(1) // y : 1L<<64 : y : abs(result)
+ fabs // |y| : 1L<<64 : y : abs(result)
+ fcomip %st(1), %st // 1L<<64 : y : abs(result)
+ fstp %st(0) // y : abs(result)
+ jnc 291f
+ fldl MO(p63) // p63 : y : abs(result)
+ fxch // y : p63 : abs(result)
+ fprem // y%p63 : p63 : abs(result)
+ fstp %st(1) // y%p63 : abs(result)
+
+ // We must find out whether y is an odd integer.
+ fld %st // y : y : abs(result)
+ fistpll -8(%rsp) // y : abs(result)
+ fildll -8(%rsp) // int(y) : y : abs(result)
+ fucomip %st(1),%st // y : abs(result)
+ ffreep %st // abs(result)
+ jne 292f
+
+ // OK, the value is an integer, but is it odd?
+ mov -8(%rsp), %eax
+ mov -4(%rsp), %edx
+ andb $1, %al
+ jz 290f // jump if not odd
+ // It's an odd integer.
+ fchs
+290: ret
+291: fstp %st(0) // abs(result)
+292: ret
// pow(x,±0) = 1
.align ALIGNARG(4)
@@ -227,6 +269,19 @@ ENTRY(__ieee754_powl)
testb $2, %dh
jz 16f // jump if x == +inf
+ // fistpll raises invalid exception for |y| >= 1L<<63, but y
+ // may be odd unless we know |y| >= 1L<<64.
+ fldl MO(p64) // 1L<<64 : y
+ fld %st(1) // y : 1L<<64 : y
+ fabs // |y| : 1L<<64 : y
+ fcomip %st(1), %st // 1L<<64 : y
+ fstp %st(0) // y
+ jnc 16f
+ fldl MO(p63) // p63 : y
+ fxch // y : p63
+ fprem // y%p63 : p63
+ fstp %st(1) // y%p63
+
// We must find out whether y is an odd integer.
fld %st // y : y
fistpll -8(%rsp) // y
@@ -284,6 +339,19 @@ ENTRY(__ieee754_powl)
testb $2, %dh
jz 25f
+ // fistpll raises invalid exception for |y| >= 1L<<63, but y
+ // may be odd unless we know |y| >= 1L<<64.
+ fldl MO(p64) // 1L<<64 : y
+ fld %st(1) // y : 1L<<64 : y
+ fabs // |y| : 1L<<64 : y
+ fcomip %st(1), %st // 1L<<64 : y
+ fstp %st(0) // y
+ jnc 25f
+ fldl MO(p63) // p63 : y
+ fxch // y : p63
+ fprem // y%p63 : p63
+ fstp %st(1) // y%p63
+
fld %st // y : y
fistpll -8(%rsp) // y
fildll -8(%rsp) // int(y) : y
@@ -315,6 +383,18 @@ ENTRY(__ieee754_powl)
21: testb $2, %dh
jz 22f
+ // fistpll raises invalid exception for |y| >= 1L<<63, but y
+ // may be odd unless we know |y| >= 1L<<64.
+ fldl MO(p64) // 1L<<64 : y
+ fxch // y : 1L<<64
+ fcomi %st(1), %st // y : 1L<<64
+ fstp %st(1) // y
+ jnc 22f
+ fldl MO(p63) // p63 : y
+ fxch // y : p63
+ fprem // y%p63 : p63
+ fstp %st(1) // y%p63
+
fld %st // y : y
fistpll -8(%rsp) // y
fildll -8(%rsp) // int(y) : y
diff --git a/sysdeps/x86_64/fpu/e_rem_pio2l.c b/sysdeps/x86_64/fpu/e_rem_pio2l.c
deleted file mode 100644
index 1347b0468c..0000000000
--- a/sysdeps/x86_64/fpu/e_rem_pio2l.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Empty. This file is only meant to avoid compiling the file with the
- same name in the libm-ieee754 directory. The code is not used since
- there is an assembler version for all users of this file. */
diff --git a/sysdeps/x86_64/fpu/feholdexcpt.c b/sysdeps/x86_64/fpu/feholdexcpt.c
index b547b34957..b380479153 100644
--- a/sysdeps/x86_64/fpu/feholdexcpt.c
+++ b/sysdeps/x86_64/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 2001, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2001-2012 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
@@ -22,20 +22,13 @@ int
feholdexcept (fenv_t *envp)
{
unsigned int mxcsr;
- fenv_t temp;
- /* Store the environment. */
- __asm__ ("fnstenv %0\n"
- "stmxcsr %1" : "=m" (temp), "=m" (temp.__mxcsr));
- *envp = temp;
-
- /* Now set all exceptions to non-stop, first the x87 FPU. */
- temp.__control_word |= 0x3f;
-
- /* And clear all exceptions. */
- temp.__status_word &= ~0x3f;
-
- __asm__ ("fldenv %0" : : "m" (temp));
+ /* Store the environment. Recall that fnstenv has a side effect of
+ masking all exceptions. Then clear all exceptions. */
+ __asm__ ("fnstenv %0\n\t"
+ "stmxcsr %1\n\t"
+ "fnclex"
+ : "=m" (*envp), "=m" (envp->__mxcsr));
/* Set the SSE MXCSR register. */
mxcsr = (envp->__mxcsr | 0x1f80) & ~0x3f;
diff --git a/sysdeps/x86_64/fpu/k_cosl.c b/sysdeps/x86_64/fpu/k_cosl.c
deleted file mode 100644
index eea55a98d2..0000000000
--- a/sysdeps/x86_64/fpu/k_cosl.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/x86_64/fpu/k_sinl.c b/sysdeps/x86_64/fpu/k_sinl.c
deleted file mode 100644
index eea55a98d2..0000000000
--- a/sysdeps/x86_64/fpu/k_sinl.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/x86_64/fpu/k_tanl.c b/sysdeps/x86_64/fpu/k_tanl.c
deleted file mode 100644
index eea55a98d2..0000000000
--- a/sysdeps/x86_64/fpu/k_tanl.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
index a2a82e62bb..d43955aff8 100644
--- a/sysdeps/x86_64/fpu/libm-test-ulps
+++ b/sysdeps/x86_64/fpu/libm-test-ulps
@@ -41,13 +41,151 @@ ildouble: 1
ldouble: 1
# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.5 - 0 i) == pi + 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
+Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (1.5 - 0 i) == +0 + 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
double: 1
float: 7
@@ -65,8 +203,78 @@ ldouble: 1
Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
ildouble: 1
ldouble: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.5 - 0 i) == -pi/2 - 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
double: 1
float: 1
@@ -79,8 +287,66 @@ float: 1
ifloat: 1
ildouble: 2
ldouble: 2
+Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.5 - 0 i) == pi/2 - 0.9624236501192068949955178268487368462704 i":
+ildouble: 1
+ldouble: 1
# casinh
+Test "Real part of: casinh (+0 + 1.5 i) == 0.9624236501192068949955178268487368462704 + pi/2 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (+0 - 1.5 i) == 0.9624236501192068949955178268487368462704 - pi/2 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
double: 5
float: 1
@@ -95,6 +361,12 @@ idouble: 3
ifloat: 6
ildouble: 5
ldouble: 5
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
float: 1
ifloat: 1
@@ -105,6 +377,22 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
# catan
Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
@@ -194,15 +482,61 @@ float: 1
ifloat: 1
# cexp
+Test "Real part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
float: 1
ifloat: 1
+Test "Real part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
float: 1
ifloat: 1
Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cexp (11356.5625 + 0.75 i) == 9.052188470850960144814815984311663764287e4931 + 8.432986734191301036267148978260970230200e4931 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i plus overflow exception":
+double: 1
+idouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
# clog
Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
@@ -213,6 +547,23 @@ float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.fffffep+127 + 0x1.fffffep+127 i) == 89.06941264234832570836679262104313101776 + pi/4 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.fp+16383 + 0x1p+16383 i) == 11356.60974243783798653123798337822335902 + 0.4764674194737066993385333770295162295856 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 + 0x1p-149 i) == -102.9323563131518784484589700365392203592 + pi/4 i":
+ildouble: 1
+ldouble: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
@@ -282,6 +633,54 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 308.4052305577487344482591243175787477115 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 308.3031705664207720674749211936626341569 + 0.2013595981366865903254995612594728746470 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i) == 4932.212175672014259683102930239951947672 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i) == -322.8546703496198318667349645920187712089 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1p-16440 + 0x1p-16441 i) == -4948.884673709346821106688037612752099609 + 0.2013595981366865710389502301937289472543 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-16440 + 0x1p-16441 i) == -4948.884673709346821106688037612752099609 + 0.2013595981366865710389502301937289472543 i":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
double: 1
float: 1
@@ -327,6 +726,168 @@ ifloat: 1
ildouble: 1
ldouble: 1
+# cos_downward
+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
+ildouble: 1
+ldouble: 1
+
+# cos_tonearest
+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
+ildouble: 1
+ldouble: 1
+
+# cos_towardzero
+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
+float: 1
+ifloat: 1
+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cos_upward
+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (2) == -0.4161468365471423869975682295007621897660":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (3) == -0.9899924966004454572715727947312613023937":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+Test "cos_upward (8) == -0.1455000338086135258688413818311946826093":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
+ildouble: 1
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ildouble: 1
+ldouble: 1
+
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
float: 1
@@ -366,6 +927,8 @@ double: 1
float: 5
idouble: 1
ifloat: 5
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
float: 2
ifloat: 2
@@ -415,13 +978,42 @@ ifloat: 1
Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
float: 1
ifloat: 1
+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-1073 + 0x1p-1073 i) == 3.453664695497464982856905711457966660085e-162 + 1.430554756764195530630723976279903095110e-162 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-1074 + 0x1p-1074 i) == 2.442109726130830256743814843868934877597e-162 + 1.011554969366634726113090867589031782487e-162 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-147 + 0x1p-147 i) == 8.225610928685557596194006925540350401606e-23 + 3.407159605465907500737319471202779419102e-23 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-149 + 0x1p-149 i) == 4.112805464342778798097003462770175200803e-23 + 1.703579802732953750368659735601389709551e-23 i":
+ildouble: 1
+ldouble: 1
# ctan
Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
double: 1
idouble: 1
-ildouble: 439
-ldouble: 439
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
float: 1
ifloat: 1
@@ -444,11 +1036,11 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 5
-ldouble: 5
+ildouble: 3
+ldouble: 3
Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-ildouble: 25
-ldouble: 25
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
float: 1
ifloat: 1
@@ -467,6 +1059,16 @@ double: 1
idouble: 1
# erfc
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
Test "erfc (1.25) == 0.0770998717435417698634765188027188596":
ildouble: 1
ldouble: 1
@@ -502,6 +1104,41 @@ ifloat: 2
ildouble: 8
ldouble: 8
+# exp_downward
+Test "exp_downward (1) == e":
+ildouble: 1
+ldouble: 1
+Test "exp_downward (2) == e^2":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "exp_downward (3) == e^3":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_towardzero
+Test "exp_towardzero (1) == e":
+ildouble: 1
+ldouble: 1
+Test "exp_towardzero (2) == e^2":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "exp_towardzero (3) == e^3":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# exp_upward
+Test "exp_upward (1) == e":
+float: 1
+ifloat: 1
+
# expm1
Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
double: 1
@@ -511,6 +1148,9 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "expm1 (11356.25) == 9.05128237311923300051376115753226014206e+4931":
+ildouble: 1
+ldouble: 1
# gamma
Test "gamma (-0.5) == log(2*sqrt(pi))":
@@ -544,16 +1184,22 @@ float: 1
ifloat: 1
# j0
+Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90":
+ildouble: 2
+ldouble: 2
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "j0 (0.75) == 0.864242275166648623555731103820923211":
float: 1
ifloat: 1
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+float: 2
+ifloat: 2
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
double: 2
float: 1
@@ -567,8 +1213,8 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "j0 (8.0) == 0.171650807137553906090869407851972001":
double: 2
float: 1
@@ -576,6 +1222,14 @@ idouble: 2
ifloat: 1
# j1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
float: 2
ifloat: 2
@@ -596,8 +1250,8 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
float: 1
ifloat: 1
@@ -614,8 +1268,8 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
double: 2
float: 1
@@ -666,6 +1320,13 @@ idouble: 1
ifloat: 4
ildouble: 1
ldouble: 1
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
double: 2
float: 1
@@ -783,6 +1444,148 @@ Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
float: 1
ifloat: 1
+# pow_downward
+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+ildouble: 1
+ldouble: 1
+
+# sin_downward
+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
+float: 1
+ifloat: 1
+Test "sin_downward (7) == 0.6569865987187890903969990915936351779369":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
+ildouble: 1
+ldouble: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
+ildouble: 1
+ldouble: 1
+
+# sin_towardzero
+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
+float: 1
+ifloat: 1
+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
+float: 1
+ifloat: 1
+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sin_upward
+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (5) == -0.9589242746631384688931544061559939733525":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
+float: 1
+ifloat: 1
+
# sincos
Test "sincos (0.80190127184058835, &sin_res, &cos_res) puts 0.69534156199418473 in cos_res":
double: 1
@@ -815,11 +1618,195 @@ Test "sinh (0x8p-32) == 1.86264514923095703232705808926175479e-9":
ildouble: 1
ldouble: 1
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+# sinh_tonearest
+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
+ildouble: 3
+ldouble: 3
+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
+ildouble: 1
+ldouble: 1
+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
+ildouble: 6
+ldouble: 6
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+# sinh_upward
+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
+ildouble: 16
+ldouble: 16
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ildouble: 27
+ldouble: 27
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+ildouble: 7
+ldouble: 7
+
# tan
+Test "tan (0x1p16383) == 0.422722393732022337800504160054440141575":
+ildouble: 1
+ldouble: 1
+Test "tan (1e22) == -1.628778225606898878549375936939548513545":
+ildouble: 1
+ldouble: 1
Test "tan (pi/4) == 1":
double: 1
idouble: 1
+# tan_downward
+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
+float: 1
+ifloat: 1
+Test "tan_downward (3) == -0.1425465430742778052956354105339134932261":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (4) == 1.1578212823495775831373424182673239231198":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
+float: 1
+ifloat: 1
+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+
+# tan_tonearest
+Test "tan_tonearest (1) == 1.5574077246549022305069748074583601730873":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (2) == -2.1850398632615189916433061023136825434320":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087":
+ildouble: 1
+ldouble: 1
+
+# tan_towardzero
+Test "tan_towardzero (1) == 1.5574077246549022305069748074583601730873":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
+float: 1
+ifloat: 1
+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814":
+ildouble: 2
+ldouble: 2
+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# tan_upward
+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (8) == -6.7997114552203786999252627596086333648814":
+ildouble: 2
+ldouble: 2
+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
+ildouble: 1
+ldouble: 1
+
# tgamma
Test "tgamma (-0.5) == -2 sqrt (pi)":
double: 1
@@ -844,6 +1831,14 @@ ldouble: 1
Test "y0 (0.125) == -1.38968062514384052915582277745018693":
ildouble: 1
ldouble: 1
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
double: 2
float: 1
@@ -875,6 +1870,14 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90":
+ildouble: 2
+ldouble: 2
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Test "y1 (1.5) == -0.412308626973911295952829820633445323":
float: 1
ifloat: 1
@@ -1016,8 +2019,16 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: Real part of "cacos":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
Function: Imaginary part of "cacos":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 2
ldouble: 2
@@ -1047,7 +2058,9 @@ ildouble: 2
ldouble: 2
Function: Imaginary part of "casin":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 2
ldouble: 2
@@ -1123,17 +2136,25 @@ ildouble: 1
ldouble: 1
Function: Real part of "cexp":
+double: 2
float: 1
+idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: Imaginary part of "cexp":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
Function: Real part of "clog":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
@@ -1166,6 +2187,50 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: "cos_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cos_upward":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cosh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cosh_upward":
+ildouble: 1
+ldouble: 1
+
Function: Real part of "cpow":
double: 2
float: 5
@@ -1209,14 +2274,24 @@ ildouble: 2
ldouble: 2
Function: Real part of "csqrt":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Function: Imaginary part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: Real part of "ctan":
double: 1
idouble: 1
-ildouble: 439
-ldouble: 439
+ildouble: 1
+ldouble: 1
Function: Imaginary part of "ctan":
double: 1
@@ -1231,16 +2306,16 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 5
-ldouble: 5
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "ctanh":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 25
-ldouble: 25
+ildouble: 1
+ldouble: 1
Function: "erf":
double: 1
@@ -1248,7 +2323,9 @@ idouble: 1
Function: "erfc":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -1260,11 +2337,29 @@ ifloat: 2
ildouble: 8
ldouble: 8
+Function: "exp_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp_upward":
+float: 1
+ifloat: 1
+
Function: "expm1":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: "gamma":
ildouble: 1
@@ -1279,8 +2374,8 @@ double: 2
float: 2
idouble: 2
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "j1":
double: 1
@@ -1318,6 +2413,48 @@ Function: "log1p":
float: 1
ifloat: 1
+Function: "pow_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sin_upward":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
Function: "sincos":
double: 1
float: 1
@@ -1330,9 +2467,53 @@ Function: "sinh":
ildouble: 1
ldouble: 1
+Function: "sinh_downward":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+Function: "sinh_tonearest":
+ildouble: 6
+ldouble: 6
+
+Function: "sinh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+Function: "sinh_upward":
+ildouble: 27
+ldouble: 27
+
Function: "tan":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tan_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "tan_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "tan_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "tan_upward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
Function: "tgamma":
double: 1
@@ -1355,8 +2536,8 @@ double: 3
float: 2
idouble: 3
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "yn":
double: 3
diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h
index 8e79718262..63a699e8fc 100644
--- a/sysdeps/x86_64/fpu/math_private.h
+++ b/sysdeps/x86_64/fpu/math_private.h
@@ -1,55 +1,32 @@
-#ifndef _MATH_PRIVATE_H
-
-#define math_opt_barrier(x) \
- ({ __typeof(x) __x; \
- if (sizeof (x) <= sizeof (double)) \
- __asm ("" : "=x" (__x) : "0" (x)); \
- else \
- __asm ("" : "=t" (__x) : "0" (x)); \
- __x; })
-#define math_force_eval(x) \
- do { \
- if (sizeof (x) <= sizeof (double)) \
- __asm __volatile ("" : : "x" (x)); \
- else \
- __asm __volatile ("" : : "f" (x)); \
- } while (0)
-
-#include <math/math_private.h>
+#ifndef X86_64_MATH_PRIVATE_H
+#define X86_64_MATH_PRIVATE_H 1
/* We can do a few things better on x86-64. */
#if defined __AVX__ || defined SSE2AVX
# define MOVD "vmovd"
-# define STMXCSR "vstmxcsr"
-# define LDMXCSR "vldmxcsr"
#else
# define MOVD "movd"
-# define STMXCSR "stmxcsr"
-# define LDMXCSR "ldmxcsr"
#endif
/* Direct movement of float into integer register. */
-#undef EXTRACT_WORDS64
#define EXTRACT_WORDS64(i, d) \
do { \
- long int i_; \
+ int64_t i_; \
asm (MOVD " %1, %0" : "=rm" (i_) : "x" ((double) (d))); \
(i) = i_; \
} while (0)
/* And the reverse. */
-#undef INSERT_WORDS64
#define INSERT_WORDS64(d, i) \
do { \
- long int i_ = i; \
+ int64_t i_ = i; \
double d__; \
asm (MOVD " %1, %0" : "=x" (d__) : "rm" (i_)); \
d = d__; \
} while (0)
/* Direct movement of float into integer register. */
-#undef GET_FLOAT_WORD
#define GET_FLOAT_WORD(i, d) \
do { \
int i_; \
@@ -58,7 +35,6 @@
} while (0)
/* And the reverse. */
-#undef SET_FLOAT_WORD
#define SET_FLOAT_WORD(f, i) \
do { \
int i_ = i; \
@@ -67,162 +43,89 @@
f = f__; \
} while (0)
-#endif
-
-#define __isnan(d) \
- ({ long int __di; EXTRACT_WORDS64 (__di, (double) (d)); \
- (__di & 0x7fffffffffffffffl) > 0x7ff0000000000000l; })
-#define __isnanf(d) \
- ({ int __di; GET_FLOAT_WORD (__di, (float) d); \
- (__di & 0x7fffffff) > 0x7f800000; })
-
-#define __isinf_ns(d) \
- ({ long int __di; EXTRACT_WORDS64 (__di, (double) (d)); \
- (__di & 0x7fffffffffffffffl) == 0x7ff0000000000000l; })
-#define __isinf_nsf(d) \
- ({ int __di; GET_FLOAT_WORD (__di, (float) d); \
- (__di & 0x7fffffff) == 0x7f800000; })
+#include <sysdeps/i386/fpu/fenv_private.h>
+#include_next <math_private.h>
-#define __finite(d) \
- ({ long int __di; EXTRACT_WORDS64 (__di, (double) (d)); \
- (__di & 0x7fffffffffffffffl) < 0x7ff0000000000000l; })
-#define __finitef(d) \
- ({ int __di; GET_FLOAT_WORD (__di, (float) d); \
- (__di & 0x7fffffff) < 0x7f800000; })
+extern __always_inline double
+__ieee754_sqrt (double d)
+{
+ double res;
+#if defined __AVX__ || defined SSE2AVX
+ asm ("vsqrtsd %1, %0, %0" : "=x" (res) : "xm" (d));
+#else
+ asm ("sqrtsd %1, %0" : "=x" (res) : "xm" (d));
+#endif
+ return res;
+}
+extern __always_inline float
+__ieee754_sqrtf (float d)
+{
+ float res;
#if defined __AVX__ || defined SSE2AVX
-# define __ieee754_sqrt(d) \
- ({ double __res; \
- asm ("vsqrtsd %1, %0, %0" : "=x" (__res) : "xm" ((double) (d))); \
- __res; })
-# define __ieee754_sqrtf(d) \
- ({ float __res; \
- asm ("vsqrtss %1, %0, %0" : "=x" (__res) : "xm" ((float) (d))); \
- __res; })
+ asm ("vsqrtss %1, %0, %0" : "=x" (res) : "xm" (d));
#else
-# define __ieee754_sqrt(d) \
- ({ double __res; \
- asm ("sqrtsd %1, %0" : "=x" (__res) : "xm" ((double) (d))); \
- __res; })
-# define __ieee754_sqrtf(d) \
- ({ float __res; \
- asm ("sqrtss %1, %0" : "=x" (__res) : "xm" ((float) (d))); \
- __res; })
+ asm ("sqrtss %1, %0" : "=x" (res) : "xm" (d));
#endif
-#define __ieee754_sqrtl(d) \
- ({ long double __res; \
- asm ("fsqrt" : "=t" (__res) : "0" ((long double) (d))); \
- __res; })
+ return res;
+}
+
+extern __always_inline long double
+__ieee754_sqrtl (long double d)
+{
+ long double res;
+ asm ("fsqrt" : "=t" (res) : "0" (d));
+ return res;
+}
#ifdef __SSE4_1__
-# ifndef __rint
-# if defined __AVX__ || defined SSE2AVX
-# define __rint(d) \
- ({ double __res; \
- asm ("vroundsd $4, %1, %0, %0" : "=x" (__res) : "xm" ((double) (d))); \
- __res; })
-# else
-# define __rint(d) \
- ({ double __res; \
- asm ("roundsd $4, %1, %0" : "=x" (__res) : "xm" ((double) (d))); \
- __res; })
-# endif
+extern __always_inline double
+__rint (double d)
+{
+ double res;
+# if defined __AVX__ || defined SSE2AVX
+ asm ("vroundsd $4, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+ asm ("roundsd $4, %1, %0" : "=x" (res) : "xm" (d));
# endif
-# ifndef __rintf
-# if defined __AVX__ || defined SSE2AVX
-# define __rintf(d) \
- ({ float __res; \
- asm ("vroundss $4, %1, %0, %0" : "=x" (__res) : "xm" ((float) (d))); \
- __res; })
-# else
-# define __rintf(d) \
- ({ float __res; \
- asm ("roundss $4, %1, %0" : "=x" (__res) : "xm" ((float) (d))); \
- __res; })
-# endif
+ return res;
+}
+
+extern __always_inline float
+__rintf (float d)
+{
+ float res;
+# if defined __AVX__ || defined SSE2AVX
+ asm ("vroundss $4, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+ asm ("roundss $4, %1, %0" : "=x" (res) : "xm" (d));
# endif
-
-# ifndef __floor
-# if defined __AVX__ || defined SSE2AVX
-# define __floor(d) \
- ({ double __res; \
- asm ("vroundsd $1, %1, %0, %0" : "=x" (__res) : "xm" ((double) (d))); \
- __res; })
-# else
-# define __floor(d) \
- ({ double __res; \
- asm ("roundsd $1, %1, %0" : "=x" (__res) : "xm" ((double) (d))); \
- __res; })
-# endif
+ return res;
+}
+
+extern __always_inline double
+__floor (double d)
+{
+ double res;
+# if defined __AVX__ || defined SSE2AVX
+ asm ("vroundsd $1, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+ asm ("roundsd $1, %1, %0" : "=x" (res) : "xm" (d));
# endif
-# ifndef __floorf
-# if defined __AVX__ || defined SSE2AVX
-# define __floorf(d) \
- ({ float __res; \
- asm ("vroundss $1, %1, %0, %0" : "=x" (__res) : "xm" ((float) (d))); \
- __res; })
-# else
-# define __floorf(d) \
- ({ float __res; \
- asm ("roundss $1, %1, %0" : "=x" (__res) : "xm" ((float) (d))); \
- __res; })
+ return res;
+}
+
+extern __always_inline float
+__floorf (float d)
+{
+ float res;
+# if defined __AVX__ || defined SSE2AVX
+ asm ("vroundss $1, %1, %0, %0" : "=x" (res) : "xm" (d));
+# else
+ asm ("roundss $1, %1, %0" : "=x" (res) : "xm" (d));
# endif
-# endif
-#endif
-
-
-/* Specialized variants of the <fenv.h> interfaces which only handle
- either the FPU or the SSE unit. */
-#undef libc_feholdexcept
-#define libc_feholdexcept(e) \
- do { \
- unsigned int mxcsr; \
- asm (STMXCSR " %0" : "=m" (*&mxcsr)); \
- (e)->__mxcsr = mxcsr; \
- mxcsr = (mxcsr | 0x1f80) & ~0x3f; \
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); \
- } while (0)
-#undef libc_feholdexceptf
-#define libc_feholdexceptf(e) libc_feholdexcept (e)
-// #define libc_feholdexceptl(e) (void) feholdexcept (e)
+ return res;
+}
+#endif /* __SSE4_1__ */
-#undef libc_feholdexcept_setround
-#define libc_feholdexcept_setround(e, r) \
- do { \
- unsigned int mxcsr; \
- asm (STMXCSR " %0" : "=m" (*&mxcsr)); \
- (e)->__mxcsr = mxcsr; \
- mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | ((r) << 3); \
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); \
- } while (0)
-#undef libc_feholdexcept_setroundf
-#define libc_feholdexcept_setroundf(e, r) libc_feholdexcept_setround (e, r)
-// #define libc_feholdexcept_setroundl(e, r) ...
-
-#undef libc_fetestexcept
-#define libc_fetestexcept(e) \
- ({ unsigned int mxcsr; \
- asm volatile (STMXCSR " %0" : "=m" (*&mxcsr)); \
- mxcsr & (e) & FE_ALL_EXCEPT; })
-#undef libc_fetestexceptf
-#define libc_fetestexceptf(e) libc_fetestexcept (e)
-// #define libc_fetestexceptl(e) fetestexcept (e)
-
-#undef libc_fesetenv
-#define libc_fesetenv(e) \
- asm volatile (LDMXCSR " %0" : : "m" ((e)->__mxcsr))
-#undef libc_fesetenvf
-#define libc_fesetenvf(e) libc_fesetenv (e)
-// #define libc_fesetenvl(e) (void) fesetenv (e)
-
-#undef libc_feupdateenv
-#define libc_feupdateenv(e) \
- do { \
- unsigned int mxcsr; \
- asm volatile (STMXCSR " %0" : "=m" (*&mxcsr)); \
- asm volatile (LDMXCSR " %0" : : "m" ((e)->__mxcsr)); \
- __feraiseexcept (mxcsr & FE_ALL_EXCEPT); \
- } while (0)
-#undef libc_feupdateenvf
-#define libc_feupdateenvf(e) libc_feupdateenv (e)
-// #define libc_feupdateenvl(e) (void) feupdateenv (e)
+#endif /* X86_64_MATH_PRIVATE_H */
diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index 2a38ffc764..12b0526e50 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -7,10 +7,9 @@ libm-sysdep_routines += e_exp-fma4 e_log-fma4 e_pow-fma4 s_atan-fma4 \
e_asin-fma4 e_atan2-fma4 s_sin-fma4 s_tan-fma4 \
mplog-fma4 mpa-fma4 slowexp-fma4 slowpow-fma4 \
sincos32-fma4 doasin-fma4 dosincos-fma4 \
- brandred-fma4 halfulp-fma4 mpexp-fma4 \
+ halfulp-fma4 mpexp-fma4 \
mpatan2-fma4 mpatan-fma4 mpsqrt-fma4 mptan-fma4
-CFLAGS-brandred-fma4.c = -mfma4
CFLAGS-doasin-fma4.c = -mfma4
CFLAGS-dosincos-fma4.c = -mfma4
CFLAGS-e_asin-fma4.c = -mfma4
diff --git a/sysdeps/x86_64/fpu/multiarch/brandred-fma4.c b/sysdeps/x86_64/fpu/multiarch/brandred-fma4.c
deleted file mode 100644
index f4f68ac962..0000000000
--- a/sysdeps/x86_64/fpu/multiarch/brandred-fma4.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#define __branred __branred_fma4
-#define SECTION __attribute__ ((section (".text.fma4")))
-
-#include <sysdeps/ieee754/dbl-64/branred.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c b/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c
index 2501af981a..4c35739dc9 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c
@@ -1,6 +1,5 @@
#define __cos __cos_fma4
#define __sin __sin_fma4
-#define __branred __branred_fma4
#define __docos __docos_fma4
#define __dubsin __dubsin_fma4
#define __mpcos __mpcos_fma4
diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c b/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c
index d7dab3ca9e..a805440b46 100644
--- a/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c
+++ b/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c
@@ -1,5 +1,4 @@
#define tan __tan_fma4
-#define __branred __branred_fma4
#define __dbl_mp __dbl_mp_fma4
#define __mpranred __mpranred_fma4
#define __mptan __mptan_fma4
diff --git a/sysdeps/x86_64/fpu/printf_fphex.c b/sysdeps/x86_64/fpu/printf_fphex.c
index 0b6bfc6bdc..7de7283c4c 100644
--- a/sysdeps/x86_64/fpu/printf_fphex.c
+++ b/sysdeps/x86_64/fpu/printf_fphex.c
@@ -1,5 +1,5 @@
/* Print floating point number in hexadecimal notation according to ISO C99.
- Copyright (C) 1997,1998,1999,2000,2001,2005 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 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
@@ -57,6 +57,7 @@ do { \
\
/* We use a full nibble for the leading digit. */ \
leading = *numstr++; \
+ wnumstr++; \
\
/* We have 3 bits from the mantissa in the leading nibble. \
Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \
diff --git a/sysdeps/x86_64/fpu/s_cosl.S b/sysdeps/x86_64/fpu/s_cosl.S
deleted file mode 100644
index 6921cda567..0000000000
--- a/sysdeps/x86_64/fpu/s_cosl.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-ENTRY(__cosl)
- fldt 8(%rsp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fcos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fcos
- ret
-3: call __errno_location@PLT
- movl $EDOM, (%rax)
- jmp 4b
-END (__cosl)
-weak_alias (__cosl, cosl)
diff --git a/sysdeps/x86_64/fpu/s_sincos.S b/sysdeps/x86_64/fpu/s_sincos.S
deleted file mode 100644
index 3bc9d71f58..0000000000
--- a/sysdeps/x86_64/fpu/s_sincos.S
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Compute sine and cosine of argument.
- Copyright (C) 1997, 2000, 2001, 2005 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 Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
-
-#define PARMS LINKAGE /* no space for saved regs */
-#define ANGLE PARMS
-#define SINP ANGLE+12
-#define COSP SINP+PTR_SIZE
-
- .text
-ENTRY (BP_SYM (__sincos))
- ENTER
-
- movsd %xmm0, -8(%rsp)
- fldl -8(%rsp)
- fsincos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstpl (%rsi)
- fstpl (%rdi)
-
- LEAVE
- retq
-
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsincos
- fstpl (%rsi)
- fstpl (%rdi)
-
- LEAVE
- retq
-END (BP_SYM (__sincos))
-weak_alias (BP_SYM (__sincos), BP_SYM (sincos))
diff --git a/sysdeps/x86_64/fpu/s_sinl.S b/sysdeps/x86_64/fpu/s_sinl.S
deleted file mode 100644
index 79fc4af95b..0000000000
--- a/sysdeps/x86_64/fpu/s_sinl.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-ENTRY(__sinl)
- fldt 8(%rsp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fsin
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
- .align ALIGNARG(4)
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsin
- ret
-3: call __errno_location@PLT
- movl $EDOM, (%rax)
- jmp 4b
-END (__sinl)
-weak_alias (__sinl, sinl)
diff --git a/sysdeps/x86_64/fpu/s_tanl.S b/sysdeps/x86_64/fpu/s_tanl.S
deleted file mode 100644
index 6427e3f6f0..0000000000
--- a/sysdeps/x86_64/fpu/s_tanl.S
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
- * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
- */
-
-#define __need_Emath
-#include <bits/errno.h>
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-ENTRY(__tanl)
- fldt 8(%rsp)
- fxam
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 3f
-4: fptan
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstp %st(0)
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fptan
- fstp %st(0)
- ret
-3: call __errno_location@PLT
- movl $EDOM, (%rax)
- jmp 4b
-END (__tanl)
-weak_alias (__tanl, tanl)
diff --git a/sysdeps/x86_64/jmpbuf-unwind.h b/sysdeps/x86_64/jmpbuf-unwind.h
index 646615d43b..890037ea7e 100644
--- a/sysdeps/x86_64/jmpbuf-unwind.h
+++ b/sysdeps/x86_64/jmpbuf-unwind.h
@@ -28,7 +28,9 @@
((void *) (address) < (void *) demangle ((jmpbuf)[JB_RSP]))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
- _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
+ _JMPBUF_UNWINDS_ADJ (_jmpbuf, \
+ (void *) (_Unwind_Ptr) _Unwind_GetCFA (_context), \
+ _adj)
static inline uintptr_t __attribute__ ((unused))
_jmpbuf_sp (__jmp_buf regs)
diff --git a/sysdeps/i386/elf/configure b/sysdeps/x86_64/preconfigure
index 83e89bd0a0..48ba6a1516 100644
--- a/sysdeps/i386/elf/configure
+++ b/sysdeps/x86_64/preconfigure
@@ -80,49 +80,83 @@ $as_echo X/"$0" |
exit
}
-# This file is generated from configure.in by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/i386/elf.
-# Check for support of thread-local storage handling in assembler and
-# linker.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for i386 TLS support" >&5
-$as_echo_n "checking for i386 TLS support... " >&6; }
-if ${libc_cv_386_tls+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat > conftest.s <<\EOF
- .section ".tdata", "awT", @progbits
- .globl foo
-foo: .long 1
- .section ".tbss", "awT", @nobits
- .globl bar
-bar: .skip 4
- .text
-baz: leal bar@TLSLDM(%ebx), %eax
- leal bar@DTPOFF(%eax), %edx
- subl foo@GOTTPOFF(%edx), %eax
- subl $bar@TPOFF, %eax
- movl foo@GOTNTPOFF(%edx), %ecx
- movl %gs:(%ecx), %eax
- movl %gs:bar@NTPOFF, %eax
-EOF
-if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- libc_cv_386_tls=yes
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
else
- libc_cv_386_tls=no
-fi
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_386_tls" >&5
-$as_echo "$libc_cv_386_tls" >&6; }
-if test $libc_cv_386_tls = no; then
- as_fn_error $? "the assembler must support TLS" "$LINENO" 5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+# This file is generated from configure.in by Autoconf. DO NOT EDIT!
+ # Local preconfigure fragment for sysdeps/x86_64
-$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
+test -n "$base_machine" || case "$machine" in
+x86_64)
+ base_machine=x86_64
+ # Check if we are building for x32.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC compiles in -mx32 mode by default" >&5
+$as_echo_n "checking whether $CC compiles in -mx32 mode by default... " >&6; }
+if ${libc_cv_x32+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __LP64__
+# error not x32
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_cv_x32=yes
+else
+ libc_cv_x32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x32" >&5
+$as_echo "$libc_cv_x32" >&6; }
+ if test $libc_cv_x32 = yes; then
+ machine=x86_64/x32
+ else
+ machine=x86_64/64
+ fi
+ ;;
+esac
diff --git a/sysdeps/x86_64/preconfigure.in b/sysdeps/x86_64/preconfigure.in
new file mode 100644
index 0000000000..1f049c7a04
--- /dev/null
+++ b/sysdeps/x86_64/preconfigure.in
@@ -0,0 +1,20 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local preconfigure fragment for sysdeps/x86_64
+
+test -n "$base_machine" || case "$machine" in
+x86_64)
+ base_machine=x86_64
+ # Check if we are building for x32.
+ AC_CACHE_CHECK(whether $CC compiles in -mx32 mode by default,
+ libc_cv_x32, [dnl
+ AC_TRY_COMPILE(dnl
+[#ifdef __LP64__
+# error not x32
+#endif], [], libc_cv_x32=yes, libc_cv_x32=no)])
+ if test $libc_cv_x32 = yes; then
+ machine=x86_64/x32
+ else
+ machine=x86_64/64
+ fi
+ ;;
+esac
diff --git a/sysdeps/x86_64/elf/start.S b/sysdeps/x86_64/start.S
index 68d61e234a..5e01d21179 100644
--- a/sysdeps/x86_64/elf/start.S
+++ b/sysdeps/x86_64/start.S
@@ -1,5 +1,5 @@
/* Startup code compliant to the ELF x86-64 ABI.
- Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 2001.
@@ -53,12 +53,16 @@
NULL
*/
+#include <sysdep.h>
#include "bp-sym.h"
.text
.globl _start
.type _start,@function
_start:
+ cfi_startproc
+ /* Clearing frame pointer is insufficient, use CFI. */
+ cfi_undefined (rip)
/* Clear the frame pointer. The ABI suggests this be done, to mark
the outermost frame obviously. */
xorl %ebp, %ebp
@@ -113,6 +117,7 @@ _start:
#endif
hlt /* Crash if somehow `exit' does return. */
+ cfi_endproc
/* Define a symbol for the first piece of initialized data. */
.data
diff --git a/termios/termios.h b/termios/termios.h
index c42c62cd87..762e7511cd 100644
--- a/termios/termios.h
+++ b/termios/termios.h
@@ -95,7 +95,7 @@ extern int tcflush (int __fd, int __queue_selector) __THROW;
extern int tcflow (int __fd, int __action) __THROW;
-#ifdef __USE_UNIX98
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
/* Get process group ID for session leader for controlling terminal FD. */
extern __pid_t tcgetsid (int __fd) __THROW;
#endif
diff --git a/time/Makefile b/time/Makefile
index 49ea729e35..ffa3e881ef 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2003, 2004, 2005, 2007, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1991-2005,2007,2011,2012 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
@@ -31,7 +31,6 @@ routines := offtime asctime clock ctime ctime_r difftime \
strftime wcsftime strftime_l wcsftime_l \
timespec_get
aux := era alt_digit lc-time-cleanup
-distribute := datemsk
tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
diff --git a/time/offtime.c b/time/offtime.c
index 1ccd6a89e3..56c49f0201 100644
--- a/time/offtime.c
+++ b/time/offtime.c
@@ -31,7 +31,7 @@ __offtime (t, offset, tp)
long int offset;
struct tm *tp;
{
- long int days, rem, y;
+ time_t days, rem, y;
const unsigned short int *ip;
days = *t / SECS_PER_DAY;
@@ -63,7 +63,7 @@ __offtime (t, offset, tp)
while (days < 0 || days >= (__isleap (y) ? 366 : 365))
{
/* Guess a corrected year, assuming 365 days per year. */
- long int yg = y + days / 365 - (days % 365 < 0);
+ time_t yg = y + days / 365 - (days % 365 < 0);
/* Adjust DAYS and Y to match the guessed year. */
days -= ((yg - y) * 365
diff --git a/timezone/Makefile b/timezone/Makefile
index e8fb7162f4..9e55a6ac54 100644
--- a/timezone/Makefile
+++ b/timezone/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2002,2005,2007 Free Software Foundation, Inc.
+# Copyright (C) 1998-2000,2002,2005,2007,2012 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
@@ -20,23 +20,18 @@
#
subdir := timezone
-distribute := tzfile.h private.h scheck.c ialloc.c yearistype \
- iso3166.tab zone.tab tzselect.ksh checktab.awk \
- README
-
extra-objs := scheck.o ialloc.o
others := zdump zic
tests := test-tz tst-timezone
+# pacificnew doesn't compile; if it is to be used, it should be included in
+# northamerica.
tzbases := africa antarctica asia australasia europe northamerica \
southamerica etcetera factory \
solar87 solar88 solar89
tzlinks := backward systemv
tzfiles := $(tzbases) $(tzlinks)
-# pacificnew doesn't compile; if it is to be used, it should be included in
-# northamerica.
-distribute += $(tzfiles) leapseconds pacificnew simplebackw
generated := $(addprefix z.,$(tzfiles))
install-sbin := zic zdump
@@ -49,35 +44,7 @@ include ../Makeconfig # Get objpfx defined so we can use it below.
CPPFLAGS-zic = -DNOT_IN_libc
-# z.* use this variable.
-define nl
-
-
-endef
-ifndef avoid-generated
-ifndef inhibit_timezone_rules
--include $(addprefix $(objpfx)z.,$(tzfiles))
-endif
-endif
-
-# Make these absolute file names.
-installed-localtime-file := $(firstword $(filter /%,$(inst_localtime-file)) \
- $(addprefix $(inst_zonedir)/, \
- $(localtime-file)))
-installed-posixrules-file := $(firstword $(filter /%,$(posixrules-file)) \
- $(addprefix $(inst_zonedir)/, \
- $(posixrules-file)))
-
-ifeq ($(cross-compiling),no)
-# Don't try to install the zoneinfo files since we can't run zic.
-install-others = $(addprefix $(inst_zonedir)/,$(zonenames) \
- $(zonenames:%=posix/%) \
- $(zonenames:%=right/%)) \
- $(installed-localtime-file) $(installed-posixrules-file)
-endif
-
ifeq ($(have-ksh),yes)
-install-others += $(inst_zonedir)/iso3166.tab $(inst_zonedir)/zone.tab
install-bin-script = tzselect
generated += tzselect
endif
@@ -85,79 +52,6 @@ endif
include ../Rules
-$(tzfiles:%=$(objpfx)z.%): $(objpfx)z.%: % Makefile
-# Kludge alert: we use an implicit rule (in what we are generating here)
-# because that is the only way to tell Make that the one command builds all
-# the files.
-# The extra kludge for the $(tzlinks) files is necessary since running zic
-# this file requires all other files to exist. Blech!
- $(make-target-directory)
- (echo 'define $*-zones' ;\
- $(AWK) '$$1 == "Zone" { print $$2 } $$1 == "Link" { print $$3 }' $^ ;\
- echo 'endef' ;\
- echo '$*-zones := $$(subst $$(nl), ,$$($*-zones))' ;\
- echo 'ifdef $*-zones' ;\
- if test x$(findstring $*, $(tzlinks)) != x; then \
- echo '$$(addprefix $$(inst_zonedir)/right/,$$($*-zones)): \';\
- echo '$$(foreach t,$$(tzbases),$$(addprefix $$(inst_zonedir)/right/,$$($$t-zones)))' ;\
- echo '$$(addprefix $$(inst_zonedir)/posix/,$$($*-zones)): \';\
- echo '$$(foreach t,$$(tzbases),$$(addprefix $$(inst_zonedir)/posix/,$$($$t-zones)))' ;\
- echo '$$(addprefix $$(inst_zonedir)/,$$($*-zones)): \' ;\
- echo '$$(foreach t,$$(tzbases),$$(addprefix $$(inst_zonedir)/,$$($$t-zones)))' ;\
- fi ;\
- echo '$$(addprefix $$(dir $$(inst_zonedir))zone%/right/,$$($*-zones)): \' ;\
- echo '$< $$(objpfx)zic leapseconds yearistype' ;\
- echo ' $$(tzcompile)' ;\
- echo '$$(addprefix $$(dir $$(inst_zonedir))zone%/posix/,$$($*-zones)): \' ;\
- echo '$< $$(objpfx)zic /dev/null yearistype' ;\
- echo ' $$(tzcompile)' ;\
- echo '$$(addprefix $$(dir $$(inst_zonedir))zone%/,$$($*-zones)): \' ;\
- echo '$< $$(objpfx)zic $$(leapseconds) yearistype' ;\
- echo ' $$(tzcompile)' ;\
- echo 'endif' ;\
- echo 'zonenames := $$(zonenames) $$($*-zones)' ;\
- ) > $@.new
- mv $@.new $@
-
-.PHONY: echo-zonenames
-echo-zonenames:
- @echo 'Known zones: $(zonenames)'
-
-
-# We have to use `-d $(inst_zonedir)' to explictly tell zic where to
-# place the output files although $(zonedir) is compiled in. But the
-# user might have set $(install_root) on the command line of `make install'.
-zic-cmd = $(built-program-cmd) -d $(inst_zonedir)
-tzcompile = $(zic-cmd)$(target-zone-flavor) -L $(word 3,$^) \
- -y $(dir $(word 4,$^))$(notdir $(word 4,$^)) $<
-
-# The source files specify the zone names relative to the -d directory,
-# so for the posix/ and right/ flavors we need to pass -d $(inst_zonedir)/posix
-# and the like. This magic extracts /posix or /right if it's the first
-# component after $(inst_zonedir) in the target name $@.
-target-zone-flavor = $(filter /posix /right, \
- /$(firstword $(subst /, , \
- $(patsubst $(inst_zonedir)/%,%,$@))))
-
-ifdef localtime
-$(installed-localtime-file): $(inst_zonedir)/$(localtime) $(objpfx)zic \
- $(+force)
- $(make-target-directory)
- if test -r $@; then \
- echo Site timezone NOT reset to Factory.; \
- else \
- rm -f $@T; \
- $(SHELL) $(..)scripts/rellns-sh $< $@T; \
- mv -f $@T $@; \
- fi
-endif
-ifdef posixrules
-$(installed-posixrules-file): $(inst_zonedir)/$(posixrules) $(objpfx)zic \
- $(+force)
- $(zic-cmd) -p $(posixrules)
-endif
-
-
$(objpfx)zic: $(objpfx)scheck.o $(objpfx)ialloc.o
tz-cflags = -DTZDIR='"$(zonedir)"' \
@@ -216,7 +110,3 @@ $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
-e 's%@TZDIR@%$(zonedir)%g' < $< > $@.new
chmod 555 $@.new
mv -f $@.new $@
-
-$(addprefix $(inst_zonedir)/,iso3166.tab zone.tab): \
- $(inst_zonedir)/%: % $(+force)
- $(do-install)
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile
index 46d4c5f478..fc67be8f82 100644
--- a/wcsmbs/Makefile
+++ b/wcsmbs/Makefile
@@ -22,7 +22,6 @@
subdir := wcsmbs
headers := wchar.h bits/wchar.h bits/wchar2.h bits/wchar-ldbl.h uchar.h
-distribute := wcwidth.h wcsmbsload.h
routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcstok wcsstr wmemchr \
diff --git a/wctype/Makefile b/wctype/Makefile
index e54e6efe56..6a06f001fe 100644
--- a/wctype/Makefile
+++ b/wctype/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996, 1997, 1999, 2000, 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996,1997,1999,2000,2008,2012 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
@@ -21,7 +21,6 @@
subdir := wctype
headers := wctype.h
-distribute := wchar-lookup.h
routines := wcfuncs wctype iswctype wctrans towctrans \
wcfuncs_l wctype_l iswctype_l wctrans_l towctrans_l