From nobody Sat Jul 12 18:33:01 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bfcfD0rckz60xkm for ; Sat, 12 Jul 2025 18:33:24 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic309-21.consmr.mail.gq1.yahoo.com (sonic309-21.consmr.mail.gq1.yahoo.com [98.137.65.147]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4bfcfC4f6Cz3RqC for ; Sat, 12 Jul 2025 18:33:23 +0000 (UTC) (envelope-from marklmi@yahoo.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=yahoo.com header.s=s2048 header.b=YNfRYhv6; spf=pass (mx1.freebsd.org: domain of marklmi@yahoo.com designates 98.137.65.147 as permitted sender) smtp.mailfrom=marklmi@yahoo.com; dmarc=pass (policy=reject) header.from=yahoo.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1752345196; bh=9JktYmW0795bJEe/X4/M6lHAXhpKDWF+QgOJFTC6SOQ=; h=From:Subject:Date:To:References:From:Subject:Reply-To; b=YNfRYhv6XkECUxEJi75k8KTb3HkIBYXsakKJeijDsELDffW6NdT2cQHU631cfcyWTKangSd2bytg9x8Ahcj8lO/PYgFLNicaAYlwApiBtWOWyA4sKGNmOA5pU57JrUOR2QNuQjqS1ykELdgNtQN+5I1oP6nIk61L8PaYl6caHI2qmUihVPRAz3o5RoPu9hUkPDsmOSoGYhQS+LkQ5VLpZ5PjoP159cnv9u4yJ3DoIyW1hBjWzdtr9ub50/22MvcpAxzdtS2HDapxqaD8J1lHvGW27rgxJEJpaSeXuukkQpCJTR/MLeEiDgr2ms9BQgin152h/2eD0LiQRScywt9qMg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1752345196; bh=w+ft+A+F6W2WLP2UqDTbR0aMo3bX7Z49n+Fp1R2khXb=; h=X-Sonic-MF:From:Subject:Date:To:From:Subject; b=k9L93NMS7VOn/1aLD5r8OZqxdAId/69yMVsCShb8j1Ro4shPDjVztb88QU3NXzaed3AnaiCg7XR8MzZnYmbk3bIoI/9hG2eIjUDs9sqpgXqUlSERpTJ3pIzwl2kYcPQwB5sIdHef8w3U8nX64NTpo+4ftQRw3IG3KltvJC/nmu6ZolESr1AD8m1Cdw4QKYbHYT4fTHyLavgkKy6g77ZBRIfoFOoicVPZ9ecw38QbP2yrzIEUfFMm9+Uhrtt3l3TAIF/wXG5pl7RURhmgiJo5dIBPs87La3cor7l1pvZCkjrWlpDHDwL+rfZ9SUPwrsRnt648xdiw7srTlovBahe7CA== X-YMail-OSG: KDEHo7wVM1n2iJdy0YGLLFq8wNjgzJsc4.gtTFq21itmKnHt0OoxySrseef8xt1 wfRx4cb6HlJ6xNq55zXPGVpU8TTrj2omD0xKdyIn5WaGzVuoQfOPX9BDdMYI9eWEnz0H0zhr2yP4 KneWrwTNph4kLlaS_UARE4EVNVLCmK7B_nJdGKuMv5dLfJlOnFQDYZht65avRWGW6T2AdSiUzvkN r7i26U1R2.X.og_JNmrabwcaNx9sUId3X0EOWHbZtcgku.TCXj1nZmoyuObiqqcAVs7o51a6Mexj sMnuezE3fJ5_NkDAWQkgkGvRVWNCZ4Jn6.2ymsUHMLcDmocz9HhXvKrW0Zy2lmFg4qUd0lHLHTS7 Eb56IyyQxUtVt7QdXIpbvZ1oqxULEUT2BoZNy3v3Y_GTkgY3JCrp4kFKk0Y2mX0Af68ybCa9Qos0 qvIAiFMRMdKhwq2Q1FOfph0d5QrnSm.47PfHg6Qt0IS_atjRvke7dAk.l2fDvzGcUdINVTLS_qUd 6T5aRs80pA2gp1W.aWCc5NkJecf7F4uXHg9ykIhPE2PE_NdKv36XvG40oQagXJO6NdBHyrUbSNHn rJsRcASbVuWgTbffvbK8MVWupfXdiDRGwS4shwF5Fs53B37tNAHuwg338UZ8Ycaiur642sO1C85r P1.1kIRRK3HdStpvANjdTfO5UtpNDD91lC45Gfnsg5QLjNYFFgZCWZ2PMegUOT3TJ.Fa4XjCv2EG QLWoYwhUMVSiTDS3C2jMAoPIWg5nMsHLLq7R46NEW0K6WBS84zb0roarvxvxfCUvfIzeIuI8NXkm MjZ_083g8vl0WlVwkNnjAIirVmUWvInl9VGjAy4Jc2UFmBMWFJxVlAJHhCwr.1xTtKtPt3ED1Mn5 ADwP2xGL1wO2nh9Is0s9uTOU2P8BD_kxYsTjRZQkuhBlG0cbOK2iE6LuCMcmFgsd46f_zalP8OIg xeH.oJDDaAuek0lg5JVauxA4rfIKFoeCvF74J12nGEwyT9RH126JmZycmpV0m2utCQFOn2XV228v nmmwI6_AbHKG.Uga44.CyBBAFb.2_7rCCCfinotze3IA3FRICfh64KXHU2yN4ZS0fZIX0RfmLAXM UOq8Klg.OSZWR0NKLfYEjRpVwWTUCktmnm5kW7mpNte_LXtXsC41clJLCTrj78NHC9kvyhoQfHHN moiiXI7UCogd2_FpuZP8069qhbx.RuhF_NjTafww3OJ.7ppcnSgkt8vQs0_gyVnIYAhkliMqgedx 8mD_GBADn6zvn64qNj5TTRxNDIDrDHuNaYbpYtPys_F8Q7riVlW58tItKrjaudiLVHzRWIQ0vYc1 DBfUSUebXiyqEZa06qKYFwsAzsGY8pN3qqF_xcSgnHUU.e8cbrFo2HvZiz_Qvx2ROHS4TlAVmAvj JiAhpC_.seiL5l_wbF3Jl.8vcMIVIg.Lajsgy8uglv9FfB1Y7UsYZyx4b8Xzuro6V9QxKJLrSH1m k8u126tRGR1ka3yGK2mLPu5wXegy5NZcpibwHm.Nu.g9P1grydMuFPJ5i_1ihH2K1AqevVkJY5wj qOJuyJhXU4PhjfjWflLUfwDW9nkxZ6.aVtD5rhmtLi7PmmTufkTPNKxDKN8DKVouCRsL43DY8aH1 l2uR5ozdbYjcbJtKBVVFcllK3HkFcFHLJOGqJKGg4knnnb_RtujrRjvChgACXa7tTmRDpJn.rROX JIoIbhM3juiMvGlN9D2gDIHSLCzeBAYgSjsqn89haloVrcrEpup1JHK62vzUXmK3F7r97FsHfyeK ONQKaSPM.p27zJmAGx6jK__3MhWuVrh7r4wGWPPjI40bULcA.JxPpLW.E65zN6S2yc6LG8u.wPmg qhOXgPPUp7MFGE3PBDJuYXm_tof_VStEBZo6k88vSpIBMZsdVsIOVCTGW7HDtLes2e26k5pbvLJl wUp1E3M2TqwT6gBdJJeKUL8b.Z7q.45iYOCiP87MJ2bt8MJMbegvrm8NkntjW1J0kSs4RwuvnK2b zaEEbkxL8j_XCAPW1J9oIZ9sihPegJ4rychzjTYCKB5mqyFKa6ehT5r9m.5smRoUILDNDZOPrIY5 JO1geFhGscTyLfeFrwLZKmc6vuOA3MEfXtAsZfKEx3fpevDnbkfOk3HCAhp.pNPEXuBG1s7hyCub w1OXRSWY__WS0gNzTqVHVAhN4bmyz9ApDqUAvqSikOQyUg7gFY5gBUgP_GiGQtAYOAbNvGYZMqOo yhzkLuJspAnYdD6qlx00Odmmw1yIZbmUmR9KD49enuhyU1niSrlAQqR6FxEDNoK0dNbooxsCTNca eS7MxWMVswnVkcrBBT5csHumI X-Sonic-MF: X-Sonic-ID: 5b4ef24b-2083-4823-9173-d27878fbde49 Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Sat, 12 Jul 2025 18:33:16 +0000 Received: by hermes--production-gq1-74d64bb7d7-nrjbm (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID cacaf27110e431f4d0d995bb61800e58; Sat, 12 Jul 2025 18:33:12 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.600.51.1.1\)) Subject: Re: git: ba0d9b43e940 - main - kern_descrip.c: provide helpers to translate between fd flags namespace Message-Id: <5BED6279-4414-45B5-8A2A-8DC42A07C4D9@yahoo.com> Date: Sat, 12 Jul 2025 11:33:01 -0700 To: John Baldwin , Konstantin Belousov , dev-commits-src-main@freebsd.org X-Mailer: Apple Mail (2.3826.600.51.1.1) References: <5BED6279-4414-45B5-8A2A-8DC42A07C4D9.ref@yahoo.com> X-Spamd-Result: default: False [2.15 / 15.00]; NEURAL_SPAM_MEDIUM(1.00)[1.000]; NEURAL_SPAM_LONG(1.00)[1.000]; NEURAL_SPAM_SHORT(0.65)[0.654]; MV_CASE(0.50)[]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; ARC_NA(0.00)[]; TO_DN_SOME(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; FREEMAIL_FROM(0.00)[yahoo.com]; DKIM_TRACE(0.00)[yahoo.com:+]; RCPT_COUNT_THREE(0.00)[3]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[98.137.65.147:from]; DWL_DNSWL_NONE(0.00)[yahoo.com:dkim]; MID_RHS_MATCH_FROM(0.00)[]; MLMMJ_DEST(0.00)[dev-commits-src-main@freebsd.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[98.137.65.147:from]; FROM_HAS_DN(0.00)[] X-Rspamd-Queue-Id: 4bfcfC4f6Cz3RqC X-Spamd-Bar: ++ John Baldwin wrote on Date: Sat, 12 Jul 2025 17:07:28 UTC : > On 7/11/25 15:00, Konstantin Belousov wrote: > > On Fri, Jul 11, 2025 at 11:46:33AM -0400, John Baldwin wrote: > >> On 7/8/25 17:49, Konstantin Belousov wrote: > >>> The branch main has been updated by kib: > >>> > >>> URL: = https://cgit.FreeBSD.org/src/commit/?id=3Dba0d9b43e940077f4025e7e4e85d16c8= d525db79 > >>> > >>> commit ba0d9b43e940077f4025e7e4e85d16c8d525db79 > >>> Author: Konstantin Belousov > >>> AuthorDate: 2025-07-08 16:30:29 +0000 > >>> Commit: Konstantin Belousov > >>> CommitDate: 2025-07-08 21:48:59 +0000 > >>> > >>> kern_descrip.c: provide helpers to translate between fd flags = namespace > >>> Reviewed by: markj > >>> Sponsored by: The FreeBSD Foundation > >>> Differential revision: https://reviews.freebsd.org/D51206 > >>> --- > >>> sys/kern/kern_descrip.c | 110 = +++++++++++++++++++++++++++++++++++++++--------- > >>> 1 file changed, 90 insertions(+), 20 deletions(-) > >>> > >>> diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c > >>> index 406236fc2723..2e1da2fdee29 100644 > >>> --- a/sys/kern/kern_descrip.c > >>> +++ b/sys/kern/kern_descrip.c > >>> @@ -480,6 +480,90 @@ kern_fcntl_freebsd(struct thread *td, int fd, = int cmd, intptr_t arg) > >>> return (error); > >>> } > >>> +struct flags_trans_elem { > >>> + u_int f; > >>> + u_int t; > >>> +}; > >>> + > >>> +static u_int > >>> +flags_trans(const struct flags_trans_elem *ftes, int nitems, = u_int from_flags) > >>> +{ > >>> + u_int res; > >>> + int i; > >>> + > >>> + res =3D 0; > >>> + for (i =3D 0; i < nitems; i++) { > >>> + if ((from_flags & ftes[i].f) !=3D 0) > >>> + res |=3D ftes[i].t; > >>> + } > >>> + return (res); > >>> +} > >>> + > >>> +static uint8_t > >>> +fd_to_fde_flags(int fd_flags) > >>> +{ > >>> + static const struct flags_trans_elem fd_to_fde_flags_s[] =3D { > >>> + { .f =3D FD_CLOEXEC, .t =3D UF_EXCLOSE }, > >>> + { .f =3D FD_CLOFORK, .t =3D UF_FOCLOSE }, > >>> + { .f =3D FD_RESOLVE_BENEATH, .t =3D UF_RESOLVE_BENEATH }, > >>> + }; > >>> + > >>> + return (flags_trans(fd_to_fde_flags_s, = nitems(fd_to_fde_flags_s), > >>> + fd_flags)); > >>> +} > >>> + > >>> +static int > >>> +fde_to_fd_flags(uint8_t fde_flags) > >>> +{ > >>> + static const struct flags_trans_elem fde_to_fd_flags_s[] =3D { > >>> + { .f =3D UF_EXCLOSE, .t =3D FD_CLOEXEC }, > >>> + { .f =3D UF_FOCLOSE, .t =3D FD_CLOFORK }, > >>> + { .f =3D UF_RESOLVE_BENEATH, .t =3D FD_RESOLVE_BENEATH }, > >>> + }; > >>> + > >>> + return (flags_trans(fde_to_fd_flags_s, = nitems(fde_to_fd_flags_s), > >>> + fde_flags)); > >>> +} > >>> + > >>> +static uint8_t > >>> +fddup_to_fde_flags(int fddup_flags) > >>> +{ > >>> + static const struct flags_trans_elem fddup_to_fde_flags_s[] =3D = { > >>> + { .f =3D FDDUP_FLAG_CLOEXEC, .t =3D UF_EXCLOSE }, > >>> + { .f =3D FDDUP_FLAG_CLOFORK, .t =3D UF_FOCLOSE }, > >>> + }; > >>> + > >>> + return (flags_trans(fddup_to_fde_flags_s, = nitems(fddup_to_fde_flags_s), > >>> + fddup_flags)); > >>> +} > >>> + > >>> +static uint8_t > >>> +close_range_to_fde_flags(int close_range_flags) > >>> +{ > >>> + static const struct flags_trans_elem = close_range_to_fde_flags_s[] =3D { > >>> + { .f =3D CLOSE_RANGE_CLOEXEC, .t =3D UF_EXCLOSE }, > >>> + { .f =3D CLOSE_RANGE_CLOFORK, .t =3D UF_FOCLOSE }, > >>> + }; > >>> + > >>> + return (flags_trans(close_range_to_fde_flags_s, > >>> + nitems(close_range_to_fde_flags_s), close_range_flags)); > >>> +} > >>> + > >>> +static uint8_t > >>> +open_to_fde_flags(int open_flags, bool sticky_orb) > >>> +{ > >>> + static const struct flags_trans_elem open_to_fde_flags_s[] =3D { > >>> + { .f =3D O_CLOEXEC, .t =3D UF_EXCLOSE }, > >>> + { .f =3D O_CLOFORK, .t =3D UF_FOCLOSE }, > >>> + { .f =3D O_RESOLVE_BENEATH, .t =3D UF_RESOLVE_BENEATH }, > >>> + }; > >>> + _Static_assert(open_to_fde_flags_s[nitems(open_to_fde_flags_s) - = 1].f =3D=3D > >>> + O_RESOLVE_BENEATH, "O_RESOLVE_BENEATH must be last, for = sticky_orb"); > >> > >> This broke the GCC builds it seems. GCC doesn't think that it can = compute this > >> expression at compile time. > >> > >> =46rom = https://ci.freebsd.org/job/FreeBSD-main-amd64-gcc14_build/1022/console: > >> > >> 10:32:02 /workspace/src/sys/kern/kern_descrip.c: In function = 'open_to_fde_flags': > >> 10:32:02 /workspace/src/sys/kern/kern_descrip.c:560:79: error: = expression in static =3D > >> 10:32:02 assertion is not constant > >> 10:32:02 560 | = _Static_assert(open_to_fde_flags_s[nitems(open_to_fde_flags=3D > >> 10:32:02 _s) - 1].f =3D3D=3D3D > >> > >=20 > > I am unable to propose anything better than the patch below. We have = enough > > #ifdef __clang__ in non-contrib sources already, so this should be = not a > > huge crime? > >=20 > > % rg -g '!contrib/*' __clang__ | wc -l > > 171 > >=20 > > commit 96e6b15b0a1407af45ebe1ad38ee53627d09d16b > > Author: Konstantin Belousov > > Date: Fri Jul 11 21:57:32 2025 +0300 > >=20 > > kern_descrip.c: only allow complex expression in Static_assert() for = clang > >=20 > > gcc cannot compute the assert expression. > >=20 > > Reported by: jhb > >=20 > > diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c > > index 93bdd41d1515..c4f5e586b0ed 100644 > > --- a/sys/kern/kern_descrip.c > > +++ b/sys/kern/kern_descrip.c > > @@ -557,8 +557,10 @@ open_to_fde_flags(int open_flags, bool = sticky_orb) > > { .f =3D O_CLOFORK, .t =3D UF_FOCLOSE }, > > { .f =3D O_RESOLVE_BENEATH, .t =3D UF_RESOLVE_BENEATH }, > > }; > > +#ifdef __clang__ > > _Static_assert(open_to_fde_flags_s[nitems(open_to_fde_flags_s) - = 1].f =3D=3D > > O_RESOLVE_BENEATH, "O_RESOLVE_BENEATH must be last, for = sticky_orb"); > > +#endif >=20 > I think this is fine. Mark Millard followed up with me offline and it = may be that > GCC is technically more correct here with what is allowed to be = computed as a static > constant at compile time FWIW. C++' constexpr allows for a wider range = of > compile-time constant values compared to C and this sort of thing = feels very > constexpr-like. gcc for this seems to stick to what is guaranteed by the C standards in this subject area. But the same N3220 text allows implementation-defined (non-portable) contexts as well: QUOTE An implementation may accept other forms of constant expressions; however, it is implementation defined whether they are an integer constant expression. END QUOTE So clang is not wrong to allow it --but it did not have to. The code is more portable without the array-content access where an integer constant expression is required, avoiding implementation defined aspects of the language definition. So testing for --and then usage of-- a known-to-be-implementation-defined context fits. =3D=3D=3D Mark Millard marklmi at yahoo.com