From patchwork Sat Aug 10 01:00:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 1145028 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-104274-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="SmYqDIgz"; dkim=pass (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="kuL0sOVG"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4653ll38L7z9sMr for ; Sat, 10 Aug 2019 11:04:03 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; q=dns; s= default; b=k3/356HV81WjQU8hws3oUcdAjlwqRp1SgdgE7LNpCn4uW6zfiHCqs cVR6b/FhMjKKdqBZJKY4n4XsoigebjXp2gu23/bT/1zGVoPqQznalfPV4gizH2E0 clJ1OPt9UMhu/PpGbo+9rlC/hKznabFRCTu2mhNXODeSZdgYijO+Ow= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; s=default; bh=HXB/DXjNibC1ak0TOX89bUIgO4Q=; b=SmYqDIgzjfCGdOabYEbENf6u6KFj S4fbqA0PSYU/bGuy6SmMXtePxPCzxfUg6KnjybI63zZrSreUzwC/bGgtkaXyqWbi 1g95d6OQNxazuzCQEGmXK+u6PGaL3xPi0W+DYPCsCrAsr3c0QLHcRop2qhLB+sNh DiYjuYjv6ALJ+vs= Received: (qmail 72649 invoked by alias); 10 Aug 2019 01:03:22 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 72596 invoked by uid 89); 10 Aug 2019 01:03:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy= X-HELO: esa6.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1565399001; x=1596935001; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1rvxKODbWPcpBq1iaXMwGYeb9bt/lzo576qECBEe1AA=; b=kuL0sOVGGxRcJRgm1FV75F6p5HNohE951A2TA03ANTgTB7zH8UttdYDv 47rMBNXA60aOA5Ro1HywitDOkpw64HBann1HClLIirJrFT9IZPiFsdkmc +Z/rhk1wdrnO57Yr5gyZsWBiXBwQqR4Un4ObCSUTuzu82REEzv0IocWPW VikwH+6Wjaz5Lf7IGtX9AqkHYNrXClSwjZOFyTWezRIrWqVtDxuWpTUAb Q0Y9CMJP0a7KYbSl4PHC70wYcw4L5VsBreCur4LD/nXVB0VzTnECxjLLj G7ZnztnUlfSvFtkqWbP0FM8OS2eI88GxtkJiUWq/6opj+NclhUJw21KUX w==; IronPort-SDR: bJZahOpQtc/FTq62EMz/ZVgxj0LQKIP0btWp8OHWji2RopPDEdQ1T+slMG9udFLzKDw7j+jyE7 6u4QX3gubeXi5e1wv1iUkiv4HNZrMbvdJZbTj1YpSdb/SAS4VILeaBaeNGDw/WIRTJ3bpB34FW 0RcW+DUlKxBXcZFZWQfvtNJ+Pyg4AtU9xNhxrptXlbujGodMcIYFy7M+HNTIVjPX289QSX9yxG z3V/ttN0whlw/6zMk2X9nD6+8fiXQJvKAL6zSP1alqG0C3xR4tCzwXsh4nuBo52t2DSxBegQUF mnA= IronPort-SDR: JXSUpH/EgKI+VfValmhLzm656k1NgAJ133UKE5GdI3TWfjMFwUuPqp+SVbnQsoeAz1PMYS7Htu BW9KDOADJcVf7seZcKESIKYzxUakjIKCmUguGFnP2nkTj2Qf7XawU6fC2aymWFF/gY6ayp9VvT YSEQLQuUrvwf8Av0lFi/KzlTRgPOk5naTjPl/oDod+SuHlZiPutcbubhRlM0mLykWx/wRQ7CpA Np8AazXP3WcZjQT6Zhyl9pA7n3jfw6ZOg/TQKj9I8SnBU7GOY6j+ciyzF0s93DkYsTLnljm+on fnkAVDtjEiw6WBRWpE78FQan IronPort-SDR: RtcpbyiPFi+Vrc6S7ThJanQ0yR78lh48VrXjEKrcNQOnNAz9n2Nx8D7lIyeh9rBp+sQHTPwXHm BOOIggb2xRhewn1kwwSdGs+UsVOs//0MubS+ghSBYbjl3uoT9muyWLfKcXdVUvyAoRR8Doj+DF zIwk/0qc5uO9DJufOQ+wQvtENBe9NT8VclIDTzK0LzM3+ttGDVyC6sHruQHzUh32hLxuRSvvCq Gfbr7reIrD0/Z3KDo4IihxCCkOPkiLsFZqg9rZ+mmRHQjE2HwLguG9o/deQIjyv8CQlee5/3VC XIo= From: Alistair Francis To: libc-alpha@sourceware.org Cc: arnd@arndb.de, adhemerval.zanella@linaro.org, fweimer@redhat.com, palmer@sifive.com, macro@wdc.com, zongbox@gmail.com, alistair.francis@wdc.com, alistair23@gmail.com Subject: [RFC v4 05/24] sysdeps/clock_gettime: Use clock_gettime64 if avaliable Date: Fri, 9 Aug 2019 18:00:00 -0700 Message-Id: <84b269f1c4a8633e01bd623c07080143c70b785e.1565398513.git.alistair.francis@wdc.com> In-Reply-To: References: MIME-Version: 1.0 Signed-off-by: Alistair Francis --- sysdeps/unix/sysv/linux/clock_gettime.c | 62 ++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c index 5fc47fb7dc7..c090797e461 100644 --- a/sysdeps/unix/sysv/linux/clock_gettime.c +++ b/sysdeps/unix/sysv/linux/clock_gettime.c @@ -27,10 +27,70 @@ #include /* Get current value of CLOCK and store it in TP. */ + int __clock_gettime (clockid_t clock_id, struct timespec *tp) { - return INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); + +#ifdef __ASSUME_TIME64_SYSCALLS + return INLINE_VSYSCALL (clock_gettime64, 2, clock_id, tp); +#else + int ret; +# ifdef __NR_clock_gettime64 +# if __TIMESIZE == 64 + ret = INLINE_VSYSCALL (clock_gettime64, 2, clock_id, tp); + + if (ret == 0 || errno != ENOSYS) + { + return ret; + } +# else + struct __timespec64 tp64; + ret = INLINE_VSYSCALL (clock_gettime64, 2, clock_id, &tp64); + + if (ret == 0 || errno != ENOSYS) + { + tp->tv_sec = tp64.tv_sec; + tp->tv_nsec = tp64.tv_nsec; + if (! in_time_t_range (tp->tv_sec)) + { + __set_errno (EOVERFLOW); + return -1; + } + + return 0; + } +# endif /* __TIMESIZE == 64 */ +# endif /* __NR_clock_gettime64 */ +# if __TIMESIZE == 64 + struct timespec ts32; + + if (! in_time_t_range (tp->tv_sec)) + { + __set_errno (EOVERFLOW); + return -1; + } + + ret = INLINE_VSYSCALL (clock_gettime, 2, clock_id, &ts32); + + if (ret == 0 || errno != ENOSYS) + { + tp->tv_sec = ts32.tv_sec; + tp->tv_nsec = ts32.tv_nsec; + if (! in_time_t_range (tp->tv_sec)) + { + __set_errno (EOVERFLOW); + return -1; + } + + return 0; + } + return ret; +# else + return INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); +# endif /* __TIMESIZE == 64 */ +#endif /* __ASSUME_TIME64_SYSCALLS */ } + weak_alias (__clock_gettime, clock_gettime) libc_hidden_def (__clock_gettime)