From 25b3dd49a7140508ff17e705408edd80122a4add Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 1 Nov 2000 08:10:10 +0000 Subject: Update. * elf/Versions [ld] (GLIBC_2.2): Export _dl_clktck and _dl_pagesize. * elf/dl-load.c: Define _dl_clktck. * elf/elf.h: Define AT_CLKTCK. * include/time.h: Declare __getclktck. * misc/Makefile (routines): Add getclktck. * sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Handle AT_CLKTCK. (_dl_show_auxv): Show AT_CLKTCK value. * sysdeps/generic/getclktck.c: New file. * sysdeps/unix/sysv/linux/getclktck.c: New file. * sysdeps/unix/sysv/linux/alpha/getclktck.c: New file. * sysdeps/unix/sysv/linux/ia64/getclktck.c: New file. * sysdeps/posix/sysconf.c: Use __getclktck to handle _SC_CLK_TCK. * sysdeps/unix/sysv/linux/getpagesize.c: New file. * sysdeps/unix/sysv/linux/bits/time.h: Use __sysconf to for CLK_TCK. * sysdeps/unix/sysv/linux/alpha/bits/time.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/time.h: Likewise. * sysdeps/unix/sysv/linux/ia64/bits/time.h: Likewise. * sysdeps/unix/sysv/linux/s390/bits/time.h: Likewise. --- ChangeLog | 19 +++++++++++++ elf/Versions | 1 + elf/dl-load.c | 2 ++ elf/elf.h | 3 ++- include/time.h | 4 +++ misc/Makefile | 2 +- stdio-common/Makefile | 2 +- sysdeps/generic/dl-sysdep.c | 14 ++++++++-- sysdeps/generic/getclktck.c | 30 +++++++++++++++++++++ sysdeps/posix/sysconf.c | 6 +---- sysdeps/unix/sysv/linux/alpha/bits/time.h | 3 ++- sysdeps/unix/sysv/linux/alpha/getclktck.c | 2 ++ sysdeps/unix/sysv/linux/bits/time.h | 3 ++- sysdeps/unix/sysv/linux/getclktck.c | 32 ++++++++++++++++++++++ sysdeps/unix/sysv/linux/getpagesize.c | 45 +++++++++++++++++++++++++++++++ sysdeps/unix/sysv/linux/i386/bits/time.h | 3 ++- sysdeps/unix/sysv/linux/ia64/bits/time.h | 3 ++- sysdeps/unix/sysv/linux/ia64/getclktck.c | 2 ++ sysdeps/unix/sysv/linux/s390/bits/time.h | 3 ++- 19 files changed, 164 insertions(+), 15 deletions(-) create mode 100644 sysdeps/generic/getclktck.c create mode 100644 sysdeps/unix/sysv/linux/alpha/getclktck.c create mode 100644 sysdeps/unix/sysv/linux/getclktck.c create mode 100644 sysdeps/unix/sysv/linux/getpagesize.c create mode 100644 sysdeps/unix/sysv/linux/ia64/getclktck.c diff --git a/ChangeLog b/ChangeLog index 32a46eb..7f16fb6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,24 @@ 2000-10-31 Ulrich Drepper + * elf/Versions [ld] (GLIBC_2.2): Export _dl_clktck and _dl_pagesize. + * elf/dl-load.c: Define _dl_clktck. + * elf/elf.h: Define AT_CLKTCK. + * include/time.h: Declare __getclktck. + * misc/Makefile (routines): Add getclktck. + * sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Handle AT_CLKTCK. + (_dl_show_auxv): Show AT_CLKTCK value. + * sysdeps/generic/getclktck.c: New file. + * sysdeps/unix/sysv/linux/getclktck.c: New file. + * sysdeps/unix/sysv/linux/alpha/getclktck.c: New file. + * sysdeps/unix/sysv/linux/ia64/getclktck.c: New file. + * sysdeps/posix/sysconf.c: Use __getclktck to handle _SC_CLK_TCK. + * sysdeps/unix/sysv/linux/getpagesize.c: New file. + * sysdeps/unix/sysv/linux/bits/time.h: Use __sysconf to for CLK_TCK. + * sysdeps/unix/sysv/linux/alpha/bits/time.h: Likewise. + * sysdeps/unix/sysv/linux/i386/bits/time.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/time.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/time.h: Likewise. + * sunrpc/clnt_gen.c (clnt_create): Don't set timeout with clnt_control for any protocol. This would make it impossible for the user to provide one in clnt_call(). diff --git a/elf/Versions b/elf/Versions index 06bcb03..e9b29f5 100644 --- a/elf/Versions +++ b/elf/Versions @@ -61,5 +61,6 @@ ld { # variables used elsewhere _dl_out_of_memory; _dl_all_dirs; _dl_init_all_dirs; + _dl_clktck; _dl_pagesize; } } diff --git a/elf/dl-load.c b/elf/dl-load.c index dc1d57f..45f38f3 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -112,6 +112,8 @@ struct filebuf size_t _dl_pagesize; +int _dl_clktck; + extern const char *_dl_platform; extern size_t _dl_platformlen; diff --git a/elf/elf.h b/elf/elf.h index de4fdda..6f2e52b 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -862,6 +862,7 @@ typedef struct #define AT_EUID 12 /* Effective uid */ #define AT_GID 13 /* Real gid */ #define AT_EGID 14 /* Effective gid */ +#define AT_CLKTCK 17 /* Frequency of times() */ /* Some more special a_type values describing the hardware. */ #define AT_PLATFORM 15 /* String identifying platform. */ @@ -870,7 +871,7 @@ typedef struct /* This entry gives some information about the FPU initialization performed by the kernel. */ -#define AT_FPUCW 17 /* Used FPU control word. */ +#define AT_FPUCW 18 /* Used FPU control word. */ /* Note section contents. Each entry in the note section begins with diff --git a/include/time.h b/include/time.h index e4b945c..f81760e 100644 --- a/include/time.h +++ b/include/time.h @@ -64,5 +64,9 @@ extern long int __tzname_max (void); extern int __nanosleep (__const struct timespec *__requested_time, struct timespec *__remaining); extern int __getdate_r (__const char *__string, struct tm *__resbufp); + + +/* Determine CLK_TCK value. */ +extern int __getclktck (void); #endif #endif diff --git a/misc/Makefile b/misc/Makefile index a6bd90d..8dcd243 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -57,7 +57,7 @@ routines := brk sbrk sstk ioctl \ hsearch hsearch_r tsearch lsearch \ err error ustat \ getsysstats dirname regexp \ - getloadavg + getloadavg getclktck distribute := device-nrs.h diff --git a/stdio-common/Makefile b/stdio-common/Makefile index 04e02b2..48364d0 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -55,7 +55,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \ tfformat tiformat tllformat tstdiomisc tst-printfsz tst-wc-printf \ scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \ scanf12 tst-tmpnam tst-cookie tst-obprintf tst-sscanf tst-swprintf \ - tst-fseek + tst-fseek tst-fmemopen test-srcs = tst-unbputc tst-printf diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 4a9ca27..88340a6 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -39,6 +39,7 @@ extern int _dl_argc; extern char **_dl_argv; extern char **_environ; extern size_t _dl_pagesize; +extern int _dl_clktck; extern const char *_dl_platform; extern unsigned long int _dl_hwcap; extern size_t _dl_platformlen; @@ -133,6 +134,9 @@ _dl_sysdep_start (void **start_argptr, case AT_HWCAP: _dl_hwcap = av->a_un.a_val; break; + case AT_CLKTCK: + _dl_clktck = av->a_un.a_val; + break; case AT_FPUCW: _dl_fpu_control = av->a_un.a_val; break; @@ -264,13 +268,19 @@ _dl_show_auxv (void) case AT_HWCAP: _dl_hwcap = av->a_un.a_val; if (_dl_procinfo (_dl_hwcap) < 0) - _dl_sysdep_message ("AT_HWCAP: ", + _dl_sysdep_message ("AT_HWCAP: ", _itoa_word (_dl_hwcap, buf + sizeof buf - 1, 16, 0), "\n", NULL); break; + case AT_CLKTCK: + _dl_sysdep_message ("AT_CLKTCK: ", + _itoa_word (av->a_un.a_val, buf + sizeof buf - 1, + 10, 0), + "\n", NULL); + break; case AT_FPUCW: - _dl_sysdep_message ("AT_FPUCW: ", + _dl_sysdep_message ("AT_FPUCW: ", _itoa_word (av->a_un.a_val, buf + sizeof buf - 1, 10, 0), "\n", NULL); diff --git a/sysdeps/generic/getclktck.c b/sysdeps/generic/getclktck.c new file mode 100644 index 0000000..6031507 --- /dev/null +++ b/sysdeps/generic/getclktck.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include + +/* Return frequency of times(). */ +int +__getclktck () +{ +#ifdef CLK_TCK + return CLK_TCK; +#else + return 60; +#endif +} diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c index b8fd368..616c950 100644 --- a/sysdeps/posix/sysconf.c +++ b/sysdeps/posix/sysconf.c @@ -55,11 +55,7 @@ __sysconf (name) #endif case _SC_CLK_TCK: -#ifdef CLK_TCK - return CLK_TCK; -#else - return 60; -#endif + return __getclktck (); case _SC_NGROUPS_MAX: #ifdef NGROUPS_MAX diff --git a/sysdeps/unix/sysv/linux/alpha/bits/time.h b/sysdeps/unix/sysv/linux/alpha/bits/time.h index a0eddbe..b9d9f3f 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/time.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/time.h @@ -36,7 +36,8 @@ # ifndef __STRICT_ANSI__ /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK presents the real value for clock ticks per second for the system. */ -# define CLK_TCK 1024 +extern long int __sysconf (int); +# define CLK_TCK (__sysconf (2)) /* 2 is _SC_CLK_TCK */ # endif # ifdef __USE_POSIX199309 diff --git a/sysdeps/unix/sysv/linux/alpha/getclktck.c b/sysdeps/unix/sysv/linux/alpha/getclktck.c new file mode 100644 index 0000000..6636bbe --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/getclktck.c @@ -0,0 +1,2 @@ +#define SYSTEM_CLK_TCK 1024 +#include diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h index 886ebb7..a19b2a8 100644 --- a/sysdeps/unix/sysv/linux/bits/time.h +++ b/sysdeps/unix/sysv/linux/bits/time.h @@ -36,7 +36,8 @@ # ifndef __STRICT_ANSI__ /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK presents the real value for clock ticks per second for the system. */ -# define CLK_TCK 100 +extern long int __sysconf (int); +# define CLK_TCK (__sysconf (2)) /* 2 is _SC_CLK_TCK */ # endif # ifdef __USE_POSIX199309 diff --git a/sysdeps/unix/sysv/linux/getclktck.c b/sysdeps/unix/sysv/linux/getclktck.c new file mode 100644 index 0000000..7936ea4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/getclktck.c @@ -0,0 +1,32 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include + +#ifndef SYSTEM_CLK_TCK +# define SYSTEM_CLK_TCK 100 +#endif + +/* Return frequency of times(). */ +int +__getclktck () +{ + extern int _dl_clktck; /* Defined in dl-load.c. */ + + return _dl_clktck ?: SYSTEM_CLK_TCK; +} diff --git a/sysdeps/unix/sysv/linux/getpagesize.c b/sysdeps/unix/sysv/linux/getpagesize.c new file mode 100644 index 0000000..3faf4ba --- /dev/null +++ b/sysdeps/unix/sysv/linux/getpagesize.c @@ -0,0 +1,45 @@ +/* Copyright (C) 1991,1992,1995,1996,1997,2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include + +/* Return the system page size. */ +int +__getpagesize () +{ + extern size_t _dl_pagesize; + + if (_dl_pagesize != 0) + return _dl_pagesize; + +#ifdef EXEC_PAGESIZE + return EXEC_PAGESIZE; +#else /* No EXEC_PAGESIZE. */ +#ifdef NBPG +#ifndef CLSIZE +#define CLSIZE 1 +#endif /* No CLSIZE. */ + return NBPG * CLSIZE; +#else /* No NBPG. */ + return NBPC; +#endif /* NBPG. */ +#endif /* EXEC_PAGESIZE. */ +} + +weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/unix/sysv/linux/i386/bits/time.h b/sysdeps/unix/sysv/linux/i386/bits/time.h index 9bda724..3b9e9d3 100644 --- a/sysdeps/unix/sysv/linux/i386/bits/time.h +++ b/sysdeps/unix/sysv/linux/i386/bits/time.h @@ -36,7 +36,8 @@ # ifndef __STRICT_ANSI__ /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK presents the real value for clock ticks per second for the system. */ -# define CLK_TCK 100 +extern long int __sysconf (int); +# define CLK_TCK (__sysconf (2)) /* 2 is _SC_CLK_TCK */ # endif # ifdef __USE_POSIX199309 diff --git a/sysdeps/unix/sysv/linux/ia64/bits/time.h b/sysdeps/unix/sysv/linux/ia64/bits/time.h index cb68abb..636e087 100644 --- a/sysdeps/unix/sysv/linux/ia64/bits/time.h +++ b/sysdeps/unix/sysv/linux/ia64/bits/time.h @@ -36,7 +36,8 @@ # ifndef __STRICT_ANSI__ /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK presents the real value for clock ticks per second for the system. */ -# define CLK_TCK 1024 +extern long int __sysconf (int); +# define CLK_TCK (__sysconf (2)) /* 2 is _SC_CLK_TCK */ # endif # ifdef __USE_POSIX199309 diff --git a/sysdeps/unix/sysv/linux/ia64/getclktck.c b/sysdeps/unix/sysv/linux/ia64/getclktck.c new file mode 100644 index 0000000..6636bbe --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/getclktck.c @@ -0,0 +1,2 @@ +#define SYSTEM_CLK_TCK 1024 +#include diff --git a/sysdeps/unix/sysv/linux/s390/bits/time.h b/sysdeps/unix/sysv/linux/s390/bits/time.h index 0c6ee38..ca223b4 100644 --- a/sysdeps/unix/sysv/linux/s390/bits/time.h +++ b/sysdeps/unix/sysv/linux/s390/bits/time.h @@ -36,7 +36,8 @@ # ifndef __STRICT_ANSI__ /* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK presents the real value for clock ticks per second for the system. */ -# define CLK_TCK 100 +extern long int __sysconf (int); +# define CLK_TCK (__sysconf (2)) /* 2 is _SC_CLK_TCK */ # endif # ifdef __USE_POSIX199309 -- cgit v1.1