1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00
2000-09-26  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/sparc/sparc32/bits/endian.h: Remove.
	* sysdeps/sparc/sparc32/ieee754.h: New.
	* sysdeps/sparc/sparc64/bits/endian.h: Move...
	* sysdeps/sparc/bits/endian.h: ...here.
	* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Optimize.
	* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Check
	%o1, not %o0 to see if we're parent or child.  Optimize.

2000-09-26  Jes Sorensen  <jes@linuxcare.com>

	* sysdeps/unix/sysv/linux/ia64/fork.S: New file (based on code
	by Hans Boehm).
	* sysdeps/unix/sysv/linux/ia64/vfork.S: New file (based on
	code by Hans Boehm).
	* sysdeps/unix/sysv/linux/ia64/fork.c: Deleted (obsoleted by fork.S).

2000-09-20  H.J. Lu  <hjl@gnu.org>

	* sysdeps/ia64/fpu/printf_fphex.c: New file.

	* sysdeps/ia64/fpu/libm-test-ulps: New file.

2000-09-17  H.J. Lu  <hjl@gnu.org>

	* sysdeps/ia64/Makefile (long-double-fcts): New.  Defined as yes.

	* sysdeps/ia64/fpu/s_isinfl.c: New file.  Include
	sysdeps/i386/fpu/s_isinfl.c.

	* sysdeps/ia64/fpu/s_isnanl.c: New file.  Include
	sysdeps/i386/fpu/s_isnanl.c.

	* sysdeps/ia64/fpu/s_nextafterl.c: New file.  Include
	sysdeps/i386/fpu/s_nextafterl.c.

	* sysdeps/ia64/fpu/bits/mathdef.h: New file.  Copied from
	sysdeps/i386/fpu/bits/mathdef.h.

2000-09-16  H.J. Lu  <hjl@gnu.org>

	* sysdeps/generic/ldsodefs.h (DL_UNMAP): New.  Defined if
	DL_UNMAP_IS_SPECIAL is not defined.

	* sysdeps/ia64/dl-lookupcfg.h (DL_UNMAP_IS_SPECIAL): Defined.
	(_dl_unmap): New prototype.
	(DL_UNMAP): New.  Defined as _dl_unmap.

	* sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_unmap.

	* elf/dl-close.c (_dl_close): Replace __munmap with DL_UNMAP.

2000-09-16  H.J. Lu  <hjl@gnu.org>

	* sysdeps/generic/ldsodefs.h (DL_LOOKUP_ADDRESS): New. Defined
	if ELF_FUNCTION_PTR_IS_SPECIAL is not defined.

	* sysdeps/ia64/dl-lookupcfg.h (_dl_lookup_address): New
	prototype.
	(DL_LOOKUP_ADDRESS): New. Defined as _dl_lookup_address.

	* sysdeps/ia64/dl-fptr.c (_dl_lookup_address): New. Lookup
	the memory location of a function from a function descriptor.

	* sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_lookup_address.

	* elf/dl-addr.c (_dl_addr): Use DL_LOOKUP_ADDRESS to get the
	memory location.

2000-09-14  Jes Sorensen  <jes@linuxcare.com>

	* sysdeps/ia64/bits/byteswap.h (__bswap_16): Don't mark output
	variable as input argument.
	(__bswap_32): Likewise.

	* sysdeps/ia64/dl-machine.h: Add missing stop bit in RTLD_START()
	- found by Jim Wilson <wilson@cygnus.com>

2000-09-26  Ulrich Drepper  <drepper@redhat.com>

	* string/strxfrm.c: Only require alignment on __alignof__ (int32_t)
	instead of 4.

2000-09-26  Andreas Schwab  <schwab@suse.de>

	* locale/programs/ld-collate.c (collate_output): Only require
	alignment on __alignof__ (int32_t) instead of 4.
	* locale/loadlocale.c (_nl_load_locale): Likewise.
	* string/strcoll.c: Likewise.

