From: Adrian Bunk Some documentation updates and removes some code paths for gcc < 3.2. Signed-off-by: Adrian Bunk Signed-off-by: Andrew Morton --- Documentation/Changes | 30 +++++------------------------- README | 7 ++----- arch/arm/kernel/asm-offsets.c | 2 +- arch/i386/Kconfig | 4 ---- arch/i386/Makefile | 5 +---- arch/i386/Makefile.cpu | 10 +++++----- arch/ia64/Makefile | 4 ---- drivers/media/video/v4l2-common.c | 2 -- fs/ocfs2/cluster/masklog.h | 7 +++---- include/asm-alpha/compiler.h | 2 -- include/asm-alpha/processor.h | 21 --------------------- include/asm-ia64/bug.h | 6 +----- include/asm-ia64/spinlock.h | 2 +- include/asm-sparc64/system.h | 4 ---- include/linux/byteorder/generic.h | 2 +- include/linux/byteorder/swab.h | 2 +- include/linux/byteorder/swabb.h | 2 +- include/linux/compiler-gcc.h | 9 +++++++++ include/linux/compiler-gcc3.h | 17 ----------------- include/linux/compiler-gcc4.h | 7 ------- include/linux/kernel.h | 2 -- sound/isa/wavefront/wavefront_synth.c | 7 ------- 22 files changed, 31 insertions(+), 123 deletions(-) diff -puN arch/arm/kernel/asm-offsets.c~more-updates-for-the-gcc-=-32-requirement arch/arm/kernel/asm-offsets.c --- 25/arch/arm/kernel/asm-offsets.c~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/arch/arm/kernel/asm-offsets.c Thu Dec 15 14:01:57 2005 @@ -29,7 +29,7 @@ * (http://gcc.gnu.org/PR8896) and incorrect structure * initialisation in fs/jffs2/erase.c */ -#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) +#if (__GNUC__ == 3 && __GNUC_MINOR__ < 3) #error Your compiler is too buggy; it is known to miscompile kernels. #error Known good compilers: 3.3 #endif diff -puN arch/i386/Kconfig~more-updates-for-the-gcc-=-32-requirement arch/i386/Kconfig --- 25/arch/i386/Kconfig~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/arch/i386/Kconfig Thu Dec 15 14:01:57 2005 @@ -634,10 +634,6 @@ config REGPARM and passes the first three arguments of a function call in registers. This will probably break binary only modules. - This feature is only enabled for gcc-3.0 and later - earlier compilers - generate incorrect output with certain kernel constructs when - -mregparm=3 is used. - config SECCOMP bool "Enable seccomp to safely compute untrusted bytecode" depends on PROC_FS diff -puN arch/i386/Makefile~more-updates-for-the-gcc-=-32-requirement arch/i386/Makefile --- 25/arch/i386/Makefile~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/arch/i386/Makefile Thu Dec 15 14:01:57 2005 @@ -37,10 +37,7 @@ CFLAGS += $(call cc-option,-mpreferred-s # CPU-specific tuning. Anything which can be shared with UML should go here. include $(srctree)/arch/i386/Makefile.cpu -# -mregparm=3 works ok on gcc-3.0 and later -# -GCC_VERSION := $(call cc-version) -cflags-$(CONFIG_REGPARM) += $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;) +cflags-$(CONFIG_REGPARM) += -mregparm=3 # Disable unit-at-a-time mode, it makes gcc use a lot more stack # due to the lack of sharing of stacklots. diff -puN arch/i386/Makefile.cpu~more-updates-for-the-gcc-=-32-requirement arch/i386/Makefile.cpu --- 25/arch/i386/Makefile.cpu~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/arch/i386/Makefile.cpu Thu Dec 15 14:01:57 2005 @@ -1,7 +1,7 @@ # CPU tuning section - shared with UML. # Must change only cflags-y (or [yn]), not CFLAGS! That makes a difference for UML. -#-mtune exists since gcc 3.4, and some -mcpu flavors didn't exist in gcc 2.95. +#-mtune exists since gcc 3.4 HAS_MTUNE := $(call cc-option-yn, -mtune=i386) ifeq ($(HAS_MTUNE),y) tune = $(call cc-option,-mtune=$(1),) @@ -14,7 +14,7 @@ cflags-$(CONFIG_M386) += -march=i386 cflags-$(CONFIG_M486) += -march=i486 cflags-$(CONFIG_M586) += -march=i586 cflags-$(CONFIG_M586TSC) += -march=i586 -cflags-$(CONFIG_M586MMX) += $(call cc-option,-march=pentium-mmx,-march=i586) +cflags-$(CONFIG_M586MMX) += -march=pentium-mmx cflags-$(CONFIG_M686) += -march=i686 cflags-$(CONFIG_MPENTIUMII) += -march=i686 $(call tune,pentium2) cflags-$(CONFIG_MPENTIUMIII) += -march=i686 $(call tune,pentium3) @@ -23,8 +23,8 @@ cflags-$(CONFIG_MPENTIUM4) += -march=i68 cflags-$(CONFIG_MK6) += -march=k6 # Please note, that patches that add -march=athlon-xp and friends are pointless. # They make zero difference whatsosever to performance at this time. -cflags-$(CONFIG_MK7) += $(call cc-option,-march=athlon,-march=i686 $(align)-functions=4) -cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,$(call cc-option,-march=athlon,-march=i686 $(align)-functions=4)) +cflags-$(CONFIG_MK7) += -march=athlon +cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,-march=athlon) cflags-$(CONFIG_MCRUSOE) += -march=i686 $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0 cflags-$(CONFIG_MEFFICEON) += -march=i686 $(call tune,pentium3) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0 cflags-$(CONFIG_MWINCHIPC6) += $(call cc-option,-march=winchip-c6,-march=i586) @@ -37,5 +37,5 @@ cflags-$(CONFIG_MVIAC3_2) += $(call cc-o cflags-$(CONFIG_X86_ELAN) += -march=i486 # Geode GX1 support -cflags-$(CONFIG_MGEODEGX1) += $(call cc-option,-march=pentium-mmx,-march=i486) +cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx diff -puN arch/ia64/Makefile~more-updates-for-the-gcc-=-32-requirement arch/ia64/Makefile --- 25/arch/ia64/Makefile~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/arch/ia64/Makefile Thu Dec 15 14:01:57 2005 @@ -37,10 +37,6 @@ $(error Sorry, you need a newer version ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz) endif -ifneq ($(shell if [ $(GCC_VERSION) -lt 0300 ] ; then echo "bad"; fi ;),) -$(error Sorry, your compiler is too old. GCC v2.96 is known to generate bad code.) -endif - ifeq ($(GCC_VERSION),0304) cflags-$(CONFIG_ITANIUM) += -mtune=merced cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley diff -puN Documentation/Changes~more-updates-for-the-gcc-=-32-requirement Documentation/Changes --- 25/Documentation/Changes~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/Documentation/Changes Thu Dec 15 14:01:57 2005 @@ -31,8 +31,6 @@ al espaņol de este documento en varios f Eine deutsche Version dieser Datei finden Sie unter . -Last updated: October 29th, 2002 - Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). Current Minimal Requirements @@ -48,7 +46,7 @@ necessary on all systems; obviously, if hardware, for example, you probably needn't concern yourself with isdn4k-utils. -o Gnu C 2.95.3 # gcc --version +o Gnu C 3.2 # gcc --version o Gnu make 3.79.1 # make --version o binutils 2.12 # ld -v o util-linux 2.10o # fdformat --version @@ -74,26 +72,7 @@ GCC --- The gcc version requirements may vary depending on the type of CPU in your -computer. The next paragraph applies to users of x86 CPUs, but not -necessarily to users of other CPUs. Users of other CPUs should obtain -information about their gcc version requirements from another source. - -The recommended compiler for the kernel is gcc 2.95.x (x >= 3), and it -should be used when you need absolute stability. You may use gcc 3.0.x -instead if you wish, although it may cause problems. Later versions of gcc -have not received much testing for Linux kernel compilation, and there are -almost certainly bugs (mainly, but not exclusively, in the kernel) that -will need to be fixed in order to use these compilers. In any case, using -pgcc instead of plain gcc is just asking for trouble. - -The Red Hat gcc 2.96 compiler subtree can also be used to build this tree. -You should ensure you use gcc-2.96-74 or later. gcc-2.96-54 will not build -the kernel correctly. - -In addition, please pay attention to compiler optimization. Anything -greater than -O2 may not be wise. Similarly, if you choose to use gcc-2.95.x -or derivatives, be sure not to use -fstrict-aliasing (which, depending on -your version of gcc 2.95.x, may necessitate using -fno-strict-aliasing). +computer. Make ---- @@ -322,9 +301,9 @@ Getting updated software Kernel compilation ****************** -gcc 2.95.3 ----------- -o +gcc +--- +o Make ---- diff -puN drivers/media/video/v4l2-common.c~more-updates-for-the-gcc-=-32-requirement drivers/media/video/v4l2-common.c --- 25/drivers/media/video/v4l2-common.c~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/drivers/media/video/v4l2-common.c Thu Dec 15 14:01:57 2005 @@ -191,9 +191,7 @@ char *v4l2_type_names[] = { }; char *v4l2_ioctl_names[256] = { -#if __GNUC__ >= 3 [0 ... 255] = "UNKNOWN", -#endif [_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP", [_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED", [_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT", diff -puN fs/ocfs2/cluster/masklog.h~more-updates-for-the-gcc-=-32-requirement fs/ocfs2/cluster/masklog.h --- 25/fs/ocfs2/cluster/masklog.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/fs/ocfs2/cluster/masklog.h Thu Dec 15 14:01:57 2005 @@ -212,11 +212,10 @@ extern struct mlog_bits mlog_and_bits, m mlog(ML_ENTRY, "ENTRY:\n"); \ } while (0) -/* We disable this for old compilers since they don't have support for - * __builtin_types_compatible_p. +/* + * We disable this for sparse. */ -#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) && \ - !defined(__CHECKER__) +#if !defined(__CHECKER__) #define mlog_exit(st) do { \ if (__builtin_types_compatible_p(typeof(st), unsigned long)) \ mlog(ML_EXIT, "EXIT: %lu\n", (unsigned long) (st)); \ diff -puN include/asm-alpha/compiler.h~more-updates-for-the-gcc-=-32-requirement include/asm-alpha/compiler.h --- 25/include/asm-alpha/compiler.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/asm-alpha/compiler.h Thu Dec 15 14:01:57 2005 @@ -98,9 +98,7 @@ #undef inline #undef __inline__ #undef __inline -#if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 #undef __always_inline #define __always_inline inline __attribute__((always_inline)) -#endif #endif /* __ALPHA_COMPILER_H */ diff -puN include/asm-alpha/processor.h~more-updates-for-the-gcc-=-32-requirement include/asm-alpha/processor.h --- 25/include/asm-alpha/processor.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/asm-alpha/processor.h Thu Dec 15 14:01:57 2005 @@ -77,7 +77,6 @@ unsigned long get_wchan(struct task_stru #define spin_lock_prefetch(lock) do { } while (0) #endif -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) extern inline void prefetch(const void *ptr) { __builtin_prefetch(ptr, 0, 3); @@ -95,24 +94,4 @@ extern inline void spin_lock_prefetch(co } #endif -#else -extern inline void prefetch(const void *ptr) -{ - __asm__ ("ldl $31,%0" : : "m"(*(char *)ptr)); -} - -extern inline void prefetchw(const void *ptr) -{ - __asm__ ("ldq $31,%0" : : "m"(*(char *)ptr)); -} - -#ifdef CONFIG_SMP -extern inline void spin_lock_prefetch(const void *ptr) -{ - __asm__ ("ldq $31,%0" : : "m"(*(char *)ptr)); -} -#endif - -#endif /* GCC 3.1 */ - #endif /* __ASM_ALPHA_PROCESSOR_H */ diff -puN include/asm-ia64/bug.h~more-updates-for-the-gcc-=-32-requirement include/asm-ia64/bug.h --- 25/include/asm-ia64/bug.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/asm-ia64/bug.h Thu Dec 15 14:01:57 2005 @@ -2,11 +2,7 @@ #define _ASM_IA64_BUG_H #ifdef CONFIG_BUG -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -# define ia64_abort() __builtin_trap() -#else -# define ia64_abort() (*(volatile int *) 0 = 0) -#endif +#define ia64_abort() __builtin_trap() #define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0) /* should this BUG be made generic? */ diff -puN include/asm-ia64/spinlock.h~more-updates-for-the-gcc-=-32-requirement include/asm-ia64/spinlock.h --- 25/include/asm-ia64/spinlock.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/asm-ia64/spinlock.h Thu Dec 15 14:01:57 2005 @@ -34,7 +34,7 @@ __raw_spin_lock_flags (raw_spinlock_t *l { register volatile unsigned int *ptr asm ("r31") = &lock->lock; -#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) +#if (__GNUC__ == 3 && __GNUC_MINOR__ < 3) # ifdef CONFIG_ITANIUM /* don't use brl on Itanium... */ asm volatile ("{\n\t" diff -puN include/asm-sparc64/system.h~more-updates-for-the-gcc-=-32-requirement include/asm-sparc64/system.h --- 25/include/asm-sparc64/system.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/asm-sparc64/system.h Thu Dec 15 14:01:57 2005 @@ -193,11 +193,7 @@ do { \ * not preserve it's value. Hairy, but it lets us remove 2 loads * and 2 stores in this critical code path. -DaveM */ -#if __GNUC__ >= 3 #define EXTRA_CLOBBER ,"%l1" -#else -#define EXTRA_CLOBBER -#endif #define switch_to(prev, next, last) \ do { if (test_thread_flag(TIF_PERFCTR)) { \ unsigned long __tmp; \ diff -puN include/linux/byteorder/generic.h~more-updates-for-the-gcc-=-32-requirement include/linux/byteorder/generic.h --- 25/include/linux/byteorder/generic.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/byteorder/generic.h Thu Dec 15 14:01:57 2005 @@ -156,7 +156,7 @@ extern __be32 htonl(__u32); extern __u16 ntohs(__be16); extern __be16 htons(__u16); -#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) +#if defined(__GNUC__) && defined(__OPTIMIZE__) #define ___htonl(x) __cpu_to_be32(x) #define ___htons(x) __cpu_to_be16(x) diff -puN include/linux/byteorder/swabb.h~more-updates-for-the-gcc-=-32-requirement include/linux/byteorder/swabb.h --- 25/include/linux/byteorder/swabb.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/byteorder/swabb.h Thu Dec 15 14:01:57 2005 @@ -77,7 +77,7 @@ /* * Allow constant folding */ -#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) +#if defined(__GNUC__) && defined(__OPTIMIZE__) # define __swahw32(x) \ (__builtin_constant_p((__u32)(x)) ? \ ___swahw32((x)) : \ diff -puN include/linux/byteorder/swab.h~more-updates-for-the-gcc-=-32-requirement include/linux/byteorder/swab.h --- 25/include/linux/byteorder/swab.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/byteorder/swab.h Thu Dec 15 14:01:57 2005 @@ -110,7 +110,7 @@ /* * Allow constant folding */ -#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) +#if defined(__GNUC__) && defined(__OPTIMIZE__) # define __swab16(x) \ (__builtin_constant_p((__u16)(x)) ? \ ___swab16((x)) : \ diff -puN include/linux/compiler-gcc3.h~more-updates-for-the-gcc-=-32-requirement include/linux/compiler-gcc3.h --- 25/include/linux/compiler-gcc3.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/compiler-gcc3.h Thu Dec 15 14:01:57 2005 @@ -3,29 +3,12 @@ /* These definitions are for GCC v3.x. */ #include -#if __GNUC_MINOR__ >= 1 -# define inline inline __attribute__((always_inline)) -# define __inline__ __inline__ __attribute__((always_inline)) -# define __inline __inline __attribute__((always_inline)) -#endif - -#if __GNUC_MINOR__ > 0 -# define __deprecated __attribute__((deprecated)) -#endif - #if __GNUC_MINOR__ >= 3 # define __attribute_used__ __attribute__((__used__)) #else # define __attribute_used__ __attribute__((__unused__)) #endif -#define __attribute_pure__ __attribute__((pure)) -#define __attribute_const__ __attribute__((__const__)) - -#if __GNUC_MINOR__ >= 1 -#define noinline __attribute__((noinline)) -#endif - #if __GNUC_MINOR__ >= 4 #define __must_check __attribute__((warn_unused_result)) #endif diff -puN include/linux/compiler-gcc4.h~more-updates-for-the-gcc-=-32-requirement include/linux/compiler-gcc4.h --- 25/include/linux/compiler-gcc4.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/compiler-gcc4.h Thu Dec 15 14:01:57 2005 @@ -3,14 +3,7 @@ /* These definitions are for GCC v4.x. */ #include -#define inline inline __attribute__((always_inline)) -#define __inline__ __inline__ __attribute__((always_inline)) -#define __inline __inline __attribute__((always_inline)) -#define __deprecated __attribute__((deprecated)) #define __attribute_used__ __attribute__((__used__)) -#define __attribute_pure__ __attribute__((pure)) -#define __attribute_const__ __attribute__((__const__)) -#define noinline __attribute__((noinline)) #define __must_check __attribute__((warn_unused_result)) #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) diff -puN include/linux/compiler-gcc.h~more-updates-for-the-gcc-=-32-requirement include/linux/compiler-gcc.h --- 25/include/linux/compiler-gcc.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/compiler-gcc.h Thu Dec 15 14:01:57 2005 @@ -15,3 +15,12 @@ ({ unsigned long __ptr; \ __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ (typeof(ptr)) (__ptr + (off)); }) + + +#define inline inline __attribute__((always_inline)) +#define __inline__ __inline__ __attribute__((always_inline)) +#define __inline __inline __attribute__((always_inline)) +#define __deprecated __attribute__((deprecated)) +#define noinline __attribute__((noinline)) +#define __attribute_pure__ __attribute__((pure)) +#define __attribute_const__ __attribute__((__const__)) diff -puN include/linux/kernel.h~more-updates-for-the-gcc-=-32-requirement include/linux/kernel.h --- 25/include/linux/kernel.h~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/include/linux/kernel.h Thu Dec 15 14:01:57 2005 @@ -318,8 +318,6 @@ extern int randomize_va_space; #endif /* Trap pasters of __FUNCTION__ at compile-time */ -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 95 #define __FUNCTION__ (__func__) -#endif #endif diff -puN README~more-updates-for-the-gcc-=-32-requirement README --- README~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/README Thu Dec 15 14:01:57 2005 @@ -183,11 +183,8 @@ CONFIGURING the kernel: COMPILING the kernel: - - Make sure you have gcc 2.95.3 available. - gcc 2.91.66 (egcs-1.1.2), and gcc 2.7.2.3 are known to miscompile - some parts of the kernel, and are *no longer supported*. - Also remember to upgrade your binutils package (for as/ld/nm and company) - if necessary. For more information, refer to Documentation/Changes. + - Make sure you have at least gcc 3.2 available. + For more information, refer to Documentation/Changes. Please note that you can still run a.out user programs with this kernel. diff -puN sound/isa/wavefront/wavefront_synth.c~more-updates-for-the-gcc-=-32-requirement sound/isa/wavefront/wavefront_synth.c --- 25/sound/isa/wavefront/wavefront_synth.c~more-updates-for-the-gcc-=-32-requirement Thu Dec 15 14:01:57 2005 +++ 25-akpm/sound/isa/wavefront/wavefront_synth.c Thu Dec 15 14:01:57 2005 @@ -115,18 +115,11 @@ MODULE_PARM_DESC(osrun_time, "how many s #ifdef WF_DEBUG -#if defined(NEW_MACRO_VARARGS) || __GNUC__ >= 3 #define DPRINT(cond, ...) \ if ((dev->debug & (cond)) == (cond)) { \ snd_printk (__VA_ARGS__); \ } #else -#define DPRINT(cond, args...) \ - if ((dev->debug & (cond)) == (cond)) { \ - snd_printk (args); \ - } -#endif -#else #define DPRINT(cond, args...) #endif /* WF_DEBUG */ _