1999-10-08  Ulrich Drepper  <drepper@cygnus.com>

	* nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_spent): Fix
	handling of empty entries.
	Patch by Thorsten Kukuk <kukuk@suse.de>.

1999-10-08  Andreas Schwab  <schwab@suse.de>

	* debug/xtrace.sh: Fix quoting bugs.  Implement --help and --version.

1999-10-08  Andreas Schwab  <schwab@suse.de>

	* debug/pcprofiledump.c: Fix typos.

1999-10-07  Andreas Jaeger  <aj@suse.de>

	* math/Makefile (tests): Added basic-tests.

	* math/basic-test.c: New file.  Contains function basic_tests from
	libm-test.

1999-10-07  Andreas Schwab  <schwab@suse.de>

	* malloc/memprof.sh: Fix quoting bugs.

1999-10-08  Ulrich Drepper  <drepper@cygnus.com>

	* timezone/europe: Update from tzdata1999h.
This commit is contained in:
Ulrich Drepper 1999-10-08 17:16:17 +00:00
parent 9640bbe1c1
commit b5c6276a6e
13 changed files with 268 additions and 51 deletions

View File

@ -1,3 +1,32 @@
1999-10-08 Ulrich Drepper <drepper@cygnus.com>
* nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_spent): Fix
handling of empty entries.
Patch by Thorsten Kukuk <kukuk@suse.de>.
1999-10-08 Andreas Schwab <schwab@suse.de>
* debug/xtrace.sh: Fix quoting bugs. Implement --help and --version.
1999-10-08 Andreas Schwab <schwab@suse.de>
* debug/pcprofiledump.c: Fix typos.
1999-10-07 Andreas Jaeger <aj@suse.de>
* math/Makefile (tests): Added basic-tests.
* math/basic-test.c: New file. Contains function basic_tests from
libm-test.
1999-10-07 Andreas Schwab <schwab@suse.de>
* malloc/memprof.sh: Fix quoting bugs.
1999-10-08 Ulrich Drepper <drepper@cygnus.com>
* timezone/europe: Update from tzdata1999h.
1999-10-07 Ulrich Drepper <drepper@cygnus.com>
* elf/elf.h: Update from last gABI draft.

View File

@ -81,6 +81,9 @@ COLUMNS=${COLUMNS:-80}
# If `TERM' is not set, set it to `xterm'.
TERM=${TERM:-xterm}
# The data file to process, if any.
data=
# Process arguments. But stop as soon as the program name is found.
while test $# -gt 0; do
case "$1" in
@ -94,6 +97,12 @@ while test $# -gt 0; do
--d=* | --da=* | --dat=* | --data=*)
data=${1##*=}
;;
-? | --h | --he | --hel | --help)
do_help
;;
--v | --ve | --ver | --vers | --versi | --versio | --version)
do_version
;;
--)
# Stop processing arguments.
shift
@ -133,9 +142,9 @@ fi
printf "%-20s %-*s %6s\n" Function $(expr $COLUMNS - 30) File Line
for i in $(seq 1 $COLUMNS); do echo -n -; done; echo
if test -n "$data"; then
eval $pcprofiledump $data |
$pcprofiledump "$data" |
sed 's/this = \([^,]*\).*/\1/' |
addr2line -fC -e $program |
addr2line -fC -e "$program" |
while read fct; do
read file
if test "$fct" != '??' -a "$file" != '??:0'; then
@ -146,9 +155,9 @@ else
fifo=$(mktemp -u ${TMPDIR:-/tmp}/xprof.XXXXXX)
mkfifo -m 0600 $fifo || exit 1
# Now start the program and let it write to the FIFO.
eval $TERM -T "'xtrace - $program $*'" -e /bin/sh -c "'LD_PRELOAD=$pcprofileso PCPROFILE_OUTPUT=$fifo $program $*; read $fifo'" &
$TERM -T "xtrace - $program $*" -e /bin/sh -c "LD_PRELOAD=$pcprofileso PCPROFILE_OUTPUT=$fifo $program $*; read $fifo" &
termpid=$!
eval $pcprofiledump $fifo |
$pcprofiledump $fifo |
sed 's/this = \([^,]*\).*/\1/' |
addr2line -fC -e $program |
while read fct; do

View File

@ -1,3 +1,7 @@
1999-10-08 Ulrich Drepper <drepper@cygnus.com>
* shlib-versions: New file.
1999-10-07 Ulrich Drepper <drepper@cygnus.com>
* Makefile: New file.

View File

@ -0,0 +1,2 @@
# The thread debug library
.*-.*-linux.* libthread_db=1

View File