2000-09-26  Jes Sorensen  <jes@linuxcare.com>

	* sysdeps/ieee754/ldbl-96/e_atan2l.c (__ieee754_atan2l): Add
	parentheses around arithmetic used in | statement to kill compiler
	warning.

	* math/math_private.h: Add prototype for __finitel.
	(__ilogbl): Likewise.
	(__isinfl): Likewise.
	(__isnanl): Likewise.
	(__atanl): Likewise.
	(__copysignl): Likewise.
	(__expm1l): Likewise.
	(__floorl): Likewise.
	(__frexpl): Likewise.
	(__ldexpl): Likewise.
	(__log1pl): Likewise.
	(__nanl): Likewise.
	(__rintl): Likewise.
	(__scalbnl): Likewise.
	(__sqrtl): Likewise.
	(fabsl): Likewise.
	(__sincosl): Likewise.

	(si_isr) [USE_GNU]: Likewise.
	(ILL_BREAK) [USE_GNU]: Likewise.
	(FPE_DECOVF) [USE_GNU]: Likewise.
	(FPE_DECDIV) [USE_GNU]: Likewise.
	(FPE_DECERR) [USE_GNU]: Likewise.
	(FPE_INVASC) [USE_GNU]: Likewise.
	(FPE_INVDEC) [USE_GNU]: Likewise.
	(TRAP_BRANCH) [USE_GNU]: Likewise.
	(TRAP_HWBKPT) [USE_GNU]: Likewise.
	* sysdeps/ieee754/flt-32/s_exp2f.c: Likewise.
This commit is contained in:
Ulrich Drepper
2000-09-26 19:13:37 +00:00
parent e161e6c8ee
commit 09bf6406b1
28 changed files with 2242 additions and 72 deletions

135
ChangeLog
View File

