diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-11-06 17:31:45 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-11-06 17:31:45 +0000 |
commit | 5c8ae23aecdb14ee22ba06684c488cfe0306ff0e (patch) | |
tree | daf286cd6c5edb7441d779682e09e8dc511e57c9 | |
parent | db0fbac046813774566dfc025932d4e8c0a35640 (diff) | |
download | eglibc2-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
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. @@ -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> |