summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2004-10-12 12:00:26 +0000
committerJakub Jelinek <jakub@redhat.com>2004-10-12 12:00:26 +0000
commit3ee87ca7d4c813087eeee8b9fd04b7836244a54a (patch)
tree30d5d50dce77cb2e80d0bead19ee23e7d0a38617
parent7dbf6a6cd568437c4b2fa14bcf5a1914cc267527 (diff)
Updated to fedora-glibc-20041012T1128cvs/fedora-glibc-2_3_3-67
-rw-r--r--ChangeLog90
-rw-r--r--PROJECTS45
-rw-r--r--elf/dl-addr.c8
-rw-r--r--elf/dl-sym.c6
-rw-r--r--elf/tst-dlopenrpath.c2
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in9
-rw-r--r--gmon/Makefile4
-rw-r--r--localedata/ChangeLog5
-rw-r--r--localedata/locales/fa_IR18
-rw-r--r--malloc/malloc.c4
-rw-r--r--misc/sys/uio.h12
-rw-r--r--nptl/ChangeLog12
-rw-r--r--nptl/allocatestack.c2
-rw-r--r--nptl/pt-allocrtsig.c2
-rw-r--r--nptl/pthread_attr_getstackaddr.c2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h2
-rw-r--r--nptl/tst-clock2.c8
-rw-r--r--posix/tst-getaddrinfo2.c4
-rw-r--r--resolv/res_init.c3
-rw-r--r--resolv/res_mkquery.c2
-rw-r--r--resolv/res_send.c106
-rw-r--r--stdio-common/vfscanf.c80
-rw-r--r--sysdeps/m68k/fpu/bits/mathinline.h42
-rw-r--r--sysdeps/m68k/memcopy.h22
-rw-r--r--sysdeps/powerpc/powerpc64/Makefile7
-rw-r--r--sysdeps/powerpc/powerpc64/__longjmp-common.S1
-rw-r--r--sysdeps/powerpc/powerpc64/bsd-_setjmp.S12
-rw-r--r--sysdeps/powerpc/powerpc64/bsd-setjmp.S6
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_ceil.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_ceilf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_copysign.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_floor.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_floorf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_llrint.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_llrintf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_llround.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_llroundf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_rint.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_rintf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_round.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_roundf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_trunc.S1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_truncf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/memcpy.S2
-rw-r--r--sysdeps/powerpc/powerpc64/memset.S2
-rw-r--r--sysdeps/powerpc/powerpc64/setjmp-common.S4
-rw-r--r--sysdeps/powerpc/powerpc64/stpcpy.S1
-rw-r--r--sysdeps/powerpc/powerpc64/strchr.S1
-rw-r--r--sysdeps/powerpc/powerpc64/strcmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/strcpy.S1
-rw-r--r--sysdeps/powerpc/powerpc64/strlen.S1
-rw-r--r--sysdeps/powerpc/powerpc64/strncmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/sysdep.h68
-rw-r--r--timezone/asia22
-rw-r--r--timezone/private.h13
-rw-r--r--timezone/southamerica45
-rw-r--r--timezone/zdump.c73
58 files changed, 565 insertions, 205 deletions
diff --git a/ChangeLog b/ChangeLog
index aeb8bd9e93..b930c5e840 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,93 @@
+2004-10-11 Ulrich Drepper <drepper@redhat.com>
+
+ * timezone/asia: Update from tzdata2004e.
+ * timezone/southamerica: Likewise.
+ * timezone/private.h: Update from tzcode2004e.
+ * timezone/zdump.c: Likewise.
+
+ * stdio-common/vfscanf.c: Add support for reading localized
+ digits. Patch mainly by Hamed Malek <hamed@bamdad.org>.
+
+ * resolv/res_init.c (res_thread_freeres): Reset _res.options.
+ [BZ #434]
+
+ * resolv/res_send.c (send_dg): Use nonblocking sockets. Add
+ appropriate poll/select calls and restart operation if necessary.
+ Also handle EINTR.
+
+ * elf/tst-dlopenrpath.c (do_test): Enable code which was disabled
+ for debugging.
+
+ * elf/dl-sym.c (do_sym): Avoid using global variable.
+
+ * elf/dl-addr.c (_dl_addr): Really use match everywhere.
+
+2004-10-09 Andreas Schwab <schwab@suse.de>
+
+ * sysdeps/m68k/memcopy.h (WORD_COPY_BWD): Remove use of cast as
+ lvalue.
+
+ * sysdeps/m68k/fpu/bits/mathinline.h: Remove __THROW from inline
+ definitions.
+
+2004-10-07 Andreas Schwab <schwab@suse.de>
+
+ * misc/sys/uio.h: Change __vector to __iovec to avoid clash with
+ altivec.
+
+2004-10-06 Alan Modra <amodra@bigpond.net.au>
+
+ * gmon/Makefile (CFLAGS-mcount.c): Move before inclusion of "Rules".
+ * sysdeps/powerpc/powerpc64/Makefile (CFLAGS-mcount.c): Add
+ -msoft-float.
+ * sysdeps/powerpc/powerpc64/sysdep.h (SAVE_ARG, REST_ARG): New macros.
+ (CALL_MCOUNT): Replace with a gas macro implementation.
+ (EALIGN): Delete PROF version.
+ * sysdeps/powerpc/powerpc64/__longjmp-common.S: Invoke CALL_MCOUNT.
+ * sysdeps/powerpc/powerpc64/bsd-_setjmp.S: Likewise.
+ * sysdeps/powerpc/powerpc64/bsd-setjmp.S: Likewise.
+ * sysdeps/powerpc/powerpc64/setjmp-common.S: Likewise.
+ * sysdeps/powerpc/powerpc64/memcpy.S: Likewise.
+ * sysdeps/powerpc/powerpc64/memset.S: Likewise.
+ * sysdeps/powerpc/powerpc64/stpcpy.S: Likewise.
+ * sysdeps/powerpc/powerpc64/strchr.S: Likewise.
+ * sysdeps/powerpc/powerpc64/strcmp.S: Likewise.
+ * sysdeps/powerpc/powerpc64/strcpy.S: Likewise.
+ * sysdeps/powerpc/powerpc64/strlen.S: Likewise.
+ * sysdeps/powerpc/powerpc64/strncmp.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_llrintf.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_round.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Likewise.
+ * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Likewise.
+
+ * sysdeps/powerpc/powerpc64/setjmp-common.S: Add extra entry point
+ past _mcount call.
+ * sysdeps/powerpc/powerpc64/bsd-_setjmp.S: Use it.
+ * sysdeps/powerpc/powerpc64/bsd-setjmp.S: Likewise.
+
+2004-10-06 Ulrich Drepper <drepper@redhat.com>
+
+ * resolv/res_mkquery.c (res_nmkquery): Reject randombits value if
+ low 16 bits are zero.
+
+2004-10-06 Jakub Jelinek <jakub@redhat.com>
+
+ * posix/tst-getaddrinfo2.c: Include stdlib.h and string.h.
+ (do_test): Use %p instead of 0x%08X to print a pointer.
+
+ * malloc/malloc.c: Include stdio-common/_itoa.h.
+
2004-10-05 Ulrich Drepper <drepper@redhat.com>
* elf/rtld.c (dl_main): Use _dl_debug_printf instead of _dl_printf
diff --git a/PROJECTS b/PROJECTS
index 881d7d2046..92ca902943 100644
--- a/PROJECTS
+++ b/PROJECTS
@@ -1,6 +1,6 @@
Open jobs for finishing GNU libc:
---------------------------------
-Status: September 2002
+Status: October 2004
If you have time and talent to take over any of the jobs below please
contact <bug-glibc@gnu.org>.
@@ -53,7 +53,7 @@ contact <bug-glibc@gnu.org>.
[11] Write access function for netmasks, bootparams, and automount
- databases for nss_files and nss_db module.
+ databases for nss_files, nss_nis, and nss_nisplus modules.
The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once.
@@ -76,7 +76,7 @@ contact <bug-glibc@gnu.org>.
[18] Based on the sprof program we need tools to analyze the output. The
result should be a link map which specifies in which order the .o
files are placed in the shared object. This should help to improve
- code locality and result in a smaller foorprint (in code and data
+ code locality and result in a smaller footprint (in code and data
memory) since less pages are only used in small parts.
@@ -93,29 +93,6 @@ contact <bug-glibc@gnu.org>.
available.
-[21] The nscd program and the stubs in the libc should be changed so
- that each program uses only one socket connect. Take a look at
- http://people.redhat.com/drepper/nscd.html
-
- An alternative approach is to use an mmap()ed file. The idea is
- the following:
- - the nscd creates the hash tables and the information it stores
- in it in a mmap()ed region. This means no pointers must be
- used, only offsets.
- OR
- if POSIX shared memory is available use a named shared memory
- region to put the data in
- - each program using NSS functionality tries to open the file
- with the data.
- - by checking some timestamp (which the nscd renews frequently)
- the programs can test whether the file is still valid
- - if the file is valid look through the nscd and locate the
- appropriate hash table for the database and lookup the data.
- If it is included we are set.
- - if the data is not yet in the database we contact the nscd using
- the currently implemented methods.
-
-
[23] The `strptime' function needs to be completed. This includes among
other things that it must get teached about timezones. The solution
envisioned is to extract the timezones from the ADO timezone
@@ -127,18 +104,4 @@ contact <bug-glibc@gnu.org>.
Australia/Canberra or if the current locale is en_AU.
-[25] Sun's nscd version implements a feature where the nscd keeps N entries
- for each database current. I.e., if an entries lifespan is over and
- it is one of the N entries to be kept the nscd updates the information
- instead of removing the entry.
-
- How to decide about which N entries to keep has to be examined.
- Factors should be number of uses (of course), influenced by aging.
- Just imagine a computer used by several people. The IDs of the current
- user should be preferred even if the last user spent more time.
-
-
-[27] We need a second test suite with tests which cannot run during a normal
- `make check' run. This test suite can require root priviledges and
- can test things like DNS (i.e., require network access),
- user-interaction, networking in general, and probably many other things.
+[27] ...deleted...
diff --git a/elf/dl-addr.c b/elf/dl-addr.c
index ae97398bad..c373eb3b17 100644
--- a/elf/dl-addr.c
+++ b/elf/dl-addr.c
@@ -28,7 +28,7 @@ _dl_addr (const void *address, Dl_info *info,
struct link_map **mapp, const ElfW(Sym) **symbolp)
{
const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
- struct link_map *l, *match;
+ struct link_map *match;
const ElfW(Sym) *symtab, *matchsym, *symtabend;
const char *strtab;
ElfW(Word) strtabsize;
@@ -38,7 +38,7 @@ _dl_addr (const void *address, Dl_info *info,
/* Find the highest-addressed object that ADDRESS is not below. */
match = NULL;
- for (l = GL(dl_loaded); l; l = l->l_next)
+ for (struct link_map *l = GL(dl_loaded); l; l = l->l_next)
if (addr >= l->l_map_start && addr < l->l_map_end)
{
/* We know ADDRESS lies within L if in any shared object.
@@ -67,8 +67,8 @@ _dl_addr (const void *address, Dl_info *info,
info->dli_fbase = (void *) match->l_map_start;
/* If this is the main program the information is incomplete. */
- if (__builtin_expect (l->l_name[0], 'a') == '\0'
- && l->l_type == lt_executable)
+ if (__builtin_expect (match->l_name[0], 'a') == '\0'
+ && match->l_type == lt_executable)
info->dli_fname = _dl_argv[0];
symtab = (const void *) D_PTR (match, l_info[DT_SYMTAB]);
diff --git a/elf/dl-sym.c b/elf/dl-sym.c
index c7c737804e..a94610263d 100644
--- a/elf/dl-sym.c
+++ b/elf/dl-sym.c
@@ -90,9 +90,9 @@ do_sym (void *handle, const char *name, void *who,
{
if (__builtin_expect (match == GL(dl_loaded), 0))
{
- if (! GL(dl_loaded)
- || caller < GL(dl_loaded)->l_map_start
- || caller >= GL(dl_loaded)->l_map_end)
+ if (match == NULL
+ || caller < match->l_map_start
+ || caller >= match->l_map_end)
GLRO(dl_signal_error) (0, NULL, NULL, N_("\
RTLD_NEXT used in code not dynamically loaded"));
}
diff --git a/elf/tst-dlopenrpath.c b/elf/tst-dlopenrpath.c
index 964f103b8c..bd4d888f34 100644
--- a/elf/tst-dlopenrpath.c
+++ b/elf/tst-dlopenrpath.c
@@ -62,10 +62,8 @@ do_test (void)
result = foo ();
out:
-#if 0
unlink (PFX "test-subdir/in-subdir.so");
rmdir (testsubdir);
-#endif
return result;
}
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 086ea6912b..abdfc0ce41 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -1,5 +1,5 @@
# This file is updated automatically by Makefile.
glibc-branch := fedora
glibc-base := HEAD
-fedora-sync-date := 2004-10-06 09:00 UTC
-fedora-sync-tag := fedora-glibc-20041006T0900
+fedora-sync-date := 2004-10-12 11:28 UTC
+fedora-sync-tag := fedora-glibc-20041012T1128
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index b93411f1d7..766d7c5518 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 66
+%define glibcrelease 67
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define prelinkarches noarch
%define nptlarches i386 i686 athlon x86_64 ia64 s390 s390x sparcv9 ppc ppc64
@@ -1239,6 +1239,13 @@ rm -f *.filelist*
%endif
%changelog
+* Tue Oct 12 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-67
+- update from CVS
+ - use non-blocking sockets in resolver (#135234)
+ - reset pd->res options on thread exit, so that threads
+ reusing cached stacks get resolver state properly initialized
+ (BZ #434)
+
* Wed Oct 6 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-66
- update from CVS
- avoid using perl in the spec file, buildrequire sed >= 3.95
diff --git a/gmon/Makefile b/gmon/Makefile
index 060ede1f8f..80a79456f7 100644
--- a/gmon/Makefile
+++ b/gmon/Makefile
@@ -29,11 +29,11 @@ elide-routines.os = bb_init_func bb_exit_func
tests := tst-sprofil
-include ../Rules
-
# The mcount code won't work without a frame pointer.
CFLAGS-mcount.c := -fno-omit-frame-pointer
+include ../Rules
+
# We cannot compile mcount.c with -pg because that would
# create recursive calls. Just copy the normal static object.
# On systems where `profil' is not a system call, the same
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index 065136e8d7..5f362c62b7 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-11 Ulrich Drepper <drepper@redhat.com>
+
+ * locales/fa_IR: Add to_inpunct map.
+ Patch by Hamed Malek <hamed@bamdad.org>.
+
2004-10-04 Ulrich Drepper <drepper@redhat.com>
* locales/gu_IN: Update various incorrect and missing information.
diff --git a/localedata/locales/fa_IR b/localedata/locales/fa_IR
index 128c5d8cdc..8f65b1edd8 100644
--- a/localedata/locales/fa_IR
+++ b/localedata/locales/fa_IR
@@ -10,8 +10,8 @@ escape_char /
% Fax: +98 21 6019568
% Language: fa
% Territory: IR
-% Revision: 2.3
-% Date: 2004-03-16
+% Revision: 2.4
+% Date: 2004-09-04
% Users: general
% Repertoiremap:
% Charset: UTF-8
@@ -50,6 +50,20 @@ copy "i18n"
outdigit <U06F0>..<U06F9>
+map to_inpunct; /
+ (<U0030>,<U06F0>); /
+ (<U0031>,<U06F1>); /
+ (<U0032>,<U06F2>); /
+ (<U0033>,<U06F3>); /
+ (<U0034>,<U06F4>); /
+ (<U0035>,<U06F5>); /
+ (<U0036>,<U06F6>); /
+ (<U0037>,<U06F7>); /
+ (<U0038>,<U06F8>); /
+ (<U0039>,<U06F9>); /
+ (<U002E>,<U066B>); /
+ (<U002C>,<U066C>)
+
map to_outpunct; /
(<U002E>,<U066B>); /
(<U002C>,<U066C>)
diff --git a/malloc/malloc.c b/malloc/malloc.c
index a41171490a..ad6009a198 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -257,6 +257,10 @@
#include <malloc-machine.h>
+#ifdef _LIBC
+#include <stdio-common/_itoa.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/misc/sys/uio.h b/misc/sys/uio.h
index 53add9f2e2..1b203f71c2 100644
--- a/misc/sys/uio.h
+++ b/misc/sys/uio.h
@@ -30,24 +30,24 @@ __BEGIN_DECLS
/* Read data from file descriptor FD, and put the result in the
- buffers described by VECTOR, which is a vector of COUNT `struct iovec's.
+ buffers described by IOVEC, which is a vector of COUNT `struct iovec's.
The buffers are filled in the order specified.
Operates just like `read' (see <unistd.h>) except that data are
- put in VECTOR instead of a contiguous buffer.
+ put in IOVEC instead of a contiguous buffer.
This function is a cancellation point and therefore not marked with
__THROW. */
-extern ssize_t readv (int __fd, __const struct iovec *__vector, int __count);
+extern ssize_t readv (int __fd, __const struct iovec *__iovec, int __count);
-/* Write data pointed by the buffers described by VECTOR, which
+/* Write data pointed by the buffers described by IOVEC, which
is a vector of COUNT `struct iovec's, to file descriptor FD.
The data is written in the order specified.
Operates just like `write' (see <unistd.h>) except that the data
- are taken from VECTOR instead of a contiguous buffer.
+ are taken from IOVEC instead of a contiguous buffer.
This function is a cancellation point and therefore not marked with
__THROW. */
-extern ssize_t writev (int __fd, __const struct iovec *__vector, int __count);
+extern ssize_t writev (int __fd, __const struct iovec *__iovec, int __count);
__END_DECLS
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 5d488cd1a5..e842302cb8 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -4,9 +4,17 @@
of pthread-functions.h and pthreaddef.h.
* sysdeps/unix/sysv/linux/s390/jmp-unwind.c: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h (pthread_cond_t):
+ Change __data.__nwaiters from int to unsigned int.
+
+ * tst-clock2.c (do_test): Don't fail if _POSIX_THREAD_CPUTIME == 0 and
+ sysconf (_SC_THREAD_CPUTIME) returns negative value.
+
+ * allocatestack.c (__find_thread_by_id): Move attribute_hidden
+ before return type.
+
* sysdeps/s390/jmpbuf-unwind.h: Include bits/wordsize.h.
- (JMPBUF_CFA_UNWINDS_ADJ): Subtract 96 resp. 160 bytes from
- CFA.
+ (JMPBUF_CFA_UNWINDS_ADJ): Subtract 96 resp. 160 bytes from CFA.
2004-10-06 Ulrich Drepper <drepper@redhat.com>
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 242da0a5a1..d4f3188f53 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -772,8 +772,8 @@ __reclaim_stacks (void)
#if HP_TIMING_AVAIL
/* Find a thread given the thread ID. */
-struct pthread *
attribute_hidden
+struct pthread *
__find_thread_by_id (pid_t tid)
{
struct pthread *result = NULL;
diff --git a/nptl/pt-allocrtsig.c b/nptl/pt-allocrtsig.c
index 9481e15f25..347bf139ad 100644
--- a/nptl/pt-allocrtsig.c
+++ b/nptl/pt-allocrtsig.c
@@ -28,7 +28,7 @@ extern int __libc_allocate_rtsig_private (int high);
/* We reserve __SIGRTMIN for use as the cancellation signal and
- __SIGRTMIN+1 to andle setuid et.al. These signals are used
+ __SIGRTMIN+1 to handle setuid et.al. These signals are used
internally. */
int
__libc_current_sigrtmin (void)
diff --git a/nptl/pthread_attr_getstackaddr.c b/nptl/pthread_attr_getstackaddr.c
index e6e25880ab..7656600dd5 100644
--- a/nptl/pthread_attr_getstackaddr.c
+++ b/nptl/pthread_attr_getstackaddr.c
@@ -33,7 +33,7 @@ __pthread_attr_getstackaddr (attr, stackaddr)
iattr = (struct pthread_attr *) attr;
/* Some code assumes this function to work even if no stack address
- has been set. Let them figure it our for themselves what the
+ has been set. Let them figure it out for themselves what the
value means. Simply store the result. */
*stackaddr = iattr->stackaddr;
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
index 03c2ef8106..92fb08c951 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
@@ -100,7 +100,7 @@ typedef union
__extension__ unsigned long long int __wakeup_seq;
__extension__ unsigned long long int __woken_seq;
void *__mutex;
- int __nwaiters;
+ unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
diff --git a/nptl/tst-clock2.c b/nptl/tst-clock2.c
index fd216b2ba1..bca40956e2 100644
--- a/nptl/tst-clock2.c
+++ b/nptl/tst-clock2.c
@@ -58,6 +58,14 @@ do_test (void)
#if defined _POSIX_THREAD_CPUTIME && _POSIX_THREAD_CPUTIME >= 0
# define N 10
+# if _POSIX_THREAD_CPUTIME == 0
+ if (sysconf (_SC_THREAD_CPUTIME) < 0)
+ {
+ puts ("_POSIX_THREAD_CPUTIME option not available");
+ return 0;
+ }
+# endif
+
if (pthread_barrier_init (&b2, NULL, 2) != 0
|| pthread_barrier_init (&bN, NULL, N + 1) != 0)
{
diff --git a/posix/tst-getaddrinfo2.c b/posix/tst-getaddrinfo2.c
index b0bce5925c..13edca0a34 100644
--- a/posix/tst-getaddrinfo2.c
+++ b/posix/tst-getaddrinfo2.c
@@ -2,6 +2,8 @@
#include <errno.h>
#include <netdb.h>
#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
#include <sys/socket.h>
static int
@@ -47,7 +49,7 @@ do_test (void)
if (err)
{
printf ("FAIL getaddrinfo IPv4 socktype 0,513: "
- "fam %d alen %d addr 0x%08X addr/fam %d "
+ "fam %d alen %d addr %p addr/fam %d "
"addr/port %d H[%d]\n",
pai->ai_family, pai->ai_addrlen, psin,
psin ? psin->sin_family : 0,
diff --git a/resolv/res_init.c b/resolv/res_init.c
index 4087597a87..731c784e17 100644
--- a/resolv/res_init.c
+++ b/resolv/res_init.c
@@ -597,6 +597,9 @@ res_thread_freeres (void)
free (_res._u._ext.nsaddrs[ns]);
_res._u._ext.nsaddrs[ns] = NULL;
}
+
+ /* Make sure we do a full re-initialization the next time. */
+ _res.options = 0;
}
text_set_element (__libc_thread_subfreeres, res_thread_freeres);
text_set_element (__libc_subfreeres, res_thread_freeres);
diff --git a/resolv/res_mkquery.c b/resolv/res_mkquery.c
index 5b705b0e8b..9825ae0fa3 100644
--- a/resolv/res_mkquery.c
+++ b/resolv/res_mkquery.c
@@ -141,7 +141,7 @@ res_nmkquery(res_state statp,
randombits = (tv.tv_sec << 8) ^ tv.tv_usec;
#endif
}
- while (randombits == 0);
+ while ((randombits & 0xffff) == 0);
statp->id = (statp->id + randombits) & 0xffff;
#endif
hp->opcode = op;
diff --git a/resolv/res_send.c b/resolv/res_send.c
index 2366f59cd2..44d8cb0fee 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -88,6 +88,7 @@ static const char rcsid[] = "$BINDId: res_send.c,v 8.38 2000/03/30 20:16:51 vixi
#include <sys/ioctl.h>
#include <errno.h>
+#include <fcntl.h>
#include <netdb.h>
#include <resolv.h>
#include <signal.h>
@@ -965,12 +966,73 @@ send_dg(res_state statp,
return (0);
}
#endif /* !CANNOT_CONNECT_DGRAM */
+ /* Make socket non-blocking. */
+ int fl = __fcntl (EXT(statp).nssocks[ns], F_GETFL);
+ if (fl != -1)
+ __fcntl (EXT(statp).nssocks[ns], F_SETFL,
+ fl | O_NONBLOCK);
Dprint(statp->options & RES_DEBUG,
(stdout, ";; new DG socket\n"))
}
s = EXT(statp).nssocks[ns];
+ /*
+ * Compute time for the total operation.
+ */
+ seconds = (statp->retrans << ns);
+ if (ns > 0)
+ seconds /= statp->nscount;
+ if (seconds <= 0)
+ seconds = 1;
+ evNowTime(&now);
+ evConsTime(&timeout, seconds, 0);
+ evAddTime(&finish, &now, &timeout);
+ int need_recompute = 0;
+ resend:
+#ifdef _LIBC
+ /* Convert struct timespec in milliseconds. */
+ ptimeout = timeout.tv_sec * 1000 + timeout.tv_nsec / 1000000;
+
+ pfd[0].fd = s;
+ pfd[0].events = POLLOUT;
+ n = __poll (pfd, 1, 0);
+ if (__builtin_expect (n == 0, 0)) {
+ n = __poll (pfd, 1, ptimeout);
+ need_recompute = 1;
+ }
+#else
+ FD_ZERO(&dsmask);
+ FD_SET(s, &dsmask);
+ struct timeval zerotime = { 0, 0 };
+ n = pselect(s + 1, NULL, &dsmask, NULL, &zerotime, NULL);
+ if (n == 0) {
+ n = pselect(s + 1, NULL, &dsmask, NULL, &timeout, NULL);
+ need_recompute = 1;
+ }
+#endif
+ if (n == 0) {
+ Dprint(statp->options & RES_DEBUG, (stdout,
+ ";; timeout sending\n"));
+ *gotsomewhere = 1;
+ return (0);
+ }
+ if (n < 0) {
+ if (errno == EINTR) {
+ recompute_resend:
+ evNowTime(&now);
+ if (evCmpTime(finish, now) > 0) {
+ evSubTime(&timeout, &finish, &now);
+ goto resend;
+ }
+ }
+ Perror(statp, stderr, "select", errno);
+ res_nclose(statp);
+ return (0);
+ }
+ __set_errno (0);
#ifndef CANNOT_CONNECT_DGRAM
if (send(s, (char*)buf, buflen, 0) != buflen) {
+ if (errno == EINTR || errno == EAGAIN)
+ goto recompute_resend;
Perror(statp, stderr, "send", errno);
res_nclose(statp);
return (0);
@@ -984,6 +1046,8 @@ send_dg(res_state statp,
if (sendto(s, (char*)buf, buflen, 0,
(struct sockaddr *)nsap, sizeof *nsap) != buflen)
{
+ if (errno == EINTR || errno == EAGAIN)
+ goto recompute_resend;
Aerror(statp, stderr, "sendto", errno,
(struct sockaddr *) nsap);
res_nclose(statp);
@@ -991,46 +1055,38 @@ send_dg(res_state statp,
}
#endif /* !CANNOT_CONNECT_DGRAM */
- /*
- * Wait for reply.
- */
- seconds = (statp->retrans << ns);
- if (ns > 0)
- seconds /= statp->nscount;
- if (seconds <= 0)
- seconds = 1;
- evNowTime(&now);
- evConsTime(&timeout, seconds, 0);
- evAddTime(&finish, &now, &timeout);
wait:
+ if (need_recompute) {
+ evNowTime(&now);
+ if (evCmpTime(finish, now) <= 0) {
+ err_return:
+ Perror(statp, stderr, "select", errno);
+ res_nclose(statp);
+ return (0);
+ }
+ evSubTime(&timeout, &finish, &now);
+ }
#ifdef _LIBC
/* Convert struct timespec in milliseconds. */
ptimeout = timeout.tv_sec * 1000 + timeout.tv_nsec / 1000000;
- pfd[0].fd = s;
pfd[0].events = POLLIN;
n = __poll (pfd, 1, ptimeout);
#else
- FD_ZERO(&dsmask);
- FD_SET(s, &dsmask);
n = pselect(s + 1, &dsmask, NULL, NULL, &timeout, NULL);
#endif
if (n == 0) {
- Dprint(statp->options & RES_DEBUG, (stdout, ";; timeout\n"));
+ Dprint(statp->options & RES_DEBUG, (stdout,
+ ";; timeout receiving\n"));
*gotsomewhere = 1;
return (0);
}
if (n < 0) {
if (errno == EINTR) {
- evNowTime(&now);
- if (evCmpTime(finish, now) > 0) {
- evSubTime(&timeout, &finish, &now);
- goto wait;
- }
+ need_recompute = 1;
+ goto wait;
}
- Perror(statp, stderr, "select", errno);
- res_nclose(statp);
- return (0);
+ goto err_return;
}
__set_errno (0);
#ifdef _LIBC
@@ -1056,6 +1112,10 @@ send_dg(res_state statp,
resplen = recvfrom(s, (char*)ans, anssiz,0,
(struct sockaddr *)&from, &fromlen);
if (resplen <= 0) {
+ if (errno == EINTR || errno == EAGAIN) {
+ need_recompute = 1;
+ goto wait;
+ }
Perror(statp, stderr, "recvfrom", errno);
res_nclose(statp);
return (0);
diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c
index 63e7bd8815..c641d2d371 100644
--- a/stdio-common/vfscanf.c
+++ b/stdio-common/vfscanf.c
@@ -1163,9 +1163,15 @@ _IO_vfscanf (s, format, argptr, errp)
int level;
#ifdef COMPILE_WSCANF
const wchar_t *wcdigits[10];
+ const wchar_t *wcdigits_extended[10];
#else
const char *mbdigits[10];
+ const char *mbdigits_extended[10];
#endif
+ /* "to_inpunct" is a map from ASCII digits to their
+ equivalent in locale. This is defined for locales
+ which use an extra digits set. */
+ wctrans_t map = __wctrans ("to_inpunct");
int n;
from_level = 0;
@@ -1176,6 +1182,66 @@ _IO_vfscanf (s, format, argptr, errp)
to_level = (uint32_t) curctype->values[_NL_ITEM_INDEX (_NL_CTYPE_INDIGITS_MB_LEN)].word - 1;
#endif
+ /* Get the alternative digit forms if there are any. */
+ if (__builtin_expect (map != NULL, 0))
+ {
+ /* Adding new level for extra digits set in locale file. */
+ ++to_level;
+
+ for (n = 0; n < 10; ++n)
+ {
+#ifdef COMPILE_WSCANF
+ wcdigits[n] = (const wchar_t *)
+ _NL_CURRENT (LC_CTYPE, _NL_CTYPE_INDIGITS0_WC + n);
+
+ wchar_t *wc_extended = (wchar_t *)
+ alloca ((to_level + 2) * sizeof (wchar_t));
+ __wmemcpy (wc_extended, wcdigits[n], to_level);
+ wc_extended[to_level] = __towctrans (L'0' + n, map);
+ wc_extended[to_level + 1] = '\0';
+ wcdigits_extended[n] = wc_extended;
+#else
+ mbdigits[n]
+ = curctype->values[_NL_CTYPE_INDIGITS0_MB + n].string;
+
+ /* Get the equivalent wide char in map. */
+ wint_t extra_wcdigit = __towctrans (L'0' + n, map);
+
+ /* Convert it to multibyte representation. */
+ mbstate_t state;
+ memset (&state, '\0', sizeof (state));
+
+ char extra_mbdigit[MB_LEN_MAX];
+ size_t mblen
+ = __wcrtomb (extra_mbdigit, extra_wcdigit, &state);
+
+ if (mblen == (size_t) -1)
+ {
+ /* Ignore this new level. */
+ map = NULL;
+ break;
+ }
+
+ /* Calculate the length of mbdigits[n]. */
+ const char *last_char = mbdigits[n];
+ for (level = 0; level < to_level; ++level)
+ last_char = strchr (last_char, '\0') + 1;
+
+ size_t mbdigits_len = last_char - mbdigits[n];
+
+ /* Allocate memory for extended multibyte digit. */
+ char *mb_extended;
+ mb_extended = (char *) alloca (mbdigits_len + mblen + 1);
+
+ /* And get the mbdigits + extra_digit string. */
+ *(char *) __mempcpy (__mempcpy (mb_extended, mbdigits[n],
+ mbdigits_len),
+ extra_mbdigit, mblen) = '\0';
+ mbdigits_extended[n] = mb_extended;
+#endif
+ }
+ }
+
/* Read the number into workspace. */
while (c != EOF && width != 0)
{
@@ -1185,8 +1251,11 @@ _IO_vfscanf (s, format, argptr, errp)
{
/* Get the string for the digits with value N. */
#ifdef COMPILE_WSCANF
- wcdigits[n] = (const wchar_t *)
- _NL_CURRENT (LC_CTYPE, _NL_CTYPE_INDIGITS0_WC + n);
+ if (__builtin_expect (map != NULL, 0))
+ wcdigits[n] = wcdigits_extended[n];
+ else
+ wcdigits[n] = (const wchar_t *)
+ _NL_CURRENT (LC_CTYPE, _NL_CTYPE_INDIGITS0_WC + n);
wcdigits[n] += from_level;
if (c == (wint_t) *wcdigits[n])
@@ -1201,8 +1270,11 @@ _IO_vfscanf (s, format, argptr, errp)
const char *cmpp;
int avail = width > 0 ? width : INT_MAX;
- mbdigits[n]
- = curctype->values[_NL_CTYPE_INDIGITS0_MB + n].string;
+ if (__builtin_expect (map != NULL, 0))
+ mbdigits[n] = mbdigits_extended[n];
+ else
+ mbdigits[n]
+ = curctype->values[_NL_CTYPE_INDIGITS0_MB + n].string;
for (level = 0; level < from_level; level++)
mbdigits[n] = strchr (mbdigits[n], '\0') + 1;
diff --git a/sysdeps/m68k/fpu/bits/mathinline.h b/sysdeps/m68k/fpu/bits/mathinline.h
index 1e43e43047..acbac47aac 100644
--- a/sysdeps/m68k/fpu/bits/mathinline.h
+++ b/sysdeps/m68k/fpu/bits/mathinline.h
@@ -1,5 +1,5 @@
/* Definitions of inline math functions implemented by the m68881/2.
- Copyright (C) 1991,92,93,94,96,97,98,99,2000,2002, 2003
+ Copyright (C) 1991,92,93,94,96,97,98,99,2000,2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -110,7 +110,7 @@
#if defined __USE_MISC || defined __USE_ISOC99
# define __inline_mathop(func, op) \
__inline_mathop1(double, func, op) \
- __inline_mathop1(float, __CONCAT(func,f), op) \
+ __inline_mathop1(float, __CONCAT(func,f), op) \
__inline_mathop1(long double, __CONCAT(func,l), op)
#else
# define __inline_mathop(func, op) \
@@ -118,7 +118,7 @@
#endif
#define __inline_mathop1(float_type,func, op) \
- __m81_defun (float_type, func, (float_type __mathop_x)) __THROW \
+ __m81_defun (float_type, func, (float_type __mathop_x)) \
{ \
float_type __result; \
__asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
@@ -175,7 +175,7 @@ __inline_mathop(trunc, intrz)
for the function names. */
#define __inline_functions(float_type, s) \
-__m81_defun (float_type, __CONCAT(__floor,s), (float_type __x)) __THROW \
+__m81_defun (float_type, __CONCAT(__floor,s), (float_type __x)) \
{ \
float_type __result; \
unsigned long int __ctrl_reg; \
@@ -191,7 +191,7 @@ __m81_defun (float_type, __CONCAT(__floor,s), (float_type __x)) __THROW \
return __result; \
} \
\
-__m81_defun (float_type, __CONCAT(__ceil,s), (float_type __x)) __THROW \
+__m81_defun (float_type, __CONCAT(__ceil,s), (float_type __x)) \
{ \
float_type __result; \
unsigned long int __ctrl_reg; \
@@ -217,7 +217,7 @@ __inline_functions(long double,l)
#ifdef __USE_MISC
# define __inline_functions(float_type, s) \
-__m81_defun (int, __CONCAT(__isinf,s), (float_type __value)) __THROW \
+__m81_defun (int, __CONCAT(__isinf,s), (float_type __value)) \
{ \
/* There is no branch-condition for infinity, \
so we must extract and examine the condition codes manually. */ \
@@ -227,7 +227,7 @@ __m81_defun (int, __CONCAT(__isinf,s), (float_type __value)) __THROW \
return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0; \
} \
\
-__m81_defun (int, __CONCAT(__finite,s), (float_type __value)) __THROW \
+__m81_defun (int, __CONCAT(__finite,s), (float_type __value)) \
{ \
/* There is no branch-condition for infinity, so we must extract and \
examine the condition codes manually. */ \
@@ -238,7 +238,7 @@ __m81_defun (int, __CONCAT(__finite,s), (float_type __value)) __THROW \
} \
\
__m81_defun (float_type, __CONCAT(__scalbn,s), \
- (float_type __x, int __n)) __THROW \
+ (float_type __x, int __n)) \
{ \
float_type __result; \
__asm ("fscale%.l %1, %0" : "=f" (__result) : "dmi" (__n), "0" (__x)); \
@@ -255,7 +255,7 @@ __inline_functions(long double,l)
#if defined __USE_MISC || defined __USE_XOPEN
# define __inline_functions(float_type, s) \
-__m81_defun (int, __CONCAT(__isnan,s), (float_type __value)) __THROW \
+__m81_defun (int, __CONCAT(__isnan,s), (float_type __value)) \
{ \
char __result; \
__asm("ftst%.x %1\n" \
@@ -275,7 +275,7 @@ __inline_functions(long double,l)
#ifdef __USE_ISOC99
# define __inline_functions(float_type, s) \
-__m81_defun (int, __CONCAT(__signbit,s), (float_type __value)) __THROW \
+__m81_defun (int, __CONCAT(__signbit,s), (float_type __value)) \
{ \
/* There is no branch-condition for the sign bit, so we must extract \
and examine the condition codes manually. */ \
@@ -285,13 +285,13 @@ __m81_defun (int, __CONCAT(__signbit,s), (float_type __value)) __THROW \
return (__fpsr >> 27) & 1; \
} \
\
-__m81_defun (float_type, __CONCAT(__scalbln,s), \
- (float_type __x, long int __n)) __THROW \
+ __m81_defun (float_type, __CONCAT(__scalbln,s), \
+ (float_type __x, long int __n)) \
{ \
return __CONCAT(__scalbn,s) (__x, __n); \
} \
\
-__m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) __THROW \
+__m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) \
{ \
float_type __result; \
unsigned long int __ctrl_reg; \
@@ -305,7 +305,7 @@ __m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) __THROW \
return __result; \
} \
\
-__m81_defun (long int, __CONCAT(__lrint,s), (float_type __x)) __THROW \
+__m81_defun (long int, __CONCAT(__lrint,s), (float_type __x)) \
{ \
long int __result; \
__asm ("fmove%.l %1, %0" : "=dm" (__result) : "f" (__x)); \
@@ -314,7 +314,7 @@ __m81_defun (long int, __CONCAT(__lrint,s), (float_type __x)) __THROW \
\
__m81_inline float_type \
__m81_u(__CONCAT(__fma,s))(float_type __x, float_type __y, \
- float_type __z) __THROW \
+ float_type __z) \
{ \
return (__x * __y) + __z; \
}
@@ -331,7 +331,7 @@ __inline_functions (long double,l)
# define __inline_functions(float_type, s) \
__m81_inline void \
__m81_u(__CONCAT(__sincos,s))(float_type __x, float_type *__sinx, \
- float_type *__cosx) __THROW \
+ float_type *__cosx) \
{ \
__asm ("fsincos%.x %2,%1:%0" \
: "=f" (*__sinx), "=f" (*__cosx) : "f" (__x)); \
@@ -351,14 +351,14 @@ __inline_functions (long double,l)
/* Note that there must be no whitespace before the argument passed for
NAME, to make token pasting work correctly with -traditional. */
# define __inline_forward_c(rettype, name, args1, args2) \
-extern __inline rettype __attribute__((__const__)) \
-name args1 __THROW \
-{ \
- return __CONCAT(__,name) args2; \
+extern __inline rettype __attribute__((__const__)) \
+ name args1 \
+{ \
+ return __CONCAT(__,name) args2; \
}
# define __inline_forward(rettype, name, args1, args2) \
-extern __inline rettype name args1 __THROW \
+extern __inline rettype name args1 \
{ \
return __CONCAT(__,name) args2; \
}
diff --git a/sysdeps/m68k/memcopy.h b/sysdeps/m68k/memcopy.h
index cdc268ad51..0951eeaf7a 100644
--- a/sysdeps/m68k/memcopy.h
+++ b/sysdeps/m68k/memcopy.h
@@ -1,5 +1,5 @@
/* memcopy.h -- definitions for memory copy functions. Motorola 68020 version.
- Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Torbjorn Granlund (tege@sics.se).
@@ -68,29 +68,33 @@
do \
{ \
size_t __nblocks = (nbytes) / 32 + 1; \
+ op_t *__dst_ep = (op_t *) (dst_ep); \
+ op_t *__src_ep = (op_t *) (src_ep); \
switch ((nbytes) / sizeof (op_t) % 8) \
do \
{ \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 7: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 6: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 5: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 4: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 3: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 2: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 1: \
- *--((op_t *) dst_ep) = *--((op_t *) src_ep); \
+ *--__dst_ep = *--__src_ep; \
case 0: \
__nblocks--; \
} \
while (__nblocks != 0); \
(nbytes_left) = (nbytes) % sizeof (op_t); \
+ (dst_ep) = (unsigned long) __dst_ep; \
+ (src_ep) = (unsigned long) __src_ep; \
} while (0)
#endif
diff --git a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile
index 758b856854..3ced6568df 100644
--- a/sysdeps/powerpc/powerpc64/Makefile
+++ b/sysdeps/powerpc/powerpc64/Makefile
@@ -22,3 +22,10 @@ ifeq ($(subdir),elf)
# help gcc inline asm code from dl-machine.h
+cflags += -finline-limit=2000
endif
+
+ifeq ($(subdir),gmon)
+# The assembly functions assume that fp arg regs are not trashed.
+# Compiling with -msoft-float ensures that fp regs are not used
+# for moving memory around.
+CFLAGS-mcount.c += -msoft-float
+endif
diff --git a/sysdeps/powerpc/powerpc64/__longjmp-common.S b/sysdeps/powerpc/powerpc64/__longjmp-common.S
index b11a0fd7b5..9d0195dd14 100644
--- a/sysdeps/powerpc/powerpc64/__longjmp-common.S
+++ b/sysdeps/powerpc/powerpc64/__longjmp-common.S
@@ -42,6 +42,7 @@
.machine "altivec"
ENTRY (BP_SYM (__longjmp))
+ CALL_MCOUNT 2
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifndef __NO_VMX__
ld r5,.LC__dl_hwcap@toc(r2)
diff --git a/sysdeps/powerpc/powerpc64/bsd-_setjmp.S b/sysdeps/powerpc/powerpc64/bsd-_setjmp.S
index 13f4056706..82b79a8098 100644
--- a/sysdeps/powerpc/powerpc64/bsd-_setjmp.S
+++ b/sysdeps/powerpc/powerpc64/bsd-_setjmp.S
@@ -25,8 +25,9 @@
#if defined NOT_IN_libc
/* Build a non-versioned object for rtld-*. */
ENTRY (BP_SYM (_setjmp))
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__sigsetjmp))
+ b JUMPTARGET (__sigsetjmp_ent)
END (BP_SYM (_setjmp))
libc_hidden_def (_setjmp)
@@ -36,8 +37,9 @@ libc_hidden_def (_setjmp)
symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.3);
ENTRY (BP_SYM (__novmx_setjmp))
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__novmx__sigsetjmp))
+ b JUMPTARGET (__novmx__sigsetjmp_ent)
END (BP_SYM (__novmx_setjmp))
libc_hidden_def (__novmx_setjmp)
# endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) */
@@ -50,13 +52,15 @@ ENTRY (BP_SYM (__GI__setjmp))
#if defined SHARED && !defined IS_IN_rtld
std r2,40(r1) /* Save the callers TOC in the save area. */
#endif
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__vmx__sigsetjmp))
+ b JUMPTARGET (__vmx__sigsetjmp_ent)
END (BP_SYM (__GI__setjmp))
ENTRY (BP_SYM (__vmx_setjmp))
+ CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */
- b JUMPTARGET(BP_SYM (__vmx__sigsetjmp))
+ b JUMPTARGET (__vmx__sigsetjmp_ent)
END (BP_SYM (__vmx_setjmp))
libc_hidden_def (__vmx_setjmp)
#endif /* !NOT_IN_libc */
diff --git a/sysdeps/powerpc/powerpc64/bsd-setjmp.S b/sysdeps/powerpc/powerpc64/bsd-setjmp.S
index 73b9a4d34e..543e83faa3 100644
--- a/sysdeps/powerpc/powerpc64/bsd-setjmp.S
+++ b/sysdeps/powerpc/powerpc64/bsd-setjmp.S
@@ -25,8 +25,9 @@
ENTRY (__novmxsetjmp)
+ CALL_MCOUNT 1
li r4,1 /* Set second argument to 1. */
- b JUMPTARGET (__novmx__sigsetjmp)
+ b JUMPTARGET (__novmx__sigsetjmp_ent)
END (__novmxsetjmp)
strong_alias (__novmxsetjmp, __novmx__setjmp)
symbol_version (__novmxsetjmp, setjmp, GLIBC_2.3)
@@ -35,8 +36,9 @@ symbol_version (__novmxsetjmp, setjmp, GLIBC_2.3)
ENTRY (__vmxsetjmp)
+ CALL_MCOUNT 1
li r4,1 /* Set second argument to 1. */
- b JUMPTARGET (__vmx__sigsetjmp)
+ b JUMPTARGET (__vmx__sigsetjmp_ent)
END (__vmxsetjmp)
strong_alias (__vmxsetjmp, __vmx__setjmp)
strong_alias (__vmx__sigsetjmp, __setjmp)
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_ceil.S b/sysdeps/powerpc/powerpc64/fpu/s_ceil.S
index 127f302666..a1bfaa70c2 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_ceil.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_ceil.S
@@ -27,6 +27,7 @@
.section ".text"
ENTRY (__ceil)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S
index 34f61423cc..42eb274389 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S
@@ -27,6 +27,7 @@
.section ".text"
ENTRY (__ceilf)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_copysign.S b/sysdeps/powerpc/powerpc64/fpu/s_copysign.S
index 40fd83d3d1..a43ed12cf0 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_copysign.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_copysign.S
@@ -23,6 +23,7 @@
#include <sysdep.h>
ENTRY(__copysign)
+ CALL_MCOUNT 0
/* double [f1] copysign (double [f1] x, double [f2] y);
copysign(x,y) returns a value with the magnitude of x and
with the sign bit of y. */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_floor.S b/sysdeps/powerpc/powerpc64/fpu/s_floor.S
index 57fd63cd66..80cbdc5709 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_floor.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_floor.S
@@ -25,6 +25,7 @@
.section ".text"
ENTRY (__floor)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_floorf.S b/sysdeps/powerpc/powerpc64/fpu/s_floorf.S
index cde92b9174..20cbb15ebd 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_floorf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_floorf.S
@@ -25,6 +25,7 @@
.section ".text"
ENTRY (__floorf)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llrint.S b/sysdeps/powerpc/powerpc64/fpu/s_llrint.S
index bc976a7edb..610b561f25 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_llrint.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_llrint.S
@@ -21,6 +21,7 @@
/* long long int[r3] __llrint (double x[fp1]) */
ENTRY (__llrint)
+ CALL_MCOUNT 0
fctid fp13,fp1
stfd fp13,-16(r1)
nop /* Insure the following load is in a different dispatch group */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S b/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S
index aef84de831..b7b2a8fc63 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S
@@ -21,6 +21,7 @@
/* long long int[r3] __llrintf (float x[fp1]) */
ENTRY (__llrintf)
+ CALL_MCOUNT 0
fctid fp13,fp1
stfd fp13,-16(r1)
nop /* Insure the following load is in a different dispatch group */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/fpu/s_llround.S
index 320ef0f6d8..a3dcd4c33d 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_llround.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_llround.S
@@ -37,6 +37,7 @@
to the integer value. */
ENTRY (__llround)
+ CALL_MCOUNT 0
lfd fp12,.LC0@toc(2)
lfd fp10,.LC1@toc(2)
fcmpu cr6,fp1,fp12 /* if (x > 0.0) */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S
index ff923056b1..b5ca43bf20 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S
@@ -37,6 +37,7 @@
to the integer value. */
ENTRY (__llroundf)
+ CALL_MCOUNT 0
lfd fp12,.LC0@toc(2)
lfd fp10,.LC1@toc(2)
fcmpu cr6,fp1,fp12 /* if (x < 0.0) */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_rint.S b/sysdeps/powerpc/powerpc64/fpu/s_rint.S
index f7db7ff80a..79e807269d 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_rint.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_rint.S
@@ -28,6 +28,7 @@
.section ".text"
ENTRY (__rint)
+ CALL_MCOUNT 0
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
fsub fp12,fp13,fp13 /* generate 0.0 */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_rintf.S b/sysdeps/powerpc/powerpc64/fpu/s_rintf.S
index de6d654796..eb34dd5e77 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_rintf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_rintf.S
@@ -25,6 +25,7 @@
.section ".text"
ENTRY (__rintf)
+ CALL_MCOUNT 0
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
fsubs fp12,fp13,fp13 /* generate 0.0 */
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_round.S b/sysdeps/powerpc/powerpc64/fpu/s_round.S
index 1c2e5299e5..c0b6d46fea 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_round.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_round.S
@@ -39,6 +39,7 @@
to the integer value. */
ENTRY (__round)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_roundf.S b/sysdeps/powerpc/powerpc64/fpu/s_roundf.S
index fd8eb0aea3..23ee4c052b 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_roundf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_roundf.S
@@ -39,6 +39,7 @@
to the integer value. */
ENTRY (__roundf )
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_trunc.S b/sysdeps/powerpc/powerpc64/fpu/s_trunc.S
index dc345ab424..3ddd298525 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_trunc.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_trunc.S
@@ -34,6 +34,7 @@
subtracting +-2**52. */
ENTRY (__trunc)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/fpu/s_truncf.S b/sysdeps/powerpc/powerpc64/fpu/s_truncf.S
index 727647f6de..b38b722a6f 100644
--- a/sysdeps/powerpc/powerpc64/fpu/s_truncf.S
+++ b/sysdeps/powerpc/powerpc64/fpu/s_truncf.S
@@ -34,6 +34,7 @@
subtracting +-2**23. */
ENTRY (__truncf)
+ CALL_MCOUNT 0
mffs fp11 /* Save current FPU rounding mode. */
lfd fp13,.LC0@toc(2)
fabs fp0,fp1
diff --git a/sysdeps/powerpc/powerpc64/memcpy.S b/sysdeps/powerpc/powerpc64/memcpy.S
index 251e1fed80..9df5bb42b6 100644
--- a/sysdeps/powerpc/powerpc64/memcpy.S
+++ b/sysdeps/powerpc/powerpc64/memcpy.S
@@ -37,6 +37,8 @@
Each case has a optimized unrolled loop. */
EALIGN (BP_SYM (memcpy), 5, 0)
+ CALL_MCOUNT 3
+
cmpldi cr1,5,31
neg 0,3
std 3,-16(1)
diff --git a/sysdeps/powerpc/powerpc64/memset.S b/sysdeps/powerpc/powerpc64/memset.S
index f3a299d5c8..1abc59bb17 100644
--- a/sysdeps/powerpc/powerpc64/memset.S
+++ b/sysdeps/powerpc/powerpc64/memset.S
@@ -41,6 +41,7 @@
to 0, to take advantage of the dcbz instruction. */
EALIGN (BP_SYM (memset), 5, 0)
+ CALL_MCOUNT 3
#define rTMP r0
#define rRTN r3 /* Initial value of 1st argument. */
@@ -274,6 +275,7 @@ libc_hidden_builtin_def (memset)
/* Copied from bzero.S to prevent the linker from inserting a stub
between bzero and memset. */
ENTRY (BP_SYM (__bzero))
+ CALL_MCOUNT 3
#if __BOUNDED_POINTERS__
mr r6,r4
li r5,0
diff --git a/sysdeps/powerpc/powerpc64/setjmp-common.S b/sysdeps/powerpc/powerpc64/setjmp-common.S
index ab57170875..f82d5a21f5 100644
--- a/sysdeps/powerpc/powerpc64/setjmp-common.S
+++ b/sysdeps/powerpc/powerpc64/setjmp-common.S
@@ -41,6 +41,10 @@
.machine "altivec"
ENTRY (BP_SYM (__sigsetjmp))
+ CALL_MCOUNT 2
+ .globl JUMPTARGET(GLUE(__sigsetjmp,_ent))
+ .hidden JUMPTARGET(GLUE(__sigsetjmp,_ent))
+JUMPTARGET(GLUE(__sigsetjmp,_ent)):
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
std r1,(JB_GPR1*8)(3)
mflr r0
diff --git a/sysdeps/powerpc/powerpc64/stpcpy.S b/sysdeps/powerpc/powerpc64/stpcpy.S
index deac0ea229..cc7a6ab66a 100644
--- a/sysdeps/powerpc/powerpc64/stpcpy.S
+++ b/sysdeps/powerpc/powerpc64/stpcpy.S
@@ -26,6 +26,7 @@
/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (__stpcpy), 4, 0)
+ CALL_MCOUNT 2
#define rTMP r0
#define rRTN r3
diff --git a/sysdeps/powerpc/powerpc64/strchr.S b/sysdeps/powerpc/powerpc64/strchr.S
index e3222f354d..93ea61e49c 100644
--- a/sysdeps/powerpc/powerpc64/strchr.S
+++ b/sysdeps/powerpc/powerpc64/strchr.S
@@ -26,6 +26,7 @@
/* char * [r3] strchr (const char *s [r3] , int c [r4] ) */
ENTRY (BP_SYM (strchr))
+ CALL_MCOUNT 2
#define rTMP1 r0
#define rRTN r3 /* outgoing result */
diff --git a/sysdeps/powerpc/powerpc64/strcmp.S b/sysdeps/powerpc/powerpc64/strcmp.S
index 7e2dae07f7..4d7eb21bf7 100644
--- a/sysdeps/powerpc/powerpc64/strcmp.S
+++ b/sysdeps/powerpc/powerpc64/strcmp.S
@@ -26,6 +26,7 @@
/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */
EALIGN (BP_SYM(strcmp), 4, 0)
+ CALL_MCOUNT 2
#define rTMP r0
#define rRTN r3
diff --git a/sysdeps/powerpc/powerpc64/strcpy.S b/sysdeps/powerpc/powerpc64/strcpy.S
index 4d12b82e5e..e9e9fc78cd 100644
--- a/sysdeps/powerpc/powerpc64/strcpy.S
+++ b/sysdeps/powerpc/powerpc64/strcpy.S
@@ -26,6 +26,7 @@
/* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (strcpy), 4, 0)
+ CALL_MCOUNT 2
#define rTMP r0
#define rRTN r3 /* incoming DEST arg preserved as result */
diff --git a/sysdeps/powerpc/powerpc64/strlen.S b/sysdeps/powerpc/powerpc64/strlen.S
index 760be5884a..4c1385aead 100644
--- a/sysdeps/powerpc/powerpc64/strlen.S
+++ b/sysdeps/powerpc/powerpc64/strlen.S
@@ -79,6 +79,7 @@
/* int [r3] strlen (char *s [r3]) */
ENTRY (BP_SYM (strlen))
+ CALL_MCOUNT 1
#define rTMP1 r0
#define rRTN r3 /* incoming STR arg, outgoing result */
diff --git a/sysdeps/powerpc/powerpc64/strncmp.S b/sysdeps/powerpc/powerpc64/strncmp.S
index bdcfab99e3..04bdc2f606 100644
--- a/sysdeps/powerpc/powerpc64/strncmp.S
+++ b/sysdeps/powerpc/powerpc64/strncmp.S
@@ -26,6 +26,7 @@
/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
EALIGN (BP_SYM(strncmp), 4, 0)
+ CALL_MCOUNT 3
#define rTMP r0
#define rRTN r3
diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h
index 4420a6dfac..fead0b578a 100644
--- a/sysdeps/powerpc/powerpc64/sysdep.h
+++ b/sysdeps/powerpc/powerpc64/sysdep.h
@@ -23,37 +23,36 @@
#ifdef __ASSEMBLER__
+/* Support macros for CALL_MCOUNT. */
+ .macro SAVE_ARG NARG
+ .if \NARG
+ SAVE_ARG \NARG-1
+ std 2+\NARG,-72+8*(\NARG)(1)
+ .endif
+ .endm
+
+ .macro REST_ARG NARG
+ .if \NARG
+ REST_ARG \NARG-1
+ ld 2+\NARG,40+8*(\NARG)(1)
+ .endif
+ .endm
+
/* If compiled for profiling, call `_mcount' at the start of each function.
see ppc-mcount.S for more details. */
+ .macro CALL_MCOUNT NARG
#ifdef PROF
-/* The mcount code relies on a the return address being on the stack
- to locate our caller and so it can restore it; so store one just
- for its benefit. */
-#ifdef SYSV_ELF_PROFILING
-#define CALL_MCOUNT \
- .pushsection; \
- .section ".data"; \
- .align ALIGNARG(2); \
-__mcount: \
- .long 0; \
- .previous; \
- .section ".toc","aw"; \
-.LC__mcount:; \
- .tc __mcount[TC],__mcount; \
- .previous; \
- mflr r0; \
- std r0,16(r1); \
- ld r0,.LC__mcount@toc(r2); \
- bl JUMPTARGET(_mcount);
-#else /* SYSV_ELF_PROFILING */
-#define CALL_MCOUNT \
- mflr r0; \
- std r0,16(r1); \
- bl JUMPTARGET(_mcount);
-#endif /* SYSV_ELF_PROFILING */
-#else /* PROF */
-#define CALL_MCOUNT /* Do nothing. */
-#endif /* PROF */
+ mflr r0
+ SAVE_ARG \NARG
+ std r0,16(r1)
+ stdu r1,-112(r1)
+ bl JUMPTARGET (_mcount)
+ ld r0,128(r1)
+ REST_ARG \NARG
+ addi r1,r1,112
+ mtlr r0
+#endif
+ .endm
#ifdef USE_PPC64_OVERLAPPING_OPD
# define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase
@@ -106,24 +105,11 @@ BODY_LABEL(name):
/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
past a 2^alignt boundary. */
-#ifdef PROF
-#define EALIGN(name, alignt, words) \
- ENTRY_2(name) \
- .align ALIGNARG(alignt); \
- EALIGN_W_##words; \
-BODY_LABEL(name): \
- CALL_MCOUNT \
- b 0f; \
- .align ALIGNARG(alignt); \
- EALIGN_W_##words; \
-0:
-#else /* PROF */
#define EALIGN(name, alignt, words) \
ENTRY_2(name) \
.align ALIGNARG(alignt); \
EALIGN_W_##words; \
BODY_LABEL(name):
-#endif
/* Local labels stripped out by the linker. */
#undef L
diff --git a/timezone/asia b/timezone/asia
index 4417134dac..3c2c1a1868 100644
--- a/timezone/asia
+++ b/timezone/asia
@@ -1,4 +1,4 @@
-# @(#)asia 7.75
+# @(#)asia 7.77
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
@@ -761,6 +761,26 @@ Zone Asia/Jerusalem 2:20:56 - LMT 1880
# direction is expected until the latter part of 2004 which is a long
# time off in terms of Israeli politics.
+# (2004-09-20):
+# The latest rumour, however, is that in 2005, when the clock changes to
+# Daylight Saving Time (date as yet unknown), the move will be a two-hour leap
+# forward (from UTC+0200 to UTC+0400) and then, in the fall, the clock will
+# move back only an hour to UTC+0300 thus effectively moving Israel's timezone
+# from UTC+0200 to UTC+0300. However, no actual draft has been put before the
+# Knesset (Israel's Parliament) though the intention is to do so this
+# month [2004-09].
+
+# (2004-09-26):
+# Even though the draft law for the above did pass the Ministerial Committee
+# for Legislative Matters three months ago, it was voted down in today's
+# Cabinet meeting. The current suggestion is to keep the current timezone at
+# UTC+0200 but have an extended period of Daylight Saving Time (UTC+0300) from
+# the beginning of Passover holiday in the spring to after the Tabernacle
+# holiday in the fall (i.e. the dates of which are governed by the Hebrew
+# calendar but this means at least 184 days of DST). However, this is only a
+# suggestion that was raised in today's cabinet meeting and has not yet been
+# drafted.
+
###############################################################################
diff --git a/timezone/private.h b/timezone/private.h
index c8f4548683..57663052f0 100644
--- a/timezone/private.h
+++ b/timezone/private.h
@@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
-static char privatehid[] = "@(#)private.h 7.53";
+static char privatehid[] = "@(#)private.h 7.54";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -190,11 +190,22 @@ extern int unlink P((const char * filename));
** But some newer errno.h implementations define it as a macro.
** Fix the former without affecting the latter.
*/
+
#ifndef errno
extern int errno;
#endif /* !defined errno */
/*
+** Some time.h implementations don't declare asctime_r.
+** Others might define it as a macro.
+** Fix the former without affecting the latter.
+*/
+
+#ifndef asctime_r
+extern char * asctime_r();
+#endif
+
+/*
** Private function declarations.
*/
char * icalloc P((int nelem, int elsize));
diff --git a/timezone/southamerica b/timezone/southamerica
index 13bd5270e8..912491049b 100644
--- a/timezone/southamerica
+++ b/timezone/southamerica
@@ -1,4 +1,4 @@
-# @(#)southamerica 7.52
+# @(#)southamerica 7.54
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
@@ -186,6 +186,20 @@ Rule Arg 2000 only - Mar Sun>=1 0:00 0 -
# contains a contradiction. I would give more credence to the Saturday/Sunday
# date than the "three days earlier" phrase, and conclude that Tierra del
# Fuego set its clocks back at 2004-05-30 00:00.
+#
+# From Steffen Thorsen (2004-10-05):
+# The previous law 7210 which changed the province of Mendoza's time zone
+# back in May have been modified slightly in a new law 7277, which set the
+# new end date to 2004-09-26 (original date was 2004-10-17).
+# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040924-27244-normas.pdf
+#
+# From Mariano Absatz (2004-10-05):
+# San Juan changed from UTC-03:00 to UTC-04:00 at midnight between
+# Sunday, May 30th and Monday, May 31st. It changed back to UTC-03:00
+# at midnight between Saturday, July 24th and Sunday, July 25th....
+# http://www.sanjuan.gov.ar/prensa/archivo/000329.html
+# http://www.sanjuan.gov.ar/prensa/archivo/000426.html
+# http://www.sanjuan.gov.ar/prensa/archivo/000441.html
# Unless otherwise specified, data are from Shanks through 1992, from
# the IATA otherwise. As noted below, Shanks says that
@@ -261,8 +275,8 @@ Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
-4:00 - WART 1991 May 7
-3:00 Arg AR%sT 1999 Oct 3
-4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Oct 17
+ -3:00 - ART 2004 May 31
+ -4:00 - WART 2004 Jul 25
-3:00 - ART
#
# Jujuy (JY)
@@ -306,7 +320,7 @@ Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
-3:00 Arg AR%sT 1999 Oct 3
-4:00 Arg AR%sT 2000 Mar 3
-3:00 - ART 2004 May 23
- -4:00 - WART 2004 Oct 17
+ -4:00 - WART 2004 Sep 26
-3:00 - ART
#
# Chubut (CH)
@@ -420,6 +434,11 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# the Government decided to postpone DST, instead of changing the Constitution
# (maybe, for the next elections, it will be possible to change the clock)...
+# From Rodrigo Severo (2004-10-04):
+# It's just the biannual change made necessary by the much hyped, supposedly
+# modern Brazilian eletronic voting machines which, apparently, can't deal
+# with a time change between the first and the second rounds of the elections.
+
# From Paul Eggert (2002-10-10):
# The official decrees referenced below are mostly taken from
# <a href="http://pcdsh01.on.br/DecHV.html">
@@ -556,11 +575,15 @@ Rule Brazil 2001 max - Feb Sun>=15 0:00 0 -
Rule Brazil 2002 only - Nov 3 0:00 1:00 S
# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm"></a>
-Rule Brazil 2003 max - Oct Sun>=15 0:00 1:00 S
+Rule Brazil 2003 only - Oct 19 0:00 1:00 S
+# Decree 5,223 (2004-10-01) reestablishes DST in MT.
+# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm"></a>
+Rule Brazil 2004 only - Nov 2 0:00 1:00 S
# The latest ruleset listed above says that the following states observe DST:
-# DF, ES, GO, MG, MS, PR, RJ, RS, SC, SP.
+# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
#
-# For dates after mid-2004, the above rules with TO="max" are guesses
+Rule Brazil 2005 max - Oct Sun>=15 0:00 1:00 S
+# For dates after mid-2005, the above rules with TO="max" are guesses
# and are quite possibly wrong, but are more likely than no DST at all.
@@ -648,7 +671,8 @@ Zone America/Campo_Grande -3:38:28 - LMT 1914
# Mato Grosso (MT)
Zone America/Cuiaba -3:44:20 - LMT 1914
-4:00 Brazil AM%sT 2003 Sep 24
- -4:00 - AMT
+ -4:00 - AMT 2004 Oct 4
+ -4:00 Brazil AM%sT
#
# west Para (PA), Rondonia (RO)
# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
@@ -1029,6 +1053,11 @@ Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
Rule Uruguay 1993 only - Feb 28 0:00 0 -
+# From Eduardo Cota (2004-09-20):
+# The uruguayan government has decreed a change in the local time....
+# http://www.presidencia.gub.uy/decretos/2004091502.htm
+Rule Uruguay 2004 only - Sep Sun>=15 0:00 1:00 S
+Rule Uruguay 2005 only - Mar Sun>=8 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
-3:44:44 - MMT 1920 May 1 # Montevideo MT
diff --git a/timezone/zdump.c b/timezone/zdump.c
index 9faeaf21b2..20bb916822 100644
--- a/timezone/zdump.c
+++ b/timezone/zdump.c
@@ -1,4 +1,4 @@
-static char elsieid[] = "@(#)zdump.c 7.31";
+static char elsieid[] = "@(#)zdump.c 7.40";
/*
** This code has been made independent of the rest of the time
@@ -64,16 +64,15 @@ static char elsieid[] = "@(#)zdump.c 7.31";
#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
#endif /* !defined isleap */
-#if HAVE_GETTEXT - 0
+#if HAVE_GETTEXT
#include "locale.h" /* for setlocale */
#include "libintl.h"
-#endif /* HAVE_GETTEXT - 0 */
+#endif /* HAVE_GETTEXT */
#ifndef GNUC_or_lint
#ifdef lint
#define GNUC_or_lint
-#endif /* defined lint */
-#ifndef lint
+#else /* !defined lint */
#ifdef __GNUC__
#define GNUC_or_lint
#endif /* defined __GNUC__ */
@@ -83,8 +82,7 @@ static char elsieid[] = "@(#)zdump.c 7.31";
#ifndef INITIALIZE
#ifdef GNUC_or_lint
#define INITIALIZE(x) ((x) = 0)
-#endif /* defined GNUC_or_lint */
-#ifndef GNUC_or_lint
+#else /* !defined GNUC_or_lint */
#define INITIALIZE(x)
#endif /* !defined GNUC_or_lint */
#endif /* !defined INITIALIZE */
@@ -96,11 +94,11 @@ static char elsieid[] = "@(#)zdump.c 7.31";
*/
#ifndef _
-#if HAVE_GETTEXT - 0
+#if HAVE_GETTEXT
#define _(msgid) gettext(msgid)
-#else /* !(HAVE_GETTEXT - 0) */
+#else /* !HAVE_GETTEXT */
#define _(msgid) msgid
-#endif /* !(HAVE_GETTEXT - 0) */
+#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
@@ -110,8 +108,7 @@ static char elsieid[] = "@(#)zdump.c 7.31";
#ifndef P
#ifdef __STDC__
#define P(x) x
-#endif /* defined __STDC__ */
-#ifndef __STDC__
+#else /* !defined __STDC__ */
#define P(x) ()
#endif /* !defined __STDC__ */
#endif /* !defined P */
@@ -129,6 +126,7 @@ static time_t hunt P((char * name, time_t lot, time_t hit));
static size_t longest;
static char * progname;
static void show P((char * zone, time_t t, int v));
+static void dumptime P((const struct tm * tmp));
int
main(argc, argv)
@@ -150,14 +148,13 @@ char * argv[];
struct tm newtm;
INITIALIZE(cuttime);
-#if HAVE_GETTEXT - 0
- (void) setlocale(LC_CTYPE, "");
+#if HAVE_GETTEXT
(void) setlocale(LC_MESSAGES, "");
#ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
-#endif /* defined(TEXTDOMAINDIR) */
+#endif /* defined TEXTDOMAINDIR */
(void) textdomain(TZ_DOMAIN);
-#endif /* HAVE_GETTEXT - 0 */
+#endif /* HAVE_GETTEXT */
progname = argv[0];
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
@@ -324,7 +321,7 @@ struct tm * oldp;
return -delta(oldp, newp);
result = 0;
for (tmy = oldp->tm_year; tmy < newp->tm_year; ++tmy)
- result += DAYSPERNYEAR + isleap(tmy + TM_YEAR_BASE);
+ result += DAYSPERNYEAR + isleap(tmy + (long) TM_YEAR_BASE);
result += newp->tm_yday - oldp->tm_yday;
result *= HOURSPERDAY;
result += newp->tm_hour - oldp->tm_hour;
@@ -344,10 +341,12 @@ int v;
struct tm * tmp;
(void) printf("%-*s ", (int) longest, zone);
- if (v)
- (void) printf("%.24s UTC = ", asctime(gmtime(&t)));
+ if (v) {
+ dumptime(gmtime(&t));
+ (void) printf(" UTC = ");
+ }
tmp = localtime(&t);
- (void) printf("%.24s", asctime(tmp));
+ dumptime(tmp);
if (*abbr(tmp) != '\0')
(void) printf(" %s", abbr(tmp));
if (v) {
@@ -371,3 +370,37 @@ struct tm * tmp;
result = tzname[tmp->tm_isdst];
return (result == NULL) ? &nada : result;
}
+
+static void
+dumptime(timeptr)
+register const struct tm * timeptr;
+{
+ static const char wday_name[][3] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ };
+ static const char mon_name[][3] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+ register const char * wn;
+ register const char * mn;
+
+ /*
+ ** The packaged versions of localtime and gmtime never put out-of-range
+ ** values in tm_wday or tm_mon, but since this code might be compiled
+ ** with other (perhaps experimental) versions, paranoia is in order.
+ */
+ if (timeptr->tm_wday < 0 || timeptr->tm_wday >=
+ (int) (sizeof wday_name / sizeof wday_name[0]))
+ wn = "???";
+ else wn = wday_name[timeptr->tm_wday];
+ if (timeptr->tm_mon < 0 || timeptr->tm_mon >=
+ (int) (sizeof mon_name / sizeof mon_name[0]))
+ mn = "???";
+ else mn = mon_name[timeptr->tm_mon];
+ (void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d %ld",
+ wn, mn,
+ timeptr->tm_mday, timeptr->tm_hour,
+ timeptr->tm_min, timeptr->tm_sec,
+ timeptr->tm_year + (long) TM_YEAR_BASE);
+}