summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--nptl/ChangeLog4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S16
-rw-r--r--timezone/leapseconds33
-rw-r--r--timezone/zdump.c13
-rw-r--r--timezone/zic.c30
6 files changed, 58 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog
index 753cd4162f..31bc91cdd5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2003-09-22  Ulrich Drepper  <drepper@redhat.com>
+
+	* timezone/zdump.c: Update from tzcode2003c.
+	* timezone/zic.c: Likewise.
+	* timezone/leapseconds: Update from tzdata2003c.
+
 2003-09-19  Ulrich Drepper  <drepper@redhat.com>
 
 	* elf/Makefile ($(objpfx)librtld.os): Create link map also for
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index cda72ea2bd..e74dec5c36 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,9 @@
 2003-09-22  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+	(__lll_mutex_lock_wait): Minor optimization to avoid one atomic
+	operation if possible.
+
 	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Don't play tricks
 	like jumping over the lock prefix.
 
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
index c73970d45f..c5ec154af2 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
@@ -41,16 +41,18 @@
 	.hidden	__lll_mutex_lock_wait
 	.align	16
 __lll_mutex_lock_wait:
-	pushl	%esi
-	pushl	%ebx
 	pushl	%edx
+	pushl	%ebx
+	pushl	%esi
 
+	movl	$2, %edx
 	movl	%ecx, %ebx
 	xorl	%esi, %esi	/* No timeout.  */
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
-	movl	$2, %edx
 
-1:
+1:	cmpl	%edx, %eax	/* NB:	 %edx == 2 */
+	je 3f
+
 	movl	$1, %eax
 	LOCK
 	cmpxchgl %edx, (%ebx)
@@ -58,7 +60,7 @@ __lll_mutex_lock_wait:
 	testl	%eax, %eax
 	je	2f
 
-	movl	$SYS_futex, %eax
+3:	movl	$SYS_futex, %eax
 	ENTER_KERNEL
 
 	xorl	%eax, %eax
@@ -67,9 +69,9 @@ __lll_mutex_lock_wait:
 
 	jnz,pn	1b
 
-	popl	%edx
-	popl	%ebx
 	popl	%esi
+	popl	%ebx
+	popl	%edx
 	ret
 	.size	__lll_mutex_lock_wait,.-__lll_mutex_lock_wait
 
diff --git a/timezone/leapseconds b/timezone/leapseconds
index c5306a68ae..0e7d8c8454 100644
--- a/timezone/leapseconds
+++ b/timezone/leapseconds
@@ -1,4 +1,4 @@
-# @(#)leapseconds	7.15
+# @(#)leapseconds	7.16
 
 # Allowance for leapseconds added to each timezone file.
 
@@ -44,8 +44,8 @@ Leap	1995	Dec	31	23:59:60	+	S
 Leap	1997	Jun	30	23:59:60	+	S
 Leap	1998	Dec	31	23:59:60	+	S
 
-#                  INTERNATIONAL EARTH ROTATION SERVICE (IERS)
-#   	       SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE
+# 		INTERNATIONAL EARTH ROTATION SERVICE (IERS)
+# 		SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE
 # 
 # SERVICE DE LA ROTATION TERRESTRE
 # OBSERVATOIRE DE PARIS
@@ -54,27 +54,26 @@ Leap	1998	Dec	31	23:59:60	+	S
 # FAX       : 33 (0) 1 40 51 22 91
 # Internet  : iers@obspm.fr
 # 
-#                                               Paris, 14 January 2002
+# 				 		Paris, 1 July 2003
 # 
-#                                               Bulletin C 23
+# 						Bulletin C 26
 # 
-#                                               To authorities responsible
-#                                               for the measurement and
-#                                               distribution of time
+# 						To authorities responsible
+# 						for the measurement and
+# 						distribution of time
 # 
-#                          INFORMATION ON UTC - TAI
+# 			INFORMATION ON UTC - TAI
 # 
-# NO positive leap second will be introduced at the end of June 2002.
-# The difference between UTC and the International Atomic Time TAI is :		
+# NO positive leap second will be introduced at the end of December 2003.
+# The difference between UTC and the International Atomic Time TAI is:
 # 		
-#     from 1999 January 1, 0h UTC, until further notice : UTC-TAI = -32 s
+# 	from 1999 January 1, 0h UTC, until further notice: UTC-TAI = -32 s
 # 
 # Leap seconds can be introduced in UTC at the end of the months of December
