1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00
2000-08-01  Ulrich Drepper  <drepper@redhat.com>
	    Joseph S. Myers  <jsm28@cam.ac.uk>

	* math/tgmath.h: Make standard compliant.  Don't ask how.

2000-07-04  H.J. Lu  <hjl@gnu.org>

	* elf/Makefile ($(inst_slibdir)/$(rtld-version-installed-name)):
	Use $(do-install-program) instead of "$(INSTALL_PROGRAM) $< $@.new".
	($(inst_slibdir)/$(rtld-installed-name)): Use $(make-shlib-link) only.

2000-07-30  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>

	* include/features.h (_XOPEN_SOURCE): Update the explanation.
	(__USE_LARGEFILE): Add an explanation.
	(_POSIX_C_SOURCE): Define to 2 only if _XOPEN_SOURCE < 500.
	(__USE_XOPEN2K): Define whenever _XOPEN_SOURCE >= 600.

2000-08-01  Ulrich Drepper  <drepper@redhat.com>

	* libio/Makefile: Enable exception handling for genops, wgenops,
	fileops, and wfileops.
This commit is contained in:
Ulrich Drepper
2000-08-01 22:53:40 +00:00
parent 21cea68e86
commit 925e31d9c2
4 changed files with 88 additions and 37 deletions

View File

@ -1,3 +1,26 @@
2000-08-01 Ulrich Drepper <drepper@redhat.com>
Joseph S. Myers <jsm28@cam.ac.uk>
* math/tgmath.h: Make standard compliant. Don't ask how.
2000-07-04 H.J. Lu <hjl@gnu.org>
* elf/Makefile ($(inst_slibdir)/$(rtld-version-installed-name)):
Use $(do-install-program) instead of "$(INSTALL_PROGRAM) $< $@.new".
($(inst_slibdir)/$(rtld-installed-name)): Use $(make-shlib-link) only.
2000-07-30 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
* include/features.h (_XOPEN_SOURCE): Update the explanation.
(__USE_LARGEFILE): Add an explanation.
(_POSIX_C_SOURCE): Define to 2 only if _XOPEN_SOURCE < 500.
(__USE_XOPEN2K): Define whenever _XOPEN_SOURCE >= 600.
2000-08-01 Ulrich Drepper <drepper@redhat.com>
* libio/Makefile: Enable exception handling for genops, wgenops,
fileops, and wfileops.
2000-07-29 Mark Kettenis <kettenis@gnu.org> 2000-07-29 Mark Kettenis <kettenis@gnu.org>
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): Take into * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): Take into

View File

@ -174,17 +174,12 @@ CPPFLAGS-dl-load.c = -I$(objpfx).
ifeq (yes,$(build-shared)) ifeq (yes,$(build-shared))
$(inst_slibdir)/$(rtld-version-installed-name): $(objpfx)ld.so $(+force) $(inst_slibdir)/$(rtld-version-installed-name): $(objpfx)ld.so $(+force)
$(make-target-directory) $(make-target-directory)
$(INSTALL_PROGRAM) $< $@.new $(do-install-program)
$(inst_slibdir)/$(rtld-installed-name): \ $(inst_slibdir)/$(rtld-installed-name): \
$(inst_slibdir)/$(rtld-version-installed-name) \ $(inst_slibdir)/$(rtld-version-installed-name) \
$(inst_slibdir)/libc-$(version).so $(inst_slibdir)/libc-$(version).so
rm -f $@ $< $(make-shlib-link)
$(symbolic-link-prog) $<.new $@
ln $<.new $<
rm -f $@
$(symbolic-link-prog) $(<F) $@
rm -f $<.new
# Special target called by parent to install just the dynamic linker. # Special target called by parent to install just the dynamic linker.
.PHONY: ldso_install .PHONY: ldso_install

View File

