From patchwork Wed Jul 17 00:08:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 33705 Received: (qmail 16039 invoked by alias); 17 Jul 2019 00:11:49 -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 15961 invoked by uid 89); 17 Jul 2019 00:11:49 -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=HContent-Transfer-Encoding:8bit 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=1563322307; x=1594858307; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2F0gXE8d/IJZUfdsPOVd/1Mkf2NF7LjAcRIoRsZ/x+8=; b=PnCnSSSMA89n2gZqVZftTxg9E+HTBm5hxuVpt1jFE4m1hEm/MTC+Z1en HMpj0A84frpUY/ZJatNsq47oH42svYwzB/0+Jy3bYl+DeaPW+25pCv9Gr aJe1gaDykH7gig/iDsdwIUboynkiH/ihqghx0eUTBuIGWKkNY9ltt/mV6 DlJ97kmjdfCl4WcxeJzap/abrNZhmwZSs7gFCt9od09N5MZyS7vdrJ0lH dyVKtB0SETIaojNN8wQM5HgbdQS6TM4sgrwQk6coH1WKKMgvFCWANd1fF 3gTQYiwSgjgUmtb2eGr4MyqPINrP2qpLXHF6awJ77imBgLUsmKjDibj/a g==; IronPort-SDR: KLwANiBuvC9iVQQd4PqrFchgck1F2OsfYuU609qnnofLAyEuDgJ1oXc0CkpvI8MKvcTZ08sdvp RRUpsLP9SMeGWgXyZ965DPGpksPDUzyt+ryfFiYH6ozyz/O6vnedTSWf8bb9GJdlAzVkLMysM0 Q4/kont825l/47yrggG2Y+fj3DlvhjdRC9w4C9pGtcEbKldH7BgoLJJcSdwtnGK5NmXqsZ1zp5 j3kWP6ye+QqU1t9oUBTl4ZKx02qsktf7PJj1hoJZAnJDhyetD59HSVt2qC8/B4A6XJ67Uai40Z +9M= IronPort-SDR: FKFhDpTqdT0/BeGNwjzI7heC1fQKjAc4dISQS3xLCnH04b3Xy+oI334fgLaKyiLIV6ILjunj9f nCFHtiCqi/GnAL7T1tCb4/9gSdCk180khI/lhzPHd17Xj00JeqMX7JSAGTZD6Pxbk06aTcpkjS WrIQ7sYl/Q77e4O5Hhei6GHmkgaYLNNcabvP/8ZaZ+OgnglKlPpJH34tWOdt4pN+TkvvCr2niw h9S07JAeLod8iyns2n2Jt52svZgT/0rgtdifhQhiVm9A3s6IcsmaAl337Bk+H11CJOjn558C4T OOitvPBUEOqhoxh8kBpTa9/I IronPort-SDR: JsvQtufBrxEKnc1ZyF2B66/N4hCh3eNTYSmcwZ53RiV/FgZBSs/wEnSzx2Vnh4Q881GYyNV1eB PtAvN7WL7a9wK7ixOvOszQHuhM1bL6Wpel/wSjQDs4FpaU4nDP68xwOaRLmo0p6EKgLX1CgCa2 9mM/ijThfGF3IgWjuoVEo92RpEgMD/kl7xF+qjNt6+nrFnfeofEBDe16PUF8hKqIFp9QTq0ZSn dxShnVMaE7Fgb50NFVpCJOTY5vSs0dTBvRSjmUN7HIGiCulpJ89Am2TLlbQMMGXs10RytCygRG NGo= 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 v3 05/23] sysdeps/timespec_get: Use clock_gettime64 if avaliable Date: Tue, 16 Jul 2019 17:08:54 -0700 Message-Id: <0d116a8faab58db1952a256c6cb75e7b0f9af444.1563321715.git.alistair.francis@wdc.com> In-Reply-To: References: MIME-Version: 1.0 This will break other 32-bit targets Signed-off-by: Alistair Francis --- sysdeps/unix/sysv/linux/timespec_get.c | 37 +++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/sysdeps/unix/sysv/linux/timespec_get.c b/sysdeps/unix/sysv/linux/timespec_get.c index 52080ddf08..78fa2aba1b 100644 --- a/sysdeps/unix/sysv/linux/timespec_get.c +++ b/sysdeps/unix/sysv/linux/timespec_get.c @@ -24,6 +24,36 @@ #endif #include + +#if __WORDSIZE == 32 +int +__timespec_get (struct timespec *ts, int base) +{ + int ret; + +#ifdef __NR_clock_gettime64 + struct __timespec64 ts64; + ret = INTERNAL_VSYSCALL (clock_gettime64, err, 2, CLOCK_REALTIME, &ts64); + + ts->tv_sec = ts64.tv_sec; + ts->tv_nsec = ts64.tv_nsec; + + if (! in_time_t_range (ts->tv_sec)) + { + __set_errno (EOVERFLOW); + return -1; + } +#endif + +#ifndef __ASSUME_TIME64_SYSCALLS + ret = INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, ts); +#endif + + return ret; +} + +#else + /* Set TS to calendar time based in time base BASE. */ int timespec_get (struct timespec *ts, int base) @@ -33,9 +63,13 @@ timespec_get (struct timespec *ts, int base) int res; INTERNAL_SYSCALL_DECL (err); case TIME_UTC: +#if __WORDSIZE == 32 + res = __timespec_get (*ts, base); +#else res = INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, ts); +#endif if (INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; + return 0; break; default: @@ -44,3 +78,4 @@ timespec_get (struct timespec *ts, int base) return base; } +#endif