-# or June,  depending on the evolution of UT1-TAI. Bulletin C is mailed every
+# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
 # six months, either to announce a time step in UTC, or to confirm that there
 # will be no time step at the next possible date.
 # 
-#                                             Daniel GAMBIS
-#                                             Director			
-#                                             Earth Orientation Center of IERS
-#                                             Observatoire de Paris, France
+# 					Daniel GAMBIS
+# 					Director
+# 					Earth Orientation Center of IERS
diff --git a/timezone/zdump.c b/timezone/zdump.c
index cc27d758fb..9faeaf21b2 100644
--- a/timezone/zdump.c
+++ b/timezone/zdump.c
@@ -1,8 +1,4 @@
-#ifndef lint
-#ifndef NOID
-static char	elsieid[] = "@(#)zdump.c	7.29";
-#endif /* !defined NOID */
-#endif /* !defined lint */
+static char	elsieid[] = "@(#)zdump.c	7.31";
 
 /*
 ** This code has been made independent of the rest of the time
@@ -163,6 +159,11 @@ char *	argv[];
 	(void) textdomain(TZ_DOMAIN);
 #endif /* HAVE_GETTEXT - 0 */
 	progname = argv[0];
+	for (i = 1; i < argc; ++i)
+		if (strcmp(argv[i], "--version") == 0) {
+			(void) printf("%s\n", elsieid);
+			(void) exit(EXIT_SUCCESS);
+		}
 	vflag = 0;
 	cutoff = NULL;
 	while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v')
@@ -172,7 +173,7 @@ char *	argv[];
 	if ((c != EOF && c != -1) ||
 		(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
 			(void) fprintf(stderr,
-_("%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n"),
+_("%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n"),
 				argv[0], argv[0]);
 			(void) exit(EXIT_FAILURE);
 	}
diff --git a/timezone/zic.c b/timezone/zic.c
index 26d0041296..b164b36738 100644
--- a/timezone/zic.c
+++ b/timezone/zic.c
@@ -1,8 +1,4 @@
-#ifndef lint
-#ifndef NOID
-static char	elsieid[] = "@(#)zic.c	7.107";
-#endif /* !defined NOID */
-#endif /* !defined lint */
+static char	elsieid[] = "@(#)zic.c	7.113";
 
 #include "private.h"
 #include "locale.h"
@@ -446,7 +442,7 @@ const char * const	string;
 static void
 usage P((void))
 {
-	(void) fprintf(stderr, _("%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
+	(void) fprintf(stderr, _("%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
 		progname, progname);
 	(void) exit(EXIT_FAILURE);
 }
@@ -479,6 +475,11 @@ char *	argv[];
 	(void) textdomain(TZ_DOMAIN);
 #endif /* HAVE_GETTEXT - 0 */
 	progname = argv[0];
+	for (i = 1; i < argc; ++i)
+		if (strcmp(argv[i], "--version") == 0) {
+			(void) printf("%s\n", elsieid);
+			(void) exit(EXIT_SUCCESS);
+		}
 	while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
 		switch (c) {
 			default:
@@ -1165,14 +1166,15 @@ const int		nfields;
 		error(_("time before zero"));
 		return;
 	}
-	t = (time_t) dayoff * SECSPERDAY;
-	/*
-	** Cheap overflow check.
-	*/
-	if (t / SECSPERDAY != dayoff) {
-		error(_("time overflow"));
+	if (dayoff < min_time / SECSPERDAY) {
+		error(_("time too small"));
 		return;
 	}
+	if (dayoff > max_time / SECSPERDAY) {
+		error(_("time too large"));
+		return;
+	}
+	t = (time_t) dayoff * SECSPERDAY;
 	tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE);
 	cp = fields[LP_CORR];
 	{
@@ -1325,9 +1327,9 @@ const char * const		timep;
 		return;
 	} else if (noise) {
 		if (rp->r_loyear < min_year_representable)
-			warning(_("starting year too low to be represented"));
+			warning(_("ending year too low to be represented"));
 		else if (rp->r_loyear > max_year_representable)
-			warning(_("starting year too high to be represented"));
+			warning(_("ending year too high to be represented"));
 	}
 	if (rp->r_loyear > rp->r_hiyear) {
 		error(_("starting year greater than ending year"));