Update.
authorUlrich Drepper <drepper@redhat.com>
Sun, 24 Aug 1997 10:55:18 +0000 (10:55 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 24 Aug 1997 10:55:18 +0000 (10:55 +0000)
1997-08-24 12:24  Ulrich Drepper  <drepper@cygnus.com>

* configure.in (INSTALL): Quote `$'.

* libc.map: Add __xpg_basename.

* csu/Makefile (initfini.s): Disable optimization.

* elf/dl-deps.c: Implement handling of DL_FILTER.

* elf/dl-load.c (_dl_init_paths): Add error check.

* intl/finddomain.c (_nl_find_domain): Correct comment.
* intl/localealias.c: Include <bits/libc-lock.h> not <libc-lock.h>.

* libio/stdio.h: Make {,v}snprintf available if __USE_BSD.
Change extern inline functions to work correctly in C++.

* locale/iso-4217.def: Update for more recent ISO 4217 version.

* locale/loadlocale.c (_nl_load_locale): Add cast.

* manual/message.texi: Finish gettext section.

* posix/getopt_init.c: Don't use relative #include path.
(__getopt_clean_environment): Change function to take pointer to
environment as argument.  Optimize generation of test string a bit.
* sysdeps/unix/sysv/linux/init-first.c: Call __getopt_clean_environment
with additional argument.

* poisx/glob.c: Add prototype for next_brace_sub.

* sysdeps/generic/dl-sysdep.c: Recognize AT_BASE value on auxiliary
vector.

* sysdeps/i386/dl-machine.h (elf_machine_load_address): Rewrite
to not generate relocation entry.  Suggested by Richard Henderson.
(ELF_MACHINE_BEFORE_RTLD_RELOC): Removed.
(elf_machine_runtime_setup): Add .aligns.

* sysdeps/i386/fpu/fraiseexcpt.c: Add volatile to asms.

* sysdeps/i386/fpu/bits/mathinline.h: Partially undo change of
1997-08-14 03:14.  gcc 2.7.2* is really broken in some aspects.

* sysdeps/standalone/i386/i386.h: Clean up asm statements a bit.
* sysdeps/standalone/i960/i960ca.h: Likewise.

1997-08-22 19:04  Richard Henderson  <rth@cygnus.com>

* elf/rtld.c (_dl_start): Init _dl_rtld_map.l_opencount due to
undocumented test addition in _dl_map_object.

Support ET_EXEC versions of ld.so, for debugging at least:

* elf/dl-load.c (_dl_map_object): Add_name_to_object could get
called despite the DT_SONAME != NULL test, segfaulting.  Simplify
the code here as well.
* elf/dl-lookup.c (do_lookup): Skip objects with no symtab.
(_dl_setup_hash): Likewise for hash tables.
* elf/dl-version.c (_dl_check_map_versions): Likewise for strtabs.
* elf/rtld.c (_dl_start): Likewise for rpath.
(_dl_rtld_libname2): New variable.
(dl_main): Use it to add an soname for ourselves when we don't have
one of our own.  Base it on the target's .interp.
(dl_main): Again, skip printing of objects that don't have strtabs.

Sparc 32 merge:

* elf/dl-runtime.c (ELF_FIXUP_RETURN_VALUE): Provide default value.
(fixup): Simplify code.  Use ELF_FIXUP_RETURN_VALUE.
(profile_fixup): Likewise, though this still needs fixing for
Sparc32 and PPC.
* sysdeps/powerpc/dl-machine.h: Transmute ELF_FIXUP_RETURNS_ADDRESS
to ELF_FIXUP_RETURN_VALUE.

* sysdeps/sparc/sparc32/dl-machine.h: Implement lazy relocation.
Fix up _dl_start_user to handle _dl_skip_args properly.
Use _dl_hwcap to determine if "flush" is available/needed.

* sysdeps/sparc/configure.in: Remove.  It doesn't actually do
anything anymore, and what it did do is done somewhere else.
* sysdeps/sparc/configure: Likewise.

* sysdeps/sparc/fpu/bits/mathdef.h (FP_ILOGB0, FP_ILOGBNAN): New.

* sysdeps/sparc/fpu/fraiseexcpt.c: Rearrange for smaller code.

* sysdeps/sparc/sparc32/Makefile: Fix sparc->sparc/sparc32 bits
in divrem expansions.

* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (END, LOC): New
definitions for assembly syntax differences.

* sysdeps/sparc/sparc32/__longjmp.S: %g6,%g7 are reserved to the
"system".  Use %g2,%g3 instead.  Use new local label macro.
* sysdeps/sparc/sparc32/add_n.S: Use <sysdep.h> and ENTRY, END,
and LOC for proper assembly headers/footers.
* sysdeps/sparc/sparc32/addmul_1.S: Likewise.
* sysdeps/sparc/sparc32/alloca.S: Likewise.
* sysdeps/sparc/sparc32/dotmul.S: Likewise.
* sysdeps/sparc/sparc32/lshift.S: Likewise.
* sysdeps/sparc/sparc32/mul_1.S: Likewise.
* sysdeps/sparc/sparc32/rshift.S: Likewise.
* sysdeps/sparc/sparc32/sparcv8/addmul_1.S: Likewise.
* sysdeps/sparc/sparc32/sparcv8/mul_1.S: Likewise.
* sysdeps/sparc/sparc32/sparcv8/submul_1.S: Likewise.
* sysdeps/sparc/sparc32/sparcv8/udiv_qrnnd.S: Likewise.
* sysdeps/sparc/sparc32/sub_n.S: Likewise.
* sysdeps/sparc/sparc32/submul_1.S: Likewise.
* sysdeps/sparc/sparc32/udiv_qrnnd.S: Likewise.
* sysdeps/sparc/sparc32/umul.S: Likewise.
* sysdeps/sparc/sparc32/divrem.m4: Likewise.
* sysdeps/sparc/sparc32/rem.S: Regenerate.
* sysdeps/sparc/sparc32/sdiv.S: Regenerate.
* sysdeps/sparc/sparc32/udiv.S: Regenerate.
* sysdeps/sparc/sparc32/urem.S: Regenerate.

* sysdeps/sparc/sparc32/sparcv8/dotmul.S: New file.
* sysdeps/sparc/sparc32/sparcv8/rem.S: New file.
* sysdeps/sparc/sparc32/sparcv8/sdiv.S: New file.
* sysdeps/sparc/sparc32/sparcv8/udiv.S: New file.
* sysdeps/sparc/sparc32/sparcv8/umul.S: New file.
* sysdeps/sparc/sparc32/sparcv8/urem.S: New file.

* sysdeps/sparc/sparc32/bsd-_setjmp.S: Dike out.
* sysdeps/sparc/sparc32/bsd-setjmp.S: Likewise.
* sysdeps/sparc/sparc32/setjmp.S: Add _setjmp and setjmp entry points.

* sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S:
Clean up PIC code.

* sysdeps/sparc/sparc32/elf/start.S: New file, slightly modified
from the sparc64 version.
* sysdeps/sparc/sparc32/elf/start.c: Removed.

* sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h: Rewrite in
assembly based on the sparc64 version.

* sysdeps/sparc/sparc32/fpu/bits/fenv.h: Duh.  Use proper syntax
for manipulating %fsr.
* sysdeps/sparc/sparc32/fpu/fpu_control.h: Make IEEE conformance
be the default.

* elf/elf.h (HWCAP_SPARC_*): New definitions.
* elf/rtld.c (_dl_hwcap): New variable.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Record AT_HWCAP.

* sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c: New file.
Attempt to get hold of the page size based on what we might have
been told at startup time in _dl_pagesize.  This will be obsolete
when I finish the kernel hooks for a proper sysconf(), stay tuned.

Sparc 64 merge:

* sysdeps/sparc/sparc64/dl-machine.h (ELF_FIXUP_RETURN_VALUE): New.
Figure out the right thing to return based on the .plt format.

* sysdeps/sparc/sparc64/fpu/fpu_control.h: Update comment.

* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h (__dev_t):
Should have been 64-bits wide.

* sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h: sll->sllx,
optimize for branch delay slot usage.

1997-08-22  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* csu/Makefile ($(objpfx)crt%.o): Fix a missing *.so -> *.os
change.

1997-08-20  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

* math/libm-test.c (identities): Change epsilon.

* sysdeps/i386/fpu/bits/mathinline.h: Correct arguments to fabs,
fabsf, fabsl, __fabsl.

* sysdeps/libm-i387/e_remainderl.S: Pop extra value from FPU stack.
* sysdeps/libm-ieee754/s_csinhl.c: Include <fenv.h>.

80 files changed:
ChangeLog
FAQ
config.sub
configure
configure.in
csu/Makefile
elf/dl-deps.c
elf/dl-load.c
elf/dl-lookup.c
elf/dl-runtime.c
elf/dl-version.c
elf/elf.h
elf/rtld.c
intl/finddomain.c
intl/localealias.c
libc.map
libio/stdio.h
locale/iso-4217.def
locale/loadlocale.c
manual/message.texi
math/libm-test.c
po/libc.pot
posix/getopt_init.c
posix/glob.c
sysdeps/generic/dl-sysdep.c
sysdeps/i386/dl-machine.h
sysdeps/i386/fpu/bits/mathinline.h
sysdeps/i386/fpu/fraiseexcpt.c
sysdeps/powerpc/dl-machine.h
sysdeps/sparc/configure [deleted file]
sysdeps/sparc/configure.in [deleted file]
sysdeps/sparc/fpu/bits/mathdef.h
sysdeps/sparc/fpu/fraiseexcpt.c
sysdeps/sparc/sparc32/Makefile
sysdeps/sparc/sparc32/__longjmp.S
sysdeps/sparc/sparc32/add_n.S
sysdeps/sparc/sparc32/addmul_1.S
sysdeps/sparc/sparc32/alloca.S
sysdeps/sparc/sparc32/bsd-_setjmp.S
sysdeps/sparc/sparc32/bsd-setjmp.S
sysdeps/sparc/sparc32/divrem.m4
sysdeps/sparc/sparc32/dl-machine.h
sysdeps/sparc/sparc32/dotmul.S
sysdeps/sparc/sparc32/elf/start.S [new file with mode: 0644]
sysdeps/sparc/sparc32/elf/start.c [deleted file]
sysdeps/sparc/sparc32/fpu/bits/fenv.h
sysdeps/sparc/sparc32/fpu/fpu_control.h
sysdeps/sparc/sparc32/lshift.S
sysdeps/sparc/sparc32/mul_1.S
sysdeps/sparc/sparc32/rem.S
sysdeps/sparc/sparc32/rshift.S
sysdeps/sparc/sparc32/sdiv.S
sysdeps/sparc/sparc32/setjmp.S
sysdeps/sparc/sparc32/sparcv8/addmul_1.S
sysdeps/sparc/sparc32/sparcv8/dotmul.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv8/mul_1.S
sysdeps/sparc/sparc32/sparcv8/rem.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv8/sdiv.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv8/submul_1.S
sysdeps/sparc/sparc32/sparcv8/udiv.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv8/udiv_qrnnd.S
sysdeps/sparc/sparc32/sparcv8/umul.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv8/urem.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sub_n.S
sysdeps/sparc/sparc32/submul_1.S
sysdeps/sparc/sparc32/udiv.S
sysdeps/sparc/sparc32/udiv_qrnnd.S
sysdeps/sparc/sparc32/umul.S
sysdeps/sparc/sparc32/urem.S
sysdeps/sparc/sparc64/dl-machine.h
sysdeps/sparc/sparc64/fpu/fpu_control.h
sysdeps/standalone/i386/i386.h
sysdeps/standalone/i960/i960ca.h
sysdeps/unix/sysv/linux/init-first.c
sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S
sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h
sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h
sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h

index fc08e51..11481ca 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,181 @@
+1997-08-24 12:24  Ulrich Drepper  <drepper@cygnus.com>
+
+       * configure.in (INSTALL): Quote `$'.
+
+       * libc.map: Add __xpg_basename.
+
+       * csu/Makefile (initfini.s): Disable optimization.
+
+       * elf/dl-deps.c: Implement handling of DL_FILTER.
+
+       * elf/dl-load.c (_dl_init_paths): Add error check.
+
+       * intl/finddomain.c (_nl_find_domain): Correct comment.
+       * intl/localealias.c: Include <bits/libc-lock.h> not <libc-lock.h>.
+
+       * libio/stdio.h: Make {,v}snprintf available if __USE_BSD.
+       Change extern inline functions to work correctly in C++.
+
+       * locale/iso-4217.def: Update for more recent ISO 4217 version.
+
+       * locale/loadlocale.c (_nl_load_locale): Add cast.
+
+       * manual/message.texi: Finish gettext section.
+
+       * posix/getopt_init.c: Don't use relative #include path.
+       (__getopt_clean_environment): Change function to take pointer to
+       environment as argument.  Optimize generation of test string a bit.
+       * sysdeps/unix/sysv/linux/init-first.c: Call __getopt_clean_environment
+       with additional argument.
+
+       * poisx/glob.c: Add prototype for next_brace_sub.
+
+       * sysdeps/generic/dl-sysdep.c: Recognize AT_BASE value on auxiliary
+       vector.
+
+       * sysdeps/i386/dl-machine.h (elf_machine_load_address): Rewrite
+       to not generate relocation entry.  Suggested by Richard Henderson.
+       (ELF_MACHINE_BEFORE_RTLD_RELOC): Removed.
+       (elf_machine_runtime_setup): Add .aligns.
+
+       * sysdeps/i386/fpu/fraiseexcpt.c: Add volatile to asms.
+
+       * sysdeps/i386/fpu/bits/mathinline.h: Partially undo change of
+       1997-08-14 03:14.  gcc 2.7.2* is really broken in some aspects.
+
+       * sysdeps/standalone/i386/i386.h: Clean up asm statements a bit.
+       * sysdeps/standalone/i960/i960ca.h: Likewise.
+
+1997-08-22 19:04  Richard Henderson  <rth@cygnus.com>
+
+       * elf/rtld.c (_dl_start): Init _dl_rtld_map.l_opencount due to
+       undocumented test addition in _dl_map_object.
+
+       Support ET_EXEC versions of ld.so, for debugging at least:
+
+       * elf/dl-load.c (_dl_map_object): Add_name_to_object could get
+       called despite the DT_SONAME != NULL test, segfaulting.  Simplify
+       the code here as well.
+       * elf/dl-lookup.c (do_lookup): Skip objects with no symtab.
+       (_dl_setup_hash): Likewise for hash tables.
+       * elf/dl-version.c (_dl_check_map_versions): Likewise for strtabs.
+       * elf/rtld.c (_dl_start): Likewise for rpath.
+       (_dl_rtld_libname2): New variable.
+       (dl_main): Use it to add an soname for ourselves when we don't have
+       one of our own.  Base it on the target's .interp.
+       (dl_main): Again, skip printing of objects that don't have strtabs.
+
+       Sparc 32 merge:
+
+       * elf/dl-runtime.c (ELF_FIXUP_RETURN_VALUE): Provide default value.
+       (fixup): Simplify code.  Use ELF_FIXUP_RETURN_VALUE.
+       (profile_fixup): Likewise, though this still needs fixing for
+       Sparc32 and PPC.
+       * sysdeps/powerpc/dl-machine.h: Transmute ELF_FIXUP_RETURNS_ADDRESS
+       to ELF_FIXUP_RETURN_VALUE.
+
+       * sysdeps/sparc/sparc32/dl-machine.h: Implement lazy relocation.
+       Fix up _dl_start_user to handle _dl_skip_args properly.
+       Use _dl_hwcap to determine if "flush" is available/needed.
+
+       * sysdeps/sparc/configure.in: Remove.  It doesn't actually do
+       anything anymore, and what it did do is done somewhere else.
+       * sysdeps/sparc/configure: Likewise.
+
+       * sysdeps/sparc/fpu/bits/mathdef.h (FP_ILOGB0, FP_ILOGBNAN): New.
+
+       * sysdeps/sparc/fpu/fraiseexcpt.c: Rearrange for smaller code.
+
+       * sysdeps/sparc/sparc32/Makefile: Fix sparc->sparc/sparc32 bits
+       in divrem expansions.
+
+       * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (END, LOC): New
+       definitions for assembly syntax differences.
+
+       * sysdeps/sparc/sparc32/__longjmp.S: %g6,%g7 are reserved to the
+       "system".  Use %g2,%g3 instead.  Use new local label macro.
+       * sysdeps/sparc/sparc32/add_n.S: Use <sysdep.h> and ENTRY, END,
+       and LOC for proper assembly headers/footers.
+       * sysdeps/sparc/sparc32/addmul_1.S: Likewise.
+       * sysdeps/sparc/sparc32/alloca.S: Likewise.
+       * sysdeps/sparc/sparc32/dotmul.S: Likewise.
+       * sysdeps/sparc/sparc32/lshift.S: Likewise.
+       * sysdeps/sparc/sparc32/mul_1.S: Likewise.
+       * sysdeps/sparc/sparc32/rshift.S: Likewise.
+       * sysdeps/sparc/sparc32/sparcv8/addmul_1.S: Likewise.
+       * sysdeps/sparc/sparc32/sparcv8/mul_1.S: Likewise.
+       * sysdeps/sparc/sparc32/sparcv8/submul_1.S: Likewise.
+       * sysdeps/sparc/sparc32/sparcv8/udiv_qrnnd.S: Likewise.
+       * sysdeps/sparc/sparc32/sub_n.S: Likewise.
+       * sysdeps/sparc/sparc32/submul_1.S: Likewise.
+       * sysdeps/sparc/sparc32/udiv_qrnnd.S: Likewise.
+       * sysdeps/sparc/sparc32/umul.S: Likewise.
+       * sysdeps/sparc/sparc32/divrem.m4: Likewise.
+       * sysdeps/sparc/sparc32/rem.S: Regenerate.
+       * sysdeps/sparc/sparc32/sdiv.S: Regenerate.
+       * sysdeps/sparc/sparc32/udiv.S: Regenerate.
+       * sysdeps/sparc/sparc32/urem.S: Regenerate.
+
+       * sysdeps/sparc/sparc32/sparcv8/dotmul.S: New file.
+       * sysdeps/sparc/sparc32/sparcv8/rem.S: New file.
+       * sysdeps/sparc/sparc32/sparcv8/sdiv.S: New file.
+       * sysdeps/sparc/sparc32/sparcv8/udiv.S: New file.
+       * sysdeps/sparc/sparc32/sparcv8/umul.S: New file.
+       * sysdeps/sparc/sparc32/sparcv8/urem.S: New file.
+
+       * sysdeps/sparc/sparc32/bsd-_setjmp.S: Dike out.
+       * sysdeps/sparc/sparc32/bsd-setjmp.S: Likewise.
+       * sysdeps/sparc/sparc32/setjmp.S: Add _setjmp and setjmp entry points.
+
+       * sysdeps/unix/sysv/linux/sparc/sparc32/__sigtrampoline.S:
+       Clean up PIC code.
+
+       * sysdeps/sparc/sparc32/elf/start.S: New file, slightly modified
+       from the sparc64 version.
+       * sysdeps/sparc/sparc32/elf/start.c: Removed.
+
+       * sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h: Rewrite in
+       assembly based on the sparc64 version.
+
+       * sysdeps/sparc/sparc32/fpu/bits/fenv.h: Duh.  Use proper syntax
+       for manipulating %fsr.
+       * sysdeps/sparc/sparc32/fpu/fpu_control.h: Make IEEE conformance
+       be the default.
+
+       * elf/elf.h (HWCAP_SPARC_*): New definitions.
+       * elf/rtld.c (_dl_hwcap): New variable.
+       * sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Record AT_HWCAP.
+
+       * sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c: New file.
+       Attempt to get hold of the page size based on what we might have
+       been told at startup time in _dl_pagesize.  This will be obsolete
+       when I finish the kernel hooks for a proper sysconf(), stay tuned.
+
+       Sparc 64 merge:
+
+       * sysdeps/sparc/sparc64/dl-machine.h (ELF_FIXUP_RETURN_VALUE): New.
+       Figure out the right thing to return based on the .plt format.
+
+       * sysdeps/sparc/sparc64/fpu/fpu_control.h: Update comment.
+
+       * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h (__dev_t):
+       Should have been 64-bits wide.
+
+       * sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h: sll->sllx,
+       optimize for branch delay slot usage.
+
+1997-08-22  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * csu/Makefile ($(objpfx)crt%.o): Fix a missing *.so -> *.os
+       change.
+
+1997-08-20  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * math/libm-test.c (identities): Change epsilon.
+
+       * sysdeps/i386/fpu/bits/mathinline.h: Correct arguments to fabs,
+       fabsf, fabsl, __fabsl.
+
 1997-08-20 05:30  Ulrich Drepper  <drepper@cygnus.com>
 
        * catgets/catgets.c (catclose): Use __munmap instead of munmap.
 
        * sysdeps/libm-i387/e_remainder.S: Pretty print.
        * sysdeps/libm-i387/e_remainderf.S: Likewise.
-       * sysdeps/libm-i387/e_remainderl.S: Pop extra value for FPU stack.
+       * sysdeps/libm-i387/e_remainderl.S: Pop extra value from FPU stack.
        * sysdeps/libm-i387/s_cexp.S: Little optimization.
        * sysdeps/libm-i387/s_cexpl.S: Likewise.
-       * sysdep/libm-ieee754/s_csinhl.c: Include <fenv.h>.
+       * sysdeps/libm-ieee754/s_csinhl.c: Include <fenv.h>.
 
 1997-08-18 15:21  Ulrich Drepper  <drepper@cygnus.com>
 
diff --git a/FAQ b/FAQ
index df2686e..d4af13b 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -565,7 +565,7 @@ by
 
 in the above example specs file to make it work for other systems.
 
-Version 2.7.2.2 does and future versions of GCC will automatically
+Version 2.7.2.3 does and future versions of GCC will automatically
 provide the correct specs.
 
 
@@ -595,13 +595,9 @@ GROUP ( libc.so.6 ld-linux.so.2 libc.a )
          any other system I saw.  This is a bug, isn't it?''
 
 [A18] {UD} No, this is no bug.  This version of the GNU libc already
-follows the to-be-released POSIX.1g standard.  In this standard
-the type `size_t' is used for all parameters which describe a size.
-So better change now.
-
-This change is critical for system which have
-       sizeof (int) != sizeof (size_t)
-like the Alpha.
+follows the Single Unix specifications (and I think the POSIX.1g
+draft which adopted the solution).  The type for parameter describing
+a size is now `socklen_t', a new type.
 
 
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
@@ -617,28 +613,9 @@ invalid.  I.e., an emulated FPU is for the libc as good as a real one.
 [Q20]  ``How can I compile gcc 2.7.2.1 from the gcc source code using
          glibc 2.x?
 
-[A20] {AJ} There's only support for glibc 2.0 in gcc 2.7.2.2 or later.
-
-gcc 2.7.2.2 has also a nasty bug.  It installs its own version of
-assert.h into /usr/<machine>/include that is not compatible with
-glibc.  Please remove this file - otherwise you get lots of problems
-with configure.
-
-For 2.7.2.2 you should also use the following patch and configure for
-e.g. i486-linux.
------------------------------------------------------------------------
---- configure       Tue Feb 11 15:57:17 1997
-+++ configure   Wed Feb 12 23:09:29 1997
-@@ -1021,7 +1021,7 @@
-                gnu_ld=yes
-                # GNU libc version 2 does not supply these;
-                # we want them from GCC.
--               extra_parts="crtbegin.o crtend.o"
-+               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-                ;;
-         i[3456]86-go32-msdos | i[3456]86-*-go32)
-               cpu_type=i386
------------------------------------------------------------------------
+[A20] {AJ} There's only correct support for glibc 2.0.x in gcc 2.7.2.3
+or later.  You should get at least gcc 2.7.2.3.  All previous versions
+had problems with glibc support.
 
 
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
@@ -698,13 +675,13 @@ very beginning and if it is not usable `configure' will bark.
 [Q24]  ``I have set up /etc/nis.conf, and the Linux libc 5 with NYS
          works great.  But the glibc NIS+ doesn't seem to work.''
 
-[A24]  The glibc NIS+ implementation uses a /var/nis/NIS_COLD_START
-       file for storing information about the NIS+ server and their
-       public keys, because the nis.conf file do not contain all
-       necessary information.  You have to copy a NIS_COLD_START file
-       from a Solaris client (the NIS_COLD_START file is byte order
-       independend) or generate it new with nisinit from the nis-tools
-       (look at http://www-vt.uni-paderborn.de/~kukuk/linux/nisplus.html).
+[A24] The glibc NIS+ implementation uses a /var/nis/NIS_COLD_START
+file for storing information about the NIS+ server and their public
+keys, because the nis.conf file do not contain all necessary
+information.  You have to copy a NIS_COLD_START file from a Solaris
+client (the NIS_COLD_START file is byte order independend) or generate
+it new with nisinit from the nis-tools (look at
+http://www-vt.uni-paderborn.de/~kukuk/linux/nisplus.html).
 
 
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
index eb4fca1..0ac2ca1 100755 (executable)
@@ -155,6 +155,7 @@ case $basic_machine in
                | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
                | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
                | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
+               | mipstx39 | mipstx39el \
                | sparc | sparclet | sparclite | sparc64)
                basic_machine=$basic_machine-unknown
                ;;
@@ -179,7 +180,9 @@ case $basic_machine in
              | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
              | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
              | sparc64-* | mips64-* | mipsel-* \
-             | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+             | mips64el-* | mips64orion-* | mips64orionel-*  \
+             | mipstx39-* | mipstx39el-* \
+             | f301-*)
                ;;
        # Recognize the various machine names and aliases which stand
        # for a CPU type and a company and sometimes even an OS.
@@ -568,6 +571,12 @@ case $basic_machine in
                basic_machine=i386-sequent
                os=-dynix
                ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
        tower | tower-32)
                basic_machine=m68k-ncr
                ;;
index cd07ec9..1e18d28 100755 (executable)
--- a/configure
+++ b/configure
@@ -1091,7 +1091,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 if test "$INSTALL" = "${srcdir}/install-sh -c"; then
   # The makefiles need to use a different form to find it in $srcdir.
-  INSTALL='$(..)./install-sh -c'
+  INSTALL='\$(..)./install-sh -c'
 fi
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
 echo "configure:1098: checking whether ln -s works" >&5
index 481a1e3..b1e1bf7 100644 (file)
@@ -371,7 +371,7 @@ AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
 AC_PROG_INSTALL
 if test "$INSTALL" = "${srcdir}/install-sh -c"; then
   # The makefiles need to use a different form to find it in $srcdir.
-  INSTALL='$(..)./install-sh -c'
+  INSTALL='\$(..)./install-sh -c'
 fi
 AC_PROG_LN_S
 AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
index 6c8c877..993053f 100644 (file)
@@ -59,10 +59,10 @@ omit-deps += $(crtstuff)
 
 # Special rules for the building of crti.o and crtn.o
 $(objpfx)crt%.o: $(objpfx)crt%.S $(objpfx)defs.h
-       $(compile.S) -g0 $(ASFLAGS-.so) -o $@
+       $(compile.S) -g0 $(ASFLAGS-.os) -o $@
 
 $(objpfx)initfini.s: initfini.c
-       $(compile.c) -g0 -S -fPIC -finhibit-size-directive \
+       $(compile.c) -O0 -g0 -S -fPIC -finhibit-size-directive \
                $(no-exceptions) -o $@
 
 # We only have one kind of startup code files.  Static binaries and
index 3fbb3db..38db767 100644 (file)
    is signaled by the AUXTAG entry in l_info.  */
 #define AUXTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGNUM \
                 + DT_EXTRATAGIDX (DT_AUXILIARY))
+/* Whether an shared object references one or more auxiliary objects
+   is signaled by the AUXTAG entry in l_info.  */
+#define FILTERTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGNUM \
+                  + DT_EXTRATAGIDX (DT_FILTER))
 
 
 /* When loading auxiliary objects we must ignore errors.  It's ok if
@@ -138,7 +142,7 @@ _dl_map_object_deps (struct link_map *map,
     {
       struct link_map *l = runp->map;
 
-      if (l->l_info[AUXTAG] || l->l_info[DT_NEEDED])
+      if (l->l_info[AUXTAG] || l->l_info[FILTERTAG] || l->l_info[DT_NEEDED])
        {
          const char *strtab = ((void *) l->l_addr
                                + l->l_info[DT_STRTAB]->d_un.d_ptr);
@@ -190,119 +194,87 @@ _dl_map_object_deps (struct link_map *map,
                    dep->l_reserved = 1;
                  }
              }
-           else if (d->d_tag == DT_AUXILIARY)
+           else if (d->d_tag == DT_AUXILIARY || d->d_tag == DT_FILTER)
              {
                char *errstring;
                const char *objname;
+               struct list *newp;
 
-               /* Store the tag in the argument structure.  */
-               args.d = d;
-
-               if (_dl_catch_error (&errstring, &objname, openaux, &args))
+               if (d->d_tag == DT_AUXILIARY)
                  {
-                   /* We are not interested in the error message.  */
-                   assert (errstring != NULL);
-                   free (errstring);
+                   /* Store the tag in the argument structure.  */
+                   args.d = d;
+
+                   /* We must be prepared that the addressed shared
+                      object is not available.  */
+                   if (_dl_catch_error (&errstring, &objname, openaux, &args))
+                     {
+                       /* We are not interested in the error message.  */
+                       assert (errstring != NULL);
+                       free (errstring);
+
+                       /* Simply ignore this error and continue the work.  */
+                       continue;
+                     }
                  }
                else
+                 /* For filter objects the dependency must be available.  */
+                 args.aux = _dl_map_object (l, strtab + d->d_un.d_val,
+                                            (l->l_type == lt_executable
+                                             ? lt_library : l->l_type),
+                                            trace_mode);
+
+               /* The auxiliary object is actually available.
+                  Incorporate the map in all the lists.  */
+
+               /* Allocate new entry.  This always has to be done.  */
+               newp = alloca (sizeof (struct list));
+
+               /* Copy the content of the current entry over.  */
+               memcpy (newp, orig, sizeof (*newp));
+
+               /* Initialize new entry.  */
+               orig->done = 0;
+               orig->map = args.aux;
+               orig->dup = newp;
+
+               /* We must handle two situations here: the map is new,
+                  so we must add it in all three lists.  If the map
+                  is already known, we have two further possibilities:
+                  - if the object is before the current map in the
+                  search list, we do nothing.  It is already found
+                  early
+                  - if the object is after the current one, we must
+                  move it just before the current map to make sure
+                  the symbols are found early enough
+               */
+               if (args.aux->l_reserved)
                  {
-                   /* The auxiliary object is actually available.
-                      Incorporate the map in all the lists.  */
-
-                   /* Allocate new entry.  This always has to be done.  */
-                   struct list *newp = alloca (sizeof (struct list));
-
-                   /* Copy the content of the current entry over.  */
-                   memcpy (newp, orig, sizeof (*newp));
-
-                   /* Initialize new entry.  */
-                   orig->done = 0;
-                   orig->map = args.aux;
-                   orig->dup = newp;
-
-                   /* We must handle two situations here: the map is new,
-                      so we must add it in all three lists.  If the map
-                      is already known, we have two further possibilities:
-                      - if the object is before the current map in the
-                        search list, we do nothing.  It is already found
-                        early
-                      - if the object is after the current one, we must
-                        move it just before the current map to make sure
-                        the symbols are found early enough
-                   */
-                   if (args.aux->l_reserved)
-                     {
-                       /* The object is already somewhere in the
-                          list.  Locate it first.  */
-                       struct list *late;
-
-                       /* This object is already in the search list
-                          we are building.  Don't add a duplicate
-                          pointer.  Release the reference just added
-                          by _dl_map_object.  */
-                       --args.aux->l_opencount;
-
-                       for (late = orig; late->unique; late = late->unique)
-                         if (late->unique->map == args.aux)
-                           break;
-
-                       if (late->unique)
-                         {
-                           /* The object is somewhere behind the current
-                              position in the search path.  We have to
-                              move it to this earlier position.  */
-                           orig->unique = newp;
-
-                           /* Now remove the later entry from the unique
-                              list.  */
-                           late->unique = late->unique->unique;
-
-                           /* We must move the earlier in the chain.  */
-                           if (args.aux->l_prev)
-                             args.aux->l_prev->l_next = args.aux->l_next;
-                           if (args.aux->l_next)
-                             args.aux->l_next->l_prev = args.aux->l_prev;
-
-                           args.aux->l_prev = newp->map->l_prev;
-                           newp->map->l_prev = args.aux;
-                           if (args.aux->l_prev != NULL)
-                             args.aux->l_prev->l_next = args.aux;
-                           args.aux->l_next = newp->map;
-                         }
-                       else
-                         {
-                           /* The object must be somewhere earlier in
-                              the list.  That's good, we only have to
-                              insert an entry for the duplicate list.  */
-                           orig->unique = NULL;        /* Never used.  */
-
-                           /* Now we have a problem.  The element pointing
-                              to ORIG in the unique list must point to
-                              NEWP now.  This is the only place where we
-                              need this backreference and this situation
-                              is really not that frequent.  So we don't
-                              use a double-linked list but instead search
-                              for the preceding element.  */
-                           late = head;
-                           while (late->unique != orig)
-                             late = late->unique;
-                           late->unique = newp;
-                         }
-                     }
-                   else
+                   /* The object is already somewhere in the list.
+                      Locate it first.  */
+                   struct list *late;
+
+                   /* This object is already in the search list we
+                      are building.  Don't add a duplicate pointer.
+                      Release the reference just added by
+                      _dl_map_object.  */
+                   --args.aux->l_opencount;
+
+                   for (late = orig; late->unique; late = late->unique)
+                     if (late->unique->map == args.aux)
+                       break;
+
+                   if (late->unique)
                      {
-                       /* This is easy.  We just add the symbol right
-                          here.  */
+                       /* The object is somewhere behind the current
+                          position in the search path.  We have to
+                          move it to this earlier position.  */
                        orig->unique = newp;
-                       ++nlist;
-                       /* Set the mark bit that says it's already in
-                          the list.  */
-                       args.aux->l_reserved = 1;
-
-                       /* The only problem is that in the double linked
-                          list of all objects we don't have this new
-                          object at the correct place.  Correct this
-                          here.  */
+
+                       /* Now remove the later entry from the unique list.  */
+                       late->unique = late->unique->unique;
+
+                       /* We must move the earlier in the chain.  */
                        if (args.aux->l_prev)
                          args.aux->l_prev->l_next = args.aux->l_next;
                        if (args.aux->l_next)
@@ -314,19 +286,60 @@ _dl_map_object_deps (struct link_map *map,
                          args.aux->l_prev->l_next = args.aux;
                        args.aux->l_next = newp->map;
                      }
+                   else
+                     {
+                       /* The object must be somewhere earlier in the
+                          list.  That's good, we only have to insert
+                          an entry for the duplicate list.  */
+                       orig->unique = NULL;    /* Never used.  */
+
+                       /* Now we have a problem.  The element
+                          pointing to ORIG in the unique list must
+                          point to NEWP now.  This is the only place
+                          where we need this backreference and this
+                          situation is really not that frequent.  So
+                          we don't use a double-linked list but
+                          instead search for the preceding element.  */
+                       late = head;
+                       while (late->unique != orig)
+                         late = late->unique;
+                       late->unique = newp;
+                     }
+                 }
+               else
+                 {
+                   /* This is easy.  We just add the symbol right here.  */
+                   orig->unique = newp;
+                   ++nlist;
+                   /* Set the mark bit that says it's already in the list.  */
+                   args.aux->l_reserved = 1;
+
+                   /* The only problem is that in the double linked
+                      list of all objects we don't have this new
+                      object at the correct place.  Correct this here.  */
+                   if (args.aux->l_prev)
+                     args.aux->l_prev->l_next = args.aux->l_next;
+                   if (args.aux->l_next)
+                     args.aux->l_next->l_prev = args.aux->l_prev;
+
+                   args.aux->l_prev = newp->map->l_prev;
+                   newp->map->l_prev = args.aux;
+                   if (args.aux->l_prev != NULL)
+                     args.aux->l_prev->l_next = args.aux;
+                   args.aux->l_next = newp->map;
+                 }
 
-                   /* Move the tail pointers if necessary.  */
-                   if (orig == utail)
-                     utail = newp;
-                   if (orig == dtail)
-                     dtail = newp;
+               /* Move the tail pointers if necessary.  */
+               if (orig == utail)
+                 utail = newp;
+               if (orig == dtail)
+                 dtail = newp;
 
-                   /* Move on the insert point.  */
-                   orig = newp;
+               /* Move on the insert point.  */
+               orig = newp;
 
-                   /* We always add an entry to the duplicate list.  */
-                   ++nduplist;
-                 }
+               /* We always add an entry to the duplicate list.  */
+               ++nduplist;
              }
        }
       else
index ce3bd9f..9a6aae6 100644 (file)
@@ -406,6 +406,9 @@ _dl_init_paths (void)
        {
          fake_path_list = (struct r_search_path_elem **)
            malloc ((nllp + 1) * sizeof (struct r_search_path_elem *));
+         if (fake_path_list == NULL)
+           _dl_signal_error (ENOMEM, NULL,
+                             "cannot create cache for search path");
 
          (void) fillin_rpath (local_strdup (llp), fake_path_list, ":;",
                               __libc_enable_secure ? trusted_dirs : NULL);
@@ -901,23 +904,33 @@ _dl_map_object (struct link_map *loader, const char *name, int type,
 
   /* Look for this name among those already loaded.  */
   for (l = _dl_loaded; l; l = l->l_next)
-    if (l->l_opencount > 0 && _dl_name_match_p (name, l) ||
-       /* If the requested name matches the soname of a loaded object,
-          use that object.  */
-       (l->l_info[DT_SONAME] &&
-        ! strcmp (name, (const char *) (l->l_addr +
-                                        l->l_info[DT_STRTAB]->d_un.d_ptr +
-                                        l->l_info[DT_SONAME]->d_un.d_val))))
-      {
-       /* The object is already loaded.
-          Just bump its reference count and return it.  */
-       const char *soname = (const char *) (l->l_addr +
-                                            l->l_info[DT_STRTAB]->d_un.d_ptr +
-                                            l->l_info[DT_SONAME]->d_un.d_val);
-       add_name_to_object (l, local_strdup (soname));
-       ++l->l_opencount;
-       return l;
-      }
+    {
+      /* If the requested name matches the soname of a loaded object,
+        use that object.  Elide this check for names that have not
+        yet been opened.  */
+      if (l->l_opencount <= 0)
+       continue;
+      if (!_dl_name_match_p (name, l))
+       {
+         const char *soname;
+
+         if (l->l_info[DT_SONAME] == NULL)
+           continue;
+
+         soname = (const char *) (l->l_addr
+                                  + l->l_info[DT_STRTAB]->d_un.d_ptr
+                                  + l->l_info[DT_SONAME]->d_un.d_val);
+         if (strcmp (name, soname) != 0)
+           continue;
+
+         /* We have a match on a new name -- cache it.  */
+         add_name_to_object (l, local_strdup (soname));
+       }
+
+      /* We have a match -- bump the reference count and return it.  */
+      ++l->l_opencount;
+      return l;
+    }
 
   if (strchr (name, '/') == NULL)
     {
index 4cc1f2d..c3a67ff 100644 (file)
@@ -93,6 +93,10 @@ do_lookup (const char *undef_name, unsigned long int hash,
          map->l_type == lt_executable)
        continue;
 
+      /* Skip objects without symbol tables.  */
+      if (map->l_info[DT_SYMTAB] == NULL)
+       continue;
+
       symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
       strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
       if (map->l_nversions > 0 && map->l_info[VERSTAG (DT_VERSYM)] != NULL)
@@ -364,8 +368,13 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name,
 void
 _dl_setup_hash (struct link_map *map)
 {
-  ElfW(Symndx) *hash = (void *)(map->l_addr + map->l_info[DT_HASH]->d_un.d_ptr);
+  ElfW(Symndx) *hash;
   ElfW(Symndx) nchain;
+
+  if (!map->l_info[DT_HASH])
+    return;
+  hash = (void *)(map->l_addr + map->l_info[DT_HASH]->d_un.d_ptr);
+
   map->l_nbuckets = *hash++;
   nchain = *hash++;
   map->l_buckets = hash;
index 8ee1838..46c0e1b 100644 (file)
@@ -87,6 +87,10 @@ _dl_object_relocation_scope (struct link_map *l)
 # define VERSYMIDX(sym)        (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (sym))
 #endif
 
+#ifndef ELF_FIXUP_RETURN_VALUE
+#define ELF_FIXUP_RETURN_VALUE(map, result)  (result)
+#endif
+
 /* We need to define the function as a local symbol so that the reference
    in the trampoline code will be a local PC-relative call.  Tell the
    compiler not to worry that the function appears not to be called.  */
@@ -120,6 +124,7 @@ fixup (
   const PLTREL *const reloc
     = (const void *) (l->l_addr + l->l_info[DT_JMPREL]->d_un.d_ptr +
                      reloc_offset);
+  ElfW(Addr) *const rel_addr = (ElfW(Addr) *)(l->l_addr + reloc->r_offset);
 
   /* Set up the scope to find symbols referenced by this object.  */
   struct link_map **scope = _dl_object_relocation_scope (l);
@@ -144,21 +149,17 @@ fixup (
 
        elf_machine_relplt (l, reloc, &symtab[ELFW(R_SYM) (reloc->r_info)],
                            &l->l_versions[ndx],
-                           (void *) (l->l_addr + reloc->r_offset));
+                           (void *) rel_addr);
       }
     else
       elf_machine_relplt (l, reloc, &symtab[ELFW(R_SYM) (reloc->r_info)],
-                         NULL, (void *) (l->l_addr + reloc->r_offset));
+                         NULL, (void *) rel_addr);
   }
 
   *_dl_global_scope_end = NULL;
 
   /* Return the address that was written by the relocation.  */
-#ifdef ELF_FIXUP_RETURNS_ADDRESS
-  return (ElfW(Addr))(l->l_addr + reloc->r_offset);
-#else
-  return *(ElfW(Addr) *) (l->l_addr + reloc->r_offset);
-#endif
+  return ELF_FIXUP_RETURN_VALUE(l, *rel_addr);
 }
 
 
@@ -219,17 +220,10 @@ profile_fixup (
   }
 
   *_dl_global_scope_end = NULL;
-
-  /* Return the address that was written by the relocation.  */
-#ifdef ELF_FIXUP_RETURNS_ADDRESS
   (*mcount_fct) (retaddr, result);
 
-  return &result;      /* XXX This cannot work.  What to do??? --drepper */
-#else
-  (*mcount_fct) (retaddr, result);
-
-  return result;
-#endif
+  /* Return the address that was written by the relocation.  */
+  return ELF_FIXUP_RETURN_VALUE(l, result);
 }
 #endif
 
index 0675b1c..b5515c8 100644 (file)
@@ -155,16 +155,23 @@ int
 _dl_check_map_versions (struct link_map *map, int verbose)
 {
   int result = 0;
-  const char *strtab = (const char *) (map->l_addr
-                                      + map->l_info[DT_STRTAB]->d_un.d_ptr);
+  const char *strtab;
   /* Pointer to section with needed versions.  */
-  ElfW(Dyn) *dyn = map->l_info[VERSTAG (DT_VERNEED)];
+  ElfW(Dyn) *dyn;
   /* Pointer to dynamic section with definitions.  */
-  ElfW(Dyn) *def = map->l_info[VERSTAG (DT_VERDEF)];
+  ElfW(Dyn) *def;
   /* We need to find out which is the highest version index used
     in a dependecy.  */
   unsigned int ndx_high = 0;
 
+  /* If we don't have a string table, we must be ok.  */
+  if (map->l_info[DT_STRTAB] == NULL)
+    return 0;
+  strtab = (const char *) (map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
+
+  dyn = map->l_info[VERSTAG (DT_VERNEED)];
+  def = map->l_info[VERSTAG (DT_VERDEF)];
+
   if (dyn != NULL)
     {
       /* This file requires special versions from its dependencies.  */
index e78bcb5..cf8403b 100644 (file)
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -783,6 +783,13 @@ typedef struct
 #define DT_SPARC_PLTFMT        0x70000001      /* .plt format version/type */
 #define DT_SPARC_NUM   2
 
+/* Bits present in AT_HWCAP, primarily for Sparc32.  */
+
+#define HWCAP_SPARC_FLUSH      1       /* The cpu supports flush insn.  */
+#define HWCAP_SPARC_STBAR      2
+#define HWCAP_SPARC_SWAP       4
+#define HWCAP_SPARC_MULDIV     8
+
 /* MIPS R3000 specific definitions.  */
 
 /* Legal values for e_flags field of Elf32_Ehdr.  */
index c3d81e1..60a102a 100644 (file)
@@ -53,13 +53,13 @@ static void print_unresolved (int errcode, const char *objname,
 static void print_missing_version (int errcode, const char *objname,
                                   const char *errsting);
 
-
 int _dl_argc;
 char **_dl_argv;
 const char *_dl_rpath;
 int _dl_verbose;
 const char *_dl_platform;
 size_t _dl_platformlen;
+unsigned long _dl_hwcap;
 struct r_search_path *_dl_search_paths;
 const char *_dl_profile;
 const char *_dl_profile_output;
@@ -80,6 +80,7 @@ static void dl_main (const ElfW(Phdr) *phdr,
 
 struct link_map _dl_rtld_map;
 struct libname_list _dl_rtld_libname;
+struct libname_list _dl_rtld_libname2;
 
 #ifdef RTLD_START
 RTLD_START
@@ -119,19 +120,22 @@ _dl_start (void *arg)
      the operating system's program loader where to find the program
      header table in core.  */
 
-
   /* Transfer data about ourselves to the permanent link_map structure.  */
   _dl_rtld_map.l_addr = bootstrap_map.l_addr;
   _dl_rtld_map.l_ld = bootstrap_map.l_ld;
+  _dl_rtld_map.l_opencount = 1;
   memcpy (_dl_rtld_map.l_info, bootstrap_map.l_info,
          sizeof _dl_rtld_map.l_info);
   _dl_setup_hash (&_dl_rtld_map);
 
   /* Cache the DT_RPATH stored in ld.so itself; this will be
      the default search path.  */
-  _dl_rpath = (void *) (_dl_rtld_map.l_addr +
-                       _dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr +
-                       _dl_rtld_map.l_info[DT_RPATH]->d_un.d_val);
+  if (_dl_rtld_map.l_info[DT_STRTAB] && _dl_rtld_map.l_info[DT_RPATH])
+    {
+      _dl_rpath = (void *) (_dl_rtld_map.l_addr +
+                           _dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr +
+                           _dl_rtld_map.l_info[DT_RPATH]->d_un.d_val);
+    }
 
   /* Call the OS-dependent function to set up life so we can do things like
      file access.  It will call `dl_main' (below) to do all the real work
@@ -416,6 +420,23 @@ of this helper program; chances are you did not intend to run this program.\n",
        _dl_rtld_libname.name = (const char *) main_map->l_addr + ph->p_vaddr;
        _dl_rtld_libname.next = NULL;
        _dl_rtld_map.l_libname = &_dl_rtld_libname;
+
+       /* Ordinarilly, we would get additional names for the loader from
+          our DT_SONAME.  This can't happen if we were actually linked as
+          a static executable (detect this case when we have no DYNAMIC).
+          If so, assume the filename component of the interpreter path to
+          be our SONAME, and add it to our name list.  */
+       if (_dl_rtld_map.l_ld == NULL)
+         {
+           char *p = strrchr (_dl_rtld_libname.name, '/');
+           if (p)
+             {
+               _dl_rtld_libname2.name = p+1;
+               _dl_rtld_libname2.next = NULL;
+               _dl_rtld_libname.next = &_dl_rtld_libname2;
+             }
+         }
+
        has_interp = 1;
        break;
       }
@@ -696,74 +717,70 @@ of this helper program; chances are you did not intend to run this program.\n",
 
              for (map = _dl_loaded; map != NULL; map = map->l_next)
                {
-                 const char *strtab =
-                   (const char *) (map->l_addr
-                                   + map->l_info[DT_STRTAB]->d_un.d_ptr);
+                 const char *strtab;
                  ElfW(Dyn) *dyn = map->l_info[VERNEEDTAG];
+                 ElfW(Verneed) *ent;
+
+                 if (dyn == NULL)
+                   continue;
+
+                 strtab = (const char *)
+                   (map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
+                 ent = (ElfW(Verneed) *) (map->l_addr + dyn->d_un.d_ptr);
 
-                 if (dyn != NULL)
+                 if (first)
                    {
-                     ElfW(Verneed) *ent =
-                       (ElfW(Verneed) *) (map->l_addr + dyn->d_un.d_ptr);
+                     _dl_sysdep_message ("\n\tVersion information:\n", NULL);
+                     first = 0;
+                   }
 
-                     if (first)
-                       {
-                         _dl_sysdep_message ("\n\tVersion information:\n",
-                                             NULL);
-                         first = 0;
-                       }
+                 _dl_sysdep_message ("\t", (map->l_name[0]
+                                            ? map->l_name : _dl_argv[0]),
+                                     ":\n", NULL);
+
+                 while (1)
+                   {
+                     ElfW(Vernaux) *aux;
+                     struct link_map *needed;
 
-                     _dl_sysdep_message ("\t", (map->l_name[0]
-                                                ? map->l_name
-                                                : _dl_argv[0]), ":\n",
-                                         NULL);
+                     needed = find_needed (strtab + ent->vn_file);
+                     aux = (ElfW(Vernaux) *) ((char *) ent + ent->vn_aux);
 
                      while (1)
                        {
-                         ElfW(Vernaux) *aux;
-                         struct link_map *needed;
-
-                         needed = find_needed (strtab + ent->vn_file);
-                         aux = (ElfW(Vernaux) *) ((char *) ent + ent->vn_aux);
-
-                         while (1)
-                           {
-                             const char *fname = NULL;
-
-                             _dl_sysdep_message ("\t\t",
-                                                 strtab + ent->vn_file,
-                                                 " (", strtab + aux->vna_name,
-                                                 ") ",
-                                                 (aux->vna_flags
-                                                  & VER_FLG_WEAK
-                                                  ? "[WEAK] " : ""),
-                                                 "=> ", NULL);
-
-                             if (needed != NULL
-                                 && match_version (strtab + aux->vna_name,
-                                                   needed))
-                               fname = needed->l_name;
-
-                             _dl_sysdep_message (fname ?: "not found", "\n",
-                                                 NULL);
-
-                             if (aux->vna_next == 0)
-                               /* No more symbols.  */
-                               break;
-
-                             /* Next symbol.  */
-                             aux = (ElfW(Vernaux) *) ((char *) aux
-                                                  + aux->vna_next);
-                           }
+                         const char *fname = NULL;
+
+                         _dl_sysdep_message ("\t\t",
+                                             strtab + ent->vn_file,
+                                             " (", strtab + aux->vna_name,
+                                             ") ",
+                                             (aux->vna_flags
+                                              & VER_FLG_WEAK
+                                              ? "[WEAK] " : ""),
+                                             "=> ", NULL);
+
+                         if (needed != NULL
+                             && match_version (strtab+aux->vna_name, needed))
+                           fname = needed->l_name;
+
+                         _dl_sysdep_message (fname ?: "not found", "\n",
+                                             NULL);
 
-                         if (ent->vn_next == 0)
-                           /* No more dependencies.  */
+                         if (aux->vna_next == 0)
+                           /* No more symbols.  */
                            break;
 
-                         /* Next dependency.  */
-                         ent = (ElfW(Verneed) *) ((char *) ent
-                                                  + ent->vn_next);
+                         /* Next symbol.  */
+                         aux = (ElfW(Vernaux) *) ((char *) aux
+                                                  + aux->vna_next);
                        }
+
+                     if (ent->vn_next == 0)
+                       /* No more dependencies.  */
+                       break;
+
+                     /* Next dependency.  */
+                     ent = (ElfW(Verneed) *) ((char *) ent + ent->vn_next);
                    }
                }
            }
index c1ab68b..769bd93 100644 (file)
@@ -99,9 +99,9 @@ _nl_find_domain (dirname, locale, domainname)
 
        language[_territory][+audience][+special][,[sponsor][_revision]]
 
-     Beside the first all of them are allowed to be missing.  If the
-     full specified locale is not found, the less specific one are
-     looked for.  The various part will be stripped of according to
+     Beside the first part all of them are allowed to be missing.  If
+     the full specified locale is not found, the less specific one are
+     looked for.  The various parts will be stripped off according to
      the following order:
                (1) revision
                (2) sponsor
index 99fcfa5..c77f125 100644 (file)
@@ -85,7 +85,7 @@ void free ();
 # define strdup __strdup
 
 /* We need locking here since we can be called from different palces.  */
-# include <libc-lock.h>
+# include <bits/libc-lock.h>
 
 __libc_lock_define_initialized (static, lock);
 #endif
index e503c9c..fc6c9fe 100644 (file)
--- a/libc.map
+++ b/libc.map
@@ -41,7 +41,7 @@ GLIBC_2.0 {
     # functions with required interface outside normal name space
     _exit; __ivaliduser; __open_catalog;
     __argz_count; __argz_stringify; __argz_next;
-    __check_rhosts_file; __rcmd_errstr;
+    __check_rhosts_file; __rcmd_errstr; __xpg_basename;
 
     # functions from the experimental locale implementation
     __*_l; __newlocale; __duplocale; __freelocale;
index 24e0fa9..2062fa4 100644 (file)
@@ -51,6 +51,12 @@ typedef struct _IO_FILE FILE;
 
 #include <libio.h>
 
+#ifdef __cplusplus
+# define __STDIO_INLINE __inline
+#else
+# define __STDIO_INLINE extern __inline
+#endif
+
 /* The type of the second argument to `fgetpos' and `fsetpos'.  */
 typedef _G_fpos_t fpos_t;
 
@@ -235,36 +241,40 @@ extern int vsprintf __P ((char *__restrict __s,
                          _G_va_list __arg));
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 vprintf (const char *__restrict __fmt, _G_va_list __arg)
 {
   return vfprintf (stdout, __fmt, __arg);
 }
 #endif /* Optimizing.  */
 
-#if defined __USE_GNU || defined __USE_ISOC9X
+#if defined __USE_BSD || defined __USE_ISOC9X
 /* Maximum chars of output to write in MAXLEN.  */
-extern int __snprintf __P ((char *__s, size_t __maxlen,
-                           __const char *__format, ...));
-extern int snprintf __P ((char *__s, size_t __maxlen,
-                         __const char *__format, ...));
-
-extern int __vsnprintf __P ((char *__s, size_t __maxlen,
-                            __const char *__format, _G_va_list __arg));
-extern int vsnprintf __P ((char *__s, size_t __maxlen,
-                          __const char *__format, _G_va_list __arg));
+extern int __snprintf __P ((char *__restrict __s, size_t __maxlen,
+                           __const char *__restrict __format, ...));
+extern int snprintf __P ((char *__restrict __s, size_t __maxlen,
+                         __const char *__restrict __format, ...));
+
+extern int __vsnprintf __P ((char *__restrict __s, size_t __maxlen,
+                            __const char *__restrict __format,
+                            _G_va_list __arg));
+extern int vsnprintf __P ((char *__restrict __s, size_t __maxlen,
+                          __const char *__restrict __format,
+                          _G_va_list __arg));
 #endif
 
 #ifdef __USE_GNU
 /* Write formatted output to a string dynamically allocated with `malloc'.
    Store the address of the string in *PTR.  */
-extern int vasprintf __P ((char **__ptr, __const char *__f,
-                          _G_va_list __arg));
-extern int asprintf __P ((char **__ptr, __const char *__fmt, ...));
+extern int vasprintf __P ((char **__restrict __ptr,
+                          __const char *__restrict __f, _G_va_list __arg));
+extern int asprintf __P ((char **__restrict __ptr,
+                         __const char *__restrict __fmt, ...));
 
 /* Write formatted output to a file descriptor.  */
-extern int vdprintf __P ((int __fd, __const char *__fmt, _G_va_list __arg));
-extern int dprintf __P ((int __fd, __const char *__fmt, ...));
+extern int vdprintf __P ((int __fd, __const char *__restrict __fmt,
+                         _G_va_list __arg));
+extern int dprintf __P ((int __fd, __const char *__restrict __fmt, ...));
 #endif
 
 
@@ -279,19 +289,24 @@ extern int sscanf __P ((__const char *__restrict __s,
 
 #ifdef __USE_GNU
 /* Read formatted input from S into argument list ARG.  */
-extern int __vfscanf __P ((FILE *__s, __const char *__format,
+extern int __vfscanf __P ((FILE *__restrict __s,
+                          __const char *__restrict __format,
                           _G_va_list __arg));
-extern int vfscanf __P ((FILE *__s, __const char *__format,
+extern int vfscanf __P ((FILE *__restrict __s,
+                        __const char *__restrict __format,
                         _G_va_list __arg));
 
 /* Read formatted input from stdin into argument list ARG.  */
-extern int __vscanf __P ((__const char *__format, _G_va_list __arg));
-extern int vscanf __P ((__const char *__format, _G_va_list __arg));
+extern int __vscanf __P ((__const char *__restrict __format,
+                         _G_va_list __arg));
+extern int vscanf __P ((__const char *__restrict __format, _G_va_list __arg));
 
 /* Read formatted input from S into argument list ARG.  */
-extern int __vsscanf __P ((__const char *__s, __const char *__format,
+extern int __vsscanf __P ((__const char *__restrict __s,
+                          __const char *__restrict __format,
                           _G_va_list __arg));
-extern int vsscanf __P ((__const char *__s, __const char *__format,
+extern int vsscanf __P ((__const char *__restrict __s,
+                        __const char *__restrict __format,
                         _G_va_list __arg));
 #endif /* Use GNU.  */
 
@@ -308,7 +323,7 @@ extern int getchar __P ((void));
 #define getc(_fp) _IO_getc (_fp)
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 getchar (void)
 {
   return _IO_getc (stdin);
@@ -321,13 +336,13 @@ extern int getc_unlocked __P ((FILE *__stream));
 extern int getchar_unlocked __P ((void));
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 getc_unlocked (FILE *__fp)
 {
   return _IO_getc_unlocked (__fp);
 }
 
-extern __inline int
+__STDIO_INLINE int
 getchar_unlocked (void)
 {
   return _IO_getc_unlocked (stdin);
@@ -348,7 +363,7 @@ extern int putchar __P ((int __c));
 #define putc(_ch, _fp) _IO_putc (_ch, _fp)
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 putchar (int __c)
 {
   return _IO_putc (__c, stdout);
@@ -360,7 +375,7 @@ putchar (int __c)
 extern int fputc_unlocked __P ((int __c, FILE *__stream));
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 fputc_unlocked (int __c, FILE *__stream)
 {
   return _IO_putc_unlocked (__c, __stream);
@@ -374,13 +389,13 @@ extern int putc_unlocked __P ((int __c, FILE *__stream));
 extern int putchar_unlocked __P ((int __c));
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 putc_unlocked (int __c, FILE *__stream)
 {
   return _IO_putc_unlocked (__c, __stream);
 }
 
-extern __inline int
+__STDIO_INLINE int
 putchar_unlocked (int __c)
 {
   return _IO_putc_unlocked (__c, stdout);
@@ -423,7 +438,7 @@ _IO_ssize_t __getline __P ((char **__lineptr, size_t *__n, FILE *__stream));
 _IO_ssize_t getline __P ((char **__lineptr, size_t *__n, FILE *__stream));
 
 #ifdef __OPTIMIZE__
-extern __inline _IO_ssize_t
+__STDIO_INLINE _IO_ssize_t
 getline (char **__lineptr, size_t *__n, FILE *__stream)
 {
   return __getdelim (__lineptr, __n, '\n', __stream);
@@ -488,13 +503,13 @@ extern int feof_unlocked __P ((FILE *__stream));
 extern int ferror_unlocked __P ((FILE *__stream));
 
 #ifdef __OPTIMIZE__
-extern __inline int
+__STDIO_INLINE int
 feof_unlocked (FILE *__stream)
 {
   return _IO_feof_unlocked (__stream);
 }
 
-extern __inline int
+__STDIO_INLINE int
 ferror_unlocked (FILE *__stream)
 {
   return _IO_ferror_unlocked (__stream);
@@ -579,6 +594,9 @@ extern void funlockfile __P ((FILE *__stream));
 
 __END_DECLS
 
+/* Define helper macro.  */
+#undef __STDIO_INLINE
+
 #endif /* <stdio.h> included.  */
 
 #endif /* !_STDIO_H */
index 46880a2..d7a0f37 100644 (file)
 /*
- * Defines the valid international currency symbols according to ISO-4217.
+ * Defines the valid international currency symbols according to ISO 4217.
  * This is used in monetary.c(monetary_check).
  *
  * If you find something missing or wrong contact <bug-glibc@prep.ai.mit.edu>
  *
  * !!! The list has to be sorted !!!
  */
-DEFINE_INT_CURR("AED ")                /* United Arab Emirates  */
-DEFINE_INT_CURR("AFA ")                /* Afghanistan  */
-DEFINE_INT_CURR("ALL ")                /* Albania  */
+DEFINE_INT_CURR("ADP ")                /* Andorran Peseta  */
+DEFINE_INT_CURR("AED ")                /* United Arab Emirates Dirham  */
+DEFINE_INT_CURR("AFA ")                /* Afghanistan Afgani  */
+DEFINE_INT_CURR("ALL ")                /* Albanian Lek  */
+DEFINE_INT_CURR("AMD ")                /* Armenia Dram  */
 DEFINE_INT_CURR("ANG ")                /* Netherlands Antilles  */
-DEFINE_INT_CURR("AOK ")                /* Angola  */
-DEFINE_INT_CURR("ARP ")                /* Argentina  */
-DEFINE_INT_CURR("ATS ")                /* Austria   */
-DEFINE_INT_CURR("AUD ")                /* Australia  */
-DEFINE_INT_CURR("BBD ")                /* Barbados  */
-DEFINE_INT_CURR("BDT ")                /* Bangladesh  */
-DEFINE_INT_CURR("BEF ")                /* Belgium   */
-DEFINE_INT_CURR("BGL ")                /* Bulgaria  */
-DEFINE_INT_CURR("BHD ")                /* Bahrain  */
+DEFINE_INT_CURR("AOK ")                /* Angolan Kwanza  */
+DEFINE_INT_CURR("AON ")                /* Angolan New Kwanza  */
+DEFINE_INT_CURR("ARP ")                /* Argentine Peso  */
+DEFINE_INT_CURR("ATS ")                /* Austrian Schilling  */
+DEFINE_INT_CURR("AUD ")                /* Australian Dollar  */
+DEFINE_INT_CURR("AZM ")                /* Azerbaijan Manat  */
+DEFINE_INT_CURR("BBD ")                /* Barbados Dollar  */
+DEFINE_INT_CURR("BDT ")                /* Bangladesh Taka  */
+DEFINE_INT_CURR("BEF ")                /* Belgian Franc  */
+DEFINE_INT_CURR("BGL ")                /* Bulgarian Lev  */
+DEFINE_INT_CURR("BHD ")                /* Bahraini Dinar  */
 DEFINE_INT_CURR("BIF ")                /* Burundi  */
-DEFINE_INT_CURR("BMD ")                /* Burmuda  */
-DEFINE_INT_CURR("BND ")                /* Brunei  */
-DEFINE_INT_CURR("BOP ")                /* Bolivia  */
-DEFINE_INT_CURR("BRC ")                /* Brazil  */
-DEFINE_INT_CURR("BSD ")                /* Bahamas  */
+DEFINE_INT_CURR("BMD ")                /* Burmudian Dollar  */
+DEFINE_INT_CURR("BND ")                /* Brunei Dollar  */
+DEFINE_INT_CURR("BOP ")                /* Bolivian Boliviano  */
+DEFINE_INT_CURR("BPS ")                /* Canton and Enderbury Islands  */
+DEFINE_INT_CURR("BRC ")                /* Brazil Real  */
+DEFINE_INT_CURR("BRL ")                /* Brazil Cruzeiro  */
+DEFINE_INT_CURR("BRR ")                /* Brazil Real  */
+DEFINE_INT_CURR("BSD ")                /* Bahamas Dollar  */
+DEFINE_INT_CURR("BTN ")                /* Bhutan Ngultrum  */
 DEFINE_INT_CURR("BUK ")                /* Burma  */
-DEFINE_INT_CURR("BWP ")                /* Botswana  */
-DEFINE_INT_CURR("BZD ")                /* Belize  */
-DEFINE_INT_CURR("CAD ")                /* Canada  */
-DEFINE_INT_CURR("CHF ")                /* Switzerland, Liechtenstein  */
-DEFINE_INT_CURR("CLP ")                /* Chile  */
-DEFINE_INT_CURR("CNY ")                /* China  */
-DEFINE_INT_CURR("COP ")                /* Colombia  */
-DEFINE_INT_CURR("CRC ")                /* Costa Rica  */
-DEFINE_INT_CURR("CSK ")                /* Czechoslovakia  */
-DEFINE_INT_CURR("CUP ")                /* Cuba  */
-DEFINE_INT_CURR("CVE ")                /* Cape Verde  */
-DEFINE_INT_CURR("CYP ")                /* Cyprus  */
-DEFINE_INT_CURR("DEM ")                /* Germany  */
-DEFINE_INT_CURR("DJF ")                /* Djibouti  */
-DEFINE_INT_CURR("DKK ")                /* Denmark  */
+DEFINE_INT_CURR("BWP ")                /* Botswana Pula  */
+DEFINE_INT_CURR("BZD ")                /* Belize Dollar  */
+DEFINE_INT_CURR("CAD ")                /* Canadian Dollar  */
+DEFINE_INT_CURR("CFP ")                /* French Pacific Island Franc  */
+DEFINE_INT_CURR("CHF ")                /* Swiss Franc (Liechtenstein)  */
+DEFINE_INT_CURR("CLP ")                /* Chilean Peso  */
+DEFINE_INT_CURR("CNY ")                /* China Yuan Renminbi  */
+DEFINE_INT_CURR("COP ")                /* Colombian Peso  */
+DEFINE_INT_CURR("CRC ")                /* Costa Rican Colon  */
+DEFINE_INT_CURR("CUP ")                /* Cuban Peso  */
+DEFINE_INT_CURR("CVE ")                /* Cape Verde Escudo  */
+DEFINE_INT_CURR("CYP ")                /* Cypriot Pound  */
+DEFINE_INT_CURR("CZK ")                /* Czech Koruna  */
+DEFINE_INT_CURR("DEM ")                /* German Mark  */
+DEFINE_INT_CURR("DJF ")                /* Djibouti Franc  */
+DEFINE_INT_CURR("DKK ")                /* Danish Krone (Faroe Islands, Greenland)  */
 DEFINE_INT_CURR("DOP ")                /* Dominican Republic  */
-DEFINE_INT_CURR("DZD ")                /* Algeria  */
-DEFINE_INT_CURR("ECS ")                /* Ecuador  */
-DEFINE_INT_CURR("EEK ")                /* Estonia  */
-DEFINE_INT_CURR("EGP ")                /* Egypt  */
-DEFINE_INT_CURR("ESP ")                /* Spain  */
-DEFINE_INT_CURR("ETB ")                /* Ethiopia  */
-DEFINE_INT_CURR("FIM ")                /* Finland  */
-DEFINE_INT_CURR("FJD ")                /* Fiji  */
-DEFINE_INT_CURR("FKP ")                /* Falkland Islands (Malvinas)  */
-DEFINE_INT_CURR("FRF ")                /* France  */
-DEFINE_INT_CURR("GBP ")                /* Great Britain  */
-DEFINE_INT_CURR("GHC ")                /* Ghana  */
-DEFINE_INT_CURR("GIP ")                /* Gibraltar  */
-DEFINE_INT_CURR("GMD ")                /* Gambia  */
-DEFINE_INT_CURR("GNS ")                /* Guinea  */
-DEFINE_INT_CURR("GQE ")                /* Equatorial Guinea  */
-DEFINE_INT_CURR("GRD ")                /* Greece  */
-DEFINE_INT_CURR("GTQ ")                /* Guatemala  */
-DEFINE_INT_CURR("GWP ")                /* Guinea-Bissau  */
-DEFINE_INT_CURR("GYD ")                /* Guyana  */
-DEFINE_INT_CURR("HKD ")                /* Hong Kong  */
-DEFINE_INT_CURR("HNL ")                /* Honduras  */
-DEFINE_INT_CURR("HRD ")                /* Croatia  */
-DEFINE_INT_CURR("HTG ")                /* Haiti  */
-DEFINE_INT_CURR("HUF ")                /* Hungary  */
-DEFINE_INT_CURR("IDR ")                /* Indonesia  */
-DEFINE_INT_CURR("IEP ")                /* Ireland  */
-DEFINE_INT_CURR("ILS ")                /* Israel  */
-DEFINE_INT_CURR("INR ")                /* India, Bhutan  */
-DEFINE_INT_CURR("IQD ")                /* Iraq  */
-DEFINE_INT_CURR("IRR ")                /* Iran  */
-DEFINE_INT_CURR("ISK ")                /* Iceland  */
-DEFINE_INT_CURR("ITL ")                /* Italy  */
-DEFINE_INT_CURR("JMD ")                /* Jamaica  */
-DEFINE_INT_CURR("JOD ")                /* Jordan  */
-DEFINE_INT_CURR("JPY ")                /* Japan  */
-DEFINE_INT_CURR("KES ")                /* Kenya  */
-DEFINE_INT_CURR("KHR ")                /* Democratic Kampuchea  */
-DEFINE_INT_CURR("KMF ")                /* Comoros  */
-DEFINE_INT_CURR("KPW ")                /* Democratic People's of Korea  */
-DEFINE_INT_CURR("KRW ")                /* Republic of Korea  */
-DEFINE_INT_CURR("KWD ")                /* Kuwait  */
+DEFINE_INT_CURR("DZD ")                /* Algerian Dinar  */
+DEFINE_INT_CURR("ECS ")                /* Ecuadoran Sucre  */
+DEFINE_INT_CURR("EEK ")                /* Estonian Kroon  */
+DEFINE_INT_CURR("EGP ")                /* Egyptian Pound  */
+DEFINE_INT_CURR("ESP ")                /* Spanish Peseta  */
+DEFINE_INT_CURR("ETB ")                /* Ethiopian Birr  */
+DEFINE_INT_CURR("EUR ")                /* European Union Euro  */
+DEFINE_INT_CURR("FIM ")                /* Finnish Markka  */
+DEFINE_INT_CURR("FJD ")                /* Fiji Dollar  */
+DEFINE_INT_CURR("FKP ")                /* Falkland Islands Pound (Malvinas)  */
+DEFINE_INT_CURR("FRF ")                /* French Franc  */
+DEFINE_INT_CURR("GBP ")                /* British Pound  */
+DEFINE_INT_CURR("GEK ")                /* Georgia Lari  */
+DEFINE_INT_CURR("GHC ")                /* Ghana Cedi  */
+DEFINE_INT_CURR("GIP ")                /* Gibraltar Pound  */
+DEFINE_INT_CURR("GMD ")                /* Gambian Dalasi  */
+DEFINE_INT_CURR("GNS ")                /* Guinea Syli  */
+DEFINE_INT_CURR("GQE ")                /* Equatorial Guinea Ekwele  */
+DEFINE_INT_CURR("GRD ")                /* Greek Drachma  */
+DEFINE_INT_CURR("GTQ ")                /* Guatemala Quetzal  */
+DEFINE_INT_CURR("GWP ")                /* Guinea-Bissau Peso  */
+DEFINE_INT_CURR("GYD ")                /* Guyana Dollar  */
+DEFINE_INT_CURR("HKD ")                /* Hong Kong Dollar  */
+DEFINE_INT_CURR("HNL ")                /* Honduras Lempira  */
+DEFINE_INT_CURR("HRK ")                /* Croatia Kuna  */
+DEFINE_INT_CURR("HTG ")                /* Haiti Gourde  */
+DEFINE_INT_CURR("HUF ")                /* Hungarian Forint  */
+DEFINE_INT_CURR("IDR ")                /* Indonesia Rupiah  */
+DEFINE_INT_CURR("IEP ")                /* Irish Pound  */
+DEFINE_INT_CURR("ILS ")                /* Israeli Shekel  */
+DEFINE_INT_CURR("INR ")                /* Indian Rupee (Bhutan)  */
+DEFINE_INT_CURR("IQD ")                /* Iraqi Dinar  */
+DEFINE_INT_CURR("IRR ")                /* Iranian Rial  */
+DEFINE_INT_CURR("ISK ")                /* Iceland Krona  */
+DEFINE_INT_CURR("ITL ")                /* Italian Lira (San Marino, Vatican City)  */
+DEFINE_INT_CURR("JMD ")                /* Jamaican Dollar  */
+DEFINE_INT_CURR("JOD ")                /* Jordanian Dinar  */
+DEFINE_INT_CURR("JPY ")                /* Japanese Yen  */
+DEFINE_INT_CURR("KES ")                /* Kenyan Shilling  */
+DEFINE_INT_CURR("KGS ")                /* Kyrgyzstan Som  */
+DEFINE_INT_CURR("KHR ")                /* Democratic Kampuchea Riel  */
+DEFINE_INT_CURR("KMF ")                /* Comoros Franc  */
+DEFINE_INT_CURR("KPW ")                /* Democratic People's of Korea Won  */
+DEFINE_INT_CURR("KRW ")                /* Republic of Korea Won  */
+DEFINE_INT_CURR("KWD ")                /* Kuwaiti Dinar  */
 DEFINE_INT_CURR("KYD ")                /* Cayman Islands  */
-DEFINE_INT_CURR("LAK ")                /* Lao People's Democratic Republic */
-DEFINE_INT_CURR("LBP ")                /* Lebanon  */
-DEFINE_INT_CURR("LKR ")                /* Sri Lanka  */
-DEFINE_INT_CURR("LRD ")                /* Liberia  */
-DEFINE_INT_CURR("LSM ")                /* Lesotho  */
-DEFINE_INT_CURR("LTL ")                /* Lithuania  */
-DEFINE_INT_CURR("LUF ")                /* Luxembourg  */
-DEFINE_INT_CURR("LVL ")                /* Latvia  */
-DEFINE_INT_CURR("LYD ")                /* Libyan Arab Jamahiriya  */
-DEFINE_INT_CURR("MAD ")                /* Morocco  */
-DEFINE_INT_CURR("MGF ")                /* Madagascar  */
-DEFINE_INT_CURR("MLF ")                /* Mali  */
-DEFINE_INT_CURR("MNT ")                /* Mongolia  */
-DEFINE_INT_CURR("MOP ")                /* Macau  */
-DEFINE_INT_CURR("MRO ")                /* Mauritania  */
-DEFINE_INT_CURR("MTP ")                /* Malta  */
-DEFINE_INT_CURR("MUR ")                /* Mauritius  */
-DEFINE_INT_CURR("MVR ")                /* Maldives  */
-DEFINE_INT_CURR("MWK ")                /* Malawi  */
-DEFINE_INT_CURR("MXP ")                /* Mexico  */
-DEFINE_INT_CURR("MYR ")                /* Malaysia  */
-DEFINE_INT_CURR("MZM ")                /* Mozambique  */
-DEFINE_INT_CURR("NGN ")                /* Nigeria  */
-DEFINE_INT_CURR("NIC ")                /* Nicaragua  */
-DEFINE_INT_CURR("NLG ")                /* Netherlands  */
-DEFINE_INT_CURR("NOK ")                /* Norway  */
-DEFINE_INT_CURR("NPR ")                /* Nepal  */
-DEFINE_INT_CURR("NZD ")                /* New Zealand  */
-DEFINE_INT_CURR("OMR ")                /* Oman  */
-DEFINE_INT_CURR("PAB ")                /* Panama  */
-DEFINE_INT_CURR("PES ")                /* Peru  */
-DEFINE_INT_CURR("PGK ")                /* Papau New Guinea  */
-DEFINE_INT_CURR("PHP ")                /* Philippines  */
-DEFINE_INT_CURR("PKR ")                /* Pakistan  */
-DEFINE_INT_CURR("PLZ ")                /* Poland  */
-DEFINE_INT_CURR("PTE ")                /* Portugal  */
-DEFINE_INT_CURR("PYG ")                /* Paraguay  */
-DEFINE_INT_CURR("QAR ")                /* Qatar  */
-DEFINE_INT_CURR("ROL ")                /* Romania  */
-DEFINE_INT_CURR("RUR ")                /* Russia  */
-DEFINE_INT_CURR("RWF ")                /* Rwanda  */
-DEFINE_INT_CURR("SAR ")                /* Saudi Arabia  */
-DEFINE_INT_CURR("SBD ")                /* Solomon Islands  */
-DEFINE_INT_CURR("SCR ")                /* Seychelles  */
-DEFINE_INT_CURR("SDP ")                /* Sudan  */
-DEFINE_INT_CURR("SEK ")                /* Sweden  */
-DEFINE_INT_CURR("SGD ")                /* Singapore  */
-DEFINE_INT_CURR("SHP ")                /* St. Helena  */
-DEFINE_INT_CURR("SIT ")                /* Slovenia  */
-DEFINE_INT_CURR("SLL ")                /* Sierra Leone  */
-DEFINE_INT_CURR("SOS ")                /* Somalia  */
-DEFINE_INT_CURR("SRG ")                /* Suriname  */
-DEFINE_INT_CURR("STD ")                /* Sao Tome and Principe  */
-DEFINE_INT_CURR("SUR ")                /* Ukrainian, Byelorussion  */
-DEFINE_INT_CURR("SVC ")                /* El Salvador  */
-DEFINE_INT_CURR("SYP ")                /* Syrian Arab Republic  */
-DEFINE_INT_CURR("SZL ")                /* Swaziland  */
-DEFINE_INT_CURR("THB ")                /* Thailand  */
-DEFINE_INT_CURR("TND ")                /* Tunisia  */
-DEFINE_INT_CURR("TOP ")                /* Tonga  */
-DEFINE_INT_CURR("TPE ")                /* East Timor  */
-DEFINE_INT_CURR("TRL ")                /* Turkey  */
+DEFINE_INT_CURR("KZT ")                /* Kazakhstan Tenge  */
+DEFINE_INT_CURR("LAK ")                /* Lao People's Democratic Republic New Kip  */
+DEFINE_INT_CURR("LBP ")                /* Lebanese Pound  */
+DEFINE_INT_CURR("LKR ")                /* Sri Lankan Rupee  */
+DEFINE_INT_CURR("LRD ")                /* Liberian Dollar  */
+DEFINE_INT_CURR("LSM ")                /* Lesotho Maloti  */
+DEFINE_INT_CURR("LTL ")                /* Lithuanian Litas  */
+DEFINE_INT_CURR("LUF ")                /* Luxembourg Franc  */
+DEFINE_INT_CURR("LVL ")                /* Latvia Lat  */
+DEFINE_INT_CURR("LYD ")                /* Libyan Arab Jamahiriya Dinar  */
+DEFINE_INT_CURR("MAD ")                /* Moroccan Dirham  */
+DEFINE_INT_CURR("MDL ")                /* Moldova Lei  */
+DEFINE_INT_CURR("MGF ")                /* Madagasy Franc  */
+DEFINE_INT_CURR("MLF ")                /* Mali Franc  */
+DEFINE_INT_CURR("MMK ")                /* Myanmar Kyat  */
+DEFINE_INT_CURR("MNT ")                /* Mongolia Tugrik  */
+DEFINE_INT_CURR("MOP ")                /* Macau Pataca  */
+DEFINE_INT_CURR("MRO ")                /* Mauritania Ouguiya  */
+DEFINE_INT_CURR("MTP ")                /* Maltese Lira  */
+DEFINE_INT_CURR("MUR ")                /* Mauritius Rupee  */
+DEFINE_INT_CURR("MVR ")                /* Maldives Rupee  */
+DEFINE_INT_CURR("MWK ")                /* Malawi Kwacha  */
+DEFINE_INT_CURR("MXP ")                /* Mexican Peso  */
+DEFINE_INT_CURR("MYR ")                /* Malaysian Ringgit  */
+DEFINE_INT_CURR("MZM ")                /* Mozambique Metical  */
+DEFINE_INT_CURR("NGN ")                /* Nigeria Naira  */
+DEFINE_INT_CURR("NIC ")                /* Nicaragua Cordoba  */
+DEFINE_INT_CURR("NLG ")                /* Netherlands Guilder  */
+DEFINE_INT_CURR("NOK ")                /* Norwegian Krone  */
+DEFINE_INT_CURR("NPR ")                /* Nepalese Rupee  */
+DEFINE_INT_CURR("NZD ")                /* New Zealand Dollar  */
+DEFINE_INT_CURR("OMR ")                /* Omani Rial  */
+DEFINE_INT_CURR("PAB ")                /* Panamaniam Balboa  */
+DEFINE_INT_CURR("PEN ")                /* Peruvian New Sol  */
+DEFINE_INT_CURR("PGK ")                /* Papau New Guinea Kina  */
+DEFINE_INT_CURR("PHP ")                /* Philippines Peso  */
+DEFINE_INT_CURR("PKR ")                /* Pakistan Rupee  */
+DEFINE_INT_CURR("PLZ ")                /* Polish Zloty  */
+DEFINE_INT_CURR("PTE ")                /* Portugese Escudo  */
+DEFINE_INT_CURR("PYG ")                /* Paraguay Guarani  */
+DEFINE_INT_CURR("QAR ")                /* Qatar Rial  */
+DEFINE_INT_CURR("ROL ")                /* Romanian Leu  */
+DEFINE_INT_CURR("RUR ")                /* Russian Ruble  */
+DEFINE_INT_CURR("RWF ")                /* Rwanda Franc  */
+DEFINE_INT_CURR("SAR ")                /* Saudi Arabia Riyal  */
+DEFINE_INT_CURR("SBD ")                /* Solomon Islands Dollar  */
+DEFINE_INT_CURR("SCR ")                /* Seychelles Rupee  */
+DEFINE_INT_CURR("SDP ")                /* Sudanese Pound  */
+DEFINE_INT_CURR("SEK ")                /* Swedish Krona  */
+DEFINE_INT_CURR("SGD ")                /* Singapore Dollar  */
+DEFINE_INT_CURR("SHP ")                /* St. Helena Pound  */
+DEFINE_INT_CURR("SIT ")                /* Slovenian Tolar  */
+DEFINE_INT_CURR("SKK ")                /* Slovakian Koruna  */
+DEFINE_INT_CURR("SLL ")                /* Sierra Leone Leone  */
+DEFINE_INT_CURR("SOS ")                /* Somalia Schilling  */
+DEFINE_INT_CURR("SRG ")                /* Suriname Guilder  */
+DEFINE_INT_CURR("STD ")                /* Sao Tome and Principe Dobra  */
+DEFINE_INT_CURR("SUR ")                /* Soviet Union Rubel (Ukrainian, Byelorussion)  */
+DEFINE_INT_CURR("SVC ")                /* El Salvador Colon  */
+DEFINE_INT_CURR("SYP ")                /* Syrian Arab Republic Pound  */
+DEFINE_INT_CURR("SZL ")                /* Swaziland Lilangeni  */
+DEFINE_INT_CURR("THB ")                /* Thai Baht  */
+DEFINE_INT_CURR("TMM ")                /* Turkmenistan Manet  */
+DEFINE_INT_CURR("TND ")                /* Tunisian Dinar  */
+DEFINE_INT_CURR("TOP ")                /* Tonga Pa'Anga  */
+DEFINE_INT_CURR("TPE ")                /* East Timor Escudo  */
+DEFINE_INT_CURR("TRL ")                /* Turkish Lira  */
 DEFINE_INT_CURR("TTD ")                /* Trinidad and Tobago  */
-DEFINE_INT_CURR("TWD ")                /* Taiwan, Province of China  */
-DEFINE_INT_CURR("TZS ")                /* United Republic of Tanzania  */
-DEFINE_INT_CURR("UGS ")                /* Uganda  */
-DEFINE_INT_CURR("USD ")                /* United States  */
-DEFINE_INT_CURR("UYP ")                /* Uruguay  */
-DEFINE_INT_CURR("VEB ")                /* Venezuela  */
-DEFINE_INT_CURR("VND ")                /* Viet Nam  */
-DEFINE_INT_CURR("VUV ")                /* Vanuatu  */
-DEFINE_INT_CURR("WST ")                /* Samoa  */
-DEFINE_INT_CURR("XAF ")                /* United Republic of Cameroon, Central African Republic, Chad, Congo, Gabon  */
-DEFINE_INT_CURR("XCD ")                /* Antiqua, Dominica, Grenada, Montserrat, St. Kitts-Nevis-Anguilla, Saint Lucia, Saint Vincent and the Grenadines  */
-DEFINE_INT_CURR("XOF ")                /* Benin, Ivory Coast, Niger, Senegal, Togo, Upper Volta  */
+DEFINE_INT_CURR("TWD ")                /* Taiwan, Province of China Dollar  */
+DEFINE_INT_CURR("TZS ")                /* United Republic of Tanzania Shilling  */
+DEFINE_INT_CURR("UAK ")                /* Ukraine Hryvna  */
+DEFINE_INT_CURR("UGS ")                /* Ugandan Shilling  */
+DEFINE_INT_CURR("USD ")                /* United States Dollar  */
+DEFINE_INT_CURR("UYP ")                /* Uruguay Peso  */
+DEFINE_INT_CURR("UYU ")                /* Uruguay New Peso  */
+DEFINE_INT_CURR("UZS ")                /* Uzbekistan Sum  */
+DEFINE_INT_CURR("VEB ")                /* Venezuelan Bolivar  */
+DEFINE_INT_CURR("VND ")                /* Viet Nam Dong  */
+DEFINE_INT_CURR("VUV ")                /* Vanuatu Vatu  */
+DEFINE_INT_CURR("WST ")                /* Samoa Tala  */
+DEFINE_INT_CURR("XAF ")                /* Central African Franc (United Republic of Cameroon, Central African Republic, Chad, Congo, Gabon)  */
+DEFINE_INT_CURR("XCD ")                /* East Caribbean Dollar (Antiqua, Dominica, Grenada, Montserrat, St. Kitts-Nevis-Anguilla, Saint Lucia, Saint Vincent and the Grenadines)  */
+DEFINE_INT_CURR("XDS ")                /* St. Christopher Dollar  */
+DEFINE_INT_CURR("XOF ")                /* West African Franc (Benin, Ivory Coast, Niger, Senegal, Togo, Upper Volta)  */
 DEFINE_INT_CURR("XPF ")                /* French polynesia, New Caledonia, Wallis and Futuna Islands  */
-DEFINE_INT_CURR("YDD ")                /* Democratic Yemen  */
-DEFINE_INT_CURR("YER ")                /* Yemen  */
-DEFINE_INT_CURR("YUD ")                /* Yugoslavia  */
-DEFINE_INT_CURR("ZAL ")                /* South Africa  */
-DEFINE_INT_CURR("ZAR ")                /* Lesotho, Namibia  */
-DEFINE_INT_CURR("ZMK ")                /* Zambia  */
-DEFINE_INT_CURR("ZRZ ")                /* Zaire  */
-DEFINE_INT_CURR("ZWD ")                /* Zimbabwe  */
+DEFINE_INT_CURR("YDD ")                /* Yemini Dinar (Democratic Yemen)  */
+DEFINE_INT_CURR("YER ")                /* Yemeni Rial  */
+DEFINE_INT_CURR("ZAR ")                /* South Africa Rand (Lesotho, Namibia)  */
+DEFINE_INT_CURR("ZMK ")                /* Zambian Kwacha  */
+DEFINE_INT_CURR("ZRZ ")                /* Zaire Zaire  */
+DEFINE_INT_CURR("ZWD ")                /* Zimbabwe Dollar  */
index edbe891..15570c3 100644 (file)
@@ -127,7 +127,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
 #endif
   filedata = (void *) __mmap ((caddr_t) 0, st.st_size, PROT_READ,
                              MAP_FILE|MAP_COPY|MAP_INHERIT, fd, 0);
-  if (filedata == MAP_FAILED)
+  if ((void *) filedata == MAP_FAILED)
     {
       if (errno == ENOSYS)
        {
index 7640e21..76587d1 100644 (file)
@@ -1167,19 +1167,131 @@ translations from the file
 @end smallexample
 
 From the above descriptions it should be clear which component of this
-filename is determined fromby which source.
+filename is determined by which source.
+
+In the above example we assumed that the @code{LANGUAGE} environment
+variable to @code{de}.  This might be an appropriate selection but what
+happens if the user wants to use @code{LC_ALL} because of the wider
+usability and here the required value is @code{de_DE.ISO-8859-1}?  We
+already mentioned above that a situation like this is not infrequent.
+E.g., a person might prefer reading a dialect and if this is not
+available fall back on the standard language.
+
+The @code{gettext} functions know about situations like this and can
+handle them gracefully.  The functions recognize the format of the value
+of the environment variable.  It can split the value is different pieces
+and by leaving out the only or the other part it can construct new
+values.  This happens of course in a predictable way.  To understand
+this one must know the format of the environment variable value.  There
+are to more or less standardized forms:
+
+@table @emph
+@item X/Open Format
+@code{language[_territory[.codeset]][@@modifier]}
+
+@item CEN Format (European Community Standard)
+@code{language[_territory][+audience][+special][,[sponsor][_revision]]}
+@end table
+
+The functions will automatically recognize which format is used.  Less
+specific locale names will be stripped of in the order of the following
+list:
 
-@c Describe:
-@c * message inheritence
-@c * locale aliasing
-@c * character set dependence
+@enumerate
+@item
+@code{revision}
+@item
+@code{sponsor}
+@item
+@code{special}
+@item
+@code{codeset}
+@item
+@code{normalized codeset}
+@item
+@code{territory}
+@item
+@code{audience}/@code{modifier}
+@end enumerate
+
+From the last entry one can see that the meaning of the @code{modifer}
+field in the X/Open format and the @code{audience} format have the same
+meaning.  Beside one can see that the @code{language} field for obvious
+reasons never will be dropped.
+
+The only new thing is the @code{normalized codeset} entry.  This is
+another goodie which is introduced to help reducing the chaos which
+derives from the inability of the people to standardize the names of
+character sets.  Instead of @w{ISO-8859-1} one can often see @w{8859-1},
+@w{88591}, @w{iso8859-1}, or @w{iso_8859-1}.  The @code{normalized
+codeset} value is generated from the user-provided character set name by
+applying the following rules:
+
+@enumerate
+@item
+Remove all characters beside numbers and letters.
+@item
+Fold letters to lowercase.
+@item
+If the same only contains digits prepend the string @code{"iso"}.
+@end enumerate
+
+@noindent
+So all of the above name will be normalized to @code{iso88591}.  This
+allows the program user much more freely choosing the locale name.
+
+Even this extended functionality still does not help to solve the
+problem that completely different names can be used to denote the same
+locale (e.g., @code{de} and @code{german}).  To be of help in this
+situation the locale implementation and also the @code{gettext}
+functions know about aliases.
+
+The file @file{/usr/share/locale/locale.alias} (replace @file{/usr} with
+whatever prefix you used for configuring the C library) contains a
+mapping of alternative names to more regular names.  The system manager
+is free to add new entries to fill her/his own needs.  The selected
+locale from the environment is compared with the entries in the first
+column of this file ignoring the case.  If they match the value of the
+second column is used instead for the further handling.
+
+In the description of the format of the environment variables we already
+mentioned the character set as a factor in the selection of the message
+catalog.  In fact, only catalogs which contain text written using the
+character set of the system/program can be used (directly; there will
+come a solution for this some day).  This means for the user that s/he
+will always have to take care for this.  If in the collection of the
+message catalogs there are files for the same language but coded using
+different character sets the user has to be careful.
 
 
 @node Helper programs for gettext
 @subsection Programs to handle message catalogs for @code{gettext}
 
-@c Describe:
-@c * msgfmt
-@c * xgettext
-@c Mention:
-@c * other programs from GNU gettext
+The GNU C Library does not contain the source code for the programs to
+handle message catalogs for the @code{gettext} functions.  As part of
+the GNU project the GNU gettext package contains everything the
+developer needs.  The functionality provided by the tools in this
+package by far exceeds the abilities of the @code{gencat} program
+described above for the @code{catgets} functions.
+
+There is a program @code{msgfmt} which is the equivalent program to the
+@code{gencat} program.  It generates from the human-readable and
+-editable form of the message catalog a binary file which can be used by
+the @code{gettext} functions.  But there are several more programs
+available.
+
+The @code{xgettext} program can be used to automatically extract the
+translatable messages from a source file.  I.e., the programmer need not
+take care for the translations and the list of messages which have to be
+translated.  S/He will simply wrap the translatable string in calls to
+@code{gettext} et.al and the rest will be done by @code{xgettext}.  This
+program has a lot of option which help to customize the output or do
+help to understand the input better.
+
+Other programs help to manage development cycle when new messages appear
+in the source files or when a new translation of the messages appear.
+here it should only be noted that using all the tools in GNu gettext it
+is possible to @emph{completely} automize the handling of message
+catalog.  Beside marking the translatable string in the source code and
+generating the translations the developers do not have anything to do
+themself.
index 7e4e144..a173a09 100644 (file)
@@ -4705,7 +4705,7 @@ identities (void)
   identities1_test (0, 0);
   identities1_test (-1, CHOOSE (1e-18L, 0, 1e-7));
 
-  identities2_test (0.2L, CHOOSE (0, 1e-16, 0));
+  identities2_test (0.2L, CHOOSE (1e-19L, 1e-16, 0));
   identities2_test (0.9L, CHOOSE (0, 1e-15, 0));
   identities2_test (0, 0);
   identities2_test (-1, CHOOSE (1e-18L, 1e-15, 0));
index 4ad9360..825f511 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: libc 2.0.90\n"
-"POT-Creation-Date: 1997-03-27 03:03+0100\n"
+"POT-Creation-Date: 1997-08-21 03:59+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+DIST\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -14,95 +14,95 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: ENCODING\n"
 
-#: nis/nis_print.c:210
+#: nis/nis_print.c:247
 msgid "\t\tAccess Rights : "
 msgstr ""
 
-#: nis/nis_print.c:208
+#: nis/nis_print.c:245
 #, c-format
 msgid "\t\tAttributes    : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:229
+#: nis/nis_print.c:267
 #, c-format
 msgid "\tEntry data of type %s\n"
 msgstr ""
 
-#: nis/nis_print.c:115
+#: nis/nis_print.c:152
 #, c-format
 msgid "\tName       : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:116
+#: nis/nis_print.c:153
 msgid "\tPublic Key : "
 msgstr ""
 
-#: nis/nis_print.c:142
+#: nis/nis_print.c:179
 #, c-format
 msgid "\tUniversal addresses (%u)\n"
 msgstr ""
 
-#: nis/nis_print.c:206
+#: nis/nis_print.c:243
 #, c-format
 msgid "\t[%d]\tName          : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:232
+#: nis/nis_print.c:270
 #, c-format
 msgid "\t[%u] - [%u bytes] "
 msgstr ""
 
-#: nis/nis_print.c:174
+#: nis/nis_print.c:211
 #, c-format
 msgid ""
 "\n"
 "Direct Type : %d\n"
 msgstr ""
 
-#: nis/nis_print.c:188
+#: nis/nis_print.c:225
 msgid ""
 "\n"
 "Group Members :\n"
 msgstr ""
 
-#: nis/nis_print.c:252
+#: nis/nis_print.c:290
 #, c-format
 msgid ""
 "\n"
 "Time to Live  : %lu (seconds)\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:680
+#: sunrpc/rpcinfo.c:678
 msgid "       rpcinfo -b prognum versnum\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:681
+#: sunrpc/rpcinfo.c:679
 msgid "       rpcinfo -d prognum versnum\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:679
+#: sunrpc/rpcinfo.c:677
 msgid "       rpcinfo -p [ host ]\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:678
+#: sunrpc/rpcinfo.c:675
 msgid "       rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"
 msgstr ""
 
-#: nis/nis_print.c:286
+#: nis/nis_print.c:313
 #, c-format
 msgid "    Data Length = %u\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:577
+#: sunrpc/rpcinfo.c:573
 msgid "   program vers proto   port\n"
 msgstr ""
 
-#: time/zic.c:419
+#: time/zic.c:421
 #, c-format
 msgid " (rule from \"%s\", line %d)"
 msgstr ""
 
-#: argp/argp-help.c:1511
+#: argp/argp-help.c:1518
 msgid " [OPTION...]"
 msgstr ""
 
@@ -110,17 +110,17 @@ msgstr ""
 msgid " done\n"
 msgstr ""
 
-#: time/zic.c:416
+#: time/zic.c:418
 #, c-format
 msgid "\"%s\", line %d: %s"
 msgstr ""
 
-#: time/zic.c:943
+#: time/zic.c:947
 #, c-format
 msgid "\"Zone %s\" line and -l option are mutually exclusive"
 msgstr ""
 
-#: time/zic.c:951
+#: time/zic.c:955
 #, c-format
 msgid "\"Zone %s\" line and -p option are mutually exclusive"
 msgstr ""
@@ -135,7 +135,7 @@ msgstr ""
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: time/zic.c:754
+#: time/zic.c:758
 #, c-format
 msgid "%s in ruleless zone"
 msgstr ""
@@ -155,52 +155,52 @@ msgstr ""
 msgid "%s%sUnknown signal %d\n"
 msgstr ""
 
-#: time/zic.c:2172
+#: time/zic.c:2185
 #, c-format
 msgid "%s: %d did not sign extend correctly\n"
 msgstr ""
 
-#: locale/programs/charmap.c:176
+#: locale/programs/charmap.c:244
 #, c-format
 msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
 msgstr ""
 
-#: time/zic.c:1443
+#: time/zic.c:1456
 #, c-format
 msgid "%s: Can't create %s: %s\n"
 msgstr ""
 
-#: time/zic.c:2150
+#: time/zic.c:2163
 #, c-format
 msgid "%s: Can't create directory %s: %s\n"
 msgstr ""
 
-#: time/zic.c:608
+#: time/zic.c:610
 #, c-format
 msgid "%s: Can't link from %s to %s: %s\n"
 msgstr ""
 
-#: time/zic.c:780
+#: time/zic.c:784
 #, c-format
 msgid "%s: Can't open %s: %s\n"
 msgstr ""
 
-#: time/zic.c:1433
+#: time/zic.c:1446
 #, c-format
 msgid "%s: Can't remove %s: %s\n"
 msgstr ""
 
-#: time/zic.c:849
+#: time/zic.c:853
 #, c-format
 msgid "%s: Error closing %s: %s\n"
 msgstr ""
 
-#: time/zic.c:842
+#: time/zic.c:846
 #, c-format
 msgid "%s: Error reading %s\n"
 msgstr ""
 
-#: time/zic.c:1507
+#: time/zic.c:1520
 #, c-format
 msgid "%s: Error writing %s\n"
 msgstr ""
@@ -210,122 +210,127 @@ msgstr ""
 msgid "%s: Error writing standard output "
 msgstr ""
 
-#: time/zic.c:827
+#: time/zic.c:831
 #, c-format
 msgid "%s: Leap line in non leap seconds file %s\n"
 msgstr ""
 
-#: time/zic.c:357
+#: time/zic.c:359
 #, c-format
 msgid "%s: Memory exhausted: %s\n"
 msgstr ""
 
-#: time/zic.c:522
+#: time/zic.c:524
 #, c-format
 msgid "%s: More than one -L option specified\n"
 msgstr ""
 
-#: time/zic.c:482
+#: time/zic.c:484
 #, c-format
 msgid "%s: More than one -d option specified\n"
 msgstr ""
 
-#: time/zic.c:492
+#: time/zic.c:494
 #, c-format
 msgid "%s: More than one -l option specified\n"
 msgstr ""
 
-#: time/zic.c:502
+#: time/zic.c:504
 #, c-format
 msgid "%s: More than one -p option specified\n"
 msgstr ""
 
-#: time/zic.c:512
+#: time/zic.c:514
 #, c-format
 msgid "%s: More than one -y option specified\n"
 msgstr ""
 
-#: argp/argp-parse.c:628
+#: argp/argp-parse.c:637
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr ""
 
-#: time/zic.c:1872
+#: login/programs/database.c:129
+#, c-format
+msgid "%s: cannot get modification time"
+msgstr ""
+
+#: time/zic.c:1885
 #, c-format
 msgid "%s: command was '%s', result was %d\n"
 msgstr ""
 
-#: locale/programs/charmap.c:593 locale/programs/locfile.c:900
+#: locale/programs/charmap.c:661 locale/programs/locfile.c:900
 #, c-format
 msgid "%s: error in state machine"
 msgstr ""
 
-#: posix/getopt.c:785
+#: posix/getopt.c:783
 #, c-format
 msgid "%s: illegal option -- %c\n"
 msgstr ""
 
-#: posix/getopt.c:788
+#: posix/getopt.c:786
 #, c-format
 msgid "%s: invalid option -- %c\n"
 msgstr ""
 
-#: posix/getopt.c:709
+#: posix/getopt.c:707
 #, c-format
 msgid "%s: option `%c%s' doesn't allow an argument\n"
 msgstr ""
 
-#: posix/getopt.c:680
+#: posix/getopt.c:678
 #, c-format
 msgid "%s: option `%s' is ambiguous\n"
 msgstr ""
 
-#: posix/getopt.c:726 posix/getopt.c:899
+#: posix/getopt.c:724 posix/getopt.c:897
 #, c-format
 msgid "%s: option `%s' requires an argument\n"
 msgstr ""
 
-#: posix/getopt.c:704
+#: posix/getopt.c:702
 #, c-format
 msgid "%s: option `--%s' doesn't allow an argument\n"
 msgstr ""
 
-#: posix/getopt.c:883
+#: posix/getopt.c:881
 #, c-format
 msgid "%s: option `-W %s' doesn't allow an argument\n"
 msgstr ""
 
-#: posix/getopt.c:865
+#: posix/getopt.c:863
 #, c-format
 msgid "%s: option `-W %s' is ambiguous\n"
 msgstr ""
 
-#: posix/getopt.c:818 posix/getopt.c:948
+#: posix/getopt.c:816 posix/getopt.c:946
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
 msgstr ""
 
-#: time/zic.c:834 time/zic.c:1246 time/zic.c:1266
+#: time/zic.c:838 time/zic.c:1251 time/zic.c:1275
 #, c-format
 msgid "%s: panic: Invalid l_value %d\n"
 msgstr ""
 
-#: locale/programs/charmap.c:600
+#: locale/programs/charmap.c:668
 #, c-format
 msgid "%s: premature end of file"
 msgstr ""
 
-#: posix/getopt.c:759
+#: posix/getopt.c:757
 #, c-format
 msgid "%s: unrecognized option `%c%s'\n"
 msgstr ""
 
-#: posix/getopt.c:755
+#: posix/getopt.c:753
 #, c-format
 msgid "%s: unrecognized option `--%s'\n"
 msgstr ""
 
-#: time/zic.c:441
+#: time/zic.c:443
 #, c-format
 msgid ""
 "%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d "
@@ -338,7 +343,15 @@ msgstr ""
 msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n"
 msgstr ""
 
-#: nis/nis_print.c:290
+#: argp/argp-parse.c:164
+msgid "(PROGRAM ERROR) No version known!?"
+msgstr ""
+
+#: argp/argp-parse.c:776
+msgid "(PROGRAM ERROR) Option should have been recognized!?"
+msgstr ""
+
+#: nis/nis_print.c:110
 msgid "(Unknown object)\n"
 msgstr ""
 
@@ -347,7 +360,7 @@ msgstr ""
 msgid "(unknown authentication error - %d)"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:616
+#: sunrpc/rpcinfo.c:612
 msgid "(unknown)"
 msgstr ""
 
@@ -411,7 +424,7 @@ msgstr ""
 msgid "Aborted"
 msgstr ""
 
-#: nis/nis_print.c:250
+#: nis/nis_print.c:288
 msgid "Access Rights : "
 msgstr ""
 
@@ -451,7 +464,7 @@ msgstr ""
 msgid "Argument list too long"
 msgstr ""
 
-#: nis/nis_error.c:65
+#: nis/nis_error.c:66
 msgid "Attempt to remove a non-empty table"
 msgstr ""
 
@@ -459,11 +472,6 @@ msgstr ""
 msgid "Attempting to link in too many shared libraries"
 msgstr ""
 
-#: nis/nis_print.c:221
-#, c-format
-msgid "Attributes : %d\n"
-msgstr ""
-
 #: sunrpc/clnt_perr.c:273
 msgid "Authentication OK"
 msgstr ""
@@ -473,7 +481,7 @@ msgstr ""
 msgid "Authentication error"
 msgstr ""
 
-#: nis/nis_print.c:259
+#: nis/nis_print.c:86
 msgid "BOGUS OBJECT\n"
 msgstr ""
 
@@ -507,11 +515,11 @@ msgstr ""
 msgid "Bad value for ai_flags"
 msgstr ""
 
-#: locale/programs/localedef.c:109
+#: locale/programs/localedef.c:108
 msgid "Be strictly POSIX conform"
 msgstr ""
 
-#: nis/nis_print.c:237
+#: nis/nis_print.c:275
 msgid "Binary data\n"
 msgstr ""
 
@@ -522,7 +530,7 @@ msgstr ""
 msgid "Block device required"
 msgstr ""
 
-#: sunrpc/pmap_rmt.c:356
+#: sunrpc/pmap_rmt.c:357
 msgid "Broadcast select problem"
 msgstr ""
 
@@ -542,7 +550,7 @@ msgstr ""
 msgid "Bus error"
 msgstr ""
 
-#: nis/nis_print.c:44
+#: nis/nis_print.c:46
 msgid "CDS"
 msgstr ""
 
@@ -550,7 +558,7 @@ msgstr ""
 msgid "CPU time limit exceeded"
 msgstr ""
 
-#: nis/nis_error.c:32
+#: nis/nis_error.c:33
 msgid "Cache expired"
 msgstr ""
 
@@ -558,19 +566,19 @@ msgstr ""
 msgid "Can not access a needed shared library"
 msgstr ""
 
-#: nis/ypclnt.c:697
+#: nis/ypclnt.c:703
 msgid "Can't bind to server which serves this domain"
 msgstr ""
 
-#: nis/ypclnt.c:709
+#: nis/ypclnt.c:715
 msgid "Can't communicate with portmapper"
 msgstr ""
 
-#: nis/ypclnt.c:711
+#: nis/ypclnt.c:717
 msgid "Can't communicate with ypbind"
 msgstr ""
 
-#: nis/ypclnt.c:713
+#: nis/ypclnt.c:719
 msgid "Can't communicate with ypserv"
 msgstr ""
 
@@ -587,7 +595,7 @@ msgstr ""
 msgid "Cannot assign requested address"
 msgstr ""
 
-#: sunrpc/pmap_rmt.c:266
+#: sunrpc/pmap_rmt.c:267
 msgid "Cannot create socket for broadcast rpc"
 msgstr ""
 
@@ -595,7 +603,7 @@ msgstr ""
 msgid "Cannot exec a shared library directly"
 msgstr ""
 
-#: sunrpc/pmap_rmt.c:369
+#: sunrpc/pmap_rmt.c:370
 msgid "Cannot receive reply to broadcast"
 msgstr ""
 
@@ -608,11 +616,11 @@ msgstr ""
 msgid "Cannot send after transport endpoint shutdown"
 msgstr ""
 
-#: sunrpc/pmap_rmt.c:329
+#: sunrpc/pmap_rmt.c:330
 msgid "Cannot send broadcast packet"
 msgstr ""
 
-#: sunrpc/pmap_rmt.c:273
+#: sunrpc/pmap_rmt.c:274
 msgid "Cannot set socket option SO_BROADCAST"
 msgstr ""
 
@@ -620,7 +628,7 @@ msgstr ""
 msgid "Channel number out of range"
 msgstr ""
 
-#: nis/nis_print.c:201
+#: nis/nis_print.c:238
 #, c-format
 msgid "Character Separator : %c\n"
 msgstr ""
@@ -634,7 +642,7 @@ msgstr ""
 msgid "Client credential too weak"
 msgstr ""
 
-#: nis/nis_print.c:203
+#: nis/nis_print.c:240
 msgid "Columns             :\n"
 msgstr ""
 
@@ -642,7 +650,7 @@ msgstr ""
 msgid "Communication error on send"
 msgstr ""
 
-#: locale/programs/localedef.c:117
+#: locale/programs/localedef.c:116
 msgid "Compile locale specification"
 msgstr ""
 
@@ -687,8 +695,8 @@ msgstr ""
 msgid "Convert key to lower case"
 msgstr ""
 
-#: catgets/gencat.c:235 db/makedb.c:230 locale/programs/locale.c:267
-#: locale/programs/localedef.c:392
+#: catgets/gencat.c:235 db/makedb.c:231 locale/programs/locale.c:267
+#: locale/programs/localedef.c:395
 #, c-format
 msgid ""
 "Copyright (C) %s Free Software Foundation, Inc.\n"
@@ -704,7 +712,7 @@ msgstr ""
 msgid "Create C header file NAME containing symbol definitions"
 msgstr ""
 
-#: locale/programs/localedef.c:108
+#: locale/programs/localedef.c:107
 msgid "Create output even if warning messages were issued"
 msgstr ""
 
@@ -712,36 +720,42 @@ msgstr ""
 msgid "Create simple DB database from textual input."
 msgstr ""
 
-#: nis/nis_print.c:253
+#: nis/nis_print.c:291
 #, c-format
 msgid "Creation Time : %s"
 msgstr ""
 
-#: nis/nis_print.c:123
+#: nis/nss_nisplus/nisplus-publickey.c:91
+#: nis/nss_nisplus/nisplus-publickey.c:161
+#, c-format
+msgid "DES entry for netname %s not unique\n"
+msgstr ""
+
+#: nis/nis_print.c:160
 msgid "DH.\n"
 msgstr ""
 
-#: nis/nis_print.c:265
+#: nis/nis_print.c:92
 msgid "DIRECTORY\n"
 msgstr ""
 
-#: nis/nis_print.c:40
+#: nis/nis_print.c:42
 msgid "DNANS"
 msgstr ""
 
-#: nis/nis_print.c:36
+#: nis/nis_print.c:38
 msgid "DNS"
 msgstr ""
 
-#: nis/nis_error.c:51
+#: nis/nis_error.c:52
 msgid "Database for table does not exist"
 msgstr ""
 
-#: nis/ypclnt.c:723
+#: nis/ypclnt.c:729
 msgid "Database is busy"
 msgstr ""
 
-#: nis/nis_print.c:172
+#: nis/nis_print.c:209
 msgid "Default Access rights: "
 msgstr ""
 
@@ -772,7 +786,7 @@ msgstr ""
 msgid "Device or resource busy"
 msgstr ""
 
-#: nis/nis_print.c:247
+#: nis/nis_print.c:285
 #, c-format
 msgid "Directory     : %s\n"
 msgstr ""
@@ -796,7 +810,7 @@ msgstr ""
 msgid "Do not use existing catalog, force new output file"
 msgstr ""
 
-#: nis/ypclnt.c:769
+#: nis/ypclnt.c:775
 msgid "Domain not bound"
 msgstr ""
 
@@ -805,15 +819,15 @@ msgstr ""
 msgid "EMT trap"
 msgstr ""
 
-#: nis/nis_print.c:277
+#: nis/nis_print.c:101
 msgid "ENTRY\n"
 msgstr ""
 
-#: nis/nis_print.c:235
+#: nis/nis_print.c:273
 msgid "Encrypted data\n"
 msgstr ""
 
-#: nis/nis_error.c:52
+#: nis/nis_error.c:53
 msgid "Entry/Table type mismatch"
 msgstr ""
 
@@ -822,11 +836,11 @@ msgstr ""
 msgid "Error %d"
 msgstr ""
 
-#: nis/nis_error.c:56
+#: nis/nis_error.c:57
 msgid "Error in RPC subsystem"
 msgstr ""
 
-#: nis/nis_error.c:66
+#: nis/nis_error.c:67
 msgid "Error in accessing NIS+ cold start file.  Is NIS+ installed?"
 msgstr ""
 
@@ -834,7 +848,7 @@ msgstr ""
 msgid "Error in unknown error system: "
 msgstr ""
 
-#: nis/nis_error.c:59
+#: nis/nis_error.c:60
 msgid "Error while talking to callback proc"
 msgstr ""
 
@@ -842,10 +856,6 @@ msgstr ""
 msgid "Error: .netrc file is readable by others."
 msgstr ""
 
-#: nis/nis_call.c:180
-msgid "Error: could not find a NIS_COLD_START file\n"
-msgstr ""
-
 #: stdio-common/../sysdeps/gnu/errlist.c:698
 msgid "Exchange full"
 msgstr ""
@@ -898,7 +908,7 @@ msgstr ""
 msgid "Filesize limit exceeded"
 msgstr ""
 
-#: nis/nis_error.c:37
+#: nis/nis_error.c:38
 msgid "First/Next chain broken"
 msgstr ""
 
@@ -907,7 +917,7 @@ msgstr ""
 msgid "Floating point exception"
 msgstr ""
 
-#: nis/nis_error.c:67
+#: nis/nis_error.c:68
 msgid "Full resync required for directory"
 msgstr ""
 
@@ -918,7 +928,7 @@ msgstr ""
 msgid "Function not implemented"
 msgstr ""
 
-#: nis/nis_print.c:269
+#: nis/nis_print.c:95
 msgid "GROUP\n"
 msgstr ""
 
@@ -934,7 +944,7 @@ msgid ""
 "is -, output is written to standard output.\n"
 msgstr ""
 
-#: nis/nis_error.c:36
+#: nis/nis_error.c:37
 msgid "Generic system error"
 msgstr ""
 
@@ -942,20 +952,32 @@ msgstr ""
 msgid "Get locale-specific information."
 msgstr ""
 
+#: argp/argp-parse.c:89
+msgid "Give a short usage message"
+msgstr ""
+
+#: argp/argp-parse.c:88
+msgid "Give this help list"
+msgstr ""
+
 #. TRANS This error code has no purpose.
 #: stdio-common/../sysdeps/gnu/errlist.c:606
 msgid "Gratuitous error"
 msgstr ""
 
-#: nis/nis_print.c:249
+#: nis/nis_print.c:287
 #, c-format
 msgid "Group         : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:185
+#: nis/nis_print.c:222
 msgid "Group Flags :"
 msgstr ""
 
+#: argp/argp-parse.c:92
+msgid "Hang for SECS seconds (default 3600)"
+msgstr ""
+
 #: stdio-common/../sysdeps/unix/siglist.c:30
 #: sysdeps/unix/sysv/linux/siglist.h:22
 msgid "Hangup"
@@ -986,7 +1008,7 @@ msgstr ""
 msgid "IOT trap"
 msgstr ""
 
-#: nis/nis_print.c:34
+#: nis/nis_print.c:36
 msgid "IVY"
 msgstr ""
 
@@ -1002,7 +1024,7 @@ msgstr ""
 msgid "Illegal instruction"
 msgstr ""
 
-#: nis/nis_error.c:61
+#: nis/nis_error.c:62
 msgid "Illegal object type for operation"
 msgstr ""
 
@@ -1040,7 +1062,7 @@ msgstr ""
 msgid "Information request"
 msgstr ""
 
-#: locale/programs/localedef.c:99
+#: locale/programs/localedef.c:98
 msgid "Input Files:"
 msgstr ""
 
@@ -1049,11 +1071,11 @@ msgstr ""
 msgid "Input/output error"
 msgstr ""
 
-#: nis/ypclnt.c:703
+#: nis/ypclnt.c:709
 msgid "Internal NIS error"
 msgstr ""
 
-#: nis/ypclnt.c:767
+#: nis/ypclnt.c:773
 msgid "Internal ypbind error"
 msgstr ""
 
@@ -1077,7 +1099,7 @@ msgstr ""
 msgid "Interrupted system call should be restarted"
 msgstr ""
 
-#: nis/nis_error.c:44
+#: nis/nis_error.c:45
 msgid "Invalid Object for operation"
 msgstr ""
 
@@ -1087,11 +1109,11 @@ msgstr ""
 msgid "Invalid argument"
 msgstr ""
 
-#: posix/regex.c:960
+#: posix/regex.c:978
 msgid "Invalid back reference"
 msgstr ""
 
-#: posix/regex.c:958
+#: posix/regex.c:976
 msgid "Invalid character class name"
 msgstr ""
 
@@ -1103,11 +1125,11 @@ msgstr ""
 msgid "Invalid client verifier"
 msgstr ""
 
-#: posix/regex.c:957
+#: posix/regex.c:975
 msgid "Invalid collation character"
 msgstr ""
 
-#: posix/regex.c:964
+#: posix/regex.c:982
 msgid "Invalid content of \\{\\}"
 msgstr ""
 
@@ -1128,15 +1150,15 @@ msgstr ""
 msgid "Invalid or incomplete multibyte or wide character"
 msgstr ""
 
-#: posix/regex.c:967
+#: posix/regex.c:985
 msgid "Invalid preceding regular expression"
 msgstr ""
 
-#: posix/regex.c:965
+#: posix/regex.c:983
 msgid "Invalid range end"
 msgstr ""
 
-#: posix/regex.c:956
+#: posix/regex.c:974
 msgid "Invalid regular expression"
 msgstr ""
 
@@ -1166,7 +1188,7 @@ msgstr ""
 msgid "Is a named type file"
 msgstr ""
 
-#: nis/nis_print.c:129
+#: nis/nis_print.c:166
 msgid "Kerberous.\n"
 msgstr ""
 
@@ -1175,11 +1197,11 @@ msgstr ""
 msgid "Killed"
 msgstr ""
 
-#: nis/nis_print.c:281
+#: nis/nis_print.c:104
 msgid "LINK\n"
 msgstr ""
 
-#: nis/nis_local_names.c:125
+#: nis/nis_local_names.c:126
 #, c-format
 msgid "LOCAL entry for UID %d in directory %s not unique\n"
 msgstr ""
@@ -1200,7 +1222,7 @@ msgstr ""
 msgid "Level 3 reset"
 msgstr ""
 
-#: nis/nis_error.c:53
+#: nis/nis_error.c:54
 msgid "Link Points to illegal name"
 msgstr ""
 
@@ -1212,11 +1234,20 @@ msgstr ""
 msgid "Link number out of range"
 msgstr ""
 
-#: nis/ypclnt.c:715
+#: nis/nis_print.c:256
+msgid "Linked Object Type : "
+msgstr ""
+
+#: nis/nis_print.c:258
+#, c-format
+msgid "Linked to : %s\n"
+msgstr ""
+
+#: nis/ypclnt.c:721
 msgid "Local domain name not set"
 msgstr ""
 
-#: nis/ypclnt.c:705
+#: nis/ypclnt.c:711
 msgid "Local resource allocation failure"
 msgstr ""
 
@@ -1224,21 +1255,21 @@ msgstr ""
 msgid "Machine is not on the network"
 msgstr ""
 
-#: nis/nis_error.c:45
+#: nis/nis_error.c:46
 msgid "Malformed Name, or illegal name"
 msgstr ""
 
-#: argp/argp-help.c:1132
+#: argp/argp-help.c:1135
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: nis/nis_print.c:112
+#: nis/nis_print.c:149
 msgid "Master Server :\n"
 msgstr ""
 
-#: nis/nis_error.c:75
+#: nis/nis_error.c:76
 msgid "Master server busy, full dump rescheduled."
 msgstr ""
 
@@ -1246,7 +1277,7 @@ msgstr ""
 msgid "Memory allocation failure"
 msgstr ""
 
-#: posix/regex.c:966
+#: posix/regex.c:984
 msgid "Memory exhausted"
 msgstr ""
 
@@ -1256,20 +1287,20 @@ msgstr ""
 msgid "Message too long"
 msgstr ""
 
-#: nis/nis_error.c:57
+#: nis/nis_error.c:58
 msgid "Missing or malformed attribute"
 msgstr ""
 
-#: nis/nis_print.c:254
+#: nis/nis_print.c:292
 #, c-format
 msgid "Mod. Time     : %s"
 msgstr ""
 
-#: nis/nis_error.c:50
+#: nis/nis_error.c:51
 msgid "Modification failed"
 msgstr ""
 
-#: nis/nis_error.c:63
+#: nis/nis_error.c:64
 msgid "Modify operation failed"
 msgstr ""
 
@@ -1282,7 +1313,7 @@ msgid "Multihop attempted"
 msgstr ""
 
 #: catgets/gencat.c:106 catgets/gencat.c:110 db/makedb.c:58
-#: locale/programs/localedef.c:120
+#: locale/programs/localedef.c:119
 msgid "NAME"
 msgstr ""
 
@@ -1292,45 +1323,48 @@ msgid ""
 "[-a|-m]"
 msgstr ""
 
-#: nis/nis_print.c:30
+#: nis/nis_print.c:32
 msgid "NIS"
 msgstr ""
 
-#: nis/ypclnt.c:719
+#: nis/ypclnt.c:725
 msgid "NIS client/server version mismatch - can't supply service"
 msgstr ""
 
-#: nis/ypclnt.c:717
+#: nis/ypclnt.c:723
 msgid "NIS map data base is bad"
 msgstr ""
 
-#: nis/nis_error.c:68
+#: nis/nis_error.c:69
 msgid "NIS+ operation failed"
 msgstr ""
 
-#: nis/nis_error.c:33
+#: nis/nis_error.c:34
 msgid "NIS+ servers unreachable"
 msgstr ""
 
-#: nis/nis_error.c:69
+#: nis/nis_error.c:70
 msgid "NIS+ service is unavailable or not installed"
 msgstr ""
 
-#: nis/nis_print.c:262
-msgid "NO OBJECT\n"
+#: nis/nis_cache.c:111 nis/nis_cache.c:177 nis/nis_cache.c:185
+msgid "NIS+: cache file is corrupt!"
 msgstr ""
 
-#: nis/nis_print.c:220
-#, c-format
-msgid "Name : %s\n"
+#: nis/nis_cache.c:254
+msgid "NIS+: nis_cachemgr failed to refresh object for us"
+msgstr ""
+
+#: nis/nis_print.c:89
+msgid "NO OBJECT\n"
 msgstr ""
 
-#: nis/nis_print.c:106
+#: nis/nis_print.c:143
 #, c-format
 msgid "Name : '%s'\n"
 msgstr ""
 
-#: nis/nis_error.c:40
+#: nis/nis_error.c:41
 msgid "Name not served by this server"
 msgstr ""
 
@@ -1342,11 +1376,11 @@ msgstr ""
 msgid "Name or service not known"
 msgstr ""
 
-#: nis/nis_error.c:49
+#: nis/nis_error.c:50
 msgid "Name/entry isn't unique"
 msgstr ""
 
-#: nis/nis_error.c:58
+#: nis/nis_error.c:59
 msgid "Named object is not searchable"
 msgstr ""
 
@@ -1409,7 +1443,7 @@ msgstr ""
 msgid "No data available"
 msgstr ""
 
-#: nis/nis_error.c:73
+#: nis/nis_error.c:74
 msgid "No file space on server"
 msgstr ""
 
@@ -1421,23 +1455,27 @@ msgstr ""
 msgid "No locks available"
 msgstr ""
 
-#: posix/regex.c:955
+#: posix/regex.c:973
 msgid "No match"
 msgstr ""
 
+#: stdio-common/../sysdeps/gnu/errlist.c:802
+msgid "No medium found"
+msgstr ""
+
 #: stdio-common/../sysdeps/gnu/errlist.c:630
 msgid "No message of desired type"
 msgstr ""
 
-#: nis/ypclnt.c:707
+#: nis/ypclnt.c:713
 msgid "No more records in map database"
 msgstr ""
 
-#: posix/regex.c:5324
+#: posix/regex.c:5436
 msgid "No previous regular expression"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:573
+#: sunrpc/rpcinfo.c:569
 msgid "No remote programs registered.\n"
 msgstr ""
 
@@ -1459,11 +1497,11 @@ msgstr ""
 msgid "No such file or directory"
 msgstr ""
 
-#: nis/ypclnt.c:701
+#: nis/ypclnt.c:707
 msgid "No such key in map"
 msgstr ""
 
-#: nis/ypclnt.c:699
+#: nis/ypclnt.c:705
 msgid "No such map in server's domain"
 msgstr ""
 
@@ -1472,11 +1510,7 @@ msgstr ""
 msgid "No such process"
 msgstr ""
 
-#: argp/argp-parse.c:163
-msgid "No version known!?"
-msgstr ""
-
-#: nis/nis_error.c:60
+#: nis/nis_error.c:61
 msgid "Non NIS+ namespace encountered"
 msgstr ""
 
@@ -1484,11 +1518,11 @@ msgstr ""
 msgid "Non-recoverable failure in name resolution"
 msgstr ""
 
-#: nis/nis_print.c:120
+#: nis/nis_print.c:157
 msgid "None.\n"
 msgstr ""
 
-#: nis/nis_error.c:48
+#: nis/nis_error.c:49
 msgid "Not Found, no such name"
 msgstr ""
 
@@ -1501,24 +1535,24 @@ msgstr ""
 msgid "Not a directory"
 msgstr ""
 
-#: nis/nis_error.c:30
+#: nis/nis_error.c:31
 msgid "Not found"
 msgstr ""
 
-#: nis/nis_error.c:43
+#: nis/nis_error.c:44
 msgid "Not master server for this domain"
 msgstr ""
 
-#: nis/nis_error.c:39
+#: nis/nis_error.c:40
 msgid "Not owner"
 msgstr ""
 
-#: nis/nis_print.c:200
+#: nis/nis_print.c:237
 #, c-format
 msgid "Number of Columns   : %d\n"
 msgstr ""
 
-#: nis/nis_print.c:301
+#: nis/nis_print.c:327
 #, c-format
 msgid "Number of objects : %u\n"
 msgstr ""
@@ -1535,17 +1569,17 @@ msgstr ""
 msgid "Numerical result out of range"
 msgstr ""
 
-#: nis/nis_print.c:305
+#: nis/nis_print.c:331
 #, c-format
 msgid "Object #%d:\n"
 msgstr ""
 
-#: nis/nis_print.c:246
+#: nis/nis_print.c:284
 #, c-format
 msgid "Object Name   : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:255
+#: nis/nis_print.c:293
 msgid "Object Type   : "
 msgstr ""
 
@@ -1557,11 +1591,11 @@ msgstr ""
 msgid "Object is remote"
 msgstr ""
 
-#: nis/nis_error.c:42
+#: nis/nis_error.c:43
 msgid "Object with same name exists"
 msgstr ""
 
-#: time/zic.c:1966
+#: time/zic.c:1979
 msgid "Odd number of quotation marks"
 msgstr ""
 
@@ -1618,16 +1652,16 @@ msgstr ""
 msgid "Out of streams resources"
 msgstr ""
 
-#: locale/programs/localedef.c:106
+#: locale/programs/localedef.c:105
 msgid "Output control:"
 msgstr ""
 
-#: nis/nis_print.c:248
+#: nis/nis_print.c:286
 #, c-format
 msgid "Owner         : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:285
+#: nis/nis_print.c:107
 msgid "PRIVATE\n"
 msgstr ""
 
@@ -1635,16 +1669,16 @@ msgstr ""
 msgid "Package not installed"
 msgstr ""
 
-#: nis/nis_error.c:54
+#: nis/nis_error.c:55
 msgid "Partial Success"
 msgstr ""
 
-#: nis/nis_error.c:62
+#: nis/nis_error.c:63
 msgid "Passed object is not the same object on server"
 msgstr ""
 
 #. TRANS Permission denied; the file permissions do not allow the attempted operation.
-#: nis/nis_error.c:38 nis/ypclnt.c:721
+#: nis/nis_error.c:39 nis/ypclnt.c:727
 #: stdio-common/../sysdeps/gnu/errlist.c:96
 msgid "Permission denied"
 msgstr ""
@@ -1653,7 +1687,7 @@ msgstr ""
 msgid "Power failure"
 msgstr ""
 
-#: posix/regex.c:968
+#: posix/regex.c:986
 msgid "Premature end of regular expression"
 msgstr ""
 
@@ -1661,15 +1695,19 @@ msgstr ""
 msgid "Print content of database file, one entry a line"
 msgstr ""
 
-#: locale/programs/localedef.c:112
+#: locale/programs/localedef.c:111
 msgid "Print more messages"
 msgstr ""
 
-#: nis/nis_error.c:29
+#: argp/argp-parse.c:149
+msgid "Print program version"
+msgstr ""
+
+#: nis/nis_error.c:30
 msgid "Probable success"
 msgstr ""
 
-#: nis/nis_error.c:31
+#: nis/nis_error.c:32
 msgid "Probably not found"
 msgstr ""
 
@@ -1709,7 +1747,7 @@ msgstr ""
 msgid "Protocol wrong type for socket"
 msgstr ""
 
-#: nis/nis_error.c:64
+#: nis/nis_error.c:65
 msgid "Query illegal for named table"
 msgstr ""
 
@@ -1727,7 +1765,7 @@ msgstr ""
 msgid "RPC bad procedure for program"
 msgstr ""
 
-#: nis/ypclnt.c:695
+#: nis/ypclnt.c:701
 msgid "RPC failure on NIS operation"
 msgstr ""
 
@@ -1827,11 +1865,11 @@ msgstr ""
 msgid "RPC: Unknown protocol"
 msgstr ""
 
-#: nis/nis_print.c:126
+#: nis/nis_print.c:163
 msgid "RSA.\n"
 msgstr ""
 
-#: elf/dlsym.c:49 elf/dlvsym.c:52
+#: elf/dlsym.c:61 elf/dlvsym.c:63
 msgid "RTLD_NEXT used in code not dynamically loaded"
 msgstr ""
 
@@ -1840,7 +1878,7 @@ msgstr ""
 msgid "Read-only file system"
 msgstr ""
 
-#: posix/regex.c:969
+#: posix/regex.c:987
 msgid "Regular expression too big"
 msgstr ""
 
@@ -1856,21 +1894,21 @@ msgstr ""
 msgid "Remove password or make file unreadable by others."
 msgstr ""
 
-#: nis/nis_print.c:114
+#: nis/nis_print.c:151
 msgid "Replicate :\n"
 msgstr ""
 
-#: argp/argp-help.c:1565
+#: argp/argp-help.c:1572
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 
-#: catgets/gencat.c:222 db/makedb.c:217 locale/programs/locale.c:254
-#: locale/programs/localedef.c:378
+#: catgets/gencat.c:222 db/makedb.c:218 locale/programs/locale.c:254
+#: locale/programs/localedef.c:381
 msgid "Report bugs using the `glibcbug' script to <bugs@gnu.ai.mit.edu>.\n"
 msgstr ""
 
-#: nis/ypclnt.c:693
+#: nis/ypclnt.c:699
 msgid "Request arguments bad"
 msgstr ""
 
@@ -1908,7 +1946,7 @@ msgstr ""
 #. TRANS connect (whatever the operation).  You can use @code{select} to find out
 #. TRANS when the operation will be possible; @pxref{Waiting for I/O}.
 #. TRANS
-#. TRANS @strong{Portability Note:} In older Unix many systems, this condition
+#. TRANS @strong{Portability Note:} In many older Unix systems, this condition
 #. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
 #. TRANS different from @code{EAGAIN}.  To make your program portable, you should
 #. TRANS check for both codes and treat them the same.
@@ -1927,15 +1965,15 @@ msgstr ""
 msgid "Resource temporarily unavailable"
 msgstr ""
 
-#: nis/nis_error.c:47
+#: nis/nis_error.c:48
 msgid "Results Sent to callback proc"
 msgstr ""
 
-#: nis/nis_print.c:32
+#: nis/nis_print.c:34
 msgid "SUNYP"
 msgstr ""
 
-#: nis/nis_print.c:202
+#: nis/nis_print.c:239
 #, c-format
 msgid "Search Path         : %s\n"
 msgstr ""
@@ -1945,11 +1983,11 @@ msgstr ""
 msgid "Segmentation fault"
 msgstr ""
 
-#: nis/nis_error.c:35
+#: nis/nis_error.c:36
 msgid "Server busy, try again"
 msgstr ""
 
-#: nis/nis_error.c:41
+#: nis/nis_error.c:42
 msgid "Server out of memory"
 msgstr ""
 
@@ -1965,6 +2003,10 @@ msgstr ""
 msgid "Servname not supported for ai_socktype"
 msgstr ""
 
+#: argp/argp-parse.c:90
+msgid "Set the program name"
+msgstr ""
+
 #: stdio-common/../sysdeps/unix/siglist.c:29
 msgid "Signal 0"
 msgstr ""
@@ -1984,11 +2026,15 @@ msgstr ""
 msgid "Software caused connection abort"
 msgstr ""
 
-#: locale/programs/localedef.c:102
+#: sunrpc/rpcinfo.c:657
+msgid "Sorry. You are not root\n"
+msgstr ""
+
+#: locale/programs/localedef.c:101
 msgid "Source definitions are found in FILE"
 msgstr ""
 
-#: locale/programs/localedef.c:104
+#: locale/programs/localedef.c:103
 msgid "Specify code set for mapping ISO 10646 elements"
 msgstr ""
 
@@ -2008,7 +2054,7 @@ msgstr ""
 msgid "Stale NFS file handle"
 msgstr ""
 
-#: nis/nis_print.c:300
+#: nis/nis_print.c:326
 #, c-format
 msgid "Status            : %s\n"
 msgstr ""
@@ -2041,16 +2087,16 @@ msgstr ""
 msgid "Structure needs cleaning"
 msgstr ""
 
-#: nis/nis_error.c:28 nis/ypclnt.c:691 nis/ypclnt.c:765 posix/regex.c:954
+#: nis/nis_error.c:29 nis/ypclnt.c:697 nis/ypclnt.c:771 posix/regex.c:972
 #: stdio-common/../sysdeps/gnu/errlist.c:7
 msgid "Success"
 msgstr ""
 
-#: locale/programs/localedef.c:111
+#: locale/programs/localedef.c:110
 msgid "Suppress warnings and information messages"
 msgstr ""
 
-#: locale/programs/localedef.c:101
+#: locale/programs/localedef.c:100
 msgid "Symbolic character names defined in FILE"
 msgstr ""
 
@@ -2062,11 +2108,11 @@ msgstr ""
 msgid "System information:"
 msgstr ""
 
-#: nis/ypclnt.c:771
+#: nis/ypclnt.c:777
 msgid "System resource allocation failure"
 msgstr ""
 
-#: locale/programs/localedef.c:374
+#: locale/programs/localedef.c:377
 #, c-format
 msgid ""
 "System's directory for character maps: %s\n"
@@ -2074,11 +2120,11 @@ msgid ""
 "%s"
 msgstr ""
 
-#: nis/nis_print.c:273
+#: nis/nis_print.c:98
 msgid "TABLE\n"
 msgstr ""
 
-#: nis/nis_print.c:199
+#: nis/nis_print.c:236
 #, c-format
 msgid "Table Type          : %s\n"
 msgstr ""
@@ -2101,7 +2147,7 @@ msgstr ""
 msgid "Text file busy"
 msgstr ""
 
-#: nis/nis_print.c:164
+#: nis/nis_print.c:201
 #, c-format
 msgid "Time to live : %s\n"
 msgstr ""
@@ -2110,7 +2156,7 @@ msgstr ""
 msgid "Timer expired"
 msgstr ""
 
-#: nis/nis_error.c:55
+#: nis/nis_error.c:56
 msgid "Too Many Attributes"
 msgstr ""
 
@@ -2171,7 +2217,7 @@ msgstr ""
 msgid "Trace/breakpoint trap"
 msgstr ""
 
-#: posix/regex.c:959
+#: posix/regex.c:977
 msgid "Trailing backslash"
 msgstr ""
 
@@ -2196,7 +2242,7 @@ msgstr ""
 msgid "Transport endpoint is not connected"
 msgstr ""
 
-#: argp/argp-help.c:1538
+#: argp/argp-help.c:1545
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
@@ -2206,33 +2252,28 @@ msgstr ""
 msgid "Trying %s...\n"
 msgstr ""
 
-#: nis/nis_print.c:219
-#, c-format
-msgid "Type : %d\n"
-msgstr ""
-
-#: nis/nis_print.c:107
+#: nis/nis_print.c:144
 #, c-format
 msgid "Type : %s\n"
 msgstr ""
 
-#: nis/nis_print.c:46
+#: nis/nis_print.c:48
 msgid "UNKNOWN"
 msgstr ""
 
-#: nis/nis_error.c:72
+#: nis/nis_error.c:73
 msgid "Unable to authenticate NIS+ client"
 msgstr ""
 
-#: nis/nis_error.c:71
+#: nis/nis_error.c:72
 msgid "Unable to authenticate NIS+ server"
 msgstr ""
 
-#: nis/nis_error.c:46
+#: nis/nis_error.c:47
 msgid "Unable to create callback"
 msgstr ""
 
-#: nis/nis_error.c:74
+#: nis/nis_error.c:75
 msgid "Unable to create process on server"
 msgstr ""
 
@@ -2241,7 +2282,7 @@ msgstr ""
 msgid "Unknown .netrc keyword %s"
 msgstr ""
 
-#: nis/ypclnt.c:725
+#: nis/ypclnt.c:731
 msgid "Unknown NIS error code"
 msgstr ""
 
@@ -2258,7 +2299,7 @@ msgstr ""
 msgid "Unknown host"
 msgstr ""
 
-#: nis/nis_error.c:34
+#: nis/nis_error.c:35
 msgid "Unknown object"
 msgstr ""
 
@@ -2279,27 +2320,27 @@ msgstr ""
 msgid "Unknown system error"
 msgstr ""
 
-#: nis/ypclnt.c:773
+#: nis/ypclnt.c:779
 msgid "Unknown ypbind error"
 msgstr ""
 
-#: nis/nis_print.c:132
+#: nis/nis_print.c:169
 msgid "Unknown.\n"
 msgstr ""
 
-#: posix/regex.c:962
+#: posix/regex.c:980
 msgid "Unmatched ( or \\("
 msgstr ""
 
-#: posix/regex.c:970
+#: posix/regex.c:988
 msgid "Unmatched ) or \\)"
 msgstr ""
 
-#: posix/regex.c:961
+#: posix/regex.c:979
 msgid "Unmatched [ or [^"
 msgstr ""
 
-#: posix/regex.c:963
+#: posix/regex.c:981
 msgid "Unmatched \\{"
 msgstr ""
 
@@ -2318,7 +2359,7 @@ msgstr ""
 msgid "Usage: %s variable_name [pathname]\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:677
+#: sunrpc/rpcinfo.c:673
 msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
 msgstr ""
 
@@ -2341,7 +2382,7 @@ msgstr ""
 msgid "Virtual timer expired"
 msgstr ""
 
-#: time/zic.c:1871
+#: time/zic.c:1884
 msgid "Wild result from command execution"
 msgstr ""
 
@@ -2370,38 +2411,42 @@ msgstr ""
 msgid "Write output to file NAME"
 msgstr ""
 
-#: catgets/gencat.c:240 db/makedb.c:235 locale/programs/locale.c:272
-#: locale/programs/localedef.c:397
+#: catgets/gencat.c:240 db/makedb.c:236 locale/programs/locale.c:272
+#: locale/programs/localedef.c:400
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
-#: nis/nis_print.c:38
+#: stdio-common/../sysdeps/gnu/errlist.c:806
+msgid "Wrong medium type"
+msgstr ""
+
+#: nis/nis_print.c:40
 msgid "X500"
 msgstr ""
 
-#: nis/nis_print.c:42
+#: nis/nis_print.c:44
 msgid "XCHS"
 msgstr ""
 
-#: nis/ypclnt.c:142
+#: nis/ypclnt.c:147
 msgid "YPBINDPROC_DOMAIN: Internal error\n"
 msgstr ""
 
-#: nis/ypclnt.c:146
+#: nis/ypclnt.c:151
 #, c-format
 msgid "YPBINDPROC_DOMAIN: No server for domain %s\n"
 msgstr ""
 
-#: nis/ypclnt.c:150
+#: nis/ypclnt.c:155
 msgid "YPBINDPROC_DOMAIN: Resource allocation failure\n"
 msgstr ""
 
-#: nis/ypclnt.c:154
+#: nis/ypclnt.c:159
 msgid "YPBINDPROC_DOMAIN: Unknown error\n"
 msgstr ""
 
-#: nis/nis_error.c:70
+#: nis/nis_error.c:71
 msgid "Yes, 42 is the meaning of life"
 msgstr ""
 
@@ -2410,17 +2455,11 @@ msgstr ""
 msgid "You really blew it this time"
 msgstr ""
 
-#: time/zic.c:1048
+#: time/zic.c:1052
 msgid "Zone continuation line end time is not after end time of previous line"
 msgstr ""
 
-#: nis/nis_server.c:36 nis/nis_server.c:48 nis/nis_server.c:68
-#: nis/nis_server.c:80
-#, c-format
-msgid "__do_niscall: Error #%d\n"
-msgstr ""
-
-#: locale/programs/charmap.c:397 locale/programs/locfile.c:363
+#: locale/programs/charmap.c:465 locale/programs/locfile.c:363
 #, c-format
 msgid "`%1$s' definition does not end with `END %1$s'"
 msgstr ""
@@ -2451,7 +2490,7 @@ msgstr ""
 msgid "ai_socktype not supported"
 msgstr ""
 
-#: locale/programs/charmap.c:267
+#: locale/programs/charmap.c:335
 #, c-format
 msgid "argument to <%s> must be a single character"
 msgstr ""
@@ -2473,15 +2512,15 @@ msgstr ""
 msgid "bad .rhosts owner"
 msgstr ""
 
-#: locale/programs/charmap.c:212 locale/programs/locfile.c:231
+#: locale/programs/charmap.c:280 locale/programs/locfile.c:231
 msgid "bad argument"
 msgstr ""
 
-#: time/zic.c:1170
+#: time/zic.c:1174
 msgid "blank FROM field on Link line"
 msgstr ""
 
-#: time/zic.c:1174
+#: time/zic.c:1178
 msgid "blank TO field on Link line"
 msgstr ""
 
@@ -2501,19 +2540,23 @@ msgstr ""
 msgid "broadcast: ioctl (get interface flags)"
 msgstr ""
 
-#: sunrpc/svc_udp.c:439
+#: login/programs/request.c:167
+msgid "buffer overflow"
+msgstr ""
+
+#: sunrpc/svc_udp.c:442
 msgid "cache_set: could not allocate new rpc_buffer"
 msgstr ""
 
-#: sunrpc/svc_udp.c:433
+#: sunrpc/svc_udp.c:436
 msgid "cache_set: victim alloc failed"
 msgstr ""
 
-#: sunrpc/svc_udp.c:422
+#: sunrpc/svc_udp.c:425
 msgid "cache_set: victim not found"
 msgstr ""
 
-#: time/zic.c:1698
+#: time/zic.c:1711
 msgid "can't determine time zone abbreviation to use just after until time"
 msgstr ""
 
@@ -2522,11 +2565,15 @@ msgstr ""
 msgid "can't reassign procedure number %d\n"
 msgstr ""
 
-#: locale/programs/localedef.c:271
+#: locale/programs/localedef.c:274
 #, c-format
 msgid "cannot `stat' locale file `%s'"
 msgstr ""
 
+#: elf/dl-load.c:144
+msgid "cannot allocate name record"
+msgstr ""
+
 #: locale/programs/ld-collate.c:1317
 #, c-format
 msgid "cannot insert collation element `%.*s'"
@@ -2541,12 +2588,12 @@ msgstr ""
 msgid "cannot insert new collating symbol definition: %s"
 msgstr ""
 
-#: db/makedb.c:142
+#: db/makedb.c:143
 #, c-format
 msgid "cannot open database file `%s': %s"
 msgstr ""
 
-#: catgets/gencat.c:271 db/makedb.c:161
+#: catgets/gencat.c:271 db/makedb.c:162
 #, c-format
 msgid "cannot open input file `%s'"
 msgstr ""
@@ -2556,12 +2603,12 @@ msgstr ""
 msgid "cannot open locale definition file `%s'"
 msgstr ""
 
-#: catgets/gencat.c:776 catgets/gencat.c:817 db/makedb.c:170
+#: catgets/gencat.c:776 catgets/gencat.c:817 db/makedb.c:171
 #, c-format
 msgid "cannot open output file `%s'"
 msgstr ""
 
-#: locale/programs/locfile.c:1008
+#: locale/programs/locfile.c:1020
 #, c-format
 msgid "cannot open output file `%s' for category `%s'"
 msgstr ""
@@ -2575,22 +2622,30 @@ msgstr ""
 msgid "cannot read character map directory `%s'"
 msgstr ""
 
+#: login/programs/request.c:91
+msgid "cannot read from client"
+msgstr ""
+
 #: locale/programs/locale.c:306
 #, c-format
 msgid "cannot read locale directory `%s'"
 msgstr ""
 
-#: locale/programs/localedef.c:293
+#: locale/programs/localedef.c:296
 #, c-format
 msgid "cannot read locale file `%s'"
 msgstr ""
 
-#: locale/programs/localedef.c:318
+#: locale/programs/localedef.c:321
 #, c-format
 msgid "cannot write output files to `%s'"
 msgstr ""
 
-#: locale/programs/localedef.c:431
+#: login/programs/request.c:120
+msgid "cannot write to client"
+msgstr ""
+
+#: locale/programs/localedef.c:434
 msgid "category data requested more than once: should not happen"
 msgstr ""
 
@@ -2628,7 +2683,7 @@ msgstr ""
 msgid "character map `%s' already defined"
 msgstr ""
 
-#: locale/programs/charmap.c:76
+#: locale/programs/charmap.c:77
 #, c-format
 msgid "character map file `%s' not found"
 msgstr ""
@@ -2665,6 +2720,10 @@ msgstr ""
 msgid "connect to address %s: "
 msgstr ""
 
+#: elf/dl-load.c:128
+msgid "could not allocate name string"
+msgstr ""
+
 #: sunrpc/svc_simple.c:78
 msgid "couldn't create an rpc server\n"
 msgstr ""
@@ -2674,7 +2733,7 @@ msgstr ""
 msgid "couldn't register prog %d vers %d\n"
 msgstr ""
 
-#: locale/programs/charmap.c:86
+#: locale/programs/charmap.c:154
 #, c-format
 msgid "default character map file `%s' not found"
 msgstr ""
@@ -2707,7 +2766,7 @@ msgstr ""
 msgid "duplicate definition for character `%.*s'"
 msgstr ""
 
-#: db/makedb.c:314
+#: db/makedb.c:315
 msgid "duplicate key"
 msgstr ""
 
@@ -2715,7 +2774,7 @@ msgstr ""
 msgid "duplicate set definition"
 msgstr ""
 
-#: time/zic.c:963
+#: time/zic.c:967
 #, c-format
 msgid "duplicate zone name %s (file \"%s\", line %d)"
 msgstr ""
@@ -2736,19 +2795,19 @@ msgstr ""
 msgid "empty weight name: line ignored"
 msgstr ""
 
-#: sunrpc/svc_udp.c:365
+#: sunrpc/svc_udp.c:368
 msgid "enablecache: cache already enabled"
 msgstr ""
 
-#: sunrpc/svc_udp.c:371
+#: sunrpc/svc_udp.c:374
 msgid "enablecache: could not allocate cache"
 msgstr ""
 
-#: sunrpc/svc_udp.c:379
+#: sunrpc/svc_udp.c:382
 msgid "enablecache: could not allocate cache data"
 msgstr ""
 
-#: sunrpc/svc_udp.c:386
+#: sunrpc/svc_udp.c:389
 msgid "enablecache: could not allocate cache fifo"
 msgstr ""
 
@@ -2768,16 +2827,16 @@ msgstr ""
 msgid "expect string argument for `copy'"
 msgstr ""
 
-#: time/zic.c:854
+#: time/zic.c:858
 msgid "expected continuation line not found"
 msgstr ""
 
-#: locale/programs/locfile.c:1032
+#: locale/programs/locfile.c:1044
 #, c-format
 msgid "failure while writing data for category `%s'"
 msgstr ""
 
-#: nis/ypclnt.c:187
+#: nis/nis_cache.c:129 nis/nis_call.c:150 nis/ypclnt.c:195
 msgid "fcntl: F_SETFD"
 msgstr ""
 
@@ -2825,11 +2884,11 @@ msgstr ""
 msgid "get_myaddress: ioctl (get interface configuration)"
 msgstr ""
 
-#: time/zic.c:1147
+#: time/zic.c:1151
 msgid "illegal CORRECTION field on Leap line"
 msgstr ""
 
-#: time/zic.c:1151
+#: time/zic.c:1155
 msgid "illegal Rolling/Stationary field on Leap line"
 msgstr ""
 
@@ -2845,11 +2904,11 @@ msgstr ""
 msgid "illegal collation element"
 msgstr ""
 
-#: locale/programs/charmap.c:196
+#: locale/programs/charmap.c:264
 msgid "illegal definition"
 msgstr ""
 
-#: locale/programs/charmap.c:349
+#: locale/programs/charmap.c:417
 msgid "illegal encoding given"
 msgstr ""
 
@@ -2890,23 +2949,23 @@ msgstr ""
 msgid "implementation limit: no more than %d character maps allowed"
 msgstr ""
 
-#: db/makedb.c:144
+#: db/makedb.c:145
 msgid "incorrectly formatted file"
 msgstr ""
 
-#: time/zic.c:811
+#: time/zic.c:815
 msgid "input line of unknown type"
 msgstr ""
 
-#: time/zic.c:1760
+#: time/zic.c:1773
 msgid "internal error - addtype called with bad isdst"
 msgstr ""
 
-#: time/zic.c:1768
+#: time/zic.c:1781
 msgid "internal error - addtype called with bad ttisgmt"
 msgstr ""
 
-#: time/zic.c:1764
+#: time/zic.c:1777
 msgid "internal error - addtype called with bad ttisstd"
 msgstr ""
 
@@ -2915,43 +2974,43 @@ msgstr ""
 msgid "internal error in %s, line %u"
 msgstr ""
 
-#: time/zic.c:1019
+#: time/zic.c:1023
 msgid "invalid GMT offset"
 msgstr ""
 
-#: time/zic.c:1022
+#: time/zic.c:1026
 msgid "invalid abbreviation format"
 msgstr ""
 
-#: time/zic.c:1112 time/zic.c:1313 time/zic.c:1327
+#: time/zic.c:1116 time/zic.c:1326 time/zic.c:1340
 msgid "invalid day of month"
 msgstr ""
 
-#: time/zic.c:1270
+#: time/zic.c:1279
 msgid "invalid ending year"
 msgstr ""
 
-#: time/zic.c:1084
+#: time/zic.c:1088
 msgid "invalid leaping year"
 msgstr ""
 
-#: time/zic.c:1099 time/zic.c:1202
+#: time/zic.c:1103 time/zic.c:1206
 msgid "invalid month name"
 msgstr ""
 
-#: time/zic.c:918
+#: time/zic.c:922
 msgid "invalid saved time"
 msgstr ""
 
-#: time/zic.c:1250
+#: time/zic.c:1255
 msgid "invalid starting year"
 msgstr ""
 
-#: time/zic.c:1128 time/zic.c:1230
+#: time/zic.c:1132 time/zic.c:1235
 msgid "invalid time of day"
 msgstr ""
 
-#: time/zic.c:1318
+#: time/zic.c:1331
 msgid "invalid weekday name"
 msgstr ""
 
@@ -2963,11 +3022,11 @@ msgstr ""
 msgid "line before ellipsis does not contain definition for character constant"
 msgstr ""
 
-#: time/zic.c:791
+#: time/zic.c:795
 msgid "line too long"
 msgstr ""
 
-#: locale/programs/localedef.c:265
+#: locale/programs/localedef.c:268
 #, c-format
 msgid "locale file `%s', used in `copy' statement, not found"
 msgstr ""
@@ -2986,12 +3045,14 @@ msgstr ""
 
 #: locale/programs/ld-collate.c:167 locale/programs/ld-collate.c:173
 #: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1442
-#: locale/programs/ld-collate.c:1471 locale/programs/locfile.c:962
-#: locale/programs/xmalloc.c:68 posix/getconf.c:250
+#: locale/programs/ld-collate.c:1471 locale/programs/locfile.c:974
+#: locale/programs/xmalloc.c:70 login/programs/database.c:62
+#: login/programs/database.c:79 login/programs/database.c:95
+#: posix/getconf.c:250
 msgid "memory exhausted"
 msgstr ""
 
-#: malloc/obstack.c:462
+#: malloc/obstack.c:466
 msgid "memory exhausted\n"
 msgstr ""
 
@@ -3009,14 +3070,46 @@ msgstr ""
 msgid "missing era name in string %d in `era' field in category `%s'"
 msgstr ""
 
-#: gmon/gmon.c:128
+#: gmon/gmon.c:132
 msgid "monstartup: out of memory\n"
 msgstr ""
 
-#: time/zic.c:913
+#: time/zic.c:917
 msgid "nameless rule"
 msgstr ""
 
+#: nis/nss_nisplus/nisplus-publickey.c:266
+#: nis/nss_nisplus/nisplus-publickey.c:271
+#: nis/nss_nisplus/nisplus-publickey.c:332
+#: nis/nss_nisplus/nisplus-publickey.c:340
+#, c-format
+msgid "netname2user: (nis+ lookup): %s\n"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:285
+#, c-format
+msgid "netname2user: DES entry for %s in directory %s not unique"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:354
+#, c-format
+msgid "netname2user: LOCAL entry for %s in directory %s not unique"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:198
+#, c-format
+msgid "netname2user: missing group id list in '%s'."
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:304
+#, c-format
+msgid "netname2user: principal name '%s' too long"
+msgstr ""
+
+#: nis/nss_nisplus/nisplus-publickey.c:362
+msgid "netname2user: should not have uid 0"
+msgstr ""
+
 #: sunrpc/svc_simple.c:153
 #, c-format
 msgid "never registered prog %d\n"
@@ -3027,7 +3120,7 @@ msgstr ""
 msgid "no correct regular expression for field `%s' in category `%s': %s"
 msgstr ""
 
-#: time/zic.c:2086
+#: time/zic.c:2099
 msgid "no day in month matches rule"
 msgstr ""
 
@@ -3039,17 +3132,17 @@ msgstr ""
 msgid "no other keyword shall be specified when `copy' is used"
 msgstr ""
 
-#: locale/programs/localedef.c:324
+#: locale/programs/localedef.c:327
 msgid "no output file produced because warning were issued"
 msgstr ""
 
-#: locale/programs/charmap.c:315 locale/programs/charmap.c:466
-#: locale/programs/charmap.c:545
+#: locale/programs/charmap.c:383 locale/programs/charmap.c:534
+#: locale/programs/charmap.c:613
 msgid "no symbolic name given"
 msgstr ""
 
-#: locale/programs/charmap.c:380 locale/programs/charmap.c:512
-#: locale/programs/charmap.c:578
+#: locale/programs/charmap.c:448 locale/programs/charmap.c:580
+#: locale/programs/charmap.c:646
 msgid "no symbolic name given for end of range"
 msgstr ""
 
@@ -3058,7 +3151,7 @@ msgstr ""
 msgid "no weight defined for symbol `%s'"
 msgstr ""
 
-#: locale/programs/charmap.c:430
+#: locale/programs/charmap.c:498
 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
 msgstr ""
 
@@ -3070,23 +3163,24 @@ msgstr ""
 msgid "preprocessor error"
 msgstr ""
 
-#: db/makedb.c:330
+#: db/makedb.c:331
 #, c-format
 msgid "problems while reading `%s'"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:384
+#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383
 #, c-format
 msgid "program %lu is not available\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:265 sunrpc/rpcinfo.c:311 sunrpc/rpcinfo.c:409
-#: sunrpc/rpcinfo.c:455 sunrpc/rpcinfo.c:478 sunrpc/rpcinfo.c:512
+#: sunrpc/rpcinfo.c:264 sunrpc/rpcinfo.c:310 sunrpc/rpcinfo.c:333
+#: sunrpc/rpcinfo.c:407 sunrpc/rpcinfo.c:453 sunrpc/rpcinfo.c:476
+#: sunrpc/rpcinfo.c:510
 #, c-format
 msgid "program %lu version %lu is not available\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:518
+#: sunrpc/rpcinfo.c:515
 #, c-format
 msgid "program %lu version %lu ready and waiting\n"
 msgstr ""
@@ -3109,39 +3203,39 @@ msgstr ""
 msgid "registerrpc: out of memory\n"
 msgstr ""
 
-#: time/zic.c:1821
+#: time/zic.c:1834
 msgid "repeated leap second moment"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:733
+#: sunrpc/rpcinfo.c:731
 #, c-format
 msgid "rpcinfo: %s is unknown host\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:696
+#: sunrpc/rpcinfo.c:694
 #, c-format
 msgid "rpcinfo: %s is unknown service\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:668
+#: sunrpc/rpcinfo.c:664
 #, c-format
 msgid "rpcinfo: Could not delete registration for prog %s version %s\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:640
+#: sunrpc/rpcinfo.c:636
 #, c-format
 msgid "rpcinfo: broadcast failed: %s\n"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:560
+#: sunrpc/rpcinfo.c:556
 msgid "rpcinfo: can't contact portmapper"
 msgstr ""
 
-#: sunrpc/rpcinfo.c:567
+#: sunrpc/rpcinfo.c:563
 msgid "rpcinfo: can't contact portmapper: "
 msgstr ""
 
-#: time/zic.c:704 time/zic.c:706
+#: time/zic.c:708 time/zic.c:710
 msgid "same rule name in multiple files"
 msgstr ""
 
@@ -3162,7 +3256,7 @@ msgid ""
 "specification of sorting weight for collation symbol does not make sense"
 msgstr ""
 
-#: time/zic.c:775
+#: time/zic.c:779
 msgid "standard input"
 msgstr ""
 
@@ -3175,16 +3269,24 @@ msgstr ""
 msgid "starting date is illegal in string %d in `era' field in category `%s'"
 msgstr ""
 
-#: time/zic.c:1274
+#: time/zic.c:1287
 msgid "starting year greater than ending year"
 msgstr ""
 
+#: time/zic.c:1261 time/zic.c:1285
+msgid "starting year too high to be represented"
+msgstr ""
+
+#: time/zic.c:1259 time/zic.c:1283
+msgid "starting year too low to be represented"
+msgstr ""
+
 #: locale/programs/ld-time.c:335
 #, c-format
 msgid "stopping date is illegal in string %d in `era' field in category `%s'"
 msgstr ""
 
-#: sunrpc/svc_run.c:66
+#: sunrpc/svc_run.c:81
 msgid "svc_run: - select failed"
 msgstr ""
 
@@ -3251,10 +3353,10 @@ msgid ""
 "in charset"
 msgstr ""
 
-#: locale/programs/charmap.c:314 locale/programs/charmap.c:348
-#: locale/programs/charmap.c:378 locale/programs/charmap.c:465
-#: locale/programs/charmap.c:511 locale/programs/charmap.c:544
-#: locale/programs/charmap.c:576
+#: locale/programs/charmap.c:382 locale/programs/charmap.c:416
+#: locale/programs/charmap.c:446 locale/programs/charmap.c:533
+#: locale/programs/charmap.c:579 locale/programs/charmap.c:612
+#: locale/programs/charmap.c:644
 #, c-format
 msgid "syntax error in %s definition: %s"
 msgstr ""
@@ -3307,7 +3409,7 @@ msgstr ""
 msgid "syntax error in order specification"
 msgstr ""
 
-#: locale/programs/charmap.c:195 locale/programs/charmap.c:211
+#: locale/programs/charmap.c:263 locale/programs/charmap.c:279
 #, c-format
 msgid "syntax error in prolog: %s"
 msgstr ""
@@ -3324,11 +3426,11 @@ msgstr ""
 msgid "this is the first definition"
 msgstr ""
 
-#: time/zic.c:1117
+#: time/zic.c:1121
 msgid "time before zero"
 msgstr ""
 
-#: time/zic.c:1125 time/zic.c:1986 time/zic.c:2005
+#: time/zic.c:1129 time/zic.c:1999 time/zic.c:2018
 msgid "time overflow"
 msgstr ""
 
@@ -3344,15 +3446,15 @@ msgstr ""
 msgid "too many character classes defined"
 msgstr ""
 
-#: time/zic.c:1815
+#: time/zic.c:1828
 msgid "too many leap seconds"
 msgstr ""
 
-#: time/zic.c:1787
+#: time/zic.c:1800
 msgid "too many local time types"
 msgstr ""
 
-#: time/zic.c:1741
+#: time/zic.c:1754
 msgid "too many transitions?!"
 msgstr ""
 
@@ -3360,7 +3462,7 @@ msgstr ""
 msgid "too many weights"
 msgstr ""
 
-#: time/zic.c:2109
+#: time/zic.c:2122
 msgid "too many, or too long, time zone abbreviations"
 msgstr ""
 
@@ -3377,7 +3479,7 @@ msgstr ""
 msgid "two lines in a row containing `...' are not allowed"
 msgstr ""
 
-#: time/zic.c:1281
+#: time/zic.c:1294
 msgid "typed single year"
 msgstr ""
 
@@ -3385,7 +3487,7 @@ msgstr ""
 msgid "undefined"
 msgstr ""
 
-#: locale/programs/charmap.c:617 locale/programs/charmap.c:628
+#: locale/programs/charmap.c:685 locale/programs/charmap.c:696
 #, c-format
 msgid "unknown character `%s'"
 msgstr ""
@@ -3417,7 +3519,7 @@ msgstr ""
 msgid "unknown symbol `%.*s': line ignored"
 msgstr ""
 
-#: time/zic.c:747
+#: time/zic.c:751
 msgid "unruly zone"
 msgstr ""
 
@@ -3445,16 +3547,16 @@ msgstr ""
 msgid "upper limit in range is not smaller then lower limit"
 msgstr ""
 
-#: time/zic.c:2052
+#: time/zic.c:2065
 msgid "use of 2/29 in non leap-year"
 msgstr ""
 
-#: locale/programs/charmap.c:438 locale/programs/charmap.c:492
+#: locale/programs/charmap.c:506 locale/programs/charmap.c:560
 #, c-format
 msgid "value for %s must be an integer"
 msgstr ""
 
-#: locale/programs/charmap.c:233
+#: locale/programs/charmap.c:301
 #, c-format
 msgid "value for <%s> must lie between 1 and 4"
 msgstr ""
@@ -3464,7 +3566,7 @@ msgstr ""
 msgid "value for field `%s' in category `%s' must not be the empty string"
 msgstr ""
 
-#: locale/programs/charmap.c:245
+#: locale/programs/charmap.c:313
 msgid "value of <mb_cur_max> must be greater than the value of <mb_cur_min>"
 msgstr ""
 
@@ -3484,7 +3586,7 @@ msgstr ""
 msgid "values for field `%s' in category `%s' must be smaller than 127"
 msgstr ""
 
-#: login/utmp_file.c:84
+#: login/utmp_file.c:85
 msgid "while opening UTMP file"
 msgstr ""
 
@@ -3496,11 +3598,11 @@ msgstr ""
 msgid "while preparing output"
 msgstr ""
 
-#: db/makedb.c:357
+#: db/makedb.c:358
 msgid "while reading database"
 msgstr ""
 
-#: db/makedb.c:319
+#: db/makedb.c:320
 msgid "while writing data base file"
 msgstr ""
 
@@ -3508,23 +3610,23 @@ msgstr ""
 msgid "wrong number of arguments"
 msgstr ""
 
-#: time/zic.c:1075
+#: time/zic.c:1079
 msgid "wrong number of fields on Leap line"
 msgstr ""
 
-#: time/zic.c:1166
+#: time/zic.c:1170
 msgid "wrong number of fields on Link line"
 msgstr ""
 
-#: time/zic.c:909
+#: time/zic.c:913
 msgid "wrong number of fields on Rule line"
 msgstr ""
 
-#: time/zic.c:979
+#: time/zic.c:983
 msgid "wrong number of fields on Zone continuation line"
 msgstr ""
 
-#: time/zic.c:937
+#: time/zic.c:941
 msgid "wrong number of fields on Zone line"
 msgstr ""
 
@@ -3536,10 +3638,10 @@ msgstr ""
 msgid "xdrrec_create: out of memory\n"
 msgstr ""
 
-#: nis/ypclnt.c:813
+#: nis/ypclnt.c:819
 msgid "yp_update: cannot convert host to netname\n"
 msgstr ""
 
-#: nis/ypclnt.c:825
+#: nis/ypclnt.c:831
 msgid "yp_update: cannot get server address\n"
 msgstr ""
index 80b6f96..02165ee 100644 (file)
@@ -27,7 +27,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "../stdio-common/_itoa.h"
+#include <stdio-common/_itoa.h>
 
 /* Variable to synchronize work.  */
 char *__getopt_nonoption_flags;
@@ -40,13 +40,13 @@ extern pid_t __libc_pid;
    application it does not exist anymore since it was saved for the use
    in getopt.  */
 void
-__getopt_clean_environment (void)
+__getopt_clean_environment (char **env)
 {
   /* Bash 2.0 puts a special variable in the environment for each
      command it runs, specifying which ARGV elements are the results
      of file name wildcard expansion and therefore should not be
      considered as options.  */
-  static const char envvar_tail[] = "_GNU_nonoption_argv_flags_";
+  static const char envvar_tail[] = "_GNU_nonoption_argv_flags_=";
   char var[100];
   char *cp, **ep;
   size_t len;
@@ -56,19 +56,19 @@ __getopt_clean_environment (void)
   if (__libc_pid == 0)
     __libc_pid = getpid ();
 
-  /* Construct "_<PID>_GNU_nonoption_argv_flags_" string.  */
+  /* Construct "_<PID>_GNU_nonoption_argv_flags_=" string.  */
   cp = memcpy (&var[sizeof (var) - sizeof (envvar_tail)], envvar_tail,
               sizeof (envvar_tail));
   cp = _itoa_word (__libc_pid, cp, 10, 0);
   *--cp = '_';
   len = (var + sizeof (var) - 1) - cp;
 
-  for (ep = __environ; *ep != NULL; ++ep)
-    if (!strncmp (*ep, cp, len) && (*ep)[len] == '=')
+  for (ep = env; *ep != NULL; ++ep)
+    if (!strncmp (*ep, cp, len))
       {
        /* Found it.  Store this pointer and move later ones back.  */
        char **dp = ep;
-       __getopt_nonoption_flags = &(*ep)[len + 1];
+       __getopt_nonoption_flags = &(*ep)[len];
        do
          dp[0] = dp[1];
        while (*dp++);
index 6a82fe0..b6e087e 100644 (file)
@@ -252,6 +252,11 @@ extern char *alloca ();
 #undef GLOB_PERIOD
 #include <glob.h>
 \f
+static
+#if __GNUC__ - 0 >= 2
+inline
+#endif
+const char *next_brace_sub __P ((const char *begin));
 static int glob_in_dir __P ((const char *pattern, const char *directory,
                             int flags,
                             int (*errfunc) __P ((const char *, int)),
index fd79bc4..b942e40 100644 (file)
@@ -34,10 +34,12 @@ extern char **_dl_argv;
 extern char **_environ;
 extern size_t _dl_pagesize;
 extern const char *_dl_platform;
+extern unsigned long _dl_hwcap;
 extern size_t _dl_platformlen;
 extern void _end;
 extern void ENTRY_POINT (void);
 
+ElfW(Addr) _dl_base_addr;
 int __libc_enable_secure;
 int __libc_multiple_libcs;     /* Defining this here avoids the inclusion
                                   of init-first.  */
@@ -87,6 +89,9 @@ _dl_sysdep_start (void **start_argptr,
       case AT_ENTRY:
        user_entry = av->a_un.a_val;
        break;
+      case AT_BASE:
+       _dl_base_addr = av->a_un.a_val;
+       break;
       case AT_UID:
        uid = av->a_un.a_val;
        break;
@@ -103,7 +108,7 @@ _dl_sysdep_start (void **start_argptr,
        _dl_platform = av->a_un.a_ptr;
        break;
       case AT_HWCAP:
-       /* Well, what shall we use?  A string or an integer with bits?  */
+       _dl_hwcap = av->a_un.a_val;
        break;
       }
 
@@ -187,6 +192,12 @@ _dl_show_auxv (void)
                                        16, 0),
                            "\n", NULL);
        break;
+      case AT_BASE:
+       _dl_sysdep_message ("AT_BASE:    0x",
+                           _itoa_word (av->a_un.a_val, buf + sizeof buf - 1,
+                                       16, 0),
+                           "\n", NULL);
+       break;
       case AT_UID:
        _dl_sysdep_message ("AT_UID:      ",
                            _itoa_word (av->a_un.a_val, buf + sizeof buf - 1,
@@ -215,10 +226,9 @@ _dl_show_auxv (void)
        _dl_sysdep_message ("AT_PLATFORM: ", av->a_un.a_ptr, NULL);
        break;
       case AT_HWCAP:
-       /* Well, what shall we use?  A string or an integer with bits?  */
        _dl_sysdep_message ("AT_HWCAP:    ",
                            _itoa_word (av->a_un.a_val, buf + sizeof buf - 1,
-                                       10, 0),
+                                       16, 0),
                            "\n", NULL);
        break;
       }
index e517cff..213060b 100644 (file)
@@ -57,20 +57,12 @@ static inline Elf32_Addr __attribute__ ((unused))
 elf_machine_load_address (void)
 {
   Elf32_Addr addr;
-  asm ("       call .Lhere\n"
-       ".Lhere:        popl %0\n"
-       "       subl $.Lhere, %0"
+  asm ("       call 1f\n"
+       "1:     popl %0\n"
+       "       subl 1b@GOT(%%ebx), %0"
        : "=r" (addr));
   return addr;
 }
-/* The `subl' insn above will contain an R_386_32 relocation entry
-   intended to insert the run-time address of the label `.Lhere'.
-   This will be the first relocation in the text of the dynamic linker;
-   we skip it to avoid trying to modify read-only text in this early stage.  */
-#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \
-  ++(const Elf32_Rel *) (dynamic_info)[DT_REL]->d_un.d_ptr; \
-  (dynamic_info)[DT_RELSZ]->d_un.d_val -= sizeof (Elf32_Rel);
-
 
 #ifndef PROF
 /* We add a declaration of this function here so that in dl-runtime.c
@@ -132,6 +124,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
 # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
        .globl _dl_runtime_resolve
        .type _dl_runtime_resolve, @function
+       .align 16
 _dl_runtime_resolve:
        pushl %eax              # Preserve registers otherwise clobbered.
        pushl %ecx
@@ -147,6 +140,7 @@ _dl_runtime_resolve:
 
        .globl _dl_runtime_profile
        .type _dl_runtime_profile, @function
+       .align 16
 _dl_runtime_profile:
        pushl %eax              # Preserve registers otherwise clobbered.
        pushl %ecx
@@ -167,6 +161,7 @@ _dl_runtime_profile:
        .globl _dl_runtime_profile
        .type _dl_runtime_resolve, @function
        .type _dl_runtime_profile, @function
+       .align 16
 _dl_runtime_resolve:
 _dl_runtime_profile:
        pushl %eax              # Preserve registers otherwise clobbered.
index c6b9331..17f62a0 100644 (file)
 #ifdef __GNUC__
 #if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
 
+/* The gcc, version 2.7 or below, has problems with all this inlining
+   code.  So disable it for this version of the compiler.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 7)
+
 #ifdef __cplusplus
 # define __MATH_INLINE __inline
 #else
   }
 
 
+/* Miscellaneous functions */
+
+__inline_mathcode (__sgn, __x, \
+  return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0))
+
+__inline_mathcode (__pow2, __x, \
+  register long double __value;                                                      \
+  register long double __exponent;                                           \
+  long int __p = (long int) __x;                                             \
+  if (__x == (long double) __p)                                                      \
+    {                                                                        \
+      __asm __volatile__                                                     \
+       ("fscale"                                                             \
+        : "=t" (__value) : "0" (1.0), "u" (__x));                            \
+      return __value;                                                        \
+    }                                                                        \
+  __asm __volatile__                                                         \
+    ("fldl     %%st(0)\n\t"                                                  \
+     "frndint                  # int(x)\n\t"                                 \
+     "fxch\n\t"                                                                      \
+     "fsub     %%st(1)         # fract(x)\n\t"                               \
+     "f2xm1                    # 2^(fract(x)) - 1\n\t"                       \
+     : "=t" (__value), "=u" (__exponent) : "0" (__x));                       \
+  __value += 1.0;                                                            \
+  __asm __volatile__                                                         \
+    ("fscale"                                                                \
+     : "=t" (__value) : "0" (__value), "u" (__exponent));                    \
+  return __value)
+
+#define __sincos_code \
+  register long double __cosr;                                               \
+  register long double __sinr;                                               \
+  __asm __volatile__                                                         \
+    ("fsincos\n\t"                                                           \
+     "fnstsw   %%ax\n\t"                                                     \
+     "testl    $0x400, %%eax\n\t"                                            \
+     "jz       1f\n\t"                                                       \
+     "fldpi\n\t"                                                             \
+     "fadd     %%st(0)\n\t"                                                  \
+     "fxch     %%st(1)\n\t"                                                  \
+     "2: fprem1\n\t"                                                         \
+     "fnstsw   %%ax\n\t"                                                     \
+     "testl    $0x400, %%eax\n\t"                                            \
+     "jnz      2b\n\t"                                                       \
+     "fstp     %%st(1)\n\t"                                                  \
+     "fsincos\n\t"                                                           \
+     "1:"                                                                    \
+     : "=t" (__cosr), "=u" (__sinr) : "0" (__x));                            \
+  *__sinx = __sinr;                                                          \
+  *__cosx = __cosr
+
+__MATH_INLINE void __sincos (double __x, double *__sinx, double *__cosx);
+__MATH_INLINE void
+__sincos (double __x, double *__sinx, double *__cosx)
+{
+  __sincos_code;
+}
+
+__MATH_INLINE void __sincosf (float __x, float *__sinx, float *__cosx);
+__MATH_INLINE void
+__sincosf (float __x, float *__sinx, float *__cosx)
+{
+  __sincos_code;
+}
+
+__MATH_INLINE void __sincosl (long double __x, long double *__sinx,
+                             long double *__cosx);
+__MATH_INLINE void
+__sincosl (long double __x, long double *__sinx, long double *__cosx)
+{
+  __sincos_code;
+}
+
+
 /* Optimized inline implementation, sometimes with reduced precision
    and/or argument range.  */
 
@@ -278,10 +356,10 @@ __inline_mathop (sqrt, "fsqrt")
 __inline_mathop_ (long double, __sqrtl, "fsqrt")
 
 #if defined __GNUC__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 8)
-__inline_mathcode_ (fabs, __x, return __builtin_fabs (__x))
-__inline_mathcode_ (fabsf, __x, return __builtin_fabsf (__x))
-__inline_mathcode_ (fabsl, __x, return __builtin_fabsl (__x))
-__inline_mathcode_ (__fabsl, __x, return __builtin_fabsl (__x))
+__inline_mathcode_ (double, fabs, __x, return __builtin_fabs (__x))
+__inline_mathcode_ (float, fabsf, __x, return __builtin_fabsf (__x))
+__inline_mathcode_ (long double, fabsl, __x, return __builtin_fabsl (__x))
+__inline_mathcode_ (long double, __fabsl, __x, return __builtin_fabsl (__x))
 #else
 __inline_mathop (fabs, "fabs")
 __inline_mathop_ (long double, __fabsl, "fabs")
@@ -356,7 +434,7 @@ ldexp (double __x, int __y)
 /* Optimized versions for some non-standardized functions.  */
 #if defined __USE_ISOC9X || defined __USE_MISC
 
-__inline_mathop_decl (log2, "fyl2x", "u" (1.0), "0" (__x) : "st(1)")
+__inline_mathop(log2, "fld1; fxch; fyl2x")
 
 __inline_mathcode (expm1, __x, __expm1_code)
 
@@ -443,15 +521,12 @@ __finite (double __x)
     ("orl      $0x800fffff, %0\n\t"
      "incl     %0\n\t"
      "shrl     $31, %0"
-     : "=q" (__result) : "0" (((int *) &__x)[1]));
+     : "=q" (__result) : "0" (((int *) &__x)[1]) : "cc");
   return __result;
 }
 
 /* Miscellaneous functions */
 
-__inline_mathcode (__sgn, __x, \
-  return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0))
-
 __inline_mathcode (__coshm1, __x, \
   register long double __exm1 = __expm1l (__fabsl (__x));                    \
   return 0.5 * (__exm1 / (__exm1 + 1.0)) * __exm1)
@@ -459,69 +534,6 @@ __inline_mathcode (__coshm1, __x, \
 __inline_mathcode (__acosh1p, __x, \
   return log1pl (__x + __sqrtl (__x) * __sqrtl (__x + 2.0)))
 
-__inline_mathcode (__pow2, __x, \
-  register long double __value;                                                      \
-  register long double __exponent;                                           \
-  long int __p = (long int) __x;                                             \
-  if (__x == (long double) __p)                                                      \
-    return ldexpl (1.0, __p);                                                \
-  __asm __volatile__                                                         \
-    ("fldl     %%st(0)\n\t"                                                  \
-     "frndint                  # int(x)\n\t"                                 \
-     "fxch\n\t"                                                                      \
-     "fsub     %%st(1)         # fract(x)\n\t"                               \
-     "f2xm1                    # 2^(fract(x)) - 1\n\t"                       \
-     : "=t" (__value), "=u" (__exponent) : "0" (__x));                       \
-  __value += 1.0;                                                            \
-  __asm __volatile__                                                         \
-    ("fscale"                                                                \
-     : "=t" (__value) : "0" (__value), "u" (__exponent));                    \
-  return __value)
-
-#define __sincos_code \
-  register long double __cosr;                                               \
-  register long double __sinr;                                               \
-  __asm __volatile__                                                         \
-    ("fsincos\n\t"                                                           \
-     "fnstsw   %%ax\n\t"                                                     \
-     "testl    $0x400, %%eax\n\t"                                            \
-     "jz       1f\n\t"                                                       \
-     "fldpi\n\t"                                                             \
-     "fadd     %%st(0)\n\t"                                                  \
-     "fxch     %%st(1)\n\t"                                                  \
-     "2: fprem1\n\t"                                                         \
-     "fnstsw   %%ax\n\t"                                                     \
-     "testl    $0x400, %%eax\n\t"                                            \
-     "jnz      2b\n\t"                                                       \
-     "fstp     %%st(1)\n\t"                                                  \
-     "fsincos\n\t"                                                           \
-     "1:"                                                                    \
-     : "=t" (__cosr), "=u" (__sinr) : "0" (__x));                            \
-  *__sinx = __sinr;                                                          \
-  *__cosx = __cosr
-
-__MATH_INLINE void __sincos (double __x, double *__sinx, double *__cosx);
-__MATH_INLINE void
-__sincos (double __x, double *__sinx, double *__cosx)
-{
-  __sincos_code;
-}
-
-__MATH_INLINE void __sincosf (float __x, float *__sinx, float *__cosx);
-__MATH_INLINE void
-__sincosf (float __x, float *__sinx, float *__cosx)
-{
-  __sincos_code;
-}
-
-__MATH_INLINE void __sincosl (long double __x, long double *__sinx,
-                             long double *__cosx);
-__MATH_INLINE void
-__sincosl (long double __x, long double *__sinx, long double *__cosx)
-{
-  __sincos_code;
-}
-
 #endif /* __USE_MISC  */
 
 /* Undefine some of the large macros which are not used anymore.  */
@@ -530,6 +542,7 @@ __sincosl (long double __x, long double *__sinx, long double *__cosx)
 #undef __atan2_code
 #undef __sincos_code
 
+#endif /* Not gcc <= 2.7.  */
 #endif /* __NO_MATH_INLINES  */
 #endif /* __GNUC__  */
 
index 0af8c71..d468449 100644 (file)
@@ -34,7 +34,7 @@ feraiseexcept (int excepts)
     {
       /* One example of a invalid operation is 0.0 / 0.0.  */
       double d;
-      __asm__ ("fldz; fdiv %%st, %%st(0); fwait" : "=t" (d));
+      __asm__ __volatile__ ("fldz; fdiv %%st, %%st(0); fwait" : "=t" (d));
       (void) &d;
     }
 
@@ -42,7 +42,8 @@ feraiseexcept (int excepts)
   if ((FE_DIVBYZERO & excepts) != 0)
     {
       double d;
-      __asm__ ("fldz; fld1; fdivp %%st, %%st(1); fwait" : "=t" (d));
+      __asm__ __volatile__ ("fldz; fld1; fdivp %%st, %%st(1); fwait"
+                           : "=t" (d));
       (void) &d;
     }
 
@@ -55,16 +56,16 @@ feraiseexcept (int excepts)
 
       /* Bah, we have to clear selected exceptions.  Since there is no
         `fldsw' instruction we have to do it the hard way.  */
-      __asm__ ("fnstenv %0" : "=m" (*&temp));
+      __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
 
       /* Set the relevant bits.  */
       temp.status_word |= FE_OVERFLOW;
 
       /* Put the new data in effect.  */
-      __asm__ ("fldenv %0" : : "m" (*&temp));
+      __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
 
       /* And raise the exception.  */
-       __asm__ ("fwait");
+      __asm__ __volatile__ ("fwait");
     }
 
   /* Next: underflow.  */
@@ -76,16 +77,16 @@ feraiseexcept (int excepts)
 
       /* Bah, we have to clear selected exceptions.  Since there is no
         `fldsw' instruction we have to do it the hard way.  */
-      __asm__ ("fnstenv %0" : "=m" (*&temp));
+      __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
 
       /* Set the relevant bits.  */
       temp.status_word |= FE_UNDERFLOW;
 
       /* Put the new data in effect.  */
-      __asm__ ("fldenv %0" : : "m" (*&temp));
+      __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
 
       /* And raise the exception.  */
-       __asm__ ("fwait");
+      __asm__ __volatile__ ("fwait");
     }
 
   /* Last: inexact.  */
@@ -97,15 +98,15 @@ feraiseexcept (int excepts)
 
       /* Bah, we have to clear selected exceptions.  Since there is no
         `fldsw' instruction we have to do it the hard way.  */
-      __asm__ ("fnstenv %0" : "=m" (*&temp));
+      __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
 
       /* Set the relevant bits.  */
       temp.status_word |= FE_INEXACT;
 
       /* Put the new data in effect.  */
-      __asm__ ("fldenv %0" : : "m" (*&temp));
+      __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
 
       /* And raise the exception.  */
-       __asm__ ("fwait");
+      __asm__ __volatile__ ("fwait");
     }
 }
index 74436d1..917e4f7 100644 (file)
@@ -346,7 +346,7 @@ static ElfW(Addr) _dl_preferred_address = 1
 
 /* We require the address of the PLT entry returned from fixup, not
    the first word of the PLT entry. */
-#define ELF_FIXUP_RETURNS_ADDRESS 1
+#define ELF_FIXUP_RETURN_VALUE(map, result)  (&(result))
 
 /* Nonzero iff TYPE should not be allowed to resolve to one of
    the main executable's symbols, as for a COPY reloc.  */
diff --git a/sysdeps/sparc/configure b/sysdeps/sparc/configure
deleted file mode 100755 (executable)
index a8f815a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
- # Local configure fragment for sysdeps/sparc.
-
-# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS_SO=-fPIC
diff --git a/sysdeps/sparc/configure.in b/sysdeps/sparc/configure.in
deleted file mode 100644 (file)
index e71a7e3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-sinclude(./aclocal.m4)dnl Autoconf lossage
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/sparc.
-
-# The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS_SO=-fPIC
index 0bc9c94..505d724 100644 (file)
@@ -62,3 +62,7 @@ typedef double double_t;
 #define INFINITY       HUGE_VAL
 
 #endif
+
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+#define FP_ILOGB0       0x80000001
+#define FP_ILOGBNAN     0x7fffffff
index 308c9b2..28db8b3 100644 (file)
 #include <fenv.h>
 #include <math.h>
 
-static void
-ignore_me(double foo)
-{
-}
-
 void
 feraiseexcept (int excepts)
 {
+  static volatile double sink;
+  static const struct {
+    double zero, one, max, min, sixteen, pi;
+  } c = {
+    0.0, 1.0, DBL_MAX, DBL_MIN, 16.0, M_PI
+  };
+
   /* Raise exceptions represented by EXPECTS.  But we must raise only
      one signal at a time.  It is important the if the overflow/underflow
      exception and the inexact exception are given at the same time,
@@ -37,30 +39,30 @@ feraiseexcept (int excepts)
   if ((FE_INVALID & excepts) != 0)
     {
       /* One example of a invalid operation is 0/0.  */
-      ignore_me (0.0 / 0.0);
+      sink = c.zero / c.zero;
     }
 
   /* Next: division by zero.  */
   if ((FE_DIVBYZERO & excepts) != 0)
     {
-      ignore_me (1.0 / 0.0);
+      sink = c.one / c.zero;
     }
 
   /* Next: overflow.  */
   if ((FE_OVERFLOW & excepts) != 0)
     {
-      ignore_me (LDBL_MAX * LDBL_MAX);
+      sink = c.max * c.max;
     }
 
   /* Next: underflow.  */
   if ((FE_UNDERFLOW & excepts) != 0)
     {
-      ignore_me (LDBL_MIN / 16.0);
+      sink = c.min / c.sixteen;
     }
 
   /* Last: inexact.  */
   if ((FE_INEXACT & excepts) != 0)
     {
-      ignore_me (1.0 / M_PI);
+      sink = c.one / c.pi;
     }
 }
index deec2f8..c7c867e 100644 (file)
@@ -37,7 +37,7 @@ divrem := sdiv udiv rem urem
 +divrem-S-rem := true
 +divrem-S-udiv := false
 +divrem-S-urem := false
-$(divrem:%=$(sysdep_dir)/sparc/%.S): $(sysdep_dir)/sparc/divrem.m4
+$(divrem:%=$(sysdep_dir)/sparc/sparc32/%.S): $(sysdep_dir)/sparc/sparc32/divrem.m4
        (echo "define(NAME,\`.$(+divrem-NAME)')\
               define(OP,\`$(+divrem-OP-$(+divrem-NAME))')\
               define(S,\`$(+divrem-S-$(+divrem-NAME))')\
@@ -48,4 +48,4 @@ $(divrem:%=$(sysdep_dir)/sparc/%.S): $(sysdep_dir)/sparc/divrem.m4
        mv -f $@-tmp $@
        test ! -d CVS || cvs commit -m'Regenerated from $<' $@
 
-sysdep-realclean := $(sysdep-realclean) $(divrem:%=sysdeps/sparc/%.S)
+sysdep-realclean := $(sysdep-realclean) $(divrem:%=sysdeps/sparc/sparc32/%.S)
index 36e1c17..651ede4 100644 (file)
 #include <bits/setjmp.h>
 #define ENV(reg) [%g1 + (reg * 4)]
 
-ENTRY (__longjmp)
+ENTRY(__longjmp)
        /* Store our arguments in global registers so we can still
           use them while unwinding frames and their register windows.  */
        mov %o0, %g1            /* ENV in %g1 */
-       orcc %o1, %g0, %g6      /* VAL in %g6 */
+       orcc %o1, %g0, %g2      /* VAL in %g2 */
        be,a 0f                 /* Branch if zero; else skip delay slot.  */
-        mov 1, %g6             /* Delay slot only hit if zero: VAL = 1.  */
+        mov 1, %g2             /* Delay slot only hit if zero: VAL = 1.  */
 0:
-
-       /* Cache target FP in register %g7.  */
-       ld ENV (JB_FP), %g7
+       /* Cache target FP in register %g3.  */
+       ld ENV(JB_FP), %g3
 
        /* Now we will loop, unwinding the register windows up the stack
-          until the restored %fp value matches the target value in %g7.  */
+          until the restored %fp value matches the target value in %g3.  */
 
-loop:  cmp %fp, %g7            /* Have we reached the target frame? */
-       bl,a loop               /* Loop while current fp is below target.  */
+LOC(loop):
+       cmp %fp, %g3            /* Have we reached the target frame? */
+       bl,a LOC(loop)          /* Loop while current fp is below target.  */
         restore                /* Unwind register window in delay slot.  */
-       be,a found              /* Better have hit it exactly.  */
-        ld ENV (JB_SP), %o0    /* Delay slot: extract target SP.  */
+       be,a LOC(found)         /* Better have hit it exactly.  */
+        ld ENV(JB_SP), %o0     /* Delay slot: extract target SP.  */
 
-bogus: /* Get here only if the jmp_buf or stack is clobbered.  */
-       call C_SYMBOL_NAME (abort)
-       nop
+LOC(bogus):
+       /* Get here only if the jmp_buf or stack is clobbered.  */
+       call C_SYMBOL_NAME(abort)
+        nop
        unimp 0
 
-found: /* We have unwound register windows so %fp matches the target.  */
+LOC(found):
+       /* We have unwound register windows so %fp matches the target.  */
        cmp %o0, %sp            /* Check jmp_buf SP vs register window.  */
-       bge,a sp_ok             /* Saved must not be deeper than register.  */
+       bge,a LOC(sp_ok)        /* Saved must not be deeper than register.  */
         mov %o0, %sp           /* OK, install new SP.  */
-       b,a bogus               /* Bogus, we lose.  */
+       b,a LOC(bogus)          /* Bogus, we lose.  */
 
-sp_ok: ld ENV (JB_PC), %o0     /* Extract target return PC.  */
+LOC(sp_ok):
+       ld ENV(JB_PC), %o0      /* Extract target return PC.  */
        jmp %o0 + 8             /* Return there.  */
-        mov %g6, %o0           /* Delay slot: set return value.  */
+        mov %g2, %o0           /* Delay slot: set return value.  */
+
+END(__longjmp)
index 9852c25..5a6fccb 100644 (file)
@@ -1,20 +1,20 @@
 ! SPARC __mpn_add_n -- Add two limb vectors of the same length > 0 and store
 ! sum in a third limb vector.
-
-! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
+!
+! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-#define res_ptr        %o0
-#define s1_ptr %o1
-#define s2_ptr %o2
-#define size   %o3
+#define RES_PTR        %o0
+#define S1_PTR %o1
+#define S2_PTR %o2
+#define SIZE   %o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-       .text
-       .align  4
-       .global C_SYMBOL_NAME(__mpn_add_n)
-C_SYMBOL_NAME(__mpn_add_n):
-       xor     s2_ptr,res_ptr,%g1
+ENTRY(__mpn_add_n)
+       xor     S2_PTR,RES_PTR,%g1
        andcc   %g1,4,%g0
-       bne     L1                      ! branch if alignment differs
-       nop
+       bne     LOC(1)                  ! branch if alignment differs
+        nop
 ! **  V1a  **
-L0:    andcc   res_ptr,4,%g0           ! res_ptr unaligned? Side effect: cy=0
-       be      L_v1                    ! if no, branch
-       nop
-/* Add least significant limb separately to align res_ptr and s2_ptr */
-       ld      [s1_ptr],%g4
-       add     s1_ptr,4,s1_ptr
-       ld      [s2_ptr],%g2
-       add     s2_ptr,4,s2_ptr
-       add     size,-1,size
+LOC(0):        andcc   RES_PTR,4,%g0           ! RES_PTR unaligned? Side effect: cy=0
+       be      LOC(v1)                 ! if no, branch
+        nop
+/* Add least significant limb separately to align RES_PTR and S2_PTR */
+       ld      [S1_PTR],%g4
+       add     S1_PTR,4,S1_PTR
+       ld      [S2_PTR],%g2
+       add     S2_PTR,4,S2_PTR
+       add     SIZE,-1,SIZE
        addcc   %g4,%g2,%o4
-       st      %o4,[res_ptr]
-       add     res_ptr,4,res_ptr
-L_v1:  addx    %g0,%g0,%o4             ! save cy in register
-       cmp     size,2                  ! if size < 2 ...
-       bl      Lend2                   ! ... branch to tail code
+       st      %o4,[RES_PTR]
+       add     RES_PTR,4,RES_PTR
+LOC(v1):
+       addx    %g0,%g0,%o4             ! save cy in register
+       cmp     SIZE,2                  ! if SIZE < 2 ...
+       bl      LOC(end2)               ! ... branch to tail code
        subcc   %g0,%o4,%g0             ! restore cy
 
-       ld      [s1_ptr+0],%g4
-       addcc   size,-10,size
-       ld      [s1_ptr+4],%g1
-       ldd     [s2_ptr+0],%g2
-       blt     Lfin1
+       ld      [S1_PTR+0],%g4
+       addcc   SIZE,-10,SIZE
+       ld      [S1_PTR+4],%g1
+       ldd     [S2_PTR+0],%g2
+       blt     LOC(fin1)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop1: addxcc  %g4,%g2,%o4
-       ld      [s1_ptr+8],%g4
+LOC(loop1):
+       addxcc  %g4,%g2,%o4
+       ld      [S1_PTR+8],%g4
        addxcc  %g1,%g3,%o5
-       ld      [s1_ptr+12],%g1
-       ldd     [s2_ptr+8],%g2
-       std     %o4,[res_ptr+0]
+       ld      [S1_PTR+12],%g1
+       ldd     [S2_PTR+8],%g2
+       std     %o4,[RES_PTR+0]
        addxcc  %g4,%g2,%o4
-       ld      [s1_ptr+16],%g4
+       ld      [S1_PTR+16],%g4
        addxcc  %g1,%g3,%o5
-       ld      [s1_ptr+20],%g1
-       ldd     [s2_ptr+16],%g2
-       std     %o4,[res_ptr+8]
+       ld      [S1_PTR+20],%g1
+       ldd     [S2_PTR+16],%g2
+       std     %o4,[RES_PTR+8]
        addxcc  %g4,%g2,%o4
-       ld      [s1_ptr+24],%g4
+       ld      [S1_PTR+24],%g4
        addxcc  %g1,%g3,%o5
-       ld      [s1_ptr+28],%g1
-       ldd     [s2_ptr+24],%g2
-       std     %o4,[res_ptr+16]
+       ld      [S1_PTR+28],%g1
+       ldd     [S2_PTR+24],%g2
+       std     %o4,[RES_PTR+16]
        addxcc  %g4,%g2,%o4
-       ld      [s1_ptr+32],%g4
+       ld      [S1_PTR+32],%g4
        addxcc  %g1,%g3,%o5
-       ld      [s1_ptr+36],%g1
-       ldd     [s2_ptr+32],%g2
-       std     %o4,[res_ptr+24]
+       ld      [S1_PTR+36],%g1
+       ldd     [S2_PTR+32],%g2
+       std     %o4,[RES_PTR+24]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       add     s1_ptr,32,s1_ptr
-       add     s2_ptr,32,s2_ptr
-       add     res_ptr,32,res_ptr
-       bge     Loop1
+       addcc   SIZE,-8,SIZE
+       add     S1_PTR,32,S1_PTR
+       add     S2_PTR,32,S2_PTR
+       add     RES_PTR,32,RES_PTR
+       bge     LOC(loop1)
        subcc   %g0,%o4,%g0             ! restore cy
 
-Lfin1: addcc   size,8-2,size
-       blt     Lend1
+LOC(fin1):
+       addcc   SIZE,8-2,SIZE
+       blt     LOC(end1)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 2 limbs until less than 2 limbs remain */
-Loope1:        addxcc  %g4,%g2,%o4
-       ld      [s1_ptr+8],%g4
+LOC(loope1):
+       addxcc  %g4,%g2,%o4
+       ld      [S1_PTR+8],%g4
        addxcc  %g1,%g3,%o5
-       ld      [s1_ptr+12],%g1
-       ldd     [s2_ptr+8],%g2
-       std     %o4,[res_ptr+0]
+       ld      [S1_PTR+12],%g1
+       ldd     [S2_PTR+8],%g2
+       std     %o4,[RES_PTR+0]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-2,size
-       add     s1_ptr,8,s1_ptr
-       add     s2_ptr,8,s2_ptr
-       add     res_ptr,8,res_ptr
-       bge     Loope1
+       addcc   SIZE,-2,SIZE
+       add     S1_PTR,8,S1_PTR
+       add     S2_PTR,8,S2_PTR
+       add     RES_PTR,8,RES_PTR
+       bge     LOC(loope1)
        subcc   %g0,%o4,%g0             ! restore cy
-Lend1: addxcc  %g4,%g2,%o4
+LOC(end1):
+       addxcc  %g4,%g2,%o4
        addxcc  %g1,%g3,%o5
-       std     %o4,[res_ptr+0]
+       std     %o4,[RES_PTR+0]
        addx    %g0,%g0,%o4             ! save cy in register
 
-       andcc   size,1,%g0
-       be      Lret1
+       andcc   SIZE,1,%g0
+       be      LOC(ret1)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add last limb */
-       ld      [s1_ptr+8],%g4
-       ld      [s2_ptr+8],%g2
+       ld      [S1_PTR+8],%g4
+       ld      [S2_PTR+8],%g2
        addxcc  %g4,%g2,%o4
-       st      %o4,[res_ptr+8]
+       st      %o4,[RES_PTR+8]
 
-Lret1: retl
+LOC(ret1):
+       retl
        addx    %g0,%g0,%o0     ! return carry-out from most sign. limb
 
-L1:    xor     s1_ptr,res_ptr,%g1
+LOC(1):        xor     S1_PTR,RES_PTR,%g1
        andcc   %g1,4,%g0
-       bne     L2
+       bne     LOC(2)
        nop
 ! **  V1b  **
-       mov     s2_ptr,%g1
-       mov     s1_ptr,s2_ptr
-       b       L0
-       mov     %g1,s1_ptr
+       mov     S2_PTR,%g1
+       mov     S1_PTR,S2_PTR
+       b       LOC(0)
+       mov     %g1,S1_PTR
 
 ! **  V2  **
-/* If we come here, the alignment of s1_ptr and res_ptr as well as the
-   alignment of s2_ptr and res_ptr differ.  Since there are only two ways
+/* If we come here, the alignment of S1_PTR and RES_PTR as well as the
+   alignment of S2_PTR and RES_PTR differ.  Since there are only two ways
    things can be aligned (that we care about) we now know that the alignment
-   of s1_ptr and s2_ptr are the same.  */
+   of S1_PTR and S2_PTR are the same.  */
 
-L2:    cmp     size,1
-       be      Ljone
+LOC(2):        cmp     SIZE,1
+       be      LOC(jone)
        nop
-       andcc   s1_ptr,4,%g0            ! s1_ptr unaligned? Side effect: cy=0
-       be      L_v2                    ! if no, branch
+       andcc   S1_PTR,4,%g0            ! S1_PTR unaligned? Side effect: cy=0
+       be      LOC(v2)                 ! if no, branch
        nop
-/* Add least significant limb separately to align s1_ptr and s2_ptr */
-       ld      [s1_ptr],%g4
-       add     s1_ptr,4,s1_ptr
-       ld      [s2_ptr],%g2
-       add     s2_ptr,4,s2_ptr
-       add     size,-1,size
+/* Add least significant limb separately to align S1_PTR and S2_PTR */
+       ld      [S1_PTR],%g4
+       add     S1_PTR,4,S1_PTR
+       ld      [S2_PTR],%g2
+       add     S2_PTR,4,S2_PTR
+       add     SIZE,-1,SIZE
        addcc   %g4,%g2,%o4
-       st      %o4,[res_ptr]
-       add     res_ptr,4,res_ptr
+       st      %o4,[RES_PTR]
+       add     RES_PTR,4,RES_PTR
 
-L_v2:  addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       blt     Lfin2
+LOC(v2):
+       addx    %g0,%g0,%o4             ! save cy in register
+       addcc   SIZE,-8,SIZE
+       blt     LOC(fin2)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop2: ldd     [s1_ptr+0],%g2
-       ldd     [s2_ptr+0],%o4
+LOC(loop2):
+       ldd     [S1_PTR+0],%g2
+       ldd     [S2_PTR+0],%o4
        addxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+0]
+       st      %g2,[RES_PTR+0]
        addxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+4]
-       ldd     [s1_ptr+8],%g2
-       ldd     [s2_ptr+8],%o4
+       st      %g3,[RES_PTR+4]
+       ldd     [S1_PTR+8],%g2
+       ldd     [S2_PTR+8],%o4
        addxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+8]
+       st      %g2,[RES_PTR+8]
        addxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+12]
-       ldd     [s1_ptr+16],%g2
-       ldd     [s2_ptr+16],%o4
+       st      %g3,[RES_PTR+12]
+       ldd     [S1_PTR+16],%g2
+       ldd     [S2_PTR+16],%o4
        addxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+16]
+       st      %g2,[RES_PTR+16]
        addxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+20]
-       ldd     [s1_ptr+24],%g2
-       ldd     [s2_ptr+24],%o4
+       st      %g3,[RES_PTR+20]
+       ldd     [S1_PTR+24],%g2
+       ldd     [S2_PTR+24],%o4
        addxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+24]
+       st      %g2,[RES_PTR+24]
        addxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+28]
+       st      %g3,[RES_PTR+28]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       add     s1_ptr,32,s1_ptr
-       add     s2_ptr,32,s2_ptr
-       add     res_ptr,32,res_ptr
-       bge     Loop2
+       addcc   SIZE,-8,SIZE
+       add     S1_PTR,32,S1_PTR
+       add     S2_PTR,32,S2_PTR
+       add     RES_PTR,32,RES_PTR
+       bge     LOC(loop2)
        subcc   %g0,%o4,%g0             ! restore cy
 
-Lfin2: addcc   size,8-2,size
-       blt     Lend2
+LOC(fin2):
+       addcc   SIZE,8-2,SIZE
+       blt     LOC(end2)
        subcc   %g0,%o4,%g0             ! restore cy
-Loope2:        ldd     [s1_ptr+0],%g2
-       ldd     [s2_ptr+0],%o4
+LOC(loope2):
+       ldd     [S1_PTR+0],%g2
+       ldd     [S2_PTR+0],%o4
        addxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+0]
+       st      %g2,[RES_PTR+0]
        addxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+4]
+       st      %g3,[RES_PTR+4]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-2,size
-       add     s1_ptr,8,s1_ptr
-       add     s2_ptr,8,s2_ptr
-       add     res_ptr,8,res_ptr
-       bge     Loope2
+       addcc   SIZE,-2,SIZE
+       add     S1_PTR,8,S1_PTR
+       add     S2_PTR,8,S2_PTR
+       add     RES_PTR,8,RES_PTR
+       bge     LOC(loope2)
        subcc   %g0,%o4,%g0             ! restore cy
-Lend2: andcc   size,1,%g0
-       be      Lret2
+LOC(end2):
+       andcc   SIZE,1,%g0
+       be      LOC(ret2)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add last limb */
-Ljone: ld      [s1_ptr],%g4
-       ld      [s2_ptr],%g2
+LOC(jone):
+       ld      [S1_PTR],%g4
+       ld      [S2_PTR],%g2
        addxcc  %g4,%g2,%o4
-       st      %o4,[res_ptr]
+       st      %o4,[RES_PTR]
 
-Lret2: retl
+LOC(ret2):
+       retl
        addx    %g0,%g0,%o0     ! return carry-out from most sign. limb
+
+END(__mpn_add_n)
index 375d25d..5e0c381 100644 (file)
@@ -1,20 +1,20 @@
 ! SPARC __mpn_addmul_1 -- Multiply a limb vector with a limb and add
 ! the result to a second limb vector.
-
-! Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
-
+!
+! Copyright (C) 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-! res_ptr      o0
-! s1_ptr       o1
-! size         o2
-! s2_limb      o3
+! RES_PTR      o0
+! S1_PTR       o1
+! SIZE         o2
+! S2_LIMB      o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-.text
-       .align 4
-       .global C_SYMBOL_NAME(__mpn_addmul_1)
-C_SYMBOL_NAME(__mpn_addmul_1):
+ENTRY(__mpn_addmul_1)
        ! Make S1_PTR and RES_PTR point at the end of their blocks
        ! and put (- 4 x SIZE) in index/loop counter.
        sll     %o2,2,%o2
@@ -41,19 +38,19 @@ C_SYMBOL_NAME(__mpn_addmul_1):
        sub     %g0,%o2,%o2
 
        cmp     %o3,0xfff
-       bgu     Large
+       bgu     LOC(large)
        nop
 
        ld      [%o1+%o2],%o5
        mov     0,%o0
-       b       L0
+       b       LOC(0)
         add    %o4,-4,%o4
-Loop0:
+LOC(loop0):
        addcc   %o5,%g1,%g1
        ld      [%o1+%o2],%o5
        addx    %o0,%g0,%o0
        st      %g1,[%o4+%o2]
-L0:    wr      %g0,%o3,%y
+LOC(0):        wr      %g0,%o3,%y
        sra     %o5,31,%g2
        and     %o3,%g2,%g2
        andcc   %g1,0,%g1
@@ -79,7 +76,7 @@ L0:   wr      %g0,%o3,%y
        addcc   %g1,%o0,%g1
        addx    %g2,%g4,%o0     ! add sign-compensation and cy to hi limb
        addcc   %o2,4,%o2       ! loop counter
-       bne     Loop0
+       bne     LOC(loop0)
         ld     [%o4+%o2],%o5
 
        addcc   %o5,%g1,%g1
@@ -88,17 +85,18 @@ L0: wr      %g0,%o3,%y
        st      %g1,[%o4+%o2]
 
 
-Large: ld      [%o1+%o2],%o5
+LOC(large):
+       ld      [%o1+%o2],%o5
        mov     0,%o0
        sra     %o3,31,%g4      ! g4 = mask of ones iff S2_LIMB < 0
-       b       L1
+       b       LOC(1)
         add    %o4,-4,%o4
-Loop:
+LOC(loop):
        addcc   %o5,%g3,%g3
        ld      [%o1+%o2],%o5
        addx    %o0,%g0,%o0
        st      %g3,[%o4+%o2]
-L1:    wr      %g0,%o5,%y
+LOC(1):        wr      %g0,%o5,%y
        and     %o5,%g4,%g2
        andcc   %g0,%g0,%g1
        mulscc  %g1,%o3,%g1
@@ -138,10 +136,12 @@ L1:       wr      %g0,%o5,%y
        addcc   %g3,%o0,%g3
        addx    %g2,%g1,%o0
        addcc   %o2,4,%o2
-       bne     Loop
+       bne     LOC(loop)
         ld     [%o4+%o2],%o5
 
        addcc   %o5,%g3,%g3
        addx    %o0,%g0,%o0
        retl
        st      %g3,[%o4+%o2]
+
+END(__mpn_addmul_1)
index dcbd171..1eb755a 100644 (file)
@@ -16,7 +16,7 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include "sysdep.h"
+#include <sysdep.h>
 
 /* Code produced by Sun's C compiler calls this function with two extra
    arguments which it makes relocatable symbols but seem always to be
@@ -30,3 +30,4 @@ ENTRY (__builtin_alloca)
        sub %sp, %o0, %sp       /* Push some stack space.  */
        retl                    /* Return; the returned buffer leaves 96 */
        add %sp, 96, %o0        /* bytes of register save area at the top. */
+END (__builtin_alloca)
index bf49765..4e6a2da 100644 (file)
@@ -1,40 +1 @@
-/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.  Sparc version.
-   Copyright (C) 1994, 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <sysdep.h>
-
-ENTRY (_setjmp)
-
-#ifdef PIC
-       save    %sp, -64, %sp
-1:     call    2f
-       sethi   %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
-2:     or      %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
-       add     %g1, %o7, %g1
-       sethi   %hi(C_SYMBOL_NAME(__sigsetjmp)), %g2
-       restore
-       or      %g2, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g2
-       ld      [%g1+%g2], %g1
-#else
-       sethi   %hi(C_SYMBOL_NAME(__sigsetjmp)), %g1
-       or      %g1, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g1
-#endif
-
-       jmp %g1
-        mov %g0, %o1           /* Pass second argument of zero.  */
+/* _setjmp is in setjmp.S  */
index 16dc260..1da848d 100644 (file)
@@ -1,40 +1 @@
-/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  Sparc version.
-   Copyright (C) 1994, 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <sysdep.h>
-
-ENTRY (setjmp)
-
-#ifdef PIC
-       save    %sp, -64, %sp
-1:     call    2f
-       sethi   %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
-2:     or      %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %g1
-       add     %g1, %o7, %g1
-       sethi   %hi(C_SYMBOL_NAME(__sigsetjmp)), %g2
-       restore
-       or      %g2, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g2
-       ld      [%g1+%g2], %g1
-#else
-       sethi   %hi(C_SYMBOL_NAME(__sigsetjmp)), %g1
-       or      %g1, %lo(C_SYMBOL_NAME(__sigsetjmp)), %g1
-#endif
-
-       jmp %g1
-        mov 1, %o1             /* Pass second argument of one.  */
+/* setjmp is in setjmp.S  */
index 665abf1..30d532a 100644 (file)
@@ -47,8 +47,8 @@ define(V, `%o5')dnl
 dnl
 dnl m4 reminder: ifelse(a,b,c,d) => if a is b, then c, else d
 define(T, `%g1')dnl
-define(SC, `%g7')dnl
-ifelse(S, `true', `define(SIGN, `%g6')')dnl
+define(SC, `%g2')dnl
+ifelse(S, `true', `define(SIGN, `%g3')')dnl
 
 dnl
 dnl This is the recursive definition for developing quotient digits.
@@ -65,7 +65,7 @@ dnl modified to reflect the output R.
 dnl
 define(DEVELOP_QUOTIENT_BITS,
 `      ! depth $1, accumulated bits $2
-       bl      L.$1.eval(2**N+$2)
+       bl      LOC($1.eval(2**N+$2))
        srl     V,1,V
        ! remainder is positive
        subcc   R,V,R
@@ -73,7 +73,7 @@ define(DEVELOP_QUOTIENT_BITS,
        `       b       9f
                add     Q, ($2*2+1), Q
        ', `    DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2+1)')')
-L.$1.eval(2**N+$2):
+LOC($1.eval(2**N+$2)):
        ! remainder is negative
        addcc   R,V,R
        ifelse($1, N,
@@ -82,18 +82,10 @@ L.$1.eval(2**N+$2):
        ', `    DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2-1)')')
        ifelse($1, 1, `9:')')dnl
 
-#include "sysdep.h"
-#ifdef __linux__
-#include <asm/traps.h>
-#else
-#ifdef __svr4__
+#include <sysdep.h>
 #include <sys/trap.h>
-#else
-#include <machine/trap.h>
-#endif
-#endif
 
-FUNC(NAME)
+ENTRY(NAME)
 ifelse(S, `true',
 `      ! compute sign of result; if neither is negative, no problem
        orcc    divisor, dividend, %g0  ! either negative?
@@ -124,11 +116,11 @@ ifelse(OP, `div',
 
 1:
        cmp     R, V                    ! if divisor exceeds dividend, done
-       blu     Lgot_result             ! (and algorithm fails otherwise)
+       blu     LOC(got_result)         ! (and algorithm fails otherwise)
        clr     Q
        sethi   %hi(1 << (WORDSIZE - TOPBITS - 1)), T
        cmp     R, T
-       blu     Lnot_really_big
+       blu     LOC(not_really_big)
        clr     ITER
 
        ! `Here the dividend is >= 2**(31-N) or so.  We must be careful here,
@@ -146,7 +138,7 @@ ifelse(OP, `div',
 
        ! Now compute SC.
        2:      addcc   V, V, V
-               bcc     Lnot_too_big
+               bcc     LOC(not_too_big)
                add     SC, 1, SC
 
                ! We get here if the divisor overflowed while shifting.
@@ -155,14 +147,14 @@ ifelse(OP, `div',
                sll     T, TOPBITS, T   ! high order bit
                srl     V, 1, V         ! rest of V
                add     V, T, V
-               b       Ldo_single_div
+               b       LOC(do_single_div)
                sub     SC, 1, SC
 
-       Lnot_too_big:
+       LOC(not_too_big):
        3:      cmp     V, R
                blu     2b
                nop
-               be      Ldo_single_div
+               be      LOC(do_single_div)
                nop
        /* NB: these are commented out in the V8-Sparc manual as well */
        /* (I do not understand this) */
@@ -177,15 +169,15 @@ ifelse(OP, `div',
        ! order bit set in the first step, just falling into the regular
        ! division loop will mess up the first time around.
        ! So we unroll slightly...
-       Ldo_single_div:
+       LOC(do_single_div):
                subcc   SC, 1, SC
-               bl      Lend_regular_divide
+               bl      LOC(end_regular_divide)
                nop
                sub     R, V, R
                mov     1, Q
-               b       Lend_single_divloop
+               b       LOC(end_single_divloop)
                nop
-       Lsingle_divloop:
+       LOC(single_divloop):
                sll     Q, 1, Q
                bl      1f
                srl     V, 1, V
@@ -197,37 +189,37 @@ ifelse(OP, `div',
                add     R, V, R
                sub     Q, 1, Q
        2:
-       Lend_single_divloop:
+       LOC(end_single_divloop):
                subcc   SC, 1, SC
-               bge     Lsingle_divloop
+               bge     LOC(single_divloop)
                tst     R
-               b,a     Lend_regular_divide
+               b,a     LOC(end_regular_divide)
 
-Lnot_really_big:
+LOC(not_really_big):
 1:
        sll     V, N, V
        cmp     V, R
        bleu    1b
        addcc   ITER, 1, ITER
-       be      Lgot_result
+       be      LOC(got_result)
        sub     ITER, 1, ITER
 
        tst     R       ! set up for initial iteration
-Ldivloop:
+LOC(divloop):
        sll     Q, N, Q
        DEVELOP_QUOTIENT_BITS(1, 0)
-Lend_regular_divide:
+LOC(end_regular_divide):
        subcc   ITER, 1, ITER
-       bge     Ldivloop
+       bge     LOC(divloop)
        tst     R
-       bl,a    Lgot_result
+       bl,a    LOC(got_result)
        ! non-restoring fixup here (one instruction only!)
 ifelse(OP, `div',
 `      sub     Q, 1, Q
 ', `   add     R, divisor, R
 ')
 
-Lgot_result:
+LOC(got_result):
 ifelse(S, `true',
 `      ! check to see if answer should be < 0
        tst     SIGN
@@ -236,3 +228,5 @@ ifelse(S, `true',
 1:')
        retl
        ifelse(OP, `div', `mov Q, %o0', `mov R, %o0')
+
+END(NAME)
index f7bcba0..7c547f2 100644 (file)
@@ -30,7 +30,7 @@
 #define OPCODE_CALL    0x40000000 /* call ?; add PC-rel word address */
 #define OPCODE_SETHI_G1        0x03000000 /* sethi ?, %g1; add value>>10 */
 #define OPCODE_JMP_G1  0x81c06000 /* jmp %g1+?; add lo 10 bits of value */
-#define OPCODE_SAVE_SP64 0x9de3bfc0 /* save %sp, -64, %sp */
+#define OPCODE_SAVE_SP 0x9de3bfa8 /* save %sp, -(16+6)*4, %sp */
 
 
 /* Return nonzero iff E_MACHINE is compatible with the running host.  */
@@ -55,7 +55,7 @@ elf_machine_dynamic (void)
 static inline Elf32_Addr
 elf_machine_load_address (void)
 {
-  register Elf32_Addr pc __asm("%o7"), got;
+  register Elf32_Addr pc __asm("%o7"), pic __asm("%l7"), got;
 
   /* Utilize the fact that a local .got entry will be partially
      initialized at startup awaiting its RELATIVE fixup.  */
@@ -64,50 +64,187 @@ elf_machine_load_address (void)
         ".Load_address:\n\t"
         "call 1f\n\t"
         "or %1,%%lo(.Load_address),%1\n"
-        "1:\tld [%%l7+%1],%1"
-        : "=r"(pc), "=r"(got));
+        "1:\tld [%2+%1],%1"
+        : "=r"(pc), "=r"(got) : "r"(pic));
 
   return pc - got;
 }
 
-  Elf32_Addr addr;
-
-  asm (
-       "add   %%fp,0x44,%%o2\n\t"      /* o2 = point to argc */
-       "ld    [%%o2 - 4],%%o0\n\t"     /* o0 = load argc     */
-       "sll   %%o0, 2, %%o0\n\t"       /* o0 = argc * sizeof (int) */
-       "add   %%o2,%%o0,%%o2\n\t"      /* o2 = skip over argv */
-       "add   %%o2,4,%%o2\n\t"         /* skip over null after argv */
-
-       /* Now %o2 is pointing to env, skip over that as well.  */
-       "1:\n\t"
-       "ld    [%%o2],%%o0\n\t"
-        "cmp   %%o0,0\n\t"
-       "bnz   1b\n\t"
-       "add   %%o2,4,%%o2\n\t"
-
-       /* Note that above, we want to advance the NULL after envp so
-         we always add 4.  */
-
-       /* Now, search for the AT_BASE property.  */
-       "2:\n\t"
-       "ld   [%%o2],%%o0\n\t"
-       "cmp  %%o0,0\n\t"
-       "be,a 3f\n\t"
-       "or   %%g0,%%g0,%0\n\t"
-       "cmp  %%o0,7\n\t"       /* AT_BASE = 7 */
-       "be,a 3f\n\t"
-       "ld   [%%o2+4],%0\n\t"
-       "b    2b\n\t"
-       "add  %%o2,8,%%o2\n\t"
-       /* At this point %0 has the load address for the interpreter */
-       "3:\n\t"
-       : "=r" (addr)
-       : /* no inputs */
-       : "o0", "o2");
-  return addr;
+/* Set up the loaded object described by L so its unrelocated PLT
+   entries will jump to the on-demand fixup code in dl-runtime.c.  */
+
+static inline int
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+  Elf32_Addr *plt;
+  extern void _dl_runtime_resolve (Elf32_Word);
+
+  if (l->l_info[DT_JMPREL] && lazy)
+    {
+      /* The entries for functions in the PLT have not yet been filled in.
+        Their initial contents will arrange when called to set the high 22
+        bits of %g1 with an offset into the .rela.plt section and jump to
+        the beginning of the PLT.  */
+      plt = (Elf32_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);
+
+      /* The beginning of the PLT does:
+
+               save %sp, -64, %sp
+        pltpc: call _dl_runtime_resolve
+               nop
+               .word MAP
+
+         This saves the register window containing the arguments, and the
+        PC value (pltpc) implicitly saved in %o7 by the call points near the
+        location where we store the link_map pointer for this object.  */
+
+      plt[0] = OPCODE_SAVE_SP;
+      /* Construct PC-relative word address.  */
+      plt[1] = OPCODE_CALL | (((Elf32_Addr) &_dl_runtime_resolve -
+                              (Elf32_Addr) &plt[1]) >> 2);
+      plt[2] = OPCODE_NOP;     /* Fill call delay slot.  */
+      plt[3] = (Elf32_Addr) l;
+    }
+
+  return lazy;
 }
 
+/* This code is used in dl-runtime.c to call the `fixup' function
+   and then redirect to the address it returns.  */
+#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+       .globl _dl_runtime_resolve
+       .type _dl_runtime_resolve, @function
+_dl_runtime_resolve:
+       /* Set up the arguments to fixup --
+          %o0 = link_map out of plt0
+          %o1 = offset of reloc entry  */
+       ld      [%o7 + 8], %o0
+       srl     %g1, 10, %o1
+       call    fixup
+        sub    %o1, 4*12, %o1
+       jmp     %o0
+        restore
+       .size _dl_runtime_resolve, . - _dl_runtime_resolve");
+
+/* The address of the JMP_SLOT reloc is the .plt entry, thus we don't
+   dereference the reloc's addr to get the final destination.  Ideally
+   there would be a generic way to return the value of the symbol from
+   elf_machine_relplt, but as it is, the address of the .plt entry is
+   good enough.  */
+#define ELF_FIXUP_RETURN_VALUE(map, result)  ((Elf32_Addr) &(result))
+
+/* Nonzero iff TYPE should not be allowed to resolve to one of
+   the main executable's symbols, as for a COPY reloc.  */
+#define elf_machine_lookup_noexec_p(type) ((type) == R_SPARC_COPY)
+
+/* Nonzero iff TYPE describes relocation of a PLT entry, so
+   PLT entries should not be allowed to define the value.  */
+#define elf_machine_lookup_noplt_p(type) ((type) == R_SPARC_JMP_SLOT)
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_RELOC_NOPLT        R_SPARC_JMP_SLOT
+
+/* The SPARC never uses Elf32_Rel relocations.  */
+#define ELF_MACHINE_NO_REL 1
+
+/* The SPARC overlaps DT_RELA and DT_PLTREL.  */
+#define ELF_MACHINE_PLTREL_OVERLAP 1
+
+/* The PLT uses Elf32_Rela relocs.  */
+#define elf_machine_relplt elf_machine_rela
+
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point.  */
+
+#define RTLD_START __asm__ ("\
+.text
+       .globl _start
+       .type _start,@function
+_start:
+  /* Allocate space for functions to drop their arguments.  */
+       sub     %sp, 6*4, %sp
+  /* Pass pointer to argument block to _dl_start.  */
+       call    _dl_start
+        add    %sp, 22*4, %o0
+       /* FALTHRU */
+       .globl _dl_start_user
+       .type _dl_start_user,@function
+_dl_start_user:
+  /* Load the PIC register.  */
+1:     call    2f
+        sethi  %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+2:     or      %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+       add     %l7, %o7, %l7
+  /* Save the user entry point address in %l0 */
+       mov     %o0, %l0
+  /* See if we were run as a command with the executable file name as an
+     extra leading argument.  If so, adjust the contents of the stack.  */
+       sethi   %hi(_dl_skip_args), %g2
+       or      %g2, %lo(_dl_skip_args), %g2
+       ld      [%l7+%g2], %i0
+       ld      [%i0], %i0
+       tst     %i0
+       beq     3f
+        nop
+       /* Find out how far to shift.  */
+       ld      [%sp+22*4], %i1         /* load argc */
+       sub     %i1, %i0, %i1
+       sll     %i0, 2, %i2
+       st      %i1, [%sp+22*4]
+       add     %sp, 23*4, %i1
+       add     %i1, %i2, %i2
+       /* Copy down argv */
+21:    ld      [%i2], %i3
+       add     %i2, 4, %i2
+       tst     %i3
+       st      %i3, [%i1]
+       bne     21b
+        add    %i1, 4, %i1
+       /* Copy down env */
+22:    ld      [%i2], %i3
+       add     %i2, 4, %i2
+       tst     %i3
+       st      %i3, [%i1]
+       bne     22b
+        add    %i1, 4, %i1
+       /* Copy down auxiliary table.  */
+23:    ld      [%i2], %i3
+       ld      [%i2+4], %i4
+       add     %i2, 8, %i2
+       tst     %i3
+       st      %i3, [%i1]
+       st      %i4, [%i1+4]
+       bne     23b
+        add    %i1, 8, %i1
+  /* Load _dl_default_scope[2] to pass to _dl_init_next.  */
+3:     sethi   %hi(_dl_default_scope), %g1
+       or      %g1, %lo(_dl_default_scope), %g1
+       ld      [%l7+%g1], %l1
+       ld      [%l1+2*4], %l1
+  /* Call _dl_init_next to return the address of an initializer to run.  */
+4:     call    _dl_init_next
+        mov    %l1, %o0
+       tst     %o0
+       beq     5f
+        nop
+       jmpl    %o0, %o7
+        nop
+       ba,a    4b
+  /* Clear the startup flag.  */
+5:     sethi   %hi(_dl_starting_up), %g1
+       or      %g1, %lo(_dl_starting_up), %g1
+       ld      [%l7+%g1], %g1
+       st      %g0, [%g1]
+  /* Pass our finalizer function to the user in %g1.  */
+       sethi   %hi(_dl_fini), %g1
+       or      %g1, %lo(_dl_fini), %g1
+       ld      [%l7+%g1], %g1
+  /* Jump to the user's entry point and deallocate the extra stack we got.  */
+       jmp     %l0
+        add    %sp, 6*4, %sp
+       .size   _dl_start_user,.-_dl_start_user");
+
 #ifdef RESOLVE
 /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
    MAP is the object containing the reloc.  */
@@ -117,7 +254,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
                  const Elf32_Sym *sym, const struct r_found_version *version,
                  Elf32_Addr *const reloc_addr)
 {
-  Elf32_Addr loadbase;
+  extern unsigned long _dl_hwcap;
 
   if (ELF32_R_TYPE (reloc->r_info) == R_SPARC_RELATIVE)
     {
@@ -144,6 +281,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
       switch (ELF32_R_TYPE (reloc->r_info))
        {
        case R_SPARC_COPY:
+#ifndef RTLD_BOOTSTRAP
          if (sym->st_size > refsym->st_size
              || (_dl_verbose && sym->st_size < refsym->st_size))
            {
@@ -159,14 +297,21 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
            }
          memcpy (reloc_addr, (void *) value, MIN (sym->st_size,
                                                   refsym->st_size));
+#endif
          break;
        case R_SPARC_GLOB_DAT:
        case R_SPARC_32:
          *reloc_addr = value;
          break;
        case R_SPARC_JMP_SLOT:
-         reloc_addr[1] = OPCODE_SETHI_G1 | (value >> 10);
+         /* For thread safety, write the instructions from the bottom and
+            flush before we overwrite the critical "b,a".  */
          reloc_addr[2] = OPCODE_JMP_G1 | (value & 0x3ff);
+         if (1 || (_dl_hwcap & 1)) /* HWCAP_SPARC_FLUSH */
+           __asm __volatile ("flush %0+8" : : "r"(reloc_addr));
+         reloc_addr[1] = OPCODE_SETHI_G1 | (value >> 10);
+         if (1 || (_dl_hwcap & 1)) /* HWCAP_SPARC_FLUSH */
+           __asm __volatile ("flush %0+4" : : "r"(reloc_addr));
          break;
        case R_SPARC_8:
          *(char *) reloc_addr = value;
@@ -218,146 +363,3 @@ elf_machine_lazy_rel (struct link_map *map, const Elf32_Rela *reloc)
 }
 
 #endif /* RESOLVE */
-
-/* Nonzero iff TYPE should not be allowed to resolve to one of
-   the main executable's symbols, as for a COPY reloc.  */
-#define elf_machine_lookup_noexec_p(type) ((type) == R_SPARC_COPY)
-
-/* Nonzero iff TYPE describes relocation of a PLT entry, so
-   PLT entries should not be allowed to define the value.  */
-#define elf_machine_lookup_noplt_p(type) ((type) == R_SPARC_JMP_SLOT)
-
-/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
-#define ELF_MACHINE_RELOC_NOPLT        R_SPARC_JMP_SLOT
-
-/* The SPARC never uses Elf32_Rel relocations.  */
-#define ELF_MACHINE_NO_REL 1
-
-/* The SPARC overlaps DT_RELA and DT_PLTREL.  */
-#define ELF_MACHINE_PLTREL_OVERLAP 1
-
-/* Set up the loaded object described by L so its unrelocated PLT
-   entries will jump to the on-demand fixup code in dl-runtime.c.  */
-
-static inline int
-elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
-{
-  Elf32_Addr *plt;
-  extern void _dl_runtime_resolve (Elf32_Word);
-
-  if (l->l_info[DT_JMPREL] && lazy)
-    {
-      /* The entries for functions in the PLT have not yet been filled in.
-        Their initial contents will arrange when called to set the high 22
-        bits of %g1 with an offset into the .rela.plt section and jump to
-        the beginning of the PLT.  */
-      plt = (Elf32_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);
-
-      /* The beginning of the PLT does:
-
-               save %sp, -64, %sp
-        pltpc: call _dl_runtime_resolve
-               nop
-               .word MAP
-
-         This saves the register window containing the arguments, and the
-        PC value (pltpc) implicitly saved in %o7 by the call points near the
-        location where we store the link_map pointer for this object.  */
-
-      plt[0] = OPCODE_SAVE_SP64; /* save %sp, -64, %sp */
-      /* Construct PC-relative word address.  */
-      plt[1] = OPCODE_CALL | (((Elf32_Addr) &_dl_runtime_resolve -
-                              (Elf32_Addr) &plt[1]) >> 2);
-      plt[2] = OPCODE_NOP;     /* Fill call delay slot.  */
-      plt[3] = (Elf32_Addr *) l;
-    }
-
-  return lazy;
-}
-
-/* This code is used in dl-runtime.c to call the `fixup' function
-   and then redirect to the address it returns.  */
-#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
-# Trampoline for _dl_runtime_resolver
-       .globl _dl_runtime_resolve
-       .type _dl_runtime_resolve, @function
-_dl_runtime_resolve:
-       t 1
-       #call  %g0
-       # Pass two args to fixup: the PLT address computed from the PC saved
-       # in the PLT's call insn, and the reloc offset passed in %g1.
-       #ld [%o7 + 8], %o1      | Second arg, loaded from PLTPC[2].
-       #call fixup
-       #shrl %g1, 22, %o0      | First arg, set in delay slot of call.
-       # Jump to the real function.
-       #jmpl %o0, %g0
-       # In the delay slot of that jump, restore the register window
-       # saved by the first insn of the PLT.
-       #restore
-       .size _dl_runtime_resolve, . - _dl_runtime_resolve
-");
-
-/* The PLT uses Elf32_Rela relocs.  */
-#define elf_machine_relplt elf_machine_rela
-
-
-/* Mask identifying addresses reserved for the user program,
-   where the dynamic linker should not map anything.  */
-#define ELF_MACHINE_USER_ADDRESS_MASK  ???
-
-/* Initial entry point code for the dynamic linker.
-   The C function `_dl_start' is the real entry point;
-   its return value is the user program's entry point.  */
-
-#define RTLD_START __asm__ ( \
-".text\n\
- .globl _start\n\
- .type _start,@function\n\
-_start:\n\
-  /* Pass pointer to argument block to _dl_start.  */\n\
-  add %sp,64,%o0\n\
-  call _dl_start\n\
-   nop\n\
-  \n\
-  mov %o0,%l0\n\
-  \n\
-2:\n\
-   call 1f\n\
-   nop\n\
-1:\n\
-  sethi %hi(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l2\n\
-  sethi %hi(_dl_default_scope),%l3\n\
-  or    %l2,%lo(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l2\n\
-  or    %l3,%lo(_dl_default_scope),%l3\n\
-  add   %o7,%l2,%l1\n\
-  # %l1 has the GOT. %l3 has _dl_default_scope GOT offset\n\
-  ld    [%l1+%l3],%l4\n\
-  # %l4 has pointer to _dl_default_scope.  Now, load _dl_default_scope [2]\n\
-  ld    [%l4+8],%l4\n\
-  # %l4 has _dl_default_scope [2]\n\
-  # call _dl_init_next until it returns 0, pass _dl_default_scope [2]\n\
-3:\n\
-  call  _dl_init_next\n\
-   mov   %l4,%o0\n\
-  cmp   %o0,%g0\n\
-  bz,a  4f\n\
-   nop\n\
-  call  %o0\n\
-  /* Pass pointer to argument block to this init function */\n\
-   add %sp,64,%o0\n\
-  b,a   3b\n\
-4:\n\
-  # Clear the _dl_starting_up variable and pass _dl_fini in %g1 as per ELF ABI.\n\
-  sethi %hi(_dl_starting_up),%l4\n\
-  sethi %hi(_dl_fini),%l3\n\
-  or    %l4,%lo(_dl_starting_up),%l4\n\
-  or    %l3,%lo(_dl_fini),%l3\n\
-  # clear _dl_starting_up\n\
-  ld    [%l1+%l4],%l5\n\
-  st    %g0,[%l5]\n\
-  # load out fini function for atexit in %g1\n\
-  ld    [%l3+%l1],%g1\n\
-  # jump to the user program entry point.\n\
-  jmpl %l0,%g0\n\
-  nop\n\
-");
index 7ce695c..821aa8b 100644 (file)
  * This code optimizes short (less than 13-bit) multiplies.
  */
 
-#include "sysdep.h"
+#include <sysdep.h>
+
+
 ENTRY(.mul)
        mov     %o0, %y         ! multiplier -> Y
        andncc  %o0, 0xfff, %g0 ! test bits 12..31
-       be      Lmul_shortway   ! if zero, can do it the short way
+       be      LOC(mul_shortway)       ! if zero, can do it the short way
        andcc   %g0, %g0, %o4   ! zero the partial product and clear N and V
 
        /*
@@ -81,7 +83,7 @@ ENTRY(.mul)
                                !  and put upper half in place
 #endif
 
-Lmul_shortway:
+LOC(mul_shortway):
        /*
         * Short multiply.  12 steps, followed by a final shift step.
         * The resulting bits are off by 12 and (32-12) = 20 bit positions,
@@ -121,3 +123,5 @@ Lmul_shortway:
        or      %o5, %o0, %o0   ! construct low part of result
        retl
        sra     %o4, 20, %o1    ! ... and extract high part of result
+
+END(.mul)
diff --git a/sysdeps/sparc/sparc32/elf/start.S b/sysdeps/sparc/sparc32/elf/start.S
new file mode 100644 (file)
index 0000000..8e01b30
--- /dev/null
@@ -0,0 +1,86 @@
+/* Startup code for elf32-sparc
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
+
+   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>
+
+
+       .section ".text"
+       .align 4
+       .global _start
+       .type _start,#function
+_start:
+
+  /* Terminate the stack frame, and reserve space for functions to
+     drop their arguments.  */
+       mov     %g0, %fp
+       sub     %sp, 6*4, %sp
+
+  /* Save %g1.  When starting a binary via the dynamic linker, %g1
+     contains the address of the shared library termination function,
+     which we will register below with atexit() to be called by exit().
+     If we are statically linked, this will be NULL.  */
+
+  /* Do essential libc initialization (sp points to argc, argv, and envp)  */
+       call    __libc_init_first
+        mov    %g1, %l0
+
+  /* Now that we have the proper stack frame, register library termination
+     function, if there is any:  */
+
+       cmp     %l0, 0
+       beq     1f
+        nop
+       call    atexit
+        mov    %l0, %o0
+1:
+
+  /* Extract the arguments and environment as encoded on the stack.  The
+     argument info starts after one register window (16 words) past the SP.  */
+       ld      [%sp+22*4], %o0
+       add     %sp, 23*4, %o1
+       sll     %o0, 4, %o2
+       add     %o2, %o1, %o2
+       sethi   %hi(__environ), %g2
+       add     %o2, 4, %o2
+       st      %o2, [%g2+%lo(__environ)]
+
+       mov     %o0, %l0                /* tuck them away */
+       mov     %o1, %l1
+
+  /* Call _init, the entry point to our own .init section.  */
+       call    _init
+        mov    %o2, %l2
+
+  /* Register our .fini section with atexit.  */
+       sethi   %hi(_fini), %o0
+       call    atexit
+        add    %o0, %lo(_fini), %o0
+
+  /* Call the user's main and exit with its return value.  */
+       mov     %l0, %o0
+       mov     %l1, %o1
+       call    main
+        mov    %l2, %o2
+       call    exit
+        nop
+
+  /* Die very horribly if exit returns.  */
+       unimp
+
+       .size _start,.-_start
diff --git a/sysdeps/sparc/sparc32/elf/start.c b/sysdeps/sparc/sparc32/elf/start.c
deleted file mode 100644 (file)
index f1e8019..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-extern char **__environ;
-
-extern void __libc_init_first __P ((int argc, char **argv, char **envp));
-extern int main __P ((int argc, char **argv, char **envp));
-
-register long int sp asm("%sp"), fp asm("%fp");
-
-void
-_start (void)
-{
-  /* It is important that these be declared `register'.
-     Otherwise, when compiled without optimization, they are put on the
-     stack, which loses completely after we zero the FP.  */
-  register int argc;
-  register char **argv, **envp;
-  register long int g1 asm ("%g1");
-  unsigned long int copy_g1 = g1;
-
-  /* Unwind the frame built when we entered the function.  */
-  asm("restore");
-  if (copy_g1)
-    atexit (copy_g1);
-
-  /* And clear the frame pointer.  */
-  fp = 0;
-
-  /* The argument info starts after one register
-     window (64 bytes) past the SP.  */
-  argc = ((int *) sp)[16];
-  argv = (char **) &((int *) sp)[17];
-  envp = &argv[argc + 1];
-  __environ = envp;
-
-  /* Allocate 24 bytes of stack space for the register save area.  */
-  sp -= 24;
-  __libc_init_first (argc, argv, envp);
-#ifdef ELF_INIT_FINI
-  {
-    extern void _fini (void);
-    _init ();
-    atexit (_fini);
-  }
-#endif
-  exit (main (argc, argv, envp));
-}
index 0560dd9..6a76795 100644 (file)
@@ -72,5 +72,5 @@ typedef unsigned int fenv_t;
 #endif
 
 /* For internal use only: access the fp state register.  */
-#define __fenv_stfsr(X)   __asm__("stfsr %0" : "=m"(X))
-#define __fenv_ldfsr(X)   __asm__ __volatile__("ldfsr %0" : : "m"(X))
+#define __fenv_stfsr(X)   __asm__("st %%fsr,%0" : "=m"(X))
+#define __fenv_ldfsr(X)   __asm__ __volatile__("ld %0,%%fsr" : : "m"(X))
index 5ef3824..c069318 100644 (file)
 
 /* Now two recommended cw */
 
-/* Linux default:
+/* Linux and IEEE default:
      - extended precision
      - rounding to nearest
-     - exceptions on overflow, zero divide and NaN */
-#define _FPU_DEFAULT  0x1e
-
-/* IEEE:  same as above, but exceptions */
+     - no exceptions.  */
+#define _FPU_DEFAULT  0x0
 #define _FPU_IEEE     0x0
 
 /* Type of the control word.  */
index 4f0595f..35aa937 100644 (file)
@@ -1,19 +1,19 @@
-! sparc __mpn_lshift --
-
-! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
+! Sparc __mpn_lshift --
+!
+! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-! res_ptr      %o0
-! src_ptr      %o1
-! size         %o2
-! cnt          %o3
+! RES_PTR      %o0
+! SRC_PTR      %o1
+! SIZE         %o2
+! CNT          %o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-       .text
-       .align  4
-       .global C_SYMBOL_NAME(__mpn_lshift)
-C_SYMBOL_NAME(__mpn_lshift):
+ENTRY(__mpn_lshift)
        sll     %o2,2,%g1
        add     %o1,%g1,%o1     ! make %o1 point at end of src
        ld      [%o1-4],%g2     ! load first limb
@@ -40,12 +37,13 @@ C_SYMBOL_NAME(__mpn_lshift):
        add     %o2,-1,%o2
        andcc   %o2,4-1,%g4     ! number of limbs in first loop
        srl     %g2,%o5,%g1     ! compute function result
-       be      L0              ! if multiple of 4 limbs, skip first loop
+       be      LOC(0)          ! if multiple of 4 limbs, skip first loop
        st      %g1,[%sp+80]
 
        sub     %o2,%g4,%o2     ! adjust count for main loop
 
-Loop0: ld      [%o1-8],%g3
+LOC(loop0):
+       ld      [%o1-8],%g3
        add     %o0,-4,%o0
        add     %o1,-4,%o1
        addcc   %g4,-1,%g4
@@ -53,14 +51,15 @@ Loop0:      ld      [%o1-8],%g3
        srl     %g3,%o5,%g1
        mov     %g3,%g2
        or      %o4,%g1,%o4
-       bne     Loop0
+       bne     LOC(loop0)
         st     %o4,[%o0+0]
 
-L0:    tst     %o2
-       be      Lend
+LOC(0):        tst     %o2
+       be      LOC(end)
         nop
 
-Loop:  ld      [%o1-8],%g3
+LOC(loop):
+       ld      [%o1-8],%g3
        add     %o0,-16,%o0
        addcc   %o2,-4,%o2
        sll     %g2,%o3,%o4
@@ -86,10 +85,13 @@ Loop:       ld      [%o1-8],%g3
 
        add     %o1,-16,%o1
        or      %g4,%g1,%g4
-       bne     Loop
+       bne     LOC(loop)
         st     %g4,[%o0+0]
 
-Lend:  sll     %g2,%o3,%g2
+LOC(end):
+       sll     %g2,%o3,%g2
        st      %g2,[%o0-4]
        retl
        ld      [%sp+80],%o0
+
+END(__mpn_lshift)
index 142fd8b..d39ec61 100644 (file)
@@ -1,20 +1,20 @@
 ! SPARC __mpn_mul_1 -- Multiply a limb vector with a limb and store
 ! the result in a second limb vector.
-
-! Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
-
+!
+! Copyright (C) 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-! res_ptr      o0
-! s1_ptr       o1
-! size         o2
-! s2_limb      o3
+! RES_PTR      o0
+! S1_PTR       o1
+! SIZE         o2
+! S2_LIMB      o3
 
 ! ADD CODE FOR SMALL MULTIPLIERS!
 !1:    ld
 !      sll     a,29,y2
 !      st      x,
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-.text
-       .align 4
-       .global C_SYMBOL_NAME(__mpn_mul_1)
-C_SYMBOL_NAME(__mpn_mul_1):
+ENTRY(__mpn_mul_1)
        ! Make S1_PTR and RES_PTR point at the end of their blocks
        ! and put (- 4 x SIZE) in index/loop counter.
        sll     %o2,2,%o2
@@ -103,16 +100,16 @@ C_SYMBOL_NAME(__mpn_mul_1):
        sub     %g0,%o2,%o2
 
        cmp     %o3,0xfff
-       bgu     Large
+       bgu     LOC(large)
        nop
 
        ld      [%o1+%o2],%o5
        mov     0,%o0
-       b       L0
+       b       LOC(0)
         add    %o4,-4,%o4
-Loop0:
+LOC(loop0):
        st      %g1,[%o4+%o2]
-L0:    wr      %g0,%o3,%y
+LOC(0):        wr      %g0,%o3,%y
        sra     %o5,31,%g2
        and     %o3,%g2,%g2
        andcc   %g1,0,%g1
@@ -138,21 +135,22 @@ L0:       wr      %g0,%o3,%y
        addcc   %g1,%o0,%g1
        addx    %g2,%g4,%o0     ! add sign-compensation and cy to hi limb
        addcc   %o2,4,%o2       ! loop counter
-       bne,a   Loop0
+       bne,a   LOC(loop0)
         ld     [%o1+%o2],%o5
 
        retl
        st      %g1,[%o4+%o2]
 
 
-Large: ld      [%o1+%o2],%o5
+LOC(large):
+       ld      [%o1+%o2],%o5
        mov     0,%o0
        sra     %o3,31,%g4      ! g4 = mask of ones iff S2_LIMB < 0
-       b       L1
+       b       LOC(1)
         add    %o4,-4,%o4
-Loop:
+LOC(loop):
        st      %g3,[%o4+%o2]
-L1:    wr      %g0,%o5,%y
+LOC(1):        wr      %g0,%o5,%y
        and     %o5,%g4,%g2     ! g2 = S1_LIMB iff S2_LIMB < 0, else 0
        andcc   %g0,%g0,%g1
        mulscc  %g1,%o3,%g1
@@ -192,8 +190,10 @@ L1:        wr      %g0,%o5,%y
        addcc   %g3,%o0,%g3
        addx    %g2,%g1,%o0     ! add sign-compensation and cy to hi limb
        addcc   %o2,4,%o2       ! loop counter
-       bne,a   Loop
+       bne,a   LOC(loop)
         ld     [%o1+%o2],%o5
 
        retl
        st      %g3,[%o4+%o2]
+
+END(__mpn_mul_1)
index d50f1af..effacee 100644 (file)
 
 
 
-#include "sysdep.h"
-#ifdef __linux__
-#include <asm/traps.h>
-#else
-#ifdef __svr4__
+#include <sysdep.h>
 #include <sys/trap.h>
-#else
-#include <machine/trap.h>
-#endif
-#endif
 
 ENTRY(.rem)
        ! compute sign of result; if neither is negative, no problem
        orcc    %o1, %o0, %g0   ! either negative?
        bge     2f                      ! no, go do the divide
-       mov     %o0, %g6                ! sign of remainder matches %o0
+       mov     %o0, %g3                ! sign of remainder matches %o0
        tst     %o1
        bge     1f
        tst     %o0
@@ -76,11 +68,11 @@ ENTRY(.rem)
 
 1:
        cmp     %o3, %o5                        ! if %o1 exceeds %o0, done
-       blu     Lgot_result             ! (and algorithm fails otherwise)
+       blu     LOC(got_result)         ! (and algorithm fails otherwise)
        clr     %o2
        sethi   %hi(1 << (32 - 4 - 1)), %g1
        cmp     %o3, %g1
-       blu     Lnot_really_big
+       blu     LOC(not_really_big)
        clr     %o4
 
        ! Here the dividend is >= 2**(31-N) or so.  We must be careful here,
@@ -91,15 +83,15 @@ ENTRY(.rem)
        1:
                cmp     %o5, %g1
                bgeu    3f
-               mov     1, %g7
+               mov     1, %g2
                sll     %o5, 4, %o5
                b       1b
                add     %o4, 1, %o4
 
-       ! Now compute %g7.
+       ! Now compute %g2.
        2:      addcc   %o5, %o5, %o5
-               bcc     Lnot_too_big
-               add     %g7, 1, %g7
+               bcc     LOC(not_too_big)
+               add     %g2, 1, %g2
 
                ! We get here if the %o1 overflowed while shifting.
                ! This means that %o3 has the high-order bit set.
@@ -107,20 +99,20 @@ ENTRY(.rem)
                sll     %g1, 4, %g1     ! high order bit
                srl     %o5, 1, %o5             ! rest of %o5
                add     %o5, %g1, %o5
-               b       Ldo_single_div
-               sub     %g7, 1, %g7
+               b       LOC(do_single_div)
+               sub     %g2, 1, %g2
 
-       Lnot_too_big:
+       LOC(not_too_big):
        3:      cmp     %o5, %o3
                blu     2b
                nop
-               be      Ldo_single_div
+               be      LOC(do_single_div)
                nop
        /* NB: these are commented out in the V8-Sparc manual as well */
        /* (I do not understand this) */
        ! %o5 > %o3: went too far: back up 1 step
        !       srl     %o5, 1, %o5
-       !       dec     %g7
+       !       dec     %g2
        ! do single-bit divide steps
        !
        ! We have to be careful here.  We know that %o3 >= %o5, so we can do the
@@ -129,15 +121,15 @@ ENTRY(.rem)
        ! order bit set in the first step, just falling into the regular
        ! division loop will mess up the first time around.
        ! So we unroll slightly...
-       Ldo_single_div:
-               subcc   %g7, 1, %g7
-               bl      Lend_regular_divide
+       LOC(do_single_div):
+               subcc   %g2, 1, %g2
+               bl      LOC(end_regular_divide)
                nop
                sub     %o3, %o5, %o3
                mov     1, %o2
-               b       Lend_single_divloop
+               b       LOC(end_single_divloop)
                nop
-       Lsingle_divloop:
+       LOC(single_divloop):
                sll     %o2, 1, %o2
                bl      1f
                srl     %o5, 1, %o5
@@ -149,221 +141,223 @@ ENTRY(.rem)
                add     %o3, %o5, %o3
                sub     %o2, 1, %o2
        2:
-       Lend_single_divloop:
-               subcc   %g7, 1, %g7
-               bge     Lsingle_divloop
+       LOC(end_single_divloop):
+               subcc   %g2, 1, %g2
+               bge     LOC(single_divloop)
                tst     %o3
-               b,a     Lend_regular_divide
+               b,a     LOC(end_regular_divide)
 
-Lnot_really_big:
+LOC(not_really_big):
 1:
        sll     %o5, 4, %o5
        cmp     %o5, %o3
        bleu    1b
        addcc   %o4, 1, %o4
-       be      Lgot_result
+       be      LOC(got_result)
        sub     %o4, 1, %o4
 
        tst     %o3     ! set up for initial iteration
-Ldivloop:
+LOC(divloop):
        sll     %o2, 4, %o2
                ! depth 1, accumulated bits 0
-       bl      L.1.16
+       bl      LOC(1.16)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits 1
-       bl      L.2.17
+       bl      LOC(2.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 3
-       bl      L.3.19
+       bl      LOC(3.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 7
-       bl      L.4.23
+       bl      LOC(4.23)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2+1), %o2
-
-L.4.23:
+       
+LOC(4.23):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2-1), %o2
-
-
-L.3.19:
+       
+       
+LOC(3.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 5
-       bl      L.4.21
+       bl      LOC(4.21)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2+1), %o2
-
-L.4.21:
+       
+LOC(4.21):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2-1), %o2
-
-
-
-L.2.17:
+       
+       
+       
+LOC(2.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 1
-       bl      L.3.17
+       bl      LOC(3.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 3
-       bl      L.4.19
+       bl      LOC(4.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2+1), %o2
-
-L.4.19:
+       
+LOC(4.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2-1), %o2
-
-
-L.3.17:
+       
+       
+LOC(3.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 1
-       bl      L.4.17
+       bl      LOC(4.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2+1), %o2
-
-L.4.17:
+       
+LOC(4.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2-1), %o2
-
-
-
-
-L.1.16:
+       
+       
+       
+       
+LOC(1.16):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits -1
-       bl      L.2.15
+       bl      LOC(2.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -1
-       bl      L.3.15
+       bl      LOC(3.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -1
-       bl      L.4.15
+       bl      LOC(4.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2+1), %o2
-
-L.4.15:
+       
+LOC(4.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2-1), %o2
-
-
-L.3.15:
+       
+       
+LOC(3.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -3
-       bl      L.4.13
+       bl      LOC(4.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2+1), %o2
-
-L.4.13:
+       
+LOC(4.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2-1), %o2
-
-
-
-L.2.15:
+       
+       
+       
+LOC(2.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -3
-       bl      L.3.13
+       bl      LOC(3.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -5
-       bl      L.4.11
+       bl      LOC(4.11)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2+1), %o2
-
-L.4.11:
+       
+LOC(4.11):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2-1), %o2
-
-
-L.3.13:
+       
+       
+LOC(3.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -7
-       bl      L.4.9
+       bl      LOC(4.9)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2+1), %o2
-
-L.4.9:
+       
+LOC(4.9):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2-1), %o2
-
-
-
-
+       
+       
+       
+       
        9:
-Lend_regular_divide:
+LOC(end_regular_divide):
        subcc   %o4, 1, %o4
-       bge     Ldivloop
+       bge     LOC(divloop)
        tst     %o3
-       bl,a    Lgot_result
+       bl,a    LOC(got_result)
        ! non-restoring fixup here (one instruction only!)
        add     %o3, %o1, %o3
 
 
-Lgot_result:
+LOC(got_result):
        ! check to see if answer should be < 0
-       tst     %g6
+       tst     %g3
        bl,a    1f
        sub %g0, %o3, %o3
 1:
        retl
        mov %o3, %o0
+
+END(.rem)
index fea4f3b..db1d252 100644 (file)
@@ -1,19 +1,19 @@
 ! sparc __mpn_rshift --
-
-! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
+!
+! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-! res_ptr      %o0
-! src_ptr      %o1
-! size         %o2
-! cnt          %o3
+! RES_PTR      %o0
+! SRC_PTR      %o1
+! SIZE         %o2
+! CNT          %o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-       .text
-       .align  4
-       .global C_SYMBOL_NAME(__mpn_rshift)
-C_SYMBOL_NAME(__mpn_rshift):
+ENTRY(__mpn_rshift)
        ld      [%o1],%g2       ! load first limb
        sub     %g0,%o3,%o5     ! negate shift count
        add     %o2,-1,%o2
        andcc   %o2,4-1,%g4     ! number of limbs in first loop
        sll     %g2,%o5,%g1     ! compute function result
-       be      L0              ! if multiple of 4 limbs, skip first loop
+       be      LOC(0)          ! if multiple of 4 limbs, skip first loop
        st      %g1,[%sp+80]
 
        sub     %o2,%g4,%o2     ! adjust count for main loop
 
-Loop0: ld      [%o1+4],%g3
+LOC(loop0):
+       ld      [%o1+4],%g3
        add     %o0,4,%o0
        add     %o1,4,%o1
        addcc   %g4,-1,%g4
@@ -50,14 +48,15 @@ Loop0:      ld      [%o1+4],%g3
        sll     %g3,%o5,%g1
        mov     %g3,%g2
        or      %o4,%g1,%o4
-       bne     Loop0
+       bne     LOC(loop0)
         st     %o4,[%o0-4]
 
-L0:    tst     %o2
-       be      Lend
+LOC(0):        tst     %o2
+       be      LOC(end)
         nop
 
-Loop:  ld      [%o1+4],%g3
+LOC(loop):
+       ld      [%o1+4],%g3
        add     %o0,16,%o0
        addcc   %o2,-4,%o2
        srl     %g2,%o3,%o4
@@ -83,10 +82,13 @@ Loop:       ld      [%o1+4],%g3
 
        add     %o1,16,%o1
        or      %g4,%g1,%g4
-       bne     Loop
+       bne     LOC(loop)
         st     %g4,[%o0-4]
 
-Lend:  srl     %g2,%o3,%g2
+LOC(end):
+       srl     %g2,%o3,%g2
        st      %g2,[%o0-0]
        retl
        ld      [%sp+80],%o0
+
+END(__mpn_rshift)
index 02ed2e9..4b32547 100644 (file)
 
 
 
-#include "sysdep.h"
-#ifdef __linux__
-#include <asm/traps.h>
-#else
-#ifdef __svr4__
+#include <sysdep.h>
 #include <sys/trap.h>
-#else
-#include <machine/trap.h>
-#endif
-#endif
 
 ENTRY(.div)
        ! compute sign of result; if neither is negative, no problem
        orcc    %o1, %o0, %g0   ! either negative?
        bge     2f                      ! no, go do the divide
-       xor     %o1, %o0, %g6   ! compute sign in any case
+       xor     %o1, %o0, %g3   ! compute sign in any case
        tst     %o1
        bge     1f
        tst     %o0
@@ -76,11 +68,11 @@ ENTRY(.div)
 
 1:
        cmp     %o3, %o5                        ! if %o1 exceeds %o0, done
-       blu     Lgot_result             ! (and algorithm fails otherwise)
+       blu     LOC(got_result)         ! (and algorithm fails otherwise)
        clr     %o2
        sethi   %hi(1 << (32 - 4 - 1)), %g1
        cmp     %o3, %g1
-       blu     Lnot_really_big
+       blu     LOC(not_really_big)
        clr     %o4
 
        ! Here the dividend is >= 2**(31-N) or so.  We must be careful here,
@@ -91,15 +83,15 @@ ENTRY(.div)
        1:
                cmp     %o5, %g1
                bgeu    3f
-               mov     1, %g7
+               mov     1, %g2
                sll     %o5, 4, %o5
                b       1b
                add     %o4, 1, %o4
 
-       ! Now compute %g7.
+       ! Now compute %g2.
        2:      addcc   %o5, %o5, %o5
-               bcc     Lnot_too_big
-               add     %g7, 1, %g7
+               bcc     LOC(not_too_big)
+               add     %g2, 1, %g2
 
                ! We get here if the %o1 overflowed while shifting.
                ! This means that %o3 has the high-order bit set.
@@ -107,20 +99,20 @@ ENTRY(.div)
                sll     %g1, 4, %g1     ! high order bit
                srl     %o5, 1, %o5             ! rest of %o5
                add     %o5, %g1, %o5
-               b       Ldo_single_div
-               sub     %g7, 1, %g7
+               b       LOC(do_single_div)
+               sub     %g2, 1, %g2
 
-       Lnot_too_big:
+       LOC(not_too_big):
        3:      cmp     %o5, %o3
                blu     2b
                nop
-               be      Ldo_single_div
+               be      LOC(do_single_div)
                nop
        /* NB: these are commented out in the V8-Sparc manual as well */
        /* (I do not understand this) */
        ! %o5 > %o3: went too far: back up 1 step
        !       srl     %o5, 1, %o5
-       !       dec     %g7
+       !       dec     %g2
        ! do single-bit divide steps
        !
        ! We have to be careful here.  We know that %o3 >= %o5, so we can do the
@@ -129,15 +121,15 @@ ENTRY(.div)
        ! order bit set in the first step, just falling into the regular
        ! division loop will mess up the first time around.
        ! So we unroll slightly...
-       Ldo_single_div:
-               subcc   %g7, 1, %g7
-               bl      Lend_regular_divide
+       LOC(do_single_div):
+               subcc   %g2, 1, %g2
+               bl      LOC(end_regular_divide)
                nop
                sub     %o3, %o5, %o3
                mov     1, %o2
-               b       Lend_single_divloop
+               b       LOC(end_single_divloop)
                nop
-       Lsingle_divloop:
+       LOC(single_divloop):
                sll     %o2, 1, %o2
                bl      1f
                srl     %o5, 1, %o5
@@ -149,221 +141,223 @@ ENTRY(.div)
                add     %o3, %o5, %o3
                sub     %o2, 1, %o2
        2:
-       Lend_single_divloop:
-               subcc   %g7, 1, %g7
-               bge     Lsingle_divloop
+       LOC(end_single_divloop):
+               subcc   %g2, 1, %g2
+               bge     LOC(single_divloop)
                tst     %o3
-               b,a     Lend_regular_divide
+               b,a     LOC(end_regular_divide)
 
-Lnot_really_big:
+LOC(not_really_big):
 1:
        sll     %o5, 4, %o5
        cmp     %o5, %o3
        bleu    1b
        addcc   %o4, 1, %o4
-       be      Lgot_result
+       be      LOC(got_result)
        sub     %o4, 1, %o4
 
        tst     %o3     ! set up for initial iteration
-Ldivloop:
+LOC(divloop):
        sll     %o2, 4, %o2
                ! depth 1, accumulated bits 0
-       bl      L.1.16
+       bl      LOC(1.16)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits 1
-       bl      L.2.17
+       bl      LOC(2.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 3
-       bl      L.3.19
+       bl      LOC(3.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 7
-       bl      L.4.23
+       bl      LOC(4.23)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2+1), %o2
-
-L.4.23:
+       
+LOC(4.23):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2-1), %o2
-
-
-L.3.19:
+       
+       
+LOC(3.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 5
-       bl      L.4.21
+       bl      LOC(4.21)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2+1), %o2
-
-L.4.21:
+       
+LOC(4.21):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2-1), %o2
-
-
-
-L.2.17:
+       
+       
+       
+LOC(2.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 1
-       bl      L.3.17
+       bl      LOC(3.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 3
-       bl      L.4.19
+       bl      LOC(4.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2+1), %o2
-
-L.4.19:
+       
+LOC(4.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2-1), %o2
-
-
-L.3.17:
+       
+       
+LOC(3.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 1
-       bl      L.4.17
+       bl      LOC(4.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2+1), %o2
-
-L.4.17:
+       
+LOC(4.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2-1), %o2
-
-
-
-
-L.1.16:
+       
+       
+       
+       
+LOC(1.16):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits -1
-       bl      L.2.15
+       bl      LOC(2.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -1
-       bl      L.3.15
+       bl      LOC(3.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -1
-       bl      L.4.15
+       bl      LOC(4.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2+1), %o2
-
-L.4.15:
+       
+LOC(4.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2-1), %o2
-
-
-L.3.15:
+       
+       
+LOC(3.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -3
-       bl      L.4.13
+       bl      LOC(4.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2+1), %o2
-
-L.4.13:
+       
+LOC(4.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2-1), %o2
-
-
-
-L.2.15:
+       
+       
+       
+LOC(2.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -3
-       bl      L.3.13
+       bl      LOC(3.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -5
-       bl      L.4.11
+       bl      LOC(4.11)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2+1), %o2
-
-L.4.11:
+       
+LOC(4.11):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2-1), %o2
-
-
-L.3.13:
+       
+       
+LOC(3.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -7
-       bl      L.4.9
+       bl      LOC(4.9)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2+1), %o2
-
-L.4.9:
+       
+LOC(4.9):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2-1), %o2
-
-
-
-
+       
+       
+       
+       
        9:
-Lend_regular_divide:
+LOC(end_regular_divide):
        subcc   %o4, 1, %o4
-       bge     Ldivloop
+       bge     LOC(divloop)
        tst     %o3
-       bl,a    Lgot_result
+       bl,a    LOC(got_result)
        ! non-restoring fixup here (one instruction only!)
        sub     %o2, 1, %o2
 
 
-Lgot_result:
+LOC(got_result):
        ! check to see if answer should be < 0
-       tst     %g6
+       tst     %g3
        bl,a    1f
        sub %g0, %o2, %o2
 1:
        retl
        mov %o2, %o0
+
+END(.div)
index 772ec72..58d9411 100644 (file)
 #define _ASM 1
 #include <bits/setjmp.h>
 
+ENTRY(_setjmp)
+       b       1f
+        set    0, %o1
+END(_setjmp)
+
+ENTRY(setjmp)
+       set     1, %o1
+END(setjmp)
+
 ENTRY (__sigsetjmp)
-       /* Save our SP and FP; in the delay slot of the jump, save our
-          return PC.  Save the signal mask if requested with a tail-call
-          for simplicity; it always returns zero.  */
-       ta   ST_FLUSH_WINDOWS
-#ifdef PIC
-       mov  %o7,%g1
-2:
-       call 1f
-       nop
 1:
-       sethi %hi(_GLOBAL_OFFSET_TABLE_-(2b-.)),%g2
-       or    %g2,%lo(_GLOBAL_OFFSET_TABLE_-(2b-.)),%g2
-       add   %g2,%o7,%g2
-       sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
-       or    %g3,%lo(C_SYMBOL_NAME (__sigjmp_save)), %g3
-       st    %sp, [%o0 + (JB_SP * 4)]
-       st    %fp, [%o0 + (JB_FP * 4)]
-       mov   %g1,%o7
-       ld    [%g2+%g3],%g1
-       jmp   %g1
-       st   %o7, [%o0+(JB_PC*4)]
-#else
-       sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g1
-       st %sp, [%o0 + (JB_SP*4)]
-       or %lo(C_SYMBOL_NAME (__sigjmp_save)), %g1, %g1
-       st %fp, [%o0 + (JB_FP*4)]
-       jmp %g1
-        st %o7, [%o0 + (JB_PC*4)]
-#endif /* PIC */
+       /* Save our PC, SP and FP.  Save the signal mask if requested with
+          a tail-call for simplicity; it always returns zero.  */
+       ta      ST_FLUSH_WINDOWS
+
+       st      %o7, [%o0 + (JB_PC * 4)]
+       st      %sp, [%o0 + (JB_SP * 4)]
+       st      %fp, [%o0 + (JB_FP * 4)]
+
+       mov     %o7, %g1
+       call    __sigjmp_save
+        mov    %g1, %o7
+END(__sigsetjmp)
+
+weak_extern(_setjmp)
+weak_extern(setjmp)
index fb9ea7c..7b871b8 100644 (file)
 ! size         o2
 ! s2_limb      o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-.text
-       .align 4
-       .global C_SYMBOL_NAME(__mpn_addmul_1)
-C_SYMBOL_NAME(__mpn_addmul_1):
-       orcc    %g0,%g0,%g2
+ENTRY(__mpn_addmul_1)
        ld      [%o1+0],%o4     ! 1
-
        sll     %o2,4,%g1
-       and     %g1,(4-1)<<4,%g1
-#if PIC
+       orcc    %g0,%g0,%g2
        mov     %o7,%g4                 ! Save return address register
-       call    1f
-       add     %o7,LL-1f,%g3
-1:     mov     %g4,%o7                 ! Restore return address register
-#else
-       sethi   %hi(LL),%g3
-       or      %g3,%lo(LL),%g3
-#endif
-       jmp     %g3+%g1
-       nop
-LL:
-LL00:  add     %o0,-4,%o0
-       b       Loop00          /* 4, 8, 12, ... */
-       add     %o1,-4,%o1
-       nop
-LL01:  b       Loop01          /* 1, 5, 9, ... */
+       and     %g1,(4-1)<<4,%g1
+1:     call    2f
+        add    %o7,3f-1b,%g3
+2:     jmp     %g3+%g1
+        mov    %g4,%o7                 ! Restore return address register
+
+       .align  4
+3:
+LOC(00):
+       add     %o0,-4,%o0
+       b       LOC(loop00)             /* 4, 8, 12, ... */
+        add    %o1,-4,%o1
        nop
+LOC(01):
+       b       LOC(loop01)             /* 1, 5, 9, ... */
+        nop
        nop
        nop
-LL10:  add     %o0,-12,%o0     /* 2, 6, 10, ... */
-       b       Loop10
-       add     %o1,4,%o1
+LOC(10):
+       add     %o0,-12,%o0     /* 2, 6, 10, ... */
+       b       LOC(loop10)
+        add    %o1,4,%o1
        nop
-LL11:  add     %o0,-8,%o0      /* 3, 7, 11, ... */
-       b       Loop11
-       add     %o1,-8,%o1
+LOC(11):
+       add     %o0,-8,%o0      /* 3, 7, 11, ... */
+       b       LOC(loop11)
+        add    %o1,-8,%o1
        nop
 
-1:     addcc   %g3,%g2,%g3     ! 1
+LOC(loop):
+       addcc   %g3,%g2,%g3     ! 1
        ld      [%o1+4],%o4     ! 2
        rd      %y,%g2          ! 1
        addx    %g0,%g2,%g2
        ld      [%o0+0],%g1     ! 2
        addcc   %g1,%g3,%g3
        st      %g3,[%o0+0]     ! 1
-Loop00:        umul    %o4,%o3,%g3     ! 2
+LOC(loop00):
+       umul    %o4,%o3,%g3     ! 2
        ld      [%o0+4],%g1     ! 2
        addxcc  %g3,%g2,%g3     ! 2
        ld      [%o1+8],%o4     ! 3
@@ -83,7 +81,8 @@ Loop00:       umul    %o4,%o3,%g3     ! 2
        nop
        addcc   %g1,%g3,%g3
        st      %g3,[%o0+4]     ! 2
-Loop11:        umul    %o4,%o3,%g3     ! 3
+LOC(loop11):
+       umul    %o4,%o3,%g3     ! 3
        addxcc  %g3,%g2,%g3     ! 3
        ld      [%o1+12],%o4    ! 4
        rd      %y,%g2          ! 3
@@ -92,7 +91,8 @@ Loop11:       umul    %o4,%o3,%g3     ! 3
        ld      [%o0+8],%g1     ! 2
        addcc   %g1,%g3,%g3
        st      %g3,[%o0+8]     ! 3
-Loop10:        umul    %o4,%o3,%g3     ! 4
+LOC(loop10):
+       umul    %o4,%o3,%g3     ! 4
        addxcc  %g3,%g2,%g3     ! 4
        ld      [%o1+0],%o4     ! 1
        rd      %y,%g2          ! 4
@@ -102,9 +102,10 @@ Loop10:    umul    %o4,%o3,%g3     ! 4
        st      %g3,[%o0+12]    ! 4
        add     %o0,16,%o0
        addx    %g0,%g2,%g2
-Loop01:        addcc   %o2,-4,%o2
-       bg      1b
-       umul    %o4,%o3,%g3     ! 1
+LOC(loop01):
+       addcc   %o2,-4,%o2
+       bg      LOC(loop)
+        umul   %o4,%o3,%g3     ! 1
 
        addcc   %g3,%g2,%g3     ! 4
        rd      %y,%g2          ! 4
@@ -112,13 +113,7 @@ Loop01:    addcc   %o2,-4,%o2
        ld      [%o0+0],%g1     ! 2
        addcc   %g1,%g3,%g3
        st      %g3,[%o0+0]     ! 4
-       addx    %g0,%g2,%o0
-
        retl
-        nop
-
-
-!      umul, ld, addxcc, rd, st
-
-!      umul, ld, addxcc, rd, ld, addcc, st, addx
+        addx   %g0,%g2,%o0
 
+END(__mpn_addmul_1)
diff --git a/sysdeps/sparc/sparc32/sparcv8/dotmul.S b/sysdeps/sparc/sparc32/sparcv8/dotmul.S
new file mode 100644 (file)
index 0000000..9b20cc3
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * Sparc v8 has multiply.
+ */
+
+#include <sysdep.h>
+
+ENTRY(.mul)
+
+       smul    %o0, %o1, %o0
+       retl
+        rd     %y, %o1
+
+END(.mul)
index b641feb..801e224 100644 (file)
 ! size         o2
 ! s2_limb      o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-.text
-       .align  8
-       .global C_SYMBOL_NAME(__mpn_mul_1)
-C_SYMBOL_NAME(__mpn_mul_1):
+ENTRY(__mpn_mul_1)
        sll     %o2,4,%g1
-       and     %g1,(4-1)<<4,%g1
-#if PIC
        mov     %o7,%g4                 ! Save return address register
-       call    1f
-       add     %o7,LL-1f,%g3
-1:     mov     %g4,%o7                 ! Restore return address register
-#else
-       sethi   %hi(LL),%g3
-       or      %g3,%lo(LL),%g3
-#endif
+       and     %g1,(4-1)<<4,%g1
+1:     call    2f
+        add    %o7,3f-1b,%g3
+2:     mov     %g4,%o7                 ! Restore return address register
        jmp     %g3+%g1
-       ld      [%o1+0],%o4     ! 1
-LL:
-LL00:  add     %o0,-4,%o0
+        ld     [%o1+0],%o4     ! 1
+
+       .align  4
+3:
+LOC(00):
+       add     %o0,-4,%o0
        add     %o1,-4,%o1
-       b       Loop00          /* 4, 8, 12, ... */
-       orcc    %g0,%g0,%g2
-LL01:  b       Loop01          /* 1, 5, 9, ... */
-       orcc    %g0,%g0,%g2
+       b       LOC(loop00)             /* 4, 8, 12, ... */
+        orcc   %g0,%g0,%g2
+LOC(01):
+       b       LOC(loop01)             /* 1, 5, 9, ... */
+        orcc   %g0,%g0,%g2
        nop
        nop
-LL10:  add     %o0,-12,%o0     /* 2, 6, 10, ... */
+LOC(10):
+       add     %o0,-12,%o0     /* 2, 6, 10, ... */
        add     %o1,4,%o1
-       b       Loop10
-       orcc    %g0,%g0,%g2
+       b       LOC(loop10)
+        orcc   %g0,%g0,%g2
        nop
-LL11:  add     %o0,-8,%o0      /* 3, 7, 11, ... */
+LOC(11):
+       add     %o0,-8,%o0      /* 3, 7, 11, ... */
        add     %o1,-8,%o1
-       b       Loop11
-       orcc    %g0,%g0,%g2
+       b       LOC(loop11)
+        orcc   %g0,%g0,%g2
 
-Loop:  addcc   %g3,%g2,%g3     ! 1
+LOC(loop):
+       addcc   %g3,%g2,%g3     ! 1
        ld      [%o1+4],%o4     ! 2
        st      %g3,[%o0+0]     ! 1
        rd      %y,%g2          ! 1
-Loop00:        umul    %o4,%o3,%g3     ! 2
+LOC(loop00):
+       umul    %o4,%o3,%g3     ! 2
        addxcc  %g3,%g2,%g3     ! 2
        ld      [%o1+8],%o4     ! 3
        st      %g3,[%o0+4]     ! 2
        rd      %y,%g2          ! 2
-Loop11:        umul    %o4,%o3,%g3     ! 3
+LOC(loop11):
+       umul    %o4,%o3,%g3     ! 3
        addxcc  %g3,%g2,%g3     ! 3
        ld      [%o1+12],%o4    ! 4
        add     %o1,16,%o1
        st      %g3,[%o0+8]     ! 3
        rd      %y,%g2          ! 3
-Loop10:        umul    %o4,%o3,%g3     ! 4
+LOC(loop10):
+       umul    %o4,%o3,%g3     ! 4
        addxcc  %g3,%g2,%g3     ! 4
        ld      [%o1+0],%o4     ! 1
        st      %g3,[%o0+12]    ! 4
        add     %o0,16,%o0
        rd      %y,%g2          ! 4
        addx    %g0,%g2,%g2
-Loop01:        addcc   %o2,-4,%o2
-       bg      Loop
-       umul    %o4,%o3,%g3     ! 1
+LOC(loop01):
+       addcc   %o2,-4,%o2
+       bg      LOC(loop)
+        umul   %o4,%o3,%g3     ! 1
 
        addcc   %g3,%g2,%g3     ! 4
        st      %g3,[%o0+0]     ! 4
        rd      %y,%g2          ! 4
-
        retl
-       addx    %g0,%g2,%o0
+        addx   %g0,%g2,%o0
+
+END(__mpn_mul_1)
diff --git a/sysdeps/sparc/sparc32/sparcv8/rem.S b/sysdeps/sparc/sparc32/sparcv8/rem.S
new file mode 100644 (file)
index 0000000..061e800
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Sparc v8 has divide.
+ */
+
+#include <sysdep.h>
+
+ENTRY(.rem)
+
+       sra     %o0, 31, %o2
+       wr      %o2, 0, %y
+       sdivcc  %o0, %o1, %o2
+       bvs,a   1f
+        xnor   %o2, %g0, %o2
+1:     smul    %o2, %o1, %o2
+       retl
+        sub    %o0, %o2, %o0
+
+END(.rem)
diff --git a/sysdeps/sparc/sparc32/sparcv8/sdiv.S b/sysdeps/sparc/sparc32/sparcv8/sdiv.S
new file mode 100644 (file)
index 0000000..81c3ac1
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Sparc v8 has divide.
+ */
+
+#include <sysdep.h>
+
+ENTRY(.div)
+
+       sra     %o0, 31, %o2
+       wr      %o2, 0, %y
+       ret
+        sdiv   %o0, %o1, %o0
+
+END(.div)
index e40119d..c71f228 100644 (file)
 ! size         o2
 ! s2_limb      o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-.text
-       .align 4
-       .global C_SYMBOL_NAME(__mpn_submul_1)
-C_SYMBOL_NAME(__mpn_submul_1):
+ENTRY(__mpn_submul_1)
        sub     %g0,%o2,%o2             ! negate ...
        sll     %o2,2,%o2               ! ... and scale size
        sub     %o1,%o2,%o1             ! o1 is offset s1_ptr
@@ -40,7 +37,8 @@ C_SYMBOL_NAME(__mpn_submul_1):
 
        mov     0,%o0                   ! clear cy_limb
 
-Loop:  ld      [%o1+%o2],%o4
+LOC(loop):
+       ld      [%o1+%o2],%o4
        ld      [%g1+%o2],%g2
        umul    %o4,%o3,%o5
        rd      %y,%g3
@@ -51,8 +49,10 @@ Loop:        ld      [%o1+%o2],%o4
        st      %g2,[%g1+%o2]
 
        addcc   %o2,4,%o2
-       bne     Loop
+       bne     LOC(loop)
         nop
 
        retl
         nop
+
+END(__mpn_submul_1)
diff --git a/sysdeps/sparc/sparc32/sparcv8/udiv.S b/sysdeps/sparc/sparc32/sparcv8/udiv.S
new file mode 100644 (file)
index 0000000..4e3cddc
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * Sparc v8 has divide.
+ */
+
+#include <sysdep.h>
+
+ENTRY(.udiv)
+
+       wr      %g0, 0, %y
+       retl
+        udiv   %o0, %o1, %o0
+
+END(.udiv)
index 49c2398..5b0d429 100644 (file)
 
 #include "sysdep.h"
 
-       .text
-       .align 4
-       .global C_SYMBOL_NAME(__udiv_qrnnd)
-C_SYMBOL_NAME(__udiv_qrnnd):
+ENTRY(__udiv_qrnnd)
        tst     %o3
-       bneg    Largedivisor
+       bneg    LOC(largedivisor)
        mov     8,%g1
 
-       b       Lp1
+       b       LOC(p1)
        addxcc  %o2,%o2,%o2
 
-Lplop: bcc     Ln1
+LOC(plop):
+       bcc     LOC(n1)
        addxcc  %o2,%o2,%o2
-Lp1:   addx    %o1,%o1,%o1
+LOC(p1):
+       addx    %o1,%o1,%o1
        subcc   %o1,%o3,%o4
-       bcc     Ln2
+       bcc     LOC(n2)
        addxcc  %o2,%o2,%o2
-Lp2:   addx    %o1,%o1,%o1
+LOC(p2):
+       addx    %o1,%o1,%o1
        subcc   %o1,%o3,%o4
-       bcc     Ln3
+       bcc     LOC(n3)
        addxcc  %o2,%o2,%o2
-Lp3:   addx    %o1,%o1,%o1
+LOC(p3):
+       addx    %o1,%o1,%o1
        subcc   %o1,%o3,%o4
-       bcc     Ln4
+       bcc     LOC(n4)
        addxcc  %o2,%o2,%o2
-Lp4:   addx    %o1,%o1,%o1
+LOC(p4):
+       addx    %o1,%o1,%o1
        addcc   %g1,-1,%g1
-       bne     Lplop
+       bne     LOC(plop)
        subcc   %o1,%o3,%o4
-       bcc     Ln5
+       bcc     LOC(n5)
        addxcc  %o2,%o2,%o2
-Lp5:   st      %o1,[%o0]
+LOC(p5):
+       st      %o1,[%o0]
        retl
        xnor    %g0,%o2,%o0
 
-Lnlop: bcc     Lp1
+LOC(nlop):
+       bcc     LOC(p1)
        addxcc  %o2,%o2,%o2
-Ln1:   addx    %o4,%o4,%o4
+LOC(n1):
+       addx    %o4,%o4,%o4
        subcc   %o4,%o3,%o1
-       bcc     Lp2
+       bcc     LOC(p2)
        addxcc  %o2,%o2,%o2
-Ln2:   addx    %o4,%o4,%o4
+LOC(n2):
+       addx    %o4,%o4,%o4
        subcc   %o4,%o3,%o1
-       bcc     Lp3
+       bcc     LOC(p3)
        addxcc  %o2,%o2,%o2
-Ln3:   addx    %o4,%o4,%o4
+LOC(n3):
+       addx    %o4,%o4,%o4
        subcc   %o4,%o3,%o1
-       bcc     Lp4
+       bcc     LOC(p4)
        addxcc  %o2,%o2,%o2
-Ln4:   addx    %o4,%o4,%o4
+LOC(n4):
+       addx    %o4,%o4,%o4
        addcc   %g1,-1,%g1
-       bne     Lnlop
+       bne     LOC(nlop)
        subcc   %o4,%o3,%o1
-       bcc     Lp5
+       bcc     LOC(p5)
        addxcc  %o2,%o2,%o2
-Ln5:   st      %o4,[%o0]
+LOC(n5):
+       st      %o4,[%o0]
        retl
        xnor    %g0,%o2,%o0
 
-Largedivisor:
+LOC(largedivisor):
        and     %o2,1,%o5       ! %o5 = n0 & 1
 
        srl     %o2,1,%o2
@@ -98,89 +107,109 @@ Largedivisor:
        srl     %o3,1,%g3       ! %g3 = floor(d / 2)
        add     %g3,%g2,%g3     ! %g3 = ceil(d / 2)
 
-       b       LLp1
+       b       LOC(Lp1)
        addxcc  %o2,%o2,%o2
 
-LLplop:        bcc     LLn1
+LOC(Lplop):
+       bcc     LOC(Ln1)
        addxcc  %o2,%o2,%o2
-LLp1:  addx    %o1,%o1,%o1
+LOC(Lp1):
+       addx    %o1,%o1,%o1
        subcc   %o1,%g3,%o4
-       bcc     LLn2
+       bcc     LOC(Ln2)
        addxcc  %o2,%o2,%o2
-LLp2:  addx    %o1,%o1,%o1
+LOC(Lp2):
+       addx    %o1,%o1,%o1
        subcc   %o1,%g3,%o4
-       bcc     LLn3
+       bcc     LOC(Ln3)
        addxcc  %o2,%o2,%o2
-LLp3:  addx    %o1,%o1,%o1
+LOC(Lp3):
+       addx    %o1,%o1,%o1
        subcc   %o1,%g3,%o4
-       bcc     LLn4
+       bcc     LOC(Ln4)
        addxcc  %o2,%o2,%o2
-LLp4:  addx    %o1,%o1,%o1
+LOC(Lp4):
+       addx    %o1,%o1,%o1
        addcc   %g1,-1,%g1
-       bne     LLplop
+       bne     LOC(Lplop)
        subcc   %o1,%g3,%o4
-       bcc     LLn5
+       bcc     LOC(Ln5)
        addxcc  %o2,%o2,%o2
-LLp5:  add     %o1,%o1,%o1     ! << 1
+LOC(Lp5):
+       add     %o1,%o1,%o1     ! << 1
        tst     %g2
-       bne     Oddp
+       bne     LOC(Oddp)
        add     %o5,%o1,%o1
        st      %o1,[%o0]
        retl
        xnor    %g0,%o2,%o0
 
-LLnlop:        bcc     LLp1
+LOC(Lnlop):
+       bcc     LOC(Lp1)
        addxcc  %o2,%o2,%o2
-LLn1:  addx    %o4,%o4,%o4
+LOC(Ln1):
+       addx    %o4,%o4,%o4
        subcc   %o4,%g3,%o1
-       bcc     LLp2
+       bcc     LOC(Lp2)
        addxcc  %o2,%o2,%o2
-LLn2:  addx    %o4,%o4,%o4
+LOC(Ln2):
+       addx    %o4,%o4,%o4
        subcc   %o4,%g3,%o1
-       bcc     LLp3
+       bcc     LOC(Lp3)
        addxcc  %o2,%o2,%o2
-LLn3:  addx    %o4,%o4,%o4
+LOC(Ln3):
+       addx    %o4,%o4,%o4
        subcc   %o4,%g3,%o1
-       bcc     LLp4
+       bcc     LOC(Lp4)
        addxcc  %o2,%o2,%o2
-LLn4:  addx    %o4,%o4,%o4
+LOC(Ln4):
+       addx    %o4,%o4,%o4
        addcc   %g1,-1,%g1
-       bne     LLnlop
+       bne     LOC(Lnlop)
        subcc   %o4,%g3,%o1
-       bcc     LLp5
+       bcc     LOC(Lp5)
        addxcc  %o2,%o2,%o2
-LLn5:  add     %o4,%o4,%o4     ! << 1
+LOC(Ln5):
+       add     %o4,%o4,%o4     ! << 1
        tst     %g2
-       bne     Oddn
+       bne     LOC(Oddn)
        add     %o5,%o4,%o4
        st      %o4,[%o0]
        retl
        xnor    %g0,%o2,%o0
 
-Oddp:  xnor    %g0,%o2,%o2
+LOC(Oddp):
+       xnor    %g0,%o2,%o2
        ! q' in %o2. r' in %o1
        addcc   %o1,%o2,%o1
-       bcc     LLp6
+       bcc     LOC(Lp6)
        addx    %o2,0,%o2
        sub     %o1,%o3,%o1
-LLp6:  subcc   %o1,%o3,%g0
-       bcs     LLp7
+LOC(Lp6):
+       subcc   %o1,%o3,%g0
+       bcs     LOC(Lp7)
        subx    %o2,-1,%o2
        sub     %o1,%o3,%o1
-LLp7:  st      %o1,[%o0]
+LOC(Lp7):
+       st      %o1,[%o0]
        retl
        mov     %o2,%o0
 
-Oddn:  xnor    %g0,%o2,%o2
+LOC(Oddn):
+       xnor    %g0,%o2,%o2
        ! q' in %o2. r' in %o4
        addcc   %o4,%o2,%o4
-       bcc     LLn6
+       bcc     LOC(Ln6)
        addx    %o2,0,%o2
        sub     %o4,%o3,%o4
-LLn6:  subcc   %o4,%o3,%g0
-       bcs     LLn7
+LOC(Ln6):
+       subcc   %o4,%o3,%g0
+       bcs     LOC(Ln7)
        subx    %o2,-1,%o2
        sub     %o4,%o3,%o4
-LLn7:  st      %o4,[%o0]
+LOC(Ln7):
+       st      %o4,[%o0]
        retl
        mov     %o2,%o0
+
+END(__udiv_qrnnd)
diff --git a/sysdeps/sparc/sparc32/sparcv8/umul.S b/sysdeps/sparc/sparc32/sparcv8/umul.S
new file mode 100644 (file)
index 0000000..cec454a
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * Sparc v8 has multiply.
+ */
+
+#include <sysdep.h>
+
+ENTRY(.umul)
+
+       umul    %o0, %o1, %o0
+       retl
+        rd     %y, %o1
+
+END(.umul)
diff --git a/sysdeps/sparc/sparc32/sparcv8/urem.S b/sysdeps/sparc/sparc32/sparcv8/urem.S
new file mode 100644 (file)
index 0000000..81e123f
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * Sparc v8 has divide.
+ */
+
+#include <sysdep.h>
+
+ENTRY(.urem)
+
+       wr      %g0, 0, %y
+       udiv    %o0, %o1, %o2
+       umul    %o2, %o1, %o2
+       retl
+        sub    %o0, %o2, %o0
+
+END(.urem)
index b7a1195..7440060 100644 (file)
@@ -1,20 +1,20 @@
 ! SPARC __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
 ! store difference in a third limb vector.
-
+!
 ! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-#define res_ptr        %o0
-#define s1_ptr %o1
-#define s2_ptr %o2
-#define size   %o3
+#define RES_PTR        %o0
+#define S1_PTR %o1
+#define S2_PTR %o2
+#define SIZE   %o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-       .text
-       .align  4
-       .global C_SYMBOL_NAME(__mpn_sub_n)
-C_SYMBOL_NAME(__mpn_sub_n):
-       xor     s2_ptr,res_ptr,%g1
+ENTRY(__mpn_sub_n)
+       xor     S2_PTR,RES_PTR,%g1
        andcc   %g1,4,%g0
-       bne     L1                      ! branch if alignment differs
+       bne     LOC(1)                  ! branch if alignment differs
        nop
 ! **  V1a  **
-       andcc   res_ptr,4,%g0           ! res_ptr unaligned? Side effect: cy=0
-       be      L_v1                    ! if no, branch
+       andcc   RES_PTR,4,%g0           ! RES_PTR unaligned? Side effect: cy=0
+       be      LOC(v1)                 ! if no, branch
        nop
-/* Add least significant limb separately to align res_ptr and s2_ptr */
-       ld      [s1_ptr],%g4
-       add     s1_ptr,4,s1_ptr
-       ld      [s2_ptr],%g2
-       add     s2_ptr,4,s2_ptr
-       add     size,-1,size
+/* Add least significant limb separately to align RES_PTR and S2_PTR */
+       ld      [S1_PTR],%g4
+       add     S1_PTR,4,S1_PTR
+       ld      [S2_PTR],%g2
+       add     S2_PTR,4,S2_PTR
+       add     SIZE,-1,SIZE
        subcc   %g4,%g2,%o4
-       st      %o4,[res_ptr]
-       add     res_ptr,4,res_ptr
-L_v1:  addx    %g0,%g0,%o4             ! save cy in register
-       cmp     size,2                  ! if size < 2 ...
-       bl      Lend2                   ! ... branch to tail code
+       st      %o4,[RES_PTR]
+       add     RES_PTR,4,RES_PTR
+LOC(v1):
+       addx    %g0,%g0,%o4             ! save cy in register
+       cmp     SIZE,2                  ! if SIZE < 2 ...
+       bl      LOC(end2)               ! ... branch to tail code
        subcc   %g0,%o4,%g0             ! restore cy
 
-       ld      [s1_ptr+0],%g4
-       addcc   size,-10,size
-       ld      [s1_ptr+4],%g1
-       ldd     [s2_ptr+0],%g2
-       blt     Lfin1
+       ld      [S1_PTR+0],%g4
+       addcc   SIZE,-10,SIZE
+       ld      [S1_PTR+4],%g1
+       ldd     [S2_PTR+0],%g2
+       blt     LOC(fin1)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop1: subxcc  %g4,%g2,%o4
-       ld      [s1_ptr+8],%g4
+LOC(loop1):
+       subxcc  %g4,%g2,%o4
+       ld      [S1_PTR+8],%g4
        subxcc  %g1,%g3,%o5
-       ld      [s1_ptr+12],%g1
-       ldd     [s2_ptr+8],%g2
-       std     %o4,[res_ptr+0]
+       ld      [S1_PTR+12],%g1
+       ldd     [S2_PTR+8],%g2
+       std     %o4,[RES_PTR+0]
        subxcc  %g4,%g2,%o4
-       ld      [s1_ptr+16],%g4
+       ld      [S1_PTR+16],%g4
        subxcc  %g1,%g3,%o5
-       ld      [s1_ptr+20],%g1
-       ldd     [s2_ptr+16],%g2
-       std     %o4,[res_ptr+8]
+       ld      [S1_PTR+20],%g1
+       ldd     [S2_PTR+16],%g2
+       std     %o4,[RES_PTR+8]
        subxcc  %g4,%g2,%o4
-       ld      [s1_ptr+24],%g4
+       ld      [S1_PTR+24],%g4
        subxcc  %g1,%g3,%o5
-       ld      [s1_ptr+28],%g1
-       ldd     [s2_ptr+24],%g2
-       std     %o4,[res_ptr+16]
+       ld      [S1_PTR+28],%g1
+       ldd     [S2_PTR+24],%g2
+       std     %o4,[RES_PTR+16]
        subxcc  %g4,%g2,%o4
-       ld      [s1_ptr+32],%g4
+       ld      [S1_PTR+32],%g4
        subxcc  %g1,%g3,%o5
-       ld      [s1_ptr+36],%g1
-       ldd     [s2_ptr+32],%g2
-       std     %o4,[res_ptr+24]
+       ld      [S1_PTR+36],%g1
+       ldd     [S2_PTR+32],%g2
+       std     %o4,[RES_PTR+24]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       add     s1_ptr,32,s1_ptr
-       add     s2_ptr,32,s2_ptr
-       add     res_ptr,32,res_ptr
-       bge     Loop1
+       addcc   SIZE,-8,SIZE
+       add     S1_PTR,32,S1_PTR
+       add     S2_PTR,32,S2_PTR
+       add     RES_PTR,32,RES_PTR
+       bge     LOC(loop1)
        subcc   %g0,%o4,%g0             ! restore cy
 
-Lfin1: addcc   size,8-2,size
-       blt     Lend1
+LOC(fin1):
+       addcc   SIZE,8-2,SIZE
+       blt     LOC(end1)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 2 limbs until less than 2 limbs remain */
-Loope1:        subxcc  %g4,%g2,%o4
-       ld      [s1_ptr+8],%g4
+LOC(loope1):
+       subxcc  %g4,%g2,%o4
+       ld      [S1_PTR+8],%g4
        subxcc  %g1,%g3,%o5
-       ld      [s1_ptr+12],%g1
-       ldd     [s2_ptr+8],%g2
-       std     %o4,[res_ptr+0]
+       ld      [S1_PTR+12],%g1
+       ldd     [S2_PTR+8],%g2
+       std     %o4,[RES_PTR+0]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-2,size
-       add     s1_ptr,8,s1_ptr
-       add     s2_ptr,8,s2_ptr
-       add     res_ptr,8,res_ptr
-       bge     Loope1
+       addcc   SIZE,-2,SIZE
+       add     S1_PTR,8,S1_PTR
+       add     S2_PTR,8,S2_PTR
+       add     RES_PTR,8,RES_PTR
+       bge     LOC(loope1)
        subcc   %g0,%o4,%g0             ! restore cy
-Lend1: subxcc  %g4,%g2,%o4
+LOC(end1):
+       subxcc  %g4,%g2,%o4
        subxcc  %g1,%g3,%o5
-       std     %o4,[res_ptr+0]
+       std     %o4,[RES_PTR+0]
        addx    %g0,%g0,%o4             ! save cy in register
 
-       andcc   size,1,%g0
-       be      Lret1
+       andcc   SIZE,1,%g0
+       be      LOC(ret1)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add last limb */
-       ld      [s1_ptr+8],%g4
-       ld      [s2_ptr+8],%g2
+       ld      [S1_PTR+8],%g4
+       ld      [S2_PTR+8],%g2
        subxcc  %g4,%g2,%o4
-       st      %o4,[res_ptr+8]
+       st      %o4,[RES_PTR+8]
 
-Lret1: retl
+LOC(ret1):
+       retl
        addx    %g0,%g0,%o0     ! return carry-out from most sign. limb
 
-L1:    xor     s1_ptr,res_ptr,%g1
+LOC(1):        xor     S1_PTR,RES_PTR,%g1
        andcc   %g1,4,%g0
-       bne     L2
+       bne     LOC(2)
        nop
 ! **  V1b  **
-       andcc   res_ptr,4,%g0           ! res_ptr unaligned? Side effect: cy=0
-       be      L_v1b                   ! if no, branch
+       andcc   RES_PTR,4,%g0           ! RES_PTR unaligned? Side effect: cy=0
+       be      LOC(v1b)                ! if no, branch
        nop
-/* Add least significant limb separately to align res_ptr and s1_ptr */
-       ld      [s2_ptr],%g4
-       add     s2_ptr,4,s2_ptr
-       ld      [s1_ptr],%g2
-       add     s1_ptr,4,s1_ptr
-       add     size,-1,size
+/* Add least significant limb separately to align RES_PTR and S1_PTR */
+       ld      [S2_PTR],%g4
+       add     S2_PTR,4,S2_PTR
+       ld      [S1_PTR],%g2
+       add     S1_PTR,4,S1_PTR
+       add     SIZE,-1,SIZE
        subcc   %g2,%g4,%o4
-       st      %o4,[res_ptr]
-       add     res_ptr,4,res_ptr
-L_v1b: addx    %g0,%g0,%o4             ! save cy in register
-       cmp     size,2                  ! if size < 2 ...
-       bl      Lend2                   ! ... branch to tail code
+       st      %o4,[RES_PTR]
+       add     RES_PTR,4,RES_PTR
+LOC(v1b):
+       addx    %g0,%g0,%o4             ! save cy in register
+       cmp     SIZE,2                  ! if SIZE < 2 ...
+       bl      LOC(end2)               ! ... branch to tail code
        subcc   %g0,%o4,%g0             ! restore cy
 
-       ld      [s2_ptr+0],%g4
-       addcc   size,-10,size
-       ld      [s2_ptr+4],%g1
-       ldd     [s1_ptr+0],%g2
-       blt     Lfin1b
+       ld      [S2_PTR+0],%g4
+       addcc   SIZE,-10,SIZE
+       ld      [S2_PTR+4],%g1
+       ldd     [S1_PTR+0],%g2
+       blt     LOC(fin1b)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop1b:        subxcc  %g2,%g4,%o4
-       ld      [s2_ptr+8],%g4
+LOC(loop1b):
+       subxcc  %g2,%g4,%o4
+       ld      [S2_PTR+8],%g4
        subxcc  %g3,%g1,%o5
-       ld      [s2_ptr+12],%g1
-       ldd     [s1_ptr+8],%g2
-       std     %o4,[res_ptr+0]
+       ld      [S2_PTR+12],%g1
+       ldd     [S1_PTR+8],%g2
+       std     %o4,[RES_PTR+0]
        subxcc  %g2,%g4,%o4
-       ld      [s2_ptr+16],%g4
+       ld      [S2_PTR+16],%g4
        subxcc  %g3,%g1,%o5
-       ld      [s2_ptr+20],%g1
-       ldd     [s1_ptr+16],%g2
-       std     %o4,[res_ptr+8]
+       ld      [S2_PTR+20],%g1
+       ldd     [S1_PTR+16],%g2
+       std     %o4,[RES_PTR+8]
        subxcc  %g2,%g4,%o4
-       ld      [s2_ptr+24],%g4
+       ld      [S2_PTR+24],%g4
        subxcc  %g3,%g1,%o5
-       ld      [s2_ptr+28],%g1
-       ldd     [s1_ptr+24],%g2
-       std     %o4,[res_ptr+16]
+       ld      [S2_PTR+28],%g1
+       ldd     [S1_PTR+24],%g2
+       std     %o4,[RES_PTR+16]
        subxcc  %g2,%g4,%o4
-       ld      [s2_ptr+32],%g4
+       ld      [S2_PTR+32],%g4
        subxcc  %g3,%g1,%o5
-       ld      [s2_ptr+36],%g1
-       ldd     [s1_ptr+32],%g2
-       std     %o4,[res_ptr+24]
+       ld      [S2_PTR+36],%g1
+       ldd     [S1_PTR+32],%g2
+       std     %o4,[RES_PTR+24]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       add     s1_ptr,32,s1_ptr
-       add     s2_ptr,32,s2_ptr
-       add     res_ptr,32,res_ptr
-       bge     Loop1b
+       addcc   SIZE,-8,SIZE
+       add     S1_PTR,32,S1_PTR
+       add     S2_PTR,32,S2_PTR
+       add     RES_PTR,32,RES_PTR
+       bge     LOC(loop1b)
        subcc   %g0,%o4,%g0             ! restore cy
 
-Lfin1b:        addcc   size,8-2,size
-       blt     Lend1b
+LOC(fin1b):
+       addcc   SIZE,8-2,SIZE
+       blt     LOC(end1b)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 2 limbs until less than 2 limbs remain */
-Loope1b:subxcc %g2,%g4,%o4
-       ld      [s2_ptr+8],%g4
+LOC(loope1b):
+       subxcc  %g2,%g4,%o4
+       ld      [S2_PTR+8],%g4
        subxcc  %g3,%g1,%o5
-       ld      [s2_ptr+12],%g1
-       ldd     [s1_ptr+8],%g2
-       std     %o4,[res_ptr+0]
+       ld      [S2_PTR+12],%g1
+       ldd     [S1_PTR+8],%g2
+       std     %o4,[RES_PTR+0]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-2,size
-       add     s1_ptr,8,s1_ptr
-       add     s2_ptr,8,s2_ptr
-       add     res_ptr,8,res_ptr
-       bge     Loope1b
+       addcc   SIZE,-2,SIZE
+       add     S1_PTR,8,S1_PTR
+       add     S2_PTR,8,S2_PTR
+       add     RES_PTR,8,RES_PTR
+       bge     LOC(loope1b)
        subcc   %g0,%o4,%g0             ! restore cy
-Lend1b:        subxcc  %g2,%g4,%o4
+LOC(end1b):
+       subxcc  %g2,%g4,%o4
        subxcc  %g3,%g1,%o5
-       std     %o4,[res_ptr+0]
+       std     %o4,[RES_PTR+0]
        addx    %g0,%g0,%o4             ! save cy in register
 
-       andcc   size,1,%g0
-       be      Lret1b
+       andcc   SIZE,1,%g0
+       be      LOC(ret1b)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add last limb */
-       ld      [s2_ptr+8],%g4
-       ld      [s1_ptr+8],%g2
+       ld      [S2_PTR+8],%g4
+       ld      [S1_PTR+8],%g2
        subxcc  %g2,%g4,%o4
-       st      %o4,[res_ptr+8]
+       st      %o4,[RES_PTR+8]
 
-Lret1b:        retl
+LOC(ret1b):
+       retl
        addx    %g0,%g0,%o0     ! return carry-out from most sign. limb
 
 ! **  V2  **
-/* If we come here, the alignment of s1_ptr and res_ptr as well as the
-   alignment of s2_ptr and res_ptr differ.  Since there are only two ways
+/* If we come here, the alignment of S1_PTR and RES_PTR as well as the
+   alignment of S2_PTR and RES_PTR differ.  Since there are only two ways
    things can be aligned (that we care about) we now know that the alignment
-   of s1_ptr and s2_ptr are the same.  */
+   of S1_PTR and S2_PTR are the same.  */
 
-L2:    cmp     size,1
-       be      Ljone
+LOC(2):        cmp     SIZE,1
+       be      LOC(jone)
        nop
-       andcc   s1_ptr,4,%g0            ! s1_ptr unaligned? Side effect: cy=0
-       be      L_v2                    ! if no, branch
+       andcc   S1_PTR,4,%g0            ! S1_PTR unaligned? Side effect: cy=0
+       be      LOC(v2)                 ! if no, branch
        nop
-/* Add least significant limb separately to align s1_ptr and s2_ptr */
-       ld      [s1_ptr],%g4
-       add     s1_ptr,4,s1_ptr
-       ld      [s2_ptr],%g2
-       add     s2_ptr,4,s2_ptr
-       add     size,-1,size
+/* Add least significant limb separately to align S1_PTR and S2_PTR */
+       ld      [S1_PTR],%g4
+       add     S1_PTR,4,S1_PTR
+       ld      [S2_PTR],%g2
+       add     S2_PTR,4,S2_PTR
+       add     SIZE,-1,SIZE
        subcc   %g4,%g2,%o4
-       st      %o4,[res_ptr]
-       add     res_ptr,4,res_ptr
+       st      %o4,[RES_PTR]
+       add     RES_PTR,4,RES_PTR
 
-L_v2:  addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       blt     Lfin2
+LOC(v2):
+       addx    %g0,%g0,%o4             ! save cy in register
+       addcc   SIZE,-8,SIZE
+       blt     LOC(fin2)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop2: ldd     [s1_ptr+0],%g2
-       ldd     [s2_ptr+0],%o4
+LOC(loop2):
+       ldd     [S1_PTR+0],%g2
+       ldd     [S2_PTR+0],%o4
        subxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+0]
+       st      %g2,[RES_PTR+0]
        subxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+4]
-       ldd     [s1_ptr+8],%g2
-       ldd     [s2_ptr+8],%o4
+       st      %g3,[RES_PTR+4]
+       ldd     [S1_PTR+8],%g2
+       ldd     [S2_PTR+8],%o4
        subxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+8]
+       st      %g2,[RES_PTR+8]
        subxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+12]
-       ldd     [s1_ptr+16],%g2
-       ldd     [s2_ptr+16],%o4
+       st      %g3,[RES_PTR+12]
+       ldd     [S1_PTR+16],%g2
+       ldd     [S2_PTR+16],%o4
        subxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+16]
+       st      %g2,[RES_PTR+16]
        subxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+20]
-       ldd     [s1_ptr+24],%g2
-       ldd     [s2_ptr+24],%o4
+       st      %g3,[RES_PTR+20]
+       ldd     [S1_PTR+24],%g2
+       ldd     [S2_PTR+24],%o4
        subxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+24]
+       st      %g2,[RES_PTR+24]
        subxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+28]
+       st      %g3,[RES_PTR+28]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-8,size
-       add     s1_ptr,32,s1_ptr
-       add     s2_ptr,32,s2_ptr
-       add     res_ptr,32,res_ptr
-       bge     Loop2
+       addcc   SIZE,-8,SIZE
+       add     S1_PTR,32,S1_PTR
+       add     S2_PTR,32,S2_PTR
+       add     RES_PTR,32,RES_PTR
+       bge     LOC(loop2)
        subcc   %g0,%o4,%g0             ! restore cy
 
-Lfin2: addcc   size,8-2,size
-       blt     Lend2
+LOC(fin2):
+       addcc   SIZE,8-2,SIZE
+       blt     LOC(end2)
        subcc   %g0,%o4,%g0             ! restore cy
-Loope2:        ldd     [s1_ptr+0],%g2
-       ldd     [s2_ptr+0],%o4
+LOC(loope2):
+       ldd     [S1_PTR+0],%g2
+       ldd     [S2_PTR+0],%o4
        subxcc  %g2,%o4,%g2
-       st      %g2,[res_ptr+0]
+       st      %g2,[RES_PTR+0]
        subxcc  %g3,%o5,%g3
-       st      %g3,[res_ptr+4]
+       st      %g3,[RES_PTR+4]
        addx    %g0,%g0,%o4             ! save cy in register
-       addcc   size,-2,size
-       add     s1_ptr,8,s1_ptr
-       add     s2_ptr,8,s2_ptr
-       add     res_ptr,8,res_ptr
-       bge     Loope2
+       addcc   SIZE,-2,SIZE
+       add     S1_PTR,8,S1_PTR
+       add     S2_PTR,8,S2_PTR
+       add     RES_PTR,8,RES_PTR
+       bge     LOC(loope2)
        subcc   %g0,%o4,%g0             ! restore cy
-Lend2: andcc   size,1,%g0
-       be      Lret2
+LOC(end2):
+       andcc   SIZE,1,%g0
+       be      LOC(ret2)
        subcc   %g0,%o4,%g0             ! restore cy
 /* Add last limb */
-Ljone: ld      [s1_ptr],%g4
-       ld      [s2_ptr],%g2
+LOC(jone):
+       ld      [S1_PTR],%g4
+       ld      [S2_PTR],%g2
        subxcc  %g4,%g2,%o4
-       st      %o4,[res_ptr]
+       st      %o4,[RES_PTR]
 
-Lret2: retl
+LOC(ret2):
+       retl
        addx    %g0,%g0,%o0     ! return carry-out from most sign. limb
+
+END(__mpn_sub_n)
index a8ebd50..805699b 100644 (file)
@@ -1,20 +1,20 @@
 ! SPARC __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
 ! the result from a second limb vector.
-
-! Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
-
+!
+! Copyright (C) 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
 
 ! INPUT PARAMETERS
-! res_ptr      o0
-! s1_ptr       o1
-! size         o2
-! s2_limb      o3
+! RES_PTR      o0
+! S1_PTR       o1
+! SIZE         o2
+! S2_LIMB      o3
 
-#include "sysdep.h"
+#include <sysdep.h>
 
-.text
-       .align 4
-       .global C_SYMBOL_NAME(__mpn_submul_1)
-C_SYMBOL_NAME(__mpn_submul_1):
+ENTRY(__mpn_submul_1)
        ! Make S1_PTR and RES_PTR point at the end of their blocks
        ! and put (- 4 x SIZE) in index/loop counter.
        sll     %o2,2,%o2
@@ -41,19 +38,19 @@ C_SYMBOL_NAME(__mpn_submul_1):
        sub     %g0,%o2,%o2
 
        cmp     %o3,0xfff
-       bgu     Large
+       bgu     LOC(large)
        nop
 
        ld      [%o1+%o2],%o5
        mov     0,%o0
-       b       L0
+       b       LOC(0)
         add    %o4,-4,%o4
-Loop0:
+LOC(loop0):
        subcc   %o5,%g1,%g1
        ld      [%o1+%o2],%o5
        addx    %o0,%g0,%o0
        st      %g1,[%o4+%o2]
-L0:    wr      %g0,%o3,%y
+LOC(0):        wr      %g0,%o3,%y
        sra     %o5,31,%g2
        and     %o3,%g2,%g2
        andcc   %g1,0,%g1
@@ -79,7 +76,7 @@ L0:   wr      %g0,%o3,%y
        addcc   %g1,%o0,%g1
        addx    %g2,%g4,%o0     ! add sign-compensation and cy to hi limb
        addcc   %o2,4,%o2       ! loop counter
-       bne     Loop0
+       bne     LOC(loop0)
         ld     [%o4+%o2],%o5
 
        subcc   %o5,%g1,%g1
@@ -88,17 +85,18 @@ L0: wr      %g0,%o3,%y
        st      %g1,[%o4+%o2]
 
 
-Large: ld      [%o1+%o2],%o5
+LOC(large):
+       ld      [%o1+%o2],%o5
        mov     0,%o0
        sra     %o3,31,%g4      ! g4 = mask of ones iff S2_LIMB < 0
-       b       L1
+       b       LOC(1)
         add    %o4,-4,%o4
-Loop:
+LOC(loop):
        subcc   %o5,%g3,%g3
        ld      [%o1+%o2],%o5
        addx    %o0,%g0,%o0
        st      %g3,[%o4+%o2]
-L1:    wr      %g0,%o5,%y
+LOC(1):        wr      %g0,%o5,%y
        and     %o5,%g4,%g2
        andcc   %g0,%g0,%g1
        mulscc  %g1,%o3,%g1
@@ -138,10 +136,12 @@ L1:       wr      %g0,%o5,%y
        addcc   %g3,%o0,%g3
        addx    %g2,%g1,%o0
        addcc   %o2,4,%o2
-       bne     Loop
+       bne     LOC(loop)
         ld     [%o4+%o2],%o5
 
        subcc   %o5,%g3,%g3
        addx    %o0,%g0,%o0
        retl
        st      %g3,[%o4+%o2]
+
+END(__mpn_submul_1)
index 4a7d152..0dd48f3 100644 (file)
 
 
 
-#include "sysdep.h"
-#ifdef __linux__
-#include <asm/traps.h>
-#else
-#ifdef __svr4__
+#include <sysdep.h>
 #include <sys/trap.h>
-#else
-#include <machine/trap.h>
-#endif
-#endif
 
 ENTRY(.udiv)
 
@@ -63,11 +55,11 @@ ENTRY(.udiv)
 
 1:
        cmp     %o3, %o5                        ! if %o1 exceeds %o0, done
-       blu     Lgot_result             ! (and algorithm fails otherwise)
+       blu     LOC(got_result)         ! (and algorithm fails otherwise)
        clr     %o2
        sethi   %hi(1 << (32 - 4 - 1)), %g1
        cmp     %o3, %g1
-       blu     Lnot_really_big
+       blu     LOC(not_really_big)
        clr     %o4
 
        ! Here the dividend is >= 2**(31-N) or so.  We must be careful here,
@@ -78,15 +70,15 @@ ENTRY(.udiv)
        1:
                cmp     %o5, %g1
                bgeu    3f
-               mov     1, %g7
+               mov     1, %g2
                sll     %o5, 4, %o5
                b       1b
                add     %o4, 1, %o4
 
-       ! Now compute %g7.
+       ! Now compute %g2.
        2:      addcc   %o5, %o5, %o5
-               bcc     Lnot_too_big
-               add     %g7, 1, %g7
+               bcc     LOC(not_too_big)
+               add     %g2, 1, %g2
 
                ! We get here if the %o1 overflowed while shifting.
                ! This means that %o3 has the high-order bit set.
@@ -94,20 +86,20 @@ ENTRY(.udiv)
                sll     %g1, 4, %g1     ! high order bit
                srl     %o5, 1, %o5             ! rest of %o5
                add     %o5, %g1, %o5
-               b       Ldo_single_div
-               sub     %g7, 1, %g7
+               b       LOC(do_single_div)
+               sub     %g2, 1, %g2
 
-       Lnot_too_big:
+       LOC(not_too_big):
        3:      cmp     %o5, %o3
                blu     2b
                nop
-               be      Ldo_single_div
+               be      LOC(do_single_div)
                nop
        /* NB: these are commented out in the V8-Sparc manual as well */
        /* (I do not understand this) */
        ! %o5 > %o3: went too far: back up 1 step
        !       srl     %o5, 1, %o5
-       !       dec     %g7
+       !       dec     %g2
        ! do single-bit divide steps
        !
        ! We have to be careful here.  We know that %o3 >= %o5, so we can do the
@@ -116,15 +108,15 @@ ENTRY(.udiv)
        ! order bit set in the first step, just falling into the regular
        ! division loop will mess up the first time around.
        ! So we unroll slightly...
-       Ldo_single_div:
-               subcc   %g7, 1, %g7
-               bl      Lend_regular_divide
+       LOC(do_single_div):
+               subcc   %g2, 1, %g2
+               bl      LOC(end_regular_divide)
                nop
                sub     %o3, %o5, %o3
                mov     1, %o2
-               b       Lend_single_divloop
+               b       LOC(end_single_divloop)
                nop
-       Lsingle_divloop:
+       LOC(single_divloop):
                sll     %o2, 1, %o2
                bl      1f
                srl     %o5, 1, %o5
@@ -136,217 +128,219 @@ ENTRY(.udiv)
                add     %o3, %o5, %o3
                sub     %o2, 1, %o2
        2:
-       Lend_single_divloop:
-               subcc   %g7, 1, %g7
-               bge     Lsingle_divloop
+       LOC(end_single_divloop):
+               subcc   %g2, 1, %g2
+               bge     LOC(single_divloop)
                tst     %o3
-               b,a     Lend_regular_divide
+               b,a     LOC(end_regular_divide)
 
-Lnot_really_big:
+LOC(not_really_big):
 1:
        sll     %o5, 4, %o5
        cmp     %o5, %o3
        bleu    1b
        addcc   %o4, 1, %o4
-       be      Lgot_result
+       be      LOC(got_result)
        sub     %o4, 1, %o4
 
        tst     %o3     ! set up for initial iteration
-Ldivloop:
+LOC(divloop):
        sll     %o2, 4, %o2
                ! depth 1, accumulated bits 0
-       bl      L.1.16
+       bl      LOC(1.16)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits 1
-       bl      L.2.17
+       bl      LOC(2.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 3
-       bl      L.3.19
+       bl      LOC(3.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 7
-       bl      L.4.23
+       bl      LOC(4.23)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2+1), %o2
-
-L.4.23:
+       
+LOC(4.23):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2-1), %o2
-
-
-L.3.19:
+       
+       
+LOC(3.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 5
-       bl      L.4.21
+       bl      LOC(4.21)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2+1), %o2
-
-L.4.21:
+       
+LOC(4.21):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2-1), %o2
-
-
-
-L.2.17:
+       
+       
+       
+LOC(2.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 1
-       bl      L.3.17
+       bl      LOC(3.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 3
-       bl      L.4.19
+       bl      LOC(4.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2+1), %o2
-
-L.4.19:
+       
+LOC(4.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2-1), %o2
-
-
-L.3.17:
+       
+       
+LOC(3.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 1
-       bl      L.4.17
+       bl      LOC(4.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2+1), %o2
-
-L.4.17:
+       
+LOC(4.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2-1), %o2
-
-
-
-
-L.1.16:
+       
+       
+       
+       
+LOC(1.16):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits -1
-       bl      L.2.15
+       bl      LOC(2.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -1
-       bl      L.3.15
+       bl      LOC(3.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -1
-       bl      L.4.15
+       bl      LOC(4.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2+1), %o2
-
-L.4.15:
+       
+LOC(4.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2-1), %o2
-
-
-L.3.15:
+       
+       
+LOC(3.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -3
-       bl      L.4.13
+       bl      LOC(4.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2+1), %o2
-
-L.4.13:
+       
+LOC(4.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2-1), %o2
-
-
-
-L.2.15:
+       
+       
+       
+LOC(2.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -3
-       bl      L.3.13
+       bl      LOC(3.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -5
-       bl      L.4.11
+       bl      LOC(4.11)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2+1), %o2
-
-L.4.11:
+       
+LOC(4.11):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2-1), %o2
-
-
-L.3.13:
+       
+       
+LOC(3.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -7
-       bl      L.4.9
+       bl      LOC(4.9)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2+1), %o2
-
-L.4.9:
+       
+LOC(4.9):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2-1), %o2
-
-
-
-
+       
+       
+       
+       
        9:
-Lend_regular_divide:
+LOC(end_regular_divide):
        subcc   %o4, 1, %o4
-       bge     Ldivloop
+       bge     LOC(divloop)
        tst     %o3
-       bl,a    Lgot_result
+       bl,a    LOC(got_result)
        ! non-restoring fixup here (one instruction only!)
        sub     %o2, 1, %o2
 
 
-Lgot_result:
+LOC(got_result):
 
        retl
        mov %o2, %o0
+
+END(.udiv)
index 5b67f87..2fbb8a5 100644 (file)
@@ -1,50 +1,52 @@
 ! SPARC  __udiv_qrnnd division support, used from longlong.h.
-
+!
 ! Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
-
+!
 ! This file is part of the GNU MP Library.
-
+!
 ! The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to
 ! the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
+!
 ! Added PIC support - May/96, Miguel de Icaza
-
+!
 ! INPUT PARAMETERS
 ! rem_ptr      i0
 ! n1           i1
 ! n0           i2
 ! d            i3
 
-#include "sysdep.h"
+#include <sysdep.h>
 #undef ret     /* Kludge for glibc */
 
+#ifdef PIC
        .text
+#else
+       .section .rodata,#alloc
+#endif
        .align  8
 
        .type two_to_32,@object
+       .size two_to_32,8
 two_to_32:
        .double 0r4294967296
-       .size two_to_32,8
 
        .type two_to_31,@object
+       .size two_to_31,8
 two_to_31:
        .double 0r2147483648
-       .size two_to_31,8
 
-       .align  4
-       .global __udiv_qrnnd
-       .type   __udiv_qrnnd,@function
+       .text
 ENTRY(__udiv_qrnnd)
        !#PROLOGUE# 0
        save    %sp,-104,%sp
@@ -52,57 +54,58 @@ ENTRY(__udiv_qrnnd)
        st      %i1,[%fp-8]
        ld      [%fp-8],%f10
 #ifdef PIC
-.Lbase:        call    1f
+LOC(base):
+       call    1f
        fitod   %f10,%f4
-1:     ldd     [%o7-(.Lbase-two_to_32)],%f8
+1:     ldd     [%o7-(LOC(base)-two_to_32)],%f8
 #else
        sethi   %hi(two_to_32),%o7
        fitod   %f10,%f4
        ldd     [%o7+%lo(two_to_32)],%f8
 #endif
        cmp     %i1,0
-       bge     L248
+       bge     LOC(248)
        mov     %i0,%i5
        faddd   %f4,%f8,%f4
-.L248:
+LOC(248):
        st      %i2,[%fp-8]
        ld      [%fp-8],%f10
        fmuld   %f4,%f8,%f6
        cmp     %i2,0
-       bge     L249
+       bge     LOC(249)
        fitod   %f10,%f2
        faddd   %f2,%f8,%f2
-.L249:
+LOC(249):
        st      %i3,[%fp-8]
        faddd   %f6,%f2,%f2
        ld      [%fp-8],%f10
        cmp     %i3,0
-       bge     L250
+       bge     LOC(250)
        fitod   %f10,%f4
        faddd   %f4,%f8,%f4
-.L250:
+LOC(250):
        fdivd   %f2,%f4,%f2
 #ifdef PIC
-       ldd     [%o7-(.Lbase-two_to_31)],%f4
+       ldd     [%o7-(LOC(base)-two_to_31)],%f4
 #else
        sethi   %hi(two_to_31),%o7
        ldd     [%o7+%lo(two_to_31)],%f4
 #endif
        fcmped  %f2,%f4
        nop
-       fbge,a  L251
+       fbge,a  LOC(251)
        fsubd   %f2,%f4,%f2
        fdtoi   %f2,%f2
        st      %f2,[%fp-8]
-       b       L252
+       b       LOC(252)
        ld      [%fp-8],%i4
-.L251:
+LOC(251):
        fdtoi   %f2,%f2
        st      %f2,[%fp-8]
        ld      [%fp-8],%i4
        sethi   %hi(-2147483648),%g2
        xor     %i4,%g2,%i4
-.L252:
+LOC(252):
        wr      %g0,%i4,%y
        sra     %i3,31,%g2
        and     %i4,%g2,%g2
@@ -144,7 +147,7 @@ ENTRY(__udiv_qrnnd)
        rd      %y,%g3
        subcc   %i2,%g3,%o7
        subxcc  %i1,%i0,%g0
-       be      L253
+       be      LOC(253)
        cmp     %o7,%i3
 
        add     %i4,-1,%i0
@@ -152,14 +155,14 @@ ENTRY(__udiv_qrnnd)
        st      %o7,[%i5]
        ret
        restore
-.L253:
-       blu     L246
+LOC(253):
+       blu     LOC(246)
        mov     %i4,%i0
        add     %i4,1,%i0
        sub     %o7,%i3,%o7
-.L246:
+LOC(246):
        st      %o7,[%i5]
        ret
        restore
 
-       .size   __udiv_qrnnd, .-__udiv_qrnnd
+END(__udiv_qrnnd)
index 7a26c29..096554a 100644 (file)
  *     bnz     overflow        (or tnz)
  */
 
-#include "DEFS.h"
-FUNC(.umul)
+#include <sysdep.h>
+
+ENTRY(.umul)
        or      %o0, %o1, %o4
-       mov     %o0, %y         ! multiplier -> Y
-       andncc  %o4, 0xfff, %g0 ! test bits 12..31 of *both* args
-       be      Lmul_shortway   ! if zero, can do it the short way
-       andcc   %g0, %g0, %o4   ! zero the partial product and clear N and V
+       mov     %o0, %y                 ! multiplier -> Y
+       andncc  %o4, 0xfff, %g0         ! test bits 12..31 of *both* args
+       be      LOC(mul_shortway)       ! if zero, can do it the short way
+        andcc  %g0, %g0, %o4           ! zero the partial product; clear N & V
 
        /*
         * Long multiply.  32 steps, followed by a final shift step.
@@ -59,7 +60,6 @@ FUNC(.umul)
        mulscc  %o4, %o1, %o4   ! 32
        mulscc  %o4, %g0, %o4   ! final shift
 
-
        /*
         * Normally, with the shift-and-add approach, if both numbers are
         * positive you get the correct result.  With 32-bit two's-complement
@@ -97,20 +97,20 @@ FUNC(.umul)
 #if 0
        tst     %o1
        bl,a    1f              ! if %o1 < 0 (high order bit = 1),
-       add     %o4, %o0, %o4   ! %o4 += %o0 (add y to upper half)
+        add    %o4, %o0, %o4   ! %o4 += %o0 (add y to upper half)
 1:     rd      %y, %o0         ! get lower half of product
        retl
-       addcc   %o4, %g0, %o1   ! put upper half in place and set Z for %o1==0
+        addcc  %o4, %g0, %o1   ! put upper half in place and set Z for %o1==0
 #else
        /* Faster code from tege@sics.se.  */
        sra     %o1, 31, %o2    ! make mask from sign bit
        and     %o0, %o2, %o2   ! %o2 = 0 or %o0, depending on sign of %o1
        rd      %y, %o0         ! get lower half of product
        retl
-       addcc   %o4, %o2, %o1   ! add compensation and put upper half in place
+        addcc  %o4, %o2, %o1   ! add compensation and put upper half in place
 #endif
 
-Lmul_shortway:
+LOC(mul_shortway):
        /*
         * Short multiply.  12 steps, followed by a final shift step.
         * The resulting bits are off by 12 and (32-12) = 20 bit positions,
@@ -150,4 +150,6 @@ Lmul_shortway:
        srl     %o5, 20, %o5    ! shift low bits right 20
        or      %o5, %o0, %o0
        retl
-       addcc   %g0, %g0, %o1   ! %o1 = zero, and set Z
+        addcc  %g0, %g0, %o1   ! %o1 = zero, and set Z
+
+END(.umul)
index e72c33d..5644e7a 100644 (file)
 
 
 
-#include "sysdep.h"
-#ifdef __linux__
-#include <asm/traps.h>
-#else
-#ifdef __svr4__
+#include <sysdep.h>
 #include <sys/trap.h>
-#else
-#include <machine/trap.h>
-#endif
-#endif
 
 ENTRY(.urem)
 
@@ -63,11 +55,11 @@ ENTRY(.urem)
 
 1:
        cmp     %o3, %o5                        ! if %o1 exceeds %o0, done
-       blu     Lgot_result             ! (and algorithm fails otherwise)
+       blu     LOC(got_result)         ! (and algorithm fails otherwise)
        clr     %o2
        sethi   %hi(1 << (32 - 4 - 1)), %g1
        cmp     %o3, %g1
-       blu     Lnot_really_big
+       blu     LOC(not_really_big)
        clr     %o4
 
        ! Here the dividend is >= 2**(31-N) or so.  We must be careful here,
@@ -78,15 +70,15 @@ ENTRY(.urem)
        1:
                cmp     %o5, %g1
                bgeu    3f
-               mov     1, %g7
+               mov     1, %g2
                sll     %o5, 4, %o5
                b       1b
                add     %o4, 1, %o4
 
-       ! Now compute %g7.
+       ! Now compute %g2.
        2:      addcc   %o5, %o5, %o5
-               bcc     Lnot_too_big
-               add     %g7, 1, %g7
+               bcc     LOC(not_too_big)
+               add     %g2, 1, %g2
 
                ! We get here if the %o1 overflowed while shifting.
                ! This means that %o3 has the high-order bit set.
@@ -94,20 +86,20 @@ ENTRY(.urem)
                sll     %g1, 4, %g1     ! high order bit
                srl     %o5, 1, %o5             ! rest of %o5
                add     %o5, %g1, %o5
-               b       Ldo_single_div
-               sub     %g7, 1, %g7
+               b       LOC(do_single_div)
+               sub     %g2, 1, %g2
 
-       Lnot_too_big:
+       LOC(not_too_big):
        3:      cmp     %o5, %o3
                blu     2b
                nop
-               be      Ldo_single_div
+               be      LOC(do_single_div)
                nop
        /* NB: these are commented out in the V8-Sparc manual as well */
        /* (I do not understand this) */
        ! %o5 > %o3: went too far: back up 1 step
        !       srl     %o5, 1, %o5
-       !       dec     %g7
+       !       dec     %g2
        ! do single-bit divide steps
        !
        ! We have to be careful here.  We know that %o3 >= %o5, so we can do the
@@ -116,15 +108,15 @@ ENTRY(.urem)
        ! order bit set in the first step, just falling into the regular
        ! division loop will mess up the first time around.
        ! So we unroll slightly...
-       Ldo_single_div:
-               subcc   %g7, 1, %g7
-               bl      Lend_regular_divide
+       LOC(do_single_div):
+               subcc   %g2, 1, %g2
+               bl      LOC(end_regular_divide)
                nop
                sub     %o3, %o5, %o3
                mov     1, %o2
-               b       Lend_single_divloop
+               b       LOC(end_single_divloop)
                nop
-       Lsingle_divloop:
+       LOC(single_divloop):
                sll     %o2, 1, %o2
                bl      1f
                srl     %o5, 1, %o5
@@ -136,217 +128,219 @@ ENTRY(.urem)
                add     %o3, %o5, %o3
                sub     %o2, 1, %o2
        2:
-       Lend_single_divloop:
-               subcc   %g7, 1, %g7
-               bge     Lsingle_divloop
+       LOC(end_single_divloop):
+               subcc   %g2, 1, %g2
+               bge     LOC(single_divloop)
                tst     %o3
-               b,a     Lend_regular_divide
+               b,a     LOC(end_regular_divide)
 
-Lnot_really_big:
+LOC(not_really_big):
 1:
        sll     %o5, 4, %o5
        cmp     %o5, %o3
        bleu    1b
        addcc   %o4, 1, %o4
-       be      Lgot_result
+       be      LOC(got_result)
        sub     %o4, 1, %o4
 
        tst     %o3     ! set up for initial iteration
-Ldivloop:
+LOC(divloop):
        sll     %o2, 4, %o2
                ! depth 1, accumulated bits 0
-       bl      L.1.16
+       bl      LOC(1.16)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits 1
-       bl      L.2.17
+       bl      LOC(2.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 3
-       bl      L.3.19
+       bl      LOC(3.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 7
-       bl      L.4.23
+       bl      LOC(4.23)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2+1), %o2
-
-L.4.23:
+       
+LOC(4.23):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (7*2-1), %o2
-
-
-L.3.19:
+       
+       
+LOC(3.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 5
-       bl      L.4.21
+       bl      LOC(4.21)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2+1), %o2
-
-L.4.21:
+       
+LOC(4.21):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (5*2-1), %o2
-
-
-
-L.2.17:
+       
+       
+       
+LOC(2.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits 1
-       bl      L.3.17
+       bl      LOC(3.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 3
-       bl      L.4.19
+       bl      LOC(4.19)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2+1), %o2
-
-L.4.19:
+       
+LOC(4.19):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (3*2-1), %o2
-
-
-L.3.17:
+       
+       
+LOC(3.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits 1
-       bl      L.4.17
+       bl      LOC(4.17)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2+1), %o2
-
-L.4.17:
+       
+LOC(4.17):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (1*2-1), %o2
-
-
-
-
-L.1.16:
+       
+       
+       
+       
+LOC(1.16):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 2, accumulated bits -1
-       bl      L.2.15
+       bl      LOC(2.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -1
-       bl      L.3.15
+       bl      LOC(3.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -1
-       bl      L.4.15
+       bl      LOC(4.15)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2+1), %o2
-
-L.4.15:
+       
+LOC(4.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-1*2-1), %o2
-
-
-L.3.15:
+       
+       
+LOC(3.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -3
-       bl      L.4.13
+       bl      LOC(4.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2+1), %o2
-
-L.4.13:
+       
+LOC(4.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-3*2-1), %o2
-
-
-
-L.2.15:
+       
+       
+       
+LOC(2.15):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 3, accumulated bits -3
-       bl      L.3.13
+       bl      LOC(3.13)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -5
-       bl      L.4.11
+       bl      LOC(4.11)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2+1), %o2
-
-L.4.11:
+       
+LOC(4.11):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-5*2-1), %o2
-
-
-L.3.13:
+       
+       
+LOC(3.13):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                        ! depth 4, accumulated bits -7
-       bl      L.4.9
+       bl      LOC(4.9)
        srl     %o5,1,%o5
        ! remainder is positive
        subcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2+1), %o2
-
-L.4.9:
+       
+LOC(4.9):
        ! remainder is negative
        addcc   %o3,%o5,%o3
                b       9f
                add     %o2, (-7*2-1), %o2
-
-
-
-
+       
+       
+       
+       
        9:
-Lend_regular_divide:
+LOC(end_regular_divide):
        subcc   %o4, 1, %o4
-       bge     Ldivloop
+       bge     LOC(divloop)
        tst     %o3
-       bl,a    Lgot_result
+       bl,a    LOC(got_result)
        ! non-restoring fixup here (one instruction only!)
        add     %o3, %o1, %o3
 
 
-Lgot_result:
+LOC(got_result):
 
        retl
        mov %o3, %o0
+
+END(.urem)
index eb46ba9..e302f4a 100644 (file)
@@ -220,6 +220,13 @@ elf_machine_lazy_rel (struct link_map *map, const Elf64_Rela *reloc)
 /* The SPARC overlaps DT_RELA and DT_PLTREL.  */
 #define ELF_MACHINE_PLTREL_OVERLAP 1
 
+/* The return value from dl-runtime's fixup, if it should be special.  */
+#define ELF_FIXUP_RETURN_VALUE(map, result)                            \
+  ((map)->l_info[DT_SPARC(PLTFMT)]                                     \
+   && (map)->l_info[DT_SPARC(PLTFMT)]->d_un.d_val == 2                 \
+   ? (result) + (map)->l_info[DT_PLTGOT]->d_un.d_ptr + (map)->l_addr   \
+   : (result))
+
 /* Set up the loaded object described by L so its unrelocated PLT
    entries will jump to the on-demand fixup code in dl-runtime.c.  */
 
@@ -232,10 +239,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
   if (l->l_info[DT_JMPREL] && lazy)
     {
       got = (Elf64_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);
-      got[1] = (Elf64_Addr) l;  /* Identify this shared object.  */
       /* This function will get called to fix up the GOT entry indicated by
          the offset on the stack, and then jump to the resolved address.  */
-      got[2] = (Elf64_Addr) &_dl_runtime_resolve;
+      got[1] = (Elf64_Addr) &_dl_runtime_resolve;
+      got[2] = (Elf64_Addr) l;  /* Identify this shared object.  */
     }
 
   return lazy;
@@ -248,9 +255,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
        .type _dl_runtime_resolve, @function
 _dl_runtime_resolve:
        save %sp, -160, %sp
-       mov %g5, %o0
+       mov %g1, %o0
        call fixup
-        mov %g6, %o1
+        mov %g2, %o1
        jmp %o0
         restore
        .size _dl_runtime_resolve, .-_dl_runtime_resolve
index fd8abb1..bedc034 100644 (file)
 
 /* Now two recommended cw */
 
-/* Linux default:
+/* Linux and IEEE default:
      - extended precision
      - rounding to nearest
      - no exceptions  */
 #define _FPU_DEFAULT  0x0
-
-/* IEEE:  same as above  */
 #define _FPU_IEEE     0x0
 
 /* Type of the control word.  */
index 20d7f01..d76f481 100644 (file)
@@ -311,11 +311,11 @@ static inline void set_segment(
 
   /* Now, reload all segment registers so the limit takes effect. */
 
-  asm volatile( "movw %%ds,%0 ; movw %0,%%ds
-                movw %%es,%0 ; movw %0,%%es
-                movw %%fs,%0 ; movw %0,%%fs
-                movw %%gs,%0 ; movw %0,%%gs
-                movw %%ss,%0 ; movw %0,%%ss"
+  asm volatile( "movw %%ds,%0 ; movw %0,%%ds\n"
+               "movw %%es,%0 ; movw %0,%%es\n"
+               "movw %%fs,%0 ; movw %0,%%fs\n"
+               "movw %%gs,%0 ; movw %0,%%gs\n"
+               "movw %%ss,%0 ; movw %0,%%ss"
                   : "=r" (tmp_segment)
                   : "0"  (tmp_segment)
              );
index ba8db2b..253d5d9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
    On-Line Applications Research Corporation.
@@ -157,10 +157,10 @@ struct i80960ca_ctltbl {
 
 #define clear_intr( xint ) \
  { register unsigned32 _xint=(xint); \
-   asm volatile( "loop_til_cleared:
-                    clrbit %0,sf0,sf0 ; \
-                    bbs    %0,sf0,loop_til_cleared" \
-                  : "=d" (_xint) : "0" (_xint) ); \
+   asm volatile( "loop_til_cleared:" \
+                 "  clrbit %0,sf0,sf0 ;" \
+                 "  bbs    %0,sf0,loop_til_cleared" \
+                 : "=d" (_xint) : "0" (_xint) ); \
  }
 
 #define reload_ctl_group( group ) \
index cbb5fa8..cebb9c1 100644 (file)
@@ -50,7 +50,7 @@ static void
 init (int argc, char **argv, char **envp)
 {
   extern int __personality (int);
-  extern void __getopt_clean_environment (void);
+  extern void __getopt_clean_environment (char **);
 
   /* We must not call `personality' twice.  */
   if (!__libc_multiple_libcs)
@@ -74,7 +74,7 @@ init (int argc, char **argv, char **envp)
   __libc_init (argc, argv, envp);
 
   /* This is a hack to make the special getopt in GNU libc working.  */
-  __getopt_clean_environment ();
+  __getopt_clean_environment (envp);
 
 #ifdef PIC
   __libc_global_ctors ();
index a639511..8e88a3f 100644 (file)
@@ -74,24 +74,19 @@ ENTRY(____sparc_signal_trampoline)
 1:
 #ifdef PIC
        /* Save return address */
-       mov     %o7,%o4
-___sxx:
-       call    ___syy
-       nop
-___syy:
-       sethi   %hi(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5
-       or      %o5,%lo(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5
-       add     %o7,%o5,%o5
+       mov     %o7,%o5
+11:    call    12f
+        sethi  %hi(_GLOBAL_OFFSET_TABLE_-(11b-.)),%o4
+12:    or      %o5,%lo(_GLOBAL_OFFSET_TABLE_-(11b-.)),%o4
+       add     %o7,%o4,%o4
        /* restore return address */
-       mov     %o4,%o7
-       mov     %o5,%o4
+       mov     %o5,%o7
        /* o4 has the GOT pointer */
 #endif
        sethi   %hi(C_SYMBOL_NAME(____sig_table)),%o5
        or      %o5,%lo(C_SYMBOL_NAME(____sig_table)),%o5
 #ifdef PIC
-       add     %o5,%o4,%o4
-       ld      [%o4],%o5
+       ld      [%o4+%o5], %o5
 #endif
        sll     %o0,2,%o4
        add     %o5,%o4,%o4
@@ -141,3 +136,5 @@ ___syy:
        /* if we return, sysreturn failed */
        mov     SYS_ify(exit),%g1
        t       0x10
+
+END(____sparc_signal_trampoline)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c b/sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize.c
new file mode 100644 (file)
index 0000000..e04e926
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <unistd.h>
+#include <sys/param.h>
+
+/* Return the system page size.  This value will either be 4k or 8k depending
+   on whether or not we are running on Sparc v9 machine.  */
+
+/* If we are not a static program, this value is collected from the system
+   via the AT_PAGESZ auxiliary argument.  If we are a static program, we
+   have to guess.  We should _really_ get Linux a proper sysconf()...  */
+
+extern size_t _dl_pagesize;
+
+int
+__getpagesize ()
+{
+  if (_dl_pagesize == 0)
+    _dl_pagesize = EXEC_PAGESIZE;
+  return _dl_pagesize;
+}
+
+weak_alias (__getpagesize, getpagesize)
index 39822fc..9bbe6bc 100644 (file)
    This is done in one of two ways: either in the stack context
    of program start, or having dlopen pass them in.  */
 
-#define SYSDEP_CALL_INIT(NAME, INIT)                                         \
-void NAME (void *arg)                                                        \
-{                                                                            \
-  int argc;                                                                  \
-  char **argv, **envp;                                                       \
-  /* The next variable is only here to work around a bug in gcc <= 2.7.2.2.   \
-     If the address would be taken inside the expression the optimizer       \
-     would try to be too smart and throws it away.  Grrr.  */                \
-  int *dummy_addr = &_dl_starting_up;                                        \
-                                                                             \
-  __libc_multiple_libcs = dummy_addr && !_dl_starting_up;                    \
-                                                                             \
-  if (!__libc_multiple_libcs)                                                \
-    {                                                                        \
-      argc = *(int *) arg;                                                   \
-      argv = (char **) (arg + 4);                                            \
-      envp = &argv[argc+1];                                                  \
-    }                                                                        \
-  else                                                                       \
-    {                                                                        \
-      argc = (int) arg;                                                              \
-      argv = ((char ***) &arg)[1];                                           \
-      envp = ((char ***) &arg)[2];                                           \
-    }                                                                        \
-                                                                             \
-  INIT (argc, argv, envp);                                                   \
-}
+#include <sysdep.h>
 
+#define __S1(x) #x
+#define __S(x) __S1(x)
 
+#ifdef PIC
+
+#define SYSDEP_CALL_INIT(NAME, INIT) asm("\
+       .weak _dl_starting_up
+       .global " #NAME "
+       .type " #NAME ",@function
+" #NAME ":
+       save    %sp, -64, %sp
+1:     call    11f
+       sethi   %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+11:    or      %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
+       add     %l7, %o7, %l7
+       /* Are we a dynamic libc being loaded into a static program?  */
+       sethi   %hi(_dl_starting_up), %l2
+       or      %l2, %lo(_dl_starting_up), %l2
+       ld      [%l7+%l2], %l2
+       cmp     %l2, 0
+       beq     3f
+        sethi  %hi(__libc_multiple_libcs), %l3
+       ld      [%l2], %l2
+       subcc   %g0, %l2, %g0
+       subx    %g0, -1, %l2
+3:     or      %l3, %lo(__libc_multiple_libcs), %l3
+       ld      [%l7+%l3], %l3
+       cmp     %l2, 0
+       st      %l2, [%l3]
+       /* If so, argc et al are in %o0-%o2 already.  Otherwise, load them.  */
+       bnz     " #INIT "
+        restore
+       ld      [%sp+22*4], %o0
+       add     %sp, 23*4, %o1
+       sll     %o0, 2, %o2
+       add     %o2, %o1, %o2
+       ba      " #INIT "
+        add    %o2, 4, %o2
+       .size "#NAME ", .-" #NAME);
+
+#else
+
+#define SYSDEP_CALL_INIT(NAME, INIT) asm("\
+       .weak _dl_starting_up
+       .global " #NAME "
+       .type " #NAME ",@function
+" #NAME ":
+       /* Are we a dynamic libc being loaded into a static program?  */
+       sethi   %hi(_dl_starting_up), %g2
+       or      %g2, %lo(_dl_starting_up), %g2
+       cmp     %g2, 0
+       beq     3f
+        sethi  %hi(__libc_multiple_libcs), %g3
+       ld      [%g4+%g2], %g2
+       subcc   %g0, %g2, %g0
+       subx    %g0, -1, %g2
+3:     or      %g3, %lo(__libc_multiple_libcs), %g3
+       cmp     %g2, 0
+       st      %g2, [%g3+%g4]
+       /* If so, argc et al are in %o0-%o2 already.  Otherwise, load them.  */
+       bnz     " #INIT "
+        nop
+       ld      [%sp+22*4], %o0
+       add     %sp, 23*4, %o1
+       sll     %o0, 2, %o2
+       add     %o2, %o1, %o2
+       ba      " #INIT "
+        add    %o2, 4, %o2
+       .size "#NAME ", .-" #NAME);
+
+#endif
index 0e5a8cd..730332f 100644 (file)
 /* Linux/SPARC uses a different trap number */
 #undef PSEUDO
 #undef ENTRY
+#undef END
+#undef LOC
 
 #define ENTRY(name) \
        .global C_SYMBOL_NAME(name); \
-       .align 2;\
+       .align 4;\
        C_LABEL(name);\
        .type name,@function;
 
+#define END(name) \
+       .size name, . - name
+
+#define LOC(name)  . ## L ## name
+
 #ifdef PIC
-#define SYSCALL_ERROR_HANDLER \
-       .global C_SYMBOL_NAME(__errno_location);\
-        .type   C_SYMBOL_NAME(__errno_location),@function;\
-       save   %sp,-96,%sp;\
-       call   __errno_location;\
-       nop;\
-       st %i0,[%o0];\
-       restore;\
-       retl;\
+#define SYSCALL_ERROR_HANDLER                                  \
+       .global C_SYMBOL_NAME(__errno_location);                \
+        .type   C_SYMBOL_NAME(__errno_location),@function;     \
+       save   %sp,-96,%sp;                                     \
+       call   __errno_location;                                \
+       nop;                                                    \
+       st %i0,[%o0];                                           \
+       restore;                                                \
+       retl;                                                   \
        mov -1,%o0;
 #else
-#define SYSCALL_ERROR_HANDLER \
-       save %sp,-96,%sp;                                                     \
-       call __errno_location;                                                \
-       nop;                                                                  \
-       st %i0,[%o0];                                                         \
-       restore;                                                              \
-       retl;                                                                 \
+#define SYSCALL_ERROR_HANDLER                                  \
+       save %sp,-96,%sp;                                       \
+       call __errno_location;                                  \
+       nop;                                                    \
+       st %i0,[%o0];                                           \
+       restore;                                                \
+       retl;                                                   \
        mov -1,%o0;
 #endif   /* PIC */
 
-#define PSEUDO(name, syscall_name, args) \
-       .text;                                                                \
-       ENTRY(name);                                                          \
-       LOADSYSCALL(syscall_name);                                            \
-       ta 0x10;                                                              \
-       bcc,a 1f;                                                             \
-       nop;                                                                  \
-       SYSCALL_ERROR_HANDLER;                                                \
-1:;
+#define PSEUDO(name, syscall_name, args)                       \
+       .text;                                                  \
+       ENTRY(name);                                            \
+       LOADSYSCALL(syscall_name);                              \
+       ta 0x10;                                                \
+       bcc,a 9000f;                                            \
+       nop;                                                    \
+       SYSCALL_ERROR_HANDLER;                                  \
+9000:;
 
 #endif /* ASSEMBLER */
 
index 2229678..9a4666a 100644 (file)
@@ -42,7 +42,7 @@ typedef signed long int __int64_t;
 typedef unsigned long int __uint64_t;
 typedef __quad_t *__qaddr_t;
 
-typedef __u_int __dev_t;               /* Type of device numbers.  */
+typedef __u_long __dev_t;              /* Type of device numbers.  */
 typedef __u_int __uid_t;               /* Type of user identifications.  */
 typedef __u_int __gid_t;               /* Type of group identifications.  */
 typedef __u_int __ino_t;               /* Type of file serial numbers.  */
index 3e27c6d..955714d 100644 (file)
@@ -55,7 +55,7 @@
         restore
        ldx     [%sp+" __S(STACK_BIAS) "+22*8], %o0
        add     %sp, " __S(STACK_BIAS) "+23*8, %o1
-       sll     %o0, 3, %o2
+       sllx    %o0, 3, %o2
        add     %o2, %o1, %o2
        ba      " #INIT "
         add    %o2, 8, %o2
         nop
        ldx     [%sp+" __S(STACK_BIAS) "+22*8], %o0
        add     %sp, " __S(STACK_BIAS) "+23*8, %o1
-       sll     %o0, 3, %o2
+       sllx    %o0, 3, %o2
        add     %o2, %o1, %o2
-       add     %o2, 8, %o2
-       ba,a    " #INIT "
+       ba      " #INIT "
+        add    %o2, 8, %o2
        .size "#NAME ", .-" #NAME);
 
 #endif