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

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

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

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

     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), 
-#  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)))
-#  include <stdarg.h>
+#  define __GNUC_PREREQ__(x, y)   0

+#if !__GNUC_PREREQ__(4, 5)
+#  define __builtin_va_start(ap, last)    __builtin_stdarg_start((ap), (last))
+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
-#  include <stdbool.h>
+#define bool _Bool
+#define true 1
+#define false 0
+#define __bool_true_false_are_defined   1

  #endif /* __XEN_STDBOOL_H__ */

Julien Grall

Xen-devel mailing list



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