From patchwork Wed Jun 21 09:43:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonggang Luo X-Patchwork-Id: 71484 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AE3ED3858D37 for ; Wed, 21 Jun 2023 09:44:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AE3ED3858D37 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1687340651; bh=zvpxEXFvL15reZncnrQQKF39gG3iLh13zUjoeYQxjIA=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=qir7JffeIHo5XHvQmRAiZ/jSqcK2VHGUEVnfDigVRmEiBYbD+yd26xDuQfbztXZjr vhja1RDSY49tpjizaNAUI4HvdYo0+4z2DL09VYPoaJdp1+75HI6lQVIhv5TlnjyJnz S8P2hgWu9fqoe2yNdByqF8dI5mIMzA1szHL3ZbJ4= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 6A6F13858D28 for ; Wed, 21 Jun 2023 09:43:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6A6F13858D28 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-6687446eaccso2894516b3a.3 for ; Wed, 21 Jun 2023 02:43:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687340623; x=1689932623; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zvpxEXFvL15reZncnrQQKF39gG3iLh13zUjoeYQxjIA=; b=Wv+sQHceqLP33gWxTNqKkwF4iIkSkkPkZjpYFULmmOm7fOcAgcYfWwFCfffF3nicJA HpwDygBqDNPBe5sIUeU7nJyMIw5fvWmqZs9NSSoeD1JZKhDwyQds4x6K2R7uodlPW5J1 uCMswlRUMH1EBr594w5oYjVGW/kRbOSSVjOI+JnILw62Bn4ZoDuhnQqH1OskN1JH8ZLh DeV6E8ep5SKZ1GPVguYci/TliyTSIDTnZkPSgvi4g4oS1RKKXYOFJaP2EWAjd+Ro54GI GhYUgFpkLbyE1FSUzH6OIptsEKraz+Pvo08nTofXFXjB+MtdVOLjnZcYTveVo8DcZ7JH jlqA== X-Gm-Message-State: AC+VfDzx/xtbgzY4XwT3kZThZqiVRFl5bvEfnTrZITz39tem5w3IiW7R xIm8jE/cjgkZzxFffOo8yoc= X-Google-Smtp-Source: ACHHUZ7WutUhWaXoAG3y1oTwZTwebR97DT60TdVfFYRM3zsKeB02jwdiPRoYpU8pUi+YEtQ/+/PsQQ== X-Received: by 2002:a05:6a21:3386:b0:121:574a:ac6f with SMTP id yy6-20020a056a21338600b00121574aac6fmr12284036pzb.1.1687340623287; Wed, 21 Jun 2023 02:43:43 -0700 (PDT) Received: from localhost.localdomain ([110.191.98.1]) by smtp.googlemail.com with ESMTPSA id bi8-20020a170902bf0800b001b6740207dbsm3034435plb.214.2023.06.21.02.43.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jun 2023 02:43:42 -0700 (PDT) To: Jens Gustedt , libc-alpha@sourceware.org, Xi Ruoyao , Joseph Myers Cc: Florian Weimer , Yonggang Luo Subject: [PATCH v3 1/4] clang-format: Do not usage tab to indent code Date: Wed, 21 Jun 2023 17:43:23 +0800 Message-Id: <20230621094324.1072-1-luoyonggang@gmail.com> X-Mailer: git-send-email 2.39.0.windows.1 MIME-Version: 1.0 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Yonggang Luo via Libc-alpha From: Yonggang Luo Reply-To: Yonggang Luo Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Signed-off-by: Yonggang Luo --- .clang-format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.clang-format b/.clang-format index 36c169e007..1ad76801ab 100644 --- a/.clang-format +++ b/.clang-format @@ -147,7 +147,7 @@ SpacesInSquareBrackets: false SpaceBeforeSquareBrackets: false Standard: Cpp03 TabWidth: 8 -UseTab: Always +UseTab: Never ForEachMacros: - 'FOR_EACH_IMPL' - 'list_for_each' From patchwork Wed Jun 21 09:43:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonggang Luo X-Patchwork-Id: 71485 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F36A53858422 for ; Wed, 21 Jun 2023 09:44:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F36A53858422 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1687340694; bh=AmLYNS+9vbSQKrCUEyW4x5fN8VAovy4GQVL1ELVUlkM=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=J0e46qyAqAznVbZoUHOEpbK95cI0+ru8SrFuR61kv8pRL8WP5zT57LPyVw+BY22Et nXFMh0tsdfJym7aM2Vl1/3u2gL/FoApWs1u1chm7SbUv55nz8P6bzdkNr6/LwuCKuB 7KGA1xrXXccVQ+fUN6yuFydAt4kFOgLX4+eDlLWM= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42f.google.com (mail-pf1-x42f.google.com [IPv6:2607:f8b0:4864:20::42f]) by sourceware.org (Postfix) with ESMTPS id 2B95D3858D35 for ; Wed, 21 Jun 2023 09:43:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2B95D3858D35 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-6682909acadso2155705b3a.3 for ; Wed, 21 Jun 2023 02:43:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687340627; x=1689932627; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AmLYNS+9vbSQKrCUEyW4x5fN8VAovy4GQVL1ELVUlkM=; b=S7ZsvwGZ83w+4dbOUSPiGQtXXVsTgXZVQltdpKnc9+joQ/V46KjGSrwHq7LXVe25Fu yHVMzfrIBd0upxntJYLhC76qxthSJmanX1d5osX1r1WtXjXregxAW5von/+5fC6F5zeZ w85MZeaPBF3jsuA1iXJBqPa52ALA1IpS4YFmZ1cNrOlmpP7ba8UoeMVbJendF6b9+iA1 XwtrNNteL78QRAv1eI06Nuy3VOPRiJb/YBvgJ8CuKxpQfoA0roQujjpam5dzQOqzQ6zM APwftfs73LDHyeZ+bng334F3vQnkMzt9Ym2dDloBrK2qDKDRUIu9OAouQGCtwEK1qAqS hq6A== X-Gm-Message-State: AC+VfDysnOaTTI8Zo/mRYnI58TQFFkKL9q43tRhSLv1nllznL6JLCnZx XviDV9rcbVUHM73IphNkH0M= X-Google-Smtp-Source: ACHHUZ6v0hT0lqaq2ET3/JRVN3/eksNTgy5UvmAH9swMCP8/HUrrYCKpBJwKKP+T38+V8HRtpszisA== X-Received: by 2002:a05:6a20:8f27:b0:10c:7a20:6dd6 with SMTP id b39-20020a056a208f2700b0010c7a206dd6mr11866782pzk.42.1687340627018; Wed, 21 Jun 2023 02:43:47 -0700 (PDT) Received: from localhost.localdomain ([110.191.98.1]) by smtp.googlemail.com with ESMTPSA id bi8-20020a170902bf0800b001b6740207dbsm3034435plb.214.2023.06.21.02.43.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jun 2023 02:43:46 -0700 (PDT) To: Jens Gustedt , libc-alpha@sourceware.org, Xi Ruoyao , Joseph Myers Cc: Florian Weimer , Yonggang Luo Subject: [PATCH v3 2/4] time: Implement newly add timebase defines for c23 timespec_get and timespec_getres Date: Wed, 21 Jun 2023 17:43:24 +0800 Message-Id: <20230621094324.1072-2-luoyonggang@gmail.com> X-Mailer: git-send-email 2.39.0.windows.1 In-Reply-To: <20230621094324.1072-1-luoyonggang@gmail.com> References: <20230621094324.1072-1-luoyonggang@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Yonggang Luo via Libc-alpha From: Yonggang Luo Reply-To: Yonggang Luo Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" These are implemented https://gustedt.gitlabpages.inria.fr/c23-library/#time_monotonic-time_active-time_thread_active with: # define TIME_MONOTONIC 2 # define TIME_ACTIVE 3 # define TIME_THREAD_ACTIVE 4 # define TIME_MONOTONIC_RAW 5 # define TIME_UTC_COARSE 6 # define TIME_MONOTONIC_COARSE 7 # define TIME_BOOTTIME 8 # define TIME_UTC_ALARM 9 # define TIME_BOOTTIME_ALARM 10 # define TIME_SGI_CYCLE 11 # define TIME_TAI 12 And a private function named clock_from_timebase is added, this is used to map c11 timebase to posix clockid_t in a common place Maybe it's can be prompted into a POSIX function in future to resolve issue that from https://www.openwall.com/lists/libc-coord/2023/04/25/1 Signed-off-by: Yonggang Luo --- NEWS | 13 +++++ include/time.h | 60 +++++++++++++++++++++++ sysdeps/unix/sysv/linux/timespec_get.c | 7 +-- sysdeps/unix/sysv/linux/timespec_getres.c | 5 +- time/time.h | 15 +++++- time/timespec_get.c | 7 +-- time/timespec_getres.c | 7 +-- time/tst-timespec_get.c | 7 +++ time/tst-timespec_getres.c | 17 +++++++ 9 files changed, 126 insertions(+), 12 deletions(-) diff --git a/NEWS b/NEWS index 709ee40e50..c4f53a2fb9 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,19 @@ Version 2.38 Major new features: +* C23 timebase defines are supported, thse are: + TIME_MONOTONI + TIME_ACTIVE + TIME_THREAD_ACTIVE + TIME_MONOTONIC_RAW + TIME_UTC_COARSE + TIME_MONOTONIC_COARSE + TIME_BOOTTIME + TIME_UTC_ALARM + TIME_BOOTTIME_ALARM + TIME_SGI_CYCLE + TIME_TAI + * When C2X features are enabled and the base argument is 0 or 2, the following functions support binary integers prefixed by 0b or 0B as input: strtol, strtoll, strtoul, strtoull, strtol_l, strtoll_l, diff --git a/include/time.h b/include/time.h index f599eeed4e..19db10ffc6 100644 --- a/include/time.h +++ b/include/time.h @@ -361,6 +361,66 @@ in_time_t_range (__time64_t t) return s == t; } +/* Helper that convert from c11 timebase to posix clockid_t, + when the mapping not exist, return -1 */ +static inline clockid_t +clock_from_timebase (int timebase) +{ + clockid_t clockid = -1; + switch (timebase) + { + case TIME_UTC: + clockid = CLOCK_REALTIME; + break; + case TIME_MONOTONIC: + clockid = CLOCK_MONOTONIC; + break; + case TIME_ACTIVE: + clockid = CLOCK_PROCESS_CPUTIME_ID; + break; + case TIME_THREAD_ACTIVE: + clockid = CLOCK_THREAD_CPUTIME_ID; + break; + case TIME_MONOTONIC_RAW: + clockid = CLOCK_MONOTONIC_RAW; + break; + case TIME_UTC_COARSE: + clockid = CLOCK_REALTIME_COARSE; + break; + case TIME_MONOTONIC_COARSE: + clockid = CLOCK_MONOTONIC_COARSE; + break; +# ifdef CLOCK_BOOTTIME + case TIME_BOOTTIME: + clockid = CLOCK_BOOTTIME; + break; +# endif +# ifdef CLOCK_REALTIME_ALARM + case TIME_UTC_ALARM: + clockid = CLOCK_REALTIME_ALARM; + break; +# endif +# ifdef CLOCK_BOOTTIME_ALARM + case TIME_BOOTTIME_ALARM: + clockid = CLOCK_BOOTTIME_ALARM; + break; +# endif +# ifdef CLOCK_SGI_CYCLE + case TIME_SGI_CYCLE: + clockid = CLOCK_SGI_CYCLE; + break; +# endif +# ifdef CLOCK_TAI + case TIME_TAI: + clockid = CLOCK_TAI; + break; +# endif + default: + break; + } + return clockid; +} + /* Convert a known valid struct timeval into a struct __timespec64. */ static inline struct __timespec64 valid_timeval_to_timespec64 (const struct timeval tv) diff --git a/sysdeps/unix/sysv/linux/timespec_get.c b/sysdeps/unix/sysv/linux/timespec_get.c index 3c852be99b..40d3ae3f0d 100644 --- a/sysdeps/unix/sysv/linux/timespec_get.c +++ b/sysdeps/unix/sysv/linux/timespec_get.c @@ -23,10 +23,11 @@ int __timespec_get64 (struct __timespec64 *ts, int base) { - if (base == TIME_UTC) + clockid_t clockid = clock_from_timebase (base); + if (clockid >= 0) { - __clock_gettime64 (CLOCK_REALTIME, ts); - return base; + if (__clock_gettime (clockid, ts) >= 0) + return base; } return 0; } diff --git a/sysdeps/unix/sysv/linux/timespec_getres.c b/sysdeps/unix/sysv/linux/timespec_getres.c index 7e61d78a77..e73c73cf74 100644 --- a/sysdeps/unix/sysv/linux/timespec_getres.c +++ b/sysdeps/unix/sysv/linux/timespec_getres.c @@ -22,9 +22,10 @@ int __timespec_getres64 (struct __timespec64 *ts, int base) { - if (base == TIME_UTC) + clockid_t clockid = clock_from_timebase (base); + if (clockid >= 0) { - __clock_getres64 (CLOCK_REALTIME, ts); + __clock_getres64 (clockid, ts); return base; } return 0; diff --git a/time/time.h b/time/time.h index 368f4dc588..76ab4eb322 100644 --- a/time/time.h +++ b/time/time.h @@ -62,7 +62,20 @@ typedef __pid_t pid_t; #ifdef __USE_ISOC11 /* Time base values for timespec_get. */ -# define TIME_UTC 1 +# define TIME_UTC 1 +#endif +#if __GLIBC_USE_ISOC2X +# define TIME_MONOTONIC 2 +# define TIME_ACTIVE 3 +# define TIME_THREAD_ACTIVE 4 +# define TIME_MONOTONIC_RAW 5 +# define TIME_UTC_COARSE 6 +# define TIME_MONOTONIC_COARSE 7 +# define TIME_BOOTTIME 8 +# define TIME_UTC_ALARM 9 +# define TIME_BOOTTIME_ALARM 10 +# define TIME_SGI_CYCLE 11 +# define TIME_TAI 12 #endif __BEGIN_DECLS diff --git a/time/timespec_get.c b/time/timespec_get.c index 9b1d4f22ed..93aa442ca0 100644 --- a/time/timespec_get.c +++ b/time/timespec_get.c @@ -22,10 +22,11 @@ int timespec_get (struct timespec *ts, int base) { - if (base == TIME_UTC) + clockid_t clockid = clock_from_timebase (base); + if (clockid >= 0) { - __clock_gettime (CLOCK_REALTIME, ts); - return base; + if (__clock_gettime (clockid, ts) >= 0) + return base; } return 0; } diff --git a/time/timespec_getres.c b/time/timespec_getres.c index fd64dc7a47..3cc7a4b3bb 100644 --- a/time/timespec_getres.c +++ b/time/timespec_getres.c @@ -23,10 +23,11 @@ int timespec_getres (struct timespec *ts, int base) { - if (base == TIME_UTC) + clockid_t clockid = clock_from_timebase (base); + if (clockid >= 0) { - __clock_getres (CLOCK_REALTIME, ts); - return base; + if (__clock_getres (clockid, ts) >= 0) + return base; } return 0; } diff --git a/time/tst-timespec_get.c b/time/tst-timespec_get.c index d735160394..e5b86c0422 100644 --- a/time/tst-timespec_get.c +++ b/time/tst-timespec_get.c @@ -34,6 +34,13 @@ do_test (void) TEST_VERIFY (ts.tv_nsec < 1000000000); } + { + struct timespec ts; + TEST_COMPARE (timespec_get (&ts, TIME_MONOTONIC), TIME_MONOTONIC); + TEST_VERIFY (ts.tv_nsec >= 0); + TEST_VERIFY (ts.tv_nsec < 1000000000); + } + return 0; } diff --git a/time/tst-timespec_getres.c b/time/tst-timespec_getres.c index b400a70138..55a6dd21e8 100644 --- a/time/tst-timespec_getres.c +++ b/time/tst-timespec_getres.c @@ -45,6 +45,23 @@ do_test (void) TEST_COMPARE (ts.tv_nsec, cts.tv_nsec); } + { + struct timespec ts; + TEST_COMPARE (timespec_getres (&ts, TIME_MONOTONIC), TIME_MONOTONIC); + /* Expect all supported systems to support TIME_MONOTONIC with + resolution better than one second. */ + TEST_VERIFY (ts.tv_sec == 0); + TEST_VERIFY (ts.tv_nsec > 0); + TEST_VERIFY (ts.tv_nsec < 1000000000); + TEST_COMPARE (timespec_getres (NULL, TIME_MONOTONIC), TIME_MONOTONIC); + /* Expect the resolution to be the same as that reported for + CLOCK_MONOTONIC with clock_getres. */ + struct timespec cts; + TEST_COMPARE (clock_getres (CLOCK_MONOTONIC, &cts), 0); + TEST_COMPARE (ts.tv_sec, cts.tv_sec); + TEST_COMPARE (ts.tv_nsec, cts.tv_nsec); + } + return 0; }