From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id 727743858D28; Wed, 30 Aug 2023 12:17:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 727743858D28 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1693397844; bh=mxap87CZRm3eGrrakTbhyaVbs3EaJS+vejp10Bv9bqg=; h=Date:From:To:Subject:Reply-To:References:In-Reply-To:From; b=OcsMV+eNQRt+T8e1qMkz8niHwTmfG2+zKGqL6qsp7VXiWhBBIWts78+FktsE1e19Q pcqKQWHbapvOTdc3GNHMuTiASEusVxvVQBp1DICtZGDSC9VtTI2qDrd5FigGVz7/zn GIwVvMCrH/aSFSvWbN4W5LuD41BLcPxbO9O1khzY= Received: by calimero.vinschen.de (Postfix, from userid 500) id 537CDA80CB0; Wed, 30 Aug 2023 14:17:22 +0200 (CEST) Date: Wed, 30 Aug 2023 14:17:22 +0200 From: Corinna Vinschen To: cygwin-apps@cygwin.com Subject: Re: can't compile coreutils-9.3 any more after upgrade to cygwin-3.4.8 Message-ID: Reply-To: cygwin-apps@cygwin.com Mail-Followup-To: cygwin-apps@cygwin.com References: <83C27059-CB24-48F5-AC91-AB0622DF82CD@Denis-Excoffier.org> <603386c9-d4a0-82cd-a8e4-02f298f9047b@maxrnd.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="w5Hh8n66vG2ycjDc" Content-Disposition: inline In-Reply-To: List-Id: --w5Hh8n66vG2ycjDc Content-Type: text/plain; charset=utf-8 Content-Disposition: inline On Aug 30 11:57, Corinna Vinschen via Cygwin-apps wrote: > On Aug 30 11:34, Corinna Vinschen via Cygwin-apps wrote: > > #define CPU_ZERO_S(siz, set) __cpuset_zero_s (siz, set) > > -static __inline void > > -__cpuset_zero_s (size_t siz, cpu_set_t *set) > > -{ > > - (void) memset (set, 0, siz); > > -} > > +void __cpuset_zero_s (size_t, cpu_set_t *); > > [...] > > +__cpuset_zero_s (size_t siz, cpu_set_t *set) > > +{ > > + (void) memset (set, 0, siz); > > +} > > + > > } /* extern C */ > > Also, we can avoid an external __cpuset_zero_s function by just using a > loop, kind of like this: I attached a matching patch. Please give it a try. Thanks, Corinna --w5Hh8n66vG2ycjDc Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="0001-Cygwin-sys-cpuset.h-add-cpuset-specific-external-fun.patch" >From a8b26a78ae600f471f54769c28b6d3542aabab06 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 30 Aug 2023 11:32:02 +0200 Subject: [PATCH] Cygwin: sys/cpuset.h: add cpuset-specific external functions The latest incarnation of sys/cpuset.h broke building coreutils. The reason is the inclusion of stdlib.h and string.h and hence premature requests for datatypes not yet defined in the include chain. Avoid this by defining __cpuset_alloc and __cpuset_free as external functions, now defined in sched.cc. Linux is doing this too, just using different names for the functions. Redefine __cpuset_zero_s to use __builtin_memset only on compilers supporting it, otherwise using a simple loop. Drop the stdlib.h and string.h includes. Fixes: 3f2790e04439 ("Cygwin: Make gcc-specific code in compiler-agnostic") Signed-off-by: Corinna Vinschen --- winsup/cygwin/cygwin.din | 2 ++ winsup/cygwin/include/sys/cpuset.h | 25 +++++++++++-------------- winsup/cygwin/sched.cc | 12 ++++++++++++ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din index ee646fddc862..3afadb7f3a77 100644 --- a/winsup/cygwin/cygwin.din +++ b/winsup/cygwin/cygwin.din @@ -49,6 +49,8 @@ __b64_ntop NOSIGFE __b64_pton NOSIGFE __bsd_qsort_r NOSIGFE __chk_fail SIGFE +__cpuset_alloc SIGFE +__cpuset_free SIGFE __cxa_atexit = cygwin__cxa_atexit SIGFE __cxa_finalize SIGFE __dn_comp SIGFE diff --git a/winsup/cygwin/include/sys/cpuset.h b/winsup/cygwin/include/sys/cpuset.h index 95c777cfbc6d..2ab2b95f0d65 100644 --- a/winsup/cygwin/include/sys/cpuset.h +++ b/winsup/cygwin/include/sys/cpuset.h @@ -9,8 +9,7 @@ details. */ #ifndef _SYS_CPUSET_H_ #define _SYS_CPUSET_H_ -#include -#include +#include #ifdef __cplusplus extern "C" { @@ -42,25 +41,23 @@ __cpuset_alloc_size (int num) } #define CPU_ALLOC(num) __cpuset_alloc (num) -static __inline cpu_set_t * -__cpuset_alloc (int num) -{ - return (cpu_set_t *) malloc (CPU_ALLOC_SIZE(num)); -} +extern cpu_set_t * __cpuset_alloc (int); #define CPU_FREE(set) __cpuset_free (set) -static __inline void -__cpuset_free (cpu_set_t *set) -{ - free (set); -} +void __cpuset_free (cpu_set_t *); /* These _S macros operate on dynamically-sized cpu sets of size 'siz' bytes */ #define CPU_ZERO_S(siz, set) __cpuset_zero_s (siz, set) -static __inline void +static __inline __cpuset_zero_s (size_t siz, cpu_set_t *set) { - (void) memset (set, 0, siz); +#if __GNUC_PREREQ (2, 91) + __builtin_memset (set, 0, siz); +#else + siz /= sizeof (__cpu_mask); + while (siz > 0) + set->_bits[--siz] = 0; +#endif } #define CPU_SET_S(cpu, siz, set) __cpuset_set_s (cpu, siz, set) diff --git a/winsup/cygwin/sched.cc b/winsup/cygwin/sched.cc index d7bad852765c..845fcef5702c 100644 --- a/winsup/cygwin/sched.cc +++ b/winsup/cygwin/sched.cc @@ -684,4 +684,16 @@ done: return 0; } +cpu_set_t * +__cpuset_alloc (int num) +{ + return (cpu_set_t *) malloc (CPU_ALLOC_SIZE(num)); +} + +void +__cpuset_free (cpu_set_t *set) +{ + free (set); +} + } /* extern C */ -- 2.41.0 --w5Hh8n66vG2ycjDc--