From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12181 Path: news.gmane.org!.POSTED!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: Building musl-cross-make with gnat in musl environement Date: Thu, 30 Nov 2017 12:06:05 -0500 Message-ID: <20171130170605.GK1627@brightrain.aerifal.cx> References: <69c03d16-1946-d4e3-f909-2bd2196afe97@in2p3.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1512061588 20461 195.159.176.226 (30 Nov 2017 17:06:28 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 30 Nov 2017 17:06:28 +0000 (UTC) User-Agent: Mutt/1.5.21 (2010-09-15) To: musl@lists.openwall.com Original-X-From: musl-return-12197-gllmg-musl=m.gmane.org@lists.openwall.com Thu Nov 30 18:06:14 2017 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1eKSHs-0004UQ-Gp for gllmg-musl@m.gmane.org; Thu, 30 Nov 2017 18:06:12 +0100 Original-Received: (qmail 20394 invoked by uid 550); 30 Nov 2017 17:06:18 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 20373 invoked from network); 30 Nov 2017 17:06:17 -0000 Content-Disposition: inline In-Reply-To: Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:12181 Archived-At: On Thu, Nov 30, 2017 at 05:30:35PM +0100, Didier Kryn wrote: > Le 02/11/2017 à 10:44, Didier Kryn a écrit : > >    I report the successfull build of the cross-compiler > >x86_64-musl-gcc-6.3.0 - understanding Ada - on x86_64 Debian > >Wheezy. > > > >    The toolchain for build was gcc-6.3.0 for Linux-Gnu provided > >by Adacore.The build toolchain to build major version 6 must be at > >least major version 5. > > > >    Of course, the language option must be > >'--enable-languages=ada,c,c++' . > > > >    Three patches were necessary: > >       gnat63-terminals.diff: removes a #include in a C > >source file. > >       gnat63-prj-attr.diff: corrects the layout of a record in an > >Ada source file to prevent a warning concerning performance. > >       gnat63-xr_tabls.diff: same as the previous. > >   In a glibc environment, x86_64-musl-gcc-6.3.0 builds without error > with the three patches I have previously reported. To check there is > no leak of the glibc native toolchain into the cross-compiler, I > tried the build in a musl chroot (without any glibc headers or > library), still with '--enable-languages=ada,c,c++'. > >     In a first attempt, the compilation fails with the following error: > > ---------------------------------------- > In file included from ../../src_toolchain/gcc/ada/adaint.h:290:0, >                  from ../../src_toolchain/gcc/ada/adadecode.c:45: > /usr/pkg/gcc-6.3/lib/gcc/x86_64-pc-linux-musl/6.3.0/../../../../x86_64-pc-linux-musl/include/sched.h:76:7: > error: attempt to use poisoned "calloc" >  void *calloc(size_t, size_t); >        ^ > /usr/pkg/gcc-6.3/lib/gcc/x86_64-pc-linux-musl/6.3.0/../../../../x86_64-pc-linux-musl/include/sched.h:116:36: > error: attempt to use poisoned "calloc" >  #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n))) > ---------------------------------------- > >     The Ada language has "tasking" primitives, which are nowadays > based on POSIX threads. For this, adaint.h and other files include > which, unfortunately, contains a declaration of calloc() > and references to it. This is unfortunate because calloc() is > poisoned  by gcc, to avoid interferences with its own allocation > functions, and Gnat does only need a small part of sched.h. > >     There must be a necessity, specific to musl, to make use of > calloc() in sched.h, because glibc doesn't do so. > >     A workaround, provided by the patch gnat63-adaint.diff, is to > replace #include with the few lines of this file actually > needed in adaint.h. The patch contains also #define _SCHED_H, which > is necessary to prevent the inclusion of sched.h by other files, > directly or indirectly. > >     With this additional patch,  x86_64-musl-gcc-6.3.0 builds > without error both in a glibc environement and in a musl > environment. > >     Didier > > --- gcc-6.3.0-A/gcc/ada/adaint.c > +++ gcc-6.3.0-B/gcc/ada/adaint.c > @@ -3086,7 +3086,7 @@ > #endif > > #if defined (__linux__) > -#include > +/* do not #include */ > > /* glibc versions earlier than 2.7 do not define the routines to handle > dynamically allocated CPU sets. For these targets, we use the static > --- gcc-6.3.0-A/gcc/ada/adaint.h > +++ gcc-6.3.0-B/gcc/ada/adaint.h > @@ -287,7 +287,17 @@ > > /* Routines for interface to required CPU set primitives */ > > -#include > +/* Do not #include , but copy part of it and prevent its inclusion */ > +# ifndef _SCHED_H > +# define _SCHED_H > +typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)]; } cpu_set_t; > +# define CPU_ZERO_S(size,set) memset(set,0,size) > +# define CPU_ZERO(set) CPU_ZERO_S(sizeof(cpu_set_t),set) > +# define __CPU_op_S(i, size, set, op) ( (i)/8U >= (size) ? 0 : \ > + (((unsigned long *)(set))[(i)/8/sizeof(long)] op (1UL<<((i)%(8*sizeof(long))))) ) > +# define CPU_SET_S(i, size, set) __CPU_op_S(i, size, set, |=) > +# define CPU_SET(i, set) CPU_SET_S(i,sizeof(cpu_set_t),set) > +# endif > > extern cpu_set_t *__gnat_cpu_alloc (size_t); > extern size_t __gnat_cpu_alloc_size (size_t); Just patch out the poisoning instead. It's only meaningful to GCC developers and should _not_ be used in deployment for reasons exactly like what you discovered here, pretty much the same reasons -Werror should not be enabled in deployment. Rich