@ -1,3 +1,118 @@
2000-09-26 Jakub Jelinek <jakub@redhat.com>
* sysdeps/sparc/sparc32/bits/endian.h: Remove.
* sysdeps/sparc/sparc32/ieee754.h: New.
* sysdeps/sparc/sparc64/bits/endian.h: Move...
* sysdeps/sparc/bits/endian.h: ...here.
* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Optimize.
* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Check
%o1, not %o0 to see if we're parent or child. Optimize.
2000-09-26 Jes Sorensen <jes@linuxcare.com>
* sysdeps/unix/sysv/linux/ia64/fork.S: New file (based on code
by Hans Boehm).
* sysdeps/unix/sysv/linux/ia64/vfork.S: New file (based on
code by Hans Boehm).
* sysdeps/unix/sysv/linux/ia64/fork.c: Deleted (obsoleted by fork.S).
2000-09-20 H.J. Lu <hjl@gnu.org>
* sysdeps/ia64/fpu/printf_fphex.c: New file.
* sysdeps/ia64/fpu/libm-test-ulps: New file.
2000-09-17 H.J. Lu <hjl@gnu.org>
* sysdeps/ia64/Makefile (long-double-fcts): New. Defined as yes.
* sysdeps/ia64/fpu/s_isinfl.c: New file. Include
sysdeps/i386/fpu/s_isinfl.c.
* sysdeps/ia64/fpu/s_isnanl.c: New file. Include
sysdeps/i386/fpu/s_isnanl.c.
* sysdeps/ia64/fpu/s_nextafterl.c: New file. Include
sysdeps/i386/fpu/s_nextafterl.c.
* sysdeps/ia64/fpu/bits/mathdef.h: New file. Copied from
sysdeps/i386/fpu/bits/mathdef.h.
2000-09-16 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/ldsodefs.h (DL_UNMAP): New. Defined if
DL_UNMAP_IS_SPECIAL is not defined.
* sysdeps/ia64/dl-lookupcfg.h (DL_UNMAP_IS_SPECIAL): Defined.
(_dl_unmap): New prototype.
(DL_UNMAP): New. Defined as _dl_unmap.
* sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_unmap.
* elf/dl-close.c (_dl_close): Replace __munmap with DL_UNMAP.
2000-09-16 H.J. Lu <hjl@gnu.org>
* sysdeps/generic/ldsodefs.h (DL_LOOKUP_ADDRESS): New. Defined
if ELF_FUNCTION_PTR_IS_SPECIAL is not defined.
* sysdeps/ia64/dl-lookupcfg.h (_dl_lookup_address): New
prototype.
(DL_LOOKUP_ADDRESS): New. Defined as _dl_lookup_address.
* sysdeps/ia64/dl-fptr.c (_dl_lookup_address): New. Lookup
the memory location of a function from a function descriptor.
* sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_lookup_address.
* elf/dl-addr.c (_dl_addr): Use DL_LOOKUP_ADDRESS to get the
memory location.
2000-09-14 Jes Sorensen <jes@linuxcare.com>
* sysdeps/ia64/bits/byteswap.h (__bswap_16): Don't mark output
variable as input argument.
(__bswap_32): Likewise.
* sysdeps/ia64/dl-machine.h: Add missing stop bit in RTLD_START()
- found by Jim Wilson <wilson@cygnus.com>
2000-09-26 Ulrich Drepper <drepper@redhat.com>
* string/strxfrm.c: Only require alignment on __alignof__ (int32_t)
instead of 4.
2000-09-26 Andreas Schwab <schwab@suse.de>
* locale/programs/ld-collate.c (collate_output): Only require
alignment on __alignof__ (int32_t) instead of 4.
* locale/loadlocale.c (_nl_load_locale): Likewise.
* string/strcoll.c: Likewise.
2000-09-26 Jes Sorensen <jes@linuxcare.com>
* sysdeps/ieee754/ldbl-96/e_atan2l.c (__ieee754_atan2l): Add
parentheses around arithmetic used in | statement to kill compiler
warning.
* math/math_private.h: Add prototype for __finitel.
(__ilogbl): Likewise.
(__isinfl): Likewise.
(__isnanl): Likewise.
(__atanl): Likewise.
(__copysignl): Likewise.
(__expm1l): Likewise.
(__floorl): Likewise.
(__frexpl): Likewise.
(__ldexpl): Likewise.
(__log1pl): Likewise.
(__nanl): Likewise.
(__rintl): Likewise.
(__scalbnl): Likewise.
(__sqrtl): Likewise.
(fabsl): Likewise.
(__sincosl): Likewise.
2000-09-26 Andreas Schwab <schwab@suse.de> 2000-09-26 Andreas Schwab <schwab@suse.de>
* sysdeps/m68k/fpu/libm-test-ulps: New file * sysdeps/m68k/fpu/libm-test-ulps: New file
@ -4715,15 +4830,15 @@
based on sysdeps/unix/sysv/linux/bits/siginfo.h. based on sysdeps/unix/sysv/linux/bits/siginfo.h.
Change type of si_band from "int" to "long". Change type of si_band from "int" to "long".
(si_imm) [USE_GNU]: Define (si_imm) [USE_GNU]: Define
(si_isr) [USE_GNU]: Ditto. (si_isr) [USE_GNU]: Likewise.
(ILL_BREAK) [USE_GNU]: Ditto. (ILL_BREAK) [USE_GNU]: Likewise.
(FPE_DECOVF) [USE_GNU]: Ditto. (FPE_DECOVF) [USE_GNU]: Likewise.
(FPE_DECDIV) [USE_GNU]: Ditto. (FPE_DECDIV) [USE_GNU]: Likewise.
(FPE_DECERR) [USE_GNU]: Ditto. (FPE_DECERR) [USE_GNU]: Likewise.
(FPE_INVASC) [USE_GNU]: Ditto. (FPE_INVASC) [USE_GNU]: Likewise.
(FPE_INVDEC) [USE_GNU]: Ditto. (FPE_INVDEC) [USE_GNU]: Likewise.
(TRAP_BRANCH) [USE_GNU]: Ditto. (TRAP_BRANCH) [USE_GNU]: Likewise.
(TRAP_HWBKPT) [USE_GNU]: Ditto. (TRAP_HWBKPT) [USE_GNU]: Likewise.
2000-07-06 Jes Sorensen <jes@linuxcare.com> 2000-07-06 Jes Sorensen <jes@linuxcare.com>
@ -5570,7 +5685,7 @@
* sysdeps/ieee754/dbl-64/s_exp2.c: Add include stdlib.h to get * sysdeps/ieee754/dbl-64/s_exp2.c: Add include stdlib.h to get
prototype for abs(). prototype for abs().
* sysdeps/ieee754/flt-32/s_exp2f.c: ditto. * sysdeps/ieee754/flt-32/s_exp2f.c: Likewise.
2000-06-23 Andreas Jaeger <aj@suse.de> 2000-06-23 Andreas Jaeger <aj@suse.de>

View File

