From: Julien Grall <julien.grall@linaro.org>
To: Tim Deegan <tim@xen.org>
Cc: xen-devel@lists.xenproject.org, keir@xen.org,
Ian.Jackson@eu.citrix.com, ian.campbell@citrix.com
Subject: Re: [PATCH] xen: Don't use -nostdinc flags with CLANG
Date: Tue, 11 Feb 2014 13:21:59 +0000 [thread overview]
Message-ID: <52FA23F7.1020209@linaro.org> (raw)
In-Reply-To: <20140211125928.GE97288@deinos.phlegethon.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 <angled> 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 <stdarg.h>.
>>>>
>>>> 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 <stdarg.h> 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 <tim@xen.org>
> Date: Tue Feb 11 12:44:09 2014 +0000
>
> xen: stop trying to use the system <stdarg.h> and <stdbool.h>
>
> 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 <tim@xen.org>
>
> 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 <stdarg.h>
> +# 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 <stdbool.h>
> -#endif
> +#define bool _Bool
> +#define true 1
> +#define false 0
> +#define __bool_true_false_are_defined 1
>
> #endif /* __XEN_STDBOOL_H__ */
>
--
Julien Grall
prev parent reply other threads:[~2014-02-11 13:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-10 23:29 [PATCH] xen: Don't use -nostdinc flags with CLANG Julien Grall
2014-02-11 8:37 ` Jan Beulich
2014-02-11 8:53 ` Tim Deegan
2014-02-11 12:30 ` Julien Grall
2014-02-11 12:35 ` Tim Deegan
2014-02-11 12:36 ` Julien Grall
2014-02-11 12:59 ` Tim Deegan
2014-02-11 13:20 ` Julien Grall
2014-02-11 13:59 ` Tim Deegan
2014-02-11 14:24 ` Julien Grall
2014-02-11 14:33 ` Tim Deegan
2014-02-11 15:01 ` Keir Fraser
2014-02-13 11:24 ` Tim Deegan
2014-02-13 11:46 ` George Dunlap
2014-02-13 11:49 ` George Dunlap
2014-02-13 15:19 ` [PATCH] xen: Don't use __builtin_stdarg_start() Tim Deegan
2014-02-13 15:22 ` George Dunlap
2014-02-13 15:32 ` Roger Pau Monné
2014-02-11 13:21 ` Julien Grall [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52FA23F7.1020209@linaro.org \
--to=julien.grall@linaro.org \
--cc=Ian.Jackson@eu.citrix.com \
--cc=ian.campbell@citrix.com \
--cc=keir@xen.org \
--cc=tim@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.