mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Update.
1997-12-03 23:50 Ulrich Drepper <drepper@cygnus.com> * Makeconfig: Add shared-thread-library variable. * math/Makfile (CPPFLAGS): Add -D__LIBC_INTERNAL_MATH_INLINES. * sysdeps/i386/Makefile: Don't define ___LIBC_INTERNAL_MATH_INLINES here. * sysdeps/m68k/fpu/e_acos.c: Likewise. * sysdeps/m68k/fpu/e_atan2.c: Likewise. * sysdeps/m68k/fpu/e_fmod.c: Likewise. * sysdeps/m68k/fpu/e_pow.c: Likewise. * sysdeps/m68k/fpu/e_scalb.c: Likewise. * sysdeps/m68k/fpu/k_cos.c: Likewise. * sysdeps/m68k/fpu/k_sin.c: Likewise. * sysdeps/m68k/fpu/k_tan.c: Likewise. * sysdeps/m68k/fpu/s_atan.c: Likewise. * sysdeps/m68k/fpu/s_ccos.c: Likewise. * sysdeps/m68k/fpu/s_ccosh.c: Likewise. * sysdeps/m68k/fpu/s_cexp.c: Likewise. * sysdeps/m68k/fpu/s_csin.c: Likewise. * sysdeps/m68k/fpu/s_csinh.c: Likewise. * sysdeps/m68k/fpu/s_frexp.c: Likewise. * sysdeps/m68k/fpu/s_ilogb.c: Likewise. * sysdeps/m68k/fpu/s_isinf.c: Likewise. * sysdeps/m68k/fpu/s_llrint.c: Likewise. * sysdeps/m68k/fpu/s_llrintf.c: Likewise. * sysdeps/m68k/fpu/s_llrintl.c: Likewise. * sysdeps/m68k/fpu/s_lrint.c: Likewise. * sysdeps/m68k/fpu/s_modf.c: Likewise. * sysdeps/m68k/fpu/s_remquo.c: Likewise. * sysdeps/m68k/fpu/s_scalbn.c: Likewise. * sysdeps/m68k/fpu/s_sincos.c: Likewise. * libc.map: Add __libc_current_sigrtmin, __libc_current_sigrtmax, __libc_allocate_rtsig, sigqueue, sigtimedwait, sigwaitinfo. * signal/Makefile (headers): Add bits/siginfo.h. (routines): Add allocrtsig, sigtimedwait, sigwaitinfo, sigqueue. (distribute): Add testrtsig.h. * signal/allocrtsig.c: New file. * signal/signal.h: Define `union sigval'. Include <bits/siginfo.h>. Declare sigwaitinfo, sigtimedwait, sigqueue, __libc_current_sigrtmin, __libc_current_sigrtmax. * sysdeps/generic/sigqueue.c: New file. * sysdeps/generic/sigtimedwait.c: New file. * sysdeps/generic/sigwaitinfo.c: New file. * sysdeps/generic/testrtsig.h: New file. * sysdeps/generic/bits/siginfo.h: New file. * sysdeps/unix/sysv/linux/bits/siginfo.h: New file. * sysdeps/unix/sysv/linux/kernel_sigaction.h: Define struct as old_kernel_sigaction and rename sa_handler member to k_sa_handler. * sysdeps/unix/sysv/linux/rt_sigaction.c: New file. * sysdeps/unix/sysv/linux/rt_sigprocmask.c: New file. * sysdeps/unix/sysv/linux/rt_sigqueueinfo.c: New file. * sysdeps/unix/sysv/linux/rt_sigreturn.c: New file. * sysdeps/unix/sysv/linux/rt_sigsuspend.c: New file. * sysdeps/unix/sysv/linux/rt_sigtimedwait.c: New file. * sysdeps/unix/sysv/linux/sigpending.c: New file. * sysdeps/unix/sysv/linux/sigprocmask.c: New file. * sysdeps/unix/sysv/linux/sigqueue.c: New file. * sysdeps/unix/sysv/linux/sigreturn.c: New file. * sysdeps/unix/sysv/linux/sigtimedwait.c: New file. * sysdeps/unix/sysv/linux/sigwaitinfo.c: New file. * sysdeps/unix/sysv/linux/testrtsig.h: New file. * sysdeps/unix/sysv/linux/sigsuspend.c: Update for AIO. * sysdeps/unix/sysv/linux/syscalls.list: Update for AIO. * sysdeps/unix/sysv/linux/sigaction.c: Update for AIO. * sysdeps/unix/sysv/linux/bits/local_lim.h: Define AIO_PRIO_DELTA_MAX. * sysdeps/unix/sysv/linux/bits/posix_opt.h: Define _XOPEN_REALTIME and _POSIX_REALTIME_SIGNALS. * sysdeps/unix/sysv/linux/bits/sigaction.h: Update for AIO. * sysdeps/unix/sysv/linux/bits/signum.h: Define SIGRTMIN/MAX and update _NSIG. * sysdeps/unix/sysv/linux/i386/sigaction.c: Update for AIO. * sysdeps/unix/sysv/linux/i386/sys/ucontext.h: Linux/i386 specific definitions. * Makefile (subdirs): Add rt. * shlib-versions: Add entry for librt. * rt/Makefile: New file. * rt/aio.h: New file. * rt/aio_cancel.c: New file. * rt/aio_error.c: New file. * rt/aio_fsync.c: New file. * rt/aio_misc.c: New file. * rt/aio_misc.h: New file. * rt/aio_read.c: New file. * rt/aio_read64.c: New file. * rt/aio_return.c: New file. * rt/aio_suspend.c: New file. * rt/aio_write.c: New file. * rt/aio_write64.c: New file. * rt/lio_listio.c: New file. * rt/lio_listio64.c: New file. * sysdeps/generic/aio_sigqueue.c: New file. * sysdeps/unix/sysv/linux/aio_sigqueue.c: New file. * sysdeps/unix/sysv/linux/Dist: Add new files * sysdeps/unix/sysv/linux/Makefile [$(subdir)=signal] (sysdep_routines): Add rt_sigsuspend, rt_sigprocmask, rt_sigtimedwait, rt_sigqueueinfo, rt_sigaction. * posix/Makefile (headers): Add bits/environments.h. * posix/confstr.c: Correctly handle _CS_XBS5_ILP32_OFFBIG_CFLAGS and _CS_LFS_CFLAGS on 64bit platforms. * posix/unistd.h: Define _XOPEN_LEGACY. Explain _XOPEN_REALTIME and _XOPEN_REALTIME_THREADS. Include bits/environments.h. * sysdeps/generic/bits/confname.h: Define _SC_* constants for compilation modules. * sysdeps/wordsize-32/bits/environments.h: New file. * sysdeps/wordsize-64/bits/environments.h: New file. * posix/getopt.c: Remove declaration of getpid and __libc_pid. * posix/getopt_init.c: Test for value 0xf00baa of uninitialized __libc_pid. * sysdeps/unix/sysv/linux/init-first.c: Initialize __libc_pid to 0xf00baa. * string/string.h: Add declaration of __strverscmp. * string/strverscmp.c: Rename function ot __strverscmp and make old name weak alias. * sysdeps/generic/dl-sysdep.c: Declare and define __libc_uid. * sysdeps/generic/enbl-secure.c: Likewise. * sysdeps/mach/hurd/dl-sysdep.c: Likewise. * sysdeps/unix/sysv/linux/bits/sigset.h: Pretty print. * sysdeps/unix/sysv/linux/sys/pci.h: New file. 1997-12-03 Ulrich Drepper <drepper@cygnus.com> * posix/sys/wait.h: Use __transparent_union__ instead of transparent_union. Reported by Roland McGrath. 1997-12-03 Andreas Jaeger <aj@arthur.rhein-neckar.de> * resolv/inet_neta.c (inet_neta): Change type of first parameter to u_int32_t. Suggested by John Lavagnino <John_Lavagnino@Brown.edu> [PR libc/366]. * resolv/inet_addr.c (inet_addr): Change return type to u_int32_t. * inet/arpa/inet.h: Change types of inet_neta and inet_addr. 1997-12-03 20:40 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * grp/initgroups.c: Increase buffer if it is too small. 1997-12-03 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/netinet/ip.h: Don't use u_int8_t for bit fields, this is no ISO C. Reported by Andreas Jaeger. 1997-12-03 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/i386/sys/ucontext.h (enum): Add missing commata. 1997-12-03 08:58 Philip Blundell <pb@nexus.co.uk> * sysdeps/generic/bits/utsname.h: <sys/utsname.h> defines _SYS_UTSNAME_H not _UTSNAME_H. 1997-11-28 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * elf/dl-profile.c (_dl_start_profile): Avoid overflow when computing s_scale. 1997-11-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/libm-ieee754/s_csqrt.c: Use different formula for now. * sysdeps/libm-ieee754/s_csqrtf.c: Likewise. * sysdeps/libm-ieee754/s_csqrtl.c: Likewise. * math/libm-test.c (csqrt_test): Add testcase. 1997-12-03 15:44 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/sys/ultrasound.h: New file. * sysdeps/unix/sysv/linux/sys/Dist: Add it. * sysdeps/unix/sysv/linux/sys/Makefile [$(subdir)=misc]: Likewise. 1997-11-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/unix/sysv/linux/sys/timex.h: Fix declaration. 1997-12-01 Andreas Jaeger <aj@arthur.rhein-neckar.de> * math/libm-test.c (acos_test): Add more tests. (asin_test): Likewise. (atan_test): Likewise. (exp_test): Likewise. (sin_test): Likewise. (sqrt_test): Likewise. (cpow_test): Likewise. (csqrt_test): Likewise. (cexp_test): Correct typo in gcc version test. 1997-12-02 17:14 Philip Blundell <pb@nexus.co.uk> * sysdeps/arm/__longjmp.S: Define _SETJMP_H before including <bits/setjmp.h>. * sysdeps/arm/setjmp.S: Likewise. * sysdeps/unix/sysv/linux/arm/bits/mman.h: New file. 1997-12-02 18:07 Philip Blundell <pb@nexus.co.uk> * stdio/stdio.h: Add prototype for tmpfile64(). 1997-12-02 17:47 Philip Blundell <pb@nexus.co.uk> * stdio/stdio.h (__stdio_gen_tempname): Add extra argument to prototype to keep in step with libio version. * stdio-common/tmpfile64.c: Include <errno.h> for ENOSYS. 1997-12-02 17:41 Philip Blundell <pb@nexus.co.uk> * sysdeps/generic/Makefile: Don't try to use make_siglist if cross-compiling. 1997-12-02 01:18 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/i386/clone.S: When cloned process returns load GOT ptr before jumping to _exit. Reported by Xavier Leroy.
This commit is contained in:
parent
04be94a87d
commit
cbdee2790d
@ -20,7 +20,6 @@ docs
|
||||
|
||||
crypt
|
||||
linuxthreads
|
||||
localedata
|
||||
secure_rpc
|
||||
|
||||
aio
|
||||
|
4
BUGS
4
BUGS
@ -1,7 +1,7 @@
|
||||
List of known bugs (certainly very incomplete)
|
||||
----------------------------------------------
|
||||
|
||||
Time-stamp: <1997-11-12T04:42:03+0100 drepper>
|
||||
Time-stamp: <1997-12-03T15:30:07+0100 drepper>
|
||||
|
||||
This following list contains those bugs which I'm aware of. Please
|
||||
make sure that bugs you report are not listed here. If you can fix one
|
||||
@ -27,8 +27,6 @@ Severity: [ *] to [***]
|
||||
|
||||
[ **] The libm-ieee `log2' function seems to be very inaccurate.
|
||||
|
||||
[ *] The libm-ieee `remquo' function rounds 3.0/2.0 incorrectly.
|
||||
|
||||
[ *] The precision of the `sinhl' and/or `asinhl' function do not seem
|
||||
to be the best.
|
||||
|
||||
|
226
ChangeLog
226
ChangeLog
@ -1,3 +1,229 @@
|
||||
1997-12-03 23:50 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makeconfig: Add shared-thread-library variable.
|
||||
|
||||
* math/Makfile (CPPFLAGS): Add -D__LIBC_INTERNAL_MATH_INLINES.
|
||||
* sysdeps/i386/Makefile: Don't define ___LIBC_INTERNAL_MATH_INLINES
|
||||
here.
|
||||
* sysdeps/m68k/fpu/e_acos.c: Likewise.
|
||||
* sysdeps/m68k/fpu/e_atan2.c: Likewise.
|
||||
* sysdeps/m68k/fpu/e_fmod.c: Likewise.
|
||||
* sysdeps/m68k/fpu/e_pow.c: Likewise.
|
||||
* sysdeps/m68k/fpu/e_scalb.c: Likewise.
|
||||
* sysdeps/m68k/fpu/k_cos.c: Likewise.
|
||||
* sysdeps/m68k/fpu/k_sin.c: Likewise.
|
||||
* sysdeps/m68k/fpu/k_tan.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_atan.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_ccos.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_ccosh.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_cexp.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_csin.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_csinh.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_frexp.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_ilogb.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_isinf.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_llrint.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_llrintf.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_llrintl.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_lrint.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_modf.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_remquo.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_scalbn.c: Likewise.
|
||||
* sysdeps/m68k/fpu/s_sincos.c: Likewise.
|
||||
|
||||
* libc.map: Add __libc_current_sigrtmin, __libc_current_sigrtmax,
|
||||
__libc_allocate_rtsig, sigqueue, sigtimedwait, sigwaitinfo.
|
||||
* signal/Makefile (headers): Add bits/siginfo.h.
|
||||
(routines): Add allocrtsig, sigtimedwait, sigwaitinfo, sigqueue.
|
||||
(distribute): Add testrtsig.h.
|
||||
* signal/allocrtsig.c: New file.
|
||||
* signal/signal.h: Define `union sigval'. Include <bits/siginfo.h>.
|
||||
Declare sigwaitinfo, sigtimedwait, sigqueue, __libc_current_sigrtmin,
|
||||
__libc_current_sigrtmax.
|
||||
* sysdeps/generic/sigqueue.c: New file.
|
||||
* sysdeps/generic/sigtimedwait.c: New file.
|
||||
* sysdeps/generic/sigwaitinfo.c: New file.
|
||||
* sysdeps/generic/testrtsig.h: New file.
|
||||
* sysdeps/generic/bits/siginfo.h: New file.
|
||||
* sysdeps/unix/sysv/linux/bits/siginfo.h: New file.
|
||||
* sysdeps/unix/sysv/linux/kernel_sigaction.h: Define struct as
|
||||
old_kernel_sigaction and rename sa_handler member to k_sa_handler.
|
||||
* sysdeps/unix/sysv/linux/rt_sigaction.c: New file.
|
||||
* sysdeps/unix/sysv/linux/rt_sigprocmask.c: New file.
|
||||
* sysdeps/unix/sysv/linux/rt_sigqueueinfo.c: New file.
|
||||
* sysdeps/unix/sysv/linux/rt_sigreturn.c: New file.
|
||||
* sysdeps/unix/sysv/linux/rt_sigsuspend.c: New file.
|
||||
* sysdeps/unix/sysv/linux/rt_sigtimedwait.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sigpending.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sigprocmask.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sigqueue.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sigreturn.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sigtimedwait.c: New file.
|
||||
* sysdeps/unix/sysv/linux/sigwaitinfo.c: New file.
|
||||
* sysdeps/unix/sysv/linux/testrtsig.h: New file.
|
||||
* sysdeps/unix/sysv/linux/sigsuspend.c: Update for AIO.
|
||||
* sysdeps/unix/sysv/linux/syscalls.list: Update for AIO.
|
||||
* sysdeps/unix/sysv/linux/sigaction.c: Update for AIO.
|
||||
* sysdeps/unix/sysv/linux/bits/local_lim.h: Define AIO_PRIO_DELTA_MAX.
|
||||
* sysdeps/unix/sysv/linux/bits/posix_opt.h: Define _XOPEN_REALTIME
|
||||
and _POSIX_REALTIME_SIGNALS.
|
||||
* sysdeps/unix/sysv/linux/bits/sigaction.h: Update for AIO.
|
||||
* sysdeps/unix/sysv/linux/bits/signum.h: Define SIGRTMIN/MAX and
|
||||
update _NSIG.
|
||||
* sysdeps/unix/sysv/linux/i386/sigaction.c: Update for AIO.
|
||||
* sysdeps/unix/sysv/linux/i386/sys/ucontext.h: Linux/i386 specific
|
||||
definitions.
|
||||
|
||||
* Makefile (subdirs): Add rt.
|
||||
* shlib-versions: Add entry for librt.
|
||||
* rt/Makefile: New file.
|
||||
* rt/aio.h: New file.
|
||||
* rt/aio_cancel.c: New file.
|
||||
* rt/aio_error.c: New file.
|
||||
* rt/aio_fsync.c: New file.
|
||||
* rt/aio_misc.c: New file.
|
||||
* rt/aio_misc.h: New file.
|
||||
* rt/aio_read.c: New file.
|
||||
* rt/aio_read64.c: New file.
|
||||
* rt/aio_return.c: New file.
|
||||
* rt/aio_suspend.c: New file.
|
||||
* rt/aio_write.c: New file.
|
||||
* rt/aio_write64.c: New file.
|
||||
* rt/lio_listio.c: New file.
|
||||
* rt/lio_listio64.c: New file.
|
||||
* sysdeps/generic/aio_sigqueue.c: New file.
|
||||
* sysdeps/unix/sysv/linux/aio_sigqueue.c: New file.
|
||||
* sysdeps/unix/sysv/linux/Dist: Add new files
|
||||
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=signal]
|
||||
(sysdep_routines): Add rt_sigsuspend, rt_sigprocmask, rt_sigtimedwait,
|
||||
rt_sigqueueinfo, rt_sigaction.
|
||||
|
||||
* posix/Makefile (headers): Add bits/environments.h.
|
||||
* posix/confstr.c: Correctly handle _CS_XBS5_ILP32_OFFBIG_CFLAGS
|
||||
and _CS_LFS_CFLAGS on 64bit platforms.
|
||||
* posix/unistd.h: Define _XOPEN_LEGACY. Explain _XOPEN_REALTIME
|
||||
and _XOPEN_REALTIME_THREADS. Include bits/environments.h.
|
||||
* sysdeps/generic/bits/confname.h: Define _SC_* constants for
|
||||
compilation modules.
|
||||
* sysdeps/wordsize-32/bits/environments.h: New file.
|
||||
* sysdeps/wordsize-64/bits/environments.h: New file.
|
||||
|
||||
* posix/getopt.c: Remove declaration of getpid and __libc_pid.
|
||||
* posix/getopt_init.c: Test for value 0xf00baa of uninitialized
|
||||
__libc_pid.
|
||||
* sysdeps/unix/sysv/linux/init-first.c: Initialize __libc_pid to
|
||||
0xf00baa.
|
||||
|
||||
* string/string.h: Add declaration of __strverscmp.
|
||||
* string/strverscmp.c: Rename function ot __strverscmp and make old
|
||||
name weak alias.
|
||||
|
||||
* sysdeps/generic/dl-sysdep.c: Declare and define __libc_uid.
|
||||
* sysdeps/generic/enbl-secure.c: Likewise.
|
||||
* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/sigset.h: Pretty print.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/pci.h: New file.
|
||||
|
||||
1997-12-03 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* posix/sys/wait.h: Use __transparent_union__ instead of
|
||||
transparent_union. Reported by Roland McGrath.
|
||||
|
||||
1997-12-03 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||
|
||||
* resolv/inet_neta.c (inet_neta): Change type of first parameter
|
||||
to u_int32_t. Suggested by John Lavagnino <John_Lavagnino@Brown.edu>
|
||||
[PR libc/366].
|
||||
|
||||
* resolv/inet_addr.c (inet_addr): Change return type to u_int32_t.
|
||||
|
||||
* inet/arpa/inet.h: Change types of inet_neta and inet_addr.
|
||||
|
||||
1997-12-03 20:40 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
|
||||
|
||||
* grp/initgroups.c: Increase buffer if it is too small.
|
||||
|
||||
1997-12-03 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/netinet/ip.h: Don't use u_int8_t for bit
|
||||
fields, this is no ISO C. Reported by Andreas Jaeger.
|
||||
|
||||
1997-12-03 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||
|
||||
* sysdeps/i386/sys/ucontext.h (enum): Add missing commata.
|
||||
|
||||
1997-12-03 08:58 Philip Blundell <pb@nexus.co.uk>
|
||||
|
||||
* sysdeps/generic/bits/utsname.h: <sys/utsname.h> defines
|
||||
_SYS_UTSNAME_H not _UTSNAME_H.
|
||||
|
||||
1997-11-28 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* elf/dl-profile.c (_dl_start_profile): Avoid overflow when
|
||||
computing s_scale.
|
||||
|
||||
1997-11-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* sysdeps/libm-ieee754/s_csqrt.c: Use different formula for now.
|
||||
* sysdeps/libm-ieee754/s_csqrtf.c: Likewise.
|
||||
* sysdeps/libm-ieee754/s_csqrtl.c: Likewise.
|
||||
|
||||
* math/libm-test.c (csqrt_test): Add testcase.
|
||||
|
||||
1997-12-03 15:44 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/ultrasound.h: New file.
|
||||
* sysdeps/unix/sysv/linux/sys/Dist: Add it.
|
||||
* sysdeps/unix/sysv/linux/sys/Makefile [$(subdir)=misc]: Likewise.
|
||||
|
||||
1997-11-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/timex.h: Fix declaration.
|
||||
|
||||
1997-12-01 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||
|
||||
* math/libm-test.c (acos_test): Add more tests.
|
||||
(asin_test): Likewise.
|
||||
(atan_test): Likewise.
|
||||
(exp_test): Likewise.
|
||||
(sin_test): Likewise.
|
||||
(sqrt_test): Likewise.
|
||||
(cpow_test): Likewise.
|
||||
(csqrt_test): Likewise.
|
||||
(cexp_test): Correct typo in gcc version test.
|
||||
|
||||
1997-12-02 17:14 Philip Blundell <pb@nexus.co.uk>
|
||||
|
||||
* sysdeps/arm/__longjmp.S: Define _SETJMP_H before including
|
||||
<bits/setjmp.h>.
|
||||
* sysdeps/arm/setjmp.S: Likewise.
|
||||
|
||||
* sysdeps/unix/sysv/linux/arm/bits/mman.h: New file.
|
||||
|
||||
1997-12-02 18:07 Philip Blundell <pb@nexus.co.uk>
|
||||
|
||||
* stdio/stdio.h: Add prototype for tmpfile64().
|
||||
|
||||
1997-12-02 17:47 Philip Blundell <pb@nexus.co.uk>
|
||||
|
||||
* stdio/stdio.h (__stdio_gen_tempname): Add extra argument to
|
||||
prototype to keep in step with libio version.
|
||||
|
||||
* stdio-common/tmpfile64.c: Include <errno.h> for ENOSYS.
|
||||
|
||||
1997-12-02 17:41 Philip Blundell <pb@nexus.co.uk>
|
||||
|
||||
* sysdeps/generic/Makefile: Don't try to use make_siglist if
|
||||
cross-compiling.
|
||||
|
||||
1997-12-02 01:18 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/i386/clone.S: When cloned process returns
|
||||
load GOT ptr before jumping to _exit.
|
||||
Reported by Xavier Leroy.
|
||||
|
||||
1997-12-01 17:27 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* Makefile (subdirs): Add iconvdata and localedata.
|
||||
|
8
FAQ
8
FAQ
@ -176,6 +176,10 @@ other make program has the needed functionality.
|
||||
Versions before 3.74 have bugs which prevent correct execution so you
|
||||
should upgrade to the latest version before starting the compilation.
|
||||
|
||||
We recommend version GNU make version 3.75. Versions 3.76 and
|
||||
3.76.1 are known to have bugs which only show up in big projects like
|
||||
GNU libc.
|
||||
|
||||
|
||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
|
||||
@ -338,10 +342,6 @@ incompatibilities:
|
||||
syscall name: wrapper name: declaring header file:
|
||||
------------- ------------- ----------------------
|
||||
bdflush bdflush <sys/kdaemon.h>
|
||||
create_module create_module <sys/module.h>
|
||||
delete_module delete_module <sys/module.h>
|
||||
get_kernel_syms get_kernel_syms <sys/module.h>
|
||||
init_module init_module <sys/module.h>
|
||||
syslog ksyslog_ctl <sys/klog.h>
|
||||
|
||||
* lpd: Older versions of lpd depend on a routine called _validuser().
|
||||
|
@ -688,6 +688,12 @@ ifndef rtld-version-installed-name
|
||||
rtld-version-installed-name = ld-$(version).so
|
||||
endif
|
||||
|
||||
# The librt must contain be linked with the thread library. It least
|
||||
# for now.
|
||||
ifneq (,$(findstring linuxthreads,$(add-ons)))
|
||||
shared-thread-library = $(common-objpfx)linuxthreads/libpthread.so
|
||||
endif
|
||||
|
||||
endif # build-shared
|
||||
|
||||
endif # Makeconfig not yet included
|
||||
|
2
Makefile
2
Makefile
@ -55,7 +55,7 @@ subdirs = csu assert ctype db2 locale intl catgets math setjmp signal stdlib \
|
||||
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd \
|
||||
posix io termios resource misc socket sysvipc gmon gnulib iconv \
|
||||
iconvdata wctype manual shadow md5-crypt po argp $(add-ons) nss \
|
||||
localedata $(sysdep-subdirs) $(binfmt-subdir)
|
||||
localedata rt $(sysdep-subdirs) $(binfmt-subdir)
|
||||
export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63.
|
||||
|
||||
# The mach and hurd subdirectories have many generated header files which
|
||||
|
19
NEWS
19
NEWS
@ -18,24 +18,33 @@ Version 2.1
|
||||
* Miles Bader provided the `argp' function family to support hierachical
|
||||
command line argument parsing, layered on top of getopt.
|
||||
|
||||
* strtod accepts new hexadecimal floating-point format from ISO C 9X
|
||||
* strtod accepts new hexadecimal floating-point format from ISO C 9X.
|
||||
|
||||
* printf has two new specifiers %a and %A to print hexadecimal flaoting-point
|
||||
numbers
|
||||
numbers.
|
||||
|
||||
* scanf recognizes the %A format for scanning floating point numbers
|
||||
* scanf recognizes the %a and %A format for scanning floating point numbers.
|
||||
|
||||
* the new header <inttypes.h> from ISO C 9X provides information and
|
||||
interfaces for the available integer types
|
||||
interfaces for the available integer types.
|
||||
|
||||
* the new header <complex.h> contains definitions of the complex math
|
||||
functions from ISO C 9X
|
||||
functions from ISO C 9X.
|
||||
|
||||
* the new header <tgmath.h> defines generic macros to use complex or
|
||||
real valued functions.
|
||||
|
||||
* Thorsten Kukuk provided an implementation for NIS+, securelevel 0, 1 and 2.
|
||||
|
||||
* Andreas Jaeger provided a test suite for the math library.
|
||||
|
||||
* Mark Kettenis implemented the utmpx interface and an utmp daemon.
|
||||
|
||||
* Ulrich Drepper added character conversion functions.
|
||||
|
||||
* Optimized string functions have been added.
|
||||
|
||||
* The localedata addon is now part of glibc.
|
||||
|
||||
Version 2.0.5
|
||||
|
||||
|
@ -316,8 +316,17 @@ enum
|
||||
#define _SC_NL_NMAX _SC_NL_NMAX
|
||||
_SC_NL_SETMAX,
|
||||
#define _SC_NL_SETMAX _SC_NL_SETMAX
|
||||
_SC_NL_TEXTMAX
|
||||
_SC_NL_TEXTMAX,
|
||||
#define _SC_NL_TEXTMAX _SC_NL_TEXTMAX
|
||||
|
||||
_SC_XBS5_ILP32_OFF32,
|
||||
#define _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFF32
|
||||
_SC_XBS5_ILP32_OFFBIG,
|
||||
#define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG
|
||||
_SC_XBS5_LP64_OFF64,
|
||||
#define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64
|
||||
_SC_XBS5_LPBIG_OFFBIG
|
||||
#define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG
|
||||
};
|
||||
|
||||
#if (defined __USE_POSIX2 || defined __USE_UNIX98 \
|
||||
|
184
bits/siginfo.h
Normal file
184
bits/siginfo.h
Normal file
@ -0,0 +1,184 @@
|
||||
/* siginfo_t, sigevent and constants. Stub version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SIGNAL_H
|
||||
# error "Never include this file directly. Use <signal.h> instead"
|
||||
#endif
|
||||
|
||||
typedef struct siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_errno; /* If non-zero, an errno value associated with
|
||||
this signal, as defined in <errno.h>. */
|
||||
int si_code; /* Signal code. */
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
void *si_addr; /* Address of faulting instruction. */
|
||||
int si_status; /* Exit value or signal. */
|
||||
long int si_band; /* Band event for SIGPOLL. */
|
||||
union sigval si_value; /* Signal value. */
|
||||
} siginfo_t;
|
||||
|
||||
|
||||
/* Values for `si_code'. Positive values are reserved for kernel-generated
|
||||
signals. */
|
||||
enum
|
||||
{
|
||||
SI_ASYNCIO = -4, /* Sent by AIO completion. */
|
||||
#define SI_ASYNCIO SI_ASYNCIO
|
||||
SI_MESGQ, /* Sent by real time mesq state change. */
|
||||
#define SI_MESGQ SI_MESGQ
|
||||
SI_TIMER, /* Sent by timer expiration. */
|
||||
#define SI_TIMER SI_TIMER
|
||||
SI_QUEUE, /* Sent by sigqueue. */
|
||||
#define SI_QUEUE SI_QUEUE
|
||||
SI_USER /* Sent by kill, sigsend, raise. */
|
||||
#define SI_USER SI_USER
|
||||
};
|
||||
|
||||
|
||||
/* `si_code' values for SIGILL signal. */
|
||||
enum
|
||||
{
|
||||
ILL_ILLOPC = 1, /* Illegal opcode. */
|
||||
#define ILL_ILLOPC ILL_ILLOPC
|
||||
ILL_ILL_OPN, /* Illegal operand. */
|
||||
#define ILL_ILLOPN ILL_ILLOPN
|
||||
ILL_ILLADR, /* Illegal addressing mode. */
|
||||
#define ILL_ILLADR ILL_ILLADR
|
||||
ILL_ILLTRP, /* Illegal trap. */
|
||||
#define ILL_ILLTRP ILL_ILLTRP
|
||||
ILL_PRVOPC, /* Privileged opcode. */
|
||||
#define ILL_PRVOPC ILL_PRVOPC
|
||||
ILL_PRVREG, /* Privileged register. */
|
||||
#define ILL_PRVREG ILL_PRVREG
|
||||
ILL_COPROC, /* Coprocessor error. */
|
||||
#define ILL_COPROC ILL_COPROC
|
||||
ILL_BADSTK /* Internal stack error. */
|
||||
#define ILL_BADSTK ILL_BADSTK
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGFPE signal. */
|
||||
enum
|
||||
{
|
||||
FPE_INTDIV = 1, /* Integer divide by zero. */
|
||||
#define FPE_INTDIV FPE_INTDIV
|
||||
FPE_INTOVF, /* Integer overflow. */
|
||||
#define FPE_INTOVF FPE_INTOVF
|
||||
FPE_FLTDIV, /* Floating point divide by zero. */
|
||||
#define FPE_FLTDIV FPE_FLTDIV
|
||||
FPE_FLTOVF, /* Floating point overflow. */
|
||||
#define FPE_FLTOVF FPE_FLTOVF
|
||||
FPE_FLTUND, /* Floating point underflow. */
|
||||
#define FPE_FLTUND FPE_FLTUND
|
||||
FPE_FLTRES, /* Floating point inexact result. */
|
||||
#define FPE_FLTRES FPE_FLTRES
|
||||
FPE_FLTINV, /* Floating point invalid operation. */
|
||||
#define FPE_FLTINV FPE_FLTINV
|
||||
FPE_FLTSUB /* Subscript out of range. */
|
||||
#define FPE_FLTSUB FPE_FLTSUB
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGSEGV signal. */
|
||||
enum
|
||||
{
|
||||
SEGV_MAPERR = 1, /* Address not mapped to object. */
|
||||
#define SEGV_MAPERR SEGV_MAPERR
|
||||
SEGV_ACCERR /* Invalid permissions for mapped object. */
|
||||
#define SEGV_ACCERR SEGV_ACCERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGBUS signal. */
|
||||
enum
|
||||
{
|
||||
BUS_ADRALN = 1, /* Invalid address alignment. */
|
||||
#define BUS_ADRALN BUS_ADRALN
|
||||
BUS_ADRERR, /* Non-existant physical address. */
|
||||
#define BUS_ADRERR BUS_ADRERR
|
||||
BUS_OBJERR /* Object specific hardware error. */
|
||||
#define BUS_OBJERR BUS_OBJERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGTRAP signal. */
|
||||
enum
|
||||
{
|
||||
TRAP_BRKPT = 1, /* Process breakpoint. */
|
||||
#define TRAP_BRKPT TRAP_BRKPT
|
||||
TRAP_TRACE /* Process trace trap. */
|
||||
#define TRAP_TRACE TRAP_TRACE
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGCHLD signal. */
|
||||
enum
|
||||
{
|
||||
CLD_EXITED = 1, /* Child has exited. */
|
||||
#define CLD_EXITED CLD_EXITED
|
||||
CLD_KILLED, /* Child was killed. */
|
||||
#define CLD_KILLED CLD_KILLED
|
||||
CLD_DUMPED, /* Child terminated abnormally. */
|
||||
#define CLD_DUMPED CLD_DUMPED
|
||||
CLD_TRAPPED, /* Traced child has trapped. */
|
||||
#define CLD_TRAPPED CLD_TRAPPED
|
||||
CLD_STOPPED, /* Child has stopped. */
|
||||
#define CLD_STOPPED CLD_STOPPED
|
||||
CLD_CONTINUED /* Stopped child has continued. */
|
||||
#define CLD_CONTINUED CLD_CONTINUED
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGPOLL signal. */
|
||||
enum
|
||||
{
|
||||
POLL_IN = 1, /* Data input available. */
|
||||
#define POLL_IN POLL_IN
|
||||
POLL_OUT, /* Output buffers available. */
|
||||
#define POLL_OUT POLL_OUT
|
||||
POLL_MSG, /* Input message available. */
|
||||
#define POLL_MSG POLL_MSG
|
||||
POLL_ERR, /* I/O error. */
|
||||
#define POLL_ERR POLL_ERR
|
||||
POLL_PRI, /* High priority input available. */
|
||||
#define POLL_PRI POLL_PRI
|
||||
POLL_HUP /* Device disconnected. */
|
||||
#define POLL_HUP POLL_HUP
|
||||
};
|
||||
|
||||
|
||||
/* Structure to transport application-defined values with signals. */
|
||||
#define SIGEV_MAX_SIZE 64
|
||||
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE / sizeof (int)) - 3)
|
||||
|
||||
typedef struct sigevent
|
||||
{
|
||||
sigval_t sigev_value;
|
||||
int sigev_signo;
|
||||
int sigev_notify;
|
||||
void (*sigev_notify_function) __P ((sigval_t)); /* Function to start. */
|
||||
void *sigev_notify_attributes; /* Really pthread_attr_t.*/
|
||||
} sigevent_t;
|
||||
|
||||
/* `sigev_notify' values. */
|
||||
enum
|
||||
{
|
||||
SIGEV_SIGNAL = 0, /* Notify via signal. */
|
||||
#define SIGEV_SIGNAL SIGEV_SIGNAL
|
||||
SIGEV_NONE, /* Other notification: meaningless. */
|
||||
#define SIGEV_NONE SIGEV_NONE
|
||||
SIGEV_THREAD /* Deliver via thread creation. */
|
||||
#define SIGEV_THREAD SIGEV_THREAD
|
||||
};
|
@ -16,7 +16,7 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _UTSNAME_H
|
||||
#ifndef _SYS_UTSNAME_H
|
||||
# error "Never include <bits/utsname.h> directly; use <sys/utsname.h> instead."
|
||||
#endif
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <inttypes.h>
|
||||
#include <limits.h>
|
||||
#include <link.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -403,13 +404,20 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
|
||||
/* Setup counting data. */
|
||||
if (kcountsize < highpc - lowpc)
|
||||
{
|
||||
/* XXX I've not yet verified that the second expression is really
|
||||
well suited but something like this is in any case necessary
|
||||
for targets without hardware FP support. --drepper */
|
||||
#if 0
|
||||
s_scale = ((double) kcountsize / (highpc - lowpc)) * SCALE_1_TO_1;
|
||||
#else
|
||||
s_scale = (kcountsize * SCALE_1_TO_1) / (highpc - lowpc);
|
||||
size_t range = highpc - lowpc;
|
||||
size_t quot = range / kcountsize;
|
||||
|
||||
if (quot >= SCALE_1_TO_1)
|
||||
s_scale = 1;
|
||||
else if (quot >= SCALE_1_TO_1 / 256)
|
||||
s_scale = SCALE_1_TO_1 / quot;
|
||||
else if (range > ULONG_MAX / 256)
|
||||
s_scale = (SCALE_1_TO_1 * 256) / (range / (kcountsize / 256));
|
||||
else
|
||||
s_scale = (SCALE_1_TO_1 * 256) / ((range * 256) / kcountsize);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1989, 1991, 1993, 1996 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1989, 1991, 1993, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -17,10 +17,11 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <alloca.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <grp.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
@ -32,7 +33,7 @@ initgroups (user, group)
|
||||
const char *user;
|
||||
gid_t group;
|
||||
{
|
||||
#if defined (NGROUPS_MAX) && NGROUPS_MAX == 0
|
||||
#if defined NGROUPS_MAX && NGROUPS_MAX == 0
|
||||
|
||||
/* No extra groups allowed. */
|
||||
return 0;
|
||||
@ -42,9 +43,10 @@ initgroups (user, group)
|
||||
struct group grpbuf, *g;
|
||||
size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX);
|
||||
char *tmpbuf;
|
||||
register size_t n;
|
||||
size_t n;
|
||||
size_t ngroups;
|
||||
gid_t *groups;
|
||||
int status;
|
||||
#ifdef NGROUPS_MAX
|
||||
# define limit NGROUPS_MAX
|
||||
|
||||
@ -67,32 +69,44 @@ initgroups (user, group)
|
||||
n = 0;
|
||||
groups[n++] = group;
|
||||
|
||||
while (__getgrent_r (&grpbuf, tmpbuf, buflen, &g) >= 0)
|
||||
if (g->gr_gid != group)
|
||||
{
|
||||
register char **m;
|
||||
do
|
||||
{
|
||||
while ((status = __getgrent_r (&grpbuf, tmpbuf, buflen, &g)) != 0
|
||||
&& errno == ERANGE)
|
||||
{
|
||||
buflen *= 2;
|
||||
tmpbuf = __alloca (buflen);
|
||||
}
|
||||
|
||||
for (m = g->gr_mem; *m != NULL; ++m)
|
||||
if (strcmp (*m, user) == 0)
|
||||
{
|
||||
/* Matches user. Insert this group. */
|
||||
if (n == ngroups && limit <= 0)
|
||||
{
|
||||
/* Need a bigger buffer. */
|
||||
groups = memcpy (__alloca (ngroups * 2 * sizeof *groups),
|
||||
groups, ngroups * sizeof *groups);
|
||||
ngroups *= 2;
|
||||
}
|
||||
if (status == 0 && g->gr_gid != group)
|
||||
{
|
||||
char **m;
|
||||
|
||||
groups[n++] = g->gr_gid;
|
||||
for (m = g->gr_mem; *m != NULL; ++m)
|
||||
if (strcmp (*m, user) == 0)
|
||||
{
|
||||
/* Matches user. Insert this group. */
|
||||
if (n == ngroups && limit <= 0)
|
||||
{
|
||||
/* Need a bigger buffer. */
|
||||
gid_t *newgrp;
|
||||
newgrp = __alloca (ngroups * 2 * sizeof *groups);
|
||||
groups = memcpy (newgrp, groups, ngroups * sizeof *groups);
|
||||
ngroups *= 2;
|
||||
}
|
||||
|
||||
if (n == limit)
|
||||
/* Can't take any more groups; stop searching. */
|
||||
goto done;
|
||||
groups[n++] = g->gr_gid;
|
||||
|
||||
if (n == limit)
|
||||
/* Can't take any more groups; stop searching. */
|
||||
goto done;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (status == 0);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
done:
|
||||
endgrent ();
|
||||
|
||||
|
@ -28,7 +28,7 @@ __BEGIN_DECLS
|
||||
|
||||
/* Convert Internet host address from numbers-and-dots notation in CP
|
||||
into binary data in network byte order. */
|
||||
extern unsigned long int inet_addr __P ((__const char *__cp));
|
||||
extern u_int32_t inet_addr __P ((__const char *__cp));
|
||||
|
||||
/* Convert Internet host address from numbers-and-dots notation in CP
|
||||
into binary data and store the result in the structure INP. */
|
||||
@ -43,8 +43,7 @@ extern struct in_addr inet_makeaddr __P ((u_int32_t __net, u_int32_t __host));
|
||||
|
||||
/* Format a network number NET into presentation format and place result
|
||||
in buffer starting at BUF with length of LEN bytes. */
|
||||
extern char *inet_neta __P ((unsigned long int __net, char *__buf,
|
||||
size_t __len));
|
||||
extern char *inet_neta __P ((u_int32_t __net, char *__buf, size_t __len));
|
||||
|
||||
/* Return network number part of the Internet address IN. */
|
||||
extern u_int32_t inet_netof __P ((struct in_addr __in));
|
||||
|
4
libc.map
4
libc.map
@ -20,6 +20,7 @@ GLIBC_2.0 {
|
||||
|
||||
# helper functions
|
||||
__errno_location; __libc_init_first; __h_errno_location;
|
||||
__libc_current_sigrtmin; __libc_current_sigrtmax; __libc_allocate_rtsig;
|
||||
|
||||
# functions with special/multiple interfaces
|
||||
__sigsetjmp; _setjmp; __sigaddset; __sigdelset; __sigismember;
|
||||
@ -433,4 +434,7 @@ GLIBC_2.1 {
|
||||
# functions in normal name space
|
||||
fopen; fclose;
|
||||
|
||||
# New RT signal functions.
|
||||
sigqueue; sigtimedwait; sigwaitinfo;
|
||||
|
||||
} GLIBC_2.0;
|
||||
|
@ -117,7 +117,7 @@ CPPFLAGS-s_lib_version.c := -D_POSIX_MODE
|
||||
|
||||
# We don't want the fdlibm code to use the inline math functions,
|
||||
# only the fdlibm code.
|
||||
CPPFLAGS += -D__NO_MATH_INLINES
|
||||
CPPFLAGS += -D__NO_MATH_INLINES -D__LIBC_INTERNAL_MATH_INLINES
|
||||
|
||||
# Using omit-long-double-fcts is only a temporary hack.
|
||||
ifneq ($(omit-long-double-fcts),yes)
|
||||
|
@ -78,12 +78,13 @@
|
||||
|
||||
/* "Philosophy":
|
||||
|
||||
This suite tests the correct implementation of mathematical
|
||||
functions in libm. Some simple, specific parameters are tested for
|
||||
correctness. Handling of specific inputs (e.g. infinity,
|
||||
not-a-number) is also tested. Correct handling of exceptions is
|
||||
checked against. These implemented tests should check all cases
|
||||
that are specified in ISO C 9X.
|
||||
This suite tests some aspects of the correct implementation of
|
||||
mathematical functions in libm. Some simple, specific parameters
|
||||
are tested for correctness but there's no exhaustive
|
||||
testing. Handling of specific inputs (e.g. infinity, not-a-number)
|
||||
is also tested. Correct handling of exceptions is checked
|
||||
against. These implemented tests should check all cases that are
|
||||
specified in ISO C 9X.
|
||||
|
||||
Exception testing: At the moment only divide-by-zero and invalid
|
||||
exceptions are tested. Overflow/underflow and inexact exceptions
|
||||
@ -837,9 +838,15 @@ acos_test (void)
|
||||
FUNC(acos) (x),
|
||||
INVALID_EXCEPTION);
|
||||
#endif
|
||||
check ("acos (0) == pi/2", FUNC(acos) (0), M_PI_2);
|
||||
check ("acos (-0) == pi/2", FUNC(acos) (minus_zero), M_PI_2);
|
||||
|
||||
check ("acos (1) == 0", FUNC(acos) (1), 0);
|
||||
check ("acos (-1) == pi", FUNC(acos) (-1), M_PI);
|
||||
|
||||
check ("acos (0.5) == pi/3", FUNC(acos) (0.5), M_PI_6 * 2.0);
|
||||
check ("acos (-0.5) == 2*pi/3", FUNC(acos) (-0.5), M_PI_6 * 4.0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -878,9 +885,14 @@ asin_test (void)
|
||||
#endif
|
||||
|
||||
check ("asin (0) == 0", FUNC(asin) (0), 0);
|
||||
check ("asin (-0) == -0", FUNC(asin) (minus_zero), minus_zero);
|
||||
check_eps ("asin (0.5) == pi/6", FUNC(asin) (0.5), M_PI_6,
|
||||
CHOOSE(3.5e-18, 0, 2e-7));
|
||||
check_eps ("asin (-0.5) == -pi/6", FUNC(asin) (-0.5), -M_PI_6,
|
||||
CHOOSE(3.5e-18, 0, 2e-7));
|
||||
check ("asin (1.0) == pi/2", FUNC(asin) (1.0), M_PI_2);
|
||||
check ("asin (-1.0) == -pi/2", FUNC(asin) (-1.0), -M_PI_2);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -906,6 +918,10 @@ atan_test (void)
|
||||
|
||||
check ("atan (+inf) == pi/2", FUNC(atan) (plus_infty), M_PI_2);
|
||||
check ("atan (-inf) == -pi/2", FUNC(atan) (minus_infty), -M_PI_2);
|
||||
|
||||
check ("atan (1) == pi/4", FUNC(atan) (1), M_PI_4);
|
||||
check ("atan (-1) == -pi/4", FUNC(atan) (1), M_PI_4);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1062,6 +1078,8 @@ cos_test (void)
|
||||
|
||||
check_eps ("cos (pi/3) == 0.5", FUNC(cos) (M_PI_6 * 2.0),
|
||||
0.5, CHOOSE (4e-18L, 1e-15L, 1e-7L));
|
||||
check_eps ("cos (2*pi/3) == -0.5", FUNC(cos) (M_PI_6 * 4.0),
|
||||
-0.5, CHOOSE (4e-18L, 1e-15L, 1e-7L));
|
||||
check_eps ("cos (pi/2) == 0", FUNC(cos) (M_PI_2),
|
||||
0, CHOOSE (1e-19L, 1e-16L, 1e-7L));
|
||||
|
||||
@ -1123,6 +1141,9 @@ exp_test (void)
|
||||
check ("exp (-inf) == 0", FUNC(exp) (minus_infty), 0);
|
||||
#endif
|
||||
check_eps ("exp (1) == e", FUNC(exp) (1), M_E, CHOOSE (4e-18L, 5e-16, 0));
|
||||
|
||||
check ("exp (2) == e^2", FUNC(exp) (2), M_E * M_E);
|
||||
check ("exp (3) == e^3", FUNC(exp) (3), M_E * M_E * M_E);
|
||||
}
|
||||
|
||||
|
||||
@ -1724,8 +1745,11 @@ sin_test (void)
|
||||
INVALID_EXCEPTION);
|
||||
|
||||
check_eps ("sin (pi/6) == 0.5", FUNC(sin) (M_PI_6),
|
||||
0.5,CHOOSE (4e-18L, 0, 0));
|
||||
0.5, CHOOSE (4e-18L, 0, 0));
|
||||
check_eps ("sin (-pi/6) == -0.5", FUNC(sin) (-M_PI_6),
|
||||
-0.5, CHOOSE (4e-18L, 0, 0));
|
||||
check ("sin (pi/2) == 1", FUNC(sin) (M_PI_2), 1);
|
||||
check ("sin (-pi/2) == -1", FUNC(sin) (-M_PI_2), -1);
|
||||
}
|
||||
|
||||
|
||||
@ -2328,6 +2352,9 @@ sqrt_test (void)
|
||||
check_ext ("sqrt (x*x) == x", FUNC(sqrt) (x*x), x, x);
|
||||
check ("sqrt (4) == 2", FUNC(sqrt) (4), 2);
|
||||
check ("sqrt (0.25) == 0.5", FUNC(sqrt) (0.25), 0.5);
|
||||
check ("sqrt (6642.25) == 81.5", FUNC(sqrt) (6642.25), 81.5);
|
||||
check_eps ("sqrt (15239.903) == 123.45", FUNC(sqrt) (15239.903), 123.45,
|
||||
CHOOSE (3e-6L, 3e-6, 8e-6));
|
||||
|
||||
}
|
||||
|
||||
@ -2459,7 +2486,7 @@ cexp_test (void)
|
||||
check_isnan ("imag(cexp(0 + i inf)) = NaN plus invalid exception",
|
||||
__imag__ result);
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ <= 2 && __GNUC_MINOR <= 7
|
||||
#if defined __GNUC__ && __GNUC__ <= 2 && __GNUC_MINOR__ <= 7
|
||||
if (verbose)
|
||||
printf ("The following test for cexp might fail due to a gcc compiler error!\n");
|
||||
#endif
|
||||
@ -4767,9 +4794,21 @@ csqrt_test (void)
|
||||
check_isnan ("real(csqrt(NaN + i NaN)) = NaN", __real__ result);
|
||||
check_isnan ("imag(csqrt(NaN + i NaN)) = NaN", __imag__ result);
|
||||
|
||||
result = FUNC(csqrt) (BUILD_COMPLEX (16.0, -30.0));
|
||||
check ("real(csqrt(16 - 30i)) = 5", __real__ result, 5.0);
|
||||
check ("imag(csqrt(16 - 30i)) = -3", __imag__ result, -3.0);
|
||||
|
||||
result = FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
|
||||
check ("real(csqrt(1 + i0) = 0", __real__ result, 0);
|
||||
check ("imag(csqrt(1 + i0) = 1", __imag__ result, 1);
|
||||
|
||||
result = FUNC(csqrt) (BUILD_COMPLEX (0, 2));
|
||||
check ("real(csqrt(0 + i 2) = 1", __real__ result, 1);
|
||||
check ("imag(csqrt(0 + i 2) = 1", __imag__ result, 1);
|
||||
|
||||
result = FUNC(csqrt) (BUILD_COMPLEX (119, 120));
|
||||
check ("real(csqrt(119 + i 120) = 12", __real__ result, 12);
|
||||
check ("imag(csqrt(119 + i 120) = 5", __imag__ result, 5);
|
||||
}
|
||||
|
||||
|
||||
@ -4779,14 +4818,24 @@ cpow_test (void)
|
||||
__complex__ MATHTYPE result;
|
||||
|
||||
result = FUNC (cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
|
||||
check ("real(cpow (1 + i0), (0 + i0)) = 0", __real__ result, 1);
|
||||
check ("imag(cpow (1 + i0), (0 + i0)) = 0", __imag__ result, 0);
|
||||
check ("real(cpow (1 + i0), (0 + i0)) == 0", __real__ result, 1);
|
||||
check ("imag(cpow (1 + i0), (0 + i0)) == 0", __imag__ result, 0);
|
||||
|
||||
result = FUNC (cpow) (BUILD_COMPLEX (2, 0), BUILD_COMPLEX (10, 0));
|
||||
check_eps ("real(cpow (2 + i0), (10 + i0)) = 1024", __real__ result, 1024,
|
||||
check_eps ("real(cpow (2 + i0), (10 + i0)) == 1024", __real__ result, 1024,
|
||||
CHOOSE (2e-16L, 0, 0));
|
||||
check ("imag(cpow (2 + i0), (10 + i0)) = 0", __imag__ result, 0);
|
||||
check ("imag(cpow (2 + i0), (10 + i0)) == 0", __imag__ result, 0);
|
||||
|
||||
result = FUNC (cpow) (BUILD_COMPLEX (M_E, 0), BUILD_COMPLEX (0, 2*M_PI));
|
||||
check ("real(cpow (e + i0), (0 + i 2*PI)) == 1", __real__ result, 1);
|
||||
check_eps ("imag(cpow (e + i0), (0 + i 2*PI)) == 0", __imag__ result, 0,
|
||||
CHOOSE (1e-18L, 3e-16, 4e-7));
|
||||
|
||||
result = FUNC (cpow) (BUILD_COMPLEX (2, 3), BUILD_COMPLEX (4, 0));
|
||||
check_eps ("real(cpow (2 + i3), (4 + i0)) == -119", __real__ result, -119,
|
||||
CHOOSE (2e-17L, 2e-14, 4e-5));
|
||||
check_eps ("imag(cpow (2 + i3), (4 + i0)) == -120", __imag__ result, -120,
|
||||
CHOOSE (4e-17L, 0, 8e-6));
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,7 +26,7 @@ headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \
|
||||
bits/posix1_lim.h bits/posix2_lim.h bits/posix_opt.h \
|
||||
bits/local_lim.h tar.h bits/utsname.h bits/confname.h \
|
||||
bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h \
|
||||
bits/sched.h re_comp.h wait.h
|
||||
bits/sched.h re_comp.h wait.h bits/environments.h
|
||||
|
||||
distribute := confstr.h TESTS TESTS2C.sed testcases.h \
|
||||
globtest.c globtest.sh
|
||||
|
@ -44,7 +44,9 @@ confstr (name, buf, len)
|
||||
}
|
||||
break;
|
||||
|
||||
case _CS_XBS5_ILP32_OFFBIG_CFLAGS:
|
||||
case _CS_LFS_CFLAGS:
|
||||
#if defined _XBS5_ILP32_OFF32 && !defined _XBS5_ILP32_OFFBIG
|
||||
/* Signal that we want the new ABI. */
|
||||
{
|
||||
static const char file_offset[] = "-D_FILE_OFFSET_BITS=64";
|
||||
@ -52,6 +54,7 @@ confstr (name, buf, len)
|
||||
string_len = sizeof (file_offset);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case _CS_LFS_LINTFLAGS:
|
||||
case _CS_LFS_LDFLAGS:
|
||||
@ -65,7 +68,6 @@ confstr (name, buf, len)
|
||||
case _CS_XBS5_ILP32_OFF32_LDFLAGS:
|
||||
case _CS_XBS5_ILP32_OFF32_LIBS:
|
||||
case _CS_XBS5_ILP32_OFF32_LINTFLAGS:
|
||||
case _CS_XBS5_ILP32_OFFBIG_CFLAGS:
|
||||
case _CS_XBS5_ILP32_OFFBIG_LDFLAGS:
|
||||
case _CS_XBS5_ILP32_OFFBIG_LIBS:
|
||||
case _CS_XBS5_ILP32_OFFBIG_LINTFLAGS:
|
||||
|
@ -76,12 +76,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (WINDOWS32) && !defined (__CYGWIN32__)
|
||||
/* It's not Unix, really. See? Capital letters. */
|
||||
#include <windows.h>
|
||||
#define getpid() GetCurrentProcessId()
|
||||
#endif
|
||||
|
||||
#ifndef _
|
||||
/* This is for other GNU distributions with internationalized messages.
|
||||
When compiling libc, the _ macro is predefined. */
|
||||
@ -259,8 +253,6 @@ static int nonoption_flags_len;
|
||||
static int original_argc;
|
||||
static char *const *original_argv;
|
||||
|
||||
extern pid_t __libc_pid;
|
||||
|
||||
/* Make sure the environment variable bash 2.0 puts in the environment
|
||||
is valid for the getopt call we must make sure that the ARGV passed
|
||||
to getopt is that one passed to the process. */
|
||||
|
@ -53,7 +53,7 @@ __getopt_clean_environment (char **env)
|
||||
|
||||
/* Generate name of the environment variable. We must know the PID
|
||||
and we must not use `sprintf'. */
|
||||
if (__libc_pid == 0)
|
||||
if (__libc_pid == 0xf00baa)
|
||||
__libc_pid = getpid ();
|
||||
|
||||
/* Construct "_<PID>_GNU_nonoption_argv_flags_=" string. */
|
||||
|
@ -60,7 +60,7 @@ typedef union
|
||||
{
|
||||
union wait *__uptr;
|
||||
int *__iptr;
|
||||
} __WAIT_STATUS __attribute__ ((transparent_union));
|
||||
} __WAIT_STATUS __attribute__ ((__transparent_union__));
|
||||
# define __WAIT_STATUS_DEFN int *
|
||||
#endif
|
||||
|
||||
|
@ -77,6 +77,9 @@ __BEGIN_DECLS
|
||||
are present. */
|
||||
#define _XOPEN_ENH_I18N 1
|
||||
|
||||
/* The legacy interfaces are also available. */
|
||||
#define _XOPEN_LEGACY 1
|
||||
|
||||
|
||||
/* Get values of POSIX options:
|
||||
|
||||
@ -122,6 +125,8 @@ __BEGIN_DECLS
|
||||
_POSIX_POLL Implementation supports `poll' function.
|
||||
_POSIX_SELECT Implementation supports `select' and `pselect'.
|
||||
|
||||
_XOPEN_REALTIME X/Open realtime support is available.
|
||||
_XOPEN_REALTIME_THREADS X/Open realtime thread support is available.
|
||||
_XOPEN_SHM Shared memory interface according to XPG4.2.
|
||||
|
||||
_XBS5_ILP32_OFF32 Implementation provides environment with 32-bit
|
||||
@ -162,6 +167,10 @@ __BEGIN_DECLS
|
||||
|
||||
#include <bits/posix_opt.h>
|
||||
|
||||
/* Get the environment definitions from Unix98. */
|
||||
#ifdef __USE_UNIX98
|
||||
# include <bits/environments.h>
|
||||
#endif
|
||||
|
||||
/* Standard file descriptors. */
|
||||
#define STDIN_FILENO 0 /* Standard input. */
|
||||
|
@ -71,7 +71,7 @@ static char rcsid[] = "$Id$";
|
||||
* Ascii internet address interpretation routine.
|
||||
* The value returned is in network order.
|
||||
*/
|
||||
u_long
|
||||
u_int32_t
|
||||
inet_addr(cp)
|
||||
register const char *cp;
|
||||
{
|
||||
|
@ -47,7 +47,7 @@ static const char rcsid[] = "$Id$";
|
||||
*/
|
||||
char *
|
||||
inet_neta(src, dst, size)
|
||||
u_long src;
|
||||
u_int32_t src;
|
||||
char *dst;
|
||||
size_t size;
|
||||
{
|
||||
|
42
rt/Makefile
Normal file
42
rt/Makefile
Normal file
@ -0,0 +1,42 @@
|
||||
# Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
# This file is part of the GNU C Library.
|
||||
|
||||
# The GNU C Library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of the
|
||||
# License, or (at your option) any later version.
|
||||
|
||||
# The GNU C Library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
#
|
||||
# Sub-makefile for real-time portion of the library.
|
||||
#
|
||||
subdir := rt
|
||||
|
||||
headers := aio.h
|
||||
|
||||
extra-libs := librt
|
||||
extra-libs-others := $(extra-libs)
|
||||
|
||||
librt-routines := aio_cancel aio_error aio_fsync aio_misc aio_read \
|
||||
aio_read64 aio_return aio_suspend aio_write \
|
||||
aio_write64 lio_listio lio_listio64 aio_sigqueue
|
||||
|
||||
librt-map := librt.map
|
||||
|
||||
distribute := aio_misc.h
|
||||
|
||||
include ../Rules
|
||||
|
||||
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
|
||||
# This ensures they will load libc.so for needed symbols if loaded by
|
||||
# a statically-linked program that hasn't already loaded it.
|
||||
$(objpfx)librt.so: $(common-objpfx)libc.so $(shared-thread-library)
|
231
rt/aio.h
Normal file
231
rt/aio.h
Normal file
@ -0,0 +1,231 @@
|
||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/*
|
||||
* ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output
|
||||
*/
|
||||
|
||||
#ifndef _AIO_H
|
||||
#define _AIO_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#define __need_timespec
|
||||
#include <time.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Asynchronous I/O control block. */
|
||||
struct aiocb
|
||||
{
|
||||
int aio_fildes; /* File desriptor. */
|
||||
int aio_lio_opcode; /* Operation to be performed. */
|
||||
int aio_reqprio; /* Request priority offset. */
|
||||
volatile void *aio_buf; /* Location of buffer. */
|
||||
size_t aio_nbytes; /* Length of transfer. */
|
||||
struct sigevent aio_sigevent; /* Signal number and value. */
|
||||
|
||||
/* Internal members. */
|
||||
struct aiocb *__last_fd;
|
||||
struct aiocb *__next_fd;
|
||||
struct aiocb *__next_prio;
|
||||
int __abs_prio;
|
||||
int __policy;
|
||||
int __error_code;
|
||||
__ssize_t __return_value;
|
||||
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__off_t aio_offset; /* File offset. */
|
||||
#else
|
||||
__off64_t aio_offset; /* File offset. */
|
||||
#endif
|
||||
int __unused[32];
|
||||
};
|
||||
|
||||
/* The same for the 64bit offsets. */
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct aiocb64
|
||||
{
|
||||
int aio_fildes; /* File desriptor. */
|
||||
int aio_lio_opcode; /* Operation to be performed. */
|
||||
int aio_reqprio; /* Request priority offset. */
|
||||
volatile void *aio_buf; /* Location of buffer. */
|
||||
size_t aio_nbytes; /* Length of transfer. */
|
||||
struct sigevent aio_sigevent; /* Signal number and value. */
|
||||
|
||||
/* Internal members. */
|
||||
struct aiocb64 *__last_fd;
|
||||
struct aiocb64 *__next_fd;
|
||||
struct aiocb64 *__next_prio;
|
||||
int __abs_prio;
|
||||
int __policy;
|
||||
int __error_code;
|
||||
__ssize_t __return_value;
|
||||
|
||||
__off64_t aio_offset; /* File offset. */
|
||||
int __unused[32];
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* Return values of cancelation function. */
|
||||
enum
|
||||
{
|
||||
AIO_CANCELED,
|
||||
#define AIO_CANCELED AIO_CANCELED
|
||||
AIO_NOTCANCELED,
|
||||
#define AIO_NOTCANCELED AIO_NOTCANCELED
|
||||
AIO_ALLDONE
|
||||
#define AIO_ALLDONE AIO_ALLDONE
|
||||
};
|
||||
|
||||
|
||||
/* Operation codes for `aio_lio_opcode'. */
|
||||
enum
|
||||
{
|
||||
LIO_READ,
|
||||
#define LIO_READ LIO_READ
|
||||
LIO_WRITE,
|
||||
#define LIO_WRITE LIO_WRITE
|
||||
LIO_NOP,
|
||||
#define LIO_NOP LIO_NOP
|
||||
__LIO_DSYNC,
|
||||
__LIO_SYNC,
|
||||
__LIO_READ64 = LIO_READ | 128,
|
||||
__LIO_WRITE64 = LIO_WRITE | 128
|
||||
};
|
||||
|
||||
|
||||
/* Synchronization options for `lio_listio' function. */
|
||||
enum
|
||||
{
|
||||
LIO_WAIT,
|
||||
#define LIO_WAIT LIO_WAIT
|
||||
LIO_NOWAIT
|
||||
#define LIO_NOWAIT LIO_NOWAIT
|
||||
};
|
||||
|
||||
|
||||
/* Enqueue read request for given number of bytes and the given priority. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int aio_read __P ((struct aiocb *__aiocbp));
|
||||
#else
|
||||
extern int aio_read __P ((struct aiocb *__aiocbp)) __asm__ ("aio_read64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int aio_read64 __P ((struct aiocb64 *__aiocbp));
|
||||
#endif
|
||||
|
||||
/* Enqueue write request for given number of bytes and the given priority. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int aio_write __P ((struct aiocb *__aiocbp));
|
||||
#else
|
||||
extern int aio_write __P ((struct aiocb *__aiocbp)) __asm__ ("aio_write64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int aio_write64 __P ((struct aiocb64 *__aiocbp));
|
||||
#endif
|
||||
|
||||
|
||||
/* Initiate list of I/O requests. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int lio_listio __P ((int __mode, struct aiocb *__const __list[],
|
||||
int __nent, struct sigevent *__sig));
|
||||
#else
|
||||
extern int lio_listio __P ((int __mode, struct aiocb *__const __list[],
|
||||
int __nent, struct sigevent *__sig))
|
||||
__asm__ ("lio_listio64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int lio_listio64 __P ((int __mode, struct aiocb64 *__const __list[],
|
||||
int __nent, struct sigevent *__sig));
|
||||
#endif
|
||||
|
||||
|
||||
/* Retrieve error status associated with AIOCBP. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int aio_error __P ((__const struct aiocb *__aiocbp));
|
||||
#else
|
||||
extern int aio_error __P ((__const struct aiocb *__aiocbp))
|
||||
__asm__ ("aio_error64");;
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int aio_error64 __P ((__const struct aiocb64 *__aiocbp));
|
||||
#endif
|
||||
|
||||
|
||||
/* Return status associated with AIOCBP. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern __ssize_t aio_return __P ((struct aiocb *__aiocbp));
|
||||
#else
|
||||
extern __ssize_t aio_return __P ((struct aiocb *__aiocbp))
|
||||
__asm__ ("aio_return64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern __ssize_t aio_return64 __P ((struct aiocb64 *__aiocbp));
|
||||
#endif
|
||||
|
||||
|
||||
/* Try to cancel asynchronous I/O requests outstanding against file
|
||||
descriptot FILDES. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int aio_cancel __P ((int __fildes, struct aiocb *__aiocbp));
|
||||
#else
|
||||
extern int aio_cancel __P ((int __fildes, struct aiocb *__aiocbp))
|
||||
__asm__ ("aio_cancel64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int aio_cancel64 __P ((int __fildes, struct aiocb64 *__aiocbp));
|
||||
#endif
|
||||
|
||||
|
||||
/* Suspend calling thread until at least one of the asynchronous I/O
|
||||
operations referenced by LIST has completed. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int aio_suspend __P ((__const struct aiocb *__const __list[],
|
||||
int __nent, __const struct timespec *__timeout));
|
||||
#else
|
||||
extern int aio_suspend __P ((__const struct aiocb *__const __list[],
|
||||
int __nent, __const struct timespec *__timeout))
|
||||
__asm__ ("aio_suspend64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int aio_suspend64 __P ((__const struct aiocb64 *__const __list[],
|
||||
int __nent,
|
||||
__const struct timespec *__timeout));
|
||||
#endif
|
||||
|
||||
|
||||
/* Force all operations associated with file desriptor described by
|
||||
`aio_fildes' member of AIOCBP. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
extern int aio_fsync __P ((int __op, struct aiocb *__aiocbp));
|
||||
#else
|
||||
extern int aio_fsync __P ((int __op, struct aiocb *__aiocbp))
|
||||
__asm__ ("aio_fsync64");
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern int aio_fsync64 __P ((int __op, struct aiocb64 *__aiocbp));
|
||||
#endif
|
||||
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* aio.h */
|
172
rt/aio_cancel.c
Normal file
172
rt/aio_cancel.c
Normal file
@ -0,0 +1,172 @@
|
||||
/* Cancel requests associated with given file descriptor.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
|
||||
/* We use an UGLY hack to prevent gcc from finding us cheating. The
|
||||
implementation of aio_cancel and aio_cancel64 are identical and so
|
||||
we want to avoid code duplication by using aliases. But gcc sees
|
||||
the different parameter lists and prints a warning. We define here
|
||||
a function so that aio_cancel64 has no prototype. */
|
||||
#define aio_cancel64 XXX
|
||||
#include <aio.h>
|
||||
/* And undo the hack. */
|
||||
#undef aio_cancel64
|
||||
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
/* Argh, so far there is no ECANCELED. */
|
||||
#define ECANCELED 125
|
||||
|
||||
int
|
||||
aio_cancel (fildes, aiocbp)
|
||||
int fildes;
|
||||
struct aiocb *aiocbp;
|
||||
{
|
||||
struct aiocb *firstp;
|
||||
int result = AIO_ALLDONE;
|
||||
|
||||
/* Request the semaphore. */
|
||||
sem_wait (&__aio_requests_sema);
|
||||
|
||||
/* Search for the list of requests associated with the given file
|
||||
descriptor. */
|
||||
for (firstp = (struct aiocb *) __aio_requests; firstp != NULL;
|
||||
firstp = firstp->__next_fd)
|
||||
if (firstp->aio_fildes == fildes)
|
||||
break;
|
||||
|
||||
/* If the file descriptor is not found all work seems to done
|
||||
already. Otherwise try to cancel the request(s). */
|
||||
if (firstp != NULL)
|
||||
{
|
||||
if (aiocbp != NULL)
|
||||
{
|
||||
/* Locate the entry corresponding to the AIOCBP parameter. */
|
||||
if (aiocbp == firstp)
|
||||
/* The requests is currently handled, therefore don't
|
||||
cancel it and signal this to the user. */
|
||||
result = AIO_NOTCANCELED;
|
||||
else
|
||||
{
|
||||
while (firstp->__next_prio != NULL
|
||||
&& aiocbp != firstp->__next_prio)
|
||||
firstp = firstp->__next_prio;
|
||||
|
||||
if (firstp->__next_prio != NULL)
|
||||
{
|
||||
/* The request the user wants to cancel is in the
|
||||
queue. Simply remove it. */
|
||||
firstp->__next_prio = aiocbp->__next_prio;
|
||||
|
||||
/* Mark as canceled. */
|
||||
aiocbp->__error_code = ECANCELED;
|
||||
aiocbp->__return_value = -1;
|
||||
|
||||
/* Send the signal to notify about canceled
|
||||
processing of the request. */
|
||||
if (aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD)
|
||||
{
|
||||
/* We have to start a thread. */
|
||||
pthread_t tid;
|
||||
pthread_attr_t attr, *pattr;
|
||||
|
||||
pattr = (pthread_attr_t *)
|
||||
aiocbp->aio_sigevent.sigev_notify_attributes;
|
||||
if (pattr == NULL)
|
||||
{
|
||||
pthread_attr_init (&attr);
|
||||
pthread_attr_setdetachstate (&attr,
|
||||
PTHREAD_CREATE_DETACHED);
|
||||
pattr = &attr;
|
||||
}
|
||||
|
||||
pthread_create (&tid, pattr,
|
||||
(void *(*) (void *))
|
||||
aiocbp->aio_sigevent.sigev_notify_function,
|
||||
aiocbp->aio_sigevent.sigev_value.sival_ptr);
|
||||
}
|
||||
else if (aiocbp->aio_sigevent.sigev_notify == SIGEV_SIGNAL)
|
||||
/* We have to send a signal. */
|
||||
__aio_sigqueue (aiocbp->aio_sigevent.sigev_signo,
|
||||
aiocbp->aio_sigevent.sigev_value);
|
||||
|
||||
result = AIO_CANCELED;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* First dequeue all waiting requests. */
|
||||
aiocbp = firstp;
|
||||
|
||||
while ((firstp = firstp->__next_prio) != NULL)
|
||||
{
|
||||
firstp->__error_code = ECANCELED;
|
||||
firstp->__return_value = -1;
|
||||
|
||||
|
||||
/* Send the signal to notify about canceled processing
|
||||
of the request. */
|
||||
if (firstp->aio_sigevent.sigev_notify == SIGEV_THREAD)
|
||||
{
|
||||
/* We have to start a thread. */
|
||||
pthread_t tid;
|
||||
pthread_attr_t attr, *pattr;
|
||||
|
||||
pattr = (pthread_attr_t *)
|
||||
aiocbp->aio_sigevent.sigev_notify_attributes;
|
||||
if (pattr == NULL)
|
||||
{
|
||||
pthread_attr_init (&attr);
|
||||
pthread_attr_setdetachstate (&attr,
|
||||
PTHREAD_CREATE_DETACHED);
|
||||
pattr = &attr;
|
||||
}
|
||||
|
||||
pthread_create (&tid, pattr,
|
||||
(void *(*) (void *))
|
||||
firstp->aio_sigevent.sigev_notify_function,
|
||||
firstp->aio_sigevent.sigev_value.sival_ptr);
|
||||
}
|
||||
else if (firstp->aio_sigevent.sigev_notify == SIGEV_SIGNAL)
|
||||
/* We have to send a signal. */
|
||||
__aio_sigqueue (firstp->aio_sigevent.sigev_signo,
|
||||
firstp->aio_sigevent.sigev_value);
|
||||
}
|
||||
|
||||
/* We have to signal that not all requests could be canceled
|
||||
since the first requests is currently processed. */
|
||||
result = AIO_NOTCANCELED;
|
||||
|
||||
aiocbp->__next_prio = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Release the semaphore. */
|
||||
sem_post (&__aio_requests_sema);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
weak_alias (aio_cancel, aio_cancel64)
|
40
rt/aio_error.c
Normal file
40
rt/aio_error.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Return error status of asynchronous I/O request.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
|
||||
/* We use an UGLY hack to prevent gcc from finding us cheating. The
|
||||
implementation of aio_error and aio_error64 are identical and so
|
||||
we want to avoid code duplication by using aliases. But gcc sees
|
||||
the different parameter lists and prints a warning. We define here
|
||||
a function so that aio_error64 has no prototype. */
|
||||
#define aio_error64 XXX
|
||||
#include <aio.h>
|
||||
/* And undo the hack. */
|
||||
#undef aio_error64
|
||||
|
||||
|
||||
int
|
||||
aio_error (aiocbp)
|
||||
const struct aiocb *aiocbp;
|
||||
{
|
||||
return aiocbp->__error_code;
|
||||
}
|
||||
|
||||
weak_alias (aio_error, aio_error64)
|
42
rt/aio_fsync.c
Normal file
42
rt/aio_fsync.c
Normal file
@ -0,0 +1,42 @@
|
||||
/* Synchronize I/O in given file descriptor.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
|
||||
/* We use an UGLY hack to prevent gcc from finding us cheating. The
|
||||
implementation of aio_fsync and aio_fsync64 are identical and so
|
||||
we want to avoid code duplication by using aliases. But gcc sees
|
||||
the different parameter lists and prints a warning. We define here
|
||||
a function so that aio_fsync64 has no prototype. */
|
||||
#define aio_fsync64 XXX
|
||||
#include <aio.h>
|
||||
/* And undo the hack. */
|
||||
#undef aio_fsync64
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
aio_fsync (int op, struct aiocb *aiocbp)
|
||||
{
|
||||
return __aio_enqueue_request ((aiocb_union *) aiocbp,
|
||||
op == O_SYNC ? __LIO_SYNC : __LIO_DSYNC, 1);
|
||||
}
|
||||
|
||||
weak_alias (aio_fsync, aio_fsync64)
|
306
rt/aio_misc.c
Normal file
306
rt/aio_misc.c
Normal file
@ -0,0 +1,306 @@
|
||||
/* Handle general operations.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
#include <semaphore.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
/* We need a list of pending operations. This is sorted according to
|
||||
the priority given in the aio_reqprio member. */
|
||||
aiocb_union *__aio_requests;
|
||||
|
||||
/* Since the list is global we need a semaphore protecting it. */
|
||||
sem_t __aio_requests_sema;
|
||||
|
||||
|
||||
/* The initialization function. It gets automatically called if any
|
||||
aio_* function is used in the program. */
|
||||
static void
|
||||
__attribute__ ((unused))
|
||||
aio_initialize (void)
|
||||
{
|
||||
/* Initialize the semaphore. We allow exactly one user at a time. */
|
||||
sem_init (&__aio_requests_sema, 0, 1);
|
||||
}
|
||||
|
||||
text_set_element (__libc_subinit, aio_initialize);
|
||||
|
||||
|
||||
/* The thread handler. */
|
||||
static void *handle_fildes_io (void *arg);
|
||||
|
||||
|
||||
/* The main function of the async I/O handling. It enqueues requests
|
||||
and if necessary starts and handles threads. */
|
||||
int
|
||||
__aio_enqueue_request (aiocb_union *aiocbp, int operation, int require_lock)
|
||||
{
|
||||
int result;
|
||||
int policy, prio;
|
||||
struct sched_param param;
|
||||
aiocb_union *runp;
|
||||
|
||||
if (aiocbp->aiocb.aio_reqprio < 0
|
||||
|| aiocbp->aiocb.aio_reqprio > AIO_PRIO_DELTA_MAX)
|
||||
{
|
||||
/* Invalid priority value. */
|
||||
__set_errno (EINVAL);
|
||||
aiocbp->aiocb.__error_code = EINVAL;
|
||||
aiocbp->aiocb.__return_value = -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pthread_getschedparam (pthread_self (), &policy, ¶m) < 0)
|
||||
{
|
||||
/* Something went wrong. */
|
||||
aiocbp->aiocb.__error_code = errno;
|
||||
aiocbp->aiocb.__return_value = -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Compute priority for this request. */
|
||||
prio = param.sched_priority - aiocbp->aiocb.aio_reqprio;
|
||||
|
||||
|
||||
/* Get the semaphore. */
|
||||
if (require_lock)
|
||||
sem_wait (&__aio_requests_sema);
|
||||
|
||||
runp = __aio_requests;
|
||||
/* First look whether the current file descriptor is currently
|
||||
worked with. */
|
||||
while (runp != NULL && runp->aiocb.aio_fildes < aiocbp->aiocb.aio_fildes)
|
||||
runp = (aiocb_union *) runp->aiocb.__next_fd;
|
||||
|
||||
if (runp != NULL)
|
||||
{
|
||||
/* The current file descriptor is worked on. It makes no sense
|
||||
to start another thread since this new thread would have to
|
||||
wait for the previous one to terminate. Simply enqueue it
|
||||
after the running one according to the priority. */
|
||||
while (runp->aiocb.__next_prio != NULL
|
||||
&& runp->aiocb.__next_prio->__abs_prio >= prio)
|
||||
runp = (aiocb_union *) runp->aiocb.__next_prio;
|
||||
|
||||
aiocbp->aiocb.__next_prio = runp->aiocb.__next_prio;
|
||||
aiocbp->aiocb.__abs_prio = prio;
|
||||
aiocbp->aiocb.__policy = policy;
|
||||
aiocbp->aiocb.aio_lio_opcode = operation;
|
||||
aiocbp->aiocb.__error_code = EINPROGRESS;
|
||||
aiocbp->aiocb.__return_value = 0;
|
||||
runp->aiocb.__next_prio = (struct aiocb *) aiocbp;
|
||||
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We create a new thread for this file descriptor. The
|
||||
function which gets called will handle all available requests
|
||||
for this descriptor and when all are processed it will
|
||||
terminate. */
|
||||
pthread_t thid;
|
||||
pthread_attr_t attr;
|
||||
|
||||
/* First enqueue the request (the list is empty). */
|
||||
aiocbp->aiocb.__next_fd = NULL;
|
||||
aiocbp->aiocb.__last_fd = NULL;
|
||||
|
||||
aiocbp->aiocb.__next_prio = NULL;
|
||||
aiocbp->aiocb.__abs_prio = prio;
|
||||
aiocbp->aiocb.__policy = policy;
|
||||
aiocbp->aiocb.aio_lio_opcode = operation;
|
||||
aiocbp->aiocb.__error_code = EINPROGRESS;
|
||||
aiocbp->aiocb.__return_value = 0;
|
||||
|
||||
/* Make sure the thread is created detached. */
|
||||
pthread_attr_init (&attr);
|
||||
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
|
||||
|
||||
/* Now try to start a thread. */
|
||||
if (pthread_create (&thid, &attr, handle_fildes_io, aiocbp) < 0)
|
||||
{
|
||||
result = -1;
|
||||
aiocbp->aiocb.__error_code = errno;
|
||||
aiocbp->aiocb.__return_value = -1;
|
||||
}
|
||||
else
|
||||
/* We managed to enqueue the request. All errors which can
|
||||
happen now can be recognized by calls to `aio_return' and
|
||||
`aio_error'. */
|
||||
result = 0;
|
||||
}
|
||||
|
||||
/* Release the semaphore. */
|
||||
if (require_lock)
|
||||
sem_post (&__aio_requests_sema);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static void *
|
||||
handle_fildes_io (void *arg)
|
||||
{
|
||||
pthread_t self = pthread_self ();
|
||||
struct sched_param param;
|
||||
aiocb_union *runp = (aiocb_union *) arg;
|
||||
int policy;
|
||||
int fildes = runp->aiocb.aio_fildes; /* This is always the same. */
|
||||
|
||||
pthread_getschedparam (self, &policy, ¶m);
|
||||
|
||||
do
|
||||
{
|
||||
/* Change the priority to the requested value (if necessary). */
|
||||
if (runp->aiocb.__abs_prio != param.sched_priority
|
||||
|| runp->aiocb.__policy != policy)
|
||||
{
|
||||
param.sched_priority = runp->aiocb.__abs_prio;
|
||||
policy = runp->aiocb.__policy;
|
||||
pthread_setschedparam (self, policy, ¶m);
|
||||
}
|
||||
|
||||
/* Process request pointed to by RUNP. We must not be disturbed
|
||||
by signals. */
|
||||
if ((runp->aiocb.aio_lio_opcode & 127) == LIO_READ)
|
||||
{
|
||||
if (runp->aiocb.aio_lio_opcode & 128)
|
||||
runp->aiocb.__return_value =
|
||||
TEMP_FAILURE_RETRY (__pread64 (fildes,
|
||||
(void *) runp->aiocb64.aio_buf,
|
||||
runp->aiocb64.aio_nbytes,
|
||||
runp->aiocb64.aio_offset));
|
||||
else
|
||||
runp->aiocb.__return_value =
|
||||
TEMP_FAILURE_RETRY (__pread (fildes,
|
||||
(void *) runp->aiocb.aio_buf,
|
||||
runp->aiocb.aio_nbytes,
|
||||
runp->aiocb.aio_offset));
|
||||
}
|
||||
else if ((runp->aiocb.aio_lio_opcode & 127) == LIO_WRITE)
|
||||
{
|
||||
if (runp->aiocb.aio_lio_opcode & 128)
|
||||
runp->aiocb.__return_value =
|
||||
TEMP_FAILURE_RETRY (__pwrite64 (fildes,
|
||||
(const void *) runp->aiocb64.aio_buf,
|
||||
runp->aiocb64.aio_nbytes,
|
||||
runp->aiocb64.aio_offset));
|
||||
else
|
||||
runp->aiocb.__return_value =
|
||||
TEMP_FAILURE_RETRY (__pwrite (fildes,
|
||||
(const void *) runp->aiocb.aio_buf,
|
||||
runp->aiocb.aio_nbytes,
|
||||
runp->aiocb.aio_offset));
|
||||
}
|
||||
else if (runp->aiocb.aio_lio_opcode == __LIO_DSYNC)
|
||||
runp->aiocb.__return_value = TEMP_FAILURE_RETRY (fdatasync (fildes));
|
||||
else if (runp->aiocb.aio_lio_opcode == __LIO_SYNC)
|
||||
runp->aiocb.__return_value = TEMP_FAILURE_RETRY (fsync (fildes));
|
||||
else
|
||||
{
|
||||
/* This is an invalid opcode. */
|
||||
runp->aiocb.__return_value = -1;
|
||||
__set_errno (EINVAL);
|
||||
}
|
||||
|
||||
if (runp->aiocb.__return_value == -1)
|
||||
runp->aiocb.__error_code = errno;
|
||||
else
|
||||
runp->aiocb.__error_code = 0;
|
||||
|
||||
/* Send the signal to notify about finished processing of the
|
||||
request. */
|
||||
if (runp->aiocb.aio_sigevent.sigev_notify == SIGEV_THREAD)
|
||||
{
|
||||
/* We have to start a thread. */
|
||||
pthread_t tid;
|
||||
pthread_attr_t attr, *pattr;
|
||||
|
||||
pattr = (pthread_attr_t *)
|
||||
runp->aiocb.aio_sigevent.sigev_notify_attributes;
|
||||
if (pattr == NULL)
|
||||
{
|
||||
pthread_attr_init (&attr);
|
||||
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
|
||||
pattr = &attr;
|
||||
}
|
||||
|
||||
if (pthread_create (&tid,
|
||||
(pthread_attr_t *)
|
||||
runp->aiocb.aio_sigevent.sigev_notify_attributes,
|
||||
(void *(*) (void *))
|
||||
runp->aiocb.aio_sigevent.sigev_notify_function,
|
||||
runp->aiocb.aio_sigevent.sigev_value.sival_ptr)
|
||||
< 0)
|
||||
{
|
||||
/* XXX What shall we do if already an error is set by
|
||||
read/write/fsync? */
|
||||
runp->aiocb.__error_code = errno;
|
||||
runp->aiocb.__return_value = -1;
|
||||
}
|
||||
}
|
||||
else if (runp->aiocb.aio_sigevent.sigev_notify == SIGEV_SIGNAL)
|
||||
/* We have to send a signal. */
|
||||
if (__aio_sigqueue (runp->aiocb.aio_sigevent.sigev_signo,
|
||||
runp->aiocb.aio_sigevent.sigev_value) < 0)
|
||||
{
|
||||
/* XXX What shall we do if already an error is set by
|
||||
read/write/fsync? */
|
||||
runp->aiocb.__error_code = errno;
|
||||
runp->aiocb.__return_value = -1;
|
||||
}
|
||||
|
||||
/* Get the semaphore. */
|
||||
sem_wait (&__aio_requests_sema);
|
||||
|
||||
/* Now dequeue the current request. */
|
||||
if (runp->aiocb.__next_prio == NULL)
|
||||
{
|
||||
if (runp->aiocb.__next_fd != NULL)
|
||||
runp->aiocb.__next_fd->__last_fd = runp->aiocb.__last_fd;
|
||||
if (runp->aiocb.__last_fd != NULL)
|
||||
runp->aiocb.__last_fd->__next_fd = runp->aiocb.__next_fd;
|
||||
runp = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
runp->aiocb.__next_prio->__last_fd = runp->aiocb.__last_fd;
|
||||
runp->aiocb.__next_prio->__next_fd = runp->aiocb.__next_fd;
|
||||
if (runp->aiocb.__next_fd != NULL)
|
||||
runp->aiocb.__next_fd->__last_fd = runp->aiocb.__next_prio;
|
||||
if (runp->aiocb.__last_fd != NULL)
|
||||
runp->aiocb.__last_fd->__next_fd = runp->aiocb.__next_prio;
|
||||
runp = (aiocb_union *) runp->aiocb.__next_prio;
|
||||
}
|
||||
|
||||
/* Release the semaphore. */
|
||||
sem_post (&__aio_requests_sema);
|
||||
}
|
||||
while (runp != NULL);
|
||||
|
||||
pthread_exit (NULL);
|
||||
}
|
45
rt/aio_misc.h
Normal file
45
rt/aio_misc.h
Normal file
@ -0,0 +1,45 @@
|
||||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _AIO_MISC_H
|
||||
#define _AIO_MISC_H 1
|
||||
|
||||
#include <semaphore.h>
|
||||
|
||||
/* Union of the two request types. */
|
||||
typedef union
|
||||
{
|
||||
struct aiocb aiocb;
|
||||
struct aiocb64 aiocb64;
|
||||
} aiocb_union;
|
||||
|
||||
/* List of enqueued requests. */
|
||||
extern aiocb_union *__aio_requests;
|
||||
|
||||
/* Lock for global I/O list of requests. */
|
||||
extern sem_t __aio_requests_sema;
|
||||
|
||||
|
||||
/* Enqueue request. */
|
||||
extern int __aio_enqueue_request (aiocb_union *aiocbp, int operation,
|
||||
int require_lock);
|
||||
|
||||
/* Send the signal. */
|
||||
extern int __aio_sigqueue (int sig, const union sigval val);
|
||||
|
||||
#endif /* aio_misc.h */
|
31
rt/aio_read.c
Normal file
31
rt/aio_read.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Asynchronous read.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
aio_read (aiocbp)
|
||||
struct aiocb *aiocbp;
|
||||
{
|
||||
return __aio_enqueue_request ((aiocb_union *) aiocbp, LIO_READ, 1);
|
||||
}
|
31
rt/aio_read64.c
Normal file
31
rt/aio_read64.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Asynchronous read, 64bit offset version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
aio_read64 (aiocbp)
|
||||
struct aiocb64 *aiocbp;
|
||||
{
|
||||
return __aio_enqueue_request ((aiocb_union *) aiocbp, __LIO_READ64, 1);
|
||||
}
|
40
rt/aio_return.c
Normal file
40
rt/aio_return.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* Return exit value of asynchronous I/O request.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
|
||||
/* We use an UGLY hack to prevent gcc from finding us cheating. The
|
||||
implementation of aio_return and aio_return64 are identical and so
|
||||
we want to avoid code duplication by using aliases. But gcc sees
|
||||
the different parameter lists and prints a warning. We define here
|
||||
a function so that aio_return64 has no prototype. */
|
||||
#define aio_return64 XXX
|
||||
#include <aio.h>
|
||||
/* And undo the hack. */
|
||||
#undef aio_return64
|
||||
|
||||
|
||||
ssize_t
|
||||
aio_return (aiocbp)
|
||||
struct aiocb *aiocbp;
|
||||
{
|
||||
return aiocbp->__return_value;
|
||||
}
|
||||
|
||||
weak_alias (aio_return, aio_return64)
|
55
rt/aio_suspend.c
Normal file
55
rt/aio_suspend.c
Normal file
@ -0,0 +1,55 @@
|
||||
/* Suspend until termination of a requests.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
|
||||
/* We use an UGLY hack to prevent gcc from finding us cheating. The
|
||||
implementation of aio_suspend and aio_suspend64 are identical and so
|
||||
we want to avoid code duplication by using aliases. But gcc sees
|
||||
the different parameter lists and prints a warning. We define here
|
||||
a function so that aio_suspend64 has no prototype. */
|
||||
#define aio_suspend64 XXX
|
||||
#include <aio.h>
|
||||
/* And undo the hack. */
|
||||
#undef aio_suspend64
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
aio_suspend (list, nent, timeout)
|
||||
const struct aiocb *const list[];
|
||||
int nent;
|
||||
const struct timespec *timeout;
|
||||
{
|
||||
int cnt;
|
||||
|
||||
/* First look whether there is already a terminated request. */
|
||||
for (cnt = 0; cnt < nent; ++cnt)
|
||||
if (list[cnt] != NULL && list[cnt]->__error_code != EINPROGRESS)
|
||||
return 0;
|
||||
|
||||
/* XXX We have to write code which waits. */
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
weak_alias (aio_suspend, aio_suspend64)
|
31
rt/aio_write.c
Normal file
31
rt/aio_write.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Asynchronous write.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
aio_write (aiocbp)
|
||||
struct aiocb *aiocbp;
|
||||
{
|
||||
return __aio_enqueue_request ((aiocb_union *) aiocbp, LIO_WRITE, 1);
|
||||
}
|
31
rt/aio_write64.c
Normal file
31
rt/aio_write64.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Asynchronous write, 64bit offset version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
aio_write64 (aiocbp)
|
||||
struct aiocb64 *aiocbp;
|
||||
{
|
||||
return __aio_enqueue_request ((aiocb_union *) aiocbp, __LIO_WRITE64, 1);
|
||||
}
|
68
rt/lio_listio.c
Normal file
68
rt/lio_listio.c
Normal file
@ -0,0 +1,68 @@
|
||||
/* Enqueue and list of read or write requests.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
#include <errno.h>
|
||||
#include <semaphore.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
lio_listio (mode, list, nent, sig)
|
||||
int mode;
|
||||
struct aiocb *const list[];
|
||||
int nent;
|
||||
struct sigevent *sig;
|
||||
{
|
||||
int cnt;
|
||||
int total = 0;
|
||||
int result = 0;
|
||||
|
||||
/* Check arguments. */
|
||||
if (mode != LIO_WAIT && mode != LIO_NOWAIT)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Request the semaphore. */
|
||||
sem_wait (&__aio_requests_sema);
|
||||
|
||||
/* Now we can enqueue all requests. Since we already acquired the
|
||||
semaphore the enqueue function need not do this. */
|
||||
for (cnt = 0; cnt < nent; ++cnt)
|
||||
if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP)
|
||||
if (__aio_enqueue_request ((aiocb_union *) list[cnt],
|
||||
list[cnt]->aio_lio_opcode, 0) >= 0)
|
||||
/* Successfully enqueued. */
|
||||
++total;
|
||||
else
|
||||
/* Signal that we've seen an error. `errno' and the error code
|
||||
of the aiocb will tell more. */
|
||||
result = -1;
|
||||
|
||||
|
||||
|
||||
/* Release the semaphore. */
|
||||
sem_post (&__aio_requests_sema);
|
||||
|
||||
return result;
|
||||
}
|
66
rt/lio_listio64.c
Normal file
66
rt/lio_listio64.c
Normal file
@ -0,0 +1,66 @@
|
||||
/* Enqueue and list of read or write requests, 64bit offset version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
#include <errno.h>
|
||||
#include <semaphore.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
|
||||
int
|
||||
lio_listio64 (mode, list, nent, sig)
|
||||
int mode;
|
||||
struct aiocb64 *const list[];
|
||||
int nent;
|
||||
struct sigevent *sig;
|
||||
{
|
||||
int cnt;
|
||||
int total = 0;
|
||||
int result = 0;
|
||||
|
||||
/* Check arguments. */
|
||||
if (mode != LIO_WAIT && mode != LIO_NOWAIT)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Request the semaphore. */
|
||||
sem_wait (&__aio_requests_sema);
|
||||
|
||||
/* Now we can enqueue all requests. Since we already acquired the
|
||||
semaphore the enqueue function need not do this. */
|
||||
for (cnt = 0; cnt < nent; ++cnt)
|
||||
if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP)
|
||||
if (__aio_enqueue_request ((aiocb_union *) list[cnt],
|
||||
list[cnt]->aio_lio_opcode | 128, 0) >= 0)
|
||||
/* Successfully enqueued. */
|
||||
++total;
|
||||
else
|
||||
/* Signal that we've seen an error. `errno' and the error code
|
||||
of the aiocb will tell more. */
|
||||
result = -1;
|
||||
|
||||
/* Release the semaphore. */
|
||||
sem_post (&__aio_requests_sema);
|
||||
|
||||
return result;
|
||||
}
|
@ -87,3 +87,6 @@ alpha-.*-linux.* libcrypt=1.1
|
||||
# The gross patch for programs assuming broken locale implementations.
|
||||
alpha-.*-linux.* libBrokenLocale=1.1
|
||||
.*-.*-.* libBrokenLocale=1
|
||||
|
||||
# The real-time library from POSIX.1b.
|
||||
.*-.*-.* librt=1
|
||||
|
@ -22,7 +22,7 @@
|
||||
subdir := signal
|
||||
|
||||
headers := signal.h sys/signal.h bits/signum.h bits/sigcontext.h \
|
||||
bits/sigaction.h bits/sigset.h
|
||||
bits/sigaction.h bits/sigset.h bits/siginfo.h
|
||||
|
||||
routines := signal raise killpg \
|
||||
sigaction sigprocmask kill \
|
||||
@ -32,11 +32,12 @@ routines := signal raise killpg \
|
||||
sigsetops sigempty sigfillset sigaddset sigdelset sigismem \
|
||||
sigreturn \
|
||||
siggetmask sysv_signal \
|
||||
sigisempty sigandset sigorset
|
||||
sigisempty sigandset sigorset \
|
||||
allocrtsig sigtimedwait sigwaitinfo sigqueue
|
||||
|
||||
tests := tst-signal
|
||||
|
||||
distribute := sigsetops.h
|
||||
distribute := sigsetops.h testrtsig.h
|
||||
|
||||
|
||||
include ../Rules
|
||||
|
89
signal/allocrtsig.c
Normal file
89
signal/allocrtsig.c
Normal file
@ -0,0 +1,89 @@
|
||||
/* Handle real-time signal allocation.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
/* In these variables we keep track of the used variables. If the
|
||||
platform does not support any real-time signals we will define the
|
||||
values to some unreasonable value which will signal failing of all
|
||||
the functions below. */
|
||||
#ifndef __SIGRTMIN
|
||||
static int current_rtmin = -1;
|
||||
static int current_rtmax = -1;
|
||||
#else
|
||||
static int current_rtmin = __SIGRTMIN;
|
||||
static int current_rtmax = __SIGRTMAX;
|
||||
|
||||
static int initialized;
|
||||
|
||||
#include "testrtsig.h"
|
||||
|
||||
static void
|
||||
init (void)
|
||||
{
|
||||
if (!kernel_has_rtsig ())
|
||||
{
|
||||
current_rtmin = -1;
|
||||
current_rtmax = -1;
|
||||
}
|
||||
initialized = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Return number of available real-time signal with highest priority. */
|
||||
int
|
||||
__libc_current_sigrtmin (void)
|
||||
{
|
||||
#ifdef __SIGRTMIN
|
||||
if (!initialized)
|
||||
init ();
|
||||
#endif
|
||||
return current_rtmin;
|
||||
}
|
||||
|
||||
/* Return number of available real-time signal with lowest priority. */
|
||||
int
|
||||
__libc_current_sigrtmax (void)
|
||||
{
|
||||
#ifdef __SIGRTMIN
|
||||
if (!initialized)
|
||||
init ();
|
||||
#endif
|
||||
return current_rtmax;
|
||||
}
|
||||
|
||||
/* Allocate real-time signal with highest/lowest available
|
||||
priority. Please note that we don't use a lock since we assume
|
||||
this function to be called at program start. */
|
||||
int
|
||||
__libc_allocate_rtsig (int high)
|
||||
{
|
||||
#ifndef __SIGRTMIN
|
||||
return -1;
|
||||
#else
|
||||
if (!initialized)
|
||||
init ();
|
||||
if (current_rtmin != -1 || current_rtmin > current_rtmax)
|
||||
/* We don't have anymore signal available. */
|
||||
return -1;
|
||||
|
||||
return high ? current_rtmin++ : current_rtmax--;
|
||||
#endif
|
||||
}
|
@ -172,6 +172,20 @@ typedef __sigset_t sigset_t;
|
||||
|
||||
# ifdef _SIGNAL_H
|
||||
|
||||
/* We need `struct timespec' later on. */
|
||||
# define __need_timespec
|
||||
# include <time.h>
|
||||
|
||||
/* Type for data associated with a signal. */
|
||||
typedef union sigval
|
||||
{
|
||||
int sival_int;
|
||||
void *sival_ptr;
|
||||
} sigval_t;
|
||||
|
||||
/* Get the `siginfo_t' type plus the needed symbols. */
|
||||
# include <bits/siginfo.h>
|
||||
|
||||
/* Clear all signals from SET. */
|
||||
extern int sigemptyset __P ((sigset_t *__set));
|
||||
|
||||
@ -229,6 +243,24 @@ extern int sigpending __P ((sigset_t *__set));
|
||||
extern int __sigwait __P ((__const sigset_t *__set, int *__sig));
|
||||
extern int sigwait __P ((__const sigset_t *__set, int *__sig));
|
||||
|
||||
/* Select any of pending signals from SET and place information in INFO. */
|
||||
extern int __sigwaitinfo __P ((__const sigset_t *__set, siginfo_t *__info));
|
||||
extern int sigwaitinfo __P ((__const sigset_t *__set, siginfo_t *__info));
|
||||
|
||||
/* Select any of pending signals from SET and place information in INFO.
|
||||
Wait the imte specified by TIMEOUT if no signal is pending. */
|
||||
extern int __sigtimedwait __P ((__const sigset_t *__set, siginfo_t *__info,
|
||||
__const struct timespec *__timeout));
|
||||
extern int sigtimedwait __P ((__const sigset_t *__set, siginfo_t *__info,
|
||||
__const struct timespec *__timeout));
|
||||
|
||||
/* Send signal SIG to the process PID. Associate data in VAL with the
|
||||
signal. */
|
||||
extern int __sigqueue __P ((__pid_t __pid, int __sig,
|
||||
__const union sigval __val));
|
||||
extern int sigqueue __P ((__pid_t __pid, int __sig,
|
||||
__const union sigval __val));
|
||||
|
||||
# endif /* <signal.h> included. */
|
||||
|
||||
#endif /* Use POSIX. */
|
||||
@ -313,6 +345,18 @@ extern int sigaltstack __P ((__const struct sigaltstack *__ss,
|
||||
|
||||
#endif /* signal.h included and use BSD or X/Open Unix. */
|
||||
|
||||
|
||||
/* The following functions are used internally in the C library and in
|
||||
other code which need deep insights. */
|
||||
|
||||
/* Return number of available real-time signal with highest priority. */
|
||||
extern int __libc_current_sigrtmin __P ((void));
|
||||
/* Return number of available real-time signal with lowest priority. */
|
||||
extern int __libc_current_sigrtmax __P ((void));
|
||||
|
||||
/* Allocate real-time signal with highest/lowest available priority. */
|
||||
extern int __libc_allocate_rtsig __P ((int __high));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* signal.h */
|
||||
|
@ -16,6 +16,7 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
|
@ -161,7 +161,8 @@ extern char *__stdio_gen_tempname __P ((char *__buf, size_t __bufsize,
|
||||
__const char *__pfx,
|
||||
int __dir_search,
|
||||
size_t *__lenptr,
|
||||
FILE **__streamptr));
|
||||
FILE **__streamptr,
|
||||
int __large_file));
|
||||
|
||||
|
||||
/* Print out MESSAGE on the error output and abort. */
|
||||
@ -297,6 +298,9 @@ extern int rename __P ((__const char *__old, __const char *__new));
|
||||
|
||||
/* Create a temporary file and open it read/write. */
|
||||
extern FILE *tmpfile __P ((void));
|
||||
#ifdef __USE_LARGEFILE64
|
||||
extern FILE *tmpfile64 __P ((void));
|
||||
#endif
|
||||
/* Generate a temporary filename. */
|
||||
extern char *tmpnam __P ((char *__s));
|
||||
|
||||
|
@ -263,6 +263,7 @@ extern char *strsep __P ((char **__stringp, __const char *__delim));
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Compare S1 and S2 as strings holding name & indices/version numbers. */
|
||||
extern int __strverscmp __P ((__const char *__s1, __const char *__s2));
|
||||
extern int strverscmp __P ((__const char *__s1, __const char *__s2));
|
||||
|
||||
/* Return a string describing the meaning of the signal number in SIG. */
|
||||
|
@ -39,7 +39,7 @@
|
||||
*/
|
||||
|
||||
int
|
||||
strverscmp (s1, s2)
|
||||
__strverscmp (s1, s2)
|
||||
const char *s1;
|
||||
const char *s2;
|
||||
{
|
||||
@ -109,3 +109,4 @@ strverscmp (s1, s2)
|
||||
return state;
|
||||
}
|
||||
}
|
||||
weak_alias (__strverscmp, strverscmp)
|
||||
|
@ -18,6 +18,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _SETJMP_H
|
||||
#define _ASM
|
||||
#include <bits/setjmp.h>
|
||||
|
||||
@ -32,6 +33,6 @@ ENTRY (__longjmp)
|
||||
add r2, r2, #48
|
||||
lfmfd f4, 4, [r2]
|
||||
#endif
|
||||
|
||||
|
||||
LOADREGS(ia, r2, {v1-v6, sl, fp, sp, pc})
|
||||
END (__longjmp)
|
||||
|
@ -18,6 +18,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _SETJMP_H
|
||||
#define _ASM
|
||||
#include <bits/setjmp.h>
|
||||
|
||||
@ -28,7 +29,7 @@ ENTRY (__sigsetjmp)
|
||||
/* Save registers */
|
||||
#if __ARM_USES_FP
|
||||
sfmea f4, 4, [r0]!
|
||||
#endif
|
||||
#endif
|
||||
stmia r0, {v1-v6, sl, fp, sp, lr}
|
||||
|
||||
/* Make a tail call to __sigjmp_save; it takes the same args. */
|
||||
|
@ -33,6 +33,7 @@ endif
|
||||
|
||||
ifeq ($(subdir),stdio-common)
|
||||
ifneq ($(inhibit-siglist),yes)
|
||||
ifneq ($(cross-compiling),yes)
|
||||
ifeq "$(filter %siglist.c,$(before-compile))" ""
|
||||
before-compile := $(before-compile) $(objpfx)siglist.c
|
||||
$(objpfx)siglist.c: $(objpfx)make_siglist
|
||||
@ -49,6 +50,7 @@ generated := $(generated) make_siglist siglist.c
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),string)
|
||||
CFLAGS-wordcopy.c += -Wno-uninitialized
|
||||
|
33
sysdeps/generic/aio_sigqueue.c
Normal file
33
sysdeps/generic/aio_sigqueue.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
int
|
||||
__aio_sigqueue (int sig, const union sigval val)
|
||||
{
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
|
||||
stub_warning (__aio_sigqueue)
|
||||
#include <stub-tag.h>
|
@ -316,8 +316,17 @@ enum
|
||||
#define _SC_NL_NMAX _SC_NL_NMAX
|
||||
_SC_NL_SETMAX,
|
||||
#define _SC_NL_SETMAX _SC_NL_SETMAX
|
||||
_SC_NL_TEXTMAX
|
||||
_SC_NL_TEXTMAX,
|
||||
#define _SC_NL_TEXTMAX _SC_NL_TEXTMAX
|
||||
|
||||
_SC_XBS5_ILP32_OFF32,
|
||||
#define _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFF32
|
||||
_SC_XBS5_ILP32_OFFBIG,
|
||||
#define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG
|
||||
_SC_XBS5_LP64_OFF64,
|
||||
#define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64
|
||||
_SC_XBS5_LPBIG_OFFBIG
|
||||
#define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG
|
||||
};
|
||||
|
||||
#if (defined __USE_POSIX2 || defined __USE_UNIX98 \
|
||||
|
184
sysdeps/generic/bits/siginfo.h
Normal file
184
sysdeps/generic/bits/siginfo.h
Normal file
@ -0,0 +1,184 @@
|
||||
/* siginfo_t, sigevent and constants. Stub version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SIGNAL_H
|
||||
# error "Never include this file directly. Use <signal.h> instead"
|
||||
#endif
|
||||
|
||||
typedef struct siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_errno; /* If non-zero, an errno value associated with
|
||||
this signal, as defined in <errno.h>. */
|
||||
int si_code; /* Signal code. */
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
void *si_addr; /* Address of faulting instruction. */
|
||||
int si_status; /* Exit value or signal. */
|
||||
long int si_band; /* Band event for SIGPOLL. */
|
||||
union sigval si_value; /* Signal value. */
|
||||
} siginfo_t;
|
||||
|
||||
|
||||
/* Values for `si_code'. Positive values are reserved for kernel-generated
|
||||
signals. */
|
||||
enum
|
||||
{
|
||||
SI_ASYNCIO = -4, /* Sent by AIO completion. */
|
||||
#define SI_ASYNCIO SI_ASYNCIO
|
||||
SI_MESGQ, /* Sent by real time mesq state change. */
|
||||
#define SI_MESGQ SI_MESGQ
|
||||
SI_TIMER, /* Sent by timer expiration. */
|
||||
#define SI_TIMER SI_TIMER
|
||||
SI_QUEUE, /* Sent by sigqueue. */
|
||||
#define SI_QUEUE SI_QUEUE
|
||||
SI_USER /* Sent by kill, sigsend, raise. */
|
||||
#define SI_USER SI_USER
|
||||
};
|
||||
|
||||
|
||||
/* `si_code' values for SIGILL signal. */
|
||||
enum
|
||||
{
|
||||
ILL_ILLOPC = 1, /* Illegal opcode. */
|
||||
#define ILL_ILLOPC ILL_ILLOPC
|
||||
ILL_ILL_OPN, /* Illegal operand. */
|
||||
#define ILL_ILLOPN ILL_ILLOPN
|
||||
ILL_ILLADR, /* Illegal addressing mode. */
|
||||
#define ILL_ILLADR ILL_ILLADR
|
||||
ILL_ILLTRP, /* Illegal trap. */
|
||||
#define ILL_ILLTRP ILL_ILLTRP
|
||||
ILL_PRVOPC, /* Privileged opcode. */
|
||||
#define ILL_PRVOPC ILL_PRVOPC
|
||||
ILL_PRVREG, /* Privileged register. */
|
||||
#define ILL_PRVREG ILL_PRVREG
|
||||
ILL_COPROC, /* Coprocessor error. */
|
||||
#define ILL_COPROC ILL_COPROC
|
||||
ILL_BADSTK /* Internal stack error. */
|
||||
#define ILL_BADSTK ILL_BADSTK
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGFPE signal. */
|
||||
enum
|
||||
{
|
||||
FPE_INTDIV = 1, /* Integer divide by zero. */
|
||||
#define FPE_INTDIV FPE_INTDIV
|
||||
FPE_INTOVF, /* Integer overflow. */
|
||||
#define FPE_INTOVF FPE_INTOVF
|
||||
FPE_FLTDIV, /* Floating point divide by zero. */
|
||||
#define FPE_FLTDIV FPE_FLTDIV
|
||||
FPE_FLTOVF, /* Floating point overflow. */
|
||||
#define FPE_FLTOVF FPE_FLTOVF
|
||||
FPE_FLTUND, /* Floating point underflow. */
|
||||
#define FPE_FLTUND FPE_FLTUND
|
||||
FPE_FLTRES, /* Floating point inexact result. */
|
||||
#define FPE_FLTRES FPE_FLTRES
|
||||
FPE_FLTINV, /* Floating point invalid operation. */
|
||||
#define FPE_FLTINV FPE_FLTINV
|
||||
FPE_FLTSUB /* Subscript out of range. */
|
||||
#define FPE_FLTSUB FPE_FLTSUB
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGSEGV signal. */
|
||||
enum
|
||||
{
|
||||
SEGV_MAPERR = 1, /* Address not mapped to object. */
|
||||
#define SEGV_MAPERR SEGV_MAPERR
|
||||
SEGV_ACCERR /* Invalid permissions for mapped object. */
|
||||
#define SEGV_ACCERR SEGV_ACCERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGBUS signal. */
|
||||
enum
|
||||
{
|
||||
BUS_ADRALN = 1, /* Invalid address alignment. */
|
||||
#define BUS_ADRALN BUS_ADRALN
|
||||
BUS_ADRERR, /* Non-existant physical address. */
|
||||
#define BUS_ADRERR BUS_ADRERR
|
||||
BUS_OBJERR /* Object specific hardware error. */
|
||||
#define BUS_OBJERR BUS_OBJERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGTRAP signal. */
|
||||
enum
|
||||
{
|
||||
TRAP_BRKPT = 1, /* Process breakpoint. */
|
||||
#define TRAP_BRKPT TRAP_BRKPT
|
||||
TRAP_TRACE /* Process trace trap. */
|
||||
#define TRAP_TRACE TRAP_TRACE
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGCHLD signal. */
|
||||
enum
|
||||
{
|
||||
CLD_EXITED = 1, /* Child has exited. */
|
||||
#define CLD_EXITED CLD_EXITED
|
||||
CLD_KILLED, /* Child was killed. */
|
||||
#define CLD_KILLED CLD_KILLED
|
||||
CLD_DUMPED, /* Child terminated abnormally. */
|
||||
#define CLD_DUMPED CLD_DUMPED
|
||||
CLD_TRAPPED, /* Traced child has trapped. */
|
||||
#define CLD_TRAPPED CLD_TRAPPED
|
||||
CLD_STOPPED, /* Child has stopped. */
|
||||
#define CLD_STOPPED CLD_STOPPED
|
||||
CLD_CONTINUED /* Stopped child has continued. */
|
||||
#define CLD_CONTINUED CLD_CONTINUED
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGPOLL signal. */
|
||||
enum
|
||||
{
|
||||
POLL_IN = 1, /* Data input available. */
|
||||
#define POLL_IN POLL_IN
|
||||
POLL_OUT, /* Output buffers available. */
|
||||
#define POLL_OUT POLL_OUT
|
||||
POLL_MSG, /* Input message available. */
|
||||
#define POLL_MSG POLL_MSG
|
||||
POLL_ERR, /* I/O error. */
|
||||
#define POLL_ERR POLL_ERR
|
||||
POLL_PRI, /* High priority input available. */
|
||||
#define POLL_PRI POLL_PRI
|
||||
POLL_HUP /* Device disconnected. */
|
||||
#define POLL_HUP POLL_HUP
|
||||
};
|
||||
|
||||
|
||||
/* Structure to transport application-defined values with signals. */
|
||||
#define SIGEV_MAX_SIZE 64
|
||||
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE / sizeof (int)) - 3)
|
||||
|
||||
typedef struct sigevent
|
||||
{
|
||||
sigval_t sigev_value;
|
||||
int sigev_signo;
|
||||
int sigev_notify;
|
||||
void (*sigev_notify_function) __P ((sigval_t)); /* Function to start. */
|
||||
void *sigev_notify_attributes; /* Really pthread_attr_t.*/
|
||||
} sigevent_t;
|
||||
|
||||
/* `sigev_notify' values. */
|
||||
enum
|
||||
{
|
||||
SIGEV_SIGNAL = 0, /* Notify via signal. */
|
||||
#define SIGEV_SIGNAL SIGEV_SIGNAL
|
||||
SIGEV_NONE, /* Other notification: meaningless. */
|
||||
#define SIGEV_NONE SIGEV_NONE
|
||||
SIGEV_THREAD /* Deliver via thread creation. */
|
||||
#define SIGEV_THREAD SIGEV_THREAD
|
||||
};
|
@ -16,7 +16,7 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _UTSNAME_H
|
||||
#ifndef _SYS_UTSNAME_H
|
||||
# error "Never include <bits/utsname.h> directly; use <sys/utsname.h> instead."
|
||||
#endif
|
||||
|
||||
|
@ -40,6 +40,7 @@ extern void _end;
|
||||
extern void ENTRY_POINT (void);
|
||||
|
||||
ElfW(Addr) _dl_base_addr;
|
||||
uid_t __libc_uid;
|
||||
int __libc_enable_secure;
|
||||
int __libc_multiple_libcs; /* Defining this here avoids the inclusion
|
||||
of init-first. */
|
||||
@ -130,7 +131,7 @@ _dl_sysdep_start (void **start_argptr,
|
||||
SEE (EUID, euid);
|
||||
SEE (EGID, egid);
|
||||
|
||||
|
||||
__libc_uid = uid;
|
||||
__libc_enable_secure = uid != euid || gid != egid;
|
||||
|
||||
if (_dl_pagesize == 0)
|
||||
|
@ -26,9 +26,13 @@
|
||||
/* Safest assumption, if somehow the initializer isn't run. */
|
||||
int __libc_enable_secure = 1;
|
||||
|
||||
/* We often need the UID. */
|
||||
uid_t __libc_uid;
|
||||
|
||||
void
|
||||
__libc_init_secure (void)
|
||||
{
|
||||
__libc_enable_secure = (__geteuid () != __getuid () ||
|
||||
__getegid () != __getgid ());
|
||||
__libc_uid == __getuid ();
|
||||
__libc_enable_secure = (__geteuid () != __libc_uid
|
||||
|| __getegid () != __getgid ());
|
||||
}
|
||||
|
32
sysdeps/generic/sigqueue.c
Normal file
32
sysdeps/generic/sigqueue.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Implementation of sigqueue function from POSIX.1b.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
int
|
||||
__sigqueue (pid_t pid, int sig, const union sigval val)
|
||||
{
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
weak_alias (__sigqueue, sigqueue)
|
||||
|
||||
stub_warning (sigqueue)
|
||||
#include <stub-tag.h>
|
33
sysdeps/generic/sigtimedwait.c
Normal file
33
sysdeps/generic/sigtimedwait.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Implementation of sigtimedwait function from POSIX.1b.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
int
|
||||
__sigtimedwait (const sigset_t *set, siginfo_t *info,
|
||||
const struct timespec *timeout)
|
||||
{
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
weak_alias (__sigtimedwait, sigtimedwait)
|
||||
|
||||
stub_warning (sigtimedwait)
|
||||
#include <stub-tag.h>
|
32
sysdeps/generic/sigwaitinfo.c
Normal file
32
sysdeps/generic/sigwaitinfo.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* Implementation of sigwaitinfo function from POSIX.1b.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
int
|
||||
__sigwaitinfo (const sigset_t *set, siginfo_t *info)
|
||||
{
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
weak_alias (__sigwaitinfo, sigwaitinfo)
|
||||
|
||||
stub_warning (sigwaitinfo)
|
||||
#include <stub-tag.h>
|
28
sysdeps/generic/testrtsig.h
Normal file
28
sysdeps/generic/testrtsig.h
Normal file
@ -0,0 +1,28 @@
|
||||
/* Test whether RT signals are really available.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/utsname.h>
|
||||
|
||||
int
|
||||
kernel_has_rtsig (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
@ -18,7 +18,3 @@ CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
|
||||
CFLAGS-dl-load.c += -Wno-unused
|
||||
CFLAGS-dl-reloc.c += -Wno-unused
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),math)
|
||||
CPPFLAGS += -D__LIBC_INTERNAL_MATH_INLINES
|
||||
endif
|
||||
|
@ -44,9 +44,9 @@ enum
|
||||
#define ES ES
|
||||
DS,
|
||||
#define DS DS
|
||||
EDI
|
||||
EDI,
|
||||
#define EDI EDI
|
||||
ESI
|
||||
ESI,
|
||||
#define ESI ESI
|
||||
EBP,
|
||||
#define EBP EBP
|
||||
|
@ -84,6 +84,7 @@ __csqrt (__complex__ double x)
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0 /* FIXME: this is broken. */
|
||||
__complex__ double q;
|
||||
double t, r;
|
||||
|
||||
@ -99,6 +100,15 @@ __csqrt (__complex__ double x)
|
||||
|
||||
/* Heron iteration in complex arithmetic. */
|
||||
res = 0.5 * (q + q / x);
|
||||
#else
|
||||
double d, imag;
|
||||
|
||||
d = __ieee754_hypot (__real__ x, __imag__ x);
|
||||
imag = __ieee754_sqrt (0.5 * (d - __real__ x));
|
||||
|
||||
__real__ res = __ieee754_sqrt (0.5 * (d + __real__ x));
|
||||
__imag__ res = __copysign (imag, __imag__ x);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,6 +84,7 @@ __csqrtf (__complex__ float x)
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0 /* FIXME: this is broken. */
|
||||
__complex__ float q;
|
||||
float t, r;
|
||||
|
||||
@ -99,6 +100,15 @@ __csqrtf (__complex__ float x)
|
||||
|
||||
/* Heron iteration in complex arithmetic. */
|
||||
res = 0.5 * (q + q / x);
|
||||
#else
|
||||
float d, imag;
|
||||
|
||||
d = __ieee754_hypotf (__real__ x, __imag__ x);
|
||||
imag = __ieee754_sqrtf (0.5 * (d - __real__ x));
|
||||
|
||||
__real__ res = __ieee754_sqrtf (0.5 * (d + __real__ x));
|
||||
__imag__ res = __copysignf (imag, __imag__ x);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,6 +84,7 @@ __csqrtl (__complex__ long double x)
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0 /* FIXME: this is broken. */
|
||||
__complex__ long double q;
|
||||
long double t, r;
|
||||
|
||||
@ -99,6 +100,15 @@ __csqrtl (__complex__ long double x)
|
||||
|
||||
/* Heron iteration in complex arithmetic. */
|
||||
res = 0.5 * (q + q / x);
|
||||
#else
|
||||
long double d, imag;
|
||||
|
||||
d = __ieee754_hypotl (__real__ x, __imag__ x);
|
||||
imag = __ieee754_sqrtl (0.5 * (d - __real__ x));
|
||||
|
||||
__real__ res = __ieee754_sqrtl (0.5 * (d + __real__ x));
|
||||
__imag__ res = __copysignl (imag, __imag__ x);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef SUFF
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef FUNC
|
||||
|
@ -18,7 +18,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <complex.h>
|
||||
#include <math.h>
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <complex.h>
|
||||
#include <math.h>
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <complex.h>
|
||||
#include <math.h>
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <complex.h>
|
||||
#include <math.h>
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <complex.h>
|
||||
#include <math.h>
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef FUNC
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef SUFF
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef FUNC
|
||||
|
@ -19,7 +19,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef suffix
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef SUFF
|
||||
|
@ -18,7 +18,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef SUFF
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#define scalbln __no_scalbln_decl
|
||||
#define scalblnf __no_scalblnf_decl
|
||||
#define scalblnl __no_scalblnl_decl
|
||||
|
@ -16,7 +16,6 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define __LIBC_INTERNAL_MATH_INLINES
|
||||
#include <math.h>
|
||||
|
||||
#ifndef FUNC
|
||||
|
@ -44,6 +44,7 @@ extern int _dl_argc;
|
||||
extern char **_dl_argv;
|
||||
extern char **_environ;
|
||||
|
||||
uid_t __libc_uid;
|
||||
int __libc_enable_secure;
|
||||
|
||||
struct hurd_startup_data *_dl_hurd_data;
|
||||
@ -106,6 +107,7 @@ _dl_sysdep_start (void **start_argptr,
|
||||
else
|
||||
_dl_hurd_data = (void *) p;
|
||||
|
||||
__libc_uid = __getuid ();
|
||||
__libc_enable_secure = _dl_hurd_data->flags & EXEC_SECURE;
|
||||
|
||||
if (_dl_hurd_data->flags & EXEC_STACK_ARGS &&
|
||||
|
@ -31,6 +31,12 @@ netinet/tcp.h
|
||||
netinet/udp.h
|
||||
netipx/ipx.h
|
||||
nfs/nfs.h
|
||||
rt_sigaction.c
|
||||
rt_sigprocmask.c
|
||||
rt_sigqueueinfo.c
|
||||
rt_sigreturn.c
|
||||
rt_sigsuspend.c
|
||||
rt_sigtimedwait.c
|
||||
scsi/sg.h
|
||||
sys/acct.h
|
||||
sys/debugreg.h
|
||||
@ -41,6 +47,7 @@ sys/kdaemon.h
|
||||
sys/klog.h
|
||||
sys/mount.h
|
||||
sys/mtio.h
|
||||
sys/pci.h
|
||||
sys/prctl.h
|
||||
sys/procfs.h
|
||||
sys/quota.h
|
||||
@ -50,6 +57,7 @@ sys/sysctl.h
|
||||
sys/sysinfo.h
|
||||
sys/sysmacros.h
|
||||
sys/timex.h
|
||||
sys/ultrasound.h
|
||||
sys/user.h
|
||||
sys/vt.h
|
||||
xstatconv.c
|
||||
|
@ -16,7 +16,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \
|
||||
sys/user.h sys/sysmacros.h sys/procfs.h sys/prctl.h \
|
||||
sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h \
|
||||
sys/quota.h sys/fsuid.h bits/mman.h \
|
||||
scsi/sg.h
|
||||
scsi/sg.h sys/pci.h sys/ultrasound.h
|
||||
|
||||
install-others += $(inst_includedir)/bits/syscall.h
|
||||
|
||||
@ -108,4 +108,10 @@ ifndef no_deps
|
||||
# Get the list of dependencies (probably /usr/include/linux/limits.h).
|
||||
-include $(common-objpfx)bits/stdio_lim.d
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),signal)
|
||||
sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
|
||||
rt_sigqueueinfo rt_sigaction
|
||||
endif
|
||||
|
||||
common-generated += bits/stdio_lim.h bits/stdio_lim.d
|
||||
|
54
sysdeps/unix/sysv/linux/aio_sigqueue.c
Normal file
54
sysdeps/unix/sysv/linux/aio_sigqueue.c
Normal file
@ -0,0 +1,54 @@
|
||||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <aio.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "aio_misc.h"
|
||||
|
||||
extern int __syscall_rt_sigqueueinfo (int, int, siginfo_t *);
|
||||
|
||||
/* These variables are used quite often in the libc code. */
|
||||
extern pid_t __libc_pid;
|
||||
extern uid_t __libc_uid;
|
||||
|
||||
|
||||
/* Return any pending signal or wait for one for the given time. */
|
||||
int
|
||||
__aio_sigqueue (sig, val)
|
||||
int sig;
|
||||
const union sigval val;
|
||||
{
|
||||
siginfo_t info;
|
||||
|
||||
/* We must pass the information about the data in a siginfo_t value. */
|
||||
info.si_signo = sig;
|
||||
info.si_errno = 0;
|
||||
info.si_code = SI_ASYNCIO;
|
||||
|
||||
if (__libc_pid ==0xf00baa)
|
||||
__libc_pid = __getpid ();
|
||||
info.si_pid = __libc_pid;
|
||||
|
||||
info.si_uid = __libc_uid;
|
||||
|
||||
info.si_value = val;
|
||||
|
||||
return __syscall_rt_sigqueueinfo (__libc_pid, sig, &info);
|
||||
}
|
75
sysdeps/unix/sysv/linux/arm/bits/mman.h
Normal file
75
sysdeps/unix/sysv/linux/arm/bits/mman.h
Normal file
@ -0,0 +1,75 @@
|
||||
/* Definitions for POSIX memory map interface. Linux/ARM version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SYS_MMAN_H
|
||||
# error "Never include this file directly. Use <sys/mman.h> instead"
|
||||
#endif
|
||||
|
||||
/* The following definitions basically come from the kernel headers.
|
||||
But the kernel header is not namespace clean. */
|
||||
|
||||
|
||||
/* Protections are chosen from these bits, OR'd together. The
|
||||
implementation does not necessarily support PROT_EXEC or PROT_WRITE
|
||||
without PROT_READ. The only guarantees are that no writing will be
|
||||
allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
|
||||
|
||||
#define PROT_READ 0x1 /* Page can be read. */
|
||||
#define PROT_WRITE 0x2 /* Page can be written. */
|
||||
#define PROT_EXEC 0x4 /* Page can be executed. */
|
||||
#define PROT_NONE 0x0 /* Page can not be accessed. */
|
||||
|
||||
/* Sharing types (must choose one and only one of these). */
|
||||
#define MAP_SHARED 0x01 /* Share changes. */
|
||||
#define MAP_PRIVATE 0x02 /* Changes are private. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_TYPE 0x0f /* Mask for type of mapping. */
|
||||
#endif
|
||||
|
||||
/* Other flags. */
|
||||
#define MAP_FIXED 0x10 /* Interpret addr exactly. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_FILE 0
|
||||
# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
|
||||
# define MAP_ANON MAP_ANONYMOUS
|
||||
#endif
|
||||
|
||||
/* These are Linux-specific. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
|
||||
# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
|
||||
# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
|
||||
# define MAP_LOCKED 0x2000 /* Lock the mapping. */
|
||||
# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
|
||||
#endif
|
||||
|
||||
/* Flags to `msync'. */
|
||||
#define MS_ASYNC 1 /* Sync memory asynchronously. */
|
||||
#define MS_SYNC 4 /* Synchronous memory sync. */
|
||||
#define MS_INVALIDATE 2 /* Invalidate the caches. */
|
||||
|
||||
/* Flags for `mlockall'. */
|
||||
#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
|
||||
#define MCL_FUTURE 2 /* Lock all additions to address
|
||||
space. */
|
||||
|
||||
/* Flags for `mremap'. */
|
||||
#ifdef __USE_GNU
|
||||
# define MREMAP_MAYMOVE 1
|
||||
#endif
|
@ -1,5 +1,5 @@
|
||||
/* Minimum guaranteed maximum values for system limits. Linux version.
|
||||
Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -19,3 +19,7 @@
|
||||
|
||||
/* The kernel sources contain a file with all the needed information. */
|
||||
#include <linux/limits.h>
|
||||
|
||||
/* Maximum amount by which a process can descrease its asynchronous I/O
|
||||
priority level. */
|
||||
#define AIO_PRIO_DELTA_MAX 20
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Define POSIX options for Linux.
|
||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -67,7 +67,13 @@
|
||||
/* Filenames are not silently truncated. */
|
||||
#define _POSIX_NO_TRUNC 1
|
||||
|
||||
/* X/Open realtime support is available. */
|
||||
#define _XOPEN_REALTIME 1
|
||||
|
||||
/* XPG4.2 shared memory is supported. */
|
||||
#define _XOPEN_SHM 1
|
||||
|
||||
/* Real-time signals are supported. */
|
||||
#define _POSIX_REALTIME_SIGNALS 1
|
||||
|
||||
#endif /* bits/posix_opt.h */
|
||||
|
@ -25,7 +25,16 @@
|
||||
struct sigaction
|
||||
{
|
||||
/* Signal handler. */
|
||||
__sighandler_t sa_handler;
|
||||
union
|
||||
{
|
||||
/* Used if SA_SIGINFO is not set. */
|
||||
__sighandler_t sa_handler;
|
||||
/* Used if SA_SIGINFO is set. */
|
||||
void (*sa_sigaction) __P ((int, siginfo_t *, void *));
|
||||
}
|
||||
__sigaction_handler;
|
||||
#define sa_handler __sigaction_handler.sa_handler
|
||||
#define sa_sigaction __sigaction_handler.sa_sigaction
|
||||
|
||||
/* Additional set of signals to be blocked. */
|
||||
__sigset_t sa_mask;
|
||||
@ -39,17 +48,22 @@ struct sigaction
|
||||
|
||||
/* Bits in `sa_flags'. */
|
||||
#define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */
|
||||
#ifdef __USE_MISC
|
||||
# define SA_STACK 0x08000000 /* Use signal stack by using `sa_restorer'. */
|
||||
#define SA_SIGINFO 4 /* Invoke signal-catching function with
|
||||
three arguments instead of one. */
|
||||
#if defined __USE_UNIX98 || defined __USE_MISC
|
||||
# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */
|
||||
# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */
|
||||
# define SA_INTERRUPT 0x20000000 /* Historical no-op. */
|
||||
# define SA_NODEFER 0x40000000 /* Don't automatically block the signal when
|
||||
its handler is being executed. */
|
||||
# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */
|
||||
#endif
|
||||
#ifdef __USE_MISC
|
||||
# define SA_INTERRUPT 0x20000000 /* Historical no-op. */
|
||||
|
||||
/* Some aliases for the SA_ constants. */
|
||||
# define SA_NOMASK SA_NODEFER
|
||||
# define SA_ONESHOT SA_RESETHAND
|
||||
# define SA_STACK SA_ONSTACK
|
||||
#endif
|
||||
|
||||
/* Values for the HOW argument to `sigprocmask'. */
|
||||
|
257
sysdeps/unix/sysv/linux/bits/siginfo.h
Normal file
257
sysdeps/unix/sysv/linux/bits/siginfo.h
Normal file
@ -0,0 +1,257 @@
|
||||
/* siginfo_t, sigevent and constants. Linux version.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _SIGNAL_H
|
||||
# error "Never include this file directly. Use <signal.h> instead"
|
||||
#endif
|
||||
|
||||
#define SI_MAX_SIZE 128
|
||||
#define SI_PAD_SIZE ((SI_MAX_SIZE / sizeof (int)) - 3)
|
||||
|
||||
typedef struct siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_errno; /* If non-zero, an errno value associated with
|
||||
this signal, as defined in <errno.h>. */
|
||||
int si_code; /* Signal code. */
|
||||
|
||||
union
|
||||
{
|
||||
int _pad[SI_PAD_SIZE];
|
||||
|
||||
/* kill(). */
|
||||
struct
|
||||
{
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers. */
|
||||
struct
|
||||
{
|
||||
unsigned int _timer1;
|
||||
unsigned int _timer2;
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals. */
|
||||
struct
|
||||
{
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
sigval_t si_sigval; /* Signal value. */
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD. */
|
||||
struct
|
||||
{
|
||||
__pid_t si_pid; /* Which child. */
|
||||
int si_status; /* Exit value or signal. */
|
||||
__clock_t si_utime;
|
||||
__clock_t si_stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */
|
||||
struct
|
||||
{
|
||||
void *si_addr; /* Faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL. */
|
||||
struct
|
||||
{
|
||||
int si_band; /* Band event for SIGPOLL. */
|
||||
int si_fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} siginfo_t;
|
||||
|
||||
|
||||
/* X/Open requires some more fields with fixed names. */
|
||||
#define si_pid _sifields._kill.si_pid
|
||||
#define si_uid _sifields._kill.si_uid
|
||||
#define si_status _sifields._sigchld.si_status
|
||||
#define si_utime _sifields._sigchld.si_utime
|
||||
#define si_stime _sifields._sigchld.si_stime
|
||||
#define si_value _sifields._rt.si_sigval
|
||||
#define si_int _sifields._rt.si_sigval.sival_int
|
||||
#define si_ptr _sifields._rt.si_sigval.sival_ptr
|
||||
#define si_addr _sifields._sigfault.si_addr
|
||||
#define si_band _sifields._sigpoll.si_band
|
||||
#define si_fd _sifields._sigpoll.si_fd
|
||||
|
||||
|
||||
/* Values for `si_code'. Positive values are reserved for kernel-generated
|
||||
signals. */
|
||||
enum
|
||||
{
|
||||
SI_ASYNCIO = -4, /* Sent by AIO completion. */
|
||||
#define SI_ASYNCIO SI_ASYNCIO
|
||||
SI_MESGQ, /* Sent by real time mesq state change. */
|
||||
#define SI_MESGQ SI_MESGQ
|
||||
SI_TIMER, /* Sent by timer expiration. */
|
||||
#define SI_TIMER SI_TIMER
|
||||
SI_QUEUE, /* Sent by sigqueue. */
|
||||
#define SI_QUEUE SI_QUEUE
|
||||
SI_USER /* Sent by kill, sigsend, raise. */
|
||||
#define SI_USER SI_USER
|
||||
};
|
||||
|
||||
|
||||
/* `si_code' values for SIGILL signal. */
|
||||
enum
|
||||
{
|
||||
ILL_ILLOPC = 1, /* Illegal opcode. */
|
||||
#define ILL_ILLOPC ILL_ILLOPC
|
||||
ILL_ILL_OPN, /* Illegal operand. */
|
||||
#define ILL_ILLOPN ILL_ILLOPN
|
||||
ILL_ILLADR, /* Illegal addressing mode. */
|
||||
#define ILL_ILLADR ILL_ILLADR
|
||||
ILL_ILLTRP, /* Illegal trap. */
|
||||
#define ILL_ILLTRP ILL_ILLTRP
|
||||
ILL_PRVOPC, /* Privileged opcode. */
|
||||
#define ILL_PRVOPC ILL_PRVOPC
|
||||
ILL_PRVREG, /* Privileged register. */
|
||||
#define ILL_PRVREG ILL_PRVREG
|
||||
ILL_COPROC, /* Coprocessor error. */
|
||||
#define ILL_COPROC ILL_COPROC
|
||||
ILL_BADSTK /* Internal stack error. */
|
||||
#define ILL_BADSTK ILL_BADSTK
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGFPE signal. */
|
||||
enum
|
||||
{
|
||||
FPE_INTDIV = 1, /* Integer divide by zero. */
|
||||
#define FPE_INTDIV FPE_INTDIV
|
||||
FPE_INTOVF, /* Integer overflow. */
|
||||
#define FPE_INTOVF FPE_INTOVF
|
||||
FPE_FLTDIV, /* Floating point divide by zero. */
|
||||
#define FPE_FLTDIV FPE_FLTDIV
|
||||
FPE_FLTOVF, /* Floating point overflow. */
|
||||
#define FPE_FLTOVF FPE_FLTOVF
|
||||
FPE_FLTUND, /* Floating point underflow. */
|
||||
#define FPE_FLTUND FPE_FLTUND
|
||||
FPE_FLTRES, /* Floating point inexact result. */
|
||||
#define FPE_FLTRES FPE_FLTRES
|
||||
FPE_FLTINV, /* Floating point invalid operation. */
|
||||
#define FPE_FLTINV FPE_FLTINV
|
||||
FPE_FLTSUB /* Subscript out of range. */
|
||||
#define FPE_FLTSUB FPE_FLTSUB
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGSEGV signal. */
|
||||
enum
|
||||
{
|
||||
SEGV_MAPERR = 1, /* Address not mapped to object. */
|
||||
#define SEGV_MAPERR SEGV_MAPERR
|
||||
SEGV_ACCERR /* Invalid permissions for mapped object. */
|
||||
#define SEGV_ACCERR SEGV_ACCERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGBUS signal. */
|
||||
enum
|
||||
{
|
||||
BUS_ADRALN = 1, /* Invalid address alignment. */
|
||||
#define BUS_ADRALN BUS_ADRALN
|
||||
BUS_ADRERR, /* Non-existant physical address. */
|
||||
#define BUS_ADRERR BUS_ADRERR
|
||||
BUS_OBJERR /* Object specific hardware error. */
|
||||
#define BUS_OBJERR BUS_OBJERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGTRAP signal. */
|
||||
enum
|
||||
{
|
||||
TRAP_BRKPT = 1, /* Process breakpoint. */
|
||||
#define TRAP_BRKPT TRAP_BRKPT
|
||||
TRAP_TRACE /* Process trace trap. */
|
||||
#define TRAP_TRACE TRAP_TRACE
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGCHLD signal. */
|
||||
enum
|
||||
{
|
||||
CLD_EXITED = 1, /* Child has exited. */
|
||||
#define CLD_EXITED CLD_EXITED
|
||||
CLD_KILLED, /* Child was killed. */
|
||||
#define CLD_KILLED CLD_KILLED
|
||||
CLD_DUMPED, /* Child terminated abnormally. */
|
||||
#define CLD_DUMPED CLD_DUMPED
|
||||
CLD_TRAPPED, /* Traced child has trapped. */
|
||||
#define CLD_TRAPPED CLD_TRAPPED
|
||||
CLD_STOPPED, /* Child has stopped. */
|
||||
#define CLD_STOPPED CLD_STOPPED
|
||||
CLD_CONTINUED /* Stopped child has continued. */
|
||||
#define CLD_CONTINUED CLD_CONTINUED
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGPOLL signal. */
|
||||
enum
|
||||
{
|
||||
POLL_IN = 1, /* Data input available. */
|
||||
#define POLL_IN POLL_IN
|
||||
POLL_OUT, /* Output buffers available. */
|
||||
#define POLL_OUT POLL_OUT
|
||||
POLL_MSG, /* Input message available. */
|
||||
#define POLL_MSG POLL_MSG
|
||||
POLL_ERR, /* I/O error. */
|
||||
#define POLL_ERR POLL_ERR
|
||||
POLL_PRI, /* High priority input available. */
|
||||
#define POLL_PRI POLL_PRI
|
||||
POLL_HUP /* Device disconnected. */
|
||||
#define POLL_HUP POLL_HUP
|
||||
};
|
||||
|
||||
|
||||
/* Structure to transport application-defined values with signals. */
|
||||
#define SIGEV_MAX_SIZE 64
|
||||
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE / sizeof (int)) - 3)
|
||||
|
||||
typedef struct sigevent
|
||||
{
|
||||
sigval_t sigev_value;
|
||||
int sigev_signo;
|
||||
int sigev_notify;
|
||||
|
||||
union
|
||||
{
|
||||
int _pad[SIGEV_PAD_SIZE];
|
||||
|
||||
struct
|
||||
{
|
||||
void (*_function) __P ((sigval_t)); /* Function to start. */
|
||||
void *_attribute; /* Really pthread_attr_t. */
|
||||
} _sigev_thread;
|
||||
} _sigev_un;
|
||||
} sigevent_t;
|
||||
|
||||
/* POSIX names to access some of the members. */
|
||||
#define sigev_notify_function _sigev_un._sigev_thread._function
|
||||
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
|
||||
|
||||
/* `sigev_notify' values. */
|
||||
enum
|
||||
{
|
||||
SIGEV_SIGNAL = 0, /* Notify via signal. */
|
||||
#define SIGEV_SIGNAL SIGEV_SIGNAL
|
||||
SIGEV_NONE, /* Other notification: meaningless. */
|
||||
#define SIGEV_NONE SIGEV_NONE
|
||||
SIGEV_THREAD /* Deliver via thread creation. */
|
||||
#define SIGEV_THREAD SIGEV_THREAD
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
/* Signal number definitions. Linux version.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -20,9 +20,9 @@
|
||||
#ifdef _SIGNAL_H
|
||||
|
||||
/* Fake signal functions. */
|
||||
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
|
||||
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
|
||||
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
|
||||
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
|
||||
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
|
||||
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
|
||||
|
||||
|
||||
/* Signals. */
|
||||
@ -42,7 +42,7 @@
|
||||
#define SIGPIPE 13 /* Broken pipe (POSIX). */
|
||||
#define SIGALRM 14 /* Alarm clock (POSIX). */
|
||||
#define SIGTERM 15 /* Termination (ANSI). */
|
||||
#define SIGSTKFLT 16 /* ??? */
|
||||
#define SIGSTKFLT 16 /* Stack fault. */
|
||||
#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */
|
||||
#define SIGCHLD 17 /* Child status has changed (POSIX). */
|
||||
#define SIGCONT 18 /* Continue (POSIX). */
|
||||
@ -61,6 +61,15 @@
|
||||
#define SIGPWR 30 /* Power failure restart (System V). */
|
||||
#define SIGUNUSED 31
|
||||
|
||||
#define _NSIG 32 /* Biggest signal number + 1. */
|
||||
#define _NSIG 64 /* Biggest signal number + 1
|
||||
(including real-time signals). */
|
||||
|
||||
#define SIGRTMIN (__libc_current_sigrtmin ())
|
||||
#define SIGRTMAX (__libc_current_sigrtmax ())
|
||||
|
||||
/* These are the hard limits of the kernel. These values should not be
|
||||
used directly at user level. */
|
||||
#define __SIGRTMIN 32
|
||||
#define __SIGRTMAX (_NSIG - 1)
|
||||
|
||||
#endif /* <signal.h> included. */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user