mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Update.
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:
135
ChangeLog
135
ChangeLog
@ -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>
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
|
@ -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_ */
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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 */
|
||||||
|
47
sysdeps/ia64/fpu/bits/mathdef.h
Normal file
47
sysdeps/ia64/fpu/bits/mathdef.h
Normal 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 */
|
1652
sysdeps/ia64/fpu/libm-test-ulps
Normal file
1652
sysdeps/ia64/fpu/libm-test-ulps
Normal file
File diff suppressed because it is too large
Load Diff
80
sysdeps/ia64/fpu/printf_fphex.c
Normal file
80
sysdeps/ia64/fpu/printf_fphex.c
Normal 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>
|
1
sysdeps/ia64/fpu/s_isinfl.c
Normal file
1
sysdeps/ia64/fpu/s_isinfl.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/i386/fpu/s_isinfl.c>
|
1
sysdeps/ia64/fpu/s_isnanl.c
Normal file
1
sysdeps/ia64/fpu/s_isnanl.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/i386/fpu/s_isnanl.c>
|
1
sysdeps/ia64/fpu/s_nextafterl.c
Normal file
1
sysdeps/ia64/fpu/s_nextafterl.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/i386/fpu/s_nextafterl.c>
|
@ -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
|
|
171
sysdeps/sparc/sparc32/ieee754.h
Normal file
171
sysdeps/sparc/sparc32/ieee754.h
Normal 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 */
|
@ -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)
|
43
sysdeps/unix/sysv/linux/ia64/vfork.S
Normal file
43
sysdeps/unix/sysv/linux/ia64/vfork.S
Normal 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)
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user