[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen: Don't use -nostdinc flags with CLANG



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@xxxxxxx>
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@xxxxxxx>

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__ */

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.