@ -29,7 +29,8 @@
if >=199309L, add IEEE Std 1003.1b-1993; if >=199309L, add IEEE Std 1003.1b-1993;
if >=199506L, add IEEE Std 1003.1c-1995 if >=199506L, add IEEE Std 1003.1c-1995
_XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if _XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if
Single Unix conformance is wanted. Single Unix conformance is wanted, to 600 for the
upcoming sixth revision.
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions. _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
_LARGEFILE_SOURCE Some more functions for correct standard I/O. _LARGEFILE_SOURCE Some more functions for correct standard I/O.
_LARGEFILE64_SOURCE Additional functionality from LFS for large files. _LARGEFILE64_SOURCE Additional functionality from LFS for large files.
@ -57,7 +58,8 @@
__USE_XOPEN Define XPG things. __USE_XOPEN Define XPG things.
__USE_XOPEN_EXTENDED Define X/Open Unix things. __USE_XOPEN_EXTENDED Define X/Open Unix things.
__USE_UNIX98 Define Single Unix V2 things. __USE_UNIX98 Define Single Unix V2 things.
__USE_XOPEN2K Define XPG6 things __USE_XOPEN2K Define XPG6 things.
__USE_LARGEFILE Define correct standard I/O things.
__USE_LARGEFILE64 Define LFS things with separate names. __USE_LARGEFILE64 Define LFS things with separate names.
__USE_FILE_OFFSET64 Define 64bit interface as default. __USE_FILE_OFFSET64 Define 64bit interface as default.
__USE_BSD Define 4.3BSD things. __USE_BSD Define 4.3BSD things.
@ -162,7 +164,7 @@
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \ #if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
!defined _POSIX_C_SOURCE) !defined _POSIX_C_SOURCE)
# define _POSIX_SOURCE 1 # define _POSIX_SOURCE 1
# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) != 500 # if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
# define _POSIX_C_SOURCE 2 # define _POSIX_C_SOURCE 2
# else # else
# define _POSIX_C_SOURCE 199506L # define _POSIX_C_SOURCE 199506L
@ -192,7 +194,7 @@
# define __USE_UNIX98 1 # define __USE_UNIX98 1
# undef _LARGEFILE_SOURCE # undef _LARGEFILE_SOURCE
# define _LARGEFILE_SOURCE 1 # define _LARGEFILE_SOURCE 1
# if (_XOPEN_SOURCE - 0) == 600 # if (_XOPEN_SOURCE - 0) >= 600
# define __USE_XOPEN2K 1 # define __USE_XOPEN2K 1
# endif # endif
# else # else

View File

