summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2012-11-06 17:31:45 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2012-11-06 17:31:45 +0000
commit5c8ae23aecdb14ee22ba06684c488cfe0306ff0e (patch)
treedaf286cd6c5edb7441d779682e09e8dc511e57c9
parentdb0fbac046813774566dfc025932d4e8c0a35640 (diff)
downloadeglibc2-5c8ae23aecdb14ee22ba06684c488cfe0306ff0e.tar.gz
Merge changes between r21352 and r21563 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@21564 7b3dc134-2b1b-0410-93df-9e9f96275f8d
-rw-r--r--libc/ChangeLog910
-rw-r--r--libc/INSTALL19
-rw-r--r--libc/Makeconfig2
-rw-r--r--libc/Makerules4
-rw-r--r--libc/NEWS19
-rw-r--r--libc/aclocal.m410
-rwxr-xr-xlibc/catgets/test-gencat.sh4
-rw-r--r--libc/configure.in2
-rw-r--r--libc/conform/conformtest.pl2
-rw-r--r--libc/conform/data/complex.h-data2
-rw-r--r--libc/conform/data/fenv.h-data36
-rw-r--r--libc/conform/data/inttypes.h-data2
-rw-r--r--libc/conform/data/sys/wait.h-data2
-rw-r--r--libc/csu/libc-start.c2
-rw-r--r--libc/dirent/closedir.c1
-rw-r--r--libc/dirent/dirfd.c1
-rw-r--r--libc/dirent/fdopendir.c1
-rw-r--r--libc/dirent/getdents.c1
-rw-r--r--libc/dirent/getdents64.c1
-rw-r--r--libc/dirent/opendir.c1
-rw-r--r--libc/dirent/readdir.c1
-rw-r--r--libc/dirent/readdir64.c1
-rw-r--r--libc/dirent/readdir64_r.c1
-rw-r--r--libc/dirent/readdir_r.c1
-rw-r--r--libc/dirent/rewinddir.c1
-rw-r--r--libc/dirent/seekdir.c1
-rw-r--r--libc/dirent/telldir.c1
-rw-r--r--libc/elf/Makefile57
-rw-r--r--libc/elf/dl-load.c4
-rw-r--r--libc/elf/dl-support.c2
-rw-r--r--libc/elf/elf.h17
-rw-r--r--libc/elf/tst-array1.c4
-rw-r--r--libc/elf/tst-array2dep.c4
-rw-r--r--libc/gmon/profil.c1
-rw-r--r--libc/grp/initgroups.c4
-rw-r--r--libc/grp/setgroups.c1
-rw-r--r--libc/iconvdata/bug-iconv8.c2
-rw-r--r--libc/iconvdata/bug-iconv9.c2
-rwxr-xr-xlibc/iconvdata/tst-table.sh2
-rwxr-xr-xlibc/iconvdata/tst-tables.sh2
-rw-r--r--libc/include/bits/stdlib-float.h4
-rw-r--r--libc/include/fenv.h3
-rw-r--r--libc/include/stub-tag.h4
-rw-r--r--libc/include/sys/syslog.h2
-rw-r--r--libc/inet/if_index.c1
-rw-r--r--libc/io/access.c1
-rw-r--r--libc/io/chdir.c1
-rw-r--r--libc/io/chmod.c1
-rw-r--r--libc/io/chown.c1
-rw-r--r--libc/io/close.c1
-rw-r--r--libc/io/dup.c1
-rw-r--r--libc/io/dup2.c1
-rw-r--r--libc/io/dup3.c2
-rw-r--r--libc/io/euidaccess.c1
-rw-r--r--libc/io/faccessat.c2
-rw-r--r--libc/io/fchdir.c1
-rw-r--r--libc/io/fchmod.c1
-rw-r--r--libc/io/fchmodat.c2
-rw-r--r--libc/io/fchown.c1
-rw-r--r--libc/io/fchownat.c2
-rw-r--r--libc/io/fcntl.c1
-rw-r--r--libc/io/flock.c1
-rw-r--r--libc/io/fstatfs.c1
-rw-r--r--libc/io/fstatfs64.c1
-rw-r--r--libc/io/fstatvfs.c1
-rw-r--r--libc/io/fstatvfs64.c1
-rw-r--r--libc/io/futimens.c1
-rw-r--r--libc/io/fxstat.c1
-rw-r--r--libc/io/fxstat64.c1
-rw-r--r--libc/io/fxstatat.c1
-rw-r--r--libc/io/fxstatat64.c1
-rw-r--r--libc/io/getcwd.c1
-rw-r--r--libc/io/isatty.c1
-rw-r--r--libc/io/lchmod.c1
-rw-r--r--libc/io/lchown.c1
-rw-r--r--libc/io/link.c1
-rw-r--r--libc/io/linkat.c2
-rw-r--r--libc/io/lseek.c1
-rw-r--r--libc/io/lseek64.c1
-rw-r--r--libc/io/lxstat64.c1
-rw-r--r--libc/io/mkdir.c1
-rw-r--r--libc/io/mkdirat.c2
-rw-r--r--libc/io/mkfifo.c1
-rw-r--r--libc/io/mkfifoat.c1
-rw-r--r--libc/io/open.c2
-rw-r--r--libc/io/open64.c2
-rw-r--r--libc/io/openat.c2
-rw-r--r--libc/io/openat64.c2
-rw-r--r--libc/io/pipe.c1
-rw-r--r--libc/io/pipe2.c2
-rw-r--r--libc/io/poll.c1
-rw-r--r--libc/io/posix_fadvise.c1
-rw-r--r--libc/io/posix_fadvise64.c1
-rw-r--r--libc/io/posix_fallocate.c1
-rw-r--r--libc/io/posix_fallocate64.c1
-rw-r--r--libc/io/read.c1
-rw-r--r--libc/io/readlink.c1
-rw-r--r--libc/io/readlinkat.c2
-rw-r--r--libc/io/rmdir.c1
-rw-r--r--libc/io/sendfile.c2
-rw-r--r--libc/io/sendfile64.c2
-rw-r--r--libc/io/statfs.c1
-rw-r--r--libc/io/statfs64.c1
-rw-r--r--libc/io/statvfs.c1
-rw-r--r--libc/io/statvfs64.c1
-rw-r--r--libc/io/symlink.c1
-rw-r--r--libc/io/symlinkat.c2
-rw-r--r--libc/io/ttyname.c1
-rw-r--r--libc/io/ttyname_r.c1
-rw-r--r--libc/io/umask.c1
-rw-r--r--libc/io/unlink.c1
-rw-r--r--libc/io/unlinkat.c2
-rw-r--r--libc/io/utime.c1
-rw-r--r--libc/io/utimensat.c1
-rw-r--r--libc/io/write.c1
-rw-r--r--libc/io/xmknod.c1
-rw-r--r--libc/io/xmknodat.c1
-rw-r--r--libc/io/xstat.c1
-rw-r--r--libc/io/xstat64.c1
-rw-r--r--libc/libio/genops.c2
-rw-r--r--libc/localedata/ChangeLog10
-rw-r--r--libc/localedata/locales/fi_FI@euro6
-rwxr-xr-xlibc/localedata/tst-langinfo.sh5
-rw-r--r--libc/login/getpt.c1
-rw-r--r--libc/login/grantpt.c1
-rw-r--r--libc/login/unlockpt.c1
-rw-r--r--libc/manual/install.texi20
-rw-r--r--libc/manual/maint.texi3
-rw-r--r--libc/manual/message.texi2
-rw-r--r--libc/math/e_acoshl.c1
-rw-r--r--libc/math/e_acosl.c1
-rw-r--r--libc/math/e_asinl.c1
-rw-r--r--libc/math/e_atan2l.c1
-rw-r--r--libc/math/e_atanhl.c1
-rw-r--r--libc/math/e_coshl.c1
-rw-r--r--libc/math/e_expl.c1
-rw-r--r--libc/math/e_fmodl.c1
-rw-r--r--libc/math/e_gammal_r.c1
-rw-r--r--libc/math/e_hypotl.c1
-rw-r--r--libc/math/e_j0l.c1
-rw-r--r--libc/math/e_j1l.c1
-rw-r--r--libc/math/e_jnl.c1
-rw-r--r--libc/math/e_lgammal_r.c1
-rw-r--r--libc/math/e_log10l.c1
-rw-r--r--libc/math/e_log2l.c1
-rw-r--r--libc/math/e_logl.c1
-rw-r--r--libc/math/e_powl.c1
-rw-r--r--libc/math/e_rem_pio2l.c1
-rw-r--r--libc/math/e_sinhl.c1
-rw-r--r--libc/math/e_sqrtl.c1
-rw-r--r--libc/math/fclrexcpt.c2
-rw-r--r--libc/math/fedisblxcpt.c1
-rw-r--r--libc/math/feenablxcpt.c1
-rw-r--r--libc/math/fegetenv.c1
-rw-r--r--libc/math/fegetexcept.c1
-rw-r--r--libc/math/fegetround.c1
-rw-r--r--libc/math/feholdexcpt.c1
-rw-r--r--libc/math/fesetenv.c1
-rw-r--r--libc/math/fesetround.c1
-rw-r--r--libc/math/feupdateenv.c1
-rw-r--r--libc/math/fgetexcptflg.c1
-rw-r--r--libc/math/fraiseexcpt.c1
-rw-r--r--libc/math/fsetexcptflg.c1
-rw-r--r--libc/math/ftestexcept.c1
-rw-r--r--libc/math/k_cosl.c1
-rw-r--r--libc/math/k_rem_pio2l.c1
-rw-r--r--libc/math/k_sinl.c1
-rw-r--r--libc/math/k_tanl.c1
-rw-r--r--libc/math/libm-test.inc654
-rw-r--r--libc/math/math.h25
-rw-r--r--libc/math/s_asinhl.c1
-rw-r--r--libc/math/s_atanl.c1
-rw-r--r--libc/math/s_cbrtl.c1
-rw-r--r--libc/math/s_erfl.c1
-rw-r--r--libc/math/s_expm1l.c1
-rw-r--r--libc/math/s_log1pl.c1
-rw-r--r--libc/math/s_tanhl.c1
-rw-r--r--libc/misc/acct.c1
-rw-r--r--libc/misc/brk.c1
-rw-r--r--libc/misc/chflags.c1
-rw-r--r--libc/misc/chroot.c1
-rw-r--r--libc/misc/fchflags.c1
-rw-r--r--libc/misc/fgetxattr.c1
-rw-r--r--libc/misc/flistxattr.c1
-rw-r--r--libc/misc/fremovexattr.c1
-rw-r--r--libc/misc/fsetxattr.c1
-rw-r--r--libc/misc/fsync.c1
-rw-r--r--libc/misc/ftruncate.c1
-rw-r--r--libc/misc/futimes.c1
-rw-r--r--libc/misc/futimesat.c1
-rw-r--r--libc/misc/getdomain.c1
-rw-r--r--libc/misc/getdtsz.c1
-rw-r--r--libc/misc/gethostid.c1
-rw-r--r--libc/misc/gethostname.c1
-rw-r--r--libc/misc/getloadavg.c1
-rw-r--r--libc/misc/getpagesize.c1
-rw-r--r--libc/misc/getsysstats.c1
-rw-r--r--libc/misc/getxattr.c1
-rw-r--r--libc/misc/gtty.c1
-rw-r--r--libc/misc/ioctl.c1
-rw-r--r--libc/misc/lgetxattr.c1
-rw-r--r--libc/misc/listxattr.c1
-rw-r--r--libc/misc/llistxattr.c1
-rw-r--r--libc/misc/lremovexattr.c1
-rw-r--r--libc/misc/lsetxattr.c1
-rw-r--r--libc/misc/lutimes.c1
-rw-r--r--libc/misc/madvise.c1
-rw-r--r--libc/misc/mincore.c1
-rw-r--r--libc/misc/mlock.c1
-rw-r--r--libc/misc/mlockall.c1
-rw-r--r--libc/misc/mmap.c1
-rw-r--r--libc/misc/mprotect.c1
-rw-r--r--libc/misc/msync.c1
-rw-r--r--libc/misc/munlock.c1
-rw-r--r--libc/misc/munlockall.c1
-rw-r--r--libc/misc/munmap.c1
-rw-r--r--libc/misc/preadv.c1
-rw-r--r--libc/misc/preadv64.c1
-rw-r--r--libc/misc/ptrace.c1
-rw-r--r--libc/misc/pwritev.c1
-rw-r--r--libc/misc/pwritev64.c1
-rw-r--r--libc/misc/readv.c1
-rw-r--r--libc/misc/reboot.c1
-rw-r--r--libc/misc/remap_file_pages.c1
-rw-r--r--libc/misc/removexattr.c1
-rw-r--r--libc/misc/revoke.c1
-rw-r--r--libc/misc/select.c1
-rw-r--r--libc/misc/setdomain.c1
-rw-r--r--libc/misc/setegid.c1
-rw-r--r--libc/misc/seteuid.c1
-rw-r--r--libc/misc/sethostid.c1
-rw-r--r--libc/misc/sethostname.c1
-rw-r--r--libc/misc/setregid.c1
-rw-r--r--libc/misc/setreuid.c1
-rw-r--r--libc/misc/setxattr.c1
-rw-r--r--libc/misc/sstk.c1
-rw-r--r--libc/misc/stty.c1
-rw-r--r--libc/misc/swapoff.c1
-rw-r--r--libc/misc/swapon.c1
-rw-r--r--libc/misc/sync.c1
-rw-r--r--libc/misc/syncfs.c1
-rw-r--r--libc/misc/syscall.c1
-rw-r--r--libc/misc/truncate.c1
-rw-r--r--libc/misc/ualarm.c1
-rw-r--r--libc/misc/usleep.c1
-rw-r--r--libc/misc/ustat.c1
-rw-r--r--libc/misc/utimes.c1
-rw-r--r--libc/misc/vhangup.c1
-rw-r--r--libc/misc/writev.c1
-rw-r--r--libc/nptl/ChangeLog67
-rw-r--r--libc/nptl/Makefile2
-rw-r--r--libc/nptl/pthread_cond_timedwait.c22
-rw-r--r--libc/nptl/pthread_rwlock_timedrdlock.c21
-rw-r--r--libc/nptl/pthread_rwlock_timedwrlock.c21
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c16
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h13
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h20
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h5
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile1
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S1
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S67
-rw-r--r--libc/nptl/sysdeps/x86_64/tls.h11
-rw-r--r--libc/nptl/tst-basic2.c4
-rw-r--r--libc/nptl/tst-cond-except.c6
-rw-r--r--libc/nptl/tst-cond25.c25
-rwxr-xr-xlibc/nptl/tst-tls6.sh25
-rw-r--r--libc/nss/getXXbyYY.c2
-rw-r--r--libc/nss/getXXbyYY_r.c2
-rw-r--r--libc/nss/getXXent.c2
-rw-r--r--libc/nss/getXXent_r.c6
-rw-r--r--libc/nss/nsswitch.h8
-rw-r--r--libc/po/eo.po6992
-rw-r--r--libc/po/ru.po55
-rw-r--r--libc/ports/ChangeLog.alpha31
-rw-r--r--libc/ports/ChangeLog.am3320
-rw-r--r--libc/ports/ChangeLog.arm25
-rw-r--r--libc/ports/ChangeLog.hppa62
-rw-r--r--libc/ports/ChangeLog.ia6431
-rw-r--r--libc/ports/ChangeLog.linux-generic18
-rw-r--r--libc/ports/ChangeLog.m68k24
-rw-r--r--libc/ports/ChangeLog.mips74
-rw-r--r--libc/ports/ChangeLog.powerpc19
-rw-r--r--libc/ports/ChangeLog.tile55
-rw-r--r--libc/ports/sysdeps/alpha/fpu/bits/fenv.h55
-rw-r--r--libc/ports/sysdeps/alpha/fpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/alpha/tininess.h1
-rw-r--r--libc/ports/sysdeps/am33/fpu/bits/fenv.h32
-rw-r--r--libc/ports/sysdeps/am33/fpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/am33/tininess.h1
-rw-r--r--libc/ports/sysdeps/arm/bits/fenv.h47
-rw-r--r--libc/ports/sysdeps/arm/fclrexcpt.c1
-rw-r--r--libc/ports/sysdeps/hppa/fpu/bits/fenv.h51
-rw-r--r--libc/ports/sysdeps/hppa/fpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/hppa/tininess.h1
-rw-r--r--libc/ports/sysdeps/ia64/bits/fenv.h54
-rw-r--r--libc/ports/sysdeps/ia64/fpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/ia64/tininess.h1
-rw-r--r--libc/ports/sysdeps/m68k/fpu/bits/fenv.h45
-rw-r--r--libc/ports/sysdeps/m68k/fpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/mips/bits/fenv.h45
-rw-r--r--libc/ports/sysdeps/mips/fpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/mips/memcpy.S704
-rw-r--r--libc/ports/sysdeps/mips/mips64/memcpy.S138
-rw-r--r--libc/ports/sysdeps/mips/tininess.h1
-rw-r--r--libc/ports/sysdeps/powerpc/nofpu/fclrexcpt.c3
-rw-r--r--libc/ports/sysdeps/powerpc/powerpc32/405/memset.S12
-rw-r--r--libc/ports/sysdeps/powerpc/powerpc32/476/memset.S154
-rw-r--r--libc/ports/sysdeps/powerpc/powerpc32/e500/fpu/fclrexcpt.c1
-rw-r--r--libc/ports/sysdeps/tile/bits/fenv.h7
-rw-r--r--libc/ports/sysdeps/tile/crti.S23
-rw-r--r--libc/ports/sysdeps/tile/dl-machine.h4
-rw-r--r--libc/ports/sysdeps/tile/dl-runtime.c107
-rw-r--r--libc/ports/sysdeps/tile/libm-test-ulps68
-rw-r--r--libc/ports/sysdeps/tile/math_private.h32
-rw-r--r--libc/ports/sysdeps/tile/memcopy.h27
-rw-r--r--libc/ports/sysdeps/tile/nptl/pthread_spin_unlock.c33
-rw-r--r--libc/ports/sysdeps/tile/start.S23
-rw-r--r--libc/ports/sysdeps/tile/tilegx/Makefile18
-rw-r--r--libc/ports/sysdeps/tile/tilegx/memcpy.c200
-rw-r--r--libc/ports/sysdeps/tile/wordcopy.c449
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h241
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h14
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h291
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/generic/sysctl.c1
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/generic/ustat.c1
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h273
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h84
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h274
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h280
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/Makefile43
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/configure106
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/configure.in44
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/mips32/Makefile1
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c2
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/Makefile1
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist5
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/Makefile1
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h12
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist2
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/tile/Makefile4
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/tile/bits/libc-vdso.h (renamed from libc/sysdeps/mach/powerpc/syscall.S)29
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/tile/gettimeofday.c37
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/tile/init-first.c34
-rw-r--r--libc/posix/_exit.c1
-rw-r--r--libc/posix/alarm.c1
-rw-r--r--libc/posix/execve.c1
-rw-r--r--libc/posix/fexecve.c1
-rw-r--r--libc/posix/fork.c1
-rw-r--r--libc/posix/fpathconf.c1
-rw-r--r--libc/posix/getaddrinfo.c2
-rw-r--r--libc/posix/getegid.c1
-rw-r--r--libc/posix/geteuid.c1
-rw-r--r--libc/posix/getgid.c1
-rw-r--r--libc/posix/getgroups.c1
-rw-r--r--libc/posix/getlogin.c1
-rw-r--r--libc/posix/getlogin_r.c1
-rw-r--r--libc/posix/getpgid.c1
-rw-r--r--libc/posix/getpid.c1
-rw-r--r--libc/posix/getppid.c1
-rw-r--r--libc/posix/getresgid.c1
-rw-r--r--libc/posix/getresuid.c1
-rw-r--r--libc/posix/getsid.c1
-rw-r--r--libc/posix/getuid.c1
-rw-r--r--libc/posix/glob64.c1
-rw-r--r--libc/posix/nanosleep.c1
-rw-r--r--libc/posix/pathconf.c1
-rw-r--r--libc/posix/pause.c1
-rw-r--r--libc/posix/posix_madvise.c1
-rw-r--r--libc/posix/pread.c1
-rw-r--r--libc/posix/pread64.c1
-rw-r--r--libc/posix/pwrite.c1
-rw-r--r--libc/posix/pwrite64.c1
-rw-r--r--libc/posix/sched_getaffinity.c1
-rw-r--r--libc/posix/sched_getp.c1
-rw-r--r--libc/posix/sched_gets.c1
-rw-r--r--libc/posix/sched_primax.c1
-rw-r--r--libc/posix/sched_primin.c1
-rw-r--r--libc/posix/sched_rr_gi.c1
-rw-r--r--libc/posix/sched_setaffinity.c1
-rw-r--r--libc/posix/sched_setp.c1
-rw-r--r--libc/posix/sched_sets.c1
-rw-r--r--libc/posix/sched_yield.c1
-rw-r--r--libc/posix/setgid.c1
-rw-r--r--libc/posix/setlogin.c1
-rw-r--r--libc/posix/setpgid.c1
-rw-r--r--libc/posix/setresgid.c1
-rw-r--r--libc/posix/setresuid.c1
-rw-r--r--libc/posix/setsid.c1
-rw-r--r--libc/posix/setuid.c1
-rw-r--r--libc/posix/sleep.c1
-rw-r--r--libc/posix/spawni.c1
-rw-r--r--libc/posix/sysconf.c1
-rw-r--r--libc/posix/times.c1
-rw-r--r--libc/posix/wait.c1
-rw-r--r--libc/posix/wait3.c1
-rw-r--r--libc/posix/wait4.c1
-rw-r--r--libc/posix/waitpid.c1
-rw-r--r--libc/resolv/gai_sigqueue.c1
-rw-r--r--libc/resource/getpriority.c1
-rw-r--r--libc/resource/getrlimit.c1
-rw-r--r--libc/resource/getrusage.c1
-rw-r--r--libc/resource/nice.c1
-rw-r--r--libc/resource/setpriority.c1
-rw-r--r--libc/resource/setrlimit.c1
-rw-r--r--libc/resource/ulimit.c1
-rw-r--r--libc/rt/aio_cancel.c1
-rw-r--r--libc/rt/aio_fsync.c1
-rw-r--r--libc/rt/aio_read.c1
-rw-r--r--libc/rt/aio_sigqueue.c1
-rw-r--r--libc/rt/aio_suspend.c1
-rw-r--r--libc/rt/aio_write.c1
-rw-r--r--libc/rt/clock_getres.c1
-rw-r--r--libc/rt/clock_gettime.c1
-rw-r--r--libc/rt/clock_nanosleep.c1
-rw-r--r--libc/rt/clock_settime.c1
-rw-r--r--libc/rt/lio_listio.c1
-rw-r--r--libc/rt/mq_close.c1
-rw-r--r--libc/rt/mq_getattr.c1
-rw-r--r--libc/rt/mq_notify.c1
-rw-r--r--libc/rt/mq_open.c1
-rw-r--r--libc/rt/mq_receive.c1
-rw-r--r--libc/rt/mq_send.c1
-rw-r--r--libc/rt/mq_setattr.c1
-rw-r--r--libc/rt/mq_timedreceive.c1
-rw-r--r--libc/rt/mq_timedsend.c1
-rw-r--r--libc/rt/mq_unlink.c1
-rw-r--r--libc/rt/shm_open.c2
-rw-r--r--libc/rt/shm_unlink.c2
-rw-r--r--libc/rt/timer_create.c1
-rw-r--r--libc/rt/timer_delete.c1
-rw-r--r--libc/rt/timer_getoverr.c1
-rw-r--r--libc/rt/timer_gettime.c1
-rw-r--r--libc/rt/timer_settime.c1
-rw-r--r--libc/rt/tst-shm.c2
-rwxr-xr-xlibc/scripts/check-local-headers.sh3
-rwxr-xr-xlibc/scripts/cross-test-ssh.sh137
-rw-r--r--libc/setjmp/__longjmp.c1
-rw-r--r--libc/setjmp/setjmp.c1
-rw-r--r--libc/signal/kill.c1
-rw-r--r--libc/signal/killpg.c1
-rw-r--r--libc/signal/raise.c1
-rw-r--r--libc/signal/sigaction.c1
-rw-r--r--libc/signal/sigaltstack.c1
-rw-r--r--libc/signal/sigblock.c1
-rw-r--r--libc/signal/sigignore.c1
-rw-r--r--libc/signal/sigintr.c1
-rw-r--r--libc/signal/signal.c1
-rw-r--r--libc/signal/sigpause.c1
-rw-r--r--libc/signal/sigpending.c1
-rw-r--r--libc/signal/sigqueue.c1
-rw-r--r--libc/signal/sigreturn.c1
-rw-r--r--libc/signal/sigset.c1
-rw-r--r--libc/signal/sigsetmask.c1
-rw-r--r--libc/signal/sigstack.c1
-rw-r--r--libc/signal/sigsuspend.c1
-rw-r--r--libc/signal/sigtimedwait.c1
-rw-r--r--libc/signal/sigvec.c1
-rw-r--r--libc/signal/sigwait.c1
-rw-r--r--libc/signal/sigwaitinfo.c1
-rw-r--r--libc/signal/sysv_signal.c1
-rw-r--r--libc/socket/accept.c1
-rw-r--r--libc/socket/accept4.c1
-rw-r--r--libc/socket/bind.c1
-rw-r--r--libc/socket/connect.c1
-rw-r--r--libc/socket/getpeername.c1
-rw-r--r--libc/socket/getsockname.c1
-rw-r--r--libc/socket/getsockopt.c1
-rw-r--r--libc/socket/isfdtype.c1
-rw-r--r--libc/socket/listen.c1
-rw-r--r--libc/socket/recv.c1
-rw-r--r--libc/socket/recvfrom.c1
-rw-r--r--libc/socket/recvmsg.c1
-rw-r--r--libc/socket/send.c1
-rw-r--r--libc/socket/sendmsg.c1
-rw-r--r--libc/socket/sendto.c1
-rw-r--r--libc/socket/setsockopt.c1
-rw-r--r--libc/socket/shutdown.c1
-rw-r--r--libc/socket/sockatmark.c1
-rw-r--r--libc/socket/socket.c1
-rw-r--r--libc/socket/socketpair.c1
-rw-r--r--libc/stdio-common/ctermid.c1
-rw-r--r--libc/stdio-common/cuserid.c1
-rw-r--r--libc/stdio-common/remove.c1
-rw-r--r--libc/stdio-common/rename.c1
-rw-r--r--libc/stdio-common/renameat.c1
-rw-r--r--libc/stdio-common/tempname.c1
-rw-r--r--libc/stdlib/Makefile7
-rw-r--r--libc/stdlib/bits/stdlib-float.h31
-rw-r--r--libc/stdlib/getcontext.c1
-rw-r--r--libc/stdlib/makecontext.c1
-rw-r--r--libc/stdlib/setcontext.c1
-rw-r--r--libc/stdlib/stdlib.h6
-rw-r--r--libc/stdlib/strtod_l.c43
-rw-r--r--libc/stdlib/swapcontext.c1
-rw-r--r--libc/stdlib/system.c1
-rw-r--r--libc/stdlib/tst-strtod-underflow.c225
-rw-r--r--libc/stdlib/tst-strtod.c4
-rw-r--r--libc/stdlib/tst-tininess.c69
-rw-r--r--libc/streams/fattach.c1
-rw-r--r--libc/streams/fdetach.c1
-rw-r--r--libc/streams/getmsg.c1
-rw-r--r--libc/streams/getpmsg.c1
-rw-r--r--libc/streams/putmsg.c1
-rw-r--r--libc/streams/putpmsg.c1
-rw-r--r--libc/sysdeps/generic/math_private.h16
-rw-r--r--libc/sysdeps/generic/paths.h6
-rw-r--r--libc/sysdeps/generic/tininess.h33
-rw-r--r--libc/sysdeps/i386/fpu/fclrexcpt.c3
-rw-r--r--libc/sysdeps/i386/fpu/fenv_private.h23
-rw-r--r--libc/sysdeps/ieee754/dbl-64/s_fma.c134
-rw-r--r--libc/sysdeps/ieee754/ldbl-128/s_fmal.c137
-rw-r--r--libc/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c3
-rw-r--r--libc/sysdeps/ieee754/ldbl-96/s_fma.c18
-rw-r--r--libc/sysdeps/ieee754/ldbl-96/s_fmal.c135
-rw-r--r--libc/sysdeps/mach/hurd/Makefile10
-rw-r--r--libc/sysdeps/mach/hurd/bits/errno.h6
-rw-r--r--libc/sysdeps/mach/hurd/bits/param.h2
-rw-r--r--libc/sysdeps/mach/hurd/fdatasync.c8
-rw-r--r--libc/sysdeps/mach/hurd/fsync.c8
-rw-r--r--libc/sysdeps/mach/hurd/i386/____longjmp_chk.S2
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/bits/sigcontext.h79
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/exc2signal.c73
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/init-first.c342
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/intr-msg.h98
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/longjmp-ts.c56
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/register-dump.h119
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/sigreturn.c185
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/static-start.S58
-rw-r--r--libc/sysdeps/mach/hurd/powerpc/trampoline.c256
-rw-r--r--libc/sysdeps/mach/hurd/ptrace.c8
-rw-r--r--libc/sysdeps/mach/powerpc/machine-lock.h77
-rw-r--r--libc/sysdeps/mach/powerpc/machine-sp.h41
-rw-r--r--libc/sysdeps/mach/powerpc/sysdep.h50
-rw-r--r--libc/sysdeps/mach/powerpc/thread_state.h38
-rw-r--r--libc/sysdeps/posix/getaddrinfo.c2
-rw-r--r--libc/sysdeps/powerpc/Makefile4
-rw-r--r--libc/sysdeps/powerpc/bits/fenv.h137
-rw-r--r--libc/sysdeps/powerpc/fpu/fclrexcpt.c3
-rw-r--r--libc/sysdeps/powerpc/fpu/libm-test-ulps440
-rw-r--r--libc/sysdeps/powerpc/sys/platform/ppc.h11
-rw-r--r--libc/sysdeps/pthread/aio_notify.c2
-rw-r--r--libc/sysdeps/s390/fpu/bits/fenv.h49
-rw-r--r--libc/sysdeps/s390/fpu/fclrexcpt.c3
-rw-r--r--libc/sysdeps/s390/fpu/fegetenv.c4
-rw-r--r--libc/sysdeps/s390/fpu/feholdexcpt.c4
-rw-r--r--libc/sysdeps/s390/fpu/fesetenv.c12
-rw-r--r--libc/sysdeps/sh/sh4/fpu/bits/fenv.h37
-rw-r--r--libc/sysdeps/sh/sh4/fpu/fclrexcpt.c1
-rw-r--r--libc/sysdeps/sh/tininess.h1
-rw-r--r--libc/sysdeps/sparc/fpu/bits/fenv.h45
-rw-r--r--libc/sysdeps/sparc/fpu/fclrexcpt.c3
-rw-r--r--libc/sysdeps/sparc/fpu/fenv_private.h12
-rw-r--r--libc/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c1
-rw-r--r--libc/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c75
-rw-r--r--libc/sysdeps/sparc/sparc64/multiarch/memcpy.S1
-rw-r--r--libc/sysdeps/sparc/sparc64/multiarch/memset.S1
-rw-r--r--libc/sysdeps/unix/Makefile1
-rw-r--r--libc/sysdeps/unix/bsd/getpt.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/epoll_pwait.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/futimens.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/lutimes.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/paths.h4
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist2
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S30
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist2
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c2
-rw-r--r--libc/sysdeps/unix/sysv/linux/readahead.c2
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h2
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c6
-rw-r--r--libc/sysdeps/unix/sysv/linux/sync_file_range.c2
-rw-r--r--libc/sysdeps/unix/sysv/linux/utimensat.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86/bits/fcntl.h2
-rw-r--r--libc/sysdeps/x86/Makefile4
-rw-r--r--libc/sysdeps/x86/fpu/bits/fenv.h45
-rw-r--r--libc/sysdeps/x86/tininess.h1
-rw-r--r--libc/sysdeps/x86_64/fpu/fclrexcpt.c3
-rw-r--r--libc/sysdeps/x86_64/multiarch/strcasestr-nonascii.c3
-rw-r--r--libc/sysvipc/msgctl.c1
-rw-r--r--libc/sysvipc/msgget.c1
-rw-r--r--libc/sysvipc/msgrcv.c1
-rw-r--r--libc/sysvipc/msgsnd.c1
-rw-r--r--libc/sysvipc/semctl.c1
-rw-r--r--libc/sysvipc/semget.c1
-rw-r--r--libc/sysvipc/semop.c1
-rw-r--r--libc/sysvipc/semtimedop.c1
-rw-r--r--libc/sysvipc/shmat.c1
-rw-r--r--libc/sysvipc/shmctl.c1
-rw-r--r--libc/sysvipc/shmdt.c1
-rw-r--r--libc/sysvipc/shmget.c1
-rw-r--r--libc/termios/tcdrain.c1
-rw-r--r--libc/termios/tcflow.c1
-rw-r--r--libc/termios/tcflush.c1
-rw-r--r--libc/termios/tcgetattr.c1
-rw-r--r--libc/termios/tcgetpgrp.c1
-rw-r--r--libc/termios/tcsendbrk.c1
-rw-r--r--libc/termios/tcsetattr.c1
-rw-r--r--libc/termios/tcsetpgrp.c1
-rw-r--r--libc/time/adjtime.c1
-rw-r--r--libc/time/clock.c1
-rw-r--r--libc/time/getitimer.c1
-rw-r--r--libc/time/gettimeofday.c1
-rw-r--r--libc/time/setitimer.c1
-rw-r--r--libc/time/settimeofday.c1
-rw-r--r--libc/time/stime.c1
-rw-r--r--libc/time/time.c1
606 files changed, 13307 insertions, 4365 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog
index a62630fac..04ccde0f2 100644
--- a/libc/ChangeLog
+++ b/libc/ChangeLog
@@ -1,3 +1,907 @@
+2012-11-06 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14793]
+ * sysdeps/ieee754/dbl-64/s_fma.c (__fma): In case of large z
+ exponent and small x and y exponents, scale x or y up. Increase
+ by 2 the exponent used in scaling up.
+ * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
+ * math/libm-test.inc (fma_test): Add more tests.
+ (fma_test_towardzero): Likewise.
+ (fma_test_downward): Likewise.
+ (fma_test_upward): Likewise.
+
+2012-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14805]
+ * sysdeps/sh/sh4/fpu/bits/fenv.h (FE_DFL_ENV): Use cast to const
+ fenv_t *.
+
+ [BZ #14801]
+ * sysdeps/s390/fpu/bits/fenv.h (fenv_t): Use implementation
+ namespace for names of struct fields.
+ * sysdeps/s390/fpu/fegetenv.c (fegetenv): Update references to
+ fenv_t fields.
+ * sysdeps/s390/fpu/feholdexcpt.c (feholdexcept): Likewise.
+ * sysdeps/s390/fpu/fesetenv.c (fesetenv): Likewise.
+
+2012-11-04 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ [BZ #3665]
+ * sysdeps/mach/hurd/bits/errno.h: Regenerated.
+
+2012-11-04 Thomas Schwinge <thomas@codesourcery.com>
+
+ * csu/libc-start.c (LIBC_START_MAIN): Conditionalize use of
+ PTR_DEMANGLE.
+
+ [BZ #5246]
+ * sysdeps/mach/hurd/i386/____longjmp_chk.S: Conditionalize use of
+ PTR_DEMANGLE.
+
+2012-11-04 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14797]
+ * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Compute cases that
+ definitely overflow as x * y not x * y + z.
+ * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
+ * math/libm-test.inc (fma_test): Add more tests.
+ (fma_test_towardzero): Likewise.
+ (fma_test_downward): Likewise.
+ (fma_test_upward): Likewise.
+
+2012-11-04 Thomas Schwinge <thomas@codesourcery.com>
+
+ [BZ #157]
+
+ * include/stub-tag.h: Remove file.
+ * sysdeps/unix/Makefile ($(objpfx)stub-syscalls.c): Don't emit
+ '#include' of it.
+ * manual/maint.texi (Porting): Don't reference it.
+ * Makerules ($(objpfx)stubs): Likewise.
+ * dirent/closedir.c: Don't include <stub-tag.h>.
+ * dirent/dirfd.c: Likewise.
+ * dirent/fdopendir.c: Likewise.
+ * dirent/getdents.c: Likewise.
+ * dirent/getdents64.c: Likewise.
+ * dirent/opendir.c: Likewise.
+ * dirent/readdir.c: Likewise.
+ * dirent/readdir64.c: Likewise.
+ * dirent/readdir64_r.c: Likewise.
+ * dirent/readdir_r.c: Likewise.
+ * dirent/rewinddir.c: Likewise.
+ * dirent/seekdir.c: Likewise.
+ * dirent/telldir.c: Likewise.
+ * gmon/profil.c: Likewise.
+ * grp/setgroups.c: Likewise.
+ * inet/if_index.c: Likewise.
+ * io/access.c: Likewise.
+ * io/chdir.c: Likewise.
+ * io/chmod.c: Likewise.
+ * io/chown.c: Likewise.
+ * io/close.c: Likewise.
+ * io/dup.c: Likewise.
+ * io/dup2.c: Likewise.
+ * io/dup3.c: Likewise.
+ * io/euidaccess.c: Likewise.
+ * io/faccessat.c: Likewise.
+ * io/fchdir.c: Likewise.
+ * io/fchmod.c: Likewise.
+ * io/fchmodat.c: Likewise.
+ * io/fchown.c: Likewise.
+ * io/fchownat.c: Likewise.
+ * io/fcntl.c: Likewise.
+ * io/flock.c: Likewise.
+ * io/fstatfs.c: Likewise.
+ * io/fstatfs64.c: Likewise.
+ * io/fstatvfs.c: Likewise.
+ * io/fstatvfs64.c: Likewise.
+ * io/futimens.c: Likewise.
+ * io/fxstat.c: Likewise.
+ * io/fxstat64.c: Likewise.
+ * io/fxstatat.c: Likewise.
+ * io/fxstatat64.c: Likewise.
+ * io/getcwd.c: Likewise.
+ * io/isatty.c: Likewise.
+ * io/lchmod.c: Likewise.
+ * io/lchown.c: Likewise.
+ * io/link.c: Likewise.
+ * io/linkat.c: Likewise.
+ * io/lseek.c: Likewise.
+ * io/lseek64.c: Likewise.
+ * io/lxstat64.c: Likewise.
+ * io/mkdir.c: Likewise.
+ * io/mkdirat.c: Likewise.
+ * io/mkfifo.c: Likewise.
+ * io/mkfifoat.c: Likewise.
+ * io/open.c: Likewise.
+ * io/open64.c: Likewise.
+ * io/openat.c: Likewise.
+ * io/openat64.c: Likewise.
+ * io/pipe.c: Likewise.
+ * io/pipe2.c: Likewise.
+ * io/poll.c: Likewise.
+ * io/posix_fadvise.c: Likewise.
+ * io/posix_fadvise64.c: Likewise.
+ * io/posix_fallocate.c: Likewise.
+ * io/posix_fallocate64.c: Likewise.
+ * io/read.c: Likewise.
+ * io/readlink.c: Likewise.
+ * io/readlinkat.c: Likewise.
+ * io/rmdir.c: Likewise.
+ * io/sendfile.c: Likewise.
+ * io/sendfile64.c: Likewise.
+ * io/statfs.c: Likewise.
+ * io/statfs64.c: Likewise.
+ * io/statvfs.c: Likewise.
+ * io/statvfs64.c: Likewise.
+ * io/symlink.c: Likewise.
+ * io/symlinkat.c: Likewise.
+ * io/ttyname.c: Likewise.
+ * io/ttyname_r.c: Likewise.
+ * io/umask.c: Likewise.
+ * io/unlink.c: Likewise.
+ * io/unlinkat.c: Likewise.
+ * io/utime.c: Likewise.
+ * io/utimensat.c: Likewise.
+ * io/write.c: Likewise.
+ * io/xmknod.c: Likewise.
+ * io/xmknodat.c: Likewise.
+ * io/xstat.c: Likewise.
+ * io/xstat64.c: Likewise.
+ * login/getpt.c: Likewise.
+ * login/grantpt.c: Likewise.
+ * login/unlockpt.c: Likewise.
+ * math/e_acoshl.c: Likewise.
+ * math/e_acosl.c: Likewise.
+ * math/e_asinl.c: Likewise.
+ * math/e_atan2l.c: Likewise.
+ * math/e_atanhl.c: Likewise.
+ * math/e_coshl.c: Likewise.
+ * math/e_expl.c: Likewise.
+ * math/e_fmodl.c: Likewise.
+ * math/e_gammal_r.c: Likewise.
+ * math/e_hypotl.c: Likewise.
+ * math/e_j0l.c: Likewise.
+ * math/e_j1l.c: Likewise.
+ * math/e_jnl.c: Likewise.
+ * math/e_lgammal_r.c: Likewise.
+ * math/e_log10l.c: Likewise.
+ * math/e_log2l.c: Likewise.
+ * math/e_logl.c: Likewise.
+ * math/e_powl.c: Likewise.
+ * math/e_rem_pio2l.c: Likewise.
+ * math/e_sinhl.c: Likewise.
+ * math/e_sqrtl.c: Likewise.
+ * math/fclrexcpt.c: Likewise.
+ * math/fedisblxcpt.c: Likewise.
+ * math/feenablxcpt.c: Likewise.
+ * math/fegetenv.c: Likewise.
+ * math/fegetexcept.c: Likewise.
+ * math/fegetround.c: Likewise.
+ * math/feholdexcpt.c: Likewise.
+ * math/fesetenv.c: Likewise.
+ * math/fesetround.c: Likewise.
+ * math/feupdateenv.c: Likewise.
+ * math/fgetexcptflg.c: Likewise.
+ * math/fraiseexcpt.c: Likewise.
+ * math/fsetexcptflg.c: Likewise.
+ * math/ftestexcept.c: Likewise.
+ * math/k_cosl.c: Likewise.
+ * math/k_rem_pio2l.c: Likewise.
+ * math/k_sinl.c: Likewise.
+ * math/k_tanl.c: Likewise.
+ * math/s_asinhl.c: Likewise.
+ * math/s_atanl.c: Likewise.
+ * math/s_cbrtl.c: Likewise.
+ * math/s_erfl.c: Likewise.
+ * math/s_expm1l.c: Likewise.
+ * math/s_log1pl.c: Likewise.
+ * math/s_tanhl.c: Likewise.
+ * misc/acct.c: Likewise.
+ * misc/brk.c: Likewise.
+ * misc/chflags.c: Likewise.
+ * misc/chroot.c: Likewise.
+ * misc/fchflags.c: Likewise.
+ * misc/fgetxattr.c: Likewise.
+ * misc/flistxattr.c: Likewise.
+ * misc/fremovexattr.c: Likewise.
+ * misc/fsetxattr.c: Likewise.
+ * misc/fsync.c: Likewise.
+ * misc/ftruncate.c: Likewise.
+ * misc/futimes.c: Likewise.
+ * misc/futimesat.c: Likewise.
+ * misc/getdomain.c: Likewise.
+ * misc/getdtsz.c: Likewise.
+ * misc/gethostid.c: Likewise.
+ * misc/gethostname.c: Likewise.
+ * misc/getloadavg.c: Likewise.
+ * misc/getpagesize.c: Likewise.
+ * misc/getsysstats.c: Likewise.
+ * misc/getxattr.c: Likewise.
+ * misc/gtty.c: Likewise.
+ * misc/ioctl.c: Likewise.
+ * misc/lgetxattr.c: Likewise.
+ * misc/listxattr.c: Likewise.
+ * misc/llistxattr.c: Likewise.
+ * misc/lremovexattr.c: Likewise.
+ * misc/lsetxattr.c: Likewise.
+ * misc/lutimes.c: Likewise.
+ * misc/madvise.c: Likewise.
+ * misc/mincore.c: Likewise.
+ * misc/mlock.c: Likewise.
+ * misc/mlockall.c: Likewise.
+ * misc/mmap.c: Likewise.
+ * misc/mprotect.c: Likewise.
+ * misc/msync.c: Likewise.
+ * misc/munlock.c: Likewise.
+ * misc/munlockall.c: Likewise.
+ * misc/munmap.c: Likewise.
+ * misc/preadv.c: Likewise.
+ * misc/preadv64.c: Likewise.
+ * misc/ptrace.c: Likewise.
+ * misc/pwritev.c: Likewise.
+ * misc/pwritev64.c: Likewise.
+ * misc/readv.c: Likewise.
+ * misc/reboot.c: Likewise.
+ * misc/remap_file_pages.c: Likewise.
+ * misc/removexattr.c: Likewise.
+ * misc/revoke.c: Likewise.
+ * misc/select.c: Likewise.
+ * misc/setdomain.c: Likewise.
+ * misc/setegid.c: Likewise.
+ * misc/seteuid.c: Likewise.
+ * misc/sethostid.c: Likewise.
+ * misc/sethostname.c: Likewise.
+ * misc/setregid.c: Likewise.
+ * misc/setreuid.c: Likewise.
+ * misc/setxattr.c: Likewise.
+ * misc/sstk.c: Likewise.
+ * misc/stty.c: Likewise.
+ * misc/swapoff.c: Likewise.
+ * misc/swapon.c: Likewise.
+ * misc/sync.c: Likewise.
+ * misc/syncfs.c: Likewise.
+ * misc/syscall.c: Likewise.
+ * misc/truncate.c: Likewise.
+ * misc/ualarm.c: Likewise.
+ * misc/usleep.c: Likewise.
+ * misc/ustat.c: Likewise.
+ * misc/utimes.c: Likewise.
+ * misc/vhangup.c: Likewise.
+ * misc/writev.c: Likewise.
+ * posix/_exit.c: Likewise.
+ * posix/alarm.c: Likewise.
+ * posix/execve.c: Likewise.
+ * posix/fexecve.c: Likewise.
+ * posix/fork.c: Likewise.
+ * posix/fpathconf.c: Likewise.
+ * posix/getaddrinfo.c: Likewise.
+ * posix/getegid.c: Likewise.
+ * posix/geteuid.c: Likewise.
+ * posix/getgid.c: Likewise.
+ * posix/getgroups.c: Likewise.
+ * posix/getlogin.c: Likewise.
+ * posix/getlogin_r.c: Likewise.
+ * posix/getpgid.c: Likewise.
+ * posix/getpid.c: Likewise.
+ * posix/getppid.c: Likewise.
+ * posix/getresgid.c: Likewise.
+ * posix/getresuid.c: Likewise.
+ * posix/getsid.c: Likewise.
+ * posix/getuid.c: Likewise.
+ * posix/glob64.c: Likewise.
+ * posix/nanosleep.c: Likewise.
+ * posix/pathconf.c: Likewise.
+ * posix/pause.c: Likewise.
+ * posix/posix_madvise.c: Likewise.
+ * posix/pread.c: Likewise.
+ * posix/pread64.c: Likewise.
+ * posix/pwrite.c: Likewise.
+ * posix/pwrite64.c: Likewise.
+ * posix/sched_getaffinity.c: Likewise.
+ * posix/sched_getp.c: Likewise.
+ * posix/sched_gets.c: Likewise.
+ * posix/sched_primax.c: Likewise.
+ * posix/sched_primin.c: Likewise.
+ * posix/sched_rr_gi.c: Likewise.
+ * posix/sched_setaffinity.c: Likewise.
+ * posix/sched_setp.c: Likewise.
+ * posix/sched_sets.c: Likewise.
+ * posix/sched_yield.c: Likewise.
+ * posix/setgid.c: Likewise.
+ * posix/setlogin.c: Likewise.
+ * posix/setpgid.c: Likewise.
+ * posix/setresgid.c: Likewise.
+ * posix/setresuid.c: Likewise.
+ * posix/setsid.c: Likewise.
+ * posix/setuid.c: Likewise.
+ * posix/sleep.c: Likewise.
+ * posix/spawni.c: Likewise.
+ * posix/sysconf.c: Likewise.
+ * posix/times.c: Likewise.
+ * posix/wait.c: Likewise.
+ * posix/wait3.c: Likewise.
+ * posix/wait4.c: Likewise.
+ * posix/waitpid.c: Likewise.
+ * resolv/gai_sigqueue.c: Likewise.
+ * resource/getpriority.c: Likewise.
+ * resource/getrlimit.c: Likewise.
+ * resource/getrusage.c: Likewise.
+ * resource/nice.c: Likewise.
+ * resource/setpriority.c: Likewise.
+ * resource/setrlimit.c: Likewise.
+ * resource/ulimit.c: Likewise.
+ * rt/aio_cancel.c: Likewise.
+ * rt/aio_fsync.c: Likewise.
+ * rt/aio_read.c: Likewise.
+ * rt/aio_sigqueue.c: Likewise.
+ * rt/aio_suspend.c: Likewise.
+ * rt/aio_write.c: Likewise.
+ * rt/clock_getres.c: Likewise.
+ * rt/clock_gettime.c: Likewise.
+ * rt/clock_nanosleep.c: Likewise.
+ * rt/clock_settime.c: Likewise.
+ * rt/lio_listio.c: Likewise.
+ * rt/mq_close.c: Likewise.
+ * rt/mq_getattr.c: Likewise.
+ * rt/mq_notify.c: Likewise.
+ * rt/mq_open.c: Likewise.
+ * rt/mq_receive.c: Likewise.
+ * rt/mq_send.c: Likewise.
+ * rt/mq_setattr.c: Likewise.
+ * rt/mq_timedreceive.c: Likewise.
+ * rt/mq_timedsend.c: Likewise.
+ * rt/mq_unlink.c: Likewise.
+ * rt/shm_open.c: Likewise.
+ * rt/shm_unlink.c: Likewise.
+ * rt/timer_create.c: Likewise.
+ * rt/timer_delete.c: Likewise.
+ * rt/timer_getoverr.c: Likewise.
+ * rt/timer_gettime.c: Likewise.
+ * rt/timer_settime.c: Likewise.
+ * setjmp/__longjmp.c: Likewise.
+ * setjmp/setjmp.c: Likewise.
+ * signal/kill.c: Likewise.
+ * signal/killpg.c: Likewise.
+ * signal/raise.c: Likewise.
+ * signal/sigaction.c: Likewise.
+ * signal/sigaltstack.c: Likewise.
+ * signal/sigblock.c: Likewise.
+ * signal/sigignore.c: Likewise.
+ * signal/sigintr.c: Likewise.
+ * signal/signal.c: Likewise.
+ * signal/sigpause.c: Likewise.
+ * signal/sigpending.c: Likewise.
+ * signal/sigqueue.c: Likewise.
+ * signal/sigreturn.c: Likewise.
+ * signal/sigset.c: Likewise.
+ * signal/sigsetmask.c: Likewise.
+ * signal/sigstack.c: Likewise.
+ * signal/sigsuspend.c: Likewise.
+ * signal/sigtimedwait.c: Likewise.
+ * signal/sigvec.c: Likewise.
+ * signal/sigwait.c: Likewise.
+ * signal/sigwaitinfo.c: Likewise.
+ * signal/sysv_signal.c: Likewise.
+ * socket/accept.c: Likewise.
+ * socket/accept4.c: Likewise.
+ * socket/bind.c: Likewise.
+ * socket/connect.c: Likewise.
+ * socket/getpeername.c: Likewise.
+ * socket/getsockname.c: Likewise.
+ * socket/getsockopt.c: Likewise.
+ * socket/isfdtype.c: Likewise.
+ * socket/listen.c: Likewise.
+ * socket/recv.c: Likewise.
+ * socket/recvfrom.c: Likewise.
+ * socket/recvmsg.c: Likewise.
+ * socket/send.c: Likewise.
+ * socket/sendmsg.c: Likewise.
+ * socket/sendto.c: Likewise.
+ * socket/setsockopt.c: Likewise.
+ * socket/shutdown.c: Likewise.
+ * socket/sockatmark.c: Likewise.
+ * socket/socket.c: Likewise.
+ * socket/socketpair.c: Likewise.
+ * stdio-common/ctermid.c: Likewise.
+ * stdio-common/cuserid.c: Likewise.
+ * stdio-common/remove.c: Likewise.
+ * stdio-common/rename.c: Likewise.
+ * stdio-common/renameat.c: Likewise.
+ * stdio-common/tempname.c: Likewise.
+ * stdlib/getcontext.c: Likewise.
+ * stdlib/makecontext.c: Likewise.
+ * stdlib/setcontext.c: Likewise.
+ * stdlib/swapcontext.c: Likewise.
+ * stdlib/system.c: Likewise.
+ * streams/fattach.c: Likewise.
+ * streams/fdetach.c: Likewise.
+ * streams/getmsg.c: Likewise.
+ * streams/getpmsg.c: Likewise.
+ * streams/putmsg.c: Likewise.
+ * streams/putpmsg.c: Likewise.
+ * sysdeps/unix/bsd/getpt.c: Likewise.
+ * sysdeps/unix/sysv/linux/epoll_pwait.c: Likewise.
+ * sysdeps/unix/sysv/linux/futimens.c: Likewise.
+ * sysdeps/unix/sysv/linux/lutimes.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c:
+ Likewise.
+ * sysdeps/unix/sysv/linux/readahead.c: Likewise.
+ * sysdeps/unix/sysv/linux/sync_file_range.c: Likewise.
+ * sysdeps/unix/sysv/linux/utimensat.c: Likewise.
+ * sysvipc/msgctl.c: Likewise.
+ * sysvipc/msgget.c: Likewise.
+ * sysvipc/msgrcv.c: Likewise.
+ * sysvipc/msgsnd.c: Likewise.
+ * sysvipc/semctl.c: Likewise.
+ * sysvipc/semget.c: Likewise.
+ * sysvipc/semop.c: Likewise.
+ * sysvipc/semtimedop.c: Likewise.
+ * sysvipc/shmat.c: Likewise.
+ * sysvipc/shmctl.c: Likewise.
+ * sysvipc/shmdt.c: Likewise.
+ * sysvipc/shmget.c: Likewise.
+ * termios/tcdrain.c: Likewise.
+ * termios/tcflow.c: Likewise.
+ * termios/tcflush.c: Likewise.
+ * termios/tcgetattr.c: Likewise.
+ * termios/tcgetpgrp.c: Likewise.
+ * termios/tcsendbrk.c: Likewise.
+ * termios/tcsetattr.c: Likewise.
+ * termios/tcsetpgrp.c: Likewise.
+ * time/adjtime.c: Likewise.
+ * time/clock.c: Likewise.
+ * time/getitimer.c: Likewise.
+ * time/gettimeofday.c: Likewise.
+ * time/setitimer.c: Likewise.
+ * time/settimeofday.c: Likewise.
+ * time/stime.c: Likewise.
+ * time/time.c: Likewise.
+
+2012-11-04 Pino Toscano <toscano.pino@tiscali.it>
+
+ * sysdeps/generic/paths.h (_PATH_STDPATH): Remove /usr/contrib/bin and
+ /usr/old/bin.
+
+ * sysdeps/generic/paths.h (_PATH_MNTTAB, _PATH_MOUNTED): Use tabs
+ instead of spaces.
+ * sysdeps/unix/sysv/linux/paths.h (_PATH_UTMP, _PATH_WTMP): Likewise.
+
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14796]
+ * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Set rounding mode to
+ FE_TONEAREST before applying Dekker multiplication and Knuth
+ addition. Clear inexact exceptions and check for exact zero
+ results afterwards.
+ * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fma.c (__fma): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
+ * math/libm-test.inc (fma_test): Add more tests.
+ (fma_test_towardzero): Likewise.
+ (fma_test_downward): Likewise.
+ (fma_test_upward): Likewise.
+ * sysdeps/generic/math_private.h (default_libc_fesetround): New
+ function.
+ (libc_fesetround): New macro.
+ (libc_fesetroundf): Likewise.
+ (libc_fesetroundl): Likewise.
+ * sysdeps/i386/fpu/fenv_private.h (libc_fesetround_sse): New
+ function.
+ (libc_fesetround_387): Likewise.
+ (libc_fesetroundf): New macro.
+ (libc_fesetround): Likewise.
+ (libc_fesetroundl): Likewise.
+ * sysdeps/sparc/fpu/fenv_private.h (libc_fesetround): New
+ function.
+ (libc_fesetroundf): New macro.
+ (libc_fesetround): Likewise.
+ (libc_fesetroundl): Likewise.
+ * include/fenv.h (feclearexcept): Add libm_hidden_proto.
+ * math/fclrexcpt.c (feclearexcept): Add libm_hidden_ver.
+ * sysdeps/i386/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_ver.
+ * sysdeps/powerpc/fpu/fclrexcpt.c (feclearexcept): Likewise.
+ * sysdeps/s390/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_def.
+ * sysdeps/sh/sh4/fpu/fclrexcpt.c (feclearexcept): Likewise.
+ * sysdeps/sparc/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_ver.
+ * sysdeps/x86_64/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_def.
+
+ [BZ #3439]
+ * sysdeps/powerpc/bits/fenv.h (FE_INEXACT): Define macro to
+ integer constant usable in #if and use that to give value to enum
+ constant.
+ (FE_DIVBYZERO): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_INVALID_SNAN): Likewise.
+ (FE_INVALID_ISI): Likewise.
+ (FE_INVALID_IDI): Likewise.
+ (FE_INVALID_ZDZ): Likewise.
+ (FE_INVALID_IMZ): Likewise.
+ (FE_INVALID_COMPARE): Likewise.
+ (FE_INVALID_SOFTWARE): Likewise.
+ (FE_INVALID_SQRT): Likewise.
+ (FE_INVALID_INTEGER_CONVERSION): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_DOWNWARD): Likewise.
+ * sysdeps/s390/fpu/bits/fenv.h (FE_INVALID): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_INEXACT): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_DOWNWARD): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ * sysdeps/sh/sh4/fpu/bits/fenv.h (FE_INEXACT): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ * sysdeps/sparc/fpu/bits/fenv.h (FE_INVALID): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_INEXACT): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_DOWNWARD): Likewise.
+ * sysdeps/x86/fpu/bits/fenv.h (FE_INVALID): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_INEXACT): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_DOWNWARD): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_TOWARDZERO): Likewise.
+
+2012-11-02 Chris Metcalf <cmetcalf@tilera.com>
+
+ * elf/elf.h (R_TILEGX_IMM16_X[01]_HW[012]_(|LAST_)PLT_PCREL): Add.
+
+2012-11-03 Andreas Schwab <schwab@linux-m68k.org>
+
+ * scripts/cross-test-ssh.sh (command): Use newlines to separate
+ commands. Quote $PWD.
+ (blacklist_exports): Don't use remove_newlines. Replace "declare
+ -x" by "export".
+ (remove_newlines): Remove.
+
+2012-11-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * stdlib/Makefile (headers): Add bits/stdlib-float.h.
+ * stdlib/stdlib.h (atof): Moved to ...
+ * include/bits/stdlib-float.h: Here. New file.
+ * stdlib/stdlib.h: Include <bits/stdlib-float.h>.
+ * stdlib/bits/stdlib-float.h: New file.
+ * sysdeps/x86/Makefile (CFLAGS-.os): Compile rtld routines with
+ -mno-sse -mno-mmx.
+ * sysdeps/x86_64/multiarch/strcasestr-nonascii.c: Include
+ <xmmintrin.h>.
+
+2012-11-02 Joseph Myers <joseph@codesourcery.com>
+
+ * conform/conformtest.pl (@headers): Add fenv.h.
+ * conform/data/fenv.h-data: New file.
+ * include/fenv.h [_ISOMAC]: Disable all contents of file except
+ include of <math/fenv.h>.
+
+ * conform/data/complex.h-data [ISO99 || ISO11 || XOPEN2K ||
+ POSIX2008]: Change condition to [!ISO && !POSIX && !XPG3 && !XPG4
+ && !UNIX98]. Enables tests for XOPEN2K8.
+ * conform/data/inttypes.h-data [ISO99 || ISO11 || XOPEN2K ||
+ POSIX2008]: Likewise.
+
+ * conform/data/sys/wait.h-data [XPG3 || XOPEN2K8 || POSIX2008]
+ (struct rusage): Do not expect type or its members.
+
+ [BZ #3439]
+ * math/math.h (FP_NAN): Define macro to integer constant usable in
+ #if and use that to give value to enum constant.
+ (FP_INFINITE): Likewise.
+ (FP_ZERO): Likewise.
+ (FP_SUBNORMAL): Likewise.
+ (FP_NORMAL): Likewise.
+
+2012-11-02 Andreas Schwab <schwab@linux-m68k.org>
+
+ * iconvdata/bug-iconv8.c (do_test): Use %z for size_t arguments.
+ * iconvdata/bug-iconv9.c (do_test): Use %t for ptrdiff_t
+ arguments.
+
+2012-11-02 Roland McGrath <roland@hack.frob.com>
+
+ * aclocal.m4 (GLIBC_AUTOCONF_VERSION): New macro.
+ Check that AC_AUTOCONF_VERSION matches it and m4_fatal at
+ autoconf-time if not.
+ * configure.in: Remove AC_PREREQ.
+
+2012-11-02 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
+
+ * sysdeps/powerpc/sys/platform/ppc.h (__ppc_get_timebase): Use
+ __builtin_ppc_get_timebase when building with GCC >= 4.8 instead
+ of the internal implementation.
+
+2012-11-02 Joseph Myers <joseph@codesourcery.com>
+
+ * include/sys/syslog.h [_ISOMAC]: Disable all contents of file
+ except include of <misc/sys/syslog.h>.
+
+2012-11-01 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S: If the
+ function returns with a NULL context exit with zero.
+
+2012-11-01 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
+
+ * sysdeps/powerpc/Makefile (cflags): Remove -mnew-mnemonics.
+
+2012-11-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ * catgets/test-gencat.sh (run_program_prefix): Renamed to ...
+ (run_program_cmd): This.
+ * localedata/tst-langinfo.sh (run_program_prefix): Removed.
+ (tst_langinfo): New variable. Use it.
+
+2012-11-01 Sebastan Andrzej Siewior <bigeasy@linutronix.de>
+
+ * sysdeps/powerpc/powerpc32/dl-trampoline.S: Put __NO_FPRS__ around
+ floating point opcodes.
+
+2012-11-01 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/mach/hurd/Makefile (link-libc-static-tests): New
+ variable.
+
+ * elf/dl-support.c: Unconditionally include "setup-vdso.h".
+
+ * sysdeps/mach/hurd/powerpc: Remove directory.
+ * sysdeps/mach/powerpc: Likewise.
+
+2012-11-01 Andreas Schwab <schwab@linux-m68k.org>
+
+ * scripts/check-local-headers.sh: Ignore c++ headers.
+
+2012-11-01 Thomas Schwinge <thomas@codesourcery.com>
+
+ * libio/genops.c (_IO_flush_all_lockp): Use NULL rather than 0 for
+ __libc_cleanup_region_start argument.
+
+2012-11-01 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14784]
+ [BZ #14785]
+ * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Handle cases with small
+ x * y using scaling, not as x * y + z.
+ * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
+ * math/libm-test.inc (fma_test): Add more tests.
+ (fma_test_towardzero): Likewise.
+ (fma_test_downward): Likewise.
+ (fma_test_upward): Likewise.
+
+2012-11-01 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/mach/hurd/bits/param.h: Remove stray #endif.
+
+2012-10-31 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/sh/Makefile [$(subdir) = debug] (CFLAGS-backtrace.c):
+ New variable.
+
+2012-10-31 Thomas Schwinge <thomas@codesourcery.com>
+
+ * rt/tst-shm.c (worker): Correct checking for mmap failure.
+
+2012-10-31 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist:
+ Fix sort order.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist:
+ Likewise.
+
+2012-10-31 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist:
+ Fix the order of the list for glibc 2.17.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist:
+ Likewise.
+
+2012-10-31 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+2012-10-31 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14610]
+ * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c (__ieee754_atan2l): Check
+ for low part of x being zero before using __atanl (y).
+ * math/libm-test.inc (atan2_test): Add another test.
+
+ * manual/install.texi (Configuring and compiling): Document
+ general use of test-wrapper and test-wrapper-env.
+ * INSTALL: Regenerated.
+
+ * sysdeps/ieee754/dbl-64/s_fma.c: Include <tininess.h>.
+ (__fma): Do not extract and scale down low bits on after-rounding
+ systems when result rounded to normal precision would have normal
+ exponent.
+ * sysdeps/ieee754/ldbl-128/s_fmal.c: Include <tininess.h>.
+ (__fmal): Do not extract and scale down low bits on after-rounding
+ systems when result rounded to normal precision would have normal
+ exponent.
+ * sysdeps/ieee754/ldbl-96/s_fmal.c: Include <tininess.h>.
+ (__fmal): Do not extract and scale down low bits on after-rounding
+ systems when result rounded to normal precision would have normal
+ exponent.
+ * math/libm-test.inc (UNDERFLOW_EXCEPTION_BEFORE_ROUNDING): New
+ macro.
+ (fma_test): Add more tests.
+ (fma_test_towardzero): Likewise.
+ (fma_test_downward): Likewise.
+ (fma_test_upward): Likewise.
+
+2012-10-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/i386/tininess.h: Renamed to ...
+ * sysdeps/x86/tininess.h: This.
+ * sysdeps/x86_64/tininess.h: Removed.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ * elf/Makefile ($(objpfx)tst-array1.out): Depend on comparison
+ input. Use $(build-program-cmd).
+ ($(objpfx)tst-array1-static.out): Likewise.
+ ($(objpfx)tst-array2.out): Likewise.
+ ($(objpfx)tst-array3.out): Likewise.
+ ($(objpfx)tst-array4.out): Likewise.
+ ($(objpfx)tst-array5.out): Likewise.
+ ($(objpfx)tst-array5-static.out): Likewise.
+
+2012-10-30 Chris Metcalf <cmetcalf@tilera.com>
+
+ * elf/dl-load.c (_dl_map_object_from_fd): Call DL_AFTER_LOAD
+ if defined.
+
+ * nss/nsswitch.h (nss_interface_function): Provide new
+ macro for use with NSS functions.
+ * grp/initgroups.c: Use new macro.
+ * nss/getXXbyYY.c: Likewise.
+ * nss/getXXbyYY_r.c: Likewise.
+ * nss/getXXent.c: Likewise.
+ * nss/getXXent_r.c: Likewise.
+ * sysdeps/posix/getaddrinfo.c: Likewise.
+
+2012-10-30 Andreas Jaeger <aj@suse.de>
+
+ * po/ru.po: Update Russion translation from translation project.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14152]
+ [BZ #14783]
+ * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Extract low bits of
+ result and shift together with sticky bit instead of replicating
+ round-to-nearest rounding.
+ * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
+ * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
+ * math/libm-test.inc (fma_test): Add more tests. Do not permit
+ missing underflow exceptions.
+ (fma_test_towardzero): Add more tests.
+ (fma_test_downward): Likewise.
+ (fma_test_upward): Likewise.
+
+ [BZ #14047]
+ * sysdeps/generic/tininess.h: New file.
+ * sysdeps/i386/tininess.h: Likewise.
+ * sysdeps/sh/tininess.h: Likewise.
+ * sysdeps/x86_64/tininess.h: Likewise.
+ * stdlib/tst-strtod-underflow.c: Likewise.
+ * stdlib/tst-tininess.c: Likewise.
+ * stdlib/strtod_l.c: Include <tininess.h>.
+ (round_and_return): Do not set errno for exact underflow cases.
+ Force an underflow exception when setting errno for underflow.
+ Determine underflow based on rounding to normal precision if
+ TININESS_AFTER_ROUNDING.
+ * stdlib/tst-strtod.c (tests): Do not expect errno to be set to
+ ERANGE for exact underflow cases.
+ * stdlib/Makefile (tests): Add tst-tininess and
+ tst-strtod-underflow.
+ ($(objpfx)tst-tininess): Use $(link-libm).
+ ($(objpfx)tst-strtod-underflow): Likewise.
+
+2012-10-30 Andreas Jaeger <aj@suse.de>
+
+ [BZ#14767]
+ * elf/Makefile (tests): Remove conditional for have-initfini-array
+ since this is now always required and the variable does not exist
+ anymore.
+ (tests-static): Likewise.
+ (modules-names): Likewise.
+
+ * po/eo.po: Add Esperanto translation from translation project.
+
+ * elf/tst-array1.c (fini_array): Make writeable so that it can be
+ merged with constructor/destructor.
+ (init_array): Likewise.
+ * elf/tst-array2dep.c (fini_array): Likewise.
+ (init_array): Likewise.
+
+2012-10-29 Mike Frysinger <vapier@gentoo.org>
+
+ * manual/message.texi: Delete @cartouche tags.
+
+2012-10-29 Pino Toscano <toscano.pino@tiscali.it>
+
+ * sysdeps/mach/hurd/fdatasync.c: Turn ERR into EINVAL if it is
+ EOPNOTSUPP.
+ * sysdeps/mach/hurd/fsync.c: Likewise.
+
+ * sysdeps/pthread/aio_notify.c (__aio_notify_only)
+ [_POSIX_REALTIME_SIGNALS]: Change condition to
+ [_POSIX_REALTIME_SIGNALS > 0].
+
+2012-10-27 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/x86/bits/fcntl.h (__O_LARGEFILE)
+ [!__x86_64]: Do not define, take value from <bits/fcntl-linux.h>.
+ * sysdeps/unix/sysv/linux/s390/bits/fcntl.h (__O_LARGEFILE):
+ [__WORDSIZE != 64]: Likewise.
+
+2012-10-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * iconvdata/tst-table.sh: Remove ${SHELL}.
+ * iconvdata/tst-tables.sh: Likewise.
+
+2012-10-25 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
+ (__get_clockfreq_via_proc_openprom): Use strtoumax instead
+ of strtoull.
+
+ * sysdeps/sparc/sparc64/multiarch/memcpy.S: Add comments for
+ ifunc-impl-list.c
+ * sysdeps/sparc/sparc64/multiarch/memset.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c: New file.
+ * sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c: New
+ file.
+
+2012-10-25 Roland McGrath <roland@hack.frob.com>
+
+ * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
+ (__get_clockfreq_via_proc_openprom): Use __getdents instead of
+ __getdirentries.
+
+2012-10-25 Joseph Myers <joseph@codesourcery.com>
+ Jim Blandy <jimb@codesourcery.com>
+
+ * scripts/cross-test-ssh.sh: New file.
+ * manual/install.texi (Configuring and compiling): Document use of
+ cross-test-ssh.sh.
+ * INSTALL: Regenerated.
+
+2012-10-25 Pino Toscano <toscano.pino@tiscali.it>
+
+ * sysdeps/mach/hurd/ptrace.c (ptrace): Use __hurd_fail to return
+ EOPNOTSUPP.
+
+2012-10-25 Joseph Myers <joseph@codesourcery.com>
+
+ * Makeconfig (run-program-prefix): Fix comment.
+
2012-10-24 Joseph Myers <joseph@codesourcery.com>
Jim Blandy <jimb@codesourcery.com>
@@ -964,7 +1868,7 @@
(__SWBLK_T_TYPE): Likewise.
2012-10-01 Patsy Franklin <pfrankli@redhat.com>
- Honza Horak <hhorak@redhat.com>
+ Honza Horak <hhorak@redhat.com>
* nis/yp_xdr.c (xdr_domainname): Use YPMAXDOMAIN as maxsize.
(xdr_mapname): Use YPMAXMAP as maxsize.
@@ -1481,7 +2385,7 @@
2012-12-09 Allan McRae <allan@archlinux.org>
- * sysdeps/i386/fpu/libm-test-ulps: Update
+ * sysdeps/i386/fpu/libm-test-ulps: Update
2012-09-11 Joseph Myers <joseph@codesourcery.com>
@@ -2313,7 +3217,7 @@
* sysdeps/unix/sysv/linux/bits/param.h: New file.
* sysdeps/unix/sysv/linux/sys/param.h: File removed.
* sysdeps/mach/hurd/bits/param.h: New file.
- * sysdeps/mach/hurd/sys/param.h: New file.
+ * sysdeps/mach/hurd/sys/param.h: File removed.
* elf/dl-close.c (_dl_close_worker): Add a cast and a comment to the
last change.
diff --git a/libc/INSTALL b/libc/INSTALL
index e6e4ab588..917392466 100644
--- a/libc/INSTALL
+++ b/libc/INSTALL
@@ -208,7 +208,24 @@ this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler
to use for programs run on the build system as part of compiling the
library. You may need to set `AR' to cross-compiling versions of `ar'
if the native tools are not configured to work with object files for
-the target you configured for.
+the target you configured for. When cross-compiling the GNU C Library,
+it may be tested using `make check
+test-wrapper="SRCDIR/scripts/cross-test-ssh.sh HOSTNAME"', where SRCDIR
+is the absolute directory name for the main source directory and
+HOSTNAME is the host name of a system that can run the newly built
+binaries of the GNU C Library. The source and build directories must
+be visible at the same locations on both the build system and HOSTNAME.
+
+ In general, when testing the GNU C Library, `test-wrapper' may be set
+to the name and arguments of any program to run newly built binaries.
+This program must preserve the arguments to the binary being run, its
+working directory, all environment variables set as part of testing and
+the standard input, output and error file descriptors. If
+`TEST-WRAPPER env' will not work to run a program with environment
+variables set, then `test-wrapper-env' must be set to a program that
+runs a newly built program with environment variable assignments in
+effect, those assignments being specified as `VAR=VALUE' before the
+name of the program to be run.
Installing the C Library
========================
diff --git a/libc/Makeconfig b/libc/Makeconfig
index 790e9998a..d7ace4bcf 100644
--- a/libc/Makeconfig
+++ b/libc/Makeconfig
@@ -608,7 +608,7 @@ run-via-rtld-prefix = \
else
run-via-rtld-prefix =
endif
-# $(run-via-rtld-prefix) is a command that, when prepended to the name
+# $(run-program-prefix) is a command that, when prepended to the name
# of a program built with the newly built library, produces a command
# that, executed on the build system on which "make" is run, runs that
# program.
diff --git a/libc/Makerules b/libc/Makerules
index 16db52461..ce53e9902 100644
--- a/libc/Makerules
+++ b/libc/Makerules
@@ -1377,9 +1377,7 @@ common-clean: common-mostlyclean
-rm -f $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
# Produce a file `stubs' which contains `#define __stub_FUNCTION'
-# for each function which is a stub. We grovel over all the .d files
-# looking for references to <stub-tag.h>. Then we grovel over each
-# referenced source file to see what stub function it defines.
+# for each function which is a stub.
ifdef objpfx
.PHONY: stubs # The parent Makefile calls this target.
diff --git a/libc/NEWS b/libc/NEWS
index a1cc1287f..331d21263 100644
--- a/libc/NEWS
+++ b/libc/NEWS
@@ -9,15 +9,16 @@ Version 2.17
* The following bugs are resolved with this release:
- 1349, 3479, 5044, 5298, 5400, 6530, 6778, 6808, 9685, 9914, 10014, 10038,
- 10631, 11438, 11607, 12140, 13412, 13542, 13601, 13629, 13679, 13696,
- 13717, 13741, 13939, 13966, 14042, 14090, 14150, 14151, 14154, 14157,
- 14166, 14173, 14195, 14237, 14251, 14252, 14283, 14298, 14303, 14307,
- 14328, 14331, 14336, 14337, 14347, 14349, 14376, 14417, 14459, 14476,
- 14477, 14505, 14510, 14516, 14518, 14519, 14530, 14532, 14538, 14543,
- 14544, 14545, 14557, 14562, 14568, 14576, 14579, 14583, 14587, 14602,
- 14621, 14638, 14645, 14648, 14652, 14660, 14661, 14683, 14694, 14716,
- 14743.
+ 1349, 3439, 3479, 3665, 5044, 5246, 5298, 5400, 6530, 6778, 6808, 9685,
+ 9914, 10014, 10038, 10631, 11438, 11607, 11638, 12140, 13412, 13542,
+ 13601, 13629, 13679, 13696, 13717, 13741, 13939, 13966, 14042, 14047,
+ 14090, 14150, 14151, 14152, 14154, 14157, 14166, 14173, 14195, 14237,
+ 14251, 14252, 14283, 14298, 14303, 14307, 14328, 14331, 14336, 14337,
+ 14347, 14349, 14376, 14417, 14459, 14476, 14477, 14505, 14510, 14516,
+ 14518, 14519, 14530, 14532, 14538, 14543, 14544, 14545, 14557, 14562,
+ 14568, 14576, 14579, 14583, 14587, 14595, 14602, 14610, 14621, 14638,
+ 14645, 14648, 14652, 14660, 14661, 14669, 14683, 14694, 14716, 14743,
+ 14767, 14783, 14784, 14785, 14793, 14796, 14797, 14801, 14805.
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
Optimized versions of memcpy, memset, and memcmp added for System z10 and
diff --git a/libc/aclocal.m4 b/libc/aclocal.m4
index 8aec4e7c4..b173e9e33 100644
--- a/libc/aclocal.m4
+++ b/libc/aclocal.m4
@@ -1,3 +1,13 @@
+dnl We require that everyone use exactly the same Autoconf version so that
+dnl the internal functions defined and used by the main configure script
+dnl match those expected by the fragments.
+m4_define([GLIBC_AUTOCONF_VERSION], [2.68])
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), GLIBC_AUTOCONF_VERSION, [],
+ [m4_fatal(m4_flatten(
+Exactly version GLIBC_AUTOCONF_VERSION of Autoconf is required but you have
+m4_defn([AC_AUTOCONF_VERSION])
+), [63])])dnl
+dnl
dnl We define the macro GLIBC_PROVIDES to do an AC_PROVIDE for each macro
dnl which appears in configure.in before the sysdep configure scripts are run.
dnl Each sysdep configure.in does GLIBC_PROVIDES first, to avoid any
diff --git a/libc/catgets/test-gencat.sh b/libc/catgets/test-gencat.sh
index c884b8f20..8557a3f2c 100755
--- a/libc/catgets/test-gencat.sh
+++ b/libc/catgets/test-gencat.sh
@@ -20,12 +20,12 @@
set -e
common_objpfx=$1
-run_program_prefix=$2
+run_program_cmd=$2
# Run the test program.
LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
NLSPATH=${common_objpfx}catgets/%N.%c.cat LC_ALL=ja_JP.SJIS \
- ${run_program_prefix} \
+ ${run_program_cmd} \
> ${common_objpfx}catgets/test-gencat.out
# Compare with the expected result.
diff --git a/libc/configure.in b/libc/configure.in
index a32564f0f..e9f273cbd 100644
--- a/libc/configure.in
+++ b/libc/configure.in
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-AC_PREREQ(2.53)dnl dnl Minimum Autoconf version required.
+dnl Note we do not use AC_PREREQ here! See aclocal.m4 for what we use instead.
AC_INIT([GNU C Library], [(see version.h)], [http://sourceware.org/bugzilla/], [glibc])
AC_CONFIG_SRCDIR([include/features.h])
AC_CONFIG_HEADERS([config.h])
diff --git a/libc/conform/conformtest.pl b/libc/conform/conformtest.pl
index d3e41be4c..af2194159 100644
--- a/libc/conform/conformtest.pl
+++ b/libc/conform/conformtest.pl
@@ -27,7 +27,7 @@ if (@headers == ()) {
"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",
+ "fmtmsg.h", "float.h", "fenv.h", "fcntl.h", "errno.h", "dlfcn.h",
"dirent.h", "ctype.h", "cpio.h", "complex.h", "assert.h",
"arpa/inet.h", "aio.h");
}
diff --git a/libc/conform/data/complex.h-data b/libc/conform/data/complex.h-data
index 8f31d2205..8abfb507b 100644
--- a/libc/conform/data/complex.h-data
+++ b/libc/conform/data/complex.h-data
@@ -1,4 +1,4 @@
-#if defined ISO99 || defined ISO11 || defined XOPEN2K || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
macro complex
macro _Complex_I
optional-macro imaginary
diff --git a/libc/conform/data/fenv.h-data b/libc/conform/data/fenv.h-data
new file mode 100644
index 000000000..bb33d4b06
--- /dev/null
+++ b/libc/conform/data/fenv.h-data
@@ -0,0 +1,36 @@
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
+type fenv_t
+type fexcept_t
+
+optional-macro-int-constant FE_DIVBYZERO
+optional-macro-int-constant FE_INEXACT
+optional-macro-int-constant FE_INVALID
+optional-macro-int-constant FE_OVERFLOW
+optional-macro-int-constant FE_UNDERFLOW
+macro-int-constant FE_ALL_EXCEPT
+
+optional-macro-int-constant FE_DOWNWARD
+optional-macro-int-constant FE_TONEAREST
+optional-macro-int-constant FE_TOWARDZERO
+optional-macro-int-constant FE_UPWARD
+
+allow FE_[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*
+
+macro FE_DFL_ENV {const fenv_t *}
+
+function int feclearexcept (int)
+function int fegetexceptflag (fexcept_t*, int)
+function int feraiseexcept (int)
+function int fesetexceptflag (const fexcept_t*, int)
+function int fetestexcept (int)
+function int fegetround (void)
+function int fesetround (int)
+function int fegetenv (fenv_t*)
+function int feholdexcept (fenv_t*)
+function int fesetenv (const fenv_t*)
+function int feupdateenv (const fenv_t *)
+
+#if !defined ISO && !defined ISO99 && !defined ISO11
+allow *_t
+#endif
+#endif
diff --git a/libc/conform/data/inttypes.h-data b/libc/conform/data/inttypes.h-data
index d308a5225..5ef54f6eb 100644
--- a/libc/conform/data/inttypes.h-data
+++ b/libc/conform/data/inttypes.h-data
@@ -1,4 +1,4 @@
-#if defined ISO99 || defined ISO11 || defined XOPEN2K || defined POSIX2008
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
type int8_t
type int16_t
type int32_t
diff --git a/libc/conform/data/sys/wait.h-data b/libc/conform/data/sys/wait.h-data
index 818766921..6acdab296 100644
--- a/libc/conform/data/sys/wait.h-data
+++ b/libc/conform/data/sys/wait.h-data
@@ -47,7 +47,7 @@ element siginfo_t int si_status
element siginfo_t long si_band
element siginfo_t {union sigval} si_value
-#if !defined POSIX
+#if !defined POSIX && !defined XPG3 && !defined XOPEN2K8 && !defined POSIX2008
type {struct rusage}
element {struct rusage} {struct timeval} ru_utime
diff --git a/libc/csu/libc-start.c b/libc/csu/libc-start.c
index fd3f22df5..8d42c2bc8 100644
--- a/libc/csu/libc-start.c
+++ b/libc/csu/libc-start.c
@@ -272,7 +272,9 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
result = 0;
# ifdef SHARED
unsigned int *ptr = __libc_pthread_functions.ptr_nthreads;
+# ifdef PTR_DEMANGLE
PTR_DEMANGLE (ptr);
+# endif
# else
extern unsigned int __nptl_nthreads __attribute ((weak));
unsigned int *const ptr = &__nptl_nthreads;
diff --git a/libc/dirent/closedir.c b/libc/dirent/closedir.c
index 745062b40..63ce52c04 100644
--- a/libc/dirent/closedir.c
+++ b/libc/dirent/closedir.c
@@ -31,4 +31,3 @@ __closedir (DIR *dirp)
weak_alias (__closedir, closedir)
stub_warning (closedir)
-#include <stub-tag.h>
diff --git a/libc/dirent/dirfd.c b/libc/dirent/dirfd.c
index 026421f33..2cab938ad 100644
--- a/libc/dirent/dirfd.c
+++ b/libc/dirent/dirfd.c
@@ -29,4 +29,3 @@ dirfd (dirp)
}
stub_warning (dirfd)
-#include <stub-tag.h>
diff --git a/libc/dirent/fdopendir.c b/libc/dirent/fdopendir.c
index fd6e2741f..0894a0858 100644
--- a/libc/dirent/fdopendir.c
+++ b/libc/dirent/fdopendir.c
@@ -31,4 +31,3 @@ __fdopendir (int fd)
weak_alias (__fdopendir, fdopendir)
stub_warning (fdopendir)
-#include <stub-tag.h>
diff --git a/libc/dirent/getdents.c b/libc/dirent/getdents.c
index a5277ebea..3b52227f7 100644
--- a/libc/dirent/getdents.c
+++ b/libc/dirent/getdents.c
@@ -33,4 +33,3 @@ __getdirentries (fd, buf, nbytes, basep)
weak_alias (__getdirentries, getdirentries)
stub_warning (getdirentries)
-#include <stub-tag.h>
diff --git a/libc/dirent/getdents64.c b/libc/dirent/getdents64.c
index ce013ca0e..63b0435db 100644
--- a/libc/dirent/getdents64.c
+++ b/libc/dirent/getdents64.c
@@ -32,4 +32,3 @@ getdirentries64 (fd, buf, nbytes, basep)
}
stub_warning (getdirentries64)
-#include <stub-tag.h>
diff --git a/libc/dirent/opendir.c b/libc/dirent/opendir.c
index ce7084c9c..beb9d1076 100644
--- a/libc/dirent/opendir.c
+++ b/libc/dirent/opendir.c
@@ -38,4 +38,3 @@ __opendir (const char *name)
weak_alias (__opendir, opendir)
stub_warning (opendir)
-#include <stub-tag.h>
diff --git a/libc/dirent/readdir.c b/libc/dirent/readdir.c
index da4ecb4b1..5a7fa4200 100644
--- a/libc/dirent/readdir.c
+++ b/libc/dirent/readdir.c
@@ -29,4 +29,3 @@ __readdir (DIR *dirp)
weak_alias (__readdir, readdir)
stub_warning (readdir)
-#include <stub-tag.h>
diff --git a/libc/dirent/readdir64.c b/libc/dirent/readdir64.c
index 8fb7bfcd8..484d983ce 100644
--- a/libc/dirent/readdir64.c
+++ b/libc/dirent/readdir64.c
@@ -28,4 +28,3 @@ __readdir64 (DIR *dirp)
}
weak_alias (__readdir64, readdir64)
stub_warning (readdir64)
-#include <stub-tag.h>
diff --git a/libc/dirent/readdir64_r.c b/libc/dirent/readdir64_r.c
index 6b178d5d5..648d5ef21 100644
--- a/libc/dirent/readdir64_r.c
+++ b/libc/dirent/readdir64_r.c
@@ -29,4 +29,3 @@ readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result)
return -1;
}
stub_warning (readdir64_r)
-#include <stub-tag.h>
diff --git a/libc/dirent/readdir_r.c b/libc/dirent/readdir_r.c
index 115a3ceaf..3a2fa6e2c 100644
--- a/libc/dirent/readdir_r.c
+++ b/libc/dirent/readdir_r.c
@@ -31,4 +31,3 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
weak_alias (__readdir_r, readdir_r)
stub_warning (readdir_r)
-#include <stub-tag.h>
diff --git a/libc/dirent/rewinddir.c b/libc/dirent/rewinddir.c
index 5519e6761..78e4d5399 100644
--- a/libc/dirent/rewinddir.c
+++ b/libc/dirent/rewinddir.c
@@ -32,4 +32,3 @@ libc_hidden_def (rewinddir)
stub_warning (rewinddir)
-#include <stub-tag.h>
diff --git a/libc/dirent/seekdir.c b/libc/dirent/seekdir.c
index a6e2685c1..a274bcdeb 100644
--- a/libc/dirent/seekdir.c
+++ b/libc/dirent/seekdir.c
@@ -37,4 +37,3 @@ seekdir (dirp, pos)
stub_warning (seekdir)
-#include <stub-tag.h>
diff --git a/libc/dirent/telldir.c b/libc/dirent/telldir.c
index f255a0e9b..a00e75006 100644
--- a/libc/dirent/telldir.c
+++ b/libc/dirent/telldir.c
@@ -37,4 +37,3 @@ telldir (dirp)
stub_warning (telldir)
-#include <stub-tag.h>
diff --git a/libc/elf/Makefile b/libc/elf/Makefile
index 9e820fde6..11e6cd8c9 100644
--- a/libc/elf/Makefile
+++ b/libc/elf/Makefile
@@ -118,20 +118,15 @@ $(inst_auditdir)/sotruss-lib.so: $(objpfx)sotruss-lib.so $(+force)
$(do-install-program)
endif
-tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1
-ifeq (yes,$(have-initfini-array))
-tests += tst-array1 tst-array2 tst-array3 tst-array4 tst-array5
-endif
+tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1 \
+ tst-array1 tst-array2 tst-array3 tst-array4 tst-array5
tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static \
- tst-leaks1-static
+ tst-leaks1-static tst-array1-static tst-array5-static
ifeq (yes,$(build-shared))
tests-static += tst-tls9-static
tst-tls9-static-ENV = \
LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)dlfcn
endif
-ifeq (yes,$(have-initfini-array))
-tests-static += tst-array1-static tst-array5-static
-endif
tests += $(tests-static)
ifeq (yes,$(build-shared))
tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
@@ -218,10 +213,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
tst-initordera3 tst-initordera4 \
tst-initorder2a tst-initorder2b tst-initorder2c \
tst-initorder2d \
- tst-relsort1mod1 tst-relsort1mod2
-ifeq (yes,$(have-initfini-array))
-modules-names += tst-array2dep tst-array5dep
-endif
+ tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \
+ tst-array5dep
ifeq (yesyes,$(have-fpie)$(build-shared))
modules-names += tst-piemod1
tests += tst-pie1
@@ -858,45 +851,37 @@ LDFLAGS-tst-execstack-needed = -Wl,-z,noexecstack
LDFLAGS-tst-execstack-prog = -Wl,-z,execstack
endif
-$(objpfx)tst-array1.out: $(objpfx)tst-array1
- $(elf-objpfx)$(rtld-installed-name) \
- --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
- $(objpfx)tst-array1 > $@
+$(objpfx)tst-array1.out: tst-array1.exp $(objpfx)tst-array1
+ $(built-program-cmd) > $@
cmp $@ tst-array1.exp > /dev/null
-$(objpfx)tst-array1-static.out: $(objpfx)tst-array1-static
- $(objpfx)tst-array1-static > $@
+$(objpfx)tst-array1-static.out: tst-array1.exp $(objpfx)tst-array1-static
+ $(built-program-cmd) > $@
cmp $@ tst-array1.exp > /dev/null
$(objpfx)tst-array2: $(objpfx)tst-array2dep.so
-$(objpfx)tst-array2.out: $(objpfx)tst-array2
- $(elf-objpfx)$(rtld-installed-name) \
- --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
- $(objpfx)tst-array2 > $@
+$(objpfx)tst-array2.out: tst-array2.exp $(objpfx)tst-array2
+ $(built-program-cmd) > $@
cmp $@ tst-array2.exp > /dev/null
-$(objpfx)tst-array3.out: $(objpfx)tst-array3
- $(elf-objpfx)$(rtld-installed-name) \
- --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
- $(objpfx)tst-array3 > $@
+$(objpfx)tst-array3.out: tst-array1.exp $(objpfx)tst-array3
+ $(built-program-cmd) > $@
cmp $@ tst-array1.exp > /dev/null
$(objpfx)tst-array4: $(libdl)
-$(objpfx)tst-array4.out: $(objpfx)tst-array4 $(objpfx)tst-array2dep.so
- $(elf-objpfx)$(rtld-installed-name) \
- --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
- $< > $@
+$(objpfx)tst-array4.out: tst-array4.exp $(objpfx)tst-array4 \
+ $(objpfx)tst-array2dep.so
+ $(built-program-cmd) > $@
cmp $@ tst-array4.exp > /dev/null
$(objpfx)tst-array5: $(objpfx)tst-array5dep.so
-$(objpfx)tst-array5.out: $(objpfx)tst-array5
- $(elf-objpfx)$(rtld-installed-name) \
- --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
- $(objpfx)tst-array5 > $@
+$(objpfx)tst-array5.out: tst-array5.exp $(objpfx)tst-array5
+ $(built-program-cmd) > $@
cmp $@ tst-array5.exp > /dev/null
-$(objpfx)tst-array5-static.out: $(objpfx)tst-array5-static
- $(objpfx)tst-array5-static > $@
+$(objpfx)tst-array5-static.out: tst-array5-static.exp \
+ $(objpfx)tst-array5-static
+ $(built-program-cmd) > $@
cmp $@ tst-array5-static.exp > /dev/null
CFLAGS-tst-pie1.c += $(pie-ccflag)
diff --git a/libc/elf/dl-load.c b/libc/elf/dl-load.c
index 28a233d57..c66e68d8e 100644
--- a/libc/elf/dl-load.c
+++ b/libc/elf/dl-load.c
@@ -1584,6 +1584,10 @@ cannot enable executable stack as shared object requires");
add_name_to_object (l, ((const char *) D_PTR (l, l_info[DT_STRTAB])
+ l->l_info[DT_SONAME]->d_un.d_val));
+#ifdef DL_AFTER_LOAD
+ DL_AFTER_LOAD (l);
+#endif
+
/* Now that the object is fully initialized add it to the object list. */
_dl_add_to_namespace_list (l, nsid);
diff --git a/libc/elf/dl-support.c b/libc/elf/dl-support.c
index a74cf636d..5ce9d959e 100644
--- a/libc/elf/dl-support.c
+++ b/libc/elf/dl-support.c
@@ -168,8 +168,8 @@ const ElfW(Ehdr) *_dl_sysinfo_dso;
struct link_map *_dl_sysinfo_map;
# include "get-dynamic-info.h"
-# include "setup-vdso.h"
#endif
+#include "setup-vdso.h"
/* During the program run we must not modify the global data of
loaded shared object simultanously in two threads. Therefore we
diff --git a/libc/elf/elf.h b/libc/elf/elf.h
index 41fc3bd4f..25249246b 100644
--- a/libc/elf/elf.h
+++ b/libc/elf/elf.h
@@ -2986,12 +2986,18 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */
#define R_TILEGX_IMM16_X0_HW0_GOT 64 /* X0 pipe hword 0 GOT offset */
#define R_TILEGX_IMM16_X1_HW0_GOT 65 /* X1 pipe hword 0 GOT offset */
-/* Relocs 66-71 are currently not defined. */
+#define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */
#define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */
#define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */
#define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */
#define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */
-/* Relocs 76-77 are currently not defined. */
+#define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */
+#define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */
#define R_TILEGX_IMM16_X0_HW0_TLS_GD 78 /* X0 pipe hword 0 TLS GD offset */
#define R_TILEGX_IMM16_X1_HW0_TLS_GD 79 /* X1 pipe hword 0 TLS GD offset */
#define R_TILEGX_IMM16_X0_HW0_TLS_LE 80 /* X0 pipe hword 0 TLS LE offset */
@@ -3007,7 +3013,12 @@ typedef Elf32_Addr Elf32_Conflict;
/* Relocs 90-91 are currently not defined. */
#define R_TILEGX_IMM16_X0_HW0_TLS_IE 92 /* X0 pipe hword 0 TLS IE offset */
#define R_TILEGX_IMM16_X1_HW0_TLS_IE 93 /* X1 pipe hword 0 TLS IE offset */
-/* Relocs 94-99 are currently not defined. */
+#define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */
#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */
#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */
#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */
diff --git a/libc/elf/tst-array1.c b/libc/elf/tst-array1.c
index 4d78db616..ca9bdf407 100644
--- a/libc/elf/tst-array1.c
+++ b/libc/elf/tst-array1.c
@@ -60,7 +60,7 @@ init_2 (void)
write (STDOUT_FILENO, "init array 2\n", 13);
}
-void (*const init_array []) (void)
+void (*init_array []) (void)
__attribute__ ((section (".init_array"), aligned (sizeof (void *)))) =
{
&init_0,
@@ -86,7 +86,7 @@ fini_2 (void)
write (STDOUT_FILENO, "fini array 2\n", 13);
}
-void (*const fini_array []) (void)
+void (*fini_array []) (void)
__attribute__ ((section (".fini_array"), aligned (sizeof (void *)))) =
{
&fini_0,
diff --git a/libc/elf/tst-array2dep.c b/libc/elf/tst-array2dep.c
index e1596b5b3..2812761a0 100644
--- a/libc/elf/tst-array2dep.c
+++ b/libc/elf/tst-array2dep.c
@@ -34,7 +34,7 @@ init_2 (void)
write (STDOUT_FILENO, "DSO init array 2\n", 17);
}
-void (*const init_array []) (void)
+void (*init_array []) (void)
__attribute__ ((section (".init_array"), aligned (sizeof (void *)))) =
{
&init_0,
@@ -60,7 +60,7 @@ fini_2 (void)
write (STDOUT_FILENO, "DSO fini array 2\n", 17);
}
-void (*const fini_array []) (void)
+void (*fini_array []) (void)
__attribute__ ((section (".fini_array"), aligned (sizeof (void *)))) =
{
&fini_0,
diff --git a/libc/gmon/profil.c b/libc/gmon/profil.c
index 53c2263c4..a48ef71e0 100644
--- a/libc/gmon/profil.c
+++ b/libc/gmon/profil.c
@@ -38,4 +38,3 @@ __profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
}
weak_alias (__profil, profil)
stub_warning (profil)
-#include <stub-tag.h>
diff --git a/libc/grp/initgroups.c b/libc/grp/initgroups.c
index 62fd1fc6d..fad30a75f 100644
--- a/libc/grp/initgroups.c
+++ b/libc/grp/initgroups.c
@@ -180,7 +180,7 @@ getgrouplist (const char *user, gid_t group, gid_t *groups, int *ngroups)
return retval;
}
-static_link_warning (getgrouplist)
+nss_interface_function (getgrouplist)
/* Initialize the group set for the current user
by reading the group database and using all groups
@@ -230,4 +230,4 @@ initgroups (const char *user, gid_t group)
#endif
}
-static_link_warning (initgroups)
+nss_interface_function (initgroups)
diff --git a/libc/grp/setgroups.c b/libc/grp/setgroups.c
index 7ef0da270..2de0c8fd9 100644
--- a/libc/grp/setgroups.c
+++ b/libc/grp/setgroups.c
@@ -31,4 +31,3 @@ setgroups (n, groups)
libc_hidden_def (setgroups)
stub_warning (setgroups)
-#include <stub-tag.h>
diff --git a/libc/iconvdata/bug-iconv8.c b/libc/iconvdata/bug-iconv8.c
index 54c6be2f6..b91dc1d1f 100644
--- a/libc/iconvdata/bug-iconv8.c
+++ b/libc/iconvdata/bug-iconv8.c
@@ -24,7 +24,7 @@ do_test (void)
ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
iconv_close(cd);
- printf("result: %ld %d %ld %d\n", ret, errno, inbytesleft, inbuf[0]);
+ printf("result: %zd %d %zd %d\n", ret, errno, inbytesleft, inbuf[0]);
/*
* result: -1 84 0 0 (84=EILSEQ)
diff --git a/libc/iconvdata/bug-iconv9.c b/libc/iconvdata/bug-iconv9.c
index e4ffd593e..28f88d22e 100644
--- a/libc/iconvdata/bug-iconv9.c
+++ b/libc/iconvdata/bug-iconv9.c
@@ -37,7 +37,7 @@ do_test (void)
}
if (in != inbuf + sizeof (inbuf) - 1)
{
- printf ("in advanced by %jd, expected %zu\n",
+ printf ("in advanced by %td, expected %zu\n",
in - inbuf, sizeof (inbuf) - 1);
res = 1;
}
diff --git a/libc/iconvdata/tst-table.sh b/libc/iconvdata/tst-table.sh
index 14ab196d8..5283ad5f5 100755
--- a/libc/iconvdata/tst-table.sh
+++ b/libc/iconvdata/tst-table.sh
@@ -35,7 +35,7 @@ export LC_ALL
set -e
# Get the charmap.
-${SHELL} tst-table-charmap.sh ${charmap:-$charset} \
+./tst-table-charmap.sh ${charmap:-$charset} \
< ../localedata/charmaps/${charmap:-$charset} \
> ${objpfx}tst-${charset}.charmap.table
# When the charset is GB18030, truncate this table because for this encoding,
diff --git a/libc/iconvdata/tst-tables.sh b/libc/iconvdata/tst-tables.sh
index eaf84dc2f..77d9d182c 100755
--- a/libc/iconvdata/tst-tables.sh
+++ b/libc/iconvdata/tst-tables.sh
@@ -262,7 +262,7 @@ while read charset charmap; do
if test "$charset" = GB18030; then echo "This might take a while" 1>&2; fi
case ${charset} in \#*) continue;; esac
echo -n "Testing ${charset}" 1>&2
- if ${SHELL} tst-table.sh ${common_objpfx} ${objpfx} "${run_program_prefix}" \
+ if ./tst-table.sh ${common_objpfx} ${objpfx} "${run_program_prefix}" \
${charset} ${charmap} < /dev/null; then
echo 1>&2
else
diff --git a/libc/include/bits/stdlib-float.h b/libc/include/bits/stdlib-float.h
new file mode 100644
index 000000000..d3f5c5b92
--- /dev/null
+++ b/libc/include/bits/stdlib-float.h
@@ -0,0 +1,4 @@
+/* No floating-point inline functions in rtld. */
+#ifndef IS_IN_rtld
+# include <stdlib/bits/stdlib-float.h>
+#endif
diff --git a/libc/include/fenv.h b/libc/include/fenv.h
index 59d4c3f63..ed6d1394b 100644
--- a/libc/include/fenv.h
+++ b/libc/include/fenv.h
@@ -1,6 +1,7 @@
#ifndef _FENV_H
#include <math/fenv.h>
+#ifndef _ISOMAC
/* Now define the internal interfaces. */
extern int __feclearexcept (int __excepts);
@@ -19,5 +20,7 @@ libm_hidden_proto (fesetround)
libm_hidden_proto (feholdexcept)
libm_hidden_proto (feupdateenv)
libm_hidden_proto (fetestexcept)
+libm_hidden_proto (feclearexcept)
+#endif
#endif
diff --git a/libc/include/stub-tag.h b/libc/include/stub-tag.h
deleted file mode 100644
index d4d10c834..000000000
--- a/libc/include/stub-tag.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* This header is included into every file that declares a stub function.
- It is obsolete now, but hasn't died to avoid removing all those
- #include's. Every such file should use the `stub_warning' macro for
- each of its functions, and that is sufficient. */
diff --git a/libc/include/sys/syslog.h b/libc/include/sys/syslog.h
index c08cfcd1f..3be3189ed 100644
--- a/libc/include/sys/syslog.h
+++ b/libc/include/sys/syslog.h
@@ -1,5 +1,6 @@
#include <misc/sys/syslog.h>
+#ifndef _ISOMAC
libc_hidden_proto (syslog)
libc_hidden_proto (vsyslog)
@@ -7,3 +8,4 @@ extern void __vsyslog_chk (int __pri, int __flag, const char *__fmt,
__gnuc_va_list __ap)
__attribute__ ((__format__ (__printf__, 3, 0)));
libc_hidden_proto (__vsyslog_chk)
+#endif
diff --git a/libc/inet/if_index.c b/libc/inet/if_index.c
index ba25ec6a6..3d706766b 100644
--- a/libc/inet/if_index.c
+++ b/libc/inet/if_index.c
@@ -50,7 +50,6 @@ if_nameindex (void)
return NULL;
}
stub_warning (if_nameindex)
-#include <stub-tag.h>
#if 0
void
diff --git a/libc/io/access.c b/libc/io/access.c
index b8f730048..9b82a99a5 100644
--- a/libc/io/access.c
+++ b/libc/io/access.c
@@ -37,4 +37,3 @@ __access (file, type)
stub_warning (access)
weak_alias (__access, access)
-#include <stub-tag.h>
diff --git a/libc/io/chdir.c b/libc/io/chdir.c
index 9f5209756..251afd3ce 100644
--- a/libc/io/chdir.c
+++ b/libc/io/chdir.c
@@ -36,4 +36,3 @@ __chdir (path)
stub_warning (chdir)
weak_alias (__chdir, chdir)
-#include <stub-tag.h>
diff --git a/libc/io/chmod.c b/libc/io/chmod.c
index 7d45cc8de..8e4be3dfb 100644
--- a/libc/io/chmod.c
+++ b/libc/io/chmod.c
@@ -38,4 +38,3 @@ __chmod (file, mode)
stub_warning (chmod)
weak_alias (__chmod, chmod)
-#include <stub-tag.h>
diff --git a/libc/io/chown.c b/libc/io/chown.c
index e91bd1b12..45bd9e248 100644
--- a/libc/io/chown.c
+++ b/libc/io/chown.c
@@ -41,4 +41,3 @@ libc_hidden_def (__chown)
stub_warning (chown)
weak_alias (__chown, chown)
-#include <stub-tag.h>
diff --git a/libc/io/close.c b/libc/io/close.c
index 41c37d8c0..ce9276ff7 100644
--- a/libc/io/close.c
+++ b/libc/io/close.c
@@ -36,4 +36,3 @@ libc_hidden_def (__close)
stub_warning (close)
weak_alias (__close, close)
-#include <stub-tag.h>
diff --git a/libc/io/dup.c b/libc/io/dup.c
index d28e31894..c659de3d0 100644
--- a/libc/io/dup.c
+++ b/libc/io/dup.c
@@ -30,4 +30,3 @@ __dup (fd)
stub_warning (dup)
weak_alias (__dup, dup)
-#include <stub-tag.h>
diff --git a/libc/io/dup2.c b/libc/io/dup2.c
index aeeebd5b1..a043af5a0 100644
--- a/libc/io/dup2.c
+++ b/libc/io/dup2.c
@@ -44,4 +44,3 @@ libc_hidden_def (__dup2)
stub_warning (dup2)
weak_alias (__dup2, dup2)
-#include <stub-tag.h>
diff --git a/libc/io/dup3.c b/libc/io/dup3.c
index 7e97bf733..4df7e9bc4 100644
--- a/libc/io/dup3.c
+++ b/libc/io/dup3.c
@@ -45,5 +45,3 @@ __dup3 (fd, fd2, flags)
libc_hidden_def (__dup3)
weak_alias (__dup3, dup3)
stub_warning (dup3)
-
-#include <stub-tag.h>
diff --git a/libc/io/euidaccess.c b/libc/io/euidaccess.c
index 82ddd377e..d71d22139 100644
--- a/libc/io/euidaccess.c
+++ b/libc/io/euidaccess.c
@@ -38,4 +38,3 @@ weak_alias (__euidaccess, euidaccess)
weak_alias (__euidaccess, eaccess)
stub_warning (euidaccess)
stub_warning (eaccess)
-#include <stub-tag.h>
diff --git a/libc/io/faccessat.c b/libc/io/faccessat.c
index 3e30ddec0..4e8e46c05 100644
--- a/libc/io/faccessat.c
+++ b/libc/io/faccessat.c
@@ -46,5 +46,3 @@ faccessat (fd, file, type, flag)
return -1;
}
stub_warning (faccessat)
-
-#include <stub-tag.h>
diff --git a/libc/io/fchdir.c b/libc/io/fchdir.c
index de4ebefe3..c7ce4a9c3 100644
--- a/libc/io/fchdir.c
+++ b/libc/io/fchdir.c
@@ -29,4 +29,3 @@ fchdir (fd)
}
stub_warning (fchdir)
-#include <stub-tag.h>
diff --git a/libc/io/fchmod.c b/libc/io/fchmod.c
index 89087b61d..b5dc512dd 100644
--- a/libc/io/fchmod.c
+++ b/libc/io/fchmod.c
@@ -38,4 +38,3 @@ __fchmod (fd, mode)
stub_warning (fchmod)
weak_alias (__fchmod, fchmod)
-#include <stub-tag.h>
diff --git a/libc/io/fchmodat.c b/libc/io/fchmodat.c
index d171f363b..1bbe63edc 100644
--- a/libc/io/fchmodat.c
+++ b/libc/io/fchmodat.c
@@ -46,5 +46,3 @@ fchmodat (fd, file, mode, flag)
return -1;
}
stub_warning (fchmodat)
-
-#include <stub-tag.h>
diff --git a/libc/io/fchown.c b/libc/io/fchown.c
index 5b15f90f6..c98b84e27 100644
--- a/libc/io/fchown.c
+++ b/libc/io/fchown.c
@@ -39,4 +39,3 @@ __fchown (fd, owner, group)
stub_warning (fchown)
weak_alias (__fchown, fchown)
-#include <stub-tag.h>
diff --git a/libc/io/fchownat.c b/libc/io/fchownat.c
index c779f28c2..8f82ce6f4 100644
--- a/libc/io/fchownat.c
+++ b/libc/io/fchownat.c
@@ -46,5 +46,3 @@ fchownat (fd, file, owner, group, flag)
return -1;
}
stub_warning (fchownat)
-
-#include <stub-tag.h>
diff --git a/libc/io/fcntl.c b/libc/io/fcntl.c
index 550eb1194..766f605e3 100644
--- a/libc/io/fcntl.c
+++ b/libc/io/fcntl.c
@@ -37,4 +37,3 @@ libc_hidden_def (__fcntl)
stub_warning (fcntl)
weak_alias (__fcntl, fcntl)
-#include <stub-tag.h>
diff --git a/libc/io/flock.c b/libc/io/flock.c
index 6da0b6b36..68f1b448b 100644
--- a/libc/io/flock.c
+++ b/libc/io/flock.c
@@ -32,4 +32,3 @@ __flock (fd, operation)
weak_alias (__flock, flock)
stub_warning (flock)
-#include <stub-tag.h>
diff --git a/libc/io/fstatfs.c b/libc/io/fstatfs.c
index 9579fcc54..1bca3d546 100644
--- a/libc/io/fstatfs.c
+++ b/libc/io/fstatfs.c
@@ -30,4 +30,3 @@ __fstatfs (int fd, struct statfs *buf)
stub_warning (fstatfs)
weak_alias (__fstatfs, fstatfs)
-#include <stub-tag.h>
diff --git a/libc/io/fstatfs64.c b/libc/io/fstatfs64.c
index 640be9f55..031a81fbd 100644
--- a/libc/io/fstatfs64.c
+++ b/libc/io/fstatfs64.c
@@ -28,4 +28,3 @@ __fstatfs64 (int fd, struct statfs64 *buf)
weak_alias (__fstatfs64, fstatfs64)
stub_warning (fstatfs64)
-#include <stub-tag.h>
diff --git a/libc/io/fstatvfs.c b/libc/io/fstatvfs.c
index 4b64949f9..fd4936ca5 100644
--- a/libc/io/fstatvfs.c
+++ b/libc/io/fstatvfs.c
@@ -29,4 +29,3 @@ __fstatvfs (int fd, struct statvfs *buf)
stub_warning (fstatvfs)
weak_alias (__fstatvfs, fstatvfs)
libc_hidden_weak (fstatvfs)
-#include <stub-tag.h>
diff --git a/libc/io/fstatvfs64.c b/libc/io/fstatvfs64.c
index 9eb62a36c..a8374dd2d 100644
--- a/libc/io/fstatvfs64.c
+++ b/libc/io/fstatvfs64.c
@@ -28,4 +28,3 @@ __fstatvfs64 (int fd, struct statvfs64 *buf)
weak_alias (__fstatvfs64, fstatvfs64)
stub_warning (fstatvfs64)
-#include <stub-tag.h>
diff --git a/libc/io/futimens.c b/libc/io/futimens.c
index df3ddf3d1..b80de0800 100644
--- a/libc/io/futimens.c
+++ b/libc/io/futimens.c
@@ -32,4 +32,3 @@ futimens (int fd, const struct timespec tsp[2])
return -1;
}
stub_warning (futimens)
-#include <stub-tag.h>
diff --git a/libc/io/fxstat.c b/libc/io/fxstat.c
index 216a14cac..50c06570d 100644
--- a/libc/io/fxstat.c
+++ b/libc/io/fxstat.c
@@ -46,4 +46,3 @@ __fxstat (int vers, int fd, struct stat *buf)
stub_warning (fstat)
hidden_def (__fxstat)
weak_alias (__fxstat, _fxstat)
-#include <stub-tag.h>
diff --git a/libc/io/fxstat64.c b/libc/io/fxstat64.c
index dd0c56948..56755f826 100644
--- a/libc/io/fxstat64.c
+++ b/libc/io/fxstat64.c
@@ -45,4 +45,3 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
}
hidden_def (__fxstat64)
stub_warning (fstat64)
-#include <stub-tag.h>
diff --git a/libc/io/fxstatat.c b/libc/io/fxstatat.c
index a6e79d037..fff4be293 100644
--- a/libc/io/fxstatat.c
+++ b/libc/io/fxstatat.c
@@ -46,4 +46,3 @@ __fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag)
}
libc_hidden_def (__fxstatat)
stub_warning (fstatat)
-#include <stub-tag.h>
diff --git a/libc/io/fxstatat64.c b/libc/io/fxstatat64.c
index 950e26738..43fd53e2c 100644
--- a/libc/io/fxstatat64.c
+++ b/libc/io/fxstatat64.c
@@ -47,4 +47,3 @@ __fxstatat64 (int vers, int fd, const char *filename, struct stat64 *buf,
}
libc_hidden_def (__fxstatat64)
stub_warning (fstatat64)
-#include <stub-tag.h>
diff --git a/libc/io/getcwd.c b/libc/io/getcwd.c
index 5984a353a..3aba719c5 100644
--- a/libc/io/getcwd.c
+++ b/libc/io/getcwd.c
@@ -36,4 +36,3 @@ weak_alias (__getcwd, getcwd)
stub_warning (__getcwd)
stub_warning (getcwd)
-#include <stub-tag.h>
diff --git a/libc/io/isatty.c b/libc/io/isatty.c
index f8e793b1e..eb532711c 100644
--- a/libc/io/isatty.c
+++ b/libc/io/isatty.c
@@ -30,4 +30,3 @@ __isatty (fd)
weak_alias (__isatty, isatty)
stub_warning (isatty)
-#include <stub-tag.h>
diff --git a/libc/io/lchmod.c b/libc/io/lchmod.c
index 8d9b79fb2..5044f4c2d 100644
--- a/libc/io/lchmod.c
+++ b/libc/io/lchmod.c
@@ -29,4 +29,3 @@ lchmod (const char *file, mode_t mode)
}
stub_warning (lchmod)
-#include <stub-tag.h>
diff --git a/libc/io/lchown.c b/libc/io/lchown.c
index 7ecf3345a..682083c9e 100644
--- a/libc/io/lchown.c
+++ b/libc/io/lchown.c
@@ -39,4 +39,3 @@ __lchown (file, owner, group)
stub_warning (lchown)
weak_alias (__lchown, lchown)
-#include <stub-tag.h>
diff --git a/libc/io/link.c b/libc/io/link.c
index 3b039657c..b43f5eb2a 100644
--- a/libc/io/link.c
+++ b/libc/io/link.c
@@ -38,4 +38,3 @@ __link (from, to)
stub_warning (link)
weak_alias (__link, link)
-#include <stub-tag.h>
diff --git a/libc/io/linkat.c b/libc/io/linkat.c
index 2fa8cde93..6274d0939 100644
--- a/libc/io/linkat.c
+++ b/libc/io/linkat.c
@@ -47,5 +47,3 @@ linkat (fromfd, from, tofd, to, flags)
return -1;
}
stub_warning (linkat)
-
-#include <stub-tag.h>
diff --git a/libc/io/lseek.c b/libc/io/lseek.c
index 0729cb66e..7fd6188a7 100644
--- a/libc/io/lseek.c
+++ b/libc/io/lseek.c
@@ -49,4 +49,3 @@ stub_warning (lseek)
libc_hidden_def (__lseek)
weak_alias (__lseek, lseek)
-#include <stub-tag.h>
diff --git a/libc/io/lseek64.c b/libc/io/lseek64.c
index acea3f3cb..21b853a96 100644
--- a/libc/io/lseek64.c
+++ b/libc/io/lseek64.c
@@ -45,4 +45,3 @@ __libc_lseek64 (int fd, off64_t offset, int whence)
weak_alias (__libc_lseek64, __lseek64)
weak_alias (__libc_lseek64, lseek64)
stub_warning (lseek64)
-#include <stub-tag.h>
diff --git a/libc/io/lxstat64.c b/libc/io/lxstat64.c
index 38d78a806..84993c256 100644
--- a/libc/io/lxstat64.c
+++ b/libc/io/lxstat64.c
@@ -35,4 +35,3 @@ __lxstat64 (int vers, const char *file, struct stat64 *buf)
}
hidden_def (__lxstat64)
stub_warning (__lxstat64)
-#include <stub-tag.h>
diff --git a/libc/io/mkdir.c b/libc/io/mkdir.c
index ac95d36e1..39c3db175 100644
--- a/libc/io/mkdir.c
+++ b/libc/io/mkdir.c
@@ -39,4 +39,3 @@ __mkdir (path, mode)
stub_warning (mkdir)
weak_alias (__mkdir, mkdir)
-#include <stub-tag.h>
diff --git a/libc/io/mkdirat.c b/libc/io/mkdirat.c
index 04533fcd2..e8d10aea4 100644
--- a/libc/io/mkdirat.c
+++ b/libc/io/mkdirat.c
@@ -53,5 +53,3 @@ mkdirat (fd, path, mode)
return -1;
}
stub_warning (mkdirat)
-
-#include <stub-tag.h>
diff --git a/libc/io/mkfifo.c b/libc/io/mkfifo.c
index 1b55921c3..8fdd0214f 100644
--- a/libc/io/mkfifo.c
+++ b/libc/io/mkfifo.c
@@ -39,4 +39,3 @@ mkfifo (path, mode)
stub_warning (mkfifo)
-#include <stub-tag.h>
diff --git a/libc/io/mkfifoat.c b/libc/io/mkfifoat.c
index 30cea3161..850d5671f 100644
--- a/libc/io/mkfifoat.c
+++ b/libc/io/mkfifoat.c
@@ -56,4 +56,3 @@ mkfifoat (fd, path, mode)
stub_warning (mkfifoat)
-#include <stub-tag.h>
diff --git a/libc/io/open.c b/libc/io/open.c
index b6911206a..a388b3386 100644
--- a/libc/io/open.c
+++ b/libc/io/open.c
@@ -69,5 +69,3 @@ __open_2 (file, oflag)
return __open (file, oflag);
}
stub_warning (__open_2)
-
-#include <stub-tag.h>
diff --git a/libc/io/open64.c b/libc/io/open64.c
index b4ce18d32..704491dff 100644
--- a/libc/io/open64.c
+++ b/libc/io/open64.c
@@ -66,5 +66,3 @@ __open64_2 (file, oflag)
return __open64 (file, oflag);
}
stub_warning (__open64_2)
-
-#include <stub-tag.h>
diff --git a/libc/io/openat.c b/libc/io/openat.c
index b49653936..efcbaa90c 100644
--- a/libc/io/openat.c
+++ b/libc/io/openat.c
@@ -88,5 +88,3 @@ __openat_2 (fd, file, oflag)
return __openat (fd, file, oflag);
}
stub_warning (__openat_2)
-
-#include <stub-tag.h>
diff --git a/libc/io/openat64.c b/libc/io/openat64.c
index 207176089..7de0e6967 100644
--- a/libc/io/openat64.c
+++ b/libc/io/openat64.c
@@ -81,5 +81,3 @@ __openat64_2 (fd, file, oflag)
return __openat64 (fd, file, oflag);
}
stub_warning (__openat_2)
-
-#include <stub-tag.h>
diff --git a/libc/io/pipe.c b/libc/io/pipe.c
index 07a37ae77..1f1c03f0d 100644
--- a/libc/io/pipe.c
+++ b/libc/io/pipe.c
@@ -40,4 +40,3 @@ libc_hidden_def (__pipe)
stub_warning (pipe)
weak_alias (__pipe, pipe)
-#include <stub-tag.h>
diff --git a/libc/io/pipe2.c b/libc/io/pipe2.c
index 8a15e840f..2478fc3c6 100644
--- a/libc/io/pipe2.c
+++ b/libc/io/pipe2.c
@@ -39,5 +39,3 @@ __pipe2 (pipedes, flags)
}
weak_alias (__pipe2, pipe2)
stub_warning (pipe2)
-
-#include <stub-tag.h>
diff --git a/libc/io/poll.c b/libc/io/poll.c
index 15539ea0a..2dc7fc6a3 100644
--- a/libc/io/poll.c
+++ b/libc/io/poll.c
@@ -35,4 +35,3 @@ poll (fds, nfds, timeout)
}
stub_warning (poll)
-#include <stub-tag.h>
diff --git a/libc/io/posix_fadvise.c b/libc/io/posix_fadvise.c
index 373360164..70d0700b5 100644
--- a/libc/io/posix_fadvise.c
+++ b/libc/io/posix_fadvise.c
@@ -27,4 +27,3 @@ posix_fadvise (int fd, __off_t offset, __off_t len, int advise)
return ENOSYS;
}
stub_warning (posix_fadvise)
-#include <stub-tag.h>
diff --git a/libc/io/posix_fadvise64.c b/libc/io/posix_fadvise64.c
index 645ed6cac..3398c8eef 100644
--- a/libc/io/posix_fadvise64.c
+++ b/libc/io/posix_fadvise64.c
@@ -27,4 +27,3 @@ posix_fadvise64 (int fd, __off64_t offset, __off64_t len, int advise)
return ENOSYS;
}
stub_warning (posix_fadvise64)
-#include <stub-tag.h>
diff --git a/libc/io/posix_fallocate.c b/libc/io/posix_fallocate.c
index 3f8a3cb10..d5138f08b 100644
--- a/libc/io/posix_fallocate.c
+++ b/libc/io/posix_fallocate.c
@@ -27,4 +27,3 @@ posix_fallocate (int fd, __off_t offset, __off_t len)
return -1;
}
stub_warning (posix_fallocate)
-#include <stub-tag.h>
diff --git a/libc/io/posix_fallocate64.c b/libc/io/posix_fallocate64.c
index 07b08ae85..486646add 100644
--- a/libc/io/posix_fallocate64.c
+++ b/libc/io/posix_fallocate64.c
@@ -27,4 +27,3 @@ posix_fallocate64 (int fd, __off64_t offset, __off64_t len)
return -1;
}
stub_warning (posix_fallocate64)
-#include <stub-tag.h>
diff --git a/libc/io/read.c b/libc/io/read.c
index 681f16eb5..f676d4929 100644
--- a/libc/io/read.c
+++ b/libc/io/read.c
@@ -45,4 +45,3 @@ stub_warning (read)
weak_alias (__libc_read, __read)
libc_hidden_weak (__read)
weak_alias (__libc_read, read)
-#include <stub-tag.h>
diff --git a/libc/io/readlink.c b/libc/io/readlink.c
index de4040b0a..4a1811b5c 100644
--- a/libc/io/readlink.c
+++ b/libc/io/readlink.c
@@ -33,4 +33,3 @@ __readlink (path, buf, len)
stub_warning (readlink)
weak_alias (__readlink, readlink)
-#include <stub-tag.h>
diff --git a/libc/io/readlinkat.c b/libc/io/readlinkat.c
index d4e6ba290..473f4e9c5 100644
--- a/libc/io/readlinkat.c
+++ b/libc/io/readlinkat.c
@@ -46,5 +46,3 @@ readlinkat (fd, path, buf, len)
}
stub_warning (readlinkat)
libc_hidden_def (readlinkat)
-
-#include <stub-tag.h>
diff --git a/libc/io/rmdir.c b/libc/io/rmdir.c
index c244ecc2c..83c76369e 100644
--- a/libc/io/rmdir.c
+++ b/libc/io/rmdir.c
@@ -37,4 +37,3 @@ __rmdir (path)
stub_warning (rmdir)
weak_alias (__rmdir, rmdir)
-#include <stub-tag.h>
diff --git a/libc/io/sendfile.c b/libc/io/sendfile.c
index 22222db4e..4823c8032 100644
--- a/libc/io/sendfile.c
+++ b/libc/io/sendfile.c
@@ -28,5 +28,3 @@ sendfile (int out_fd, int in_fd, off_t *offset, size_t count)
return -1;
}
stub_warning (sendfile)
-
-#include <stub-tag.h>
diff --git a/libc/io/sendfile64.c b/libc/io/sendfile64.c
index 05b13a331..8fddcc8fa 100644
--- a/libc/io/sendfile64.c
+++ b/libc/io/sendfile64.c
@@ -28,5 +28,3 @@ sendfile64 (int out_fd, int in_fd, off64_t *offset, size_t count)
return -1;
}
stub_warning (sendfile64)
-
-#include <stub-tag.h>
diff --git a/libc/io/statfs.c b/libc/io/statfs.c
index 50cf3f3a7..0bb674a5d 100644
--- a/libc/io/statfs.c
+++ b/libc/io/statfs.c
@@ -31,4 +31,3 @@ libc_hidden_def (__statfs)
weak_alias (__statfs, statfs)
stub_warning (statfs)
-#include <stub-tag.h>
diff --git a/libc/io/statfs64.c b/libc/io/statfs64.c
index 12394959b..a895d4398 100644
--- a/libc/io/statfs64.c
+++ b/libc/io/statfs64.c
@@ -28,4 +28,3 @@ __statfs64 (const char *file, struct statfs64 *buf)
weak_alias (__statfs64, statfs64)
stub_warning (statfs64)
-#include <stub-tag.h>
diff --git a/libc/io/statvfs.c b/libc/io/statvfs.c
index b66d02767..0ff847fb7 100644
--- a/libc/io/statvfs.c
+++ b/libc/io/statvfs.c
@@ -30,4 +30,3 @@ __statvfs (const char *file, struct statvfs *buf)
weak_alias (__statvfs, statvfs)
libc_hidden_weak (statvfs)
stub_warning (statvfs)
-#include <stub-tag.h>
diff --git a/libc/io/statvfs64.c b/libc/io/statvfs64.c
index 1101acd7a..7e57bc782 100644
--- a/libc/io/statvfs64.c
+++ b/libc/io/statvfs64.c
@@ -28,4 +28,3 @@ __statvfs64 (const char *file, struct statvfs64 *buf)
weak_alias (__statvfs64, statvfs64)
stub_warning (statvfs64)
-#include <stub-tag.h>
diff --git a/libc/io/symlink.c b/libc/io/symlink.c
index 6e135d955..298854f3b 100644
--- a/libc/io/symlink.c
+++ b/libc/io/symlink.c
@@ -38,4 +38,3 @@ __symlink (from, to)
stub_warning (symlink)
weak_alias (__symlink, symlink)
-#include <stub-tag.h>
diff --git a/libc/io/symlinkat.c b/libc/io/symlinkat.c
index d5affb9b4..4937a2eae 100644
--- a/libc/io/symlinkat.c
+++ b/libc/io/symlinkat.c
@@ -44,5 +44,3 @@ symlinkat (from, fd, to)
return -1;
}
stub_warning (symlinkat)
-
-#include <stub-tag.h>
diff --git a/libc/io/ttyname.c b/libc/io/ttyname.c
index 5473b5e04..8df1fd46b 100644
--- a/libc/io/ttyname.c
+++ b/libc/io/ttyname.c
@@ -34,4 +34,3 @@ ttyname (fd)
stub_warning (ttyname)
-#include <stub-tag.h>
diff --git a/libc/io/ttyname_r.c b/libc/io/ttyname_r.c
index 5acbbd59e..6d7dfabd6 100644
--- a/libc/io/ttyname_r.c
+++ b/libc/io/ttyname_r.c
@@ -33,4 +33,3 @@ __ttyname_r (fd, buf, buflen)
weak_alias (__ttyname_r, ttyname_r)
stub_warning (ttyname_r)
-#include <stub-tag.h>
diff --git a/libc/io/umask.c b/libc/io/umask.c
index 1e71aae42..07d7150e3 100644
--- a/libc/io/umask.c
+++ b/libc/io/umask.c
@@ -30,4 +30,3 @@ __umask (mask)
stub_warning (umask)
weak_alias (__umask, umask)
-#include <stub-tag.h>
diff --git a/libc/io/unlink.c b/libc/io/unlink.c
index 04d69f867..b7a6d7cce 100644
--- a/libc/io/unlink.c
+++ b/libc/io/unlink.c
@@ -37,4 +37,3 @@ __unlink (name)
stub_warning (unlink)
weak_alias (__unlink, unlink)
-#include <stub-tag.h>
diff --git a/libc/io/unlinkat.c b/libc/io/unlinkat.c
index f05961103..afa505380 100644
--- a/libc/io/unlinkat.c
+++ b/libc/io/unlinkat.c
@@ -44,5 +44,3 @@ unlinkat (fd, name, flag)
return -1;
}
stub_warning (unlinkat)
-
-#include <stub-tag.h>
diff --git a/libc/io/utime.c b/libc/io/utime.c
index 865628f5a..7b307762d 100644
--- a/libc/io/utime.c
+++ b/libc/io/utime.c
@@ -39,4 +39,3 @@ utime (file, times)
libc_hidden_def (utime)
stub_warning (utime)
-#include <stub-tag.h>
diff --git a/libc/io/utimensat.c b/libc/io/utimensat.c
index d103d4564..b1d3b0354 100644
--- a/libc/io/utimensat.c
+++ b/libc/io/utimensat.c
@@ -30,4 +30,3 @@ utimensat (int fd, const char *file, const struct timespec tsp[2],
return -1;
}
stub_warning (utimensat)
-#include <stub-tag.h>
diff --git a/libc/io/write.c b/libc/io/write.c
index a5f907a34..8c9523dec 100644
--- a/libc/io/write.c
+++ b/libc/io/write.c
@@ -46,4 +46,3 @@ stub_warning (write)
weak_alias (__libc_write, __write)
libc_hidden_weak (__write)
weak_alias (__libc_write, write)
-#include <stub-tag.h>
diff --git a/libc/io/xmknod.c b/libc/io/xmknod.c
index 78bbf5a1a..bea68e106 100644
--- a/libc/io/xmknod.c
+++ b/libc/io/xmknod.c
@@ -38,4 +38,3 @@ stub_warning (__xmknod)
weak_alias (__xmknod, _xmknod)
libc_hidden_def (__xmknod)
-#include <stub-tag.h>
diff --git a/libc/io/xmknodat.c b/libc/io/xmknodat.c
index a743cced3..1be6ffae2 100644
--- a/libc/io/xmknodat.c
+++ b/libc/io/xmknodat.c
@@ -60,4 +60,3 @@ __xmknodat (int vers, int fd, const char *path, mode_t mode, dev_t *dev)
stub_warning (__xmknodat)
libc_hidden_def (__xmknodat)
-#include <stub-tag.h>
diff --git a/libc/io/xstat.c b/libc/io/xstat.c
index 687118991..806604e67 100644
--- a/libc/io/xstat.c
+++ b/libc/io/xstat.c
@@ -35,4 +35,3 @@ __xstat (int vers, const char *file, struct stat *buf)
hidden_def (__xstat)
stub_warning (stat)
weak_alias (__xstat, _xstat)
-#include <stub-tag.h>
diff --git a/libc/io/xstat64.c b/libc/io/xstat64.c
index 9d153442b..aad135287 100644
--- a/libc/io/xstat64.c
+++ b/libc/io/xstat64.c
@@ -34,4 +34,3 @@ __xstat64 (int vers, const char *file, struct stat64 *buf)
}
hidden_def (__xstat64)
stub_warning (stat64)
-#include <stub-tag.h>
diff --git a/libc/libio/genops.c b/libc/libio/genops.c
index 0a81a5d10..61e59f95a 100644
--- a/libc/libio/genops.c
+++ b/libc/libio/genops.c
@@ -822,7 +822,7 @@ _IO_flush_all_lockp (int do_lock)
int last_stamp;
#ifdef _IO_MTSAFE_IO
- __libc_cleanup_region_start (do_lock, flush_cleanup, 0);
+ __libc_cleanup_region_start (do_lock, flush_cleanup, NULL);
if (do_lock)
_IO_lock_lock (list_all_lock);
#endif
diff --git a/libc/localedata/ChangeLog b/libc/localedata/ChangeLog
index 3e775ed44..1b36e0235 100644
--- a/libc/localedata/ChangeLog
+++ b/libc/localedata/ChangeLog
@@ -1,3 +1,13 @@
+2012-11-02 Marko Myllynen <myllynen@redhat.com>
+
+ [BZ #14669]
+ * locales/fi_FI@euro (LC_IDENTIFICATION): Add missing
+ LC_MEASUREMENT, fix LC_TELEPHONE category.
+
+2012-10-31 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile [$(run-built-tests) = yes] (LOCALES): Add en_US.UTF-8.
+
2012-10-23 Joseph Myers <joseph@codesourcery.com>
* Makefile [$(cross-compiling) = no]: Change condition to
diff --git a/libc/localedata/locales/fi_FI@euro b/libc/localedata/locales/fi_FI@euro
index 39c51d64d..8c610ccc6 100644
--- a/libc/localedata/locales/fi_FI@euro
+++ b/libc/localedata/locales/fi_FI@euro
@@ -1,4 +1,4 @@
-escape_char /
+escape_char /
comment_char %
% Finnish language locale for Finland with Euro
@@ -33,10 +33,10 @@ category "fi_FI@euro:2000";LC_NUMERIC
category "fi_FI@euro:2000";LC_MONETARY
category "fi_FI@euro:2000";LC_MESSAGES
category "fi_FI@euro:2000";LC_PAPER
+category "fi_FI@euro:2000";LC_MEASUREMENT
category "fi_FI@euro:2000";LC_NAME
category "fi_FI@euro:2000";LC_ADDRESS
-category "fi_FI:2000";LC_TELEPHONE
-
+category "fi_FI@euro:2000";LC_TELEPHONE
END LC_IDENTIFICATION
LC_COLLATE
diff --git a/libc/localedata/tst-langinfo.sh b/libc/localedata/tst-langinfo.sh
index 04771cb02..8d4671736 100755
--- a/libc/localedata/tst-langinfo.sh
+++ b/libc/localedata/tst-langinfo.sh
@@ -20,7 +20,7 @@
set -e
common_objpfx=$1
-run_program_prefix=$2
+tst_langinfo=$2
# Run the test program.
cat <<"EOF" |
@@ -340,8 +340,7 @@ ja_JP.EUC-JP NOEXPR ^([nN£î£Î]|¤¤¤¤¤¨|¥¤¥¤¥¨)
ja_JP.EUC-JP CODESET EUC-JP
EOF
LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-LC_ALL=tt_TT ${run_program_prefix} \
- ${common_objpfx}localedata/tst-langinfo \
+LC_ALL=tt_TT ${tst_langinfo} \
> ${common_objpfx}localedata/tst-langinfo.out
exit $?
diff --git a/libc/login/getpt.c b/libc/login/getpt.c
index 34218a63a..4b9b037b9 100644
--- a/libc/login/getpt.c
+++ b/libc/login/getpt.c
@@ -41,4 +41,3 @@ weak_alias (__posix_openpt, posix_openpt)
stub_warning (getpt)
stub_warning (posix_openpt)
-#include <stub-tag.h>
diff --git a/libc/login/grantpt.c b/libc/login/grantpt.c
index a076112fc..fd7ee6c0b 100644
--- a/libc/login/grantpt.c
+++ b/libc/login/grantpt.c
@@ -31,4 +31,3 @@ grantpt (fd)
}
stub_warning (grantpt)
-#include <stub-tag.h>
diff --git a/libc/login/unlockpt.c b/libc/login/unlockpt.c
index 1f3bf14ce..f00d88f9c 100644
--- a/libc/login/unlockpt.c
+++ b/libc/login/unlockpt.c
@@ -31,4 +31,3 @@ unlockpt (fd)
}
stub_warning (unlockpt)
-#include <stub-tag.h>
diff --git a/libc/manual/install.texi b/libc/manual/install.texi
index 2661ee04a..280de3fc7 100644
--- a/libc/manual/install.texi
+++ b/libc/manual/install.texi
@@ -224,7 +224,25 @@ important to use this same @code{CC} value when running
run on the build system as part of compiling the library. You may need to
set @code{AR} to cross-compiling versions of @code{ar}
if the native tools are not configured to work with
-object files for the target you configured for.
+object files for the target you configured for. When cross-compiling
+@theglibc{}, it may be tested using @samp{make check
+test-wrapper="@var{srcdir}/scripts/cross-test-ssh.sh @var{hostname}"},
+where @var{srcdir} is the absolute directory name for the main source
+directory and @var{hostname} is the host name of a system that can run
+the newly built binaries of @theglibc{}. The source and build
+directories must be visible at the same locations on both the build
+system and @var{hostname}.
+
+In general, when testing @theglibc{}, @samp{test-wrapper} may be set
+to the name and arguments of any program to run newly built binaries.
+This program must preserve the arguments to the binary being run, its
+working directory, all environment variables set as part of testing
+and the standard input, output and error file descriptors. If
+@samp{@var{test-wrapper} env} will not work to run a program with
+environment variables set, then @samp{test-wrapper-env} must be set to
+a program that runs a newly built program with environment variable
+assignments in effect, those assignments being specified as
+@samp{@var{var}=@var{value}} before the name of the program to be run.
@node Running make install
diff --git a/libc/manual/maint.texi b/libc/manual/maint.texi
index e6fedcfa7..0f4b95981 100644
--- a/libc/manual/maint.texi
+++ b/libc/manual/maint.texi
@@ -247,8 +247,7 @@ particular machine or operating system. Stub functions always return an
error, and set @code{errno} to @code{ENOSYS} (Function not implemented).
@xref{Error Reporting}. If you define a stub function, you must place
the statement @code{stub_warning(@var{function})}, where @var{function}
-is the name of your function, after its definition; also, you must
-include the file @code{<stub-tag.h>} into your file. This causes the
+is the name of your function, after its definition. This causes the
function to be listed in the installed @code{<gnu/stubs.h>}, and
makes GNU ld warn when the function is used.
diff --git a/libc/manual/message.texi b/libc/manual/message.texi
index f65123c9f..6f5191867 100644
--- a/libc/manual/message.texi
+++ b/libc/manual/message.texi
@@ -699,7 +699,6 @@ Now we can start building the program (assume the message catalog source
file is named @file{hello.msg} and the program source file @file{hello.c}):
@smallexample
-@cartouche
% gencat -H msgnrs.h -o hello.cat hello.msg
% cat msgnrs.h
#define MainSet 0x1 /* hello.msg:4 */
@@ -711,7 +710,6 @@ de
% ./hello
Hallo, Welt!
%
-@end cartouche
@end smallexample
The call of the @code{gencat} program creates the missing header file
diff --git a/libc/math/e_acoshl.c b/libc/math/e_acoshl.c
index 490fd10fd..cd426ed4f 100644
--- a/libc/math/e_acoshl.c
+++ b/libc/math/e_acoshl.c
@@ -12,4 +12,3 @@ __ieee754_acoshl (long double x)
strong_alias (__ieee754_acoshl, __acoshl_finite)
stub_warning (acoshl)
-#include <stub-tag.h>
diff --git a/libc/math/e_acosl.c b/libc/math/e_acosl.c
index 55d9ab0f6..e5b697119 100644
--- a/libc/math/e_acosl.c
+++ b/libc/math/e_acosl.c
@@ -12,4 +12,3 @@ __ieee754_acosl (long double x)
strong_alias (__ieee754_acosl, __acosl_finite)
stub_warning (acosl)
-#include <stub-tag.h>
diff --git a/libc/math/e_asinl.c b/libc/math/e_asinl.c
index 8e6c47e70..d6a6d14bd 100644
--- a/libc/math/e_asinl.c
+++ b/libc/math/e_asinl.c
@@ -12,4 +12,3 @@ __ieee754_asinl (long double x)
strong_alias (__ieee754_asinl, __asinl_finite)
stub_warning (asinl)
-#include <stub-tag.h>
diff --git a/libc/math/e_atan2l.c b/libc/math/e_atan2l.c
index 8ca37622f..2602c98f3 100644
--- a/libc/math/e_atan2l.c
+++ b/libc/math/e_atan2l.c
@@ -12,4 +12,3 @@ __ieee754_atan2l (long double x, long double y)
strong_alias (__ieee754_atan2l, __atan2l_finite)
stub_warning (atan2l)
-#include <stub-tag.h>
diff --git a/libc/math/e_atanhl.c b/libc/math/e_atanhl.c
index 26c52e793..a6cb50724 100644
--- a/libc/math/e_atanhl.c
+++ b/libc/math/e_atanhl.c
@@ -12,4 +12,3 @@ __ieee754_atanhl (long double x)
strong_alias (__ieee754_atanhl, __atanhl_finite)
stub_warning (__ieee754_atanhl)
-#include <stub-tag.h>
diff --git a/libc/math/e_coshl.c b/libc/math/e_coshl.c
index 92bfd7a18..8bf7b2064 100644
--- a/libc/math/e_coshl.c
+++ b/libc/math/e_coshl.c
@@ -12,4 +12,3 @@ __ieee754_coshl (long double x)
strong_alias (__ieee754_coshl, __coshl_finite)
stub_warning (__ieee754_coshl)
-#include <stub-tag.h>
diff --git a/libc/math/e_expl.c b/libc/math/e_expl.c
index 5ba6eb584..407d8188a 100644
--- a/libc/math/e_expl.c
+++ b/libc/math/e_expl.c
@@ -12,4 +12,3 @@ __ieee754_expl (long double x)
strong_alias (__ieee754_expl, __expl_finite)
stub_warning (expl)
-#include <stub-tag.h>
diff --git a/libc/math/e_fmodl.c b/libc/math/e_fmodl.c
index dbd361ebc..61587e9f4 100644
--- a/libc/math/e_fmodl.c
+++ b/libc/math/e_fmodl.c
@@ -12,4 +12,3 @@ __ieee754_fmodl (long double x, long double y)
strong_alias (__ieee754_fmodl, __fmodl_finite)
stub_warning (fmodl)
-#include <stub-tag.h>
diff --git a/libc/math/e_gammal_r.c b/libc/math/e_gammal_r.c
index c0ae70426..9dbce67ef 100644
--- a/libc/math/e_gammal_r.c
+++ b/libc/math/e_gammal_r.c
@@ -13,4 +13,3 @@ __ieee754_gammal_r (long double x, int *signgamp)
strong_alias (__ieee754_gammal_r, __gammal_r_finite)
stub_warning (__ieee754_gammal_r)
-#include <stub-tag.h>
diff --git a/libc/math/e_hypotl.c b/libc/math/e_hypotl.c
index 73bad6277..6f3eb5f47 100644
--- a/libc/math/e_hypotl.c
+++ b/libc/math/e_hypotl.c
@@ -12,4 +12,3 @@ __ieee754_hypotl (long double x, long double y)
strong_alias (__ieee754_hypotl, __hypotl_finite)
stub_warning (__ieee754_hypotl)
-#include <stub-tag.h>
diff --git a/libc/math/e_j0l.c b/libc/math/e_j0l.c
index eb01ba67c..1451efd2a 100644
--- a/libc/math/e_j0l.c
+++ b/libc/math/e_j0l.c
@@ -24,4 +24,3 @@ __ieee754_y0l (long double x)
strong_alias (__ieee754_y0l, __y0l_finite)
stub_warning (y0l)
-#include <stub-tag.h>
diff --git a/libc/math/e_j1l.c b/libc/math/e_j1l.c
index 7701f49ff..6bb301754 100644
--- a/libc/math/e_j1l.c
+++ b/libc/math/e_j1l.c
@@ -24,4 +24,3 @@ __ieee754_y1l (long double x)
strong_alias (__ieee754_y1l, __y1l_finite)
stub_warning (y1l)
-#include <stub-tag.h>
diff --git a/libc/math/e_jnl.c b/libc/math/e_jnl.c
index 059b1db6b..d9fddd059 100644
--- a/libc/math/e_jnl.c
+++ b/libc/math/e_jnl.c
@@ -24,4 +24,3 @@ __ieee754_ynl (int n, long double x)
strong_alias (__ieee754_ynl, __ynl_finite)
stub_warning (ynl)
-#include <stub-tag.h>
diff --git a/libc/math/e_lgammal_r.c b/libc/math/e_lgammal_r.c
index 92e7700e2..3babf7f66 100644
--- a/libc/math/e_lgammal_r.c
+++ b/libc/math/e_lgammal_r.c
@@ -15,4 +15,3 @@ strong_alias (__ieee754_lgammal_r, __lgammal_r_finite)
stub_warning (lgammal)
stub_warning (lgammal_r)
-#include <stub-tag.h>
diff --git a/libc/math/e_log10l.c b/libc/math/e_log10l.c
index 2c7ff72c2..c0b7dfdd4 100644
--- a/libc/math/e_log10l.c
+++ b/libc/math/e_log10l.c
@@ -12,4 +12,3 @@ __ieee754_log10l (long double x)
strong_alias (__ieee754_log10l, __log10l_finite)
stub_warning (log10l)
-#include <stub-tag.h>
diff --git a/libc/math/e_log2l.c b/libc/math/e_log2l.c
index 95929c360..af7d039c9 100644
--- a/libc/math/e_log2l.c
+++ b/libc/math/e_log2l.c
@@ -12,4 +12,3 @@ __ieee754_log2l (long double x)
strong_alias (__ieee754_log2l, __log2l_finite)
stub_warning (log2l)
-#include <stub-tag.h>
diff --git a/libc/math/e_logl.c b/libc/math/e_logl.c
index 95608ab55..7a4ea1b07 100644
--- a/libc/math/e_logl.c
+++ b/libc/math/e_logl.c
@@ -12,4 +12,3 @@ __ieee754_logl (long double x)
strong_alias (__ieee754_logl, __logl_finite)
stub_warning (logl)
-#include <stub-tag.h>
diff --git a/libc/math/e_powl.c b/libc/math/e_powl.c
index ab79b1a4b..1013e2aa9 100644
--- a/libc/math/e_powl.c
+++ b/libc/math/e_powl.c
@@ -12,4 +12,3 @@ __ieee754_powl (long double x, long double y)
strong_alias (__ieee754_powl, __powl_finite)
stub_warning (powl)
-#include <stub-tag.h>
diff --git a/libc/math/e_rem_pio2l.c b/libc/math/e_rem_pio2l.c
index 7fa515df2..03ac2efbc 100644
--- a/libc/math/e_rem_pio2l.c
+++ b/libc/math/e_rem_pio2l.c
@@ -12,4 +12,3 @@ __ieee754_rem_pio2l (long double x, long double *y)
}
stub_warning (__ieee754_rem_pio2l)
-#include <stub-tag.h>
diff --git a/libc/math/e_sinhl.c b/libc/math/e_sinhl.c
index fc756c9eb..4bc4ac908 100644
--- a/libc/math/e_sinhl.c
+++ b/libc/math/e_sinhl.c
@@ -12,4 +12,3 @@ __ieee754_sinhl (long double x)
strong_alias (__ieee754_sinhl, __sinhl_finite)
stub_warning (__ieee754_sinhl)
-#include <stub-tag.h>
diff --git a/libc/math/e_sqrtl.c b/libc/math/e_sqrtl.c
index af9c2b51b..acbe74f05 100644
--- a/libc/math/e_sqrtl.c
+++ b/libc/math/e_sqrtl.c
@@ -12,4 +12,3 @@ __ieee754_sqrtl (long double x)
strong_alias (__ieee754_sqrtl, __sqrtl_finite)
stub_warning (sqrtl)
-#include <stub-tag.h>
diff --git a/libc/math/fclrexcpt.c b/libc/math/fclrexcpt.c
index dcdcfbbe9..b38070d8f 100644
--- a/libc/math/fclrexcpt.c
+++ b/libc/math/fclrexcpt.c
@@ -30,7 +30,7 @@ __feclearexcept (int excepts)
strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
stub_warning (feclearexcept)
-#include <stub-tag.h>
diff --git a/libc/math/fedisblxcpt.c b/libc/math/fedisblxcpt.c
index f05c31910..610f62df9 100644
--- a/libc/math/fedisblxcpt.c
+++ b/libc/math/fedisblxcpt.c
@@ -26,4 +26,3 @@ fedisableexcept (int excepts)
return -1;
}
stub_warning (fedisableexcept)
-#include <stub-tag.h>
diff --git a/libc/math/feenablxcpt.c b/libc/math/feenablxcpt.c
index 9db93c544..f05e1aa64 100644
--- a/libc/math/feenablxcpt.c
+++ b/libc/math/feenablxcpt.c
@@ -26,4 +26,3 @@ feenableexcept (int excepts)
return -1;
}
stub_warning (feenableexcept)
-#include <stub-tag.h>
diff --git a/libc/math/fegetenv.c b/libc/math/fegetenv.c
index 3166d7279..f8fbdffdb 100644
--- a/libc/math/fegetenv.c
+++ b/libc/math/fegetenv.c
@@ -35,4 +35,3 @@ libm_hidden_ver (__fegetenv, fegetenv)
versioned_symbol (libm, BP_SYM (__fegetenv), BP_SYM (fegetenv), GLIBC_2_2);
stub_warning (fegetenv)
-#include <stub-tag.h>
diff --git a/libc/math/fegetexcept.c b/libc/math/fegetexcept.c
index 0ea518450..e55f22d0b 100644
--- a/libc/math/fegetexcept.c
+++ b/libc/math/fegetexcept.c
@@ -26,4 +26,3 @@ fegetexcept (void)
return -1;
}
stub_warning (fegetexcept)
-#include <stub-tag.h>
diff --git a/libc/math/fegetround.c b/libc/math/fegetround.c
index 366ef23c3..9c5c40804 100644
--- a/libc/math/fegetround.c
+++ b/libc/math/fegetround.c
@@ -25,4 +25,3 @@ fegetround (void)
return 0;
}
stub_warning (fegetround)
-#include <stub-tag.h>
diff --git a/libc/math/feholdexcpt.c b/libc/math/feholdexcpt.c
index 9abfc6c9e..a3909bd27 100644
--- a/libc/math/feholdexcpt.c
+++ b/libc/math/feholdexcpt.c
@@ -26,4 +26,3 @@ feholdexcept (fenv_t *envp)
}
libm_hidden_def (feholdexcept)
stub_warning (feholdexcept)
-#include <stub-tag.h>
diff --git a/libc/math/fesetenv.c b/libc/math/fesetenv.c
index d285c927c..c12d19f34 100644
--- a/libc/math/fesetenv.c
+++ b/libc/math/fesetenv.c
@@ -34,4 +34,3 @@ libm_hidden_ver (__fesetenv, fesetenv)
versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2);
stub_warning (fesetenv)
-#include <stub-tag.h>
diff --git a/libc/math/fesetround.c b/libc/math/fesetround.c
index b70b53164..9742033b8 100644
--- a/libc/math/fesetround.c
+++ b/libc/math/fesetround.c
@@ -26,4 +26,3 @@ fesetround (int round)
}
libm_hidden_def (fesetround)
stub_warning (fesetround)
-#include <stub-tag.h>
diff --git a/libc/math/feupdateenv.c b/libc/math/feupdateenv.c
index 49674bc2a..c31f8ad42 100644
--- a/libc/math/feupdateenv.c
+++ b/libc/math/feupdateenv.c
@@ -34,4 +34,3 @@ libm_hidden_ver (__feupdateenv, feupdateenv)
versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
stub_warning (feupdateenv)
-#include <stub-tag.h>
diff --git a/libc/math/fgetexcptflg.c b/libc/math/fgetexcptflg.c
index f07933680..1b8a589cc 100644
--- a/libc/math/fgetexcptflg.c
+++ b/libc/math/fgetexcptflg.c
@@ -33,4 +33,3 @@ compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1);
versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2);
stub_warning (fegetexceptflag)
-#include <stub-tag.h>
diff --git a/libc/math/fraiseexcpt.c b/libc/math/fraiseexcpt.c
index 83a488b45..9b3fbfd19 100644
--- a/libc/math/fraiseexcpt.c
+++ b/libc/math/fraiseexcpt.c
@@ -34,4 +34,3 @@ libm_hidden_ver (__feraiseexcept, feraiseexcept)
versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2);
stub_warning (feraiseexcept)
-#include <stub-tag.h>
diff --git a/libc/math/fsetexcptflg.c b/libc/math/fsetexcptflg.c
index 7d27d7f22..a90f54e13 100644
--- a/libc/math/fsetexcptflg.c
+++ b/libc/math/fsetexcptflg.c
@@ -33,4 +33,3 @@ compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1);
versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2);
stub_warning (fesetexceptflag)
-#include <stub-tag.h>
diff --git a/libc/math/ftestexcept.c b/libc/math/ftestexcept.c
index c396002e8..bea48e37e 100644
--- a/libc/math/ftestexcept.c
+++ b/libc/math/ftestexcept.c
@@ -26,4 +26,3 @@ fetestexcept (int excepts)
}
libm_hidden_def (fetestexcept)
stub_warning (fetestexcept)
-#include <stub-tag.h>
diff --git a/libc/math/k_cosl.c b/libc/math/k_cosl.c
index bf3708b15..6dc72b408 100644
--- a/libc/math/k_cosl.c
+++ b/libc/math/k_cosl.c
@@ -12,4 +12,3 @@ __kernel_cosl (long double x, long double y)
}
stub_warning (__kernel_cosl)
-#include <stub-tag.h>
diff --git a/libc/math/k_rem_pio2l.c b/libc/math/k_rem_pio2l.c
index 236eb30dd..01bf15824 100644
--- a/libc/math/k_rem_pio2l.c
+++ b/libc/math/k_rem_pio2l.c
@@ -13,4 +13,3 @@ __kernel_rem_pio2l (long double *x, long double *y, int e0, int nx, int prec,
}
stub_warning (__kernel_rem_pio2l)
-#include <stub-tag.h>
diff --git a/libc/math/k_sinl.c b/libc/math/k_sinl.c
index e95c71c4c..004794275 100644
--- a/libc/math/k_sinl.c
+++ b/libc/math/k_sinl.c
@@ -12,4 +12,3 @@ __kernel_sinl (long double x, long double y, int iy)
}
stub_warning (__kernel_sinl)
-#include <stub-tag.h>
diff --git a/libc/math/k_tanl.c b/libc/math/k_tanl.c
index 891d3ab40..8831f6288 100644
--- a/libc/math/k_tanl.c
+++ b/libc/math/k_tanl.c
@@ -12,4 +12,3 @@ __kernel_tanl (long double x, long double y, int iy)
}
stub_warning (__kernel_tanl)
-#include <stub-tag.h>
diff --git a/libc/math/libm-test.inc b/libc/math/libm-test.inc
index 48b8af3e5..99267ad86 100644
--- a/libc/math/libm-test.inc
+++ b/libc/math/libm-test.inc
@@ -132,6 +132,7 @@
#include <stdio.h>
#include <string.h>
#include <argp.h>
+#include <tininess.h>
#include <gnu/option-groups.h>
/* Allow platforms without all rounding modes to test properly,
@@ -188,6 +189,11 @@
#else
# define UNDERFLOW_EXCEPTION_LDOUBLE_IBM 0
#endif
+/* Values underflowing on architectures detecting tininess before
+ rounding, but not on those detecting tininess after rounding. */
+#define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING (TININESS_AFTER_ROUNDING \
+ ? 0 \
+ : UNDERFLOW_EXCEPTION)
/* Various constants (we must supply them precalculated for accuracy). */
#define M_PI_6l .52359877559829887307710723054658383L
@@ -1299,6 +1305,9 @@ atan2_test (void)
TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
+ TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
+#endif
END (atan2);
}
@@ -4621,6 +4630,15 @@ fma_test (void)
TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
+
#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
@@ -4629,6 +4647,42 @@ fma_test (void)
TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
+ TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
#endif
#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
@@ -4648,10 +4702,45 @@ fma_test (void)
TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
- /* Sometimes the FE_UNDERFLOW is not set, so be prepared. See Bug 14152. */
- TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION_OK);
+ TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
+ TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
#endif
#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
@@ -4659,8 +4748,43 @@ fma_test (void)
TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
- /* Bug 14152: underflow exception may be missing. */
- TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION_OK);
+ TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
#endif
#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
@@ -4676,6 +4800,42 @@ fma_test (void)
TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
#endif
END (fma);
@@ -4730,6 +4890,168 @@ fma_test_towardzero (void)
TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
+
+ TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
+
+#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
+ TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
+#endif
+#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
+ TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
+#endif
+#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
+#endif
+#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
+#endif
}
fesetround (save_round_mode);
@@ -4786,6 +5108,168 @@ fma_test_downward (void)
TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
+
+ TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
+
+#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
+ TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
+#endif
+#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
+ TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
+#endif
+#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
+#endif
+#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
+#endif
}
fesetround (save_round_mode);
@@ -4842,6 +5326,168 @@ fma_test_upward (void)
TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
+
+ TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
+
+#if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
+ TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
+ TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
+ TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
+ TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
+#endif
+#if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
+ TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
+ TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
+ TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
+#endif
+#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
+ TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
+#endif
+#if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
+ TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
+ TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
+ TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
+#endif
}
fesetround (save_round_mode);
diff --git a/libc/math/math.h b/libc/math/math.h
index f48880c45..0547a2c2e 100644
--- a/libc/math/math.h
+++ b/libc/math/math.h
@@ -192,16 +192,21 @@ extern int signgam;
/* All floating-point numbers can be put in one of these categories. */
enum
{
- FP_NAN,
-# define FP_NAN FP_NAN
- FP_INFINITE,
-# define FP_INFINITE FP_INFINITE
- FP_ZERO,
-# define FP_ZERO FP_ZERO
- FP_SUBNORMAL,
-# define FP_SUBNORMAL FP_SUBNORMAL
- FP_NORMAL
-# define FP_NORMAL FP_NORMAL
+ FP_NAN =
+# define FP_NAN 0
+ FP_NAN,
+ FP_INFINITE =
+# define FP_INFINITE 1
+ FP_INFINITE,
+ FP_ZERO =
+# define FP_ZERO 2
+ FP_ZERO,
+ FP_SUBNORMAL =
+# define FP_SUBNORMAL 3
+ FP_SUBNORMAL,
+ FP_NORMAL =
+# define FP_NORMAL 4
+ FP_NORMAL
};
/* Return number of classification appropriate for X. */
diff --git a/libc/math/s_asinhl.c b/libc/math/s_asinhl.c
index 1d5cf47a4..8232fcd38 100644
--- a/libc/math/s_asinhl.c
+++ b/libc/math/s_asinhl.c
@@ -12,4 +12,3 @@ __asinhl(long double x)
weak_alias (__asinhl, asinhl)
stub_warning (asinhl)
-#include <stub-tag.h>
diff --git a/libc/math/s_atanl.c b/libc/math/s_atanl.c
index d9a7eb6f8..2957d702d 100644
--- a/libc/math/s_atanl.c
+++ b/libc/math/s_atanl.c
@@ -12,4 +12,3 @@ __atanl (long double x)
weak_alias (__atanl, atanl)
stub_warning (atanl)
-#include <stub-tag.h>
diff --git a/libc/math/s_cbrtl.c b/libc/math/s_cbrtl.c
index d668e377a..803010b34 100644
--- a/libc/math/s_cbrtl.c
+++ b/libc/math/s_cbrtl.c
@@ -12,4 +12,3 @@ __cbrtl(long double x)
weak_alias (__cbrtl, cbrtl)
stub_warning (cbrtl)
-#include <stub-tag.h>
diff --git a/libc/math/s_erfl.c b/libc/math/s_erfl.c
index f329d5880..7ae25d625 100644
--- a/libc/math/s_erfl.c
+++ b/libc/math/s_erfl.c
@@ -23,4 +23,3 @@ __erfcl (long double x)
weak_alias (__erfcl, erfcl)
stub_warning (erfcl)
-#include <stub-tag.h>
diff --git a/libc/math/s_expm1l.c b/libc/math/s_expm1l.c
index b69d6aeb9..070d06825 100644
--- a/libc/math/s_expm1l.c
+++ b/libc/math/s_expm1l.c
@@ -13,4 +13,3 @@ libm_hidden_def (__expm1l)
weak_alias (__expm1l, expm1l)
stub_warning (expm1l)
-#include <stub-tag.h>
diff --git a/libc/math/s_log1pl.c b/libc/math/s_log1pl.c
index e5db9078b..9e51ce2d4 100644
--- a/libc/math/s_log1pl.c
+++ b/libc/math/s_log1pl.c
@@ -12,4 +12,3 @@ __log1pl (long double x)
weak_alias (__log1pl, log1pl)
stub_warning (log1pl)
-#include <stub-tag.h>
diff --git a/libc/math/s_tanhl.c b/libc/math/s_tanhl.c
index bc9a2d7f4..ece9a4c5b 100644
--- a/libc/math/s_tanhl.c
+++ b/libc/math/s_tanhl.c
@@ -12,4 +12,3 @@ __tanhl(long double x)
weak_alias (__tanhl, tanhl)
stub_warning (tanhl)
-#include <stub-tag.h>
diff --git a/libc/misc/acct.c b/libc/misc/acct.c
index 0ae8d7fe1..8e4713bf1 100644
--- a/libc/misc/acct.c
+++ b/libc/misc/acct.c
@@ -30,4 +30,3 @@ acct (name)
}
stub_warning (acct)
-#include <stub-tag.h>
diff --git a/libc/misc/brk.c b/libc/misc/brk.c
index 097645679..bcbac6439 100644
--- a/libc/misc/brk.c
+++ b/libc/misc/brk.c
@@ -33,4 +33,3 @@ __brk (addr)
stub_warning (brk)
weak_alias (__brk, brk)
-#include <stub-tag.h>
diff --git a/libc/misc/chflags.c b/libc/misc/chflags.c
index ea6e742cf..d1a44b24c 100644
--- a/libc/misc/chflags.c
+++ b/libc/misc/chflags.c
@@ -39,4 +39,3 @@ chflags (file, flags)
}
stub_warning (chflags)
-#include <stub-tag.h>
diff --git a/libc/misc/chroot.c b/libc/misc/chroot.c
index db301ad6a..1c1bbd8be 100644
--- a/libc/misc/chroot.c
+++ b/libc/misc/chroot.c
@@ -30,4 +30,3 @@ chroot (path)
stub_warning (chroot)
-#include <stub-tag.h>
diff --git a/libc/misc/fchflags.c b/libc/misc/fchflags.c
index ebb50dbfc..827713419 100644
--- a/libc/misc/fchflags.c
+++ b/libc/misc/fchflags.c
@@ -39,4 +39,3 @@ fchflags (fd, flags)
}
stub_warning (fchflags)
-#include <stub-tag.h>
diff --git a/libc/misc/fgetxattr.c b/libc/misc/fgetxattr.c
index 049fd28d4..86df9a450 100644
--- a/libc/misc/fgetxattr.c
+++ b/libc/misc/fgetxattr.c
@@ -27,4 +27,3 @@ fgetxattr (int __fd, const char *__name,
}
stub_warning (fgetxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/flistxattr.c b/libc/misc/flistxattr.c
index dbbe20a3b..8f5667f86 100644
--- a/libc/misc/flistxattr.c
+++ b/libc/misc/flistxattr.c
@@ -26,4 +26,3 @@ flistxattr (int __fd, char *__list, size_t __size)
}
stub_warning (flistxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/fremovexattr.c b/libc/misc/fremovexattr.c
index 8f38e0a39..f21da5ae9 100644
--- a/libc/misc/fremovexattr.c
+++ b/libc/misc/fremovexattr.c
@@ -26,4 +26,3 @@ fremovexattr (int __fd, const char *__name)
}
stub_warning (fremovexattr)
-#include <stub-tag.h>
diff --git a/libc/misc/fsetxattr.c b/libc/misc/fsetxattr.c
index 706e4bb54..2d62a177c 100644
--- a/libc/misc/fsetxattr.c
+++ b/libc/misc/fsetxattr.c
@@ -27,4 +27,3 @@ fsetxattr (int __fd, const char *__name, const void *__value,
}
stub_warning (fsetxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/fsync.c b/libc/misc/fsync.c
index d94a0592d..a927f72d3 100644
--- a/libc/misc/fsync.c
+++ b/libc/misc/fsync.c
@@ -29,4 +29,3 @@ fsync (fd)
stub_warning (fsync)
-#include <stub-tag.h>
diff --git a/libc/misc/ftruncate.c b/libc/misc/ftruncate.c
index f2b2e27ee..79bf28794 100644
--- a/libc/misc/ftruncate.c
+++ b/libc/misc/ftruncate.c
@@ -32,4 +32,3 @@ __ftruncate (fd, length)
weak_alias (__ftruncate, ftruncate)
stub_warning (ftruncate)
-#include <stub-tag.h>
diff --git a/libc/misc/futimes.c b/libc/misc/futimes.c
index b644fd190..1204a9c28 100644
--- a/libc/misc/futimes.c
+++ b/libc/misc/futimes.c
@@ -30,4 +30,3 @@ __futimes (int fd, const struct timeval tvp[2])
weak_alias (__futimes, futimes)
stub_warning (futimes)
-#include <stub-tag.h>
diff --git a/libc/misc/futimesat.c b/libc/misc/futimesat.c
index 5d895bc0b..b33939e0a 100644
--- a/libc/misc/futimesat.c
+++ b/libc/misc/futimesat.c
@@ -42,4 +42,3 @@ futimesat (fd, file, tvp)
}
stub_warning (futimesat)
-#include <stub-tag.h>
diff --git a/libc/misc/getdomain.c b/libc/misc/getdomain.c
index c8d1527a7..7fb8da241 100644
--- a/libc/misc/getdomain.c
+++ b/libc/misc/getdomain.c
@@ -56,7 +56,6 @@ getdomainname (name, len)
}
stub_warning (getdomainname)
-#include <stub-tag.h>
#endif
diff --git a/libc/misc/getdtsz.c b/libc/misc/getdtsz.c
index 020ec9d02..7c6f7e633 100644
--- a/libc/misc/getdtsz.c
+++ b/libc/misc/getdtsz.c
@@ -29,4 +29,3 @@ __getdtablesize ()
stub_warning (getdtablesize)
weak_alias (__getdtablesize, getdtablesize)
-#include <stub-tag.h>
diff --git a/libc/misc/gethostid.c b/libc/misc/gethostid.c
index 8854cf441..876c83c69 100644
--- a/libc/misc/gethostid.c
+++ b/libc/misc/gethostid.c
@@ -28,4 +28,3 @@ gethostid ()
stub_warning (gethostid)
-#include <stub-tag.h>
diff --git a/libc/misc/gethostname.c b/libc/misc/gethostname.c
index 6e70da981..40d3027ec 100644
--- a/libc/misc/gethostname.c
+++ b/libc/misc/gethostname.c
@@ -32,4 +32,3 @@ __gethostname (name, len)
stub_warning (gethostname)
weak_alias (__gethostname, gethostname)
-#include <stub-tag.h>
diff --git a/libc/misc/getloadavg.c b/libc/misc/getloadavg.c
index 768fe3298..6e39939a7 100644
--- a/libc/misc/getloadavg.c
+++ b/libc/misc/getloadavg.c
@@ -33,4 +33,3 @@ getloadavg (double loadavg[], int nelem)
return -1;
}
stub_warning (getloadavg)
-#include <stub-tag.h>
diff --git a/libc/misc/getpagesize.c b/libc/misc/getpagesize.c
index 0ec823d96..6d3821aef 100644
--- a/libc/misc/getpagesize.c
+++ b/libc/misc/getpagesize.c
@@ -29,4 +29,3 @@ libc_hidden_def (__getpagesize)
stub_warning (getpagesize)
weak_alias (__getpagesize, getpagesize)
-#include <stub-tag.h>
diff --git a/libc/misc/getsysstats.c b/libc/misc/getsysstats.c
index d03e75b38..c5ce2fdb9 100644
--- a/libc/misc/getsysstats.c
+++ b/libc/misc/getsysstats.c
@@ -65,4 +65,3 @@ __get_avphys_pages ()
weak_alias (__get_avphys_pages, get_avphys_pages)
stub_warning (get_avphys_pages)
-#include <stub-tag.h>
diff --git a/libc/misc/getxattr.c b/libc/misc/getxattr.c
index bde3619c1..1e5b2bb44 100644
--- a/libc/misc/getxattr.c
+++ b/libc/misc/getxattr.c
@@ -27,4 +27,3 @@ getxattr (const char *__path, const char *__name,
}
stub_warning (getxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/gtty.c b/libc/misc/gtty.c
index e1a2668d0..2c6ae3f97 100644
--- a/libc/misc/gtty.c
+++ b/libc/misc/gtty.c
@@ -36,4 +36,3 @@ gtty (fd, params)
}
stub_warning (gtty)
-#include <stub-tag.h>
diff --git a/libc/misc/ioctl.c b/libc/misc/ioctl.c
index 616ee2d90..f47d90ec4 100644
--- a/libc/misc/ioctl.c
+++ b/libc/misc/ioctl.c
@@ -31,4 +31,3 @@ __ioctl (fd, request)
stub_warning (ioctl)
weak_alias (__ioctl, ioctl)
-#include <stub-tag.h>
diff --git a/libc/misc/lgetxattr.c b/libc/misc/lgetxattr.c
index fcdf53c6c..44e23d99f 100644
--- a/libc/misc/lgetxattr.c
+++ b/libc/misc/lgetxattr.c
@@ -27,4 +27,3 @@ lgetxattr (const char *__path, const char *__name,
}
stub_warning (lgetxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/listxattr.c b/libc/misc/listxattr.c
index a58f21742..5de7d301f 100644
--- a/libc/misc/listxattr.c
+++ b/libc/misc/listxattr.c
@@ -26,4 +26,3 @@ listxattr (const char *__path, char *__list, size_t __size)
}
stub_warning (listxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/llistxattr.c b/libc/misc/llistxattr.c
index f133579ea..da3bfee3a 100644
--- a/libc/misc/llistxattr.c
+++ b/libc/misc/llistxattr.c
@@ -26,4 +26,3 @@ llistxattr (const char *__path, char *__list, size_t __size)
}
stub_warning (llistxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/lremovexattr.c b/libc/misc/lremovexattr.c
index 541e22d27..a04853f72 100644
--- a/libc/misc/lremovexattr.c
+++ b/libc/misc/lremovexattr.c
@@ -26,4 +26,3 @@ lremovexattr (const char *__path, const char *__name)
}
stub_warning (lremovexattr)
-#include <stub-tag.h>
diff --git a/libc/misc/lsetxattr.c b/libc/misc/lsetxattr.c
index bc43e1758..f433fe4e5 100644
--- a/libc/misc/lsetxattr.c
+++ b/libc/misc/lsetxattr.c
@@ -27,4 +27,3 @@ lsetxattr (const char *__path, const char *__name,
}
stub_warning (lsetxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/lutimes.c b/libc/misc/lutimes.c
index ed7e842e8..57faae479 100644
--- a/libc/misc/lutimes.c
+++ b/libc/misc/lutimes.c
@@ -31,4 +31,3 @@ __lutimes (const char *file, const struct timeval tvp[2])
weak_alias (__lutimes, lutimes)
stub_warning (lutimes)
-#include <stub-tag.h>
diff --git a/libc/misc/madvise.c b/libc/misc/madvise.c
index 4e9681a52..188a20e53 100644
--- a/libc/misc/madvise.c
+++ b/libc/misc/madvise.c
@@ -33,4 +33,3 @@ libc_hidden_def (__madvise)
weak_alias (__madvise, madvise)
stub_warning (madvise)
-#include <stub-tag.h>
diff --git a/libc/misc/mincore.c b/libc/misc/mincore.c
index e85ebceef..8e8045c71 100644
--- a/libc/misc/mincore.c
+++ b/libc/misc/mincore.c
@@ -26,4 +26,3 @@ mincore (void *__start, size_t __len, unsigned char *__vec)
}
stub_warning (mincore)
-#include <stub-tag.h>
diff --git a/libc/misc/mlock.c b/libc/misc/mlock.c
index 588495c6a..0d81d0457 100644
--- a/libc/misc/mlock.c
+++ b/libc/misc/mlock.c
@@ -31,4 +31,3 @@ mlock (const void *addr, size_t len)
}
stub_warning (mlock)
-#include <stub-tag.h>
diff --git a/libc/misc/mlockall.c b/libc/misc/mlockall.c
index a7403889f..e51b953e6 100644
--- a/libc/misc/mlockall.c
+++ b/libc/misc/mlockall.c
@@ -32,4 +32,3 @@ mlockall (int flags)
}
stub_warning (mlockall)
-#include <stub-tag.h>
diff --git a/libc/misc/mmap.c b/libc/misc/mmap.c
index b77856dec..dbe625580 100644
--- a/libc/misc/mmap.c
+++ b/libc/misc/mmap.c
@@ -36,5 +36,4 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
}
stub_warning (mmap)
-#include <stub-tag.h>
weak_alias (__mmap, mmap)
diff --git a/libc/misc/mprotect.c b/libc/misc/mprotect.c
index e6cb62353..bef7efc44 100644
--- a/libc/misc/mprotect.c
+++ b/libc/misc/mprotect.c
@@ -32,4 +32,3 @@ __mprotect (__ptr_t addr, size_t len, int prot)
weak_alias (__mprotect, mprotect)
stub_warning (mprotect)
-#include <stub-tag.h>
diff --git a/libc/misc/msync.c b/libc/misc/msync.c
index c1639940e..aa3d0ce0b 100644
--- a/libc/misc/msync.c
+++ b/libc/misc/msync.c
@@ -31,4 +31,3 @@ msync (__ptr_t addr, size_t len, int flags)
}
stub_warning (msync)
-#include <stub-tag.h>
diff --git a/libc/misc/munlock.c b/libc/misc/munlock.c
index 0a02e5b23..37fd5189d 100644
--- a/libc/misc/munlock.c
+++ b/libc/misc/munlock.c
@@ -30,4 +30,3 @@ munlock (const void *addr, size_t len)
}
stub_warning (munlock)
-#include <stub-tag.h>
diff --git a/libc/misc/munlockall.c b/libc/misc/munlockall.c
index 8094ab6e5..bceb94464 100644
--- a/libc/misc/munlockall.c
+++ b/libc/misc/munlockall.c
@@ -30,4 +30,3 @@ munlockall (void)
}
stub_warning (munlockall)
-#include <stub-tag.h>
diff --git a/libc/misc/munmap.c b/libc/misc/munmap.c
index 8c3c37c70..97c6ef94f 100644
--- a/libc/misc/munmap.c
+++ b/libc/misc/munmap.c
@@ -30,5 +30,4 @@ __munmap (__ptr_t addr, size_t len)
}
stub_warning (munmap)
-#include <stub-tag.h>
weak_alias (__munmap, munmap)
diff --git a/libc/misc/preadv.c b/libc/misc/preadv.c
index 0e5138cec..9ef32a649 100644
--- a/libc/misc/preadv.c
+++ b/libc/misc/preadv.c
@@ -37,4 +37,3 @@ preadv (fd, vector, count, offset)
}
stub_warning (preadv)
-#include <stub-tag.h>
diff --git a/libc/misc/preadv64.c b/libc/misc/preadv64.c
index c7c9dd14c..dd4949038 100644
--- a/libc/misc/preadv64.c
+++ b/libc/misc/preadv64.c
@@ -37,4 +37,3 @@ preadv64 (fd, vector, count, offset)
}
stub_warning (preadv64)
-#include <stub-tag.h>
diff --git a/libc/misc/ptrace.c b/libc/misc/ptrace.c
index a70f1952b..4f600d89f 100644
--- a/libc/misc/ptrace.c
+++ b/libc/misc/ptrace.c
@@ -99,4 +99,3 @@ ptrace (request)
stub_warning (ptrace)
-#include <stub-tag.h>
diff --git a/libc/misc/pwritev.c b/libc/misc/pwritev.c
index 2e10ca815..fba8a5760 100644
--- a/libc/misc/pwritev.c
+++ b/libc/misc/pwritev.c
@@ -37,4 +37,3 @@ pwritev (fd, vector, count, offset)
}
stub_warning (pwritev)
-#include <stub-tag.h>
diff --git a/libc/misc/pwritev64.c b/libc/misc/pwritev64.c
index 650abd6d8..c5995111e 100644
--- a/libc/misc/pwritev64.c
+++ b/libc/misc/pwritev64.c
@@ -37,4 +37,3 @@ pwritev64 (fd, vector, count, offset)
}
stub_warning (pwritev64)
-#include <stub-tag.h>
diff --git a/libc/misc/readv.c b/libc/misc/readv.c
index 74fb3a9c7..6b165d782 100644
--- a/libc/misc/readv.c
+++ b/libc/misc/readv.c
@@ -37,4 +37,3 @@ strong_alias (__libc_readv, __readv)
weak_alias (__libc_readv, readv)
stub_warning (readv)
-#include <stub-tag.h>
diff --git a/libc/misc/reboot.c b/libc/misc/reboot.c
index c8a4c04c1..455a6bd26 100644
--- a/libc/misc/reboot.c
+++ b/libc/misc/reboot.c
@@ -30,4 +30,3 @@ reboot (howto)
stub_warning (reboot)
-#include <stub-tag.h>
diff --git a/libc/misc/remap_file_pages.c b/libc/misc/remap_file_pages.c
index 2ad057d5e..08a2d4c02 100644
--- a/libc/misc/remap_file_pages.c
+++ b/libc/misc/remap_file_pages.c
@@ -30,5 +30,4 @@ __remap_file_pages (void *start, size_t size, int prot, size_t pgoff,
}
stub_warning (remap_file_pages)
-#include <stub-tag.h>
weak_alias (__remap_file_pages, remap_file_pages)
diff --git a/libc/misc/removexattr.c b/libc/misc/removexattr.c
index 56a9014e4..aede787fd 100644
--- a/libc/misc/removexattr.c
+++ b/libc/misc/removexattr.c
@@ -26,4 +26,3 @@ removexattr (const char *__path, const char *__name)
}
stub_warning (removexattr)
-#include <stub-tag.h>
diff --git a/libc/misc/revoke.c b/libc/misc/revoke.c
index ed1659e75..2e42a423d 100644
--- a/libc/misc/revoke.c
+++ b/libc/misc/revoke.c
@@ -27,4 +27,3 @@ revoke (file)
return -1;
}
stub_warning (revoke)
-#include <stub-tag.h>
diff --git a/libc/misc/select.c b/libc/misc/select.c
index ce08f0c4b..8f5cb0d2a 100644
--- a/libc/misc/select.c
+++ b/libc/misc/select.c
@@ -39,4 +39,3 @@ libc_hidden_def (__select)
stub_warning (select)
weak_alias (__select, select)
-#include <stub-tag.h>
diff --git a/libc/misc/setdomain.c b/libc/misc/setdomain.c
index b19e20be2..7e6665b4f 100644
--- a/libc/misc/setdomain.c
+++ b/libc/misc/setdomain.c
@@ -30,4 +30,3 @@ setdomainname (name, len)
}
stub_warning (setdomainname)
-#include <stub-tag.h>
diff --git a/libc/misc/setegid.c b/libc/misc/setegid.c
index 22a0bc8a7..219c1b9b0 100644
--- a/libc/misc/setegid.c
+++ b/libc/misc/setegid.c
@@ -28,4 +28,3 @@ setegid (gid)
}
libc_hidden_def (setegid)
stub_warning (setegid)
-#include <stub-tag.h>
diff --git a/libc/misc/seteuid.c b/libc/misc/seteuid.c
index b338f7153..648b77a42 100644
--- a/libc/misc/seteuid.c
+++ b/libc/misc/seteuid.c
@@ -28,4 +28,3 @@ seteuid (uid)
}
libc_hidden_def (seteuid)
stub_warning (seteuid)
-#include <stub-tag.h>
diff --git a/libc/misc/sethostid.c b/libc/misc/sethostid.c
index fd4483e15..73dfb33e0 100644
--- a/libc/misc/sethostid.c
+++ b/libc/misc/sethostid.c
@@ -30,4 +30,3 @@ sethostid (id)
stub_warning (sethostid)
-#include <stub-tag.h>
diff --git a/libc/misc/sethostname.c b/libc/misc/sethostname.c
index ff31900fb..964135862 100644
--- a/libc/misc/sethostname.c
+++ b/libc/misc/sethostname.c
@@ -31,4 +31,3 @@ sethostname (name, len)
stub_warning (sethostname)
-#include <stub-tag.h>
diff --git a/libc/misc/setregid.c b/libc/misc/setregid.c
index d73260da8..ad7ca4b0f 100644
--- a/libc/misc/setregid.c
+++ b/libc/misc/setregid.c
@@ -32,4 +32,3 @@ __setregid (effective_gid, real_gid)
stub_warning (setregid)
weak_alias (__setregid, setregid)
-#include <stub-tag.h>
diff --git a/libc/misc/setreuid.c b/libc/misc/setreuid.c
index 3a97788c1..87fcfc6f3 100644
--- a/libc/misc/setreuid.c
+++ b/libc/misc/setreuid.c
@@ -32,4 +32,3 @@ __setreuid (effective_uid, real_uid)
stub_warning (setreuid)
weak_alias (__setreuid, setreuid)
-#include <stub-tag.h>
diff --git a/libc/misc/setxattr.c b/libc/misc/setxattr.c
index d0f803591..6409751c4 100644
--- a/libc/misc/setxattr.c
+++ b/libc/misc/setxattr.c
@@ -27,4 +27,3 @@ setxattr (const char *__path, const char *__name,
}
stub_warning (setxattr)
-#include <stub-tag.h>
diff --git a/libc/misc/sstk.c b/libc/misc/sstk.c
index 34019366f..3a4580b8f 100644
--- a/libc/misc/sstk.c
+++ b/libc/misc/sstk.c
@@ -31,4 +31,3 @@ sstk (increment)
}
stub_warning (sstk)
-#include <stub-tag.h>
diff --git a/libc/misc/stty.c b/libc/misc/stty.c
index 66c475c55..5ce9e2376 100644
--- a/libc/misc/stty.c
+++ b/libc/misc/stty.c
@@ -36,4 +36,3 @@ stty (fd, params)
}
stub_warning (stty)
-#include <stub-tag.h>
diff --git a/libc/misc/swapoff.c b/libc/misc/swapoff.c
index f4e59f85c..d887c43ca 100644
--- a/libc/misc/swapoff.c
+++ b/libc/misc/swapoff.c
@@ -27,4 +27,3 @@ swapoff (const char *path)
}
stub_warning (swapoff)
-#include <stub-tag.h>
diff --git a/libc/misc/swapon.c b/libc/misc/swapon.c
index 095f79d9f..f4bdf13ca 100644
--- a/libc/misc/swapon.c
+++ b/libc/misc/swapon.c
@@ -30,4 +30,3 @@ swapon (path)
}
stub_warning (swapon)
-#include <stub-tag.h>
diff --git a/libc/misc/sync.c b/libc/misc/sync.c
index 45e7187c7..01a1696ce 100644
--- a/libc/misc/sync.c
+++ b/libc/misc/sync.c
@@ -27,4 +27,3 @@ sync ()
stub_warning (sync)
-#include <stub-tag.h>
diff --git a/libc/misc/syncfs.c b/libc/misc/syncfs.c
index 4dc534011..b94911104 100644
--- a/libc/misc/syncfs.c
+++ b/libc/misc/syncfs.c
@@ -29,4 +29,3 @@ syncfs (int fd)
stub_warning (syncfs)
-#include <stub-tag.h>
diff --git a/libc/misc/syscall.c b/libc/misc/syscall.c
index ad44d2bc0..f6dae5750 100644
--- a/libc/misc/syscall.c
+++ b/libc/misc/syscall.c
@@ -31,4 +31,3 @@ syscall (callno)
}
stub_warning (syscall)
-#include <stub-tag.h>
diff --git a/libc/misc/truncate.c b/libc/misc/truncate.c
index 29f72fa9c..c92acd149 100644
--- a/libc/misc/truncate.c
+++ b/libc/misc/truncate.c
@@ -30,4 +30,3 @@ __truncate (path, length)
weak_alias (__truncate, truncate)
stub_warning (truncate)
-#include <stub-tag.h>
diff --git a/libc/misc/ualarm.c b/libc/misc/ualarm.c
index ac7c7a412..ca66d79a1 100644
--- a/libc/misc/ualarm.c
+++ b/libc/misc/ualarm.c
@@ -33,4 +33,3 @@ ualarm (value, interval)
}
stub_warning (ualarm)
-#include <stub-tag.h>
diff --git a/libc/misc/usleep.c b/libc/misc/usleep.c
index f67346e7a..674a02564 100644
--- a/libc/misc/usleep.c
+++ b/libc/misc/usleep.c
@@ -28,4 +28,3 @@ usleep (useconds)
}
stub_warning (usleep)
-#include <stub-tag.h>
diff --git a/libc/misc/ustat.c b/libc/misc/ustat.c
index 135afe22d..2dd92e768 100644
--- a/libc/misc/ustat.c
+++ b/libc/misc/ustat.c
@@ -29,4 +29,3 @@ ustat (dev, ust)
return -1;
}
stub_warning (ustat)
-#include <stub-tag.h>
diff --git a/libc/misc/utimes.c b/libc/misc/utimes.c
index 3d0e868ac..5cdfe6ca5 100644
--- a/libc/misc/utimes.c
+++ b/libc/misc/utimes.c
@@ -39,4 +39,3 @@ __utimes (file, tvp)
weak_alias (__utimes, utimes)
stub_warning (utimes)
-#include <stub-tag.h>
diff --git a/libc/misc/vhangup.c b/libc/misc/vhangup.c
index 02d85040b..0d8ce287c 100644
--- a/libc/misc/vhangup.c
+++ b/libc/misc/vhangup.c
@@ -29,4 +29,3 @@ vhangup ()
}
stub_warning (vhangup)
-#include <stub-tag.h>
diff --git a/libc/misc/writev.c b/libc/misc/writev.c
index 0bf1cb3de..19bc02889 100644
--- a/libc/misc/writev.c
+++ b/libc/misc/writev.c
@@ -37,4 +37,3 @@ strong_alias (__libc_writev, __writev)
weak_alias (__libc_writev, writev)
stub_warning (writev)
-#include <stub-tag.h>
diff --git a/libc/nptl/ChangeLog b/libc/nptl/ChangeLog
index 040b64c4e..0e0167529 100644
--- a/libc/nptl/ChangeLog
+++ b/libc/nptl/ChangeLog
@@ -1,3 +1,70 @@
+2012-11-05 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ * pthread_cond_timedwait.c (__pthread_cond_timedwait): Time out
+ if absolute timeout is negative.
+ [__ASSUME_FUTEX_CLOCK_REALTIME &&
+ lll_futex_timed_wait_bitset]: Use lll_futex_timed_wait_bitset.
+ * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock):
+ Likewise.
+ * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock):
+ Likewise.
+ * sysdeps/unix/sysv/linux/lowlevelrobustlock.c
+ (__lll_robust_timedlock_wait): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+ (lll_futex_timed_wait_bitset): New macro.
+ * sysdeps/unix/sysv/linux/s390/lowlevellock.h
+ (lll_futex_timed_wait_bitset): Likewise.
+
+2012-11-03 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/lowlevellock.h (BUSY_WAIT_NOP):
+ Add missing spaces.
+ (__cpu_relax): Likewise.
+
+2012-11-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * sysdeps/x86_64/tls.h: Don't include <xmmintrin.h>.
+ (__128bits): New struct typedef.
+ (tcbhead_t): Replace __m128 with __128bits.
+
+2012-10-30 Aurelien Jarno <aurelien@aurel32.net>
+ Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile (tst-cancel7-ARGS): Use exec in --command argument.
+
+2012-10-28 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/unix/sysv/linux/sparc/lowlevellock.h (BUSY_WAIT_NOP):
+ Define when we have v9 instructions available.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S: New file.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S: New
+ file.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile: New
+ file.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/Makefile: Add cpu_relax
+ to libpthread-routines.
+
+2012-10-25 Roland McGrath <roland@hack.frob.com>
+
+ * tst-cond-except.c (TEST_FUNCTION): New macro.
+
+2012-10-25 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile ($(objpfx)tst-tls6.out): Use $(BASH) not $(SHELL) to
+ run tst-tls6.sh.
+ * tst-tls6.sh: Use /bin/bash not /bin/sh.
+
+2012-10-25 Roland McGrath <roland@hack.frob.com>
+
+ * tst-basic2.c (do_test): Return RESULT, not always zero.
+
+ * tst-cond25.c: Include <stdint.h>
+ (waiter): Add casts to uintptr_t between casting integer<->pointer.
+ (timed_waiter): Likewise.
+ (do_test_wait): Likewise.
+ * tst-cond-except.c (thr): Likewise.
+ (do_test): Use prototype definition.
+
2012-10-24 Joseph Myers <joseph@codesourcery.com>
Jim Blandy <jimb@codesourcery.com>
diff --git a/libc/nptl/Makefile b/libc/nptl/Makefile
index 0126cfb4b..94928bc83 100644
--- a/libc/nptl/Makefile
+++ b/libc/nptl/Makefile
@@ -494,7 +494,7 @@ $(objpfx)tst-tls6.out: tst-tls6.sh $(objpfx)tst-tls5 \
$(objpfx)tst-tls5moda.so $(objpfx)tst-tls5modb.so \
$(objpfx)tst-tls5modc.so $(objpfx)tst-tls5modd.so \
$(objpfx)tst-tls5mode.so $(objpfx)tst-tls5modf.so
- $(SHELL) $< $(common-objpfx) $(elf-objpfx) \
+ $(BASH) $< $(common-objpfx) $(elf-objpfx) \
$(rtld-installed-name) '$(test-wrapper-env)'
endif
diff --git a/libc/nptl/pthread_cond_timedwait.c b/libc/nptl/pthread_cond_timedwait.c
index 51a34ba4f..2fcbc57c2 100644
--- a/libc/nptl/pthread_cond_timedwait.c
+++ b/libc/nptl/pthread_cond_timedwait.c
@@ -80,6 +80,11 @@ __pthread_cond_timedwait (cond, mutex, abstime)
++cond->__data.__futex;
cond->__data.__nwaiters += 1 << COND_NWAITERS_SHIFT;
+ /* Work around the fact that the kernel rejects negative timeout values
+ despite them being valid. */
+ if (__builtin_expect (abstime->tv_sec < 0, 0))
+ goto timeout;
+
/* Remember the mutex we are using here. If there is already a
different address store this is a bad user bug. Do not store
anything for pshared condvars. */
@@ -104,9 +109,11 @@ __pthread_cond_timedwait (cond, mutex, abstime)
while (1)
{
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
struct timespec rt;
{
-#ifdef __NR_clock_gettime
+# ifdef __NR_clock_gettime
INTERNAL_SYSCALL_DECL (err);
int ret;
ret = INTERNAL_VSYSCALL (clock_gettime, err, 2,
@@ -116,7 +123,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
/* Convert the absolute timeout value to a relative timeout. */
rt.tv_sec = abstime->tv_sec - rt.tv_sec;
rt.tv_nsec = abstime->tv_nsec - rt.tv_nsec;
-#else
+# else
/* Get the current time. So far we support only one clock. */
struct timeval tv;
(void) gettimeofday (&tv, NULL);
@@ -124,7 +131,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
/* Convert the absolute timeout value to a relative timeout. */
rt.tv_sec = abstime->tv_sec - tv.tv_sec;
rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
-#endif
+# endif
}
if (rt.tv_nsec < 0)
{
@@ -139,6 +146,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
goto timeout;
}
+#endif
unsigned int futex_val = cond->__data.__futex;
@@ -148,9 +156,17 @@ __pthread_cond_timedwait (cond, mutex, abstime)
/* Enable asynchronous cancellation. Required by the standard. */
cbuffer.oldtype = __pthread_enable_asynccancel ();
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
/* Wait until woken by signal or broadcast. */
err = lll_futex_timed_wait (&cond->__data.__futex,
futex_val, &rt, pshared);
+#else
+ unsigned int clockbit = (cond->__data.__nwaiters & 1
+ ? 0 : FUTEX_CLOCK_REALTIME);
+ err = lll_futex_timed_wait_bitset (&cond->__data.__futex, futex_val,
+ abstime, clockbit, pshared);
+#endif
/* Disable asynchronous cancellation. */
__pthread_disable_asynccancel (cbuffer.oldtype);
diff --git a/libc/nptl/pthread_rwlock_timedrdlock.c b/libc/nptl/pthread_rwlock_timedrdlock.c
index be8216d57..b7622abfa 100644
--- a/libc/nptl/pthread_rwlock_timedrdlock.c
+++ b/libc/nptl/pthread_rwlock_timedrdlock.c
@@ -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.
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
@@ -76,6 +76,16 @@ pthread_rwlock_timedrdlock (rwlock, abstime)
break;
}
+ /* Work around the fact that the kernel rejects negative timeout values
+ despite them being valid. */
+ if (__builtin_expect (abstime->tv_sec < 0, 0))
+ {
+ result = ETIMEDOUT;
+ break;
+ }
+
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
/* Get the current time. So far we support only one clock. */
struct timeval tv;
(void) gettimeofday (&tv, NULL);
@@ -96,6 +106,7 @@ pthread_rwlock_timedrdlock (rwlock, abstime)
result = ETIMEDOUT;
break;
}
+#endif
/* Remember that we are a reader. */
if (++rwlock->__data.__nr_readers_queued == 0)
@@ -112,8 +123,16 @@ pthread_rwlock_timedrdlock (rwlock, abstime)
lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared);
/* Wait for the writer to finish. */
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
err = lll_futex_timed_wait (&rwlock->__data.__readers_wakeup,
waitval, &rt, rwlock->__data.__shared);
+#else
+ err = lll_futex_timed_wait_bitset (&rwlock->__data.__readers_wakeup,
+ waitval, abstime,
+ FUTEX_CLOCK_REALTIME,
+ rwlock->__data.__shared);
+#endif
/* Get the lock. */
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
diff --git a/libc/nptl/pthread_rwlock_timedwrlock.c b/libc/nptl/pthread_rwlock_timedwrlock.c
index 8eb31cfdc..5f2399f91 100644
--- a/libc/nptl/pthread_rwlock_timedwrlock.c
+++ b/libc/nptl/pthread_rwlock_timedwrlock.c
@@ -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.
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
@@ -67,6 +67,16 @@ pthread_rwlock_timedwrlock (rwlock, abstime)
break;
}
+ /* Work around the fact that the kernel rejects negative timeout values
+ despite them being valid. */
+ if (__builtin_expect (abstime->tv_sec < 0, 0))
+ {
+ result = ETIMEDOUT;
+ break;
+ }
+
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
/* Get the current time. So far we support only one clock. */
struct timeval tv;
(void) gettimeofday (&tv, NULL);
@@ -86,6 +96,7 @@ pthread_rwlock_timedwrlock (rwlock, abstime)
result = ETIMEDOUT;
break;
}
+#endif
/* Remember that we are a writer. */
if (++rwlock->__data.__nr_writers_queued == 0)
@@ -102,8 +113,16 @@ pthread_rwlock_timedwrlock (rwlock, abstime)
lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared);
/* Wait for the writer or reader(s) to finish. */
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
err = lll_futex_timed_wait (&rwlock->__data.__writer_wakeup,
waitval, &rt, rwlock->__data.__shared);
+#else
+ err = lll_futex_timed_wait_bitset (&rwlock->__data.__writer_wakeup,
+ waitval, abstime,
+ FUTEX_CLOCK_REALTIME,
+ rwlock->__data.__shared);
+#endif
/* Get the lock. */
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c b/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c
index 7b4e84343..9a9e67303 100644
--- a/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c
+++ b/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2006.
@@ -70,8 +70,15 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime,
if (oldval == 0)
goto try;
+ /* Work around the fact that the kernel rejects negative timeout values
+ despite them being valid. */
+ if (__builtin_expect (abstime->tv_sec < 0, 0))
+ return ETIMEDOUT;
+
do
{
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
struct timeval tv;
struct timespec rt;
@@ -90,6 +97,7 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime,
/* Already timed out? */
if (rt.tv_sec < 0)
return ETIMEDOUT;
+#endif
/* Wait. */
if (__builtin_expect (oldval & FUTEX_OWNER_DIED, 0))
@@ -100,7 +108,13 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime,
&& atomic_compare_and_exchange_bool_acq (futex, newval, oldval))
continue;
+#if (!defined __ASSUME_FUTEX_CLOCK_REALTIME \
+ || !defined lll_futex_timed_wait_bitset)
lll_futex_timed_wait (futex, newval, &rt, private);
+#else
+ lll_futex_timed_wait_bitset (futex, newval, abstime,
+ FUTEX_CLOCK_REALTIME, private);
+#endif
try:
;
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
index 406c290d7..17e63c690 100644
--- a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+++ b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
@@ -88,6 +88,19 @@
INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \
})
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
+ ({ \
+ INTERNAL_SYSCALL_DECL (__err); \
+ long int __ret; \
+ int __op = FUTEX_WAIT_BITSET | clockbit; \
+ \
+ __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
+ __lll_private_flag (__op, private), \
+ (val), (timespec), NULL /* Unused. */, \
+ FUTEX_BITSET_MATCH_ANY); \
+ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \
+ })
+
#define lll_futex_wake(futexp, nr, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
index 97092823d..0b7110f11 100644
--- a/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
+++ b/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
@@ -93,6 +93,26 @@
__result; \
})
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
+ ({ \
+ register unsigned long int __r2 asm ("2") = (unsigned long int) (futexp); \
+ register unsigned long int __r3 asm ("3") \
+ = __lll_private_flag ((FUTEX_WAIT_BITSET | clockbit), private); \
+ register unsigned long int __r4 asm ("4") = (long int) (val); \
+ register unsigned long int __r5 asm ("5") = (long int) (timespec); \
+ register unsigned long int __r6 asm ("6") = (unsigned long int) (NULL); \
+ register unsigned long int __r7 asm ("7") \
+ = (unsigned int) (FUTEX_BITSET_MATCH_ANY); \
+ register unsigned long __result asm ("2"); \
+ \
+ __asm __volatile ("svc %b1" \
+ : "=d" (__result) \
+ : "i" (SYS_futex), "0" (__r2), "d" (__r3), \
+ "d" (__r4), "d" (__r5), "d" (__r6), "d" (__r7) \
+ : "cc", "memory" ); \
+ __result; \
+ })
+
#define lll_futex_wake(futex, nr, private) \
({ \
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
index fafb0873f..939f41dfd 100644
--- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
+++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
@@ -50,6 +50,11 @@
#define LLL_PRIVATE 0
#define LLL_SHARED FUTEX_PRIVATE_FLAG
+#ifndef __sparc32_atomic_do_lock
+/* Delay in spinlock loop. */
+extern void __cpu_relax (void);
+#define BUSY_WAIT_NOP __cpu_relax ()
+#endif
#if !defined NOT_IN_libc || defined IS_IN_rtld
/* In libc.so or ld.so all futexes are private. */
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile
new file mode 100644
index 000000000..f7acc019a
--- /dev/null
+++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile
@@ -0,0 +1 @@
+libpthread-routines += cpu_relax
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S
new file mode 100644
index 000000000..4ac4d1448
--- /dev/null
+++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S
@@ -0,0 +1 @@
+#include <sparc64/cpu_relax.S>
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
index 774b267ef..656d2e09c 100644
--- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
+++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
@@ -1,3 +1,5 @@
+libpthread-routines += cpu_relax
+
ifeq ($(subdir),nptl)
CFLAGS-pause.c += -fexceptions
CFLAGS-sigsuspend.c += -fexceptions
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S
new file mode 100644
index 000000000..9e64c5080
--- /dev/null
+++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S
@@ -0,0 +1,67 @@
+/* CPU strand yielding for busy loops.
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ Contributed by David S. Miller (davem@davemloft.net)
+ 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>
+
+ .text
+__cpu_relax_generic:
+ rd %ccr, %g0
+ rd %ccr, %g0
+ rd %ccr, %g0
+ retl
+ nop
+ .size __cpu_relax_generic,.-__cpu_relax_generic
+
+__cpu_relax_pause:
+ wr %g0, 128, %asr27
+ retl
+ nop
+ .size __cpu_relax_pause,.-__cpu_relax_pause
+
+ENTRY(__cpu_relax)
+ .type __cpu_relax, @gnu_indirect_function
+# ifdef SHARED
+ SETUP_PIC_REG_LEAF(o3, o5)
+# endif
+ set HWCAP_SPARC_PAUSE, %o1
+ andcc %o0, %o1, %g0
+ be 1f
+ nop
+# ifdef SHARED
+ sethi %gdop_hix22(__cpu_relax_pause), %o1
+ xor %o1, %gdop_lox10(__cpu_relax_pause), %o1
+# else
+ set __cpu_relax_pause, %o1
+# endif
+ ba 10f
+ nop
+1:
+# ifdef SHARED
+ sethi %gdop_hix22(__cpu_relax_generic), %o1
+ xor %o1, %gdop_lox10(__cpu_relax_generic), %o1
+# else
+ set __cpu_relax_generic, %o1
+# endif
+10:
+# ifdef SHARED
+ add %o3, %o1, %o1
+# endif
+ retl
+ mov %o1, %o0
+END(__cpu_relax)
diff --git a/libc/nptl/sysdeps/x86_64/tls.h b/libc/nptl/sysdeps/x86_64/tls.h
index b651d1cfa..bc60a511f 100644
--- a/libc/nptl/sysdeps/x86_64/tls.h
+++ b/libc/nptl/sysdeps/x86_64/tls.h
@@ -27,7 +27,14 @@
# include <stdlib.h>
# include <sysdep.h>
# include <kernel-features.h>
-# include <xmmintrin.h>
+
+/* Replacement type for __m128 since this file is included by ld.so,
+ which is compiled with -mno-sse. It must not change the alignment
+ of rtld_savespace_sse. */
+typedef struct
+{
+ int i[4];
+} __128bits;
/* Type for the dtv. */
@@ -64,7 +71,7 @@ typedef struct
void *__private_tm[5];
long int __unused2;
/* Have space for the post-AVX register size. */
- __m128 rtld_savespace_sse[8][4] __attribute__ ((aligned (32)));
+ __128bits rtld_savespace_sse[8][4] __attribute__ ((aligned (32)));
void *__padding[8];
} tcbhead_t;
diff --git a/libc/nptl/tst-basic2.c b/libc/nptl/tst-basic2.c
index 58ed6ac53..0d3cc06da 100644
--- a/libc/nptl/tst-basic2.c
+++ b/libc/nptl/tst-basic2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004 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.
@@ -112,7 +112,7 @@ do_test (void)
result = 1;
}
- return 0;
+ return result;
}
diff --git a/libc/nptl/tst-cond-except.c b/libc/nptl/tst-cond-except.c
index b9871ba86..c294a41b2 100644
--- a/libc/nptl/tst-cond-except.c
+++ b/libc/nptl/tst-cond-except.c
@@ -18,6 +18,7 @@
#include <pthread.h>
#include <stdio.h>
+#include <stdint.h>
#include <string.h>
#include <unistd.h>
@@ -72,11 +73,11 @@ thr (void *arg)
pthread_cleanup_pop (1);
out:
- return (void *)ret;
+ return (void *) (uintptr_t) ret;
}
int
-do_test ()
+do_test (void)
{
pthread_t thread;
int ret = 0;
@@ -104,5 +105,6 @@ out:
return ret;
}
+#define TEST_FUNCTION do_test ()
#define TIMEOUT 5
#include "../test-skeleton.c"
diff --git a/libc/nptl/tst-cond25.c b/libc/nptl/tst-cond25.c
index 370cd67d1..cdc129d5f 100644
--- a/libc/nptl/tst-cond25.c
+++ b/libc/nptl/tst-cond25.c
@@ -20,6 +20,7 @@
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdint.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
@@ -87,13 +88,13 @@ waiter (void *u)
{
int i, ret = 0;
void *tret = NULL;
- int seq = (int)u;
+ int seq = (uintptr_t) u;
for (i = 0; i < ITERS / NUM; i++)
{
if ((ret = pthread_mutex_lock (&mutex)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("waiter[%u]:mutex_lock failed: %s\n", seq, strerror (ret));
goto out;
}
@@ -101,14 +102,14 @@ waiter (void *u)
if ((ret = pthread_cond_wait (&cond, &mutex)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("waiter[%u]:wait failed: %s\n", seq, strerror (ret));
goto unlock_out;
}
if ((ret = pthread_mutex_unlock (&mutex)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("waiter[%u]:mutex_unlock failed: %s\n", seq, strerror (ret));
goto out;
}
@@ -130,7 +131,7 @@ timed_waiter (void *u)
{
int i, ret;
void *tret = NULL;
- int seq = (int)u;
+ int seq = (uintptr_t) u;
for (i = 0; i < ITERS / NUM; i++)
{
@@ -138,7 +139,7 @@ timed_waiter (void *u)
if ((ret = clock_gettime(CLOCK_REALTIME, &ts)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("%u:clock_gettime failed: %s\n", seq, strerror (errno));
goto out;
}
@@ -146,7 +147,7 @@ timed_waiter (void *u)
if ((ret = pthread_mutex_lock (&mutex)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("waiter[%u]:mutex_lock failed: %s\n", seq, strerror (ret));
goto out;
}
@@ -155,13 +156,13 @@ timed_waiter (void *u)
/* We should not time out either. */
if ((ret = pthread_cond_timedwait (&cond, &mutex, &ts)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("waiter[%u]:timedwait failed: %s\n", seq, strerror (ret));
goto unlock_out;
}
if ((ret = pthread_mutex_unlock (&mutex)) != 0)
{
- tret = (void *)1;
+ tret = (void *) (uintptr_t) 1;
printf ("waiter[%u]:mutex_unlock failed: %s\n", seq, strerror (ret));
goto out;
}
@@ -195,7 +196,8 @@ do_test_wait (thr_func f)
goto out;
}
- if ((ret = pthread_mutexattr_setprotocol (&attr, PTHREAD_PRIO_INHERIT)) != 0)
+ if ((ret = pthread_mutexattr_setprotocol (&attr,
+ PTHREAD_PRIO_INHERIT)) != 0)
{
printf ("mutexattr_setprotocol failed: %s\n", strerror (ret));
goto out;
@@ -214,7 +216,8 @@ do_test_wait (thr_func f)
}
for (j = 0; j < NUM; j++)
- if ((ret = pthread_create (&w[j], NULL, f, (void *)j)) != 0)
+ if ((ret = pthread_create (&w[j], NULL,
+ f, (void *) (uintptr_t) j)) != 0)
{
printf ("waiter[%d]: create failed: %s\n", j, strerror (ret));
goto out;
diff --git a/libc/nptl/tst-tls6.sh b/libc/nptl/tst-tls6.sh
index 78d70a827..27450c385 100755
--- a/libc/nptl/tst-tls6.sh
+++ b/libc/nptl/tst-tls6.sh
@@ -1,4 +1,4 @@
-#! /bin/sh
+#! /bin/bash
# A tls test.
# Copyright (C) 2003-2012 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -38,44 +38,41 @@ export LANG
> $logfile
fail=0
-preloads () {
- l=''
- for s in "$@"; do
- l="$l ${common_objpfx}nptl/tst-tls5mod$s.so"
- done
- echo $l | sed 's/:$//;s/: /:/g'
-}
-
for aligned in a e f; do
echo "preload tst-tls5mod{$aligned,b,c,d}.so" >> $logfile
echo "===============" >> $logfile
${test_wrapper_env} \
- LD_PRELOAD="`preloads $aligned b c d`" ${tst_tls5} >> $logfile || fail=1
+ LD_PRELOAD="`echo ${common_objpfx}nptl/tst-tls5mod{$aligned,b,c,d}.so \
+ | sed 's/:$//;s/: /:/g'`" ${tst_tls5} >> $logfile || fail=1
echo >> $logfile
echo "preload tst-tls5mod{b,$aligned,c,d}.so" >> $logfile
echo "===============" >> $logfile
${test_wrapper_env} \
- LD_PRELOAD="`preloads b $aligned c d`" ${tst_tls5} >> $logfile || fail=1
+ LD_PRELOAD="`echo ${common_objpfx}nptl/tst-tls5mod{b,$aligned,c,d}.so \
+ | sed 's/:$//;s/: /:/g'`" ${tst_tls5} >> $logfile || fail=1
echo >> $logfile
echo "preload tst-tls5mod{b,c,d,$aligned}.so" >> $logfile
echo "===============" >> $logfile
${test_wrapper_env} \
- LD_PRELOAD="`preloads b c d $aligned`" ${tst_tls5} >> $logfile || fail=1
+ LD_PRELOAD="`echo ${common_objpfx}nptl/tst-tls5mod{b,c,d,$aligned}.so \
+ | sed 's/:$//;s/: /:/g'`" ${tst_tls5} >> $logfile || fail=1
echo >> $logfile
done
echo "preload tst-tls5mod{d,a,b,c,e}" >> $logfile
echo "===============" >> $logfile
${test_wrapper_env} \
-LD_PRELOAD="`preloads d a b c e`" ${tst_tls5} >> $logfile || fail=1
+LD_PRELOAD="`echo ${common_objpfx}nptl/tst-tls5mod{d,a,b,c,e}.so \
+ | sed 's/:$//;s/: /:/g'`" ${tst_tls5} >> $logfile || fail=1
echo >> $logfile
echo "preload tst-tls5mod{d,a,b,e,f}" >> $logfile
echo "===============" >> $logfile
${test_wrapper_env} \
-LD_PRELOAD="`preloads d a b e f`" ${tst_tls5} >> $logfile || fail=1
+LD_PRELOAD="`echo ${common_objpfx}nptl/tst-tls5mod{d,a,b,e,f}.so \
+ | sed 's/:$//;s/: /:/g'`" ${tst_tls5} >> $logfile || fail=1
echo >> $logfile
exit $fail
diff --git a/libc/nss/getXXbyYY.c b/libc/nss/getXXbyYY.c
index 336676ad5..c308a70b9 100644
--- a/libc/nss/getXXbyYY.c
+++ b/libc/nss/getXXbyYY.c
@@ -151,4 +151,4 @@ done:
return result;
}
-static_link_warning (FUNCTION_NAME)
+nss_interface_function (FUNCTION_NAME)
diff --git a/libc/nss/getXXbyYY_r.c b/libc/nss/getXXbyYY_r.c
index f296ed1f4..8b3b61b66 100644
--- a/libc/nss/getXXbyYY_r.c
+++ b/libc/nss/getXXbyYY_r.c
@@ -349,4 +349,4 @@ do_default_symbol_version (NEW (REENTRANT_NAME),
REENTRANT_NAME, GLIBC_2_1_2);
#endif
-static_link_warning (REENTRANT_NAME)
+nss_interface_function (REENTRANT_NAME)
diff --git a/libc/nss/getXXent.c b/libc/nss/getXXent.c
index 008851e59..152798f0c 100644
--- a/libc/nss/getXXent.c
+++ b/libc/nss/getXXent.c
@@ -91,4 +91,4 @@ GETFUNC_NAME (void)
return result;
}
-static_link_warning (GETFUNC_NAME)
+nss_interface_function (GETFUNC_NAME)
diff --git a/libc/nss/getXXent_r.c b/libc/nss/getXXent_r.c
index f1036058f..6c52d27cb 100644
--- a/libc/nss/getXXent_r.c
+++ b/libc/nss/getXXent_r.c
@@ -207,6 +207,6 @@ do_default_symbol_version (NEW (REENTRANT_GETNAME),
REENTRANT_GETNAME, GLIBC_2_1_2);
#endif
-static_link_warning (SETFUNC_NAME)
-static_link_warning (ENDFUNC_NAME)
-static_link_warning (REENTRANT_GETNAME)
+nss_interface_function (SETFUNC_NAME)
+nss_interface_function (ENDFUNC_NAME)
+nss_interface_function (REENTRANT_GETNAME)
diff --git a/libc/nss/nsswitch.h b/libc/nss/nsswitch.h
index e12d6d3d2..0d8686c72 100644
--- a/libc/nss/nsswitch.h
+++ b/libc/nss/nsswitch.h
@@ -117,6 +117,14 @@ enum
/* Flags whether custom rules for database is set. */
extern bool __nss_database_custom[NSS_DBSIDX_max];
+/* Warning for NSS functions, which don't require dlopen if glibc
+ was built with --enable-static-nss. */
+#ifdef DO_STATIC_NSS
+# define nss_interface_function(name)
+#else
+# define nss_interface_function(name) static_link_warning (name)
+#endif
+
/* Interface functions for NSS. */
diff --git a/libc/po/eo.po b/libc/po/eo.po
new file mode 100644
index 000000000..29e59bf2e
--- /dev/null
+++ b/libc/po/eo.po
@@ -0,0 +1,6992 @@
+# Esperanto translations for GNU libc.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glibc package.
+#
+# "Under the spreading chestnut tree..."
+#
+# Do: iconv/iconv_prog.c, nis/nis_error.h,
+# stdio-common/psig*, sysdeps/gnu/errlist.c,
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: libc 2.16-pre1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-21 07:51-0700\n"
+"PO-Revision-Date: 2012-09-14 21:31+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: argp/argp-help.c:226
+#, c-format
+msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+msgstr ""
+
+#: argp/argp-help.c:236
+#, c-format
+msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+msgstr ""
+
+#: argp/argp-help.c:249
+#, c-format
+msgid "Garbage in ARGP_HELP_FMT: %s"
+msgstr ""
+
+#: argp/argp-help.c:1213
+msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."
+msgstr ""
+"(Endaj aÅ­ eblaj argumentoj por longaj opcioj ankaÅ­ endas aÅ­ eblas por\n"
+"iuj korespondaj mallongaj opcioj.)"
+
+#: argp/argp-help.c:1599
+msgid "Usage:"
+msgstr "Uzmaniero: "
+
+#: argp/argp-help.c:1603
+msgid " or: "
+msgstr " aÅ­: "
+
+#: argp/argp-help.c:1615
+msgid " [OPTION...]"
+msgstr " [OPCIO...]"
+
+#: argp/argp-help.c:1642
+#, c-format
+msgid "Try `%s --help' or `%s --usage' for more information.\n"
+msgstr "Tajpu «%s --help» aŭ «%s --usage» por pli da informoj.\n"
+
+#: argp/argp-help.c:1670
+#, c-format
+msgid "Report bugs to %s.\n"
+msgstr "Raportu programmisojn al <%s>.\n"
+
+#: argp/argp-parse.c:101
+msgid "Give this help list"
+msgstr "montri ĉi tiun helptekston"
+
+#: argp/argp-parse.c:102
+msgid "Give a short usage message"
+msgstr "montri mallongan uzmanieran mesaÄon"
+
+#: argp/argp-parse.c:103
+msgid "Set the program name"
+msgstr "agordi la programnomon"
+
+#: argp/argp-parse.c:105
+msgid "Hang for SECS seconds (default 3600)"
+msgstr "paÅ­zi por SEKOJ sekundoj (defaÅ­lte 3600)"
+
+#: argp/argp-parse.c:166
+msgid "Print program version"
+msgstr "montri programversion"
+
+#: argp/argp-parse.c:182
+msgid "(PROGRAM ERROR) No version known!?"
+msgstr "(**Programmison**) Ne konas sian version!?"
+
+#: argp/argp-parse.c:622
+#, c-format
+msgid "%s: Too many arguments\n"
+msgstr "%s: tro da argumentoj\n"
+
+#: argp/argp-parse.c:765
+msgid "(PROGRAM ERROR) Option should have been recognized!?"
+msgstr "(**Programmison**) Opcio devus esti rekonata!?"
+
+#: assert/assert-perr.c:36
+#, c-format
+msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n"
+msgstr "%s%s%s:%u: %s%sNeatendata eraro: %s.\n"
+
+#: assert/assert.c:101
+#, c-format
+msgid ""
+"%s%s%s:%u: %s%sAssertion `%s' failed.\n"
+"%n"
+msgstr ""
+"%s%s%s:%u: %s%sKontrolo '%s' malsukcesis.\n"
+"%n"
+
+#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:115 nss/makedb.c:118
+msgid "NAME"
+msgstr "NOMO"
+
+#: catgets/gencat.c:110
+msgid "Create C header file NAME containing symbol definitions"
+msgstr ""
+
+#: catgets/gencat.c:112
+msgid "Do not use existing catalog, force new output file"
+msgstr ""
+
+#: catgets/gencat.c:113 nss/makedb.c:118
+msgid "Write output to file NAME"
+msgstr "skribi eligon al dosiero NOMO"
+
+#: catgets/gencat.c:118
+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 ""
+
+#: catgets/gencat.c:123
+msgid ""
+"-o OUTPUT-FILE [INPUT-FILE]...\n"
+"[OUTPUT-FILE [INPUT-FILE]...]"
+msgstr ""
+
+#: catgets/gencat.c:234 debug/pcprofiledump.c:207 debug/xtrace.sh:57
+#: elf/ldconfig.c:301 elf/ldd.bash.in:55 elf/pldd.c:56 elf/sln.c:85
+#: elf/sotruss.ksh:49 elf/sprof.c:370 iconv/iconv_prog.c:407
+#: iconv/iconvconfig.c:382 locale/programs/locale.c:278
+#: locale/programs/localedef.c:367 login/programs/pt_chown.c:91
+#: malloc/memusage.sh:64 malloc/memusagestat.c:538 nscd/nscd.c:456
+#: nss/getent.c:965 nss/makedb.c:369 posix/getconf.c:1121
+#: sunrpc/rpc_main.c:1446 sunrpc/rpcinfo.c:691
+#: sysdeps/unix/sysv/linux/lddlibc4.c:61
+msgid ""
+"For bug reporting instructions, please see:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+msgstr ""
+
+#: catgets/gencat.c:248 debug/pcprofiledump.c:221 debug/xtrace.sh:65
+#: elf/ldconfig.c:315 elf/ldd.bash.in:38 elf/pldd.c:220 elf/sotruss.ksh:76
+#: elf/sprof.c:385 iconv/iconv_prog.c:422 iconv/iconvconfig.c:397
+#: locale/programs/locale.c:293 locale/programs/localedef.c:383
+#: login/programs/pt_chown.c:62 malloc/memusage.sh:72
+#: malloc/memusagestat.c:556 nscd/nscd.c:470 nss/getent.c:86 nss/makedb.c:383
+#: posix/getconf.c:1103 sysdeps/unix/sysv/linux/lddlibc4.c:68
+#, 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 ""
+
+#: catgets/gencat.c:253 debug/pcprofiledump.c:226 debug/xtrace.sh:69
+#: elf/ldconfig.c:320 elf/pldd.c:225 elf/sprof.c:391 iconv/iconv_prog.c:427
+#: iconv/iconvconfig.c:402 locale/programs/locale.c:298
+#: locale/programs/localedef.c:388 malloc/memusage.sh:76
+#: malloc/memusagestat.c:561 nscd/nscd.c:475 nss/getent.c:91 nss/makedb.c:388
+#: posix/getconf.c:1108
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Verkita de %s.\n"
+
+#: catgets/gencat.c:284
+msgid "*standard input*"
+msgstr "*ĉefenigujo*"
+
+#: catgets/gencat.c:290 iconv/iconv_charmap.c:171 iconv/iconv_prog.c:293
+#: nss/makedb.c:247
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ne eblas malfermi enigan dosieron «%s»"
+
+#: catgets/gencat.c:419 catgets/gencat.c:494
+msgid "illegal set number"
+msgstr "nevalida numero de aro"
+
+#: catgets/gencat.c:446
+msgid "duplicate set definition"
+msgstr "duobla difino de aro"
+
+#: catgets/gencat.c:448 catgets/gencat.c:620 catgets/gencat.c:672
+msgid "this is the first definition"
+msgstr "ĉi tiu estas la unua difino"
+
+#: catgets/gencat.c:519
+#, c-format
+msgid "unknown set `%s'"
+msgstr "nekonata aro «%s»"
+
+#: catgets/gencat.c:560
+msgid "invalid quote character"
+msgstr "nevalida cita signo"
+
+#: catgets/gencat.c:573
+#, c-format
+msgid "unknown directive `%s': line ignored"
+msgstr ""
+
+#: catgets/gencat.c:618
+msgid "duplicated message number"
+msgstr ""
+
+#: catgets/gencat.c:669
+msgid "duplicated message identifier"
+msgstr ""
+
+#: catgets/gencat.c:726
+msgid "invalid character: message ignored"
+msgstr "nevalida signo: mesaÄo ignoriÄas"
+
+#: catgets/gencat.c:769
+msgid "invalid line"
+msgstr "nevalida linio"
+
+#: catgets/gencat.c:823
+msgid "malformed line ignored"
+msgstr "misformita linio ignoriÄas"
+
+#: catgets/gencat.c:987 catgets/gencat.c:1028
+#, c-format
+msgid "cannot open output file `%s'"
+msgstr "ne eblas malfermi eligan dosieron «%s»"
+
+#: catgets/gencat.c:1190 locale/programs/linereader.c:559
+msgid "invalid escape sequence"
+msgstr ""
+
+# SIGTERM 15 Term Termination signal
+#: catgets/gencat.c:1212
+msgid "unterminated message"
+msgstr "nefinita mesaÄo"
+
+#: catgets/gencat.c:1236
+#, c-format
+msgid "while opening old catalog file"
+msgstr ""
+
+#: catgets/gencat.c:1327
+#, c-format
+msgid "conversion modules not available"
+msgstr ""
+
+#: catgets/gencat.c:1353
+#, c-format
+msgid "cannot determine escape character"
+msgstr ""
+
+#: debug/pcprofiledump.c:52
+msgid "Don't buffer output"
+msgstr "Ne bufri eligon"
+
+#: debug/pcprofiledump.c:57
+msgid "Dump information generated by PC profiling."
+msgstr ""
+
+#: debug/pcprofiledump.c:60
+msgid "[FILE]"
+msgstr "[DOSIERO]"
+
+#: debug/pcprofiledump.c:107
+#, c-format
+msgid "cannot open input file"
+msgstr "ne eblas malfermi enigan dosieron"
+
+#: debug/pcprofiledump.c:114
+#, c-format
+msgid "cannot read header"
+msgstr "ne eblas legi ĉapon"
+
+#: debug/pcprofiledump.c:178
+#, c-format
+msgid "invalid pointer size"
+msgstr ""
+
+#: debug/xtrace.sh:26 debug/xtrace.sh:44
+msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n"
+msgstr ""
+
+#: debug/xtrace.sh:32 elf/sotruss.ksh:57 elf/sotruss.ksh:68
+#: elf/sotruss.ksh:136 malloc/memusage.sh:26
+msgid "Try \\`%s --help' or \\`%s --usage' for more information.\\n"
+msgstr "Tajpu «%s --help» aŭ «%s --usage» por pli da informoj.\\n"
+
+#: debug/xtrace.sh:38
+msgid "%s: option '%s' requires an argument.\\n"
+msgstr "%s: opcio «%s» bezonas argumenton\\n"
+
+#: debug/xtrace.sh:45
+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 ""
+
+#: debug/xtrace.sh:126
+msgid "xtrace: unrecognized option \\`$1'\\n"
+msgstr "xtrace: nekonata opcio «$1»\\n"
+
+#: debug/xtrace.sh:139
+msgid "No program name given\\n"
+msgstr "Ne indikatas programnomo\\n"
+
+#: debug/xtrace.sh:147
+#, sh-format
+msgid "executable \\`$program' not found\\n"
+msgstr "rulebla «$program» ne troviÄas\\n"
+
+#: debug/xtrace.sh:151
+#, sh-format
+msgid "\\`$program' is no executable\\n"
+msgstr "«$program» ne ruleblas\\n"
+
+#: dlfcn/dlinfo.c:63
+msgid "RTLD_SELF used in code not dynamically loaded"
+msgstr ""
+
+# SIGINFO 29,-,- A synonym for SIGPWR
+#: dlfcn/dlinfo.c:72
+msgid "unsupported dlinfo request"
+msgstr ""
+
+#: dlfcn/dlmopen.c:63
+msgid "invalid namespace"
+msgstr ""
+
+#: dlfcn/dlmopen.c:68
+msgid "invalid mode"
+msgstr "nevalida moduso"
+
+#: dlfcn/dlopen.c:64
+msgid "invalid mode parameter"
+msgstr "nevalida modusa argumento"
+
+#: elf/cache.c:68
+msgid "unknown"
+msgstr "nekonata"
+
+#: elf/cache.c:115
+msgid "Unknown OS"
+msgstr "Nekonata mastrumsistemo"
+
+#: elf/cache.c:120
+#, c-format
+msgid ", OS ABI: %s %d.%d.%d"
+msgstr ", mastruma ABI-o: %s %d.%d.%d"
+
+#: elf/cache.c:137 elf/ldconfig.c:1306
+#, c-format
+msgid "Can't open cache file %s\n"
+msgstr "Ne eblas malfermi kaÅmemoran dosieron %s\n"
+
+#: elf/cache.c:151
+#, c-format
+msgid "mmap of cache file failed.\n"
+msgstr "Malsukcesis enmemorigo de kaÅmemora dosiero.\n"
+
+#: elf/cache.c:155 elf/cache.c:169
+#, c-format
+msgid "File is not a cache file.\n"
+msgstr "Dosiero ne estas kaÅmemora dosiero.\n"
+
+#: elf/cache.c:202 elf/cache.c:212
+#, c-format
+msgid "%d libs found in cache `%s'\n"
+msgstr ""
+
+#: elf/cache.c:406
+#, c-format
+msgid "Can't create temporary cache file %s"
+msgstr "Ne eblas krei provizoran kaÅmemoran dosieron %s"
+
+#: elf/cache.c:414 elf/cache.c:424 elf/cache.c:428 elf/cache.c:433
+#, c-format
+msgid "Writing of cache data failed"
+msgstr "Malsukcesis skribado de kaÅmemoraj datumoj"
+
+#: elf/cache.c:438
+#, c-format
+msgid "Changing access rights of %s to %#o failed"
+msgstr ""
+
+#: elf/cache.c:443
+#, c-format
+msgid "Renaming of %s to %s failed"
+msgstr "Malsukcesis alinomo de %s al %s"
+
+#: elf/dl-close.c:386 elf/dl-open.c:460
+msgid "cannot create scope list"
+msgstr ""
+
+#: elf/dl-close.c:773
+msgid "shared object not open"
+msgstr "komuna objekto ne estas malferma"
+
+#: elf/dl-deps.c:114
+msgid "DST not allowed in SUID/SGID programs"
+msgstr ""
+
+#: 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 ""
+
+#: elf/dl-deps.c:486
+msgid "cannot allocate dependency list"
+msgstr ""
+
+#: elf/dl-deps.c:522 elf/dl-deps.c:582
+msgid "cannot allocate symbol search list"
+msgstr ""
+
+#: elf/dl-deps.c:562
+msgid "Filters not supported with LD_TRACE_PRELINKING"
+msgstr ""
+
+#: elf/dl-error.c:76
+msgid "DYNAMIC LINKER BUG!!!"
+msgstr ""
+
+#: elf/dl-error.c:123
+msgid "error while loading shared libraries"
+msgstr "eraro dum Åargo de komunaj bibliotekoj"
+
+#: elf/dl-fptr.c:87 ports/sysdeps/hppa/dl-fptr.c:93
+msgid "cannot map pages for fdesc table"
+msgstr ""
+
+#: elf/dl-fptr.c:191 ports/sysdeps/hppa/dl-fptr.c:206
+msgid "cannot map pages for fptr table"
+msgstr ""
+
+#: elf/dl-fptr.c:220 ports/sysdeps/hppa/dl-fptr.c:235
+msgid "internal error: symidx out of range of fptr table"
+msgstr ""
+
+#: elf/dl-load.c:470
+msgid "cannot allocate name record"
+msgstr ""
+
+#: elf/dl-load.c:547 elf/dl-load.c:663 elf/dl-load.c:748 elf/dl-load.c:861
+msgid "cannot create cache for search path"
+msgstr ""
+
+#: elf/dl-load.c:638
+msgid "cannot create RUNPATH/RPATH copy"
+msgstr ""
+
+#: elf/dl-load.c:734
+msgid "cannot create search path array"
+msgstr ""
+
+#: elf/dl-load.c:932
+msgid "cannot stat shared object"
+msgstr ""
+
+#: elf/dl-load.c:1010
+msgid "cannot open zero fill device"
+msgstr ""
+
+#: elf/dl-load.c:1056 elf/dl-load.c:2317
+msgid "cannot create shared object descriptor"
+msgstr ""
+
+#: elf/dl-load.c:1075 elf/dl-load.c:1731 elf/dl-load.c:1834
+msgid "cannot read file data"
+msgstr "ne eblas legi dosierdatumojn"
+
+#: elf/dl-load.c:1121
+msgid "ELF load command alignment not page-aligned"
+msgstr ""
+
+#: elf/dl-load.c:1128
+msgid "ELF load command address/offset not properly aligned"
+msgstr ""
+
+#: elf/dl-load.c:1211
+msgid "cannot allocate TLS data structures for initial thread"
+msgstr ""
+
+#: elf/dl-load.c:1234
+msgid "cannot handle TLS data"
+msgstr ""
+
+#: elf/dl-load.c:1253
+msgid "object file has no loadable segments"
+msgstr ""
+
+#: elf/dl-load.c:1289
+msgid "failed to map segment from shared object"
+msgstr ""
+
+#: elf/dl-load.c:1315
+msgid "cannot dynamically load executable"
+msgstr ""
+
+#: elf/dl-load.c:1377
+msgid "cannot change memory protections"
+msgstr ""
+
+#: elf/dl-load.c:1396
+msgid "cannot map zero-fill pages"
+msgstr ""
+
+#: elf/dl-load.c:1410
+msgid "object file has no dynamic section"
+msgstr ""
+
+#: elf/dl-load.c:1433
+msgid "shared object cannot be dlopen()ed"
+msgstr ""
+
+#: elf/dl-load.c:1446
+msgid "cannot allocate memory for program header"
+msgstr ""
+
+#: elf/dl-load.c:1463 elf/dl-open.c:178
+msgid "invalid caller"
+msgstr "nevalida vokanto"
+
+#: elf/dl-load.c:1502
+msgid "cannot enable executable stack as shared object requires"
+msgstr ""
+
+#: elf/dl-load.c:1515
+msgid "cannot close file descriptor"
+msgstr ""
+
+#: elf/dl-load.c:1731
+msgid "file too short"
+msgstr "dosiero tro mallongas"
+
+#: elf/dl-load.c:1767
+msgid "invalid ELF header"
+msgstr "nevalida ELF-ĉapo"
+
+#: elf/dl-load.c:1779
+msgid "ELF file data encoding not big-endian"
+msgstr ""
+
+#: elf/dl-load.c:1781
+msgid "ELF file data encoding not little-endian"
+msgstr ""
+
+#: elf/dl-load.c:1785
+msgid "ELF file version ident does not match current one"
+msgstr ""
+
+#: elf/dl-load.c:1789
+msgid "ELF file OS ABI invalid"
+msgstr ""
+
+#: elf/dl-load.c:1792
+msgid "ELF file ABI version invalid"
+msgstr ""
+
+#: elf/dl-load.c:1795
+msgid "nonzero padding in e_ident"
+msgstr ""
+
+#: elf/dl-load.c:1798
+msgid "internal error"
+msgstr "**interna eraro**"
+
+#: elf/dl-load.c:1805
+msgid "ELF file version does not match current one"
+msgstr ""
+
+#: elf/dl-load.c:1813
+msgid "only ET_DYN and ET_EXEC can be loaded"
+msgstr ""
+
+#: elf/dl-load.c:1819
+msgid "ELF file's phentsize not the expected size"
+msgstr ""
+
+#: elf/dl-load.c:2336
+msgid "wrong ELF class: ELFCLASS64"
+msgstr "malÄusta ELF-klaso: ELFCLASS64"
+
+#: elf/dl-load.c:2337
+msgid "wrong ELF class: ELFCLASS32"
+msgstr "malÄusta ELF-klaso: ELFCLASS32"
+
+#: elf/dl-load.c:2340
+msgid "cannot open shared object file"
+msgstr "ne eblas malfermi komunan objektdosieron"
+
+#: elf/dl-lookup.c:756 ports/sysdeps/mips/dl-lookup.c:773
+msgid "relocation error"
+msgstr ""
+
+#: elf/dl-lookup.c:785 ports/sysdeps/mips/dl-lookup.c:802
+msgid "symbol lookup error"
+msgstr ""
+
+#: elf/dl-open.c:108
+msgid "cannot extend global scope"
+msgstr ""
+
+#: elf/dl-open.c:510
+msgid "TLS generation counter wrapped! Please report this."
+msgstr ""
+
+#: elf/dl-open.c:532
+msgid "cannot load any more object with static TLS"
+msgstr ""
+
+#: elf/dl-open.c:581
+msgid "invalid mode for dlopen()"
+msgstr "nevalida moduso por 'dlopen()'"
+
+#: elf/dl-open.c:598
+msgid "no more namespaces available for dlmopen()"
+msgstr ""
+
+#: elf/dl-open.c:616
+msgid "invalid target namespace in dlmopen()"
+msgstr ""
+
+#: elf/dl-reloc.c:120
+msgid "cannot allocate memory in static TLS block"
+msgstr ""
+
+#: elf/dl-reloc.c:213
+msgid "cannot make segment writable for relocation"
+msgstr ""
+
+#: elf/dl-reloc.c:276
+#, c-format
+msgid "%s: no PLTREL found in object %s\n"
+msgstr ""
+
+#: elf/dl-reloc.c:287
+#, c-format
+msgid "%s: out of memory to store relocation results for %s\n"
+msgstr ""
+
+#: elf/dl-reloc.c:303
+msgid "cannot restore segment prot after reloc"
+msgstr ""
+
+#: elf/dl-reloc.c:332
+msgid "cannot apply additional memory protection after relocation"
+msgstr ""
+
+#: elf/dl-sym.c:162
+msgid "RTLD_NEXT used in code not dynamically loaded"
+msgstr ""
+
+#: elf/dl-sysdep.c:488 elf/dl-sysdep.c:500
+msgid "cannot create capability list"
+msgstr ""
+
+#: elf/dl-tls.c:872
+msgid "cannot create TLS data structures"
+msgstr ""
+
+#: elf/dl-version.c:171
+msgid "version lookup error"
+msgstr ""
+
+#: elf/dl-version.c:302
+msgid "cannot allocate version reference table"
+msgstr ""
+
+#: elf/ldconfig.c:140
+msgid "Print cache"
+msgstr ""
+
+#: elf/ldconfig.c:141
+msgid "Generate verbose messages"
+msgstr ""
+
+#: elf/ldconfig.c:142
+msgid "Don't build cache"
+msgstr ""
+
+#: elf/ldconfig.c:143
+msgid "Don't generate links"
+msgstr ""
+
+#: elf/ldconfig.c:144
+msgid "Change to and use ROOT as root directory"
+msgstr ""
+
+#: elf/ldconfig.c:144
+msgid "ROOT"
+msgstr ""
+
+#: elf/ldconfig.c:145
+msgid "CACHE"
+msgstr ""
+
+#: elf/ldconfig.c:145
+msgid "Use CACHE as cache file"
+msgstr ""
+
+#: elf/ldconfig.c:146
+msgid "CONF"
+msgstr ""
+
+#: elf/ldconfig.c:146
+msgid "Use CONF as configuration file"
+msgstr ""
+
+#: elf/ldconfig.c:147
+msgid "Only process directories specified on the command line. Don't build cache."
+msgstr ""
+
+#: elf/ldconfig.c:148
+msgid "Manually link individual libraries."
+msgstr ""
+
+#: elf/ldconfig.c:149
+msgid "FORMAT"
+msgstr ""
+
+#: elf/ldconfig.c:149
+msgid "Format to use: new, old or compat (default)"
+msgstr ""
+
+#: elf/ldconfig.c:150
+msgid "Ignore auxiliary cache file"
+msgstr ""
+
+#: elf/ldconfig.c:158
+msgid "Configure Dynamic Linker Run Time Bindings."
+msgstr ""
+
+#: elf/ldconfig.c:338
+#, c-format
+msgid "Path `%s' given more than once"
+msgstr ""
+
+#: elf/ldconfig.c:378
+#, c-format
+msgid "%s is not a known library type"
+msgstr ""
+
+#: elf/ldconfig.c:406
+#, c-format
+msgid "Can't stat %s"
+msgstr ""
+
+#: elf/ldconfig.c:480
+#, c-format
+msgid "Can't stat %s\n"
+msgstr ""
+
+#: elf/ldconfig.c:490
+#, c-format
+msgid "%s is not a symbolic link\n"
+msgstr "%s ne estas simbola ligo\n"
+
+#: elf/ldconfig.c:509
+#, c-format
+msgid "Can't unlink %s"
+msgstr ""
+
+#: elf/ldconfig.c:515
+#, c-format
+msgid "Can't link %s to %s"
+msgstr ""
+
+# SIGWINCH 28,28,20 Ign Window resize signal (4.3 BSD, Sun)
+#: elf/ldconfig.c:521
+msgid " (changed)\n"
+msgstr " (ÅanÄiÄis)\n"
+
+#: elf/ldconfig.c:523
+msgid " (SKIPPED)\n"
+msgstr ""
+
+#: elf/ldconfig.c:578
+#, c-format
+msgid "Can't find %s"
+msgstr "Malsukcesis trovi %s"
+
+#: elf/ldconfig.c:594 elf/ldconfig.c:767 elf/ldconfig.c:826 elf/ldconfig.c:860
+#, c-format
+msgid "Cannot lstat %s"
+msgstr ""
+
+#: elf/ldconfig.c:601
+#, c-format
+msgid "Ignored file %s since it is not a regular file."
+msgstr ""
+
+#: elf/ldconfig.c:610
+#, c-format
+msgid "No link created since soname could not be found for %s"
+msgstr ""
+
+#: elf/ldconfig.c:693
+#, c-format
+msgid "Can't open directory %s"
+msgstr "Ne eblas malfermi dosierujon %s"
+
+#: elf/ldconfig.c:785 elf/ldconfig.c:847 elf/readlib.c:90
+#, c-format
+msgid "Input file %s not found.\n"
+msgstr "Eniga dosiero %s ne troviÄas.\n"
+
+#: elf/ldconfig.c:792
+#, c-format
+msgid "Cannot stat %s"
+msgstr "Malsukcesis eltrovi statinformon pri %s"
+
+#: elf/ldconfig.c:921
+#, c-format
+msgid "libc5 library %s in wrong directory"
+msgstr ""
+
+#: elf/ldconfig.c:924
+#, c-format
+msgid "libc6 library %s in wrong directory"
+msgstr ""
+
+#: elf/ldconfig.c:927
+#, c-format
+msgid "libc4 library %s in wrong directory"
+msgstr ""
+
+#: elf/ldconfig.c:955
+#, c-format
+msgid "libraries %s and %s in directory %s have same soname but different type."
+msgstr ""
+
+#: elf/ldconfig.c:1064
+#, c-format
+msgid "Warning: ignoring configuration file that cannot be opened: %s"
+msgstr ""
+
+#: elf/ldconfig.c:1130
+#, c-format
+msgid "%s:%u: bad syntax in hwcap line"
+msgstr ""
+
+#: elf/ldconfig.c:1136
+#, c-format
+msgid "%s:%u: hwcap index %lu above maximum %u"
+msgstr ""
+
+#: elf/ldconfig.c:1143 elf/ldconfig.c:1151
+#, c-format
+msgid "%s:%u: hwcap index %lu already defined as %s"
+msgstr ""
+
+#: elf/ldconfig.c:1154
+#, c-format
+msgid "%s:%u: duplicate hwcap %lu %s"
+msgstr ""
+
+#: elf/ldconfig.c:1176
+#, c-format
+msgid "need absolute file name for configuration file when using -r"
+msgstr ""
+
+#: elf/ldconfig.c:1183 locale/programs/xmalloc.c:65 malloc/obstack.c:433
+#: malloc/obstack.c:435 posix/getconf.c:1076 posix/getconf.c:1296
+#, c-format
+msgid "memory exhausted"
+msgstr "mankas sufiĉa memoro"
+
+#: elf/ldconfig.c:1215
+#, c-format
+msgid "%s:%u: cannot read directory %s"
+msgstr "%s:%u: ne eblas legi dosierujon %s"
+
+#: elf/ldconfig.c:1259
+#, c-format
+msgid "relative path `%s' used to build cache"
+msgstr ""
+
+#: elf/ldconfig.c:1285
+#, c-format
+msgid "Can't chdir to /"
+msgstr "Malsukcesis ÅanÄi aktualan dosierujon al «/»"
+
+#: elf/ldconfig.c:1326
+#, c-format
+msgid "Can't open cache file directory %s\n"
+msgstr ""
+
+#: elf/ldd.bash.in:42
+msgid "Written by %s and %s.\n"
+msgstr "Verkita de %s kaj %s.\n"
+
+#: elf/ldd.bash.in:47
+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 ""
+
+#: elf/ldd.bash.in:81
+msgid "ldd: option \\`$1' is ambiguous"
+msgstr "ldd: opcio «-$1» estas plursenca"
+
+#: elf/ldd.bash.in:88
+msgid "unrecognized option"
+msgstr "nekonata opcio"
+
+#: elf/ldd.bash.in:89 elf/ldd.bash.in:127
+msgid "Try \\`ldd --help' for more information."
+msgstr "Tajpu «ldd --help» por pli da informoj."
+
+#: elf/ldd.bash.in:126
+msgid "missing file arguments"
+msgstr "mankas dosieraj argumentoj"
+
+#. 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:149 sysdeps/gnu/errlist.c:36
+msgid "No such file or directory"
+msgstr "Dosiero aü dosierujo ne ekzistas"
+
+#: elf/ldd.bash.in:152 inet/rcmd.c:488
+msgid "not regular file"
+msgstr "ne estas normala dosiero"
+
+#: elf/ldd.bash.in:155
+msgid "warning: you do not have execution permission for"
+msgstr "averto: vi ne havas permeson ruli"
+
+#: elf/ldd.bash.in:184
+msgid "\tnot a dynamic executable"
+msgstr ""
+
+#: elf/ldd.bash.in:192
+msgid "exited with unknown exit code"
+msgstr "finis kun nekonata elirstato"
+
+#: elf/ldd.bash.in:197
+msgid "error: you do not have read permission for"
+msgstr "eraro: vi ne havas permeson legi"
+
+#: elf/pldd-xx.c:105
+#, c-format
+msgid "cannot find program header of process"
+msgstr ""
+
+#: elf/pldd-xx.c:110
+#, c-format
+msgid "cannot read program header"
+msgstr "ne eblas legi programĉapon"
+
+#: elf/pldd-xx.c:135
+#, c-format
+msgid "cannot read dynamic section"
+msgstr "ne eblas legi dinamikan sekcion"
+
+#: elf/pldd-xx.c:147
+#, c-format
+msgid "cannot read r_debug"
+msgstr "ne eblas legi 'r_debug'"
+
+#: elf/pldd-xx.c:167
+#, c-format
+msgid "cannot read program interpreter"
+msgstr "ne eblas legi programinterpretilon"
+
+#: elf/pldd-xx.c:196
+#, c-format
+msgid "cannot read link map"
+msgstr "ne eblas legi ligojmapon"
+
+#: elf/pldd-xx.c:207
+#, c-format
+msgid "cannot read object name"
+msgstr "ne eblas legi objektnomon"
+
+#: elf/pldd.c:67
+msgid "List dynamic shared objects loaded into process."
+msgstr ""
+
+#: elf/pldd.c:71
+msgid "PID"
+msgstr ""
+
+#: elf/pldd.c:102
+#, c-format
+msgid "Exactly one parameter with process ID required.\n"
+msgstr ""
+
+#: elf/pldd.c:114
+#, c-format
+msgid "invalid process ID '%s'"
+msgstr ""
+
+#: elf/pldd.c:122
+#, c-format
+msgid "cannot open %s"
+msgstr "ne eblas malfermi %s"
+
+#: elf/pldd.c:147
+#, c-format
+msgid "cannot open %s/task"
+msgstr "ne eblas malfermi %s/task"
+
+#: elf/pldd.c:150
+#, c-format
+msgid "cannot prepare reading %s/task"
+msgstr ""
+
+#: elf/pldd.c:163
+#, c-format
+msgid "invalid thread ID '%s'"
+msgstr ""
+
+#: elf/pldd.c:174
+#, c-format
+msgid "cannot attach to process %lu"
+msgstr ""
+
+#: elf/pldd.c:246
+#, c-format
+msgid "cannot get information about process %lu"
+msgstr ""
+
+#: elf/pldd.c:259
+#, c-format
+msgid "process %lu is no ELF program"
+msgstr ""
+
+#: elf/readelflib.c:34
+#, c-format
+msgid "file %s is truncated\n"
+msgstr ""
+
+#: elf/readelflib.c:66
+#, c-format
+msgid "%s is a 32 bit ELF file.\n"
+msgstr ""
+
+#: elf/readelflib.c:68
+#, c-format
+msgid "%s is a 64 bit ELF file.\n"
+msgstr ""
+
+#: elf/readelflib.c:70
+#, c-format
+msgid "Unknown ELFCLASS in file %s.\n"
+msgstr ""
+
+#: elf/readelflib.c:77
+#, c-format
+msgid "%s is not a shared object file (Type: %d).\n"
+msgstr ""
+
+#: elf/readelflib.c:108
+#, c-format
+msgid "more than one dynamic segment\n"
+msgstr ""
+
+#: elf/readlib.c:96
+#, c-format
+msgid "Cannot fstat file %s.\n"
+msgstr ""
+
+#: elf/readlib.c:107
+#, c-format
+msgid "File %s is empty, not checked."
+msgstr "Dosiero %s vakas; ne kontroliÄas."
+
+#: elf/readlib.c:113
+#, c-format
+msgid "File %s is too small, not checked."
+msgstr "Dosiero %s tro malgrandas; ne kontroliÄas."
+
+#: elf/readlib.c:123
+#, c-format
+msgid "Cannot mmap file %s.\n"
+msgstr ""
+
+#: elf/readlib.c:161
+#, c-format
+msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n"
+msgstr ""
+
+#: elf/sln.c:84
+#, c-format
+msgid ""
+"Usage: sln src dest|file\n"
+"\n"
+msgstr ""
+
+#: elf/sln.c:109
+#, c-format
+msgid "%s: file open error: %m\n"
+msgstr ""
+
+#: elf/sln.c:146
+#, c-format
+msgid "No target in line %d\n"
+msgstr ""
+
+#: elf/sln.c:178
+#, c-format
+msgid "%s: destination must not be a directory\n"
+msgstr ""
+
+#: elf/sln.c:184
+#, c-format
+msgid "%s: failed to remove the old destination\n"
+msgstr ""
+
+#: elf/sln.c:192
+#, c-format
+msgid "%s: invalid destination: %s\n"
+msgstr "%s: nevalida celo: %s\n"
+
+#: elf/sln.c:207 elf/sln.c:216
+#, c-format
+msgid "Invalid link from \"%s\" to \"%s\": %s\n"
+msgstr ""
+
+#: elf/sotruss.ksh:32
+#, sh-format
+msgid ""
+"Usage: sotruss [OPTION...] [--] EXECUTABLE [EXECUTABLE-OPTION...]\n"
+" -F, --from FROMLIST Trace calls from objects on FROMLIST\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 Give this help list\n"
+" --usage Give a short usage message\n"
+" --version Print program version"
+msgstr ""
+
+#: 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: opcio bezonas argumenton -- «%s»\\n"
+
+#: elf/sotruss.ksh:62
+msgid "%s: option is ambiguous; possibilities:"
+msgstr "%s: opcio estas plursenca; eblaĵoj estas:"
+
+#: elf/sotruss.ksh:80
+msgid "Written by %s.\\n"
+msgstr "Verkita de %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"
+"\t [--help] [--usage] [--version] [--]\n"
+"\t EXECUTABLE [EXECUTABLE-OPTION...]\\n"
+msgstr ""
+
+#: elf/sotruss.ksh:135
+msgid "%s: unrecognized option '%c%s'\\n"
+msgstr "%s: nekonata opcio «%c%s»\\n"
+
+#: elf/sprof.c:76
+msgid "Output selection:"
+msgstr ""
+
+#: elf/sprof.c:78
+msgid "print list of count paths and their number of use"
+msgstr ""
+
+#: elf/sprof.c:80
+msgid "generate flat profile with counts and ticks"
+msgstr ""
+
+#: elf/sprof.c:81
+msgid "generate call graph"
+msgstr ""
+
+#: elf/sprof.c:88
+msgid "Read and display shared object profiling data."
+msgstr ""
+
+#: elf/sprof.c:93
+msgid "SHOBJ [PROFDATA]"
+msgstr ""
+
+#: elf/sprof.c:429
+#, c-format
+msgid "failed to load shared object `%s'"
+msgstr ""
+
+#: elf/sprof.c:438
+#, c-format
+msgid "cannot create internal descriptors"
+msgstr ""
+
+#: elf/sprof.c:550
+#, c-format
+msgid "Reopening shared object `%s' failed"
+msgstr ""
+
+#: elf/sprof.c:557 elf/sprof.c:652
+#, c-format
+msgid "reading of section headers failed"
+msgstr ""
+
+#: elf/sprof.c:565 elf/sprof.c:660
+#, c-format
+msgid "reading of section header string table failed"
+msgstr ""
+
+#: elf/sprof.c:591
+#, c-format
+msgid "*** Cannot read debuginfo file name: %m\n"
+msgstr ""
+
+#: elf/sprof.c:612
+#, c-format
+msgid "cannot determine file name"
+msgstr ""
+
+#: elf/sprof.c:645
+#, c-format
+msgid "reading of ELF header failed"
+msgstr ""
+
+#: elf/sprof.c:681
+#, c-format
+msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
+msgstr ""
+
+#: elf/sprof.c:711
+#, c-format
+msgid "failed to load symbol data"
+msgstr ""
+
+#: elf/sprof.c:776
+#, c-format
+msgid "cannot load profiling data"
+msgstr ""
+
+#: elf/sprof.c:785
+#, c-format
+msgid "while stat'ing profiling data file"
+msgstr ""
+
+#: elf/sprof.c:793
+#, c-format
+msgid "profiling data file `%s' does not match shared object `%s'"
+msgstr ""
+
+#: elf/sprof.c:804
+#, c-format
+msgid "failed to mmap the profiling data file"
+msgstr ""
+
+#: elf/sprof.c:812
+#, c-format
+msgid "error while closing the profiling data file"
+msgstr ""
+
+#: elf/sprof.c:821 elf/sprof.c:919
+#, c-format
+msgid "cannot create internal descriptor"
+msgstr ""
+
+#: elf/sprof.c:895
+#, c-format
+msgid "`%s' is no correct profile data file for `%s'"
+msgstr ""
+
+#: elf/sprof.c:1076 elf/sprof.c:1134
+#, c-format
+msgid "cannot allocate symbol data"
+msgstr ""
+
+#: iconv/iconv_charmap.c:143 iconv/iconv_prog.c:445
+#, c-format
+msgid "cannot open output file"
+msgstr "ne eblas malfermi eligan dosieron"
+
+#: iconv/iconv_charmap.c:189 iconv/iconv_prog.c:311
+#, c-format
+msgid "error while closing input `%s'"
+msgstr "eraro dum fermado de enigo «%s»"
+
+#: iconv/iconv_charmap.c:463
+#, c-format
+msgid "illegal input sequence at position %Zd"
+msgstr "nevalida eniga sekvenco je pozicio %Zd"
+
+#: iconv/iconv_charmap.c:482 iconv/iconv_prog.c:536
+#, c-format
+msgid "incomplete character or shift sequence at end of buffer"
+msgstr "nekompleta signo aÅ­ sekvenco je fino de bufro"
+
+#: iconv/iconv_charmap.c:527 iconv/iconv_charmap.c:563 iconv/iconv_prog.c:579
+#: iconv/iconv_prog.c:615
+#, c-format
+msgid "error while reading the input"
+msgstr "eraro dum legado de enigo"
+
+#: iconv/iconv_charmap.c:545 iconv/iconv_prog.c:597
+#, c-format
+msgid "unable to allocate buffer for input"
+msgstr "mankas sufiĉa memoro por eniga bufro"
+
+#: iconv/iconv_prog.c:59
+msgid "Input/Output format specification:"
+msgstr "Indiko de eniga/eliga aranÄo:"
+
+#: iconv/iconv_prog.c:60
+msgid "encoding of original text"
+msgstr "enkodigo de originala teksto"
+
+#: iconv/iconv_prog.c:61
+msgid "encoding for output"
+msgstr "enkodigo de eligo"
+
+# SIGINFO 29,-,- A synonym for SIGPWR
+#: iconv/iconv_prog.c:62
+msgid "Information:"
+msgstr "Informo:"
+
+#: iconv/iconv_prog.c:63
+msgid "list all known coded character sets"
+msgstr "listigi ĉiujn konatajn signarojn"
+
+#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126
+msgid "Output control:"
+msgstr "Stiro de eligo:"
+
+#: iconv/iconv_prog.c:65
+msgid "omit invalid characters from output"
+msgstr "forlasi nevalidajn signojn de eligo"
+
+#: iconv/iconv_prog.c:66
+msgid "output file"
+msgstr "la eliga dosiero"
+
+#: iconv/iconv_prog.c:67
+msgid "suppress warnings"
+msgstr "forlasi avertojn"
+
+#: iconv/iconv_prog.c:68
+msgid "print progress information"
+msgstr "montri informon pri progreso"
+
+#: iconv/iconv_prog.c:73
+msgid "Convert encoding of given files from one encoding to another."
+msgstr "Konvertas la enkodigon de indikataj dosieroj de iu al alia."
+
+#: iconv/iconv_prog.c:77
+msgid "[FILE...]"
+msgstr "[DOSIERO...]"
+
+#: iconv/iconv_prog.c:233
+#, c-format
+msgid "conversions from `%s' and to `%s' are not supported"
+msgstr "konvertoj el «%s» kaj al «%s» ne subtenatas"
+
+#: iconv/iconv_prog.c:238
+#, c-format
+msgid "conversion from `%s' is not supported"
+msgstr "konverto el «%s» ne subtenatas"
+
+#: iconv/iconv_prog.c:245
+#, c-format
+msgid "conversion to `%s' is not supported"
+msgstr "konverto al «%s» ne subtenatas"
+
+#: iconv/iconv_prog.c:249
+#, c-format
+msgid "conversion from `%s' to `%s' is not supported"
+msgstr "konverto el «%s» al «%s» ne subtenatas"
+
+#: iconv/iconv_prog.c:259
+#, c-format
+msgid "failed to start conversion processing"
+msgstr "malsukcesis startigi konvertan procezadon"
+
+#: iconv/iconv_prog.c:357
+#, c-format
+msgid "error while closing output file"
+msgstr "eraro dum fermado de eliga dosiero"
+
+#: iconv/iconv_prog.c:455
+#, c-format
+msgid "conversion stopped due to problem in writing the output"
+msgstr "konverto haltis kaÅ­ze de problemo je skribado de eligo"
+
+#: iconv/iconv_prog.c:532
+#, c-format
+msgid "illegal input sequence at position %ld"
+msgstr "nevalida eniga sekvenco je pozicio %ld"
+
+#: iconv/iconv_prog.c:540
+#, c-format
+msgid "internal error (illegal descriptor)"
+msgstr "**interna programmiso** (nevalida dosiernumero)"
+
+#: iconv/iconv_prog.c:543
+#, c-format
+msgid "unknown iconv() error %d"
+msgstr "nekonata eraro %d de 'iconv()'"
+
+#: iconv/iconv_prog.c:788
+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"
+"the FROM and TO command line parameters. One coded character set can be\n"
+"listed with several different names (aliases).\n"
+"\n"
+" "
+msgstr ""
+
+#: iconv/iconvconfig.c:109
+msgid "Create fastloading iconv module configuration file."
+msgstr ""
+
+#: iconv/iconvconfig.c:113
+msgid "[DIR...]"
+msgstr ""
+
+#: iconv/iconvconfig.c:126
+msgid "Prefix used for all file accesses"
+msgstr ""
+
+#: iconv/iconvconfig.c:127
+msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)"
+msgstr ""
+
+#: iconv/iconvconfig.c:131
+msgid "Do not search standard directories, only those on the command line"
+msgstr ""
+
+#: iconv/iconvconfig.c:303
+#, c-format
+msgid "Directory arguments required when using --nostdlib"
+msgstr ""
+
+#: iconv/iconvconfig.c:345 locale/programs/localedef.c:287
+#, c-format
+msgid "no output file produced because warnings were issued"
+msgstr ""
+
+#: iconv/iconvconfig.c:431
+#, c-format
+msgid "while inserting in search tree"
+msgstr ""
+
+#: iconv/iconvconfig.c:1240
+#, c-format
+msgid "cannot generate output file"
+msgstr "ne eblas produkti eligan dosieron"
+
+#: inet/rcmd.c:163
+msgid "rcmd: Cannot allocate memory\n"
+msgstr "rcmd: Mankas sufiĉa memoro\n"
+
+#: inet/rcmd.c:178
+msgid "rcmd: socket: All ports in use\n"
+msgstr ""
+
+#: inet/rcmd.c:206
+#, c-format
+msgid "connect to address %s: "
+msgstr ""
+
+#: inet/rcmd.c:219
+#, c-format
+msgid "Trying %s...\n"
+msgstr ""
+
+#: inet/rcmd.c:255
+#, c-format
+msgid "rcmd: write (setting up stderr): %m\n"
+msgstr ""
+
+#: inet/rcmd.c:271
+#, c-format
+msgid "rcmd: poll (setting up stderr): %m\n"
+msgstr ""
+
+#: inet/rcmd.c:274
+msgid "poll: protocol failure in circuit setup\n"
+msgstr ""
+
+#: inet/rcmd.c:306
+msgid "socket: protocol failure in circuit setup\n"
+msgstr ""
+
+#: inet/rcmd.c:330
+#, c-format
+msgid "rcmd: %s: short read"
+msgstr ""
+
+#: inet/rcmd.c:486
+msgid "lstat failed"
+msgstr ""
+
+#: inet/rcmd.c:493
+msgid "cannot open"
+msgstr ""
+
+#: inet/rcmd.c:495
+msgid "fstat failed"
+msgstr ""
+
+#: 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 "mankas sufiĉa memoro"
+
+#: inet/ruserpass.c:184
+msgid "Error: .netrc file is readable by others."
+msgstr ""
+
+#: 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 ""
+
+#: libidn/nfkc.c:462
+msgid "Character out of range for UTF-8"
+msgstr "Signo estas ekster gamo por UTF-8"
+
+#: locale/programs/charmap-dir.c:58
+#, c-format
+msgid "cannot read character map directory `%s'"
+msgstr ""
+
+#: locale/programs/charmap.c:137
+#, c-format
+msgid "character map file `%s' not found"
+msgstr ""
+
+#: locale/programs/charmap.c:194
+#, c-format
+msgid "default character map file `%s' not found"
+msgstr ""
+
+#: locale/programs/charmap.c:257
+#, c-format
+msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n"
+msgstr ""
+
+#: locale/programs/charmap.c:336
+#, c-format
+msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
+msgstr ""
+
+#: locale/programs/charmap.c:356 locale/programs/charmap.c:373
+#: locale/programs/repertoire.c:173
+#, c-format
+msgid "syntax error in prolog: %s"
+msgstr ""
+
+#: locale/programs/charmap.c:357
+msgid "invalid definition"
+msgstr "nevalida difino"
+
+#: locale/programs/charmap.c:374 locale/programs/locfile.c:125
+#: locale/programs/locfile.c:152 locale/programs/repertoire.c:174
+msgid "bad argument"
+msgstr ""
+
+#: locale/programs/charmap.c:402
+#, c-format
+msgid "duplicate definition of <%s>"
+msgstr ""
+
+#: locale/programs/charmap.c:409
+#, c-format
+msgid "value for <%s> must be 1 or greater"
+msgstr ""
+
+#: locale/programs/charmap.c:421
+#, c-format
+msgid "value of <%s> must be greater or equal than the value of <%s>"
+msgstr ""
+
+#: locale/programs/charmap.c:444 locale/programs/repertoire.c:182
+#, c-format
+msgid "argument to <%s> must be a single character"
+msgstr ""
+
+#: locale/programs/charmap.c:470
+msgid "character sets with locking states are not supported"
+msgstr ""
+
+#: 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
+#, c-format
+msgid "syntax error in %s definition: %s"
+msgstr ""
+
+#: locale/programs/charmap.c:498 locale/programs/charmap.c:678
+#: locale/programs/charmap.c:774 locale/programs/repertoire.c:229
+msgid "no symbolic name given"
+msgstr ""
+
+#: locale/programs/charmap.c:552
+msgid "invalid encoding given"
+msgstr ""
+
+#: locale/programs/charmap.c:561
+msgid "too few bytes in character encoding"
+msgstr ""
+
+#: locale/programs/charmap.c:563
+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:295
+msgid "no symbolic name given for end of range"
+msgstr ""
+
+#: locale/programs/charmap.c:609 locale/programs/ld-address.c:601
+#: locale/programs/ld-collate.c:2766 locale/programs/ld-collate.c:3924
+#: locale/programs/ld-ctype.c:2255 locale/programs/ld-ctype.c:3006
+#: locale/programs/ld-identification.c:451
+#: locale/programs/ld-measurement.c:237 locale/programs/ld-messages.c:331
+#: locale/programs/ld-monetary.c:942 locale/programs/ld-name.c:306
+#: locale/programs/ld-numeric.c:367 locale/programs/ld-paper.c:240
+#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1220
+#: locale/programs/repertoire.c:312
+#, c-format
+msgid "%1$s: definition does not end with `END %1$s'"
+msgstr ""
+
+#: locale/programs/charmap.c:642
+msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
+msgstr ""
+
+#: locale/programs/charmap.c:650 locale/programs/charmap.c:713
+#, c-format
+msgid "value for %s must be an integer"
+msgstr ""
+
+#: locale/programs/charmap.c:841
+#, c-format
+msgid "%s: error in state machine"
+msgstr ""
+
+#: locale/programs/charmap.c:849 locale/programs/ld-address.c:617
+#: locale/programs/ld-collate.c:2763 locale/programs/ld-collate.c:4117
+#: locale/programs/ld-ctype.c:2252 locale/programs/ld-ctype.c:3023
+#: locale/programs/ld-identification.c:467
+#: locale/programs/ld-measurement.c:253 locale/programs/ld-messages.c:347
+#: locale/programs/ld-monetary.c:958 locale/programs/ld-name.c:322
+#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:256
+#: locale/programs/ld-telephone.c:328 locale/programs/ld-time.c:1236
+#: locale/programs/locfile.c:825 locale/programs/repertoire.c:323
+#, c-format
+msgid "%s: premature end of file"
+msgstr "%s: trofrua fino de dosiero"
+
+#: locale/programs/charmap.c:868 locale/programs/charmap.c:879
+#, c-format
+msgid "unknown character `%s'"
+msgstr "nekonata signo «%s»"
+
+#: locale/programs/charmap.c:887
+#, c-format
+msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
+msgstr ""
+
+#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:3043
+#: locale/programs/repertoire.c:418
+msgid "invalid names for character range"
+msgstr "nevalidaj nomoj por signogamo"
+
+#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:430
+msgid "hexadecimal range format should use only capital characters"
+msgstr ""
+
+#: locale/programs/charmap.c:1022 locale/programs/repertoire.c:448
+#, c-format
+msgid "<%s> and <%s> are invalid names for range"
+msgstr ""
+
+#: locale/programs/charmap.c:1028 locale/programs/repertoire.c:455
+msgid "upper limit in range is smaller than lower limit"
+msgstr ""
+
+#: locale/programs/charmap.c:1086
+msgid "resulting bytes for range not representable."
+msgstr ""
+
+#: locale/programs/ld-address.c:134 locale/programs/ld-collate.c:1557
+#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:132
+#: locale/programs/ld-measurement.c:93 locale/programs/ld-messages.c:96
+#: locale/programs/ld-monetary.c:193 locale/programs/ld-name.c:93
+#: locale/programs/ld-numeric.c:97 locale/programs/ld-paper.c:90
+#: locale/programs/ld-telephone.c:93 locale/programs/ld-time.c:158
+#, c-format
+msgid "No definition for %s category found"
+msgstr ""
+
+#: locale/programs/ld-address.c:145 locale/programs/ld-address.c:183
+#: locale/programs/ld-address.c:201 locale/programs/ld-address.c:230
+#: locale/programs/ld-address.c:302 locale/programs/ld-address.c:321
+#: locale/programs/ld-address.c:334 locale/programs/ld-identification.c:145
+#: locale/programs/ld-measurement.c:104 locale/programs/ld-monetary.c:205
+#: locale/programs/ld-monetary.c:249 locale/programs/ld-monetary.c:265
+#: locale/programs/ld-monetary.c:277 locale/programs/ld-name.c:104
+#: locale/programs/ld-name.c:141 locale/programs/ld-numeric.c:111
+#: locale/programs/ld-numeric.c:125 locale/programs/ld-paper.c:101
+#: locale/programs/ld-paper.c:110 locale/programs/ld-telephone.c:104
+#: locale/programs/ld-telephone.c:161 locale/programs/ld-time.c:174
+#: locale/programs/ld-time.c:195
+#, c-format
+msgid "%s: field `%s' not defined"
+msgstr ""
+
+#: locale/programs/ld-address.c:157 locale/programs/ld-address.c:209
+#: locale/programs/ld-address.c:239 locale/programs/ld-address.c:277
+#: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116
+#, c-format
+msgid "%s: field `%s' must not be empty"
+msgstr ""
+
+#: locale/programs/ld-address.c:169
+#, c-format
+msgid "%s: invalid escape `%%%c' sequence in field `%s'"
+msgstr ""
+
+#: locale/programs/ld-address.c:220
+#, c-format
+msgid "%s: terminology language code `%s' not defined"
+msgstr ""
+
+#: locale/programs/ld-address.c:245
+#, c-format
+msgid "%s: field `%s' must not be defined"
+msgstr ""
+
+#: locale/programs/ld-address.c:259 locale/programs/ld-address.c:288
+#, c-format
+msgid "%s: language abbreviation `%s' not defined"
+msgstr ""
+
+#: locale/programs/ld-address.c:266 locale/programs/ld-address.c:294
+#: locale/programs/ld-address.c:328 locale/programs/ld-address.c:340
+#, c-format
+msgid "%s: `%s' value does not match `%s' value"
+msgstr ""
+
+#: locale/programs/ld-address.c:313
+#, c-format
+msgid "%s: numeric country code `%d' not valid"
+msgstr ""
+
+#: locale/programs/ld-address.c:509 locale/programs/ld-address.c:546
+#: locale/programs/ld-address.c:584 locale/programs/ld-ctype.c:2630
+#: locale/programs/ld-identification.c:363
+#: locale/programs/ld-measurement.c:220 locale/programs/ld-messages.c:300
+#: locale/programs/ld-monetary.c:700 locale/programs/ld-monetary.c:735
+#: locale/programs/ld-monetary.c:776 locale/programs/ld-name.c:279
+#: locale/programs/ld-numeric.c:262 locale/programs/ld-paper.c:223
+#: locale/programs/ld-telephone.c:287 locale/programs/ld-time.c:1125
+#: locale/programs/ld-time.c:1167
+#, c-format
+msgid "%s: field `%s' declared more than once"
+msgstr ""
+
+#: locale/programs/ld-address.c:513 locale/programs/ld-address.c:551
+#: locale/programs/ld-identification.c:367 locale/programs/ld-messages.c:310
+#: locale/programs/ld-monetary.c:704 locale/programs/ld-monetary.c:739
+#: locale/programs/ld-name.c:283 locale/programs/ld-numeric.c:266
+#: locale/programs/ld-telephone.c:291 locale/programs/ld-time.c:1019
+#: locale/programs/ld-time.c:1088 locale/programs/ld-time.c:1130
+#, c-format
+msgid "%s: unknown character in field `%s'"
+msgstr ""
+
+#: locale/programs/ld-address.c:598 locale/programs/ld-collate.c:3922
+#: locale/programs/ld-ctype.c:3003 locale/programs/ld-identification.c:448
+#: locale/programs/ld-measurement.c:234 locale/programs/ld-messages.c:329
+#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:304
+#: locale/programs/ld-numeric.c:365 locale/programs/ld-paper.c:238
+#: locale/programs/ld-telephone.c:310 locale/programs/ld-time.c:1218
+#, c-format
+msgid "%s: incomplete `END' line"
+msgstr ""
+
+#: locale/programs/ld-address.c:608 locale/programs/ld-collate.c:543
+#: locale/programs/ld-collate.c:595 locale/programs/ld-collate.c:891
+#: locale/programs/ld-collate.c:904 locale/programs/ld-collate.c:2732
+#: locale/programs/ld-collate.c:2753 locale/programs/ld-collate.c:4107
+#: locale/programs/ld-ctype.c:1984 locale/programs/ld-ctype.c:2242
+#: locale/programs/ld-ctype.c:2828 locale/programs/ld-ctype.c:3014
+#: locale/programs/ld-identification.c:458
+#: locale/programs/ld-measurement.c:244 locale/programs/ld-messages.c:338
+#: locale/programs/ld-monetary.c:949 locale/programs/ld-name.c:313
+#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:247
+#: locale/programs/ld-telephone.c:319 locale/programs/ld-time.c:1227
+#, c-format
+msgid "%s: syntax error"
+msgstr "%s: sintakseraro"
+
+#: locale/programs/ld-collate.c:418
+#, c-format
+msgid "`%.*s' already defined in charmap"
+msgstr ""
+
+#: locale/programs/ld-collate.c:427
+#, c-format
+msgid "`%.*s' already defined in repertoire"
+msgstr ""
+
+#: locale/programs/ld-collate.c:434
+#, c-format
+msgid "`%.*s' already defined as collating symbol"
+msgstr ""
+
+#: locale/programs/ld-collate.c:441
+#, c-format
+msgid "`%.*s' already defined as collating element"
+msgstr ""
+
+#: locale/programs/ld-collate.c:472 locale/programs/ld-collate.c:498
+#, c-format
+msgid "%s: `forward' and `backward' are mutually excluding each other"
+msgstr ""
+
+#: locale/programs/ld-collate.c:482 locale/programs/ld-collate.c:508
+#: locale/programs/ld-collate.c:524
+#, c-format
+msgid "%s: `%s' mentioned more than once in definition of weight %d"
+msgstr ""
+
+#: locale/programs/ld-collate.c:580
+#, c-format
+msgid "%s: too many rules; first entry only had %d"
+msgstr ""
+
+#: locale/programs/ld-collate.c:616
+#, c-format
+msgid "%s: not enough sorting rules"
+msgstr ""
+
+#: locale/programs/ld-collate.c:781
+#, c-format
+msgid "%s: empty weight string not allowed"
+msgstr ""
+
+#: locale/programs/ld-collate.c:876
+#, c-format
+msgid "%s: weights must use the same ellipsis symbol as the name"
+msgstr ""
+
+#: locale/programs/ld-collate.c:932
+#, c-format
+msgid "%s: too many values"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1052 locale/programs/ld-collate.c:1227
+#, c-format
+msgid "order for `%.*s' already defined at %s:%Zu"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1102
+#, c-format
+msgid "%s: the start and the end symbol of a range must stand for characters"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1129
+#, c-format
+msgid "%s: byte sequences of first and last character must have the same length"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1171
+#, c-format
+msgid "%s: byte sequence of first character of range is not lower than that of the last character"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1296
+#, c-format
+msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1300
+#, c-format
+msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1320 locale/programs/ld-ctype.c:1501
+#, c-format
+msgid "`%s' and `%.*s' are not valid names for symbolic range"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1370 locale/programs/ld-collate.c:3858
+#, c-format
+msgid "%s: order for `%.*s' already defined at %s:%Zu"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1379
+#, c-format
+msgid "%s: `%s' must be a character"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1574
+#, c-format
+msgid "%s: `position' must be used for a specific level in all sections or none"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1599
+#, c-format
+msgid "symbol `%s' not defined"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1675 locale/programs/ld-collate.c:1781
+#, c-format
+msgid "symbol `%s' has the same encoding as"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1679 locale/programs/ld-collate.c:1785
+#, c-format
+msgid "symbol `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1827
+#, c-format
+msgid "no definition of `UNDEFINED'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1856
+#, c-format
+msgid "too many errors; giving up"
+msgstr ""
+
+#: locale/programs/ld-collate.c:2658 locale/programs/ld-collate.c:4046
+#, c-format
+msgid "%s: nested conditionals not supported"
+msgstr ""
+
+#: locale/programs/ld-collate.c:2676
+#, c-format
+msgid "%s: more then one 'else'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:2851
+#, c-format
+msgid "%s: duplicate definition of `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:2887
+#, c-format
+msgid "%s: duplicate declaration of section `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3023
+#, c-format
+msgid "%s: unknown character in collating symbol name"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3152
+#, c-format
+msgid "%s: unknown character in equivalent definition name"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3163
+#, c-format
+msgid "%s: unknown character in equivalent definition value"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3173
+#, c-format
+msgid "%s: unknown symbol `%s' in equivalent definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3182
+msgid "error while adding equivalent collating symbol"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3220
+#, c-format
+msgid "duplicate definition of script `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3268
+#, c-format
+msgid "%s: unknown section name `%.*s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3297
+#, c-format
+msgid "%s: multiple order definitions for section `%s'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3325
+#, c-format
+msgid "%s: invalid number of sorting rules"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3352
+#, c-format
+msgid "%s: multiple order definitions for unnamed section"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3407 locale/programs/ld-collate.c:3537
+#: locale/programs/ld-collate.c:3900
+#, c-format
+msgid "%s: missing `order_end' keyword"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3470
+#, c-format
+msgid "%s: order for collating symbol %.*s not yet defined"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3488
+#, c-format
+msgid "%s: order for collating element %.*s not yet defined"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3499
+#, c-format
+msgid "%s: cannot reorder after %.*s: symbol not known"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3551 locale/programs/ld-collate.c:3912
+#, c-format
+msgid "%s: missing `reorder-end' keyword"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3585 locale/programs/ld-collate.c:3783
+#, c-format
+msgid "%s: section `%.*s' not known"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3650
+#, c-format
+msgid "%s: bad symbol <%.*s>"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3846
+#, c-format
+msgid "%s: cannot have `%s' as end of ellipsis range"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3896
+#, c-format
+msgid "%s: empty category description not allowed"
+msgstr ""
+
+#: locale/programs/ld-collate.c:3915
+#, c-format
+msgid "%s: missing `reorder-sections-end' keyword"
+msgstr ""
+
+#: locale/programs/ld-collate.c:4079
+#, c-format
+msgid "%s: '%s' without matching 'ifdef' or 'ifndef'"
+msgstr ""
+
+#: locale/programs/ld-collate.c:4097
+#, c-format
+msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:439
+#, c-format
+msgid "No character set name specified in charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:468
+#, c-format
+msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:483
+#, c-format
+msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555
+#, c-format
+msgid "internal error in %s, line %u"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:526
+#, c-format
+msgid "character '%s' in class `%s' must be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:542
+#, c-format
+msgid "character '%s' in class `%s' must not be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610
+#, c-format
+msgid "<SP> character not in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621
+#, c-format
+msgid "<SP> character must not be in class `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:599
+#, c-format
+msgid "character <SP> not defined in character map"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:735
+#, c-format
+msgid "`digit' category has not entries in groups of ten"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:784
+#, c-format
+msgid "no input digits defined and none of the standard names in the charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:849
+#, c-format
+msgid "not all characters used in `outdigit' are available in the charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:866
+#, c-format
+msgid "not all characters used in `outdigit' are available in the repertoire"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1269
+#, c-format
+msgid "character class `%s' already defined"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1275
+#, c-format
+msgid "implementation limit: no more than %Zd character classes allowed"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1301
+#, c-format
+msgid "character map `%s' already defined"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1307
+#, c-format
+msgid "implementation limit: no more than %d character maps allowed"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1572 locale/programs/ld-ctype.c:1697
+#: locale/programs/ld-ctype.c:1803 locale/programs/ld-ctype.c:2493
+#: locale/programs/ld-ctype.c:3489
+#, c-format
+msgid "%s: field `%s' does not contain exactly ten entries"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1600 locale/programs/ld-ctype.c:2174
+#, c-format
+msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1727
+msgid "start and end character sequence of range must have the same length"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:1734
+msgid "to-value character sequence is smaller than from-value sequence"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2094 locale/programs/ld-ctype.c:2145
+msgid "premature end of `translit_ignore' definition"
+msgstr "trofrua fino de difino de 'translit_ignore'"
+
+#: locale/programs/ld-ctype.c:2100 locale/programs/ld-ctype.c:2151
+#: locale/programs/ld-ctype.c:2193
+msgid "syntax error"
+msgstr "sintakseraro"
+
+#: locale/programs/ld-ctype.c:2326
+#, c-format
+msgid "%s: syntax error in definition of new character class"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2341
+#, c-format
+msgid "%s: syntax error in definition of new character map"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2515
+msgid "ellipsis range must be marked by two operands of same type"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2524
+msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2539
+msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2553
+msgid "with character code range values one must use the absolute ellipsis `...'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2704
+#, c-format
+msgid "duplicated definition for mapping `%s'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2790 locale/programs/ld-ctype.c:2934
+#, c-format
+msgid "%s: `translit_start' section does not end with `translit_end'"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2885
+#, c-format
+msgid "%s: duplicate `default_missing' definition"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2890
+msgid "previous definition was here"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:2912
+#, c-format
+msgid "%s: no representable `default_missing' definition found"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3065 locale/programs/ld-ctype.c:3149
+#: locale/programs/ld-ctype.c:3169 locale/programs/ld-ctype.c:3190
+#: locale/programs/ld-ctype.c:3211 locale/programs/ld-ctype.c:3232
+#: locale/programs/ld-ctype.c:3253 locale/programs/ld-ctype.c:3293
+#: locale/programs/ld-ctype.c:3314 locale/programs/ld-ctype.c:3381
+#: locale/programs/ld-ctype.c:3423 locale/programs/ld-ctype.c:3448
+#, c-format
+msgid "%s: character `%s' not defined while needed as default value"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3070 locale/programs/ld-ctype.c:3154
+#: locale/programs/ld-ctype.c:3174 locale/programs/ld-ctype.c:3195
+#: locale/programs/ld-ctype.c:3216 locale/programs/ld-ctype.c:3237
+#: locale/programs/ld-ctype.c:3258 locale/programs/ld-ctype.c:3298
+#: locale/programs/ld-ctype.c:3319 locale/programs/ld-ctype.c:3386
+#, c-format
+msgid "%s: character `%s' in charmap not representable with one byte"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3430 locale/programs/ld-ctype.c:3455
+#, c-format
+msgid "%s: character `%s' needed as default value not representable with one byte"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3511
+#, c-format
+msgid "no output digits defined and none of the standard names in the charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3802
+#, c-format
+msgid "%s: transliteration data from locale `%s' not available"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3903
+#, c-format
+msgid "%s: table for class \"%s\": %lu bytes\n"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3972
+#, c-format
+msgid "%s: table for map \"%s\": %lu bytes\n"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:4105
+#, c-format
+msgid "%s: table for width: %lu bytes\n"
+msgstr ""
+
+#: locale/programs/ld-identification.c:169
+#, c-format
+msgid "%s: no identification for category `%s'"
+msgstr ""
+
+#: locale/programs/ld-identification.c:434
+#, c-format
+msgid "%s: duplicate category version definition"
+msgstr ""
+
+#: locale/programs/ld-measurement.c:112
+#, c-format
+msgid "%s: invalid value for field `%s'"
+msgstr ""
+
+#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147
+#, c-format
+msgid "%s: field `%s' undefined"
+msgstr ""
+
+#: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154
+#: locale/programs/ld-monetary.c:255 locale/programs/ld-numeric.c:117
+#, c-format
+msgid "%s: value for field `%s' must not be an empty string"
+msgstr ""
+
+#: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170
+#, c-format
+msgid "%s: no correct regular expression for field `%s': %s"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:223
+#, c-format
+msgid "%s: value of field `int_curr_symbol' has wrong length"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:236
+#, c-format
+msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:284 locale/programs/ld-monetary.c:314
+#, c-format
+msgid "%s: value for field `%s' must be in range %d...%d"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:273
+#, c-format
+msgid "%s: value for field `%s' must be a single character"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:317
+#, c-format
+msgid "%s: `-1' must be last entry in `%s' field"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:334
+#, c-format
+msgid "%s: values for field `%s' must be smaller than 127"
+msgstr ""
+
+#: locale/programs/ld-monetary.c:908
+msgid "conversion rate value cannot be zero"
+msgstr ""
+
+#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125
+#: locale/programs/ld-telephone.c:148
+#, c-format
+msgid "%s: invalid escape sequence in field `%s'"
+msgstr ""
+
+#: locale/programs/ld-time.c:246
+#, c-format
+msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'"
+msgstr ""
+
+#: locale/programs/ld-time.c:257
+#, c-format
+msgid "%s: direction flag in string %Zd in `era' field is not a single character"
+msgstr ""
+
+#: locale/programs/ld-time.c:270
+#, c-format
+msgid "%s: invalid number for offset in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:278
+#, c-format
+msgid "%s: garbage at end of offset value in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:329
+#, c-format
+msgid "%s: invalid starting date in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:338
+#, c-format
+msgid "%s: garbage at end of starting date in string %Zd in `era' field "
+msgstr ""
+
+#: locale/programs/ld-time.c:357
+#, c-format
+msgid "%s: starting date is invalid in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:406 locale/programs/ld-time.c:434
+#, c-format
+msgid "%s: invalid stopping date in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:415
+#, c-format
+msgid "%s: garbage at end of stopping date in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:443
+#, c-format
+msgid "%s: missing era name in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:455
+#, c-format
+msgid "%s: missing era format in string %Zd in `era' field"
+msgstr ""
+
+#: locale/programs/ld-time.c:496
+#, c-format
+msgid "%s: third operand for value of field `%s' must not be larger than %d"
+msgstr ""
+
+#: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512
+#: locale/programs/ld-time.c:520
+#, c-format
+msgid "%s: values for field `%s' must not be larger than %d"
+msgstr ""
+
+#: locale/programs/ld-time.c:1003
+#, c-format
+msgid "%s: too few values for field `%s'"
+msgstr ""
+
+#: locale/programs/ld-time.c:1048
+msgid "extra trailing semicolon"
+msgstr ""
+
+#: locale/programs/ld-time.c:1051
+#, c-format
+msgid "%s: too many values for field `%s'"
+msgstr ""
+
+#: locale/programs/linereader.c:129
+msgid "trailing garbage at end of line"
+msgstr ""
+
+#: locale/programs/linereader.c:297
+msgid "garbage at end of number"
+msgstr ""
+
+#: locale/programs/linereader.c:409
+msgid "garbage at end of character code specification"
+msgstr ""
+
+#: locale/programs/linereader.c:495
+msgid "unterminated symbolic name"
+msgstr "nefinita simbola nomo"
+
+#: locale/programs/linereader.c:622
+msgid "illegal escape sequence at end of string"
+msgstr ""
+
+# SIGTERM 15 Term Termination signal
+#: locale/programs/linereader.c:626 locale/programs/linereader.c:854
+msgid "unterminated string"
+msgstr "nefinita signoĉeno"
+
+#: locale/programs/linereader.c:668
+msgid "non-symbolic character value should not be used"
+msgstr ""
+
+#: locale/programs/linereader.c:815
+#, c-format
+msgid "symbol `%.*s' not in charmap"
+msgstr ""
+
+#: locale/programs/linereader.c:836
+#, c-format
+msgid "symbol `%.*s' not in repertoire map"
+msgstr ""
+
+#: locale/programs/locale-spec.c:130
+#, c-format
+msgid "unknown name \"%s\""
+msgstr "nekonata nomo \"%s\""
+
+#: locale/programs/locale.c:74
+msgid "System information:"
+msgstr ""
+
+#: locale/programs/locale.c:76
+msgid "Write names of available locales"
+msgstr ""
+
+#: locale/programs/locale.c:78
+msgid "Write names of available charmaps"
+msgstr ""
+
+#: locale/programs/locale.c:79
+msgid "Modify output format:"
+msgstr ""
+
+#: locale/programs/locale.c:80
+msgid "Write names of selected categories"
+msgstr ""
+
+#: locale/programs/locale.c:81
+msgid "Write names of selected keywords"
+msgstr ""
+
+#: locale/programs/locale.c:82
+msgid "Print more information"
+msgstr ""
+
+#: locale/programs/locale.c:87
+msgid "Get locale-specific information."
+msgstr ""
+
+#: locale/programs/locale.c:90
+msgid ""
+"NAME\n"
+"[-a|-m]"
+msgstr ""
+
+#: locale/programs/locale.c:194
+#, c-format
+msgid "Cannot set LC_CTYPE to default locale"
+msgstr ""
+
+#: locale/programs/locale.c:196
+#, c-format
+msgid "Cannot set LC_MESSAGES to default locale"
+msgstr ""
+
+#: locale/programs/locale.c:209
+#, c-format
+msgid "Cannot set LC_COLLATE to default locale"
+msgstr ""
+
+#: locale/programs/locale.c:225
+#, c-format
+msgid "Cannot set LC_ALL to default locale"
+msgstr ""
+
+#: locale/programs/locale.c:518
+#, c-format
+msgid "while preparing output"
+msgstr ""
+
+#: locale/programs/localedef.c:119
+msgid "Input Files:"
+msgstr ""
+
+#: locale/programs/localedef.c:121
+msgid "Symbolic character names defined in FILE"
+msgstr ""
+
+#: locale/programs/localedef.c:122
+msgid "Source definitions are found in FILE"
+msgstr ""
+
+#: locale/programs/localedef.c:124
+msgid "FILE contains mapping from symbolic names to UCS4 values"
+msgstr ""
+
+#: locale/programs/localedef.c:128
+msgid "Create output even if warning messages were issued"
+msgstr ""
+
+#: locale/programs/localedef.c:129
+msgid "Create old-style tables"
+msgstr ""
+
+#: locale/programs/localedef.c:130
+msgid "Optional output file prefix"
+msgstr ""
+
+#: locale/programs/localedef.c:131
+msgid "Be strictly POSIX conform"
+msgstr ""
+
+#: locale/programs/localedef.c:133
+msgid "Suppress warnings and information messages"
+msgstr ""
+
+#: locale/programs/localedef.c:134
+msgid "Print more messages"
+msgstr ""
+
+#: locale/programs/localedef.c:135
+msgid "Archive control:"
+msgstr ""
+
+#: locale/programs/localedef.c:137
+msgid "Don't add new data to archive"
+msgstr ""
+
+#: locale/programs/localedef.c:139
+msgid "Add locales named by parameters to archive"
+msgstr ""
+
+#: locale/programs/localedef.c:140
+msgid "Replace existing archive content"
+msgstr ""
+
+#: locale/programs/localedef.c:142
+msgid "Remove locales named by parameters from archive"
+msgstr ""
+
+#: locale/programs/localedef.c:143
+msgid "List content of archive"
+msgstr ""
+
+#: locale/programs/localedef.c:145
+msgid "locale.alias file to consult when making archive"
+msgstr ""
+
+#: locale/programs/localedef.c:150
+msgid "Compile locale specification"
+msgstr ""
+
+#: locale/programs/localedef.c:153
+msgid ""
+"NAME\n"
+"[--add-to-archive|--delete-from-archive] FILE...\n"
+"--list-archive [FILE]"
+msgstr ""
+
+#: locale/programs/localedef.c:228
+#, c-format
+msgid "cannot create directory for output files"
+msgstr ""
+
+#: locale/programs/localedef.c:239
+#, c-format
+msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
+msgstr ""
+
+#: locale/programs/localedef.c:253 locale/programs/localedef.c:269
+#: locale/programs/localedef.c:595 locale/programs/localedef.c:615
+#, c-format
+msgid "cannot open locale definition file `%s'"
+msgstr ""
+
+#: locale/programs/localedef.c:281
+#, c-format
+msgid "cannot write output files to `%s'"
+msgstr "ne eblas skribi eligajn dosierojn al '%s'"
+
+#: locale/programs/localedef.c:362
+#, c-format
+msgid ""
+"System's directory for character maps : %s\n"
+"\t\t repertoire maps: %s\n"
+"\t\t locale path : %s\n"
+"%s"
+msgstr ""
+
+#: locale/programs/localedef.c:563
+#, c-format
+msgid "circular dependencies between locale definitions"
+msgstr ""
+
+#: locale/programs/localedef.c:569
+#, c-format
+msgid "cannot add already read locale `%s' a second time"
+msgstr ""
+
+#: locale/programs/locarchive.c:113 locale/programs/locarchive.c:347
+#: nss/makedb.c:289
+#, c-format
+msgid "cannot create temporary file"
+msgstr ""
+
+#: locale/programs/locarchive.c:143 locale/programs/locarchive.c:393
+#, c-format
+msgid "cannot initialize archive file"
+msgstr ""
+
+#: locale/programs/locarchive.c:150 locale/programs/locarchive.c:400
+#, c-format
+msgid "cannot resize archive file"
+msgstr ""
+
+#: locale/programs/locarchive.c:163 locale/programs/locarchive.c:413
+#: locale/programs/locarchive.c:619
+#, c-format
+msgid "cannot map archive header"
+msgstr ""
+
+#: locale/programs/locarchive.c:185
+#, c-format
+msgid "failed to create new locale archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:197
+#, c-format
+msgid "cannot change mode of new locale archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:296
+#, c-format
+msgid "cannot read data from locale archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:327
+#, c-format
+msgid "cannot map locale archive file"
+msgstr ""
+
+#: locale/programs/locarchive.c:421
+#, c-format
+msgid "cannot lock new archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:485
+#, c-format
+msgid "cannot extend locale archive file"
+msgstr ""
+
+#: locale/programs/locarchive.c:494
+#, c-format
+msgid "cannot change mode of resized locale archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:502
+#, c-format
+msgid "cannot rename new archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:555
+#, c-format
+msgid "cannot open locale archive \"%s\""
+msgstr ""
+
+#: locale/programs/locarchive.c:560
+#, c-format
+msgid "cannot stat locale archive \"%s\""
+msgstr ""
+
+#: locale/programs/locarchive.c:579
+#, c-format
+msgid "cannot lock locale archive \"%s\""
+msgstr ""
+
+#: locale/programs/locarchive.c:602
+#, c-format
+msgid "cannot read archive header"
+msgstr ""
+
+#: locale/programs/locarchive.c:666
+#, c-format
+msgid "locale '%s' already exists"
+msgstr ""
+
+#: locale/programs/locarchive.c:928 locale/programs/locarchive.c:943
+#: locale/programs/locarchive.c:955 locale/programs/locarchive.c:967
+#: locale/programs/locfile.c:343
+#, c-format
+msgid "cannot add to locale archive"
+msgstr ""
+
+#: locale/programs/locarchive.c:1125
+#, c-format
+msgid "locale alias file `%s' not found"
+msgstr ""
+
+#: locale/programs/locarchive.c:1275
+#, c-format
+msgid "Adding %s\n"
+msgstr ""
+
+#: locale/programs/locarchive.c:1281
+#, c-format
+msgid "stat of \"%s\" failed: %s: ignored"
+msgstr ""
+
+#: locale/programs/locarchive.c:1287
+#, c-format
+msgid "\"%s\" is no directory; ignored"
+msgstr ""
+
+#: locale/programs/locarchive.c:1294
+#, c-format
+msgid "cannot open directory \"%s\": %s: ignored"
+msgstr ""
+
+#: locale/programs/locarchive.c:1366
+#, c-format
+msgid "incomplete set of locale files in \"%s\""
+msgstr ""
+
+#: locale/programs/locarchive.c:1430
+#, c-format
+msgid "cannot read all files in \"%s\": ignored"
+msgstr ""
+
+#: locale/programs/locarchive.c:1500
+#, c-format
+msgid "locale \"%s\" not in archive"
+msgstr ""
+
+#: locale/programs/locfile.c:131
+#, c-format
+msgid "argument to `%s' must be a single character"
+msgstr ""
+
+#: locale/programs/locfile.c:251
+msgid "syntax error: not inside a locale definition section"
+msgstr ""
+
+#: locale/programs/locfile.c:625
+#, c-format
+msgid "cannot open output file `%s' for category `%s'"
+msgstr ""
+
+#: locale/programs/locfile.c:649
+#, c-format
+msgid "failure while writing data for category `%s'"
+msgstr ""
+
+#: locale/programs/locfile.c:745
+#, c-format
+msgid "cannot create output file `%s' for category `%s'"
+msgstr ""
+
+#: locale/programs/locfile.c:781
+msgid "expecting string argument for `copy'"
+msgstr ""
+
+#: locale/programs/locfile.c:785
+msgid "locale name should consist only of portable characters"
+msgstr ""
+
+#: locale/programs/locfile.c:804
+msgid "no other keyword shall be specified when `copy' is used"
+msgstr ""
+
+#: locale/programs/locfile.c:818
+#, c-format
+msgid "`%1$s' definition does not end with `END %1$s'"
+msgstr ""
+
+#: locale/programs/repertoire.c:228 locale/programs/repertoire.c:269
+#: locale/programs/repertoire.c:294
+#, c-format
+msgid "syntax error in repertoire map definition: %s"
+msgstr ""
+
+#: locale/programs/repertoire.c:270
+msgid "no <Uxxxx> or <Uxxxxxxxx> value given"
+msgstr ""
+
+#: locale/programs/repertoire.c:330
+#, c-format
+msgid "cannot save new repertoire map"
+msgstr ""
+
+#: locale/programs/repertoire.c:341
+#, c-format
+msgid "repertoire map file `%s' not found"
+msgstr ""
+
+#: login/programs/pt_chown.c:77
+#, c-format
+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 ""
+
+#: login/programs/pt_chown.c:87
+#, c-format
+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 ""
+
+#: login/programs/pt_chown.c:191
+#, c-format
+msgid "too many arguments"
+msgstr "tro multaj argumentoj"
+
+#: login/programs/pt_chown.c:199
+#, c-format
+msgid "needs to be installed setuid `root'"
+msgstr ""
+
+#: malloc/mcheck.c:349
+msgid "memory is consistent, library is buggy\n"
+msgstr ""
+
+#: malloc/mcheck.c:352
+msgid "memory clobbered before allocated block\n"
+msgstr ""
+
+#: malloc/mcheck.c:355
+msgid "memory clobbered past end of allocated block\n"
+msgstr ""
+
+#: malloc/mcheck.c:358
+msgid "block freed twice\n"
+msgstr ""
+
+#: malloc/mcheck.c:361
+msgid "bogus mcheck_status, library is buggy\n"
+msgstr ""
+
+#: malloc/memusage.sh:32
+msgid "%s: option '%s' requires an argument\\n"
+msgstr "%s: opcio «%s» bezonas argumenton\\n"
+
+#: malloc/memusage.sh:38
+msgid ""
+"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 ""
+
+#: malloc/memusage.sh:100
+msgid ""
+"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 ""
+
+#: malloc/memusage.sh:192
+msgid "memusage: option \\`${1##*=}' is ambiguous"
+msgstr "memusage: opcio «${1##*=}» estas plursenca"
+
+#: malloc/memusage.sh:201
+msgid "memusage: unrecognized option \\`$1'"
+msgstr "memusage: nekonata opcio «$1»"
+
+#: malloc/memusage.sh:214
+msgid "No program name given"
+msgstr "programnomo ne indikatas"
+
+#: malloc/memusagestat.c:56
+msgid "Name output file"
+msgstr ""
+
+#: malloc/memusagestat.c:57
+msgid "Title string used in output graphic"
+msgstr ""
+
+#: malloc/memusagestat.c:58
+msgid "Generate output linear to time (default is linear to number of function calls)"
+msgstr ""
+
+#: malloc/memusagestat.c:60
+msgid "Also draw graph for total memory consumption"
+msgstr ""
+
+#: malloc/memusagestat.c:61
+msgid "Make output graphic VALUE pixels wide"
+msgstr ""
+
+#: malloc/memusagestat.c:62
+msgid "Make output graphic VALUE pixels high"
+msgstr ""
+
+#: malloc/memusagestat.c:67
+msgid "Generate graphic from memory profiling data"
+msgstr ""
+
+#: malloc/memusagestat.c:70
+msgid "DATAFILE [OUTFILE]"
+msgstr ""
+
+#: misc/error.c:117
+msgid "Unknown system error"
+msgstr "Nekonata sistemeraro"
+
+#: nis/nis_callback.c:188
+msgid "unable to free arguments"
+msgstr ""
+
+#: nis/nis_error.h:1 nis/ypclnt.c:832 nis/ypclnt.c:920 posix/regcomp.c:131
+#: sysdeps/gnu/errlist.c:20
+msgid "Success"
+msgstr "Sukceso"
+
+#: nis/nis_error.h:2
+msgid "Probable success"
+msgstr "Probabla sukceso"
+
+#: nis/nis_error.h:3
+msgid "Not found"
+msgstr "Ne troviÄas"
+
+#: nis/nis_error.h:4
+msgid "Probably not found"
+msgstr "Probable ne troviÄas"
+
+#: nis/nis_error.h:5
+msgid "Cache expired"
+msgstr "KaÅmemoro kadukiÄis"
+
+#: nis/nis_error.h:6
+msgid "NIS+ servers unreachable"
+msgstr "NIS+-serviloj ne atingeblas"
+
+#: nis/nis_error.h:7
+msgid "Unknown object"
+msgstr "Nekonata objekto"
+
+#: nis/nis_error.h:8
+#, fuzzy
+msgid "Server busy, try again"
+msgstr "Servilo okupiÄas; reprovu poste"
+
+#: nis/nis_error.h:9
+#, fuzzy
+msgid "Generic system error"
+msgstr "Äœenerala sistemeraro"
+
+#: nis/nis_error.h:10
+msgid "First/next chain broken"
+msgstr "Unua/sekva-ĉeno estas rompita"
+
+#. TRANS Permission denied; the file permissions do not allow the attempted operation.
+#: nis/nis_error.h:11 nis/ypclnt.c:877 sysdeps/gnu/errlist.c:157
+msgid "Permission denied"
+msgstr "Mankas permeso"
+
+#: nis/nis_error.h:12
+msgid "Not owner"
+msgstr "Ne estas posedanto"
+
+#: nis/nis_error.h:13
+#, fuzzy
+msgid "Name not served by this server"
+msgstr "Nomo ne doniÄas per ĉi tiu servilo"
+
+#: nis/nis_error.h:14
+msgid "Server out of memory"
+msgstr "Mankas sufiĉa memoro je servilo"
+
+#: nis/nis_error.h:15
+msgid "Object with same name exists"
+msgstr "Objekto kun tiu nomo jam ekzistas"
+
+#: nis/nis_error.h:16
+msgid "Not master server for this domain"
+msgstr "Ne estas ĉefa servilo por ĉi tiu domajno"
+
+#: nis/nis_error.h:17
+msgid "Invalid object for operation"
+msgstr "Nevalida objekto por operacio"
+
+#: nis/nis_error.h:18
+msgid "Malformed name, or illegal name"
+msgstr "Malformita nomo aÅ­ nevalida nomo"
+
+#: nis/nis_error.h:19
+#, fuzzy
+msgid "Unable to create callback"
+msgstr "Malsukcesis krei realvokon"
+
+#: nis/nis_error.h:20
+#, fuzzy
+msgid "Results sent to callback proc"
+msgstr "Rezultoj sendiÄis al realvokan procezon"
+
+#: nis/nis_error.h:21
+msgid "Not found, no such name"
+msgstr "Ne troviÄas; tiu nomo ne ekzistas"
+
+#: nis/nis_error.h:22
+#, fuzzy
+msgid "Name/entry isn't unique"
+msgstr "Nomo/... ne estas unika"
+
+#: nis/nis_error.h:23
+msgid "Modification failed"
+msgstr "Malsukcesis modifo"
+
+#: nis/nis_error.h:24
+msgid "Database for table does not exist"
+msgstr ""
+
+#: nis/nis_error.h:25
+msgid "Entry/table type mismatch"
+msgstr ""
+
+#: nis/nis_error.h:26
+msgid "Link points to illegal name"
+msgstr "Ligo indikas nevalidan nomon"
+
+#: nis/nis_error.h:27
+msgid "Partial success"
+msgstr "Parta sukceso"
+
+#: nis/nis_error.h:28
+msgid "Too many attributes"
+msgstr "Tro multaj atributoj"
+
+#: nis/nis_error.h:29
+msgid "Error in RPC subsystem"
+msgstr ""
+
+#: nis/nis_error.h:30
+msgid "Missing or malformed attribute"
+msgstr ""
+
+#: nis/nis_error.h:31
+msgid "Named object is not searchable"
+msgstr ""
+
+#: nis/nis_error.h:32
+#, fuzzy
+msgid "Error while talking to callback proc"
+msgstr "Eraro dum komunikado kun realvoka procezo"
+
+#: nis/nis_error.h:33
+msgid "Non NIS+ namespace encountered"
+msgstr ""
+
+#: nis/nis_error.h:34
+msgid "Illegal object type for operation"
+msgstr "Nevalida objekttipo por operacio"
+
+#: nis/nis_error.h:35
+msgid "Passed object is not the same object on server"
+msgstr ""
+
+#: nis/nis_error.h:36
+msgid "Modify operation failed"
+msgstr "Malsukcesis modifa operacio"
+
+#: nis/nis_error.h:37
+msgid "Query illegal for named table"
+msgstr ""
+
+#: nis/nis_error.h:38
+msgid "Attempt to remove a non-empty table"
+msgstr ""
+
+#: nis/nis_error.h:39
+msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?"
+msgstr ""
+
+#: nis/nis_error.h:40
+msgid "Full resync required for directory"
+msgstr ""
+
+#: nis/nis_error.h:41
+msgid "NIS+ operation failed"
+msgstr "Malsukcesis NIS+-operacio"
+
+#: nis/nis_error.h:42
+msgid "NIS+ service is unavailable or not installed"
+msgstr ""
+
+#: nis/nis_error.h:43
+msgid "Yes, 42 is the meaning of life"
+msgstr "Jes, 42 estas la senco de la vivo"
+
+#: nis/nis_error.h:44
+msgid "Unable to authenticate NIS+ server"
+msgstr ""
+
+#: nis/nis_error.h:45
+msgid "Unable to authenticate NIS+ client"
+msgstr ""
+
+#: nis/nis_error.h:46
+msgid "No file space on server"
+msgstr "Mankas spaco por dosieroj je servilo"
+
+#: nis/nis_error.h:47
+msgid "Unable to create process on server"
+msgstr "Malsukcesis krei procezon je servilo"
+
+#: nis/nis_error.h:48
+msgid "Master server busy, full dump rescheduled."
+msgstr ""
+
+#: nis/nis_local_names.c:121
+#, c-format
+msgid "LOCAL entry for UID %d in directory %s not unique\n"
+msgstr ""
+
+#: nis/nis_print.c:50
+msgid "UNKNOWN"
+msgstr "NEKONATA"
+
+#: nis/nis_print.c:108
+msgid "BOGUS OBJECT\n"
+msgstr "FALSA OBJEKTO\n"
+
+#: nis/nis_print.c:111
+msgid "NO OBJECT\n"
+msgstr "NENIU OBJEKTO\n"
+
+#: nis/nis_print.c:114
+msgid "DIRECTORY\n"
+msgstr "DOSIERUJO\n"
+
+#: nis/nis_print.c:117
+msgid "GROUP\n"
+msgstr "GRUPO\n"
+
+#: nis/nis_print.c:120
+msgid "TABLE\n"
+msgstr "TABELO\n"
+
+#: nis/nis_print.c:123
+msgid "ENTRY\n"
+msgstr "ERO\n"
+
+#: nis/nis_print.c:126
+msgid "LINK\n"
+msgstr "LIGO\n"
+
+#: nis/nis_print.c:129
+msgid "PRIVATE\n"
+msgstr "PRIVATA\n"
+
+#: nis/nis_print.c:132
+msgid "(Unknown object)\n"
+msgstr "(Nekonata objekto)\n"
+
+#: nis/nis_print.c:166
+#, c-format
+msgid "Name : `%s'\n"
+msgstr "Nomo : «%s»\n"
+
+#: nis/nis_print.c:167
+#, c-format
+msgid "Type : %s\n"
+msgstr "Tipo : %s\n"
+
+#: nis/nis_print.c:172
+msgid "Master Server :\n"
+msgstr "Ĉefa servilo :\n"
+
+#: nis/nis_print.c:174
+msgid "Replicate :\n"
+msgstr ""
+
+#: nis/nis_print.c:175
+#, c-format
+msgid "\tName : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:176
+msgid "\tPublic Key : "
+msgstr ""
+
+#: nis/nis_print.c:180
+msgid "None.\n"
+msgstr "Nenia.\n"
+
+#: nis/nis_print.c:183
+#, c-format
+msgid "Diffie-Hellmann (%d bits)\n"
+msgstr "Diffie-Hellmann (%d bitoj)\n"
+
+#: nis/nis_print.c:188
+#, c-format
+msgid "RSA (%d bits)\n"
+msgstr "RSA (%d bitoj)\n"
+
+#: nis/nis_print.c:191
+msgid "Kerberos.\n"
+msgstr "Kerberos.\n"
+
+#: nis/nis_print.c:194
+#, c-format
+msgid "Unknown (type = %d, bits = %d)\n"
+msgstr "Nekonata (tipo = %d, bitoj = %d)\n"
+
+#: nis/nis_print.c:205
+#, c-format
+msgid "\tUniversal addresses (%u)\n"
+msgstr ""
+
+#: nis/nis_print.c:227
+msgid "Time to live : "
+msgstr ""
+
+#: nis/nis_print.c:229
+msgid "Default Access rights :\n"
+msgstr ""
+
+#: nis/nis_print.c:238
+#, c-format
+msgid "\tType : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:239
+msgid "\tAccess rights: "
+msgstr ""
+
+#: nis/nis_print.c:253
+msgid "Group Flags :"
+msgstr ""
+
+#: nis/nis_print.c:256
+msgid ""
+"\n"
+"Group Members :\n"
+msgstr ""
+
+#: nis/nis_print.c:268
+#, c-format
+msgid "Table Type : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:269
+#, c-format
+msgid "Number of Columns : %d\n"
+msgstr ""
+
+#: nis/nis_print.c:270
+#, c-format
+msgid "Character Separator : %c\n"
+msgstr ""
+
+#: nis/nis_print.c:271
+#, c-format
+msgid "Search Path : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:272
+msgid "Columns :\n"
+msgstr ""
+
+#: nis/nis_print.c:275
+#, c-format
+msgid "\t[%d]\tName : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:277
+msgid "\t\tAttributes : "
+msgstr ""
+
+#: nis/nis_print.c:279
+msgid "\t\tAccess Rights : "
+msgstr ""
+
+#: nis/nis_print.c:289
+msgid "Linked Object Type : "
+msgstr ""
+
+#: nis/nis_print.c:291
+#, c-format
+msgid "Linked to : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:301
+#, c-format
+msgid "\tEntry data of type %s\n"
+msgstr ""
+
+#: nis/nis_print.c:304
+#, c-format
+msgid "\t[%u] - [%u bytes] "
+msgstr ""
+
+#: nis/nis_print.c:307
+msgid "Encrypted data\n"
+msgstr ""
+
+#: nis/nis_print.c:309
+msgid "Binary data\n"
+msgstr ""
+
+#: nis/nis_print.c:325
+#, c-format
+msgid "Object Name : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:326
+#, c-format
+msgid "Directory : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:327
+#, c-format
+msgid "Owner : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:328
+#, c-format
+msgid "Group : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:329
+msgid "Access Rights : "
+msgstr ""
+
+#: nis/nis_print.c:331
+#, c-format
+msgid ""
+"\n"
+"Time to Live : "
+msgstr ""
+
+#: nis/nis_print.c:334
+#, c-format
+msgid "Creation Time : %s"
+msgstr ""
+
+#: nis/nis_print.c:336
+#, c-format
+msgid "Mod. Time : %s"
+msgstr ""
+
+#: nis/nis_print.c:337
+msgid "Object Type : "
+msgstr ""
+
+#: nis/nis_print.c:357
+#, c-format
+msgid " Data Length = %u\n"
+msgstr ""
+
+#: nis/nis_print.c:371
+#, c-format
+msgid "Status : %s\n"
+msgstr ""
+
+#: nis/nis_print.c:372
+#, c-format
+msgid "Number of objects : %u\n"
+msgstr ""
+
+#: nis/nis_print.c:376
+#, c-format
+msgid "Object #%d:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:117
+#, c-format
+msgid "Group entry for \"%s.%s\" group:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:125
+msgid " Explicit members:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:130
+msgid " No explicit members\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:133
+msgid " Implicit members:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:138
+msgid " No implicit members\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:141
+msgid " Recursive members:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:146
+msgid " No recursive members\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:149
+msgid " Explicit nonmembers:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:154
+msgid " No explicit nonmembers\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:157
+msgid " Implicit nonmembers:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:162
+msgid " No implicit nonmembers\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:165
+msgid " Recursive nonmembers:\n"
+msgstr ""
+
+#: nis/nis_print_group_entry.c:170
+msgid " No recursive nonmembers\n"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:100
+#: nis/nss_nisplus/nisplus-publickey.c:182
+#, c-format
+msgid "DES entry for netname %s not unique\n"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:219
+#, c-format
+msgid "netname2user: missing group id list in `%s'"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:301
+#: nis/nss_nisplus/nisplus-publickey.c:307
+#: nis/nss_nisplus/nisplus-publickey.c:372
+#: nis/nss_nisplus/nisplus-publickey.c:381
+#, c-format
+msgid "netname2user: (nis+ lookup): %s\n"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:320
+#, c-format
+msgid "netname2user: DES entry for %s in directory %s not unique"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:338
+#, c-format
+msgid "netname2user: principal name `%s' too long"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:394
+#, c-format
+msgid "netname2user: LOCAL entry for %s in directory %s not unique"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:401
+msgid "netname2user: should not have uid 0"
+msgstr ""
+
+#: nis/ypclnt.c:835
+msgid "Request arguments bad"
+msgstr ""
+
+#: nis/ypclnt.c:838
+msgid "RPC failure on NIS operation"
+msgstr ""
+
+#: nis/ypclnt.c:841
+msgid "Can't bind to server which serves this domain"
+msgstr ""
+
+#: nis/ypclnt.c:844
+msgid "No such map in server's domain"
+msgstr ""
+
+#: nis/ypclnt.c:847
+msgid "No such key in map"
+msgstr ""
+
+#: nis/ypclnt.c:850
+msgid "Internal NIS error"
+msgstr "Interna NIS-eraro"
+
+#: nis/ypclnt.c:853
+msgid "Local resource allocation failure"
+msgstr ""
+
+#: nis/ypclnt.c:856
+msgid "No more records in map database"
+msgstr ""
+
+#: nis/ypclnt.c:859
+msgid "Can't communicate with portmapper"
+msgstr ""
+
+#: nis/ypclnt.c:862
+msgid "Can't communicate with ypbind"
+msgstr ""
+
+#: nis/ypclnt.c:865
+msgid "Can't communicate with ypserv"
+msgstr ""
+
+#: nis/ypclnt.c:868
+msgid "Local domain name not set"
+msgstr ""
+
+#: nis/ypclnt.c:871
+msgid "NIS map database is bad"
+msgstr ""
+
+#: nis/ypclnt.c:874
+msgid "NIS client/server version mismatch - can't supply service"
+msgstr ""
+
+#: nis/ypclnt.c:880
+msgid "Database is busy"
+msgstr ""
+
+#: nis/ypclnt.c:883
+msgid "Unknown NIS error code"
+msgstr "Nekonata NIS-erarkodo"
+
+#: nis/ypclnt.c:923
+msgid "Internal ypbind error"
+msgstr ""
+
+#: nis/ypclnt.c:926
+msgid "Domain not bound"
+msgstr "Domajno ne estas bindita"
+
+#: nis/ypclnt.c:929
+msgid "System resource allocation failure"
+msgstr ""
+
+#: nis/ypclnt.c:932
+msgid "Unknown ypbind error"
+msgstr ""
+
+#: nis/ypclnt.c:973
+msgid "yp_update: cannot convert host to netname\n"
+msgstr ""
+
+#: nis/ypclnt.c:991
+msgid "yp_update: cannot get server address\n"
+msgstr ""
+
+#: nscd/aicache.c:82 nscd/hstcache.c:493
+#, c-format
+msgid "Haven't found \"%s\" in hosts cache!"
+msgstr ""
+
+#: nscd/aicache.c:84 nscd/hstcache.c:495
+#, c-format
+msgid "Reloading \"%s\" in hosts cache!"
+msgstr ""
+
+#: nscd/cache.c:151
+#, c-format
+msgid "add new entry \"%s\" of type %s for %s to cache%s"
+msgstr ""
+
+#: nscd/cache.c:153
+msgid " (first)"
+msgstr ""
+
+#: nscd/cache.c:285 nscd/connections.c:1002
+#, c-format
+msgid "cannot stat() file `%s': %s"
+msgstr ""
+
+#: nscd/cache.c:331
+#, c-format
+msgid "pruning %s cache; time %ld"
+msgstr ""
+
+#: nscd/cache.c:360
+#, c-format
+msgid "considering %s entry \"%s\", timeout %<PRIu64>"
+msgstr ""
+
+#: nscd/connections.c:570
+#, c-format
+msgid "invalid persistent database file \"%s\": %s"
+msgstr ""
+
+#: nscd/connections.c:578
+msgid "uninitialized header"
+msgstr ""
+
+#: nscd/connections.c:583
+msgid "header size does not match"
+msgstr ""
+
+#: nscd/connections.c:593
+msgid "file size does not match"
+msgstr ""
+
+#: nscd/connections.c:610
+msgid "verification failed"
+msgstr ""
+
+#: nscd/connections.c:624
+#, c-format
+msgid "suggested size of table for database %s larger than the persistent database's table"
+msgstr ""
+
+#: nscd/connections.c:635 nscd/connections.c:720
+#, c-format
+msgid "cannot create read-only descriptor for \"%s\"; no mmap"
+msgstr ""
+
+#: nscd/connections.c:651
+#, c-format
+msgid "cannot access '%s'"
+msgstr ""
+
+#: nscd/connections.c:699
+#, c-format
+msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart"
+msgstr ""
+
+#: nscd/connections.c:706
+#, c-format
+msgid "cannot create %s; no persistent database used"
+msgstr ""
+
+#: nscd/connections.c:709
+#, c-format
+msgid "cannot create %s; no sharing possible"
+msgstr ""
+
+#: nscd/connections.c:780
+#, c-format
+msgid "cannot write to database file %s: %s"
+msgstr ""
+
+#: nscd/connections.c:819
+#, c-format
+msgid "cannot set socket to close on exec: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:868
+#, c-format
+msgid "cannot open socket: %s"
+msgstr ""
+
+#: nscd/connections.c:888 nscd/connections.c:952
+#, c-format
+msgid "cannot change socket to nonblocking mode: %s"
+msgstr ""
+
+#: nscd/connections.c:896 nscd/connections.c:962
+#, c-format
+msgid "cannot set socket to close on exec: %s"
+msgstr ""
+
+#: nscd/connections.c:909
+#, c-format
+msgid "cannot enable socket to accept connections: %s"
+msgstr ""
+
+#: nscd/connections.c:986
+#, c-format
+msgid "register trace file %s for database %s"
+msgstr ""
+
+#: nscd/connections.c:1116
+#, c-format
+msgid "provide access to FD %d, for %s"
+msgstr ""
+
+#: nscd/connections.c:1128
+#, c-format
+msgid "cannot handle old request version %d; current version is %d"
+msgstr ""
+
+#: nscd/connections.c:1150
+#, c-format
+msgid "request from %ld not handled due to missing permission"
+msgstr ""
+
+#: nscd/connections.c:1155
+#, c-format
+msgid "request from '%s' [%ld] not handled due to missing permission"
+msgstr ""
+
+#: nscd/connections.c:1160
+msgid "request not handled due to missing permission"
+msgstr ""
+
+#: nscd/connections.c:1198 nscd/connections.c:1251
+#, c-format
+msgid "cannot write result: %s"
+msgstr ""
+
+#: nscd/connections.c:1342
+#, c-format
+msgid "error getting caller's id: %s"
+msgstr ""
+
+#: nscd/connections.c:1402
+#, c-format
+msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:1416
+#, c-format
+msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:1456
+#, c-format
+msgid "cannot change to old UID: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:1466
+#, c-format
+msgid "cannot change to old GID: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:1479
+#, c-format
+msgid "cannot change to old working directory: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:1525
+#, c-format
+msgid "re-exec failed: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/connections.c:1534
+#, c-format
+msgid "cannot change current working directory to \"/\": %s"
+msgstr ""
+
+#: nscd/connections.c:1727
+#, c-format
+msgid "short read while reading request: %s"
+msgstr ""
+
+#: nscd/connections.c:1760
+#, c-format
+msgid "key length in request too long: %d"
+msgstr ""
+
+#: nscd/connections.c:1773
+#, c-format
+msgid "short read while reading request key: %s"
+msgstr ""
+
+#: nscd/connections.c:1782
+#, c-format
+msgid "handle_request: request received (Version = %d) from PID %ld"
+msgstr ""
+
+#: nscd/connections.c:1787
+#, c-format
+msgid "handle_request: request received (Version = %d)"
+msgstr ""
+
+#: nscd/connections.c:1999 nscd/connections.c:2227
+#, c-format
+msgid "disabled inotify after read error %d"
+msgstr ""
+
+#: nscd/connections.c:2374
+msgid "could not initialize conditional variable"
+msgstr ""
+
+#: nscd/connections.c:2382
+msgid "could not start clean-up thread; terminating"
+msgstr ""
+
+#: nscd/connections.c:2396
+msgid "could not start any worker thread; terminating"
+msgstr ""
+
+#: nscd/connections.c:2447 nscd/connections.c:2448 nscd/connections.c:2465
+#: nscd/connections.c:2474 nscd/connections.c:2492 nscd/connections.c:2503
+#: nscd/connections.c:2514
+#, c-format
+msgid "Failed to run nscd as user '%s'"
+msgstr ""
+
+#: nscd/connections.c:2466
+#, c-format
+msgid "initial getgrouplist failed"
+msgstr ""
+
+#: nscd/connections.c:2475
+#, c-format
+msgid "getgrouplist failed"
+msgstr ""
+
+#: nscd/connections.c:2493
+#, c-format
+msgid "setgroups failed"
+msgstr ""
+
+#: nscd/grpcache.c:390 nscd/hstcache.c:440 nscd/initgrcache.c:411
+#: nscd/pwdcache.c:383 nscd/servicescache.c:338
+#, c-format
+msgid "short write in %s: %s"
+msgstr ""
+
+#: nscd/grpcache.c:435 nscd/initgrcache.c:77
+#, c-format
+msgid "Haven't found \"%s\" in group cache!"
+msgstr ""
+
+#: nscd/grpcache.c:437 nscd/initgrcache.c:79
+#, c-format
+msgid "Reloading \"%s\" in group cache!"
+msgstr ""
+
+#: nscd/grpcache.c:516
+#, c-format
+msgid "Invalid numeric gid \"%s\"!"
+msgstr ""
+
+#: nscd/mem.c:425
+#, c-format
+msgid "freed %zu bytes in %s cache"
+msgstr ""
+
+#: nscd/mem.c:568
+#, c-format
+msgid "no more memory for database '%s'"
+msgstr ""
+
+#: nscd/netgroupcache.c:77
+#, c-format
+msgid "Haven't found \"%s\" in netgroup cache!"
+msgstr ""
+
+#: nscd/netgroupcache.c:79
+#, c-format
+msgid "Reloading \"%s\" in netgroup cache!"
+msgstr ""
+
+#: nscd/netgroupcache.c:467
+#, c-format
+msgid "Haven't found \"%s (%s,%s,%s)\" in netgroup cache!"
+msgstr ""
+
+#: nscd/netgroupcache.c:470
+#, c-format
+msgid "Reloading \"%s (%s,%s,%s)\" in netgroup cache!"
+msgstr ""
+
+#: nscd/nscd.c:116
+msgid "Read configuration data from NAME"
+msgstr ""
+
+#: nscd/nscd.c:118
+msgid "Do not fork and display messages on the current tty"
+msgstr ""
+
+#: nscd/nscd.c:120
+msgid "Do not fork, but otherwise behave like a daemon"
+msgstr ""
+
+#: nscd/nscd.c:121
+msgid "NUMBER"
+msgstr ""
+
+#: nscd/nscd.c:121
+msgid "Start NUMBER threads"
+msgstr ""
+
+#: nscd/nscd.c:122
+msgid "Shut the server down"
+msgstr ""
+
+#: nscd/nscd.c:123
+msgid "Print current configuration statistics"
+msgstr ""
+
+#: nscd/nscd.c:124
+msgid "TABLE"
+msgstr ""
+
+#: nscd/nscd.c:125
+msgid "Invalidate the specified cache"
+msgstr ""
+
+#: nscd/nscd.c:126
+msgid "TABLE,yes"
+msgstr ""
+
+#: nscd/nscd.c:127
+msgid "Use separate cache for each user"
+msgstr ""
+
+#: nscd/nscd.c:132
+msgid "Name Service Cache Daemon."
+msgstr ""
+
+#: nscd/nscd.c:164 nss/getent.c:999 nss/makedb.c:207
+#, c-format
+msgid "wrong number of arguments"
+msgstr ""
+
+#: nscd/nscd.c:174
+#, c-format
+msgid "failure while reading configuration file; this is fatal"
+msgstr ""
+
+#: nscd/nscd.c:183
+#, c-format
+msgid "already running"
+msgstr ""
+
+#: nscd/nscd.c:201 nscd/nscd.c:259
+#, c-format
+msgid "cannot fork"
+msgstr "malsukcesis krei novan procezon"
+
+#: nscd/nscd.c:268
+#, c-format
+msgid "cannot change current working directory to \"/\""
+msgstr ""
+
+#: nscd/nscd.c:276
+msgid "Could not create log file"
+msgstr ""
+
+#: nscd/nscd.c:346 nscd/nscd.c:371 nscd/nscd_stat.c:173
+#, c-format
+msgid "Only root is allowed to use this option!"
+msgstr ""
+
+#: nscd/nscd.c:386
+#, c-format
+msgid "'%s' is not a known database"
+msgstr ""
+
+#: nscd/nscd.c:411 nscd/nscd_stat.c:192
+#, c-format
+msgid "write incomplete"
+msgstr ""
+
+#: nscd/nscd.c:422
+#, c-format
+msgid "cannot read invalidate ACK"
+msgstr ""
+
+#: nscd/nscd.c:428
+#, c-format
+msgid "invalidation failed"
+msgstr "malsukcesis malvalidigo"
+
+#: nscd/nscd.c:438
+#, c-format
+msgid "secure services not implemented anymore"
+msgstr ""
+
+#: nscd/nscd_conf.c:57
+#, c-format
+msgid "database %s is not supported"
+msgstr ""
+
+#: nscd/nscd_conf.c:108
+#, c-format
+msgid "Parse error: %s"
+msgstr ""
+
+#: nscd/nscd_conf.c:194
+#, c-format
+msgid "Must specify user name for server-user option"
+msgstr ""
+
+#: nscd/nscd_conf.c:201
+#, c-format
+msgid "Must specify user name for stat-user option"
+msgstr ""
+
+#: nscd/nscd_conf.c:258
+#, c-format
+msgid "Must specify value for restart-interval option"
+msgstr ""
+
+#: nscd/nscd_conf.c:272
+#, c-format
+msgid "Unknown option: %s %s %s"
+msgstr ""
+
+#: nscd/nscd_conf.c:285
+#, c-format
+msgid "cannot get current working directory: %s; disabling paranoia mode"
+msgstr ""
+
+#: nscd/nscd_conf.c:305
+#, c-format
+msgid "maximum file size for %s database too small"
+msgstr ""
+
+#: nscd/nscd_stat.c:142
+#, c-format
+msgid "cannot write statistics: %s"
+msgstr ""
+
+#: nscd/nscd_stat.c:157
+msgid "yes"
+msgstr "jes"
+
+#: nscd/nscd_stat.c:158
+msgid "no"
+msgstr "ne"
+
+#: nscd/nscd_stat.c:169
+#, c-format
+msgid "Only root or %s is allowed to use this option!"
+msgstr ""
+
+#: nscd/nscd_stat.c:180
+#, c-format
+msgid "nscd not running!\n"
+msgstr ""
+
+#: nscd/nscd_stat.c:204
+#, c-format
+msgid "cannot read statistics data"
+msgstr ""
+
+#: nscd/nscd_stat.c:207
+#, c-format
+msgid ""
+"nscd configuration:\n"
+"\n"
+"%15d server debug level\n"
+msgstr ""
+
+#: nscd/nscd_stat.c:231
+#, c-format
+msgid "%3ud %2uh %2um %2lus server runtime\n"
+msgstr ""
+
+#: nscd/nscd_stat.c:234
+#, c-format
+msgid " %2uh %2um %2lus server runtime\n"
+msgstr ""
+
+#: nscd/nscd_stat.c:236
+#, c-format
+msgid " %2um %2lus server runtime\n"
+msgstr ""
+
+#: nscd/nscd_stat.c:238
+#, c-format
+msgid " %2lus server runtime\n"
+msgstr ""
+
+#: nscd/nscd_stat.c:240
+#, 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 ""
+
+#: nscd/nscd_stat.c:275
+#, 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 ""
+
+#: nscd/pwdcache.c:428
+#, c-format
+msgid "Haven't found \"%s\" in password cache!"
+msgstr ""
+
+#: nscd/pwdcache.c:430
+#, c-format
+msgid "Reloading \"%s\" in password cache!"
+msgstr ""
+
+#: nscd/pwdcache.c:511
+#, c-format
+msgid "Invalid numeric uid \"%s\"!"
+msgstr ""
+
+#: nscd/selinux.c:160
+#, c-format
+msgid "Failed opening connection to the audit subsystem: %m"
+msgstr ""
+
+#: nscd/selinux.c:181
+msgid "Failed to set keep-capabilities"
+msgstr ""
+
+#: nscd/selinux.c:182 nscd/selinux.c:245
+#, c-format
+msgid "prctl(KEEPCAPS) failed"
+msgstr ""
+
+#: nscd/selinux.c:196
+msgid "Failed to initialize drop of capabilities"
+msgstr ""
+
+#: nscd/selinux.c:197
+#, c-format
+msgid "cap_init failed"
+msgstr ""
+
+#: nscd/selinux.c:218 nscd/selinux.c:235
+msgid "Failed to drop capabilities"
+msgstr ""
+
+#: nscd/selinux.c:219 nscd/selinux.c:236
+#, c-format
+msgid "cap_set_proc failed"
+msgstr ""
+
+#: nscd/selinux.c:244
+msgid "Failed to unset keep-capabilities"
+msgstr ""
+
+#: nscd/selinux.c:260
+msgid "Failed to determine if kernel supports SELinux"
+msgstr ""
+
+#: nscd/selinux.c:275
+#, c-format
+msgid "Failed to start AVC thread"
+msgstr ""
+
+#: nscd/selinux.c:297
+#, c-format
+msgid "Failed to create AVC lock"
+msgstr ""
+
+#: nscd/selinux.c:337
+#, c-format
+msgid "Failed to start AVC"
+msgstr ""
+
+#: nscd/selinux.c:339
+msgid "Access Vector Cache (AVC) started"
+msgstr ""
+
+#: nscd/selinux.c:360
+msgid "Error getting context of socket peer"
+msgstr ""
+
+#: nscd/selinux.c:365
+msgid "Error getting context of nscd"
+msgstr ""
+
+#: nscd/selinux.c:371
+msgid "Error getting sid from context"
+msgstr ""
+
+#: nscd/selinux.c:378
+msgid "compile-time support for database policy missing"
+msgstr ""
+
+#: nscd/selinux.c:411
+#, 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 ""
+
+#: nscd/servicescache.c:387
+#, c-format
+msgid "Haven't found \"%s\" in services cache!"
+msgstr ""
+
+#: nscd/servicescache.c:389
+#, c-format
+msgid "Reloading \"%s\" in services cache!"
+msgstr ""
+
+#: nss/getent.c:53
+msgid "database [key ...]"
+msgstr ""
+
+#: nss/getent.c:58
+msgid "Service configuration to be used"
+msgstr ""
+
+#: nss/getent.c:59
+msgid "disable IDN encoding"
+msgstr ""
+
+#: nss/getent.c:64
+msgid "Get entries from administrative database."
+msgstr ""
+
+#: nss/getent.c:148 nss/getent.c:477 nss/getent.c:522
+#, c-format
+msgid "Enumeration not supported on %s\n"
+msgstr ""
+
+#: nss/getent.c:913
+#, c-format
+msgid "Unknown database name"
+msgstr ""
+
+#: nss/getent.c:943
+msgid "Supported databases:\n"
+msgstr ""
+
+#: nss/getent.c:1009
+#, c-format
+msgid "Unknown database: %s\n"
+msgstr ""
+
+#: nss/makedb.c:117
+msgid "Convert key to lower case"
+msgstr ""
+
+#: nss/makedb.c:120
+msgid "Do not print messages while building database"
+msgstr ""
+
+#: nss/makedb.c:122
+msgid "Print content of database file, one entry a line"
+msgstr ""
+
+#: nss/makedb.c:123
+msgid "CHAR"
+msgstr ""
+
+#: nss/makedb.c:124
+msgid "Generated line not part of iteration"
+msgstr ""
+
+#: nss/makedb.c:129
+msgid "Create simple database from textual input."
+msgstr ""
+
+#: nss/makedb.c:132
+msgid ""
+"INPUT-FILE OUTPUT-FILE\n"
+"-o OUTPUT-FILE INPUT-FILE\n"
+"-u INPUT-FILE"
+msgstr ""
+
+#: nss/makedb.c:228
+#, c-format
+msgid "cannot open database file `%s'"
+msgstr ""
+
+#: nss/makedb.c:273
+#, c-format
+msgid "no entries to be processed"
+msgstr ""
+
+#: nss/makedb.c:283
+#, c-format
+msgid "cannot create temporary file name"
+msgstr ""
+
+#: nss/makedb.c:305
+#, c-format
+msgid "cannot stat newly created file"
+msgstr ""
+
+#: nss/makedb.c:316
+#, c-format
+msgid "cannot rename temporary file"
+msgstr ""
+
+#: nss/makedb.c:529 nss/makedb.c:552
+#, c-format
+msgid "cannot create search tree"
+msgstr ""
+
+#: nss/makedb.c:558
+msgid "duplicate key"
+msgstr ""
+
+#: nss/makedb.c:570
+#, c-format
+msgid "problems while reading `%s'"
+msgstr ""
+
+#: nss/makedb.c:794
+#, c-format
+msgid "failed to write new database file"
+msgstr ""
+
+#: nss/makedb.c:807
+#, c-format
+msgid "cannot stat database file"
+msgstr ""
+
+#: nss/makedb.c:812
+#, c-format
+msgid "cannot map database file"
+msgstr ""
+
+#: nss/makedb.c:815
+#, c-format
+msgid "file not a database file"
+msgstr ""
+
+#: nss/makedb.c:866
+#, c-format
+msgid "cannot set file creation context for `%s'"
+msgstr ""
+
+#: ports/sysdeps/unix/sysv/linux/ia64/makecontext.c:62
+#, c-format
+msgid "makecontext: does not know how to handle more than 8 arguments\n"
+msgstr ""
+
+#: posix/getconf.c:1035
+#, c-format
+msgid "Usage: %s [-v specification] variable_name [pathname]\n"
+msgstr ""
+
+#: posix/getconf.c:1038
+#, c-format
+msgid " %s -a [pathname]\n"
+msgstr ""
+
+#: posix/getconf.c:1114
+#, 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 ""
+
+#: posix/getconf.c:1172
+#, c-format
+msgid "unknown specification \"%s\""
+msgstr ""
+
+#: posix/getconf.c:1224
+#, c-format
+msgid "Couldn't execute %s"
+msgstr ""
+
+#: posix/getconf.c:1268 posix/getconf.c:1284
+msgid "undefined"
+msgstr ""
+
+#: posix/getconf.c:1306
+#, c-format
+msgid "Unrecognized variable `%s'"
+msgstr ""
+
+#: posix/getopt.c:593 posix/getopt.c:622
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: opcio «%s» estas plursenca; eblaĵoj estas:"
+
+#: posix/getopt.c:663 posix/getopt.c:667
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: opcio «--%s» ne toleras argumenton\n"
+
+#: posix/getopt.c:676 posix/getopt.c:681
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: opcio «%c%s» ne toleras argumenton\n"
+
+#: posix/getopt.c:724 posix/getopt.c:743
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: opcio «--%s» bezonas argumenton\n"
+
+#: posix/getopt.c:781 posix/getopt.c:784
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: nekonata opcio «--%s»\n"
+
+#: posix/getopt.c:792 posix/getopt.c:795
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: nekonata opcio «%c%s»\n"
+
+#: posix/getopt.c:844 posix/getopt.c:847
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: nevalida opcio -- «%c»\n"
+
+#: posix/getopt.c:900 posix/getopt.c:917 posix/getopt.c:1127
+#: posix/getopt.c:1145
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opcio bezonas argumenton -- «%c»\n"
+
+#: posix/getopt.c:973 posix/getopt.c:989
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: opcio «-W %s» estas plursenca\n"
+
+#: posix/getopt.c:1013 posix/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: opcio «-W %s» ne toleras argumenton\n"
+
+#: posix/getopt.c:1052 posix/getopt.c:1070
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: opcio «-W %s» bezonas argumenton\n"
+
+#: posix/regcomp.c:134
+msgid "No match"
+msgstr "Neniu trafo"
+
+#: posix/regcomp.c:137
+msgid "Invalid regular expression"
+msgstr "Nevalida regulesprimo"
+
+#: posix/regcomp.c:140
+msgid "Invalid collation character"
+msgstr "Nevalida kunmetita signo"
+
+#: posix/regcomp.c:143
+msgid "Invalid character class name"
+msgstr "Nevalida nomo de signoklaso"
+
+#: posix/regcomp.c:146
+msgid "Trailing backslash"
+msgstr "Malsuprenstreko '\\' ĉe la fino"
+
+#: posix/regcomp.c:149
+msgid "Invalid back reference"
+msgstr "Nevalida retroreferenco"
+
+#: posix/regcomp.c:152
+msgid "Unmatched [ or [^"
+msgstr "Senpara [ aÅ­ [^"
+
+#: posix/regcomp.c:155
+msgid "Unmatched ( or \\("
+msgstr "Senpara ( aÅ­ \\("
+
+#: posix/regcomp.c:158
+msgid "Unmatched \\{"
+msgstr "Senpara \\{"
+
+#: posix/regcomp.c:161
+msgid "Invalid content of \\{\\}"
+msgstr "Nevalida enhavo de \\{\\}"
+
+#: posix/regcomp.c:164
+msgid "Invalid range end"
+msgstr "Nevalida fino de gamo"
+
+#: posix/regcomp.c:167
+msgid "Memory exhausted"
+msgstr "Mankas sufiĉa memoro"
+
+#: posix/regcomp.c:170
+msgid "Invalid preceding regular expression"
+msgstr "Nevalida antaÅ­a regulesprimo"
+
+#: posix/regcomp.c:173
+msgid "Premature end of regular expression"
+msgstr "Neatendita fino de regulesprimo"
+
+#: posix/regcomp.c:176
+msgid "Regular expression too big"
+msgstr "Regulesprimo tro grandas"
+
+#: posix/regcomp.c:179
+msgid "Unmatched ) or \\)"
+msgstr "Senpara ) aÅ­ \\)"
+
+#: posix/regcomp.c:679
+msgid "No previous regular expression"
+msgstr "Mankas antaÅ­a regulesprimo"
+
+#: posix/wordexp.c:1829
+msgid "parameter null or not set"
+msgstr ""
+
+#: resolv/herror.c:68
+msgid "Resolver Error 0 (no error)"
+msgstr ""
+
+#: resolv/herror.c:69
+msgid "Unknown host"
+msgstr "Nekonata gastiga komputilo"
+
+#: resolv/herror.c:70
+msgid "Host name lookup failure"
+msgstr "Malsukcesis eltrovo de nomo de gastiga komputilo"
+
+#: resolv/herror.c:71
+msgid "Unknown server error"
+msgstr "Nekonata eraro je servilo"
+
+#: resolv/herror.c:72
+msgid "No address associated with name"
+msgstr "Neniu adreso estas asociata kun nomo"
+
+#: resolv/herror.c:107
+msgid "Resolver internal error"
+msgstr "Interna eraro en adrestrovilo"
+
+#: resolv/herror.c:110
+msgid "Unknown resolver error"
+msgstr "Nekonata eraro en adrestrovilo"
+
+#: resolv/res_hconf.c:122
+#, c-format
+msgid "%s: line %d: cannot specify more than %d trim domains"
+msgstr ""
+
+#: resolv/res_hconf.c:143
+#, c-format
+msgid "%s: line %d: list delimiter not followed by domain"
+msgstr ""
+
+#: resolv/res_hconf.c:202
+#, c-format
+msgid "%s: line %d: expected `on' or `off', found `%s'\n"
+msgstr ""
+
+#: resolv/res_hconf.c:245
+#, c-format
+msgid "%s: line %d: bad command `%s'\n"
+msgstr ""
+
+#: resolv/res_hconf.c:280
+#, c-format
+msgid "%s: line %d: ignoring trailing garbage `%s'\n"
+msgstr ""
+
+#: stdio-common/psiginfo-data.h:2
+msgid "Illegal opcode"
+msgstr "Nevalida instrukcia kodo"
+
+#: stdio-common/psiginfo-data.h:3
+msgid "Illegal operand"
+msgstr "Nevalida operando"
+
+#: stdio-common/psiginfo-data.h:4
+msgid "Illegal addressing mode"
+msgstr "Nevalida adresada moduso"
+
+#: stdio-common/psiginfo-data.h:5
+msgid "Illegal trap"
+msgstr "Nevalida 'trap'-instrukcio"
+
+#: stdio-common/psiginfo-data.h:6
+msgid "Privileged opcode"
+msgstr "Privilegiata instrukcia kodo"
+
+#: stdio-common/psiginfo-data.h:7
+msgid "Privileged register"
+msgstr "Privilegiata reÄistro"
+
+#: stdio-common/psiginfo-data.h:8
+msgid "Coprocessor error"
+msgstr "Kromprocesora eraro"
+
+#: stdio-common/psiginfo-data.h:9
+msgid "Internal stack error"
+msgstr "Interna stak-eraro"
+
+#: stdio-common/psiginfo-data.h:12
+msgid "Integer divide by zero"
+msgstr "Entjerdivido per nulo"
+
+#: stdio-common/psiginfo-data.h:13
+msgid "Integer overflow"
+msgstr "Entjertroo"
+
+#: stdio-common/psiginfo-data.h:14
+msgid "Floating-point divide by zero"
+msgstr "Glitkomdivido per nulo"
+
+#: stdio-common/psiginfo-data.h:15
+msgid "Floating-point overflow"
+msgstr "Glitkomkalkul-troo"
+
+#: stdio-common/psiginfo-data.h:16
+msgid "Floating-point underflow"
+msgstr "Glitkomkalkul-maltroo"
+
+#: stdio-common/psiginfo-data.h:17
+msgid "Floating-poing inexact result"
+msgstr "Neekzakta glitkomkalkul-rezulto"
+
+#: stdio-common/psiginfo-data.h:18
+msgid "Invalid floating-point operation"
+msgstr "Nevalida glitkomkalkul-operacio"
+
+#: stdio-common/psiginfo-data.h:19
+msgid "Subscript out of range"
+msgstr "Indico estas ekster gamo"
+
+#: stdio-common/psiginfo-data.h:22
+msgid "Address not mapped to object"
+msgstr "Adreso ne estas ligata al iu objekto"
+
+#: stdio-common/psiginfo-data.h:23
+msgid "Invalid permissions for mapped object"
+msgstr "Nevalida permesoj por ligata objekto"
+
+#: stdio-common/psiginfo-data.h:26
+#, fuzzy
+msgid "Invalid address alignment"
+msgstr "Nevalida ... de adreso"
+
+#: stdio-common/psiginfo-data.h:27
+msgid "Nonexisting physical address"
+msgstr "Neekzistanta fizika adreso"
+
+#: stdio-common/psiginfo-data.h:28
+msgid "Object-specific hardware error"
+msgstr "Objektspecifa aparata eraro"
+
+#: stdio-common/psiginfo-data.h:31
+msgid "Process breakpoint"
+msgstr "Procezo-romppunkto"
+
+#: stdio-common/psiginfo-data.h:32
+msgid "Process trace trap"
+msgstr "Procezo-spuruma instrukcio"
+
+#: stdio-common/psiginfo-data.h:35
+msgid "Child has exited"
+msgstr "Ido finis"
+
+#: stdio-common/psiginfo-data.h:36
+msgid "Child has terminated abnormally and did not create a core file"
+msgstr "Ido ĉesis nenormale kaj ne kreis nekropsian 'core'-dosieron"
+
+#: stdio-common/psiginfo-data.h:37
+msgid "Child hat terminated abnormally and created a core file"
+msgstr "Ido ĉesis nenormale kaj kreis nekropsian 'core'-dosieron"
+
+#: stdio-common/psiginfo-data.h:38
+msgid "Traced child has trapped"
+msgstr "Spurita ido plenumis 'trap'-instrukcion"
+
+#: stdio-common/psiginfo-data.h:39
+msgid "Child has stopped"
+msgstr "Ido paÅ­ziÄis"
+
+#: stdio-common/psiginfo-data.h:40
+msgid "Stopped child has continued"
+msgstr "PaÅ­zigita ido kontinuis"
+
+#: stdio-common/psiginfo-data.h:43
+msgid "Data input available"
+msgstr "Disponeblas enigo de datumoj"
+
+#: stdio-common/psiginfo-data.h:44
+msgid "Output buffers available"
+msgstr "Disponeblas eligaj bufroj"
+
+#: stdio-common/psiginfo-data.h:45
+msgid "Input message available"
+msgstr "Disponeblas eniga mesaÄo"
+
+#: stdio-common/psiginfo-data.h:46
+msgid "I/O error"
+msgstr "Eniga/eliga eraro"
+
+#: stdio-common/psiginfo-data.h:47
+msgid "High priority input available"
+msgstr "Disponeblas urÄa enigo"
+
+#: stdio-common/psiginfo-data.h:48
+msgid "Device disconnected"
+msgstr "Aparato malkonektiÄis"
+
+#: stdio-common/psiginfo.c:139
+msgid "Signal sent by kill()"
+msgstr "Signalo sendita per 'kill()'"
+
+#: stdio-common/psiginfo.c:142
+msgid "Signal sent by sigqueue()"
+msgstr "Signalo sendita per 'sigqueue()'"
+
+#: stdio-common/psiginfo.c:145
+msgid "Signal generated by the expiration of a timer"
+msgstr ""
+
+#: stdio-common/psiginfo.c:148
+msgid "Signal generated by the completion of an asynchronous I/O request"
+msgstr ""
+
+#: stdio-common/psiginfo.c:152
+msgid "Signal generated by the arrival of a message on an empty message queue"
+msgstr ""
+
+#: stdio-common/psiginfo.c:157
+msgid "Signal sent by tkill()"
+msgstr "Signalo sendita per 'tkill()'"
+
+#: stdio-common/psiginfo.c:162
+msgid "Signal generated by the completion of an asynchronous name lookup request"
+msgstr ""
+
+#: stdio-common/psiginfo.c:168
+msgid "Signal generated by the completion of an I/O request"
+msgstr ""
+
+#: stdio-common/psiginfo.c:174
+msgid "Signal sent by the kernel"
+msgstr "Signalo sendita per kerno"
+
+#: stdio-common/psiginfo.c:198
+#, c-format
+msgid "Unknown signal %d\n"
+msgstr "Nekonata signalo %d\n"
+
+#: stdio-common/psignal.c:43
+#, c-format
+msgid "%s%sUnknown signal %d\n"
+msgstr "%s%sNekonata signalo %d\n"
+
+#: stdio-common/psignal.c:44
+msgid "Unknown signal"
+msgstr "Nekonata signalo"
+
+#: string/_strerror.c:46 sysdeps/mach/_strerror.c:86
+msgid "Unknown error "
+msgstr "Nekonata eraro "
+
+#: string/strerror.c:42
+msgid "Unknown error"
+msgstr "Nekonata eraro"
+
+#: string/strsignal.c:60
+#, c-format
+msgid "Real-time signal %d"
+msgstr "Realtempa signalo %d"
+
+#: string/strsignal.c:64
+#, c-format
+msgid "Unknown signal %d"
+msgstr "Nekonata signalo %d"
+
+#: sunrpc/auth_unix.c:111 sunrpc/clnt_tcp.c:123 sunrpc/clnt_udp.c:134
+#: sunrpc/clnt_unix.c:124 sunrpc/svc_tcp.c:171 sunrpc/svc_tcp.c:216
+#: sunrpc/svc_udp.c:145 sunrpc/svc_unix.c:171 sunrpc/svc_unix.c:212
+#: sunrpc/xdr.c:630 sunrpc/xdr.c:790 sunrpc/xdr_array.c:97
+#: sunrpc/xdr_rec.c:151 sunrpc/xdr_ref.c:76
+msgid "out of memory\n"
+msgstr "mankas sufiĉa memoro\n"
+
+#: sunrpc/auth_unix.c:349
+msgid "auth_unix.c: Fatal marshalling problem"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:95 sunrpc/clnt_perr.c:111
+#, c-format
+msgid "%s: %s; low version = %lu, high version = %lu"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:102
+#, c-format
+msgid "%s: %s; why = %s\n"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:104
+#, c-format
+msgid "%s: %s; why = (unknown authentication error - %d)\n"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:153
+msgid "RPC: Success"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:156
+msgid "RPC: Can't encode arguments"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:160
+msgid "RPC: Can't decode result"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:164
+msgid "RPC: Unable to send"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:168
+msgid "RPC: Unable to receive"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:172
+msgid "RPC: Timed out"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:176
+msgid "RPC: Incompatible versions of RPC"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:180
+msgid "RPC: Authentication error"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:184
+msgid "RPC: Program unavailable"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:188
+msgid "RPC: Program/version mismatch"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:192
+msgid "RPC: Procedure unavailable"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:196
+msgid "RPC: Server can't decode arguments"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:200
+msgid "RPC: Remote system error"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:204
+msgid "RPC: Unknown host"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:208
+msgid "RPC: Unknown protocol"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:212
+msgid "RPC: Port mapper failure"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:216
+msgid "RPC: Program not registered"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:220
+msgid "RPC: Failed (unspecified error)"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:261
+msgid "RPC: (unknown error code)"
+msgstr "RPC: (nekonata erarkodo)"
+
+#: sunrpc/clnt_perr.c:333
+msgid "Authentication OK"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:336
+msgid "Invalid client credential"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:340
+msgid "Server rejected credential"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:344
+msgid "Invalid client verifier"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:348
+msgid "Server rejected verifier"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:352
+msgid "Client credential too weak"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:356
+msgid "Invalid server verifier"
+msgstr ""
+
+#: sunrpc/clnt_perr.c:360
+msgid "Failed (unspecified error)"
+msgstr ""
+
+#: sunrpc/clnt_raw.c:115
+msgid "clnt_raw.c: fatal header serialization error"
+msgstr ""
+
+#: sunrpc/pm_getmaps.c:77
+msgid "pmap_getmaps.c: rpc problem"
+msgstr ""
+
+#: sunrpc/pmap_clnt.c:127
+msgid "Cannot register service"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:243
+msgid "Cannot create socket for broadcast rpc"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:250
+msgid "Cannot set socket option SO_BROADCAST"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:302
+msgid "Cannot send broadcast packet"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:327
+msgid "Broadcast poll problem"
+msgstr ""
+
+#: sunrpc/pmap_rmt.c:340
+msgid "Cannot receive reply to broadcast"
+msgstr ""
+
+#: sunrpc/rpc_main.c:280
+#, c-format
+msgid "%s: output would overwrite %s\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:287
+#, c-format
+msgid "%s: unable to open %s: %m\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:299
+#, c-format
+msgid "%s: while writing output %s: %m"
+msgstr ""
+
+#: sunrpc/rpc_main.c:334
+#, c-format
+msgid "cannot find C preprocessor: %s \n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:342
+msgid "cannot find any C preprocessor (cpp)\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:411
+#, c-format
+msgid "%s: C preprocessor failed with signal %d\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:414
+#, c-format
+msgid "%s: C preprocessor failed with exit code %d\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:454
+#, c-format
+msgid "illegal nettype: `%s'\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1089
+#, c-format
+msgid "rpcgen: too many defines\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1101
+#, c-format
+msgid "rpcgen: arglist coding error\n"
+msgstr ""
+
+#. TRANS: the file will not be removed; this is an
+#. TRANS: informative message.
+#: sunrpc/rpc_main.c:1134
+#, c-format
+msgid "file `%s' already exists and may be overwritten\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1179
+#, c-format
+msgid "Cannot specify more than one input file!\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1349
+#, c-format
+msgid "This implementation doesn't support newstyle or MT-safe code!\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1358
+#, c-format
+msgid "Cannot use netid flag with inetd flag!\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1367
+#, c-format
+msgid "Cannot use netid flag without TIRPC!\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1374
+#, c-format
+msgid "Cannot use table flags with newstyle!\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1393
+#, c-format
+msgid "\"infile\" is required for template generation flags.\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1398
+#, c-format
+msgid "Cannot have more than one file generation flag!\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1407
+#, c-format
+msgid "usage: %s infile\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1408
+#, c-format
+msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1410
+#, c-format
+msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1412
+#, c-format
+msgid "\t%s [-s nettype]* [-o outfile] [infile]\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1413
+#, c-format
+msgid "\t%s [-n netid]* [-o outfile] [infile]\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1421
+#, c-format
+msgid "options:\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1422
+#, c-format
+msgid "-a\t\tgenerate all files, including samples\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1423
+#, c-format
+msgid "-b\t\tbackward compatibility mode (generates code for SunOS 4.1)\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1424
+#, c-format
+msgid "-c\t\tgenerate XDR routines\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1425
+#, c-format
+msgid "-C\t\tANSI C mode\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1426
+#, c-format
+msgid "-Dname[=value]\tdefine a symbol (same as #define)\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1427
+#, c-format
+msgid "-h\t\tgenerate header file\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1428
+#, c-format
+msgid "-i size\t\tsize at which to start generating inline code\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1429
+#, c-format
+msgid "-I\t\tgenerate code for inetd support in server (for SunOS 4.1)\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1430
+#, c-format
+msgid "-K seconds\tserver exits after K seconds of inactivity\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1431
+#, c-format
+msgid "-l\t\tgenerate client side stubs\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1432
+#, c-format
+msgid "-L\t\tserver errors will be printed to syslog\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1433
+#, c-format
+msgid "-m\t\tgenerate server side stubs\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1434
+#, c-format
+msgid "-M\t\tgenerate MT-safe code\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1435
+#, c-format
+msgid "-n netid\tgenerate server code that supports named netid\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1436
+#, c-format
+msgid "-N\t\tsupports multiple arguments and call-by-value\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1437
+#, c-format
+msgid "-o outfile\tname of the output file\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1438
+#, c-format
+msgid "-s nettype\tgenerate server code that supports named nettype\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1439
+#, c-format
+msgid "-Sc\t\tgenerate sample client code that uses remote procedures\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1440
+#, c-format
+msgid "-Ss\t\tgenerate sample server code that defines remote procedures\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1441
+#, c-format
+msgid "-Sm \t\tgenerate makefile template \n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1442
+#, c-format
+msgid "-t\t\tgenerate RPC dispatch table\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1443
+#, c-format
+msgid "-T\t\tgenerate code to support RPC dispatch tables\n"
+msgstr ""
+
+#: sunrpc/rpc_main.c:1444
+#, c-format
+msgid "-Y path\t\tdirectory name to find C preprocessor (cpp)\n"
+msgstr ""
+
+#: sunrpc/rpc_scan.c:112
+msgid "constant or identifier expected"
+msgstr ""
+
+#: sunrpc/rpc_scan.c:308
+msgid "illegal character in file: "
+msgstr ""
+
+#: sunrpc/rpc_scan.c:347 sunrpc/rpc_scan.c:373
+msgid "unterminated string constant"
+msgstr "nefinita signoĉena konstanto"
+
+#: sunrpc/rpc_scan.c:379
+msgid "empty char string"
+msgstr ""
+
+#: sunrpc/rpc_scan.c:521 sunrpc/rpc_scan.c:531
+msgid "preprocessor error"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:246 sunrpc/rpcinfo.c:392
+#, c-format
+msgid "program %lu is not available\n"
+msgstr ""
+
+#: 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 ""
+
+#: sunrpc/rpcinfo.c:524
+#, c-format
+msgid "program %lu version %lu ready and waiting\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:565 sunrpc/rpcinfo.c:572
+msgid "rpcinfo: can't contact portmapper"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:579
+msgid "No remote programs registered.\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:583
+msgid " program vers proto port\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:622
+msgid "(unknown)"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:646
+#, c-format
+msgid "rpcinfo: broadcast failed: %s\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:667
+msgid "Sorry. You are not root\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:674
+#, c-format
+msgid "rpcinfo: Could not delete registration for prog %s version %s\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:683
+msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:685
+msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:687
+msgid " rpcinfo -p [ host ]\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:688
+msgid " rpcinfo -b prognum versnum\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:689
+msgid " rpcinfo -d prognum versnum\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:714
+#, c-format
+msgid "rpcinfo: %s is unknown service\n"
+msgstr ""
+
+#: sunrpc/rpcinfo.c:751
+#, c-format
+msgid "rpcinfo: %s is unknown host\n"
+msgstr ""
+
+#: sunrpc/svc_run.c:71
+msgid "svc_run: - out of memory"
+msgstr ""
+
+#: sunrpc/svc_run.c:91
+msgid "svc_run: - poll failed"
+msgstr ""
+
+#: sunrpc/svc_simple.c:80
+#, c-format
+msgid "can't reassign procedure number %ld\n"
+msgstr ""
+
+#: sunrpc/svc_simple.c:90
+msgid "couldn't create an rpc server\n"
+msgstr ""
+
+#: sunrpc/svc_simple.c:98
+#, c-format
+msgid "couldn't register prog %ld vers %ld\n"
+msgstr ""
+
+#: sunrpc/svc_simple.c:106
+msgid "registerrpc: out of memory\n"
+msgstr ""
+
+#: sunrpc/svc_simple.c:169
+#, c-format
+msgid "trouble replying to prog %d\n"
+msgstr ""
+
+#: sunrpc/svc_simple.c:178
+#, c-format
+msgid "never registered prog %d\n"
+msgstr ""
+
+#: sunrpc/svc_tcp.c:147
+msgid "svc_tcp.c - tcp socket creation problem"
+msgstr ""
+
+#: sunrpc/svc_tcp.c:162
+msgid "svc_tcp.c - cannot getsockname or listen"
+msgstr ""
+
+#: sunrpc/svc_udp.c:120
+msgid "svcudp_create: socket creation problem"
+msgstr ""
+
+#: sunrpc/svc_udp.c:134
+msgid "svcudp_create - cannot getsockname"
+msgstr ""
+
+#: sunrpc/svc_udp.c:166
+msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n"
+msgstr ""
+
+#: sunrpc/svc_udp.c:474
+msgid "enablecache: cache already enabled"
+msgstr ""
+
+#: sunrpc/svc_udp.c:480
+msgid "enablecache: could not allocate cache"
+msgstr ""
+
+#: sunrpc/svc_udp.c:489
+msgid "enablecache: could not allocate cache data"
+msgstr ""
+
+#: sunrpc/svc_udp.c:497
+msgid "enablecache: could not allocate cache fifo"
+msgstr ""
+
+#: sunrpc/svc_udp.c:533
+msgid "cache_set: victim not found"
+msgstr ""
+
+#: sunrpc/svc_udp.c:544
+msgid "cache_set: victim alloc failed"
+msgstr ""
+
+#: sunrpc/svc_udp.c:551
+msgid "cache_set: could not allocate new rpc_buffer"
+msgstr ""
+
+#: sunrpc/svc_unix.c:145
+msgid "svc_unix.c - AF_UNIX socket creation problem"
+msgstr ""
+
+#: sunrpc/svc_unix.c:161
+msgid "svc_unix.c - cannot getsockname or listen"
+msgstr ""
+
+# Hangup detected on controlling terminal or death of controlling process.
+#: sysdeps/generic/siglist.h:28
+msgid "Hangup"
+msgstr "Malkonekto"
+
+# Interrupt from keyboard.
+#: sysdeps/generic/siglist.h:29
+msgid "Interrupt"
+msgstr "Interrompo"
+
+# Quit from keyboard.
+#: sysdeps/generic/siglist.h:30
+msgid "Quit"
+msgstr "Forlasigo"
+
+#: sysdeps/generic/siglist.h:31
+msgid "Illegal instruction"
+msgstr "Miskomando"
+
+#: sysdeps/generic/siglist.h:32
+msgid "Trace/breakpoint trap"
+msgstr "Spurumo-/romppunkto-komando"
+
+#: sysdeps/generic/siglist.h:33
+msgid "Aborted"
+msgstr "Abortita"
+
+#: sysdeps/generic/siglist.h:34
+msgid "Floating point exception"
+msgstr "Glitkomkalkul-eraro"
+
+# SIGKILL 9 Term Kill signal
+# Nek kaptebla nek ignorebla (malkiel ABORT)
+#: sysdeps/generic/siglist.h:35
+msgid "Killed"
+msgstr "Buĉita"
+
+#: sysdeps/generic/siglist.h:36
+msgid "Bus error"
+msgstr "Bus-eraro"
+
+# SIGSEGV 11 Core Invalid memory reference
+#: sysdeps/generic/siglist.h:37
+msgid "Segmentation fault"
+msgstr "Adres-eraro"
+
+# SIGPIPE 13 Term Broken pipe: write to pipe with no readers
+#. 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:38 sysdeps/gnu/errlist.c:359
+msgid "Broken pipe"
+msgstr "Rompita dukto"
+
+# SIGALRM 14 Term Timer signal from alarm(2)
+#: sysdeps/generic/siglist.h:39
+msgid "Alarm clock"
+msgstr "VekhorloÄo"
+
+# SIGTERM 15 Term Termination signal
+#: sysdeps/generic/siglist.h:40
+msgid "Terminated"
+msgstr "Ĉesigita"
+
+#: sysdeps/generic/siglist.h:41
+msgid "Urgent I/O condition"
+msgstr "UrÄa enig-/elig-stato"
+
+# SIGSTOP 17,19,23 Stop Stop process
+# Nek kaptebla nek ignorebla (samkiel SIGKILL)
+# Haltu (poste eblos plu iri, vd SIGCONT)
+#: sysdeps/generic/siglist.h:42
+msgid "Stopped (signal)"
+msgstr "PaÅ­zigita (signale)"
+
+#: sysdeps/generic/siglist.h:43
+msgid "Stopped"
+msgstr "PaÅ­zigita (uzule)"
+
+#: sysdeps/generic/siglist.h:44
+msgid "Continued"
+msgstr "DaÅ­rigita"
+
+#: sysdeps/generic/siglist.h:45
+msgid "Child exited"
+msgstr "Ido finis"
+
+# SIGTTIN 21,21,26 Stop tty input for background process
+#: sysdeps/generic/siglist.h:46
+msgid "Stopped (tty input)"
+msgstr "PaÅ­zigita (pro terminalenigo)"
+
+# SIGTTOU 22,22,27 Stop tty output for background process
+#: sysdeps/generic/siglist.h:47
+msgid "Stopped (tty output)"
+msgstr "PaÅ­zigita (pro terminaleligo)"
+
+#: sysdeps/generic/siglist.h:48
+msgid "I/O possible"
+msgstr "Enigo/eligo eblas"
+
+#: sysdeps/generic/siglist.h:49
+msgid "CPU time limit exceeded"
+msgstr "Limo de procesortempo transpasiÄis"
+
+#: sysdeps/generic/siglist.h:50
+msgid "File size limit exceeded"
+msgstr "Limo de dosiergrando transpasiÄis"
+
+#: sysdeps/generic/siglist.h:51
+msgid "Virtual timer expired"
+msgstr "Virtuala horloÄo transpasis limtempon"
+
+#: sysdeps/generic/siglist.h:52
+msgid "Profiling timer expired"
+msgstr "Profilanta horloÄo transpasis limtempon"
+
+# SIGWINCH 28,28,20 Ign Window resize signal (4.3 BSD, Sun)
+#: sysdeps/generic/siglist.h:53
+msgid "Window changed"
+msgstr "Fenestro ÅanÄiÄis"
+
+#: sysdeps/generic/siglist.h:54
+msgid "User defined signal 1"
+msgstr "Uzula signalo 1"
+
+#: sysdeps/generic/siglist.h:55
+msgid "User defined signal 2"
+msgstr "Uzula signalo 2"
+
+#: sysdeps/generic/siglist.h:59
+msgid "EMT trap"
+msgstr "EMT-komando"
+
+# SIGSYS 12,-,12 Core Bad argument to routine (SVID)
+#: sysdeps/generic/siglist.h:62
+msgid "Bad system call"
+msgstr "Misa sistemvoko"
+
+#: sysdeps/generic/siglist.h:65
+msgid "Stack fault"
+msgstr "Stak-eraro"
+
+# SIGINFO 29,-,- A synonym for SIGPWR
+#: sysdeps/generic/siglist.h:68
+msgid "Information request"
+msgstr "Informmendo"
+
+#: sysdeps/generic/siglist.h:70
+msgid "Power failure"
+msgstr "Elektra provizo perdiÄis"
+
+#: sysdeps/generic/siglist.h:73
+msgid "Resource lost"
+msgstr "Risurco perdiÄis"
+
+#. 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 "Operacio ne permesiÄas"
+
+#. TRANS No process matches the specified process ID.
+#: sysdeps/gnu/errlist.c:45
+msgid "No such process"
+msgstr "Tiu procezo ne ekzistas"
+
+#. 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 "Interrompita sistemvoko"
+
+#. TRANS Input/output error; usually used for physical read or write errors.
+#: sysdeps/gnu/errlist.c:69
+msgid "Input/output error"
+msgstr "Eraro de enigo/eligo"
+
+#. 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 "Tiu aparato aü adreso ne ekzistas"
+
+#. 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 on
+#. TRANS @gnuhurdsystems{}.
+#: sysdeps/gnu/errlist.c:94
+msgid "Argument list too long"
+msgstr "Listo de argumentoj tro longas"
+
+#. 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 "Nevalida aranÄo de rulenda dosiero"
+
+#. 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 "Nevalida dosiernumero"
+
+#. 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 "Ne ekzistas idaj procezoj"
+
+#. 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 "EvitiÄis klinĉo inter risurcoj"
+
+#. 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 "Mankas sufiĉa memoro"
+
+#. TRANS Bad address; an invalid pointer was detected.
+#. TRANS On @gnuhurdsystems{}, this error never happens; you get a signal instead.
+#: sysdeps/gnu/errlist.c:167
+msgid "Bad address"
+msgstr "Nevalida adreso"
+
+#. 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 "Blokaparato bezoniÄas"
+
+#. 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 "Aparato aÅ­ risurco uziÄas"
+
+#. 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 "Dosiero jam ekzistas"
+
+#. 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 "Nevalida ligo inter aparatoj"
+
+#. 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 "Tiu aparato ne ekzistas"
+
+#. 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 "Ne estas dosierujo"
+
+#. 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 "Estas dosierujo"
+
+#. 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 "Nevalida argumento"
+
+#. 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 "Tro da malfermaj dosieroj"
+
+#. 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 on @gnuhurdsystems{}.
+#: sysdeps/gnu/errlist.c:275
+msgid "Too many open files in system"
+msgstr "Tro da malfermaj dosieroj en sistemo"
+
+#. 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 "Nevalida 'ioctl' por aparato"
+
+#. 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 on @gnuhurdsystems{}; the text is copied as necessary.
+#: sysdeps/gnu/errlist.c:298
+msgid "Text file busy"
+msgstr "Tekstdosiero uziÄas"
+
+#. 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 "Dosiero tro grandas"
+
+#. TRANS No space left on device; write operation on a file failed because the
+#. TRANS disk is full.
+#: sysdeps/gnu/errlist.c:317
+#, fuzzy
+msgid "No space left on device"
+msgstr "Ne haviÄas plu da spaco sur aparato"
+
+#. TRANS Invalid seek operation (such as on a pipe).
+#: sysdeps/gnu/errlist.c:326
+msgid "Illegal seek"
+msgstr "Nevalida 'seek'"
+
+#. 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 "Nur-lega dosiersistemo"
+
+#. 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 "Tro da ligoj"
+
+#. 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 "Numereca argumento estas ekster gamo"
+
+#. 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 "Numereca rezulto estas ekster gamo"
+
+#. 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 @theglibc{}.
+#. 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 "Risurco dumtempe ne disponeblas"
+
+#. 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
+#. TRANS separate error code.
+#: sysdeps/gnu/errlist.c:429
+msgid "Operation would block"
+msgstr "Operacio blokiÄus"
+
+#. 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 "Operacio nun fariÄas"
+
+#. 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 "Iu operacio jam fariÄas"
+
+#. 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 "Konektila operacio sur ne-konektilo"
+
+#. 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 "MesaÄo tro longas"
+
+#. TRANS The socket type does not support the requested communications protocol.
+#: sysdeps/gnu/errlist.c:483
+msgid "Protocol wrong type for socket"
+msgstr "Protokolo havas malÄustan tipon por konektilo"
+
+#. 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 "Protokolo ne disponeblas"
+
+#. 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 "Protokolo ne subtenatas"
+
+#. TRANS The socket type is not supported.
+#: sysdeps/gnu/errlist.c:513
+msgid "Socket type not supported"
+msgstr "Konektiltipo ne subtenatas"
+
+#. 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. 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.
+#: sysdeps/gnu/errlist.c:527
+msgid "Operation not supported"
+msgstr "Operacio ne subtenatas"
+
+#. TRANS The socket communications protocol family you requested is not supported.
+#: sysdeps/gnu/errlist.c:536
+msgid "Protocol family not supported"
+msgstr "Familio de protokoloj ne subtenatas"
+
+#. 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 "Protokolo ne subtenas adresfamilion"
+
+#. TRANS The requested socket address is already in use. @xref{Socket Addresses}.
+#: sysdeps/gnu/errlist.c:555
+msgid "Address already in use"
+msgstr "Adreso jam uziÄas"
+
+#. 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 "Ne eblas asigni petatan adreson"
+
+#. TRANS A socket operation failed because the network was down.
+#: sysdeps/gnu/errlist.c:575
+msgid "Network is down"
+msgstr "La reto ne funkcias"
+
+#. 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 "La reto ne atingeblas"
+
+#. TRANS A network connection was reset because the remote host crashed.
+#: sysdeps/gnu/errlist.c:594
+#, fuzzy
+msgid "Network dropped connection on reset"
+msgstr "La retkonekto malekis ĉar gastiganto malfunkciis"
+
+#. TRANS A network connection was aborted locally.
+#: sysdeps/gnu/errlist.c:603
+#, fuzzy
+msgid "Software caused connection abort"
+msgstr "La retkonekto malekis ĉar loka komputilo malfunkciis"
+
+#. 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
+#, fuzzy
+msgid "Connection reset by peer"
+msgstr "Konekto malekis"
+
+#. 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 "Mankas sufiĉa memoro por bufroj"
+
+#. 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 "Celkonektilo jam havas konekton"
+
+#. 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 "Celkonektilo ne havas konekton"
+
+#. 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 "Celadreso bezoniÄas"
+
+#. TRANS The socket has already been shut down.
+#: sysdeps/gnu/errlist.c:667
+msgid "Cannot send after transport endpoint shutdown"
+msgstr "Ne eblas sendi post fermado de celkonektilo"
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:676
+msgid "Too many references: cannot splice"
+msgstr "Tro da referencoj: ne eblas displekti"
+
+#. 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 "Konekto transpasis limtempon"
+
+#. 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 "Konekto rifuziÄas"
+
+#. 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 "Tro multaj sinsekvaj simbolaj ligoj"
+
+#. 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 "Dosiernomo tro longas"
+
+#. TRANS The remote host for a requested network connection is down.
+#: sysdeps/gnu/errlist.c:726
+msgid "Host is down"
+msgstr "Gastiganto ne funkcias"
+
+#. TRANS The remote host for a requested network connection is not reachable.
+#: sysdeps/gnu/errlist.c:735
+msgid "No route to host"
+msgstr "Gastiganto ne atingeblas"
+
+#. 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 "Dosierujo ne vakas"
+
+#. 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 "Tro multaj procezoj"
+
+#. 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 "Tro multaj uzantoj"
+
+#. TRANS The user's disk quota was exceeded.
+#: sysdeps/gnu/errlist.c:775
+msgid "Disk quota exceeded"
+msgstr "Diska kvoto transpasiÄis"
+
+#. 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 ""
+
+#. 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 @gnuhurdsystems{}, making this error code impossible.)
+#: sysdeps/gnu/errlist.c:799
+msgid "Object is remote"
+msgstr "Objekto estas fora"
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:808
+msgid "RPC struct is bad"
+msgstr ""
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:817
+msgid "RPC version wrong"
+msgstr ""
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:826
+msgid "RPC program not available"
+msgstr ""
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:835
+msgid "RPC program version wrong"
+msgstr ""
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:844
+msgid "RPC bad procedure for program"
+msgstr ""
+
+#. TRANS No locks available. This is used by the file locking facilities; see
+#. 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.
+#: sysdeps/gnu/errlist.c:856
+msgid "No locks available"
+msgstr "Neniu Åloso disponeblas"
+
+#. 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 "Maladekvata dosiera tipo aÅ­ aranÄo"
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:878
+msgid "Authentication error"
+msgstr ""
+
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:887
+msgid "Need authenticator"
+msgstr ""
+
+#. 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 "Funkcio ne realiÄis"
+
+#. 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 "Ne subtenatas"
+
+#. 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 "Nevalida aü nekompleta plurbajta aü larÄa signo"
+
+#. 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
+#. 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 "Maladekvata operacio por fona procezo"
+
+#. 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.
+#: sysdeps/gnu/errlist.c:955
+msgid "Translator died"
+msgstr "Tradukprogramo pereis"
+
+#. 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 "?"
+
+#. TRANS You did @strong{what}?
+#: sysdeps/gnu/errlist.c:975
+msgid "You really blew it this time"
+msgstr "Vi plene ruinigis Äin ĉifoje"
+
+#. TRANS Go home and have a glass of warm, dairy-fresh milk.
+#: sysdeps/gnu/errlist.c:984
+msgid "Computer bought the farm"
+msgstr "SidiÄu kaj ne pensu plu"
+
+#. TRANS This error code has no purpose.
+#: sysdeps/gnu/errlist.c:993
+msgid "Gratuitous error"
+msgstr "Sensenca eraro"
+
+#: sysdeps/gnu/errlist.c:1001
+msgid "Bad message"
+msgstr "Malbona mesaÄo"
+
+#: sysdeps/gnu/errlist.c:1009
+msgid "Identifier removed"
+msgstr "Indentigilo forigiÄis"
+
+#: sysdeps/gnu/errlist.c:1017
+msgid "Multihop attempted"
+msgstr "Plursalta provo"
+
+#: sysdeps/gnu/errlist.c:1025
+msgid "No data available"
+msgstr "Ne disponeblas datumoj"
+
+#: sysdeps/gnu/errlist.c:1033
+msgid "Link has been severed"
+msgstr "Ligo tranĉiÄis"
+
+#: sysdeps/gnu/errlist.c:1041
+msgid "No message of desired type"
+msgstr "Neniu mesaÄo de petita tipo"
+
+#: sysdeps/gnu/errlist.c:1049
+msgid "Out of streams resources"
+msgstr "Ne havas plu da flu-risurcoj"
+
+#: sysdeps/gnu/errlist.c:1057
+msgid "Device not a stream"
+msgstr "Aparato ne estas fluo"
+
+#: sysdeps/gnu/errlist.c:1065
+msgid "Value too large for defined data type"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1073
+msgid "Protocol error"
+msgstr "Protokol-eraro"
+
+#: sysdeps/gnu/errlist.c:1081
+msgid "Timer expired"
+msgstr "HorloÄo transpasis limtempon"
+
+#. 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 "Operacio nuligitas"
+
+#: sysdeps/gnu/errlist.c:1101
+msgid "Interrupted system call should be restarted"
+msgstr "Interrompita sistemvoko devus esti restartigata"
+
+#: sysdeps/gnu/errlist.c:1109
+msgid "Channel number out of range"
+msgstr "Kanalnumero estas ekster gamo"
+
+#: sysdeps/gnu/errlist.c:1117
+#, fuzzy
+msgid "Level 2 not synchronized"
+msgstr "Nivelo 2 ne sinkroniÄis"
+
+#: sysdeps/gnu/errlist.c:1125
+msgid "Level 3 halted"
+msgstr "Nivelo 3 haltiÄis"
+
+#: sysdeps/gnu/errlist.c:1133
+msgid "Level 3 reset"
+msgstr "Nivelo 3 rekomenco"
+
+#: sysdeps/gnu/errlist.c:1141
+msgid "Link number out of range"
+msgstr "Lignumero estas ekster gamo"
+
+#: sysdeps/gnu/errlist.c:1149
+msgid "Protocol driver not attached"
+msgstr "Protokolpelilo ne kunligatas"
+
+#: sysdeps/gnu/errlist.c:1157
+msgid "No CSI structure available"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1165
+msgid "Level 2 halted"
+msgstr "Nivelo 2 haltiÄis"
+
+#: sysdeps/gnu/errlist.c:1173
+msgid "Invalid exchange"
+msgstr "Nevalida interÅanÄo"
+
+#: sysdeps/gnu/errlist.c:1181
+#, fuzzy
+msgid "Invalid request descriptor"
+msgstr "Nevalida mend..."
+
+#: sysdeps/gnu/errlist.c:1189
+msgid "Exchange full"
+msgstr "InterÅanÄo plenas"
+
+#: sysdeps/gnu/errlist.c:1197
+msgid "No anode"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1205
+msgid "Invalid request code"
+msgstr "Nevalida mendkodo"
+
+#: sysdeps/gnu/errlist.c:1213
+msgid "Invalid slot"
+msgstr "Nevalida sulko"
+
+#: sysdeps/gnu/errlist.c:1221
+msgid "File locking deadlock error"
+msgstr "Klinĉeraro je dosierÅlosado"
+
+#: sysdeps/gnu/errlist.c:1229
+msgid "Bad font file format"
+msgstr "Nevalida aranÄo de tipardosiero"
+
+#: sysdeps/gnu/errlist.c:1237
+msgid "Machine is not on the network"
+msgstr "Komputilo ne havas retkonekton"
+
+#: sysdeps/gnu/errlist.c:1245
+msgid "Package not installed"
+msgstr "Pako ne estas instalita"
+
+#: sysdeps/gnu/errlist.c:1253
+msgid "Advertise error"
+msgstr "Anonc-eraro"
+
+#: sysdeps/gnu/errlist.c:1261
+msgid "Srmount error"
+msgstr "Eraro je 'srmount'"
+
+#: sysdeps/gnu/errlist.c:1269
+msgid "Communication error on send"
+msgstr "Komunik-eraro je sendo"
+
+#: sysdeps/gnu/errlist.c:1277
+msgid "RFS specific error"
+msgstr "RFS-specifa eraro"
+
+#: sysdeps/gnu/errlist.c:1285
+msgid "Name not unique on network"
+msgstr "Nomo ne unikas en reto"
+
+#: sysdeps/gnu/errlist.c:1293
+msgid "File descriptor in bad state"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1301
+msgid "Remote address changed"
+msgstr "Fora adreso ÅanÄis"
+
+#: sysdeps/gnu/errlist.c:1309
+msgid "Can not access a needed shared library"
+msgstr "Ne eblas atingi necesan komunan bibliotekon"
+
+#: sysdeps/gnu/errlist.c:1317
+msgid "Accessing a corrupted shared library"
+msgstr "Atingo de kripla komuna biblioteko"
+
+#: sysdeps/gnu/errlist.c:1325
+msgid ".lib section in a.out corrupted"
+msgstr "Sekcio '.lib' en «a.out» kriplas"
+
+#: sysdeps/gnu/errlist.c:1333
+msgid "Attempting to link in too many shared libraries"
+msgstr "Provo de bindi tro multajn komunajn bibliotekojn"
+
+#: sysdeps/gnu/errlist.c:1341
+msgid "Cannot exec a shared library directly"
+msgstr "Ne eblas rekte ruli komunan bibliotekon"
+
+#: sysdeps/gnu/errlist.c:1349
+msgid "Streams pipe error"
+msgstr "Fludukta eraro"
+
+#: sysdeps/gnu/errlist.c:1357
+msgid "Structure needs cleaning"
+msgstr "Strukturo bezonas purigon"
+
+#: sysdeps/gnu/errlist.c:1365
+msgid "Not a XENIX named type file"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1373
+msgid "No XENIX semaphores available"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1381
+msgid "Is a named type file"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1389
+msgid "Remote I/O error"
+msgstr "Fora eniga/eliga eraro"
+
+#: sysdeps/gnu/errlist.c:1397
+msgid "No medium found"
+msgstr "Neniu datumportilo troviÄas"
+
+#: sysdeps/gnu/errlist.c:1405
+msgid "Wrong medium type"
+msgstr "NeÄusta tipo de datumportilo"
+
+#: sysdeps/gnu/errlist.c:1413
+msgid "Required key not available"
+msgstr "Necesa Ålosilo ne disponeblas"
+
+#: sysdeps/gnu/errlist.c:1421
+msgid "Key has expired"
+msgstr "Åœlosilo kadukiÄis"
+
+#: sysdeps/gnu/errlist.c:1429
+msgid "Key has been revoked"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1437
+msgid "Key was rejected by service"
+msgstr "Åœlosilo rifuziÄis per servo"
+
+#: sysdeps/gnu/errlist.c:1445
+msgid "Owner died"
+msgstr "Posedanto ĉesiÄis"
+
+#: sysdeps/gnu/errlist.c:1453
+msgid "State not recoverable"
+msgstr "Stato ne ripareblas"
+
+#: sysdeps/gnu/errlist.c:1461
+msgid "Operation not possible due to RF-kill"
+msgstr ""
+
+#: sysdeps/gnu/errlist.c:1469
+msgid "Memory page has hardware error"
+msgstr "MemorpaÄo havas fizikan difekton"
+
+#: sysdeps/mach/_strerror.c:56
+msgid "Error in unknown error system: "
+msgstr "Eraro en nekonata erarsistemo: "
+
+#: sysdeps/posix/gai_strerror-strs.h:1
+msgid "Address family for hostname not supported"
+msgstr "Ne subteniÄas adresfamilio por komputilretnomo"
+
+#: sysdeps/posix/gai_strerror-strs.h:2
+msgid "Temporary failure in name resolution"
+msgstr "Dumtempa malsukceso ĉe nom-eltrovo"
+
+#: sysdeps/posix/gai_strerror-strs.h:3
+msgid "Bad value for ai_flags"
+msgstr "Misa valoro por 'ai_flags'"
+
+#: sysdeps/posix/gai_strerror-strs.h:4
+msgid "Non-recoverable failure in name resolution"
+msgstr "Neriparebla malsukceso ĉe nom-eltrovo"
+
+#: sysdeps/posix/gai_strerror-strs.h:5
+msgid "ai_family not supported"
+msgstr "'ai_family' ne subtenatas"
+
+#: sysdeps/posix/gai_strerror-strs.h:6
+msgid "Memory allocation failure"
+msgstr "Mankas sufiĉa memoro"
+
+#: sysdeps/posix/gai_strerror-strs.h:7
+msgid "No address associated with hostname"
+msgstr "Neniu adreso estas asociata kun nomo de gastiga komputilo"
+
+#: sysdeps/posix/gai_strerror-strs.h:8
+msgid "Name or service not known"
+msgstr "Nomo aÅ­ servo ne konatas"
+
+#: sysdeps/posix/gai_strerror-strs.h:9
+msgid "Servname not supported for ai_socktype"
+msgstr "'servname' ne subtenatas por 'ai_socktype'"
+
+#: sysdeps/posix/gai_strerror-strs.h:10
+msgid "ai_socktype not supported"
+msgstr "'ai_socktype' ne subtenatas"
+
+#: sysdeps/posix/gai_strerror-strs.h:11
+msgid "System error"
+msgstr "Sistemeraro"
+
+#: sysdeps/posix/gai_strerror-strs.h:12
+msgid "Processing request in progress"
+msgstr "Traktado de peto daÅ­ras"
+
+#: sysdeps/posix/gai_strerror-strs.h:13
+msgid "Request canceled"
+msgstr "Peto nuligitas"
+
+#: sysdeps/posix/gai_strerror-strs.h:14
+msgid "Request not canceled"
+msgstr "Peto ne nuligitas"
+
+#: sysdeps/posix/gai_strerror-strs.h:15
+msgid "All requests done"
+msgstr "Ĉiuj petoj estas plenumitaj"
+
+#: sysdeps/posix/gai_strerror-strs.h:16
+msgid "Interrupted by a signal"
+msgstr "Interrompita per signalo"
+
+#: sysdeps/posix/gai_strerror-strs.h:17
+msgid "Parameter string not correctly encoded"
+msgstr "Parametra ĉeno ne estas Äuste kodita"
+
+#: sysdeps/unix/sysv/linux/i386/readelflib.c:65
+#, c-format
+msgid "%s is for unknown machine %d.\n"
+msgstr ""
+
+#: sysdeps/unix/sysv/linux/lddlibc4.c:60
+#, c-format
+msgid ""
+"Usage: lddlibc4 FILE\n"
+"\n"
+msgstr ""
+
+#: sysdeps/unix/sysv/linux/lddlibc4.c:81
+#, c-format
+msgid "cannot open `%s'"
+msgstr "ne eblas malfermi «%s»"
+
+#: sysdeps/unix/sysv/linux/lddlibc4.c:85
+#, c-format
+msgid "cannot read header from `%s'"
+msgstr "ne eblas legi ĉapon el «%s»"
+
+#: timezone/zdump.c:215
+msgid "lacks alphabetic at start"
+msgstr "ne havas komencan literon"
+
+#: timezone/zdump.c:217
+msgid "has fewer than 3 alphabetics"
+msgstr "havas malpli ol tri literojn"
+
+#: timezone/zdump.c:219
+msgid "has more than 6 alphabetics"
+msgstr "havas pli ol ses literojn"
+
+#: timezone/zdump.c:227
+msgid "differs from POSIX standard"
+msgstr ""
+
+#: timezone/zdump.c:233
+#, c-format
+msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"
+msgstr ""
+
+#: timezone/zdump.c:244
+#, c-format
+msgid ""
+"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"
+"\n"
+"Report bugs to tz@elsie.nci.nih.gov.\n"
+msgstr ""
+
+#: timezone/zdump.c:313
+#, c-format
+msgid "%s: wild -c argument %s\n"
+msgstr ""
+
+#: timezone/zdump.c:400
+msgid "Error writing to standard output"
+msgstr "Eraro dum skribado al ĉefeligujo"
+
+#: timezone/zdump.c:423
+#, c-format
+msgid "%s: use of -v on system with floating time_t other than float or double\n"
+msgstr ""
+
+#: timezone/zic.c:388
+#, c-format
+msgid "%s: Memory exhausted: %s\n"
+msgstr "%s: Mankas sufiĉa memoro: %s\n"
+
+#: timezone/zic.c:434
+#, c-format
+msgid "\"%s\", line %d: %s"
+msgstr "«%s», linio %d: %s"
+
+#: timezone/zic.c:437
+#, c-format
+msgid " (rule from \"%s\", line %d)"
+msgstr " (regulo el «%s», linio %d)"
+
+#: timezone/zic.c:449
+msgid "warning: "
+msgstr "averto: "
+
+#: timezone/zic.c:459
+#, c-format
+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 ""
+
+#: timezone/zic.c:496
+msgid "wild compilation-time specification of zic_t"
+msgstr ""
+
+#: timezone/zic.c:515
+#, c-format
+msgid "%s: More than one -d option specified\n"
+msgstr "%s: Indikatas pluraj opcioj «-d»\n"
+
+#: timezone/zic.c:525
+#, c-format
+msgid "%s: More than one -l option specified\n"
+msgstr "%s: Indikatas pluraj opcioj «-l»\n"
+
+#: timezone/zic.c:535
+#, c-format
+msgid "%s: More than one -p option specified\n"
+msgstr "%s: Indikatas pluraj opcioj «-p»\n"
+
+#: timezone/zic.c:545
+#, c-format
+msgid "%s: More than one -y option specified\n"
+msgstr "%s: Indikatas pluraj opcioj «-y»\n"
+
+#: timezone/zic.c:555
+#, c-format
+msgid "%s: More than one -L option specified\n"
+msgstr "%s: Indikatas pluraj opcioj «-L»\n"
+
+#: timezone/zic.c:604
+msgid "link to link"
+msgstr "ligo al ligo"
+
+#: timezone/zic.c:669
+msgid "hard link failed, symbolic link used"
+msgstr "senpera ligo malsukcesis; simbola ligo uziÄis"
+
+#: timezone/zic.c:677
+#, c-format
+msgid "%s: Can't link from %s to %s: %s\n"
+msgstr "%s: Ne eblas ligi de %s al %s: %s\n"
+
+#: timezone/zic.c:749 timezone/zic.c:751
+msgid "same rule name in multiple files"
+msgstr "sama regulnomo en pluraj dosieroj"
+
+#: timezone/zic.c:792
+msgid "unruly zone"
+msgstr "senbrida zono"
+
+#: timezone/zic.c:799
+#, c-format
+msgid "%s in ruleless zone"
+msgstr "%s en senregula zono"
+
+#: timezone/zic.c:820
+msgid "standard input"
+msgstr "ĉefenigujo"
+
+#: timezone/zic.c:825
+#, c-format
+msgid "%s: Can't open %s: %s\n"
+msgstr "%s: Ne eblas malfermi %s: %s\n"
+
+#: timezone/zic.c:836
+msgid "line too long"
+msgstr "linio tro longas"
+
+#: timezone/zic.c:856
+msgid "input line of unknown type"
+msgstr "eniga linio estas de nekonata tipo"
+
+#: timezone/zic.c:872
+#, c-format
+msgid "%s: Leap line in non leap seconds file %s\n"
+msgstr ""
+
+#: timezone/zic.c:879 timezone/zic.c:1316 timezone/zic.c:1338
+#, c-format
+msgid "%s: panic: Invalid l_value %d\n"
+msgstr ""
+
+#: timezone/zic.c:887
+#, c-format
+msgid "%s: Error reading %s\n"
+msgstr "%s: Eraro dum legado de %s\n"
+
+#: timezone/zic.c:894
+#, c-format
+msgid "%s: Error closing %s: %s\n"
+msgstr "%s: Eraro dum fermado de %s: %s\n"
+
+#: timezone/zic.c:899
+msgid "expected continuation line not found"
+msgstr ""
+
+#: timezone/zic.c:943 timezone/zic.c:2541 timezone/zic.c:2560
+msgid "time overflow"
+msgstr "temptroo"
+
+#: timezone/zic.c:947
+msgid "24:00 not handled by pre-1998 versions of zic"
+msgstr ""
+
+#: timezone/zic.c:950
+msgid "values over 24 hours not handled by pre-2007 versions of zic"
+msgstr ""
+
+#: timezone/zic.c:963
+msgid "wrong number of fields on Rule line"
+msgstr ""
+
+#: timezone/zic.c:967
+msgid "nameless rule"
+msgstr "sennoma regulo"
+
+#: timezone/zic.c:972
+msgid "invalid saved time"
+msgstr "nevalida konservita tempo"
+
+#: timezone/zic.c:993
+msgid "wrong number of fields on Zone line"
+msgstr ""
+
+#: timezone/zic.c:999
+#, c-format
+msgid "\"Zone %s\" line and -l option are mutually exclusive"
+msgstr ""
+
+#: timezone/zic.c:1007
+#, c-format
+msgid "\"Zone %s\" line and -p option are mutually exclusive"
+msgstr ""
+
+#: timezone/zic.c:1019
+#, c-format
+msgid "duplicate zone name %s (file \"%s\", line %d)"
+msgstr ""
+
+#: timezone/zic.c:1035
+msgid "wrong number of fields on Zone continuation line"
+msgstr ""
+
+#: timezone/zic.c:1075
+msgid "invalid UTC offset"
+msgstr "nevalida UTC-deÅovo"
+
+#: timezone/zic.c:1078
+msgid "invalid abbreviation format"
+msgstr "nevalida aranÄo de mallongigo"
+
+#: timezone/zic.c:1107
+msgid "Zone continuation line end time is not after end time of previous line"
+msgstr ""
+
+#: timezone/zic.c:1135
+msgid "wrong number of fields on Leap line"
+msgstr ""
+
+#: timezone/zic.c:1144
+msgid "invalid leaping year"
+msgstr ""
+
+#: timezone/zic.c:1164 timezone/zic.c:1270
+msgid "invalid month name"
+msgstr "nevalida monatnomo"
+
+#: timezone/zic.c:1177 timezone/zic.c:1383 timezone/zic.c:1397
+msgid "invalid day of month"
+msgstr "nevalida tago de monato"
+
+#: timezone/zic.c:1182
+msgid "time before zero"
+msgstr "tempo antaÅ­ nulo"
+
+#: timezone/zic.c:1186
+msgid "time too small"
+msgstr "tempo tro etas"
+
+#: timezone/zic.c:1190
+msgid "time too large"
+msgstr "tempo tro grandas"
+
+#: timezone/zic.c:1194 timezone/zic.c:1299
+msgid "invalid time of day"
+msgstr "nevalida tempo de tago"
+
+#: timezone/zic.c:1213
+msgid "illegal CORRECTION field on Leap line"
+msgstr ""
+
+#: timezone/zic.c:1218
+msgid "illegal Rolling/Stationary field on Leap line"
+msgstr ""
+
+#: timezone/zic.c:1234
+msgid "wrong number of fields on Link line"
+msgstr ""
+
+#: timezone/zic.c:1238
+msgid "blank FROM field on Link line"
+msgstr ""
+
+#: timezone/zic.c:1242
+msgid "blank TO field on Link line"
+msgstr ""
+
+#: timezone/zic.c:1320
+msgid "invalid starting year"
+msgstr "nevalida komencjaro"
+
+#: timezone/zic.c:1342
+msgid "invalid ending year"
+msgstr "nevalida finjaro"
+
+#: timezone/zic.c:1346
+msgid "starting year greater than ending year"
+msgstr "komencjaro pli grandas ol finjaro"
+
+#: timezone/zic.c:1353
+msgid "typed single year"
+msgstr ""
+
+#: timezone/zic.c:1388
+msgid "invalid weekday name"
+msgstr "nevalida nomo de semajntago"
+
+#: timezone/zic.c:1566
+#, c-format
+msgid "%s: Can't remove %s: %s\n"
+msgstr "%s: Ne eblas forigi %s: %s\n"
+
+#: timezone/zic.c:1576
+#, c-format
+msgid "%s: Can't create %s: %s\n"
+msgstr "%s: Ne eblas krei %s: %s\n"
+
+#: timezone/zic.c:1773
+#, c-format
+msgid "%s: Error writing %s\n"
+msgstr "%s: Eraro dum skribado de %s\n"
+
+#: timezone/zic.c:2070
+msgid "no POSIX environment variable for zone"
+msgstr ""
+
+#: timezone/zic.c:2237
+msgid "can't determine time zone abbreviation to use just after until time"
+msgstr ""
+
+#: timezone/zic.c:2283
+msgid "too many transitions?!"
+msgstr ""
+
+#: timezone/zic.c:2302
+msgid "internal error - addtype called with bad isdst"
+msgstr ""
+
+#: timezone/zic.c:2306
+msgid "internal error - addtype called with bad ttisstd"
+msgstr ""
+
+#: timezone/zic.c:2310
+msgid "internal error - addtype called with bad ttisgmt"
+msgstr ""
+
+#: timezone/zic.c:2329
+msgid "too many local time types"
+msgstr ""
+
+#: timezone/zic.c:2333
+msgid "UTC offset out of range"
+msgstr ""
+
+#: timezone/zic.c:2361
+msgid "too many leap seconds"
+msgstr ""
+
+#: timezone/zic.c:2367
+msgid "repeated leap second moment"
+msgstr ""
+
+#: timezone/zic.c:2419
+msgid "Wild result from command execution"
+msgstr "Bizara rezulto el komandrulo"
+
+#: timezone/zic.c:2420
+#, c-format
+msgid "%s: command was '%s', result was %d\n"
+msgstr "%s: komando estis '%s', rezulto estis %d\n"
+
+#: timezone/zic.c:2518
+msgid "Odd number of quotation marks"
+msgstr "Nepara nombro de citiloj"
+
+#: timezone/zic.c:2607
+msgid "use of 2/29 in non leap-year"
+msgstr ""
+
+#: timezone/zic.c:2642
+msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic"
+msgstr ""
+
+#: timezone/zic.c:2674
+msgid "time zone abbreviation lacks alphabetic at start"
+msgstr ""
+
+#: timezone/zic.c:2676
+msgid "time zone abbreviation has more than 3 alphabetics"
+msgstr ""
+
+#: timezone/zic.c:2678
+msgid "time zone abbreviation has too many alphabetics"
+msgstr ""
+
+#: timezone/zic.c:2688
+msgid "time zone abbreviation differs from POSIX standard"
+msgstr ""
+
+#: timezone/zic.c:2700
+msgid "too many, or too long, time zone abbreviations"
+msgstr ""
+
+#: timezone/zic.c:2741
+#, c-format
+msgid "%s: Can't create directory %s: %s\n"
+msgstr "%s: Ne eblas krei dosierujon %s: %s\n"
+
+#: timezone/zic.c:2763
+#, c-format
+msgid "%s: %d did not sign extend correctly\n"
+msgstr ""
diff --git a/libc/po/ru.po b/libc/po/ru.po
index d019327ad..97128d273 100644
--- a/libc/po/ru.po
+++ b/libc/po/ru.po
@@ -7,12 +7,13 @@
# Oleg Tihonov <ost@tatnipi.ru>, 2005, 2007.
# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2009.
# Pavel Maryanov <acid_jack@ukr.net>, 2009.
+# Dmitry V. Levin <ldv@altlinux.org>, 2012.
# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: libc 2.16-pre1\n"
"POT-Creation-Date: 2012-06-21 07:51-0700\n"
-"PO-Revision-Date: 2012-07-15 11:30+0400\n"
+"PO-Revision-Date: 2012-10-15 18:38+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
"Language: ru\n"
@@ -220,7 +221,7 @@ msgstr "неверный Ñкранирующий знак"
#: catgets/gencat.c:573
#, c-format
msgid "unknown directive `%s': line ignored"
-msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° «%s»: Ñтрока игнорирована"
+msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° «%s»: Ñтрока проигнорирована"
#: catgets/gencat.c:618
msgid "duplicated message number"
@@ -232,7 +233,7 @@ msgstr "повторный идентификатор ÑообщениÑ"
#: catgets/gencat.c:726
msgid "invalid character: message ignored"
-msgstr "недопуÑтимый знак: Ñообщение игнорировано"
+msgstr "недопуÑтимый знак: Ñообщение проигнорировано"
#: catgets/gencat.c:769
msgid "invalid line"
@@ -240,7 +241,7 @@ msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñтрока"
#: catgets/gencat.c:823
msgid "malformed line ignored"
-msgstr "Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока игнорирована"
+msgstr "Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока проигнорирована"
#: catgets/gencat.c:987 catgets/gencat.c:1028
#, c-format
@@ -697,7 +698,7 @@ msgstr "RTLD_NEXT иÑпользовано в не динамичеÑки заг
#: elf/dl-sysdep.c:488 elf/dl-sysdep.c:500
msgid "cannot create capability list"
-msgstr "невозможно Ñоздать ÑпиÑок возможноÑтей"
+msgstr "невозможно Ñоздать capability list"
#: elf/dl-tls.c:872
msgid "cannot create TLS data structures"
@@ -831,7 +832,7 @@ msgstr "Ðевозможно выполнить lstat %s"
#: elf/ldconfig.c:601
#, c-format
msgid "Ignored file %s since it is not a regular file."
-msgstr "Файл %s игнорирован, поÑкольку Ñто не обычный файл"
+msgstr "Файл %s проигнорирован, поÑкольку не ÑвлÑетÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ файлом"
#: elf/ldconfig.c:610
#, c-format
@@ -2867,17 +2868,17 @@ msgstr "Добавление %s\n"
#: locale/programs/locarchive.c:1281
#, c-format
msgid "stat of \"%s\" failed: %s: ignored"
-msgstr "Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ stat Ð´Ð»Ñ Â«%s» завершилаÑÑŒ неудачно: %s: игнорировано"
+msgstr "Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ stat Ð´Ð»Ñ Â«%s» завершилаÑÑŒ неудачно: %s: проигнорировано"
#: locale/programs/locarchive.c:1287
#, c-format
msgid "\"%s\" is no directory; ignored"
-msgstr "«%s» не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼; игнорировано"
+msgstr "«%s» не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼; проигнорировано"
#: locale/programs/locarchive.c:1294
#, c-format
msgid "cannot open directory \"%s\": %s: ignored"
-msgstr "невозможно открыть каталог «%s»: %s: игнорировано"
+msgstr "невозможно открыть каталог «%s»: %s: проигнорировано"
#: locale/programs/locarchive.c:1366
#, c-format
@@ -2887,7 +2888,7 @@ msgstr "неполный набор файлов локали в «%s»"
#: locale/programs/locarchive.c:1430
#, c-format
msgid "cannot read all files in \"%s\": ignored"
-msgstr "невозможно прочитать вÑе файлы в «%s»: игнорировано"
+msgstr "невозможно прочитать вÑе файлы в «%s»: проигнорировано"
#: locale/programs/locarchive.c:1500
#, c-format
@@ -4358,7 +4359,7 @@ msgstr "Ðе удалоÑÑŒ открыть Ñоединение Ñ Ð¿Ð¾Ð´ÑиÑÑ
#: nscd/selinux.c:181
msgid "Failed to set keep-capabilities"
-msgstr "Ðе удалоÑÑŒ уÑтановить возможноÑти хранениÑ"
+msgstr "Ðе удалоÑÑŒ уÑтановить keep-capabilities"
#: nscd/selinux.c:182 nscd/selinux.c:245
#, c-format
@@ -4367,7 +4368,7 @@ msgstr "prctl(KEEPCAPS) завершилÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾"
#: nscd/selinux.c:196
msgid "Failed to initialize drop of capabilities"
-msgstr "Ðе удалоÑÑŒ инициализировать возможноÑти ÑброÑа"
+msgstr "Ðе удалоÑÑŒ инициализировать ÑÐ±Ñ€Ð¾Ñ capabilities"
#: nscd/selinux.c:197
#, c-format
@@ -4376,7 +4377,7 @@ msgstr "cap_init завершилÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾"
#: nscd/selinux.c:218 nscd/selinux.c:235
msgid "Failed to drop capabilities"
-msgstr "Ðе удалоÑÑŒ ÑброÑить возможноÑти"
+msgstr "Ðе удалоÑÑŒ ÑброÑить capabilities"
#: nscd/selinux.c:219 nscd/selinux.c:236
#, c-format
@@ -4385,7 +4386,7 @@ msgstr "cap_set_proc завершилÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾"
#: nscd/selinux.c:244
msgid "Failed to unset keep-capabilities"
-msgstr "Ðе удалоÑÑŒ ÑнÑÑ‚ÑŒ возможноÑти хранениÑ"
+msgstr "Ðе удалоÑÑŒ ÑнÑÑ‚ÑŒ keep-capabilities"
#: nscd/selinux.c:260
msgid "Failed to determine if kernel supports SELinux"
@@ -4828,7 +4829,7 @@ msgstr "%s: Ñтрока %d: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «%s»\n"
#: resolv/res_hconf.c:280
#, c-format
msgid "%s: line %d: ignoring trailing garbage `%s'\n"
-msgstr "%s: Ñтрока %d: игнорирован муÑор в конце «%s»\n"
+msgstr "%s: Ñтрока %d: проигнорирован муÑор в конце «%s»\n"
#: stdio-common/psiginfo-data.h:2
msgid "Illegal opcode"
@@ -5776,7 +5777,7 @@ msgstr "ÐŸÐ¾Ñ‚ÐµÑ€Ñ Ñ€ÐµÑурÑа"
#. TRANS or processes with special privileges can perform the operation.
#: sysdeps/gnu/errlist.c:25
msgid "Operation not permitted"
-msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ позволÑетÑÑ"
+msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ позволена"
#. TRANS No process matches the specified process ID.
#: sysdeps/gnu/errlist.c:45
@@ -5948,7 +5949,7 @@ msgstr "Файл Ñлишком велик"
#. TRANS disk is full.
#: sysdeps/gnu/errlist.c:317
msgid "No space left on device"
-msgstr "Ðа уÑтройÑтве кончилоÑÑŒ меÑто"
+msgstr "Ðа уÑтройÑтве не оÑталоÑÑŒ Ñвободного меÑта"
#. TRANS Invalid seek operation (such as on a pipe).
#: sysdeps/gnu/errlist.c:326
@@ -6053,7 +6054,7 @@ msgstr "Сообщение Ñлишком длинное"
#. TRANS The socket type does not support the requested communications protocol.
#: sysdeps/gnu/errlist.c:483
msgid "Protocol wrong type for socket"
-msgstr "Ðеподдерживаемый Ð´Ð»Ñ Ñокета тип протокола"
+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}.
@@ -6120,19 +6121,19 @@ msgstr "Сеть недоÑтупна"
#. TRANS A network connection was reset because the remote host crashed.
#: sysdeps/gnu/errlist.c:594
msgid "Network dropped connection on reset"
-msgstr "Сетевое Ñоединение было Ñброшено"
+msgstr "Сетевое Ñоединение было разорвано"
#. TRANS A network connection was aborted locally.
#: sysdeps/gnu/errlist.c:603
msgid "Software caused connection abort"
-msgstr "Программа вызвала ÑÐ±Ñ€Ð¾Ñ ÑоединениÑ"
+msgstr "Программа вызвала разрыв ÑоединениÑ"
#. 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 "Соединение Ñброшено другой Ñтороной"
+msgstr "Соединение разорвано другой Ñтороной"
#. 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
@@ -6165,7 +6166,7 @@ msgstr "ТребуетÑÑ ÑƒÐºÐ°Ð·Ð°Ñ‚ÑŒ Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ"
#. TRANS The socket has already been shut down.
#: sysdeps/gnu/errlist.c:667
msgid "Cannot send after transport endpoint shutdown"
-msgstr "Ðевозможно поÑлать данные поÑле Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¹ точки передачи"
+msgstr "Ðевозможно отправить данные поÑле Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¹ точки передачи"
#. TRANS ???
#: sysdeps/gnu/errlist.c:676
@@ -6250,7 +6251,7 @@ msgstr "Это удаленный объект"
#. TRANS ???
#: sysdeps/gnu/errlist.c:808
msgid "RPC struct is bad"
-msgstr " RPC Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтруктура"
+msgstr "RPC Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтруктура"
#. TRANS ???
#: sysdeps/gnu/errlist.c:817
@@ -6328,7 +6329,7 @@ msgstr "Ðе поддерживаетÑÑ"
#. 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 "Ðеверный или неполный мультибайтный или широкий знак"
+msgstr "Ðеверный или неполный мультибайтный или широкий Ñимвол"
#. TRANS On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
#. TRANS this error for certain operations when the caller is not in the
@@ -6362,7 +6363,7 @@ msgstr "Ðа Ñтот раз вы вÑех опрокинули"
#. TRANS Go home and have a glass of warm, dairy-fresh milk.
#: sysdeps/gnu/errlist.c:984
msgid "Computer bought the farm"
-msgstr "Компьютер купил ферму"
+msgstr "Компьютер отброÑил копыта"
#. TRANS This error code has no purpose.
#: sysdeps/gnu/errlist.c:993
@@ -6555,7 +6556,7 @@ msgstr "Структуру необходимо почиÑтить"
#: sysdeps/gnu/errlist.c:1365
msgid "Not a XENIX named type file"
-msgstr "Тип файла не назван XENIX"
+msgstr "Ðе ÑвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ именованного типа XENIX"
#: sysdeps/gnu/errlist.c:1373
msgid "No XENIX semaphores available"
@@ -6563,7 +6564,7 @@ msgstr "Семафоры XENIX недоÑтупны"
#: sysdeps/gnu/errlist.c:1381
msgid "Is a named type file"
-msgstr "ЯвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ имен типов"
+msgstr "ЯвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ именованного типа"
#: sysdeps/gnu/errlist.c:1389
msgid "Remote I/O error"
diff --git a/libc/ports/ChangeLog.alpha b/libc/ports/ChangeLog.alpha
index 8ddde9f25..ca446c8a8 100644
--- a/libc/ports/ChangeLog.alpha
+++ b/libc/ports/ChangeLog.alpha
@@ -1,3 +1,34 @@
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/alpha/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_ver.
+
+ [BZ #3439]
+ * sysdeps/alpha/fpu/bits/fenv.h (FE_DENORMAL): Define macro to
+ integer constant usable in #if and use that to give value to enum
+ constant.
+ (FE_INEXACT): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_ALL_EXCEPT): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_DOWNWARD): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_UPWARD): Likewise.
+
+2012-11-01 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Remove all
+ definitions and declarations that are provided by
+ <bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14047]
+ * sysdeps/alpha/tininess.h: New file.
+
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/alpha/nptl/libc.abilist
diff --git a/libc/ports/ChangeLog.am33 b/libc/ports/ChangeLog.am33
index e8243c532..4e6d40b4c 100644
--- a/libc/ports/ChangeLog.am33
+++ b/libc/ports/ChangeLog.am33
@@ -1,3 +1,23 @@
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/am33/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_ver.
+
+ [BZ #3439]
+ * sysdeps/am33/fpu/bits/fenv.h (FE_INEXACT): Define macro to
+ integer constant usable in #if and use that to give value to enum
+ constant.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_TONEAREST): Likewise.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14047]
+ * sysdeps/am33/tininess.h: New file.
+
2012-10-09 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/am33/configure: Regenerated.
diff --git a/libc/ports/ChangeLog.arm b/libc/ports/ChangeLog.arm
index 0b76f5ed2..c5e5f367f 100644
--- a/libc/ports/ChangeLog.arm
+++ b/libc/ports/ChangeLog.arm
@@ -1,3 +1,28 @@
+2012-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+ (lll_futex_timed_wait_bitset): New macro.
+
+ [BZ #14805]
+ * sysdeps/arm/bits/fenv.h (FE_DFL_ENV): Use cast to const fenv_t *.
+
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/arm/fclrexcpt.c (feclearexcept): Add libm_hidden_ver.
+
+ [BZ #3439]
+ * sysdeps/arm/bits/fenv.h (FE_INVALID): Define macro to integer
+ constant usable in #if and use that to give value to enum
+ constant.
+ (FE_DIVBYZERO): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_INEXACT): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_DOWNWARD): Likewise.
+ (FE_TOWARDZERO): Likewise.
+
2012-10-22 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/arm/nptl/libc.abilist
diff --git a/libc/ports/ChangeLog.hppa b/libc/ports/ChangeLog.hppa
index 2bfd5d481..201dd01de 100644
--- a/libc/ports/ChangeLog.hppa
+++ b/libc/ports/ChangeLog.hppa
@@ -1,3 +1,65 @@
+2012-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14805]
+ * sysdeps/hppa/fpu/bits/fenv.h (FE_DFL_ENV): Use cast to const
+ fenv_t *.
+ (FE_NOMASK_ENV): Likewise.
+
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/hppa/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_def.
+
+ [BZ #3439]
+ * sysdeps/hppa/fpu/bits/fenv.h (FE_INVALID): Define macro to
+ integer constant usable in #if and use that to give value to enum
+ constant.
+ (FE_DIVBYZERO): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_INEXACT): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_DOWNWARD): Likewise.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14047]
+ * sysdeps/hppa/tininess.h: New file.
+
+2012-10-29 Carlos O'Donell <carlos@systemhalted.org>
+
+ * sysdeps/unix/sysv/linux/hppa/sysdep.h (ENTRY): Add cfi_startproc.
+ Use .cfi_offset for rp store.
+ (ENTRY_LEAF): Likewise.
+ (END) Add cfi_Endproc.
+ (DO_CALL): Add cfi directives.
+
+ * sysdeps/unix/sysv/linux/hppa/sysdep.h: Document register clobbering.
+ [PIC](TREG, SAVE_PIC, LOAD_PIC, TREG_ASM, SAVE_ASM_PIC, LOAD_ASM_PIC
+ CLOB_TREG, PIC_REG_DEF, PIC_REG_USE): Move...
+ (TREG, SAVE_PIC, LOAD_PIC, TREG_ASM, SAVE_ASM_PIC, LOAD_ASM_PIC
+ CLOB_TREG, PIC_REG_DEF, PIC_REG_USE): ... to here.
+ [!PIC](TREG, SAVE_PIC, LOAD_PIC, TREG_ASM, SAVE_ASM_PIC, LOAD_ASM_PIC
+ CLOB_TREG, PIC_REG_DEF, PIC_REG_USE): Remove.
+ (TREG): Use r4.
+
+ * sysdeps/unix/sysv/linux/hppa/sysdep.h: Don't include sys/syscall.h.
+ Document nop removal.
+ (PSEUDO): Remove nop.
+ (PSEUDO_NOERRNO): Likeise.
+ (PSEUDO_ERRVAL): Likewise.
+
+ * sysdeps/unix/sysv/linux/hppa/sysdep.h: Remove trailing whitespace.
+
+2012-10-26 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Remove all
+ definitions and declarations that are provided by
+ <bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
+ (__O_PATH): Define.
+
2012-10-24 Joseph Myers <joseph@codesourcery.com>
* sysdeps/hppa/nptl/Makefile (tst-oddstacklimit-ENV): Remove.
diff --git a/libc/ports/ChangeLog.ia64 b/libc/ports/ChangeLog.ia64
index 8d8f4dcd7..0b3361af0 100644
--- a/libc/ports/ChangeLog.ia64
+++ b/libc/ports/ChangeLog.ia64
@@ -1,3 +1,34 @@
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/ia64/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_def.
+
+ [BZ #3439]
+ * sysdeps/ia64/bits/fenv.h (FE_INEXACT): Define macro to integer
+ constant usable in #if and use that to give value to enum
+ constant.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_UNNORMAL): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_ALL_EXCEPT): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_DOWNWARD): Likewise.
+ (FE_TONEAREST): Likewise.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14047]
+ * sysdeps/ia64/tininess.h: New file.
+
+2012-10-25 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Remove all
+ definitions and declarations that are provided by
+ <bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
+
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/ia64/nptl/libc.abilist
diff --git a/libc/ports/ChangeLog.linux-generic b/libc/ports/ChangeLog.linux-generic
index efbf3992a..d3f0e5b75 100644
--- a/libc/ports/ChangeLog.linux-generic
+++ b/libc/ports/ChangeLog.linux-generic
@@ -1,3 +1,21 @@
+2012-11-04 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/generic/sysctl.c: Don't include
+ <stub-tag.h>.
+ * sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
+
+2012-10-27 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/generic/bits/fcntl.h: (__O_LARGEFILE)
+ [__WORDSIZE != 64]: Do not define, take value from
+ <bits/fcntl-linux.h>.
+
+2012-10-23 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/generic/bits/fcntl.h: Remove all
+ definitions and declarations that are provided by
+ <bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
+
2012-10-01 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
diff --git a/libc/ports/ChangeLog.m68k b/libc/ports/ChangeLog.m68k
index dda8cf7ee..206702e1f 100644
--- a/libc/ports/ChangeLog.m68k
+++ b/libc/ports/ChangeLog.m68k
@@ -1,3 +1,27 @@
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/m68k/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_ver.
+
+ [BZ #3439]
+ * sysdeps/m68k/fpu/bits/fenv.h (FE_INEXACT): Define macro to
+ integer constant usable in #if and use that to give value to enum
+ constant.
+ (FE_DIVBYZERO): Likewise.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_DOWNWARD): Likewise.
+ (FE_UPWARD): Likewise.
+
+2012-10-25 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/m68k/bits/fcntl.h: Remove all
+ definitions and declarations that are provided by
+ <bits/fcntl-linux.h> and include <bits/fcntl-linux.h>.
+
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libc.abilist:
diff --git a/libc/ports/ChangeLog.mips b/libc/ports/ChangeLog.mips
index a6aecad24..8dc4893b0 100644
--- a/libc/ports/ChangeLog.mips
+++ b/libc/ports/ChangeLog.mips
@@ -1,3 +1,77 @@
+2012-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
+ (lll_futex_timed_wait_bitset): New macro.
+
+2012-11-04 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c: Don't
+ include <stub-tag.h>.
+
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/mips/fpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_def.
+
+ [BZ #3439]
+ * sysdeps/mips/bits/fenv.h (FE_INEXACT): Define macro to integer
+ constant usable in #if and use that to give value to enum
+ constant.
+ (FE_UNDERFLOW): Likewise.
+ (FE_OVERFLOW): Likewise.
+ (FE_DIVBYZERO): Likewise.
+ (FE_INVALID): Likewise.
+ (FE_TONEAREST): Likewise.
+ (FE_TOWARDZERO): Likewise.
+ (FE_UPWARD): Likewise.
+ (FE_DOWNWARD): Likewise.
+
+2012-11-01 Thomas Schwinge <thomas@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/mips/configure: Regenerate.
+
+ * sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist
+ (GLIBC_2.17): Add clock_* symbols.
+
+2012-10-31 Steve Ellcey <sellcey@mips.com>
+
+ * sysdeps/mips/memcpy.S: Add prefetching and more unrolling, make
+ it work in 32 or 64 bit modes.
+ * sysdeps/mips/mips64/memcpy.S: Remove.
+
+2012-10-30 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #14047]
+ * sysdeps/mips/tininess.h: New file.
+
+2012-10-29 Steve Ellcey <sellcey@mips.com>
+
+ * sysdeps/unix/sysv/linux/mips/mips32/Makefile: Remove.
+ * sysdeps/unix/sysv/linux/mips/mips64/n32/Makefile: Remove.
+ * sysdeps/unix/sysv/linux/mips/mips64/n64/Makefile: Remove.
+ * sysdeps/unix/sysv/linux/mips/configure.in: Create default_abi.make.
+ * sysdeps/unix/sysv/linux/mips/configure: Regenerate.
+ * sysdeps/unix/sysv/linux/mips/Makefile: Include default_abi.make.
+ (abi-variants): Add hard and soft float versions.
+ (abi-o32-options): Remove.
+ (abi-o32-condition): Remove.
+ (abi-n32-options): Remove.
+ (abi-n32-condition): Remove.
+ (abi-n64-options): Remove.
+ (abi-n64-condition): Remove.
+ (abi-o32_soft-options): New.
+ (abi-o32_soft-condition): New.
+ (abi-o32_hard-options): New.
+ (abi-o32_hard-condition): New.
+ (abi-n32_soft-options): New.
+ (abi-n32_soft-condition): New.
+ (abi-n32_hard-options): New.
+ (abi-n32_hard-condition): New.
+ (abi-n64_soft-options): New.
+ (abi-n64_soft-condition): New.
+ (abi-n64_hard-options): New.
+ (abi-n64_hard-condition): New.
+
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/mips/mips32/nptl/libc.abilist
diff --git a/libc/ports/ChangeLog.powerpc b/libc/ports/ChangeLog.powerpc
index 642e7165c..a6fd7821f 100644
--- a/libc/ports/ChangeLog.powerpc
+++ b/libc/ports/ChangeLog.powerpc
@@ -1,3 +1,22 @@
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/powerpc/nofpu/fclrexcpt.c (feclearexcept): Add
+ libm_hidden_ver.
+
+2012-10-31 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist:
+ Fix sort order.
+
+2012-10-30 Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
+ Ryan S. Arnold <rsa@linux.vnet.ibm.com>
+
+ [BZ #14595]
+ * sysdeps/powerpc/powerpc32/476/memset.S: New file copied from
+ 405/memset.S to preserve 128-byte cacheline size.
+ * sysdeps/powerpc/powerpc32/405/memset.S (memset): Fix cacheline size
+ to 32-bytes for 405, 440, and 464 processors.
+
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist
diff --git a/libc/ports/ChangeLog.tile b/libc/ports/ChangeLog.tile
index 93c99ac69..06f24c27e 100644
--- a/libc/ports/ChangeLog.tile
+++ b/libc/ports/ChangeLog.tile
@@ -1,3 +1,58 @@
+2012-11-06 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/tile/nptl/pthread_spin_unlock.c: New file.
+
+2012-11-05 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/tile/math_private.h: Provide additional no-op defines
+ for exception and rounding macros.
+
+ * sysdeps/tile/tilegx/Makefile: Generate Makefile fragment to determine
+ whether to build elf-init.c and gmon-start.c with -mcmodel=large.
+ * sysdeps/tile/crti.S: Support large memory model.
+ * sysdeps/tile/start.S: Likewise.
+
+2012-11-02 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/tile/dl-runtime.c (_dl_after_load): Handle simulator
+ notification better for dlopen() of relative paths.
+
+ * sysdeps/tile/tilegx/memcpy.c (__memcpy): Optimize.
+ * sysdeps/tile/memcopy.h: New file.
+ * sysdeps/tile/wordcopy.c: New file.
+
+2012-11-03 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #3439]
+ * sysdeps/tile/bits/fenv.h (FE_TONEAREST): Define macro to integer
+ constant usable in #if and use that to give value to enum
+ constant.
+
+2012-11-03 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/tile/libm-test-ulps: Account for new tests.
+
+2012-10-30 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/tile/dl-machine.h: Use new DL_AFTER_LOAD macro
+ and rename _dl_arch_map_object to _dl_after_load.
+ * sysdeps/tile/dl-runtime.c: Rename _dl_arch_map_object
+ to _dl_after_load and remove spurious DL_UNMAP definition.
+
+ * sysdeps/unix/sysv/linux/tile/init-first.c: Use better #include.
+ * sysdeps/unix/sysv/linux/tile/gettimeofday.c: Use gettimeofday
+ aliases that match existing tile ABI.
+
+ * sysdeps/tile/libm-test-ulps: Account for new tests.
+
+2012-10-26 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/unix/sysv/linux/tile/Makefile (sysdep_routines):
+ Include dl-vdso.
+ * sysdeps/unix/sysv/linux/tile/bits/libc-vdso.h: New file.
+ * sysdeps/unix/sysv/linux/tile/gettimeofday.c: New file.
+ * sysdeps/unix/sysv/linux/tile/init-first.c: New file.
+
2012-10-19 Roland McGrath <roland@hack.frob.com>
* sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist:
diff --git a/libc/ports/sysdeps/alpha/fpu/bits/fenv.h b/libc/ports/sysdeps/alpha/fpu/bits/fenv.h
index 2ddbaa15f..9edbe7682 100644
--- a/libc/ports/sysdeps/alpha/fpu/bits/fenv.h
+++ b/libc/ports/sysdeps/alpha/fpu/bits/fenv.h
@@ -36,27 +36,34 @@
enum
{
#ifdef __USE_GNU
- FE_DENORMAL = 1UL << 22,
-#define FE_DENORMAL FE_DENORMAL
+ FE_DENORMAL =
+#define FE_DENORMAL (1 << 22)
+ FE_DENORMAL,
#endif
- FE_INEXACT = 1UL << 21,
-#define FE_INEXACT FE_INEXACT
+ FE_INEXACT =
+#define FE_INEXACT (1 << 21)
+ FE_INEXACT,
- FE_UNDERFLOW = 1UL << 20,
-#define FE_UNDERFLOW FE_UNDERFLOW
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1 << 20)
+ FE_UNDERFLOW,
- FE_OVERFLOW = 1UL << 19,
-#define FE_OVERFLOW FE_OVERFLOW
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1 << 19)
+ FE_OVERFLOW,
- FE_DIVBYZERO = 1UL << 18,
-#define FE_DIVBYZERO FE_DIVBYZERO
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1 << 18)
+ FE_DIVBYZERO,
- FE_INVALID = 1UL << 17,
-#define FE_INVALID FE_INVALID
+ FE_INVALID =
+#define FE_INVALID (1 << 17)
+ FE_INVALID,
- FE_ALL_EXCEPT = 0x3f << 17
-#define FE_ALL_EXCEPT FE_ALL_EXCEPT
+ FE_ALL_EXCEPT =
+#define FE_ALL_EXCEPT (0x3f << 17)
+ FE_ALL_EXCEPT
};
/* Alpha chips support all four defined rouding modes.
@@ -70,17 +77,21 @@ enum
enum
{
- FE_TOWARDZERO = 0,
-#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 0
+ FE_TOWARDZERO,
- FE_DOWNWARD = 1,
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_DOWNWARD =
+#define FE_DOWNWARD 1
+ FE_DOWNWARD,
- FE_TONEAREST = 2,
-#define FE_TONEAREST FE_TONEAREST
+ FE_TONEAREST =
+#define FE_TONEAREST 2
+ FE_TONEAREST,
- FE_UPWARD = 3,
-#define FE_UPWARD FE_UPWARD
+ FE_UPWARD =
+#define FE_UPWARD 3
+ FE_UPWARD,
};
#ifdef __USE_GNU
diff --git a/libc/ports/sysdeps/alpha/fpu/fclrexcpt.c b/libc/ports/sysdeps/alpha/fpu/fclrexcpt.c
index 2d2bd94db..84596529c 100644
--- a/libc/ports/sysdeps/alpha/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/alpha/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997.
@@ -43,4 +43,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/ports/sysdeps/alpha/tininess.h b/libc/ports/sysdeps/alpha/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/ports/sysdeps/alpha/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/ports/sysdeps/am33/fpu/bits/fenv.h b/libc/ports/sysdeps/am33/fpu/bits/fenv.h
index d3a89982b..b0e60e931 100644
--- a/libc/ports/sysdeps/am33/fpu/bits/fenv.h
+++ b/libc/ports/sysdeps/am33/fpu/bits/fenv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Alexandre Oliva <aoliva@redhat.com>
based on the corresponding file in the mips port.
@@ -26,16 +26,21 @@
positions of the appropriate bits in the FPCR register. */
enum
{
- FE_INEXACT = 0x01,
-#define FE_INEXACT FE_INEXACT
- FE_UNDERFLOW = 0x02,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_OVERFLOW = 0x04,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_DIVBYZERO = 0x08,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_INVALID = 0x10,
-#define FE_INVALID FE_INVALID
+ FE_INEXACT =
+#define FE_INEXACT 0x01
+ FE_INEXACT,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW 0x02
+ FE_UNDERFLOW,
+ FE_OVERFLOW =
+#define FE_OVERFLOW 0x04
+ FE_OVERFLOW,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO 0x08
+ FE_DIVBYZERO,
+ FE_INVALID =
+#define FE_INVALID 0x10
+ FE_INVALID,
};
#define FE_ALL_EXCEPT \
@@ -45,8 +50,9 @@ enum
reserved to represent other rounding modes. */
enum
{
- FE_TONEAREST = 0x00000,
-#define FE_TONEAREST FE_TONEAREST
+ FE_TONEAREST =
+#define FE_TONEAREST 0x00000
+ FE_TONEAREST,
};
diff --git a/libc/ports/sysdeps/am33/fpu/fclrexcpt.c b/libc/ports/sysdeps/am33/fpu/fclrexcpt.c
index 2b15f45a6..492ea38ba 100644
--- a/libc/ports/sysdeps/am33/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/am33/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Alexandre Oliva <aoliva@redhat.com>
based on corresponding file in the MIPS port.
@@ -48,4 +48,5 @@ __feclearexcept (int excepts)
return 0;
}
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/ports/sysdeps/am33/tininess.h b/libc/ports/sysdeps/am33/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/ports/sysdeps/am33/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/ports/sysdeps/arm/bits/fenv.h b/libc/ports/sysdeps/arm/bits/fenv.h
index 006ccf528..bc4a3ee53 100644
--- a/libc/ports/sysdeps/arm/bits/fenv.h
+++ b/libc/ports/sysdeps/arm/bits/fenv.h
@@ -22,16 +22,21 @@
/* Define bits representing exceptions in the FPU status word. */
enum
{
- FE_INVALID = 1,
-#define FE_INVALID FE_INVALID
- FE_DIVBYZERO = 2,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_OVERFLOW = 4,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_UNDERFLOW = 8,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_INEXACT = 16,
-#define FE_INEXACT FE_INEXACT
+ FE_INVALID =
+#define FE_INVALID 1
+ FE_INVALID,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO 2
+ FE_DIVBYZERO,
+ FE_OVERFLOW =
+#define FE_OVERFLOW 4
+ FE_OVERFLOW,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW 8
+ FE_UNDERFLOW,
+ FE_INEXACT =
+#define FE_INEXACT 16
+ FE_INEXACT,
};
/* Amount to shift by to convert an exception to a mask bit. */
@@ -44,14 +49,18 @@ enum
/* VFP supports all of the four defined rounding modes. */
enum
{
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
- FE_UPWARD = 0x400000,
-#define FE_UPWARD FE_UPWARD
- FE_DOWNWARD = 0x800000,
-#define FE_DOWNWARD FE_DOWNWARD
- FE_TOWARDZERO = 0xc00000
-#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
+ FE_UPWARD =
+#define FE_UPWARD 0x400000
+ FE_UPWARD,
+ FE_DOWNWARD =
+#define FE_DOWNWARD 0x800000
+ FE_DOWNWARD,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 0xc00000
+ FE_TOWARDZERO
};
/* Type representing exception flags. */
@@ -65,7 +74,7 @@ typedef struct
fenv_t;
/* If the default argument is used we use this value. */
-#define FE_DFL_ENV ((fenv_t *) -1l)
+#define FE_DFL_ENV ((const fenv_t *) -1l)
#ifdef __USE_GNU
/* Floating-point environment where none of the exceptions are masked. */
diff --git a/libc/ports/sysdeps/arm/fclrexcpt.c b/libc/ports/sysdeps/arm/fclrexcpt.c
index 23435fba7..fb106a5cc 100644
--- a/libc/ports/sysdeps/arm/fclrexcpt.c
+++ b/libc/ports/sysdeps/arm/fclrexcpt.c
@@ -54,4 +54,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/ports/sysdeps/hppa/fpu/bits/fenv.h b/libc/ports/sysdeps/hppa/fpu/bits/fenv.h
index 6af5ddeef..49e30185a 100644
--- a/libc/ports/sysdeps/hppa/fpu/bits/fenv.h
+++ b/libc/ports/sysdeps/hppa/fpu/bits/fenv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David Huggins-Daines <dhd@debian.org>
@@ -26,16 +26,21 @@
27 bits). */
enum
{
- FE_INVALID = 1<<4, /* V */
-#define FE_INVALID FE_INVALID
- FE_DIVBYZERO = 1<<3, /* Z */
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_OVERFLOW = 1<<2, /* O */
-#define FE_OVERFLOW FE_OVERFLOW
- FE_UNDERFLOW = 1<<1, /* U */
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_INEXACT = 1<<0, /* I */
-#define FE_INEXACT FE_INEXACT
+ FE_INVALID =
+#define FE_INVALID (1<<4) /* V */
+ FE_INVALID,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1<<3) /* Z */
+ FE_DIVBYZERO,
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1<<2) /* O */
+ FE_OVERFLOW,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1<<1) /* U */
+ FE_UNDERFLOW,
+ FE_INEXACT =
+#define FE_INEXACT (1<<0) /* I */
+ FE_INEXACT,
};
#define FE_ALL_EXCEPT \
@@ -46,14 +51,18 @@ enum
register for the appropriate macros. */
enum
{
- FE_TONEAREST = 0 << 9,
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = 1 << 9,
-#define FE_TOWARDZERO FE_TOWARDZERO
- FE_UPWARD = 2 << 9,
-#define FE_UPWARD FE_UPWARD
- FE_DOWNWARD = 3 << 9,
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_TONEAREST =
+#define FE_TONEAREST (0 << 9)
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO (1 << 9)
+ FE_TOWARDZERO,
+ FE_UPWARD =
+#define FE_UPWARD (2 << 9)
+ FE_UPWARD,
+ FE_DOWNWARD =
+#define FE_DOWNWARD (3 << 9)
+ FE_DOWNWARD,
};
/* Type representing exception flags. */
@@ -74,9 +83,9 @@ typedef struct
} fenv_t;
/* If the default argument is used we use this value. */
-#define FE_DFL_ENV ((fenv_t *) -1)
+#define FE_DFL_ENV ((const fenv_t *) -1)
#ifdef __USE_GNU
/* Floating-point environment where none of the exceptions are masked. */
-# define FE_NOMASK_ENV ((fenv_t *) -2)
+# define FE_NOMASK_ENV ((const fenv_t *) -2)
#endif
diff --git a/libc/ports/sysdeps/hppa/fpu/fclrexcpt.c b/libc/ports/sysdeps/hppa/fpu/fclrexcpt.c
index 5d1e59310..bbc2c7080 100644
--- a/libc/ports/sysdeps/hppa/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/hppa/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 2000 Free Software Foundation, Inc.
+ Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David Huggins-Daines <dhd@debian.org>, 2000
@@ -33,3 +33,4 @@ feclearexcept (int excepts)
/* Success. */
return 0;
}
+libm_hidden_def (feclearexcept)
diff --git a/libc/ports/sysdeps/hppa/tininess.h b/libc/ports/sysdeps/hppa/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/ports/sysdeps/hppa/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/ports/sysdeps/ia64/bits/fenv.h b/libc/ports/sysdeps/ia64/bits/fenv.h
index 342605d8c..7b5a75315 100644
--- a/libc/ports/sysdeps/ia64/bits/fenv.h
+++ b/libc/ports/sysdeps/ia64/bits/fenv.h
@@ -25,43 +25,53 @@
enum
{
- FE_INEXACT = 1UL << 5,
-#define FE_INEXACT FE_INEXACT
+ FE_INEXACT =
+#define FE_INEXACT (1 << 5)
+ FE_INEXACT,
- FE_UNDERFLOW = 1UL << 4,
-#define FE_UNDERFLOW FE_UNDERFLOW
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1 << 4)
+ FE_UNDERFLOW,
- FE_OVERFLOW = 1UL << 3,
-#define FE_OVERFLOW FE_OVERFLOW
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1 << 3)
+ FE_OVERFLOW,
- FE_DIVBYZERO = 1UL << 2,
-#define FE_DIVBYZERO FE_DIVBYZERO
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1 << 2)
+ FE_DIVBYZERO,
- FE_UNNORMAL = 1UL << 1,
-#define FE_UNNORMAL FE_UNNORMAL
+ FE_UNNORMAL =
+#define FE_UNNORMAL (1 << 1)
+ FE_UNNORMAL,
- FE_INVALID = 1UL << 0,
-#define FE_INVALID FE_INVALID
+ FE_INVALID =
+#define FE_INVALID (1 << 0)
+ FE_INVALID,
FE_ALL_EXCEPT =
- (FE_INEXACT | FE_UNDERFLOW | FE_OVERFLOW | FE_DIVBYZERO | FE_UNNORMAL | FE_INVALID)
-#define FE_ALL_EXCEPT FE_ALL_EXCEPT
+#define FE_ALL_EXCEPT (FE_INEXACT | FE_UNDERFLOW | FE_OVERFLOW | FE_DIVBYZERO | FE_UNNORMAL | FE_INVALID)
+ FE_ALL_EXCEPT
};
enum
{
- FE_TOWARDZERO = 3,
-#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 3
+ FE_TOWARDZERO,
- FE_UPWARD = 2,
-#define FE_UPWARD FE_UPWARD
+ FE_UPWARD =
+#define FE_UPWARD 2
+ FE_UPWARD,
- FE_DOWNWARD = 1,
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_DOWNWARD =
+#define FE_DOWNWARD 1
+ FE_DOWNWARD,
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
};
diff --git a/libc/ports/sysdeps/ia64/fpu/fclrexcpt.c b/libc/ports/sysdeps/ia64/fpu/fclrexcpt.c
index 84f83277b..c099fd35a 100644
--- a/libc/ports/sysdeps/ia64/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/ia64/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Christian Boissat <Christian.Boissat@cern.ch>, 1999 and
Jes Sorensen <Jes.Sorensen@cern.ch>, 2000
@@ -36,3 +36,4 @@ feclearexcept (int excepts)
/* success */
return 0;
}
+libm_hidden_def (feclearexcept)
diff --git a/libc/ports/sysdeps/ia64/tininess.h b/libc/ports/sysdeps/ia64/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/ports/sysdeps/ia64/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/ports/sysdeps/m68k/fpu/bits/fenv.h b/libc/ports/sysdeps/m68k/fpu/bits/fenv.h
index c98365acd..584514c5d 100644
--- a/libc/ports/sysdeps/m68k/fpu/bits/fenv.h
+++ b/libc/ports/sysdeps/m68k/fpu/bits/fenv.h
@@ -24,16 +24,21 @@
the appropriate bits in the FPSR Accrued Exception Byte. */
enum
{
- FE_INEXACT = 1 << 3,
-#define FE_INEXACT FE_INEXACT
- FE_DIVBYZERO = 1 << 4,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_UNDERFLOW = 1 << 5,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_OVERFLOW = 1 << 6,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_INVALID = 1 << 7
-#define FE_INVALID FE_INVALID
+ FE_INEXACT =
+#define FE_INEXACT (1 << 3)
+ FE_INEXACT,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1 << 4)
+ FE_DIVBYZERO,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1 << 5)
+ FE_UNDERFLOW,
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1 << 6)
+ FE_OVERFLOW,
+ FE_INVALID =
+#define FE_INVALID (1 << 7)
+ FE_INVALID
};
#define FE_ALL_EXCEPT \
@@ -44,14 +49,18 @@ enum
appropriate macros. */
enum
{
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = 1 << 4,
-#define FE_TOWARDZERO FE_TOWARDZERO
- FE_DOWNWARD = 2 << 4,
-#define FE_DOWNWARD FE_DOWNWARD
- FE_UPWARD = 3 << 4
-#define FE_UPWARD FE_UPWARD
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO (1 << 4)
+ FE_TOWARDZERO,
+ FE_DOWNWARD =
+#define FE_DOWNWARD (2 << 4)
+ FE_DOWNWARD,
+ FE_UPWARD =
+#define FE_UPWARD (3 << 4)
+ FE_UPWARD
};
diff --git a/libc/ports/sysdeps/m68k/fpu/fclrexcpt.c b/libc/ports/sysdeps/m68k/fpu/fclrexcpt.c
index ceda99cb9..cfc8d9e25 100644
--- a/libc/ports/sysdeps/m68k/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/m68k/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
@@ -46,4 +46,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/ports/sysdeps/mips/bits/fenv.h b/libc/ports/sysdeps/mips/bits/fenv.h
index bc87b15ec..4e03c97c1 100644
--- a/libc/ports/sysdeps/mips/bits/fenv.h
+++ b/libc/ports/sysdeps/mips/bits/fenv.h
@@ -24,16 +24,21 @@
of the appropriate bits in the FPU control word. */
enum
{
- FE_INEXACT = 0x04,
-#define FE_INEXACT FE_INEXACT
- FE_UNDERFLOW = 0x08,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_OVERFLOW = 0x10,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_DIVBYZERO = 0x20,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_INVALID = 0x40,
-#define FE_INVALID FE_INVALID
+ FE_INEXACT =
+#define FE_INEXACT 0x04
+ FE_INEXACT,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW 0x08
+ FE_UNDERFLOW,
+ FE_OVERFLOW =
+#define FE_OVERFLOW 0x10
+ FE_OVERFLOW,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO 0x20
+ FE_DIVBYZERO,
+ FE_INVALID =
+#define FE_INVALID 0x40
+ FE_INVALID,
};
#define FE_ALL_EXCEPT \
@@ -44,14 +49,18 @@ enum
for the appropriate macros. */
enum
{
- FE_TONEAREST = 0x0,
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = 0x1,
-#define FE_TOWARDZERO FE_TOWARDZERO
- FE_UPWARD = 0x2,
-#define FE_UPWARD FE_UPWARD
- FE_DOWNWARD = 0x3
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_TONEAREST =
+#define FE_TONEAREST 0x0
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 0x1
+ FE_TOWARDZERO,
+ FE_UPWARD =
+#define FE_UPWARD 0x2
+ FE_UPWARD,
+ FE_DOWNWARD =
+#define FE_DOWNWARD 0x3
+ FE_DOWNWARD
};
diff --git a/libc/ports/sysdeps/mips/fpu/fclrexcpt.c b/libc/ports/sysdeps/mips/fpu/fclrexcpt.c
index f97d89260..f4709b4d2 100644
--- a/libc/ports/sysdeps/mips/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/mips/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 1998.
@@ -44,3 +44,4 @@ feclearexcept (int excepts)
/* Success. */
return 0;
}
+libm_hidden_def (feclearexcept)
diff --git a/libc/ports/sysdeps/mips/memcpy.S b/libc/ports/sysdeps/mips/memcpy.S
index 753f67ca1..abb07f9ee 100644
--- a/libc/ports/sysdeps/mips/memcpy.S
+++ b/libc/ports/sysdeps/mips/memcpy.S
@@ -1,6 +1,5 @@
-/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Hartvig Ekner <hartvige@mips.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
@@ -16,119 +15,616 @@
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
+#ifdef ANDROID_CHANGES
+#include "machine/asm.h"
+#include "machine/regdef.h"
+#define USE_MEMMOVE_FOR_OVERLAP
+#define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD_STREAMED
+#define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE
+#elif _LIBC
#include <sysdep.h>
+#include <regdef.h>
+#include <sys/asm.h>
+#define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD_STREAMED
+#define PREFETCH_STORE_HINT PREFETCH_HINT_STORE_STREAMED
+#elif _COMPILING_NEWLIB
+#include "machine/asm.h"
+#include "machine/regdef.h"
+#define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD_STREAMED
+#define PREFETCH_STORE_HINT PREFETCH_HINT_STORE_STREAMED
+#else
+#include <regdef.h>
+#include <sys/asm.h>
+#endif
+
+#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) || \
+ (_MIPS_ISA == _MIPS_ISA_MIPS32) || (_MIPS_ISA == _MIPS_ISA_MIPS64)
+#ifndef DISABLE_PREFETCH
+#define USE_PREFETCH
+#endif
+#endif
+
+#if (_MIPS_SIM == _ABI64) || (_MIPS_SIM == _ABIN32)
+#ifndef DISABLE_DOUBLE
+#define USE_DOUBLE
+#endif
+#endif
+
+
+
+/* Some asm.h files do not have the L macro definition. */
+#ifndef L
+#if _MIPS_SIM == _ABIO32
+# define L(label) $L ## label
+#else
+# define L(label) .L ## label
+#endif
+#endif
+
+/* Some asm.h files do not have the PTR_ADDIU macro definition. */
+#ifndef PTR_ADDIU
+#ifdef USE_DOUBLE
+#define PTR_ADDIU daddiu
+#else
+#define PTR_ADDIU addiu
+#endif
+#endif
+
+/* Some asm.h files do not have the PTR_SRA macro definition. */
+#ifndef PTR_SRA
+#ifdef USE_DOUBLE
+#define PTR_SRA dsra
+#else
+#define PTR_SRA sra
+#endif
+#endif
+
+
+/*
+ * Using PREFETCH_HINT_LOAD_STREAMED instead of PREFETCH_LOAD on load
+ * prefetches appears to offer a slight preformance advantage.
+ *
+ * Using PREFETCH_HINT_PREPAREFORSTORE instead of PREFETCH_STORE
+ * or PREFETCH_STORE_STREAMED offers a large performance advantage
+ * but PREPAREFORSTORE has some special restrictions to consider.
+ *
+ * Prefetch with the 'prepare for store' hint does not copy a memory
+ * location into the cache, it just allocates a cache line and zeros
+ * it out. This means that if you do not write to the entire cache
+ * line before writing it out to memory some data will get zero'ed out
+ * when the cache line is written back to memory and data will be lost.
+ *
+ * Also if you are using this memcpy to copy overlapping buffers it may
+ * not behave correctly when using the 'prepare for store' hint. If you
+ * use the 'prepare for store' prefetch on a memory area that is in the
+ * memcpy source (as well as the memcpy destination), then you will get
+ * some data zero'ed out before you have a chance to read it and data will
+ * be lost.
+ *
+ * If you are going to use this memcpy routine with the 'prepare for store'
+ * prefetch you may want to set USE_MEMMOVE_FOR_OVERLAP in order to avoid
+ * the problem of running memcpy on overlapping buffers.
+ *
+ * There are ifdef'ed sections of this memcpy to make sure that it does not
+ * do prefetches on cache lines that are not going to be completely written.
+ * This code is only needed and only used when PREFETCH_STORE_HINT is set to
+ * PREFETCH_HINT_PREPAREFORSTORE. This code assumes that cache lines are
+ * 32 bytes and if the cache line is larger it will not work correctly.
+ */
+#ifdef USE_PREFETCH
+# define PREFETCH_HINT_LOAD 0
+# define PREFETCH_HINT_STORE 1
+# define PREFETCH_HINT_LOAD_STREAMED 4
+# define PREFETCH_HINT_STORE_STREAMED 5
+# define PREFETCH_HINT_LOAD_RETAINED 6
+# define PREFETCH_HINT_STORE_RETAINED 7
+# define PREFETCH_HINT_WRITEBACK_INVAL 25
+# define PREFETCH_HINT_PREPAREFORSTORE 30
+
+/*
+ * If we have not picked out what hints to use at this point use the
+ * standard load and store prefetch hints.
+ */
+#ifndef PREFETCH_STORE_HINT
+# define PREFETCH_STORE_HINT PREFETCH_HINT_STORE
+#endif
+#ifndef PREFETCH_LOAD_HINT
+# define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD
+#endif
-/* void *memcpy(void *s1, const void *s2, size_t n); */
+/*
+ * We double everything when USE_DOUBLE is true so we do 2 prefetches to
+ * get 64 bytes in that case. The assumption is that each individual
+ * prefetch brings in 32 bytes.
+ */
+#ifdef USE_DOUBLE
+# define PREFETCH_CHUNK 64
+# define PREFETCH_FOR_LOAD(chunk, reg) \
+ pref PREFETCH_LOAD_HINT, (chunk)*32(reg); \
+ pref PREFETCH_LOAD_HINT, ((chunk)+1)*32(reg)
+# define PREFETCH_FOR_STORE(chunk, reg) \
+ pref PREFETCH_STORE_HINT, (chunk)*32(reg); \
+ pref PREFETCH_STORE_HINT, ((chunk)+1)*32(reg)
+#else
+# define PREFETCH_CHUNK 32
+# define PREFETCH_FOR_LOAD(chunk, reg) \
+ pref PREFETCH_LOAD_HINT, (chunk)*32(reg)
+# define PREFETCH_FOR_STORE(chunk, reg) \
+ pref PREFETCH_STORE_HINT, (chunk)*32(reg)
+#endif
+# define PREFETCH_LIMIT (5 * PREFETCH_CHUNK)
+#else /* USE_PREFETCH not defined */
+# define PREFETCH_FOR_LOAD(offset, reg)
+# define PREFETCH_FOR_STORE(offset, reg)
+#endif
+
+/* Allow the routine to be named something else if desired. */
+#ifndef MEMCPY_NAME
+#define MEMCPY_NAME memcpy
+#endif
+/* We use these 32/64 bit registers as temporaries to do the copying. */
+#define REG0 t0
+#define REG1 t1
+#define REG2 t2
+#define REG3 t3
+#if _MIPS_SIM == _ABIO32
+# define REG4 t4
+# define REG5 t5
+# define REG6 t6
+# define REG7 t7
+#else
+# define REG4 ta0
+# define REG5 ta1
+# define REG6 ta2
+# define REG7 ta3
+#endif
+
+/* We load/store 64 bits at a time when USE_DOUBLE is true.
+ * The C_ prefix stands for CHUNK and is used to avoid macro name
+ * conflicts with system header files. */
+
+#ifdef USE_DOUBLE
+# define C_ST sd
+# define C_LD ld
+#if __MIPSEB
+# define C_LDHI ldl /* high part is left in big-endian */
+# define C_STHI sdl /* high part is left in big-endian */
+# define C_LDLO ldr /* low part is right in big-endian */
+# define C_STLO sdr /* low part is right in big-endian */
+#else
+# define C_LDHI ldr /* high part is right in little-endian */
+# define C_STHI sdr /* high part is right in little-endian */
+# define C_LDLO ldl /* low part is left in little-endian */
+# define C_STLO sdl /* low part is left in little-endian */
+#endif
+#else
+# define C_ST sw
+# define C_LD lw
#if __MIPSEB
-# define LWHI lwl /* high part is left in big-endian */
-# define SWHI swl /* high part is left in big-endian */
-# define LWLO lwr /* low part is right in big-endian */
-# define SWLO swr /* low part is right in big-endian */
+# define C_LDHI lwl /* high part is left in big-endian */
+# define C_STHI swl /* high part is left in big-endian */
+# define C_LDLO lwr /* low part is right in big-endian */
+# define C_STLO swr /* low part is right in big-endian */
#else
-# define LWHI lwr /* high part is right in little-endian */
-# define SWHI swr /* high part is right in little-endian */
-# define LWLO lwl /* low part is left in little-endian */
-# define SWLO swl /* low part is left in little-endian */
+# define C_LDHI lwr /* high part is right in little-endian */
+# define C_STHI swr /* high part is right in little-endian */
+# define C_LDLO lwl /* low part is left in little-endian */
+# define C_STLO swl /* low part is left in little-endian */
+#endif
#endif
-ENTRY (memcpy)
+/* Bookkeeping values for 32 vs. 64 bit mode. */
+#ifdef USE_DOUBLE
+# define NSIZE 8
+# define NSIZEMASK 0x3f
+# define NSIZEDMASK 0x7f
+#else
+# define NSIZE 4
+# define NSIZEMASK 0x1f
+# define NSIZEDMASK 0x3f
+#endif
+#define UNIT(unit) ((unit)*NSIZE)
+#define UNITM1(unit) (((unit)*NSIZE)-1)
+
+#ifdef ANDROID_CHANGES
+LEAF(MEMCPY_NAME, 0)
+#else
+LEAF(MEMCPY_NAME)
+#endif
+ .set nomips16
.set noreorder
+/*
+ * Below we handle the case where memcpy is called with overlapping src and dst.
+ * Although memcpy is not required to handle this case, some parts of Android
+ * like Skia rely on such usage. We call memmove to handle such cases.
+ */
+#ifdef USE_MEMMOVE_FOR_OVERLAP
+ PTR_SUBU t0,a0,a1
+ PTR_SRA t2,t0,31
+ xor t1,t0,t2
+ PTR_SUBU t0,t1,t2
+ sltu t2,t0,a2
+ beq t2,zero,L(memcpy)
+ la t9,memmove
+ jr t9
+ nop
+L(memcpy):
+#endif
+/*
+ * If the size is less then 2*NSIZE (8 or 16), go to L(lastb). Regardless of
+ * size, copy dst pointer to v0 for the return value.
+ */
+ slti t2,a2,(2 * NSIZE)
+ bne t2,zero,L(lastb)
+ move v0,a0
+/*
+ * If src and dst have different alignments, go to L(unaligned), if they
+ * have the same alignment (but are not actually aligned) do a partial
+ * load/store to make them aligned. If they are both already aligned
+ * we can start copying at L(aligned).
+ */
+ xor t8,a1,a0
+ andi t8,t8,(NSIZE-1) /* t8 is a0/a1 word-displacement */
+ bne t8,zero,L(unaligned)
+ PTR_SUBU a3, zero, a0
+
+ andi a3,a3,(NSIZE-1) /* copy a3 bytes to align a0/a1 */
+ beq a3,zero,L(aligned) /* if a3=0, it is already aligned */
+ PTR_SUBU a2,a2,a3 /* a2 is the remining bytes count */
- slti t0, a2, 8 # Less than 8?
- bne t0, zero, L(last8)
- move v0, a0 # Setup exit value before too late
-
- xor t0, a1, a0 # Find a0/a1 displacement
- andi t0, 0x3
- bne t0, zero, L(shift) # Go handle the unaligned case
- subu t1, zero, a1
- andi t1, 0x3 # a0/a1 are aligned, but are we
- beq t1, zero, L(chk8w) # starting in the middle of a word?
- subu a2, t1
- LWHI t0, 0(a1) # Yes we are... take care of that
- addu a1, t1
- SWHI t0, 0(a0)
- addu a0, t1
-
-L(chk8w):
- andi t0, a2, 0x1f # 32 or more bytes left?
- beq t0, a2, L(chk1w)
- subu a3, a2, t0 # Yes
- addu a3, a1 # a3 = end address of loop
- move a2, t0 # a2 = what will be left after loop
-L(lop8w):
- lw t0, 0(a1) # Loop taking 8 words at a time
- lw t1, 4(a1)
- lw t2, 8(a1)
- lw t3, 12(a1)
- lw t4, 16(a1)
- lw t5, 20(a1)
- lw t6, 24(a1)
- lw t7, 28(a1)
- addiu a0, 32
- addiu a1, 32
- sw t0, -32(a0)
- sw t1, -28(a0)
- sw t2, -24(a0)
- sw t3, -20(a0)
- sw t4, -16(a0)
- sw t5, -12(a0)
- sw t6, -8(a0)
- bne a1, a3, L(lop8w)
- sw t7, -4(a0)
-
-L(chk1w):
- andi t0, a2, 0x3 # 4 or more bytes left?
- beq t0, a2, L(last8)
- subu a3, a2, t0 # Yes, handle them one word at a time
- addu a3, a1 # a3 again end address
- move a2, t0
-L(lop1w):
- lw t0, 0(a1)
- addiu a0, 4
- addiu a1, 4
- bne a1, a3, L(lop1w)
- sw t0, -4(a0)
-
-L(last8):
- blez a2, L(lst8e) # Handle last 8 bytes, one at a time
- addu a3, a2, a1
-L(lst8l):
- lb t0, 0(a1)
- addiu a0, 1
- addiu a1, 1
- bne a1, a3, L(lst8l)
- sb t0, -1(a0)
-L(lst8e):
- jr ra # Bye, bye
+ C_LDHI t8,0(a1)
+ PTR_ADDU a1,a1,a3
+ C_STHI t8,0(a0)
+ PTR_ADDU a0,a0,a3
+
+/*
+ * Now dst/src are both aligned to (word or double word) aligned addresses
+ * Set a2 to count how many bytes we have to copy after all the 64/128 byte
+ * chunks are copied and a3 to the dst pointer after all the 64/128 byte
+ * chunks have been copied. We will loop, incrementing a0 and a1 until a0
+ * equals a3.
+ */
+
+L(aligned):
+ andi t8,a2,NSIZEDMASK /* any whole 64-byte/128-byte chunks? */
+ beq a2,t8,L(chkw) /* if a2==t8, no 64-byte/128-byte chunks */
+ PTR_SUBU a3,a2,t8 /* subtract from a2 the reminder */
+ PTR_ADDU a3,a0,a3 /* Now a3 is the final dst after loop */
+
+/* When in the loop we may prefetch with the 'prepare to store' hint,
+ * in this case the a0+x should not be past the "t0-32" address. This
+ * means: for x=128 the last "safe" a0 address is "t0-160". Alternatively,
+ * for x=64 the last "safe" a0 address is "t0-96" In the current version we
+ * will use "prefetch hint,128(a0)", so "t0-160" is the limit.
+ */
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ PTR_ADDU t0,a0,a2 /* t0 is the "past the end" address */
+ PTR_SUBU t9,t0,PREFETCH_LIMIT /* t9 is the "last safe pref" address */
+#endif
+ PREFETCH_FOR_LOAD (0, a1)
+ PREFETCH_FOR_LOAD (1, a1)
+ PREFETCH_FOR_LOAD (2, a1)
+ PREFETCH_FOR_STORE (1, a0)
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ sltu v1,t9,a0 /* If a0 > t9 don't use next prefetch */
+ bgtz v1,L(loop16w)
nop
+#endif
+ PREFETCH_FOR_STORE (2, a0)
+L(loop16w):
+ PREFETCH_FOR_LOAD (3, a1)
+ C_LD t0,UNIT(0)(a1)
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ bgtz v1,L(skip_pref30_96)
+#endif
+ C_LD t1,UNIT(1)(a1)
+ PREFETCH_FOR_STORE (3, a0)
+L(skip_pref30_96):
+ C_LD REG2,UNIT(2)(a1)
+ C_LD REG3,UNIT(3)(a1)
+ C_LD REG4,UNIT(4)(a1)
+ C_LD REG5,UNIT(5)(a1)
+ C_LD REG6,UNIT(6)(a1)
+ C_LD REG7,UNIT(7)(a1)
+ PREFETCH_FOR_LOAD (4, a1)
+
+ C_ST t0,UNIT(0)(a0)
+ C_ST t1,UNIT(1)(a0)
+ C_ST REG2,UNIT(2)(a0)
+ C_ST REG3,UNIT(3)(a0)
+ C_ST REG4,UNIT(4)(a0)
+ C_ST REG5,UNIT(5)(a0)
+ C_ST REG6,UNIT(6)(a0)
+ C_ST REG7,UNIT(7)(a0)
+
+ C_LD t0,UNIT(8)(a1)
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ bgtz v1,L(skip_pref30_128)
+#endif
+ C_LD t1,UNIT(9)(a1)
+ PREFETCH_FOR_STORE (4, a0)
+L(skip_pref30_128):
+ C_LD REG2,UNIT(10)(a1)
+ C_LD REG3,UNIT(11)(a1)
+ C_LD REG4,UNIT(12)(a1)
+ C_LD REG5,UNIT(13)(a1)
+ C_LD REG6,UNIT(14)(a1)
+ C_LD REG7,UNIT(15)(a1)
+ PREFETCH_FOR_LOAD (5, a1)
+ C_ST t0,UNIT(8)(a0)
+ C_ST t1,UNIT(9)(a0)
+ C_ST REG2,UNIT(10)(a0)
+ C_ST REG3,UNIT(11)(a0)
+ C_ST REG4,UNIT(12)(a0)
+ C_ST REG5,UNIT(13)(a0)
+ C_ST REG6,UNIT(14)(a0)
+ C_ST REG7,UNIT(15)(a0)
+ PTR_ADDIU a0,a0,UNIT(16) /* adding 64/128 to dest */
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ sltu v1,t9,a0
+#endif
+ bne a0,a3,L(loop16w)
+ PTR_ADDIU a1,a1,UNIT(16) /* adding 64/128 to src */
+ move a2,t8
-L(shift):
- subu a3, zero, a0 # Src and Dest unaligned
- andi a3, 0x3 # (unoptimized case...)
- beq a3, zero, L(shft1)
- subu a2, a3 # a2 = bytes left
- LWHI t0, 0(a1) # Take care of first odd part
- LWLO t0, 3(a1)
- addu a1, a3
- SWHI t0, 0(a0)
- addu a0, a3
-L(shft1):
- andi t0, a2, 0x3
- subu a3, a2, t0
- addu a3, a1
-L(shfth):
- LWHI t1, 0(a1) # Limp through, word by word
- LWLO t1, 3(a1)
- addiu a0, 4
- addiu a1, 4
- bne a1, a3, L(shfth)
- sw t1, -4(a0)
- b L(last8) # Handle anything which may be left
- move a2, t0
+/* Here we have src and dest word-aligned but less than 64-bytes or
+ * 128 bytes to go. Check for a 32(64) byte chunk and copy if if there
+ * is one. Otherwise jump down to L(chk1w) to handle the tail end of
+ * the copy.
+ */
+L(chkw):
+ PREFETCH_FOR_LOAD (0, a1)
+ andi t8,a2,NSIZEMASK /* Is there a 32-byte/64-byte chunk. */
+ /* The t8 is the reminder count past 32-bytes */
+ beq a2,t8,L(chk1w) /* When a2=t8, no 32-byte chunk */
+ nop
+ C_LD t0,UNIT(0)(a1)
+ C_LD t1,UNIT(1)(a1)
+ C_LD REG2,UNIT(2)(a1)
+ C_LD REG3,UNIT(3)(a1)
+ C_LD REG4,UNIT(4)(a1)
+ C_LD REG5,UNIT(5)(a1)
+ C_LD REG6,UNIT(6)(a1)
+ C_LD REG7,UNIT(7)(a1)
+ PTR_ADDIU a1,a1,UNIT(8)
+ C_ST t0,UNIT(0)(a0)
+ C_ST t1,UNIT(1)(a0)
+ C_ST REG2,UNIT(2)(a0)
+ C_ST REG3,UNIT(3)(a0)
+ C_ST REG4,UNIT(4)(a0)
+ C_ST REG5,UNIT(5)(a0)
+ C_ST REG6,UNIT(6)(a0)
+ C_ST REG7,UNIT(7)(a0)
+ PTR_ADDIU a0,a0,UNIT(8)
+
+/*
+ * Here we have less then 32(64) bytes to copy. Set up for a loop to
+ * copy one word (or double word) at a time. Set a2 to count how many
+ * bytes we have to copy after all the word (or double word) chunks are
+ * copied and a3 to the dst pointer after all the (d)word chunks have
+ * been copied. We will loop, incrementing a0 and a1 until a0 equals a3.
+ */
+L(chk1w):
+ andi a2,t8,(NSIZE-1) /* a2 is the reminder past one (d)word chunks */
+ beq a2,t8,L(lastb)
+ PTR_SUBU a3,t8,a2 /* a3 is count of bytes in one (d)word chunks */
+ PTR_ADDU a3,a0,a3 /* a3 is the dst address after loop */
+
+/* copying in words (4-byte or 8-byte chunks) */
+L(wordCopy_loop):
+ C_LD REG3,UNIT(0)(a1)
+ PTR_ADDIU a1,a1,UNIT(1)
+ PTR_ADDIU a0,a0,UNIT(1)
+ bne a0,a3,L(wordCopy_loop)
+ C_ST REG3,UNIT(-1)(a0)
+
+/* Copy the last 8 (or 16) bytes */
+L(lastb):
+ blez a2,L(leave)
+ PTR_ADDU a3,a0,a2 /* a3 is the last dst address */
+L(lastbloop):
+ lb v1,0(a1)
+ PTR_ADDIU a1,a1,1
+ PTR_ADDIU a0,a0,1
+ bne a0,a3,L(lastbloop)
+ sb v1,-1(a0)
+L(leave):
+ j ra
+ nop
+/*
+ * UNALIGNED case, got here with a3 = "negu a0"
+ * This code is nearly identical to the aligned code above
+ * but only the destination (not the source) gets aligned
+ * so we need to do partial loads of the source followed
+ * by normal stores to the destination (once we have aligned
+ * the destination).
+ */
+
+L(unaligned):
+ andi a3,a3,(NSIZE-1) /* copy a3 bytes to align a0/a1 */
+ beqz a3,L(ua_chk16w) /* if a3=0, it is already aligned */
+ PTR_SUBU a2,a2,a3 /* a2 is the remining bytes count */
+
+ C_LDHI v1,UNIT(0)(a1)
+ C_LDLO v1,UNITM1(1)(a1)
+ PTR_ADDU a1,a1,a3
+ C_STHI v1,UNIT(0)(a0)
+ PTR_ADDU a0,a0,a3
+
+/*
+ * Now the destination (but not the source) is aligned
+ * Set a2 to count how many bytes we have to copy after all the 64/128 byte
+ * chunks are copied and a3 to the dst pointer after all the 64/128 byte
+ * chunks have been copied. We will loop, incrementing a0 and a1 until a0
+ * equals a3.
+ */
+
+L(ua_chk16w):
+ andi t8,a2,NSIZEDMASK /* any whole 64-byte/128-byte chunks? */
+ beq a2,t8,L(ua_chkw) /* if a2==t8, no 64-byte/128-byte chunks */
+ PTR_SUBU a3,a2,t8 /* subtract from a2 the reminder */
+ PTR_ADDU a3,a0,a3 /* Now a3 is the final dst after loop */
+
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ PTR_ADDU t0,a0,a2 /* t0 is the "past the end" address */
+ PTR_SUBU t9,t0,PREFETCH_LIMIT /* t9 is the "last safe pref" address */
+#endif
+ PREFETCH_FOR_LOAD (0, a1)
+ PREFETCH_FOR_LOAD (1, a1)
+ PREFETCH_FOR_LOAD (2, a1)
+ PREFETCH_FOR_STORE (1, a0)
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ sltu v1,t9,a0
+ bgtz v1,L(ua_loop16w) /* skip prefetch for too short arrays */
+ nop
+#endif
+ PREFETCH_FOR_STORE (2, a0)
+L(ua_loop16w):
+ PREFETCH_FOR_LOAD (3, a1)
+ C_LDHI t0,UNIT(0)(a1)
+ C_LDLO t0,UNITM1(1)(a1)
+ C_LDHI t1,UNIT(1)(a1)
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ bgtz v1,L(ua_skip_pref30_96)
+#endif
+ C_LDLO t1,UNITM1(2)(a1)
+ PREFETCH_FOR_STORE (3, a0)
+L(ua_skip_pref30_96):
+ C_LDHI REG2,UNIT(2)(a1)
+ C_LDLO REG2,UNITM1(3)(a1)
+ C_LDHI REG3,UNIT(3)(a1)
+ C_LDLO REG3,UNITM1(4)(a1)
+ C_LDHI REG4,UNIT(4)(a1)
+ C_LDLO REG4,UNITM1(5)(a1)
+ C_LDHI REG5,UNIT(5)(a1)
+ C_LDLO REG5,UNITM1(6)(a1)
+ C_LDHI REG6,UNIT(6)(a1)
+ C_LDLO REG6,UNITM1(7)(a1)
+ C_LDHI REG7,UNIT(7)(a1)
+ C_LDLO REG7,UNITM1(8)(a1)
+ PREFETCH_FOR_LOAD (4, a1)
+ C_ST t0,UNIT(0)(a0)
+ C_ST t1,UNIT(1)(a0)
+ C_ST REG2,UNIT(2)(a0)
+ C_ST REG3,UNIT(3)(a0)
+ C_ST REG4,UNIT(4)(a0)
+ C_ST REG5,UNIT(5)(a0)
+ C_ST REG6,UNIT(6)(a0)
+ C_ST REG7,UNIT(7)(a0)
+ C_LDHI t0,UNIT(8)(a1)
+ C_LDLO t0,UNITM1(9)(a1)
+ C_LDHI t1,UNIT(9)(a1)
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ bgtz v1,L(ua_skip_pref30_128)
+#endif
+ C_LDLO t1,UNITM1(10)(a1)
+ PREFETCH_FOR_STORE (4, a0)
+L(ua_skip_pref30_128):
+ C_LDHI REG2,UNIT(10)(a1)
+ C_LDLO REG2,UNITM1(11)(a1)
+ C_LDHI REG3,UNIT(11)(a1)
+ C_LDLO REG3,UNITM1(12)(a1)
+ C_LDHI REG4,UNIT(12)(a1)
+ C_LDLO REG4,UNITM1(13)(a1)
+ C_LDHI REG5,UNIT(13)(a1)
+ C_LDLO REG5,UNITM1(14)(a1)
+ C_LDHI REG6,UNIT(14)(a1)
+ C_LDLO REG6,UNITM1(15)(a1)
+ C_LDHI REG7,UNIT(15)(a1)
+ C_LDLO REG7,UNITM1(16)(a1)
+ PREFETCH_FOR_LOAD (5, a1)
+ C_ST t0,UNIT(8)(a0)
+ C_ST t1,UNIT(9)(a0)
+ C_ST REG2,UNIT(10)(a0)
+ C_ST REG3,UNIT(11)(a0)
+ C_ST REG4,UNIT(12)(a0)
+ C_ST REG5,UNIT(13)(a0)
+ C_ST REG6,UNIT(14)(a0)
+ C_ST REG7,UNIT(15)(a0)
+ PTR_ADDIU a0,a0,UNIT(16) /* adding 64/128 to dest */
+#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE)
+ sltu v1,t9,a0
+#endif
+ bne a0,a3,L(ua_loop16w)
+ PTR_ADDIU a1,a1,UNIT(16) /* adding 64/128 to src */
+ move a2,t8
+
+/* Here we have src and dest word-aligned but less than 64-bytes or
+ * 128 bytes to go. Check for a 32(64) byte chunk and copy if if there
+ * is one. Otherwise jump down to L(ua_chk1w) to handle the tail end of
+ * the copy. */
+
+L(ua_chkw):
+ PREFETCH_FOR_LOAD (0, a1)
+ andi t8,a2,NSIZEMASK /* Is there a 32-byte/64-byte chunk. */
+ /* t8 is the reminder count past 32-bytes */
+ beq a2,t8,L(ua_chk1w) /* When a2=t8, no 32-byte chunk */
+ nop
+ C_LDHI t0,UNIT(0)(a1)
+ C_LDLO t0,UNITM1(1)(a1)
+ C_LDHI t1,UNIT(1)(a1)
+ C_LDLO t1,UNITM1(2)(a1)
+ C_LDHI REG2,UNIT(2)(a1)
+ C_LDLO REG2,UNITM1(3)(a1)
+ C_LDHI REG3,UNIT(3)(a1)
+ C_LDLO REG3,UNITM1(4)(a1)
+ C_LDHI REG4,UNIT(4)(a1)
+ C_LDLO REG4,UNITM1(5)(a1)
+ C_LDHI REG5,UNIT(5)(a1)
+ C_LDLO REG5,UNITM1(6)(a1)
+ C_LDHI REG6,UNIT(6)(a1)
+ C_LDLO REG6,UNITM1(7)(a1)
+ C_LDHI REG7,UNIT(7)(a1)
+ C_LDLO REG7,UNITM1(8)(a1)
+ PTR_ADDIU a1,a1,UNIT(8)
+ C_ST t0,UNIT(0)(a0)
+ C_ST t1,UNIT(1)(a0)
+ C_ST REG2,UNIT(2)(a0)
+ C_ST REG3,UNIT(3)(a0)
+ C_ST REG4,UNIT(4)(a0)
+ C_ST REG5,UNIT(5)(a0)
+ C_ST REG6,UNIT(6)(a0)
+ C_ST REG7,UNIT(7)(a0)
+ PTR_ADDIU a0,a0,UNIT(8)
+/*
+ * Here we have less then 32(64) bytes to copy. Set up for a loop to
+ * copy one word (or double word) at a time.
+ */
+L(ua_chk1w):
+ andi a2,t8,(NSIZE-1) /* a2 is the reminder past one (d)word chunks */
+ beq a2,t8,L(ua_smallCopy)
+ PTR_SUBU a3,t8,a2 /* a3 is count of bytes in one (d)word chunks */
+ PTR_ADDU a3,a0,a3 /* a3 is the dst address after loop */
+
+/* copying in words (4-byte or 8-byte chunks) */
+L(ua_wordCopy_loop):
+ C_LDHI v1,UNIT(0)(a1)
+ C_LDLO v1,UNITM1(1)(a1)
+ PTR_ADDIU a1,a1,UNIT(1)
+ PTR_ADDIU a0,a0,UNIT(1)
+ bne a0,a3,L(ua_wordCopy_loop)
+ C_ST v1,UNIT(-1)(a0)
+
+/* Copy the last 8 (or 16) bytes */
+L(ua_smallCopy):
+ beqz a2,L(leave)
+ PTR_ADDU a3,a0,a2 /* a3 is the last dst address */
+L(ua_smallCopy_loop):
+ lb v1,0(a1)
+ PTR_ADDIU a1,a1,1
+ PTR_ADDIU a0,a0,1
+ bne a0,a3,L(ua_smallCopy_loop)
+ sb v1,-1(a0)
+
+ j ra
+ nop
+
+ .set at
.set reorder
-END (memcpy)
-libc_hidden_builtin_def (memcpy)
+END(MEMCPY_NAME)
+#ifdef _LIBC
+libc_hidden_builtin_def (MEMCPY_NAME)
+#endif
diff --git a/libc/ports/sysdeps/mips/mips64/memcpy.S b/libc/ports/sysdeps/mips/mips64/memcpy.S
deleted file mode 100644
index 49ef34d0c..000000000
--- a/libc/ports/sysdeps/mips/mips64/memcpy.S
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Hartvig Ekner <hartvige@mips.com>, 2002.
- Ported to mips3 n32/n64 by Alexandre Oliva <aoliva@redhat.com>
-
- 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 <sys/asm.h>
-
-
-/* void *memcpy(void *s1, const void *s2, size_t n);
-
- This could probably be optimized further. */
-
-#if __MIPSEB
-# define LDHI ldl /* high part is left in big-endian */
-# define SDHI sdl /* high part is left in big-endian */
-# define LDLO ldr /* low part is right in big-endian */
-# define SDLO sdr /* low part is right in big-endian */
-#else
-# define LDHI ldr /* high part is right in little-endian */
-# define SDHI sdr /* high part is right in little-endian */
-# define LDLO ldl /* low part is left in little-endian */
-# define SDLO sdl /* low part is left in little-endian */
-#endif
-
-ENTRY (memcpy)
- .set noreorder
-
- slti t0, a2, 16 # Less than 16?
- bne t0, zero, L(last16)
- move v0, a0 # Setup exit value before too late
-
- xor t0, a1, a0 # Find a0/a1 displacement
- andi t0, 0x7
- bne t0, zero, L(shift) # Go handle the unaligned case
- PTR_SUBU t1, zero, a1
- andi t1, 0x7 # a0/a1 are aligned, but are we
- beq t1, zero, L(chk8w) # starting in the middle of a word?
- PTR_SUBU a2, t1
- LDHI t0, 0(a1) # Yes we are... take care of that
- PTR_ADDU a1, t1
- SDHI t0, 0(a0)
- PTR_ADDU a0, t1
-
-L(chk8w):
- andi t0, a2, 0x3f # 64 or more bytes left?
- beq t0, a2, L(chk1w)
- PTR_SUBU a3, a2, t0 # Yes
- PTR_ADDU a3, a1 # a3 = end address of loop
- move a2, t0 # a2 = what will be left after loop
-L(lop8w):
- ld t0, 0(a1) # Loop taking 8 words at a time
- ld t1, 8(a1)
- ld t2, 16(a1)
- ld t3, 24(a1)
- ld ta0, 32(a1)
- ld ta1, 40(a1)
- ld ta2, 48(a1)
- ld ta3, 56(a1)
- PTR_ADDIU a0, 64
- PTR_ADDIU a1, 64
- sd t0, -64(a0)
- sd t1, -56(a0)
- sd t2, -48(a0)
- sd t3, -40(a0)
- sd ta0, -32(a0)
- sd ta1, -24(a0)
- sd ta2, -16(a0)
- bne a1, a3, L(lop8w)
- sd ta3, -8(a0)
-
-L(chk1w):
- andi t0, a2, 0x7 # 8 or more bytes left?
- beq t0, a2, L(last16)
- PTR_SUBU a3, a2, t0 # Yes, handle them one dword at a time
- PTR_ADDU a3, a1 # a3 again end address
- move a2, t0
-L(lop1w):
- ld t0, 0(a1)
- PTR_ADDIU a0, 8
- PTR_ADDIU a1, 8
- bne a1, a3, L(lop1w)
- sd t0, -8(a0)
-
-L(last16):
- blez a2, L(lst16e) # Handle last 16 bytes, one at a time
- PTR_ADDU a3, a2, a1
-L(lst16l):
- lb t0, 0(a1)
- PTR_ADDIU a0, 1
- PTR_ADDIU a1, 1
- bne a1, a3, L(lst16l)
- sb t0, -1(a0)
-L(lst16e):
- jr ra # Bye, bye
- nop
-
-L(shift):
- PTR_SUBU a3, zero, a0 # Src and Dest unaligned
- andi a3, 0x7 # (unoptimized case...)
- beq a3, zero, L(shft1)
- PTR_SUBU a2, a3 # a2 = bytes left
- LDHI t0, 0(a1) # Take care of first odd part
- LDLO t0, 7(a1)
- PTR_ADDU a1, a3
- SDHI t0, 0(a0)
- PTR_ADDU a0, a3
-L(shft1):
- andi t0, a2, 0x7
- PTR_SUBU a3, a2, t0
- PTR_ADDU a3, a1
-L(shfth):
- LDHI t1, 0(a1) # Limp through, dword by dword
- LDLO t1, 7(a1)
- PTR_ADDIU a0, 8
- PTR_ADDIU a1, 8
- bne a1, a3, L(shfth)
- sd t1, -8(a0)
- b L(last16) # Handle anything which may be left
- move a2, t0
-
- .set reorder
-END (memcpy)
-libc_hidden_builtin_def (memcpy)
diff --git a/libc/ports/sysdeps/mips/tininess.h b/libc/ports/sysdeps/mips/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/ports/sysdeps/mips/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/ports/sysdeps/powerpc/nofpu/fclrexcpt.c b/libc/ports/sysdeps/powerpc/nofpu/fclrexcpt.c
index 768fd8ff8..f4b9016ea 100644
--- a/libc/ports/sysdeps/powerpc/nofpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/powerpc/nofpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear floating-point exceptions (soft-float edition).
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002-2012 Free Software Foundation, Inc.
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
This file is part of the GNU C Library.
@@ -33,4 +33,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/ports/sysdeps/powerpc/powerpc32/405/memset.S b/libc/ports/sysdeps/powerpc/powerpc32/405/memset.S
index e132ce365..c2ee6c593 100644
--- a/libc/ports/sysdeps/powerpc/powerpc32/405/memset.S
+++ b/libc/ports/sysdeps/powerpc/powerpc32/405/memset.S
@@ -1,5 +1,5 @@
-/* Optimized memset implementation for PowerPC476.
- Copyright (C) 2010 Free Software Foundation, Inc.
+/* Optimized memset for PowerPC405,440,464 (32-byte cacheline).
+ 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
@@ -104,7 +104,7 @@ L(use_dcbz):
add r3,r3,r7
L(skip_string_loop):
- clrlwi r8,r6,25
+ clrlwi r8,r6,27
srwi. r8,r8,4
beq L(dcbz_pre_loop)
mtctr r8
@@ -119,14 +119,14 @@ L(word_loop):
bdnz L(word_loop)
L(dcbz_pre_loop):
- srwi r6,r5,7
+ srwi r6,r5,5
mtctr r6
addi r7,0,0
L(dcbz_loop):
dcbz r3,r7
- addi r3,r3,0x80
- subi r5,r5,0x80
+ addi r3,r3,0x20
+ subi r5,r5,0x20
bdnz L(dcbz_loop)
srwi. r6,r5,4
beq L(postword2_count_loop)
diff --git a/libc/ports/sysdeps/powerpc/powerpc32/476/memset.S b/libc/ports/sysdeps/powerpc/powerpc32/476/memset.S
new file mode 100644
index 000000000..8b5750442
--- /dev/null
+++ b/libc/ports/sysdeps/powerpc/powerpc32/476/memset.S
@@ -0,0 +1,154 @@
+/* Optimized memset for PowerPC476 (128-byte cacheline).
+ Copyright (C) 2010 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 <bp-sym.h>
+#include <bp-asm.h>
+
+/* memset
+
+ r3:destination address and return address
+ r4:source integer to copy
+ r5:byte count
+ r11:sources integer to copy in all 32 bits of reg
+ r12:temp return address
+
+ Save return address in r12
+ If destinationn is unaligned and count is greater tha 255 bytes
+ set 0-3 bytes to make destination aligned
+ If count is greater tha 255 bytes and setting zero to memory
+ use dbcz to set memeory when we can
+ otherwsie do the follwoing
+ If 16 or more words to set we use 16 word copy loop.
+ Finaly we set 0-15 extra bytes with string store. */
+
+EALIGN (BP_SYM (memset), 5, 0)
+ rlwinm r11,r4,0,24,31
+ rlwimi r11,r4,8,16,23
+ rlwimi r11,r11,16,0,15
+ addi r12,r3,0
+ cmpwi r5,0x00FF
+ ble L(preword8_count_loop)
+ cmpwi r4,0x00
+ beq L(use_dcbz)
+ neg r6,r3
+ clrlwi. r6,r6,30
+ beq L(preword8_count_loop)
+ addi r8,0,1
+ mtctr r6
+ subi r3,r3,1
+
+L(unaligned_bytecopy_loop):
+ stbu r11,0x1(r3)
+ subf. r5,r8,r5
+ beq L(end_memset)
+ bdnz L(unaligned_bytecopy_loop)
+ addi r3,r3,1
+
+L(preword8_count_loop):
+ srwi. r6,r5,4
+ beq L(preword2_count_loop)
+ mtctr r6
+ addi r3,r3,-4
+ mr r8,r11
+ mr r9,r11
+ mr r10,r11
+
+L(word8_count_loop_no_dcbt):
+ stwu r8,4(r3)
+ stwu r9,4(r3)
+ subi r5,r5,0x10
+ stwu r10,4(r3)
+ stwu r11,4(r3)
+ bdnz L(word8_count_loop_no_dcbt)
+ addi r3,r3,4
+
+L(preword2_count_loop):
+ clrlwi. r7,r5,28
+ beq L(end_memset)
+ mr r8,r11
+ mr r9,r11
+ mr r10,r11
+ mtxer r7
+ stswx r8,0,r3
+
+L(end_memset):
+ addi r3,r12,0
+ blr
+
+L(use_dcbz):
+ neg r6,r3
+ clrlwi. r7,r6,28
+ beq L(skip_string_loop)
+ mr r8,r11
+ mr r9,r11
+ mr r10,r11
+ subf r5,r7,r5
+ mtxer r7
+ stswx r8,0,r3
+ add r3,r3,r7
+
+L(skip_string_loop):
+ clrlwi r8,r6,25
+ srwi. r8,r8,4
+ beq L(dcbz_pre_loop)
+ mtctr r8
+
+L(word_loop):
+ stw r11,0(r3)
+ subi r5,r5,0x10
+ stw r11,4(r3)
+ stw r11,8(r3)
+ stw r11,12(r3)
+ addi r3,r3,0x10
+ bdnz L(word_loop)
+
+L(dcbz_pre_loop):
+ srwi r6,r5,7
+ mtctr r6
+ addi r7,0,0
+
+L(dcbz_loop):
+ dcbz r3,r7
+ addi r3,r3,0x80
+ subi r5,r5,0x80
+ bdnz L(dcbz_loop)
+ srwi. r6,r5,4
+ beq L(postword2_count_loop)
+ mtctr r6
+
+L(postword8_count_loop):
+ stw r11,0(r3)
+ subi r5,r5,0x10
+ stw r11,4(r3)
+ stw r11,8(r3)
+ stw r11,12(r3)
+ addi r3,r3,0x10
+ bdnz L(postword8_count_loop)
+
+L(postword2_count_loop):
+ clrlwi. r7,r5,28
+ beq L(end_memset)
+ mr r8,r11
+ mr r9,r11
+ mr r10,r11
+ mtxer r7
+ stswx r8,0,r3
+ b L(end_memset)
+END (BP_SYM (memset))
+libc_hidden_builtin_def (memset)
diff --git a/libc/ports/sysdeps/powerpc/powerpc32/e500/fpu/fclrexcpt.c b/libc/ports/sysdeps/powerpc/powerpc32/e500/fpu/fclrexcpt.c
index 685e66c82..d937ec0dd 100644
--- a/libc/ports/sysdeps/powerpc/powerpc32/e500/fpu/fclrexcpt.c
+++ b/libc/ports/sysdeps/powerpc/powerpc32/e500/fpu/fclrexcpt.c
@@ -44,4 +44,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/ports/sysdeps/tile/bits/fenv.h b/libc/ports/sysdeps/tile/bits/fenv.h
index 7638e8cc5..6b045353c 100644
--- a/libc/ports/sysdeps/tile/bits/fenv.h
+++ b/libc/ports/sysdeps/tile/bits/fenv.h
@@ -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 Chris Metcalf <cmetcalf@tilera.com>, 2011.
@@ -30,8 +30,9 @@ enum
{
__FE_UNDEFINED = 0,
- FE_TONEAREST = 1,
-#define FE_TONEAREST FE_TONEAREST
+ FE_TONEAREST =
+#define FE_TONEAREST 1
+ FE_TONEAREST,
};
/* Type representing exception flags (if there were any). */
diff --git a/libc/ports/sysdeps/tile/crti.S b/libc/ports/sysdeps/tile/crti.S
index ccb4464bb..467816c78 100644
--- a/libc/ports/sysdeps/tile/crti.S
+++ b/libc/ports/sysdeps/tile/crti.S
@@ -70,16 +70,17 @@ _init:
#if PREINIT_FUNCTION_WEAK
lnk r2
0:
-#ifdef __tilegx__
+# ifdef __tilegx__
+ moveli r1, hw2_last(_GLOBAL_OFFSET_TABLE_ - 0b)
{
- moveli r1, hw1_last(_GLOBAL_OFFSET_TABLE_ - 0b)
+ shl16insli r1, r1, hw1(_GLOBAL_OFFSET_TABLE_ - 0b)
moveli r0, hw1_last_got(PREINIT_FUNCTION)
}
{
shl16insli r1, r1, hw0(_GLOBAL_OFFSET_TABLE_ - 0b)
shl16insli r0, r0, hw0_got(PREINIT_FUNCTION)
}
-#else
+# else
{
moveli r1, lo16(_GLOBAL_OFFSET_TABLE_ - 0b)
moveli r0, got_lo16(PREINIT_FUNCTION)
@@ -88,13 +89,25 @@ _init:
auli r1, r1, ha16(_GLOBAL_OFFSET_TABLE_ - 0b)
auli r0, r0, got_ha16(PREINIT_FUNCTION)
}
-#endif
+# endif
ADD_PTR r0, r0, r1
ADD_PTR r0, r0, r2
LD_PTR r0, r0
BEQZ r0, .Lno_weak_fn
-#endif
+ jalr r0
+#elif defined(__tilegx__)
+ /* Since we are calling from the start of the object to the PLT,
+ call by loading the full address into a register. */
+ lnk r2
+0:
+ moveli r0, hw2_last_plt(PREINIT_FUNCTION - 0b)
+ shl16insli r0, r0, hw1_plt(PREINIT_FUNCTION - 0b)
+ shl16insli r0, r0, hw0_plt(PREINIT_FUNCTION - 0b)
+ add r0, r0, r2
+ jalr r0
+#else
jal plt(PREINIT_FUNCTION)
+#endif
.Lno_weak_fn:
.section .fini,"ax",@progbits
diff --git a/libc/ports/sysdeps/tile/dl-machine.h b/libc/ports/sysdeps/tile/dl-machine.h
index c4413f9e8..09a299358 100644
--- a/libc/ports/sysdeps/tile/dl-machine.h
+++ b/libc/ports/sysdeps/tile/dl-machine.h
@@ -253,8 +253,8 @@ elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc,
}
/* Support notifying the simulator about new objects. */
-void internal_function _dl_arch_map_object (struct link_map *l);
-#define _dl_arch_map_object _dl_arch_map_object
+void internal_function _dl_after_load (struct link_map *l);
+#define DL_AFTER_LOAD _dl_after_load
/* Names of the architecture-specific auditing callback functions. */
#define ARCH_LA_PLTENTER tile_gnu_pltenter
diff --git a/libc/ports/sysdeps/tile/dl-runtime.c b/libc/ports/sysdeps/tile/dl-runtime.c
index 0aa211db1..e965828af 100644
--- a/libc/ports/sysdeps/tile/dl-runtime.c
+++ b/libc/ports/sysdeps/tile/dl-runtime.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 Chris Metcalf <cmetcalf@tilera.com>, 2011.
@@ -28,44 +28,119 @@
#include <sys/mman.h>
#include <arch/sim.h>
-/* Support notifying the simulator about new objects. */
+/* Like realpath(), but simplified: no dynamic memory use, no lstat(),
+ no set_errno(), no valid "rpath" on error, etc. This handles some
+ simple cases where the simulator might not have a valid entry for
+ a loaded Elf object, in particular dlopen() with a relative path.
+ For this relatively rare case, one could also imagine using
+ link_map.l_origin to avoid the getcwd() here, but the simpler code
+ here seems like a better solution. */
+static char *
+dl_realpath (const char *name, char *rpath)
+{
+ char *dest;
+ const char *start, *end;
+
+ if (name[0] != '/')
+ {
+ if (!__getcwd (rpath, PATH_MAX))
+ return NULL;
+ dest = __rawmemchr (rpath, '\0');
+ }
+ else
+ {
+ rpath[0] = '/';
+ dest = rpath + 1;
+ }
+
+ for (start = end = name; *start; start = end)
+ {
+ /* Skip sequence of multiple path-separators. */
+ while (*start == '/')
+ ++start;
+
+ /* Find end of path component. */
+ for (end = start; *end && *end != '/'; ++end)
+ /* Nothing. */;
+
+ if (end - start == 0)
+ break;
+ else if (end - start == 1 && start[0] == '.')
+ /* nothing */;
+ else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+ {
+ /* Back up to previous component, ignore if at root already. */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+ else
+ {
+ if (dest[-1] != '/')
+ *dest++ = '/';
+
+ if (dest + (end - start) >= rpath + PATH_MAX)
+ return NULL;
+
+ dest = __mempcpy (dest, start, end - start);
+ *dest = '\0';
+ }
+ }
+ if (dest > rpath + 1 && dest[-1] == '/')
+ --dest;
+ *dest = '\0';
+
+ return rpath;
+}
+
+/* Support notifying the simulator about new objects. */
void internal_function
-_dl_arch_map_object (struct link_map *l)
+_dl_after_load (struct link_map *l)
{
int shift;
+ char pathbuf[PATH_MAX];
+ char *path;
+
+ /* Don't bother if not in the simulator. */
+ if (__insn_mfspr (SPR_SIM_CONTROL) == 0)
+ return;
-#define DLPUTC(c) __insn_mtspr(SPR_SIM_CONTROL, \
- (SIM_CONTROL_DLOPEN \
- | ((c) << _SIM_CONTROL_OPERATOR_BITS)))
+#define DLPUTC(c) __insn_mtspr (SPR_SIM_CONTROL, \
+ (SIM_CONTROL_DLOPEN \
+ | ((c) << _SIM_CONTROL_OPERATOR_BITS)))
- /* Write the library address in hex. */
+ /* Write the library address in hex. */
DLPUTC ('0');
DLPUTC ('x');
for (shift = (int) sizeof (unsigned long) * 8 - 4; shift >= 0; shift -= 4)
DLPUTC ("0123456789abcdef"[(l->l_map_start >> shift) & 0xF]);
DLPUTC (':');
- /* Write the library path, including the terminating '\0'. */
+ /* Write the library path, including the terminating '\0'. */
+ path = dl_realpath (l->l_name, pathbuf) ?: l->l_name;
for (size_t i = 0;; i++)
{
- DLPUTC (l->l_name[i]);
- if (l->l_name[i] == '\0')
+ DLPUTC (path[i]);
+ if (path[i] == '\0')
break;
}
#undef DLPUTC
}
-/* Support notifying the simulator about removed objects prior to munmap(). */
+/* Support notifying the simulator about removed objects prior to munmap(). */
void internal_function
_dl_unmap (struct link_map *l)
{
int shift;
-#define DLPUTC(c) __insn_mtspr(SPR_SIM_CONTROL, \
- (SIM_CONTROL_DLCLOSE \
- | ((c) << _SIM_CONTROL_OPERATOR_BITS)))
+ /* Don't bother if not in the simulator. */
+ if (__insn_mfspr (SPR_SIM_CONTROL) == 0)
+ return;
- /* Write the library address in hex. */
+#define DLPUTC(c) __insn_mtspr (SPR_SIM_CONTROL, \
+ (SIM_CONTROL_DLCLOSE \
+ | ((c) << _SIM_CONTROL_OPERATOR_BITS)))
+
+ /* Write the library address in hex. */
DLPUTC ('0');
DLPUTC ('x');
for (shift = (int) sizeof (unsigned long) * 8 - 4; shift >= 0; shift -= 4)
@@ -75,5 +150,3 @@ _dl_unmap (struct link_map *l)
__munmap ((void *) l->l_map_start, l->l_map_end - l->l_map_start);
}
-
-#define DL_UNMAP(map) _dl_unmap (map)
diff --git a/libc/ports/sysdeps/tile/libm-test-ulps b/libc/ports/sysdeps/tile/libm-test-ulps
index 43d1e99d3..584e57089 100644
--- a/libc/ports/sysdeps/tile/libm-test-ulps
+++ b/libc/ports/sysdeps/tile/libm-test-ulps
@@ -490,6 +490,9 @@ ifloat: 1
Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
float: 1
ifloat: 1
+Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -5.960464655174753498633255797994360530379e-8 + 7.888609052210118054117285652827862296732e-31 i":
+float: 1
+ifloat: 1
Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i":
float: 1
ifloat: 1
@@ -511,6 +514,9 @@ ifloat: 1
Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i) == 1.5366822245016167178749091974664853785194e-08 + 1.2522014929038946066987318471922169174157 i":
+float: 1
+ifloat: 1
Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i":
float: 1
ifloat: 1
@@ -595,6 +601,14 @@ ifloat: 1
Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
float: 1
ifloat: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i) == -4.821637332766435821255375046554377090472e-17 + 4.053112396770095089737411317782466262176e-302 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -2.588596909321764128428416045209904492216e-8 + 3.425979381266895667295625489912064603415e-31 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
float: 1
ifloat: 1
@@ -621,6 +635,21 @@ ifloat: 1
Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
float: 1
ifloat: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i) == -1.3155760824064879362415202279780039150764e-26 + 0.3473590599762514228227328130640352044313 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i) == -6.2126412844802358329771948751248003038444e-07 + 0.4977135139537443711784513409096950995985 i":
+double: 1
+idouble: 1
Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
double: 1
idouble: 1
@@ -670,6 +699,41 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i) == 1.9312741086596516918394613098872836703188e-20 + 0.5231613813514771042838490538484014771862 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i) == -6.4375803621988389731799033530075237868110e-21 + 0.4378257977686804492768642780897650927167 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i) == 3.6079845358966994996207055940336690133424e-30 + 0.5243112258263349992771652393178033846555 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i) == -1.7182001068739620267773842120965071561416e-11 + 0.3990121149225253562859800593935899629087 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i) == 2.3329549194675052736016290082882121135546e-26 + 0.4561756099441139182878993697611751382976 i":
+double: 1
+idouble: 1
Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i":
double: 1
idouble: 1
@@ -1482,9 +1546,9 @@ ifloat: 1
Function: Real part of "clog10":
double: 2
-float: 1
+float: 2
idouble: 2
-ifloat: 1
+ifloat: 2
Function: Imaginary part of "clog10":
double: 1
diff --git a/libc/ports/sysdeps/tile/math_private.h b/libc/ports/sysdeps/tile/math_private.h
index 858db4a05..90dcc3f86 100644
--- a/libc/ports/sysdeps/tile/math_private.h
+++ b/libc/ports/sysdeps/tile/math_private.h
@@ -1,13 +1,31 @@
#ifndef _MATH_PRIVATE_H
+/* Internally, we suppress any use of exception or rounding other
+ than what is supported by the hardware. This does mean that some
+ code will silently fail to report exceptions, set rounding mode
+ as expected, etc., but it allows math code to compile that otherwise
+ wouldn't (such as math/s_fma.c) and so is valuable.
+
+ We intentionally ignore the "exception" arguments of functions that
+ take an exception, since we can't even evaluate the argument
+ without causing a build failure. The extra level of statement
+ expression wrapping avoids "statement with no effect" warnings.
+ Since the callers don't check for errors anyway, we just claim
+ success in every case.
+
+ The overrides for libc_ functions must happen before we include
+ the generic math_private.h, and the overrides for regular
+ <fenv.h> functions must happen afterwards, to avoid clashing with
+ the declarations of those functions. */
+
+#define libc_fesetround(rnd) ({ 0; })
+#define libc_fetestexcept(exc) ({ 0; })
+#define libc_feholdexcept_setround(env, exc) ({ (void) (env); 0; })
+#define libc_feupdateenv_test(env, exc) ({ (void) (env); 0; })
+
#include_next <math_private.h>
-/* We have no exception support, so feraiseexcept() must be a no-op.
- And since we don't define FE_INVALID, FE_DIVBYZERO, etc., we
- must ignore the argument of feraiseexcept() as well. we return
- "1" to indicate we failed to raise an exception, though none of
- the callers in glibc actually care. The extra level of statement
- expression wrapping avoids "statement with no effect" warnings. */
-#define feraiseexcept(excepts) ({ 1; })
+#define feraiseexcept(excepts) ({ 0; })
+#define feclearexcept(exc) ({ 0; })
#endif
diff --git a/libc/ports/sysdeps/tile/memcopy.h b/libc/ports/sysdeps/tile/memcopy.h
new file mode 100644
index 000000000..2bc3fce68
--- /dev/null
+++ b/libc/ports/sysdeps/tile/memcopy.h
@@ -0,0 +1,27 @@
+/* memcopy.h -- definitions for memory copy functions. Tile 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 <sysdeps/generic/memcopy.h>
+#include <bits/wordsize.h>
+
+/* Support more efficient copying on tilegx32, which supports
+ long long as a native 64-bit type. */
+#if defined (__tilegx__) && __WORDSIZE == 32
+# undef op_t
+# define op_t unsigned long long int
+#endif
diff --git a/libc/ports/sysdeps/tile/nptl/pthread_spin_unlock.c b/libc/ports/sysdeps/tile/nptl/pthread_spin_unlock.c
new file mode 100644
index 000000000..260f6fae9
--- /dev/null
+++ b/libc/ports/sysdeps/tile/nptl/pthread_spin_unlock.c
@@ -0,0 +1,33 @@
+/* pthread_spin_unlock -- unlock a spin lock. Tile 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 "pthreadP.h"
+#include <atomic.h>
+
+int
+pthread_spin_unlock (pthread_spinlock_t *lock)
+{
+#ifdef __tilegx__
+ /* Use exchange() to bypass the write buffer. */
+ atomic_exchange_rel (lock, 0);
+#else
+ atomic_full_barrier ();
+ *lock = 0;
+#endif
+ return 0;
+}
diff --git a/libc/ports/sysdeps/tile/start.S b/libc/ports/sysdeps/tile/start.S
index 999bb535c..54f015f4d 100644
--- a/libc/ports/sysdeps/tile/start.S
+++ b/libc/ports/sysdeps/tile/start.S
@@ -126,27 +126,37 @@ _start:
moveli r0, hw2_last(main - .Lmy_pc)
}
{
- moveli r3, hw2_last(__libc_csu_init - .Lmy_pc)
shl16insli r0, r0, hw1(main - .Lmy_pc)
+ moveli r3, hw2_last(__libc_csu_init - .Lmy_pc)
}
{
- shl16insli r3, r3, hw1(__libc_csu_init - .Lmy_pc)
shl16insli r0, r0, hw0(main - .Lmy_pc)
+ shl16insli r3, r3, hw1(__libc_csu_init - .Lmy_pc)
}
{
+ ADD_PTR r0, r0, r13
shl16insli r3, r3, hw0(__libc_csu_init - .Lmy_pc)
+ }
+ {
+ moveli r12, hw2_last_plt(__libc_start_main - .Lmy_pc)
+ ADD_PTR r3, r3, r13
+ }
+ {
+ shl16insli r12, r12, hw1_plt(__libc_start_main - .Lmy_pc)
moveli r4, hw2_last(__libc_csu_fini - .Lmy_pc)
}
{
- ADD_PTR r0, r0, r13
+ shl16insli r12, r12, hw0_plt(__libc_start_main - .Lmy_pc)
shl16insli r4, r4, hw1(__libc_csu_fini - .Lmy_pc)
}
{
- ADD_PTR r3, r3, r13
+ ADD_PTR r12, r12, r13
shl16insli r4, r4, hw0(__libc_csu_fini - .Lmy_pc)
}
{
ADD_PTR r4, r4, r13
+ jalr r12
+ }
#else
addli r0, r13, lo16(main - .Lmy_pc)
}
@@ -160,13 +170,12 @@ _start:
}
{
auli r4, r4, ha16(__libc_csu_fini - .Lmy_pc)
-
-#endif
-
/* Call the user's main function, and exit with its value.
But let the libc call main. */
j plt(__libc_start_main)
}
+#endif
+
{
/* Tell backtracer to give up (_start has no caller). */
info INFO_OP_CANNOT_BACKTRACE
diff --git a/libc/ports/sysdeps/tile/tilegx/Makefile b/libc/ports/sysdeps/tile/tilegx/Makefile
new file mode 100644
index 000000000..d3a0e970a
--- /dev/null
+++ b/libc/ports/sysdeps/tile/tilegx/Makefile
@@ -0,0 +1,18 @@
+include $(common-objpfx)cflags-mcmodel-large.mk
+
+$(common-objpfx)cflags-mcmodel-large.mk: $(common-objpfx)config.make
+ mcmodel=no; \
+ $(CC) -S -o /dev/null -xc /dev/null -mcmodel=large && mcmodel=yes; \
+ echo "cflags-mcmodel-large = $$mcmodel" > $@
+
+ifeq ($(subdir),csu)
+ifeq (yes,$(cflags-mcmodel-large))
+# elf-init.c is in libc_nonshared.o (the end of the shared object) but
+# must reach the _init symbol at the very start of the shared object.
+CFLAGS-elf-init.c += -mcmodel=large
+
+# __gmon_start__ is at the very start of the shared object when linked
+# with profiling, but calls to libc.so via the PLT at the very end.
+CFLAGS-gmon-start.c += -mcmodel=large
+endif
+endif
diff --git a/libc/ports/sysdeps/tile/tilegx/memcpy.c b/libc/ports/sysdeps/tile/tilegx/memcpy.c
index dd6e30dd6..5b015f39d 100644
--- a/libc/ports/sysdeps/tile/tilegx/memcpy.c
+++ b/libc/ports/sysdeps/tile/tilegx/memcpy.c
@@ -19,11 +19,9 @@
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
+#include <memcopy.h>
#include <arch/chip.h>
-/* Must be 8 bytes in size. */
-#define word_t uint64_t
-
/* How many cache lines ahead should we prefetch? */
#define PREFETCH_LINES_AHEAD 3
@@ -34,8 +32,8 @@ __memcpy (void *__restrict dstv, const void *__restrict srcv, size_t n)
const char *__restrict src1 = (const char *) srcv;
const char *__restrict src1_end;
const char *__restrict prefetch;
- word_t *__restrict dst8; /* 8-byte pointer to destination memory. */
- word_t final; /* Final bytes to write to trailing word, if any */
+ op_t *__restrict dst8; /* 8-byte pointer to destination memory. */
+ op_t final; /* Final bytes to write to trailing word, if any */
long i;
if (n < 16)
@@ -55,101 +53,169 @@ __memcpy (void *__restrict dstv, const void *__restrict srcv, size_t n)
{
__insn_prefetch (prefetch);
prefetch += CHIP_L2_LINE_SIZE ();
- prefetch = (prefetch > src1_end) ? prefetch : src1;
+ prefetch = (prefetch < src1_end) ? prefetch : src1;
}
/* Copy bytes until dst is word-aligned. */
- for (; (uintptr_t) dst1 & (sizeof (word_t) - 1); n--)
+ for (; (uintptr_t) dst1 & (sizeof (op_t) - 1); n--)
*dst1++ = *src1++;
/* 8-byte pointer to destination memory. */
- dst8 = (word_t *) dst1;
+ dst8 = (op_t *) dst1;
- if (__builtin_expect ((uintptr_t) src1 & (sizeof (word_t) - 1), 0))
+ if (__builtin_expect ((uintptr_t) src1 & (sizeof (op_t) - 1), 0))
{
- /* Misaligned copy. Copy 8 bytes at a time, but don't bother
- with other fanciness.
- TODO: Consider prefetching and using wh64 as well. */
+ /* Misaligned copy. Use glibc's _wordcopy_fwd_dest_aligned, but
+ inline it to avoid prologue/epilogue. TODO: Consider
+ prefetching and using wh64 as well. */
+ void * srci;
+ op_t a0, a1, a2, a3;
+ long int dstp = (long int) dst1;
+ long int srcp = (long int) src1;
+ long int len = n / OPSIZ;
- /* Create an aligned src8. */
- const word_t *__restrict src8 =
- (const word_t *) ((uintptr_t) src1 & -sizeof (word_t));
- word_t b;
+ /* Save the initial source pointer so we know the number of
+ bytes to shift for merging two unaligned results. */
+ srci = (void *) srcp;
- word_t a = *src8++;
- for (; n >= sizeof (word_t); n -= sizeof (word_t))
- {
- b = *src8++;
- a = __insn_dblalign (a, b, src1);
- *dst8++ = a;
- a = b;
- }
+ /* Make SRCP aligned by rounding it down to the beginning of the
+ `op_t' it points in the middle of. */
+ srcp &= -OPSIZ;
+
+ switch (len % 4)
+ {
+ case 2:
+ a1 = ((op_t *) srcp)[0];
+ a2 = ((op_t *) srcp)[1];
+ len += 2;
+ srcp += 2 * OPSIZ;
+ goto do1;
+ case 3:
+ a0 = ((op_t *) srcp)[0];
+ a1 = ((op_t *) srcp)[1];
+ len += 1;
+ srcp += 2 * OPSIZ;
+ goto do2;
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return dstv;
+ a3 = ((op_t *) srcp)[0];
+ a0 = ((op_t *) srcp)[1];
+ len += 0;
+ srcp += 2 * OPSIZ;
+ goto do3;
+ case 1:
+ a2 = ((op_t *) srcp)[0];
+ a3 = ((op_t *) srcp)[1];
+ srcp += 2 * OPSIZ;
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ goto do4; /* No-op. */
+ }
+ do
+ {
+ do4:
+ a0 = ((op_t *) srcp)[0];
+ a2 = __insn_dblalign (a2, a3, srci);
+ ((op_t *) dstp)[0] = a2;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do3:
+ a1 = ((op_t *) srcp)[0];
+ a3 = __insn_dblalign (a3, a0, srci);
+ ((op_t *) dstp)[0] = a3;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do2:
+ a2 = ((op_t *) srcp)[0];
+ a0 = __insn_dblalign (a0, a1, srci);
+ ((op_t *) dstp)[0] = a0;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do1:
+ a3 = ((op_t *) srcp)[0];
+ a1 = __insn_dblalign (a1, a2, srci);
+ ((op_t *) dstp)[0] = a1;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ len -= 4;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ ((op_t *) dstp)[0] = __insn_dblalign (a2, a3, srci);
+
+ n = n % OPSIZ;
if (n == 0)
- return dstv;
+ return dstv;
- b = ((const char *) src8 <= src1_end) ? *src8 : 0;
+ a0 = ((const char *) srcp <= src1_end) ? ((op_t *) srcp)[0] : 0;
- /* Final source bytes to write to trailing partial word, if any. */
- final = __insn_dblalign (a, b, src1);
+ final = __insn_dblalign (a3, a0, srci);
+ dst8 = (op_t *)(dstp + OPSIZ);
}
else
{
/* Aligned copy. */
- const word_t *__restrict src8 = (const word_t *) src1;
+ const op_t *__restrict src8 = (const op_t *) src1;
/* src8 and dst8 are both word-aligned. */
if (n >= CHIP_L2_LINE_SIZE ())
{
/* Copy until 'dst' is cache-line-aligned. */
for (; (uintptr_t) dst8 & (CHIP_L2_LINE_SIZE () - 1);
- n -= sizeof (word_t))
+ n -= sizeof (op_t))
*dst8++ = *src8++;
- /* If copying to self, return. The test is cheap enough
- that we do it despite the fact that the memcpy() contract
- doesn't require us to support overlapping dst and src.
- This is the most common case of overlap, and any close
- overlap will cause corruption due to the wh64 below.
- This case is particularly important since the compiler
- will emit memcpy() calls for aggregate copies even if it
- can't prove that src != dst. */
- if (__builtin_expect (dst8 == src8, 0))
- return dstv;
-
for (; n >= CHIP_L2_LINE_SIZE ();)
- {
- __insn_wh64 (dst8);
-
- /* Prefetch and advance to next line to prefetch, but
- don't go past the end. */
- __insn_prefetch (prefetch);
- prefetch += CHIP_L2_LINE_SIZE ();
- prefetch = (prefetch > src1_end) ? prefetch :
- (const char *) src8;
-
- /* Copy an entire cache line. Manually unrolled to
- avoid idiosyncracies of compiler unrolling. */
-#define COPY_WORD(offset) ({ dst8[offset] = src8[offset]; n -= 8; })
- COPY_WORD (0);
- COPY_WORD (1);
- COPY_WORD (2);
- COPY_WORD (3);
- COPY_WORD (4);
- COPY_WORD (5);
- COPY_WORD (6);
- COPY_WORD (7);
+ {
+ op_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
+
+ /* Prefetch and advance to next line to prefetch, but
+ don't go past the end. */
+ __insn_prefetch (prefetch);
+ prefetch += CHIP_L2_LINE_SIZE ();
+ prefetch = (prefetch < src1_end) ? prefetch :
+ (const char *) src8;
+
+ /* Do all the loads before wh64. This is necessary if
+ [src8, src8+7] and [dst8, dst8+7] share the same
+ cache line and dst8 <= src8, as can be the case when
+ called from memmove, or with code tested on x86 whose
+ memcpy always works with forward copies. */
+ tmp0 = *src8++;
+ tmp1 = *src8++;
+ tmp2 = *src8++;
+ tmp3 = *src8++;
+ tmp4 = *src8++;
+ tmp5 = *src8++;
+ tmp6 = *src8++;
+ tmp7 = *src8++;
+
+ __insn_wh64 (dst8);
+
+ *dst8++ = tmp0;
+ *dst8++ = tmp1;
+ *dst8++ = tmp2;
+ *dst8++ = tmp3;
+ *dst8++ = tmp4;
+ *dst8++ = tmp5;
+ *dst8++ = tmp6;
+ *dst8++ = tmp7;
+
+ n -= 64;
+ }
#if CHIP_L2_LINE_SIZE() != 64
# error "Fix code that assumes particular L2 cache line size."
#endif
-
- dst8 += CHIP_L2_LINE_SIZE () / sizeof (word_t);
- src8 += CHIP_L2_LINE_SIZE () / sizeof (word_t);
- }
}
- for (; n >= sizeof (word_t); n -= sizeof (word_t))
+ for (; n >= sizeof (op_t); n -= sizeof (op_t))
*dst8++ = *src8++;
if (__builtin_expect (n == 0, 1))
diff --git a/libc/ports/sysdeps/tile/wordcopy.c b/libc/ports/sysdeps/tile/wordcopy.c
new file mode 100644
index 000000000..f978d8fdc
--- /dev/null
+++ b/libc/ports/sysdeps/tile/wordcopy.c
@@ -0,0 +1,449 @@
+/* wordcopy.c -- subroutines for memory copy functions. Tile version.
+ 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/>. */
+
+/* To optimize for tile, we make the following changes from the
+ default glibc version:
+ - Use the double align instruction instead of the MERGE macro.
+ - Since we don't have offset addressing mode, make sure the loads /
+ stores in the inner loop always have indices of 0.
+ - Use post-increment addresses in the inner loops, which yields
+ better scheduling. */
+
+/* BE VERY CAREFUL IF YOU CHANGE THIS CODE...! */
+
+#include <stddef.h>
+#include <memcopy.h>
+
+/* Provide the appropriate dblalign builtin to shift two registers
+ based on the alignment of a pointer held in a third register. */
+#ifdef __tilegx__
+#define DBLALIGN __insn_dblalign
+#else
+#define DBLALIGN __insn_dword_align
+#endif
+
+/* _wordcopy_fwd_aligned -- Copy block beginning at SRCP to
+ block beginning at DSTP with LEN `op_t' words (not LEN bytes!).
+ Both SRCP and DSTP should be aligned for memory operations on `op_t's. */
+
+void
+_wordcopy_fwd_aligned (dstp, srcp, len)
+ long int dstp;
+ long int srcp;
+ size_t len;
+{
+ op_t a0, a1;
+
+ switch (len % 8)
+ {
+ case 2:
+ a0 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len += 6;
+ goto do1;
+ case 3:
+ a1 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len += 5;
+ goto do2;
+ case 4:
+ a0 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len += 4;
+ goto do3;
+ case 5:
+ a1 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len += 3;
+ goto do4;
+ case 6:
+ a0 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len += 2;
+ goto do5;
+ case 7:
+ a1 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len += 1;
+ goto do6;
+
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return;
+ a0 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ goto do7;
+ case 1:
+ a1 = ((op_t *) srcp)[0];
+ srcp += OPSIZ;
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ goto do8; /* No-op. */
+ }
+
+ do
+ {
+ do8:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do7:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do6:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do5:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do4:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do3:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do2:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do1:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+
+ len -= 8;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ ((op_t *) dstp)[0] = a1;
+}
+
+/* _wordcopy_fwd_dest_aligned -- Copy block beginning at SRCP to
+ block beginning at DSTP with LEN `op_t' words (not LEN bytes!).
+ DSTP should be aligned for memory operations on `op_t's, but SRCP must
+ *not* be aligned. */
+
+void
+_wordcopy_fwd_dest_aligned (dstp, srcp, len)
+ long int dstp;
+ long int srcp;
+ size_t len;
+{
+ void * srci;
+ op_t a0, a1, a2, a3;
+
+ /* Save the initial source pointer so we know the number of bytes to
+ shift for merging two unaligned results. */
+ srci = (void *) srcp;
+
+ /* Make SRCP aligned by rounding it down to the beginning of the `op_t'
+ it points in the middle of. */
+ srcp &= -OPSIZ;
+
+ switch (len % 4)
+ {
+ case 2:
+ a1 = ((op_t *) srcp)[0];
+ a2 = ((op_t *) srcp)[1];
+ len += 2;
+ srcp += 2 * OPSIZ;
+ goto do1;
+ case 3:
+ a0 = ((op_t *) srcp)[0];
+ a1 = ((op_t *) srcp)[1];
+ len += 1;
+ srcp += 2 * OPSIZ;
+ goto do2;
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return;
+ a3 = ((op_t *) srcp)[0];
+ a0 = ((op_t *) srcp)[1];
+ len += 0;
+ srcp += 2 * OPSIZ;
+ goto do3;
+ case 1:
+ a2 = ((op_t *) srcp)[0];
+ a3 = ((op_t *) srcp)[1];
+ srcp += 2 * OPSIZ;
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ goto do4; /* No-op. */
+ }
+
+ do
+ {
+ do4:
+ a0 = ((op_t *) srcp)[0];
+ a2 = DBLALIGN (a2, a3, srci);
+ ((op_t *) dstp)[0] = a2;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do3:
+ a1 = ((op_t *) srcp)[0];
+ a3 = DBLALIGN (a3, a0, srci);
+ ((op_t *) dstp)[0] = a3;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do2:
+ a2 = ((op_t *) srcp)[0];
+ a0 = DBLALIGN (a0, a1, srci);
+ ((op_t *) dstp)[0] = a0;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ do1:
+ a3 = ((op_t *) srcp)[0];
+ a1 = DBLALIGN (a1, a2, srci);
+ ((op_t *) dstp)[0] = a1;
+ srcp += OPSIZ;
+ dstp += OPSIZ;
+ len -= 4;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ ((op_t *) dstp)[0] = DBLALIGN (a2, a3, srci);
+}
+
+/* _wordcopy_bwd_aligned -- Copy block finishing right before
+ SRCP to block finishing right before DSTP with LEN `op_t' words
+ (not LEN bytes!). Both SRCP and DSTP should be aligned for memory
+ operations on `op_t's. */
+
+void
+_wordcopy_bwd_aligned (dstp, srcp, len)
+ long int dstp;
+ long int srcp;
+ size_t len;
+{
+ op_t a0, a1;
+ long int srcp1;
+
+ srcp1 = srcp - 1 * OPSIZ;
+ srcp -= 2 * OPSIZ;
+ dstp -= 1 * OPSIZ;
+
+ switch (len % 8)
+ {
+ case 2:
+ a0 = ((op_t *) srcp1)[0];
+ len += 6;
+ goto do1;
+ case 3:
+ a1 = ((op_t *) srcp1)[0];
+ len += 5;
+ goto do2;
+ case 4:
+ a0 = ((op_t *) srcp1)[0];
+ len += 4;
+ goto do3;
+ case 5:
+ a1 = ((op_t *) srcp1)[0];
+ len += 3;
+ goto do4;
+ case 6:
+ a0 = ((op_t *) srcp1)[0];
+ len += 2;
+ goto do5;
+ case 7:
+ a1 = ((op_t *) srcp1)[0];
+ len += 1;
+ goto do6;
+
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return;
+ a0 = ((op_t *) srcp1)[0];
+ goto do7;
+ case 1:
+ a1 = ((op_t *) srcp1)[0];
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ goto do8; /* No-op. */
+ }
+
+ do
+ {
+ do8:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do7:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do6:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do5:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do4:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do3:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do2:
+ a0 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a1;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do1:
+ a1 = ((op_t *) srcp)[0];
+ ((op_t *) dstp)[0] = a0;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+
+ len -= 8;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ ((op_t *) dstp)[0] = a1;
+}
+
+/* _wordcopy_bwd_dest_aligned -- Copy block finishing right
+ before SRCP to block finishing right before DSTP with LEN `op_t'
+ words (not LEN bytes!). DSTP should be aligned for memory
+ operations on `op_t', but SRCP must *not* be aligned. */
+
+void
+_wordcopy_bwd_dest_aligned (dstp, srcp, len)
+ long int dstp;
+ long int srcp;
+ size_t len;
+{
+ void * srci;
+ op_t a0, a1, a2, a3;
+ op_t b0, b1, b2, b3;
+
+ /* Save the initial source pointer so we know the number of bytes to
+ shift for merging two unaligned results. */
+ srci = (void *) srcp;
+
+ /* Make SRCP aligned by rounding it down to the beginning of the op_t
+ it points in the middle of. */
+ srcp &= -OPSIZ;
+ srcp += OPSIZ;
+
+ switch (len % 4)
+ {
+ case 2:
+ srcp -= 3 * OPSIZ;
+ dstp -= 1 * OPSIZ;
+ b2 = ((op_t *) srcp)[2];
+ b1 = a1 = ((op_t *) srcp)[1];
+ len += 2;
+ goto do1;
+ case 3:
+ srcp -= 3 * OPSIZ;
+ dstp -= 1 * OPSIZ;
+ b3 = ((op_t *) srcp)[2];
+ b2 = a2 = ((op_t *) srcp)[1];
+ len += 1;
+ goto do2;
+ case 0:
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ return;
+ srcp -= 3 * OPSIZ;
+ dstp -= 1 * OPSIZ;
+ b0 = ((op_t *) srcp)[2];
+ b3 = a3 = ((op_t *) srcp)[1];
+ goto do3;
+ case 1:
+ srcp -= 3 * OPSIZ;
+ dstp -= 1 * OPSIZ;
+ b1 = ((op_t *) srcp)[2];
+ b0 = a0 = ((op_t *) srcp)[1];
+ len -= 1;
+ if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+ goto do0;
+ goto do4; /* No-op. */
+ }
+
+ do
+ {
+ do4:
+ b3 = a3 = ((op_t *) srcp)[0];
+ a0 = DBLALIGN (a0, b1, srci);
+ ((op_t *) dstp)[0] = a0;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do3:
+ b2 = a2 = ((op_t *) srcp)[0];
+ a3 = DBLALIGN (a3, b0, srci);
+ ((op_t *) dstp)[0] = a3;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do2:
+ b1 = a1 = ((op_t *) srcp)[0];
+ a2 = DBLALIGN (a2, b3, srci);
+ ((op_t *) dstp)[0] = a2;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+ do1:
+ b0 = a0 = ((op_t *) srcp)[0];
+ a1 = DBLALIGN (a1, b2, srci);
+ ((op_t *) dstp)[0] = a1;
+ srcp -= OPSIZ;
+ dstp -= OPSIZ;
+
+ len -= 4;
+ }
+ while (len != 0);
+
+ /* This is the right position for do0. Please don't move
+ it into the loop. */
+ do0:
+ a0 = DBLALIGN (a0, b1, srci);
+ ((op_t *) dstp)[0] = a0;
+}
diff --git a/libc/ports/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/libc/ports/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
index 4c5507114..2d5f20b46 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
@@ -20,18 +20,6 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-#include <sys/types.h>
-#ifdef __USE_GNU
-# include <bits/uio.h>
-#endif
-
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- located on an ext2 file system */
-#define O_ACCMODE 0003
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
#define O_CREAT 01000 /* not fcntl */
#define O_TRUNC 02000 /* not fcntl */
#define O_EXCL 04000 /* not fcntl */
@@ -39,41 +27,21 @@
#define O_NONBLOCK 00004
#define O_APPEND 00010
-#define O_NDELAY O_NONBLOCK
#define O_SYNC 020040000
-#define O_FSYNC O_SYNC
-#define O_ASYNC 020000 /* fcntl, for BSD compatibility */
-#ifdef __USE_XOPEN2K8
-# define O_DIRECTORY 0100000 /* Must be a directory. */
-# define O_NOFOLLOW 0200000 /* Do not follow links. */
-# define O_CLOEXEC 010000000 /* Set close_on_exec. */
-#endif
-#ifdef __USE_GNU
-# define O_DIRECT 02000000 /* Direct disk access. */
-# define O_NOATIME 04000000 /* Do not set atime. */
-# define O_PATH 040000000 /* Resolve pathname but do not open file. */
-#endif
+#define __O_DIRECTORY 0100000 /* Must be a directory. */
+#define __O_NOFOLLOW 0200000 /* Do not follow links. */
+#define __O_CLOEXEC 010000000 /* Set close_on_exec. */
+
+#define __O_DIRECT 02000000 /* Direct disk access. */
+#define __O_NOATIME 04000000 /* Do not set atime. */
+#define __O_PATH 040000000 /* Resolve pathname but do not open file. */
-#ifdef __USE_LARGEFILE64
/* Not necessary, files are always with 64bit off_t. */
-# define O_LARGEFILE 0
-#endif
+#define __O_LARGEFILE 0
-/* For now Linux has synchronisity options for data and read operations.
- We define the symbols here but let them do the same as O_SYNC since
- this is a superset. */
-#if defined __USE_POSIX199309 || defined __USE_UNIX98
-# define O_DSYNC 040000 /* Synchronize data. */
-# define O_RSYNC O_SYNC /* Synchronize read operations. */
-#endif
+#define __O_DSYNC 040000 /* Synchronize data. */
-/* Values for the second argument to `fcntl'. */
-#define F_DUPFD 0 /* Duplicate file descriptor. */
-#define F_GETFD 1 /* Get file descriptor flags. */
-#define F_SETFD 2 /* Set file descriptor flags. */
-#define F_GETFL 3 /* Get file status flags. */
-#define F_SETFL 4 /* Set file status flags. */
#define F_GETLK 7 /* Get record locking info. */
#define F_SETLK 8 /* Set record locking info (non-blocking). */
#define F_SETLKW 9 /* Set record locking info (blocking). */
@@ -81,32 +49,8 @@
#define F_SETLK64 F_SETLK /* Set record locking info (non-blocking). */
#define F_SETLKW64 F_SETLKW /* Set record locking info (blocking). */
-#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
-# define F_SETOWN 5 /* Get owner of socket (receiver of SIGIO). */
-# define F_GETOWN 6 /* Set owner of socket (receiver of SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETSIG 10 /* Set number of signal to be sent. */
-# define F_GETSIG 11 /* Get number of signal to be sent. */
-# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */
-# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETLEASE 1024 /* Set a lease. */
-# define F_GETLEASE 1025 /* Enquire what lease is active. */
-# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
-# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */
-#endif
-#ifdef __USE_XOPEN2K8
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set. */
-#endif
-
-/* for F_[GET|SET]FD */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+#define __F_SETOWN 5 /* Get owner of socket (receiver of SIGIO). */
+#define __F_GETOWN 6 /* Set owner of socket (receiver of SIGIO). */
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */
#define F_RDLCK 1 /* Read lock. */
@@ -117,33 +61,6 @@
#define F_EXLCK 16 /* or 3 */
#define F_SHLCK 32 /* or 4 */
-/* Operations for bsd flock(), also used by the kernel implementation */
-#ifdef __USE_BSD
-# define LOCK_SH 1 /* shared lock */
-# define LOCK_EX 2 /* exclusive lock */
-# define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-# define LOCK_UN 8 /* remove lock */
-#endif
-
-#ifdef __USE_GNU
-# define LOCK_MAND 32 /* This is a mandatory flock: */
-# define LOCK_READ 64 /* ... which allows concurrent read operations. */
-# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
-# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
-#endif
-
-#ifdef __USE_GNU
-/* Types of directory notifications that may be requested with F_NOTIFY. */
-# define DN_ACCESS 0x00000001 /* File accessed. */
-# define DN_MODIFY 0x00000002 /* File modified. */
-# define DN_CREATE 0x00000004 /* File created. */
-# define DN_DELETE 0x00000008 /* File removed. */
-# define DN_RENAME 0x00000010 /* File renamed. */
-# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
-# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
-#endif
-
/* We don't need to support __USE_FILE_OFFSET64. */
struct flock
{
@@ -165,137 +82,5 @@ struct flock64
};
#endif
-#ifdef __USE_GNU
-/* Owner types. */
-enum __pid_type
- {
- F_OWNER_TID = 0, /* Kernel thread. */
- F_OWNER_PID, /* Process. */
- F_OWNER_PGRP, /* Process group. */
- F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */
- };
-
-/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */
-struct f_owner_ex
- {
- enum __pid_type type; /* Owner type of ID. */
- __pid_t pid; /* ID of owner. */
- };
-#endif
-
-/* Define some more compatibility macros to be backward compatible with
- BSD systems which did not managed to hide these kernel macros. */
-#ifdef __USE_BSD
-# define FAPPEND O_APPEND
-# define FFSYNC O_FSYNC
-# define FASYNC O_ASYNC
-# define FNONBLOCK O_NONBLOCK
-# define FNDELAY O_NDELAY
-#endif /* Use BSD. */
-
-/* Advise to `posix_fadvise'. */
-#ifdef __USE_XOPEN2K
-# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
-# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
-# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
-# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
-# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
-# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Flags for SYNC_FILE_RANGE. */
-# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
- in the range before performing the
- write. */
-# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
- dirty pages in the range which are
- not presently under writeback. */
-# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
- the range after performing the
- write. */
-
-/* Flags for SPLICE and VMSPLICE. */
-# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
-# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
- (but we may still block on the fd
- we splice from/to). */
-# define SPLICE_F_MORE 4 /* Expect more data. */
-# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
-
-/* File handle structure. */
-struct file_handle
-{
- unsigned int handle_bytes;
- int handle_type;
- /* File identifier. */
- unsigned char f_handle[0];
-};
-
-/* Maximum handle size (for now). */
-# define MAX_HANDLE_SZ 128
-#endif
-
-__BEGIN_DECLS
-
-#ifdef __USE_GNU
-
-/* Provide kernel hint to read ahead. */
-extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
- __THROW;
-
-
-/* Selective file content synch'ing. */
-extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
- unsigned int __flags);
-
-
-/* Splice address range into a pipe. */
-extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
- size_t __count, unsigned int __flags);
-
-/* Splice two files together. */
-extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
- __off64_t *__offout, size_t __len,
- unsigned int __flags);
-
-/* In-kernel implementation of tee for pipe buffers. */
-extern ssize_t tee (int __fdin, int __fdout, size_t __len,
- unsigned int __flags);
-
-/* Reserve storage for the data of the file associated with FD.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-# ifndef __USE_FILE_OFFSET64
-extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
-# else
-# ifdef __REDIRECT
-extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
- __off64_t __len),
- fallocate64);
-# else
-# define fallocate fallocate64
-# endif
-# endif
-# ifdef __USE_LARGEFILE64
-extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
- __off64_t __len);
-# endif
-
-/* Map file name to file handle. */
-extern int name_to_handle_at (int __dfd, const char *__name,
- struct file_handle *__handle, int *__mnt_id,
- int __flags) __THROW;
-
-/* Open file using the file handle.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
- int __flags);
-
-#endif
-
-__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h b/libc/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
index 5811361e3..9d1218273 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006, 2007, 2008, 2009 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
@@ -86,6 +86,18 @@
__ret; \
})
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
+ ({ \
+ INTERNAL_SYSCALL_DECL (__err); \
+ long int __ret; \
+ int __op = FUTEX_WAIT_BITSET | clockbit; \
+ __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
+ __lll_private_flag (__op, private), \
+ (val), (timespec), NULL /* Unused. */, \
+ FUTEX_BITSET_MATCH_ANY); \
+ __ret; \
+ })
+
#define lll_futex_wake(futexp, nr, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
diff --git a/libc/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h b/libc/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h
index a8f20bd0b..56a914b7e 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/generic/bits/fcntl.h
@@ -1,5 +1,5 @@
/* O_*, F_*, FD_* bit values for the generic Linux ABI.
- 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 Chris Metcalf <cmetcalf@tilera.com>, 2011.
@@ -21,147 +21,10 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-#include <sys/types.h>
#include <bits/wordsize.h>
-#ifdef __USE_GNU
-# include <bits/uio.h>
-#endif
-
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- located on a few file systems. */
-#define O_ACCMODE 0003
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
-#define O_CREAT 0100 /* not fcntl */
-#define O_EXCL 0200 /* not fcntl */
-#define O_NOCTTY 0400 /* not fcntl */
-#define O_TRUNC 01000 /* not fcntl */
-#define O_APPEND 02000
-#define O_NONBLOCK 04000
-#define O_NDELAY O_NONBLOCK
-#define O_SYNC 04010000
-#define O_FSYNC O_SYNC
-#define O_ASYNC 020000
-#ifdef __USE_XOPEN2K8
-# define O_DIRECTORY 0200000 /* Must be a directory. */
-# define O_NOFOLLOW 0400000 /* Do not follow links. */
-# define O_CLOEXEC 02000000 /* Set close_on_exec. */
-#endif
-#ifdef __USE_GNU
-# define O_DIRECT 040000 /* Direct disk access. */
-# define O_NOATIME 01000000 /* Do not set atime. */
-# define O_PATH 010000000 /* Resolve pathname but do not open file. */
-#endif
-
-/* For now Linux has synchronisity options for data and read operations.
- We define the symbols here but let them do the same as O_SYNC since
- this is a superset. */
-#if defined __USE_POSIX199309 || defined __USE_UNIX98
-# define O_DSYNC 010000 /* Synchronize data. */
-# define O_RSYNC O_SYNC /* Synchronize read operations. */
-#endif
-
-#ifdef __USE_LARGEFILE64
-# if __WORDSIZE == 64
-# define O_LARGEFILE 0
-# else
-# define O_LARGEFILE 0100000
-# endif
-#endif
-
-/* Values for the second argument to `fcntl'. */
-#define F_DUPFD 0 /* Duplicate file descriptor. */
-#define F_GETFD 1 /* Get file descriptor flags. */
-#define F_SETFD 2 /* Set file descriptor flags. */
-#define F_GETFL 3 /* Get file status flags. */
-#define F_SETFL 4 /* Set file status flags. */
#if __WORDSIZE == 64
-# define F_GETLK 5 /* Get record locking info. */
-# define F_SETLK 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW 7 /* Set record locking info (blocking). */
-/* Not necessary, we always have 64-bit offsets. */
-# define F_GETLK64 5 /* Get record locking info. */
-# define F_SETLK64 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW64 7 /* Set record locking info (blocking). */
-#else
-# ifndef __USE_FILE_OFFSET64
-# define F_GETLK 5 /* Get record locking info. */
-# define F_SETLK 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW 7 /* Set record locking info (blocking). */
-# else
-# define F_GETLK F_GETLK64 /* Get record locking info. */
-# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
-# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
-# endif
-# define F_GETLK64 12 /* Get record locking info. */
-# define F_SETLK64 13 /* Set record locking info (non-blocking). */
-# define F_SETLKW64 14 /* Set record locking info (blocking). */
-#endif
-
-#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
-# define F_SETOWN 8 /* Get owner (process receiving SIGIO). */
-# define F_GETOWN 9 /* Set owner (process receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETSIG 10 /* Set number of signal to be sent. */
-# define F_GETSIG 11 /* Get number of signal to be sent. */
-# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */
-# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETLEASE 1024 /* Set a lease. */
-# define F_GETLEASE 1025 /* Enquire what lease is active. */
-# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
-# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */
-#endif
-#ifdef __USE_XOPEN2K8
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set. */
-#endif
-
-/* For F_[GET|SET]FD. */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
-
-/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
-#define F_RDLCK 0 /* Read lock. */
-#define F_WRLCK 1 /* Write lock. */
-#define F_UNLCK 2 /* Remove lock. */
-
-/* For old implementation of bsd flock(). */
-#define F_EXLCK 4 /* or 3 */
-#define F_SHLCK 8 /* or 4 */
-
-#ifdef __USE_BSD
-/* Operations for bsd flock(), also used by the kernel implementation. */
-# define LOCK_SH 1 /* shared lock */
-# define LOCK_EX 2 /* exclusive lock */
-# define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-# define LOCK_UN 8 /* remove lock */
-#endif
-
-#ifdef __USE_GNU
-# define LOCK_MAND 32 /* This is a mandatory flock: */
-# define LOCK_READ 64 /* ... which allows concurrent read operations. */
-# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
-# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
-#endif
-
-#ifdef __USE_GNU
-/* Types of directory notifications that may be requested with F_NOTIFY. */
-# define DN_ACCESS 0x00000001 /* File accessed. */
-# define DN_MODIFY 0x00000002 /* File modified. */
-# define DN_CREATE 0x00000004 /* File created. */
-# define DN_DELETE 0x00000008 /* File removed. */
-# define DN_RENAME 0x00000010 /* File renamed. */
-# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
-# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
+# define __O_LARGEFILE 0
#endif
struct flock
@@ -189,151 +52,5 @@ struct flock64
};
#endif
-#ifdef __USE_GNU
-/* Owner types. */
-enum __pid_type
- {
- F_OWNER_TID = 0, /* Kernel thread. */
- F_OWNER_PID, /* Process. */
- F_OWNER_PGRP, /* Process group. */
- F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */
- };
-
-/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */
-struct f_owner_ex
- {
- enum __pid_type type; /* Owner type of ID. */
- __pid_t pid; /* ID of owner. */
- };
-#endif
-
-/* Define some more compatibility macros to be backward compatible with
- BSD systems which did not managed to hide these kernel macros. */
-#ifdef __USE_BSD
-# define FAPPEND O_APPEND
-# define FFSYNC O_FSYNC
-# define FASYNC O_ASYNC
-# define FNONBLOCK O_NONBLOCK
-# define FNDELAY O_NDELAY
-#endif /* Use BSD. */
-
-/* Advise to `posix_fadvise'. */
-#ifdef __USE_XOPEN2K
-# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
-# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
-# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
-# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
-# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
-# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Flags for SYNC_FILE_RANGE. */
-# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
- in the range before performing the
- write. */
-# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
- dirty pages in the range which are
- not presently under writeback. */
-# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
- the range after performing the
- write. */
-
-/* Flags for SPLICE and VMSPLICE. */
-# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
-# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
- (but we may still block on the fd
- we splice from/to). */
-# define SPLICE_F_MORE 4 /* Expect more data. */
-# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
-
-
-/* File handle structure. */
-struct file_handle
-{
- unsigned int handle_bytes;
- int handle_type;
- /* File identifier. */
- unsigned char f_handle[0];
-};
-
-/* Maximum handle size (for now). */
-# define MAX_HANDLE_SZ 128
-#endif
-
-__BEGIN_DECLS
-
-#ifdef __USE_GNU
-
-/* Provide kernel hint to read ahead. */
-extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
- __THROW;
-
-
-/* Selective file content synch'ing.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
- unsigned int __flags);
-
-
-/* Splice address range into a pipe.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
- size_t __count, unsigned int __flags);
-
-/* Splice two files together.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
- __off64_t *__offout, size_t __len,
- unsigned int __flags);
-
-/* In-kernel implementation of tee for pipe buffers.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t tee (int __fdin, int __fdout, size_t __len,
- unsigned int __flags);
-
-/* Reserve storage for the data of the file associated with FD.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-# ifndef __USE_FILE_OFFSET64
-extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
-# else
-# ifdef __REDIRECT
-extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
- __off64_t __len),
- fallocate64);
-# else
-# define fallocate fallocate64
-# endif
-# endif
-# ifdef __USE_LARGEFILE64
-extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
- __off64_t __len);
-# endif
-
-
-/* Map file name to file handle. */
-extern int name_to_handle_at (int __dfd, const char *__name,
- struct file_handle *__handle, int *__mnt_id,
- int __flags) __THROW;
-
-/* Open file using the file handle.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
- int __flags);
-
-#endif /* use GNU */
-
-__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/generic/sysctl.c b/libc/ports/sysdeps/unix/sysv/linux/generic/sysctl.c
index 0bdb78660..0212e1a8a 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/generic/sysctl.c
+++ b/libc/ports/sysdeps/unix/sysv/linux/generic/sysctl.c
@@ -30,4 +30,3 @@ sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
return -1;
}
stub_warning (sysctl)
-#include <stub-tag.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/generic/ustat.c b/libc/ports/sysdeps/unix/sysv/linux/generic/ustat.c
index 7611e82f0..d6a23090c 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/generic/ustat.c
+++ b/libc/ports/sysdeps/unix/sysv/linux/generic/ustat.c
@@ -30,4 +30,3 @@ ustat (dev_t dev, struct ustat *ubuf)
return -1;
}
stub_warning (ustat)
-#include <stub-tag.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h b/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
index c0e949eea..47a7ed285 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
@@ -1,6 +1,5 @@
/* O_*, F_*, FD_* bit values for Linux.
- Copyright (C) 1995-1999, 2000, 2002, 2004, 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
@@ -21,134 +20,41 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-#include <sys/types.h>
-#ifdef __USE_GNU
-# include <bits/uio.h>
-#endif
-
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- located on a few file systems. */
-#define O_ACCMODE 0003
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
#define O_CREAT 00000400 /* not fcntl */
#define O_EXCL 00002000 /* not fcntl */
#define O_NOCTTY 00400000 /* not fcntl */
-#define O_TRUNC 00001000 /* not fcntl */
#define O_APPEND 00000010
#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */
-#define O_NDELAY O_NONBLOCK
-#define O_SYNC 00100000
-#define O_FSYNC O_SYNC
-#define O_ASYNC 020000
-#define O_BLKSEEK 00000100 /* HPUX only */
+#define __O_DSYNC 01000000
+#define __O_RSYNC 02000000 /* HPUX only */
+#define __O_SYNC 01000000
+#define O_SYNC (__O_SYNC|__O_DSYNC)
-#ifdef __USE_XOPEN2K8
-# define O_DIRECTORY 000010000 /* Must be a directory. */
-# define O_NOFOLLOW 000000200 /* Do not follow links. */
-# define O_CLOEXEC 010000000 /* Set close_on_exec. */
-#endif
-#ifdef __USE_GNU
-# define O_DIRECT 040000 /* Direct disk access. */
-# define O_NOATIME 004000000 /* Do not set atime. */
-#endif
+#define O_BLKSEEK 00000100 /* HPUX only */
-/* For now Linux has synchronisity options for data and read operations.
- We define the symbols here but let them do the same as O_SYNC since
- this is a superset. */
-#if defined __USE_POSIX199309 || defined __USE_UNIX98
-# define O_DSYNC 01000000 /* HPUX only */
-# define O_RSYNC 02000000 /* HPUX only */
-#endif
+#define __O_DIRECTORY 000010000 /* Must be a directory. */
+#define __O_NOFOLLOW 000000200 /* Do not follow links. */
+#define __O_CLOEXEC 010000000 /* Set close_on_exec. */
+#define __O_NOATIME 004000000 /* Do not set atime. */
+#define __O_PATH 020000000
-#ifdef __USE_LARGEFILE64
-# define O_LARGEFILE 00004000
-#endif
+#define __O_LARGEFILE 00004000
-/* Values for the second argument to `fcntl'. */
-#define F_DUPFD 0 /* Duplicate file descriptor. */
-#define F_GETFD 1 /* Get file descriptor flags. */
-#define F_SETFD 2 /* Set file descriptor flags. */
-#define F_GETFL 3 /* Get file status flags. */
-#define F_SETFL 4 /* Set file status flags. */
-#ifndef __USE_FILE_OFFSET64
-# define F_GETLK 5 /* Get record locking info. */
-# define F_SETLK 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW 7 /* Set record locking info (blocking). */
-#else
-# define F_GETLK F_GETLK64 /* Get record locking info. */
-# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
-# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
-#endif
#define F_GETLK64 8 /* Get record locking info. */
#define F_SETLK64 9 /* Set record locking info (non-blocking). */
#define F_SETLKW64 10 /* Set record locking info (blocking). */
-#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
-# define F_GETOWN 11 /* Get owner of socket (receiver of SIGIO). */
-# define F_SETOWN 12 /* Set owner of socket (receiver of SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETSIG 13 /* Set number of signal to be sent. */
-# define F_GETSIG 14 /* Get number of signal to be sent. */
-# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */
-# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETLEASE 1024 /* Set a lease. */
-# define F_GETLEASE 1025 /* Enquire what lease is active. */
-# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
-# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */
-#endif
-#ifdef __USE_XOPEN2K8
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set. */
-#endif
+#define __F_GETOWN 11 /* Get owner of socket (receiver of SIGIO). */
+#define __F_SETOWN 12 /* Set owner of socket (receiver of SIGIO). */
-/* For F_[GET|SET]FD. */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+#define __F_SETSIG 13 /* Set number of signal to be sent. */
+#define __F_GETSIG 14 /* Get number of signal to be sent. */
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
#define F_RDLCK 1 /* Read lock. */
#define F_WRLCK 2 /* Write lock. */
#define F_UNLCK 3 /* Remove lock. */
-/* For old implementation of bsd flock(). */
-#define F_EXLCK 4 /* or 3 */
-#define F_SHLCK 8 /* or 4 */
-
-#ifdef __USE_BSD
-/* Operations for bsd flock(), also used by the kernel implementation. */
-# define LOCK_SH 1 /* shared lock */
-# define LOCK_EX 2 /* exclusive lock */
-# define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-# define LOCK_UN 8 /* remove lock */
-#endif
-
-#ifdef __USE_GNU
-# define LOCK_MAND 32 /* This is a mandatory flock: */
-# define LOCK_READ 64 /* ... which allows concurrent read operations. */
-# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
-# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
-#endif
-
-#ifdef __USE_GNU
-/* Types of directory notifications that may be requested with F_NOTIFY. */
-# define DN_ACCESS 0x00000001 /* File accessed. */
-# define DN_MODIFY 0x00000002 /* File modified. */
-# define DN_CREATE 0x00000004 /* File created. */
-# define DN_DELETE 0x00000008 /* File removed. */
-# define DN_RENAME 0x00000010 /* File renamed. */
-# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
-# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
-#endif
-
struct flock
{
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
@@ -174,148 +80,5 @@ struct flock64
};
#endif
-#ifdef __USE_GNU
-/* Owner types. */
-enum __pid_type
- {
- F_OWNER_TID = 0, /* Kernel thread. */
- F_OWNER_PID, /* Process. */
- F_OWNER_PGRP, /* Process group. */
- F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */
- };
-
-/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */
-struct f_owner_ex
- {
- enum __pid_type type; /* Owner type of ID. */
- __pid_t pid; /* ID of owner. */
- };
-#endif
-
-/* Define some more compatibility macros to be backward compatible with
- BSD systems which did not managed to hide these kernel macros. */
-#ifdef __USE_BSD
-# define FAPPEND O_APPEND
-# define FFSYNC O_FSYNC
-# define FASYNC O_ASYNC
-# define FNONBLOCK O_NONBLOCK
-# define FNDELAY O_NDELAY
-#endif /* Use BSD. */
-
-/* Advise to `posix_fadvise'. */
-#ifdef __USE_XOPEN2K
-# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
-# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
-# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
-# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
-# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
-# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Flags for SYNC_FILE_RANGE. */
-# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
- in the range before performing the
- write. */
-# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
- dirty pages in the range which are
- not presently under writeback. */
-# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
- the range after performing the
- write. */
-
-/* Flags for SPLICE and VMSPLICE. */
-# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
-# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
- (but we may still block on the fd
- we splice from/to). */
-# define SPLICE_F_MORE 4 /* Expect more data. */
-# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
-
-
-/* File handle structure. */
-struct file_handle
-{
- unsigned int handle_bytes;
- int handle_type;
- /* File identifier. */
- unsigned char f_handle[0];
-};
-
-/* Maximum handle size (for now). */
-# define MAX_HANDLE_SZ 128
-#endif
-
-__BEGIN_DECLS
-
-#ifdef __USE_GNU
-
-/* Provide kernel hint to read ahead. */
-extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
- __THROW;
-
-
-/* Selective file content synch'ing. */
-extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
- unsigned int __flags);
-
-
-/* Splice address range into a pipe.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
- size_t __count, unsigned int __flags);
-
-/* Splice two files together.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
- __off64_t *__offout, size_t __len,
- unsigned int __flags);
-
-/* In-kernel implementation of tee for pipe buffers.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t tee (int __fdin, int __fdout, size_t __len,
- unsigned int __flags);
-
-/* Reserve storage for the data of the file associated with FD.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-# ifndef __USE_FILE_OFFSET64
-extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
-# else
-# ifdef __REDIRECT
-extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
- __off64_t __len),
- fallocate64);
-# else
-# define fallocate fallocate64
-# endif
-# endif
-# ifdef __USE_LARGEFILE64
-extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
- __off64_t __len);
-# endif
-
-
-/* Map file name to file handle. */
-extern int name_to_handle_at (int __dfd, const char *__name,
- struct file_handle *__handle, int *__mnt_id,
- int __flags) __THROW;
-
-/* Open file using the file handle.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
- int __flags);
-
-#endif
-
-__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h b/libc/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
index 83dd599c6..1825d315b 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
@@ -1,6 +1,5 @@
/* Assembler macros for PA-RISC.
- Copyright (C) 1999, 2001, 2002, 2003, 2007
- Free Software Foundation, Inc.
+ Copyright (C) 1999-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
@@ -21,7 +20,6 @@
#include <asm/unistd.h>
#include <sysdeps/generic/sysdep.h>
-#include <sys/syscall.h>
/* In order to get __set_errno() definition in INLINE_SYSCALL. */
#ifndef __ASSEMBLER__
@@ -29,37 +27,33 @@
#endif
#undef ASM_LINE_SEP
-#define ASM_LINE_SEP !
+#define ASM_LINE_SEP !
#undef SYS_ify
#define SYS_ify(syscall_name) (__NR_##syscall_name)
-/* WARNING: TREG must be a callee saves register so
- that it doesn't have to be restored after a call
+/* The vfork, fork, and clone syscalls clobber r19
+ * and r21. We list r21 as either clobbered or as an
+ * input to a 6-argument syscall. We must save and
+ * restore r19 in both PIC and non-PIC cases.
+ */
+/* WARNING: TREG must be a callee saves register so
+ that it doesn't have to be restored after a call
to another function */
-#ifdef PIC
-# define TREG %r3
-# define SAVE_PIC(SREG) copy %r19, SREG ASM_LINE_SEP
-# define LOAD_PIC(LREG) copy LREG, %r19 ASM_LINE_SEP
+#define TREG 4
+#define SAVE_PIC(SREG) \
+ copy %r19, SREG ASM_LINE_SEP \
+ .cfi_register 19, SREG
+#define LOAD_PIC(LREG) \
+ copy LREG , %r19 ASM_LINE_SEP \
+ .cfi_restore 19
/* Inline assembly defines */
-# define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */
-# define SAVE_ASM_PIC " copy %%r19, %" TREG_ASM "\n"
-# define LOAD_ASM_PIC " copy %" TREG_ASM ", %%r19\n"
-# define CLOB_TREG TREG_ASM ,
-# define PIC_REG_DEF register unsigned long __r19 asm("r19");
-# define PIC_REG_USE , "r" (__r19)
-#else
-# define TREG %r3
-# define SAVE_PIC(SREG) nop ASM_LINE_SEP
-# define LOAD_PIC(LREG) nop ASM_LINE_SEP
-/* Inline assembly defines */
-# define TREG_ASM
-# define SAVE_ASM_PIC "nop \n"
-# define LOAD_ASM_PIC "nop \n"
-# define CLOB_TREG
-# define PIC_REG_DEF
-# define PIC_REG_USE
-#endif
+#define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */
+#define SAVE_ASM_PIC " copy %%r19, %" TREG_ASM "\n"
+#define LOAD_ASM_PIC " copy %" TREG_ASM ", %%r19\n"
+#define CLOB_TREG TREG_ASM ,
+#define PIC_REG_DEF register unsigned long __r19 asm("r19");
+#define PIC_REG_USE , "r" (__r19)
#ifdef __ASSEMBLER__
@@ -126,12 +120,14 @@
.align ALIGNARG(4) ASM_LINE_SEP \
.export C_SYMBOL_NAME(name) ASM_LINE_SEP \
.type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \
+ cfi_startproc ASM_LINE_SEP \
C_LABEL(name) ASM_LINE_SEP \
.PROC ASM_LINE_SEP \
.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3 ASM_LINE_SEP \
.ENTRY ASM_LINE_SEP \
/* SAVE_RP says we do */ ASM_LINE_SEP \
stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \
+ .cfi_offset 2, -20 ASM_LINE_SEP \
/*FIXME: Call mcount? (carefull with stack!) */
/* Some syscall wrappers do not call other functions, and
@@ -141,22 +137,25 @@
.align ALIGNARG(4) ASM_LINE_SEP \
.export C_SYMBOL_NAME(name) ASM_LINE_SEP \
.type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \
+ cfi_startproc ASM_LINE_SEP \
C_LABEL(name) ASM_LINE_SEP \
.PROC ASM_LINE_SEP \
.CALLINFO FRAME=64,NO_CALLS,SAVE_RP,ENTRY_GR=3 ASM_LINE_SEP \
.ENTRY ASM_LINE_SEP \
/* SAVE_RP says we do */ ASM_LINE_SEP \
stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \
+ .cfi_offset 2, -20 ASM_LINE_SEP \
/*FIXME: Call mcount? (carefull with stack!) */
#undef END
#define END(name) \
.EXIT ASM_LINE_SEP \
.PROCEND ASM_LINE_SEP \
+ cfi_endproc ASM_LINE_SEP \
.size C_SYMBOL_NAME(name), .-C_SYMBOL_NAME(name) ASM_LINE_SEP
-/* If compiled for profiling, call `mcount' at the start
- of each function. No, don't bother. gcc will put the
+/* If compiled for profiling, call `mcount' at the start
+ of each function. No, don't bother. gcc will put the
call in for us. */
#define CALL_MCOUNT /* Do nothing. */
@@ -169,9 +168,7 @@
which means
ENTRY(name)
DO_CALL(...)
- nop
- bv 0(2)
- nop
+ bv,n 0(2)
*/
#define PSEUDO(name, syscall_name, args) \
@@ -179,8 +176,7 @@
/* If necc. load args from stack */ ASM_LINE_SEP \
DOARGS_##args ASM_LINE_SEP \
DO_CALL (syscall_name, args) ASM_LINE_SEP \
- UNDOARGS_##args ASM_LINE_SEP \
- nop ASM_LINE_SEP
+ UNDOARGS_##args ASM_LINE_SEP
#define ret \
/* Return value set by ERRNO code */ ASM_LINE_SEP \
@@ -195,8 +191,7 @@
ENTRY_LEAF (name) ASM_LINE_SEP \
DOARGS_##args ASM_LINE_SEP \
DO_CALL_NOERRNO (syscall_name, args) ASM_LINE_SEP \
- UNDOARGS_##args ASM_LINE_SEP \
- nop ASM_LINE_SEP
+ UNDOARGS_##args ASM_LINE_SEP
#define ret_NOERRNO ret
@@ -210,8 +205,7 @@
ENTRY_LEAF (name) ASM_LINE_SEP \
DOARGS_##args ASM_LINE_SEP \
DO_CALL_ERRVAL (syscall_name, args) ASM_LINE_SEP \
- UNDOARGS_##args ASM_LINE_SEP \
- nop ASM_LINE_SEP
+ UNDOARGS_##args ASM_LINE_SEP
#define ret_ERRVAL ret
@@ -289,8 +283,12 @@
#define DO_CALL(syscall_name, args) \
/* Create a frame */ ASM_LINE_SEP \
stwm TREG, 64(%sp) ASM_LINE_SEP \
+ .cfi_offset TREG, 0 ASM_LINE_SEP \
+ .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \
stw %sp, -4(%sp) ASM_LINE_SEP \
+ .cfi_offset 30, -4 ASM_LINE_SEP \
stw %r19, -32(%sp) ASM_LINE_SEP \
+ .cfi_offset 19, -32 ASM_LINE_SEP \
/* Save r19 */ ASM_LINE_SEP \
SAVE_PIC(TREG) ASM_LINE_SEP \
/* Do syscall, delay loads # */ ASM_LINE_SEP \
@@ -313,8 +311,10 @@
L(pre_end): ASM_LINE_SEP \
/* Restore our frame, restoring TREG */ ASM_LINE_SEP \
ldwm -64(%sp), TREG ASM_LINE_SEP \
+ .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \
/* Restore return pointer */ ASM_LINE_SEP \
- ldw -20(%sp),%rp ASM_LINE_SEP
+ ldw -20(%sp),%rp ASM_LINE_SEP \
+ .cfi_restore 2 ASM_LINE_SEP
/* We do nothing with the return, except hand it back to someone else */
#undef DO_CALL_NOERRNO
@@ -386,13 +386,13 @@ L(pre_end): ASM_LINE_SEP \
/* INTERNAL_SYSCALL_DECL - Allows us to setup some function static
value to use within the context of the syscall
INTERNAL_SYSCALL_ERROR_P - Returns 0 if it wasn't an error, 1 otherwise
- You are allowed to use the syscall result (val) and the DECL error
+ You are allowed to use the syscall result (val) and the DECL error
variable to determine what went wrong.
INTERLAL_SYSCALL_ERRNO - Munges the val/err pair into the error number.
In our case we just flip the sign. */
#undef INTERNAL_SYSCALL_DECL
-#define INTERNAL_SYSCALL_DECL(err)
+#define INTERNAL_SYSCALL_DECL(err)
#undef INTERNAL_SYSCALL_ERROR_P
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
diff --git a/libc/ports/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/libc/ports/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
index 51965b710..990ae73bc 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
@@ -1,6 +1,5 @@
/* O_*, F_*, FD_* bit values for Linux/IA64.
- Copyright (C) 1999, 2000, 2004, 2006, 2007, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 1999-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,132 +20,14 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-
-#include <sys/types.h>
-#ifdef __USE_GNU
-# include <bits/uio.h>
-#endif
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- located on a few file systems. */
-#define O_ACCMODE 0003
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
-#define O_CREAT 0100 /* not fcntl */
-#define O_EXCL 0200 /* not fcntl */
-#define O_NOCTTY 0400 /* not fcntl */
-#define O_TRUNC 01000 /* not fcntl */
-#define O_APPEND 02000
-#define O_NONBLOCK 04000
-#define O_NDELAY O_NONBLOCK
-#define O_SYNC 04010000
-#define O_FSYNC O_SYNC
-#define O_ASYNC 020000
-
-#ifdef __USE_XOPEN2K8
-# define O_DIRECTORY 0200000 /* must be a directory */
-# define O_NOFOLLOW 0400000 /* don't follow links */
-# define O_CLOEXEC 02000000 /* Set close_on_exec. */
-#endif
-#ifdef __USE_GNU
-# define O_DIRECT 040000
-# define O_NOATIME 01000000 /* Do not set atime. */
-# define O_PATH 010000000 /* Resolve pathname but do not open file. */
-#endif
-
-#ifdef __USE_LARGEFILE64
/* Not necessary, files are always with 64bit off_t. */
-# define O_LARGEFILE 0
-#endif
-
-/* For now Linux has synchronisity options for data and read operations.
- We define the symbols here but let them do the same as O_SYNC since
- this is a superset. */
-#if defined __USE_POSIX199309 || defined __USE_UNIX98
-# define O_DSYNC 010000 /* Synchronize data. */
-# define O_RSYNC O_SYNC /* Synchronize read operations. */
-#endif
-
-/* Values for the second argument to `fcntl'. */
-#define F_DUPFD 0 /* Duplicate file descriptor. */
-#define F_GETFD 1 /* Get file descriptor flags. */
-#define F_SETFD 2 /* Set file descriptor flags. */
-#define F_GETFL 3 /* Get file status flags. */
-#define F_SETFL 4 /* Set file status flags. */
-#define F_GETLK 5 /* Get record locking info. */
-#define F_SETLK 6 /* Set record locking info (non-blocking). */
-#define F_SETLKW 7 /* Set record locking info (blocking). */
+#define __O_LARGEFILE 0
/* Not necessary, we always have 64-bit offsets. */
#define F_GETLK64 5 /* Get record locking info. */
#define F_SETLK64 6 /* Set record locking info (non-blocking). */
#define F_SETLKW64 7 /* Set record locking info (blocking). */
-#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
-# define F_SETOWN 8 /* Get owner (process receiving SIGIO). */
-# define F_GETOWN 9 /* Set owner (process receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETSIG 10 /* Set number of signal to be sent. */
-# define F_GETSIG 11 /* Get number of signal to be sent. */
-# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */
-# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETLEASE 1024 /* Set a lease. */
-# define F_GETLEASE 1025 /* Enquire what lease is active. */
-# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
-# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */
-#endif
-#ifdef __USE_XOPEN2K8
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set. */
-#endif
-
-/* For F_[GET|SET]FD. */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
-
-/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
-#define F_RDLCK 0 /* Read lock. */
-#define F_WRLCK 1 /* Write lock. */
-#define F_UNLCK 2 /* Remove lock. */
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK 4 /* or 3 */
-#define F_SHLCK 8 /* or 4 */
-
-#ifdef __USE_BSD
-/* Operations for bsd flock(), also used by the kernel implementation */
-# define LOCK_SH 1 /* shared lock */
-# define LOCK_EX 2 /* exclusive lock */
-# define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-# define LOCK_UN 8 /* remove lock */
-#endif
-
-#ifdef __USE_GNU
-# define LOCK_MAND 32 /* This is a mandatory flock: */
-# define LOCK_READ 64 /* ... which allows concurrent read operations. */
-# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
-# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Types of directory notifications that may be requested with F_NOTIFY. */
-# define DN_ACCESS 0x00000001 /* File accessed. */
-# define DN_MODIFY 0x00000002 /* File modified. */
-# define DN_CREATE 0x00000004 /* File created. */
-# define DN_DELETE 0x00000008 /* File removed. */
-# define DN_RENAME 0x00000010 /* File renamed. */
-# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
-# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
-#endif
-
/* We don't need to support __USE_FILE_OFFSET64. */
struct flock
{
@@ -168,152 +49,5 @@ struct flock64
};
#endif
-#ifdef __USE_GNU
-/* Owner types. */
-enum __pid_type
- {
- F_OWNER_TID = 0, /* Kernel thread. */
- F_OWNER_PID, /* Process. */
- F_OWNER_PGRP, /* Process group. */
- F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */
- };
-
-/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */
-struct f_owner_ex
- {
- enum __pid_type type; /* Owner type of ID. */
- __pid_t pid; /* ID of owner. */
- };
-#endif
-
-
-/* Define some more compatibility macros to be backward compatible with
- BSD systems which did not managed to hide these kernel macros. */
-#ifdef __USE_BSD
-# define FAPPEND O_APPEND
-# define FFSYNC O_FSYNC
-# define FASYNC O_ASYNC
-# define FNONBLOCK O_NONBLOCK
-# define FNDELAY O_NDELAY
-#endif /* Use BSD. */
-
-/* Advise to `posix_fadvise'. */
-#ifdef __USE_XOPEN2K
-# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
-# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
-# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
-# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
-# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
-# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Flags for SYNC_FILE_RANGE. */
-# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
- in the range before performing the
- write. */
-# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
- dirty pages in the range which are
- not presently under writeback. */
-# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
- the range after performing the
- write. */
-
-/* Flags for SPLICE and VMSPLICE. */
-# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
-# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
- (but we may still block on the fd
- we splice from/to). */
-# define SPLICE_F_MORE 4 /* Expect more data. */
-# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
-
-
-/* File handle structure. */
-struct file_handle
-{
- unsigned int handle_bytes;
- int handle_type;
- /* File identifier. */
- unsigned char f_handle[0];
-};
-
-/* Maximum handle size (for now). */
-# define MAX_HANDLE_SZ 128
-#endif
-
-__BEGIN_DECLS
-
-#ifdef __USE_GNU
-
-/* Provide kernel hint to read ahead. */
-extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
- __THROW;
-
-
-/* Selective file content synch'ing.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
- unsigned int __flags);
-
-
-/* Splice address range into a pipe.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
- size_t __count, unsigned int __flags);
-
-/* Splice two files together.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
- __off64_t *__offout, size_t __len,
- unsigned int __flags);
-
-/* In-kernel implementation of tee for pipe buffers.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t tee (int __fdin, int __fdout, size_t __len,
- unsigned int __flags);
-
-/* Reserve storage for the data of the file associated with FD.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-# ifndef __USE_FILE_OFFSET64
-extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
-# else
-# ifdef __REDIRECT
-extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
- __off64_t __len),
- fallocate64);
-# else
-# define fallocate fallocate64
-# endif
-# endif
-# ifdef __USE_LARGEFILE64
-extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
- __off64_t __len);
-# endif
-
-
-/* Map file name to file handle. */
-extern int name_to_handle_at (int __dfd, const char *__name,
- struct file_handle *__handle, int *__mnt_id,
- int __flags) __THROW;
-
-/* Open file using the file handle.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
- int __flags);
-
-#endif
-
-__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h b/libc/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h
index 946cfa2ca..04f8a1c1b 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h
@@ -1,5 +1,5 @@
/* O_*, F_*, FD_* bit values for Linux.
- Copyright (C) 2000, 2004, 2008, 2009, 2010, 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
@@ -20,133 +20,10 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-#include <sys/types.h>
-#ifdef __USE_GNU
-# include <bits/uio.h>
-#endif
-
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- located on a few file systems. */
-#define O_ACCMODE 0003
-#define O_RDONLY 00
-#define O_WRONLY 01
-#define O_RDWR 02
-#define O_CREAT 0100 /* not fcntl */
-#define O_EXCL 0200 /* not fcntl */
-#define O_NOCTTY 0400 /* not fcntl */
-#define O_TRUNC 01000 /* not fcntl */
-#define O_APPEND 02000
-#define O_NONBLOCK 04000
-#define O_NDELAY O_NONBLOCK
-#define O_SYNC 04010000
-#define O_FSYNC O_SYNC
-#define O_ASYNC 020000
-
-#ifdef __USE_XOPEN2K8
-# define O_DIRECTORY 040000 /* Must be a directory. */
-# define O_NOFOLLOW 0100000 /* Do not follow links. */
-# define O_CLOEXEC 02000000 /* Set close_on_exec. */
-#endif
-#ifdef __USE_GNU
-# define O_DIRECT 0200000 /* Direct disk access. */
-# define O_NOATIME 01000000 /* Do not set atime. */
-# define O_PATH 010000000 /* Resolve pathname but do not open file. */
-#endif
-
-/* For now Linux has synchronisity options for data and read operations.
- We define the symbols here but let them do the same as O_SYNC since
- this is a superset. */
-#if defined __USE_POSIX199309 || defined __USE_UNIX98
-# define O_DSYNC 010000 /* Synchronize data. */
-# define O_RSYNC O_SYNC /* Synchronize read operations. */
-#endif
-
-#ifdef __USE_LARGEFILE64
-# define O_LARGEFILE 0400000
-#endif
-
-/* Values for the second argument to `fcntl'. */
-#define F_DUPFD 0 /* Duplicate file descriptor. */
-#define F_GETFD 1 /* Get file descriptor flags. */
-#define F_SETFD 2 /* Set file descriptor flags. */
-#define F_GETFL 3 /* Get file status flags. */
-#define F_SETFL 4 /* Set file status flags. */
-#ifndef __USE_FILE_OFFSET64
-# define F_GETLK 5 /* Get record locking info. */
-# define F_SETLK 6 /* Set record locking info (non-blocking). */
-# define F_SETLKW 7 /* Set record locking info (blocking). */
-#else
-# define F_GETLK F_GETLK64 /* Get record locking info. */
-# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
-# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
-#endif
-#define F_GETLK64 12 /* Get record locking info. */
-#define F_SETLK64 13 /* Set record locking info (non-blocking). */
-#define F_SETLKW64 14 /* Set record locking info (blocking). */
-
-#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8
-# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
-# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETSIG 10 /* Set number of signal to be sent. */
-# define F_GETSIG 11 /* Get number of signal to be sent. */
-# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */
-# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */
-#endif
-
-#ifdef __USE_GNU
-# define F_SETLEASE 1024 /* Set a lease. */
-# define F_GETLEASE 1025 /* Enquire what lease is active. */
-# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
-# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */
-#endif
-#ifdef __USE_XOPEN2K8
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set. */
-#endif
-
-/* For F_[GET|SET]FD. */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
-
-/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
-#define F_RDLCK 0 /* Read lock. */
-#define F_WRLCK 1 /* Write lock. */
-#define F_UNLCK 2 /* Remove lock. */
-
-/* For old implementation of bsd flock(). */
-#define F_EXLCK 4 /* or 3 */
-#define F_SHLCK 8 /* or 4 */
-
-#ifdef __USE_BSD
-/* Operations for bsd flock(), also used by the kernel implementation. */
-# define LOCK_SH 1 /* shared lock */
-# define LOCK_EX 2 /* exclusive lock */
-# define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-# define LOCK_UN 8 /* remove lock */
-#endif
-
-#ifdef __USE_GNU
-# define LOCK_MAND 32 /* This is a mandatory flock: */
-# define LOCK_READ 64 /* ... which allows concurrent read operations. */
-# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
-# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
-#endif
-
-#ifdef __USE_GNU
-/* Types of directory notifications that may be requested with F_NOTIFY. */
-# define DN_ACCESS 0x00000001 /* File accessed. */
-# define DN_MODIFY 0x00000002 /* File modified. */
-# define DN_CREATE 0x00000004 /* File created. */
-# define DN_DELETE 0x00000008 /* File removed. */
-# define DN_RENAME 0x00000010 /* File renamed. */
-# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
-# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
-#endif
+#define __O_DIRECTORY 040000 /* Must be a directory. */
+#define __O_NOFOLLOW 0100000 /* Do not follow links. */
+#define __O_DIRECT 0200000 /* Direct disk access. */
+#define __O_LARGEFILE 0400000
struct flock
{
@@ -173,148 +50,5 @@ struct flock64
};
#endif
-#ifdef __USE_GNU
-/* Owner types. */
-enum __pid_type
- {
- F_OWNER_TID = 0, /* Kernel thread. */
- F_OWNER_PID, /* Process. */
- F_OWNER_PGRP, /* Process group. */
- F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */
- };
-
-/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */
-struct f_owner_ex
- {
- enum __pid_type type; /* Owner type of ID. */
- __pid_t pid; /* ID of owner. */
- };
-#endif
-
-/* Define some more compatibility macros to be backward compatible with
- BSD systems which did not managed to hide these kernel macros. */
-#ifdef __USE_BSD
-# define FAPPEND O_APPEND
-# define FFSYNC O_FSYNC
-# define FASYNC O_ASYNC
-# define FNONBLOCK O_NONBLOCK
-# define FNDELAY O_NDELAY
-#endif /* Use BSD. */
-
-/* Advise to `posix_fadvise'. */
-#ifdef __USE_XOPEN2K
-# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
-# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
-# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
-# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
-# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
-# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
-#endif
-
-
-#ifdef __USE_GNU
-/* Flags for SYNC_FILE_RANGE. */
-# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
- in the range before performing the
- write. */
-# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
- dirty pages in the range which are
- not presently under writeback. */
-# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
- the range after performing the
- write. */
-
-/* Flags for SPLICE and VMSPLICE. */
-# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
-# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
- (but we may still block on the fd
- we splice from/to). */
-# define SPLICE_F_MORE 4 /* Expect more data. */
-# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
-
-
-/* File handle structure. */
-struct file_handle
-{
- unsigned int handle_bytes;
- int handle_type;
- /* File identifier. */
- unsigned char f_handle[0];
-};
-
-/* Maximum handle size (for now). */
-# define MAX_HANDLE_SZ 128
-#endif
-
-__BEGIN_DECLS
-
-#ifdef __USE_GNU
-
-/* Provide kernel hint to read ahead. */
-extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
- __THROW;
-
-
-/* Selective file content synch'ing. */
-extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
- unsigned int __flags);
-
-
-/* Splice address range into a pipe.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
- size_t __count, unsigned int __flags);
-
-/* Splice two files together.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
- __off64_t *__offout, size_t __len,
- unsigned int __flags);
-
-/* In-kernel implementation of tee for pipe buffers.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern ssize_t tee (int __fdin, int __fdout, size_t __len,
- unsigned int __flags);
-
-/* Reserve storage for the data of the file associated with FD.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-# ifndef __USE_FILE_OFFSET64
-extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
-# else
-# ifdef __REDIRECT
-extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
- __off64_t __len),
- fallocate64);
-# else
-# define fallocate fallocate64
-# endif
-# endif
-# ifdef __USE_LARGEFILE64
-extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
- __off64_t __len);
-# endif
-
-
-/* Map file name to file handle. */
-extern int name_to_handle_at (int __dfd, const char *__name,
- struct file_handle *__handle, int *__mnt_id,
- int __flags) __THROW;
-
-/* Open file using the file handle.
-
- This function is a possible cancellation point and therefore not
- marked with __THROW. */
-extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
- int __flags);
-
-#endif
-
-__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/Makefile b/libc/ports/sysdeps/unix/sysv/linux/mips/Makefile
index 99c554ff6..66ba621da 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/Makefile
+++ b/libc/ports/sysdeps/unix/sysv/linux/mips/Makefile
@@ -8,15 +8,42 @@ sysdep_routines += cachectl cacheflush sysmips _test_and_set
sysdep_headers += sys/cachectl.h sys/sysmips.h sys/tas.h
endif
-# _MIPS_SIM_ABI32 == 1, _MIPS_SIM_NABI32 == 2, _MIPS_SIM_ABI64 == 3
-abi-variants := o32 n32 n64
+# Get value of default-abi.
+include $(common-objpfx)default-abi.make
+
+abi-variants := o32_soft o32_hard n32_soft n32_hard n64_soft n64_hard
+
+ifeq (,$(filter $(default-abi),$(abi-variants)))
+Unknown ABI, must be one of $(abi-variants)
+endif
+
abi-includes := sgidefs.h
-abi-o32-options := -D_MIPS_SIM=1
-abi-o32-condition := _MIPS_SIM == _MIPS_SIM_ABI32
-abi-n32-options := -D_MIPS_SIM=2
-abi-n32-condition := _MIPS_SIM == _MIPS_SIM_NABI32
-abi-n64-options := -D_MIPS_SIM=3
-abi-n64-condition := _MIPS_SIM == _MIPS_SIM_ABI64
+
+# _MIPS_SIM_ABI32 == 1, _MIPS_SIM_NABI32 == 2, _MIPS_SIM_ABI64 == 3
+abi-o32_soft-options := -U_MIPS_SIM -D_MIPS_SIM=1 \
+ -D__mips_soft_float -U__mips_hard_float
+abi-o32_soft-condition := defined(__mips_soft_float) \
+ && (_MIPS_SIM == _MIPS_SIM_ABI32)
+abi-o32_hard-options := -U_MIPS_SIM -D_MIPS_SIM=1 \
+ -D__mips_hard_float -U__mips_soft_float
+abi-o32_hard-condition := defined(__mips_hard_float) \
+ && (_MIPS_SIM == _MIPS_SIM_ABI32)
+abi-n32_soft-options := -U_MIPS_SIM -D_MIPS_SIM=2 \
+ -D__mips_soft_float -U__mips_hard_float
+abi-n32_soft-condition := defined(__mips_soft_float) \
+ && (_MIPS_SIM == _MIPS_SIM_NABI32)
+abi-n32_hard-options := -U_MIPS_SIM -D_MIPS_SIM=2 \
+ -D__mips_hard_float -U__mips_soft_float
+abi-n32_hard-condition := defined(__mips_hard_float) \
+ && (_MIPS_SIM == _MIPS_SIM_NABI32)
+abi-n64_soft-options := -U_MIPS_SIM -D_MIPS_SIM=3 \
+ -D__mips_soft_float -U__mips_hard_float
+abi-n64_soft-condition := defined(__mips_soft_float) \
+ && (_MIPS_SIM == _MIPS_SIM_ABI64)
+abi-n64_hard-options := -U_MIPS_SIM -D_MIPS_SIM=3 \
+ -D__mips_hard_float -U__mips_soft_float
+abi-n64_hard-condition := defined(__mips_hard_float) \
+ && (_MIPS_SIM == _MIPS_SIM_ABI64)
ifeq ($(subdir),elf)
ifeq ($(build-shared),yes)
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/configure b/libc/ports/sysdeps/unix/sysv/linux/mips/configure
index 051432df8..cecfc9d84 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/configure
+++ b/libc/ports/sysdeps/unix/sysv/linux/mips/configure
@@ -1,6 +1,112 @@
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/unix/sysv/linux/mips.
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if (_MIPS_SIM != _ABIO32)
+ #error Not O32 ABI
+ #endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_mips_abi=o32
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if (_MIPS_SIM != _ABIN32)
+ #error Not N32 ABI
+ #endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_mips_abi=n32
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if (_MIPS_SIM != _ABI64)
+ #error Not 64 ABI
+ #endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_mips_abi=n64
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test -z "$libc_mips_abi"; then
+ as_fn_error $? "could not determine what ABI the compiler is using" "$LINENO" 5
+fi
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if !defined(__mips_soft_float)
+ #error Not soft ABI
+ #endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_mips_float=soft
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if !defined(__mips_hard_float)
+ #error Not hard ABI
+ #endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_mips_float=hard
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test -z "$libc_mips_float"; then
+ as_fn_error $? "could not determine if compiler is using hard or soft floating point ABI" "$LINENO" 5
+fi
+
+echo "default-abi := ${libc_mips_abi}_${libc_mips_float}" > default-abi.make
+
case "$prefix" in
/usr | /usr/)
# 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib.
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/configure.in b/libc/ports/sysdeps/unix/sysv/linux/mips/configure.in
index 18e8bbc5c..167779eaf 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/configure.in
+++ b/libc/ports/sysdeps/unix/sysv/linux/mips/configure.in
@@ -2,6 +2,50 @@ sinclude(./aclocal.m4)dnl Autoconf lossage
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/unix/sysv/linux/mips.
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([
+ #if (_MIPS_SIM != _ABIO32)
+ #error Not O32 ABI
+ #endif])],
+ [libc_mips_abi=o32],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([
+ #if (_MIPS_SIM != _ABIN32)
+ #error Not N32 ABI
+ #endif])],
+ [libc_mips_abi=n32],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([
+ #if (_MIPS_SIM != _ABI64)
+ #error Not 64 ABI
+ #endif])],
+ [libc_mips_abi=n64],
+ [])])])
+
+if test -z "$libc_mips_abi"; then
+ AC_MSG_ERROR([could not determine what ABI the compiler is using])
+fi
+
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([
+ #if !defined(__mips_soft_float)
+ #error Not soft ABI
+ #endif])],
+ [libc_mips_float=soft],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([
+ #if !defined(__mips_hard_float)
+ #error Not hard ABI
+ #endif])],
+ [libc_mips_float=hard],
+ [])])
+
+if test -z "$libc_mips_float"; then
+ AC_MSG_ERROR([could not determine if compiler is using hard or soft floating point ABI])
+fi
+
+echo "default-abi := ${libc_mips_abi}_${libc_mips_float}" > default-abi.make
+
case "$prefix" in
/usr | /usr/)
# 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib.
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/Makefile b/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/Makefile
deleted file mode 100644
index 77e91218a..000000000
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-default-abi := o32
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c b/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c
index 2dc110ba7..1d345efcf 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c
+++ b/libc/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c
@@ -54,6 +54,4 @@ sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
return -1;
}
stub_warning (sync_file_range)
-
-# include <stub-tag.h>
#endif
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/Makefile b/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/Makefile
deleted file mode 100644
index 2368c4038..000000000
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-default-abi := n32
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist b/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist
index 2a0e2a2d9..df2e63728 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist
+++ b/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libc.abilist
@@ -1392,6 +1392,11 @@ GLIBC_2.16
timespec_get F
GLIBC_2.17
GLIBC_2.17 A
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
secure_getenv F
GLIBC_2.2
GLIBC_2.2 A
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/Makefile b/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/Makefile
deleted file mode 100644
index fed17ba64..000000000
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-default-abi := n64
diff --git a/libc/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h b/libc/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
index 9c1701167..9c3d3d16d 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
@@ -86,6 +86,18 @@
INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \
})
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
+ ({ \
+ INTERNAL_SYSCALL_DECL (__err); \
+ long int __ret; \
+ int __op = FUTEX_WAIT_BITSET | clockbit; \
+ __ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp), \
+ __lll_private_flag (__op, private), \
+ (val), (timespec), NULL /* Unused. */, \
+ FUTEX_BITSET_MATCH_ANY); \
+ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \
+ })
+
#define lll_futex_wake(futexp, nr, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
diff --git a/libc/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist b/libc/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist
index f2682b39c..0efc6b55c 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist
+++ b/libc/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist
@@ -1774,13 +1774,13 @@ GLIBC_2.16
timespec_get F
GLIBC_2.17
GLIBC_2.17 A
+ __ppc_get_timebase_freq F
clock_getcpuclockid F
clock_getres F
clock_gettime F
clock_nanosleep F
clock_settime F
secure_getenv F
- __ppc_get_timebase_freq F
GLIBC_2.2
GLIBC_2.2 A
_IO_adjust_wcolumn F
diff --git a/libc/ports/sysdeps/unix/sysv/linux/tile/Makefile b/libc/ports/sysdeps/unix/sysv/linux/tile/Makefile
index 0cbfdd0e3..1c0c968dc 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/tile/Makefile
+++ b/libc/ports/sysdeps/unix/sysv/linux/tile/Makefile
@@ -13,3 +13,7 @@ sysdep_headers += sys/dataplane.h
sysdep_routines += set_dataplane
endif
+
+ifeq ($(subdir),elf)
+sysdep_routines += dl-vdso
+endif
diff --git a/libc/sysdeps/mach/powerpc/syscall.S b/libc/ports/sysdeps/unix/sysv/linux/tile/bits/libc-vdso.h
index 77640e375..b972720b3 100644
--- a/libc/sysdeps/mach/powerpc/syscall.S
+++ b/libc/ports/sysdeps/unix/sysv/linux/tile/bits/libc-vdso.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Resolve function pointers to VDSO functions.
+ 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
@@ -12,18 +13,18 @@
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
+ License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
-#include <sysdep.h>
-
-ENTRY (syscall)
- mr r0,r3
- mr r3,r4
- mr r4,r5
- mr r5,r6
- mr r6,r7
- mr r7,r8
- sc
- blr
-END (syscall)
+
+#ifndef _LIBC_VDSO_H
+#define _LIBC_VDSO_H
+
+#ifdef SHARED
+
+extern long int (*__vdso_gettimeofday) (struct timeval *, void *)
+ attribute_hidden;
+
+#endif
+
+#endif /* _LIBC_VDSO_H */
diff --git a/libc/ports/sysdeps/unix/sysv/linux/tile/gettimeofday.c b/libc/ports/sysdeps/unix/sysv/linux/tile/gettimeofday.c
new file mode 100644
index 000000000..92136d54b
--- /dev/null
+++ b/libc/ports/sysdeps/unix/sysv/linux/tile/gettimeofday.c
@@ -0,0 +1,37 @@
+/* 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 <stddef.h>
+#include <sys/time.h>
+#include <time.h>
+#include <bits/libc-vdso.h>
+
+int
+__gettimeofday (struct timeval *tv, struct timezone *tz)
+{
+#ifdef SHARED
+ /* If the vDSO is available we use it. */
+ if (__vdso_gettimeofday != NULL)
+ return __vdso_gettimeofday (tv, tz);
+#endif
+ return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
+}
+
+libc_hidden_def (__gettimeofday)
+weak_alias (__gettimeofday, gettimeofday)
+libc_hidden_weak (gettimeofday)
diff --git a/libc/ports/sysdeps/unix/sysv/linux/tile/init-first.c b/libc/ports/sysdeps/unix/sysv/linux/tile/init-first.c
new file mode 100644
index 000000000..9ff63c1d1
--- /dev/null
+++ b/libc/ports/sysdeps/unix/sysv/linux/tile/init-first.c
@@ -0,0 +1,34 @@
+/* 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/>. */
+
+#ifdef SHARED
+#include <dl-vdso.h>
+#include <bits/libc-vdso.h>
+
+long int (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden;
+
+static inline void
+_libc_vdso_platform_setup (void)
+{
+ PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
+ __vdso_gettimeofday = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
+}
+
+#define VDSO_SETUP _libc_vdso_platform_setup
+#endif
+
+#include <csu/init-first.c>
diff --git a/libc/posix/_exit.c b/libc/posix/_exit.c
index a8f1b58e4..ef2b7d719 100644
--- a/libc/posix/_exit.c
+++ b/libc/posix/_exit.c
@@ -32,4 +32,3 @@ libc_hidden_def (_exit)
weak_alias (_exit, _Exit)
stub_warning (_exit)
-#include <stub-tag.h>
diff --git a/libc/posix/alarm.c b/libc/posix/alarm.c
index 0b0194836..3fda9b0c8 100644
--- a/libc/posix/alarm.c
+++ b/libc/posix/alarm.c
@@ -35,4 +35,3 @@ alarm (seconds)
libc_hidden_def (alarm)
stub_warning (alarm)
-#include <stub-tag.h>
diff --git a/libc/posix/execve.c b/libc/posix/execve.c
index 63a234fc9..893cec2b1 100644
--- a/libc/posix/execve.c
+++ b/libc/posix/execve.c
@@ -40,4 +40,3 @@ __execve (path, argv, envp)
stub_warning (execve)
weak_alias (__execve, execve)
-#include <stub-tag.h>
diff --git a/libc/posix/fexecve.c b/libc/posix/fexecve.c
index c7b43c578..6a22a194e 100644
--- a/libc/posix/fexecve.c
+++ b/libc/posix/fexecve.c
@@ -39,4 +39,3 @@ fexecve (fd, argv, envp)
}
stub_warning (fexecve)
-#include <stub-tag.h>
diff --git a/libc/posix/fork.c b/libc/posix/fork.c
index e499c11ed..08c69b69b 100644
--- a/libc/posix/fork.c
+++ b/libc/posix/fork.c
@@ -32,4 +32,3 @@ libc_hidden_def (__fork)
stub_warning (fork)
weak_alias (__fork, fork)
-#include <stub-tag.h>
diff --git a/libc/posix/fpathconf.c b/libc/posix/fpathconf.c
index 07d868440..01a08cab8 100644
--- a/libc/posix/fpathconf.c
+++ b/libc/posix/fpathconf.c
@@ -58,4 +58,3 @@ __fpathconf (fd, name)
weak_alias (__fpathconf, fpathconf)
stub_warning (fpathconf)
-#include <stub-tag.h>
diff --git a/libc/posix/getaddrinfo.c b/libc/posix/getaddrinfo.c
index b5e836293..bdb79c89b 100644
--- a/libc/posix/getaddrinfo.c
+++ b/libc/posix/getaddrinfo.c
@@ -36,5 +36,3 @@ freeaddrinfo (struct addrinfo *ai)
}
stub_warning (freeaddrinfo)
libc_hidden_def (freeaddrinfo)
-
-#include <stub-tag.h>
diff --git a/libc/posix/getegid.c b/libc/posix/getegid.c
index 482e4343b..6692bc083 100644
--- a/libc/posix/getegid.c
+++ b/libc/posix/getegid.c
@@ -28,4 +28,3 @@ __getegid ()
stub_warning (getegid)
weak_alias (__getegid, getegid)
-#include <stub-tag.h>
diff --git a/libc/posix/geteuid.c b/libc/posix/geteuid.c
index 5fc0ee5b3..eb59db35d 100644
--- a/libc/posix/geteuid.c
+++ b/libc/posix/geteuid.c
@@ -29,4 +29,3 @@ __geteuid ()
stub_warning (geteuid)
weak_alias (__geteuid, geteuid)
-#include <stub-tag.h>
diff --git a/libc/posix/getgid.c b/libc/posix/getgid.c
index 6fa3d25ad..54c7d1870 100644
--- a/libc/posix/getgid.c
+++ b/libc/posix/getgid.c
@@ -29,4 +29,3 @@ __getgid ()
stub_warning (getgid)
weak_alias (__getgid, getgid)
-#include <stub-tag.h>
diff --git a/libc/posix/getgroups.c b/libc/posix/getgroups.c
index e3910a836..eed9152ea 100644
--- a/libc/posix/getgroups.c
+++ b/libc/posix/getgroups.c
@@ -44,4 +44,3 @@ stub_warning (getgroups);
#endif
weak_alias (__getgroups, getgroups)
-#include <stub-tag.h>
diff --git a/libc/posix/getlogin.c b/libc/posix/getlogin.c
index beab0f0a0..58bc93f77 100644
--- a/libc/posix/getlogin.c
+++ b/libc/posix/getlogin.c
@@ -29,4 +29,3 @@ getlogin (void)
}
stub_warning (getlogin)
-#include <stub-tag.h>
diff --git a/libc/posix/getlogin_r.c b/libc/posix/getlogin_r.c
index b3ddd5625..7cd7be915 100644
--- a/libc/posix/getlogin_r.c
+++ b/libc/posix/getlogin_r.c
@@ -33,4 +33,3 @@ getlogin_r (name, name_len)
libc_hidden_def (getlogin_r)
stub_warning (getlogin_r)
-#include <stub-tag.h>
diff --git a/libc/posix/getpgid.c b/libc/posix/getpgid.c
index 198a313ad..fd1bc5a01 100644
--- a/libc/posix/getpgid.c
+++ b/libc/posix/getpgid.c
@@ -29,4 +29,3 @@ libc_hidden_def (__getpgid)
weak_alias (__getpgid, getpgid)
stub_warning (getpgid)
-#include <stub-tag.h>
diff --git a/libc/posix/getpid.c b/libc/posix/getpid.c
index 301da5f94..3c3bb6a2a 100644
--- a/libc/posix/getpid.c
+++ b/libc/posix/getpid.c
@@ -30,4 +30,3 @@ stub_warning (getpid)
weak_alias (__getpid, getpid)
libc_hidden_weak (getpid)
-#include <stub-tag.h>
diff --git a/libc/posix/getppid.c b/libc/posix/getppid.c
index 2650ed4f0..92c8b9b6d 100644
--- a/libc/posix/getppid.c
+++ b/libc/posix/getppid.c
@@ -29,4 +29,3 @@ __getppid ()
stub_warning (getppid)
weak_alias (__getppid, getppid)
-#include <stub-tag.h>
diff --git a/libc/posix/getresgid.c b/libc/posix/getresgid.c
index 7f5bdb38b..0baec6ae7 100644
--- a/libc/posix/getresgid.c
+++ b/libc/posix/getresgid.c
@@ -31,4 +31,3 @@ libc_hidden_def (__getresgid)
stub_warning (getresgid)
weak_alias (__getresgid, getresgid)
-#include <stub-tag.h>
diff --git a/libc/posix/getresuid.c b/libc/posix/getresuid.c
index bf56fbaa9..7da317396 100644
--- a/libc/posix/getresuid.c
+++ b/libc/posix/getresuid.c
@@ -31,4 +31,3 @@ libc_hidden_def (__getresuid)
stub_warning (getresuid)
weak_alias (__getresuid, getresuid)
-#include <stub-tag.h>
diff --git a/libc/posix/getsid.c b/libc/posix/getsid.c
index 6b4caf031..3283d8cb7 100644
--- a/libc/posix/getsid.c
+++ b/libc/posix/getsid.c
@@ -28,4 +28,3 @@ getsid (pid_t pid)
}
libc_hidden_def (getsid)
stub_warning (getsid)
-#include <stub-tag.h>
diff --git a/libc/posix/getuid.c b/libc/posix/getuid.c
index d3ff49ef0..2afbe583f 100644
--- a/libc/posix/getuid.c
+++ b/libc/posix/getuid.c
@@ -29,4 +29,3 @@ __getuid ()
stub_warning (getuid)
weak_alias (__getuid, getuid)
-#include <stub-tag.h>
diff --git a/libc/posix/glob64.c b/libc/posix/glob64.c
index e329270ea..2d98cd978 100644
--- a/libc/posix/glob64.c
+++ b/libc/posix/glob64.c
@@ -50,4 +50,3 @@ globfree64 (glob64_t *pglob)
libc_hidden_def (globfree64)
stub_warning (glob64)
-#include <stub-tag.h>
diff --git a/libc/posix/nanosleep.c b/libc/posix/nanosleep.c
index 2f44b16a0..b29e69460 100644
--- a/libc/posix/nanosleep.c
+++ b/libc/posix/nanosleep.c
@@ -32,4 +32,3 @@ stub_warning (nanosleep)
weak_alias (__libc_nanosleep, __nanosleep)
libc_hidden_def (__nanosleep)
weak_alias (__libc_nanosleep, nanosleep)
-#include <stub-tag.h>
diff --git a/libc/posix/pathconf.c b/libc/posix/pathconf.c
index e36ba62ef..6f48b0b57 100644
--- a/libc/posix/pathconf.c
+++ b/libc/posix/pathconf.c
@@ -37,4 +37,3 @@ __pathconf (path, name)
weak_alias (__pathconf, pathconf)
stub_warning (pathconf)
-#include <stub-tag.h>
diff --git a/libc/posix/pause.c b/libc/posix/pause.c
index af239bec7..095051002 100644
--- a/libc/posix/pause.c
+++ b/libc/posix/pause.c
@@ -30,4 +30,3 @@ pause ()
}
stub_warning (pause)
-#include <stub-tag.h>
diff --git a/libc/posix/posix_madvise.c b/libc/posix/posix_madvise.c
index 271dd475e..4b9cc1e2e 100644
--- a/libc/posix/posix_madvise.c
+++ b/libc/posix/posix_madvise.c
@@ -28,4 +28,3 @@ posix_madvise (__ptr_t addr, size_t len, int advice)
return ENOSYS;
}
stub_warning (posix_madvise)
-#include <stub-tag.h>
diff --git a/libc/posix/pread.c b/libc/posix/pread.c
index bc81f1a44..b62fd943c 100644
--- a/libc/posix/pread.c
+++ b/libc/posix/pread.c
@@ -42,4 +42,3 @@ __libc_pread (int fd, void *buf, size_t nbytes, off_t offset)
strong_alias (__libc_pread, __pread)
weak_alias (__libc_pread, pread)
stub_warning (pread)
-#include <stub-tag.h>
diff --git a/libc/posix/pread64.c b/libc/posix/pread64.c
index 18c4f022f..f6b7a35fc 100644
--- a/libc/posix/pread64.c
+++ b/libc/posix/pread64.c
@@ -42,4 +42,3 @@ __libc_pread64 (int fd, void *buf, size_t nbytes, off64_t offset)
strong_alias (__libc_pread64, __pread64)
weak_alias (__libc_pread64, pread64)
stub_warning (pread64)
-#include <stub-tag.h>
diff --git a/libc/posix/pwrite.c b/libc/posix/pwrite.c
index 0e8481d6f..43619ed4f 100644
--- a/libc/posix/pwrite.c
+++ b/libc/posix/pwrite.c
@@ -42,4 +42,3 @@ __libc_pwrite (int fd, const void *buf, size_t nbytes, off_t offset)
strong_alias (__libc_pwrite, __pwrite)
weak_alias (__libc_pwrite, pwrite)
stub_warning (pwrite)
-#include <stub-tag.h>
diff --git a/libc/posix/pwrite64.c b/libc/posix/pwrite64.c
index c0dadfe30..819cfd639 100644
--- a/libc/posix/pwrite64.c
+++ b/libc/posix/pwrite64.c
@@ -43,4 +43,3 @@ strong_alias (__libc_pwrite64, __pwrite64)
libc_hidden_def (__pwrite64)
weak_alias (__libc_pwrite64, pwrite64)
stub_warning (pwrite64)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_getaffinity.c b/libc/posix/sched_getaffinity.c
index da70878c4..8641b4eac 100644
--- a/libc/posix/sched_getaffinity.c
+++ b/libc/posix/sched_getaffinity.c
@@ -31,4 +31,3 @@ sched_getaffinity (pid, cpusetsize, cpuset)
return -1;
}
stub_warning (sched_getaffinity)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_getp.c b/libc/posix/sched_getp.c
index 551d07105..d6a7ac6ed 100644
--- a/libc/posix/sched_getp.c
+++ b/libc/posix/sched_getp.c
@@ -30,4 +30,3 @@ __sched_getparam (pid_t pid, struct sched_param *param)
stub_warning (sched_getparam)
weak_alias (__sched_getparam, sched_getparam)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_gets.c b/libc/posix/sched_gets.c
index 874b171d2..dd3f51e6f 100644
--- a/libc/posix/sched_gets.c
+++ b/libc/posix/sched_gets.c
@@ -30,4 +30,3 @@ __sched_getscheduler (pid_t pid)
stub_warning (sched_getscheduler)
weak_alias (__sched_getscheduler, sched_getscheduler)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_primax.c b/libc/posix/sched_primax.c
index 436e35362..ef35e11f4 100644
--- a/libc/posix/sched_primax.c
+++ b/libc/posix/sched_primax.c
@@ -29,4 +29,3 @@ __sched_get_priority_max (int algorithm)
stub_warning (sched_get_priority_max)
weak_alias (__sched_get_priority_max, sched_get_priority_max)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_primin.c b/libc/posix/sched_primin.c
index 411e8fb55..cffa3f93a 100644
--- a/libc/posix/sched_primin.c
+++ b/libc/posix/sched_primin.c
@@ -29,4 +29,3 @@ __sched_get_priority_min (int algorithm)
stub_warning (sched_get_priority_min)
weak_alias (__sched_get_priority_min, sched_get_priority_min)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_rr_gi.c b/libc/posix/sched_rr_gi.c
index 82962228c..3011050fc 100644
--- a/libc/posix/sched_rr_gi.c
+++ b/libc/posix/sched_rr_gi.c
@@ -30,4 +30,3 @@ __sched_rr_get_interval (pid_t pid, struct timespec *t)
stub_warning (sched_rr_get_interval)
weak_alias (__sched_rr_get_interval, sched_rr_get_interval)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_setaffinity.c b/libc/posix/sched_setaffinity.c
index 9d0ac0385..3cc9bb72c 100644
--- a/libc/posix/sched_setaffinity.c
+++ b/libc/posix/sched_setaffinity.c
@@ -31,4 +31,3 @@ sched_setaffinity (pid, cpusetsize, cpuset)
return -1;
}
stub_warning (sched_setaffinity)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_setp.c b/libc/posix/sched_setp.c
index 4c8888c81..90de45472 100644
--- a/libc/posix/sched_setp.c
+++ b/libc/posix/sched_setp.c
@@ -30,4 +30,3 @@ __sched_setparam (pid_t pid, const struct sched_param *param)
stub_warning (sched_setparam)
weak_alias (__sched_setparam, sched_setparam)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_sets.c b/libc/posix/sched_sets.c
index a52ae45f9..205471b54 100644
--- a/libc/posix/sched_sets.c
+++ b/libc/posix/sched_sets.c
@@ -31,4 +31,3 @@ libc_hidden_def (__sched_setscheduler)
stub_warning (sched_setscheduler)
weak_alias (__sched_setscheduler, sched_setscheduler)
-#include <stub-tag.h>
diff --git a/libc/posix/sched_yield.c b/libc/posix/sched_yield.c
index 2335c8515..2257eb344 100644
--- a/libc/posix/sched_yield.c
+++ b/libc/posix/sched_yield.c
@@ -30,4 +30,3 @@ stub_warning (sched_yield)
libc_hidden_def (__sched_yield)
weak_alias (__sched_yield, sched_yield)
-#include <stub-tag.h>
diff --git a/libc/posix/setgid.c b/libc/posix/setgid.c
index 82546f220..3e384aecd 100644
--- a/libc/posix/setgid.c
+++ b/libc/posix/setgid.c
@@ -33,4 +33,3 @@ __setgid (gid)
stub_warning (setgid)
weak_alias (__setgid, setgid)
-#include <stub-tag.h>
diff --git a/libc/posix/setlogin.c b/libc/posix/setlogin.c
index fd09f5194..8a8362bdc 100644
--- a/libc/posix/setlogin.c
+++ b/libc/posix/setlogin.c
@@ -28,4 +28,3 @@ setlogin (name)
}
stub_warning (setlogin)
-#include <stub-tag.h>
diff --git a/libc/posix/setpgid.c b/libc/posix/setpgid.c
index ad073f84f..146fb745b 100644
--- a/libc/posix/setpgid.c
+++ b/libc/posix/setpgid.c
@@ -33,4 +33,3 @@ libc_hidden_def (__setpgid)
stub_warning (setpgid)
weak_alias (__setpgid, setpgid)
-#include <stub-tag.h>
diff --git a/libc/posix/setresgid.c b/libc/posix/setresgid.c
index c4420d996..ba1cce452 100644
--- a/libc/posix/setresgid.c
+++ b/libc/posix/setresgid.c
@@ -31,4 +31,3 @@ libc_hidden_def (__setresgid)
stub_warning (setresgid)
weak_alias (__setresgid, setresgid)
-#include <stub-tag.h>
diff --git a/libc/posix/setresuid.c b/libc/posix/setresuid.c
index 1a33cac3c..edb99a9a0 100644
--- a/libc/posix/setresuid.c
+++ b/libc/posix/setresuid.c
@@ -31,4 +31,3 @@ libc_hidden_def (__setresuid)
stub_warning (setresuid)
weak_alias (__setresuid, setresuid)
-#include <stub-tag.h>
diff --git a/libc/posix/setsid.c b/libc/posix/setsid.c
index 879b0ca70..a4f05254e 100644
--- a/libc/posix/setsid.c
+++ b/libc/posix/setsid.c
@@ -31,4 +31,3 @@ __setsid ()
stub_warning (setsid)
weak_alias (__setsid, setsid)
-#include <stub-tag.h>
diff --git a/libc/posix/setuid.c b/libc/posix/setuid.c
index a421cb97f..5892d2357 100644
--- a/libc/posix/setuid.c
+++ b/libc/posix/setuid.c
@@ -33,4 +33,3 @@ __setuid (uid)
stub_warning (setuid)
weak_alias (__setuid, setuid)
-#include <stub-tag.h>
diff --git a/libc/posix/sleep.c b/libc/posix/sleep.c
index f5aa751f9..d7ca5f9c8 100644
--- a/libc/posix/sleep.c
+++ b/libc/posix/sleep.c
@@ -37,4 +37,3 @@ __sleep (seconds)
weak_alias (__sleep, sleep)
stub_warning (sleep)
-#include <stub-tag.h>
diff --git a/libc/posix/spawni.c b/libc/posix/spawni.c
index 4835c71be..c8c6127e6 100644
--- a/libc/posix/spawni.c
+++ b/libc/posix/spawni.c
@@ -42,4 +42,3 @@ __spawni (pid_t *pid, const char *file,
}
stub_warning (__spawni)
-#include <stub-tag.h>
diff --git a/libc/posix/sysconf.c b/libc/posix/sysconf.c
index 331aa27b3..8428f79ab 100644
--- a/libc/posix/sysconf.c
+++ b/libc/posix/sysconf.c
@@ -279,4 +279,3 @@ weak_alias (__sysconf, sysconf)
libc_hidden_def (__sysconf)
stub_warning (sysconf)
-#include <stub-tag.h>
diff --git a/libc/posix/times.c b/libc/posix/times.c
index 5a47517b7..e6f600300 100644
--- a/libc/posix/times.c
+++ b/libc/posix/times.c
@@ -39,4 +39,3 @@ __times (buffer)
stub_warning (times)
weak_alias (__times, times)
-#include <stub-tag.h>
diff --git a/libc/posix/wait.c b/libc/posix/wait.c
index 5d6cbbf95..1f78fa2ee 100644
--- a/libc/posix/wait.c
+++ b/libc/posix/wait.c
@@ -29,4 +29,3 @@ __wait (__WAIT_STATUS_DEFN stat_loc)
stub_warning (wait)
weak_alias (__wait, wait)
-#include <stub-tag.h>
diff --git a/libc/posix/wait3.c b/libc/posix/wait3.c
index 5491ddf90..943ad4bcc 100644
--- a/libc/posix/wait3.c
+++ b/libc/posix/wait3.c
@@ -39,4 +39,3 @@ __wait3 (__WAIT_STATUS_DEFN stat_loc, int options, struct rusage *usage)
stub_warning (wait3)
weak_alias (__wait3, wait3)
-#include <stub-tag.h>
diff --git a/libc/posix/wait4.c b/libc/posix/wait4.c
index c53bba4d2..b805cb5ac 100644
--- a/libc/posix/wait4.c
+++ b/libc/posix/wait4.c
@@ -29,4 +29,3 @@ __wait4 (__pid_t pid, __WAIT_STATUS stat_loc, int options,
stub_warning (wait4)
weak_alias (__wait4, wait4)
-#include <stub-tag.h>
diff --git a/libc/posix/waitpid.c b/libc/posix/waitpid.c
index 20e6f68b2..4253e7b46 100644
--- a/libc/posix/waitpid.c
+++ b/libc/posix/waitpid.c
@@ -49,4 +49,3 @@ libc_hidden_weak (__waitpid)
weak_alias (__libc_waitpid, waitpid)
stub_warning (waitpid)
-#include <stub-tag.h>
diff --git a/libc/resolv/gai_sigqueue.c b/libc/resolv/gai_sigqueue.c
index 22aff54ec..56f00b9fb 100644
--- a/libc/resolv/gai_sigqueue.c
+++ b/libc/resolv/gai_sigqueue.c
@@ -32,4 +32,3 @@ __gai_sigqueue (sig, val, caller_pid)
}
stub_warning (__gai_sigqueue)
-#include <stub-tag.h>
diff --git a/libc/resource/getpriority.c b/libc/resource/getpriority.c
index ae7521cd8..6809c5cf0 100644
--- a/libc/resource/getpriority.c
+++ b/libc/resource/getpriority.c
@@ -33,4 +33,3 @@ getpriority (which, who)
libc_hidden_def (getpriority)
stub_warning (getpriority)
-#include <stub-tag.h>
diff --git a/libc/resource/getrlimit.c b/libc/resource/getrlimit.c
index 2ba589c9d..544c1552d 100644
--- a/libc/resource/getrlimit.c
+++ b/libc/resource/getrlimit.c
@@ -30,4 +30,3 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
weak_alias (__getrlimit, getrlimit)
stub_warning (getrlimit)
-#include <stub-tag.h>
diff --git a/libc/resource/getrusage.c b/libc/resource/getrusage.c
index 94797588a..93cf4c95e 100644
--- a/libc/resource/getrusage.c
+++ b/libc/resource/getrusage.c
@@ -31,4 +31,3 @@ __getrusage (who, usage)
stub_warning (getrusage)
weak_alias (__getrusage, getrusage)
-#include <stub-tag.h>
diff --git a/libc/resource/nice.c b/libc/resource/nice.c
index 1e938cfe8..febf7c066 100644
--- a/libc/resource/nice.c
+++ b/libc/resource/nice.c
@@ -29,4 +29,3 @@ nice (incr)
}
stub_warning (nice)
-#include <stub-tag.h>
diff --git a/libc/resource/setpriority.c b/libc/resource/setpriority.c
index 8d68fdbff..5a5b6cc44 100644
--- a/libc/resource/setpriority.c
+++ b/libc/resource/setpriority.c
@@ -32,4 +32,3 @@ setpriority (which, who, prio)
libc_hidden_def (setpriority)
stub_warning (setpriority)
-#include <stub-tag.h>
diff --git a/libc/resource/setrlimit.c b/libc/resource/setrlimit.c
index 539cd6faa..f92513b1c 100644
--- a/libc/resource/setrlimit.c
+++ b/libc/resource/setrlimit.c
@@ -33,4 +33,3 @@ setrlimit (resource, rlimits)
stub_warning (setrlimit)
-#include <stub-tag.h>
diff --git a/libc/resource/ulimit.c b/libc/resource/ulimit.c
index 1ca2f2b7c..802136ca6 100644
--- a/libc/resource/ulimit.c
+++ b/libc/resource/ulimit.c
@@ -35,4 +35,3 @@ __ulimit (int cmd, ...)
weak_alias (__ulimit, ulimit)
stub_warning (ulimit)
-#include <stub-tag.h>
diff --git a/libc/rt/aio_cancel.c b/libc/rt/aio_cancel.c
index e6af7afa6..b7d36a245 100644
--- a/libc/rt/aio_cancel.c
+++ b/libc/rt/aio_cancel.c
@@ -40,4 +40,3 @@ weak_alias (aio_cancel, aio_cancel64)
stub_warning (aio_cancel)
stub_warning (aio_cancel64)
-#include <stub-tag.h>
diff --git a/libc/rt/aio_fsync.c b/libc/rt/aio_fsync.c
index 3893e0757..0db17b4dc 100644
--- a/libc/rt/aio_fsync.c
+++ b/libc/rt/aio_fsync.c
@@ -47,4 +47,3 @@ weak_alias (aio_fsync, aio_fsync64)
stub_warning (aio_fsync)
stub_warning (aio_fsync64)
-#include <stub-tag.h>
diff --git a/libc/rt/aio_read.c b/libc/rt/aio_read.c
index 213a43ce9..57e4f7886 100644
--- a/libc/rt/aio_read.c
+++ b/libc/rt/aio_read.c
@@ -32,4 +32,3 @@ aio_read (struct aiocb *aiocbp)
}
stub_warning (aio_read)
-#include <stub-tag.h>
diff --git a/libc/rt/aio_sigqueue.c b/libc/rt/aio_sigqueue.c
index c3d7adb82..28431468d 100644
--- a/libc/rt/aio_sigqueue.c
+++ b/libc/rt/aio_sigqueue.c
@@ -32,4 +32,3 @@ __aio_sigqueue (sig, val, caller_pid)
}
stub_warning (__aio_sigqueue)
-#include <stub-tag.h>
diff --git a/libc/rt/aio_suspend.c b/libc/rt/aio_suspend.c
index ce882fb82..8453b8f27 100644
--- a/libc/rt/aio_suspend.c
+++ b/libc/rt/aio_suspend.c
@@ -42,4 +42,3 @@ weak_alias (aio_suspend, aio_suspend64)
stub_warning (aio_suspend)
stub_warning (aio_suspend64)
-#include <stub-tag.h>
diff --git a/libc/rt/aio_write.c b/libc/rt/aio_write.c
index 398e9dbd5..bd428ba04 100644
--- a/libc/rt/aio_write.c
+++ b/libc/rt/aio_write.c
@@ -32,4 +32,3 @@ aio_write (struct aiocb *aiocbp)
}
stub_warning (aio_write)
-#include <stub-tag.h>
diff --git a/libc/rt/clock_getres.c b/libc/rt/clock_getres.c
index 162c8a569..dfd4d7683 100644
--- a/libc/rt/clock_getres.c
+++ b/libc/rt/clock_getres.c
@@ -28,4 +28,3 @@ clock_getres (clockid_t clock_id, struct timespec *res)
}
strong_alias (clock_getres, __clock_getres)
stub_warning (clock_getres)
-#include <stub-tag.h>
diff --git a/libc/rt/clock_gettime.c b/libc/rt/clock_gettime.c
index 5139e8724..7456bdfef 100644
--- a/libc/rt/clock_gettime.c
+++ b/libc/rt/clock_gettime.c
@@ -28,4 +28,3 @@ clock_gettime (clockid_t clock_id, struct timespec *tp)
}
strong_alias (clock_gettime, __clock_gettime)
stub_warning (clock_gettime)
-#include <stub-tag.h>
diff --git a/libc/rt/clock_nanosleep.c b/libc/rt/clock_nanosleep.c
index d9a0e92d4..d4946a5c8 100644
--- a/libc/rt/clock_nanosleep.c
+++ b/libc/rt/clock_nanosleep.c
@@ -35,4 +35,3 @@ clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
}
strong_alias (clock_nanosleep, __clock_nanosleep)
stub_warning (clock_nanosleep)
-#include <stub-tag.h>
diff --git a/libc/rt/clock_settime.c b/libc/rt/clock_settime.c
index 6f7cdd6ed..72d81cb00 100644
--- a/libc/rt/clock_settime.c
+++ b/libc/rt/clock_settime.c
@@ -28,4 +28,3 @@ clock_settime (clockid_t clock_id, const struct timespec *tp)
}
strong_alias (clock_settime, __clock_settime)
stub_warning (clock_settime)
-#include <stub-tag.h>
diff --git a/libc/rt/lio_listio.c b/libc/rt/lio_listio.c
index 867a20eca..a807c47fd 100644
--- a/libc/rt/lio_listio.c
+++ b/libc/rt/lio_listio.c
@@ -38,4 +38,3 @@ lio_listio (int mode,
}
stub_warning (lio_listio)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_close.c b/libc/rt/mq_close.c
index 9c5f9bfd6..1a3c06fec 100644
--- a/libc/rt/mq_close.c
+++ b/libc/rt/mq_close.c
@@ -27,4 +27,3 @@ mq_close (mqd_t mqdes)
return -1;
}
stub_warning (mq_close)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_getattr.c b/libc/rt/mq_getattr.c
index 3c35fdd6d..d37328f68 100644
--- a/libc/rt/mq_getattr.c
+++ b/libc/rt/mq_getattr.c
@@ -26,4 +26,3 @@ mq_getattr (mqd_t mqdes, struct mq_attr *mqstat)
return -1;
}
stub_warning (mq_getattr)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_notify.c b/libc/rt/mq_notify.c
index 7b89a6543..8241b41dc 100644
--- a/libc/rt/mq_notify.c
+++ b/libc/rt/mq_notify.c
@@ -27,4 +27,3 @@ mq_notify (mqd_t mqdes, const struct sigevent *notification)
return -1;
}
stub_warning (mq_notify)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_open.c b/libc/rt/mq_open.c
index d7986fbc0..af67ef5f8 100644
--- a/libc/rt/mq_open.c
+++ b/libc/rt/mq_open.c
@@ -44,4 +44,3 @@ __mq_open_2 (const char *name, int oflag)
return __mq_open (name, oflag);
}
stub_warning (__mq_open_2)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_receive.c b/libc/rt/mq_receive.c
index c72802f36..e764800a2 100644
--- a/libc/rt/mq_receive.c
+++ b/libc/rt/mq_receive.c
@@ -28,4 +28,3 @@ mq_receive (mqd_t mqdes, char *msg_ptr, size_t msg_len,
return -1;
}
stub_warning (mq_receive)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_send.c b/libc/rt/mq_send.c
index 748ee4162..591782fab 100644
--- a/libc/rt/mq_send.c
+++ b/libc/rt/mq_send.c
@@ -27,4 +27,3 @@ mq_send (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
return -1;
}
stub_warning (mq_send)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_setattr.c b/libc/rt/mq_setattr.c
index 58a1e34aa..658d423b8 100644
--- a/libc/rt/mq_setattr.c
+++ b/libc/rt/mq_setattr.c
@@ -29,4 +29,3 @@ mq_setattr (mqd_t mqdes, const struct mq_attr *__restrict mqstat,
}
hidden_def (mq_setattr)
stub_warning (mq_setattr)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_timedreceive.c b/libc/rt/mq_timedreceive.c
index 6c3188a06..652d4ec91 100644
--- a/libc/rt/mq_timedreceive.c
+++ b/libc/rt/mq_timedreceive.c
@@ -30,4 +30,3 @@ mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
}
hidden_def (mq_timedreceive)
stub_warning (mq_timedreceive)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_timedsend.c b/libc/rt/mq_timedsend.c
index a3590c35f..65ef63480 100644
--- a/libc/rt/mq_timedsend.c
+++ b/libc/rt/mq_timedsend.c
@@ -29,4 +29,3 @@ mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
}
hidden_def (mq_timedsend)
stub_warning (mq_timedsend)
-#include <stub-tag.h>
diff --git a/libc/rt/mq_unlink.c b/libc/rt/mq_unlink.c
index f9f973368..92f484ae9 100644
--- a/libc/rt/mq_unlink.c
+++ b/libc/rt/mq_unlink.c
@@ -26,4 +26,3 @@ mq_unlink (const char *name)
return -1;
}
stub_warning (mq_unlink)
-#include <stub-tag.h>
diff --git a/libc/rt/shm_open.c b/libc/rt/shm_open.c
index 03a67e8ca..8b45e1eda 100644
--- a/libc/rt/shm_open.c
+++ b/libc/rt/shm_open.c
@@ -26,5 +26,3 @@ shm_open (const char *name, int oflag, mode_t mode)
return -1;
}
stub_warning (shm_open)
-
-#include <stub-tag.h>
diff --git a/libc/rt/shm_unlink.c b/libc/rt/shm_unlink.c
index 418357776..d0cfa05b6 100644
--- a/libc/rt/shm_unlink.c
+++ b/libc/rt/shm_unlink.c
@@ -26,5 +26,3 @@ shm_unlink (const char *name)
return -1;
}
stub_warning (shm_unlink)
-
-#include <stub-tag.h>
diff --git a/libc/rt/timer_create.c b/libc/rt/timer_create.c
index d595d6e3f..ff28e7250 100644
--- a/libc/rt/timer_create.c
+++ b/libc/rt/timer_create.c
@@ -26,4 +26,3 @@ timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
return -1;
}
stub_warning (timer_create)
-#include <stub-tag.h>
diff --git a/libc/rt/timer_delete.c b/libc/rt/timer_delete.c
index 80fb3fc5d..cf2c9b6bf 100644
--- a/libc/rt/timer_delete.c
+++ b/libc/rt/timer_delete.c
@@ -26,4 +26,3 @@ timer_delete (timer_t timerid)
return -1;
}
stub_warning (timer_delete)
-#include <stub-tag.h>
diff --git a/libc/rt/timer_getoverr.c b/libc/rt/timer_getoverr.c
index 1338de74d..bea366d8d 100644
--- a/libc/rt/timer_getoverr.c
+++ b/libc/rt/timer_getoverr.c
@@ -26,4 +26,3 @@ timer_getoverrun (timer_t timerid)
return -1;
}
stub_warning (timer_getoverrun)
-#include <stub-tag.h>
diff --git a/libc/rt/timer_gettime.c b/libc/rt/timer_gettime.c
index 051073177..2f1eef08b 100644
--- a/libc/rt/timer_gettime.c
+++ b/libc/rt/timer_gettime.c
@@ -26,4 +26,3 @@ timer_gettime (timer_t timerid, struct itimerspec *value)
return -1;
}
stub_warning (timer_gettime)
-#include <stub-tag.h>
diff --git a/libc/rt/timer_settime.c b/libc/rt/timer_settime.c
index 0c5090cd5..549dc15a0 100644
--- a/libc/rt/timer_settime.c
+++ b/libc/rt/timer_settime.c
@@ -27,4 +27,3 @@ timer_settime (timer_t timerid, int flags, const struct itimerspec *value,
return -1;
}
stub_warning (timer_settime)
-#include <stub-tag.h>
diff --git a/libc/rt/tst-shm.c b/libc/rt/tst-shm.c
index 92593bd27..457b075a3 100644
--- a/libc/rt/tst-shm.c
+++ b/libc/rt/tst-shm.c
@@ -73,7 +73,7 @@ worker (int write_now)
error (EXIT_FAILURE, 0, "size incorrect");
mem = mmap (NULL, 4000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == NULL)
+ if (mem == MAP_FAILED)
error (EXIT_FAILURE, 0, "mmap failed");
ts.tv_sec = 0;
diff --git a/libc/scripts/check-local-headers.sh b/libc/scripts/check-local-headers.sh
index 7fafcbf4d..5cc8def3e 100755
--- a/libc/scripts/check-local-headers.sh
+++ b/libc/scripts/check-local-headers.sh
@@ -27,11 +27,12 @@ shopt -s nullglob
# Search all dependency files for file names in the include directory.
# There are a few system headers we are known to use.
+# These include Linux kernel headers (asm*, arch, and linux).
exec ${AWK} -v includedir="$includedir" '
BEGIN {
status = 0
exclude = "^" includedir \
- "/(.*-.*-.*/|)(asm[-/]|linux/|selinux/|gd|nss3/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)"
+ "/(.*-.*-.*/|)(asm[-/]|arch|linux/|selinux/|gd|nss3/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)"
}
/^[^ ]/ && $1 ~ /.*:/ { obj = $1 }
{
diff --git a/libc/scripts/cross-test-ssh.sh b/libc/scripts/cross-test-ssh.sh
index 4ce912448..51b0da924 100755
--- a/libc/scripts/cross-test-ssh.sh
+++ b/libc/scripts/cross-test-ssh.sh
@@ -1,21 +1,40 @@
-#!/usr/bin/env bash
+#! /bin/bash
+# Run a testcase on a remote system, via ssh.
+# 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/>.
+
# usage: cross-test-ssh.sh [--ssh SSH] HOST COMMAND ...
# Run with --help flag to get more detailed help.
progname="$(basename $0)"
-env_blacklist='HOME LOGNAME MAIL PATH SHELL SHLVL SSH_CLIENT SSH_CONNECTION USER TERM TERMCAP PWD'
+env_blacklist='HOME LOGNAME MAIL PATH SHELL SHLVL SSH_CLIENT SSH_CONNECTION
+USER TERM TERMCAP PWD'
usage="usage: ${progname} [--ssh SSH] HOST COMMAND ..."
-help="Run an EGLIBC test COMMAND on the remote machine HOST, via ssh,
+help="Run a glibc test COMMAND on the remote machine HOST, via ssh,
passing environment variables, preserving the current working directory,
and respecting quoting.
If the '--ssh SSH' flag is present, use SSH as the SSH command,
instead of ordinary 'ssh'.
-To use this to run EGLIBC tests, invoke the tests as follows:
+To use this to run glibc tests, invoke the tests as follows:
- $ make cross-test-wrapper='ABSPATH/cross-test-ssh.sh HOST' tests
+ $ make test-wrapper='ABSPATH/cross-test-ssh.sh HOST' tests
where ABSPATH is the absolute path to this script, and HOST is the
name of the machine to connect to via ssh.
@@ -23,7 +42,7 @@ name of the machine to connect to via ssh.
If you need to connect to the test machine as a different user, you
may specify that just as you would to SSH:
- $ make cross-test-wrapper='ABSPATH/cross-test-ssh.sh USER@HOST' tests
+ $ make test-wrapper='ABSPATH/cross-test-ssh.sh USER@HOST' tests
Naturally, the remote user must have an appropriate public key, and
you will want to ensure that SSH does not prompt interactively for a
@@ -46,88 +65,72 @@ the remote target, except the following:
${env_blacklist}"
ssh='ssh'
-while true; do
- case "$1" in
-
- "--ssh")
- shift; ssh="$1"
- ;;
-
- "--help")
- echo "$usage"
- echo "$help"
- exit 0
- ;;
-
- *)
- break
- ;;
- esac
- shift
+while [ $# -gt 0 ]; do
+ case "$1" in
+
+ "--ssh")
+ shift
+ if [ $# -lt 1 ]; then
+ break
+ fi
+ ssh="$1"
+ ;;
+
+ "--help")
+ echo "$usage"
+ echo "$help"
+ exit 0
+ ;;
+
+ *)
+ break
+ ;;
+ esac
+ shift
done
if [ $# -lt 1 ]; then
- echo "$usage" >&2
- echo "Type '${progname} --help' for more detailed help." >&2
- exit 1
+ echo "$usage" >&2
+ echo "Type '${progname} --help' for more detailed help." >&2
+ exit 1
fi
host="$1"; shift
-# Return all input as a properly quoted Bourne shell string.
-bourne_quote () {
- printf '%s' '"'
- sed -n \
- -e '1h' \
- -e '2,$H' \
- -e '${g
- s/["$\`]/\\&/g
- p
- }'
- printf '%s' '"'
-}
-
-# Remove unnecessary newlines from a Bourne shell command sequence.
-remove_newlines () {
- sed -n \
- -e '1h' \
- -e '2,$H' \
- -e '${g
- s/\([^\]\)\n/\1; /g
- p
- }'
+# Print the sequence of arguments as strings properly quoted for the
+# Bourne shell, separated by spaces.
+bourne_quote ()
+{
+ local arg qarg
+ for arg in "$@"; do
+ qarg=${arg//\'/\'\\\'\'}
+ echo -n "'$qarg' "
+ done
}
# Unset all variables from the blacklist. Then echo all exported
-# variables. This should be run in a subshell. The 'export -p'
-# command adds backslashes for environment variables which contain
-# newlines.
-blacklist_exports () {
- local var
- for var in ${env_blacklist}; do
- unset $var
- done
- export -p
+# variables.
+blacklist_exports ()
+{
+ (unset ${env_blacklist}; export -p) | sed 's/^declare -x/export/'
}
-# Produce properly quoted Bourne shell arguments for 'env' to carry
-# over the current environment, less blacklisted variables.
-exports="$( (blacklist_exports) | sed -e 's|^declare -x |export |')"
+# Produce commands to carry over the current environment, less blacklisted
+# variables.
+exports="$(blacklist_exports)"
# Transform the current argument list into a properly quoted Bourne shell
# command string.
-command="$(for word in "$@"; do
- printf '%s' "$word" | bourne_quote
- printf '%s' ' '
- done)"
+command="$(bourne_quote "$@")"
# Add commands to set environment variables and the current directory.
command="${exports}
-cd $PWD
+cd $(bourne_quote "$PWD")
${command}"
# HOST's sshd simply concatenates its arguments with spaces and
# passes them to some shell. We want to force the use of /bin/sh,
# so we need to re-quote the whole command to ensure it appears as
# the sole argument of the '-c' option.
-$ssh "$host" /bin/sh -c "$(printf '%s\n' "${command}" | bourne_quote | remove_newlines)"
+full_command="$(bourne_quote "${command}")"
+$ssh "$host" /bin/sh -c "$full_command"
diff --git a/libc/setjmp/__longjmp.c b/libc/setjmp/__longjmp.c
index 6a5780a32..43cd13b18 100644
--- a/libc/setjmp/__longjmp.c
+++ b/libc/setjmp/__longjmp.c
@@ -32,4 +32,3 @@ __longjmp (__jmp_buf env, int val)
}
stub_warning (longjmp)
-#include <stub-tag.h>
diff --git a/libc/setjmp/setjmp.c b/libc/setjmp/setjmp.c
index 11a4fea20..c3de551ce 100644
--- a/libc/setjmp/setjmp.c
+++ b/libc/setjmp/setjmp.c
@@ -33,4 +33,3 @@ __libc_sigsetjmp (jmp_buf env, int savemask)
weak_alias (__libc_sigsetjmp, __sigsetjmp)
stub_warning (__sigsetjmp)
-#include <stub-tag.h>
diff --git a/libc/signal/kill.c b/libc/signal/kill.c
index 3e991813e..da6b49fbd 100644
--- a/libc/signal/kill.c
+++ b/libc/signal/kill.c
@@ -33,4 +33,3 @@ __kill (pid, sig)
stub_warning (kill)
weak_alias (__kill, kill)
-#include <stub-tag.h>
diff --git a/libc/signal/killpg.c b/libc/signal/killpg.c
index a2beea9dd..36bc5baef 100644
--- a/libc/signal/killpg.c
+++ b/libc/signal/killpg.c
@@ -32,4 +32,3 @@ killpg (pgrp, sig)
}
stub_warning (killpg)
-#include <stub-tag.h>
diff --git a/libc/signal/raise.c b/libc/signal/raise.c
index aa98a1a84..d8d091466 100644
--- a/libc/signal/raise.c
+++ b/libc/signal/raise.c
@@ -30,4 +30,3 @@ weak_alias (raise, gsignal)
stub_warning (raise)
stub_warning (gsignal)
-#include <stub-tag.h>
diff --git a/libc/signal/sigaction.c b/libc/signal/sigaction.c
index 2ca3150f8..743724dbc 100644
--- a/libc/signal/sigaction.c
+++ b/libc/signal/sigaction.c
@@ -40,4 +40,3 @@ libc_hidden_def (__sigaction)
stub_warning (sigaction)
weak_alias (__sigaction, sigaction)
-#include <stub-tag.h>
diff --git a/libc/signal/sigaltstack.c b/libc/signal/sigaltstack.c
index ce519799e..a540aedb4 100644
--- a/libc/signal/sigaltstack.c
+++ b/libc/signal/sigaltstack.c
@@ -30,4 +30,3 @@ sigaltstack (ss, oss)
}
stub_warning (sigaltstack)
-#include <stub-tag.h>
diff --git a/libc/signal/sigblock.c b/libc/signal/sigblock.c
index 9b5c44268..729462954 100644
--- a/libc/signal/sigblock.c
+++ b/libc/signal/sigblock.c
@@ -29,4 +29,3 @@ __sigblock (mask)
stub_warning (sigblock)
weak_alias (__sigblock, sigblock)
-#include <stub-tag.h>
diff --git a/libc/signal/sigignore.c b/libc/signal/sigignore.c
index d0320e861..637dc9489 100644
--- a/libc/signal/sigignore.c
+++ b/libc/signal/sigignore.c
@@ -29,4 +29,3 @@ sigignore (sig)
}
stub_warning (sigignore)
-#include <stub-tag.h>
diff --git a/libc/signal/sigintr.c b/libc/signal/sigintr.c
index 231ef4dea..44959509d 100644
--- a/libc/signal/sigintr.c
+++ b/libc/signal/sigintr.c
@@ -31,4 +31,3 @@ siginterrupt (sig, interrupt)
}
stub_warning (siginterrupt)
-#include <stub-tag.h>
diff --git a/libc/signal/signal.c b/libc/signal/signal.c
index 4cc473473..bc78d6f5c 100644
--- a/libc/signal/signal.c
+++ b/libc/signal/signal.c
@@ -34,4 +34,3 @@ weak_alias (signal, ssignal)
stub_warning (signal)
stub_warning (ssignal)
-#include <stub-tag.h>
diff --git a/libc/signal/sigpause.c b/libc/signal/sigpause.c
index a7b5cd4d3..78e61fc96 100644
--- a/libc/signal/sigpause.c
+++ b/libc/signal/sigpause.c
@@ -40,7 +40,6 @@ __default_sigpause (int mask)
}
weak_alias (__default_sigpause, sigpause)
stub_warning (sigpause)
-#include <stub-tag.h>
int
diff --git a/libc/signal/sigpending.c b/libc/signal/sigpending.c
index 480455a0a..7b48bfebd 100644
--- a/libc/signal/sigpending.c
+++ b/libc/signal/sigpending.c
@@ -36,4 +36,3 @@ sigpending (set)
}
stub_warning (sigpending)
-#include <stub-tag.h>
diff --git a/libc/signal/sigqueue.c b/libc/signal/sigqueue.c
index 6cfab4f6f..48aae580d 100644
--- a/libc/signal/sigqueue.c
+++ b/libc/signal/sigqueue.c
@@ -29,4 +29,3 @@ __sigqueue (pid_t pid, int sig, const union sigval val)
weak_alias (__sigqueue, sigqueue)
stub_warning (sigqueue)
-#include <stub-tag.h>
diff --git a/libc/signal/sigreturn.c b/libc/signal/sigreturn.c
index a65078663..901404ca8 100644
--- a/libc/signal/sigreturn.c
+++ b/libc/signal/sigreturn.c
@@ -28,4 +28,3 @@ __sigreturn (context)
stub_warning (sigreturn)
weak_alias (__sigreturn, sigreturn)
-#include <stub-tag.h>
diff --git a/libc/signal/sigset.c b/libc/signal/sigset.c
index 7ad11da09..a87cbcef7 100644
--- a/libc/signal/sigset.c
+++ b/libc/signal/sigset.c
@@ -30,4 +30,3 @@ sigset (sig, disp)
}
stub_warning (sigset)
-#include <stub-tag.h>
diff --git a/libc/signal/sigsetmask.c b/libc/signal/sigsetmask.c
index f3b90de6c..495f30e88 100644
--- a/libc/signal/sigsetmask.c
+++ b/libc/signal/sigsetmask.c
@@ -28,4 +28,3 @@ __sigsetmask (mask)
stub_warning (sigsetmask)
weak_alias (__sigsetmask, sigsetmask)
-#include <stub-tag.h>
diff --git a/libc/signal/sigstack.c b/libc/signal/sigstack.c
index 116493393..9b6f2b1d9 100644
--- a/libc/signal/sigstack.c
+++ b/libc/signal/sigstack.c
@@ -30,4 +30,3 @@ sigstack (ss, oss)
}
stub_warning (sigstack)
-#include <stub-tag.h>
diff --git a/libc/signal/sigsuspend.c b/libc/signal/sigsuspend.c
index 560daaa78..35be5c6d0 100644
--- a/libc/signal/sigsuspend.c
+++ b/libc/signal/sigsuspend.c
@@ -33,4 +33,3 @@ weak_alias (__sigsuspend, sigsuspend)
stub_warning (sigsuspend)
stub_warning (__sigsuspend)
-#include <stub-tag.h>
diff --git a/libc/signal/sigtimedwait.c b/libc/signal/sigtimedwait.c
index b5e334cbd..96bbc6c47 100644
--- a/libc/signal/sigtimedwait.c
+++ b/libc/signal/sigtimedwait.c
@@ -30,4 +30,3 @@ libc_hidden_def (__sigtimedwait)
weak_alias (__sigtimedwait, sigtimedwait)
stub_warning (sigtimedwait)
-#include <stub-tag.h>
diff --git a/libc/signal/sigvec.c b/libc/signal/sigvec.c
index a8fb46baa..e44daf1ab 100644
--- a/libc/signal/sigvec.c
+++ b/libc/signal/sigvec.c
@@ -35,4 +35,3 @@ __sigvec (sig, vec, ovec)
stub_warning (sigvec)
weak_alias (__sigvec, sigvec)
-#include <stub-tag.h>
diff --git a/libc/signal/sigwait.c b/libc/signal/sigwait.c
index 4226f66d8..27820157f 100644
--- a/libc/signal/sigwait.c
+++ b/libc/signal/sigwait.c
@@ -28,4 +28,3 @@ __sigwait (const sigset_t *set, int *sig)
weak_alias (__sigwait, sigwait)
stub_warning (sigwait)
-#include <stub-tag.h>
diff --git a/libc/signal/sigwaitinfo.c b/libc/signal/sigwaitinfo.c
index 19b8c02b4..a266b3684 100644
--- a/libc/signal/sigwaitinfo.c
+++ b/libc/signal/sigwaitinfo.c
@@ -29,4 +29,3 @@ libc_hidden_def (__sigwaitinfo)
weak_alias (__sigwaitinfo, sigwaitinfo)
stub_warning (sigwaitinfo)
-#include <stub-tag.h>
diff --git a/libc/signal/sysv_signal.c b/libc/signal/sysv_signal.c
index 574b94ec5..aaf940b85 100644
--- a/libc/signal/sysv_signal.c
+++ b/libc/signal/sysv_signal.c
@@ -39,4 +39,3 @@ __sysv_signal (sig, handler)
weak_alias (__sysv_signal, sysv_signal)
stub_warning (sysv_signal)
-#include <stub-tag.h>
diff --git a/libc/socket/accept.c b/libc/socket/accept.c
index b9df1ac74..c1837956d 100644
--- a/libc/socket/accept.c
+++ b/libc/socket/accept.c
@@ -36,4 +36,3 @@ libc_hidden_def (accept)
stub_warning (accept)
-#include <stub-tag.h>
diff --git a/libc/socket/accept4.c b/libc/socket/accept4.c
index fad2cc696..d65482c11 100644
--- a/libc/socket/accept4.c
+++ b/libc/socket/accept4.c
@@ -38,4 +38,3 @@ weak_alias (__libc_accept4, accept4)
stub_warning (accept4)
-#include <stub-tag.h>
diff --git a/libc/socket/bind.c b/libc/socket/bind.c
index e87351d55..a1d6fc652 100644
--- a/libc/socket/bind.c
+++ b/libc/socket/bind.c
@@ -32,4 +32,3 @@ __bind (fd, addr, len)
weak_alias (__bind, bind)
stub_warning (bind)
-#include <stub-tag.h>
diff --git a/libc/socket/connect.c b/libc/socket/connect.c
index 79f5cd82b..4f421f8f3 100644
--- a/libc/socket/connect.c
+++ b/libc/socket/connect.c
@@ -35,4 +35,3 @@ weak_alias (__connect, connect)
libc_hidden_def (__connect)
stub_warning (connect)
-#include <stub-tag.h>
diff --git a/libc/socket/getpeername.c b/libc/socket/getpeername.c
index 9562814e7..72e44234f 100644
--- a/libc/socket/getpeername.c
+++ b/libc/socket/getpeername.c
@@ -32,4 +32,3 @@ getpeername (fd, addr, len)
stub_warning (getpeername)
-#include <stub-tag.h>
diff --git a/libc/socket/getsockname.c b/libc/socket/getsockname.c
index 03d97652e..14df9bce5 100644
--- a/libc/socket/getsockname.c
+++ b/libc/socket/getsockname.c
@@ -32,4 +32,3 @@ __getsockname (fd, addr, len)
weak_alias (__getsockname, getsockname)
stub_warning (getsockname)
-#include <stub-tag.h>
diff --git a/libc/socket/getsockopt.c b/libc/socket/getsockopt.c
index 661bcf3ff..f172f20df 100644
--- a/libc/socket/getsockopt.c
+++ b/libc/socket/getsockopt.c
@@ -34,4 +34,3 @@ getsockopt (fd, level, optname, optval, optlen)
}
stub_warning (getsockopt)
-#include <stub-tag.h>
diff --git a/libc/socket/isfdtype.c b/libc/socket/isfdtype.c
index 188d516d7..012b0ff1f 100644
--- a/libc/socket/isfdtype.c
+++ b/libc/socket/isfdtype.c
@@ -27,4 +27,3 @@ isfdtype (int fildes, int fdtype)
return -1;
}
stub_warning (isfdtype)
-#include <stub-tag.h>
diff --git a/libc/socket/listen.c b/libc/socket/listen.c
index 0c1af8231..f657d8790 100644
--- a/libc/socket/listen.c
+++ b/libc/socket/listen.c
@@ -33,4 +33,3 @@ __listen (fd, n)
weak_alias (__listen, listen)
stub_warning (listen)
-#include <stub-tag.h>
diff --git a/libc/socket/recv.c b/libc/socket/recv.c
index 43fdcfcde..6efeb4d92 100644
--- a/libc/socket/recv.c
+++ b/libc/socket/recv.c
@@ -33,4 +33,3 @@ __recv (fd, buf, n, flags)
weak_alias (__recv, recv)
stub_warning (recv)
-#include <stub-tag.h>
diff --git a/libc/socket/recvfrom.c b/libc/socket/recvfrom.c
index 654d2e93a..b99774f36 100644
--- a/libc/socket/recvfrom.c
+++ b/libc/socket/recvfrom.c
@@ -37,4 +37,3 @@ __recvfrom (fd, buf, n, flags, addr, addr_len)
weak_alias (__recvfrom, recvfrom)
stub_warning (recvfrom)
-#include <stub-tag.h>
diff --git a/libc/socket/recvmsg.c b/libc/socket/recvmsg.c
index 7cd6ff3dd..0afcc0faf 100644
--- a/libc/socket/recvmsg.c
+++ b/libc/socket/recvmsg.c
@@ -33,4 +33,3 @@ __recvmsg (fd, message, flags)
weak_alias (__recvmsg, recvmsg)
stub_warning (recvmsg)
-#include <stub-tag.h>
diff --git a/libc/socket/send.c b/libc/socket/send.c
index 2b87baea0..1f5220db2 100644
--- a/libc/socket/send.c
+++ b/libc/socket/send.c
@@ -33,4 +33,3 @@ libc_hidden_def (__send)
weak_alias (__send, send)
stub_warning (send)
-#include <stub-tag.h>
diff --git a/libc/socket/sendmsg.c b/libc/socket/sendmsg.c
index 249bb5af3..8fce470ad 100644
--- a/libc/socket/sendmsg.c
+++ b/libc/socket/sendmsg.c
@@ -33,4 +33,3 @@ __sendmsg (fd, message, flags)
weak_alias (__sendmsg, sendmsg)
stub_warning (sendmsg)
-#include <stub-tag.h>
diff --git a/libc/socket/sendto.c b/libc/socket/sendto.c
index 040caf8fa..ae06a54cc 100644
--- a/libc/socket/sendto.c
+++ b/libc/socket/sendto.c
@@ -36,4 +36,3 @@ __sendto (fd, buf, n, flags, addr, addr_len)
weak_alias (__sendto, sendto)
stub_warning (sendto)
-#include <stub-tag.h>
diff --git a/libc/socket/setsockopt.c b/libc/socket/setsockopt.c
index 21824f625..9e1e7a3d8 100644
--- a/libc/socket/setsockopt.c
+++ b/libc/socket/setsockopt.c
@@ -36,4 +36,3 @@ __setsockopt (fd, level, optname, optval, optlen)
weak_alias (__setsockopt, setsockopt)
stub_warning (setsockopt)
-#include <stub-tag.h>
diff --git a/libc/socket/shutdown.c b/libc/socket/shutdown.c
index 8ce992c47..5c35cc3b3 100644
--- a/libc/socket/shutdown.c
+++ b/libc/socket/shutdown.c
@@ -35,4 +35,3 @@ shutdown (fd, how)
stub_warning (shutdown)
-#include <stub-tag.h>
diff --git a/libc/socket/sockatmark.c b/libc/socket/sockatmark.c
index dd11b42a0..7970961ee 100644
--- a/libc/socket/sockatmark.c
+++ b/libc/socket/sockatmark.c
@@ -29,4 +29,3 @@ sockatmark (fd)
stub_warning (sockatmark)
-#include <stub-tag.h>
diff --git a/libc/socket/socket.c b/libc/socket/socket.c
index 273924a05..8cb014edb 100644
--- a/libc/socket/socket.c
+++ b/libc/socket/socket.c
@@ -34,4 +34,3 @@ __socket (domain, type, protocol)
weak_alias (__socket, socket)
stub_warning (socket)
-#include <stub-tag.h>
diff --git a/libc/socket/socketpair.c b/libc/socket/socketpair.c
index 7933d44d6..031674831 100644
--- a/libc/socket/socketpair.c
+++ b/libc/socket/socketpair.c
@@ -35,4 +35,3 @@ socketpair (domain, type, protocol, fds)
stub_warning (socketpair)
-#include <stub-tag.h>
diff --git a/libc/stdio-common/ctermid.c b/libc/stdio-common/ctermid.c
index b1bc4c983..e78c3d083 100644
--- a/libc/stdio-common/ctermid.c
+++ b/libc/stdio-common/ctermid.c
@@ -32,4 +32,3 @@ ctermid (s)
stub_warning (ctermid)
-#include <stub-tag.h>
diff --git a/libc/stdio-common/cuserid.c b/libc/stdio-common/cuserid.c
index 758574b60..68056dcfc 100644
--- a/libc/stdio-common/cuserid.c
+++ b/libc/stdio-common/cuserid.c
@@ -31,4 +31,3 @@ cuserid (s)
stub_warning (cuserid)
-#include <stub-tag.h>
diff --git a/libc/stdio-common/remove.c b/libc/stdio-common/remove.c
index 17e3ed605..8563b7187 100644
--- a/libc/stdio-common/remove.c
+++ b/libc/stdio-common/remove.c
@@ -29,4 +29,3 @@ remove (file)
libc_hidden_def (remove)
stub_warning (remove)
-#include <stub-tag.h>
diff --git a/libc/stdio-common/rename.c b/libc/stdio-common/rename.c
index af84bed00..2b3cbcfa1 100644
--- a/libc/stdio-common/rename.c
+++ b/libc/stdio-common/rename.c
@@ -37,4 +37,3 @@ rename (old, new)
stub_warning (rename)
-#include <stub-tag.h>
diff --git a/libc/stdio-common/renameat.c b/libc/stdio-common/renameat.c
index 821e107a8..ab2cf428f 100644
--- a/libc/stdio-common/renameat.c
+++ b/libc/stdio-common/renameat.c
@@ -46,4 +46,3 @@ renameat (oldfd, old, newfd, new)
stub_warning (renameat)
-#include <stub-tag.h>
diff --git a/libc/stdio-common/tempname.c b/libc/stdio-common/tempname.c
index cdcdaaa86..30b9fd445 100644
--- a/libc/stdio-common/tempname.c
+++ b/libc/stdio-common/tempname.c
@@ -57,4 +57,3 @@ __gen_tempname (tmpl, suffixlen, flags, kind)
}
stub_warning (__gen_tempname)
-#include <stub-tag.h>
diff --git a/libc/stdlib/Makefile b/libc/stdlib/Makefile
index 648a71015..5b611b3db 100644
--- a/libc/stdlib/Makefile
+++ b/libc/stdlib/Makefile
@@ -22,7 +22,7 @@ include ../option-groups.mak
subdir := stdlib
-headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h \
+headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h \
monetary.h bits/monetary-ldbl.h \
inttypes.h stdint.h bits/wordsize.h \
errno.h sys/errno.h bits/errno.h \
@@ -78,7 +78,8 @@ tests := tst-strtol tst-strtod testrand testsort testdiv \
tst-atof1 tst-atof2 tst-strtod2 tst-rand48-2 \
tst-makecontext tst-qsort2 tst-makecontext2 tst-strtod6 \
tst-unsetenv1 tst-makecontext3 bug-getcontext bug-fmtmsg1 \
- tst-secure-getenv tst-strtod-overflow tst-strtod-round
+ tst-secure-getenv tst-strtod-overflow tst-strtod-round \
+ tst-tininess tst-strtod-underflow
tests-static := tst-secure-getenv
tests-$(OPTION_EGLIBC_LOCALE_CODE) \
+= tst-strtod3 tst-strtod4 tst-strtod5 testmb2
@@ -165,3 +166,5 @@ link-libm = $(common-objpfx)math/libm.a
endif
$(objpfx)bug-getcontext: $(link-libm)
$(objpfx)tst-strtod-round: $(link-libm)
+$(objpfx)tst-tininess: $(link-libm)
+$(objpfx)tst-strtod-underflow: $(link-libm)
diff --git a/libc/stdlib/bits/stdlib-float.h b/libc/stdlib/bits/stdlib-float.h
new file mode 100644
index 000000000..46f3a3284
--- /dev/null
+++ b/libc/stdlib/bits/stdlib-float.h
@@ -0,0 +1,31 @@
+/* Floating-point inline functions for stdlib.h.
+ 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/>. */
+
+#ifndef _STDLIB_H
+# error "Never use <bits/stdlib-float.h> directly; include <stdlib.h> instead."
+#endif
+
+#ifdef __USE_EXTERN_INLINES
+__BEGIN_NAMESPACE_STD
+__extern_inline double
+__NTH (atof (const char *__nptr))
+{
+ return strtod (__nptr, (char **) NULL);
+}
+__END_NAMESPACE_STD
+#endif /* Optimizing and Inlining. */
diff --git a/libc/stdlib/getcontext.c b/libc/stdlib/getcontext.c
index aa65e5ea6..b197438e4 100644
--- a/libc/stdlib/getcontext.c
+++ b/libc/stdlib/getcontext.c
@@ -28,4 +28,3 @@ getcontext (ucp)
stub_warning (getcontext)
-#include <stub-tag.h>
diff --git a/libc/stdlib/makecontext.c b/libc/stdlib/makecontext.c
index 1f08b18c3..71fad9506 100644
--- a/libc/stdlib/makecontext.c
+++ b/libc/stdlib/makecontext.c
@@ -26,4 +26,3 @@ makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
stub_warning (makecontext)
-#include <stub-tag.h>
diff --git a/libc/stdlib/setcontext.c b/libc/stdlib/setcontext.c
index 6a7517c67..470f238c1 100644
--- a/libc/stdlib/setcontext.c
+++ b/libc/stdlib/setcontext.c
@@ -28,4 +28,3 @@ setcontext (ucp)
stub_warning (setcontext)
-#include <stub-tag.h>
diff --git a/libc/stdlib/stdlib.h b/libc/stdlib/stdlib.h
index cf3f39ca8..0eb982cbb 100644
--- a/libc/stdlib/stdlib.h
+++ b/libc/stdlib/stdlib.h
@@ -274,11 +274,6 @@ extern long double strtold_l (const char *__restrict __nptr,
#ifdef __USE_EXTERN_INLINES
__BEGIN_NAMESPACE_STD
-__extern_inline double
-__NTH (atof (const char *__nptr))
-{
- return strtod (__nptr, (char **) NULL);
-}
__extern_inline int
__NTH (atoi (const char *__nptr))
{
@@ -953,6 +948,7 @@ extern int getloadavg (double __loadavg[], int __nelem)
__THROW __nonnull ((1));
#endif
+#include <bits/stdlib-float.h>
/* Define some macros helping to catch buffer overflows. */
#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
diff --git a/libc/stdlib/strtod_l.c b/libc/stdlib/strtod_l.c
index 12bbbc419..d9186d4c5 100644
--- a/libc/stdlib/strtod_l.c
+++ b/libc/stdlib/strtod_l.c
@@ -63,6 +63,7 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **,
#include <string.h>
#include <stdint.h>
#include <rounding-mode.h>
+#include <tininess.h>
/* The gmp headers need some configuration frobs. */
#define HAVE_ALLOCA 1
@@ -210,12 +211,15 @@ static FLOAT
round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
mp_limb_t round_limb, mp_size_t round_bit, int more_bits)
{
+ int mode = get_rounding_mode ();
+
if (exponent < MIN_EXP - 1)
{
if (exponent < MIN_EXP - 1 - MANT_DIG)
return underflow_value (negative);
mp_size_t shift = MIN_EXP - 1 - exponent;
+ bool is_tiny = true;
more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;
if (shift == MANT_DIG)
@@ -249,6 +253,33 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
}
else if (shift > 0)
{
+ if (TININESS_AFTER_ROUNDING && shift == 1)
+ {
+ /* Whether the result counts as tiny depends on whether,
+ after rounding to the normal precision, it still has
+ a subnormal exponent. */
+ mp_limb_t retval_normal[RETURN_LIMB_SIZE];
+ if (round_away (negative,
+ (retval[0] & 1) != 0,
+ (round_limb
+ & (((mp_limb_t) 1) << round_bit)) != 0,
+ (more_bits
+ || ((round_limb
+ & ((((mp_limb_t) 1) << round_bit) - 1))
+ != 0)),
+ mode))
+ {
+ mp_limb_t cy = __mpn_add_1 (retval_normal, retval,
+ RETURN_LIMB_SIZE, 1);
+
+ if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+ ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+ ((retval_normal[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB)))
+ != 0)))
+ is_tiny = false;
+ }
+ }
round_limb = retval[0];
round_bit = shift - 1;
(void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift);
@@ -260,14 +291,20 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
# define DENORM_EXP (MIN_EXP - 2)
#endif
exponent = DENORM_EXP;
- __set_errno (ERANGE);
+ if (is_tiny
+ && ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0
+ || more_bits
+ || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0))
+ {
+ __set_errno (ERANGE);
+ volatile FLOAT force_underflow_exception = MIN_VALUE * MIN_VALUE;
+ (void) force_underflow_exception;
+ }
}
if (exponent > MAX_EXP)
goto overflow;
- int mode = get_rounding_mode ();
-
if (round_away (negative,
(retval[0] & 1) != 0,
(round_limb & (((mp_limb_t) 1) << round_bit)) != 0,
diff --git a/libc/stdlib/swapcontext.c b/libc/stdlib/swapcontext.c
index 275bc658d..ee3acb478 100644
--- a/libc/stdlib/swapcontext.c
+++ b/libc/stdlib/swapcontext.c
@@ -29,4 +29,3 @@ swapcontext (oucp, ucp)
stub_warning (swapcontext)
-#include <stub-tag.h>
diff --git a/libc/stdlib/system.c b/libc/stdlib/system.c
index b2f7d6d62..9bc7e82c6 100644
--- a/libc/stdlib/system.c
+++ b/libc/stdlib/system.c
@@ -34,4 +34,3 @@ weak_alias (__libc_system, system)
stub_warning (system)
-#include <stub-tag.h>
diff --git a/libc/stdlib/tst-strtod-underflow.c b/libc/stdlib/tst-strtod-underflow.c
new file mode 100644
index 000000000..892ef158a
--- /dev/null
+++ b/libc/stdlib/tst-strtod-underflow.c
@@ -0,0 +1,225 @@
+/* Test for strtod handling of arguments that may cause floating-point
+ underflow.
+ 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 <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <tininess.h>
+
+enum underflow_case
+ {
+ /* Result is exact or outside the subnormal range. */
+ UNDERFLOW_NONE,
+ /* Result has magnitude at most half way between the largest
+ subnormal value and the smallest positive normal value, and is
+ not exact, so underflows in all rounding modes and independent
+ of how tininess is detected. */
+ UNDERFLOW_ALWAYS,
+ /* Result is positive, with magnitude larger than half way between
+ the largest subnormal value and the least positive normal
+ value, but would underflow when rounded to nearest to normal
+ precision, so underflows after rounding in all modes except
+ rounding upward. */
+ UNDERFLOW_EXCEPT_UPWARD,
+ /* Likewise, for a negative result, underflowing after rounding
+ except when rounding downward. */
+ UNDERFLOW_EXCEPT_DOWNWARD,
+ /* Result is positive, with magnitude at least three quarters of
+ the way from the largest subnormal value to the smallest
+ positive normal value, so underflows after rounding only when
+ rounding downward or toward zero. */
+ UNDERFLOW_ONLY_DOWNWARD_ZERO,
+ /* Likewise, for a negative result, underflowing after rounding
+ only when rounding upward or toward zero. */
+ UNDERFLOW_ONLY_UPWARD_ZERO,
+ };
+
+struct test
+{
+ const char *s;
+ enum underflow_case c;
+};
+
+static const struct test tests[] =
+ {
+ { "0x1p-1022", UNDERFLOW_NONE },
+ { "-0x1p-1022", UNDERFLOW_NONE },
+ { "0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+ { "-0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+ { "0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+ { "-0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+ { "0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+ { "-0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+ { "0x1p-1075", UNDERFLOW_ALWAYS },
+ { "-0x1p-1075", UNDERFLOW_ALWAYS },
+ { "0x1p-1023", UNDERFLOW_NONE },
+ { "-0x1p-1023", UNDERFLOW_NONE },
+ { "0x1p-1074", UNDERFLOW_NONE },
+ { "-0x1p-1074", UNDERFLOW_NONE },
+ { "0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+ { "-0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+ { "0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+ { "-0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+ { "0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_UPWARD },
+ { "-0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+ { "0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_UPWARD },
+ { "-0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+ { "0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+ { "-0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+ { "0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+ { "-0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+ };
+
+/* Return whether to expect underflow from a particular testcase, in a
+ given rounding mode. */
+
+static bool
+expect_underflow (enum underflow_case c, int rm)
+{
+ if (c == UNDERFLOW_NONE)
+ return false;
+ if (c == UNDERFLOW_ALWAYS)
+ return true;
+ if (TININESS_AFTER_ROUNDING)
+ {
+ switch (rm)
+ {
+#ifdef FE_DOWNWARD
+ case FE_DOWNWARD:
+ return (c == UNDERFLOW_EXCEPT_UPWARD
+ || c == UNDERFLOW_ONLY_DOWNWARD_ZERO);
+#endif
+
+#ifdef FE_TOWARDZERO
+ case FE_TOWARDZERO:
+ return true;
+#endif
+
+#ifdef FE_UPWARD
+ case FE_UPWARD:
+ return (c == UNDERFLOW_EXCEPT_DOWNWARD
+ || c == UNDERFLOW_ONLY_UPWARD_ZERO);
+#endif
+
+ default:
+ return (c == UNDERFLOW_EXCEPT_UPWARD
+ || c == UNDERFLOW_EXCEPT_DOWNWARD);
+ }
+ }
+ else
+ return true;
+}
+
+static bool support_underflow_exception = false;
+volatile double d = DBL_MIN;
+volatile double dd;
+
+static int
+test_in_one_mode (const char *s, enum underflow_case c, int rm,
+ const char *mode_name)
+{
+ int result = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ errno = 0;
+ double d = strtod (s, NULL);
+ int got_errno = errno;
+#ifdef FE_UNDERFLOW
+ bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0;
+#else
+ bool got_fe_underflow = false;
+#endif
+ printf ("strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\n",
+ s, mode_name, d, got_errno, got_fe_underflow ? "" : "no ");
+ bool this_expect_underflow = expect_underflow (c, rm);
+ if (got_errno != 0 && got_errno != ERANGE)
+ {
+ puts ("FAIL: errno neither 0 nor ERANGE");
+ result = 1;
+ }
+ else if (this_expect_underflow != (errno == ERANGE))
+ {
+ puts ("FAIL: underflow from errno differs from expectations");
+ result = 1;
+ }
+ if (support_underflow_exception && got_fe_underflow != this_expect_underflow)
+ {
+ puts ("FAIL: underflow from exceptions differs from expectations");
+ result = 1;
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int save_round_mode = fegetround ();
+ int result = 0;
+#ifdef FE_TONEAREST
+ const int fe_tonearest = FE_TONEAREST;
+#else
+ const int fe_tonearest = 0;
+# if defined FE_DOWNWARD || defined FE_TOWARDZERO || defined FE_UPWARD
+# error "FE_TONEAREST not defined, but another rounding mode is"
+# endif
+#endif
+#ifdef FE_UNDERFLOW
+ feclearexcept (FE_ALL_EXCEPT);
+ dd = d * d;
+ if (fetestexcept (FE_UNDERFLOW))
+ support_underflow_exception = true;
+ else
+ puts ("underflow exception not supported at runtime, only testing errno");
+#endif
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest,
+ "default rounding mode");
+#ifdef FE_DOWNWARD
+ if (!fesetround (FE_DOWNWARD))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD,
+ "FE_DOWNWARD");
+ fesetround (save_round_mode);
+ }
+#endif
+#ifdef FE_TOWARDZERO
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO,
+ "FE_TOWARDZERO");
+ fesetround (save_round_mode);
+ }
+#endif
+#ifdef FE_UPWARD
+ if (!fesetround (FE_UPWARD))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD,
+ "FE_UPWARD");
+ fesetround (save_round_mode);
+ }
+#endif
+ }
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/libc/stdlib/tst-strtod.c b/libc/stdlib/tst-strtod.c
index 1f43b7ffe..7c488c8a7 100644
--- a/libc/stdlib/tst-strtod.c
+++ b/libc/stdlib/tst-strtod.c
@@ -61,10 +61,10 @@ static const struct ltest tests[] =
{ "0x00.0014p19", 160.0, '\0', 0 },
{ "0x1p-1023",
1.11253692925360069154511635866620203210960799023116591527666e-308,
- '\0', ERANGE },
+ '\0', 0 },
{ "0x0.8p-1022",
1.11253692925360069154511635866620203210960799023116591527666e-308,
- '\0', ERANGE },
+ '\0', 0 },
{ "Inf", HUGE_VAL, '\0', 0 },
{ "-Inf", -HUGE_VAL, '\0', 0 },
{ "+InFiNiTy", HUGE_VAL, '\0', 0 },
diff --git a/libc/stdlib/tst-tininess.c b/libc/stdlib/tst-tininess.c
new file mode 100644
index 000000000..9312f16ee
--- /dev/null
+++ b/libc/stdlib/tst-tininess.c
@@ -0,0 +1,69 @@
+/* Test that tininess.h is correct for this architecture.
+ 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 <fenv.h>
+#include <float.h>
+#include <stdio.h>
+#include <tininess.h>
+
+volatile float a = 0x1.fffp-126;
+volatile float b = 0x1.0008p-1;
+volatile float c;
+volatile float m = FLT_MIN;
+volatile float mm;
+
+static int
+do_test (void)
+{
+ int result = 0;
+#ifdef FE_UNDERFLOW
+ feclearexcept (FE_ALL_EXCEPT);
+ mm = m * m;
+ if (!fetestexcept (FE_UNDERFLOW))
+ {
+ puts ("underflow exception not supported at runtime, cannot test");
+ return 0;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ c = a * b;
+ if (fetestexcept (FE_UNDERFLOW))
+ {
+ if (TININESS_AFTER_ROUNDING)
+ {
+ puts ("tininess.h says after rounding, "
+ "but detected before rounding");
+ result = 1;
+ }
+ }
+ else
+ {
+ if (!TININESS_AFTER_ROUNDING)
+ {
+ puts ("tininess.h says before rounding, "
+ "but detected after rounding");
+ result = 1;
+ }
+ }
+#else
+ puts ("underflow exception not supported at compile time, cannot test");
+#endif
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/libc/streams/fattach.c b/libc/streams/fattach.c
index 22e36df94..9c84127c1 100644
--- a/libc/streams/fattach.c
+++ b/libc/streams/fattach.c
@@ -29,4 +29,3 @@ fattach (fildes, path)
stub_warning (fattach)
-#include <stub-tag.h>
diff --git a/libc/streams/fdetach.c b/libc/streams/fdetach.c
index 9c872caae..046373673 100644
--- a/libc/streams/fdetach.c
+++ b/libc/streams/fdetach.c
@@ -28,4 +28,3 @@ fdetach (path)
stub_warning (fdetach)
-#include <stub-tag.h>
diff --git a/libc/streams/getmsg.c b/libc/streams/getmsg.c
index 20c32aa8a..2da0ab6eb 100644
--- a/libc/streams/getmsg.c
+++ b/libc/streams/getmsg.c
@@ -31,4 +31,3 @@ getmsg (fildes, ctlptr, dataptr, flagsp)
stub_warning (getmsg)
-#include <stub-tag.h>
diff --git a/libc/streams/getpmsg.c b/libc/streams/getpmsg.c
index 7d97f5c24..acb25b585 100644
--- a/libc/streams/getpmsg.c
+++ b/libc/streams/getpmsg.c
@@ -32,4 +32,3 @@ getpmsg (fildes, ctlptr, dataptr, bandp, flagsp)
stub_warning (getpmsg)
-#include <stub-tag.h>
diff --git a/libc/streams/putmsg.c b/libc/streams/putmsg.c
index 80f9f0b92..2d776bc96 100644
--- a/libc/streams/putmsg.c
+++ b/libc/streams/putmsg.c
@@ -31,4 +31,3 @@ putmsg (fildes, ctlptr, dataptr, flags)
stub_warning (putmsg)
-#include <stub-tag.h>
diff --git a/libc/streams/putpmsg.c b/libc/streams/putpmsg.c
index b85e14283..c2fa820e6 100644
--- a/libc/streams/putpmsg.c
+++ b/libc/streams/putpmsg.c
@@ -32,4 +32,3 @@ putpmsg (fildes, ctlptr, dataptr, band, flags)
stub_warning (putpmsg)
-#include <stub-tag.h>
diff --git a/libc/sysdeps/generic/math_private.h b/libc/sysdeps/generic/math_private.h
index b375bc0c5..7661788e6 100644
--- a/libc/sysdeps/generic/math_private.h
+++ b/libc/sysdeps/generic/math_private.h
@@ -402,6 +402,22 @@ default_libc_feholdexcept (fenv_t *e)
#endif
static __always_inline void
+default_libc_fesetround (int r)
+{
+ (void) fesetround (r);
+}
+
+#ifndef libc_fesetround
+# define libc_fesetround default_libc_fesetround
+#endif
+#ifndef libc_fesetroundf
+# define libc_fesetroundf default_libc_fesetround
+#endif
+#ifndef libc_fesetroundl
+# define libc_fesetroundl default_libc_fesetround
+#endif
+
+static __always_inline void
default_libc_feholdexcept_setround (fenv_t *e, int r)
{
feholdexcept (e);
diff --git a/libc/sysdeps/generic/paths.h b/libc/sysdeps/generic/paths.h
index f85e88cb9..893b4c228 100644
--- a/libc/sysdeps/generic/paths.h
+++ b/libc/sysdeps/generic/paths.h
@@ -36,7 +36,7 @@
#define _PATH_DEFPATH "/usr/bin:/bin"
/* All standard utilities path. */
#define _PATH_STDPATH \
- "/usr/bin:/bin:/usr/sbin:/sbin:/usr/contrib/bin:/usr/old/bin"
+ "/usr/bin:/bin:/usr/sbin:/sbin"
#define _PATH_BSHELL "/bin/sh"
#define _PATH_CONSOLE "/dev/console"
@@ -50,8 +50,8 @@
#define _PATH_MAILDIR "/var/mail"
#define _PATH_MAN "/usr/share/man"
#define _PATH_MEM "/dev/mem"
-#define _PATH_MNTTAB "/etc/fstab"
-#define _PATH_MOUNTED "/var/run/mtab"
+#define _PATH_MNTTAB "/etc/fstab"
+#define _PATH_MOUNTED "/var/run/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_PRESERVE "/var/lib"
#define _PATH_RWHODIR "/var/spool/rwho"
diff --git a/libc/sysdeps/generic/tininess.h b/libc/sysdeps/generic/tininess.h
new file mode 100644
index 000000000..fd0173995
--- /dev/null
+++ b/libc/sysdeps/generic/tininess.h
@@ -0,0 +1,33 @@
+/* Specify architecture-specific rules for determining tininess of
+ floating-point results. Generic 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/>. */
+
+#ifndef _TININESS_H
+#define _TININESS_H 1
+
+/* Under IEEE 754, an architecture may determine tininess of
+ floating-point results either "before rounding" or "after
+ rounding", but must do so in the same way for all operations
+ returning binary results. Define TININESS_AFTER_ROUNDING to 1 for
+ "after rounding" architectures, 0 for "before rounding"
+ architectures. The test stdlib/tst-tininess will fail if the
+ definition is incorrect. */
+
+#define TININESS_AFTER_ROUNDING 0
+
+#endif /* tininess.h */
diff --git a/libc/sysdeps/i386/fpu/fclrexcpt.c b/libc/sysdeps/i386/fpu/fclrexcpt.c
index f24d07f3d..f28ef6b3f 100644
--- a/libc/sysdeps/i386/fpu/fclrexcpt.c
+++ b/libc/sysdeps/i386/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997,99,2000, 2001, 2003, 2004 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.
@@ -65,4 +65,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/sysdeps/i386/fpu/fenv_private.h b/libc/sysdeps/i386/fpu/fenv_private.h
index f33f57c39..03f4c97a9 100644
--- a/libc/sysdeps/i386/fpu/fenv_private.h
+++ b/libc/sysdeps/i386/fpu/fenv_private.h
@@ -77,6 +77,24 @@ libc_feholdexcept_387 (fenv_t *e)
}
static __always_inline void
+libc_fesetround_sse (int r)
+{
+ unsigned int mxcsr;
+ asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ mxcsr = (mxcsr & ~0x6000) | (r << 3);
+ asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+}
+
+static __always_inline void
+libc_fesetround_387 (int r)
+{
+ fpu_control_t cw;
+ _FPU_GETCW (cw);
+ cw = (cw & ~0xc00) | r;
+ _FPU_SETCW (cw);
+}
+
+static __always_inline void
libc_feholdexcept_setround_sse (fenv_t *e, int r)
{
unsigned int mxcsr;
@@ -247,6 +265,7 @@ libc_feresetround_387 (fenv_t *e)
#ifdef __SSE_MATH__
# define libc_feholdexceptf libc_feholdexcept_sse
+# define libc_fesetroundf libc_fesetround_sse
# define libc_feholdexcept_setroundf libc_feholdexcept_setround_sse
# define libc_fetestexceptf libc_fetestexcept_sse
# define libc_fesetenvf libc_fesetenv_sse
@@ -256,6 +275,7 @@ libc_feresetround_387 (fenv_t *e)
# define libc_feresetroundf libc_feresetround_sse
#else
# define libc_feholdexceptf libc_feholdexcept_387
+# define libc_fesetroundf libc_fesetround_387
# define libc_feholdexcept_setroundf libc_feholdexcept_setround_387
# define libc_fetestexceptf libc_fetestexcept_387
# define libc_fesetenvf libc_fesetenv_387
@@ -267,6 +287,7 @@ libc_feresetround_387 (fenv_t *e)
#ifdef __SSE2_MATH__
# define libc_feholdexcept libc_feholdexcept_sse
+# define libc_fesetround libc_fesetround_sse
# define libc_feholdexcept_setround libc_feholdexcept_setround_sse
# define libc_fetestexcept libc_fetestexcept_sse
# define libc_fesetenv libc_fesetenv_sse
@@ -276,6 +297,7 @@ libc_feresetround_387 (fenv_t *e)
# define libc_feresetround libc_feresetround_sse
#else
# define libc_feholdexcept libc_feholdexcept_387
+# define libc_fesetround libc_fesetround_387
# define libc_feholdexcept_setround libc_feholdexcept_setround_387
# define libc_fetestexcept libc_fetestexcept_387
# define libc_fesetenv libc_fesetenv_387
@@ -286,6 +308,7 @@ libc_feresetround_387 (fenv_t *e)
#endif /* __SSE2_MATH__ */
#define libc_feholdexceptl libc_feholdexcept_387
+#define libc_fesetroundl libc_fesetround_387
#define libc_feholdexcept_setroundl libc_feholdexcept_setround_387
#define libc_fetestexceptl libc_fetestexcept_387
#define libc_fesetenvl libc_fesetenv_387
diff --git a/libc/sysdeps/ieee754/dbl-64/s_fma.c b/libc/sysdeps/ieee754/dbl-64/s_fma.c
index 5e21461a4..8c69b987e 100644
--- a/libc/sysdeps/ieee754/dbl-64/s_fma.c
+++ b/libc/sysdeps/ieee754/dbl-64/s_fma.c
@@ -22,6 +22,7 @@
#include <fenv.h>
#include <ieee754.h>
#include <math_private.h>
+#include <tininess.h>
/* This implementation uses rounding to odd to avoid problems with
double rounding. See a paper by Boldo and Melquiond:
@@ -54,17 +55,46 @@ __fma (double x, double y, double z)
underflows to 0. */
if (z == 0 && x != 0 && y != 0)
return x * y;
- /* If x or y or z is Inf/NaN, or if fma will certainly overflow,
- or if x * y is less than half of DBL_DENORM_MIN,
- compute as x * y + z. */
+ /* If x or y or z is Inf/NaN, or if x * y is zero, compute as
+ x * y + z. */
if (u.ieee.exponent == 0x7ff
|| v.ieee.exponent == 0x7ff
|| w.ieee.exponent == 0x7ff
- || u.ieee.exponent + v.ieee.exponent
- > 0x7ff + IEEE754_DOUBLE_BIAS
- || u.ieee.exponent + v.ieee.exponent
- < IEEE754_DOUBLE_BIAS - DBL_MANT_DIG - 2)
+ || x == 0
+ || y == 0)
return x * y + z;
+ /* If fma will certainly overflow, compute as x * y. */
+ if (u.ieee.exponent + v.ieee.exponent > 0x7ff + IEEE754_DOUBLE_BIAS)
+ return x * y;
+ /* If x * y is less than 1/4 of DBL_DENORM_MIN, neither the
+ result nor whether there is underflow depends on its exact
+ value, only on its sign. */
+ if (u.ieee.exponent + v.ieee.exponent
+ < IEEE754_DOUBLE_BIAS - DBL_MANT_DIG - 2)
+ {
+ int neg = u.ieee.negative ^ v.ieee.negative;
+ double tiny = neg ? -0x1p-1074 : 0x1p-1074;
+ if (w.ieee.exponent >= 3)
+ return tiny + z;
+ /* Scaling up, adding TINY and scaling down produces the
+ correct result, because in round-to-nearest mode adding
+ TINY has no effect and in other modes double rounding is
+ harmless. But it may not produce required underflow
+ exceptions. */
+ v.d = z * 0x1p54 + tiny;
+ if (TININESS_AFTER_ROUNDING
+ ? v.ieee.exponent < 55
+ : (w.ieee.exponent == 0
+ || (w.ieee.exponent == 1
+ && w.ieee.negative != neg
+ && w.ieee.mantissa1 == 0
+ && w.ieee.mantissa0 == 0)))
+ {
+ volatile double force_underflow = x * y;
+ (void) force_underflow;
+ }
+ return v.d * 0x1p-54;
+ }
if (u.ieee.exponent + v.ieee.exponent
>= 0x7ff + IEEE754_DOUBLE_BIAS - DBL_MANT_DIG)
{
@@ -84,8 +114,17 @@ __fma (double x, double y, double z)
{
/* Similarly.
If z exponent is very large and x and y exponents are
- very small, it doesn't matter if we don't adjust it. */
- if (u.ieee.exponent > v.ieee.exponent)
+ very small, adjust them up to avoid spurious underflows,
+ rather than down. */
+ if (u.ieee.exponent + v.ieee.exponent
+ <= IEEE754_DOUBLE_BIAS + DBL_MANT_DIG)
+ {
+ if (u.ieee.exponent > v.ieee.exponent)
+ u.ieee.exponent += 2 * DBL_MANT_DIG + 2;
+ else
+ v.ieee.exponent += 2 * DBL_MANT_DIG + 2;
+ }
+ else if (u.ieee.exponent > v.ieee.exponent)
{
if (u.ieee.exponent > DBL_MANT_DIG)
u.ieee.exponent -= DBL_MANT_DIG;
@@ -115,15 +154,15 @@ __fma (double x, double y, double z)
<= IEEE754_DOUBLE_BIAS + DBL_MANT_DIG) */
{
if (u.ieee.exponent > v.ieee.exponent)
- u.ieee.exponent += 2 * DBL_MANT_DIG;
+ u.ieee.exponent += 2 * DBL_MANT_DIG + 2;
else
- v.ieee.exponent += 2 * DBL_MANT_DIG;
- if (w.ieee.exponent <= 4 * DBL_MANT_DIG + 4)
+ v.ieee.exponent += 2 * DBL_MANT_DIG + 2;
+ if (w.ieee.exponent <= 4 * DBL_MANT_DIG + 6)
{
if (w.ieee.exponent)
- w.ieee.exponent += 2 * DBL_MANT_DIG;
+ w.ieee.exponent += 2 * DBL_MANT_DIG + 2;
else
- w.d *= 0x1p106;
+ w.d *= 0x1p108;
adjust = -1;
}
/* Otherwise x * y should just affect inexact
@@ -138,6 +177,9 @@ __fma (double x, double y, double z)
if (__builtin_expect ((x == 0 || y == 0) && z == 0, 0))
return x * y + z;
+ fenv_t env;
+ libc_feholdexcept_setround (&env, FE_TONEAREST);
+
/* Multiplication m1 + m2 = x * y using Dekker's algorithm. */
#define C ((1 << (DBL_MANT_DIG + 1) / 2) + 1)
double x1 = x * C;
@@ -156,9 +198,20 @@ __fma (double x, double y, double z)
t1 = m1 - t1;
t2 = z - t2;
double a2 = t1 + t2;
+ feclearexcept (FE_INEXACT);
- fenv_t env;
- libc_feholdexcept_setround (&env, FE_TOWARDZERO);
+ /* If the result is an exact zero, ensure it has the correct
+ sign. */
+ if (a1 == 0 && m2 == 0)
+ {
+ libc_feupdateenv (&env);
+ /* Ensure that round-to-nearest value of z + m1 is not
+ reused. */
+ asm volatile ("" : "=m" (z) : "m" (z));
+ return z + m1;
+ }
+
+ libc_fesetround (FE_TOWARDZERO);
/* Perform m2 + a2 addition with round to odd. */
u.d = a2 + m2;
@@ -194,39 +247,44 @@ __fma (double x, double y, double z)
/* If a1 + u.d is exact, the only rounding happens during
scaling down. */
if (j == 0)
- return v.d * 0x1p-106;
+ return v.d * 0x1p-108;
/* If result rounded to zero is not subnormal, no double
rounding will occur. */
- if (v.ieee.exponent > 106)
- return (a1 + u.d) * 0x1p-106;
- /* If v.d * 0x1p-106 with round to zero is a subnormal above
- or equal to DBL_MIN / 2, then v.d * 0x1p-106 shifts mantissa
+ if (v.ieee.exponent > 108)
+ return (a1 + u.d) * 0x1p-108;
+ /* If v.d * 0x1p-108 with round to zero is a subnormal above
+ or equal to DBL_MIN / 2, then v.d * 0x1p-108 shifts mantissa
down just by 1 bit, which means v.ieee.mantissa1 |= j would
change the round bit, not sticky or guard bit.
- v.d * 0x1p-106 never normalizes by shifting up,
+ v.d * 0x1p-108 never normalizes by shifting up,
so round bit plus sticky bit should be already enough
for proper rounding. */
- if (v.ieee.exponent == 106)
+ if (v.ieee.exponent == 108)
{
- /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding,
- v.ieee.mantissa1 & 1 is the round bit and j is our sticky
- bit. In round-to-nearest 001 rounds down like 00,
- 011 rounds up, even though 01 rounds down (thus we need
- to adjust), 101 rounds down like 10 and 111 rounds up
- like 11. */
- if ((v.ieee.mantissa1 & 3) == 1)
+ /* If the exponent would be in the normal range when
+ rounding to normal precision with unbounded exponent
+ range, the exact result is known and spurious underflows
+ must be avoided on systems detecting tininess after
+ rounding. */
+ if (TININESS_AFTER_ROUNDING)
{
- v.d *= 0x1p-106;
- if (v.ieee.negative)
- return v.d - 0x1p-1074 /* __DBL_DENORM_MIN__ */;
- else
- return v.d + 0x1p-1074 /* __DBL_DENORM_MIN__ */;
+ w.d = a1 + u.d;
+ if (w.ieee.exponent == 109)
+ return w.d * 0x1p-108;
}
- else
- return v.d * 0x1p-106;
+ /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding,
+ v.ieee.mantissa1 & 1 is the round bit and j is our sticky
+ bit. */
+ w.d = 0.0;
+ w.ieee.mantissa1 = ((v.ieee.mantissa1 & 3) << 1) | j;
+ w.ieee.negative = v.ieee.negative;
+ v.ieee.mantissa1 &= ~3U;
+ v.d *= 0x1p-108;
+ w.d *= 0x1p-2;
+ return v.d + w.d;
}
v.ieee.mantissa1 |= j;
- return v.d * 0x1p-106;
+ return v.d * 0x1p-108;
}
}
#ifndef __fma
diff --git a/libc/sysdeps/ieee754/ldbl-128/s_fmal.c b/libc/sysdeps/ieee754/ldbl-128/s_fmal.c
index 46b3d81ce..c9accad8a 100644
--- a/libc/sysdeps/ieee754/ldbl-128/s_fmal.c
+++ b/libc/sysdeps/ieee754/ldbl-128/s_fmal.c
@@ -22,6 +22,7 @@
#include <fenv.h>
#include <ieee754.h>
#include <math_private.h>
+#include <tininess.h>
/* This implementation uses rounding to odd to avoid problems with
double rounding. See a paper by Boldo and Melquiond:
@@ -55,17 +56,49 @@ __fmal (long double x, long double y, long double z)
underflows to 0. */
if (z == 0 && x != 0 && y != 0)
return x * y;
- /* If x or y or z is Inf/NaN, or if fma will certainly overflow,
- or if x * y is less than half of LDBL_DENORM_MIN,
- compute as x * y + z. */
+ /* If x or y or z is Inf/NaN, or if x * y is zero, compute as
+ x * y + z. */
if (u.ieee.exponent == 0x7fff
|| v.ieee.exponent == 0x7fff
|| w.ieee.exponent == 0x7fff
- || u.ieee.exponent + v.ieee.exponent
- > 0x7fff + IEEE854_LONG_DOUBLE_BIAS
- || u.ieee.exponent + v.ieee.exponent
- < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2)
+ || x == 0
+ || y == 0)
return x * y + z;
+ /* If fma will certainly overflow, compute as x * y. */
+ if (u.ieee.exponent + v.ieee.exponent
+ > 0x7fff + IEEE854_LONG_DOUBLE_BIAS)
+ return x * y;
+ /* If x * y is less than 1/4 of LDBL_DENORM_MIN, neither the
+ result nor whether there is underflow depends on its exact
+ value, only on its sign. */
+ if (u.ieee.exponent + v.ieee.exponent
+ < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2)
+ {
+ int neg = u.ieee.negative ^ v.ieee.negative;
+ long double tiny = neg ? -0x1p-16494L : 0x1p-16494L;
+ if (w.ieee.exponent >= 3)
+ return tiny + z;
+ /* Scaling up, adding TINY and scaling down produces the
+ correct result, because in round-to-nearest mode adding
+ TINY has no effect and in other modes double rounding is
+ harmless. But it may not produce required underflow
+ exceptions. */
+ v.d = z * 0x1p114L + tiny;
+ if (TININESS_AFTER_ROUNDING
+ ? v.ieee.exponent < 115
+ : (w.ieee.exponent == 0
+ || (w.ieee.exponent == 1
+ && w.ieee.negative != neg
+ && w.ieee.mantissa3 == 0
+ && w.ieee.mantissa2 == 0
+ && w.ieee.mantissa1 == 0
+ && w.ieee.mantissa0 == 0)))
+ {
+ volatile long double force_underflow = x * y;
+ (void) force_underflow;
+ }
+ return v.d * 0x1p-114L;
+ }
if (u.ieee.exponent + v.ieee.exponent
>= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG)
{
@@ -85,8 +118,17 @@ __fmal (long double x, long double y, long double z)
{
/* Similarly.
If z exponent is very large and x and y exponents are
- very small, it doesn't matter if we don't adjust it. */
- if (u.ieee.exponent > v.ieee.exponent)
+ very small, adjust them up to avoid spurious underflows,
+ rather than down. */
+ if (u.ieee.exponent + v.ieee.exponent
+ <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG)
+ {
+ if (u.ieee.exponent > v.ieee.exponent)
+ u.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
+ else
+ v.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
+ }
+ else if (u.ieee.exponent > v.ieee.exponent)
{
if (u.ieee.exponent > LDBL_MANT_DIG)
u.ieee.exponent -= LDBL_MANT_DIG;
@@ -116,15 +158,15 @@ __fmal (long double x, long double y, long double z)
<= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG) */
{
if (u.ieee.exponent > v.ieee.exponent)
- u.ieee.exponent += 2 * LDBL_MANT_DIG;
+ u.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
else
- v.ieee.exponent += 2 * LDBL_MANT_DIG;
- if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 4)
+ v.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
+ if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 6)
{
if (w.ieee.exponent)
- w.ieee.exponent += 2 * LDBL_MANT_DIG;
+ w.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
else
- w.d *= 0x1p226L;
+ w.d *= 0x1p228L;
adjust = -1;
}
/* Otherwise x * y should just affect inexact
@@ -139,6 +181,10 @@ __fmal (long double x, long double y, long double z)
if (__builtin_expect ((x == 0 || y == 0) && z == 0, 0))
return x * y + z;
+ fenv_t env;
+ feholdexcept (&env);
+ fesetround (FE_TONEAREST);
+
/* Multiplication m1 + m2 = x * y using Dekker's algorithm. */
#define C ((1LL << (LDBL_MANT_DIG + 1) / 2) + 1)
long double x1 = x * C;
@@ -157,9 +203,19 @@ __fmal (long double x, long double y, long double z)
t1 = m1 - t1;
t2 = z - t2;
long double a2 = t1 + t2;
+ feclearexcept (FE_INEXACT);
+
+ /* If the result is an exact zero, ensure it has the correct
+ sign. */
+ if (a1 == 0 && m2 == 0)
+ {
+ feupdateenv (&env);
+ /* Ensure that round-to-nearest value of z + m1 is not
+ reused. */
+ asm volatile ("" : "=m" (z) : "m" (z));
+ return z + m1;
+ }
- fenv_t env;
- feholdexcept (&env);
fesetround (FE_TOWARDZERO);
/* Perform m2 + a2 addition with round to odd. */
u.d = a2 + m2;
@@ -195,39 +251,44 @@ __fmal (long double x, long double y, long double z)
/* If a1 + u.d is exact, the only rounding happens during
scaling down. */
if (j == 0)
- return v.d * 0x1p-226L;
+ return v.d * 0x1p-228L;
/* If result rounded to zero is not subnormal, no double
rounding will occur. */
- if (v.ieee.exponent > 226)
- return (a1 + u.d) * 0x1p-226L;
- /* If v.d * 0x1p-226L with round to zero is a subnormal above
- or equal to LDBL_MIN / 2, then v.d * 0x1p-226L shifts mantissa
+ if (v.ieee.exponent > 228)
+ return (a1 + u.d) * 0x1p-228L;
+ /* If v.d * 0x1p-228L with round to zero is a subnormal above
+ or equal to LDBL_MIN / 2, then v.d * 0x1p-228L shifts mantissa
down just by 1 bit, which means v.ieee.mantissa3 |= j would
change the round bit, not sticky or guard bit.
- v.d * 0x1p-226L never normalizes by shifting up,
+ v.d * 0x1p-228L never normalizes by shifting up,
so round bit plus sticky bit should be already enough
for proper rounding. */
- if (v.ieee.exponent == 226)
+ if (v.ieee.exponent == 228)
{
- /* v.ieee.mantissa3 & 2 is LSB bit of the result before rounding,
- v.ieee.mantissa3 & 1 is the round bit and j is our sticky
- bit. In round-to-nearest 001 rounds down like 00,
- 011 rounds up, even though 01 rounds down (thus we need
- to adjust), 101 rounds down like 10 and 111 rounds up
- like 11. */
- if ((v.ieee.mantissa3 & 3) == 1)
+ /* If the exponent would be in the normal range when
+ rounding to normal precision with unbounded exponent
+ range, the exact result is known and spurious underflows
+ must be avoided on systems detecting tininess after
+ rounding. */
+ if (TININESS_AFTER_ROUNDING)
{
- v.d *= 0x1p-226L;
- if (v.ieee.negative)
- return v.d - 0x1p-16494L /* __LDBL_DENORM_MIN__ */;
- else
- return v.d + 0x1p-16494L /* __LDBL_DENORM_MIN__ */;
+ w.d = a1 + u.d;
+ if (w.ieee.exponent == 229)
+ return w.d * 0x1p-228L;
}
- else
- return v.d * 0x1p-226L;
+ /* v.ieee.mantissa3 & 2 is LSB bit of the result before rounding,
+ v.ieee.mantissa3 & 1 is the round bit and j is our sticky
+ bit. */
+ w.d = 0.0L;
+ w.ieee.mantissa3 = ((v.ieee.mantissa3 & 3) << 1) | j;
+ w.ieee.negative = v.ieee.negative;
+ v.ieee.mantissa3 &= ~3U;
+ v.d *= 0x1p-228L;
+ w.d *= 0x1p-2L;
+ return v.d + w.d;
}
v.ieee.mantissa3 |= j;
- return v.d * 0x1p-226L;
+ return v.d * 0x1p-228L;
}
}
weak_alias (__fmal, fmal)
diff --git a/libc/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c b/libc/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
index fe5c8bd8d..3e0535561 100644
--- a/libc/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
+++ b/libc/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
@@ -65,7 +65,8 @@ __ieee754_atan2l(long double y, long double x)
if(((ix)>0x7ff0000000000000LL)||
((iy)>0x7ff0000000000000LL)) /* x or y is NaN */
return x+y;
- if(((hx-0x3ff0000000000000LL))==0) return __atanl(y); /* x=1.0L */
+ if(((hx-0x3ff0000000000000LL))==0
+ && (lx&0x7fffffffffffffff)==0) return __atanl(y); /* x=1.0L */
m = ((hy>>63)&1)|((hx>>62)&2); /* 2*sign(x)+sign(y) */
/* when y = 0 */
diff --git a/libc/sysdeps/ieee754/ldbl-96/s_fma.c b/libc/sysdeps/ieee754/ldbl-96/s_fma.c
index 001d8063d..bf2d794c9 100644
--- a/libc/sysdeps/ieee754/ldbl-96/s_fma.c
+++ b/libc/sysdeps/ieee754/ldbl-96/s_fma.c
@@ -42,6 +42,10 @@ __fma (double x, double y, double z)
if (__builtin_expect ((x == 0 || y == 0) && z == 0, 0))
return x * y + z;
+ fenv_t env;
+ feholdexcept (&env);
+ fesetround (FE_TONEAREST);
+
/* Multiplication m1 + m2 = x * y using Dekker's algorithm. */
#define C ((1ULL << (LDBL_MANT_DIG + 1) / 2) + 1)
long double x1 = (long double) x * C;
@@ -60,9 +64,19 @@ __fma (double x, double y, double z)
t1 = m1 - t1;
t2 = z - t2;
long double a2 = t1 + t2;
+ feclearexcept (FE_INEXACT);
+
+ /* If the result is an exact zero, ensure it has the correct
+ sign. */
+ if (a1 == 0 && m2 == 0)
+ {
+ feupdateenv (&env);
+ /* Ensure that round-to-nearest value of z + m1 is not
+ reused. */
+ asm volatile ("" : "=m" (z) : "m" (z));
+ return z + m1;
+ }
- fenv_t env;
- feholdexcept (&env);
fesetround (FE_TOWARDZERO);
/* Perform m2 + a2 addition with round to odd. */
a2 = a2 + m2;
diff --git a/libc/sysdeps/ieee754/ldbl-96/s_fmal.c b/libc/sysdeps/ieee754/ldbl-96/s_fmal.c
index d12512428..c86dff6f8 100644
--- a/libc/sysdeps/ieee754/ldbl-96/s_fmal.c
+++ b/libc/sysdeps/ieee754/ldbl-96/s_fmal.c
@@ -22,6 +22,7 @@
#include <fenv.h>
#include <ieee754.h>
#include <math_private.h>
+#include <tininess.h>
/* This implementation uses rounding to odd to avoid problems with
double rounding. See a paper by Boldo and Melquiond:
@@ -55,17 +56,47 @@ __fmal (long double x, long double y, long double z)
underflows to 0. */
if (z == 0 && x != 0 && y != 0)
return x * y;
- /* If x or y or z is Inf/NaN, or if fma will certainly overflow,
- or if x * y is less than half of LDBL_DENORM_MIN,
- compute as x * y + z. */
+ /* If x or y or z is Inf/NaN, or if x * y is zero, compute as
+ x * y + z. */
if (u.ieee.exponent == 0x7fff
|| v.ieee.exponent == 0x7fff
|| w.ieee.exponent == 0x7fff
- || u.ieee.exponent + v.ieee.exponent
- > 0x7fff + IEEE854_LONG_DOUBLE_BIAS
- || u.ieee.exponent + v.ieee.exponent
- < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2)
+ || x == 0
+ || y == 0)
return x * y + z;
+ /* If fma will certainly overflow, compute as x * y. */
+ if (u.ieee.exponent + v.ieee.exponent
+ > 0x7fff + IEEE854_LONG_DOUBLE_BIAS)
+ return x * y;
+ /* If x * y is less than 1/4 of LDBL_DENORM_MIN, neither the
+ result nor whether there is underflow depends on its exact
+ value, only on its sign. */
+ if (u.ieee.exponent + v.ieee.exponent
+ < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2)
+ {
+ int neg = u.ieee.negative ^ v.ieee.negative;
+ long double tiny = neg ? -0x1p-16445L : 0x1p-16445L;
+ if (w.ieee.exponent >= 3)
+ return tiny + z;
+ /* Scaling up, adding TINY and scaling down produces the
+ correct result, because in round-to-nearest mode adding
+ TINY has no effect and in other modes double rounding is
+ harmless. But it may not produce required underflow
+ exceptions. */
+ v.d = z * 0x1p65L + tiny;
+ if (TININESS_AFTER_ROUNDING
+ ? v.ieee.exponent < 66
+ : (w.ieee.exponent == 0
+ || (w.ieee.exponent == 1
+ && w.ieee.negative != neg
+ && w.ieee.mantissa1 == 0
+ && w.ieee.mantissa0 == 0x80000000)))
+ {
+ volatile long double force_underflow = x * y;
+ (void) force_underflow;
+ }
+ return v.d * 0x1p-65L;
+ }
if (u.ieee.exponent + v.ieee.exponent
>= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG)
{
@@ -85,8 +116,17 @@ __fmal (long double x, long double y, long double z)
{
/* Similarly.
If z exponent is very large and x and y exponents are
- very small, it doesn't matter if we don't adjust it. */
- if (u.ieee.exponent > v.ieee.exponent)
+ very small, adjust them up to avoid spurious underflows,
+ rather than down. */
+ if (u.ieee.exponent + v.ieee.exponent
+ <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG)
+ {
+ if (u.ieee.exponent > v.ieee.exponent)
+ u.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
+ else
+ v.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
+ }
+ else if (u.ieee.exponent > v.ieee.exponent)
{
if (u.ieee.exponent > LDBL_MANT_DIG)
u.ieee.exponent -= LDBL_MANT_DIG;
@@ -116,15 +156,15 @@ __fmal (long double x, long double y, long double z)
<= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG) */
{
if (u.ieee.exponent > v.ieee.exponent)
- u.ieee.exponent += 2 * LDBL_MANT_DIG;
+ u.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
else
- v.ieee.exponent += 2 * LDBL_MANT_DIG;
- if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 4)
+ v.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
+ if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 6)
{
if (w.ieee.exponent)
- w.ieee.exponent += 2 * LDBL_MANT_DIG;
+ w.ieee.exponent += 2 * LDBL_MANT_DIG + 2;
else
- w.d *= 0x1p128L;
+ w.d *= 0x1p130L;
adjust = -1;
}
/* Otherwise x * y should just affect inexact
@@ -139,6 +179,10 @@ __fmal (long double x, long double y, long double z)
if (__builtin_expect ((x == 0 || y == 0) && z == 0, 0))
return x * y + z;
+ fenv_t env;
+ feholdexcept (&env);
+ fesetround (FE_TONEAREST);
+
/* Multiplication m1 + m2 = x * y using Dekker's algorithm. */
#define C ((1LL << (LDBL_MANT_DIG + 1) / 2) + 1)
long double x1 = x * C;
@@ -157,9 +201,19 @@ __fmal (long double x, long double y, long double z)
t1 = m1 - t1;
t2 = z - t2;
long double a2 = t1 + t2;
+ feclearexcept (FE_INEXACT);
+
+ /* If the result is an exact zero, ensure it has the correct
+ sign. */
+ if (a1 == 0 && m2 == 0)
+ {
+ feupdateenv (&env);
+ /* Ensure that round-to-nearest value of z + m1 is not
+ reused. */
+ asm volatile ("" : "=m" (z) : "m" (z));
+ return z + m1;
+ }
- fenv_t env;
- feholdexcept (&env);
fesetround (FE_TOWARDZERO);
/* Perform m2 + a2 addition with round to odd. */
u.d = a2 + m2;
@@ -195,39 +249,44 @@ __fmal (long double x, long double y, long double z)
/* If a1 + u.d is exact, the only rounding happens during
scaling down. */
if (j == 0)
- return v.d * 0x1p-128L;
+ return v.d * 0x1p-130L;
/* If result rounded to zero is not subnormal, no double
rounding will occur. */
- if (v.ieee.exponent > 128)
- return (a1 + u.d) * 0x1p-128L;
- /* If v.d * 0x1p-128L with round to zero is a subnormal above
- or equal to LDBL_MIN / 2, then v.d * 0x1p-128L shifts mantissa
+ if (v.ieee.exponent > 130)
+ return (a1 + u.d) * 0x1p-130L;
+ /* If v.d * 0x1p-130L with round to zero is a subnormal above
+ or equal to LDBL_MIN / 2, then v.d * 0x1p-130L shifts mantissa
down just by 1 bit, which means v.ieee.mantissa1 |= j would
change the round bit, not sticky or guard bit.
- v.d * 0x1p-128L never normalizes by shifting up,
+ v.d * 0x1p-130L never normalizes by shifting up,
so round bit plus sticky bit should be already enough
for proper rounding. */
- if (v.ieee.exponent == 128)
+ if (v.ieee.exponent == 130)
{
- /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding,
- v.ieee.mantissa1 & 1 is the round bit and j is our sticky
- bit. In round-to-nearest 001 rounds down like 00,
- 011 rounds up, even though 01 rounds down (thus we need
- to adjust), 101 rounds down like 10 and 111 rounds up
- like 11. */
- if ((v.ieee.mantissa1 & 3) == 1)
+ /* If the exponent would be in the normal range when
+ rounding to normal precision with unbounded exponent
+ range, the exact result is known and spurious underflows
+ must be avoided on systems detecting tininess after
+ rounding. */
+ if (TININESS_AFTER_ROUNDING)
{
- v.d *= 0x1p-128L;
- if (v.ieee.negative)
- return v.d - 0x1p-16445L /* __LDBL_DENORM_MIN__ */;
- else
- return v.d + 0x1p-16445L /* __LDBL_DENORM_MIN__ */;
+ w.d = a1 + u.d;
+ if (w.ieee.exponent == 131)
+ return w.d * 0x1p-130L;
}
- else
- return v.d * 0x1p-128L;
+ /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding,
+ v.ieee.mantissa1 & 1 is the round bit and j is our sticky
+ bit. */
+ w.d = 0.0L;
+ w.ieee.mantissa1 = ((v.ieee.mantissa1 & 3) << 1) | j;
+ w.ieee.negative = v.ieee.negative;
+ v.ieee.mantissa1 &= ~3U;
+ v.d *= 0x1p-130L;
+ w.d *= 0x1p-2L;
+ return v.d + w.d;
}
v.ieee.mantissa1 |= j;
- return v.d * 0x1p-128L;
+ return v.d * 0x1p-130L;
}
}
weak_alias (__fmal, fmal)
diff --git a/libc/sysdeps/mach/hurd/Makefile b/libc/sysdeps/mach/hurd/Makefile
index 107eaafb0..ed77903a4 100644
--- a/libc/sysdeps/mach/hurd/Makefile
+++ b/libc/sysdeps/mach/hurd/Makefile
@@ -167,11 +167,15 @@ $(objpfx)librtld.map: $(rpcuserlibs:.so=_pic.a)
CFLAGS-dl-load.c = -DEXTERNAL_MAP_FROM_FD
endif
-# We need these libs to link static programs in the libc source tree, too.
-link-libc-static := -Wl,-\( \
+# Override the generic Makeconfig values so we link against the RPC libs.
+link-libc-static := -Wl,--start-group \
$(patsubst %,$(common-objpfx)%.a,\
libc mach/libmachuser hurd/libhurduser) \
- $(static-gnulib) -Wl,-\)
+ $(static-gnulib) -Wl,--end-group
+link-libc-static-tests := -Wl,--start-group \
+ $(patsubst %,$(common-objpfx)%.a,\
+ libc mach/libmachuser hurd/libhurduser) \
+ $(static-gnulib-tests) -Wl,--end-group
ifeq ($(subdir),csu)
diff --git a/libc/sysdeps/mach/hurd/bits/errno.h b/libc/sysdeps/mach/hurd/bits/errno.h
index a7d57adeb..3b6fe76b3 100644
--- a/libc/sysdeps/mach/hurd/bits/errno.h
+++ b/libc/sysdeps/mach/hurd/bits/errno.h
@@ -212,8 +212,8 @@ enum __error_t_codes
#define EPROTO _HURD_ERRNO (116)/* Protocol error */
ETIME = _HURD_ERRNO (117),
#define ETIME _HURD_ERRNO (117)/* Timer expired */
- ECANCELED = _HURD_ERRNO (118),
-#define ECANCELED _HURD_ERRNO (118)/* Operation canceled */
+ ECANCELED = _HURD_ERRNO (119),
+#define ECANCELED _HURD_ERRNO (119)/* Operation canceled */
/* Errors from <mach/message.h>. */
EMACH_SEND_IN_PROGRESS = 0x10000001,
@@ -297,7 +297,7 @@ enum __error_t_codes
};
-#define _HURD_ERRNOS 119
+#define _HURD_ERRNOS 120
/* User-visible type of error codes. It is ok to use `int' or
`kern_return_t' for these, but with `error_t' the debugger prints
diff --git a/libc/sysdeps/mach/hurd/bits/param.h b/libc/sysdeps/mach/hurd/bits/param.h
index d52c1edcb..2f53f686d 100644
--- a/libc/sysdeps/mach/hurd/bits/param.h
+++ b/libc/sysdeps/mach/hurd/bits/param.h
@@ -83,5 +83,3 @@
#define FSHIFT 11 /* Bits to right of fixed binary point. */
#define FSCALE (1<<FSHIFT)
-
-#endif /* sys/param.h */
diff --git a/libc/sysdeps/mach/hurd/fdatasync.c b/libc/sysdeps/mach/hurd/fdatasync.c
index 19d7a4a58..22c1d103d 100644
--- a/libc/sysdeps/mach/hurd/fdatasync.c
+++ b/libc/sysdeps/mach/hurd/fdatasync.c
@@ -26,6 +26,12 @@ fdatasync (int fd)
{
error_t err = HURD_DPORT_USE (fd, __file_sync (port, 1, 1));
if (err)
- return __hurd_dfail (fd, err);
+ {
+ if (err == EOPNOTSUPP)
+ /* If the file descriptor does not support sync, return EINVAL
+ as POSIX specifies. */
+ err = EINVAL;
+ return __hurd_dfail (fd, err);
+ }
return 0;
}
diff --git a/libc/sysdeps/mach/hurd/fsync.c b/libc/sysdeps/mach/hurd/fsync.c
index a474c8a35..fe3e044a3 100644
--- a/libc/sysdeps/mach/hurd/fsync.c
+++ b/libc/sysdeps/mach/hurd/fsync.c
@@ -27,6 +27,12 @@ fsync (fd)
{
error_t err = HURD_DPORT_USE (fd, __file_sync (port, 1, 0));
if (err)
- return __hurd_dfail (fd, err);
+ {
+ if (err == EOPNOTSUPP)
+ /* If the file descriptor does not support sync, return EINVAL
+ as POSIX specifies. */
+ err = EINVAL;
+ return __hurd_dfail (fd, err);
+ }
return 0;
}
diff --git a/libc/sysdeps/mach/hurd/i386/____longjmp_chk.S b/libc/sysdeps/mach/hurd/i386/____longjmp_chk.S
index f499fbd1e..39282d317 100644
--- a/libc/sysdeps/mach/hurd/i386/____longjmp_chk.S
+++ b/libc/sysdeps/mach/hurd/i386/____longjmp_chk.S
@@ -52,8 +52,10 @@ ENTRY (____longjmp_chk)
/* Get the stack pointer. */
movl (JB_SP*4)(%ecx), %edi
cfi_undefined(%edi)
+#ifdef PTR_DEMANGLE
PTR_DEMANGLE (%edx)
PTR_DEMANGLE (%edi)
+#endif
cmpl %edi, %esp
/* Jumping to a higher-address frame is always allowed. */
diff --git a/libc/sysdeps/mach/hurd/powerpc/bits/sigcontext.h b/libc/sysdeps/mach/hurd/powerpc/bits/sigcontext.h
deleted file mode 100644
index 6e4860517..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/bits/sigcontext.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Machine-dependent signal context structure for GNU Hurd. PowerPC version.
- Copyright (C) 2001,02 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/>. */
-
-#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
-# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
-#endif
-
-#ifndef sc_pc
-
-/* Signal handlers are actually called:
- void handler (int sig, int code, struct sigcontext *scp); */
-
-/* State of this thread when the signal was taken. */
-struct sigcontext
- {
- /* These first members are machine-independent. */
-
- int sc_onstack; /* Nonzero if running on sigstack. */
- __sigset_t sc_mask; /* Blocked signals to restore. */
-
- /* MiG reply port this thread is using. */
- unsigned int sc_reply_port;
-
- /* Port this thread is doing an interruptible RPC on. */
- unsigned int sc_intr_port;
-
- /* Error code associated with this signal (interpreted as `error_t'). */
- int sc_error;
-
- /* All following members are machine-dependent. The rest of this
- structure is written to be laid out identically to:
- {
- struct ppc_thread_state basic;
- struct ppc_exc_state exc;
- struct ppc_float_state fpu;
- }
- trampoline.c knows this, so it must be changed if this changes. */
-
-#define sc_ppc_thread_state sc_srr0 /* Beginning of correspondence. */
-#define sc_pc sc_srr0 /* For sysdeps/generic/profil-counter.h. */
- unsigned int sc_srr0;
- unsigned int sc_srr1;
- unsigned int sc_gprs[32];
- unsigned int sc_cr;
- unsigned int sc_xer;
- unsigned int sc_lr;
- unsigned int sc_ctr;
- unsigned int sc_mq;
- unsigned int sc_ts_pad;
-
-#define sc_ppc_exc_state sc_dar
- unsigned int sc_dar;
- unsigned int sc_dsisr;
- unsigned int sc_exception;
- unsigned int sc_es_pad0;
- unsigned int sc_es_pad1[4];
-
-#define sc_ppc_float_state sc_fprs[0]
- double sc_fprs[32];
- unsigned int sc_fpscr_pad;
- unsigned int sc_fpscr;
- };
-
-#endif /* sc_pc */
diff --git a/libc/sysdeps/mach/hurd/powerpc/exc2signal.c b/libc/sysdeps/mach/hurd/powerpc/exc2signal.c
deleted file mode 100644
index 05df67038..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/exc2signal.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Translate Mach exception codes into signal numbers. PowerPC version.
- Copyright (C) 1991,92,94,96,97,2001 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 <hurd.h>
-#include <hurd/signal.h>
-#include <mach/exception.h>
-
-/* Translate the Mach exception codes, as received in an `exception_raise' RPC,
- into a signal number and signal subcode. */
-
-void
-_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo)
-{
- detail->error = 0;
-
- switch (detail->exc)
- {
- default:
- *signo = SIGIOT;
- detail->code = detail->exc;
- break;
-
- case EXC_BAD_ACCESS:
- if (detail->exc_code == KERN_PROTECTION_FAILURE)
- *signo = SIGSEGV;
- else
- *signo = SIGBUS;
- detail->code = detail->exc_subcode;
- detail->error = detail->exc_code;
- break;
-
- /* XXX there has got to be something more here */
-
- case EXC_BAD_INSTRUCTION:
- *signo = SIGILL;
- detail->code = 0;
- break;
-
- case EXC_ARITHMETIC:
- *signo = SIGFPE;
- detail->code = 0;
- break;
-
- case EXC_EMULATION:
- *signo = SIGEMT;
- detail->code = 0;
- break;
-
- case EXC_SOFTWARE:
- *signo = SIGEMT;
- detail->code = 0;
- break;
-
- case EXC_BREAKPOINT:
- *signo = SIGTRAP;
- detail->code = 0;
- }
-}
diff --git a/libc/sysdeps/mach/hurd/powerpc/init-first.c b/libc/sysdeps/mach/hurd/powerpc/init-first.c
deleted file mode 100644
index 9531b5a6e..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/init-first.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/* Initialization code run first thing by the ELF startup code. PowerPC/Hurd.
- 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
- 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 <ctype.h>
-#include <hurd.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <sysdep.h>
-#include <set-hooks.h>
-#include "hurdstartup.h"
-#include "hurdmalloc.h" /* XXX */
-
-extern void __mach_init (void);
-extern void __init_misc (int, char **, char **);
-#ifdef USE_NONOPTION_FLAGS
-extern void __getopt_clean_environment (char **);
-#endif
-#ifndef SHARED
-extern void _dl_non_dynamic_init (void) internal_function;
-#endif
-extern void __libc_global_ctors (void);
-
-unsigned int __hurd_threadvar_max;
-unsigned long int __hurd_threadvar_stack_offset;
-unsigned long int __hurd_threadvar_stack_mask;
-
-#ifndef SHARED
-int __libc_enable_secure;
-#endif
-int __libc_multiple_libcs attribute_hidden = 1;
-
-extern int __libc_argc attribute_hidden;
-extern char **__libc_argv attribute_hidden;
-extern char **_dl_argv;
-
-void *(*_cthread_init_routine) (void); /* Returns new SP to use. */
-void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__));
-
-#ifndef SHARED
-static unsigned int return_address; /* Make init1 return to _start. */
-#endif
-
-/* Things that want to be run before _hurd_init or much anything else.
- Importantly, these are called before anything tries to use malloc. */
-DEFINE_HOOK (_hurd_preinit_hook, (void));
-
-
-/* We call this once the Hurd magic is all set up and we are ready to be a
- Posixoid program. This does the same things the generic version does. */
-static void internal_function
-posixland_init (int argc, char **argv, char **envp)
-{
- asm ("li 3,0xbb; .long 0");
- __libc_argc = argc;
- __libc_argv = argv;
- __environ = envp;
-
-#ifndef SHARED
- _dl_non_dynamic_init ();
-#endif
- __init_misc (argc, argv, envp);
-
-#ifdef USE_NONOPTION_FLAGS
- /* This is a hack to make the special getopt in GNU libc working. */
- __getopt_clean_environment (__environ);
-#endif
-
- /* Initialize ctype data. */
- __ctype_init ();
-
-#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS
- __libc_global_ctors ();
-#endif
-}
-
-
-static void
-init1 (int *data)
-{
- int argc = *data;
- char **argv = (char **) &data[1];
- char **envp = &argv[argc + 1];
- struct hurd_startup_data *d;
-
- while (*envp)
- ++envp;
- d = (void *) ++envp;
-
- /* If we are the bootstrap task started by the kernel,
- then after the environment pointers there is no Hurd
- data block; the argument strings start there. */
- /* OSF Mach starts the bootstrap task with argc == 0.
- XXX This fails if a non-bootstrap task gets started
- with argc == 0. */
- if (argc && (void *) d != argv[0])
- {
- _hurd_init_dtable = d->dtable;
- _hurd_init_dtablesize = d->dtablesize;
-
-#if 0 /* We can't free the old stack because it contains the argument strings. */
- {
- /* Check if the stack we are now on is different from
- the one described by _hurd_stack_{base,size}. */
-
- char dummy;
- const vm_address_t newsp = (vm_address_t) &dummy;
-
- if (d->stack_size != 0 && (newsp < d->stack_base ||
- newsp - d->stack_base > d->stack_size))
- /* The new stack pointer does not intersect with the
- stack the exec server set up for us, so free that stack. */
- __vm_deallocate (__mach_task_self (), d->stack_base, d->stack_size);
- }
-#endif
- }
-
- if (argc && (void *) d != argv[0] && (d->portarray || d->intarray))
- /* Initialize library data structures, start signal processing, etc. */
- _hurd_init (d->flags, argv,
- d->portarray, d->portarraysize,
- d->intarray, d->intarraysize);
-
-#ifndef SHARED
- __libc_enable_secure = d->flags & EXEC_SECURE;
-#endif
-}
-
-
-static inline void
-init (int *data)
-{
- int argc = *data;
- char **argv = (void *) (data + 1);
- char **envp = &argv[argc + 1];
- struct hurd_startup_data *d;
- unsigned long int threadvars[_HURD_THREADVAR_MAX];
-
- /* Provide temporary storage for thread-specific variables on the startup
- stack so the cthreads initialization code can use them for malloc et al,
- or so we can use malloc below for the real threadvars array. */
- memset (threadvars, 0, sizeof threadvars);
- __hurd_threadvar_stack_offset = (unsigned long int) threadvars;
-
- while (*envp)
- ++envp;
- d = (void *) ++envp;
-
- /* The user might have defined a value for this, to get more variables.
- Otherwise it will be zero on startup. We must make sure it is set
- properly before before cthreads initialization, so cthreads can know
- how much space to leave for thread variables. */
- if (__hurd_threadvar_max < _HURD_THREADVAR_MAX)
- __hurd_threadvar_max = _HURD_THREADVAR_MAX;
-
-
- /* After possibly switching stacks, call `init1' (above) with the user
- code as the return address, and the argument data immediately above
- that on the stack. */
-
- if (_cthread_init_routine)
- {
- /* Initialize cthreads, which will allocate us a new stack to run on. */
- void *newsp = (*_cthread_init_routine) ();
- struct hurd_startup_data *od;
-#ifdef SHARED
- void *oldsp;
- unsigned int i, data_offset;
-#endif
-
- /* Copy per-thread variables from that temporary
- area onto the new cthread stack. */
- memcpy (__hurd_threadvar_location_from_sp (0, newsp),
- threadvars, sizeof threadvars);
-
- /* Copy the argdata from the old stack to the new one. */
- newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data,
- (char *) d - (char *) data);
-
-#ifdef SHARED
- /* And readjust the dynamic linker's idea of where the argument
- vector lives. */
- assert (_dl_argv == argv);
- _dl_argv = (void *) ((int *) newsp + 1);
-#endif
-
- /* Set up the Hurd startup data block immediately following
- the argument and environment pointers on the new stack. */
- od = (newsp + ((char *) d - (char *) data));
- if (!argc || (void *) argv[0] == d)
- /* We were started up by the kernel with arguments on the stack.
- There is no Hurd startup data, so zero the block. */
- memset (od, 0, sizeof *od);
- else
- /* Copy the Hurd startup data block to the new stack. */
- *od = *d;
-
-#ifndef SHARED
- asm ("mtlr %0; mr 1,%1; li 0,0; mr 3,%1; stwu 0,-16(1); b init1"
- : : "r" (return_address), "r" (newsp));
- (void) init1; /* To avoid `defined but not used' warning. */
- /* NOTREACHED */
-#else
- /* Copy the rest of the stack. Don't call a function to do that,
- because that will alter the current stack. */
- asm ("mr %0,1" : "=r" (oldsp));
- data_offset = (unsigned int) data - (unsigned int) oldsp;
- newsp -= data_offset;
- for (i = 0; i < data_offset / 4; i++)
- ((unsigned int *)newsp)[i] = ((unsigned int *)oldsp)[i];
-
- /* Relocate stack frames. */
- {
- unsigned int *oldframe0 = (unsigned int *)oldsp;
- unsigned int *oldframe1 = *(unsigned int **)oldframe0;
- unsigned int *oldframe2 = *(unsigned int **)oldframe1;
- unsigned int *newframe0 = (unsigned int *)newsp;
- unsigned int *newframe1 = newframe0 + (unsigned int)(oldframe1 - oldframe0);
- unsigned int *newframe2 = newframe1 + (unsigned int)(oldframe2 - oldframe1);
- *(unsigned int **)newframe0 = newframe1;
- *(unsigned int **)newframe1 = newframe2;
- }
-
- asm ("mr 1,%0; mr 31,%0" : : "r" (newsp)); /* XXX */
- init1 (newsp + data_offset);
-#endif
- }
- else
- {
- /* We are not using cthreads, so we will have just a single allocated
- area for the per-thread variables of the main user thread. */
- unsigned long int *array;
- unsigned int i;
-
- array = malloc (__hurd_threadvar_max * sizeof (unsigned long int));
- if (array == NULL)
- __libc_fatal ("Can't allocate single-threaded thread variables.");
-
- /* Copy per-thread variables from the temporary array into the
- newly malloc'd space. */
- memcpy (array, threadvars, sizeof threadvars);
- __hurd_threadvar_stack_offset = (unsigned long int) array;
- for (i = _HURD_THREADVAR_MAX; i < __hurd_threadvar_max; ++i)
- array[i] = 0;
-
-#ifndef SHARED
- asm ("mr 3,%0; mtlr %1; addi 1,3,-16; b init1"
- : : "r" (data), "r" (return_address));
- /* NOTREACHED */
-#else
- init1 (data);
-#endif
- }
-}
-
-
-/* Do the first essential initializations that must precede all else. */
-static inline void
-first_init (void)
-{
- /* Initialize data structures so we can do RPCs. */
- __mach_init ();
-
- RUN_HOOK (_hurd_preinit_hook, ());
-}
-
-#ifdef SHARED
-/* This function is called specially by the dynamic linker to do early
- initialization of the shared C library before normal initializers
- expecting a Posixoid environment can run. It gets called with the
- stack set up just as the user will see it, so it can switch stacks. */
-
-void
-_dl_init_first (int argc, ...)
-{
- asm ("li 3,0xaa; .long 0");
- first_init ();
-
- init (&argc);
-}
-#endif
-
-
-#ifdef SHARED
-/* The regular posixland initialization is what goes into libc's
- normal initializer. */
-/* NOTE! The linker notices the magical name `_init' and sets the DT_INIT
- pointer in the dynamic section based solely on that. It is convention
- for this function to be in the `.init' section, but the symbol name is
- the only thing that really matters!! */
-strong_alias (posixland_init, _init);
-
-
-void
-__libc_init_first (int argc, char **argv, char **envp)
-{
- /* Everything was done in the shared library initializer, _init. */
-}
-#else
-strong_alias (posixland_init, __libc_init_first);
-
-
-void
-_hurd_stack_setup (int *data)
-{
- register unsigned int address;
- asm ("mflr %0" : "=r" (address));
- return_address = address;
-
- first_init ();
-
- _hurd_startup ((void **) data, &init);
-}
-#endif
-
-
-/* This function is defined here so that if this file ever gets into
- ld.so we will get a link error. Having this file silently included
- in ld.so causes disaster, because the _init definition above will
- cause ld.so to gain an init function, which is not a cool thing. */
-
-void
-_dl_start (void)
-{
- abort ();
-}
diff --git a/libc/sysdeps/mach/hurd/powerpc/intr-msg.h b/libc/sysdeps/mach/hurd/powerpc/intr-msg.h
deleted file mode 100644
index c567217c9..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/intr-msg.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Machine-dependent details of interruptible RPC messaging. PowerPC version.
- Copyright (C) 1995,96,97,99,2001 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/>. */
-
-#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify) \
-({ \
- error_t err; \
- asm (".globl _hurd_intr_rpc_msg_do_trap\n" \
- ".globl _hurd_intr_rpc_msg_in_trap\n" \
- " mr 3, %1\n" \
- " mr 4, %2\n" \
- " mr 5, %3\n" \
- " mr 6, %4\n" \
- " mr 7, %5\n" \
- " mr 8, %6\n" \
- " mr 9, %7\n" \
- " li 0, -25\n" \
- "_hurd_intr_rpc_msg_do_trap: sc\n" \
- "_hurd_intr_rpc_msg_in_trap: mr 3, %0\n" \
- : "=r" (err) \
- : "r" (msg), "r" (option), "r" (send_size), "r" (rcv_size), \
- "r" (rcv_name), "r" (timeout), "r" (notify) \
- : "0", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"); \
- err; \
-})
-
-static void inline
-INTR_MSG_BACK_OUT (struct ppc_thread_state *state)
-{
- return;
-}
-
-#include "hurdfault.h"
-
-/* This cannot be an inline function because it calls setjmp. */
-#define SYSCALL_EXAMINE(state, callno) \
-({ \
- u_int32_t *p = (void *) ((state)->srr0 - 4); \
- int result; \
- _hurdsig_catch_memory_fault (p) ? 0 : \
- ({ \
- if (result = (*p == 0x44000002)) \
- /* The PC is just after an `sc' instruction. \
- This is a system call in progress; %r0 holds the call number. */ \
- *(callno) = (state)->r0; \
- _hurdsig_end_catch_fault (); \
- result; \
- }); \
-})
-
-struct mach_msg_trap_args
- {
- /* This is the order of arguments to mach_msg_trap. */
- mach_msg_header_t *msg;
- mach_msg_option_t option;
- mach_msg_size_t send_size;
- mach_msg_size_t rcv_size;
- mach_port_t rcv_name;
- mach_msg_timeout_t timeout;
- mach_port_t notify;
- };
-
-/* This cannot be an inline function because it calls setjmp. */
-#define MSG_EXAMINE(state, msgid, rcv_name, send_name, option, timeout) \
-({ \
- mach_msg_header_t *msg = (mach_msg_header_t *) (state)->r3; \
- *(option) = (mach_msg_option_t) (state)->r4; \
- *(rcv_name) = (mach_port_t) (state)->r7; \
- *(timeout) = (mach_msg_timeout_t) (state)->r8; \
- (msg == 0) ? \
- ({ \
- *(send_name) = MACH_PORT_NULL; \
- *(msgid) = 0; \
- 0; \
- }) : \
- (_hurdsig_catch_memory_fault (msg) ? -1 : \
- ({ \
- *(send_name) = msg->msgh_remote_port; \
- *(msgid) = msg->msgh_id; \
- _hurdsig_end_catch_fault (); \
- 0; \
- }) \
- ); \
-})
diff --git a/libc/sysdeps/mach/hurd/powerpc/longjmp-ts.c b/libc/sysdeps/mach/hurd/powerpc/longjmp-ts.c
deleted file mode 100644
index 88f2f6a14..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/longjmp-ts.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Perform a `longjmp' on a Mach thread_state. PowerPC version.
- Copyright (C) 1991,94,95,97,2001, 2006 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 <hurd/signal.h>
-#include <setjmp.h>
-#include <jmpbuf-offsets.h>
-#include <mach/thread_status.h>
-
-
-/* Set up STATE to do the equivalent of `longjmp (ENV, VAL);'. */
-
-void
-_hurd_longjmp_thread_state (void *state, jmp_buf env, int val)
-{
- struct ppc_thread_state *ts = state;
-
- /* XXX should we set up the FPRs as well? And how? */
- ts->r1 = env[0].__jmpbuf[JB_GPR1];
- ts->r2 = env[0].__jmpbuf[JB_GPR2];
- ts->r14 = env[0].__jmpbuf[JB_GPRS+0];
- ts->r15 = env[0].__jmpbuf[JB_GPRS+1];
- ts->r16 = env[0].__jmpbuf[JB_GPRS+2];
- ts->r17 = env[0].__jmpbuf[JB_GPRS+3];
- ts->r18 = env[0].__jmpbuf[JB_GPRS+4];
- ts->r19 = env[0].__jmpbuf[JB_GPRS+5];
- ts->r20 = env[0].__jmpbuf[JB_GPRS+6];
- ts->r21 = env[0].__jmpbuf[JB_GPRS+7];
- ts->r22 = env[0].__jmpbuf[JB_GPRS+8];
- ts->r23 = env[0].__jmpbuf[JB_GPRS+9];
- ts->r24 = env[0].__jmpbuf[JB_GPRS+10];
- ts->r25 = env[0].__jmpbuf[JB_GPRS+11];
- ts->r26 = env[0].__jmpbuf[JB_GPRS+12];
- ts->r27 = env[0].__jmpbuf[JB_GPRS+13];
- ts->r28 = env[0].__jmpbuf[JB_GPRS+14];
- ts->r29 = env[0].__jmpbuf[JB_GPRS+15];
- ts->r30 = env[0].__jmpbuf[JB_GPRS+16];
- ts->r31 = env[0].__jmpbuf[JB_GPRS+17];
- ts->cr = env[0].__jmpbuf[JB_CR];
- ts->r3 = val ?: 1;
- ts->srr0 = ts->lr = env[0].__jmpbuf[JB_LR];
-}
diff --git a/libc/sysdeps/mach/hurd/powerpc/register-dump.h b/libc/sysdeps/mach/hurd/powerpc/register-dump.h
deleted file mode 100644
index 80d545e48..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/register-dump.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Dump registers. PowerPC/Hurd version.
- Copyright (C) 1998, 2001, 2006 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 <sys/uio.h>
-#include <_itoa.h>
-
-/* This prints out the information in the following form: */
-static const char dumpform[] = "\
-Register dump:\n\
-fp0-3: 0000030%0000031% 0000032%0000033% 0000034%0000035% 0000036%0000037%\n\
-fp4-7: 0000038%0000039% 000003a%000003b% 000003c%000003d% 000003e%000003f%\n\
-fp8-11: 0000040%0000041% 0000042%0000043% 0000044%0000045% 0000046%0000047%\n\
-fp12-15: 0000048%0000049% 000004a%000004b% 000004c%000004d% 000004e%000004f%\n\
-fp16-19: 0000050%0000051% 0000052%0000053% 0000054%0000055% 0000056%0000057%\n\
-fp20-23: 0000058%0000059% 000005a%000005b% 000005c%000005d% 000005e%000005f%\n\
-fp24-27: 0000060%0000061% 0000062%0000063% 0000064%0000065% 0000066%0000067%\n\
-fp28-31: 0000068%0000069% 000006a%000006b% 000006c%000006d% 000006e%000006f%\n\
-r0 =0000002% sp =0000003% r2 =0000004% r3 =0000005%\n\
-r4 =0000006% r5 =0000007% r6 =0000008% r7 =0000009% sr0=0000000% sr1=0000001%\n\
-r8 =000000a% r9 =000000b% r10=000000c% r11=000000d% cr=0000022% xer=0000023%\n\
-r12=000000e% r13=000000f% r14=0000010% r15=0000011% lr=0000024% ctr=0000025%\n\
-r16=0000012% r17=0000013% r18=0000014% r19=0000015% mq=0000026% fcr=0000071%\n\
-r20=0000016% r21=0000017% r22=0000018% r23=0000019% dar=0000028% dsi=0000029%\n\
-r24=000001a% r25=000001b% r26=000001c% r27=000001d% exc=000002a%\n\
-r28=000001e% r29=000001f% r30=0000020% r31=0000021%\n\
-";
-
-/* Most of the fields are self-explanatory. 'sr0' is the next
- instruction to execute, from SRR0, which may have some relationship
- with the instruction that caused the exception. 'r3*' is the value
- that will be returned in register 3 when the current system call
- returns. 'sr1' is SRR1, bits 16-31 of which are copied from the MSR:
-
- 16 - External interrupt enable
- 17 - Privilege level (1=user, 0=supervisor)
- 18 - FP available
- 19 - Machine check enable (if clear, processor locks up on machine check)
- 20 - FP exception mode bit 0 (FP exceptions recoverable)
- 21 - Single-step trace enable
- 22 - Branch trace enable
- 23 - FP exception mode bit 1
- 25 - exception prefix (if set, exceptions are taken from 0xFFFnnnnn,
- otherwise from 0x000nnnnn).
- 26 - Instruction address translation enabled.
- 27 - Data address translation enabled.
- 30 - Exception is recoverable (otherwise, don't try to return).
- 31 - Little-endian mode enable.
-
- 'Trap' is the address of the exception:
-
- 00200 - Machine check exception (memory parity error, for instance)
- 00300 - Data access exception (memory not mapped, see dsisr for why)
- 00400 - Instruction access exception (memory not mapped)
- 00500 - External interrupt
- 00600 - Alignment exception (see dsisr for more information)
- 00700 - Program exception (illegal/trap instruction, FP exception)
- 00800 - FP unavailable (should not be seen by user code)
- 00900 - Decrementer exception (for instance, SIGALRM)
- 00A00 - I/O controller interface exception
- 00C00 - System call exception (for instance, kill(3)).
- 00E00 - FP assist exception (optional FP instructions, etc.)
-
- 'dar' is the memory location, for traps 00300, 00400, 00600, 00A00.
- 'dsisr' has the following bits under trap 00300:
- 0 - direct-store error exception
- 1 - no page table entry for page
- 4 - memory access not permitted
- 5 - trying to access I/O controller space or using lwarx/stwcx on
- non-write-cached memory
- 6 - access was store
- 9 - data access breakpoint hit
- 10 - segment table search failed to find translation (64-bit ppcs only)
- 11 - I/O controller instruction not permitted
- For trap 00400, the same bits are set in SRR1 instead.
- For trap 00600, bits 12-31 of the DSISR set to allow emulation of
- the instruction without actually having to read it from memory.
-*/
-
-#define xtoi(x) (x >= 'a' ? x + 10 - 'a' : x - '0')
-
-static void
-register_dump (int fd, struct sigcontext *ctx)
-{
- char buffer[sizeof(dumpform)];
- char *bufferpos;
- unsigned regno;
- unsigned *regs = (unsigned *)(&ctx->sc_srr0);
-
- memcpy(buffer, dumpform, sizeof(dumpform));
-
- /* Generate the output. */
- while ((bufferpos = memchr (buffer, '%', sizeof(dumpform))))
- {
- regno = xtoi (bufferpos[-1]) | xtoi (bufferpos[-2]) << 4;
- memset (bufferpos-2, '0', 3);
- _itoa_word (regs[regno], bufferpos+1, 16, 0);
- }
-
- /* Write the output. */
- write (fd, buffer, sizeof(buffer) - 1);
-}
-
-#define REGISTER_DUMP \
- register_dump (fd, ctx)
diff --git a/libc/sysdeps/mach/hurd/powerpc/sigreturn.c b/libc/sysdeps/mach/hurd/powerpc/sigreturn.c
deleted file mode 100644
index 18107090b..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/sigreturn.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Return from signal handler for Hurd. PowerPC version.
- Copyright (C) 1996,97,98,2001 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 <hurd.h>
-#include <hurd/signal.h>
-#include <hurd/threadvar.h>
-#include <stdlib.h>
-
-int
-__sigreturn (struct sigcontext *scp)
-{
- struct hurd_sigstate *ss;
- mach_port_t *reply_port;
-
- if (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK))
- {
- errno = EINVAL;
- return -1;
- }
-
- ss = _hurd_self_sigstate ();
- __spin_lock (&ss->lock);
-
- /* Restore the set of blocked signals, and the intr_port slot. */
- ss->blocked = scp->sc_mask;
- ss->intr_port = scp->sc_intr_port;
-
- /* Check for pending signals that were blocked by the old set. */
- if (ss->pending & ~ss->blocked)
- {
- /* There are pending signals that just became unblocked. Wake up the
- signal thread to deliver them. But first, squirrel away SCP where
- the signal thread will notice it if it runs another handler, and
- arrange to have us called over again in the new reality. */
- ss->context = scp;
- __spin_unlock (&ss->lock);
- __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ());
- /* If a pending signal was handled, sig_post never returned. */
- __spin_lock (&ss->lock);
- ss->context = NULL;
- }
-
- if (scp->sc_onstack)
- {
- ss->sigaltstack.ss_flags &= ~SS_ONSTACK; /* XXX threadvars */
- /* XXX cannot unlock until off sigstack */
- abort ();
- }
- else
- __spin_unlock (&ss->lock);
-
- /* Destroy the MiG reply port used by the signal handler, and restore the
- reply port in use by the thread when interrupted. */
- reply_port =
- (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY);
- if (*reply_port)
- {
- mach_port_t port = *reply_port;
-
- /* Assigning MACH_PORT_DEAD here tells libc's mig_get_reply_port not to
- get another reply port, but avoids mig_dealloc_reply_port trying to
- deallocate it after the receive fails (which it will, because the
- reply port will be bogus, whether we do this or not). */
- *reply_port = MACH_PORT_DEAD;
-
- __mach_port_destroy (__mach_task_self (), port);
- }
- *reply_port = scp->sc_reply_port;
-
- /* Restore FPU state. */
-#define restore_fpr(n) \
- asm volatile ("lfd " #n ",%0(31)" : : "i" (n * 4))
-
- asm volatile ("mr 31,%0" : : "r" (scp->sc_fprs));
-
- /* Restore the floating-point control/status register. */
- asm volatile ("lfd 0,256(31)");
- asm volatile ("mtfsf 0xff,0");
-
- /* Restore floating-point registers. */
- restore_fpr (0);
- restore_fpr (1);
- restore_fpr (2);
- restore_fpr (3);
- restore_fpr (4);
- restore_fpr (5);
- restore_fpr (6);
- restore_fpr (7);
- restore_fpr (8);
- restore_fpr (9);
- restore_fpr (10);
- restore_fpr (11);
- restore_fpr (12);
- restore_fpr (13);
- restore_fpr (14);
- restore_fpr (15);
- restore_fpr (16);
- restore_fpr (17);
- restore_fpr (18);
- restore_fpr (19);
- restore_fpr (20);
- restore_fpr (21);
- restore_fpr (22);
- restore_fpr (23);
- restore_fpr (24);
- restore_fpr (25);
- restore_fpr (26);
- restore_fpr (27);
- restore_fpr (28);
- restore_fpr (29);
- restore_fpr (30);
- restore_fpr (31);
-
- /* Load all the registers from the sigcontext. */
-#define restore_gpr(n) \
- asm volatile ("lwz " #n ",%0(31)" : : "i" (n * 4))
-
- asm volatile ("addi 31,31,-188"); /* r31 = scp->gprs */
-
- /* Restore the special purpose registers. */
- asm volatile ("lwz 0,128(31); mtcr 0");
- asm volatile ("lwz 0,132(31); mtxer 0");
- asm volatile ("lwz 0,136(31); mtlr 0");
- asm volatile ("lwz 0,-8(31); mtctr 0"); /* XXX this is the PC */
-#if 0
- asm volatile ("lwz 0,144(31); mtmq %0"); /* PPC601 only */
-#endif
-
- /* Restore the normal registers. */
- restore_gpr (0);
- restore_gpr (1);
- restore_gpr (2);
- restore_gpr (3);
- restore_gpr (4);
- restore_gpr (5);
- restore_gpr (6);
- restore_gpr (7);
- restore_gpr (8);
- restore_gpr (9);
- restore_gpr (10);
- restore_gpr (11);
- restore_gpr (12);
- restore_gpr (13);
- restore_gpr (14);
- restore_gpr (15);
- restore_gpr (16);
- restore_gpr (17);
- restore_gpr (18);
- restore_gpr (19);
- restore_gpr (20);
- restore_gpr (21);
- restore_gpr (22);
- restore_gpr (23);
- restore_gpr (24);
- restore_gpr (25);
- restore_gpr (26);
- restore_gpr (27);
- restore_gpr (28);
- restore_gpr (29);
- restore_gpr (30);
- restore_gpr (31);
-
- /* Return. */
- asm volatile ("bctr"); /* XXX CTR is not restored! */
-
- /* NOTREACHED */
- return -1;
-}
-
-weak_alias (__sigreturn, sigreturn)
diff --git a/libc/sysdeps/mach/hurd/powerpc/static-start.S b/libc/sysdeps/mach/hurd/powerpc/static-start.S
deleted file mode 100644
index 7c4887547..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/static-start.S
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Startup code for statically linked Hurd/PowerPC binaries.
- Copyright (C) 1998,2001, 2002 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>
-
- /* These are the various addresses we require. */
- .section ".rodata"
- .align 2
- weak_extern(__libc_csu_init)
- weak_extern(__libc_csu_fini)
-L(start_addresses):
- .long _SDA_BASE_
- .long JUMPTARGET(main)
- .long JUMPTARGET(__libc_csu_init)
- .long JUMPTARGET(__libc_csu_fini)
- ASM_SIZE_DIRECTIVE(L(start_addresses))
-
- .section ".text"
-ENTRY(_start)
- /* Save the stack pointer to pass to _hurd_stack_setup. */
- mr r3,r1
- /* Set up an initial stack frame. */
- li r0,0
- stwu r0,-16(r1)
- /* Call _hurd_stack_setup. */
- bl JUMPTARGET(_hurd_stack_setup)
- /* Pass the argument data to __libc_start_main. */
- addi r9,r1,16
- /* Clear the LR. */
- li r0,0
- mtlr r0
- /* Set r13 to point at the 'small data area', and put the address of
- start_addresses in r8... */
- lis r8,L(start_addresses)@ha
- lwzu r13,L(start_addresses)@l(r8)
- /* and continue in libc-start, in glibc. */
- b JUMPTARGET(__libc_start_main)
-END(_start)
-
-/* Define a symbol for the first piece of initialized data. */
- .section ".data"
-__data_start:
-weak_alias (__data_start, data_start)
diff --git a/libc/sysdeps/mach/hurd/powerpc/trampoline.c b/libc/sysdeps/mach/hurd/powerpc/trampoline.c
deleted file mode 100644
index da59a25fe..000000000
--- a/libc/sysdeps/mach/hurd/powerpc/trampoline.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/* Set thread_state for sighandler, and sigcontext to recover. For PowerPC.
- Copyright (C) 1994,1995,1996,1997,1998,1999,2001,2005
- 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 <hurd/signal.h>
-#include <hurd/userlink.h>
-#include <thread_state.h>
-#include <assert.h>
-#include <errno.h>
-#include "hurdfault.h"
-#include <intr-msg.h>
-
-struct sigcontext *
-_hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
- int signo, struct hurd_signal_detail *detail,
- volatile int rpc_wait,
- struct machine_thread_all_state *state)
-{
- void trampoline (void);
- void rpc_wait_trampoline (void);
- void *volatile sigsp;
- struct sigcontext *scp;
-
- if (ss->context)
- {
- /* We have a previous sigcontext that sigreturn was about
- to restore when another signal arrived. We will just base
- our setup on that. */
- if (! _hurdsig_catch_memory_fault (ss->context))
- {
- memcpy (&state->basic, &ss->context->sc_ppc_thread_state,
- sizeof (state->basic));
- memcpy (&state->exc, &ss->context->sc_ppc_exc_state,
- sizeof (state->exc));
- memcpy (&state->fpu, &ss->context->sc_ppc_float_state,
- sizeof (state->fpu));
- state->set = (1 << PPC_THREAD_STATE) | (1 << PPC_EXCEPTION_STATE)
- | (1 << PPC_FLOAT_STATE);
- }
- }
-
- if (! machine_get_basic_state (ss->thread, state))
- return NULL;
-
- if ((ss->actions[signo].sa_flags & SA_ONSTACK) &&
- !(ss->sigaltstack.ss_flags & (SS_DISABLE|SS_ONSTACK)))
- {
- sigsp = ss->sigaltstack.ss_sp + ss->sigaltstack.ss_size;
- ss->sigaltstack.ss_flags |= SS_ONSTACK;
- /* XXX need to set up base of new stack for
- per-thread variables, cthreads. */
- }
- else
- sigsp = (char *) state->basic.SP;
-
- /* Set up the sigcontext structure on the stack. This is all the stack
- needs, since the args are passed in registers (below). */
- sigsp -= sizeof (*scp);
- scp = sigsp;
- sigsp -= 16; /* Reserve some space for a stack frame. */
-
- if (_hurdsig_catch_memory_fault (scp))
- {
- /* We got a fault trying to write the stack frame.
- We cannot set up the signal handler.
- Returning NULL tells our caller, who will nuke us with a SIGILL. */
- return NULL;
- }
- else
- {
- int ok;
-
- /* Set up the sigcontext from the current state of the thread. */
-
- scp->sc_onstack = ss->sigaltstack.ss_flags & SS_ONSTACK ? 1 : 0;
-
- /* struct sigcontext is laid out so that starting at sc_srr0
- mimics a struct ppc_thread_state. */
- memcpy (&scp->sc_ppc_thread_state,
- &state->basic, sizeof (state->basic));
-
- /* struct sigcontext is laid out so that starting at sc_dar
- mimics a struct ppc_exc_state. */
- ok = machine_get_state (ss->thread, state, PPC_EXCEPTION_STATE,
- &state->exc, &scp->sc_ppc_exc_state,
- sizeof (state->exc));
-
- /* struct sigcontext is laid out so that starting at sc_fprs[0]
- mimics a struct ppc_float_state. */
- if (ok)
- ok = machine_get_state (ss->thread, state, PPC_FLOAT_STATE,
- &state->fpu, &scp->sc_ppc_float_state,
- sizeof (state->fpu));
-
- _hurdsig_end_catch_fault ();
-
- if (!ok)
- return NULL;
- }
-
- /* Modify the thread state to call the trampoline code on the new stack. */
- if (rpc_wait)
- {
- /* The signalee thread was blocked in a mach_msg_trap system call,
- still waiting for a reply. We will have it run the special
- trampoline code which retries the message receive before running
- the signal handler.
-
- To do this we change the OPTION argument in its registers to
- enable only message reception, since the request message has
- already been sent. */
-
- /* The system call arguments are stored in consecutive registers
- starting with r3. */
- struct mach_msg_trap_args *args = (void *) &state->basic.r3;
-
- if (_hurdsig_catch_memory_fault (args))
- {
- /* Faulted accessing ARGS. Bomb. */
- return NULL;
- }
-
- assert (args->option & MACH_RCV_MSG);
- /* Disable the message-send, since it has already completed. The
- calls we retry need only wait to receive the reply message. */
- args->option &= ~MACH_SEND_MSG;
-
- /* Limit the time to receive the reply message, in case the server
- claimed that `interrupt_operation' succeeded but in fact the RPC
- is hung. */
- args->option |= MACH_RCV_TIMEOUT;
- args->timeout = _hurd_interrupted_rpc_timeout;
-
- _hurdsig_end_catch_fault ();
-
- state->basic.PC = (int) rpc_wait_trampoline;
- /* After doing the message receive, the trampoline code will need to
- update the r3 value to be restored by sigreturn. To simplify
- the assembly code, we pass the address of its slot in SCP to the
- trampoline code in r10. */
- state->basic.r10 = (long int) &scp->sc_gprs[3];
- /* We must preserve the mach_msg_trap args in r3..r9.
- Pass the handler args to the trampoline code in r11..r13. */
- state->basic.r11 = signo;
- state->basic.r12 = detail->code;
- state->basic.r13 = (int) scp;
- }
- else
- {
- state->basic.PC = (int) trampoline;
- state->basic.r3 = signo;
- state->basic.r4 = detail->code;
- state->basic.r5 = (int) scp;
- }
-
- state->basic.r1 = (int) sigsp; /* r1 is the stack pointer. */
-
- /* We pass the handler function to the trampoline code in ctr. */
- state->basic.ctr = (int) handler;
- /* In r15, we store the address of __sigreturn itself,
- for the trampoline code to use. */
- state->basic.r15 = (int) &__sigreturn;
- /* In r16, we save the SCP value to pass to __sigreturn
- after the handler returns. */
- state->basic.r16 = (int) scp;
-
- /* In r3, we store a pointer to the registers in STATE so that the
- trampoline code can load the registers from that. For some reason,
- thread_set_state doesn't set all registers. */
- state->basic.r17 = state->basic.r3; /* Store the real r3 in r17. */
- state->basic.r3 = (int) &state->basic.r0;
-
- return scp;
-}
-
-/* The trampoline code follows. This used to be located inside
- _hurd_setup_sighandler, but was optimized away by gcc 2.95. */
-
-/* This function sets some registers which the trampoline code uses
- and which are not automatically set by thread_set_state.
- In r3 we have a pointer to the registers in STATE. */
-asm ("trampoline_load_registers:\n"
- "lwz 17,68(3)\n" /* The real r3. */
- "lwz 4,16(3)\n"
- "lwz 5,20(3)\n"
- "lwz 6,24(3)\n"
- "lwz 7,28(3)\n"
- "lwz 8,32(3)\n"
- "lwz 9,36(3)\n"
- "lwz 10,40(3)\n"
- "lwz 11,44(3)\n"
- "lwz 12,48(3)\n"
- "lwz 13,52(3)\n"
- "lwz 14,56(3)\n"
- "lwz 15,60(3)\n"
- "lwz 16,64(3)\n"
- "mr 3,17\n"
- "blr\n");
-
-asm ("rpc_wait_trampoline:\n");
- /* This is the entry point when we have an RPC reply message to receive
- before running the handler. The MACH_MSG_SEND bit has already been
- cleared in the OPTION argument in our registers. For our convenience,
- r10 points to the sc_regs[3] member of the sigcontext (saved r3). */
-
-asm (/* Retry the interrupted mach_msg system call. */
- "bl trampoline_load_registers\n"
- "li 0, -25\n" /* mach_msg_trap */
- "sc\n"
- /* When the sigcontext was saved, r3 was MACH_RCV_INTERRUPTED. But
- now the message receive has completed and the original caller of
- the RPC (i.e. the code running when the signal arrived) needs to
- see the final return value of the message receive in r3. So
- store the new r3 value into the sc_regs[3] member of the sigcontext
- (whose address is in r10 to make this code simpler). */
- "stw 3, 0(10)\n"
- /* Since the argument registers needed to have the mach_msg_trap
- arguments, we've stored the arguments to the handler function
- in registers r11..r13 of the state structure. */
- "mr 3,11\n"
- "mr 4,12\n"
- "mr 5,13\n");
-
-asm ("trampoline:\n");
- /* Entry point for running the handler normally. The arguments to the
- handler function are already in the standard registers:
-
- r3 SIGNO
- r4 SIGCODE
- r5 SCP
-
- r16 also contains SCP; this value is callee-saved (and so should not get
- clobbered by running the handler). We use this saved value to pass to
- __sigreturn, so the handler can clobber the argument registers if it
- likes. */
-asm ("bl trampoline_load_registers\n"
- "bctrl\n" /* Call the handler function. */
- "mtctr 15\n" /* Copy &__sigreturn to CTR. */
- "mr 3,16\n" /* Copy the saved SCP to r3. */
- "bctr\n" /* Call __sigreturn (SCP). */
- );
diff --git a/libc/sysdeps/mach/hurd/ptrace.c b/libc/sysdeps/mach/hurd/ptrace.c
index bb5627284..bccb265fb 100644
--- a/libc/sysdeps/mach/hurd/ptrace.c
+++ b/libc/sysdeps/mach/hurd/ptrace.c
@@ -160,7 +160,7 @@ ptrace (enum __ptrace_request request, ... )
case PTRACE_SINGLESTEP:
/* This is a machine-dependent kernel RPC on
machines that support it. Punt. */
- return EOPNOTSUPP;
+ return __hurd_fail (EOPNOTSUPP);
case PTRACE_ATTACH:
case PTRACE_DETACH:
@@ -227,7 +227,7 @@ ptrace (enum __ptrace_request request, ... )
case PTRACE_PEEKUSER:
case PTRACE_POKEUSER:
/* U area, what's that? */
- return EOPNOTSUPP;
+ return __hurd_fail (EOPNOTSUPP);
case PTRACE_GETREGS:
case PTRACE_SETREGS:
@@ -248,7 +248,7 @@ ptrace (enum __ptrace_request request, ... )
return get_regs (MACHINE_THREAD_FLOAT_STATE_FLAVOR,
MACHINE_THREAD_FLOAT_STATE_COUNT);
#else
- return EOPNOTSUPP;
+ return __hurd_fail (EOPNOTSUPP);
#endif
case PTRACE_GETFPAREGS:
@@ -261,7 +261,7 @@ ptrace (enum __ptrace_request request, ... )
return get_regs (MACHINE_THREAD_FPA_STATE_FLAVOR,
MACHINE_THREAD_FPA_STATE_COUNT);
#else
- return EOPNOTSUPP;
+ return __hurd_fail (EOPNOTSUPP);
#endif
case PTRACE_POKETEXT:
diff --git a/libc/sysdeps/mach/powerpc/machine-lock.h b/libc/sysdeps/mach/powerpc/machine-lock.h
deleted file mode 100644
index 84159c5a5..000000000
--- a/libc/sysdeps/mach/powerpc/machine-lock.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Machine-specific definition for spin locks. PowerPC version.
- Copyright (C) 1994-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 _MACHINE_LOCK_H
-#define _MACHINE_LOCK_H
-
-/* The type of a spin lock variable. */
-
-typedef volatile long int __spin_lock_t;
-
-/* Value to initialize `__spin_lock_t' variables to. */
-
-#define __SPIN_LOCK_INITIALIZER 0L
-
-
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE __extern_inline
-#endif
-
-/* Unlock LOCK. */
-
-_EXTERN_INLINE void
-__spin_unlock (__spin_lock_t *__lock)
-{
- long int __locked;
- __asm__ __volatile__ ("\
-0: lwarx %0,0,%1\n\
- stwcx. %2,0,%1\n\
- bne- 0b\n\
-" : "=&r" (__locked) : "r" (__lock), "r" (0) : "cr0");
-}
-
-/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */
-
-_EXTERN_INLINE int
-__spin_try_lock (register __spin_lock_t *__lock)
-{
- long int __rtn;
- __asm__ __volatile__ ("\
-0: lwarx %0,0,%1\n\
- stwcx. %2,0,%1\n\
- bne- 0b\n\
-" : "=&r" (__rtn) : "r" (__lock), "r" (1) : "cr0");
- return !__rtn;
-}
-
-/* Return nonzero if LOCK is locked. */
-
-_EXTERN_INLINE int
-__spin_lock_locked (__spin_lock_t *__lock)
-{
- long int __rtn;
- __asm__ __volatile__ ("\
-0: lwarx %0,0,%1\n\
- stwcx. %0,0,%1\n\
- bne- 0b\n\
-" : "=&r" (__rtn) : "r" (__lock) : "cr0");
- return __rtn;
-}
-
-
-#endif /* machine-lock.h */
diff --git a/libc/sysdeps/mach/powerpc/machine-sp.h b/libc/sysdeps/mach/powerpc/machine-sp.h
deleted file mode 100644
index 7f75184b8..000000000
--- a/libc/sysdeps/mach/powerpc/machine-sp.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Machine-specific function to return the stack pointer. PowerPC version.
- Copyright (C) 2001, 2007 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 _MACHINE_SP_H
-#define _MACHINE_SP_H
-
-/* Return the current stack pointer. */
-
-#ifndef _EXTERN_INLINE
-/* Make sure this function is included in hurd/threadvar-inlines.c. */
-# ifdef _HURD_THREADVAR_H_EXTERN_INLINE
-# define _EXTERN_INLINE _HURD_THREADVAR_H_EXTERN_INLINE
-# else
-# define _EXTERN_INLINE __extern_inline
-# endif
-#endif
-
-_EXTERN_INLINE void *
-__thread_stack_pointer (void)
-{
- register void *__sp__;
- __asm__ ("mr %0, 1" : "=r" (__sp__));
- return __sp__;
-}
-
-#endif /* machine-sp.h */
diff --git a/libc/sysdeps/mach/powerpc/sysdep.h b/libc/sysdeps/mach/powerpc/sysdep.h
deleted file mode 100644
index f2d863e75..000000000
--- a/libc/sysdeps/mach/powerpc/sysdep.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* system call details for Mach on PowerPC
- Copyright (C) 2001,02 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 _MACH_POWERPC_SYSDEP_H
-#define _MACH_POWERPC_SYSDEP_H
-
-#define START_ARGS char **sparg
-#define SNARF_ARGS(argc, argv, envp) \
- do { \
- argv = &sparg[1]; \
- argc = *(int *)sparg; \
- envp = &argv[argc + 1]; \
- } while (0)
-
-#define CALL_WITH_SP(fn, sp) \
- do { \
- register long __sp = (long) sp, __fn = (long) fn; \
- asm volatile ("mr 1, %0; mtlr %1; blr" \
- : : "r" (__sp), "r" (__fn)); \
- } while (0)
-
-#define STACK_GROWTH_DOWN
-
-#define RETURN_TO(sp, pc, retval) \
- asm volatile ("mr 1, %0; mtctr %1; mr 3, %2; bctr" \
- : : "r" (sp), "r" (pc), "r" (retval))
-
-/* Get the machine-independent Mach definitions. */
-#define _MACH_MACHINE_ASM_H 1 /* Kludge to avoid bad Darwin header file. */
-#include <sysdeps/mach/sysdep.h>
-
-#undef ENTRY
-#include <sysdeps/unix/powerpc/sysdep.h>
-
-#endif /* _MACH_POWERPC_SYSDEP_H */
diff --git a/libc/sysdeps/mach/powerpc/thread_state.h b/libc/sysdeps/mach/powerpc/thread_state.h
deleted file mode 100644
index d11a5ab01..000000000
--- a/libc/sysdeps/mach/powerpc/thread_state.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Mach thread state definitions for machine-independent code. PowerPC version
- Copyright (C) 2001 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/>. */
-
-#include <mach/machine/thread_status.h>
-
-#define MACHINE_THREAD_STATE_FLAVOR PPC_THREAD_STATE
-#define MACHINE_THREAD_STATE_COUNT PPC_THREAD_STATE_COUNT
-
-#define machine_thread_state ppc_thread_state
-
-#define PC srr0
-#define SP r1
-#define SYSRETURN r3
-
-struct machine_thread_all_state
- {
- int set; /* Mask of bits (1 << FLAVOR). */
- struct ppc_thread_state basic;
- struct ppc_exception_state exc;
- struct ppc_float_state fpu;
- };
-
-#include <sysdeps/mach/thread_state.h>
diff --git a/libc/sysdeps/posix/getaddrinfo.c b/libc/sysdeps/posix/getaddrinfo.c
index 672571ef2..3cc244b7f 100644
--- a/libc/sysdeps/posix/getaddrinfo.c
+++ b/libc/sysdeps/posix/getaddrinfo.c
@@ -2672,7 +2672,7 @@ getaddrinfo (const char *name, const char *service,
}
libc_hidden_def (getaddrinfo)
-static_link_warning (getaddrinfo)
+nss_interface_function (getaddrinfo)
void
freeaddrinfo (struct addrinfo *ai)
diff --git a/libc/sysdeps/powerpc/Makefile b/libc/sysdeps/powerpc/Makefile
index 79dd6fa97..7442b6709 100644
--- a/libc/sysdeps/powerpc/Makefile
+++ b/libc/sysdeps/powerpc/Makefile
@@ -1,7 +1,3 @@
-# We always want to use the new mnemonic syntax even if we are on a RS6000
-# machine.
-+cflags += -mnew-mnemonics
-
ifeq ($(subdir),string)
CFLAGS-memcmp.c += -Wno-uninitialized
endif
diff --git a/libc/sysdeps/powerpc/bits/fenv.h b/libc/sysdeps/powerpc/bits/fenv.h
index 817feaa7f..43e0f4c73 100644
--- a/libc/sysdeps/powerpc/bits/fenv.h
+++ b/libc/sysdeps/powerpc/bits/fenv.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2004, 2006,2008 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
@@ -25,16 +25,21 @@
the appropriate bits in the SPEFSCR... */
enum
{
- FE_INEXACT = 1 << (63 - 42),
-#define FE_INEXACT FE_INEXACT
- FE_INVALID = 1 << (63 - 43),
-#define FE_INVALID FE_INVALID
- FE_DIVBYZERO = 1 << (63 - 44),
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_UNDERFLOW = 1 << (63 - 45),
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_OVERFLOW = 1 << (63 - 46)
-#define FE_OVERFLOW FE_OVERFLOW
+ FE_INEXACT =
+#define FE_INEXACT (1 << (63 - 42))
+ FE_INEXACT,
+ FE_INVALID =
+#define FE_INVALID (1 << (63 - 43))
+ FE_INVALID,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1 << (63 - 44))
+ FE_DIVBYZERO,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1 << (63 - 45))
+ FE_UNDERFLOW,
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1 << (63 - 46))
+ FE_OVERFLOW
};
#define FE_ALL_EXCEPT \
@@ -45,14 +50,18 @@ enum
macros. */
enum
{
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = 1,
-#define FE_TOWARDZERO FE_TOWARDZERO
- FE_UPWARD = 2,
-#define FE_UPWARD FE_UPWARD
- FE_DOWNWARD = 3
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 1
+ FE_TOWARDZERO,
+ FE_UPWARD =
+#define FE_UPWARD 2
+ FE_UPWARD,
+ FE_DOWNWARD =
+#define FE_DOWNWARD 3
+ FE_DOWNWARD
};
/* Type representing exception flags. */
@@ -84,14 +93,18 @@ extern const fenv_t *__fe_nomask_env (void);
the appropriate bits in the FPSCR... */
enum
{
- FE_INEXACT = 1 << (31 - 6),
-#define FE_INEXACT FE_INEXACT
- FE_DIVBYZERO = 1 << (31 - 5),
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_UNDERFLOW = 1 << (31 - 4),
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_OVERFLOW = 1 << (31 - 3),
-#define FE_OVERFLOW FE_OVERFLOW
+ FE_INEXACT =
+#define FE_INEXACT (1 << (31 - 6))
+ FE_INEXACT,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1 << (31 - 5))
+ FE_DIVBYZERO,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1 << (31 - 4))
+ FE_UNDERFLOW,
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1 << (31 - 3))
+ FE_OVERFLOW,
/* ... except for FE_INVALID, for which we use bit 31. FE_INVALID
actually corresponds to bits 7 through 12 and 21 through 23
@@ -99,8 +112,9 @@ enum
says that it must be a power of 2. Instead we use bit 2 which
is the summary bit for all the FE_INVALID exceptions, which
kind of makes sense. */
- FE_INVALID = 1 << (31 - 2),
-#define FE_INVALID FE_INVALID
+ FE_INVALID =
+#define FE_INVALID (1 << (31 - 2))
+ FE_INVALID,
#ifdef __USE_GNU
/* Breakdown of the FE_INVALID bits. Setting FE_INVALID on an
@@ -110,43 +124,52 @@ enum
enable these exceptions individually. */
/* Operation with SNaN. */
- FE_INVALID_SNAN = 1 << (31 - 7),
-# define FE_INVALID_SNAN FE_INVALID_SNAN
+ FE_INVALID_SNAN =
+# define FE_INVALID_SNAN (1 << (31 - 7))
+ FE_INVALID_SNAN,
/* Inf - Inf */
- FE_INVALID_ISI = 1 << (31 - 8),
-# define FE_INVALID_ISI FE_INVALID_ISI
+ FE_INVALID_ISI =
+# define FE_INVALID_ISI (1 << (31 - 8))
+ FE_INVALID_ISI,
/* Inf / Inf */
- FE_INVALID_IDI = 1 << (31 - 9),
-# define FE_INVALID_IDI FE_INVALID_IDI
+ FE_INVALID_IDI =
+# define FE_INVALID_IDI (1 << (31 - 9))
+ FE_INVALID_IDI,
/* 0 / 0 */
- FE_INVALID_ZDZ = 1 << (31 - 10),
-# define FE_INVALID_ZDZ FE_INVALID_ZDZ
+ FE_INVALID_ZDZ =
+# define FE_INVALID_ZDZ (1 << (31 - 10))
+ FE_INVALID_ZDZ,
/* Inf * 0 */
- FE_INVALID_IMZ = 1 << (31 - 11),
-# define FE_INVALID_IMZ FE_INVALID_IMZ
+ FE_INVALID_IMZ =
+# define FE_INVALID_IMZ (1 << (31 - 11))
+ FE_INVALID_IMZ,
/* Comparison with NaN or SNaN. */
- FE_INVALID_COMPARE = 1 << (31 - 12),
-# define FE_INVALID_COMPARE FE_INVALID_COMPARE
+ FE_INVALID_COMPARE =
+# define FE_INVALID_COMPARE (1 << (31 - 12))
+ FE_INVALID_COMPARE,
/* Invalid operation flag for software (not set by hardware). */
/* Note that some chips don't have this implemented, presumably
because no-one expected anyone to write software for them %-). */
- FE_INVALID_SOFTWARE = 1 << (31 - 21),
-# define FE_INVALID_SOFTWARE FE_INVALID_SOFTWARE
+ FE_INVALID_SOFTWARE =
+# define FE_INVALID_SOFTWARE (1 << (31 - 21))
+ FE_INVALID_SOFTWARE,
/* Square root of negative number (including -Inf). */
/* Note that some chips don't have this implemented. */
- FE_INVALID_SQRT = 1 << (31 - 22),
-# define FE_INVALID_SQRT FE_INVALID_SQRT
+ FE_INVALID_SQRT =
+# define FE_INVALID_SQRT (1 << (31 - 22))
+ FE_INVALID_SQRT,
/* Conversion-to-integer of a NaN or a number too large or too small. */
- FE_INVALID_INTEGER_CONVERSION = 1 << (31 - 23)
-# define FE_INVALID_INTEGER_CONVERSION FE_INVALID_INTEGER_CONVERSION
+ FE_INVALID_INTEGER_CONVERSION =
+# define FE_INVALID_INTEGER_CONVERSION (1 << (31 - 23))
+ FE_INVALID_INTEGER_CONVERSION
# define FE_ALL_INVALID \
(FE_INVALID_SNAN | FE_INVALID_ISI | FE_INVALID_IDI | FE_INVALID_ZDZ \
@@ -163,14 +186,18 @@ enum
appropriate macros. */
enum
{
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = 1,
-#define FE_TOWARDZERO FE_TOWARDZERO
- FE_UPWARD = 2,
-#define FE_UPWARD FE_UPWARD
- FE_DOWNWARD = 3
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 1
+ FE_TOWARDZERO,
+ FE_UPWARD =
+#define FE_UPWARD 2
+ FE_UPWARD,
+ FE_DOWNWARD =
+#define FE_DOWNWARD 3
+ FE_DOWNWARD
};
/* Type representing exception flags. */
diff --git a/libc/sysdeps/powerpc/fpu/fclrexcpt.c b/libc/sysdeps/powerpc/fpu/fclrexcpt.c
index 87376bfe9..e99cc58ac 100644
--- a/libc/sysdeps/powerpc/fpu/fclrexcpt.c
+++ b/libc/sysdeps/powerpc/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997,99,2000,01 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
@@ -44,4 +44,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/sysdeps/powerpc/fpu/libm-test-ulps b/libc/sysdeps/powerpc/fpu/libm-test-ulps
index ffb8e3a95..b37806582 100644
--- a/libc/sysdeps/powerpc/fpu/libm-test-ulps
+++ b/libc/sysdeps/powerpc/fpu/libm-test-ulps
@@ -760,6 +760,35 @@ float: 2
ifloat: 2
# clog
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
float: 3
ifloat: 3
@@ -773,15 +802,71 @@ ldouble: 2
Test "Imaginary part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -5.960464655174753498633255797994360530379e-8 + 7.888609052210118054117285652827862296732e-31 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i":
+float: 1
+ifloat: 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 (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x11682p-23 + 0x7ffed1p-23 i) == 1.1723955140027907954461000991619077811832e-12 + 1.5622968405332756349813737986164832897108 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x155f8afc4c48685bf63610p-85 + 0x17d0cf2652cdbeb1294e19p-85 i) == -4.7775669192897997174762089350332738583822e-50 + 0.8393953487996880419413728440067635213372 i":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: clog (0x15cfbd1990d1ffp-53 + 0x176a3973e09a9ap-53 i) == 1.0168910106364605304135563536838075568606e-30 + 0.8208373755522359859870890246475340086663 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x187190c1a334497bdbde5a95f48p-106 + 0x3b25f08062d0a095c4cfbbc338dp-106 i) == -1.7471844652198029695350765775994001163767e-63 + 1.1789110097072986038243729592318526094314 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
+Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i) == 1.5366822245016167178749091974664853785194e-08 + 1.2522014929038946066987318471922169174157 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x4d4ep-15 + 0x6605p-15 i) == -1.6298145321400412054744424587143483169412e-08 + 0.9223574537155056772124552172295398141249 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x4d9c37e2b5cb4533p-63 + 0x65c98be2385a042ep-63 i) == 6.4064442119814669184296141278612389400075e-37 + 0.9193591364645830864185131402313014890145 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6241ef0da53f539f02fad67dabp-106 + 0x3fb46641182f7efd9caa769dac0p-106 i) == 4.3299788920664682288477984749202524623248e-63 + 1.4746938237585656250866370987773473745867 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa1f2c1p-24 + 0xc643aep-24 i) == -1.0480505352462576151523512837107080269981e-13 + 0.8858771987699967480545613322309315260313 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa4722f19346cp-51 + 0x7f9631c5e7f07p-51 i) == -6.2122796286154679676173624516405339768606e-30 + 1.4904138780720095276446375492434049214172 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xf2p-10 + 0x3e3p-10 i) == 6.1988446308070710970664736815277450078106e-06 + 1.3322126499153926210226335249558203898460 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i":
+float: 1
+ifloat: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
@@ -798,6 +883,69 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 2
+idouble: 2
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i":
+double: 1
+idouble: 1
Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
double: 1
idouble: 1
@@ -870,8 +1018,40 @@ ldouble: 1
Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
float: 2
ifloat: 2
-ildouble: 3
-ldouble: 3
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i) == -4.821637332766435821255375046554377090472e-17 + 4.053112396770095089737411317782466262176e-302 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -2.588596909321764128428416045209904492216e-8 + 3.425979381266895667295625489912064603415e-31 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+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
@@ -890,11 +1070,45 @@ ldouble: 1
Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 308.3031705664207720674749211936626341569 + 0.2013595981366865903254995612594728746470 i":
double: 1
idouble: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x155f8afc4c48685bf63610p-85 + 0x17d0cf2652cdbeb1294e19p-85 i) == -2.0748709499710785084693619097712106753591e-50 + 0.3645447681189598740620098186365764884771 i":
+ildouble: 2
+ldouble: 2
+Test "Real part of: clog10 (0x15d8ab6ed05ca514086ac3a1e84p-105 + 0x1761e480aa094c0b10b34b09ce9p-105 i) == 4.3548095442952115860848857519953610343042e-63 + 0.3558376234889641500775150477035448866763 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i) == -1.3155760824064879362415202279780039150764e-26 + 0.3473590599762514228227328130640352044313 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i) == -6.2126412844802358329771948751248003038444e-07 + 0.4977135139537443711784513409096950995985 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1df515eb171a808b9e400266p-95 + 0x7c71eb0cd4688dfe98581c77p-95 i) == -1.5221162575729652613635150540947625639689e-57 + 0.5795934880811949230121092882659698986043 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
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 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
@@ -903,6 +1117,11 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 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
@@ -910,6 +1129,13 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 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
@@ -917,6 +1143,102 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x298c62cb546588a7p-63 + 0x7911b1dfcc4ecdaep-63 i) == -5.1816837072162316773907242302011632570857e-37 + 0.5386167838952956925896424154370364458140 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i) == 1.9312741086596516918394613098872836703188e-20 + 0.5231613813514771042838490538484014771862 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i) == -6.4375803621988389731799033530075237868110e-21 + 0.4378257977686804492768642780897650927167 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x4d4ep-15 + 0x6605p-15 i) == -7.0781945783414996953799915941870192015212e-09 + 0.4005747524909781155537088181659175147564 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i) == 3.6079845358966994996207055940336690133424e-30 + 0.5243112258263349992771652393178033846555 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x81b7efa81fc35ad1p-65 + 0x1ef4b835f1c79d812p-65 i) == -4.3074341162203896332989394770760901408798e-39 + 0.5709443672155660428417571212549720987784 i":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i) == -1.7182001068739620267773842120965071561416e-11 + 0.3990121149225253562859800593935899629087 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i) == 2.3329549194675052736016290082882121135546e-26 + 0.4561756099441139182878993697611751382976 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 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
@@ -947,6 +1269,12 @@ ildouble: 1
ldouble: 1
# cos
+Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01":
+float: 1
+ifloat: 1
+Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01":
+float: 1
+ifloat: 1
Test "cos (16.0) == -0.9576594803233846418996372326511034717803":
ildouble: 2
ldouble: 2
@@ -1128,6 +1456,8 @@ double: 1
float: 4
idouble: 1
ifloat: 4
+ildouble: 2
+ldouble: 2
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
float: 1
ifloat: 1
@@ -1141,6 +1471,8 @@ double: 2
float: 4
idouble: 2
ifloat: 4
+ildouble: 4
+ldouble: 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
@@ -1255,6 +1587,9 @@ ildouble: 1
ldouble: 1
# csqrt
+Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i":
+double: 1
+idouble: 1
Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
float: 1
ifloat: 1
@@ -1273,6 +1608,9 @@ 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.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 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
@@ -1293,6 +1631,9 @@ idouble: 1
Test "Imaginary 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-1074 + 0x1p-1074 i) == 2.442109726130830256743814843868934877597e-162 + 1.011554969366634726113090867589031782487e-162 i":
+ildouble: 1
+ldouble: 1
Test "Real part of: csqrt (0x1p-147 + 0x1p-147 i) == 8.225610928685557596194006925540350401606e-23 + 3.407159605465907500737319471202779419102e-23 i":
double: 1
idouble: 1
@@ -1391,8 +1732,8 @@ ldouble: 1
# ctan_towardzero
Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i":
-ldouble: 4
ildouble: 4
+ldouble: 4
Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i":
ildouble: 13
ldouble: 13
@@ -1435,9 +1776,8 @@ ldouble: 1
Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
double: 1
float: 2
-idouble: 1
-ifloat: 2
idouble: 2
+ifloat: 2
ildouble: 2
ldouble: 2
Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
@@ -1469,8 +1809,8 @@ Test "Real part of: ctanh (1 + 0x1p1023 i) == 0.87860631188830686954625402262198
ildouble: 1
ldouble: 1
Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i":
-idouble: 1
double: 1
+idouble: 1
Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i":
double: 1
float: 1
@@ -2114,6 +2454,12 @@ float: 1
ifloat: 1
# sincos
+Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_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
@@ -2185,6 +2531,60 @@ double: 1
idouble: 1
# tan
+Test "tan (-0xc.908p-4) == -0.9997603425502441410973077452249560802034":
+ildouble: 2
+ldouble: 2
+Test "tan (-0xc.90cp-4) == -0.9998823910588060302788513970802357770031":
+ildouble: 2
+ldouble: 2
+Test "tan (-0xc.90ep-4) == -0.9999434208994808753305784795924711152508":
+ildouble: 2
+ldouble: 2
+Test "tan (-0xc.90f8p-4) == -0.9999891957244072765118898375645469865764":
+ildouble: 2
+ldouble: 2
+Test "tan (-0xc.90fcp-4) == -0.9999968250656122402859679132395522927393":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.90fd8p-4) == -0.9999996860835706212861509874451585282616":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.90fdap-4) == -0.9999999245021033010474530133665235922808":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.92p-4) == -1.0004928571392300571266638743539017593717":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.9p-4) == -0.9995162902115457818029468900654150261381":
+ildouble: 1
+ldouble: 1
+Test "tan (0xc.908p-4) == 0.9997603425502441410973077452249560802034":
+ildouble: 2
+ldouble: 2
+Test "tan (0xc.90cp-4) == 0.9998823910588060302788513970802357770031":
+ildouble: 2
+ldouble: 2
+Test "tan (0xc.90ep-4) == 0.9999434208994808753305784795924711152508":
+ildouble: 2
+ldouble: 2
+Test "tan (0xc.90f8p-4) == 0.9999891957244072765118898375645469865764":
+ildouble: 2
+ldouble: 2
+Test "tan (0xc.90fcp-4) == 0.9999968250656122402859679132395522927393":
+ildouble: 1
+ldouble: 1
+Test "tan (0xc.90fd8p-4) == 0.9999996860835706212861509874451585282616":
+ildouble: 1
+ldouble: 1
+Test "tan (0xc.90fdap-4) == 0.9999999245021033010474530133665235922808":
+ildouble: 1
+ldouble: 1
+Test "tan (0xc.92p-4) == 1.0004928571392300571266638743539017593717":
+ildouble: 1
+ldouble: 1
+Test "tan (0xc.9p-4) == 0.9995162902115457818029468900654150261381":
+ildouble: 1
+ldouble: 1
Test "tan (pi/4) == 1":
double: 1
idouble: 1
@@ -2721,32 +3121,32 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Function: Imaginary part of "clog":
double: 1
float: 3
idouble: 1
ifloat: 3
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: Real part of "clog10":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
-ildouble: 3
-ldouble: 3
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "clog10":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "cos":
double: 2
@@ -2809,8 +3209,8 @@ double: 2
float: 5
idouble: 2
ifloat: 5
-ildouble: 2
-ldouble: 2
+ildouble: 4
+ldouble: 4
Function: Imaginary part of "cpow":
double: 2
@@ -3223,8 +3623,8 @@ idouble: 1
Function: "tan":
double: 1
idouble: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "tan_downward":
float: 1
diff --git a/libc/sysdeps/powerpc/sys/platform/ppc.h b/libc/sysdeps/powerpc/sys/platform/ppc.h
index 3780f57ba..58948e837 100644
--- a/libc/sysdeps/powerpc/sys/platform/ppc.h
+++ b/libc/sysdeps/powerpc/sys/platform/ppc.h
@@ -19,6 +19,7 @@
#ifndef _SYS_PLATFORM_PPC_H
#define _SYS_PLATFORM_PPC_H 1
+#include <features.h>
#include <stdint.h>
#include <bits/ppc.h>
@@ -26,13 +27,16 @@
static inline uint64_t
__ppc_get_timebase (void)
{
-#ifdef __powerpc64__
+#if __GNUC_PREREQ (4, 8)
+ return __builtin_ppc_get_timebase ();
+#else
+# ifdef __powerpc64__
uint64_t __tb;
/* "volatile" is necessary here, because the user expects this assembly
isn't moved after an optimization. */
__asm__ volatile ("mfspr %0, 268" : "=r" (__tb));
return __tb;
-#else /* not __powerpc64__ */
+# else /* not __powerpc64__ */
uint32_t __tbu, __tbl, __tmp; \
__asm__ volatile ("0:\n\t"
"mftbu %0\n\t"
@@ -42,7 +46,8 @@ __ppc_get_timebase (void)
"bne- 0b"
: "=r" (__tbu), "=r" (__tbl), "=r" (__tmp));
return (((uint64_t) __tbu << 32) | __tbl);
-#endif /* not __powerpc64__ */
+# endif /* not __powerpc64__ */
+#endif
}
#endif /* sys/platform/ppc.h */
diff --git a/libc/sysdeps/pthread/aio_notify.c b/libc/sysdeps/pthread/aio_notify.c
index f8c4ccc96..a9f0648c2 100644
--- a/libc/sysdeps/pthread/aio_notify.c
+++ b/libc/sysdeps/pthread/aio_notify.c
@@ -95,7 +95,7 @@ __aio_notify_only (struct sigevent *sigev)
else if (sigev->sigev_notify == SIGEV_SIGNAL)
{
/* We have to send a signal. */
-#if _POSIX_REALTIME_SIGNALS
+#if _POSIX_REALTIME_SIGNALS > 0
/* Note that the standard gives us the option of using a plain
non-queuing signal here when SA_SIGINFO is not set for the signal. */
# ifdef BROKEN_THREAD_SIGNALS
diff --git a/libc/sysdeps/s390/fpu/bits/fenv.h b/libc/sysdeps/s390/fpu/bits/fenv.h
index 6df7b177f..88c6f7ac0 100644
--- a/libc/sysdeps/s390/fpu/bits/fenv.h
+++ b/libc/sysdeps/s390/fpu/bits/fenv.h
@@ -24,16 +24,21 @@
of the appropriate bits in the FPU control word. */
enum
{
- FE_INVALID = 0x80,
-#define FE_INVALID FE_INVALID
- FE_DIVBYZERO = 0x40,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_OVERFLOW = 0x20,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_UNDERFLOW = 0x10,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_INEXACT = 0x08
-#define FE_INEXACT FE_INEXACT
+ FE_INVALID =
+#define FE_INVALID 0x80
+ FE_INVALID,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO 0x40
+ FE_DIVBYZERO,
+ FE_OVERFLOW =
+#define FE_OVERFLOW 0x20
+ FE_OVERFLOW,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW 0x10
+ FE_UNDERFLOW,
+ FE_INEXACT =
+#define FE_INEXACT 0x08
+ FE_INEXACT
};
/* We dont use the y bit of the DXC in the floating point control register
as glibc has no FE encoding for fe inexact incremented
@@ -48,14 +53,18 @@ enum
enum
{
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
- FE_DOWNWARD = 0x3,
-#define FE_DOWNWARD FE_DOWNWARD
- FE_UPWARD = 0x2,
-#define FE_UPWARD FE_UPWARD
- FE_TOWARDZERO = 0x1
-#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
+ FE_DOWNWARD =
+#define FE_DOWNWARD 0x3
+ FE_DOWNWARD,
+ FE_UPWARD =
+#define FE_UPWARD 0x2
+ FE_UPWARD,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 0x1
+ FE_TOWARDZERO
};
@@ -67,8 +76,8 @@ typedef unsigned int fexcept_t; /* size of fpc */
to the layout of the block written by the `fstenv'. */
typedef struct
{
- fexcept_t fpc;
- void *ieee_instruction_pointer;
+ fexcept_t __fpc;
+ void *__ieee_instruction_pointer;
/* failing instruction for ieee exceptions */
} fenv_t;
diff --git a/libc/sysdeps/s390/fpu/fclrexcpt.c b/libc/sysdeps/s390/fpu/fclrexcpt.c
index 2352d74b0..3e8d9bb3a 100644
--- a/libc/sysdeps/s390/fpu/fclrexcpt.c
+++ b/libc/sysdeps/s390/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 2000 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
@@ -37,3 +37,4 @@ feclearexcept (int excepts)
/* Success. */
return 0;
}
+libm_hidden_def (feclearexcept)
diff --git a/libc/sysdeps/s390/fpu/fegetenv.c b/libc/sysdeps/s390/fpu/fegetenv.c
index 243f1f1e1..afbe2c771 100644
--- a/libc/sysdeps/s390/fpu/fegetenv.c
+++ b/libc/sysdeps/s390/fpu/fegetenv.c
@@ -1,5 +1,5 @@
/* Store current floating-point environment.
- Copyright (C) 2000, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
@@ -23,7 +23,7 @@
int
fegetenv (fenv_t *envp)
{
- _FPU_GETCW (envp->fpc);
+ _FPU_GETCW (envp->__fpc);
/* Success. */
return 0;
diff --git a/libc/sysdeps/s390/fpu/feholdexcpt.c b/libc/sysdeps/s390/fpu/feholdexcpt.c
index 76ca70fb4..5b97ade02 100644
--- a/libc/sysdeps/s390/fpu/feholdexcpt.c
+++ b/libc/sysdeps/s390/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 2000, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
@@ -27,7 +27,7 @@ int feholdexcept (fenv_t *envp)
fegetenv (envp);
/* Clear the current sticky bits as more than one exception
may be generated. */
- fpc = envp->fpc & ~(FPC_FLAGS_MASK | FPC_DXC_MASK);
+ fpc = envp->__fpc & ~(FPC_FLAGS_MASK | FPC_DXC_MASK);
/* Hold from generating fpu exceptions temporarily. */
_FPU_SETCW ((fpc & ~(FE_ALL_EXCEPT << FPC_EXCEPTION_MASK_SHIFT)));
return 0;
diff --git a/libc/sysdeps/s390/fpu/fesetenv.c b/libc/sysdeps/s390/fpu/fesetenv.c
index 4fe82999d..b5342051f 100644
--- a/libc/sysdeps/s390/fpu/fesetenv.c
+++ b/libc/sysdeps/s390/fpu/fesetenv.c
@@ -1,5 +1,5 @@
/* Install given floating-point environment.
- Copyright (C) 2000, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
@@ -31,18 +31,18 @@ fesetenv (const fenv_t *envp)
if (envp == FE_DFL_ENV)
{
- env.fpc = _FPU_DEFAULT;
- env.ieee_instruction_pointer = 0;
+ env.__fpc = _FPU_DEFAULT;
+ env.__ieee_instruction_pointer = 0;
}
else if (envp == FE_NOMASK_ENV)
{
- env.fpc = FPC_EXCEPTION_MASK;
- env.ieee_instruction_pointer = 0;
+ env.__fpc = FPC_EXCEPTION_MASK;
+ env.__ieee_instruction_pointer = 0;
}
else
env = (*envp);
- _FPU_SETCW (env.fpc);
+ _FPU_SETCW (env.__fpc);
/* Success. */
return 0;
diff --git a/libc/sysdeps/sh/sh4/fpu/bits/fenv.h b/libc/sysdeps/sh/sh4/fpu/bits/fenv.h
index 93159499d..a29edfc1f 100644
--- a/libc/sysdeps/sh/sh4/fpu/bits/fenv.h
+++ b/libc/sysdeps/sh/sh4/fpu/bits/fenv.h
@@ -24,16 +24,21 @@
of the appropriate bits in the FPU control word. */
enum
{
- FE_INEXACT = 0x04,
-#define FE_INEXACT FE_INEXACT
- FE_UNDERFLOW = 0x08,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_OVERFLOW = 0x10,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_DIVBYZERO = 0x20,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_INVALID = 0x40,
-#define FE_INVALID FE_INVALID
+ FE_INEXACT =
+#define FE_INEXACT 0x04
+ FE_INEXACT,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW 0x08
+ FE_UNDERFLOW,
+ FE_OVERFLOW =
+#define FE_OVERFLOW 0x10
+ FE_OVERFLOW,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO 0x20
+ FE_DIVBYZERO,
+ FE_INVALID =
+#define FE_INVALID 0x40
+ FE_INVALID,
};
#define FE_ALL_EXCEPT \
@@ -46,10 +51,12 @@ enum
{
__FE_UNDEFINED = -1,
- FE_TONEAREST = 0x0,
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = 0x1,
-#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_TONEAREST =
+#define FE_TONEAREST 0x0
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 0x1
+ FE_TOWARDZERO,
};
@@ -66,4 +73,4 @@ typedef struct
fenv_t;
/* If the default argument is used we use this value. */
-#define FE_DFL_ENV ((fenv_t *) -1)
+#define FE_DFL_ENV ((const fenv_t *) -1)
diff --git a/libc/sysdeps/sh/sh4/fpu/fclrexcpt.c b/libc/sysdeps/sh/sh4/fpu/fclrexcpt.c
index b4b2ead02..2d31fa651 100644
--- a/libc/sysdeps/sh/sh4/fpu/fclrexcpt.c
+++ b/libc/sysdeps/sh/sh4/fpu/fclrexcpt.c
@@ -39,3 +39,4 @@ feclearexcept (int excepts)
return 0;
}
+libm_hidden_def (feclearexcept)
diff --git a/libc/sysdeps/sh/tininess.h b/libc/sysdeps/sh/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/sysdeps/sh/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/sysdeps/sparc/fpu/bits/fenv.h b/libc/sysdeps/sparc/fpu/bits/fenv.h
index 0e2a9b9e6..afe66ce5a 100644
--- a/libc/sysdeps/sparc/fpu/bits/fenv.h
+++ b/libc/sysdeps/sparc/fpu/bits/fenv.h
@@ -26,16 +26,21 @@
of the appropriate accrued exception bits from the FSR. */
enum
{
- FE_INVALID = (1 << 9),
-#define FE_INVALID FE_INVALID
- FE_OVERFLOW = (1 << 8),
-#define FE_OVERFLOW FE_OVERFLOW
- FE_UNDERFLOW = (1 << 7),
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_DIVBYZERO = (1 << 6),
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_INEXACT = (1 << 5)
-#define FE_INEXACT FE_INEXACT
+ FE_INVALID =
+#define FE_INVALID (1 << 9)
+ FE_INVALID,
+ FE_OVERFLOW =
+#define FE_OVERFLOW (1 << 8)
+ FE_OVERFLOW,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW (1 << 7)
+ FE_UNDERFLOW,
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO (1 << 6)
+ FE_DIVBYZERO,
+ FE_INEXACT =
+#define FE_INEXACT (1 << 5)
+ FE_INEXACT
};
#define FE_ALL_EXCEPT \
@@ -46,14 +51,18 @@ enum
for the appropriate macros. */
enum
{
- FE_TONEAREST = (0U << 30),
-#define FE_TONEAREST FE_TONEAREST
- FE_TOWARDZERO = (1U << 30),
-#define FE_TOWARDZERO FE_TOWARDZERO
- FE_UPWARD = (2U << 30),
-#define FE_UPWARD FE_UPWARD
- FE_DOWNWARD = (3U << 30)
-#define FE_DOWNWARD FE_DOWNWARD
+ FE_TONEAREST =
+#define FE_TONEAREST (0 << 30)
+ FE_TONEAREST,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO (1 << 30)
+ FE_TOWARDZERO,
+ FE_UPWARD =
+#define FE_UPWARD (-0x7fffffff - 1) /* (2 << 30) */
+ FE_UPWARD,
+ FE_DOWNWARD =
+#define FE_DOWNWARD (-0x40000000) /* (3 << 30) */
+ FE_DOWNWARD
};
#define __FE_ROUND_MASK (3U << 30)
diff --git a/libc/sysdeps/sparc/fpu/fclrexcpt.c b/libc/sysdeps/sparc/fpu/fclrexcpt.c
index 82b6ac4e2..50ec4f4ff 100644
--- a/libc/sysdeps/sparc/fpu/fclrexcpt.c
+++ b/libc/sysdeps/sparc/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997, 1999, 2000 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
@@ -39,4 +39,5 @@ strong_alias (__feclearexcept, __old_feclearexcept)
compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
#endif
+libm_hidden_ver (__feclearexcept, feclearexcept)
versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/libc/sysdeps/sparc/fpu/fenv_private.h b/libc/sysdeps/sparc/fpu/fenv_private.h
index a6e8e95a5..8690879dd 100644
--- a/libc/sysdeps/sparc/fpu/fenv_private.h
+++ b/libc/sysdeps/sparc/fpu/fenv_private.h
@@ -14,6 +14,15 @@ libc_feholdexcept (fenv_t *e)
}
static __always_inline void
+libc_fesetround (int r)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ etmp = (etmp & ~__FE_ROUND_MASK) | (r);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline void
libc_feholdexcept_setround (fenv_t *e, int r)
{
fenv_t etmp;
@@ -79,6 +88,7 @@ libc_feresetround (fenv_t *e)
}
#define libc_feholdexceptf libc_feholdexcept
+#define libc_fesetroundf libc_fesetround
#define libc_feholdexcept_setroundf libc_feholdexcept_setround
#define libc_fetestexceptf libc_fetestexcept
#define libc_fesetenvf libc_fesetenv
@@ -87,6 +97,7 @@ libc_feresetround (fenv_t *e)
#define libc_feholdsetroundf libc_feholdsetround
#define libc_feresetroundf libc_feresetround
#define libc_feholdexcept libc_feholdexcept
+#define libc_fesetround libc_fesetround
#define libc_feholdexcept_setround libc_feholdexcept_setround
#define libc_fetestexcept libc_fetestexcept
#define libc_fesetenv libc_fesetenv
@@ -95,6 +106,7 @@ libc_feresetround (fenv_t *e)
#define libc_feholdsetround libc_feholdsetround
#define libc_feresetround libc_feresetround
#define libc_feholdexceptl libc_feholdexcept
+#define libc_fesetroundl libc_fesetround
#define libc_feholdexcept_setroundl libc_feholdexcept_setround
#define libc_fetestexceptl libc_fetestexcept
#define libc_fesetenvl libc_fesetenv
diff --git a/libc/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c b/libc/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c
new file mode 100644
index 000000000..a04aa0f67
--- /dev/null
+++ b/libc/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c
@@ -0,0 +1 @@
+#include <sparc64/multiarch/ifunc-impl-list.c>
diff --git a/libc/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c b/libc/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c
new file mode 100644
index 000000000..65a8a9ae8
--- /dev/null
+++ b/libc/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c
@@ -0,0 +1,75 @@
+/* Enumerate available IFUNC implementations of a function. sparc 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 <assert.h>
+#include <string.h>
+#include <wchar.h>
+#include <ldsodefs.h>
+#include <sysdep.h>
+#include <ifunc-impl-list.h>
+
+/* Fill ARRAY of MAX elements with IFUNC implementations for function
+ NAME and return the number of valid entries. */
+
+size_t
+__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
+ size_t max)
+{
+ size_t i = 0;
+ int hwcap;
+
+ hwcap = GLRO(dl_hwcap);
+
+ IFUNC_IMPL (i, name, memcpy,
+ IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_CRYPTO,
+ __memcpy_niagara4)
+ IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_N2,
+ __memcpy_niagara2)
+ IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_BLKINIT,
+ __memcpy_niagara1)
+ IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_ULTRA3,
+ __memcpy_ultra3)
+ IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ultra1));
+
+ IFUNC_IMPL (i, name, mempcpy,
+ IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_CRYPTO,
+ __mempcpy_niagara4)
+ IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_N2,
+ __mempcpy_niagara2)
+ IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_BLKINIT,
+ __mempcpy_niagara1)
+ IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_ULTRA3,
+ __mempcpy_ultra3)
+ IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_ultra1));
+
+ IFUNC_IMPL (i, name, bzero,
+ IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_CRYPTO,
+ __bzero_niagara4)
+ IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_BLKINIT,
+ __bzero_niagara1)
+ IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ultra1));
+
+ IFUNC_IMPL (i, name, memset,
+ IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_CRYPTO,
+ __memset_niagara4)
+ IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_BLKINIT,
+ __memset_niagara1)
+ IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ultra1));
+
+ return i;
+}
diff --git a/libc/sysdeps/sparc/sparc64/multiarch/memcpy.S b/libc/sysdeps/sparc/sparc64/multiarch/memcpy.S
index 50a40883c..51cb88c39 100644
--- a/libc/sysdeps/sparc/sparc64/multiarch/memcpy.S
+++ b/libc/sysdeps/sparc/sparc64/multiarch/memcpy.S
@@ -1,4 +1,5 @@
/* Multiple versions of memcpy
+ All versions must be listed in ifunc-impl-list.c.
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.
diff --git a/libc/sysdeps/sparc/sparc64/multiarch/memset.S b/libc/sysdeps/sparc/sparc64/multiarch/memset.S
index 8b3faee91..3a637c707 100644
--- a/libc/sysdeps/sparc/sparc64/multiarch/memset.S
+++ b/libc/sysdeps/sparc/sparc64/multiarch/memset.S
@@ -1,4 +1,5 @@
/* Multiple versions of memset and bzero
+ All versions must be listed in ifunc-impl-list.c.
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.
diff --git a/libc/sysdeps/unix/Makefile b/libc/sysdeps/unix/Makefile
index dda3a3ee0..c5eb87e4f 100644
--- a/libc/sysdeps/unix/Makefile
+++ b/libc/sysdeps/unix/Makefile
@@ -64,7 +64,6 @@ $(objpfx)stub-syscalls.c: $(common-objpfx)sysd-syscalls \
echo "stub_warning ($$call)"; \
echo "weak_alias (_no_syscall, __GI_$$call)" ;; \
esac; \
- echo '#include <stub-tag.h>'; \
done) > $@T
mv -f $@T $@
generated += stub-syscalls.c
diff --git a/libc/sysdeps/unix/bsd/getpt.c b/libc/sysdeps/unix/bsd/getpt.c
index 2c566cbd4..5573bab01 100644
--- a/libc/sysdeps/unix/bsd/getpt.c
+++ b/libc/sysdeps/unix/bsd/getpt.c
@@ -88,5 +88,4 @@ __posix_openpt (int oflag)
weak_alias (__posix_openpt, posix_openpt)
stub_warning (posix_openpt)
-# include <stub-tag.h>
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/epoll_pwait.c b/libc/sysdeps/unix/sysv/linux/epoll_pwait.c
index 70756e844..7bea455b4 100644
--- a/libc/sysdeps/unix/sysv/linux/epoll_pwait.c
+++ b/libc/sysdeps/unix/sysv/linux/epoll_pwait.c
@@ -64,7 +64,6 @@ int epoll_pwait (int epfd, struct epoll_event *events,
}
stub_warning (epoll_pwait)
-# include <stub-tag.h>
#endif
libc_hidden_def (epoll_pwait)
diff --git a/libc/sysdeps/unix/sysv/linux/futimens.c b/libc/sysdeps/unix/sysv/linux/futimens.c
index f586b80f3..c4469fc93 100644
--- a/libc/sysdeps/unix/sysv/linux/futimens.c
+++ b/libc/sysdeps/unix/sysv/linux/futimens.c
@@ -45,5 +45,4 @@ futimens (int fd, const struct timespec tsp[2])
}
#ifndef __NR_utimensat
stub_warning (futimens)
-# include <stub-tag.h>
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/lutimes.c b/libc/sysdeps/unix/sysv/linux/lutimes.c
index c26623262..7e05a72a2 100644
--- a/libc/sysdeps/unix/sysv/linux/lutimes.c
+++ b/libc/sysdeps/unix/sysv/linux/lutimes.c
@@ -54,5 +54,4 @@ lutimes (const char *file, const struct timeval tvp[2])
#ifndef __NR_utimensat
stub_warning (lutimes)
-# include <stub-tag.h>
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/paths.h b/libc/sysdeps/unix/sysv/linux/paths.h
index f4860f24d..1342ab3a9 100644
--- a/libc/sysdeps/unix/sysv/linux/paths.h
+++ b/libc/sysdeps/unix/sysv/linux/paths.h
@@ -61,9 +61,9 @@
#define _PATH_SHELLS "/etc/shells"
#define _PATH_TTY "/dev/tty"
#define _PATH_UNIX "/boot/vmlinux"
-#define _PATH_UTMP "/var/run/utmp"
+#define _PATH_UTMP "/var/run/utmp"
#define _PATH_VI "/usr/bin/vi"
-#define _PATH_WTMP "/var/log/wtmp"
+#define _PATH_WTMP "/var/log/wtmp"
/* Provide trailing slash, since mostly used for building pathnames. */
#define _PATH_DEV "/dev/"
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist
index a3cd89540..8e4595825 100644
--- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libc.abilist
@@ -1774,13 +1774,13 @@ GLIBC_2.16
timespec_get F
GLIBC_2.17
GLIBC_2.17 A
+ __ppc_get_timebase_freq F
clock_getcpuclockid F
clock_getres F
clock_gettime F
clock_nanosleep F
clock_settime F
secure_getenv F
- __ppc_get_timebase_freq F
GLIBC_2.2
GLIBC_2.2 A
_IO_adjust_wcolumn F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
index ded2a35e0..0939a6539 100644
--- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
@@ -134,26 +134,26 @@ L(noparms):
'makecontext' call. If the pointer is NULL the process must
terminate. */
L(exitcode):
- /* Recover the ucontext and TOC from the dummy frame. */
- ld r1,FRAME_BACKCHAIN(r1) /* Unstack the parameter save area frame. */
- ld r3,FRAME_PARM1_SAVE(r1)
- ld r2,FRAME_TOC_SAVE(r1)
- ld r3,UCONTEXT_LINK(r3) /* Load the resume context. */
- cmpdi r3,0
- beq L(BADSTATUS)
+ /* Recover the ucontext and TOC from the dummy frame. */
+ ld r1,FRAME_BACKCHAIN(r1) /* Unstack the parameter save area frame. */
+ ld r3,FRAME_PARM1_SAVE(r1)
+ ld r2,FRAME_TOC_SAVE(r1)
+ ld r3,UCONTEXT_LINK(r3) /* Load the resume context. */
+ cmpdi r3,0
+ beq L(do_exit)
bl JUMPTARGET(__setcontext)
nop
-
-L(BADSTATUS):
-/* If setcontext returns (which can happen if the syscall fails) we will
- exit the program with error status (-1). */
- li r3,-1
+ /* If setcontext returns (which can happen if the syscall fails) we will
+ exit the program with error status (-1). */
+ li r3,-1
+L(do_exit):
#ifdef SHARED
- b JUMPTARGET(__GI_exit);
+ b JUMPTARGET(__GI_exit);
#else
- b JUMPTARGET(exit);
- nop
+ b JUMPTARGET(exit);
+ nop
#endif
+ b L(do_exit)
/* The address of the exit code is in the link register. Store the lr
in the ucontext as LNK so the target function will return to our
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist
index 0a80d0c57..8eaaccdfc 100644
--- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc.abilist
@@ -80,13 +80,13 @@ GLIBC_2.16
timespec_get F
GLIBC_2.17
GLIBC_2.17 A
+ __ppc_get_timebase_freq F
clock_getcpuclockid F
clock_getres F
clock_gettime F
clock_nanosleep F
clock_settime F
secure_getenv F
- __ppc_get_timebase_freq F
GLIBC_2.3
GLIBC_2.3 A
_Exit F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c
index f17a4949f..f4a49c5c4 100644
--- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sync_file_range.c
@@ -48,6 +48,4 @@ sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
return -1;
}
stub_warning (sync_file_range)
-
-# include <stub-tag.h>
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/readahead.c b/libc/sysdeps/unix/sysv/linux/readahead.c
index e7d0c110e..439936741 100644
--- a/libc/sysdeps/unix/sysv/linux/readahead.c
+++ b/libc/sysdeps/unix/sysv/linux/readahead.c
@@ -42,8 +42,6 @@ __readahead (int fd, off64_t offset, size_t count)
return -1;
}
stub_warning (readahead)
-
-# include <stub-tag.h>
#endif
weak_alias (__readahead, readahead)
diff --git a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
index 43eee7a37..5b95878cc 100644
--- a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
+++ b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
@@ -25,8 +25,6 @@
#if __WORDSIZE == 64
/* Not necessary, files are always with 64bit off_t. */
# define __O_LARGEFILE 0
-#else
-# define __O_LARGEFILE 0100000
#endif
#if __WORDSIZE == 64
diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
index 67ff77fa8..cb31e5ca2 100644
--- a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
+++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
@@ -91,11 +91,9 @@ __get_clockfreq_via_proc_openprom (void)
{
unsigned long int buf[4096 / sizeof (unsigned long int)];
struct dirent *dirp = (struct dirent *) buf;
- off_t dbase = (off_t) 0;
ssize_t len;
- while ((len = __getdirentries (obp_fd, (char *) dirp,
- sizeof (buf), &dbase)) > 0)
+ while ((len = __getdents (obp_fd, (char *) dirp, sizeof (buf))) > 0)
{
struct dirent *this_dirp = dirp;
@@ -131,7 +129,7 @@ __get_clockfreq_via_proc_openprom (void)
if (read (clkfreq_fd, type_string,
sizeof (type_string)) > 0)
result = (hp_timing_t)
- strtoull (type_string, NULL, 16);
+ strtoumax (type_string, NULL, 16);
close (clkfreq_fd);
}
}
diff --git a/libc/sysdeps/unix/sysv/linux/sync_file_range.c b/libc/sysdeps/unix/sysv/linux/sync_file_range.c
index a7785298b..551e900da 100644
--- a/libc/sysdeps/unix/sysv/linux/sync_file_range.c
+++ b/libc/sysdeps/unix/sysv/linux/sync_file_range.c
@@ -74,6 +74,4 @@ sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
return -1;
}
stub_warning (sync_file_range)
-
-# include <stub-tag.h>
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/utimensat.c b/libc/sysdeps/unix/sysv/linux/utimensat.c
index f52e615dd..fc1d362ce 100644
--- a/libc/sysdeps/unix/sysv/linux/utimensat.c
+++ b/libc/sysdeps/unix/sysv/linux/utimensat.c
@@ -45,5 +45,4 @@ utimensat (int fd, const char *file, const struct timespec tsp[2],
}
#ifndef __NR_utimensat
stub_warning (utimensat)
-# include <stub-tag.h>
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/x86/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/x86/bits/fcntl.h
index 9251e750e..2bcded5bf 100644
--- a/libc/sysdeps/unix/sysv/linux/x86/bits/fcntl.h
+++ b/libc/sysdeps/unix/sysv/linux/x86/bits/fcntl.h
@@ -22,8 +22,6 @@
#ifdef __x86_64__
# define __O_LARGEFILE 0
-#else
-# define __O_LARGEFILE 0100000
#endif
#ifdef __x86_64__
diff --git a/libc/sysdeps/x86/Makefile b/libc/sysdeps/x86/Makefile
new file mode 100644
index 000000000..f25d1e241
--- /dev/null
+++ b/libc/sysdeps/x86/Makefile
@@ -0,0 +1,4 @@
+ifeq ($(subdir),elf)
+CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
+ -mno-sse -mno-mmx)
+endif
diff --git a/libc/sysdeps/x86/fpu/bits/fenv.h b/libc/sysdeps/x86/fpu/bits/fenv.h
index b2c01c403..e0079cd97 100644
--- a/libc/sysdeps/x86/fpu/bits/fenv.h
+++ b/libc/sysdeps/x86/fpu/bits/fenv.h
@@ -23,17 +23,22 @@
of the appropriate bits in the FPU control word. */
enum
{
- FE_INVALID = 0x01,
-#define FE_INVALID FE_INVALID
+ FE_INVALID =
+#define FE_INVALID 0x01
+ FE_INVALID,
__FE_DENORM = 0x02,
- FE_DIVBYZERO = 0x04,
-#define FE_DIVBYZERO FE_DIVBYZERO
- FE_OVERFLOW = 0x08,
-#define FE_OVERFLOW FE_OVERFLOW
- FE_UNDERFLOW = 0x10,
-#define FE_UNDERFLOW FE_UNDERFLOW
- FE_INEXACT = 0x20
-#define FE_INEXACT FE_INEXACT
+ FE_DIVBYZERO =
+#define FE_DIVBYZERO 0x04
+ FE_DIVBYZERO,
+ FE_OVERFLOW =
+#define FE_OVERFLOW 0x08
+ FE_OVERFLOW,
+ FE_UNDERFLOW =
+#define FE_UNDERFLOW 0x10
+ FE_UNDERFLOW,
+ FE_INEXACT =
+#define FE_INEXACT 0x20
+ FE_INEXACT
};
#define FE_ALL_EXCEPT \
@@ -44,14 +49,18 @@ enum
for the appropriate macros. */
enum
{
- FE_TONEAREST = 0,
-#define FE_TONEAREST FE_TONEAREST
- FE_DOWNWARD = 0x400,
-#define FE_DOWNWARD FE_DOWNWARD
- FE_UPWARD = 0x800,
-#define FE_UPWARD FE_UPWARD
- FE_TOWARDZERO = 0xc00
-#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_TONEAREST =
+#define FE_TONEAREST 0
+ FE_TONEAREST,
+ FE_DOWNWARD =
+#define FE_DOWNWARD 0x400
+ FE_DOWNWARD,
+ FE_UPWARD =
+#define FE_UPWARD 0x800
+ FE_UPWARD,
+ FE_TOWARDZERO =
+#define FE_TOWARDZERO 0xc00
+ FE_TOWARDZERO
};
diff --git a/libc/sysdeps/x86/tininess.h b/libc/sysdeps/x86/tininess.h
new file mode 100644
index 000000000..1db37790f
--- /dev/null
+++ b/libc/sysdeps/x86/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING 1
diff --git a/libc/sysdeps/x86_64/fpu/fclrexcpt.c b/libc/sysdeps/x86_64/fpu/fclrexcpt.c
index 5ef316212..2d4031339 100644
--- a/libc/sysdeps/x86_64/fpu/fclrexcpt.c
+++ b/libc/sysdeps/x86_64/fpu/fclrexcpt.c
@@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
- 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
@@ -49,3 +49,4 @@ feclearexcept (int excepts)
/* Success. */
return 0;
}
+libm_hidden_def (feclearexcept)
diff --git a/libc/sysdeps/x86_64/multiarch/strcasestr-nonascii.c b/libc/sysdeps/x86_64/multiarch/strcasestr-nonascii.c
index a1f996884..db84a43ac 100644
--- a/libc/sysdeps/x86_64/multiarch/strcasestr-nonascii.c
+++ b/libc/sysdeps/x86_64/multiarch/strcasestr-nonascii.c
@@ -16,7 +16,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-# include <ctype.h>
+#include <ctype.h>
+#include <xmmintrin.h>
/* Similar to __m128i_strloadu. Convert to lower case for none-POSIX/C
diff --git a/libc/sysvipc/msgctl.c b/libc/sysvipc/msgctl.c
index 02c06f7e2..16a4f9514 100644
--- a/libc/sysvipc/msgctl.c
+++ b/libc/sysvipc/msgctl.c
@@ -33,4 +33,3 @@ msgctl (msqid, cmd, buf)
}
stub_warning (msgctl)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/msgget.c b/libc/sysvipc/msgget.c
index 2d8a93823..859c44596 100644
--- a/libc/sysvipc/msgget.c
+++ b/libc/sysvipc/msgget.c
@@ -32,4 +32,3 @@ msgget (key, msgflg)
}
stub_warning (msgget)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/msgrcv.c b/libc/sysvipc/msgrcv.c
index a3135fb9d..d49a6a764 100644
--- a/libc/sysvipc/msgrcv.c
+++ b/libc/sysvipc/msgrcv.c
@@ -38,4 +38,3 @@ msgrcv (msqid, msgp, msgsz, msgtyp, msgflg)
}
stub_warning (msgrcv)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/msgsnd.c b/libc/sysvipc/msgsnd.c
index a6f8aed3c..cf067fa2a 100644
--- a/libc/sysvipc/msgsnd.c
+++ b/libc/sysvipc/msgsnd.c
@@ -37,4 +37,3 @@ msgsnd (msqid, msgp, msgsz, msgflg)
}
stub_warning (msgsnd)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/semctl.c b/libc/sysvipc/semctl.c
index 8e27a41cc..f5e69f4a8 100644
--- a/libc/sysvipc/semctl.c
+++ b/libc/sysvipc/semctl.c
@@ -30,4 +30,3 @@ semctl (int semid, int semnum, int cmd, ...)
}
stub_warning (semctl)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/semget.c b/libc/sysvipc/semget.c
index 8e3f0b57b..dbac3a388 100644
--- a/libc/sysvipc/semget.c
+++ b/libc/sysvipc/semget.c
@@ -33,4 +33,3 @@ semget (key, nsems, semflg)
}
stub_warning (semget)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/semop.c b/libc/sysvipc/semop.c
index ea557cf9b..298c8c069 100644
--- a/libc/sysvipc/semop.c
+++ b/libc/sysvipc/semop.c
@@ -32,4 +32,3 @@ semop (semid, sops, nsops)
}
stub_warning (semop)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/semtimedop.c b/libc/sysvipc/semtimedop.c
index 7fe1ccef7..e7c631ac9 100644
--- a/libc/sysvipc/semtimedop.c
+++ b/libc/sysvipc/semtimedop.c
@@ -33,4 +33,3 @@ semtimedop (semid, sops, nsops, timeout)
}
stub_warning (semtimedop)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/shmat.c b/libc/sysvipc/shmat.c
index 178f194aa..bcd31765d 100644
--- a/libc/sysvipc/shmat.c
+++ b/libc/sysvipc/shmat.c
@@ -34,4 +34,3 @@ shmat (shmid, shmaddr, shmflg)
}
stub_warning (shmat)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/shmctl.c b/libc/sysvipc/shmctl.c
index 7c69f53fa..9ffec7dc8 100644
--- a/libc/sysvipc/shmctl.c
+++ b/libc/sysvipc/shmctl.c
@@ -32,4 +32,3 @@ shmctl (shmid, cmd, buf)
}
stub_warning (shmctl)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/shmdt.c b/libc/sysvipc/shmdt.c
index e1da7f73f..8a4004601 100644
--- a/libc/sysvipc/shmdt.c
+++ b/libc/sysvipc/shmdt.c
@@ -31,4 +31,3 @@ shmdt (shmaddr)
}
stub_warning (shmdt)
-#include <stub-tag.h>
diff --git a/libc/sysvipc/shmget.c b/libc/sysvipc/shmget.c
index 9bf190fdf..650603b8f 100644
--- a/libc/sysvipc/shmget.c
+++ b/libc/sysvipc/shmget.c
@@ -33,4 +33,3 @@ shmget (key, size, shmflg)
}
stub_warning (shmget)
-#include <stub-tag.h>
diff --git a/libc/termios/tcdrain.c b/libc/termios/tcdrain.c
index ced692d9a..0cc7b0e90 100644
--- a/libc/termios/tcdrain.c
+++ b/libc/termios/tcdrain.c
@@ -35,4 +35,3 @@ weak_alias (__libc_tcdrain, tcdrain)
stub_warning (tcdrain)
-#include <stub-tag.h>
diff --git a/libc/termios/tcflow.c b/libc/termios/tcflow.c
index b94e96705..8b064ea3b 100644
--- a/libc/termios/tcflow.c
+++ b/libc/termios/tcflow.c
@@ -49,4 +49,3 @@ tcflow (fd, action)
stub_warning (tcflow)
-#include <stub-tag.h>
diff --git a/libc/termios/tcflush.c b/libc/termios/tcflush.c
index 1df192adb..5888411ac 100644
--- a/libc/termios/tcflush.c
+++ b/libc/termios/tcflush.c
@@ -42,4 +42,3 @@ tcflush (fd, queue_selector)
stub_warning(tcflush);
-#include <stub-tag.h>
diff --git a/libc/termios/tcgetattr.c b/libc/termios/tcgetattr.c
index d47d7e70f..1ec2aa949 100644
--- a/libc/termios/tcgetattr.c
+++ b/libc/termios/tcgetattr.c
@@ -42,4 +42,3 @@ __tcgetattr (fd, termios_p)
stub_warning (tcgetattr)
weak_alias (__tcgetattr, tcgetattr)
-#include <stub-tag.h>
diff --git a/libc/termios/tcgetpgrp.c b/libc/termios/tcgetpgrp.c
index 04b989bc4..b013ec65d 100644
--- a/libc/termios/tcgetpgrp.c
+++ b/libc/termios/tcgetpgrp.c
@@ -35,4 +35,3 @@ tcgetpgrp (fd)
}
libc_hidden_def (tcgetpgrp)
stub_warning (tcgetpgrp)
-#include <stub-tag.h>
diff --git a/libc/termios/tcsendbrk.c b/libc/termios/tcsendbrk.c
index 4d4e67808..5e6805df2 100644
--- a/libc/termios/tcsendbrk.c
+++ b/libc/termios/tcsendbrk.c
@@ -36,4 +36,3 @@ tcsendbreak (fd, duration)
stub_warning (tcsendbreak)
-#include <stub-tag.h>
diff --git a/libc/termios/tcsetattr.c b/libc/termios/tcsetattr.c
index 5f3a271be..b6127976c 100644
--- a/libc/termios/tcsetattr.c
+++ b/libc/termios/tcsetattr.c
@@ -104,4 +104,3 @@ bad_speed (speed_t speed)
stub_warning (tcsetattr)
-#include <stub-tag.h>
diff --git a/libc/termios/tcsetpgrp.c b/libc/termios/tcsetpgrp.c
index 1b474742f..dea5e96ae 100644
--- a/libc/termios/tcsetpgrp.c
+++ b/libc/termios/tcsetpgrp.c
@@ -37,4 +37,3 @@ tcsetpgrp (fd, pgrp_id)
stub_warning (tcsetpgrp)
-#include <stub-tag.h>
diff --git a/libc/time/adjtime.c b/libc/time/adjtime.c
index f25c6fab1..1c005c977 100644
--- a/libc/time/adjtime.c
+++ b/libc/time/adjtime.c
@@ -33,4 +33,3 @@ __adjtime (delta, olddelta)
stub_warning (adjtime)
weak_alias (__adjtime, adjtime)
-#include <stub-tag.h>
diff --git a/libc/time/clock.c b/libc/time/clock.c
index e701b2e94..2e10fd3e3 100644
--- a/libc/time/clock.c
+++ b/libc/time/clock.c
@@ -28,4 +28,3 @@ clock ()
}
stub_warning (clock)
-#include <stub-tag.h>
diff --git a/libc/time/getitimer.c b/libc/time/getitimer.c
index c5caa813b..fc0ebf8bf 100644
--- a/libc/time/getitimer.c
+++ b/libc/time/getitimer.c
@@ -38,4 +38,3 @@ __getitimer (which, value)
stub_warning (getitimer)
weak_alias (__getitimer, getitimer)
-#include <stub-tag.h>
diff --git a/libc/time/gettimeofday.c b/libc/time/gettimeofday.c
index 7eb770c2d..4528a6a28 100644
--- a/libc/time/gettimeofday.c
+++ b/libc/time/gettimeofday.c
@@ -34,4 +34,3 @@ weak_alias (__gettimeofday, gettimeofday)
libc_hidden_weak (gettimeofday)
stub_warning (gettimeofday)
-#include <stub-tag.h>
diff --git a/libc/time/setitimer.c b/libc/time/setitimer.c
index 8132ff2d6..40880f821 100644
--- a/libc/time/setitimer.c
+++ b/libc/time/setitimer.c
@@ -40,4 +40,3 @@ __setitimer (which, new, old)
stub_warning (setitimer)
weak_alias (__setitimer, setitimer)
-#include <stub-tag.h>
diff --git a/libc/time/settimeofday.c b/libc/time/settimeofday.c
index 65abbb712..c1ceec0b6 100644
--- a/libc/time/settimeofday.c
+++ b/libc/time/settimeofday.c
@@ -31,4 +31,3 @@ __settimeofday (tv, tz)
stub_warning (settimeofday)
weak_alias (__settimeofday, settimeofday)
-#include <stub-tag.h>
diff --git a/libc/time/stime.c b/libc/time/stime.c
index 22234f5b7..1ea1c17da 100644
--- a/libc/time/stime.c
+++ b/libc/time/stime.c
@@ -36,4 +36,3 @@ stime (when)
}
stub_warning (stime)
-#include <stub-tag.h>
diff --git a/libc/time/time.c b/libc/time/time.c
index da645d05b..15dbb6921 100644
--- a/libc/time/time.c
+++ b/libc/time/time.c
@@ -32,4 +32,3 @@ time (timer)
libc_hidden_def (time)
stub_warning (time)
-#include <stub-tag.h>