From owner-freebsd-hackers@freebsd.org Sat Jan 16 22:08:41 2021 Return-Path: Delivered-To: freebsd-hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 10B2E4EC9D2 for ; Sat, 16 Jan 2021 22:08:41 +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.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4DJByc0RGkz4tF2 for ; Sat, 16 Jan 2021 22:08:39 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1610834918; bh=4aJX7R16KF7lyY/K0Zrurqhi/C3QkrrvcPKLDzPEKi0=; h=Subject:From:Date:To:From:Subject:Reply-To; b=tBR6cL1sf8yerseyze6T8cI1RvZ2e9yvdHbhwcfYsydLqKNIJ7mWaG92NGtQCbgWIgNeT3oaLwTXjBjdSJyNbqvxoRqqZurtQ/qBHpY2KCPv1UycxjUGkux9tZDY/VdiWYXkD/PL8F5SjMvOAxT7MpBAIYq7GtV0vXK5GCFOmvZstYP+rDirI/HVWDDt15haS0UaPCOpOsPzOXf4QMFnbsdbxiLNC3gXZwlqb9fSFAwSIx7qSvOAvH/asE3LkL56hzclL4cqwdwu4GXGgtZrJQegpRqmfUhAoDPO8wSreBZnENZKM1t5AOA6icL/54lTnIDR/2FxDGQSEeP2JkL0+w== X-YMail-OSG: iEM4MhgVM1kL3I83halJpBo6obnSy7ZtEIY4q8WiOTL4JtuQBGHqd2.cQUXZd4i M8ysuM0sXZhUwGHD7_Y4irNCKYNHWv6CaoPBg6l_hs_PVvr4txiMepa75mM0ks0iM7Itf8Oh67By rF9FwJo7f0rVt6X47.9_lM0mJl3a6qcrCplas1v7Q_5sVdTnn3Sa5P6grm2YeBYpzZW35LN6Yp9F zf6iyRciGm7093G6mfdD_GSo_BAg0LFlRbiDUNay1m.9SGyyIjXJALLbF3DJlXDGgjIkoWuRvH7Z LP0lowUq3DnbK6wJyULLVJ_mAKTO7qLVgxe8m1a_64JtyzFPaRV9tubNMpLAx1f60YdxzUkV03oW fi6zPcI80lXlaBNaflxLRUPPRJh42yJjgKUOkybbH8tBQNULXo0wAZf_OwBy8Slo1kYyeuN7bjhJ rkqFUZeNVHuN7TxBmzC0w1RmyZveDwAuSg7FFZb_xxGyukvIzvocF78WSZ.OzJXmwaCfKtaPrvI6 cMgbTa4WRXQ7WQGk6Fzsgyx7WeS_JeJqR4Xx_z_lniRNdr.JVd3WM9qxZFQ5UdsLiTDNC29nfr2i G6tLsOIpjoQYmFX1_baS4UDofBEUJjX6NCSlK14xnGtiXM.l7wSsJdXGsEG6uJuIAahUXLPLyiBW aJm6MOVJ79DBeGmB_K.5Wvna05z62HLgse5VC1bvZuMECa7jg66dAHCyxZHo2g63uJnvvZMEODfY jFijaN7PiKoINWQ4xyMbYKJlwIVnhOaE3adyIjsZ0F9CQmhMUmP4wPdR0SE_sAAhQxKsoMa79zFq 65xXZMeB69QgGtzOY15LlThqkGXOhNni8yGOIh8Foz53914EOPeE77AiAX4.Gl_Da3F6btRE_zu9 wMVRQc.Jxagl2p0ebNl7i4CZSNvQlapXL.AhKuFkMwKh1SC5ZMEgqRYnrhoiBXAnKceCRpSZQyuK hxNWBog1EJ3ddadB5KisXJOkMNPR7dT.baBgp5..m79R6NItUhTd07tsqn5nqlG8RibW55icTzCA q9LdHwVeiaCSjw90M2pJbv60ZVUzFVUA7B1TajtWHb3_WzjbUHu8G6orV4LBJazeExYcx99p.25Z 2nAtpT50wfMbbCTs7GOd2CwBupWt4hg7lfREyY.ZBH.9cmOFeN1PwcxOWbbBzdnk6pDifohc_oND XY3T0x9J5eD0vT0uFThnNIcWI_frntpVzuJRr78kGdWSCirUkBuzVaDvWgkAJMTVV2tQ2.oQ956p Q09JZrTu..x9kQ7vjT9h4xoAzbXdn.u4ycIqMJ6lDFDoSorvRug5EyJUDJA2YnPWTEGxTQkq3Dq4 HF83yW.mKPUINyZ0AGAXbA6ZbPAOHnm4Tq1a0PScsh0sAKEe9spgSzCeZCuxmPB1lhkebG3HLOyt HBX85xJjTWyLJAtJKyn9PZB2WnpNcpSvG0Ojnv4POVF6Smwre65icdlht0hEPZEI8GMB636bMLF6 Oe5RaAVlzUBoxlpLChoTdygoSsX7sZz0WLLjG6M60dIqThdcyttBGfSHUnaoIe0GnEqYWWhZZmZC UABreTwgNLpZ7BoctfAIqN_kgHytc3aNtmZqFXeaqertz_vBUJhX6LZURXQco7ujrxxikomVL4Uy qiZq88Q3cTS1xWgH8PX9ins5lB42tY6r2xmhuiBAj.QNicaMIbYvsNon4BMaZyhNmF3thMpdx4b3 uIMAdCz337h9mDcLVGamRha51gdxlJ9EDDJHMzGCEVvp2J7uvllV6E3CdsPMgDE1g5RqeCqvONK5 CXfdjcY.stvPBOsXuPv2N0MMCDorpLoFqNt8H829vK6HUS_g5ui1SP8bZo27CtJPO5EfvumsUbvu Ktjyz4hgPXYGW4GScIgw0Mpl0Ix0JObL7A1j690f318WQDK32fS94sWq_n3nYVWgbtIVtJMthU89 p8ws4hwSXYobO_CpVdGW5Z8rQ1vFjIS19Go5cYwdODrf.wfE0Ct7LwaaRyOgH7_OebmaVPbs28Wz jMIhP0KZvSVyy7FwvrJtd5Mj.EUO.Kqo_TEZhkur4ISPASVyyKMdbm1o6Uj_KOxqdH_nJHzpJazt IcG.vRYfE.DZkUvdHVj7QLP7YOlOIxYBKAStFBo_JThrumn1v7W7VF0JbM._r548EZ1M2RnPmJug E7UTO_MdOivjcmlIYHtsG9a0rlzeyM4oh2mwEP2yXnrLcgbbXXn5OVdfYNt.X4jX_1y2RzG6bVaf pIUTA7qo9U78sgyXO6NFE2zgu8WgbwTwVmPpiOrVN_xifIGSLb0U8NgZD0tN3BYBFHNiew_IkRA1 PnpuRVrn1opHR6Oi7dLBvhRKDxTAhYduvRx7D4JAgNiLw33R4F37rWh51YD7MRLtKn.MBFjxBPfm CI2vbax_WXwYhiOT7KfqL.Vo46jupM2GkPIJ8QIZZ_fmNNRL3H8Bk.ia.qQH2TtG3y0nGhXiqrDK SYSItnW.SBCXJgu5z2RdizUkrUnHg42QknV114qiUGM0Ugvi1dXHlsgkHOQ-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Sat, 16 Jan 2021 22:08:38 +0000 Received: by smtp415.mail.bf1.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 82fc3c64ba34c705184f81013a2bbfc7; Sat, 16 Jan 2021 22:08:33 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.40.0.2.32\)) Subject: Re: Implicit assumptions (was: Re: Some fun with -O2) From: Mark Millard In-Reply-To: <1648904.MsCH1bHPGx@t450s.local.lan> Date: Sat, 16 Jan 2021 14:08:30 -0800 Cc: freebsd-hackers@freebsd.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <1725854.nNRVL2rNYg@t450s.local.lan> <7623BADF-5FA9-4712-8D85-A1D2B82E3F74@yahoo.com> <1648904.MsCH1bHPGx@t450s.local.lan> To: Walter von Entferndt X-Mailer: Apple Mail (2.3654.40.0.2.32) X-Rspamd-Queue-Id: 4DJByc0RGkz4tF2 X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.50 / 15.00]; TO_DN_SOME(0.00)[]; FREEMAIL_FROM(0.00)[yahoo.com]; MV_CASE(0.50)[]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; DKIM_TRACE(0.00)[yahoo.com:+]; RCPT_COUNT_TWO(0.00)[2]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US]; RBL_DBL_DONT_QUERY_IPS(0.00)[98.137.65.147:from]; DWL_DNSWL_NONE(0.00)[yahoo.com:dkim]; MID_RHS_MATCH_FROM(0.00)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; FROM_HAS_DN(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.10)[text/plain]; SPAMHAUS_ZRD(0.00)[98.137.65.147:from:127.0.2.255]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[98.137.65.147:from]; RWL_MAILSPIKE_POSSIBLE(0.00)[98.137.65.147:from]; RCVD_COUNT_TWO(0.00)[2]; MAILMAN_DEST(0.00)[freebsd-hackers] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Jan 2021 22:08:41 -0000 On 2021-Jan-16, at 12:19, Walter von Entferndt wrote: > At Samstag, 16. Januar 2021, 11:23:03 CET, Mark Millard wrote: >> This is the sort of thing where FreeBSD and Linux use a C subset >> for the specific issue, as defined by POSIX.1-2017/"The Open Group >> Base Specifications" Issue 7, 2018 edition/IEEE STd 1003-2017/... . >> For example: >>=20 >> = https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html= >>=20 >> reports (in its own terminology that may not be a full match to C's): >>=20 >> QUOTE >> clock_t shall be an integer or real-floating type. time_t shall be an >> integer type. END QUOTE >>=20 >> Limiting to such a time_t is easier to cover. [...] >> Restricting time_t to integer types leaves a compatible context. >> So: no "conflict" in that respect. >>=20 > My understanding is that check_mktime.c is a test program called by = autoconf=20 > or such, designed to run on various UNIX platforms? I mean it does = not only=20 > need to run on BSD & Linux. QUOTE ( from https://en.wikipedia.org/wiki/POSIX ) The Portable Operating System Interface (POSIX) is a family of standards = specified by the IEEE Computer Society for maintaining compatibility = between operating systems.[1] POSIX defines the application programming = interface (API), along with command line shells and utility interfaces, = for software compatibility with variants of Unix and other operating = systems. END QUOTE The section "POSIX-oriented operating systems" lists many OSs that are either certified, mostly-compliant, have means of having a POSIX environment (includes Microsoft Windows, OS/2, DOS), or have a (optional) POSIX compatibility layer. I'll not make a full list here. You can use that to help judge if only supporting time_t as an integer type is worthwhile in your view. > Maybe something like this will cover the most cases in practice: There are more details here that I'd need to think about that I've not dealt with yet. > --- check_mktime.c.patch --- > --- check_mktime.c.orig 2021-01-15 03:19:33.962253000 +0100 > +++ check_mktime.c 2021-01-16 21:00:36.160616000 +0100 > @@ -3,6 +3,13 @@ > # include > # include > # include > +# include > +#include > +# include /* printf() */ > +# include /* CHAR_BIT */ > +#if 0 > +# include /* format spec PRIX64: ll/l + X on = 32/64-bit arch */ > +#endif >=20 > /* Work around redefinition to rpl_putenv by other config tests. */ > #undef putenv > @@ -16,6 +23,78 @@ > }; > #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) >=20 > +/* Count the bits set in any unsigned integer type. > + * Returns the precision (width - padding bits - sign bit) iff given > + * the xxx_MAX value of any integer type, signed or unsigned. > + * =46rom SEI CERT C Coding Standard: > + * Rules for Developing Safe, Reliable, and Secure Systems (2016) > + */ > +size_t > +popcount (num) > +uintmax_t num; > +{ > + size_t cnt =3D 0; > + =20 > + while (num !=3D 0) > + { > + if (num % 2 =3D=3D 1) > + cnt++; > + num >>=3D 1; > + } > + return cnt; > +} > +#define PRECISION(max_value) popcount(max_value) > + > +/* Guess the maximum value of a time_t from it's storage width. > + * ASSERT time_t is not a floating point, or of any arcane width, or=20= > unsigned. > + * Only 4...8 byte width of a time_t are tested. > + * On error: returns (time_t)(-1) > + */ > +time_t > +guess_time_t_max () > +{ > + time_t t0, t1 =3D (time_t)(-1); > + size_t size, prec; > + > + switch ((size =3D sizeof(time_t))) > + { > + case 4: > + prec =3D PRECISION((time_t) 0xFFFFFFFF); > + break; > + case 5: > + prec =3D PRECISION((time_t) 0xFFFFFFFFFF); > + break; > + case 6: > + prec =3D PRECISION((time_t) 0xFFFFFFFFFFFF); > + break; > + case 7: > + prec =3D PRECISION((time_t) 0xFFFFFFFFFFFFFF); > + break; > + case 8: > + prec =3D PRECISION((time_t) 0xFFFFFFFFFFFFFFFF); > + break; > + default: > + prec =3D 1; > + break; > + } > + prec--; /* assumption: time_t is signed */ > + if (prec) > + { > + t0 =3D (time_t) 1 << (prec - 1); > + t1 =3D t0|(t0 - 1); > + } > + > + /* FIXME not portable: time_t can be floating point type, > + * or another integer type other than long or long long. > + * > + fprintf (stderr, "time_t_max\t=3D 0x%"PRIX64"\n", t1);*/ > + fprintf (stderr, "sizeof(time_t)\t=3D %2zd byte\n", size); > + fprintf (stderr, "precision\t=3D %2zd bit\n", prec); > + fprintf (stderr, "padding\t\t=3D %2zd bit\n", size*CHAR_BIT - prec = - 1 /*=20 > sign */); > + > + return t1; > +} > + > /* Fail if mktime fails to convert a date in the spring-forward gap. > Based on a problem report from Andreas Jaeger. */ > static void > @@ -106,9 +185,7 @@ > time_t t, delta; > int i, j; >=20 > - for (time_t_max =3D 1; 0 < time_t_max; time_t_max *=3D 2) > - continue; > - time_t_max--; > + time_t_max =3D guess_time_t_max (); > delta =3D time_t_max / 997; /* a suitable prime number */ > for (i =3D 0; i < N_STRINGS; i++) > { > @@ -128,3 +205,4 @@ > spring_forward_gap (); > exit (0); > } > +/*! vi: set ai tabstop=3D8 shiftwidth=3D2: */ >=20 =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)