@ -26,7 +26,7 @@ int
internal_function internal_function
_dl_addr (const void *address, Dl_info *info) _dl_addr (const void *address, Dl_info *info)
{ {
const ElfW(Addr) addr = (ElfW(Addr)) address; const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
struct link_map *l, *match; struct link_map *l, *match;
const ElfW(Sym) *symtab, *matchsym; const ElfW(Sym) *symtab, *matchsym;
const char *strtab; const char *strtab;

View File

@ -167,8 +167,7 @@ _dl_close (void *_map)
/* We can unmap all the maps at once. We determined the /* We can unmap all the maps at once. We determined the
start address and length when we loaded the object and start address and length when we loaded the object and
the `munmap' call does the rest. */ the `munmap' call does the rest. */
__munmap ((void *) imap->l_map_start, DL_UNMAP (imap);
imap->l_map_end - imap->l_map_start);
/* Finally, unlink the data structure and free it. */ /* Finally, unlink the data structure and free it. */
#ifdef SHARED #ifdef SHARED

View File

@ -217,7 +217,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
} }
if (__builtin_expect (_nl_value_types[category][cnt] == word, 0)) if (__builtin_expect (_nl_value_types[category][cnt] == word, 0))
{ {
assert (idx % 4 == 0); assert (idx % __alignof__ (u_int32_t) == 0);
newdata->values[cnt].word = newdata->values[cnt].word =
*((u_int32_t *) (newdata->filedata + idx)); *((u_int32_t *) (newdata->filedata + idx));
} }

View File

@ -2204,21 +2204,21 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + cnt].iov_base = NULL; iov[2 + cnt].iov_base = NULL;
iov[2 + cnt].iov_len = 0; iov[2 + cnt].iov_len = 0;
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_GAP2)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_GAP2));
iov[2 + cnt].iov_base = NULL; iov[2 + cnt].iov_base = NULL;
iov[2 + cnt].iov_len = 0; iov[2 + cnt].iov_len = 0;
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_GAP3)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_GAP3));
iov[2 + cnt].iov_base = NULL; iov[2 + cnt].iov_base = NULL;
iov[2 + cnt].iov_len = 0; iov[2 + cnt].iov_len = 0;
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
/* Since we are using the sign of an integer to mark indirection the /* Since we are using the sign of an integer to mark indirection the
@ -2368,7 +2368,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + cnt].iov_len = tablewc.result_size; iov[2 + cnt].iov_len = tablewc.result_size;
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0);
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_WEIGHTWC)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_WEIGHTWC));
@ -2376,7 +2376,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + cnt].iov_base = obstack_finish (&weightpool); iov[2 + cnt].iov_base = obstack_finish (&weightpool);
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0);
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_EXTRAWC)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_EXTRAWC));
@ -2384,7 +2384,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + cnt].iov_base = obstack_finish (&extrapool); iov[2 + cnt].iov_base = obstack_finish (&extrapool);
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0);
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_INDIRECTWC)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_INDIRECTWC));
@ -2392,7 +2392,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + cnt].iov_base = obstack_finish (&indirectpool); iov[2 + cnt].iov_base = obstack_finish (&indirectpool);
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0);
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
@ -2493,14 +2493,14 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
iov[2 + cnt].iov_base = &elem_size; iov[2 + cnt].iov_base = &elem_size;
iov[2 + cnt].iov_len = sizeof (int32_t); iov[2 + cnt].iov_len = sizeof (int32_t);
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_TABLEMB)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_TABLEMB));
iov[2 + cnt].iov_base = elem_table; iov[2 + cnt].iov_base = elem_table;
iov[2 + cnt].iov_len = elem_size * 2 * sizeof (int32_t); iov[2 + cnt].iov_len = elem_size * 2 * sizeof (int32_t);
idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_EXTRAMB)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_EXTRAMB));
@ -2518,7 +2518,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap,
assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_COLLSEQWC)); assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_COLLSEQWC));
iov[2 + cnt].iov_base = collate->wcseqorder.result; iov[2 + cnt].iov_base = collate->wcseqorder.result;
iov[2 + cnt].iov_len = collate->wcseqorder.result_size; iov[2 + cnt].iov_len = collate->wcseqorder.result_size;
assert (idx[cnt] % 4 == 0); assert (idx[cnt] % __alignof__ (int32_t) == 0);
++cnt; ++cnt;
assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE)); assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE));

View File

@ -267,4 +267,23 @@ extern void __kernel_sincosl (long double,long double,
extern int __kernel_rem_pio2l (long double*,long double*,int,int, extern int __kernel_rem_pio2l (long double*,long double*,int,int,
int,const int*); int,const int*);
/* prototypes required to compile the ldbl-96 support without warnings */
extern int __finitel (long double);
extern int __ilogbl(long double);
extern int __isinfl (long double);
extern int __isnanl(long double);
extern long double __atanl (long double);
extern long double __copysignl(long double, long double);
extern long double __expm1l (long double);
extern long double __floorl(long double);
extern long double __frexpl(long double, int *);
extern long double __ldexpl(long double, int);
extern long double __log1pl (long double);
extern long double __nanl (const char *);
extern long double __rintl(long double);
extern long double __scalbnl (long double, int);
extern long double __sqrtl(long double x);
extern long double fabsl(long double x);
extern void __sincosl (long double, long double *, long double *);
#endif /* _MATH_PRIVATE_H_ */ #endif /* _MATH_PRIVATE_H_ */

View File

@ -127,10 +127,10 @@ STRCOLL (s1, s2, l)
#endif #endif
use_malloc = 0; use_malloc = 0;
assert (((uintptr_t) table) % sizeof (table[0]) == 0); assert (((uintptr_t) table) % __alignof__ (table[0]) == 0);
assert (((uintptr_t) weights) % sizeof (weights[0]) == 0); assert (((uintptr_t) weights) % __alignof__ (weights[0]) == 0);
assert (((uintptr_t) extra) % sizeof (extra[0]) == 0); assert (((uintptr_t) extra) % __alignof__ (extra[0]) == 0);
assert (((uintptr_t) indirect) % sizeof (indirect[0]) == 0); assert (((uintptr_t) indirect) % __alignof__ (indirect[0]) == 0);
/* We need this a few times. */ /* We need this a few times. */
s1len = STRLEN (s1); s1len = STRLEN (s1);

View File

@ -151,10 +151,10 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
#endif #endif
use_malloc = 0; use_malloc = 0;
assert (((uintptr_t) table) % sizeof (table[0]) == 0); assert (((uintptr_t) table) % __alignof__ (table[0]) == 0);
assert (((uintptr_t) weights) % sizeof (weights[0]) == 0); assert (((uintptr_t) weights) % __alignof__ (weights[0]) == 0);
assert (((uintptr_t) extra) % sizeof (extra[0]) == 0); assert (((uintptr_t) extra) % __alignof__ (extra[0]) == 0);
assert (((uintptr_t) indirect) % sizeof (indirect[0]) == 0); assert (((uintptr_t) indirect) % __alignof__ (indirect[0]) == 0);
/* Handle an empty string as a special case. */ /* Handle an empty string as a special case. */
if (srclen == 0) if (srclen == 0)

View File

@ -67,8 +67,16 @@ typedef ElfW(Addr) lookup_t;
to the actual code of the function but rather an architecture to the actual code of the function but rather an architecture
specific descriptor. */ specific descriptor. */
#ifndef ELF_FUNCTION_PTR_IS_SPECIAL #ifndef ELF_FUNCTION_PTR_IS_SPECIAL
#define DL_SYMBOL_ADDRESS(map, ref) \ # define DL_SYMBOL_ADDRESS(map, ref) \
(void *) (LOOKUP_VALUE_ADDRESS (map) + ref->st_value) (void *) (LOOKUP_VALUE_ADDRESS (map) + ref->st_value)
# define DL_LOOKUP_ADDRESS(addr) ((ElfW(Addr)) (addr))
#endif
/* Unmap a loaded object, called by _dl_close (). */
#ifndef DL_UNMAP_IS_SPECIAL
# define DL_UNMAP(map) \
__munmap ((void *) (map)->l_map_start, \
(map)->l_map_end - (map)->l_map_start)
#endif #endif
/* For the version handling we need an array with only names and their /* For the version handling we need an array with only names and their

View File

@ -1,3 +1,6 @@
# The ia64 `long double' is a distinct type we support.
long-double-fcts = yes
ifeq ($(subdir), csu) ifeq ($(subdir), csu)
CPPFLAGS-start.S = -D__ASSEMBLY__ CPPFLAGS-start.S = -D__ASSEMBLY__
endif endif

View File

@ -1,6 +1,6 @@
ld { ld {
GLIBC_2.2 { GLIBC_2.2 {
# ia64 specific functions in the dynamic linker, but used by libc.so. # ia64 specific functions in the dynamic linker, but used by libc.so.
_dl_symbol_address; _dl_symbol_address; _dl_unmap; _dl_lookup_address;
} }
} }

View File

@ -33,9 +33,9 @@
__v = __bswap_constant_16 (x); \ __v = __bswap_constant_16 (x); \
else \ else \
__asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \
"mux1 %0 = %2, @rev ;;" \ "mux1 %0 = %0, @rev ;;" \
: "=r" (__v) \ : "=r" (__v) \
: "r" ((unsigned short int) (x)), "0" (__v));\ : "r" ((unsigned short int) (x))); \
__v; })) __v; }))
#else #else
/* This is better than nothing. */ /* This is better than nothing. */
@ -56,9 +56,9 @@
__v = __bswap_constant_32 (x); \ __v = __bswap_constant_32 (x); \
else \ else \
__asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \
"mux1 %0 = %2, @rev ;;" \ "mux1 %0 = %0, @rev ;;" \
: "=r" (__v) \ : "=r" (__v) \
: "r" ((unsigned int) (x)), "0" (__v)); \ : "r" ((unsigned int) (x))); \
__v; })) __v; }))
#else #else
# define __bswap_32(x) __bswap_constant_32 (x) # define __bswap_32(x) __bswap_constant_32 (x)

