From 3b5c1b57d3a2de7955eed21f01cb80e663473491 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 23 Apr 2001 19:01:10 +0000 Subject: Update. * sysdeps/unix/i386/i586/clock_getres.c: Removed. * sysdeps/unix/i386/i586/clock_gettime.c: Removed. * sysdeps/unix/i386/i586/clock_nanosleep.c: Removed. * sysdeps/unix/i386/i586/clock_settime.c: Removed. * sysdeps/unix/i386/i586/cpuclock-init.h: Removed. * sysdeps/generic/cpuclock-init.h: Removed. * sysdeps/unix/i386/i686/Implies: Removed. * sysdeps/unix/i386/i686/tempname.c: Removed. * sysdeps/i386/i686/Versions: New file. * sysdeps/unix/i386/i586/Versions: Removed. * sysdeps/posix/clock_getres.c: If HP_TIMING_AVAIL is nonzero handle CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID. * sysdeps/unix/clock_gettime.c: Likewise. * sysdeps/unix/clock_nanosleep.c: Likewise. * sysdeps/unix/clock_settime.c: Likewise. * sysdeps/posix/tempname.c: Is HP_TIMING_AVAIL is nonzero define RANDOM_BITS use CPU clock. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/bits/time.h: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/bits/time.h: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/bits/time.h: New file. * sysdeps/sparc/Versions: New file. * elf/dl-support.c: Don't use cpuclock-init.h definitions, use hp-timing.h definitions. * sysdeps/generic/dl-sysdep.c: Likewise. * include/libc-internal.h: Include hp-timing.h. Use hp_timing_t in __get_clockfreq prototype. * sysdeps/unix/sysv/linux/i386/get_clockfreq.c (__get_clockfreq): Use hp_timing_t type. * sysdeps/unix/sysv/linux/ia64/get_clockfreq.c: New file. --- linuxthreads/ChangeLog | 15 ++++++++ linuxthreads/Makefile | 3 +- linuxthreads/internals.h | 6 ++-- linuxthreads/manager.c | 8 ++--- linuxthreads/ptclock_gettime.c | 46 ++++++++++++++++++++++++ linuxthreads/ptclock_settime.c | 33 +++++++++++++++++ linuxthreads/pthread.c | 6 ++-- linuxthreads/sysdeps/i386/i586/Makefile | 3 -- linuxthreads/sysdeps/i386/i586/ptclock_gettime.c | 45 ----------------------- linuxthreads/sysdeps/i386/i586/ptclock_settime.c | 32 ----------------- 10 files changed, 106 insertions(+), 91 deletions(-) create mode 100644 linuxthreads/ptclock_gettime.c create mode 100644 linuxthreads/ptclock_settime.c delete mode 100644 linuxthreads/sysdeps/i386/i586/Makefile delete mode 100644 linuxthreads/sysdeps/i386/i586/ptclock_gettime.c delete mode 100644 linuxthreads/sysdeps/i386/i586/ptclock_settime.c (limited to 'linuxthreads') diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 0e9c9fb73b..553219fa98 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,18 @@ +2001-04-23 Ulrich Drepper + + * Makefile (libpthread-routines): Add ptclock_gettime and + ptclock_settime. + * internals.h: Don't use cpuclock-init.h definitions, use + hp-timing.h definitions. + * pthread.c: Likewise. + * manager.c: Likewise. + * ptclock_gettime.c: New file. + * ptclock_settime.c: New file. + + * sysdeps/i386/i586/ptclock_gettime.c: Removed. + * sysdeps/i386/i586/ptclock_settime.c: Removed. + * sysdeps/i386/i586/Makefile: Removed. + 2001-04-22 Ulrich Drepper * sysdeps/unix/sysv/linux/bits/posix_opt.h: Define _POSIX_ASYNCH_IO. diff --git a/linuxthreads/Makefile b/linuxthreads/Makefile index d6d0a118d6..3fde2c909b 100644 --- a/linuxthreads/Makefile +++ b/linuxthreads/Makefile @@ -35,7 +35,8 @@ extra-libs-others := $(extra-libs) libpthread-routines := attr cancel condvar join manager mutex ptfork \ ptlongjmp pthread signals specific errno lockfile \ semaphore spinlock wrapsyscall rwlock pt-machine \ - oldsemaphore events getcpuclockid pspinlock barrier + oldsemaphore events getcpuclockid pspinlock barrier \ + ptclock_gettime ptclock_settime nodelete-yes = -Wl,--enable-new-dtags,-z,nodelete initfirst-yes = -Wl,--enable-new-dtags,-z,initfirst diff --git a/linuxthreads/internals.h b/linuxthreads/internals.h index 27d4789cc8..f9bb36fd46 100644 --- a/linuxthreads/internals.h +++ b/linuxthreads/internals.h @@ -33,7 +33,7 @@ extern int __compare_and_swap (long int *p, long int oldval, long int newval); #include "pt-machine.h" #include "semaphore.h" #include "../linuxthreads_db/thread_dbP.h" -#include +#include #ifndef THREAD_GETMEM # define THREAD_GETMEM(descr, member) descr->member @@ -180,8 +180,8 @@ struct _pthread_descr_struct { struct __res_state *p_resp; /* Pointer to resolver state */ struct __res_state p_res; /* per-thread resolver state */ int p_inheritsched; /* copied from the thread attribute */ -#ifdef CPUCLOCK_VARDEF - CPUCLOCK_VARDEF (p_cpuclock_offset); /* Initial CPU clock for thread. */ +#if HP_TIMING_AVAIL + hp_timing_t p_cpuclock_offset; /* Initial CPU clock for thread. */ #endif /* New elements must be added at the end. */ } __attribute__ ((aligned(32))); /* We need to align the structure so that diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index 3d24218307..d436b08f16 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -230,15 +230,15 @@ pthread_start_thread(void *arg) pthread_descr self = (pthread_descr) arg; struct pthread_request request; void * outcome; -#ifdef CPUCLOCK_VARDEF - CPUCLOCK_VARDEF (tmpclock); +#if HP_TIMING_AVAIL + hp_timing_t tmpclock; #endif /* Initialize special thread_self processing, if any. */ #ifdef INIT_THREAD_SELF INIT_THREAD_SELF(self, self->p_nr); #endif -#ifdef CPUCLOCK_INIT - CPUCLOCK_INIT (tmpclock); +#if HP_TIMING_AVAIL + HP_TIMING_NOW (tmpclock); THREAD_SETMEM (self, p_cpuclock_offset, tmpclock); #endif /* Make sure our pid field is initialized, just in case we get there diff --git a/linuxthreads/ptclock_gettime.c b/linuxthreads/ptclock_gettime.c new file mode 100644 index 0000000000..3323edbcd2 --- /dev/null +++ b/linuxthreads/ptclock_gettime.c @@ -0,0 +1,46 @@ +/* Copyright (C) 2001 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 +#include "internals.h" + + +#if HP_TIMING_AVAIL +int +__pthread_clock_gettime (hp_timing_t freq, struct timespec *tp) +{ + hp_timing_t tsc; + pthread_descr self = thread_self (); + + /* Get the current counter. */ + HP_TIMING_NOW (tsc); + + /* Compute the offset since the start time of the process. */ + tsc -= THREAD_GETMEM (self, p_cpuclock_offset); + + /* Compute the seconds. */ + tp->tv_sec = tsc / freq; + + /* And the nanoseconds. This computation should be stable until + we get machines with about 16GHz frequency. */ + tp->tv_nsec = ((tsc % freq) * 1000000000ull) / freq; + + return 0; +} +#endif diff --git a/linuxthreads/ptclock_settime.c b/linuxthreads/ptclock_settime.c new file mode 100644 index 0000000000..e293e0dfb0 --- /dev/null +++ b/linuxthreads/ptclock_settime.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2001 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 +#include "internals.h" + + +#if HP_TIMING_AVAIL +void +__pthread_clock_settime (hp_timing_t offset) +{ + pthread_descr self = thread_self (); + + /* Compute the offset since the start time of the process. */ + THREAD_SETMEM (self, p_cpuclock_offset, offset); +} +#endif diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index 73a7acb9c9..4340a7cc65 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -226,8 +226,8 @@ static void pthread_handle_sigrestart(int sig); static void pthread_handle_sigdebug(int sig); /* CPU clock handling. */ -#ifdef CPUCLOCK_VARDECL -CPUCLOCK_VARDECL (_dl_cpuclock_offset); +#if HP_TIMING_AVAIL +extern hp_timing_t _dl_cpuclock_offset; #endif /* Signal numbers used for the communication. @@ -395,7 +395,7 @@ __pthread_initialize_minimal(void) #ifdef INIT_THREAD_SELF INIT_THREAD_SELF(&__pthread_initial_thread, 0); #endif -#ifdef CPUCLOCK_INIT +#if HP_TIMING_AVAIL __pthread_initial_thread.p_cpuclock_offset = _dl_cpuclock_offset; #endif } diff --git a/linuxthreads/sysdeps/i386/i586/Makefile b/linuxthreads/sysdeps/i386/i586/Makefile deleted file mode 100644 index 96c195f6e5..0000000000 --- a/linuxthreads/sysdeps/i386/i586/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),linuxthreads) -libpthread-sysdep_routines += ptclock_gettime ptclock_settime -endif diff --git a/linuxthreads/sysdeps/i386/i586/ptclock_gettime.c b/linuxthreads/sysdeps/i386/i586/ptclock_gettime.c deleted file mode 100644 index 818251074e..0000000000 --- a/linuxthreads/sysdeps/i386/i586/ptclock_gettime.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2001 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 - -#include "../../../internals.h" - - -int -__pthread_clock_gettime (unsigned long long int freq, struct timespec *tp) -{ - unsigned long long int tsc; - pthread_descr self = thread_self (); - - /* Get the current counter. */ - asm volatile ("rdtsc" : "=A" (tsc)); - - /* Compute the offset since the start time of the process. */ - tsc -= THREAD_GETMEM (self, p_cpuclock_offset); - - /* Compute the seconds. */ - tp->tv_sec = tsc / freq; - - /* And the nanoseconds. This computation should be stable until - we get machines with about 16GHz frequency. */ - tp->tv_nsec = ((tsc % freq) * 1000000000ull) / freq; - - return 0; -} diff --git a/linuxthreads/sysdeps/i386/i586/ptclock_settime.c b/linuxthreads/sysdeps/i386/i586/ptclock_settime.c deleted file mode 100644 index 3026528cc2..0000000000 --- a/linuxthreads/sysdeps/i386/i586/ptclock_settime.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2001 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 - -#include "../../../internals.h" - - -void -__pthread_clock_settime (unsigned long long int offset) -{ - pthread_descr self = thread_self (); - - /* Compute the offset since the start time of the process. */ - THREAD_SETMEM (self, p_cpuclock_offset, offset); -} -- cgit v1.2.3