fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / linux / compiler.h
index 22d8370..aca6698 100644 (file)
@@ -1,33 +1,50 @@
 #ifndef __LINUX_COMPILER_H
 #define __LINUX_COMPILER_H
 
+#ifndef __ASSEMBLY__
+
 #ifdef __CHECKER__
 # define __user                __attribute__((noderef, address_space(1)))
 # define __kernel      /* default address space */
 # define __safe                __attribute__((safe))
 # define __force       __attribute__((force))
+# define __nocast      __attribute__((nocast))
+# define __iomem       __attribute__((noderef, address_space(2)))
+# define __acquires(x) __attribute__((context(x,0,1)))
+# define __releases(x) __attribute__((context(x,1,0)))
+# define __acquire(x)  __context__(x,1)
+# define __release(x)  __context__(x,-1)
+# define __cond_lock(x,c)      ((c) ? ({ __acquire(x); 1; }) : 0)
 extern void __chk_user_ptr(void __user *);
+extern void __chk_io_ptr(void __iomem *);
 #else
 # define __user
 # define __kernel
 # define __safe
 # define __force
+# define __nocast
+# define __iomem
 # define __chk_user_ptr(x) (void)0
+# define __chk_io_ptr(x) (void)0
+# define __builtin_warning(x, y...) (1)
+# define __acquires(x)
+# define __releases(x)
+# define __acquire(x) (void)0
+# define __release(x) (void)0
+# define __cond_lock(x,c) (c)
 #endif
 
 #ifdef __KERNEL__
 
-#ifndef __ASSEMBLY__
-#if __GNUC__ > 3
-# include <linux/compiler-gcc+.h>      /* catch-all for GCC 4, 5, etc. */
-#elif __GNUC__ == 3
+#if __GNUC__ > 4
+#error no compiler-gcc.h file for this gcc version
+#elif __GNUC__ == 4
+# include <linux/compiler-gcc4.h>
+#elif __GNUC__ == 3 && __GNUC_MINOR__ >= 2
 # include <linux/compiler-gcc3.h>
-#elif __GNUC__ == 2
-# include <linux/compiler-gcc2.h>
 #else
 # error Sorry, your compiler is too old/not recognized.
 #endif
-#endif
 
 /* Intel compiler defines __GNUC__. So we will overwrite implementations
  * coming from above header files here
@@ -59,6 +76,9 @@ extern void __chk_user_ptr(void __user *);
 
 #endif /* __KERNEL__ */
 
+#endif /* __ASSEMBLY__ */
+
+#ifdef __KERNEL__
 /*
  * Allow us to mark functions as 'deprecated' and have gcc emit a nice
  * warning for each use, in hopes of speeding the functions removal.
@@ -69,10 +89,21 @@ extern void __chk_user_ptr(void __user *);
 # define __deprecated          /* unimplemented */
 #endif
 
+#ifdef MODULE
+#define __deprecated_for_modules __deprecated
+#else
+#define __deprecated_for_modules
+#endif
+
 #ifndef __must_check
 #define __must_check
 #endif
 
+#ifndef CONFIG_ENABLE_MUST_CHECK
+#undef __must_check
+#define __must_check
+#endif
+
 /*
  * Allow us to avoid 'defined but not used' warnings on functions and data,
  * as well as force them to be emitted to the assembly file.
@@ -102,6 +133,16 @@ extern void __chk_user_ptr(void __user *);
 # define __attribute_pure__    /* unimplemented */
 #endif
 
+#ifndef noinline
+#define noinline
+#endif
+
+#ifndef __always_inline
+#define __always_inline inline
+#endif
+
+#endif /* __KERNEL__ */
+
 /*
  * From the GCC manual:
  *
@@ -120,8 +161,4 @@ extern void __chk_user_ptr(void __user *);
 # define __attribute_const__   /* unimplemented */
 #endif
 
-#ifndef noinline
-#define noinline
-#endif
-
 #endif /* __LINUX_COMPILER_H */