@ -19,7 +19,7 @@
Boston, MA 02111-1307, USA. */
#include "thread_dbP.h"
#include <gnu/lib-names.h>
td_err_e
td_ta_get_nthreads (const td_thragent_t *ta, int *np)
@ -29,7 +29,7 @@ td_ta_get_nthreads (const td_thragent_t *ta, int *np)
LOG (__FUNCTION__);
/* Access the variable `__pthread_handles_num'. */
if (ps_pglobal_lookup (ta->ph, "libpthread.so.0", "__pthread_handles_num",
if (ps_pglobal_lookup (ta->ph, LIBPTHREAD_SO, "__pthread_handles_num",
&addr) != PS_OK)
return TD_ERR; /* XXX Other error value? */

View File

@ -21,6 +21,7 @@
#include <stddef.h>
#include <stdlib.h>
#include <gnu/lib-names.h>
#include "thread_dbP.h"
@ -33,7 +34,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
LOG (__FUNCTION__);
/* See whether the library contains the necessary symbols. */
if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_threads_debug",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "__pthread_threads_debug",
&addr) != PS_OK)
return TD_LIBTHREAD;
@ -47,7 +48,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
(*ta)->ph = ps;
/* See whether the library contains the necessary symbols. */
if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_handles",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "__pthread_handles",
&addr) != PS_OK)
{
free_return:
@ -58,7 +59,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
(*ta)->handles = (struct pthread_handle_struct *) addr;
if (ps_pglobal_lookup (ps, "libpthread.so.0", "pthread_keys",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "pthread_keys",
&addr) != PS_OK)
goto free_return;
@ -68,7 +69,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
/* Find out about the maximum number of threads. Old implementations
don't provide this information. In this case we assume that the
debug library is compiled with the same values. */
if (ps_pglobal_lookup (ps, "libpthread.so.0",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_threads_max", &addr) != PS_OK)
(*ta)->pthread_threads_max = PTHREAD_THREADS_MAX;
else
@ -79,7 +80,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
}
/* Similar for the maximum number of thread local data keys. */
if (ps_pglobal_lookup (ps, "libpthread.so.0",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_keys_max", &addr) != PS_OK)
(*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;
else
@ -90,7 +91,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
}
/* And for the size of the second level arrays for the keys. */
if (ps_pglobal_lookup (ps, "libpthread.so.0",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_sizeof_descr", &addr)
!= PS_OK)
(*ta)->sizeof_descr = offsetof (struct _pthread_descr_struct, p_startfct);
@ -101,7 +102,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
}
/* Similar for the maximum number of thread local data keys. */
if (ps_pglobal_lookup (ps, "libpthread.so.0",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_keys_max", &addr) != PS_OK)
(*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;
else

View File

@ -291,7 +291,7 @@ extern td_err_e td_init (void);
/* Historical relict. Should not be used anymore. */
extern td_err_e td_log (void);
/* Generate new thread debu librarz handle for process PS. */
/* Generate new thread debug library handle for process PS. */
extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);
/* Free resources allocated for TA. */
@ -316,7 +316,7 @@ extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
td_thrhandle_t *__th);
/* Call for each thread is process associated with TA the callback function
/* Call for each thread in a process associated with TA the callback function
CALLBACK. */
extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
td_thr_iter_f *__callback, void *__cbdata_p,
@ -344,7 +344,7 @@ extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);
/* Reset statistics. */
extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);
/* Retrieve statitics from process associated with TA. */
/* Retrieve statistics from process associated with TA. */
extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
td_ta_stats_t *__statsp);

View File

@ -201,6 +201,7 @@ fi
add_env="LD_PRELOAD=$memprofso"
# Generate data file name.
datafile=
if test -n "$data"; then
datafile="$data"
elif test -n "$png"; then
@ -229,21 +230,22 @@ if test -n "$notimer"; then
fi
# Execute the program itself.
eval $add_env $*
eval $add_env '"$@"'
result=$?
# Generate the PNG data file is wanted and there is something to generate
# Generate the PNG data file if wanted and there is something to generate
# it from.
if test -n "$png" -a -s "$datafile"; then
if test -n "$png" -a -n "$datafile" -a -s "$datafile"; then
# Append extension .png if it isn't already there.
if test $png = ${png%*.png}; then
png="$png.png"
fi
eval $memprofstat $memprofstat_args $datafile $png
case $png in
*.png) ;;
*) png="$png.png" ;;
esac
$memprofstat $memprofstat_args "$datafile" "$png"
fi
if test -z "$data" -a -n $datafile; then
rm -f $datafile
if test -z "$data" -a -n "$datafile"; then
rm -f "$datafile"
fi
exit $result

View File

@ -77,7 +77,7 @@ distribute += $(long-c-yes:=.c)
# Rules for the test suite.
tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \
test-ifloat test-idouble test-matherr test-fenv \
atest-exp atest-sincos atest-exp2
atest-exp atest-sincos atest-exp2 basic-test
# We do the `long double' tests only if this data type is available and
# distinct from `double'.
test-longdouble-yes = test-ldouble test-ildoubl