View File

@ -184,3 +184,29 @@ _dl_unmap (struct link_map *map)
__ia64_fptr_lock = 0; __ia64_fptr_lock = 0;
#endif #endif
} }
Elf64_Addr
_dl_lookup_address (const void *address)
{
Elf64_Addr addr = (Elf64_Addr) address;
struct ia64_fptr *f;
#ifdef _LIBC_REENTRANT
/* Make sure we are alone. */
while (testandset (&__ia64_fptr_lock));
#endif
for (f = __fptr_root; f != NULL; f = f->next)
if (f == address)
{
addr = f->func;
break;
}
#ifdef _LIBC_REENTRANT
/* Release the lock. */
__ia64_fptr_lock = 0;
#endif
return addr;
}

View File

@ -21,7 +21,16 @@
than just the address. */ than just the address. */
#define DL_LOOKUP_RETURNS_MAP #define DL_LOOKUP_RETURNS_MAP
#define ELF_FUNCTION_PTR_IS_SPECIAL #define ELF_FUNCTION_PTR_IS_SPECIAL
#define DL_UNMAP_IS_SPECIAL
void *_dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref); void *_dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref);
#define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref) #define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref)
Elf64_Addr _dl_lookup_address (const void *address);
#define DL_LOOKUP_ADDRESS(addr) _dl_lookup_address (addr)
void _dl_unmap (struct link_map *map);
#define DL_UNMAP(map) _dl_unmap (map)

