Commit a1365647 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] remove gcc-2 checks

Remove various things which were checking for gcc-1.x and gcc-2.x compilers.

From: Adrian Bunk <bunk@stusta.de>

    Some documentation updates and removes some code paths for gcc < 3.2.
Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent fd285bb5
...@@ -31,8 +31,6 @@ al espa ...@@ -31,8 +31,6 @@ al espa
Eine deutsche Version dieser Datei finden Sie unter Eine deutsche Version dieser Datei finden Sie unter
<http://www.stefan-winter.de/Changes-2.4.0.txt>. <http://www.stefan-winter.de/Changes-2.4.0.txt>.
Last updated: October 29th, 2002
Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu).
Current Minimal Requirements Current Minimal Requirements
...@@ -48,7 +46,7 @@ necessary on all systems; obviously, if you don't have any ISDN ...@@ -48,7 +46,7 @@ necessary on all systems; obviously, if you don't have any ISDN
hardware, for example, you probably needn't concern yourself with hardware, for example, you probably needn't concern yourself with
isdn4k-utils. 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 Gnu make 3.79.1 # make --version
o binutils 2.12 # ld -v o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version o util-linux 2.10o # fdformat --version
...@@ -74,26 +72,7 @@ GCC ...@@ -74,26 +72,7 @@ GCC
--- ---
The gcc version requirements may vary depending on the type of CPU in your 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 computer.
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).
Make Make
---- ----
...@@ -322,9 +301,9 @@ Getting updated software ...@@ -322,9 +301,9 @@ Getting updated software
Kernel compilation Kernel compilation
****************** ******************
gcc 2.95.3 gcc
---------- ---
o <ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3.tar.gz> o <ftp://ftp.gnu.org/gnu/gcc/>
Make Make
---- ----
......
...@@ -183,11 +183,8 @@ CONFIGURING the kernel: ...@@ -183,11 +183,8 @@ CONFIGURING the kernel:
COMPILING the kernel: COMPILING the kernel:
- Make sure you have gcc 2.95.3 available. - Make sure you have at least gcc 3.2 available.
gcc 2.91.66 (egcs-1.1.2), and gcc 2.7.2.3 are known to miscompile For more information, refer to Documentation/Changes.
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.
Please note that you can still run a.out user programs with this kernel. Please note that you can still run a.out user programs with this kernel.
......
...@@ -23,20 +23,15 @@ ...@@ -23,20 +23,15 @@
#error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32 #error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32
#endif #endif
/* /*
* GCC 2.95.1, 2.95.2: ignores register clobber list in asm().
* GCC 3.0, 3.1: general bad code generation. * GCC 3.0, 3.1: general bad code generation.
* GCC 3.2.0: incorrect function argument offset calculation. * GCC 3.2.0: incorrect function argument offset calculation.
* GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c * GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c
* (http://gcc.gnu.org/PR8896) and incorrect structure * (http://gcc.gnu.org/PR8896) and incorrect structure
* initialisation in fs/jffs2/erase.c * initialisation in fs/jffs2/erase.c
*/ */
#if __GNUC__ < 2 || \ #if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
(__GNUC__ == 2 && __GNUC_MINOR__ < 95) || \
(__GNUC__ == 2 && __GNUC_MINOR__ == 95 && __GNUC_PATCHLEVEL__ != 0 && \
__GNUC_PATCHLEVEL__ < 3) || \
(__GNUC__ == 3 && __GNUC_MINOR__ < 3)
#error Your compiler is too buggy; it is known to miscompile kernels. #error Your compiler is too buggy; it is known to miscompile kernels.
#error Known good compilers: 2.95.3, 2.95.4, 2.96, 3.3 #error Known good compilers: 3.3
#endif #endif
/* Use marker if you need to separate the values later */ /* Use marker if you need to separate the values later */
......
...@@ -25,13 +25,6 @@ ...@@ -25,13 +25,6 @@
#if defined(__APCS_32__) && defined(CONFIG_CPU_26) #if defined(__APCS_32__) && defined(CONFIG_CPU_26)
#error Sorry, your compiler targets APCS-32 but this kernel requires APCS-26 #error Sorry, your compiler targets APCS-32 but this kernel requires APCS-26
#endif #endif
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 95)
#error Sorry, your compiler is known to miscompile kernels. Only use gcc 2.95.3 and later.
#endif
#if __GNUC__ == 2 && __GNUC_MINOR__ == 95
/* shame we can't detect the .1 or .2 releases */
#warning GCC 2.95.2 and earlier miscompiles kernels.
#endif
/* Use marker if you need to separate the values later */ /* Use marker if you need to separate the values later */
......
...@@ -630,10 +630,6 @@ config REGPARM ...@@ -630,10 +630,6 @@ config REGPARM
and passes the first three arguments of a function call in registers. and passes the first three arguments of a function call in registers.
This will probably break binary only modules. 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 config SECCOMP
bool "Enable seccomp to safely compute untrusted bytecode" bool "Enable seccomp to safely compute untrusted bytecode"
depends on PROC_FS depends on PROC_FS
......
...@@ -37,10 +37,7 @@ CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2) ...@@ -37,10 +37,7 @@ CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2)
# CPU-specific tuning. Anything which can be shared with UML should go here. # CPU-specific tuning. Anything which can be shared with UML should go here.
include $(srctree)/arch/i386/Makefile.cpu include $(srctree)/arch/i386/Makefile.cpu
# -mregparm=3 works ok on gcc-3.0 and later cflags-$(CONFIG_REGPARM) += -mregparm=3
#
GCC_VERSION := $(call cc-version)
cflags-$(CONFIG_REGPARM) += $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;)
# Disable unit-at-a-time mode, it makes gcc use a lot more stack # Disable unit-at-a-time mode, it makes gcc use a lot more stack
# due to the lack of sharing of stacklots. # due to the lack of sharing of stacklots.
......
# CPU tuning section - shared with UML. # CPU tuning section - shared with UML.
# Must change only cflags-y (or [yn]), not CFLAGS! That makes a difference for 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) HAS_MTUNE := $(call cc-option-yn, -mtune=i386)
ifeq ($(HAS_MTUNE),y) ifeq ($(HAS_MTUNE),y)
tune = $(call cc-option,-mtune=$(1),) tune = $(call cc-option,-mtune=$(1),)
...@@ -14,7 +14,7 @@ cflags-$(CONFIG_M386) += -march=i386 ...@@ -14,7 +14,7 @@ cflags-$(CONFIG_M386) += -march=i386
cflags-$(CONFIG_M486) += -march=i486 cflags-$(CONFIG_M486) += -march=i486
cflags-$(CONFIG_M586) += -march=i586 cflags-$(CONFIG_M586) += -march=i586
cflags-$(CONFIG_M586TSC) += -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_M686) += -march=i686
cflags-$(CONFIG_MPENTIUMII) += -march=i686 $(call tune,pentium2) cflags-$(CONFIG_MPENTIUMII) += -march=i686 $(call tune,pentium2)
cflags-$(CONFIG_MPENTIUMIII) += -march=i686 $(call tune,pentium3) cflags-$(CONFIG_MPENTIUMIII) += -march=i686 $(call tune,pentium3)
...@@ -23,8 +23,8 @@ cflags-$(CONFIG_MPENTIUM4) += -march=i686 $(call tune,pentium4) ...@@ -23,8 +23,8 @@ cflags-$(CONFIG_MPENTIUM4) += -march=i686 $(call tune,pentium4)
cflags-$(CONFIG_MK6) += -march=k6 cflags-$(CONFIG_MK6) += -march=k6
# Please note, that patches that add -march=athlon-xp and friends are pointless. # Please note, that patches that add -march=athlon-xp and friends are pointless.
# They make zero difference whatsosever to performance at this time. # 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_MK7) += -march=athlon
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,$(call cc-option,-march=athlon,-march=i686 $(align)-functions=4)) 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_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_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) cflags-$(CONFIG_MWINCHIPC6) += $(call cc-option,-march=winchip-c6,-march=i586)
...@@ -37,5 +37,5 @@ cflags-$(CONFIG_MVIAC3_2) += $(call cc-option,-march=c3-2,-march=i686) ...@@ -37,5 +37,5 @@ cflags-$(CONFIG_MVIAC3_2) += $(call cc-option,-march=c3-2,-march=i686)
cflags-$(CONFIG_X86_ELAN) += -march=i486 cflags-$(CONFIG_X86_ELAN) += -march=i486
# Geode GX1 support # Geode GX1 support
cflags-$(CONFIG_MGEODEGX1) += $(call cc-option,-march=pentium-mmx,-march=i486) cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx
...@@ -37,10 +37,6 @@ $(error Sorry, you need a newer version of the assember, one that is built from ...@@ -37,10 +37,6 @@ $(error Sorry, you need a newer version of the assember, one that is built from
ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz) ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz)
endif 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) ifeq ($(GCC_VERSION),0304)
cflags-$(CONFIG_ITANIUM) += -mtune=merced cflags-$(CONFIG_ITANIUM) += -mtune=merced
cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley
......
...@@ -1060,7 +1060,7 @@ SET_REG(b5); ...@@ -1060,7 +1060,7 @@ SET_REG(b5);
* the clobber lists for spin_lock() in include/asm-ia64/spinlock.h. * the clobber lists for spin_lock() in include/asm-ia64/spinlock.h.
*/ */
#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) #if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
GLOBAL_ENTRY(ia64_spinlock_contention_pre3_4) GLOBAL_ENTRY(ia64_spinlock_contention_pre3_4)
.prologue .prologue
......
...@@ -103,7 +103,7 @@ EXPORT_SYMBOL(unw_init_running); ...@@ -103,7 +103,7 @@ EXPORT_SYMBOL(unw_init_running);
#ifdef ASM_SUPPORTED #ifdef ASM_SUPPORTED
# ifdef CONFIG_SMP # ifdef CONFIG_SMP
# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) # if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
/* /*
* This is not a normal routine and we don't want a function descriptor for it, so we use * This is not a normal routine and we don't want a function descriptor for it, so we use
* a fake declaration here. * a fake declaration here.
......
...@@ -32,7 +32,7 @@ typedef struct ...@@ -32,7 +32,7 @@ typedef struct
u64 *prev_pfs_loc; /* state for WAR for old spinlock ool code */ u64 *prev_pfs_loc; /* state for WAR for old spinlock ool code */
} ia64_backtrace_t; } ia64_backtrace_t;
#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) #if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
/* /*
* Returns non-zero if the PC is in the spinlock contention out-of-line code * Returns non-zero if the PC is in the spinlock contention out-of-line code
* with non-standard calling sequence (on older compilers). * with non-standard calling sequence (on older compilers).
......
...@@ -306,9 +306,6 @@ static int raid0_run (mddev_t *mddev) ...@@ -306,9 +306,6 @@ static int raid0_run (mddev_t *mddev)
printk("raid0 : conf->hash_spacing is %llu blocks.\n", printk("raid0 : conf->hash_spacing is %llu blocks.\n",
(unsigned long long)conf->hash_spacing); (unsigned long long)conf->hash_spacing);
{ {
#if __GNUC__ < 3
volatile
#endif
sector_t s = mddev->array_size; sector_t s = mddev->array_size;
sector_t space = conf->hash_spacing; sector_t space = conf->hash_spacing;
int round; int round;
...@@ -439,9 +436,6 @@ static int raid0_make_request (request_queue_t *q, struct bio *bio) ...@@ -439,9 +436,6 @@ static int raid0_make_request (request_queue_t *q, struct bio *bio)
{ {
#if __GNUC__ < 3
volatile
#endif
sector_t x = block >> conf->preshift; sector_t x = block >> conf->preshift;
sector_div(x, (u32)conf->hash_spacing); sector_div(x, (u32)conf->hash_spacing);
zone = conf->hash_table[x]; zone = conf->hash_table[x];
......
...@@ -191,9 +191,7 @@ char *v4l2_type_names[] = { ...@@ -191,9 +191,7 @@ char *v4l2_type_names[] = {
}; };
char *v4l2_ioctl_names[256] = { char *v4l2_ioctl_names[256] = {
#if __GNUC__ >= 3
[0 ... 255] = "UNKNOWN", [0 ... 255] = "UNKNOWN",
#endif
[_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP", [_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP",
[_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED", [_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED",
[_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT", [_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT",
......
...@@ -212,11 +212,10 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits; ...@@ -212,11 +212,10 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
mlog(ML_ENTRY, "ENTRY:\n"); \ mlog(ML_ENTRY, "ENTRY:\n"); \
} while (0) } 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)) && \ #if !defined(__CHECKER__)
!defined(__CHECKER__)
#define mlog_exit(st) do { \ #define mlog_exit(st) do { \
if (__builtin_types_compatible_p(typeof(st), unsigned long)) \ if (__builtin_types_compatible_p(typeof(st), unsigned long)) \
mlog(ML_EXIT, "EXIT: %lu\n", (unsigned long) (st)); \ mlog(ML_EXIT, "EXIT: %lu\n", (unsigned long) (st)); \
......
...@@ -30,13 +30,7 @@ ...@@ -30,13 +30,7 @@
* By comparing each compnent, we don't have to worry about extra * By comparing each compnent, we don't have to worry about extra
* endian issues in treating two 32 bit numbers as one 64 bit number * endian issues in treating two 32 bit numbers as one 64 bit number
*/ */
static static inline xfs_lsn_t _lsn_cmp(xfs_lsn_t lsn1, xfs_lsn_t lsn2)
#if defined(__GNUC__) && (__GNUC__ == 2) && ( (__GNUC_MINOR__ == 95) || (__GNUC_MINOR__ == 96))
__attribute__((unused)) /* gcc 2.95, 2.96 miscompile this when inlined */
#else
__inline__
#endif
xfs_lsn_t _lsn_cmp(xfs_lsn_t lsn1, xfs_lsn_t lsn2)
{ {
if (CYCLE_LSN(lsn1) != CYCLE_LSN(lsn2)) if (CYCLE_LSN(lsn1) != CYCLE_LSN(lsn2))
return (CYCLE_LSN(lsn1)<CYCLE_LSN(lsn2))? -999 : 999; return (CYCLE_LSN(lsn1)<CYCLE_LSN(lsn2))? -999 : 999;
......
...@@ -98,9 +98,7 @@ ...@@ -98,9 +98,7 @@
#undef inline #undef inline
#undef __inline__ #undef __inline__
#undef __inline #undef __inline
#if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3
#undef __always_inline #undef __always_inline
#define __always_inline inline __attribute__((always_inline)) #define __always_inline inline __attribute__((always_inline))
#endif
#endif /* __ALPHA_COMPILER_H */ #endif /* __ALPHA_COMPILER_H */
...@@ -77,7 +77,6 @@ unsigned long get_wchan(struct task_struct *p); ...@@ -77,7 +77,6 @@ unsigned long get_wchan(struct task_struct *p);
#define spin_lock_prefetch(lock) do { } while (0) #define spin_lock_prefetch(lock) do { } while (0)
#endif #endif
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
extern inline void prefetch(const void *ptr) extern inline void prefetch(const void *ptr)
{ {
__builtin_prefetch(ptr, 0, 3); __builtin_prefetch(ptr, 0, 3);
...@@ -95,24 +94,4 @@ extern inline void spin_lock_prefetch(const void *ptr) ...@@ -95,24 +94,4 @@ extern inline void spin_lock_prefetch(const void *ptr)
} }
#endif #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 */ #endif /* __ASM_ALPHA_PROCESSOR_H */
...@@ -2,11 +2,7 @@ ...@@ -2,11 +2,7 @@
#define _ASM_IA64_BUG_H #define _ASM_IA64_BUG_H
#ifdef CONFIG_BUG #ifdef CONFIG_BUG
#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) #define ia64_abort() __builtin_trap()
# define ia64_abort() __builtin_trap()
#else
# define ia64_abort() (*(volatile int *) 0 = 0)
#endif
#define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0) #define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0)
/* should this BUG be made generic? */ /* should this BUG be made generic? */
......
...@@ -34,7 +34,7 @@ __raw_spin_lock_flags (raw_spinlock_t *lock, unsigned long flags) ...@@ -34,7 +34,7 @@ __raw_spin_lock_flags (raw_spinlock_t *lock, unsigned long flags)
{ {
register volatile unsigned int *ptr asm ("r31") = &lock->lock; 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 # ifdef CONFIG_ITANIUM
/* don't use brl on Itanium... */ /* don't use brl on Itanium... */
asm volatile ("{\n\t" asm volatile ("{\n\t"
......
...@@ -193,11 +193,7 @@ do { \ ...@@ -193,11 +193,7 @@ do { \
* not preserve it's value. Hairy, but it lets us remove 2 loads * not preserve it's value. Hairy, but it lets us remove 2 loads
* and 2 stores in this critical code path. -DaveM * and 2 stores in this critical code path. -DaveM
*/ */
#if __GNUC__ >= 3
#define EXTRA_CLOBBER ,"%l1" #define EXTRA_CLOBBER ,"%l1"
#else
#define EXTRA_CLOBBER
#endif
#define switch_to(prev, next, last) \ #define switch_to(prev, next, last) \
do { if (test_thread_flag(TIF_PERFCTR)) { \ do { if (test_thread_flag(TIF_PERFCTR)) { \
unsigned long __tmp; \ unsigned long __tmp; \
......
#ifndef __UM_RWSEM_H__ #ifndef __UM_RWSEM_H__
#define __UM_RWSEM_H__ #define __UM_RWSEM_H__
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
#define __builtin_expect(exp,c) (exp)
#endif
#include "asm/arch/rwsem.h" #include "asm/arch/rwsem.h"
#endif #endif
...@@ -241,9 +241,6 @@ ...@@ -241,9 +241,6 @@
/* User programs sometimes end up including this header file /* User programs sometimes end up including this header file
(indirectly, via uClibc header files), so I'm a bit nervous just (indirectly, via uClibc header files), so I'm a bit nervous just
including <linux/compiler.h>. */ including <linux/compiler.h>. */
#if !defined(__builtin_expect) && __GNUC__ == 2 && __GNUC_MINOR__ < 96
#define __builtin_expect(x, expected_value) (x)
#endif
#define __syscall_return(type, res) \ #define __syscall_return(type, res) \
do { \ do { \
...@@ -346,20 +343,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e) \ ...@@ -346,20 +343,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e) \
__syscall_return (type, __ret); \ __syscall_return (type, __ret); \
} }
#if __GNUC__ < 3
/* In older versions of gcc, `asm' statements with more than 10
input/output arguments produce a fatal error. To work around this
problem, we use two versions, one for gcc-3.x and one for earlier
versions of gcc (the `earlier gcc' version doesn't work with gcc-3.x
because gcc-3.x doesn't allow clobbers to also be input arguments). */
#define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f) \
__asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \
: "=r" (ret), "=r" (syscall) \
: "1" (syscall), \
"r" (a), "r" (b), "r" (c), "r" (d), \
"r" (e), "r" (f) \
: SYSCALL_CLOBBERS, SYSCALL_ARG4, SYSCALL_ARG5);
#else /* __GNUC__ >= 3 */
#define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f) \ #define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f) \
__asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \ __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \
: "=r" (ret), "=r" (syscall), \ : "=r" (ret), "=r" (syscall), \
...@@ -368,7 +351,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e) \ ...@@ -368,7 +351,6 @@ type name (atype a, btype b, ctype c, dtype d, etype e) \
"r" (a), "r" (b), "r" (c), "r" (d), \ "r" (a), "r" (b), "r" (c), "r" (d), \
"2" (e), "3" (f) \ "2" (e), "3" (f) \
: SYSCALL_CLOBBERS); : SYSCALL_CLOBBERS);
#endif
#define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e, ftype, f) \ #define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e, ftype, f) \
type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \ type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \
......
...@@ -156,7 +156,7 @@ extern __be32 htonl(__u32); ...@@ -156,7 +156,7 @@ extern __be32 htonl(__u32);
extern __u16 ntohs(__be16); extern __u16 ntohs(__be16);
extern __be16 htons(__u16); extern __be16 htons(__u16);
#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) #if defined(__GNUC__) && defined(__OPTIMIZE__)
#define ___htonl(x) __cpu_to_be32(x) #define ___htonl(x) __cpu_to_be32(x)
#define ___htons(x) __cpu_to_be16(x) #define ___htons(x) __cpu_to_be16(x)
......
...@@ -110,7 +110,7 @@ ...@@ -110,7 +110,7 @@
/* /*
* Allow constant folding * Allow constant folding
*/ */
#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) #if defined(__GNUC__) && defined(__OPTIMIZE__)
# define __swab16(x) \ # define __swab16(x) \
(__builtin_constant_p((__u16)(x)) ? \ (__builtin_constant_p((__u16)(x)) ? \
___swab16((x)) : \ ___swab16((x)) : \
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
/* /*
* Allow constant folding * Allow constant folding
*/ */
#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) #if defined(__GNUC__) && defined(__OPTIMIZE__)
# define __swahw32(x) \ # define __swahw32(x) \
(__builtin_constant_p((__u32)(x)) ? \ (__builtin_constant_p((__u32)(x)) ? \
___swahw32((x)) : \ ___swahw32((x)) : \
......
...@@ -15,3 +15,12 @@ ...@@ -15,3 +15,12 @@
({ unsigned long __ptr; \ ({ unsigned long __ptr; \
__asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \
(typeof(ptr)) (__ptr + (off)); }) (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__))
...@@ -3,29 +3,12 @@ ...@@ -3,29 +3,12 @@
/* These definitions are for GCC v3.x. */ /* These definitions are for GCC v3.x. */
#include <linux/compiler-gcc.h> #include <linux/compiler-gcc.h>
#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 #if __GNUC_MINOR__ >= 3
# define __attribute_used__ __attribute__((__used__)) # define __attribute_used__ __attribute__((__used__))
#else #else
# define __attribute_used__ __attribute__((__unused__)) # define __attribute_used__ __attribute__((__unused__))
#endif #endif
#define __attribute_pure__ __attribute__((pure))
#define __attribute_const__ __attribute__((__const__))
#if __GNUC_MINOR__ >= 1
#define noinline __attribute__((noinline))
#endif
#if __GNUC_MINOR__ >= 4 #if __GNUC_MINOR__ >= 4
#define __must_check __attribute__((warn_unused_result)) #define __must_check __attribute__((warn_unused_result))
#endif