Messages in this thread Patch in this message | | | From | Paul Gortmaker <> | Subject | Avoiding builds with old gcc | Date | Tue, 21 May 1996 01:39:41 +1000 (EST) |
| |
Hi,
Here is a patch that we should have before v2.x -- It will stop people from building buggy kernels with old gcc versions (and thus lodging bogus bug reports) as seen below.
Paul.
------------------------------------------------------ foobar:/tmp/linux# gcc -v Reading specs from /usr/lib/gcc-lib/i486-linux/2.5.8/specs gcc version 2.5.8 foobar:/tmp/linux# make gcc -D__KERNEL__ [...blah blah...] -c -o init/main.o init/main.c init/main.c:49: #error sorry, your GCC is too old. It builds incorrect kernels. make: *** [init/main.o] Error 1 foobar:/tmp/linux# ------------------------------------------------------
diff -ur /usr/tmp/linux/include/linux/ext2_fs.h linux/include/linux/ext2_fs.h --- /usr/tmp/linux/include/linux/ext2_fs.h Sat May 4 17:06:18 1996 +++ linux/include/linux/ext2_fs.h Mon May 20 22:13:50 1996 @@ -428,15 +428,9 @@ * Ok, these declarations are also in <linux/kernel.h> but none of the * ext2 source programs needs to include it so they are duplicated here. */ -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) -# define NORET_TYPE __volatile__ -# define ATTRIB_NORET /**/ -# define NORET_AND /**/ -#else # define NORET_TYPE /**/ # define ATTRIB_NORET __attribute__((noreturn)) # define NORET_AND noreturn, -#endif /* acl.c */ extern int ext2_permission (struct inode *, int); diff -ur /usr/tmp/linux/include/linux/kernel.h linux/include/linux/kernel.h --- /usr/tmp/linux/include/linux/kernel.h Mon May 6 21:50:10 1996 +++ linux/include/linux/kernel.h Mon May 20 21:56:49 1996 @@ -29,15 +29,9 @@ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */ -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) -# define NORET_TYPE __volatile__ -# define ATTRIB_NORET /**/ -# define NORET_AND /**/ -#else # define NORET_TYPE /**/ # define ATTRIB_NORET __attribute__((noreturn)) # define NORET_AND noreturn, -#endif extern void math_error(void); NORET_TYPE void panic(const char * fmt, ...) diff -ur /usr/tmp/linux/init/main.c linux/init/main.c --- /usr/tmp/linux/init/main.c Mon May 20 18:23:23 1996 +++ linux/init/main.c Mon May 20 22:40:49 1996 @@ -5,6 +5,7 @@ * * GK 2/5/95 - Changed to support mounting root fs via NFS * Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96 + * Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96 */ #define __KERNEL_SYSCALLS__ @@ -37,6 +38,16 @@ #endif #include <asm/bugs.h> + +/* + * Versions of gcc older than that listed below may actually compile + * and link okay, but the end product can have subtle run time bugs. + * To avoid associated bogus bug reports, we flatly refuse to compile + * with a gcc that is known to be too old from the very beginning. + */ +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) +#error sorry, your GCC is too old. It builds incorrect kernels. +#endif extern char _stext, _etext; extern char *linux_banner;
| |