diff options
-rw-r--r-- | include/linux/compiler-gcc.h | 5 | ||||
-rw-r--r-- | include/linux/compiler-gcc3.h | 3 | ||||
-rw-r--r-- | include/linux/compiler-gcc4.h | 8 | ||||
-rw-r--r-- | include/linux/compiler.h | 8 | ||||
-rw-r--r-- | init/main.c | 9 |
5 files changed, 12 insertions, 21 deletions
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 5c8351b859f0..af40f8eb86f0 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -61,3 +61,8 @@ | |||
61 | #define noinline __attribute__((noinline)) | 61 | #define noinline __attribute__((noinline)) |
62 | #define __attribute_const__ __attribute__((__const__)) | 62 | #define __attribute_const__ __attribute__((__const__)) |
63 | #define __maybe_unused __attribute__((unused)) | 63 | #define __maybe_unused __attribute__((unused)) |
64 | |||
65 | #define __gcc_header(x) #x | ||
66 | #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) | ||
67 | #define gcc_header(x) _gcc_header(x) | ||
68 | #include gcc_header(__GNUC__) | ||
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h index e5eb795f78a1..2befe6513ce4 100644 --- a/include/linux/compiler-gcc3.h +++ b/include/linux/compiler-gcc3.h | |||
@@ -2,9 +2,6 @@ | |||
2 | #error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead." | 2 | #error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead." |
3 | #endif | 3 | #endif |
4 | 4 | ||
5 | /* These definitions are for GCC v3.x. */ | ||
6 | #include <linux/compiler-gcc.h> | ||
7 | |||
8 | #if __GNUC_MINOR__ >= 3 | 5 | #if __GNUC_MINOR__ >= 3 |
9 | # define __used __attribute__((__used__)) | 6 | # define __used __attribute__((__used__)) |
10 | #else | 7 | #else |
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index 974f5b7bb205..09992718f9e8 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
@@ -2,8 +2,10 @@ | |||
2 | #error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead." | 2 | #error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead." |
3 | #endif | 3 | #endif |
4 | 4 | ||
5 | /* These definitions are for GCC v4.x. */ | 5 | /* GCC 4.1.[01] miscompiles __weak */ |
6 | #include <linux/compiler-gcc.h> | 6 | #if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1 |
7 | # error Your version of gcc miscompiles the __weak directive | ||
8 | #endif | ||
7 | 9 | ||
8 | #define __used __attribute__((__used__)) | 10 | #define __used __attribute__((__used__)) |
9 | #define __must_check __attribute__((warn_unused_result)) | 11 | #define __must_check __attribute__((warn_unused_result)) |
@@ -16,7 +18,7 @@ | |||
16 | */ | 18 | */ |
17 | #define uninitialized_var(x) x = x | 19 | #define uninitialized_var(x) x = x |
18 | 20 | ||
19 | #if !(__GNUC__ == 4 && __GNUC_MINOR__ < 3) | 21 | #if __GNUC_MINOR__ >= 3 |
20 | /* Mark functions as cold. gcc will assume any path leading to a call | 22 | /* Mark functions as cold. gcc will assume any path leading to a call |
21 | to them will be unlikely. This means a lot of manual unlikely()s | 23 | to them will be unlikely. This means a lot of manual unlikely()s |
22 | are unnecessary now for any paths leading to the usual suspects | 24 | are unnecessary now for any paths leading to the usual suspects |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index ea7c6be354b7..d95da1020f1c 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -36,12 +36,8 @@ extern void __chk_io_ptr(const volatile void __iomem *); | |||
36 | 36 | ||
37 | #ifdef __KERNEL__ | 37 | #ifdef __KERNEL__ |
38 | 38 | ||
39 | #if __GNUC__ >= 4 | 39 | #ifdef __GNUC__ |
40 | # include <linux/compiler-gcc4.h> | 40 | #include <linux/compiler-gcc.h> |
41 | #elif __GNUC__ == 3 && __GNUC_MINOR__ >= 2 | ||
42 | # include <linux/compiler-gcc3.h> | ||
43 | #else | ||
44 | # error Sorry, your compiler is too old/not recognized. | ||
45 | #endif | 41 | #endif |
46 | 42 | ||
47 | #define notrace __attribute__((no_instrument_function)) | 43 | #define notrace __attribute__((no_instrument_function)) |
diff --git a/init/main.c b/init/main.c index f5e64f20d2b0..ad8f9f53f8d1 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -75,15 +75,6 @@ | |||
75 | #include <asm/smp.h> | 75 | #include <asm/smp.h> |
76 | #endif | 76 | #endif |
77 | 77 | ||
78 | /* | ||
79 | * This is one of the first .c files built. Error out early if we have compiler | ||
80 | * trouble. | ||
81 | */ | ||
82 | |||
83 | #if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 0 | ||
84 | #warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended. | ||
85 | #endif | ||
86 | |||
87 | static int kernel_init(void *); | 78 | static int kernel_init(void *); |
88 | 79 | ||
89 | extern void init_IRQ(void); | 80 | extern void init_IRQ(void); |