@@ -129,11 +129,6 @@ void *_dl_random;
#include <dl-procruntime.c>
#include <dl-procinfo.c>
-/* 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;
@@ -314,9 +309,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,
@@ -403,8 +403,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);
@@ -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 \
@@ -963,54 +963,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)
@@ -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
@@ -276,9 +276,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. */
{
@@ -401,16 +401,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);
deleted file mode 100644
@@ -1,67 +0,0 @@
-/* Copyright (C) 2001-2019 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 <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <time.h>
-#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
deleted file mode 100644
@@ -1,54 +0,0 @@
-/* Copyright (C) 2001-2019 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 <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <time.h>
-#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
@@ -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;
@@ -352,11 +352,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;
@@ -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
@@ -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
@@ -24,37 +24,6 @@
#include <libc-internal.h>
-#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;
@@ -24,57 +24,6 @@
#include <ldsodefs.h>
-#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;
@@ -19,23 +19,8 @@
#include <assert.h>
#include <errno.h>
#include <time.h>
-#include <hp-timing.h>
#include <sysdep-cancel.h>
-#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)
@@ -21,59 +21,11 @@
#include <ldsodefs.h>
-#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;
}