View File

@ -351,6 +351,7 @@ _dl_start_user:
{ .mmb { .mmb
st8 [r10] = out1 /* Record the new argc. */ st8 [r10] = out1 /* Record the new argc. */
ld8 out0 = [out0] ld8 out0 = [out0]
;;
} }
{ .mfb { .mfb
ld8 out0 = [out0] /* get the linkmap */ ld8 out0 = [out0] /* get the linkmap */

View File

@ -0,0 +1,47 @@
/* Copyright (C) 2000 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. */
#if !defined _MATH_H && !defined _COMPLEX_H
# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
#endif
#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
# define _MATH_H_MATHDEF 1
/* The ix87 FPUs evaluate all values in the 80 bit floating-point format
which is also available for the user as `long double'. Therefore we
define: */
typedef long double float_t; /* `float' expressions are evaluated as
`long double'. */
typedef long double double_t; /* `double' expressions are evaluated as
`long double'. */
/* Signal that both types are `long double'. */
# define FLT_EVAL_METHOD 2
/* Define `INFINITY' as value of type `float'. */
# define INFINITY HUGE_VALF
/* The values returned by `ilogb' for 0 and NaN respectively. */
# define FP_ILOGB0 (-2147483647 - 1)
# define FP_ILOGBNAN (-2147483647 - 1)
/* Number of decimal digits for the `long double' type. */
# define DECIMAL_DIG 18
#endif /* ISO C99 */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,80 @@
/* Print floating point number in hexadecimal notation according to ISO C99.
Copyright (C) 2000 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 LONG_DOUBLE_DENORM_BIAS
# define LONG_DOUBLE_DENORM_BIAS (IEEE854_LONG_DOUBLE_BIAS - 1)
#endif
#define PRINT_FPHEX_LONG_DOUBLE \
do { \
/* The "strange" 80 bit format on ia64 has an explicit \
leading digit in the 64 bit mantissa. */ \
unsigned long long int num; \
\
num = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32 \
| fpnum.ldbl.ieee.mantissa1); \
\
zero_mantissa = num == 0; \
\
numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \
info->spec == 'A'); \
wnumstr = _itowa_word (num, wnumbuf + sizeof wnumbuf, 16, \
info->spec == 'A'); \
\
/* Fill with zeroes. */ \
while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \
{ \
*--numstr = '0'; \
*--wnumstr = L'0'; \
} \
\
/* We use a full nibble for the leading digit. */ \
leading = *numstr++; \
\
/* We have 3 bits from the mantissa in the leading nibble. \
Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \
exponent = fpnum.ldbl.ieee.exponent; \
\
if (exponent == 0) \
{ \
if (zero_mantissa) \
expnegative = 0; \
else \
{ \
/* This is a denormalized number. */ \
expnegative = 1; \
/* This is a hook for the m68k long double format, where the \
exponent bias is the same for normalized and denormalized \
numbers. */ \
exponent = LONG_DOUBLE_DENORM_BIAS + 3; \
} \
} \
else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3) \
{ \
expnegative = 0; \
exponent -= IEEE854_LONG_DOUBLE_BIAS + 3; \
} \
else \
{ \
expnegative = 1; \
exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3)); \
} \
} while (0)
#include <sysdeps/generic/printf_fphex.c>

