diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-08-02 21:00:51 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-08-02 21:00:51 +0000 |
commit | 8f2ece695d8822e9ecc63ecd157e90bf17a6fe65 (patch) | |
tree | 8391ab64ce8c9c6e45d137905f75f1d17c9ed987 /sysdeps/i386 | |
parent | 3996f34b46043ed8ea8fdc6f44377d969d64396b (diff) | |
download | glibc-8f2ece695d8822e9ecc63ecd157e90bf17a6fe65.tar.gz glibc-8f2ece695d8822e9ecc63ecd157e90bf17a6fe65.tar.xz glibc-8f2ece695d8822e9ecc63ecd157e90bf17a6fe65.zip |
Update. cvs/libc-ud-970802
1997-08-02 21:27 Ulrich Drepper <drepper@cygnus.com> * inet/Makefile (headers): Rename netinet/inbits.h to bits/in.h. * inet/netinet/in.h: Include bits/in.h instead of netinet/inbits.h. * sysdeps/generic/netinet/inbits.h: Move to... * sysdeps/generic/bits/in.h: ... here. * sysdeps/unix/sysv/linux/bits/inbits.h: Move to ... * sysdeps/unix/sysv/linux/bits/in.h: ... here. * nis/Makefile (headers): Add bits/nislib.h. * nis/rpcsvc/nislib.h: Moved to .... * nis/bits/nislib.h: ... here. * nis/nss_compat/compat-grp.c: Don't include <rpcsvc/nislib.h>. * nis/nss_compat/compat-pwd.c: Likewise. * nis/nss_compat/compat-spwd.c: Likewise. * nis/nss_nisplus/nisplus-alias.c: Likewise. * nis/nss_nisplus/nisplus-ethers.c: Likewise. * nis/nss_nisplus/nisplus-grp.c: Likewise. * nis/nss_nisplus/nisplus-hosts.c: Likewise. * nis/nss_nisplus/nisplus-netgrp.c: Likewise. * nis/nss_nisplus/nisplus-ntework.c: Likewise. * nis/nss_nisplus/nisplus-proto.c: Likewise. * nis/nss_nisplus/nisplus-publickey.c: Likewise. * nis/nss_nisplus/nisplus-pwd.c: Likewise. * nis/nss_nisplus/nisplus-rpc.c: Likewise. * nis/nss_nisplus/nisplus-service.c: Likewise. * nis/nss_nisplus/nisplus-spwd.c: Likewise. * nis/rpcsvc/nis.x: Include bits/nislib.h, not rpcsvc/nislib.h. * nis/rpcsvc/nis.h: Likewise. * inet/getnameinfo.c (nrl_domainname): Change return type to const char *. (getnameinfo): Change type of local variable c to const char *. * inet/inet_ntoa.c: Rewrite to use __libc_once for initialization. * stdlib/fmtmsg.c: Likewise. * intl/bindtextdom.c: Update from latest gettext. * intl/dcgettext.c: Likewise. * intl/finddomain.c: Likewise. * intl/l10nflist.c: Likewise. * intl/localealias.c: Likewise. * intl/textdomain.c: Likewise. * login/getutid_r.c: Remove parameter to setutent call. * login/getutline_r.c: Likewise. * posix/wordexp.c: Complete rewrite. Not fully implemented yet, though. Patch by Tim Waugh <tim@cyberelk.demon.co.uk>. * stdio-common/printf_fp.c: Remove relative include paths. * stdio-common/printf_fphex.c: Likewise. * sysdeps/generic/crypt.h: Cleanup. Don't define non standard elements unless __USE_GNU. * sysdeps/generic/vlimit.c: Pretty print. * sysdeps/generic/vtimes.c: Likewise. * sysdeps/i386/elf/bsd-_setjmp.S: New file. Empty dummy file. * sysdeps/i386/elf/bsd-setjmp.S: New file. Empty dummy file. * sysdeps/i386/elf/setjmp.S: New file. Define __setjmp and also weak definitions of setjmp and _setjmp. * sysdeps/i386/fpu/bits/mathinline.h: More patches by John Bowman. * sysdeps/stub/if_index.h: Set errno in all functions and add stub warnings. * sysdeps/stub/libc-lock.h: Add __libc_once. 1997-08-02 01:57 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/ptrace.c: Don't set errno in error case since the __syscall_ptrace call already did this. Reported by Philip Gladstone <philip@talon.raptor.com>. 1997-07-29 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/unix/sysv/linux/sys/fsuid.h: Change include <gnu/types.h> to <sys/types.h>. 1997-08-01 23:18 Ulrich Drepper <drepper@cygnus.com> * csu/defs.awk: Fix regexp for end and align. Patch by Klaus Espenlaub <kespenla@hydra.informatik.uni-ulm.de>. * locale/programs/localedef.c (print_escaped): New function. (show_info): Use print_escaped if strings can control unprintable characters. Patch by Jochen Hein <jochen.hein@delphi.central.de>. 1997-08-01 18:45 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * nis/nss_nisplus/nisplus-alias.c: Fix NULL pointer problems * nis/nss_nisplus/nisplus-grp.c: Likewise. 1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * elf/dl-profile.c (_dl_start_profile): Use _dl_sysdep_error instead of fprintf. 1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * manual/socket.texi (Host Address Functions): Fix arguments of @deftypefun. 1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * elf/dl-runtime.c: Avoid warning about profile_fixup being unused. * sysdeps/m68k/dl-machine.h: Add support for shared library profiling. 1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * md5-crypt/Makefile (extra-objs): Add onlymd5-crypt.o for dependencies. 1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Make-dist (subdirs): Distribute both aout and elf. 1997-07-31 23:04 Mark Kettenis <kettenis@phys.uva.nl> * login/utmp-private.h: Remove reset argument from backend setutent. * login/getutent_r.c (__setutent): Allways call the setutent function in the daemon backend. (setutent_unknown): Function removed. (getutent_unknown, pututline_unknown): Call __setutent instead of setutent_unknown. * login/utmp_file.c (setutent_file): Removed reset argument. All callers changed. * login/utmp_daemon.c (setutent_daemon): Removed reset argument. All callers changed. Try to open connection even if a previous connection failed, but first check if the sockets exist in the filesystem. * login/utmp_daemon.c (pututline_daemon): Try to open connection before reporting failure. * login/programs/database.c (open_database): Create compatibility file if it does not already exist. Supply mode argument in open calls to guarantee that created files have the proper protection. * login/programs/utmpd.c (main): Remove files created by a previous `bind' before creating sockets. Suggested by a sun <asum@zoology.washington.edu>. 1997-07-29 Andreas Jaeger <aj@arthur.rhein-neckar.de> * math/libm-test.c: Remove unneeded function check_int_exec. * BUGS: Correct typos. * gmon/gmon.c: Add alias for monstartup, declare _strerror_internal. 1997-07-30 Andreas Jaeger <aj@arthur.rhein-neckar.de> * manual/socket.texi (Host Address Functions): Reformat inet_ntop entry to confirm with expected behaviour of some scripts. * libc.map: Add functions/variables in global namespace, remove wildcards. 1997-07-29 Andreas Jaeger <aj@arthur.rhein-neckar.de> * resolv/libresolv.map: Add variables and routines used by named, nslookup and other bind utils. * libc.map: Likewise. 1997-07-31 00:35 Philip Blundell <Philip.Blundell@pobox.com> * sysdeps/unix/sysv/linux/if_index.c: Rewrite to avoid using /proc filesystem. * inet/test_ifindex.c: New file. * inet/Makefile (tests): Add test_ifindex. 1997-08-01 04:25 Ulrich Drepper <drepper@cygnus.com> * nis/nss_nisplus/nisplus-parser.c: Fix another bug in the parser. Patch by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>. * manual/errno.texi: Fix typo. Reported by Erik Talvola <etalvo@sapient.com>. (write_hist): Remove dependency on 32 bit int.
Diffstat (limited to 'sysdeps/i386')
-rw-r--r-- | sysdeps/i386/elf/bsd-_setjmp.S | 1 | ||||
-rw-r--r-- | sysdeps/i386/elf/bsd-setjmp.S | 1 | ||||
-rw-r--r-- | sysdeps/i386/elf/setjmp.S | 72 | ||||
-rw-r--r-- | sysdeps/i386/fpu/bits/mathinline.h | 71 |
4 files changed, 125 insertions, 20 deletions
diff --git a/sysdeps/i386/elf/bsd-_setjmp.S b/sysdeps/i386/elf/bsd-_setjmp.S new file mode 100644 index 0000000000..1417270201 --- /dev/null +++ b/sysdeps/i386/elf/bsd-_setjmp.S @@ -0,0 +1 @@ +/* We don't need any code here since the setjmp.S file contains it. */ diff --git a/sysdeps/i386/elf/bsd-setjmp.S b/sysdeps/i386/elf/bsd-setjmp.S new file mode 100644 index 0000000000..1417270201 --- /dev/null +++ b/sysdeps/i386/elf/bsd-setjmp.S @@ -0,0 +1 @@ +/* We don't need any code here since the setjmp.S file contains it. */ diff --git a/sysdeps/i386/elf/setjmp.S b/sysdeps/i386/elf/setjmp.S new file mode 100644 index 0000000000..d73e84364f --- /dev/null +++ b/sysdeps/i386/elf/setjmp.S @@ -0,0 +1,72 @@ +/* setjmp for i386, ELF version. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + 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 <sysdep.h> +#define _ASM +#include <bits/setjmp.h> + + /* We include the BSD entry points here as well but we make + them weak. */ +ENTRY (setjmp) + .weak C_SYMBOL_NAME (setjmp) + popl %eax /* Pop return PC. */ + popl %ecx /* Pop jmp_buf argument. */ + pushl $1 /* Push second argument of zero. */ + pushl %ecx /* Push back first argument. */ + pushl %eax /* Push back return PC. */ + jmp __sigsetjmp +END (setjmp) + + /* Binary compatibility entry point. */ +ENTRY (_setjmp) + .weak C_SYMBOL_NAME (_setjmp) +ENTRY (__setjmp) + popl %eax /* Pop return address. */ + popl %ecx /* Pop jmp_buf. */ + pushl $0 /* Push zero argument. */ + pushl %ecx /* Push jmp_buf. */ + pushl %eax /* Push back return address. */ + +ENTRY (__sigsetjmp) + movl 4(%esp), %eax /* User's jmp_buf in %eax. */ + /* Save registers. */ + movl %ebx, (JB_BX*4)(%eax) + movl %esi, (JB_SI*4)(%eax) + movl %edi, (JB_DI*4)(%eax) + movl %ebp, (JB_BP*4)(%eax) + leal 4(%esp), %ecx /* Save SP as it will be after we return. */ + movl %ecx, (JB_SP*4)(%eax) + movl 0(%esp), %ecx /* Save PC we are returning to now. */ + movl %ecx, (JB_PC*4)(%eax) + + /* Make a tail call to __sigjmp_save; it takes the same args. */ +#ifdef PIC + /* We cannot use the PLT, because it requires that %ebx be set, but + we can't save and restore our caller's value. Instead, we do an + indirect jump through the GOT, using for the temporary register + %ecx, which is call-clobbered. */ + call here +here: popl %ecx + addl $_GLOBAL_OFFSET_TABLE_+[.-here], %ecx + movl C_SYMBOL_NAME(__sigjmp_save@GOT)(%ecx), %ecx + jmp *%ecx +#else + jmp __sigjmp_save +#endif +END (__sigsetjmp) diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h index 2fc5baf81e..b3736f8417 100644 --- a/sysdeps/i386/fpu/bits/mathinline.h +++ b/sysdeps/i386/fpu/bits/mathinline.h @@ -29,7 +29,7 @@ all floating-point types. */ # define isgreater(x, y) \ ({ int __result; \ - __asm__ ("fucompp; fnstsw; andb $0x45, %%ah; setz %%al;" \ + __asm__ ("fucompp; fnstsw; testb $0x45, %%ah; setz %%al;" \ "andl $0x01, %0" \ : "=a" (__result) : "u" (y), "t" (x) : "cc", "st", "st(1)"); \ __result; }) @@ -118,11 +118,11 @@ #endif #define __inline_mathop_decl_(float_type, func, op, params...) \ - __MATHINLINE float_type func (float_type); \ - __MATHINLINE float_type func (float_type __x) \ + __MATH_INLINE float_type func (float_type); \ + __MATH_INLINE float_type func (float_type __x) \ { \ register float_type __result; \ - __asm __volatile__ (op : "=t" (__results) : params); \ + __asm __volatile__ (op : "=t" (__result) : params); \ return __result; \ } @@ -163,8 +163,9 @@ } -/* Optimized inline implementation, sometimes woth reduced precision +/* Optimized inline implementation, sometimes with reduced precision and/or argument range. */ + #define __expm1_code \ register long double __value; \ register long double __exponent; \ @@ -266,7 +267,7 @@ __inline_mathcode2 (pow, __x, __y, \ /* NOTREACHED */ \ } \ __asm __volatile__ \ - ("fyl2x" : "=t" (__value) : "0" (__x), "u" (1.0) : "st1"); \ + ("fyl2x" : "=t" (__value) : "0" (__x), "u" (1.0) : "st(1)"); \ __asm __volatile__ \ ("fmul %%st(1) # y * log2(x)\n\t" \ "fst %%st(1)\n\t" \ @@ -285,26 +286,34 @@ __inline_mathcode2 (pow, __x, __y, \ __inline_mathop (sqrt, "fsqrt") __inline_mathop_ (long double, __sqrtl, "fsqrt") +#if defined __GNUC__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 8) +__inline_mathcode_ (fabs, __x, return __builtin_fabs (__x)) +__inline_mathcode_ (fabsf, __x, return __builtin_fabsf (__x)) +__inline_mathcode_ (fabsl, __x, return __builtin_fabsl (__x)) +__inline_mathcode_ (__fabsl, __x, return __builtin_fabsl (__x)) +#else __inline_mathop (fabs, "fabs") +__inline_mathop_ (long double, __fabsl, "fabs") +#endif /* The argument range of this inline version is reduced. */ __inline_mathop (sin, "fsin") /* The argument range of this inline version is reduced. */ __inline_mathop (cos, "fcos") -__inline_mathop (atan, "fld1; fpatan") +__inline_mathop_decl (atan, "fpatan", "u" (__x), "0" (1.0) : "st(1)") __inline_mathop (log, "fldln2; fxch; fyl2x") __inline_mathop (log10, "fldlg2; fxch; fyl2x") __inline_mathcode (asin, __x, return __atan2l (__x, __sqrtl (1.0 - __x * __x))) __inline_mathcode (acos, __x, return __atan2l (__sqrtl (1.0 - __x * __x), __x)) -__inline_mathcode (__sgn1, __x, return __x >= 0.0 ? 1.0 : -1.0) +__inline_mathcode_ (long double, __sgn1l, __x, return __x >= 0.0 ? 1.0 : -1.0) /* The argument range of the inline version of sinhl is slightly reduced. */ __inline_mathcode (sinh, __x, \ - register long double __exm1 = __expm1l (__builtin_fabsl (__x)); \ + register long double __exm1 = __expm1l (__fabsl (__x)); \ return 0.5 * (__exm1 / (__exm1 + 1.0) + __exm1) * __sgn1l (__x)) __inline_mathcode (cosh, __x, \ @@ -312,7 +321,7 @@ __inline_mathcode (cosh, __x, \ return 0.5 * (__ex + 1.0 / __ex)) __inline_mathcode (tanh, __x, \ - register long double __exm1 = __expm1l (-__builtin_fabsl (__x + __x)); \ + register long double __exm1 = __expm1l (-__fabsl (__x + __x)); \ return __exm1 / (__exm1 + 2.0) * __sgn1l (-__x)) @@ -338,6 +347,20 @@ __inline_mathcode (ceil, __x, \ __asm __volatile ("fldcw %0" : : "m" (__cw)); \ return __value) +#define __ldexp_code \ + register long double __value; \ + __asm __volatile__ \ + ("fscale" \ + : "=t" (__value) : "0" (__x), "u" ((long double) __y)); \ + return __value + +__MATH_INLINE double ldexp (double __x, int __y); +__MATH_INLINE double +ldexp (double __x, int __y) +{ + __ldexp_code; +} + /* Optimized versions for some non-standardized functions. */ #if defined __USE_ISOC9X || defined __USE_MISC @@ -352,7 +375,7 @@ __inline_mathcode (expm1, __x, __expm1_code) __inline_mathcode (log1p, __x, \ register long double __value; \ - if (__builtin_fabsl (__x) >= 1.0 - 0.5 * __M_SQRT2) \ + if (__fabsl (__x) >= 1.0 - 0.5 * __M_SQRT2) \ __value = logl (1.0 + __x); \ else \ __asm __volatile__ \ @@ -365,7 +388,7 @@ __inline_mathcode (log1p, __x, \ /* The argument range of the inline version of asinhl is slightly reduced. */ __inline_mathcode (asinh, __x, \ - register long double __y = __builtin_fabsl (__x); \ + register long double __y = __fabsl (__x); \ return (log1pl (__y * __y / (__sqrtl (__y * __y + 1.0) + 1.0) + __y) \ * __sgn1l (__x)) @@ -373,7 +396,7 @@ __inline_mathcode (acosh, __x, \ return logl (__x + __sqrtl (__x - 1.0) * __sqrtl (__x + 1.0))) __inline_mathcode (atanh, __x, \ - register long double __y = __builtin_fabsl (__x); \ + register long double __y = __fabsl (__x); \ return (-0.5 * log1pl (-(__y + __y) / (1.0 + __y)) * \ __sgn1l (__x))) @@ -389,17 +412,25 @@ __inline_mathcode(logb, __x, \ : "=t" (__junk), "=u" (__value) : "0" (__x)); \ return __value) +__MATH_INLINE float ldexpf (float __x, int __y); +__MATH_INLINE float +ldexpf (float __x, int __y) +{ + __ldexp_code; +} + +__MATH_INLINE long double ldexpl (long double __x, int __y); +__MATH_INLINE long double +ldexpl (long double __x, int __y) +{ + __ldexp_code; +} -__inline_mathcode2 (ldexp, __x, __y, \ - register long double __value; \ - __asm __volatile__ \ - ("fscale" \ - : "=t" (__value) : "0" (__x), "u" ((long double) __y)); \ - return __value) #endif #ifdef __USE_MISC + __inline_mathcode2 (drem, __x, __y, \ register double __value; \ __asm __volatile__ \ @@ -431,7 +462,7 @@ __inline_mathcode (__sgn, __x, \ return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0)) __inline_mathcode (__coshm1, __x, \ - register long double __exm1 = __expm1l (__builtin_fabsl (__x)); \ + register long double __exm1 = __expm1l (__fabsl (__x)); \ return 0.5 * (__exm1 / (__exm1 + 1.0)) * __exm1) __inline_mathcode (__acosh1p, __x, \ |