mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-25 02:02:09 +03:00
Update.
1997-03-16 18:43 Ulrich Drepper <drepper@cygnus.com> * manual/filesys.texi: Add documentation for scandir and alphasort. * math/math.c (fpclassify): Correct stupid typos. * math/libm-test.c: New file. libm test suite by Andreas Jaeger. * nss/nss_files/files-hosts.c: Add gethostbyname2 imlementation. * posix/Makefile (routines): Add bsd-getpgrp. * posix/bsd-getpgrp.c: New file. * posix/unistd.h [__FAVOR_BSD]: Define macro getpgrp which maps calls to __bsd_getpgrp. * sysdeps/generic/getpgrp.c: De-ANSI-declfy. * sysdeps/i386/huge_val.h: New file. ix87 specific infinity values. * sysdeps/m68k/huge_val.h: New file. m68k specific infinity values. * sysdeps/generic/huge_val.h: Remove definition of long double definition. Make it the same as the double definition. * sysdeps/libm-i387/e_acos.S: Fix bug in FPU stack handling. * sysdeps/libm-i387/e_acosf.S: Likewise. * sysdeps/libm-i387/e_acosl.S: Likewise. * sysdeps/libm-i387/e_asin.S: Likewise. * sysdeps/libm-i387/e_asinf.S: Likewise. * sysdeps/libm-i387/e_asinl.S: Likewise. * sysdeps/libm-i387/e_exp.S: Likewise. * sysdeps/libm-i387/e_expf.S: Likewise. * sysdeps/libm-i387/e_expl.S: Likewise. * sysdeps/libm-i387/e_scalbn.S: Likewise. * sysdeps/libm-i387/e_scalbnf.S: Likewise. * sysdeps/libm-i387/e_scalbnl.S: Likewise. * sysdeps/libm-i387/e_log.S: Optimize branch code. * sysdeps/libm-i387/e_logf.S: Likewise. * sysdeps/libm-i387/e_logl.S: Likewise. * sysdeps/libm-i387/e_log10.S: Likewise. * sysdeps/libm-i387/e_log10f.S: Likewise. * sysdeps/libm-i387/e_log10l.S: Likewise. * sysdeps/libm-i387/e_pow.S: Major rewrite to handle special cases. * sysdeps/libm-i387/e_powf.S: Likewise. * sysdeps/libm-i387/e_powl.S: Likewise. * sysdeps/libm-i387/e_expm1.S: Change return value for -inf argument to -1.0. * sysdeps/libm-i387/e_expm1f.S: Likewise. * sysdeps/libm-i387/e_expm1l.S: Likewise. * sysdeps/libm-i387/e_isinfl.c: Return -1 for -inf. * sysdeps/libm-i387/e_logbl.S: Correct return value. Discard first stack element after fxtract. * sysdeps/libm-ieee754/e_atan2l.c: New file. `long double' implementation for atan2 function. * sysdeps/libm-ieee754/k_standard.c: Return NAN for libm not in _SVID_ mode when acos, asin, atan2, log, log10 is called with argument out of range. Add new error case for pow(+0,neg). * sysdeps/libm-ieee754/s_fpclassifyf.c: Correct recognition of NaN and +-inf. * sysdeps/libm-ieee754/s_fpclassifyl.c: Mask out explicit leading digit in stupid 80 bit formats. * sysdeps/libm-ieee754/s_isinf.c: Rewrite to return -1 for -inf. * sysdeps/libm-ieee754/s_isinff.c: Likewise. * sysdeps/libm-ieee754/s_isinfl.c: Likewise. * sysdeps/libm-ieee754/s_scalbnl.c (huge, tiny): Adapt values for long double type. * sysdeps/libm-ieee754/w_atan2.c: Do not raise exception expect when in SVID mode. * sysdeps/libm-ieee754/w_atan2f.c: Likewise. * sysdeps/libm-ieee754/w_atan2l.c: Likewise. * sysdeps/libm-ieee754/w_pow.c: Distinguish error cases for x is +0 or -0. * sysdeps/posix/isfdtype.c: Add cast to prevent warning. * sysdeps/stub/fcntlbits.h: Update copyright. * sysdeps/unix/bsd/fcntlbits.h: Likewise. * sysdeps/unix/bsd/bsd4.4/fcntlbits.h: Likewise. * sysdeps/unix/bsd/sun/sunos4/fcntlbits.h: Likewise. * sysdeps/unix/bsd/ultrix4/fcntlbits.h: Likewise. * sysdeps/unix/common/fcntlbits.h: Likewise. * sysdeps/unix/sysv/fcntlbits.h: Likewise. Define O_FSYNC as alias of O_SYNC. Add BSD compatibility macros FAPPEND, FFSYNC, FNONBLOCK, and FNDELAY. * sysdeps/unix/sysv/irix4/fcntlbits.h: Likewise. * sysdeps/unix/readdir_r.c: Don't copy whole `struct dirent' record, only reclen bytes. * sysdeps/unix/sysv/linux/fcntlbits.h [__USE_GNU]: Add O_READ, O_WRITE and O_NORW. * sysdeps/unix/sysv/linux/alpha/fcntlbits.h: Likewise. * sysdeps/unix/sysv/linux/init-first.h: Add copyright. * sysdeps/unix/sysv/linux/fxstat.c: New file. Rewrite kernel-level struct stat to user-level form. * sysdeps/unix/sysv/linux/lxstat: New file. * sysdeps/unix/sysv/linux/xstat: New file. * sysdeps/unix/sysv/linux/kernel_stat.h: Define struct stat used in kernel. * sysdeps/unix/sysv/linux/statbuf.h (struct stat): Change definition to use prescribed types for elements. (_STAT_VER): Change to value 3. * sysdeps/unix/sysv/linux/alph/statbuf.h: Likewise. * sysdeps/unix/sysv/linux/Dist: Add kernel_stat.h. * sysdeps/unix/sysv/linux/alpha/Dist: Likewise. * time/Makefile: Correct dependencies for test-tz. 1997-03-16 14:59 Philip Blundell <phil@london.uk.eu.org> * resolv/netdb.h: Add prototypes for gai_strerror and getnameinfo (needed for IPv6 basic sockets API). 1997-03-16 15:02 a sun <asun@zoology.washington.edu> * sysdeps/unix/sysv/linux/net/if_ppp.h: Don't use incompatible kernel header. * sysdeps/unix/sysv/linux/net/ppp_defs.h: Likewise. 1997-03-14 17:15 Ulrich Drepper <drepper@cygnus.com> * db/hash/hash_bigkey.c (__big_delete): Don't call __free_ovflpage without testing for last_bfp to be NULL. Reported by fabsoft@fabserver1.zarm.uni-bremen.de. 1997-03-13 11:42 Jim Meyering <meyering@asic.sc.ti.com> * time/mktime.c (TIME_T_MIN): Work around a bug in Cray C 5.0.3.0. 1997-03-14 04:00 Kurt Garloff <garloff@kg1.ping.de> * sysdeps/unix/sysv/linux/fcntlbits.h (O_FSYNC): Make alias for O_SYNC. (FASYNC): Move to __USE_BSD section. Create new macro O_ASYNC. 1997-03-14 02:50 Ulrich Drepper <drepper@cygnus.com> * nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname2_r): New functions. Compare result for correct address type. (_nss_nis_gethostbyname_r): Use _nss_nis_gethostbyname2_r. Reported by Mirko Streckenbach <mirko@marian.hil.de>. 1997-02-17 01:40 Zlatko Calusic <zcalusic@srce.hr> * time/strptime.c (recursive): Return rp to caller. (strptime_internal): First check for long names, then abbreviated (month & weekday). 1997-03-10 19:44 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makeconfig: Remove useless definitions of ASFLAGS-%. * config.make.in (ASFLAGS-.so): Remove. * configure.in: Don't substitute ASFLAGS_SO. * sysdeps/sparc/configure.in: Remove file. * sysdeps/sparc/Makefile (ASFLAGS-.so): Define. 1997-03-11 17:00 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * time/strptime.c (strptime_internal) [case 'Y']: Always subtract 1900 from year, regardless of century. 1997-03-12 05:43 Ulrich Drepper <drepper@cygnus.com> * stdlib/strtod.c (_tens_in_limb) [BITS_PER_MP_LIMB > 32]: Make all numbers unsigned to make buggy gccs happy. Patch by Bryan W. Headley <bheadley@interaccess.com>. * sysdeps/unix/sysv/linux/netinet/ip.h: Add backward-compatibility definitions. Patch by a sun <asun@zoology.washington.edu>. Pretty print header. * Makerules (build-shlib): Also create symlink if library is versioned. based on a patch by H.J. Lu <hjl@gnu.ai.mit.edu>. Remove special rule to libc.so symlink. 1997-03-11 20:16 Andreas Jaeger <aj@arthur.pfalz.de> * manual/math.texi (Domain and Range Errors): Change descriptions according to recent changes for ISO C 9X. 1997-03-11 22:39 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-ieee754/k_standard.c (__kernel_standard): Correct return values for acos, asin, and atan2. Reported by Andreas Jaeger <aj@arthur.pfalz.de>. 1997-03-10 18:16 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * ypclnt.c (__yp_bind): Fix possible buffer overflow. 1997-03-10 18:06 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE> * dirent/alphasort.c (alphasort): Interpret arguments as pointers to pointers to directory entries so that alphasort really can be used as argument for scandir. 1997-03-09 23:33 Andreas Jaeger <aj@arthur.pfalz.de> * string/strdup.c: Declare memcpy if !(_LIBC || STDC_HEADERS) instead of strcpy. 1997-03-10 03:34 Ulrich Drepper <drepper@cygnus.com> * catgets/catgets.c (catopen): Always add NLSPATH to search path for catalogs, not only if the envvar NLSPATH is not available. Reported by Andries.Brouwer@cwi.nl. 1997-03-10 02:46 Ulrich Drepper <drepper@cygnus.com> * Makeconfig (localtime-file): Don't define using installation directory. (inst_localtime-file): New variable. * time/Makefile (installed-localtime-file): Use inst_localtime-file. Reported by Edward Seidl <seidl@janed.com>. 1997-03-10 02:31 H.J. Lu <hjl@gnu.ai.mit.edu> * time/Makefile: Add source files to dependencies for test data. 1997-03-09 22:53 Thorsten Kukuk <kukuk@weber.uni-paderborn.de> * nis/nss_nis/nis-ethers.c: Don't ignore return value of yp_all. * nis/nss_nis/nis-proto.c: Likewise. * nis/nss_nis/nis-rpc.c: Likewise. * nis/nss_nis/nis-service.c: Likewise. 1997-03-08 14:37 Miguel de Icaza <miguel@nuclecu.unam.mx> * sysdeps/sparc/dl-machine.h (elf_machine_rela): Upgrade to versioning; Added missing R_SPARC_WDISP30 handling. (RTLD_START): Implement it. * sysdeps/unix/sysv/linux/sparc/brk.c: Fix. * sysdeps/unix/sysv/linux/sparc/start.c: Startup code for Linux/SPARC. 1997-03-02 18:06 Miguel de Icaza <miguel@nuclecu.unam.mx> * sysdeps/sparc/dl-machine.h (RTLD_START): Make arg as expected by the dynamic linker instead of having a new conditional define. Thanks to Richard Henderson for pointing this out. * elf/rtld.c: Remove usage of ELF_ADJUST_ARG. 1997-03-20 20:44 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu> * sysdeps/mach/hurd/euidaccess.c: Define as __euidaccess and make euidaccess weak alias. 1997-03-07 10:30 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu> * stdio-common/printf_fphex.c (MIN): New macro. * sysdeps/generic/netinet/in.h: Include <sys/types.h>. * sysdeps/generic/sys/mman.h (msync): Mention third arg. * sysdeps/generic/netinet/in.h: Add definitions for IPv6 basic API. (See change by Philip Blundell on Feb 16, 1997.) 1997-03-05 10:40 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu> * hurd/hurd.h (vpprintf): Include <stdarg.h>. New declaration. * hurd/set-host.c (_hurd_set_host_config): Cast second arg to __file_name_split. * mach/mach_error.c (mach_error_string_int): Give full prototype. * mach/errstring.c (mach_error_string_int): Likewise. * mach/error_compat.c (__mach_error_map_compat): Likewise. * hurd/vpprintf.c (pwrite, vpprintf): Likewise. * stdio/vasprintf.c (vasprintf): Likewise. * mach/mach/mach_traps.h: Include <mach/kern_return.h>. * mach/spin-solid.c: Include <mach/mach_traps.h>. * mach/spin-solid.c (__spin_lock_solid): Provide arg to swtch_pri. * mach/mach_init.c: Include <mach/mig_support.h>. * mach/mach_error.h (mach_error_string, mach_error, mach_error_type): Always provide prototypes. * mach/mach/error.h (mach_error_fn_t): Comment out declaration; it appears to be entirely unused dead code. * stdio/stdio.h (freopen): Fix spelling error. 1997-03-02 13:38 Miles Bader <miles@gnu.ai.mit.edu> * string/argz.h (__need_error_t): New macro, before including <errno.h> [!__const] (__const): New macro. [!__error_t_defined] (error_t): New typedef. * sysdeps/generic/socketbits.h: Add PF_FILE as synonym for PF_LOCAL * sysdeps/unix/sysv/linux/socketbits.h: Likewise.
This commit is contained in:
311
ChangeLog
311
ChangeLog
@ -1,3 +1,310 @@
|
|||||||
|
1997-03-16 18:43 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* manual/filesys.texi: Add documentation for scandir and alphasort.
|
||||||
|
|
||||||
|
* math/math.c (fpclassify): Correct stupid typos.
|
||||||
|
|
||||||
|
* math/libm-test.c: New file. libm test suite by Andreas Jaeger.
|
||||||
|
|
||||||
|
* nss/nss_files/files-hosts.c: Add gethostbyname2 imlementation.
|
||||||
|
|
||||||
|
* posix/Makefile (routines): Add bsd-getpgrp.
|
||||||
|
* posix/bsd-getpgrp.c: New file.
|
||||||
|
* posix/unistd.h [__FAVOR_BSD]: Define macro getpgrp which maps
|
||||||
|
calls to __bsd_getpgrp.
|
||||||
|
|
||||||
|
* sysdeps/generic/getpgrp.c: De-ANSI-declfy.
|
||||||
|
|
||||||
|
* sysdeps/i386/huge_val.h: New file. ix87 specific infinity values.
|
||||||
|
* sysdeps/m68k/huge_val.h: New file. m68k specific infinity values.
|
||||||
|
* sysdeps/generic/huge_val.h: Remove definition of long double
|
||||||
|
definition. Make it the same as the double definition.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_acos.S: Fix bug in FPU stack handling.
|
||||||
|
* sysdeps/libm-i387/e_acosf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_acosl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asin.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asinf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asinl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_exp.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_expf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_expl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_scalbn.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_scalbnf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_scalbnl.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_log.S: Optimize branch code.
|
||||||
|
* sysdeps/libm-i387/e_logf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_logl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10f.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10l.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_pow.S: Major rewrite to handle special cases.
|
||||||
|
* sysdeps/libm-i387/e_powf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_powl.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_expm1.S: Change return value for -inf
|
||||||
|
argument to -1.0.
|
||||||
|
* sysdeps/libm-i387/e_expm1f.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_expm1l.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_isinfl.c: Return -1 for -inf.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_logbl.S: Correct return value. Discard first
|
||||||
|
stack element after fxtract.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/e_atan2l.c: New file. `long double'
|
||||||
|
implementation for atan2 function.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/k_standard.c: Return NAN for libm not in
|
||||||
|
_SVID_ mode when acos, asin, atan2, log, log10 is called with
|
||||||
|
argument out of range.
|
||||||
|
Add new error case for pow(+0,neg).
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_fpclassifyf.c: Correct recognition of
|
||||||
|
NaN and +-inf.
|
||||||
|
* sysdeps/libm-ieee754/s_fpclassifyl.c: Mask out explicit leading
|
||||||
|
digit in stupid 80 bit formats.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_isinf.c: Rewrite to return -1 for -inf.
|
||||||
|
* sysdeps/libm-ieee754/s_isinff.c: Likewise.
|
||||||
|
* sysdeps/libm-ieee754/s_isinfl.c: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_scalbnl.c (huge, tiny): Adapt values for
|
||||||
|
long double type.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/w_atan2.c: Do not raise exception expect when
|
||||||
|
in SVID mode.
|
||||||
|
* sysdeps/libm-ieee754/w_atan2f.c: Likewise.
|
||||||
|
* sysdeps/libm-ieee754/w_atan2l.c: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/w_pow.c: Distinguish error cases for x is +0
|
||||||
|
or -0.
|
||||||
|
|
||||||
|
* sysdeps/posix/isfdtype.c: Add cast to prevent warning.
|
||||||
|
|
||||||
|
* sysdeps/stub/fcntlbits.h: Update copyright.
|
||||||
|
* sysdeps/unix/bsd/fcntlbits.h: Likewise.
|
||||||
|
* sysdeps/unix/bsd/bsd4.4/fcntlbits.h: Likewise.
|
||||||
|
* sysdeps/unix/bsd/sun/sunos4/fcntlbits.h: Likewise.
|
||||||
|
* sysdeps/unix/bsd/ultrix4/fcntlbits.h: Likewise.
|
||||||
|
* sysdeps/unix/common/fcntlbits.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/fcntlbits.h: Likewise. Define O_FSYNC as alias
|
||||||
|
of O_SYNC. Add BSD compatibility macros FAPPEND, FFSYNC, FNONBLOCK,
|
||||||
|
and FNDELAY.
|
||||||
|
* sysdeps/unix/sysv/irix4/fcntlbits.h: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/unix/readdir_r.c: Don't copy whole `struct dirent' record,
|
||||||
|
only reclen bytes.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/fcntlbits.h [__USE_GNU]: Add O_READ, O_WRITE
|
||||||
|
and O_NORW.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/fcntlbits.h: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/init-first.h: Add copyright.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/fxstat.c: New file. Rewrite kernel-level
|
||||||
|
struct stat to user-level form.
|
||||||
|
* sysdeps/unix/sysv/linux/lxstat: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/xstat: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/kernel_stat.h: Define struct stat used in
|
||||||
|
kernel.
|
||||||
|
* sysdeps/unix/sysv/linux/statbuf.h (struct stat): Change definition
|
||||||
|
to use prescribed types for elements.
|
||||||
|
(_STAT_VER): Change to value 3.
|
||||||
|
* sysdeps/unix/sysv/linux/alph/statbuf.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/Dist: Add kernel_stat.h.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/Dist: Likewise.
|
||||||
|
|
||||||
|
* time/Makefile: Correct dependencies for test-tz.
|
||||||
|
|
||||||
|
1997-03-16 14:59 Philip Blundell <phil@london.uk.eu.org>
|
||||||
|
|
||||||
|
* resolv/netdb.h: Add prototypes for gai_strerror and getnameinfo
|
||||||
|
(needed for IPv6 basic sockets API).
|
||||||
|
|
||||||
|
1997-03-16 15:02 a sun <asun@zoology.washington.edu>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/net/if_ppp.h: Don't use incompatible
|
||||||
|
kernel header.
|
||||||
|
* sysdeps/unix/sysv/linux/net/ppp_defs.h: Likewise.
|
||||||
|
|
||||||
|
1997-03-14 17:15 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* db/hash/hash_bigkey.c (__big_delete): Don't call __free_ovflpage
|
||||||
|
without testing for last_bfp to be NULL.
|
||||||
|
Reported by fabsoft@fabserver1.zarm.uni-bremen.de.
|
||||||
|
|
||||||
|
1997-03-13 11:42 Jim Meyering <meyering@asic.sc.ti.com>
|
||||||
|
|
||||||
|
* time/mktime.c (TIME_T_MIN): Work around a bug in Cray C 5.0.3.0.
|
||||||
|
|
||||||
|
1997-03-14 04:00 Kurt Garloff <garloff@kg1.ping.de>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/fcntlbits.h (O_FSYNC): Make alias for O_SYNC.
|
||||||
|
(FASYNC): Move to __USE_BSD section. Create new macro O_ASYNC.
|
||||||
|
|
||||||
|
1997-03-14 02:50 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname2_r): New
|
||||||
|
functions. Compare result for correct address type.
|
||||||
|
(_nss_nis_gethostbyname_r): Use _nss_nis_gethostbyname2_r.
|
||||||
|
Reported by Mirko Streckenbach <mirko@marian.hil.de>.
|
||||||
|
|
||||||
|
1997-02-17 01:40 Zlatko Calusic <zcalusic@srce.hr>
|
||||||
|
|
||||||
|
* time/strptime.c (recursive): Return rp to caller.
|
||||||
|
(strptime_internal): First check for long names, then abbreviated
|
||||||
|
(month & weekday).
|
||||||
|
|
||||||
|
1997-03-10 19:44 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* Makeconfig: Remove useless definitions of ASFLAGS-%.
|
||||||
|
* config.make.in (ASFLAGS-.so): Remove.
|
||||||
|
* configure.in: Don't substitute ASFLAGS_SO.
|
||||||
|
* sysdeps/sparc/configure.in: Remove file.
|
||||||
|
* sysdeps/sparc/Makefile (ASFLAGS-.so): Define.
|
||||||
|
|
||||||
|
1997-03-11 17:00 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* time/strptime.c (strptime_internal) [case 'Y']: Always subtract
|
||||||
|
1900 from year, regardless of century.
|
||||||
|
|
||||||
|
1997-03-12 05:43 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* stdlib/strtod.c (_tens_in_limb) [BITS_PER_MP_LIMB > 32]: Make
|
||||||
|
all numbers unsigned to make buggy gccs happy.
|
||||||
|
Patch by Bryan W. Headley <bheadley@interaccess.com>.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/netinet/ip.h: Add backward-compatibility
|
||||||
|
definitions. Patch by a sun <asun@zoology.washington.edu>.
|
||||||
|
Pretty print header.
|
||||||
|
|
||||||
|
* Makerules (build-shlib): Also create symlink if library is versioned.
|
||||||
|
based on a patch by H.J. Lu <hjl@gnu.ai.mit.edu>.
|
||||||
|
Remove special rule to libc.so symlink.
|
||||||
|
|
||||||
|
1997-03-11 20:16 Andreas Jaeger <aj@arthur.pfalz.de>
|
||||||
|
|
||||||
|
* manual/math.texi (Domain and Range Errors): Change descriptions
|
||||||
|
according to recent changes for ISO C 9X.
|
||||||
|
|
||||||
|
1997-03-11 22:39 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/k_standard.c (__kernel_standard): Correct
|
||||||
|
return values for acos, asin, and atan2.
|
||||||
|
Reported by Andreas Jaeger <aj@arthur.pfalz.de>.
|
||||||
|
|
||||||
|
1997-03-10 18:16 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
|
||||||
|
|
||||||
|
* ypclnt.c (__yp_bind): Fix possible buffer overflow.
|
||||||
|
|
||||||
|
1997-03-10 18:06 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
|
||||||
|
|
||||||
|
* dirent/alphasort.c (alphasort): Interpret arguments as pointers
|
||||||
|
to pointers to directory entries so that alphasort really can be
|
||||||
|
used as argument for scandir.
|
||||||
|
|
||||||
|
1997-03-09 23:33 Andreas Jaeger <aj@arthur.pfalz.de>
|
||||||
|
|
||||||
|
* string/strdup.c: Declare memcpy if !(_LIBC || STDC_HEADERS)
|
||||||
|
instead of strcpy.
|
||||||
|
|
||||||
|
1997-03-10 03:34 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* catgets/catgets.c (catopen): Always add NLSPATH to search path for
|
||||||
|
catalogs, not only if the envvar NLSPATH is not available.
|
||||||
|
Reported by Andries.Brouwer@cwi.nl.
|
||||||
|
|
||||||
|
1997-03-10 02:46 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* Makeconfig (localtime-file): Don't define using installation
|
||||||
|
directory.
|
||||||
|
(inst_localtime-file): New variable.
|
||||||
|
* time/Makefile (installed-localtime-file): Use inst_localtime-file.
|
||||||
|
Reported by Edward Seidl <seidl@janed.com>.
|
||||||
|
|
||||||
|
1997-03-10 02:31 H.J. Lu <hjl@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* time/Makefile: Add source files to dependencies for test data.
|
||||||
|
|
||||||
|
1997-03-09 22:53 Thorsten Kukuk <kukuk@weber.uni-paderborn.de>
|
||||||
|
|
||||||
|
* nis/nss_nis/nis-ethers.c: Don't ignore return value of yp_all.
|
||||||
|
* nis/nss_nis/nis-proto.c: Likewise.
|
||||||
|
* nis/nss_nis/nis-rpc.c: Likewise.
|
||||||
|
* nis/nss_nis/nis-service.c: Likewise.
|
||||||
|
|
||||||
|
1997-03-08 14:37 Miguel de Icaza <miguel@nuclecu.unam.mx>
|
||||||
|
|
||||||
|
* sysdeps/sparc/dl-machine.h (elf_machine_rela): Upgrade to
|
||||||
|
versioning; Added missing R_SPARC_WDISP30 handling.
|
||||||
|
(RTLD_START): Implement it.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/brk.c: Fix.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/start.c: Startup code for
|
||||||
|
Linux/SPARC.
|
||||||
|
|
||||||
|
1997-03-02 18:06 Miguel de Icaza <miguel@nuclecu.unam.mx>
|
||||||
|
|
||||||
|
* sysdeps/sparc/dl-machine.h (RTLD_START): Make arg as expected by
|
||||||
|
the dynamic linker instead of having a new conditional define.
|
||||||
|
Thanks to Richard Henderson for pointing this out.
|
||||||
|
* elf/rtld.c: Remove usage of ELF_ADJUST_ARG.
|
||||||
|
|
||||||
|
1997-03-20 20:44 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* sysdeps/mach/hurd/euidaccess.c: Define as __euidaccess and make
|
||||||
|
euidaccess weak alias.
|
||||||
|
|
||||||
|
1997-03-07 10:30 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* stdio-common/printf_fphex.c (MIN): New macro.
|
||||||
|
|
||||||
|
* sysdeps/generic/netinet/in.h: Include <sys/types.h>.
|
||||||
|
|
||||||
|
* sysdeps/generic/sys/mman.h (msync): Mention third arg.
|
||||||
|
|
||||||
|
* sysdeps/generic/netinet/in.h: Add definitions for IPv6 basic
|
||||||
|
API. (See change by Philip Blundell on Feb 16, 1997.)
|
||||||
|
|
||||||
|
1997-03-05 10:40 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* hurd/hurd.h (vpprintf): Include <stdarg.h>. New declaration.
|
||||||
|
|
||||||
|
* hurd/set-host.c (_hurd_set_host_config): Cast second arg to
|
||||||
|
__file_name_split.
|
||||||
|
|
||||||
|
* mach/mach_error.c (mach_error_string_int): Give full prototype.
|
||||||
|
* mach/errstring.c (mach_error_string_int): Likewise.
|
||||||
|
* mach/error_compat.c (__mach_error_map_compat): Likewise.
|
||||||
|
* hurd/vpprintf.c (pwrite, vpprintf): Likewise.
|
||||||
|
* stdio/vasprintf.c (vasprintf): Likewise.
|
||||||
|
|
||||||
|
* mach/mach/mach_traps.h: Include <mach/kern_return.h>.
|
||||||
|
|
||||||
|
* mach/spin-solid.c: Include <mach/mach_traps.h>.
|
||||||
|
* mach/spin-solid.c (__spin_lock_solid): Provide arg to
|
||||||
|
swtch_pri.
|
||||||
|
|
||||||
|
* mach/mach_init.c: Include <mach/mig_support.h>.
|
||||||
|
|
||||||
|
* mach/mach_error.h (mach_error_string, mach_error,
|
||||||
|
mach_error_type): Always provide prototypes.
|
||||||
|
|
||||||
|
* mach/mach/error.h (mach_error_fn_t): Comment out declaration; it
|
||||||
|
appears to be entirely unused dead code.
|
||||||
|
|
||||||
|
* stdio/stdio.h (freopen): Fix spelling error.
|
||||||
|
|
||||||
|
1997-03-02 13:38 Miles Bader <miles@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* string/argz.h (__need_error_t): New macro, before including <errno.h>
|
||||||
|
[!__const] (__const): New macro.
|
||||||
|
[!__error_t_defined] (error_t): New typedef.
|
||||||
|
|
||||||
1997-03-09 06:59 Ulrich Drepper <drepper@cygnus.com>
|
1997-03-09 06:59 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* Makeconfig: Add ASFLAGS-% flags for SPARC assembler which need
|
* Makeconfig: Add ASFLAGS-% flags for SPARC assembler which need
|
||||||
@ -26,9 +333,9 @@
|
|||||||
* sysdeps/wordsize-32/inttypes.h: New file.
|
* sysdeps/wordsize-32/inttypes.h: New file.
|
||||||
* sysdeps/wordsize-64/inttypes.h: New file.
|
* sysdeps/wordsize-64/inttypes.h: New file.
|
||||||
|
|
||||||
* sysdpes/generic/socketbits.h: Add PF_FILE as synonym for PF_LOCAL
|
* sysdeps/generic/socketbits.h: Add PF_FILE as synonym for PF_LOCAL
|
||||||
and AF_FILE as synonym for AF_LOCAL.
|
and AF_FILE as synonym for AF_LOCAL.
|
||||||
* sysdpes/unix/sysv/linux/socketbits.h: Likewise.
|
* sysdeps/unix/sysv/linux/socketbits.h: Likewise.
|
||||||
|
|
||||||
* time/Makefile: Rewrite rules for test to handle parallel builds.
|
* time/Makefile: Rewrite rules for test to handle parallel builds.
|
||||||
|
|
||||||
|
23
FAQ
23
FAQ
@ -550,7 +550,8 @@ by
|
|||||||
|
|
||||||
in the above example specs file to make it work for other systems.
|
in the above example specs file to make it work for other systems.
|
||||||
|
|
||||||
Future versions of GCC will automatically provide the correct specs.
|
Version 2.7.2.2 does and future versions of GCC will automatically
|
||||||
|
provide the correct specs.
|
||||||
|
|
||||||
|
|
||||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
@ -597,10 +598,22 @@ invalid. I.e., an emulated FPU is for the libc as good as a real one.
|
|||||||
[Q20] ``How can I compile gcc 2.7.2.1 from the gcc source code using
|
[Q20] ``How can I compile gcc 2.7.2.1 from the gcc source code using
|
||||||
glibc 2.x?
|
glibc 2.x?
|
||||||
|
|
||||||
[A20] {HJL} There is no support in gcc for glibc 2.0 before gcc 2.8. It
|
[A20] {AJ} There's only support for glibc 2.0 in gcc 2.7.2.2 or later.
|
||||||
is very tricky to compile gcc 2.7.2.1 using glibc 2.x. You have to
|
For 2.7.2.2 you should use the following patch and configure for
|
||||||
build it manually or with one pass only. You also have to use the
|
e.g. i486-linux.
|
||||||
specs file in this FAQ while compiling gcc.
|
-----------------------------------------------------------------------
|
||||||
|
--- configure Tue Feb 11 15:57:17 1997
|
||||||
|
+++ configure Wed Feb 12 23:09:29 1997
|
||||||
|
@@ -1021,7 +1021,7 @@
|
||||||
|
gnu_ld=yes
|
||||||
|
# GNU libc version 2 does not supply these;
|
||||||
|
# we want them from GCC.
|
||||||
|
- extra_parts="crtbegin.o crtend.o"
|
||||||
|
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS..o"
|
||||||
|
;;
|
||||||
|
i[3456]86-go32-msdos | i[3456]86-*-go32)
|
||||||
|
cpu_type=i386
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||||
|
30
INSTALL
30
INSTALL
@ -76,6 +76,23 @@ you run `configure':
|
|||||||
static library is compiled with no optimization and full debugging
|
static library is compiled with no optimization and full debugging
|
||||||
information, and installed as `-lc_g'.
|
information, and installed as `-lc_g'.
|
||||||
|
|
||||||
|
`--enable-bounded'
|
||||||
|
`--disable-bounded'
|
||||||
|
Enable or disable building of the C library with support for bounded
|
||||||
|
pointers. To do this one need the enhanced version of the GNU CC
|
||||||
|
with can generate code for bounded pointers. This version of the
|
||||||
|
C library is necessary to run code which is also compiled using the
|
||||||
|
enhanced gcc for debugging purposes.
|
||||||
|
|
||||||
|
There are two more options:
|
||||||
|
|
||||||
|
`--with-gmp'
|
||||||
|
`--with-gettext'
|
||||||
|
These options are not of much use for the normal installer of the
|
||||||
|
GNU libc. Only maintainers need this to get automatic updates of
|
||||||
|
the files from these packages in the GNU C library source tree.
|
||||||
|
|
||||||
|
|
||||||
The simplest way to run `configure' is to do it in the directory
|
The simplest way to run `configure' is to do it in the directory
|
||||||
that contains the library sources. This prepares to build the library
|
that contains the library sources. This prepares to build the library
|
||||||
in that very directory.
|
in that very directory.
|
||||||
@ -182,6 +199,9 @@ following patterns:
|
|||||||
iX86-ANYTHING-gnu
|
iX86-ANYTHING-gnu
|
||||||
iX86-ANYTHING-linux
|
iX86-ANYTHING-linux
|
||||||
m68k-ANYTHING-linux
|
m68k-ANYTHING-linux
|
||||||
|
mips-ANYTHING-linux
|
||||||
|
sparc-ANYTHING-linux
|
||||||
|
powerpc-ANYTHING-linux
|
||||||
|
|
||||||
Former versions of this library used to support the following
|
Former versions of this library used to support the following
|
||||||
configurations but the current status is unknown:
|
configurations but the current status is unknown:
|
||||||
@ -208,7 +228,7 @@ configurations but the current status is unknown:
|
|||||||
sparc-sun-solaris2.N
|
sparc-sun-solaris2.N
|
||||||
sparc-sun-sunos4.N
|
sparc-sun-sunos4.N
|
||||||
|
|
||||||
Each case of `iX86' can be `i386', `i486', `i586', or `i686'.. All
|
Each case of `iX86' can be `i386', `i486', `i586', or `i686'. All
|
||||||
of those configurations produce a library that can run on any of these
|
of those configurations produce a library that can run on any of these
|
||||||
processors. The library will be optimized for the specified processor,
|
processors. The library will be optimized for the specified processor,
|
||||||
but will not use instructions not available on all of them.
|
but will not use instructions not available on all of them.
|
||||||
@ -652,10 +672,10 @@ level of the `sysdeps' hierarchy. This directory contains
|
|||||||
subdirectories (and subdirectory trees) for various Unix variants.
|
subdirectories (and subdirectory trees) for various Unix variants.
|
||||||
|
|
||||||
The functions which are system calls in most Unix systems are
|
The functions which are system calls in most Unix systems are
|
||||||
implemented in assembly code in files in `sysdeps/unix'. These files
|
automatically generated from the `syscalls.list' files for the appropriate
|
||||||
are named with a suffix of `.S'; for example, `__open.S'. Files ending
|
archirecture. The format of the syscalls.list files is quite easy: only
|
||||||
in `.S' are run through the C preprocessor before being fed to the
|
a few informations are necessary line the system call name, the number of
|
||||||
assembler.
|
arguments and such. The files are run through the C preprocessor.
|
||||||
|
|
||||||
These files all use a set of macros that should be defined in
|
These files all use a set of macros that should be defined in
|
||||||
`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines
|
`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines
|
||||||
|
15
Makeconfig
15
Makeconfig
@ -239,7 +239,8 @@ endif
|
|||||||
# other than there, so the zoneinfo directory contains only universal data,
|
# other than there, so the zoneinfo directory contains only universal data,
|
||||||
# localizing the configuration data elsewhere.
|
# localizing the configuration data elsewhere.
|
||||||
ifndef localtime-file
|
ifndef localtime-file
|
||||||
localtime-file = $(inst_sysconfdir)/localtime
|
localtime-file = $(sysconfdir)/localtime
|
||||||
|
inst_localtime-file = $(install_root)$(localtime-file)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# What to use for leap second specifications in compiling the default
|
# What to use for leap second specifications in compiling the default
|
||||||
@ -490,9 +491,6 @@ object-suffixes += .so
|
|||||||
CPPFLAGS-.so = -DPIC
|
CPPFLAGS-.so = -DPIC
|
||||||
CFLAGS-.so = -fPIC -fno-common
|
CFLAGS-.so = -fPIC -fno-common
|
||||||
libtype.so := lib%_pic.a
|
libtype.so := lib%_pic.a
|
||||||
ifndef ASFLAGS-.so
|
|
||||||
ASFLAGS-.so =
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
ifeq (yes,$(build-profile))
|
ifeq (yes,$(build-profile))
|
||||||
# Under --enable-profile, we will build a static library of profiled objects.
|
# Under --enable-profile, we will build a static library of profiled objects.
|
||||||
@ -501,9 +499,6 @@ object-suffixes += .po
|
|||||||
CPPFLAGS-.po = -DPROF
|
CPPFLAGS-.po = -DPROF
|
||||||
CFLAGS-.po = -pg
|
CFLAGS-.po = -pg
|
||||||
libtype.po = lib%_p.a
|
libtype.po = lib%_p.a
|
||||||
ifndef ASFLAGS-.po
|
|
||||||
ASFLAGS-.po =
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
ifeq (yes,$(build-omitfp))
|
ifeq (yes,$(build-omitfp))
|
||||||
# Under --enable-omitfp, we build an the library optimized without
|
# Under --enable-omitfp, we build an the library optimized without
|
||||||
@ -514,9 +509,6 @@ CFLAGS-.go = -g
|
|||||||
CFLAGS-.o = -g0 -O99 -fomit-frame-pointer
|
CFLAGS-.o = -g0 -O99 -fomit-frame-pointer
|
||||||
CFLAGS-.so += $(CFLAGS-.o)
|
CFLAGS-.so += $(CFLAGS-.o)
|
||||||
libtype.go = lib%_g.a
|
libtype.go = lib%_g.a
|
||||||
ifndef ASFLAGS-.go
|
|
||||||
ASFLAGS-.go =
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
ifeq (yes,$(build-bounded))
|
ifeq (yes,$(build-bounded))
|
||||||
# Under --enable-bounded, we build the library with `-fbounded-pointers -g'
|
# Under --enable-bounded, we build the library with `-fbounded-pointers -g'
|
||||||
@ -525,9 +517,6 @@ object-suffixes += .bo
|
|||||||
CPPFLAGS-.bo = -DBOUNDED_POINTERS
|
CPPFLAGS-.bo = -DBOUNDED_POINTERS
|
||||||
CFLAGS-.bo = -g -fbounded-pointers
|
CFLAGS-.bo = -g -fbounded-pointers
|
||||||
libtype.bo = lib%_b.a
|
libtype.bo = lib%_b.a
|
||||||
ifndef ASFLAGS-.bo
|
|
||||||
ASFLAGS-.bo =
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -363,6 +363,8 @@ $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
|||||||
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
||||||
-Wl,--whole-archive $^ $(no-whole-archive) \
|
-Wl,--whole-archive $^ $(no-whole-archive) \
|
||||||
$(LDLIBS-$(@F:lib%.so=%).so)
|
$(LDLIBS-$(@F:lib%.so=%).so)
|
||||||
|
test -z "$($(@F)-version)" || \
|
||||||
|
(rm -f $@$($(@F)-version); $(LN_S) $(@F) $@$($(@F)-version))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# Don't try to use -lc when making libc.so itself.
|
# Don't try to use -lc when making libc.so itself.
|
||||||
@ -378,12 +380,6 @@ $(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
|
|||||||
$(common-objpfx)libc_pic.a \
|
$(common-objpfx)libc_pic.a \
|
||||||
$(elfobjdir)/sofini.so $(elfobjdir)/ld.so
|
$(elfobjdir)/sofini.so $(elfobjdir)/ld.so
|
||||||
$(build-shlib)
|
$(build-shlib)
|
||||||
|
|
||||||
ifdef libc.so-version
|
|
||||||
$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
|
|
||||||
rm -f $@
|
|
||||||
ln -s $(<F) $@ || ln $< $@
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Some files must not be compiled with the exception handler mechanism
|
# Some files must not be compiled with the exception handler mechanism
|
||||||
|
@ -84,8 +84,17 @@ catopen (const char *cat_name, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
nlspath = __secure_getenv ("NLSPATH");
|
nlspath = __secure_getenv ("NLSPATH");
|
||||||
result->nlspath = __strdup (nlspath != NULL && *nlspath != '\0'
|
if (nlspath != NULL && *nlspath != '\0')
|
||||||
? nlspath : NLSPATH);
|
{
|
||||||
|
/* Append the system dependent directory. */
|
||||||
|
size_t len = strlen (nlspath + 1 + sizeof NLSPATH);
|
||||||
|
char *tmp = alloca (len);
|
||||||
|
|
||||||
|
__stpcpy (__stpcpy (__stpcpy (tmp, nlspath), ":"), NLSPATH);
|
||||||
|
nlspath = tmp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result->nlspath = __strdup (NLSPATH);
|
||||||
|
|
||||||
if (result->nlspath == NULL)
|
if (result->nlspath == NULL)
|
||||||
{
|
{
|
||||||
|
@ -51,9 +51,6 @@ AR = @AR@
|
|||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
AS = $(CC) -c
|
AS = $(CC) -c
|
||||||
|
|
||||||
# Build tool flags.
|
|
||||||
ASFLAGS-.so = @ASFLAGS_SO@
|
|
||||||
|
|
||||||
# Installation tools.
|
# Installation tools.
|
||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
|
3
configure
vendored
3
configure
vendored
@ -2037,8 +2037,6 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
|
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
|
||||||
config_makefile=
|
config_makefile=
|
||||||
else
|
else
|
||||||
@ -2225,7 +2223,6 @@ s%@profile@%$profile%g
|
|||||||
s%@omitfp@%$omitfp%g
|
s%@omitfp@%$omitfp%g
|
||||||
s%@bounded@%$bounded%g
|
s%@bounded@%$bounded%g
|
||||||
s%@DEFINES@%$DEFINES%g
|
s%@DEFINES@%$DEFINES%g
|
||||||
s%@ASFLAGS_SO@%$ASFLAGS_SO%g
|
|
||||||
s%@VERSION@%$VERSION%g
|
s%@VERSION@%$VERSION%g
|
||||||
|
|
||||||
CEOF
|
CEOF
|
||||||
|
@ -810,8 +810,6 @@ AC_SUBST(bounded)
|
|||||||
|
|
||||||
AC_SUBST(DEFINES)
|
AC_SUBST(DEFINES)
|
||||||
|
|
||||||
AC_SUBST(ASFLAGS_SO)
|
|
||||||
|
|
||||||
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
|
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
|
||||||
config_makefile=
|
config_makefile=
|
||||||
else
|
else
|
||||||
|
@ -249,7 +249,7 @@ __big_delete(hashp, bufp)
|
|||||||
bufp->flags |= BUF_MOD;
|
bufp->flags |= BUF_MOD;
|
||||||
if (rbufp)
|
if (rbufp)
|
||||||
__free_ovflpage(hashp, rbufp);
|
__free_ovflpage(hashp, rbufp);
|
||||||
if (last_bfp != rbufp)
|
if (last_bfp && last_bfp != rbufp)
|
||||||
__free_ovflpage(hashp, last_bfp);
|
__free_ovflpage(hashp, last_bfp);
|
||||||
|
|
||||||
hashp->NKEYS--;
|
hashp->NKEYS--;
|
||||||
|
@ -22,6 +22,6 @@
|
|||||||
int
|
int
|
||||||
alphasort (const void *a, const void *b)
|
alphasort (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return strcmp (((struct dirent *) a)->d_name,
|
return strcmp ((*(const struct dirent **) a)->d_name,
|
||||||
((struct dirent *) b)->d_name);
|
(*(const struct dirent **) b)->d_name);
|
||||||
}
|
}
|
||||||
|
@ -126,10 +126,6 @@ _dl_start (void *arg)
|
|||||||
_dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr +
|
_dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr +
|
||||||
_dl_rtld_map.l_info[DT_RPATH]->d_un.d_val);
|
_dl_rtld_map.l_info[DT_RPATH]->d_un.d_val);
|
||||||
|
|
||||||
#ifdef ELF_ADJUST_ARG
|
|
||||||
ELF_ADJUST_ARG(arg);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Call the OS-dependent function to set up life so we can do things like
|
/* Call the OS-dependent function to set up life so we can do things like
|
||||||
file access. It will call `dl_main' (below) to do all the real work
|
file access. It will call `dl_main' (below) to do all the real work
|
||||||
of the dynamic linker, and then unwind our frame and run the user
|
of the dynamic linker, and then unwind our frame and run the user
|
||||||
|
@ -303,4 +303,11 @@ extern int hurd_check_cancel (void);
|
|||||||
extern io_t __getdport (int fd), getdport (int fd);
|
extern io_t __getdport (int fd), getdport (int fd);
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* Write formatted output to PORT, a Mach port supporting the i/o protocol,
|
||||||
|
according to the format string FORMAT, using the argument list in ARG. */
|
||||||
|
int vpprintf (io_t port, const char *format, va_list arg);
|
||||||
|
|
||||||
|
|
||||||
#endif /* hurd.h */
|
#endif /* hurd.h */
|
||||||
|
@ -28,7 +28,7 @@ _hurd_set_host_config (const char *item, const char *value, size_t valuelen)
|
|||||||
mach_msg_type_number_t nwrote;
|
mach_msg_type_number_t nwrote;
|
||||||
file_t new, dir;
|
file_t new, dir;
|
||||||
|
|
||||||
dir = __file_name_split (item, &item);
|
dir = __file_name_split (item, (char **)&item);
|
||||||
if (dir == MACH_PORT_NULL)
|
if (dir == MACH_PORT_NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -22,10 +22,9 @@
|
|||||||
#include <hurd.h>
|
#include <hurd.h>
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
pwrite (cookie, buf, n)
|
pwrite (void *cookie,
|
||||||
void *cookie;
|
const char *buf,
|
||||||
const char *buf;
|
size_t n)
|
||||||
size_t n;
|
|
||||||
{
|
{
|
||||||
error_t error = __io_write ((io_t) cookie, buf, n, -1,
|
error_t error = __io_write ((io_t) cookie, buf, n, -1,
|
||||||
(mach_msg_type_number_t *) &n);
|
(mach_msg_type_number_t *) &n);
|
||||||
@ -38,10 +37,9 @@ pwrite (cookie, buf, n)
|
|||||||
/* Write formatted output to PORT, a Mach port supporting the i/o protocol,
|
/* Write formatted output to PORT, a Mach port supporting the i/o protocol,
|
||||||
according to the format string FORMAT, using the argument list in ARG. */
|
according to the format string FORMAT, using the argument list in ARG. */
|
||||||
int
|
int
|
||||||
vpprintf (port, format, arg)
|
vpprintf (io_t port,
|
||||||
io_t port;
|
const char *format,
|
||||||
const char *format;
|
va_list arg)
|
||||||
va_list arg;
|
|
||||||
{
|
{
|
||||||
int done;
|
int done;
|
||||||
FILE f;
|
FILE f;
|
||||||
|
@ -306,7 +306,6 @@ iruserok(raddr, superuser, ruser, luser)
|
|||||||
struct stat sbuf;
|
struct stat sbuf;
|
||||||
struct passwd pwdbuf, *pwd;
|
struct passwd pwdbuf, *pwd;
|
||||||
FILE *hostf;
|
FILE *hostf;
|
||||||
uid_t uid;
|
|
||||||
int first;
|
int first;
|
||||||
|
|
||||||
first = 1;
|
first = 1;
|
||||||
@ -342,7 +341,12 @@ again:
|
|||||||
if (__euidaccess (pbuf, R_OK) != 0)
|
if (__euidaccess (pbuf, R_OK) != 0)
|
||||||
hostf = NULL;
|
hostf = NULL;
|
||||||
else
|
else
|
||||||
hostf = fopen(pbuf, "r");
|
{
|
||||||
|
uid_t uid = geteuid ();
|
||||||
|
seteuid (pwd->pw_uid);
|
||||||
|
hostf = fopen (pbuf, "r");
|
||||||
|
seteuid (uid);
|
||||||
|
}
|
||||||
|
|
||||||
if (hostf == NULL)
|
if (hostf == NULL)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
@ -26,6 +26,25 @@
|
|||||||
|
|
||||||
/* This file was broken out from:
|
/* This file was broken out from:
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.2 1997/03/16 17:41:36 drepper
|
||||||
|
(__mach_error_map_compat): Give full prototype.
|
||||||
|
|
||||||
|
Revision 1.2 1997/03/14 15:26:28 thomas
|
||||||
|
Wed Mar 5 10:40:05 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* mach/mach_error.c (mach_error_string_int): Give full prototype.
|
||||||
|
* mach/errstring.c (mach_error_string_int): Likewise.
|
||||||
|
* mach/error_compat.c (__mach_error_map_compat): Likewise.
|
||||||
|
|
||||||
|
* mach/spin-solid.c: Include <mach/mach_traps.h>.
|
||||||
|
* mach/spin-solid.c (__spin_lock_solid): Provide arg to
|
||||||
|
swtch_pri.
|
||||||
|
|
||||||
|
* mach/mach_init.c: Include <mach/mig_support.h>.
|
||||||
|
|
||||||
|
* mach/mach_error.h (mach_error_string, mach_error,
|
||||||
|
mach_error_type): Always provide prototypes.
|
||||||
|
|
||||||
Revision 1.1 1993/11/30 17:35:24 roland
|
Revision 1.1 1993/11/30 17:35:24 roland
|
||||||
entered into RCS
|
entered into RCS
|
||||||
|
|
||||||
@ -39,8 +58,7 @@
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
__mach_error_map_compat( org_err )
|
__mach_error_map_compat(mach_error_t *org_err)
|
||||||
mach_error_t * org_err;
|
|
||||||
{
|
{
|
||||||
mach_error_t err = *org_err;
|
mach_error_t err = *org_err;
|
||||||
|
|
||||||
|
@ -26,6 +26,25 @@
|
|||||||
/*
|
/*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.2 1997/03/16 17:41:48 drepper
|
||||||
|
* (mach_error_string_int): Give full prototype.
|
||||||
|
*
|
||||||
|
* Revision 1.2 1997/03/14 15:26:29 thomas
|
||||||
|
* Wed Mar 5 10:40:05 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
*
|
||||||
|
* * mach/mach_error.c (mach_error_string_int): Give full prototype.
|
||||||
|
* * mach/errstring.c (mach_error_string_int): Likewise.
|
||||||
|
* * mach/error_compat.c (__mach_error_map_compat): Likewise.
|
||||||
|
*
|
||||||
|
* * mach/spin-solid.c: Include <mach/mach_traps.h>.
|
||||||
|
* * mach/spin-solid.c (__spin_lock_solid): Provide arg to
|
||||||
|
* swtch_pri.
|
||||||
|
*
|
||||||
|
* * mach/mach_init.c: Include <mach/mig_support.h>.
|
||||||
|
*
|
||||||
|
* * mach/mach_error.h (mach_error_string, mach_error,
|
||||||
|
* mach_error_type): Always provide prototypes.
|
||||||
|
*
|
||||||
* Revision 1.1 1993/11/30 17:35:58 roland
|
* Revision 1.1 1993/11/30 17:35:58 roland
|
||||||
* entered into RCS
|
* entered into RCS
|
||||||
*
|
*
|
||||||
@ -67,9 +86,8 @@ mach_error_type( err )
|
|||||||
boolean_t mach_error_full_diag = FALSE;
|
boolean_t mach_error_full_diag = FALSE;
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
mach_error_string_int( err, diag )
|
mach_error_string_int(mach_error_t err,
|
||||||
mach_error_t err;
|
boolean_t * diag)
|
||||||
boolean_t * diag;
|
|
||||||
{
|
{
|
||||||
int sub, system, code;
|
int sub, system, code;
|
||||||
|
|
||||||
|
@ -27,6 +27,18 @@
|
|||||||
/*
|
/*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.3 1997/03/16 17:43:08 drepper
|
||||||
|
* (mach_error_fn_t): Comment out declaration; it appears to be entirely
|
||||||
|
* unused dead code.
|
||||||
|
*
|
||||||
|
* Revision 1.3 1997/03/14 15:27:35 thomas
|
||||||
|
* Wed Mar 5 10:40:05 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
*
|
||||||
|
* * mach/mach/mach_traps.h: Include <mach/kern_return.h>.
|
||||||
|
*
|
||||||
|
* * mach/mach/error.h (mach_error_fn_t): Comment out declaration; it
|
||||||
|
* appears to be entirely unused dead code.
|
||||||
|
*
|
||||||
* Revision 1.2 1996/12/20 01:32:36 drepper
|
* Revision 1.2 1996/12/20 01:32:36 drepper
|
||||||
* Update from main archive 961219
|
* Update from main archive 961219
|
||||||
*
|
*
|
||||||
@ -141,6 +153,6 @@
|
|||||||
#define unix_err(errno) (err_kern|err_sub(3)|errno)
|
#define unix_err(errno) (err_kern|err_sub(3)|errno)
|
||||||
|
|
||||||
typedef kern_return_t mach_error_t;
|
typedef kern_return_t mach_error_t;
|
||||||
typedef mach_error_t (* mach_error_fn_t)();
|
/* typedef mach_error_t (* mach_error_fn_t)(); */
|
||||||
|
|
||||||
#endif /* _MACH_ERROR_H_ */
|
#endif /* _MACH_ERROR_H_ */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1994, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -26,7 +26,7 @@
|
|||||||
#define _MACH_MACH_TRAPS_H_ 1
|
#define _MACH_MACH_TRAPS_H_ 1
|
||||||
|
|
||||||
#include <mach/port.h>
|
#include <mach/port.h>
|
||||||
|
#include <mach/kern_return.h>
|
||||||
|
|
||||||
/* Create and return a new receive right. */
|
/* Create and return a new receive right. */
|
||||||
extern mach_port_t mach_reply_port (void);
|
extern mach_port_t mach_reply_port (void);
|
||||||
|
@ -26,6 +26,25 @@
|
|||||||
/*
|
/*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.2 1997/03/16 17:42:02 drepper
|
||||||
|
* (mach_error_string_int): Give full prototype.
|
||||||
|
*
|
||||||
|
* Revision 1.2 1997/03/14 15:26:30 thomas
|
||||||
|
* Wed Mar 5 10:40:05 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
*
|
||||||
|
* * mach/mach_error.c (mach_error_string_int): Give full prototype.
|
||||||
|
* * mach/errstring.c (mach_error_string_int): Likewise.
|
||||||
|
* * mach/error_compat.c (__mach_error_map_compat): Likewise.
|
||||||
|
*
|
||||||
|
* * mach/spin-solid.c: Include <mach/mach_traps.h>.
|
||||||
|
* * mach/spin-solid.c (__spin_lock_solid): Provide arg to
|
||||||
|
* swtch_pri.
|
||||||
|
*
|
||||||
|
* * mach/mach_init.c: Include <mach/mig_support.h>.
|
||||||
|
*
|
||||||
|
* * mach/mach_error.h (mach_error_string, mach_error,
|
||||||
|
* mach_error_type): Always provide prototypes.
|
||||||
|
*
|
||||||
* Revision 1.1 1992/10/06 18:29:54 roland
|
* Revision 1.1 1992/10/06 18:29:54 roland
|
||||||
* entered into RCS
|
* entered into RCS
|
||||||
*
|
*
|
||||||
@ -63,7 +82,7 @@
|
|||||||
#include <mach_error.h>
|
#include <mach_error.h>
|
||||||
#include <mach/boolean.h>
|
#include <mach/boolean.h>
|
||||||
|
|
||||||
extern char * mach_error_string_int();
|
extern char * mach_error_string_int(mach_error_t, boolean_t *);
|
||||||
|
|
||||||
void
|
void
|
||||||
mach_error( str, err )
|
mach_error( str, err )
|
||||||
|
@ -26,6 +26,28 @@
|
|||||||
/*
|
/*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.3 1997/03/16 17:42:25 drepper
|
||||||
|
* (mach_error_string, mach_error, mach_error_type): Always provide
|
||||||
|
* prototypes.
|
||||||
|
* (mach_error_fn_t): Comment out declaration; it appears to be entirely
|
||||||
|
* unused dead code.
|
||||||
|
*
|
||||||
|
* Revision 1.3 1997/03/14 15:26:31 thomas
|
||||||
|
* Wed Mar 5 10:40:05 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||||
|
*
|
||||||
|
* * mach/mach_error.c (mach_error_string_int): Give full prototype.
|
||||||
|
* * mach/errstring.c (mach_error_string_int): Likewise.
|
||||||
|
* * mach/error_compat.c (__mach_error_map_compat): Likewise.
|
||||||
|
*
|
||||||
|
* * mach/spin-solid.c: Include <mach/mach_traps.h>.
|
||||||
|
* * mach/spin-solid.c (__spin_lock_solid): Provide arg to
|
||||||
|
* swtch_pri.
|
||||||
|
*
|
||||||
|
* * mach/mach_init.c: Include <mach/mig_support.h>.
|
||||||
|
*
|
||||||
|
* * mach/mach_error.h (mach_error_string, mach_error,
|
||||||
|
* mach_error_type): Always provide prototypes.
|
||||||
|
*
|
||||||
* Revision 1.2 1993/11/23 20:39:08 mib
|
* Revision 1.2 1993/11/23 20:39:08 mib
|
||||||
* entered into RCS
|
* entered into RCS
|
||||||
*
|
*
|
||||||
@ -53,28 +75,22 @@ const char *mach_error_string(
|
|||||||
/*
|
/*
|
||||||
* Returns a string appropriate to the error argument given
|
* Returns a string appropriate to the error argument given
|
||||||
*/
|
*/
|
||||||
#if c_plusplus
|
|
||||||
mach_error_t error_value
|
mach_error_t error_value
|
||||||
#endif c_plusplus
|
|
||||||
);
|
);
|
||||||
|
|
||||||
void mach_error(
|
void mach_error(
|
||||||
/*
|
/*
|
||||||
* Prints an appropriate message on the standard error stream
|
* Prints an appropriate message on the standard error stream
|
||||||
*/
|
*/
|
||||||
#if c_plusplus
|
|
||||||
char *str,
|
char *str,
|
||||||
mach_error_t error_value
|
mach_error_t error_value
|
||||||
#endif c_plusplus
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const char *mach_error_type(
|
const char *mach_error_type(
|
||||||
/*
|
/*
|
||||||
* Returns a string with the error system, subsystem and code
|
* Returns a string with the error system, subsystem and code
|
||||||
*/
|
*/
|
||||||
#if c_plusplus
|
|
||||||
mach_error_t error_value
|
mach_error_t error_value
|
||||||
#endif c_plusplus
|
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif _MACH_ERROR_
|
#endif _MACH_ERROR_
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <mach_init.h>
|
#include <mach_init.h>
|
||||||
#include <mach/mach_interface.h>
|
#include <mach/mach_interface.h>
|
||||||
|
#include <mach/mig_support.h>
|
||||||
|
|
||||||
mach_port_t __mach_task_self_;
|
mach_port_t __mach_task_self_;
|
||||||
vm_size_t __vm_page_size = 0; /* Must be data not bss for weak alias. */
|
vm_size_t __vm_page_size = 0; /* Must be data not bss for weak alias. */
|
||||||
|
@ -17,12 +17,13 @@
|
|||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <spin-lock.h>
|
#include <spin-lock.h>
|
||||||
|
#include <mach/mach_traps.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
__spin_lock_solid (spin_lock_t *lock)
|
__spin_lock_solid (spin_lock_t *lock)
|
||||||
{
|
{
|
||||||
while (__spin_lock_locked (lock) || ! __spin_try_lock (lock))
|
while (__spin_lock_locked (lock) || ! __spin_try_lock (lock))
|
||||||
/* Yield to another thread (system call). */
|
/* Yield to another thread (system call). */
|
||||||
__swtch_pri ();
|
__swtch_pri (0);
|
||||||
}
|
}
|
||||||
weak_alias (__spin_lock_solid, spin_lock_solid);
|
weak_alias (__spin_lock_solid, spin_lock_solid);
|
||||||
|
29
manual/examples/dir2.c
Normal file
29
manual/examples/dir2.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*@group*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
/*@end group*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
one (struct dirent *unused)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
struct dirent **eps;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
n = scandir ("./", &eps, one, alphasort);
|
||||||
|
if (n >= 0)
|
||||||
|
{
|
||||||
|
int cnt;
|
||||||
|
for (cnt = 0; cnt < n; ++cnt)
|
||||||
|
puts (eps[cnt]->d_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
perror ("Couldn't open the directory");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -166,6 +166,9 @@ parallels here to the stream facilities for ordinary files, described in
|
|||||||
* Simple Directory Lister:: A very simple directory listing program.
|
* Simple Directory Lister:: A very simple directory listing program.
|
||||||
* Random Access Directory:: Rereading part of the directory
|
* Random Access Directory:: Rereading part of the directory
|
||||||
already read with the same stream.
|
already read with the same stream.
|
||||||
|
* Scanning Directory Content:: Get entries for user selected subset of
|
||||||
|
contents in given directory.
|
||||||
|
* Simple Directory Lister Mark II:: Revised version of the program.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Directory Entries
|
@node Directory Entries
|
||||||
@ -386,9 +389,9 @@ the current working directory:
|
|||||||
|
|
||||||
The order in which files appear in a directory tends to be fairly
|
The order in which files appear in a directory tends to be fairly
|
||||||
random. A more useful program would sort the entries (perhaps by
|
random. A more useful program would sort the entries (perhaps by
|
||||||
alphabetizing them) before printing them; see @ref{Array Sort Function}.
|
alphabetizing them) before printing them; see
|
||||||
|
@ref{Scanning Directory Content} and @ref{Array Sort Function}.
|
||||||
|
|
||||||
@c ??? not documented: scandir, alphasort
|
|
||||||
|
|
||||||
@node Random Access Directory
|
@node Random Access Directory
|
||||||
@subsection Random Access in a Directory Stream
|
@subsection Random Access in a Directory Stream
|
||||||
@ -429,6 +432,69 @@ closing and reopening the directory can invalidate values returned by
|
|||||||
@code{telldir}.
|
@code{telldir}.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
|
||||||
|
@node Scanning Directory Content
|
||||||
|
@subsection Scanning the Content of a Directory
|
||||||
|
|
||||||
|
A higher-level interface to the directory handling functions is the
|
||||||
|
@code{scandir} function. With its help one can select a subset of the
|
||||||
|
entries in a directory, possibly sort them and get as the result a list
|
||||||
|
of names.
|
||||||
|
|
||||||
|
@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (struct dirent *), int (*@var{cmp}) (const void *, const void *))
|
||||||
|
|
||||||
|
The @code{scandir} function scans the contents of the directory selected
|
||||||
|
by @var{dir}. The result in @var{namelist} is an array of pointers to
|
||||||
|
structure of type @code{struct dirent} which describe all selected
|
||||||
|
directory entries and which is allocated using @code{malloc}. Instead
|
||||||
|
of always getting all directory entries returned, the user supplied
|
||||||
|
function @var{selector} can be used to decide which entries are in the
|
||||||
|
result. Only the entries for which @var{selector} returns a nonzero
|
||||||
|
value are selected.
|
||||||
|
|
||||||
|
Finally the entries in the @var{namelist} are sorted using the user
|
||||||
|
supplied function @var{cmp}. The arguments of the @var{cmp} function
|
||||||
|
are of type @code{struct dirent **}. I.e., one cannot directly use the
|
||||||
|
@code{strcmp} or @code{strcoll} function; see the function
|
||||||
|
@code{alphasort} below.
|
||||||
|
|
||||||
|
The return value of the function gives the number of entries placed in
|
||||||
|
@var{namelist}. If it is @code{-1} an error occurred and the global
|
||||||
|
variable @code{errno} contains more information on the error.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
As said above the fourth argument to the @code{scandir} function must be
|
||||||
|
a pointer to a sorting function. For the convenience of the programmer
|
||||||
|
the GNU C library contains an implementation of a function which is very
|
||||||
|
helpful for this purpose.
|
||||||
|
|
||||||
|
@deftypefun int alphasort (const void *@var{a}, const void *@var{b})
|
||||||
|
The @code{alphasort} function behaves like the @code{strcmp} function
|
||||||
|
(@pxref{String/Array Comparison}). The difference is that the arguments
|
||||||
|
are not string pointers but instead they are of type
|
||||||
|
@code{struct dirent **}.
|
||||||
|
|
||||||
|
Return value of is less than, equal to, or greater than zero depending
|
||||||
|
on the order of the two entries @var{a} and @var{b}.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
@node Simple Directory Lister Mark II
|
||||||
|
@subsection Simple Program to List a Directory, Mark II
|
||||||
|
|
||||||
|
Here is a revised version of the directory lister found above
|
||||||
|
(@pxref{Simple Directory Lister}). Using the @code{scandir} function we
|
||||||
|
can avoid using the functions which directly work with the directory
|
||||||
|
contents. After the call the found entries are available for direct
|
||||||
|
used.
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
@include dir2.c.texi
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
Please note the simple selector function for this example. Since
|
||||||
|
we want to see all directory entries we always return @code{1}.
|
||||||
|
|
||||||
|
|
||||||
@node Hard Links
|
@node Hard Links
|
||||||
@section Hard Links
|
@section Hard Links
|
||||||
@cindex hard link
|
@cindex hard link
|
||||||
|
@ -83,23 +83,23 @@ mathematical @code{double} returning functions in overflow situations.
|
|||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment math.h
|
@comment math.h
|
||||||
@comment GNU
|
@comment ISO
|
||||||
@deftypevr Macro float HUGE_VALf
|
@deftypevr Macro float HUGE_VALF
|
||||||
This macro is similar to the @code{HUGE_VAL} macro except that it is
|
This macro is similar to the @code{HUGE_VAL} macro except that it is
|
||||||
used by functions returning @code{float} values.
|
used by functions returning @code{float} values.
|
||||||
|
|
||||||
This macro is a GNU extension.
|
This macro is introduced in @w{ISO C 9X}.
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
@comment math.h
|
@comment math.h
|
||||||
@comment GNU
|
@comment ISO
|
||||||
@deftypevr Macro {long double} HUGE_VALl
|
@deftypevr Macro {long double} HUGE_VALL
|
||||||
This macro is similar to the @code{HUGE_VAL} macro except that it is
|
This macro is similar to the @code{HUGE_VAL} macro except that it is
|
||||||
used by functions returning @code{long double} values. The value is
|
used by functions returning @code{long double} values. The value is
|
||||||
only different from @code{HUGE_VAL} if the architecture really supports
|
only different from @code{HUGE_VAL} if the architecture really supports
|
||||||
@code{long double} values.
|
@code{long double} values.
|
||||||
|
|
||||||
This macro is a GNU extension.
|
This macro is introduced in @w{ISO C 9X}.
|
||||||
@end deftypevr
|
@end deftypevr
|
||||||
|
|
||||||
|
|
||||||
|
1520
math/libm-test.c
Normal file
1520
math/libm-test.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -128,9 +128,9 @@ enum
|
|||||||
/* Return number of classification appropriate for X. */
|
/* Return number of classification appropriate for X. */
|
||||||
#define fpclassify(x) \
|
#define fpclassify(x) \
|
||||||
(sizeof (x) == sizeof (float) ? \
|
(sizeof (x) == sizeof (float) ? \
|
||||||
__finitef (x) \
|
__fpclassifyf (x) \
|
||||||
: sizeof (x) == sizeof (double) ? \
|
: sizeof (x) == sizeof (double) ? \
|
||||||
__finite (x) : __finitel (x))
|
__fpclassify (x) : __fpclassifyl (x))
|
||||||
|
|
||||||
/* Return nonzero value if sign of X is negative. */
|
/* Return nonzero value if sign of X is negative. */
|
||||||
#define signbit(x) \
|
#define signbit(x) \
|
||||||
|
@ -53,7 +53,7 @@ static struct response *start = NULL;
|
|||||||
static struct response *next = NULL;
|
static struct response *next = NULL;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
saveit (int instatus, char *inkey, int inkeylen, char *inval,
|
saveit (int instatus, char *inkey, int inkeylen, char *inval,
|
||||||
int invallen, char *indata)
|
int invallen, char *indata)
|
||||||
{
|
{
|
||||||
if (instatus != YP_TRUE)
|
if (instatus != YP_TRUE)
|
||||||
@ -76,7 +76,7 @@ saveit (int instatus, char *inkey, int inkeylen, char *inval,
|
|||||||
strncpy (next->val, inval, invallen);
|
strncpy (next->val, inval, invallen);
|
||||||
next->val[invallen] = '\0';
|
next->val[invallen] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,9 +85,10 @@ internal_nis_setetherent (void)
|
|||||||
{
|
{
|
||||||
char *domainname;
|
char *domainname;
|
||||||
struct ypall_callback ypcb;
|
struct ypall_callback ypcb;
|
||||||
|
enum nss_status status;
|
||||||
yp_get_default_domain(&domainname);
|
|
||||||
|
yp_get_default_domain (&domainname);
|
||||||
|
|
||||||
while (start != NULL)
|
while (start != NULL)
|
||||||
{
|
{
|
||||||
if (start->val != NULL)
|
if (start->val != NULL)
|
||||||
@ -100,10 +101,10 @@ internal_nis_setetherent (void)
|
|||||||
|
|
||||||
ypcb.foreach = saveit;
|
ypcb.foreach = saveit;
|
||||||
ypcb.data = NULL;
|
ypcb.data = NULL;
|
||||||
yp_all(domainname, "ethers.byname", &ypcb);
|
status = yperr2nss (yp_all (domainname, "ethers.byname", &ypcb));
|
||||||
next = start;
|
next = start;
|
||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum nss_status
|
enum nss_status
|
||||||
@ -119,7 +120,7 @@ _nss_nis_setetherent (void)
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum nss_status
|
enum nss_status
|
||||||
_nss_nis_endetherent (void)
|
_nss_nis_endetherent (void)
|
||||||
{
|
{
|
||||||
@ -135,9 +136,9 @@ _nss_nis_endetherent (void)
|
|||||||
}
|
}
|
||||||
start = NULL;
|
start = NULL;
|
||||||
next = NULL;
|
next = NULL;
|
||||||
|
|
||||||
__libc_lock_unlock (lock);
|
__libc_lock_unlock (lock);
|
||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return NSS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,15 +155,15 @@ internal_nis_getetherent_r (struct ether *eth, char *buffer, size_t buflen)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if (next == NULL)
|
if (next == NULL)
|
||||||
return NSS_STATUS_NOTFOUND;
|
return NSS_STATUS_NOTFOUND;
|
||||||
p = strcpy (buffer, next->val);
|
p = strcpy (buffer, next->val);
|
||||||
next = next->next;
|
next = next->next;
|
||||||
|
|
||||||
while (isspace (*p))
|
while (isspace (*p))
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
parse_res = _nss_files_parse_etherent (p, eth, data, buflen);
|
parse_res = _nss_files_parse_etherent (p, eth, data, buflen);
|
||||||
if (!parse_res && errno == ERANGE)
|
if (!parse_res && errno == ERANGE)
|
||||||
return NSS_STATUS_TRYAGAIN;
|
return NSS_STATUS_TRYAGAIN;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
|
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ _nss_nis_gethostent_r (struct hostent *host, char *buffer, size_t buflen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum nss_status
|
enum nss_status
|
||||||
_nss_nis_gethostbyname_r (const char *name, struct hostent *host,
|
_nss_nis_gethostbyname2_r (const char *name, int af, struct hostent *host,
|
||||||
char *buffer, size_t buflen, int *h_errnop)
|
char *buffer, size_t buflen, int *h_errnop)
|
||||||
{
|
{
|
||||||
enum nss_status retval;
|
enum nss_status retval;
|
||||||
@ -297,9 +297,9 @@ _nss_nis_gethostbyname_r (const char *name, struct hostent *host,
|
|||||||
|
|
||||||
parse_res = parse_line (p, host, data, buflen);
|
parse_res = parse_line (p, host, data, buflen);
|
||||||
|
|
||||||
if (!parse_res)
|
if (!parse_res || host->h_addrtype != af)
|
||||||
{
|
{
|
||||||
if (errno == ERANGE)
|
if (!parse_res && errno == ERANGE)
|
||||||
{
|
{
|
||||||
*h_errnop = NETDB_INTERNAL;
|
*h_errnop = NETDB_INTERNAL;
|
||||||
return NSS_STATUS_TRYAGAIN;
|
return NSS_STATUS_TRYAGAIN;
|
||||||
@ -315,6 +315,24 @@ _nss_nis_gethostbyname_r (const char *name, struct hostent *host,
|
|||||||
return NSS_STATUS_SUCCESS;
|
return NSS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum nss_status
|
||||||
|
_nss_nis_gethostbyname_r (const char *name, struct hostent *host,
|
||||||
|
char *buffer, size_t buflen, int *h_errnop)
|
||||||
|
{
|
||||||
|
if (_res.options & RES_USE_INET6)
|
||||||
|
{
|
||||||
|
enum nss_status status;
|
||||||
|
|
||||||
|
status = _nss_nis_gethostbyname2_r (name, AF_INET6, host, buffer, buflen,
|
||||||
|
h_errnop);
|
||||||
|
if (status == NSS_STATUS_SUCCESS)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _nss_nis_gethostbyname2_r (name, AF_INET, host, buffer, buflen,
|
||||||
|
h_errnop);
|
||||||
|
}
|
||||||
|
|
||||||
enum nss_status
|
enum nss_status
|
||||||
_nss_nis_gethostbyaddr_r (char *addr, int addrlen, int type,
|
_nss_nis_gethostbyaddr_r (char *addr, int addrlen, int type,
|
||||||
struct hostent *host, char *buffer, size_t buflen,
|
struct hostent *host, char *buffer, size_t buflen,
|
||||||
|
@ -77,6 +77,7 @@ internal_nis_setprotoent (void)
|
|||||||
{
|
{
|
||||||
char *domainname;
|
char *domainname;
|
||||||
struct ypall_callback ypcb;
|
struct ypall_callback ypcb;
|
||||||
|
enum nss_status status;
|
||||||
|
|
||||||
yp_get_default_domain (&domainname);
|
yp_get_default_domain (&domainname);
|
||||||
|
|
||||||
@ -92,10 +93,10 @@ internal_nis_setprotoent (void)
|
|||||||
|
|
||||||
ypcb.foreach = saveit;
|
ypcb.foreach = saveit;
|
||||||
ypcb.data = NULL;
|
ypcb.data = NULL;
|
||||||
yp_all (domainname, "protocols.bynumber", &ypcb);
|
status = yperr2nss (yp_all (domainname, "protocols.bynumber", &ypcb));
|
||||||
next = start;
|
next = start;
|
||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum nss_status
|
enum nss_status
|
||||||
|
@ -85,6 +85,7 @@ internal_nis_setrpcent (intern_t *intern)
|
|||||||
{
|
{
|
||||||
char *domainname;
|
char *domainname;
|
||||||
struct ypall_callback ypcb;
|
struct ypall_callback ypcb;
|
||||||
|
enum nss_status status;
|
||||||
|
|
||||||
if (yp_get_default_domain (&domainname))
|
if (yp_get_default_domain (&domainname))
|
||||||
return NSS_STATUS_UNAVAIL;
|
return NSS_STATUS_UNAVAIL;
|
||||||
@ -101,10 +102,10 @@ internal_nis_setrpcent (intern_t *intern)
|
|||||||
|
|
||||||
ypcb.foreach = saveit;
|
ypcb.foreach = saveit;
|
||||||
ypcb.data = (char *)intern;
|
ypcb.data = (char *)intern;
|
||||||
yp_all(domainname, "rpc.bynumber", &ypcb);
|
status = yperr2nss (yp_all(domainname, "rpc.bynumber", &ypcb));
|
||||||
intern->next = intern->start;
|
intern->next = intern->start;
|
||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum nss_status
|
enum nss_status
|
||||||
|
@ -50,13 +50,13 @@ struct intern_t
|
|||||||
};
|
};
|
||||||
typedef struct intern_t intern_t;
|
typedef struct intern_t intern_t;
|
||||||
|
|
||||||
static intern_t intern = {NULL, NULL};
|
static intern_t intern = { NULL, NULL };
|
||||||
|
|
||||||
static int
|
static int
|
||||||
saveit (int instatus, char *inkey, int inkeylen, char *inval,
|
saveit (int instatus, char *inkey, int inkeylen, char *inval,
|
||||||
int invallen, char *indata)
|
int invallen, char *indata)
|
||||||
{
|
{
|
||||||
intern_t *intern = (intern_t *)indata;
|
intern_t *intern = (intern_t *) indata;
|
||||||
|
|
||||||
if (instatus != YP_TRUE)
|
if (instatus != YP_TRUE)
|
||||||
return instatus;
|
return instatus;
|
||||||
@ -78,7 +78,7 @@ saveit (int instatus, char *inkey, int inkeylen, char *inval,
|
|||||||
strncpy (intern->next->val, inval, invallen);
|
strncpy (intern->next->val, inval, invallen);
|
||||||
intern->next->val[invallen] = '\0';
|
intern->next->val[invallen] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,10 +87,11 @@ internal_nis_setservent (intern_t *intern)
|
|||||||
{
|
{
|
||||||
char *domainname;
|
char *domainname;
|
||||||
struct ypall_callback ypcb;
|
struct ypall_callback ypcb;
|
||||||
|
enum nss_status status;
|
||||||
|
|
||||||
if (yp_get_default_domain (&domainname))
|
if (yp_get_default_domain (&domainname))
|
||||||
return NSS_STATUS_UNAVAIL;
|
return NSS_STATUS_UNAVAIL;
|
||||||
|
|
||||||
while (intern->start != NULL)
|
while (intern->start != NULL)
|
||||||
{
|
{
|
||||||
if (intern->start->val != NULL)
|
if (intern->start->val != NULL)
|
||||||
@ -102,11 +103,11 @@ internal_nis_setservent (intern_t *intern)
|
|||||||
intern->start = NULL;
|
intern->start = NULL;
|
||||||
|
|
||||||
ypcb.foreach = saveit;
|
ypcb.foreach = saveit;
|
||||||
ypcb.data = (char *)intern;
|
ypcb.data = (char *) intern;
|
||||||
yp_all(domainname, "services.byname", &ypcb);
|
status = yperr2nss (yp_all (domainname, "services.byname", &ypcb));
|
||||||
intern->next = intern->start;
|
intern->next = intern->start;
|
||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
enum nss_status
|
enum nss_status
|
||||||
_nss_nis_setservent (void)
|
_nss_nis_setservent (void)
|
||||||
@ -134,7 +135,7 @@ internal_nis_endservent (intern_t * intern)
|
|||||||
free (intern->next);
|
free (intern->next);
|
||||||
}
|
}
|
||||||
intern->start = NULL;
|
intern->start = NULL;
|
||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return NSS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,7 +162,7 @@ internal_nis_getservent_r (struct servent *serv, char *buffer,
|
|||||||
|
|
||||||
if (data->start == NULL)
|
if (data->start == NULL)
|
||||||
internal_nis_setservent (data);
|
internal_nis_setservent (data);
|
||||||
|
|
||||||
/* Get the next entry until we found a correct one. */
|
/* Get the next entry until we found a correct one. */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -171,7 +172,7 @@ internal_nis_getservent_r (struct servent *serv, char *buffer,
|
|||||||
data->next = data->next->next;
|
data->next = data->next->next;
|
||||||
while (isspace (*p))
|
while (isspace (*p))
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
parse_res = _nss_files_parse_servent (p, serv, buffer, buflen);
|
parse_res = _nss_files_parse_servent (p, serv, buffer, buflen);
|
||||||
if (!parse_res && errno == ERANGE)
|
if (!parse_res && errno == ERANGE)
|
||||||
return NSS_STATUS_TRYAGAIN;
|
return NSS_STATUS_TRYAGAIN;
|
||||||
@ -199,7 +200,7 @@ enum nss_status
|
|||||||
_nss_nis_getservbyname_r (const char *name, char *protocol,
|
_nss_nis_getservbyname_r (const char *name, char *protocol,
|
||||||
struct servent *serv, char *buffer, size_t buflen)
|
struct servent *serv, char *buffer, size_t buflen)
|
||||||
{
|
{
|
||||||
intern_t data = {NULL, NULL};
|
intern_t data = { NULL, NULL };
|
||||||
enum nss_status status;
|
enum nss_status status;
|
||||||
int found;
|
int found;
|
||||||
|
|
||||||
@ -221,16 +222,16 @@ _nss_nis_getservbyname_r (const char *name, char *protocol,
|
|||||||
if (strcmp (serv->s_proto, protocol) == 0)
|
if (strcmp (serv->s_proto, protocol) == 0)
|
||||||
{
|
{
|
||||||
char **cp;
|
char **cp;
|
||||||
|
|
||||||
if (strcmp (serv->s_name, name) == 0)
|
if (strcmp (serv->s_name, name) == 0)
|
||||||
found = 1;
|
found = 1;
|
||||||
else
|
else
|
||||||
for (cp = serv->s_aliases; *cp; cp++)
|
for (cp = serv->s_aliases; *cp; cp++)
|
||||||
if (strcmp(name, *cp) == 0)
|
if (strcmp (name, *cp) == 0)
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal_nis_endservent (&data);
|
internal_nis_endservent (&data);
|
||||||
|
|
||||||
if (!found && status == NSS_STATUS_SUCCESS)
|
if (!found && status == NSS_STATUS_SUCCESS)
|
||||||
@ -243,7 +244,7 @@ enum nss_status
|
|||||||
_nss_nis_getservbyport_r (int port, char *protocol, struct servent *serv,
|
_nss_nis_getservbyport_r (int port, char *protocol, struct servent *serv,
|
||||||
char *buffer, size_t buflen)
|
char *buffer, size_t buflen)
|
||||||
{
|
{
|
||||||
intern_t data = {NULL, NULL};
|
intern_t data = { NULL, NULL };
|
||||||
enum nss_status status;
|
enum nss_status status;
|
||||||
int found;
|
int found;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
|
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
|
||||||
|
|
||||||
@ -167,7 +167,8 @@ __yp_bind (const char *domain, dom_binding ** ypdb)
|
|||||||
ypbr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr,
|
ypbr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr,
|
||||||
sizeof (ysd->dom_server_addr.sin_addr.s_addr));
|
sizeof (ysd->dom_server_addr.sin_addr.s_addr));
|
||||||
ysd->dom_vers = YPVERS;
|
ysd->dom_vers = YPVERS;
|
||||||
strcpy (ysd->dom_domain, domain);
|
strncpy (ysd->dom_domain, domain, YPMAXDOMAIN);
|
||||||
|
ysd->dom_domain[YPMAXDOMAIN] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ysd->dom_client)
|
if (ysd->dom_client)
|
||||||
|
@ -98,6 +98,13 @@ DB_LOOKUP (hostbyname, ,,
|
|||||||
LOOKUP_NAME (h_name, h_aliases),
|
LOOKUP_NAME (h_name, h_aliases),
|
||||||
const char *name)
|
const char *name)
|
||||||
|
|
||||||
|
DB_LOOKUP (hostbyname2, ,,
|
||||||
|
{
|
||||||
|
if (result->h_addrtype != af)
|
||||||
|
continue;
|
||||||
|
LOOKUP_NAME (h_name, h_aliases)
|
||||||
|
}, const char *name, int af)
|
||||||
|
|
||||||
DB_LOOKUP (hostbyaddr, ,,
|
DB_LOOKUP (hostbyaddr, ,,
|
||||||
{
|
{
|
||||||
if (result->h_addrtype == type && result->h_length == len &&
|
if (result->h_addrtype == type && result->h_length == len &&
|
||||||
|
@ -38,7 +38,7 @@ routines := \
|
|||||||
execve fexecve execv execle execl execvp execlp \
|
execve fexecve execv execle execl execvp execlp \
|
||||||
getpid getppid \
|
getpid getppid \
|
||||||
getuid geteuid getgid getegid getgroups setuid setgid group_member \
|
getuid geteuid getgid getegid getgroups setuid setgid group_member \
|
||||||
getpgid setpgid getpgrp setpgrp getsid setsid \
|
getpgid setpgid getpgrp bsd-getpgrp setpgrp getsid setsid \
|
||||||
getlogin getlogin_r setlogin \
|
getlogin getlogin_r setlogin \
|
||||||
pathconf sysconf fpathconf \
|
pathconf sysconf fpathconf \
|
||||||
glob fnmatch regex \
|
glob fnmatch regex \
|
||||||
|
30
posix/bsd-getpgrp.c
Normal file
30
posix/bsd-getpgrp.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/* BSD-compatible versions of getpgrp function.
|
||||||
|
Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
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 <sys/types.h>
|
||||||
|
|
||||||
|
/* Don't include unistd.h because it declares a conflicting
|
||||||
|
prototype for the POSIX.1 `getpgrp' function. */
|
||||||
|
extern pid_t __getpgid __P ((pid_t));
|
||||||
|
|
||||||
|
pid_t
|
||||||
|
__bsd_getpgrp (pid_t pid)
|
||||||
|
{
|
||||||
|
return __getpgid (pid);
|
||||||
|
}
|
@ -183,7 +183,7 @@ extern int euidaccess __P ((__const char *__name, int __type));
|
|||||||
#define SEEK_END 2 /* Seek from end of file. */
|
#define SEEK_END 2 /* Seek from end of file. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (__USE_BSD) && !defined (L_SET)
|
#if defined __USE_BSD && !defined L_SET
|
||||||
/* Old BSD names for the same constants; just for compatibility. */
|
/* Old BSD names for the same constants; just for compatibility. */
|
||||||
#define L_SET SEEK_SET
|
#define L_SET SEEK_SET
|
||||||
#define L_INCR SEEK_CUR
|
#define L_INCR SEEK_CUR
|
||||||
@ -239,7 +239,7 @@ extern unsigned int alarm __P ((unsigned int __seconds));
|
|||||||
extern unsigned int __sleep __P ((unsigned int __seconds));
|
extern unsigned int __sleep __P ((unsigned int __seconds));
|
||||||
extern unsigned int sleep __P ((unsigned int __seconds));
|
extern unsigned int sleep __P ((unsigned int __seconds));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Set an alarm to go off (generating a SIGALRM signal) in VALUE
|
/* Set an alarm to go off (generating a SIGALRM signal) in VALUE
|
||||||
microseconds. If INTERVAL is nonzero, when the alarm goes off, the
|
microseconds. If INTERVAL is nonzero, when the alarm goes off, the
|
||||||
timer is reset to go off every INTERVAL microseconds thereafter.
|
timer is reset to go off every INTERVAL microseconds thereafter.
|
||||||
@ -264,7 +264,7 @@ extern int __chown __P ((__const char *__file,
|
|||||||
extern int chown __P ((__const char *__file,
|
extern int chown __P ((__const char *__file,
|
||||||
__uid_t __owner, __gid_t __group));
|
__uid_t __owner, __gid_t __group));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Change the owner and group of the file that FD is open on. */
|
/* Change the owner and group of the file that FD is open on. */
|
||||||
extern int __fchown __P ((int __fd,
|
extern int __fchown __P ((int __fd,
|
||||||
__uid_t __owner, __gid_t __group));
|
__uid_t __owner, __gid_t __group));
|
||||||
@ -285,7 +285,7 @@ extern int lchown __P ((__const char *__file, __uid_t __owner,
|
|||||||
extern int __chdir __P ((__const char *__path));
|
extern int __chdir __P ((__const char *__path));
|
||||||
extern int chdir __P ((__const char *__path));
|
extern int chdir __P ((__const char *__path));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Change the process's working directory to the one FD is open on. */
|
/* Change the process's working directory to the one FD is open on. */
|
||||||
extern int fchdir __P ((int __fd));
|
extern int fchdir __P ((int __fd));
|
||||||
#endif
|
#endif
|
||||||
@ -317,7 +317,7 @@ char *__canonicalize_directory_name_internal __P ((__const char *__thisdir,
|
|||||||
size_t __size));
|
size_t __size));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Put the absolute pathname of the current working directory in BUF.
|
/* Put the absolute pathname of the current working directory in BUF.
|
||||||
If successful, return BUF. If not, put an error message in
|
If successful, return BUF. If not, put an error message in
|
||||||
BUF and return NULL. BUF should be at least PATH_MAX bytes long. */
|
BUF and return NULL. BUF should be at least PATH_MAX bytes long. */
|
||||||
@ -377,7 +377,7 @@ extern int execvp __P ((__const char *__file, char *__const __argv[]));
|
|||||||
extern int execlp __P ((__const char *__file, __const char *__arg, ...));
|
extern int execlp __P ((__const char *__file, __const char *__arg, ...));
|
||||||
|
|
||||||
|
|
||||||
#if defined(__USE_MISC) || defined(__USE_XOPEN)
|
#if defined __USE_MISC || defined __USE_XOPEN
|
||||||
/* Add INC to priority of the current process. */
|
/* Add INC to priority of the current process. */
|
||||||
extern int nice __P ((int __inc));
|
extern int nice __P ((int __inc));
|
||||||
#endif
|
#endif
|
||||||
@ -420,6 +420,13 @@ extern __pid_t getppid __P ((void));
|
|||||||
|
|
||||||
/* Get the process group ID of the calling process. */
|
/* Get the process group ID of the calling process. */
|
||||||
extern __pid_t getpgrp __P ((void));
|
extern __pid_t getpgrp __P ((void));
|
||||||
|
/* The old BSD definition is a bit different. */
|
||||||
|
extern __pid_t __bsd_getpgrp __P ((__pid_t __pid));
|
||||||
|
#ifdef __FAVOR_BSD
|
||||||
|
/* When we explicitely compile BSD sources use the BSD definition of this
|
||||||
|
function. Please note that we cannot use parameters for the macro. */
|
||||||
|
#define getpgrp __bsd_getpgrp
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set the process group ID of the process matching PID to PGID.
|
/* Set the process group ID of the process matching PID to PGID.
|
||||||
If PID is zero, the current process's process group ID is set.
|
If PID is zero, the current process's process group ID is set.
|
||||||
@ -432,7 +439,7 @@ extern __pid_t __getpgid __P ((__pid_t __pid));
|
|||||||
extern __pid_t getpgid __P ((__pid_t __pid));
|
extern __pid_t getpgid __P ((__pid_t __pid));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__USE_SVID) || defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Both System V and BSD have `setpgrp' functions, but with different
|
/* Both System V and BSD have `setpgrp' functions, but with different
|
||||||
calling conventions. The BSD function is the same as POSIX.1 `setpgid'
|
calling conventions. The BSD function is the same as POSIX.1 `setpgid'
|
||||||
(above). The System V function takes no arguments and puts the calling
|
(above). The System V function takes no arguments and puts the calling
|
||||||
@ -503,7 +510,7 @@ extern int group_member __P ((__gid_t __gid));
|
|||||||
extern int __setuid __P ((__uid_t __uid));
|
extern int __setuid __P ((__uid_t __uid));
|
||||||
extern int setuid __P ((__uid_t __uid));
|
extern int setuid __P ((__uid_t __uid));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Set the real user ID of the calling process to RUID,
|
/* Set the real user ID of the calling process to RUID,
|
||||||
and the effective user ID of the calling process to EUID. */
|
and the effective user ID of the calling process to EUID. */
|
||||||
extern int __setreuid __P ((__uid_t __ruid, __uid_t __euid));
|
extern int __setreuid __P ((__uid_t __ruid, __uid_t __euid));
|
||||||
@ -522,7 +529,7 @@ extern int seteuid __P ((__uid_t __uid));
|
|||||||
extern int __setgid __P ((__gid_t __gid));
|
extern int __setgid __P ((__gid_t __gid));
|
||||||
extern int setgid __P ((__gid_t __gid));
|
extern int setgid __P ((__gid_t __gid));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Set the real group ID of the calling process to RGID,
|
/* Set the real group ID of the calling process to RGID,
|
||||||
and the effective group ID of the calling process to EGID. */
|
and the effective group ID of the calling process to EGID. */
|
||||||
extern int __setregid __P ((__gid_t __rgid, __gid_t __egid));
|
extern int __setregid __P ((__gid_t __rgid, __gid_t __egid));
|
||||||
@ -541,7 +548,7 @@ extern int setegid __P ((__gid_t __gid));
|
|||||||
extern __pid_t __fork __P ((void));
|
extern __pid_t __fork __P ((void));
|
||||||
extern __pid_t fork __P ((void));
|
extern __pid_t fork __P ((void));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Clone the calling process, but without copying the whole address space.
|
/* Clone the calling process, but without copying the whole address space.
|
||||||
The the calling process is suspended until the the new process exits or is
|
The the calling process is suspended until the the new process exits or is
|
||||||
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
|
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
|
||||||
@ -565,7 +572,7 @@ extern int ttyname_r __P ((int __fd, char *__buf, size_t __buflen));
|
|||||||
extern int __isatty __P ((int __fd));
|
extern int __isatty __P ((int __fd));
|
||||||
extern int isatty __P ((int __fd));
|
extern int isatty __P ((int __fd));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Return the index into the active-logins file (utmp) for
|
/* Return the index into the active-logins file (utmp) for
|
||||||
the controlling terminal. */
|
the controlling terminal. */
|
||||||
extern int ttyslot __P ((void));
|
extern int ttyslot __P ((void));
|
||||||
@ -576,7 +583,7 @@ extern int ttyslot __P ((void));
|
|||||||
extern int __link __P ((__const char *__from, __const char *__to));
|
extern int __link __P ((__const char *__from, __const char *__to));
|
||||||
extern int link __P ((__const char *__from, __const char *__to));
|
extern int link __P ((__const char *__from, __const char *__to));
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Make a symbolic link to FROM named TO. */
|
/* Make a symbolic link to FROM named TO. */
|
||||||
extern int __symlink __P ((__const char *__from, __const char *__to));
|
extern int __symlink __P ((__const char *__from, __const char *__to));
|
||||||
extern int symlink __P ((__const char *__from, __const char *__to));
|
extern int symlink __P ((__const char *__from, __const char *__to));
|
||||||
@ -654,7 +661,7 @@ extern char *optarg;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined (__USE_XOPEN)
|
#if defined __USE_BSD || defined __USE_XOPEN
|
||||||
|
|
||||||
/* Put the name of the current host in no more than LEN bytes of NAME.
|
/* Put the name of the current host in no more than LEN bytes of NAME.
|
||||||
The result is null-terminated if LEN is large enough for the full
|
The result is null-terminated if LEN is large enough for the full
|
||||||
@ -728,7 +735,7 @@ extern int daemon __P ((int __nochdir, int __noclose));
|
|||||||
#endif /* Use BSD || X/Open. */
|
#endif /* Use BSD || X/Open. */
|
||||||
|
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
|
|
||||||
/* Return the current machine's Internet number. */
|
/* Return the current machine's Internet number. */
|
||||||
extern long int gethostid __P ((void));
|
extern long int gethostid __P ((void));
|
||||||
@ -758,7 +765,7 @@ extern int getdtablesize __P ((void));
|
|||||||
#endif /* Use BSD || X/Open Unix. */
|
#endif /* Use BSD || X/Open Unix. */
|
||||||
|
|
||||||
|
|
||||||
#if defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
|
||||||
|
|
||||||
/* Set the end of accessible data space (aka "the break") to ADDR.
|
/* Set the end of accessible data space (aka "the break") to ADDR.
|
||||||
Returns zero on success and -1 for errors (with errno set). */
|
Returns zero on success and -1 for errors (with errno set). */
|
||||||
@ -793,8 +800,7 @@ extern long int syscall __P ((long int __sysno, ...));
|
|||||||
#endif /* Use misc. */
|
#endif /* Use misc. */
|
||||||
|
|
||||||
|
|
||||||
#if (defined (__USE_MISC) || defined (__USE_XOPEN_EXTENDED)) \
|
#if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK
|
||||||
&& !defined (F_LOCK)
|
|
||||||
/* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both
|
/* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both
|
||||||
files consistent. Some systems have them there and some here, and some
|
files consistent. Some systems have them there and some here, and some
|
||||||
software depends on the macros being defined without including both. */
|
software depends on the macros being defined without including both. */
|
||||||
|
@ -413,6 +413,16 @@ extern int getaddrinfo __P ((__const char *__name, __const char *__service,
|
|||||||
|
|
||||||
/* Free `addrinfo' structure AI including associated storage. */
|
/* Free `addrinfo' structure AI including associated storage. */
|
||||||
extern void freeaddrinfo __P ((struct addrinfo *__ai));
|
extern void freeaddrinfo __P ((struct addrinfo *__ai));
|
||||||
|
|
||||||
|
/* Convert error return from getaddrinfo() to a string. */
|
||||||
|
extern char *gai_strerror __P ((int __ecode));
|
||||||
|
|
||||||
|
/* Translate a socket address to a location and service name. */
|
||||||
|
extern int getnameinfo __P ((__const struct sockaddr *__sa, size_t __salen,
|
||||||
|
char *__host, size_t __hostlen,
|
||||||
|
char *__serv, size_t __servlen,
|
||||||
|
int __flags));
|
||||||
|
|
||||||
#endif /* POSIX */
|
#endif /* POSIX */
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
@ -77,6 +77,10 @@ ssize_t __printf_pad __P ((FILE *, char pad, int n)); /* In vfprintf.c. */
|
|||||||
done += len; \
|
done += len; \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
|
#ifndef MIN
|
||||||
|
# define MIN(a,b) ((a)<(b)?(a):(b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -111,7 +111,7 @@ typedef __io_fileno_fn cookie_fileno_function_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Low level interface, independent of FILE representation. */
|
/* Low level interface, independent of FILE representation. */
|
||||||
#if defined (__USE_GNU) && !defined (_LIBC)
|
#if defined __USE_GNU && !defined _LIBC
|
||||||
/* Define the user-visible type, with user-friendly member names. */
|
/* Define the user-visible type, with user-friendly member names. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -340,7 +340,7 @@ extern int fcloseall __P ((void));
|
|||||||
extern FILE *fopen __P ((__const char *__filename, __const char *__modes));
|
extern FILE *fopen __P ((__const char *__filename, __const char *__modes));
|
||||||
/* Open a file, replacing an existing stream with it. */
|
/* Open a file, replacing an existing stream with it. */
|
||||||
extern FILE *freopen __P ((__const char *__restrict __filename,
|
extern FILE *freopen __P ((__const char *__restrict __filename,
|
||||||
__const char *__rstrict __modes,
|
__const char *__restrict __modes,
|
||||||
FILE *__restrict __stream));
|
FILE *__restrict __stream));
|
||||||
|
|
||||||
/* Return a new, zeroed, stream.
|
/* Return a new, zeroed, stream.
|
||||||
@ -554,7 +554,7 @@ putchar (int __c)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(__USE_SVID) || defined(__USE_MISC)
|
#if defined __USE_SVID || defined __USE_MISC
|
||||||
/* Get a word (int) from STREAM. */
|
/* Get a word (int) from STREAM. */
|
||||||
extern int getw __P ((FILE *__stream));
|
extern int getw __P ((FILE *__stream));
|
||||||
|
|
||||||
@ -663,8 +663,8 @@ extern int fileno __P ((FILE *__stream));
|
|||||||
#endif /* Use POSIX. */
|
#endif /* Use POSIX. */
|
||||||
|
|
||||||
|
|
||||||
#if (defined (__USE_POSIX2) || defined(__USE_SVID) || defined(__USE_BSD) || \
|
#if (defined __USE_POSIX2 || defined __USE_SVID || defined __USE_BSD || \
|
||||||
defined(__USE_MISC))
|
defined __USE_MISC)
|
||||||
/* Create a new stream connected to a pipe running the given command. */
|
/* Create a new stream connected to a pipe running the given command. */
|
||||||
extern FILE *popen __P ((__const char *__command, __const char *__modes));
|
extern FILE *popen __P ((__const char *__command, __const char *__modes));
|
||||||
|
|
||||||
|
@ -56,10 +56,9 @@ enlarge_buffer (stream, c)
|
|||||||
/* Write formatted output from FORMAT to a string which is
|
/* Write formatted output from FORMAT to a string which is
|
||||||
allocated with malloc and stored in *STRING_PTR. */
|
allocated with malloc and stored in *STRING_PTR. */
|
||||||
int
|
int
|
||||||
vasprintf (string_ptr, format, args)
|
vasprintf (char **string_ptr,
|
||||||
char **string_ptr;
|
const char *format,
|
||||||
const char *format;
|
va_list args)
|
||||||
va_list args;
|
|
||||||
{
|
{
|
||||||
FILE f;
|
FILE f;
|
||||||
int done;
|
int done;
|
||||||
|
@ -113,10 +113,10 @@ static const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
|
|||||||
1000000, 10000000, 100000000,
|
1000000, 10000000, 100000000,
|
||||||
1000000000
|
1000000000
|
||||||
#if BITS_PER_MP_LIMB > 32
|
#if BITS_PER_MP_LIMB > 32
|
||||||
, 10000000000, 100000000000,
|
, 10000000000U, 100000000000U,
|
||||||
1000000000000, 10000000000000, 100000000000000,
|
1000000000000U, 10000000000000U, 100000000000000U,
|
||||||
1000000000000000, 10000000000000000, 100000000000000000,
|
1000000000000000U, 10000000000000000U, 100000000000000000U,
|
||||||
1000000000000000000, 10000000000000000000U
|
1000000000000000000U, 10000000000000000000U
|
||||||
#endif
|
#endif
|
||||||
#if BITS_PER_MP_LIMB > 64
|
#if BITS_PER_MP_LIMB > 64
|
||||||
#error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
|
#error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
# include <string.h>
|
# include <string.h>
|
||||||
#else
|
#else
|
||||||
char *malloc ();
|
char *malloc ();
|
||||||
char *strcpy ();
|
char *memcpy ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef weak_alias
|
#ifndef weak_alias
|
||||||
|
@ -1,28 +1,27 @@
|
|||||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1995, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <ansidecl.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
/* Get the process group ID of the calling process. */
|
/* Get the process group ID of the calling process. */
|
||||||
int
|
int
|
||||||
DEFUN_VOID(getpgrp)
|
getpgrp (void)
|
||||||
{
|
{
|
||||||
return __getpgid (0);
|
return __getpgid (0);
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <features.h>
|
#include <features.h>
|
||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
@ -138,6 +139,34 @@ struct in_addr
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* IPv6 address */
|
||||||
|
struct in6_addr
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
u_int8_t u6_addr8[16];
|
||||||
|
u_int16_t u6_addr16[8];
|
||||||
|
u_int32_t u6_addr32[4];
|
||||||
|
#if (~0UL) > 0xffffffff
|
||||||
|
u_int64_t u6_addr64[2];
|
||||||
|
#endif
|
||||||
|
} in6_u;
|
||||||
|
#define s6_addr in6_u.u6_addr8
|
||||||
|
#define s6_addr16 in6_u.u6_addr16
|
||||||
|
#define s6_addr32 in6_u.u6_addr32
|
||||||
|
#define s6_addr64 in6_u.u6_addr64
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const struct in6_addr in6addr_any; /* :: */
|
||||||
|
extern const struct in6_addr in6addr_loopback; /* ::1 */
|
||||||
|
#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
|
||||||
|
#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
|
||||||
|
|
||||||
|
#define INET_ADDRSTRLEN 16
|
||||||
|
#define INET6_ADDRSTRLEN 46
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Get the definition of the macro to define the common sockaddr members. */
|
/* Get the definition of the macro to define the common sockaddr members. */
|
||||||
#include <sockaddrcom.h>
|
#include <sockaddrcom.h>
|
||||||
|
|
||||||
@ -156,6 +185,24 @@ struct sockaddr_in
|
|||||||
sizeof(struct in_addr)];
|
sizeof(struct in_addr)];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Ditto, for IPv6. */
|
||||||
|
struct sockaddr_in6
|
||||||
|
{
|
||||||
|
__SOCKADDR_COMMON (sin6_);
|
||||||
|
u_int16_t sin6_port; /* Transport layer port # */
|
||||||
|
u_int32_t sin6_flowinfo; /* IPv6 flow information */
|
||||||
|
struct in6_addr sin6_addr; /* IPv6 address */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IPv6 multicast request. */
|
||||||
|
struct ipv6_mreq
|
||||||
|
{
|
||||||
|
/* IPv6 multicast address of group */
|
||||||
|
struct in6_addr ipv6mr_multiaddr;
|
||||||
|
|
||||||
|
/* local IPv6 address of interface */
|
||||||
|
int ipv6mr_ifindex;
|
||||||
|
};
|
||||||
|
|
||||||
/* Options for use with `getsockopt' and `setsockopt' at the IP level.
|
/* Options for use with `getsockopt' and `setsockopt' at the IP level.
|
||||||
The first word in the comment at the right is the data type used;
|
The first word in the comment at the right is the data type used;
|
||||||
@ -213,6 +260,52 @@ extern u_int16_t htons __P ((u_int16_t __hostshort));
|
|||||||
#define htons(x) (x)
|
#define htons(x) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* IPV6 socket options. */
|
||||||
|
#define IPV6_ADDRFORM 1
|
||||||
|
#define IPV6_RXINFO 2
|
||||||
|
#define IPV6_RXHOPOPTS 3
|
||||||
|
#define IPV6_RXDSTOPTS 4
|
||||||
|
#define IPV6_RXSRCRT 5
|
||||||
|
#define IPV6_PKTOPTIONS 6
|
||||||
|
#define IPV6_CHECKSUM 7
|
||||||
|
#define IPV6_HOPLIMIT 8
|
||||||
|
|
||||||
|
#define IPV6_TXINFO IPV6_RXINFO
|
||||||
|
#define SCM_SRCINFO IPV6_TXINFO
|
||||||
|
#define SCM_SRCRT IPV6_RXSRCRT
|
||||||
|
|
||||||
|
#define IPV6_UNICAST_HOPS 16
|
||||||
|
#define IPV6_MULTICAST_IF 17
|
||||||
|
#define IPV6_MULTICAST_HOPS 18
|
||||||
|
#define IPV6_MULTICAST_LOOP 19
|
||||||
|
#define IPV6_ADD_MEMBERSHIP 20
|
||||||
|
#define IPV6_DROP_MEMBERSHIP 21
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_UNSPECIFIED(a) \
|
||||||
|
((((u_int32_t *)(a))[0] == 0) && ((u_int32_t *)(a))[1] == 0) && \
|
||||||
|
(((u_int32_t *)(a))[2] == 0) && ((u_int32_t *)(a))[3] == 0))
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_LOOPBACK(a) \
|
||||||
|
((((u_int32_t *)(a))[0] == 0) && ((u_int32_t *)(a))[1] == 0) && \
|
||||||
|
(((u_int32_t *)(a))[2] == 0) && ((u_int32_t *)(a))[3] == htonl(1)))
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *)(a))[0] == 0xff)
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_LINKLOCAL(a) \
|
||||||
|
((((u_int32_t *)(a))[0] & htonl(0xffc00000)) == htonl(0xfe800000))
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_SITELOCAL(a) \
|
||||||
|
((((u_int32_t *)(a))[0] & htonl(0xffc00000)) == htonl(0xfec00000))
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_V4MAPPED(a) \
|
||||||
|
((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
|
||||||
|
(((u_int32_t *)(a))[2] == htonl(0xffff)))
|
||||||
|
|
||||||
|
#define IN6_IS_ADDR_V4COMPAT(a) \
|
||||||
|
((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
|
||||||
|
(((u_int32_t *)(a))[2] == 0) && (ntohl(((u_int32_t *)(a))[3]) > 1))
|
||||||
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* netinet/in.h */
|
#endif /* netinet/in.h */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Definitions for BSD-style memory management. Generic/4.4 BSD version.
|
/* Definitions for BSD-style memory management. Generic/4.4 BSD version.
|
||||||
Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -97,8 +97,8 @@ int mprotect __P ((__caddr_t __addr, size_t __len, int __prot));
|
|||||||
|
|
||||||
/* Synchronize the region starting at ADDR and extending LEN bytes with the
|
/* Synchronize the region starting at ADDR and extending LEN bytes with the
|
||||||
file it maps. Filesystem operations on a file being mapped are
|
file it maps. Filesystem operations on a file being mapped are
|
||||||
unpredictable before this is done. */
|
unpredictable before this is done. Flags are from the MS_* set. */
|
||||||
int msync __P ((__caddr_t __addr, size_t __len));
|
int msync __P ((__caddr_t __addr, size_t __len, int flags));
|
||||||
|
|
||||||
/* Advise the system about particular usage patterns the program follows
|
/* Advise the system about particular usage patterns the program follows
|
||||||
for the region starting at ADDR and extending LEN bytes. */
|
for the region starting at ADDR and extending LEN bytes. */
|
||||||
|
92
sysdeps/i386/huge_val.h
Normal file
92
sysdeps/i386/huge_val.h
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* `HUGE_VAL' constants for ix86 (where it is infinity).
|
||||||
|
Used by <stdlib.h> and <math.h> functions for overflow.
|
||||||
|
Copyright (C) 1992, 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
|
||||||
|
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 _HUGE_VAL_H
|
||||||
|
#define _HUGE_VAL_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <endian.h>
|
||||||
|
|
||||||
|
/* IEEE positive infinity (-HUGE_VAL is negative infinity). */
|
||||||
|
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
#define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
#endif
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __huge_val_t union { unsigned char __c[8]; double __d; }
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define HUGE_VAL (__extension__ \
|
||||||
|
((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d)
|
||||||
|
#else /* Not GCC. */
|
||||||
|
static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
|
||||||
|
#define HUGE_VAL (__huge_val.__d)
|
||||||
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
|
/* ISO C 9X extensions: (float) HUGE_VALF and (long double) HUGE_VALL. */
|
||||||
|
|
||||||
|
#ifdef __USE_ISOC9X
|
||||||
|
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
#define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 }
|
||||||
|
#endif
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __huge_valf_t union { unsigned char __c[4]; float __f; }
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define HUGE_VALF (__extension__ \
|
||||||
|
((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f)
|
||||||
|
#else /* Not GCC. */
|
||||||
|
static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
|
||||||
|
#define HUGE_VALF (__huge_valf.__f)
|
||||||
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
#define __HUGE_VALL_bytes { 0x7f, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
#endif
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __huge_vall_t union { unsigned char __c[12]; long double __ld; }
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define HUGE_VALL (__extension__ \
|
||||||
|
((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
|
||||||
|
#else /* Not GCC. */
|
||||||
|
static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
|
||||||
|
#define HUGE_VALL (__huge_vall.__ld)
|
||||||
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Expression representing positive infinity. Here it is the same as
|
||||||
|
HUGE_VALF. */
|
||||||
|
#define INFINITY HUGE_VALF
|
||||||
|
|
||||||
|
#endif /* __USE_ISOC9X. */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* huge_val.h */
|
@ -65,21 +65,9 @@ static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
|
|||||||
#endif /* GCC. */
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
/* Generally there is no separate `long double' format and it is the
|
||||||
#define __HUGE_VALL_bytes { 0x7f, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
same as `double'. */
|
||||||
#endif
|
#define HUGE_VALL HUGE_VAL
|
||||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
|
||||||
#define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0x7f, 0, 0 }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define __huge_vall_t union { unsigned char __c[12]; long double __ld; }
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#define HUGE_VALL (__extension__ \
|
|
||||||
((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
|
|
||||||
#else /* Not GCC. */
|
|
||||||
static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
|
|
||||||
#define HUGE_VALL (__huge_vall.__ld)
|
|
||||||
#endif /* GCC. */
|
|
||||||
|
|
||||||
|
|
||||||
/* Expression representing positive infinity. Here it is the same as
|
/* Expression representing positive infinity. Here it is the same as
|
||||||
|
@ -10,12 +10,12 @@ RCSID("$NetBSD: e_acos.S,v 1.4 1995/05/08 23:44:37 jtc Exp $")
|
|||||||
/* acos = atan (sqrt(1 - x^2) / x) */
|
/* acos = atan (sqrt(1 - x^2) / x) */
|
||||||
ENTRY(__ieee754_acos)
|
ENTRY(__ieee754_acos)
|
||||||
fldl 4(%esp) /* x */
|
fldl 4(%esp) /* x */
|
||||||
fst %st(1)
|
fld %st /* x : x */
|
||||||
fmul %st(0) /* x^2 */
|
fmul %st(0) /* x^2 : x */
|
||||||
fld1
|
fld1 /* 1 : x^2 : x */
|
||||||
fsubp /* 1 - x^2 */
|
fsubp /* 1 - x^2 : x */
|
||||||
fsqrt /* sqrt (1 - x^2) */
|
fsqrt /* sqrt (1 - x^2) : x */
|
||||||
fxch %st(1)
|
fxch %st(1) /* x : sqrt (1 - x^2) */
|
||||||
fpatan
|
fpatan /* atan (sqrt(1 - x^2) / x) */
|
||||||
ret
|
ret
|
||||||
END (__ieee754_acos)
|
END (__ieee754_acos)
|
||||||
|
@ -11,7 +11,7 @@ RCSID("$NetBSD: $")
|
|||||||
/* acos = atan (sqrt(1 - x^2) / x) */
|
/* acos = atan (sqrt(1 - x^2) / x) */
|
||||||
ENTRY(__ieee754_acosf)
|
ENTRY(__ieee754_acosf)
|
||||||
flds 4(%esp) /* x */
|
flds 4(%esp) /* x */
|
||||||
fst %st(1)
|
fld %st
|
||||||
fmul %st(0) /* x^2 */
|
fmul %st(0) /* x^2 */
|
||||||
fld1
|
fld1
|
||||||
fsubp /* 1 - x^2 */
|
fsubp /* 1 - x^2 */
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
/* acosl = atanl (sqrtl(1 - x^2) / x) */
|
/* acosl = atanl (sqrtl(1 - x^2) / x) */
|
||||||
ENTRY(__ieee754_acosl)
|
ENTRY(__ieee754_acosl)
|
||||||
fldt 4(%esp) /* x */
|
fldt 4(%esp) /* x */
|
||||||
fst %st(1)
|
fld %st
|
||||||
fmul %st(0) /* x^2 */
|
fmul %st(0) /* x^2 */
|
||||||
fld1
|
fld1
|
||||||
fsubp /* 1 - x^2 */
|
fsubp /* 1 - x^2 */
|
||||||
|
@ -10,7 +10,7 @@ RCSID("$NetBSD: e_asin.S,v 1.4 1995/05/08 23:45:40 jtc Exp $")
|
|||||||
/* asin = atan (x / sqrt(1 - x^2)) */
|
/* asin = atan (x / sqrt(1 - x^2)) */
|
||||||
ENTRY(__ieee754_asin)
|
ENTRY(__ieee754_asin)
|
||||||
fldl 4(%esp) /* x */
|
fldl 4(%esp) /* x */
|
||||||
fst %st(1)
|
fld %st
|
||||||
fmul %st(0) /* x^2 */
|
fmul %st(0) /* x^2 */
|
||||||
fld1
|
fld1
|
||||||
fsubp /* 1 - x^2 */
|
fsubp /* 1 - x^2 */
|
||||||
|
@ -11,7 +11,7 @@ RCSID("$NetBSD: $")
|
|||||||
/* asin = atan (x / sqrt(1 - x^2)) */
|
/* asin = atan (x / sqrt(1 - x^2)) */
|
||||||
ENTRY(__ieee754_asinf)
|
ENTRY(__ieee754_asinf)
|
||||||
flds 4(%esp) /* x */
|
flds 4(%esp) /* x */
|
||||||
fst %st(1)
|
fld %st
|
||||||
fmul %st(0) /* x^2 */
|
fmul %st(0) /* x^2 */
|
||||||
fld1
|
fld1
|
||||||
fsubp /* 1 - x^2 */
|
fsubp /* 1 - x^2 */
|
||||||
|
@ -12,7 +12,7 @@ RCSID("$NetBSD: $")
|
|||||||
/* asinl = atanl (x / sqrtl(1 - x^2)) */
|
/* asinl = atanl (x / sqrtl(1 - x^2)) */
|
||||||
ENTRY(__ieee754_asinl)
|
ENTRY(__ieee754_asinl)
|
||||||
fldt 4(%esp) /* x */
|
fldt 4(%esp) /* x */
|
||||||
fst %st(1)
|
fld %st
|
||||||
fmul %st(0) /* x^2 */
|
fmul %st(0) /* x^2 */
|
||||||
fld1
|
fld1
|
||||||
fsubp /* 1 - x^2 */
|
fsubp /* 1 - x^2 */
|
||||||
|
@ -22,7 +22,7 @@ ENTRY(__ieee754_exp)
|
|||||||
je 1f /* Is +-Inf, jump. */
|
je 1f /* Is +-Inf, jump. */
|
||||||
fldl2e
|
fldl2e
|
||||||
fmulp /* x * log2(e) */
|
fmulp /* x * log2(e) */
|
||||||
fstl %st(1)
|
fld %st
|
||||||
frndint /* int(x * log2(e)) */
|
frndint /* int(x * log2(e)) */
|
||||||
fsubr %st,%st(1) /* fract(x * log2(e)) */
|
fsubr %st,%st(1) /* fract(x * log2(e)) */
|
||||||
fxch
|
fxch
|
||||||
@ -35,6 +35,7 @@ ENTRY(__ieee754_exp)
|
|||||||
|
|
||||||
1: testl $0x200, %eax /* Test sign. */
|
1: testl $0x200, %eax /* Test sign. */
|
||||||
jz 2f /* If positive, jump. */
|
jz 2f /* If positive, jump. */
|
||||||
|
fstp %st
|
||||||
fldz /* Set result to 0. */
|
fldz /* Set result to 0. */
|
||||||
2: ret
|
2: ret
|
||||||
END (__ieee754_exp)
|
END (__ieee754_exp)
|
||||||
|
@ -23,7 +23,7 @@ ENTRY(__ieee754_expf)
|
|||||||
je 1f /* Is +-Inf, jump. */
|
je 1f /* Is +-Inf, jump. */
|
||||||
fldl2e
|
fldl2e
|
||||||
fmulp /* x * log2(e) */
|
fmulp /* x * log2(e) */
|
||||||
fstl %st(1)
|
fld %st
|
||||||
frndint /* int(x * log2(e)) */
|
frndint /* int(x * log2(e)) */
|
||||||
fsubr %st,%st(1) /* fract(x * log2(e)) */
|
fsubr %st,%st(1) /* fract(x * log2(e)) */
|
||||||
fxch
|
fxch
|
||||||
@ -36,6 +36,7 @@ ENTRY(__ieee754_expf)
|
|||||||
|
|
||||||
1: testl $0x200, %eax /* Test sign. */
|
1: testl $0x200, %eax /* Test sign. */
|
||||||
jz 2f /* If positive, jump. */
|
jz 2f /* If positive, jump. */
|
||||||
|
fstp %st
|
||||||
fldz /* Set result to 0. */
|
fldz /* Set result to 0. */
|
||||||
2: ret
|
2: ret
|
||||||
END (__ieee754_expf)
|
END (__ieee754_expf)
|
||||||
|
@ -24,7 +24,7 @@ ENTRY(__ieee754_expl)
|
|||||||
je 1f /* Is +-Inf, jump. */
|
je 1f /* Is +-Inf, jump. */
|
||||||
fldl2e
|
fldl2e
|
||||||
fmulp /* x * log2(e) */
|
fmulp /* x * log2(e) */
|
||||||
fstl %st(1)
|
fld %st
|
||||||
frndint /* int(x * log2(e)) */
|
frndint /* int(x * log2(e)) */
|
||||||
fsubr %st,%st(1) /* fract(x * log2(e)) */
|
fsubr %st,%st(1) /* fract(x * log2(e)) */
|
||||||
fxch
|
fxch
|
||||||
@ -37,6 +37,7 @@ ENTRY(__ieee754_expl)
|
|||||||
|
|
||||||
1: testl $0x200, %eax /* Test sign. */
|
1: testl $0x200, %eax /* Test sign. */
|
||||||
jz 2f /* If positive, jump. */
|
jz 2f /* If positive, jump. */
|
||||||
|
fstp %st
|
||||||
fldz /* Set result to 0. */
|
fldz /* Set result to 0. */
|
||||||
2: ret
|
2: ret
|
||||||
END (__ieee754_expl)
|
END (__ieee754_expl)
|
||||||
|
@ -47,8 +47,8 @@ ENTRY(__ieee754_log)
|
|||||||
fabs // |x-1| : x-1 : x : log(2)
|
fabs // |x-1| : x-1 : x : log(2)
|
||||||
fcompl MO(limit) // x-1 : x : log(2)
|
fcompl MO(limit) // x-1 : x : log(2)
|
||||||
fnstsw // x-1 : x : log(2)
|
fnstsw // x-1 : x : log(2)
|
||||||
sahf
|
andb $0x45, %ah
|
||||||
ja 2f
|
jz 2f
|
||||||
fstp %st(1) // x-1 : log(2)
|
fstp %st(1) // x-1 : log(2)
|
||||||
fyl2xp1 // log(x)
|
fyl2xp1 // log(x)
|
||||||
ret
|
ret
|
||||||
|
@ -47,8 +47,8 @@ ENTRY(__ieee754_log10)
|
|||||||
fabs // |x-1| : x-1 : x : log10(2)
|
fabs // |x-1| : x-1 : x : log10(2)
|
||||||
fcompl MO(limit) // x-1 : x : log10(2)
|
fcompl MO(limit) // x-1 : x : log10(2)
|
||||||
fnstsw // x-1 : x : log10(2)
|
fnstsw // x-1 : x : log10(2)
|
||||||
sahf
|
andb $0x45, %ah
|
||||||
ja 2f
|
jz 2f
|
||||||
fstp %st(1) // x-1 : log10(2)
|
fstp %st(1) // x-1 : log10(2)
|
||||||
fyl2xp1 // log10(x)
|
fyl2xp1 // log10(x)
|
||||||
ret
|
ret
|
||||||
|
@ -48,8 +48,8 @@ ENTRY(__ieee754_log10f)
|
|||||||
fabs // |x-1| : x-1 : x : log10(2)
|
fabs // |x-1| : x-1 : x : log10(2)
|
||||||
fcompl MO(limit) // x-1 : x : log10(2)
|
fcompl MO(limit) // x-1 : x : log10(2)
|
||||||
fnstsw // x-1 : x : log10(2)
|
fnstsw // x-1 : x : log10(2)
|
||||||
sahf
|
andb $0x45, %ah
|
||||||
ja 2f
|
jz 2f
|
||||||
fstp %st(1) // x-1 : log10(2)
|
fstp %st(1) // x-1 : log10(2)
|
||||||
fyl2xp1 // log10(x)
|
fyl2xp1 // log10(x)
|
||||||
ret
|
ret
|
||||||
|
@ -49,8 +49,8 @@ ENTRY(__ieee754_log10l)
|
|||||||
fabs // |x-1| : x-1 : x : log10(2)
|
fabs // |x-1| : x-1 : x : log10(2)
|
||||||
fcompl MO(limit) // x-1 : x : log10(2)
|
fcompl MO(limit) // x-1 : x : log10(2)
|
||||||
fnstsw // x-1 : x : log10(2)
|
fnstsw // x-1 : x : log10(2)
|
||||||
sahf
|
andb $0x45, %ah
|
||||||
ja 2f
|
jz 2f
|
||||||
fstp %st(1) // x-1 : log10(2)
|
fstp %st(1) // x-1 : log10(2)
|
||||||
fyl2xp1 // log10(x)
|
fyl2xp1 // log10(x)
|
||||||
ret
|
ret
|
||||||
|
@ -48,8 +48,8 @@ ENTRY(__ieee754_logf)
|
|||||||
fabs // |x-1| : x-1 : x : log(2)
|
fabs // |x-1| : x-1 : x : log(2)
|
||||||
fcompl MO(limit) // x-1 : x : log(2)
|
fcompl MO(limit) // x-1 : x : log(2)
|
||||||
fnstsw // x-1 : x : log(2)
|
fnstsw // x-1 : x : log(2)
|
||||||
sahf
|
andb $0x45, %ah
|
||||||
ja 2f
|
jz 2f
|
||||||
fstp %st(1) // x-1 : log(2)
|
fstp %st(1) // x-1 : log(2)
|
||||||
fyl2xp1 // log(x)
|
fyl2xp1 // log(x)
|
||||||
ret
|
ret
|
||||||
|
@ -48,8 +48,8 @@ ENTRY(__ieee754_logl)
|
|||||||
fabs // |x-1| : x-1 : x : log(2)
|
fabs // |x-1| : x-1 : x : log(2)
|
||||||
fcompl MO(limit) // x-1 : x : log(2)
|
fcompl MO(limit) // x-1 : x : log(2)
|
||||||
fnstsw // x-1 : x : log(2)
|
fnstsw // x-1 : x : log(2)
|
||||||
sahf
|
andb $0x45, %ah
|
||||||
ja 2f
|
jz 2f
|
||||||
fstp %st(1) // x-1 : log(2)
|
fstp %st(1) // x-1 : log(2)
|
||||||
fyl2xp1 // log(x)
|
fyl2xp1 // log(x)
|
||||||
ret
|
ret
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ix87 specific implementation of pow function.
|
/* ix87 specific implementation of pow function.
|
||||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
@ -27,31 +27,77 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(infinity,@object)
|
||||||
|
inf_zero:
|
||||||
|
infinity:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
|
||||||
|
ASM_SIZE_DIRECTIVE(infinity)
|
||||||
|
ASM_TYPE_DIRECTIVE(zero,@object)
|
||||||
|
zero: .double 0.0
|
||||||
|
ASM_SIZE_DIRECTIVE(zero)
|
||||||
|
ASM_TYPE_DIRECTIVE(minf_mzero,@object)
|
||||||
|
minf_mzero:
|
||||||
|
minfinity:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
|
||||||
|
mzero:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0, 0x80
|
||||||
|
ASM_SIZE_DIRECTIVE(minf_mzero)
|
||||||
ASM_TYPE_DIRECTIVE(one,@object)
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
one: .double 1.0
|
one: .double 1.0
|
||||||
ASM_SIZE_DIRECTIVE(one)
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
ASM_TYPE_DIRECTIVE(limit,@object)
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
limit: .double 0.29
|
limit: .double 0.29
|
||||||
ASM_SIZE_DIRECTIVE(limit)
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
ASM_TYPE_DIRECTIVE(nan,@object)
|
||||||
|
nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
|
||||||
|
ASM_SIZE_DIRECTIVE(nan)
|
||||||
|
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
#define MO(op) op##@GOTOFF(%ecx)
|
#define MO(op) op##@GOTOFF(%ecx)
|
||||||
|
#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
|
||||||
#else
|
#else
|
||||||
#define MO(op) op
|
#define MO(op) op
|
||||||
|
#define MOX(op,x,f) op(,x,f)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.text
|
.text
|
||||||
ENTRY(__ieee754_pow)
|
ENTRY(__ieee754_pow)
|
||||||
fldl 4(%esp) // x
|
fldl 12(%esp) // y
|
||||||
fldl 12(%esp) // y : x
|
fxam
|
||||||
|
fnstsw
|
||||||
|
movb %ah, %dl
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x40, %ah // is y == 0 ?
|
||||||
|
je 11f
|
||||||
|
|
||||||
|
cmpb $0x05, %ah // is y == <EFBFBD>inf ?
|
||||||
|
je 12f
|
||||||
|
|
||||||
|
cmpb $0x01, %ah // is y == NaN ?
|
||||||
|
je 30f
|
||||||
|
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
call 1f
|
call 1f
|
||||||
1: popl %ecx
|
1: popl %ecx
|
||||||
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
fldl 4(%esp) // x : y
|
||||||
|
|
||||||
subl $8,%esp
|
subl $8,%esp
|
||||||
|
|
||||||
|
fxam
|
||||||
|
fnstsw
|
||||||
|
movb %ah, %dh
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x40, %ah
|
||||||
|
je 20f // x is <EFBFBD>0
|
||||||
|
|
||||||
|
cmpb $0x05, %ah
|
||||||
|
je 15f // x is <EFBFBD>inf
|
||||||
|
|
||||||
|
fxch // y : x
|
||||||
|
|
||||||
/* First see whether `y' is a natural number. In this case we
|
/* First see whether `y' is a natural number. In this case we
|
||||||
can use a more precise algorithm. */
|
can use a more precise algorithm. */
|
||||||
fld %st // y : y : x
|
fld %st // y : y : x
|
||||||
@ -63,13 +109,11 @@ ENTRY(__ieee754_pow)
|
|||||||
jne 2f
|
jne 2f
|
||||||
|
|
||||||
/* OK, we have an integer value for y. */
|
/* OK, we have an integer value for y. */
|
||||||
ftst // y : x
|
|
||||||
fstp %st(0) // x
|
|
||||||
fnstsw
|
|
||||||
sahf
|
|
||||||
popl %eax
|
popl %eax
|
||||||
popl %edx
|
popl %edx
|
||||||
jnc 4f // y >= 0, jump
|
orl $0, %edx
|
||||||
|
fstp %st(0) // x
|
||||||
|
jns 4f // y >= 0, jump
|
||||||
fdivrl MO(one) // 1/x (now referred to as x)
|
fdivrl MO(one) // 1/x (now referred to as x)
|
||||||
negl %eax
|
negl %eax
|
||||||
adcl $0, %edx
|
adcl $0, %edx
|
||||||
@ -87,7 +131,7 @@ ENTRY(__ieee754_pow)
|
|||||||
orl %edx, %ecx
|
orl %edx, %ecx
|
||||||
jnz 6b
|
jnz 6b
|
||||||
fstp %st(0) // ST*x
|
fstp %st(0) // ST*x
|
||||||
ret
|
30: ret
|
||||||
|
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
2: /* y is a real number. */
|
2: /* y is a real number. */
|
||||||
@ -117,4 +161,161 @@ ENTRY(__ieee754_pow)
|
|||||||
addl $8, %esp
|
addl $8, %esp
|
||||||
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
|
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
// pow(x,<EFBFBD>0) = 1
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
11: fstp %st(0) // pop y
|
||||||
|
fldl MO(one)
|
||||||
|
ret
|
||||||
|
|
||||||
|
// y == <EFBFBD>inf
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
12: fstp %st(0) // pop y
|
||||||
|
fldl 4(%esp) // x
|
||||||
|
fabs
|
||||||
|
fcompl MO(one) // < 1, == 1, or > 1
|
||||||
|
fnstsw
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x45, %ah
|
||||||
|
je 13f // jump if x is NaN
|
||||||
|
|
||||||
|
cmpb $0x40, %ah
|
||||||
|
je 14f // jump if |x| == 1
|
||||||
|
|
||||||
|
shlb $1, %ah
|
||||||
|
xorb %ah, %dl
|
||||||
|
andl $2, %edx
|
||||||
|
fldl MOX(inf_zero, %edx, 4)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
14: fldl MO(nan)
|
||||||
|
faddl MO(zero) // raise invalid exception
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
13: fldl 4(%esp) // load x == NaN
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>inf
|
||||||
|
15: fstp %st(0) // y
|
||||||
|
testb $2, %dh
|
||||||
|
jz 16f // jump if x == +inf
|
||||||
|
|
||||||
|
// We must find out whether y is an odd integer.
|
||||||
|
fld %st // y : y
|
||||||
|
fistpll (%esp) // y
|
||||||
|
fildll (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 17f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is the number of bits small
|
||||||
|
// enough so that all are coming from the mantissa?
|
||||||
|
popl %eax
|
||||||
|
popl %edx
|
||||||
|
andb $1, %al
|
||||||
|
jz 18f // jump if not odd
|
||||||
|
movl %edx, %eax
|
||||||
|
orl %edx, %edx
|
||||||
|
jns 155f
|
||||||
|
negl %eax
|
||||||
|
155: cmpl $0x00200000, %eax
|
||||||
|
ja 18f // does not fit in mantissa bits
|
||||||
|
// It's an odd integer.
|
||||||
|
shrl $31, %edx
|
||||||
|
fldl MOX(minf_mzero, %edx, 8)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
16: fcompl MO(zero)
|
||||||
|
addl $8, %esp
|
||||||
|
fnstsw
|
||||||
|
shrl $5, %eax
|
||||||
|
andl $8, %eax
|
||||||
|
fldl MOX(inf_zero, %eax, 1)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
17: shll $30, %edx // sign bit for y in right position
|
||||||
|
addl $8, %esp
|
||||||
|
18: shrl $31, %edx
|
||||||
|
fldl MOX(inf_zero, %edx, 8)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>0
|
||||||
|
20: fstp %st(0) // y
|
||||||
|
testb $2, %dl
|
||||||
|
jz 21f // y > 0
|
||||||
|
|
||||||
|
// x is <EFBFBD>0 and y is < 0. We must find out whether y is an odd integer.
|
||||||
|
testb $2, %dh
|
||||||
|
jz 25f
|
||||||
|
|
||||||
|
fld %st // y : y
|
||||||
|
fistpll (%esp) // y
|
||||||
|
fildll (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 26f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is the number of bits small
|
||||||
|
// enough so that all are coming from the mantissa?
|
||||||
|
popl %eax
|
||||||
|
popl %edx
|
||||||
|
andb $1, %al
|
||||||
|
jz 27f // jump if not odd
|
||||||
|
cmpl $0xffe00000, %edx
|
||||||
|
jbe 27f // does not fit in mantissa bits
|
||||||
|
// It's an odd integer.
|
||||||
|
// Raise divide-by-zero exception and get minus infinity value.
|
||||||
|
fldl MO(one)
|
||||||
|
fdivl MO(zero)
|
||||||
|
fchs
|
||||||
|
ret
|
||||||
|
|
||||||
|
25: fstp %st(0)
|
||||||
|
26: popl %eax
|
||||||
|
popl %edx
|
||||||
|
27: // Raise divide-by-zero exception and get infinity value.
|
||||||
|
fldl MO(one)
|
||||||
|
fdivl MO(zero)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>0 and y is > 0. We must find out whether y is an odd integer.
|
||||||
|
21: testb $2, %dh
|
||||||
|
jz 22f
|
||||||
|
|
||||||
|
fld %st // y : y
|
||||||
|
fistpll (%esp) // y
|
||||||
|
fildll (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 23f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is the number of bits small
|
||||||
|
// enough so that all are coming from the mantissa?
|
||||||
|
popl %eax
|
||||||
|
popl %edx
|
||||||
|
andb $1, %al
|
||||||
|
jz 24f // jump if not odd
|
||||||
|
cmpl $0xffe00000, %edx
|
||||||
|
jbe 24f // does not fit in mantissa bits
|
||||||
|
// It's an odd integer.
|
||||||
|
fldl MO(mzero)
|
||||||
|
ret
|
||||||
|
|
||||||
|
22: fstp %st(0)
|
||||||
|
23: popl %eax
|
||||||
|
popl %edx
|
||||||
|
24: fldl MO(zero)
|
||||||
|
ret
|
||||||
|
|
||||||
END(__ieee754_pow)
|
END(__ieee754_pow)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ix87 specific implementation of pow function.
|
/* ix87 specific implementation of pow function.
|
||||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
@ -27,67 +27,107 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(infinity,@object)
|
||||||
|
inf_zero:
|
||||||
|
infinity:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
|
||||||
|
ASM_SIZE_DIRECTIVE(infinity)
|
||||||
|
ASM_TYPE_DIRECTIVE(zero,@object)
|
||||||
|
zero: .double 0.0
|
||||||
|
ASM_SIZE_DIRECTIVE(zero)
|
||||||
|
ASM_TYPE_DIRECTIVE(minf_mzero,@object)
|
||||||
|
minf_mzero:
|
||||||
|
minfinity:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
|
||||||
|
mzero:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0, 0x80
|
||||||
|
ASM_SIZE_DIRECTIVE(minf_mzero)
|
||||||
ASM_TYPE_DIRECTIVE(one,@object)
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
one: .double 1.0
|
one: .double 1.0
|
||||||
ASM_SIZE_DIRECTIVE(one)
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
ASM_TYPE_DIRECTIVE(limit,@object)
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
limit: .double 0.29
|
limit: .double 0.29
|
||||||
ASM_SIZE_DIRECTIVE(limit)
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
ASM_TYPE_DIRECTIVE(nan,@object)
|
||||||
|
nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
|
||||||
|
ASM_SIZE_DIRECTIVE(nan)
|
||||||
|
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
#define MO(op) op##@GOTOFF(%ecx)
|
#define MO(op) op##@GOTOFF(%ecx)
|
||||||
|
#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
|
||||||
#else
|
#else
|
||||||
#define MO(op) op
|
#define MO(op) op
|
||||||
|
#define MOX(op,x,f) op(,x,f)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.text
|
.text
|
||||||
ENTRY(__ieee754_powf)
|
ENTRY(__ieee754_powf)
|
||||||
flds 4(%esp) // x
|
flds 8(%esp) // y
|
||||||
flds 8(%esp) // y : x
|
fxam
|
||||||
|
fnstsw
|
||||||
|
movb %ah, %dl
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x40, %ah // is y == 0 ?
|
||||||
|
je 11f
|
||||||
|
|
||||||
|
cmpb $0x05, %ah // is y == <EFBFBD>inf ?
|
||||||
|
je 12f
|
||||||
|
|
||||||
|
cmpb $0x01, %ah // is y == NaN ?
|
||||||
|
je 30f
|
||||||
|
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
call 1f
|
call 1f
|
||||||
1: popl %ecx
|
1: popl %ecx
|
||||||
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
|
||||||
#endif
|
#endif
|
||||||
subl $8,%esp
|
|
||||||
|
flds 4(%esp) // x : y
|
||||||
|
|
||||||
|
subl $4, %esp
|
||||||
|
|
||||||
|
fxam
|
||||||
|
fnstsw
|
||||||
|
movb %ah, %dh
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x40, %ah
|
||||||
|
je 20f // x is <EFBFBD>0
|
||||||
|
|
||||||
|
cmpb $0x05, %ah
|
||||||
|
je 15f // x is <EFBFBD>inf
|
||||||
|
|
||||||
|
fxch // y : x
|
||||||
|
|
||||||
/* First see whether `y' is a natural number. In this case we
|
/* First see whether `y' is a natural number. In this case we
|
||||||
can use a more precise algorithm. */
|
can use a more precise algorithm. */
|
||||||
fld %st // y : y : x
|
fld %st // y : y : x
|
||||||
fistpll (%esp) // y : x
|
fistpl (%esp) // y : x
|
||||||
fildll (%esp) // int(y) : y : x
|
fildl (%esp) // int(y) : y : x
|
||||||
fucomp %st(1) // y : x
|
fucomp %st(1) // y : x
|
||||||
fnstsw
|
fnstsw
|
||||||
sahf
|
sahf
|
||||||
jne 2f
|
jne 2f
|
||||||
|
|
||||||
/* OK, we have an integer value for y. */
|
/* OK, we have an integer value for y. */
|
||||||
ftst // y : x
|
|
||||||
fstp %st(0) // x
|
|
||||||
fnstsw
|
|
||||||
sahf
|
|
||||||
popl %eax
|
|
||||||
popl %edx
|
popl %edx
|
||||||
jnc 4f // y >= 0, jump
|
orl $0, %edx
|
||||||
|
fstp %st(0) // x
|
||||||
|
jns 4f // y >= 0, jump
|
||||||
fdivrl MO(one) // 1/x (now referred to as x)
|
fdivrl MO(one) // 1/x (now referred to as x)
|
||||||
negl %eax
|
|
||||||
adcl $0, %edx
|
|
||||||
negl %edx
|
negl %edx
|
||||||
4: fldl MO(one) // 1 : x
|
4: fldl MO(one) // 1 : x
|
||||||
fxch
|
fxch
|
||||||
|
|
||||||
6: shrdl $1, %edx, %eax
|
6: shrl $1, %edx
|
||||||
jnc 5f
|
jnc 5f
|
||||||
fxch
|
fxch
|
||||||
fmul %st(1) // x : ST*x
|
fmul %st(1) // x : ST*x
|
||||||
fxch
|
fxch
|
||||||
5: fmul %st(0), %st // x*x : ST*x
|
5: fmul %st(0), %st // x*x : ST*x
|
||||||
movl %eax, %ecx
|
testl %edx, %edx
|
||||||
orl %edx, %ecx
|
|
||||||
jnz 6b
|
jnz 6b
|
||||||
fstp %st(0) // ST*x
|
fstp %st(0) // ST*x
|
||||||
ret
|
30: ret
|
||||||
|
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
2: /* y is a real number. */
|
2: /* y is a real number. */
|
||||||
@ -114,7 +154,159 @@ ENTRY(__ieee754_powf)
|
|||||||
f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x))
|
f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x))
|
||||||
faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x))
|
faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x))
|
||||||
fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
|
fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
|
||||||
addl $8, %esp
|
addl $4, %esp
|
||||||
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
|
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
// pow(x,<EFBFBD>0) = 1
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
11: fstp %st(0) // pop y
|
||||||
|
fldl MO(one)
|
||||||
|
ret
|
||||||
|
|
||||||
|
// y == <EFBFBD>inf
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
12: fstp %st(0) // pop y
|
||||||
|
flds 4(%esp) // x
|
||||||
|
fabs
|
||||||
|
fcompl MO(one) // < 1, == 1, or > 1
|
||||||
|
fnstsw
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x45, %ah
|
||||||
|
je 13f // jump if x is NaN
|
||||||
|
|
||||||
|
cmpb $0x40, %ah
|
||||||
|
je 14f // jump if |x| == 1
|
||||||
|
|
||||||
|
shlb $1, %ah
|
||||||
|
xorb %ah, %dl
|
||||||
|
andl $2, %edx
|
||||||
|
fldl MOX(inf_zero, %edx, 4)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
14: fldl MO(nan)
|
||||||
|
faddl MO(zero) // raise invalid exception
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
13: flds 4(%esp) // load x == NaN
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>inf
|
||||||
|
15: fstp %st(0) // y
|
||||||
|
testb $2, %dh
|
||||||
|
jz 16f // jump if x == +inf
|
||||||
|
|
||||||
|
// We must find out whether y is an odd integer.
|
||||||
|
fld %st // y : y
|
||||||
|
fistpl (%esp) // y
|
||||||
|
fildl (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 17f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is the number of bits small
|
||||||
|
// enough so that all are coming from the mantissa?
|
||||||
|
popl %edx
|
||||||
|
testb $1, %dl
|
||||||
|
jz 18f // jump if not odd
|
||||||
|
movl %edx, %eax
|
||||||
|
orl %edx, %edx
|
||||||
|
jns 155f
|
||||||
|
negl %eax
|
||||||
|
155: cmpl $0x01000000, %eax
|
||||||
|
ja 18f // does not fit in mantissa bits
|
||||||
|
// It's an odd integer.
|
||||||
|
shrl $31, %edx
|
||||||
|
fldl MOX(minf_mzero, %edx, 8)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
16: fcompl MO(zero)
|
||||||
|
addl $4, %esp
|
||||||
|
fnstsw
|
||||||
|
shrl $5, %eax
|
||||||
|
andl $8, %eax
|
||||||
|
fldl MOX(inf_zero, %eax, 1)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
17: shll $30, %edx // sign bit for y in right position
|
||||||
|
addl $4, %esp
|
||||||
|
18: shrl $31, %edx
|
||||||
|
fldl MOX(inf_zero, %edx, 8)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>0
|
||||||
|
20: fstp %st(0) // y
|
||||||
|
testb $2, %dl
|
||||||
|
jz 21f // y > 0
|
||||||
|
|
||||||
|
// x is <EFBFBD>0 and y is < 0. We must find out whether y is an odd integer.
|
||||||
|
testb $2, %dh
|
||||||
|
jz 25f
|
||||||
|
|
||||||
|
fld %st // y : y
|
||||||
|
fistpl (%esp) // y
|
||||||
|
fildl (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 26f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is the number of bits small
|
||||||
|
// enough so that all are coming from the mantissa?
|
||||||
|
popl %edx
|
||||||
|
testb $1, %dl
|
||||||
|
jz 27f // jump if not odd
|
||||||
|
cmpl $0xff000000, %edx
|
||||||
|
jbe 27f // does not fit in mantissa bits
|
||||||
|
// It's an odd integer.
|
||||||
|
// Raise divide-by-zero exception and get minus infinity value.
|
||||||
|
fldl MO(one)
|
||||||
|
fdivl MO(zero)
|
||||||
|
fchs
|
||||||
|
ret
|
||||||
|
|
||||||
|
25: fstp %st(0)
|
||||||
|
26: popl %eax
|
||||||
|
27: // Raise divide-by-zero exception and get infinity value.
|
||||||
|
fldl MO(one)
|
||||||
|
fdivl MO(zero)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>0 and y is > 0. We must find out whether y is an odd integer.
|
||||||
|
21: testb $2, %dh
|
||||||
|
jz 22f
|
||||||
|
|
||||||
|
fld %st // y : y
|
||||||
|
fistpl (%esp) // y
|
||||||
|
fildl (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 23f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is the number of bits small
|
||||||
|
// enough so that all are coming from the mantissa?
|
||||||
|
popl %edx
|
||||||
|
testb $1, %dl
|
||||||
|
jz 24f // jump if not odd
|
||||||
|
cmpl $0xff000000, %edx
|
||||||
|
jbe 24f // does not fit in mantissa bits
|
||||||
|
// It's an odd integer.
|
||||||
|
fldl MO(mzero)
|
||||||
|
ret
|
||||||
|
|
||||||
|
22: fstp %st(0)
|
||||||
|
23: popl %eax
|
||||||
|
24: fldl MO(zero)
|
||||||
|
ret
|
||||||
|
|
||||||
END(__ieee754_powf)
|
END(__ieee754_powf)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ix87 specific implementation of pow function.
|
/* ix87 specific implementation of pow function.
|
||||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
@ -27,31 +27,77 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(infinity,@object)
|
||||||
|
inf_zero:
|
||||||
|
infinity:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
|
||||||
|
ASM_SIZE_DIRECTIVE(infinity)
|
||||||
|
ASM_TYPE_DIRECTIVE(zero,@object)
|
||||||
|
zero: .double 0.0
|
||||||
|
ASM_SIZE_DIRECTIVE(zero)
|
||||||
|
ASM_TYPE_DIRECTIVE(minf_mzero,@object)
|
||||||
|
minf_mzero:
|
||||||
|
minfinity:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
|
||||||
|
mzero:
|
||||||
|
.byte 0, 0, 0, 0, 0, 0, 0, 0x80
|
||||||
|
ASM_SIZE_DIRECTIVE(minf_mzero)
|
||||||
ASM_TYPE_DIRECTIVE(one,@object)
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
one: .double 1.0
|
one: .double 1.0
|
||||||
ASM_SIZE_DIRECTIVE(one)
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
ASM_TYPE_DIRECTIVE(limit,@object)
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
limit: .double 0.29
|
limit: .double 0.29
|
||||||
ASM_SIZE_DIRECTIVE(limit)
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
ASM_TYPE_DIRECTIVE(nan,@object)
|
||||||
|
nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
|
||||||
|
ASM_SIZE_DIRECTIVE(nan)
|
||||||
|
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
#define MO(op) op##@GOTOFF(%ecx)
|
#define MO(op) op##@GOTOFF(%ecx)
|
||||||
|
#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
|
||||||
#else
|
#else
|
||||||
#define MO(op) op
|
#define MO(op) op
|
||||||
|
#define MOX(op,x,f) op(,x,f)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.text
|
.text
|
||||||
ENTRY(__ieee754_powl)
|
ENTRY(__ieee754_powl)
|
||||||
fldt 4(%esp) // x
|
fldt 16(%esp) // y
|
||||||
fldt 16(%esp) // y : x
|
fxam
|
||||||
|
fnstsw
|
||||||
|
movb %ah, %dl
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x40, %ah // is y == 0 ?
|
||||||
|
je 11f
|
||||||
|
|
||||||
|
cmpb $0x05, %ah // is y == <EFBFBD>inf ?
|
||||||
|
je 12f
|
||||||
|
|
||||||
|
cmpb $0x01, %ah // is y == NaN ?
|
||||||
|
je 30f
|
||||||
|
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
call 1f
|
call 1f
|
||||||
1: popl %ecx
|
1: popl %ecx
|
||||||
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
fldt 4(%esp) // x : y
|
||||||
|
|
||||||
subl $8,%esp
|
subl $8,%esp
|
||||||
|
|
||||||
|
fxam
|
||||||
|
fnstsw
|
||||||
|
movb %ah, %dh
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x40, %ah
|
||||||
|
je 20f // x is <EFBFBD>0
|
||||||
|
|
||||||
|
cmpb $0x05, %ah
|
||||||
|
je 15f // x is <EFBFBD>inf
|
||||||
|
|
||||||
|
fxch // y : x
|
||||||
|
|
||||||
/* First see whether `y' is a natural number. In this case we
|
/* First see whether `y' is a natural number. In this case we
|
||||||
can use a more precise algorithm. */
|
can use a more precise algorithm. */
|
||||||
fld %st // y : y : x
|
fld %st // y : y : x
|
||||||
@ -63,13 +109,11 @@ ENTRY(__ieee754_powl)
|
|||||||
jne 2f
|
jne 2f
|
||||||
|
|
||||||
/* OK, we have an integer value for y. */
|
/* OK, we have an integer value for y. */
|
||||||
ftst // y : x
|
|
||||||
fstp %st(0) // x
|
|
||||||
fnstsw
|
|
||||||
sahf
|
|
||||||
popl %eax
|
popl %eax
|
||||||
popl %edx
|
popl %edx
|
||||||
jnc 4f // y >= 0, jump
|
orl $0, %edx
|
||||||
|
fstp %st(0) // x
|
||||||
|
jns 4f // y >= 0, jump
|
||||||
fdivrl MO(one) // 1/x (now referred to as x)
|
fdivrl MO(one) // 1/x (now referred to as x)
|
||||||
negl %eax
|
negl %eax
|
||||||
adcl $0, %edx
|
adcl $0, %edx
|
||||||
@ -87,7 +131,7 @@ ENTRY(__ieee754_powl)
|
|||||||
orl %edx, %ecx
|
orl %edx, %ecx
|
||||||
jnz 6b
|
jnz 6b
|
||||||
fstp %st(0) // ST*x
|
fstp %st(0) // ST*x
|
||||||
ret
|
30: ret
|
||||||
|
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
2: /* y is a real number. */
|
2: /* y is a real number. */
|
||||||
@ -117,4 +161,148 @@ ENTRY(__ieee754_powl)
|
|||||||
addl $8, %esp
|
addl $8, %esp
|
||||||
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
|
fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
// pow(x,<EFBFBD>0) = 1
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
11: fstp %st(0) // pop y
|
||||||
|
fldl MO(one)
|
||||||
|
ret
|
||||||
|
|
||||||
|
// y == <EFBFBD>inf
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
12: fstp %st(0) // pop y
|
||||||
|
fldt 4(%esp) // x
|
||||||
|
fabs
|
||||||
|
fcompl MO(one) // < 1, == 1, or > 1
|
||||||
|
fnstsw
|
||||||
|
andb $0x45, %ah
|
||||||
|
cmpb $0x45, %ah
|
||||||
|
je 13f // jump if x is NaN
|
||||||
|
|
||||||
|
cmpb $0x40, %ah
|
||||||
|
je 14f // jump if |x| == 1
|
||||||
|
|
||||||
|
shlb $1, %ah
|
||||||
|
xorb %ah, %dl
|
||||||
|
andl $2, %edx
|
||||||
|
fldl MOX(inf_zero, %edx, 4)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
14: fldl MO(nan)
|
||||||
|
faddl MO(zero) // raise invalid exception
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
13: fldt 4(%esp) // load x == NaN
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>inf
|
||||||
|
15: fstp %st(0) // y
|
||||||
|
testb $2, %dh
|
||||||
|
jz 16f // jump if x == +inf
|
||||||
|
|
||||||
|
// We must find out whether y is an odd integer.
|
||||||
|
fld %st // y : y
|
||||||
|
fistpll (%esp) // y
|
||||||
|
fildll (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 17f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is it odd?
|
||||||
|
popl %eax
|
||||||
|
popl %edx
|
||||||
|
andb $1, %al
|
||||||
|
jz 18f // jump if not odd
|
||||||
|
// It's an odd integer.
|
||||||
|
shrl $31, %edx
|
||||||
|
fldl MOX(minf_mzero, %edx, 8)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
16: fcompl MO(zero)
|
||||||
|
addl $8, %esp
|
||||||
|
fnstsw
|
||||||
|
shrl $5, %eax
|
||||||
|
andl $8, %eax
|
||||||
|
fldl MOX(inf_zero, %eax, 1)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
17: shll $30, %edx // sign bit for y in right position
|
||||||
|
addl $8, %esp
|
||||||
|
18: shrl $31, %edx
|
||||||
|
fldl MOX(inf_zero, %edx, 8)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>0
|
||||||
|
20: fstp %st(0) // y
|
||||||
|
testb $2, %dl
|
||||||
|
jz 21f // y > 0
|
||||||
|
|
||||||
|
// x is <EFBFBD>0 and y is < 0. We must find out whether y is an odd integer.
|
||||||
|
testb $2, %dh
|
||||||
|
jz 25f
|
||||||
|
|
||||||
|
fld %st // y : y
|
||||||
|
fistpll (%esp) // y
|
||||||
|
fildll (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 26f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is it odd?
|
||||||
|
popl %eax
|
||||||
|
popl %edx
|
||||||
|
andb $1, %al
|
||||||
|
jz 27f // jump if not odd
|
||||||
|
// It's an odd integer.
|
||||||
|
// Raise divide-by-zero exception and get minus infinity value.
|
||||||
|
fldl MO(one)
|
||||||
|
fdivl MO(zero)
|
||||||
|
fchs
|
||||||
|
ret
|
||||||
|
|
||||||
|
25: fstp %st(0)
|
||||||
|
26: popl %eax
|
||||||
|
popl %edx
|
||||||
|
27: // Raise divide-by-zero exception and get infinity value.
|
||||||
|
fldl MO(one)
|
||||||
|
fdivl MO(zero)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
// x is <EFBFBD>0 and y is > 0. We must find out whether y is an odd integer.
|
||||||
|
21: testb $2, %dh
|
||||||
|
jz 22f
|
||||||
|
|
||||||
|
fld %st // y : y
|
||||||
|
fistpll (%esp) // y
|
||||||
|
fildll (%esp) // int(y) : y
|
||||||
|
fucompp // <empty>
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jne 23f
|
||||||
|
|
||||||
|
// OK, the value is an integer, but is it odd?
|
||||||
|
popl %eax
|
||||||
|
popl %edx
|
||||||
|
andb $1, %al
|
||||||
|
jz 24f // jump if not odd
|
||||||
|
// It's an odd integer.
|
||||||
|
fldl MO(mzero)
|
||||||
|
ret
|
||||||
|
|
||||||
|
22: fstp %st(0)
|
||||||
|
23: popl %eax
|
||||||
|
popl %edx
|
||||||
|
24: fldl MO(zero)
|
||||||
|
ret
|
||||||
|
|
||||||
END(__ieee754_powl)
|
END(__ieee754_powl)
|
||||||
|
@ -30,9 +30,9 @@
|
|||||||
.text
|
.text
|
||||||
#endif
|
#endif
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
ASM_TYPE_DIRECTIVE(zero,@object)
|
ASM_TYPE_DIRECTIVE(minus1,@object)
|
||||||
zero: .double 0.0
|
minus1: .double -1.0
|
||||||
ASM_SIZE_DIRECTIVE(zero)
|
ASM_SIZE_DIRECTIVE(minus1)
|
||||||
ASM_TYPE_DIRECTIVE(one,@object)
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
one: .double 1.0
|
one: .double 1.0
|
||||||
ASM_SIZE_DIRECTIVE(one)
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
@ -79,7 +79,8 @@ ENTRY(__expm1)
|
|||||||
|
|
||||||
2: testl $0x200, %eax // Test sign.
|
2: testl $0x200, %eax // Test sign.
|
||||||
jz 3f // If positive, jump.
|
jz 3f // If positive, jump.
|
||||||
fldl MO(zero) // Set result to 0.
|
fstp %st
|
||||||
|
fldl MO(minus1) // Set result to -1.0.
|
||||||
3: ret
|
3: ret
|
||||||
END(__expm1)
|
END(__expm1)
|
||||||
weak_alias (__expm1, expm1)
|
weak_alias (__expm1, expm1)
|
||||||
|
@ -30,9 +30,9 @@
|
|||||||
.text
|
.text
|
||||||
#endif
|
#endif
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
ASM_TYPE_DIRECTIVE(zero,@object)
|
ASM_TYPE_DIRECTIVE(minus1,@object)
|
||||||
zero: .double 0.0
|
minus1: .double -1.0
|
||||||
ASM_SIZE_DIRECTIVE(zero)
|
ASM_SIZE_DIRECTIVE(minus1)
|
||||||
ASM_TYPE_DIRECTIVE(one,@object)
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
one: .double 1.0
|
one: .double 1.0
|
||||||
ASM_SIZE_DIRECTIVE(one)
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
@ -79,7 +79,8 @@ ENTRY(__expm1f)
|
|||||||
|
|
||||||
2: testl $0x200, %eax // Test sign.
|
2: testl $0x200, %eax // Test sign.
|
||||||
jz 3f // If positive, jump.
|
jz 3f // If positive, jump.
|
||||||
fldl MO(zero) // Set result to 0.
|
fstp %st
|
||||||
|
fldl MO(minus1) // Set result to -1.0.
|
||||||
3: ret
|
3: ret
|
||||||
END(__expm1f)
|
END(__expm1f)
|
||||||
weak_alias (__expm1f, expm1f)
|
weak_alias (__expm1f, expm1f)
|
||||||
|
@ -30,9 +30,9 @@
|
|||||||
.text
|
.text
|
||||||
#endif
|
#endif
|
||||||
.align ALIGNARG(4)
|
.align ALIGNARG(4)
|
||||||
ASM_TYPE_DIRECTIVE(zero,@object)
|
ASM_TYPE_DIRECTIVE(minus1,@object)
|
||||||
zero: .double 0.0
|
minus1: .double -1.0
|
||||||
ASM_SIZE_DIRECTIVE(zero)
|
ASM_SIZE_DIRECTIVE(minus1)
|
||||||
ASM_TYPE_DIRECTIVE(one,@object)
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
one: .double 1.0
|
one: .double 1.0
|
||||||
ASM_SIZE_DIRECTIVE(one)
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
@ -79,7 +79,8 @@ ENTRY(__expm1l)
|
|||||||
|
|
||||||
2: testl $0x200, %eax // Test sign.
|
2: testl $0x200, %eax // Test sign.
|
||||||
jz 3f // If positive, jump.
|
jz 3f // If positive, jump.
|
||||||
fldl MO(zero) // Set result to 0.
|
fstp %st
|
||||||
|
fldl MO(minus1) // Set result to -1.0.
|
||||||
3: ret
|
3: ret
|
||||||
END(__expm1l)
|
END(__expm1l)
|
||||||
weak_alias (__expm1l, expm1l)
|
weak_alias (__expm1l, expm1l)
|
||||||
|
@ -10,7 +10,7 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* isinfl(x) returns 1 is x is inf, else 0;
|
* isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0;
|
||||||
* no branching!
|
* no branching!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -26,11 +26,11 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
{
|
{
|
||||||
int32_t se,hx,lx;
|
int32_t se,hx,lx;
|
||||||
GET_LDOUBLE_WORDS(se,hx,lx,x);
|
GET_LDOUBLE_WORDS(se,hx,lx,x);
|
||||||
se &= 0x7fff;
|
|
||||||
se ^= 0x7fff;
|
|
||||||
/* This additional ^ 0x80000000 is necessary because in Intel's
|
/* This additional ^ 0x80000000 is necessary because in Intel's
|
||||||
internal representation the implicit one is explicit. */
|
internal representation of the implicit one is explicit. */
|
||||||
se |= (hx ^ 0x80000000) | lx;
|
lx |= (hx ^ 0x80000000) | ((se & 0x7fff) ^ 0x7fff);
|
||||||
return (se == 0);
|
lx |= -lx;
|
||||||
|
se &= 0x8000;
|
||||||
|
return ~(lx >> 31) & (1 - (se >> 14));
|
||||||
}
|
}
|
||||||
weak_alias (__isinfl, isinfl)
|
weak_alias (__isinfl, isinfl)
|
||||||
|
@ -11,6 +11,7 @@ RCSID("$NetBSD: $")
|
|||||||
ENTRY(__logbl)
|
ENTRY(__logbl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fxtract
|
fxtract
|
||||||
|
fstp %st
|
||||||
ret
|
ret
|
||||||
END (__logbl)
|
END (__logbl)
|
||||||
weak_alias (__logbl, logbl)
|
weak_alias (__logbl, logbl)
|
||||||
|
@ -11,6 +11,7 @@ ENTRY(__scalbn)
|
|||||||
fildl 12(%esp)
|
fildl 12(%esp)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
|
fstp %st(1)
|
||||||
ret
|
ret
|
||||||
END (__scalbn)
|
END (__scalbn)
|
||||||
weak_alias (__scalbn, scalbn)
|
weak_alias (__scalbn, scalbn)
|
||||||
|
@ -11,6 +11,7 @@ ENTRY(__scalbnf)
|
|||||||
fildl 8(%esp)
|
fildl 8(%esp)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
|
fstp %st(1)
|
||||||
ret
|
ret
|
||||||
END (__scalbnf)
|
END (__scalbnf)
|
||||||
weak_alias (__scalbnf, scalbnf)
|
weak_alias (__scalbnf, scalbnf)
|
||||||
|
@ -12,6 +12,7 @@ ENTRY(__scalbnl)
|
|||||||
fildl 16(%esp)
|
fildl 16(%esp)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
|
fstp %st(1)
|
||||||
ret
|
ret
|
||||||
END (__scalbnl)
|
END (__scalbnl)
|
||||||
weak_alias (__scalbnl, scalbnl)
|
weak_alias (__scalbnl, scalbnl)
|
||||||
|
136
sysdeps/libm-ieee754/e_atan2l.c
Normal file
136
sysdeps/libm-ieee754/e_atan2l.c
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/* e_atan2l.c -- long double version of e_atan2.c.
|
||||||
|
* Conversion to long double by Ulrich Drepper,
|
||||||
|
* Cygnus Support, drepper@cygnus.com.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ====================================================
|
||||||
|
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software is freely granted, provided that this notice
|
||||||
|
* is preserved.
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBM_SCCS) && !defined(lint)
|
||||||
|
static char rcsid[] = "$NetBSD: $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* __ieee754_atan2l(y,x)
|
||||||
|
* Method :
|
||||||
|
* 1. Reduce y to positive by atan2(y,x)=-atan2(-y,x).
|
||||||
|
* 2. Reduce x to positive by (if x and y are unexceptional):
|
||||||
|
* ARG (x+iy) = arctan(y/x) ... if x > 0,
|
||||||
|
* ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0,
|
||||||
|
*
|
||||||
|
* Special cases:
|
||||||
|
*
|
||||||
|
* ATAN2((anything), NaN ) is NaN;
|
||||||
|
* ATAN2(NAN , (anything) ) is NaN;
|
||||||
|
* ATAN2(+-0, +(anything but NaN)) is +-0 ;
|
||||||
|
* ATAN2(+-0, -(anything but NaN)) is +-pi ;
|
||||||
|
* ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2;
|
||||||
|
* ATAN2(+-(anything but INF and NaN), +INF) is +-0 ;
|
||||||
|
* ATAN2(+-(anything but INF and NaN), -INF) is +-pi;
|
||||||
|
* ATAN2(+-INF,+INF ) is +-pi/4 ;
|
||||||
|
* ATAN2(+-INF,-INF ) is +-3pi/4;
|
||||||
|
* ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2;
|
||||||
|
*
|
||||||
|
* Constants:
|
||||||
|
* The hexadecimal values are the intended ones for the following
|
||||||
|
* constants. The decimal values may be used, provided that the
|
||||||
|
* compiler will convert from decimal to binary accurately enough
|
||||||
|
* to produce the hexadecimal values shown.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "math.h"
|
||||||
|
#include "math_private.h"
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
static const long double
|
||||||
|
#else
|
||||||
|
static long double
|
||||||
|
#endif
|
||||||
|
tiny = 1.0e-4900L,
|
||||||
|
zero = 0.0,
|
||||||
|
pi_o_4 = 7.85398163397448309628202E-01L, /* 0x3FFE, 0xC90FDAA2, 0x2168C235 */
|
||||||
|
pi_o_2 = 1.5707963267948966192564E+00L, /* 0x3FFF, 0xC90FDAA2, 0x2168C235 */
|
||||||
|
pi = 3.14159265358979323851281E+00L, /* 0x4000, 0xC90FDAA2, 0x2168C235 */
|
||||||
|
pi_lo = -5.01655761266833202345176e-20L;/* 0xBFBE, 0xECE675D1, 0xFC8F8CBB */
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
long double __ieee754_atan2l(long double y, long double x)
|
||||||
|
#else
|
||||||
|
long double __ieee754_atan2l(y,x)
|
||||||
|
long double y,x;
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
long double z;
|
||||||
|
int32_t k,m,hx,hy,ix,iy;
|
||||||
|
u_int32_t sx,sy,lx,ly;
|
||||||
|
|
||||||
|
EXTRACT_LDOUBLE_WORDS(sx,hx,lx,x);
|
||||||
|
ix = sx&0x7fff;
|
||||||
|
lx |= hx ^ 0x80000000;
|
||||||
|
EXTRACT_LDOUBLE_WORDS(sy,hy,ly,y);
|
||||||
|
iy = sy&0x7fff;
|
||||||
|
ly |= hy ^ 0x80000000;
|
||||||
|
if(((2*ix|((lx|-lx)>>31))>0xfffe)||
|
||||||
|
((2*iy|((ly|-ly)>>31))>0xfffe)) /* x or y is NaN */
|
||||||
|
return x+y;
|
||||||
|
if((sx-0x3fff|lx)==0) return __atanl(y); /* x=1.0 */
|
||||||
|
m = ((sy>>15)&1)|((sx>>14)&2); /* 2*sign(x)+sign(y) */
|
||||||
|
|
||||||
|
/* when y = 0 */
|
||||||
|
if((iy|ly)==0) {
|
||||||
|
switch(m) {
|
||||||
|
case 0:
|
||||||
|
case 1: return y; /* atan(+-0,+anything)=+-0 */
|
||||||
|
case 2: return pi+tiny;/* atan(+0,-anything) = pi */
|
||||||
|
case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* when x = 0 */
|
||||||
|
if((ix|lx)==0) return (sy>=0x8000)? -pi_o_2-tiny: pi_o_2+tiny;
|
||||||
|
|
||||||
|
/* when x is INF */
|
||||||
|
if(ix==0x7fff) {
|
||||||
|
if(iy==0x7fff) {
|
||||||
|
switch(m) {
|
||||||
|
case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */
|
||||||
|
case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */
|
||||||
|
case 2: return 3.0*pi_o_4+tiny;/*atan(+INF,-INF)*/
|
||||||
|
case 3: return -3.0*pi_o_4-tiny;/*atan(-INF,-INF)*/
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch(m) {
|
||||||
|
case 0: return zero ; /* atan(+...,+INF) */
|
||||||
|
case 1: return -zero ; /* atan(-...,+INF) */
|
||||||
|
case 2: return pi+tiny ; /* atan(+...,-INF) */
|
||||||
|
case 3: return -pi-tiny ; /* atan(-...,-INF) */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* when y is INF */
|
||||||
|
if(iy==0x7fff) return (hy>=0x8000)? -pi_o_2-tiny: pi_o_2+tiny;
|
||||||
|
|
||||||
|
/* compute y/x */
|
||||||
|
k = sy-sx;
|
||||||
|
if(k > 70) z=pi_o_2+0.5*pi_lo; /* |y/x| > 2**70 */
|
||||||
|
else if(sx>=0x8000&&k<-70) z=0.0; /* |y|/x < -2**70 */
|
||||||
|
else z=__atanl(fabsl(y/x)); /* safe to do y/x */
|
||||||
|
switch (m) {
|
||||||
|
case 0: return z ; /* atan(+,+) */
|
||||||
|
case 1: {
|
||||||
|
u_int32_t sz;
|
||||||
|
GET_LDOUBLE_EXP(sz,z);
|
||||||
|
SET_LDOUBLE_EXP(z,sy ^ 0x8000);
|
||||||
|
}
|
||||||
|
return z ; /* atan(-,+) */
|
||||||
|
case 2: return pi-(z-pi_lo);/* atan(+,-) */
|
||||||
|
default: /* case 3 */
|
||||||
|
return (z-pi_lo)-pi;/* atan(-,-) */
|
||||||
|
}
|
||||||
|
}
|
@ -30,6 +30,7 @@ __fpclassifyl (long double x)
|
|||||||
int retval = FP_NORMAL;
|
int retval = FP_NORMAL;
|
||||||
|
|
||||||
GET_LDOUBLE_WORDS (ex, hx, lx, x);
|
GET_LDOUBLE_WORDS (ex, hx, lx, x);
|
||||||
|
hx &= 0x7fffffff;
|
||||||
hx |= lx;
|
hx |= lx;
|
||||||
ex &= 0x7fff;
|
ex &= 0x7fff;
|
||||||
if ((ex | hx) == 0)
|
if ((ex | hx) == 0)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Changed to return -1 for -Inf by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
* Public domain.
|
* Public domain.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -8,7 +9,7 @@ static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* isinf(x) returns 1 is x is inf, else 0;
|
* isinf(x) returns 1 is x is inf, -1 if x is -inf, else 0;
|
||||||
* no branching!
|
* no branching!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -22,12 +23,12 @@ static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $";
|
|||||||
double x;
|
double x;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int32_t hx,lx;
|
u_int32_t hx;
|
||||||
|
int32_t lx;
|
||||||
EXTRACT_WORDS(hx,lx,x);
|
EXTRACT_WORDS(hx,lx,x);
|
||||||
hx &= 0x7fffffff;
|
lx |= (hx & 0x7fffffff) ^ 0x7ff00000;
|
||||||
hx ^= 0x7ff00000;
|
lx |= -lx;
|
||||||
hx |= lx;
|
return ~(lx >> 31) & (1 - ((hx >> 30) & 2));
|
||||||
return (hx == 0);
|
|
||||||
}
|
}
|
||||||
weak_alias (__isinf, isinf)
|
weak_alias (__isinf, isinf)
|
||||||
#ifdef NO_LONG_DOUBLE
|
#ifdef NO_LONG_DOUBLE
|
||||||
|
@ -8,7 +8,7 @@ static char rcsid[] = "$NetBSD: s_isinff.c,v 1.3 1995/05/11 23:20:21 jtc Exp $";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* isinff(x) returns 1 is x is inf, else 0;
|
* isinff(x) returns 1 if x is inf, -1 if x is -inf, else 0;
|
||||||
* no branching!
|
* no branching!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -22,10 +22,11 @@ static char rcsid[] = "$NetBSD: s_isinff.c,v 1.3 1995/05/11 23:20:21 jtc Exp $";
|
|||||||
float x;
|
float x;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int32_t ix;
|
int32_t ix,t;
|
||||||
GET_FLOAT_WORD(ix,x);
|
GET_FLOAT_WORD(ix,x);
|
||||||
ix &= 0x7fffffff;
|
t = ix & 0x7fffffff;
|
||||||
ix ^= 0x7f800000;
|
t ^= 0x7f800000;
|
||||||
return (ix == 0);
|
t |= -t;
|
||||||
|
return ~(t >> 31) & (1 - ((ix & 0x80000000) >> 30));
|
||||||
}
|
}
|
||||||
weak_alias (__isinff, isinff)
|
weak_alias (__isinff, isinff)
|
||||||
|
@ -9,7 +9,7 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* isinfl(x) returns 1 is x is inf, else 0;
|
* isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0;
|
||||||
* no branching!
|
* no branching!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -25,9 +25,9 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
{
|
{
|
||||||
int32_t se,hx,lx;
|
int32_t se,hx,lx;
|
||||||
GET_LDOUBLE_WORDS(se,hx,lx,x);
|
GET_LDOUBLE_WORDS(se,hx,lx,x);
|
||||||
se &= 0x7fff;
|
hx |= lx | ((se & 0x7fff) ^ 0x7fff);
|
||||||
se ^= 0x7fff;
|
hx |= -hx;
|
||||||
se |= hx | lx;
|
se &= 0x8000;
|
||||||
return (se == 0);
|
return ~(hx >> 31) & (1 - (se >> 14));
|
||||||
}
|
}
|
||||||
weak_alias (__isinfl, isinfl)
|
weak_alias (__isinfl, isinfl)
|
||||||
|
@ -33,10 +33,10 @@ static const long double
|
|||||||
#else
|
#else
|
||||||
static long double
|
static long double
|
||||||
#endif
|
#endif
|
||||||
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
|
two54 = 1.80143985094819840000e+16, /* 0x4035, 0x00000000, 0x00000000 */
|
||||||
twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
|
twom54 = 5.55111512312578270212e-17, /* 0x3FC9, 0x00000000, 0x00000000 */
|
||||||
huge = 1.0e+300,
|
huge = 1.0e+4900L,
|
||||||
tiny = 1.0e-300;
|
tiny = 1.0e-4900L;
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
long double __scalbnl (long double x, int n)
|
long double __scalbnl (long double x, int n)
|
||||||
|
@ -34,11 +34,10 @@ static char rcsid[] = "$NetBSD: w_atan2.c,v 1.6 1995/05/10 20:48:39 jtc Exp $";
|
|||||||
#else
|
#else
|
||||||
double z;
|
double z;
|
||||||
z = __ieee754_atan2(y,x);
|
z = __ieee754_atan2(y,x);
|
||||||
if(_LIB_VERSION == _IEEE_||__isnan(x)||__isnan(y)) return z;
|
if(_LIB_VERSION != _SVID_||__isnan(x)||__isnan(y)) return z;
|
||||||
if(x==0.0&&y==0.0) {
|
if(x==0.0&&y==0.0) {
|
||||||
return __kernel_standard(y,x,3); /* atan2(+-0,+-0) */
|
return __kernel_standard(y,x,3); /* atan2(+-0,+-0) */
|
||||||
} else
|
return z;
|
||||||
return z;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
weak_alias (__atan2, atan2)
|
weak_alias (__atan2, atan2)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software is freely granted, provided that this notice
|
* software is freely granted, provided that this notice
|
||||||
* is preserved.
|
* is preserved.
|
||||||
* ====================================================
|
* ====================================================
|
||||||
*/
|
*/
|
||||||
@ -17,7 +17,7 @@
|
|||||||
static char rcsid[] = "$NetBSD: w_atan2f.c,v 1.3 1995/05/10 20:48:42 jtc Exp $";
|
static char rcsid[] = "$NetBSD: w_atan2f.c,v 1.3 1995/05/10 20:48:42 jtc Exp $";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wrapper atan2f(y,x)
|
* wrapper atan2f(y,x)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -38,11 +38,7 @@ static char rcsid[] = "$NetBSD: w_atan2f.c,v 1.3 1995/05/10 20:48:42 jtc Exp $";
|
|||||||
float z;
|
float z;
|
||||||
z = __ieee754_atan2f(y,x);
|
z = __ieee754_atan2f(y,x);
|
||||||
if(_LIB_VERSION == _IEEE_||__isnanf(x)||__isnanf(y)) return z;
|
if(_LIB_VERSION == _IEEE_||__isnanf(x)||__isnanf(y)) return z;
|
||||||
if(x==(float)0.0&&y==(float)0.0) {
|
return z;
|
||||||
/* atan2f(+-0,+-0) */
|
|
||||||
return (float)__kernel_standard((double)y,(double)x,103);
|
|
||||||
} else
|
|
||||||
return z;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
weak_alias (__atan2f, atan2f)
|
weak_alias (__atan2f, atan2f)
|
||||||
|
@ -39,10 +39,7 @@ static char rcsid[] = "$NetBSD: $";
|
|||||||
long double z;
|
long double z;
|
||||||
z = __ieee754_atan2l(y,x);
|
z = __ieee754_atan2l(y,x);
|
||||||
if(_LIB_VERSION == _IEEE_||__isnanl(x)||__isnanl(y)) return z;
|
if(_LIB_VERSION == _IEEE_||__isnanl(x)||__isnanl(y)) return z;
|
||||||
if(x==0.0&&y==0.0) {
|
return z;
|
||||||
return __kernel_standard(y,x,203); /* atan2l(+-0,+-0) */
|
|
||||||
} else
|
|
||||||
return z;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
weak_alias (__atan2l, atan2l)
|
weak_alias (__atan2l, atan2l)
|
||||||
|
@ -43,7 +43,10 @@
|
|||||||
if(y==0.0)
|
if(y==0.0)
|
||||||
return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
|
return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
|
||||||
if(__finite(y)&&y<0.0)
|
if(__finite(y)&&y<0.0)
|
||||||
return __kernel_standard(x,y,23); /* pow(0.0,negative) */
|
if (signbit (x) && signbit (z))
|
||||||
|
return __kernel_standard(x,y,23); /* pow(-0.0,negative) */
|
||||||
|
else
|
||||||
|
return __kernel_standard(x,y,43); /* pow(+0.0,negative) */
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
if(!__finite(z)) {
|
if(!__finite(z)) {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software is freely granted, provided that this notice
|
* software is freely granted, provided that this notice
|
||||||
* is preserved.
|
* is preserved.
|
||||||
* ====================================================
|
* ====================================================
|
||||||
*/
|
*/
|
||||||
@ -17,7 +17,7 @@
|
|||||||
static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
|
static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wrapper powf(x,y) return x**y
|
* wrapper powf(x,y) return x**y
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -39,19 +39,22 @@ static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
|
|||||||
z=__ieee754_powf(x,y);
|
z=__ieee754_powf(x,y);
|
||||||
if(_LIB_VERSION == _IEEE_|| __isnanf(y)) return z;
|
if(_LIB_VERSION == _IEEE_|| __isnanf(y)) return z;
|
||||||
if(__isnanf(x)) {
|
if(__isnanf(x)) {
|
||||||
if(y==(float)0.0)
|
if(y==(float)0.0)
|
||||||
/* powf(NaN,0.0) */
|
/* powf(NaN,0.0) */
|
||||||
return (float)__kernel_standard((double)x,(double)y,142);
|
return (float)__kernel_standard((double)x,(double)y,142);
|
||||||
else
|
else
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
if(x==(float)0.0){
|
if(x==(float)0.0){
|
||||||
if(y==(float)0.0)
|
if(y==(float)0.0)
|
||||||
/* powf(0.0,0.0) */
|
/* powf(0.0,0.0) */
|
||||||
return (float)__kernel_standard((double)x,(double)y,120);
|
return (float)__kernel_standard((double)x,(double)y,120);
|
||||||
if(__finitef(y)&&y<(float)0.0)
|
if(__finitef(y)&&y<(float)0.0)
|
||||||
|
if (signbit (x) && signbit (z))
|
||||||
/* powf(0.0,negative) */
|
/* powf(0.0,negative) */
|
||||||
return (float)__kernel_standard((double)x,(double)y,123);
|
return (float)__kernel_standard((double)x,(double)y,123);
|
||||||
|
else
|
||||||
|
return (float)__kernel_standard((double)x,(double)y,143);
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
if(!__finitef(z)) {
|
if(!__finitef(z)) {
|
||||||
@ -59,11 +62,11 @@ static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
|
|||||||
if(__isnanf(z))
|
if(__isnanf(z))
|
||||||
/* powf neg**non-int */
|
/* powf neg**non-int */
|
||||||
return (float)__kernel_standard((double)x,(double)y,124);
|
return (float)__kernel_standard((double)x,(double)y,124);
|
||||||
else
|
else
|
||||||
/* powf overflow */
|
/* powf overflow */
|
||||||
return (float)__kernel_standard((double)x,(double)y,121);
|
return (float)__kernel_standard((double)x,(double)y,121);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(z==(float)0.0&&__finitef(x)&&__finitef(y))
|
if(z==(float)0.0&&__finitef(x)&&__finitef(y))
|
||||||
/* powf underflow */
|
/* powf underflow */
|
||||||
return (float)__kernel_standard((double)x,(double)y,122);
|
return (float)__kernel_standard((double)x,(double)y,122);
|
||||||
|
@ -45,7 +45,10 @@
|
|||||||
if(y==0.0)
|
if(y==0.0)
|
||||||
return __kernel_standard(x,y,220); /* pow(0.0,0.0) */
|
return __kernel_standard(x,y,220); /* pow(0.0,0.0) */
|
||||||
if(__finite(y)&&y<0.0)
|
if(__finite(y)&&y<0.0)
|
||||||
return __kernel_standard(x,y,223); /* pow(0.0,negative) */
|
if (signbit (x) && signbit (z))
|
||||||
|
return __kernel_standard(x,y,223); /* pow(-0.0,negative) */
|
||||||
|
else
|
||||||
|
return __kernel_standard(x,y,243); /* pow(+0.0,negative) */
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
if(!__finitel(z)) {
|
if(!__finitel(z)) {
|
||||||
|
92
sysdeps/m68k/huge_val.h
Normal file
92
sysdeps/m68k/huge_val.h
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* `HUGE_VAL' constants for m68k (where it is infinity).
|
||||||
|
Used by <stdlib.h> and <math.h> functions for overflow.
|
||||||
|
Copyright (C) 1992, 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
|
||||||
|
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 _HUGE_VAL_H
|
||||||
|
#define _HUGE_VAL_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <endian.h>
|
||||||
|
|
||||||
|
/* IEEE positive infinity (-HUGE_VAL is negative infinity). */
|
||||||
|
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
#define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
#endif
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __huge_val_t union { unsigned char __c[8]; double __d; }
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define HUGE_VAL (__extension__ \
|
||||||
|
((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d)
|
||||||
|
#else /* Not GCC. */
|
||||||
|
static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
|
||||||
|
#define HUGE_VAL (__huge_val.__d)
|
||||||
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
|
/* ISO C 9X extensions: (float) HUGE_VALF and (long double) HUGE_VALL. */
|
||||||
|
|
||||||
|
#ifdef __USE_ISOC9X
|
||||||
|
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
#define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 }
|
||||||
|
#endif
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __huge_valf_t union { unsigned char __c[4]; float __f; }
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define HUGE_VALF (__extension__ \
|
||||||
|
((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f)
|
||||||
|
#else /* Not GCC. */
|
||||||
|
static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
|
||||||
|
#define HUGE_VALF (__huge_valf.__f)
|
||||||
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
#define __HUGE_VALL_bytes { 0x7f, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
#endif
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __huge_vall_t union { unsigned char __c[12]; long double __ld; }
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define HUGE_VALL (__extension__ \
|
||||||
|
((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld)
|
||||||
|
#else /* Not GCC. */
|
||||||
|
static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes };
|
||||||
|
#define HUGE_VALL (__huge_vall.__ld)
|
||||||
|
#endif /* GCC. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Expression representing positive infinity. Here it is the same as
|
||||||
|
HUGE_VALF. */
|
||||||
|
#define INFINITY HUGE_VALF
|
||||||
|
|
||||||
|
#endif /* __USE_ISOC9X. */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* huge_val.h */
|
@ -1,5 +1,5 @@
|
|||||||
/* Test for access to FILE using effective UID and GID. Hurd version.
|
/* Test for access to FILE using effective UID and GID. Hurd version.
|
||||||
Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1995, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -24,7 +24,7 @@ Cambridge, MA 02139, USA. */
|
|||||||
#include <hurd.h>
|
#include <hurd.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
euidaccess (file, type)
|
__euidaccess (file, type)
|
||||||
const char *file;
|
const char *file;
|
||||||
int type;
|
int type;
|
||||||
{
|
{
|
||||||
@ -56,3 +56,4 @@ euidaccess (file, type)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
weak_alias (__euidaccess, euidaccess)
|
||||||
|
@ -1,25 +1,26 @@
|
|||||||
/* isfdtype - Determine whether descriptor has given property.
|
/* Determine whether descriptor has given property.
|
||||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
isfdtype (int fildes, int fdtype)
|
isfdtype (int fildes, int fdtype)
|
||||||
@ -33,5 +34,5 @@ isfdtype (int fildes, int fdtype)
|
|||||||
__set_errno (save_error);
|
__set_errno (save_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result ?: (st.st_mode & S_IFMT) == fdtype;
|
return result ?: (st.st_mode & S_IFMT) == (mode_t) fdtype;
|
||||||
}
|
}
|
||||||
|
@ -98,8 +98,8 @@ elf_machine_load_address (void)
|
|||||||
MAP is the object containing the reloc. */
|
MAP is the object containing the reloc. */
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
elf_machine_rela (struct link_map *map,
|
elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
||||||
const Elf32_Rela *reloc, const Elf32_Sym *sym)
|
const Elf32_Sym *sym, const struct r_found_version *version)
|
||||||
{
|
{
|
||||||
Elf32_Addr *const reloc_addr = (void *) (map->l_addr + reloc->r_offset);
|
Elf32_Addr *const reloc_addr = (void *) (map->l_addr + reloc->r_offset);
|
||||||
Elf32_Addr loadbase;
|
Elf32_Addr loadbase;
|
||||||
@ -107,31 +107,31 @@ elf_machine_rela (struct link_map *map,
|
|||||||
switch (ELF32_R_TYPE (reloc->r_info))
|
switch (ELF32_R_TYPE (reloc->r_info))
|
||||||
{
|
{
|
||||||
case R_SPARC_COPY:
|
case R_SPARC_COPY:
|
||||||
loadbase = RESOLVE (&sym, DL_LOOKUP_NOEXEC);
|
loadbase = RESOLVE (&sym, version, DL_LOOKUP_NOEXEC);
|
||||||
memcpy (reloc_addr, (void *) (loadbase + sym->st_value), sym->st_size);
|
memcpy (reloc_addr, (void *) (loadbase + sym->st_value), sym->st_size);
|
||||||
break;
|
break;
|
||||||
case R_SPARC_GLOB_DAT:
|
case R_SPARC_GLOB_DAT:
|
||||||
case R_SPARC_32:
|
case R_SPARC_32:
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
*reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
*reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend);
|
+ reloc->r_addend);
|
||||||
break;
|
break;
|
||||||
case R_SPARC_JMP_SLOT:
|
case R_SPARC_JMP_SLOT:
|
||||||
loadbase = RESOLVE (&sym, DL_LOOKUP_NOPLT);
|
loadbase = RESOLVE (&sym, version, DL_LOOKUP_NOPLT);
|
||||||
{
|
{
|
||||||
Elf32_Addr value = ((sym ? (loadbase + sym->st_value) : 0)
|
Elf32_Addr value = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend);
|
+ reloc->r_addend);
|
||||||
reloc_addr[1] = OPCODE_SETHI | (value >> 10);
|
reloc_addr[1] = OPCODE_SETHI_G1 | (value >> 10);
|
||||||
reloc_addr[2] = OPCODE_JMP_G1 | (value & 0x3ff);
|
reloc_addr[2] = OPCODE_JMP_G1 | (value & 0x3ff);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R_SPARC_8:
|
case R_SPARC_8:
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
*(char *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
*(char *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend);
|
+ reloc->r_addend);
|
||||||
break;
|
break;
|
||||||
case R_SPARC_16:
|
case R_SPARC_16:
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
*(short *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
*(short *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend);
|
+ reloc->r_addend);
|
||||||
break;
|
break;
|
||||||
@ -139,19 +139,19 @@ elf_machine_rela (struct link_map *map,
|
|||||||
*reloc_addr += map->l_addr + reloc->r_addend;
|
*reloc_addr += map->l_addr + reloc->r_addend;
|
||||||
break;
|
break;
|
||||||
case R_SPARC_DISP8:
|
case R_SPARC_DISP8:
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
*(char *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
*(char *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend
|
+ reloc->r_addend
|
||||||
- (Elf32_Addr) reloc_addr);
|
- (Elf32_Addr) reloc_addr);
|
||||||
break;
|
break;
|
||||||
case R_SPARC_DISP16:
|
case R_SPARC_DISP16:
|
||||||
loadbase = (*resolve) (&sym, (Elf32_Addr) reloc_addr, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
*(short *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
*(short *) reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend
|
+ reloc->r_addend
|
||||||
- (Elf32_Addr) reloc_addr);
|
- (Elf32_Addr) reloc_addr);
|
||||||
break;
|
break;
|
||||||
case R_SPARC_DISP32:
|
case R_SPARC_DISP32:
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
*reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
*reloc_addr = ((sym ? (loadbase + sym->st_value) : 0)
|
||||||
+ reloc->r_addend
|
+ reloc->r_addend
|
||||||
- (Elf32_Addr) reloc_addr);
|
- (Elf32_Addr) reloc_addr);
|
||||||
@ -160,17 +160,27 @@ elf_machine_rela (struct link_map *map,
|
|||||||
{
|
{
|
||||||
unsigned int saddr;
|
unsigned int saddr;
|
||||||
|
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
saddr = (loadbase ? loadbase : map->l_addr) + reloc->r_addend;
|
saddr = (loadbase ? loadbase : map->l_addr) + reloc->r_addend;
|
||||||
|
|
||||||
*reloc_addr = (*reloc_addr & ~0x3ff) | (saddr & 0x3ff);
|
*reloc_addr = (*reloc_addr & ~0x3ff) | (saddr & 0x3ff);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case R_SPARC_WDISP30:
|
||||||
|
{
|
||||||
|
unsigned int saddr;
|
||||||
|
|
||||||
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
|
saddr = (loadbase ? loadbase : map->l_addr) + reloc->r_addend;
|
||||||
|
*reloc_addr = ((*reloc_addr & 0xc0000000)
|
||||||
|
| ((saddr - (unsigned int) reloc_addr)>>2));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case R_SPARC_HI22:
|
case R_SPARC_HI22:
|
||||||
{
|
{
|
||||||
unsigned int saddr;
|
unsigned int saddr;
|
||||||
|
|
||||||
loadbase = RESOLVE (&sym, 0);
|
loadbase = RESOLVE (&sym, version, 0);
|
||||||
saddr = (loadbase ? loadbase : map->l_addr) + reloc->r_addend;
|
saddr = (loadbase ? loadbase : map->l_addr) + reloc->r_addend;
|
||||||
|
|
||||||
*reloc_addr = (*reloc_addr & 0xffc00000)|(saddr >> 10);
|
*reloc_addr = (*reloc_addr & 0xffc00000)|(saddr >> 10);
|
||||||
@ -199,9 +209,7 @@ elf_machine_lazy_rel (struct link_map *map, const Elf32_Rela *reloc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ELF_ADJUST_ARG(arg) __asm__("\tadd %%fp,64,%0\n" : "=r" (arg))
|
#endif /* RESOLVE */
|
||||||
|
|
||||||
#endif /* RESOLV */
|
|
||||||
|
|
||||||
/* Nonzero iff TYPE describes relocation of a PLT entry, so
|
/* Nonzero iff TYPE describes relocation of a PLT entry, so
|
||||||
PLT entries should not be allowed to define the value. */
|
PLT entries should not be allowed to define the value. */
|
||||||
@ -285,8 +293,49 @@ _dl_runtime_resolve:
|
|||||||
.globl _start\n\
|
.globl _start\n\
|
||||||
.type _start,@function\n\
|
.type _start,@function\n\
|
||||||
_start:\n\
|
_start:\n\
|
||||||
|
/* Pass pointer to argument block to _dl_start. */\n\
|
||||||
|
add %sp,64,%o0\n\
|
||||||
call _dl_start\n\
|
call _dl_start\n\
|
||||||
nop\n\
|
nop\n\
|
||||||
call %o0\n\
|
\n\
|
||||||
|
mov %o0,%l0\n\
|
||||||
|
\n\
|
||||||
|
2:\n\
|
||||||
|
call 1f\n\
|
||||||
|
nop\n\
|
||||||
|
1:\n\
|
||||||
|
sethi %hi(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l2\n\
|
||||||
|
sethi %hi(_dl_default_scope),%l3\n\
|
||||||
|
or %l2,%lo(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l2\n\
|
||||||
|
or %l3,%lo(_dl_default_scope),%l3\n\
|
||||||
|
add %o7,%l2,%l1\n\
|
||||||
|
# %l1 has the GOT. %l3 has _dl_default_scope offset\n\
|
||||||
|
# Now, load _dl_default_scope [2]\n\
|
||||||
|
add %l3,4,%l3\n\
|
||||||
|
ld [%l1+%l3],%l4\n\
|
||||||
|
# %l4 has _dl_default_scope [2]\n\
|
||||||
|
# call _dl_init_next until it returns 0, pass _dl_default_scope [2]\n\
|
||||||
|
3:\n\
|
||||||
|
call _dl_init_next\n\
|
||||||
|
mov %l4,%o0\n\
|
||||||
|
cmp %o0,%g0\n\
|
||||||
|
bz,a 4f\n\
|
||||||
|
nop\n\
|
||||||
|
call %o0\n\
|
||||||
|
nop\n\
|
||||||
|
b,a 3b\n\
|
||||||
|
4:\n\
|
||||||
|
# Clear the _dl_starting_up variable and pass _dl_fini in %g1 as per ELF ABI.\n\
|
||||||
|
sethi %hi(_dl_starting_up),%l4\n\
|
||||||
|
sethi %hi(_dl_fini),%l3\n\
|
||||||
|
or %l4,%lo(_dl_starting_up),%l4\n\
|
||||||
|
or %l3,%lo(_dl_fini),%l3\n\
|
||||||
|
# clear _dl_starting_up\n\
|
||||||
|
ld [%l1+%l4],%l5\n\
|
||||||
|
st %g0,[%l5]\n\
|
||||||
|
# load out fini function for atexit in %g1\n\
|
||||||
|
ld [%l3+%l1],%g1\n\
|
||||||
|
# jump to the user program entry point.\n\
|
||||||
|
jmpl %l0,%g0\n\
|
||||||
nop\n\
|
nop\n\
|
||||||
");
|
");
|
||||||
|
4
sysdeps/sparc/elf/Makefile
Normal file
4
sysdeps/sparc/elf/Makefile
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Sparc/ELF specific definitions.
|
||||||
|
|
||||||
|
# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
|
||||||
|
ASFLAGS-.so = -fPIC
|
68
sysdeps/sparc/elf/start.c
Normal file
68
sysdeps/sparc/elf/start.c
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* Copyright (C) 1991, 1992, 1993, 1994, 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 <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
extern char **__environ;
|
||||||
|
|
||||||
|
extern void __libc_init_first __P ((int argc, char **argv, char **envp));
|
||||||
|
extern int main __P ((int argc, char **argv, char **envp));
|
||||||
|
|
||||||
|
register long int sp asm("%sp"), fp asm("%fp");
|
||||||
|
|
||||||
|
void
|
||||||
|
_start (void)
|
||||||
|
{
|
||||||
|
/* It is important that these be declared `register'.
|
||||||
|
Otherwise, when compiled without optimization, they are put on the
|
||||||
|
stack, which loses completely after we zero the FP. */
|
||||||
|
register int argc;
|
||||||
|
register char **argv, **envp;
|
||||||
|
register long int g1 asm ("%g1");
|
||||||
|
unsigned long int copy_g1 = g1;
|
||||||
|
|
||||||
|
/* Unwind the frame built when we entered the function. */
|
||||||
|
asm("restore");
|
||||||
|
if (copy_g1)
|
||||||
|
atexit (copy_g1);
|
||||||
|
|
||||||
|
/* And clear the frame pointer. */
|
||||||
|
fp = 0;
|
||||||
|
|
||||||
|
/* The argument info starts after one register
|
||||||
|
window (64 bytes) past the SP. */
|
||||||
|
argc = ((int *) sp)[16];
|
||||||
|
argv = (char **) &((int *) sp)[17];
|
||||||
|
envp = &argv[argc + 1];
|
||||||
|
__environ = envp;
|
||||||
|
|
||||||
|
/* Allocate 24 bytes of stack space for the register save area. */
|
||||||
|
sp -= 24;
|
||||||
|
__libc_init_first (argc, argv, envp);
|
||||||
|
#ifdef ELF_INIT_FINI
|
||||||
|
{
|
||||||
|
extern void _fini (void);
|
||||||
|
atexit (_fini);
|
||||||
|
_init ();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
exit (main (argc, argv, envp));
|
||||||
|
}
|
@ -1,21 +1,21 @@
|
|||||||
/* O_*, F_*, FD_* bit values for stub configuration.
|
/* O_*, F_*, FD_* bit values for stub configuration.
|
||||||
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
/* These values should be changed as appropriate for your system. */
|
/* These values should be changed as appropriate for your system. */
|
||||||
|
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/* O_*, F_*, FD_* bit values for 4.4 BSD.
|
/* O_*, F_*, FD_* bit values for 4.4 BSD.
|
||||||
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifndef _FCNTLBITS_H
|
#ifndef _FCNTLBITS_H
|
||||||
|
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/* O_*, F_*, FD_* bit values for 4.3 BSD.
|
/* O_*, F_*, FD_* bit values for 4.3 BSD.
|
||||||
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifndef _FCNTLBITS_H
|
#ifndef _FCNTLBITS_H
|
||||||
|
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/* O_*, F_*, FD_* bit values for SunOS 4.
|
/* O_*, F_*, FD_* bit values for SunOS 4.
|
||||||
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifndef _FCNTLBITS_H
|
#ifndef _FCNTLBITS_H
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ Cambridge, MA 02139, USA. */
|
|||||||
#define O_EXCL 0x0800 /* Fail if file already exists. */
|
#define O_EXCL 0x0800 /* Fail if file already exists. */
|
||||||
#define O_TRUNC 0x0400 /* Truncate file to zero length. */
|
#define O_TRUNC 0x0400 /* Truncate file to zero length. */
|
||||||
#define O_NOCTTY 0x8000 /* Don't assign a controlling terminal. */
|
#define O_NOCTTY 0x8000 /* Don't assign a controlling terminal. */
|
||||||
#if defined (__USE_BSD) || defined (__USE_SVID)
|
#if defined __USE_BSD || defined __USE_SVID
|
||||||
#define O_ASYNC 0x0040 /* Send SIGIO to owner when data is ready. */
|
#define O_ASYNC 0x0040 /* Send SIGIO to owner when data is ready. */
|
||||||
#define O_FSYNC 0x2000 /* Synchronous writes. */
|
#define O_FSYNC 0x2000 /* Synchronous writes. */
|
||||||
#define O_SYNC O_FSYNC
|
#define O_SYNC O_FSYNC
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/* O_*, F_*, FD_* bit values for Ultrix 4.
|
/* O_*, F_*, FD_* bit values for Ultrix 4.
|
||||||
Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifndef _FCNTLBITS_H
|
#ifndef _FCNTLBITS_H
|
||||||
|
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/* O_*, F_*, FD_* bit values for SVR4 and Irix 4.
|
/* O_*, F_*, FD_* bit values for general Unix system.
|
||||||
Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1995, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifndef _FCNTLBITS_H
|
#ifndef _FCNTLBITS_H
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user