diff --git a/elf/dl-support.c b/elf/dl-support.c index c8439fc..ef5455b 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -127,11 +127,6 @@ void *_dl_random; #include #include -/* Initial value of the CPU clock. */ -#ifndef HP_TIMING_NONAVAIL -hp_timing_t _dl_cpuclock_offset; -#endif - void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; size_t _dl_pagesize = EXEC_PAGESIZE; @@ -312,9 +307,6 @@ _dl_non_dynamic_init (void) _dl_main_map.l_phdr = GL(dl_phdr); _dl_main_map.l_phnum = GL(dl_phnum); - if (HP_SMALL_TIMING_AVAIL) - HP_TIMING_NOW (_dl_cpuclock_offset); - _dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1; /* Set up the data structures for the system-supplied DSO early, diff --git a/elf/rtld.c b/elf/rtld.c index 0aa1a2a..e107bd1 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -401,8 +401,6 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) # endif #endif - HP_TIMING_NOW (GL(dl_cpuclock_offset)); - /* Initialize the stack end variable. */ __libc_stack_end = __builtin_frame_address (0); diff --git a/nptl/Makefile b/nptl/Makefile index 447dce0..d6b37b6 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -109,7 +109,6 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \ pthread_once \ old_pthread_atfork \ pthread_getcpuclockid \ - pthread_clock_gettime pthread_clock_settime \ shm-directory \ sem_init sem_destroy \ sem_open sem_close sem_unlink \ diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index d0971a9..5fa45b1 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -964,54 +964,6 @@ __reclaim_stacks (void) } -#if HP_TIMING_AVAIL -# undef __find_thread_by_id -/* Find a thread given the thread ID. */ -attribute_hidden -struct pthread * -__find_thread_by_id (pid_t tid) -{ - struct pthread *result = NULL; - - lll_lock (stack_cache_lock, LLL_PRIVATE); - - /* Iterate over the list with system-allocated threads first. */ - list_t *runp; - list_for_each (runp, &stack_used) - { - struct pthread *curp; - - curp = list_entry (runp, struct pthread, list); - - if (curp->tid == tid) - { - result = curp; - goto out; - } - } - - /* Now the list with threads using user-allocated stacks. */ - list_for_each (runp, &__stack_user) - { - struct pthread *curp; - - curp = list_entry (runp, struct pthread, list); - - if (curp->tid == tid) - { - result = curp; - goto out; - } - } - - out: - lll_unlock (stack_cache_lock, LLL_PRIVATE); - - return result; -} -#endif - - #ifdef SIGSETXID static void setxid_mark_thread (struct xid_command *cmdp, struct pthread *t) diff --git a/nptl/descr.h b/nptl/descr.h index 9c01e1b..c3b81d8 100644 --- a/nptl/descr.h +++ b/nptl/descr.h @@ -343,8 +343,7 @@ struct pthread unsigned int setxid_futex; #if HP_TIMING_AVAIL - /* Offset of the CPU clock at start thread start time. */ - hp_timing_t cpuclock_offset; + hp_timing_t cpuclock_offset_ununsed; #endif /* If the thread waits to join another one the ID of the latter is diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index 907411d..098bc05 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -275,9 +275,6 @@ __pthread_initialize_minimal_internal (void) THREAD_SETMEM (pd, user_stack, true); if (LLL_LOCK_INITIALIZER != 0) THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER); -#if HP_TIMING_AVAIL - THREAD_SETMEM (pd, cpuclock_offset, GL(dl_cpuclock_offset)); -#endif /* Initialize the robust mutex data. */ { diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index 19efe1e..00be8f9 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -406,16 +406,6 @@ extern int __pthread_multiple_threads attribute_hidden; extern int *__libc_multiple_threads_ptr attribute_hidden; #endif -/* Find a thread given its TID. */ -extern struct pthread *__find_thread_by_id (pid_t tid) attribute_hidden -#ifdef SHARED -; -#else -weak_function; -#define __find_thread_by_id(tid) \ - (__find_thread_by_id ? (__find_thread_by_id) (tid) : (struct pthread *) NULL) -#endif - extern void __pthread_init_static_tls (struct link_map *) attribute_hidden; extern size_t __pthread_get_minstack (const pthread_attr_t *attr); diff --git a/nptl/pthread_clock_gettime.c b/nptl/pthread_clock_gettime.c deleted file mode 100644 index 6bc75cf..0000000 --- a/nptl/pthread_clock_gettime.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2001-2018 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 Lesser General Public License as - published by the Free Software Foundation; either version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include "pthreadP.h" - - -#if HP_TIMING_AVAIL -int -__pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, - struct timespec *tp) -{ - hp_timing_t tsc; - - /* Get the current counter. */ - HP_TIMING_NOW (tsc); - - /* This is the ID of the thread we are looking for. */ - pid_t tid = ((unsigned int) clock_id) >> CLOCK_IDFIELD_SIZE; - - /* Compute the offset since the start time of the process. */ - if (tid == 0 || tid == THREAD_GETMEM (THREAD_SELF, tid)) - /* Our own clock. */ - tsc -= THREAD_GETMEM (THREAD_SELF, cpuclock_offset); - else - { - /* This is more complicated. We have to locate the thread based - on the ID. This means walking the list of existing - threads. */ - struct pthread *thread = __find_thread_by_id (tid); - if (thread == NULL) - { - __set_errno (EINVAL); - return -1; - } - - /* There is a race here. The thread might terminate and the stack - become unusable. But this is the user's problem. */ - tsc -= thread->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/nptl/pthread_clock_settime.c b/nptl/pthread_clock_settime.c deleted file mode 100644 index 29d35c6..0000000 --- a/nptl/pthread_clock_settime.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2001-2018 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 Lesser General Public License as - published by the Free Software Foundation; either version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include "pthreadP.h" - - -#if HP_TIMING_AVAIL -int -__pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) -{ - /* This is the ID of the thread we are looking for. */ - pid_t tid = ((unsigned int) clock_id) >> CLOCK_IDFIELD_SIZE; - - /* Compute the offset since the start time of the process. */ - if (tid == 0 || tid == THREAD_GETMEM (THREAD_SELF, tid)) - /* Our own clock. */ - THREAD_SETMEM (THREAD_SELF, cpuclock_offset, offset); - else - { - /* This is more complicated. We have to locate the thread based - on the ID. This means walking the list of existing - threads. */ - struct pthread *thread = __find_thread_by_id (tid); - if (thread == NULL) - { - __set_errno (EINVAL); - return -1; - } - - /* There is a race here. The thread might terminate and the stack - become unusable. But this is the user's problem. */ - thread->cpuclock_offset = offset; - } - - return 0; -} -#endif diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index fe75d04..f58a15c 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -379,13 +379,6 @@ START_THREAD_DEFN { struct pthread *pd = START_THREAD_SELF; -#if HP_TIMING_AVAIL - /* Remember the time when the thread was started. */ - hp_timing_t now; - HP_TIMING_NOW (now); - THREAD_SETMEM (pd, cpuclock_offset, now); -#endif - /* Initialize resolver state pointer. */ __resp = &pd->res; diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index c6b7e61..f0185ce 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -359,11 +359,6 @@ struct rtld_global /* The object to be initialized first. */ EXTERN struct link_map *_dl_initfirst; -#if HP_SMALL_TIMING_AVAIL - /* Start time on CPU clock. */ - EXTERN hp_timing_t _dl_cpuclock_offset; -#endif - /* Map of shared object to be profiled. */ EXTERN struct link_map *_dl_profile_map; diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index b72913d..7bd1d70 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -62,10 +62,6 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion void *__libc_stack_end = NULL; rtld_hidden_data_def(__libc_stack_end) -#if HP_TIMING_AVAIL -hp_timing_t _dl_cpuclock_offset; -#endif - /* TODO: Initialize. */ void *_dl_random attribute_relro = NULL; @@ -246,10 +242,6 @@ unfmh(); /* XXX */ /* Initialize frequently used global variable. */ GLRO(dl_pagesize) = __getpagesize (); -#if HP_TIMING_AVAIL - HP_TIMING_NOW (_dl_cpuclock_offset); -#endif - fmh(); /* XXX */ /* See hurd/hurdstartup.c; this deals with getting information diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c index 1a9429b..37db30f 100644 --- a/sysdeps/nptl/fork.c +++ b/sysdeps/nptl/fork.c @@ -83,14 +83,6 @@ __libc_fork (void) if (__fork_generation_pointer != NULL) *__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR; -#if HP_TIMING_AVAIL - /* The CPU clock of the thread and process have to be set to zero. */ - hp_timing_t now; - HP_TIMING_NOW (now); - THREAD_SETMEM (self, cpuclock_offset, now); - GL(dl_cpuclock_offset) = now; -#endif - #ifdef __NR_set_robust_list /* Initialize the robust mutex list setting in the kernel which has been reset during the fork. We do not check for errors because if diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c index 43228c3..5b0d8eb 100644 --- a/sysdeps/posix/clock_getres.c +++ b/sysdeps/posix/clock_getres.c @@ -24,37 +24,6 @@ #include -#if HP_TIMING_AVAIL -static long int nsec; /* Clock frequency of the processor. */ - -static int -hp_timing_getres (struct timespec *res) -{ - if (__glibc_unlikely (nsec == 0)) - { - hp_timing_t freq; - - /* This can only happen if we haven't initialized the `nsec' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should - lead to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - - nsec = MAX (UINT64_C (1000000000) / freq, 1); - } - - /* Fill in the values. - The seconds are always zero (unless we have a 1Hz machine). */ - res->tv_sec = 0; - res->tv_nsec = nsec; - - return 0; -} -#endif - static inline int realtime_getres (struct timespec *res) { @@ -87,21 +56,8 @@ __clock_getres (clockid_t clock_id, struct timespec *res) break; default: -#if HP_TIMING_AVAIL - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) - == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_getres (res); - else -#endif - __set_errno (EINVAL); - break; - -#if HP_TIMING_AVAIL - case CLOCK_PROCESS_CPUTIME_ID: - case CLOCK_THREAD_CPUTIME_ID: - retval = hp_timing_getres (res); + __set_errno (EINVAL); break; -#endif } return retval; diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c index f19fdf7..f3ebbe1 100644 --- a/sysdeps/unix/clock_gettime.c +++ b/sysdeps/unix/clock_gettime.c @@ -24,57 +24,6 @@ #include -#if HP_TIMING_AVAIL -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static hp_timing_t freq; - - -/* This function is defined in the thread library. */ -extern int __pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, - struct timespec *tp) - __attribute__ ((__weak__)); - -static int -hp_timing_gettime (clockid_t clock_id, struct timespec *tp) -{ - hp_timing_t tsc; - - if (__glibc_unlikely (freq == 0)) - { - /* This can only happen if we haven't initialized the `freq' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should - lead to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - } - - if (clock_id != CLOCK_PROCESS_CPUTIME_ID - && __pthread_clock_gettime != NULL) - return __pthread_clock_gettime (clock_id, freq, tp); - - /* Get the current counter. */ - HP_TIMING_NOW (tsc); - - /* Compute the offset since the start time of the process. */ - tsc -= GL(dl_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) * UINT64_C (1000000000)) / freq; - - return 0; -} -#endif - - static inline int realtime_gettime (struct timespec *tp) { @@ -105,20 +54,8 @@ __clock_gettime (clockid_t clock_id, struct timespec *tp) break; default: -#if HP_TIMING_AVAIL - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) - == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_gettime (clock_id, tp); - else -#endif - __set_errno (EINVAL); - break; - -#if HP_TIMING_AVAIL - case CLOCK_PROCESS_CPUTIME_ID: - retval = hp_timing_gettime (clock_id, tp); + __set_errno (EINVAL); break; -#endif } return retval; diff --git a/sysdeps/unix/clock_nanosleep.c b/sysdeps/unix/clock_nanosleep.c index 97b3d6b..13dd0f4 100644 --- a/sysdeps/unix/clock_nanosleep.c +++ b/sysdeps/unix/clock_nanosleep.c @@ -19,23 +19,8 @@ #include #include #include -#include #include -#if HP_TIMING_AVAIL -# define CPUCLOCK_P(clock) \ - ((clock) == CLOCK_PROCESS_CPUTIME_ID \ - || ((clock) & ((1 << CLOCK_IDFIELD_SIZE) - 1)) == CLOCK_THREAD_CPUTIME_ID) -#else -# define CPUCLOCK_P(clock) 0 -#endif - -#ifndef INVALID_CLOCK_P -# define INVALID_CLOCK_P(cl) \ - ((cl) < CLOCK_REALTIME || (cl) > CLOCK_THREAD_CPUTIME_ID) -#endif - - /* This implementation assumes that these is only a `nanosleep' system call. So we have to remap all other activities. */ int @@ -51,14 +36,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, if (clock_id == CLOCK_THREAD_CPUTIME_ID) return EINVAL; /* POSIX specifies EINVAL for this case. */ -#ifdef SYSDEP_NANOSLEEP - SYSDEP_NANOSLEEP; -#endif - - if (CPUCLOCK_P (clock_id)) - return ENOTSUP; - - if (INVALID_CLOCK_P (clock_id)) + if (clock_id < CLOCK_REALTIME || clock_id > CLOCK_THREAD_CPUTIME_ID) return EINVAL; /* If we got an absolute time, remap it. */ @@ -71,7 +49,7 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, assert (sizeof (sec) >= sizeof (now.tv_sec)); /* Get the current time for this clock. */ - if (__builtin_expect (__clock_gettime (clock_id, &now), 0) != 0) + if (__clock_gettime (clock_id, &now) != 0) return errno; /* Compute the difference. */ @@ -90,12 +68,12 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, /* Make sure we are not modifying the struct pointed to by REM. */ rem = NULL; } - else if (__builtin_expect (flags, 0) != 0) + else if (flags != 0) return EINVAL; else if (clock_id != CLOCK_REALTIME) /* Not supported. */ return ENOTSUP; - return __builtin_expect (__nanosleep (req, rem), 0) ? errno : 0; + return __nanosleep (req, rem), 0 ? errno : 0; } weak_alias (__clock_nanosleep, clock_nanosleep) diff --git a/sysdeps/unix/clock_settime.c b/sysdeps/unix/clock_settime.c index 9d5857e..4f5640f 100644 --- a/sysdeps/unix/clock_settime.c +++ b/sysdeps/unix/clock_settime.c @@ -21,59 +21,11 @@ #include -#if HP_TIMING_AVAIL -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static hp_timing_t freq; - - -/* This function is defined in the thread library. */ -extern void __pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) - __attribute__ ((__weak__)); - - -static int -hp_timing_settime (clockid_t clock_id, const struct timespec *tp) -{ - hp_timing_t tsc; - hp_timing_t usertime; - - /* First thing is to get the current time. */ - HP_TIMING_NOW (tsc); - - if (__glibc_unlikely (freq == 0)) - { - /* This can only happen if we haven't initialized the `freq' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should lead - to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - } - - /* Convert the user-provided time into CPU ticks. */ - usertime = tp->tv_sec * freq + (tp->tv_nsec * freq) / 1000000000ull; - - /* Determine the offset and use it as the new base value. */ - if (clock_id == CLOCK_PROCESS_CPUTIME_ID - || __pthread_clock_settime == NULL) - GL(dl_cpuclock_offset) = tsc - usertime; - else - __pthread_clock_settime (clock_id, tsc - usertime); - - return 0; -} -#endif - - /* Set CLOCK to value TP. */ int __clock_settime (clockid_t clock_id, const struct timespec *tp) { - int retval; + int retval = -1; /* Make sure the time cvalue is OK. */ if (tp->tv_nsec < 0 || tp->tv_nsec >= 1000000000) @@ -93,16 +45,7 @@ __clock_settime (clockid_t clock_id, const struct timespec *tp) break; default: -# if HP_TIMING_AVAIL - if (CPUCLOCK_WHICH (clock_id) == CLOCK_PROCESS_CPUTIME_ID - || CPUCLOCK_WHICH (clock_id) == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_settime (clock_id, tp); - else -# endif - { - __set_errno (EINVAL); - retval = -1; - } + __set_errno (EINVAL); break; }