View File

@ -0,0 +1 @@
#include <sysdeps/i386/fpu/s_isinfl.c>

View File

@ -0,0 +1 @@
#include <sysdeps/i386/fpu/s_isnanl.c>

View File

@ -0,0 +1 @@
#include <sysdeps/i386/fpu/s_nextafterl.c>

View File

@ -1,7 +0,0 @@
/* SPARC is big-endian. */
#ifndef _ENDIAN_H
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
#endif
#define __BYTE_ORDER __BIG_ENDIAN

View File

@ -0,0 +1,171 @@
/* Copyright (C) 1992, 1995, 1996, 1999 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 _IEEE754_H
#define _IEEE754_H 1
#include <features.h>
#include <endian.h>
__BEGIN_DECLS
union ieee754_float
{
float f;
/* This is the IEEE 754 single-precision format. */
struct
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int negative:1;
unsigned int exponent:8;
unsigned int mantissa:23;
#endif /* Big endian. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int mantissa:23;
unsigned int exponent:8;
unsigned int negative:1;
#endif /* Little endian. */
} ieee;
/* This format makes it easier to see if a NaN is a signalling NaN. */
struct
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int negative:1;
unsigned int exponent:8;
unsigned int quiet_nan:1;
unsigned int mantissa:22;
#endif /* Big endian. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int mantissa:22;
unsigned int quiet_nan:1;
unsigned int exponent:8;
unsigned int negative:1;
#endif /* Little endian. */
} ieee_nan;
};
#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */
union ieee754_double
{
double d;
/* This is the IEEE 754 double-precision format. */
struct
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int negative:1;
unsigned int exponent:11;
/* Together these comprise the mantissa. */
unsigned int mantissa0:20;
unsigned int mantissa1:32;
#endif /* Big endian. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
/* Together these comprise the mantissa. */
unsigned int mantissa1:32;
unsigned int mantissa0:20;
unsigned int exponent:11;
unsigned int negative:1;
#endif /* Little endian. */
} ieee;
/* This format makes it easier to see if a NaN is a signalling NaN. */
struct
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int negative:1;
unsigned int exponent:11;
unsigned int quiet_nan:1;
/* Together these comprise the mantissa. */
unsigned int mantissa0:19;
unsigned int mantissa1:32;
#else
/* Together these comprise the mantissa. */
unsigned int mantissa1:32;
unsigned int mantissa0:19;
unsigned int quiet_nan:1;
unsigned int exponent:11;
unsigned int negative:1;
#endif
} ieee_nan;
};
#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
union ieee854_long_double
{
long double d;
/* This is the IEEE 854 quad-precision format. */
struct
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int negative:1;
unsigned int exponent:15;
/* Together these comprise the mantissa. */
unsigned int mantissa0:16;
unsigned int mantissa1:32;
unsigned int mantissa2:32;
unsigned int mantissa3:32;
#endif /* Big endian. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
/* Together these comprise the mantissa. */
unsigned int mantissa3:32;
unsigned int mantissa2:32;
unsigned int mantissa1:32;
unsigned int mantissa0:16;
unsigned int exponent:15;
unsigned int negative:1;
#endif /* Little endian. */
} ieee;
/* This format makes it easier to see if a NaN is a signalling NaN. */
struct
{
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int negative:1;
unsigned int exponent:15;
unsigned int quiet_nan:1;
/* Together these comprise the mantissa. */
unsigned int mantissa0:15;
unsigned int mantissa1:32;
unsigned int mantissa2:32;
unsigned int mantissa3:32;
#else
/* Together these comprise the mantissa. */
unsigned int mantissa3:32;
unsigned int mantissa2:32;
unsigned int mantissa1:32;
unsigned int mantissa0:15;
unsigned int quiet_nan:1;
unsigned int exponent:15;
unsigned int negative:1;
#endif
} ieee_nan;
};
#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */
__END_DECLS
#endif /* ieee754.h */