123
math/basic-test.c Normal file
View File

@ -0,0 +1,123 @@
/* Copyright (C) 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 1999.
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 <math.h>
#include <float.h>
#include <stdio.h>
static int errors = 0;
static void
check (const char *testname, int result)
{
if (!result) {
printf ("Failure: %s\n", testname);
errors++;
}
}
#define TEST_FUNC(NAME, FLOAT, NANFUNC, EPSILON, HUGEVAL) \
static void \
NAME (void) \
{ \
/* Variables are declared volatile to forbid some compiler \
optimizations. */ \
volatile FLOAT Inf_var, NaN_var, zero_var, one_var; \
FLOAT x1, x2; \
\
zero_var = 0.0; \
one_var = 1.0; \
NaN_var = zero_var/zero_var; \
Inf_var = one_var / zero_var; \
\
(void) &zero_var; \
(void) &one_var; \
(void) &NaN_var; \
(void) &Inf_var; \
\
\
check (#FLOAT " isinf (inf) == 1", isinf (Inf_var) == 1); \
check (#FLOAT " isinf (-inf) == -1", isinf (-Inf_var) == -1); \
check (#FLOAT " !isinf (1)", !(isinf (one_var))); \
check (#FLOAT " !isinf (NaN)", !(isinf (NaN_var))); \
\
check (#FLOAT " isnan (NaN)", isnan (NaN_var)); \
check (#FLOAT " isnan (-NaN)", isnan (-NaN_var)); \
check (#FLOAT " !isnan (1)", !(isnan (one_var))); \
check (#FLOAT " !isnan (inf)", !(isnan (Inf_var))); \
\
check (#FLOAT " inf == inf", Inf_var == Inf_var); \
check (#FLOAT " -inf == -inf", -Inf_var == -Inf_var); \
check (#FLOAT " inf != -inf", Inf_var != -Inf_var); \
check (#FLOAT " NaN != NaN", NaN_var != NaN_var); \
\
/* \
the same tests but this time with NAN from <bits/nan.h> \
NAN is a double const \
*/ \
check (#FLOAT " isnan (NAN)", isnan (NAN)); \
check (#FLOAT " isnan (-NAN)", isnan (-NAN)); \
check (#FLOAT " !isinf (NAN)", !(isinf (NAN))); \
check (#FLOAT " !isinf (-NAN)", !(isinf (-NAN))); \
check (#FLOAT " NAN != NAN", NAN != NAN); \
\
/* \
And again with the value returned by the `nan' function. \
*/ \
check (#FLOAT " isnan (NAN)", isnan (NANFUNC (""))); \
check (#FLOAT " isnan (-NAN)", isnan (-NANFUNC (""))); \
check (#FLOAT " !isinf (NAN)", !(isinf (NANFUNC ("")))); \
check (#FLOAT " !isinf (-NAN)", !(isinf (-NANFUNC ("")))); \
check (#FLOAT " NAN != NAN", NANFUNC ("") != NANFUNC ("")); \
\
/* test if EPSILON is ok */ \
x1 = 1.0; \
x2 = x1 + EPSILON; \
check (#FLOAT " 1 != 1+EPSILON", x1 != x2); \
\
x1 = 1.0; \
x2 = x1 - EPSILON; \
check (#FLOAT " 1 != 1-EPSILON", x1 != x2); \
\
/* test if HUGE_VALx is ok */ \
x1 = HUGEVAL; \
check (#FLOAT " isinf (HUGE_VALx) == +1", isinf (x1) == +1); \
x1 = - HUGEVAL; \
check (#FLOAT " isinf (-HUGE_VALx) == -1", isinf (x1) == -1); \
}
TEST_FUNC (float_test, float, nanf, FLT_EPSILON, HUGE_VALF)
TEST_FUNC (double_test, double, nan, DBL_EPSILON, HUGE_VAL)
#ifndef NO_LONG_DOUBLE
TEST_FUNC (ldouble_test, long double, nan, LDBL_EPSILON, HUGE_VALL)
#endif
int
main (void)
{
float_test ();
double_test ();
#ifndef NO_LONG_DOUBLE
ldouble_test ();
#endif
return errors != 0;
}

View File

@ -307,7 +307,8 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp,
first_unused += (len + 1);
sp->sp_lstchg = sp->sp_min = sp->sp_max = sp->sp_warn = sp->sp_inact =
sp->sp_expire = sp->sp_flag = -1;
sp->sp_expire = -1;
sp->sp_flag = ~0ul;
if (NISENTRYLEN (0, 7, result) > 0)
{
@ -316,49 +317,56 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp,
line = NISENTRYVAL (0, 7, result);
cp = strchr (line, ':');
if (cp == NULL)
return 0;
return 1;
*cp++ = '\0';
sp->sp_lstchg = atol (line);
if (*line)
sp->sp_lstchg = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
return 0;
return 1;
*cp++ = '\0';
sp->sp_min = atol (line);
if (*line)
sp->sp_min = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
return 0;
return 1;
*cp++ = '\0';
sp->sp_max = atol (line);
if (*line)
sp->sp_max = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
return 0;
return 1;
*cp++ = '\0';
sp->sp_warn = atol (line);
if (*line)
sp->sp_warn = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
return 0;
return 1;
*cp++ = '\0';
sp->sp_inact = atol (line);
if (*line)
sp->sp_inact = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
return 0;
return 1;
*cp++ = '\0';
sp->sp_expire = atol (line);
if (*line)
sp->sp_expire = atol (line);
line = cp;
if (line == NULL)
return 0;
sp->sp_flag = atol (line);
return 1;
if (*line)
sp->sp_flag = atol (line);
}
return 1;

View File

@ -1,4 +1,4 @@
# @(#)europe 7.64
# @(#)europe 7.65
# 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
@ -723,6 +723,23 @@
# clear whether the islands were using GMT or local time then. The
# changes in Alderney and Guernsey were at the same 2am GMT time as
# for Great Britain; the order for Jersey is more interesting.
#
# From Paul Eggert (1999-10-06):
# Mark Brader kindly translated the 1916 Jersey order from the French.
# It says that the 1916 transitions were 05-20 and 09-30 at midnight.
# Presumably this was 24:00, two hours earlier than Great Britain.
# It also says that after 1916 they'll sync with Great Britain.
# From Joseph S. Myers (1999-09-28):
# I have the 1918 orders for Guernsey, Alderney (both changing on same
# dates as UK, 2am GMT) and Sark (same dates; start and end at 2am,
# start "temps de Greenwich" (not specified as "temps moyen de
# Greenwich" which was used in the other orders) and end in an
# unspecified zone). For Jersey the same file (Public Record Office: HO
# 45/10892/357138) includes letters to the effect that in 1918 and 1919
# the States of Jersey agreed the same start and end dates as the UK
# (times unspecified, and it was the 1916 Jersey order that specified
# change at midnight of an unspecified zone).
# From Joseph S. Myers <jsm28@hermes.cam.ac.uk> (1998-01-06):
#
@ -1304,6 +1321,15 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik
# for their standard and summer times. He says no, they use "suveaeg"
# (summer time) and "talveaeg" (winter time).
# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09)
# via Steffen Thorsen:
# This year will mark the last time Estonia shifts to summer time,
# a council of the ruling coalition announced Sept. 6....
# But what this could mean for Estonia's chances of joining the European
# Union are still unclear. In 1994, the EU declared summer time compulsory
# for all member states until 2001. Brussels has yet to decide what to do
# after that.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Tallinn 1:39:00 - LMT 1880
1:39:00 - TMT 1918 Feb # Tallinn Mean Time
@ -1315,7 +1341,8 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
3:00 Russia MSK/MSD 1989 Mar 26 2:00s
2:00 1:00 EEST 1989 Sep 24 2:00s
2:00 C-Eur EE%sT 1998 Sep 22
2:00 EU EE%sT
2:00 EU EE%sT 2000
2:00 - EET
# Finland
#
@ -1715,6 +1742,24 @@ Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
1:00 EU CE%sT
# Lithuania
# From Paul Eggert (1996-11-22):
# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
# known to be wrong about Estonia and Latvia, assume it's wrong here too.
# From Marius Gedminas <mgedmin@pub.osf.lt> (1998-08-07):
# I would like to inform that in this year Lithuanian time zone
# (Europe/Vilnius) was changed.
# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29),
# via Steffen Thorsen:
# Lithuania has shifted back to the second time zone (GMT plus two hours)
# to be valid here starting from October 31,
# as decided by the national government on Wednesday....
# The Lithuanian government also announced plans to consider a
# motion to give up shifting to summer time in spring, as it was
# already done by Estonia.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Vilnius 1:41:16 - LMT 1880
1:24:00 - WMT 1917 # Warsaw Mean Time
@ -1728,14 +1773,8 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 C-Eur EE%sT 1998
2:00 - EET 1998 Mar 29 1:00u
1:00 EU CE%sT
# From Paul Eggert (1996-11-22):
# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
# known to be wrong about Estonia and Latvia, assume it's wrong here too.
# From Marius Gedminas <mgedmin@pub.osf.lt> (1998-08-07):
# I would like to inform that in this year Lithuanian time zone
# (Europe/Vilnius) was changed.
1:00 EU CE%sT 1999 Oct 31 1:00u
2:00 EU EE%sT
# Luxembourg
# Whitman disagrees with most of these dates in minor ways; go with Shanks.