From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH] xen: Don't use -nostdinc flags with CLANG Date: Tue, 11 Feb 2014 13:21:59 +0000 Message-ID: <52FA23F7.1020209@linaro.org> References: <1392074974-1488-1-git-send-email-julien.grall@linaro.org> <20140211085317.GB92054@deinos.phlegethon.org> <52FA17E3.9070105@linaro.org> <20140211123515.GD97288@deinos.phlegethon.org> <52FA1945.8010400@linaro.org> <20140211125928.GE97288@deinos.phlegethon.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WDDHn-0007Hv-6D for xen-devel@lists.xenproject.org; Tue, 11 Feb 2014 13:22:03 +0000 Received: by mail-we0-f182.google.com with SMTP id u57so5617281wes.13 for ; Tue, 11 Feb 2014 05:22:01 -0800 (PST) In-Reply-To: <20140211125928.GE97288@deinos.phlegethon.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Tim Deegan Cc: xen-devel@lists.xenproject.org, keir@xen.org, Ian.Jackson@eu.citrix.com, ian.campbell@citrix.com List-Id: xen-devel@lists.xenproject.org On 11/02/14 12:59, Tim Deegan wrote: > At 12:36 +0000 on 11 Feb (1392118581), Julien Grall wrote: >> >> >> On 11/02/14 12:35, Tim Deegan wrote: >>> At 12:30 +0000 on 11 Feb (1392118227), Julien Grall wrote: >>>> >>>> >>>> On 11/02/14 08:53, Tim Deegan wrote: >>>>> At 23:29 +0000 on 10 Feb (1392071374), Julien Grall wrote: >>>>>> Commit 06a9c7e "xen: move -nostdinc into common Rules.mk." breaks >>>>>> compilation with clang: >>>>>> >>>>>> In file included from sched_sedf.c:8: >>>>>> In file included from /home/julieng/works/xen/xen/include/xen/lib.h:5: >>>>>> /home/julieng/works/xen/xen/include/xen/stdarg.h:20:12: error: 'stdarg.h' file >>>>>> not found with include; use "quotes" instead >>>>>> ^~~~~~~~~~ >>>>>> "stdarg.h" >>>>> >>>>> Looks like on your system stdarg.h doesn't live in a compiler-specific >>>>> path, like we have for the BSDs. I think we should just go to using >>>>> our own definitions for stdarg/stdbool everywhere; trying to chase the >>>>> compiler-specific versions around is a PITA, and the pieces we >>>>> actually need are trivial. >>>> >>>> For BSDs, we are using our own stdargs/stdbool. So we don't include the >>>> system . >>>> >>>> Linux is using $(CC) -print-file-name=include to get the right path. It >>>> works with both gcc and clang on Linux distos, but not on FreeBSD. >>> >>> Wait - is the error message you posted from clang on FreeBSD? >>> That's surprising; on FreeBSD xen/stdarg.h shouldn't be trying to >>> include at all. Is __FreeBSD__ not being defined? >> >> >> No it's from Linux (Debian Wheezy and Fedora). I just gave a try to the >> "-print-file-name" solution on FreeBSD. > > Oh, OK. Yeah, we knew that didn't work there, because on *BSD the > compiler-specific headers like stdarg.h actually live in /usr/include > and can themselves include other system headers. That's why we have > our own implementation of the bits we need, that we use on BSD. > > Are you using a very old version of clang? As 06a9c7e points out, > our current runes didn't work before clang v3.0. > > If not, rather than chasing this around any further, I think we should > abandon trying to use the compiler-provided headers even on linux. > Does this patch fix your build issue? > > commit e7003f174e0df9192dde6fa8d33b0a20f99ce053 > Author: Tim Deegan > Date: Tue Feb 11 12:44:09 2014 +0000 > > xen: stop trying to use the system and > > We already have our own versions of the stdarg/stdbool definitions, for > systems where those headers are installed in /usr/include. > > On linux, they're typically installed in compiler-specific paths, but > finding them has proved unreliable. Drop that and use our own versions > everywhere. > > Signed-off-by: Tim Deegan > > diff --git a/xen/include/xen/stdarg.h b/xen/include/xen/stdarg.h > index d1b2540..0283f06 100644 > --- a/xen/include/xen/stdarg.h > +++ b/xen/include/xen/stdarg.h > @@ -1,23 +1,21 @@ > #ifndef __XEN_STDARG_H__ > #define __XEN_STDARG_H__ > > -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) > - typedef __builtin_va_list va_list; > -# ifdef __GNUC__ > -# define __GNUC_PREREQ__(x, y) \ > - ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ > - (__GNUC__ > (x))) > -# else > -# define __GNUC_PREREQ__(x, y) 0 > -# endif > -# if !__GNUC_PREREQ__(4, 5) > -# define __builtin_va_start(ap, last) __builtin_stdarg_start((ap), (last)) > -# endif > -# define va_start(ap, last) __builtin_va_start((ap), (last)) > -# define va_end(ap) __builtin_va_end(ap) > -# define va_arg __builtin_va_arg > +#ifdef __GNUC__ > +# define __GNUC_PREREQ__(x, y) \ > + ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ > + (__GNUC__ > (x))) > #else > -# include > +# define __GNUC_PREREQ__(x, y) 0 > #endif > > +#if !__GNUC_PREREQ__(4, 5) > +# define __builtin_va_start(ap, last) __builtin_stdarg_start((ap), (last)) > +#endif > + > +typedef __builtin_va_list va_list; > +#define va_start(ap, last) __builtin_va_start((ap), (last)) > +#define va_end(ap) __builtin_va_end(ap) > +#define va_arg __builtin_va_arg > + > #endif /* __XEN_STDARG_H__ */ > diff --git a/xen/include/xen/stdbool.h b/xen/include/xen/stdbool.h > index f0faedf..b0947a6 100644 > --- a/xen/include/xen/stdbool.h > +++ b/xen/include/xen/stdbool.h > @@ -1,13 +1,9 @@ > #ifndef __XEN_STDBOOL_H__ > #define __XEN_STDBOOL_H__ > > -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) > -# define bool _Bool > -# define true 1 > -# define false 0 > -# define __bool_true_false_are_defined 1 > -#else > -# include > -#endif > +#define bool _Bool > +#define true 1 > +#define false 0 > +#define __bool_true_false_are_defined 1 > > #endif /* __XEN_STDBOOL_H__ */ > -- Julien Grall