View File

@ -1,7 +1,4 @@
/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. /* Copyright (C) 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de>,
December 1995.
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
@ -18,17 +15,26 @@
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 <unistd.h>
#include <asm/signal.h>
extern int __clone (int (*fn)(void *), void *ksp, unsigned long int flags, #include <sysdep.h>
void *arg); #define _SIGNAL_H
#include <bits/signum.h>
int /* pid_t fork(void); */
__libc_fork (void) /* Implemented as a clone system call with parameters SIGCHLD and 0 */
{
return __clone (NULL, NULL, SIGCHLD, 0); ENTRY(__libc_fork)
} alloc r2=ar.pfs,0,0,2,0
mov out0=SIGCHLD /* Return SIGCHLD when child finishes */
/* no other clone flags; nothing shared */
mov out1=0 /* Standard sp value. */
;;
DO_CALL (SYS_ify (clone))
cmp.eq p6,p0=-1,r10
;;
(p6) br.cond.spnt.few __syscall_error
ret
PSEUDO_END(__libc_fork)
weak_alias (__libc_fork, fork)
weak_alias (__libc_fork, __fork) weak_alias (__libc_fork, __fork)
weak_alias (__libc_fork, fork)

View File

@ -0,0 +1,43 @@
/* Copyright (C) 2000 Free Software Foundation, Inc.
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 _SIGNAL_H
#include <bits/signum.h>
/* The following are defined in linux/sched.h, which unfortunately */
/* is not safe for inclusion in an assembly file. */
#define CLONE_VM 0x00000100 /* set if VM shared between processes */
#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
/* pid_t vfork(void); */
/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
ENTRY(__vfork)
alloc r2=ar.pfs,0,0,2,0
mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
mov out1=0 /* Standard sp value. */
;;
DO_CALL (SYS_ify (clone))
cmp.eq p6,p0=-1,r10
;;
(p6) br.cond.spnt.few __syscall_error
ret
PSEUDO_END(__vfork)
weak_alias (__vfork, vfork)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. /* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu). Contributed by Richard Henderson (rth@tamu.edu).
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
@ -35,30 +35,26 @@ __clone:
/* sanity check arguments */ /* sanity check arguments */
tst %i0 tst %i0
be .Lerror be .Lerror
tst %i1 orcc %i1,%g0,%o1
be .Lerror be .Lerror
nop mov %i2,%o0
/* Do the system call */ /* Do the system call */
mov %i1,%o1
mov %i2,%o0
set __NR_clone,%g1 set __NR_clone,%g1
ta 0x10 ta 0x10
bcs .Lerror bcs .Lerror
tst %o1 tst %o1
bne __thread_start bne __thread_start
nop nop
mov %o0,%i0
ret ret
restore restore %o0,%g0,%o0
.Lerror: .Lerror:
call __errno_location call __errno_location
or %g0,EINVAL,%i0 or %g0,EINVAL,%i0
st %i0,[%o0] st %i0,[%o0]
mov -1,%i0
ret ret
restore restore %g0,-1,%o0
.size __clone, .-__clone .size __clone, .-__clone

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997 Free Software Foundation, Inc. /* Copyright (C) 1997, 2000 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu). Contributed by Richard Henderson (rth@tamu.edu).
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
@ -45,7 +45,7 @@ __clone:
ta 0x6d ta 0x6d
bcs,pn %xcc, 99f bcs,pn %xcc, 99f
nop nop
brnz,pn %o0, __thread_start brnz,pn %o1, __thread_start
mov %o0, %i0 mov %o0, %i0
ret ret
restore restore
@ -70,9 +70,8 @@ __clone:
nop nop
st %i0, [%o0] st %i0, [%o0]
#endif #endif
mov -1,%i0
ret ret
restore restore %g0,-1,%o0
.size __clone, .-__clone .size __clone, .-__clone
.type __thread_start,@function .type __thread_start,@function