@ -36,12 +36,31 @@
#if __GNUC_PREREQ (2, 7) #if __GNUC_PREREQ (2, 7)
/* This is ugly but unless gcc gets appropriate builtins we have to do
something like this. Don't ask how it works. */
/* 1 if 'type' is a floating type, 0 if 'type' is an integer type.
Allows for _Bool. Expands to an integer constant expression. */
#define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
/* The tgmath real type for T, where E is 0 if T is an integer type and
1 for a floating type. */
#define __tgmath_real_type_sub(T, E) \
__typeof__(*(0 ? (__typeof__(0 ? (double *)0 : (void *)(E)))0 \
: (__typeof__(0 ? (T *)0 : (void *)(!(E))))0))
/* The tgmath real type of EXPR. */
#define __tgmath_real_type(expr) \
__tgmath_real_type_sub(__typeof__(expr), __floating_type(__typeof__(expr)))
/* We have two kinds of generic macros: to support functions which are /* We have two kinds of generic macros: to support functions which are
only defined on real valued parameters and those which are defined only defined on real valued parameters and those which are defined
for complex functions as well. */ for complex functions as well. */
# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \ # define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
(__extension__ ({ __typeof__ (Val) __tgmres; \ (__extension__ ({ __tgmath_real_type (Val) __tgmres; \
if (sizeof (Val) == sizeof (double)) \ if (sizeof (Val) == sizeof (double) \
|| __builtin_classify_type (Val) != 8) \
__tgmres = Fct (Val); \ __tgmres = Fct (Val); \
else if (sizeof (Val) == sizeof (float)) \ else if (sizeof (Val) == sizeof (float)) \
__tgmres = Fct##f (Val); \ __tgmres = Fct##f (Val); \
@ -50,8 +69,9 @@
__tgmres; })) __tgmres; }))
# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \ # define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
(__extension__ ({ __typeof__ (Val1) __tgmres; \ (__extension__ ({ __tgmath_real_type (Val1) __tgmres; \
if (sizeof (Val1) == sizeof (double)) \ if (sizeof (Val1) == sizeof (double) \
|| __builtin_classify_type (Val) != 8) \
__tgmres = Fct (Val1, Val2); \ __tgmres = Fct (Val1, Val2); \
else if (sizeof (Val1) == sizeof (float)) \ else if (sizeof (Val1) == sizeof (float)) \
__tgmres = Fct##f (Val1, Val2); \ __tgmres = Fct##f (Val1, Val2); \
@ -60,38 +80,44 @@
__tgmres; })) __tgmres; }))
# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \ # define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
(__extension__ ({ __typeof__ ((Val1) + (Val2)) __tgmres; \ (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
if (sizeof (Val1) > sizeof (double) \ if ((sizeof (Val1) > sizeof (double) \
|| sizeof (Val2) > sizeof (double)) \ || sizeof (Val2) > sizeof (double)) \
&& __builtin_classify_type (Val) == 8) \
__tgmres = Fct##l (Val1, Val2); \ __tgmres = Fct##l (Val1, Val2); \
else if (sizeof (Val1) == sizeof (double) \ else if (sizeof (Val1) == sizeof (double) \
|| sizeof (Val2) == sizeof (double)) \ || sizeof (Val2) == sizeof (double) \
|| __builtin_classify_type (Val) != 8) \
__tgmres = Fct (Val1, Val2); \ __tgmres = Fct (Val1, Val2); \
else \ else \
__tgmres = Fct (Val1, Val2); \ __tgmres = Fct (Val1, Val2); \
__tgmres; })) __tgmres; }))
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \ # define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
(__extension__ ({ __typeof__ ((Val1) + (Val2)) __tgmres; \ (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
if (sizeof (Val1) > sizeof (double) \ if ((sizeof (Val1) > sizeof (double) \
|| sizeof (Val2) > sizeof (double)) \ || sizeof (Val2) > sizeof (double)) \
&& __builtin_classify_type (Val) == 8) \
__tgmres = Fct##l (Val1, Val2, Val3); \ __tgmres = Fct##l (Val1, Val2, Val3); \
else if (sizeof (Val1) == sizeof (double) \ else if (sizeof (Val1) == sizeof (double) \
|| sizeof (Val2) == sizeof (double)) \ || sizeof (Val2) == sizeof (double) \
|| __builtin_classify_type (Val) != 8) \
__tgmres = Fct (Val1, Val2, Val3); \ __tgmres = Fct (Val1, Val2, Val3); \
else \ else \
__tgmres = Fct (Val1, Val2, Val3); \ __tgmres = Fct (Val1, Val2, Val3); \
__tgmres; })) __tgmres; }))
# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \ # define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
(__extension__ ({ __typeof__ ((Val1) + (Val2) + (Val3)) __tgmres; \ (__extension__ ({ __tgmath_real_type ((Val1) + (Val2) + (Val3)) __tgmres;\
if (sizeof (Val1) > sizeof (double) \ if ((sizeof (Val1) > sizeof (double) \
|| sizeof (Val2) > sizeof (double) \ || sizeof (Val2) > sizeof (double) \
|| sizeof (Val3) > sizeof (double)) \ || sizeof (Val3) > sizeof (double)) \
&& __builtin_classify_type (Val) == 8) \
__tgmres = Fct##l (Val1, Val2, Val3); \ __tgmres = Fct##l (Val1, Val2, Val3); \
else if (sizeof (Val1) == sizeof (double) \ else if (sizeof (Val1) == sizeof (double) \
|| sizeof (Val2) == sizeof (double) \ || sizeof (Val2) == sizeof (double) \
|| sizeof (Val3) == sizeof (double)) \ || sizeof (Val3) == sizeof (double) \
|| __builtin_classify_type (Val) != 8) \
__tgmres = Fct (Val1, Val2, Val3); \ __tgmres = Fct (Val1, Val2, Val3); \
else \ else \
__tgmres = Fct (Val1, Val2, Val3); \ __tgmres = Fct (Val1, Val2, Val3); \
@ -100,15 +126,17 @@
/* XXX This definition has to be changed as soon as the compiler understands /* XXX This definition has to be changed as soon as the compiler understands
the imaginary keyword. */ the imaginary keyword. */
# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \ # define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
(__extension__ ({ __typeof__ (Val) __tgmres; \ (__extension__ ({ __tgmath_real_type (Val) __tgmres; \
if (sizeof (__real__ (Val)) > sizeof (double)) \ if (sizeof (__real__ (Val)) > sizeof (double) \
&& __builtin_classify_type (Val) == 8) \
{ \ { \
if (sizeof (__real__ (Val)) == sizeof (Val)) \ if (sizeof (__real__ (Val)) == sizeof (Val)) \
__tgmres = Fct##l (Val); \ __tgmres = Fct##l (Val); \
else \ else \
__tgmres = Cfct##l (Val); \ __tgmres = Cfct##l (Val); \
} \ } \
else if (sizeof (__real__ (Val)) == sizeof (double)) \ else if (sizeof (__real__ (Val)) == sizeof (double) \
|| __builtin_classify_type (Val) != 8) \
{ \ { \
if (sizeof (__real__ (Val)) == sizeof (Val)) \ if (sizeof (__real__ (Val)) == sizeof (Val)) \
__tgmres = Fct (Val); \ __tgmres = Fct (Val); \
@ -127,8 +155,9 @@
/* XXX This definition has to be changed as soon as the compiler understands /* XXX This definition has to be changed as soon as the compiler understands
the imaginary keyword. */ the imaginary keyword. */
# define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \ # define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \
(__extension__ ({ __typeof__ (Val) __tgmres; \ (__extension__ ({ __tgmath_real_type (Val) __tgmres; \
if (sizeof (Val) == sizeof (__complex__ double)) \ if (sizeof (Val) == sizeof (__complex__ double) \
|| __builtin_classify_type (Val) != 8) \
__tgmres = Fct (Val); \ __tgmres = Fct (Val); \
else if (sizeof (Val) == sizeof (__complex__ float)) \ else if (sizeof (Val) == sizeof (__complex__ float)) \
__tgmres = Fct##f (Val); \ __tgmres = Fct##f (Val); \
@ -139,9 +168,10 @@
/* XXX This definition has to be changed as soon as the compiler understands /* XXX This definition has to be changed as soon as the compiler understands
the imaginary keyword. */ the imaginary keyword. */
# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \ # define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
(__extension__ ({ __typeof__ ((Val1) + (Val2)) __tgmres; \ (__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
if (sizeof (__real__ (Val1)) > sizeof (double) \ if ((sizeof (__real__ (Val1)) > sizeof (double) \
|| sizeof (__real__ (Val2)) > sizeof (double)) \ || sizeof (__real__ (Val2)) > sizeof (double)) \
&& __builtin_classify_type (Val) == 8) \
{ \ { \
if (sizeof (__real__ (Val1)) == sizeof (Val1) \ if (sizeof (__real__ (Val1)) == sizeof (Val1) \
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \ && sizeof (__real__ (Val2)) == sizeof (Val2)) \
@ -150,7 +180,8 @@
__tgmres = Cfct##l (Val1, Val2); \ __tgmres = Cfct##l (Val1, Val2); \
} \ } \
else if (sizeof (__real__ (Val1)) == sizeof (double) \ else if (sizeof (__real__ (Val1)) == sizeof (double) \
|| sizeof (__real__ (Val2)) == sizeof(double))\ || sizeof (__real__ (Val2)) == sizeof(double) \
|| __builtin_classify_type (Val) != 8) \
{ \ { \
if (sizeof (__real__ (Val1)) == sizeof (Val1) \ if (sizeof (__real__ (Val1)) == sizeof (Val1) \
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \ && sizeof (__real__ (Val2)) == sizeof (Val2)) \