From 973a8a7e26153a22f19da7b1d3f91325a5c7123d Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 12 Aug 2006 18:31:48 +0200 Subject: [GCC4] add preliminary support for GCC 4 (Mikael Pettersson) This is the well tested part of Mikael Pettersson's GCC4 patches. It offers support for GCC4 on x86, x86_64 and ppc. Other archs untested. The risk of regression on older compilers at this stage should be close to zero. At least, x86 with allmodconfig still builds with gcc-2.95.3. Other places have been carefully fixed but the code has not been run yet. They will be merged individually in further patches. --- Makefile | 6 ++ arch/i386/Makefile | 2 - arch/mips/Makefile | 2 - arch/mips64/Makefile | 1 arch/ppc/kernel/open_pic_defs.h | 3 - arch/x86_64/Makefile | 2 - arch/x86_64/boot/compressed/Makefile | 2 - arch/x86_64/ia32/ia32entry.S | 11 +++ arch/x86_64/kernel/entry.S | 11 +++ arch/x86_64/kernel/ioport.c | 6 +- drivers/acpi/bus.c | 4 + drivers/sound/sound_firmware.c | 5 + drivers/usb/inode.c | 3 + fs/hfs/trans.c | 3 + include/asm-i386/byteorder.h | 5 + include/asm-i386/mpspec.h | 2 - include/asm-i386/processor.h | 3 + include/asm-i386/string.h | 2 - include/asm-i386/system.h | 2 - include/asm-m68k/setup.h | 3 + include/asm-ppc/byteorder.h | 5 + include/asm-ppc/time.h | 3 + include/asm-x86_64/apic.h | 2 - include/asm-x86_64/byteorder.h | 5 + include/asm-x86_64/mpspec.h | 2 - include/asm-x86_64/processor.h | 3 + include/asm-x86_64/system.h | 2 - include/linux/byteorder/swab.h | 10 ++- include/linux/compiler.h | 6 ++ include/linux/fs.h | 1 include/linux/ncp.h | 126 +++++++++++++++++----------------- include/linux/ncp_fs.h | 6 +- include/linux/ncp_fs_i.h | 12 ++- include/linux/ufs_fs.h | 1 include/linux/usb.h | 50 +++++++------ include/linux/usbdevice_fs.h | 2 - include/net/icmp.h | 1 include/net/ipv6.h | 1 init/main.c | 3 - 39 files changed, 174 insertions(+), 145 deletions(-) diff --git a/Makefile b/Makefile index fd6884d..70d4d14 100644 --- a/Makefile +++ b/Makefile @@ -93,11 +93,17 @@ CPPFLAGS := -D__KERNEL__ -I$(HPATH) CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \ -fno-strict-aliasing -fno-common +CFLAGS += -fno-builtin-sprintf ifndef CONFIG_FRAME_POINTER CFLAGS += -fomit-frame-pointer endif AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS) +check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) + +# disable pointer signedness warnings in gcc 4.0 +CFLAGS += $(call check_gcc,-Wno-pointer-sign,) + # # ROOT_DEV specifies the default root-device when making the image. # This can be either FLOPPY, CURRENT, /dev/xxxx or empty, in which case diff --git a/arch/i386/Makefile b/arch/i386/Makefile index c8e2978..8f93efd 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile @@ -23,8 +23,6 @@ LINKFLAGS =-T $(TOPDIR)/arch/i386/vmlinu CFLAGS += -pipe -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) - # prevent gcc from keeping the stack 16 byte aligned CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,) diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 60a064a..30508a9 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -30,8 +30,6 @@ endif MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) - # # # GCC uses -G 0 -mabicalls -fpic as default. We don't want PIC in the kernel diff --git a/arch/mips64/Makefile b/arch/mips64/Makefile index 2f4e998..8937bff 100644 --- a/arch/mips64/Makefile +++ b/arch/mips64/Makefile @@ -26,7 +26,6 @@ ifdef CONFIG_CROSSCOMPILE CROSS_COMPILE = $(tool-prefix) endif -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) check_gas = $(shell if $(CC) $(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi) # diff --git a/arch/ppc/kernel/open_pic_defs.h b/arch/ppc/kernel/open_pic_defs.h index 4c2289d..43051d0 100644 --- a/arch/ppc/kernel/open_pic_defs.h +++ b/arch/ppc/kernel/open_pic_defs.h @@ -172,9 +172,6 @@ struct OpenPIC { OpenPIC_Processor Processor[OPENPIC_MAX_PROCESSORS]; }; -extern volatile struct OpenPIC *OpenPIC; - - /* * Current Task Priority Register */ diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile index 32467e9..7fa4cb7 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86_64/Makefile @@ -38,8 +38,6 @@ OBJCOPY=$(CROSS_COMPILE)objcopy -O binar LDFLAGS=-e stext LINKFLAGS =-T $(TOPDIR)/arch/x86_64/vmlinux.lds $(LDFLAGS) -check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1 ; then echo "$(1)"; else echo "$(2)"; fi) - CFLAGS += -mno-red-zone CFLAGS += -mcmodel=kernel CFLAGS += -pipe diff --git a/arch/x86_64/boot/compressed/Makefile b/arch/x86_64/boot/compressed/Makefile index 0832d02..ad748e6 100644 --- a/arch/x86_64/boot/compressed/Makefile +++ b/arch/x86_64/boot/compressed/Makefile @@ -28,7 +28,7 @@ head.o: head.S $(IA32_AS) -c head.S misc.o: misc.c - $(IA32_CC) $(IA32_CFLAGS) -c misc.c + $(IA32_CC) $(IA32_CFLAGS) -fno-strict-aliasing -c misc.c piggy.o: $(SYSTEM) tmppiggy=_tmp_$$$$piggy; \ diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index a172a62..b599234 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S @@ -113,9 +113,18 @@ quiet_ni_syscall: PTREGSCALL stub32_fork, sys32_fork PTREGSCALL stub32_clone, sys32_clone PTREGSCALL stub32_vfork, sys32_vfork - PTREGSCALL stub32_iopl, sys_iopl PTREGSCALL stub32_rt_sigsuspend, sys_rt_sigsuspend + .macro PTREGSCALL3 label, func, arg + .globl \label +\label: + leaq \func(%rip),%rax + leaq -ARGOFFSET+8(%rsp),\arg /* 8 for return address */ + jmp ia32_ptregs_common + .endm + + PTREGSCALL3 stub32_iopl, sys_iopl, %rsi + ENTRY(ia32_ptregs_common) popq %r11 SAVE_REST diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index 00ba6fa..ab4a7db 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S @@ -249,7 +249,16 @@ intret_signal_test: PTREGSCALL stub_vfork, sys_vfork PTREGSCALL stub_rt_sigsuspend, sys_rt_sigsuspend PTREGSCALL stub_sigaltstack, sys_sigaltstack - PTREGSCALL stub_iopl, sys_iopl + + .macro PTREGSCALL3 label,func,arg + .globl \label +\label: + leaq \func(%rip),%rax + leaq -ARGOFFSET+8(%rsp),\arg /* 8 for return address */ + jmp ptregscall_common + .endm + + PTREGSCALL3 stub_iopl, sys_iopl, %rsi ENTRY(ptregscall_common) popq %r11 diff --git a/arch/x86_64/kernel/ioport.c b/arch/x86_64/kernel/ioport.c index 2f44868..d96d85b 100644 --- a/arch/x86_64/kernel/ioport.c +++ b/arch/x86_64/kernel/ioport.c @@ -81,9 +81,9 @@ asmlinkage long sys_ioperm(unsigned long * code. */ -asmlinkage long sys_iopl(unsigned int level, struct pt_regs regs) +asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs) { - unsigned int old = (regs.eflags >> 12) & 3; + unsigned int old = (regs->eflags >> 12) & 3; if (level > 3) return -EINVAL; @@ -92,6 +92,6 @@ asmlinkage long sys_iopl(unsigned int le if (!capable(CAP_SYS_RAWIO)) return -EPERM; } - regs.eflags = (regs.eflags & 0xffffffffffffcfff) | (level << 12); + regs->eflags = (regs->eflags &~ 0x3000UL) | (level << 12); return 0; } diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 21fa974..20c3ad5 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -623,7 +623,7 @@ acpi_bus_generate_event ( int data) { struct acpi_bus_event *event = NULL; - u32 flags = 0; + unsigned long flags = 0; ACPI_FUNCTION_TRACE("acpi_bus_generate_event"); @@ -656,7 +656,7 @@ int acpi_bus_receive_event ( struct acpi_bus_event *event) { - u32 flags = 0; + unsigned long flags = 0; struct acpi_bus_event *entry = NULL; DECLARE_WAITQUEUE(wait, current); diff --git a/drivers/sound/sound_firmware.c b/drivers/sound/sound_firmware.c index 9e8691d..7babebd 100644 --- a/drivers/sound/sound_firmware.c +++ b/drivers/sound/sound_firmware.c @@ -4,10 +4,11 @@ #include #include #include #include -#include +static int my_errno; +#define errno my_errno +#include #include -static int errno; static int do_mod_firmware_load(const char *fn, char **fp) { int fd; diff --git a/drivers/usb/inode.c b/drivers/usb/inode.c index 74a3480..7598b3b 100644 --- a/drivers/usb/inode.c +++ b/drivers/usb/inode.c @@ -41,6 +41,9 @@ #include #include #include +static struct inode_operations usbdevfs_bus_inode_operations; +static struct file_operations usbdevfs_bus_file_operations; + /* --------------------------------------------------------------------- */ /* diff --git a/fs/hfs/trans.c b/fs/hfs/trans.c index 64adf73..37b0655 100644 --- a/fs/hfs/trans.c +++ b/fs/hfs/trans.c @@ -33,6 +33,7 @@ #include "hfs.h" #include #include #include +#include /*================ File-local variables ================*/ @@ -78,7 +79,7 @@ static unsigned char mac2latin_map[128] * * Given a hexadecimal digit in ASCII, return the integer representation. */ -static inline const unsigned char dehex(char c) { +static inline __attribute_const__ unsigned char dehex(char c) { if ((c>='0')&&(c<='9')) { return c-'0'; } diff --git a/include/asm-i386/byteorder.h b/include/asm-i386/byteorder.h index b164317..f448a15 100644 --- a/include/asm-i386/byteorder.h +++ b/include/asm-i386/byteorder.h @@ -2,6 +2,7 @@ #ifndef _I386_BYTEORDER_H #define _I386_BYTEORDER_H #include +#include #ifdef __GNUC__ @@ -10,7 +11,7 @@ #ifdef __KERNEL__ #include #endif -static __inline__ __const__ __u32 ___arch__swab32(__u32 x) +static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) { #ifdef CONFIG_X86_BSWAP __asm__("bswap %0" : "=r" (x) : "0" (x)); @@ -26,7 +27,7 @@ #endif /* gcc should generate this for open coded C now too. May be worth switching to it because inline assembly cannot be scheduled. -AK */ -static __inline__ __const__ __u16 ___arch__swab16(__u16 x) +static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) { __asm__("xchgb %b0,%h0" /* swap bytes */ : "=q" (x) diff --git a/include/asm-i386/mpspec.h b/include/asm-i386/mpspec.h index ceaaeeb..de336ea 100644 --- a/include/asm-i386/mpspec.h +++ b/include/asm-i386/mpspec.h @@ -84,7 +84,7 @@ struct mpc_config_bus { unsigned char mpc_type; unsigned char mpc_busid; - unsigned char mpc_bustype[6] __attribute((packed)); + unsigned char mpc_bustype[6]; }; /* List of Bus Type string values, Intel MP Spec. */ diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 64550c4..81afef2 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h @@ -72,7 +72,6 @@ #define X86_VENDOR_UNKNOWN 0xff */ extern struct cpuinfo_x86 boot_cpu_data; -extern struct tss_struct init_tss[NR_CPUS]; #ifdef CONFIG_SMP extern struct cpuinfo_x86 cpu_data[]; @@ -357,6 +356,8 @@ struct tss_struct { unsigned long __cacheline_filler[5]; }; +extern struct tss_struct init_tss[NR_CPUS]; + struct thread_struct { unsigned long esp0; unsigned long eip; diff --git a/include/asm-i386/string.h b/include/asm-i386/string.h index d4d7899..acee435 100644 --- a/include/asm-i386/string.h +++ b/include/asm-i386/string.h @@ -337,7 +337,7 @@ extern void __struct_cpy_bug (void); #define struct_cpy(x,y) \ ({ \ if (sizeof(*(x)) != sizeof(*(y))) \ - __struct_cpy_bug; \ + __struct_cpy_bug(); \ memcpy(x, y, sizeof(*(x))); \ }) diff --git a/include/asm-i386/system.h b/include/asm-i386/system.h index 5d436fe..fa83113 100644 --- a/include/asm-i386/system.h +++ b/include/asm-i386/system.h @@ -302,7 +302,7 @@ #ifdef CONFIG_SMP #define smp_mb() mb() #define smp_rmb() rmb() #define smp_wmb() wmb() -#define set_mb(var, value) do { xchg(&var, value); } while (0) +#define set_mb(var, value) do { (void) xchg(&var, value); } while (0) #else #define smp_mb() barrier() #define smp_rmb() barrier() diff --git a/include/asm-m68k/setup.h b/include/asm-m68k/setup.h index 6d198bc..f1b441a 100644 --- a/include/asm-m68k/setup.h +++ b/include/asm-m68k/setup.h @@ -361,12 +361,13 @@ #define CL_SIZE 256 #ifndef __ASSEMBLY__ extern int m68k_num_memory; /* # of memory blocks found (and used) */ extern int m68k_realnum_memory; /* real # of memory blocks found */ -extern struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */ struct mem_info { unsigned long addr; /* physical address of memory chunk */ unsigned long size; /* length of memory chunk (in bytes) */ }; + +extern struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */ #endif #endif /* __KERNEL__ */ diff --git a/include/asm-ppc/byteorder.h b/include/asm-ppc/byteorder.h index d080ab6..6758801 100644 --- a/include/asm-ppc/byteorder.h +++ b/include/asm-ppc/byteorder.h @@ -2,6 +2,7 @@ #ifndef _PPC_BYTEORDER_H #define _PPC_BYTEORDER_H #include +#include #ifdef __GNUC__ #ifdef __KERNEL__ @@ -50,7 +51,7 @@ extern __inline__ void st_le64(volatile __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (taddr+4)); } -static __inline__ __const__ __u16 ___arch__swab16(__u16 value) +static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 value) { __u16 result; @@ -58,7 +59,7 @@ static __inline__ __const__ __u16 ___arc return result; } -static __inline__ __const__ __u32 ___arch__swab32(__u32 value) +static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 value) { __u32 result; diff --git a/include/asm-ppc/time.h b/include/asm-ppc/time.h index b11210f..0621d24 100644 --- a/include/asm-ppc/time.h +++ b/include/asm-ppc/time.h @@ -12,6 +12,7 @@ #define __ASM_TIME_H__ #include #include #include +#include #include @@ -57,7 +58,7 @@ #endif /* Accessor functions for the timebase (RTC on 601) registers. */ /* If one day CONFIG_POWER is added just define __USE_RTC as 1 */ #ifdef CONFIG_6xx -extern __inline__ int const __USE_RTC(void) { +extern __inline__ int __attribute_const__ __USE_RTC(void) { return (mfspr(SPRN_PVR)>>16) == 1; } #else diff --git a/include/asm-x86_64/apic.h b/include/asm-x86_64/apic.h index e33621b..eb44b62 100644 --- a/include/asm-x86_64/apic.h +++ b/include/asm-x86_64/apic.h @@ -28,7 +28,7 @@ static __inline void apic_write(unsigned static __inline void apic_write_atomic(unsigned long reg, unsigned int v) { - xchg((volatile unsigned int *)(APIC_BASE+reg), v); + (void) xchg((volatile unsigned int *)(APIC_BASE+reg), v); } static __inline unsigned int apic_read(unsigned long reg) diff --git a/include/asm-x86_64/byteorder.h b/include/asm-x86_64/byteorder.h index daef6af..c98de31 100644 --- a/include/asm-x86_64/byteorder.h +++ b/include/asm-x86_64/byteorder.h @@ -2,16 +2,17 @@ #ifndef _X86_64_BYTEORDER_H #define _X86_64_BYTEORDER_H #include +#include #ifdef __GNUC__ -static __inline__ __const__ __u64 ___arch__swab64(__u64 x) +static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 x) { __asm__("bswapq %0" : "=r" (x) : "0" (x)); return x; } -static __inline__ __const__ __u32 ___arch__swab32(__u32 x) +static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) { __asm__("bswapl %0" : "=r" (x) : "0" (x)); return x; diff --git a/include/asm-x86_64/mpspec.h b/include/asm-x86_64/mpspec.h index ca724cc..b88b3fa 100644 --- a/include/asm-x86_64/mpspec.h +++ b/include/asm-x86_64/mpspec.h @@ -76,7 +76,7 @@ struct mpc_config_bus { unsigned char mpc_type; unsigned char mpc_busid; - unsigned char mpc_bustype[6] __attribute((packed)); + unsigned char mpc_bustype[6]; }; /* List of Bus Type string values, Intel MP Spec. */ diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h index da7a5a3..9b789b5 100644 --- a/include/asm-x86_64/processor.h +++ b/include/asm-x86_64/processor.h @@ -68,7 +68,6 @@ #define X86_VENDOR_TRANSMETA 7 #define X86_VENDOR_UNKNOWN 0xff extern struct cpuinfo_x86 boot_cpu_data; -extern struct tss_struct init_tss[NR_CPUS]; #ifdef CONFIG_SMP extern struct cpuinfo_x86 cpu_data[]; @@ -300,6 +299,8 @@ struct tss_struct { u32 io_bitmap[IO_BITMAP_SIZE]; } __attribute__((packed)) ____cacheline_aligned; +extern struct tss_struct init_tss[NR_CPUS]; + struct thread_struct { unsigned long rsp0; unsigned long rip; diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index 2402c2c..31df110 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h @@ -251,7 +251,7 @@ #endif #define mb() asm volatile("mfence":::"memory") #define rmb() asm volatile("lfence":::"memory") #define wmb() asm volatile("sfence":::"memory") -#define set_mb(var, value) do { xchg(&var, value); } while (0) +#define set_mb(var, value) do { (void) xchg(&var, value); } while (0) #define set_wmb(var, value) do { var = value; wmb(); } while (0) #define warn_if_not_ulong(x) do { unsigned long foo; (void) (&(x) == &foo); } while (0) diff --git a/include/linux/byteorder/swab.h b/include/linux/byteorder/swab.h index bd85d37..800931f 100644 --- a/include/linux/byteorder/swab.h +++ b/include/linux/byteorder/swab.h @@ -15,6 +15,8 @@ #define _LINUX_BYTEORDER_SWAB_H * */ +#include + /* casts are necessary for constants, because we never know how for sure * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. */ @@ -156,7 +158,7 @@ # define __swab64(x) __fswab64(x) #endif /* OPTIMIZE */ -static __inline__ __const__ __u16 __fswab16(__u16 x) +static __inline__ __attribute_const__ __u16 __fswab16(__u16 x) { return __arch__swab16(x); } @@ -169,7 +171,7 @@ static __inline__ void __swab16s(__u16 * __arch__swab16s(addr); } -static __inline__ __const__ __u32 __fswab24(__u32 x) +static __inline__ __attribute_const__ __u32 __fswab24(__u32 x) { return __arch__swab24(x); } @@ -182,7 +184,7 @@ static __inline__ void __swab24s(__u32 * __arch__swab24s(addr); } -static __inline__ __const__ __u32 __fswab32(__u32 x) +static __inline__ __attribute_const__ __u32 __fswab32(__u32 x) { return __arch__swab32(x); } @@ -196,7 +198,7 @@ static __inline__ void __swab32s(__u32 * } #ifdef __BYTEORDER_HAS_U64__ -static __inline__ __const__ __u64 __fswab64(__u64 x) +static __inline__ __attribute_const__ __u64 __fswab64(__u64 x) { # ifdef __SWAB_64_THRU_32__ __u32 h = x >> 32; diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 0eef5e4..ba73dbf 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -27,6 +27,12 @@ #else #define __attribute_used__ /* not implemented */ #endif /* __GNUC__ */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +#define __attribute_const__ __attribute__((__const__)) +#else +#define __attribute_const__ /* unimplemented */ +#endif + #if __GNUC__ == 3 #if __GNUC_MINOR__ >= 1 # define inline __inline__ __attribute__((always_inline)) diff --git a/include/linux/fs.h b/include/linux/fs.h index 2d5a06c..c59e01d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1559,7 +1559,6 @@ static inline int is_mounted(kdev_t dev) unsigned long generate_cluster(kdev_t, int b[], int); unsigned long generate_cluster_swab32(kdev_t, int b[], int); extern kdev_t ROOT_DEV; -extern char root_device_name[]; extern void show_buffers(void); diff --git a/include/linux/ncp.h b/include/linux/ncp.h index c9bf6dd..95b611d 100644 --- a/include/linux/ncp.h +++ b/include/linux/ncp.h @@ -20,28 +20,28 @@ #define NCP_REQUEST (0x2222 #define NCP_DEALLOC_SLOT_REQUEST (0x5555) struct ncp_request_header { - __u16 type __attribute__((packed)); - __u8 sequence __attribute__((packed)); - __u8 conn_low __attribute__((packed)); - __u8 task __attribute__((packed)); - __u8 conn_high __attribute__((packed)); - __u8 function __attribute__((packed)); - __u8 data[0] __attribute__((packed)); -}; + __u16 type; + __u8 sequence; + __u8 conn_low; + __u8 task; + __u8 conn_high; + __u8 function; + __u8 data[0]; +} __attribute__((packed)); #define NCP_REPLY (0x3333) #define NCP_POSITIVE_ACK (0x9999) struct ncp_reply_header { - __u16 type __attribute__((packed)); - __u8 sequence __attribute__((packed)); - __u8 conn_low __attribute__((packed)); - __u8 task __attribute__((packed)); - __u8 conn_high __attribute__((packed)); - __u8 completion_code __attribute__((packed)); - __u8 connection_state __attribute__((packed)); - __u8 data[0] __attribute__((packed)); -}; + __u16 type; + __u8 sequence; + __u8 conn_low; + __u8 task; + __u8 conn_high; + __u8 completion_code; + __u8 connection_state; + __u8 data[0]; +} __attribute__((packed)); #define NCP_VOLNAME_LEN (16) #define NCP_NUMBER_OF_VOLUMES (256) @@ -110,33 +110,33 @@ #define AR_OPEN_COMPRESSED 0x0100 #endif struct nw_info_struct { - __u32 spaceAlloc __attribute__((packed)); - __u32 attributes __attribute__((packed)); - __u16 flags __attribute__((packed)); - __u32 dataStreamSize __attribute__((packed)); - __u32 totalStreamSize __attribute__((packed)); - __u16 numberOfStreams __attribute__((packed)); - __u16 creationTime __attribute__((packed)); - __u16 creationDate __attribute__((packed)); - __u32 creatorID __attribute__((packed)); - __u16 modifyTime __attribute__((packed)); - __u16 modifyDate __attribute__((packed)); - __u32 modifierID __attribute__((packed)); - __u16 lastAccessDate __attribute__((packed)); - __u16 archiveTime __attribute__((packed)); - __u16 archiveDate __attribute__((packed)); - __u32 archiverID __attribute__((packed)); - __u16 inheritedRightsMask __attribute__((packed)); - __u32 dirEntNum __attribute__((packed)); - __u32 DosDirNum __attribute__((packed)); - __u32 volNumber __attribute__((packed)); - __u32 EADataSize __attribute__((packed)); - __u32 EAKeyCount __attribute__((packed)); - __u32 EAKeySize __attribute__((packed)); - __u32 NSCreator __attribute__((packed)); - __u8 nameLen __attribute__((packed)); - __u8 entryName[256] __attribute__((packed)); -}; + __u32 spaceAlloc; + __u32 attributes; + __u16 flags; + __u32 dataStreamSize; + __u32 totalStreamSize; + __u16 numberOfStreams; + __u16 creationTime; + __u16 creationDate; + __u32 creatorID; + __u16 modifyTime; + __u16 modifyDate; + __u32 modifierID; + __u16 lastAccessDate; + __u16 archiveTime; + __u16 archiveDate; + __u32 archiverID; + __u16 inheritedRightsMask; + __u32 dirEntNum; + __u32 DosDirNum; + __u32 volNumber; + __u32 EADataSize; + __u32 EAKeyCount; + __u32 EAKeySize; + __u32 NSCreator; + __u8 nameLen; + __u8 entryName[256]; +} __attribute__((packed)); /* modify mask - use with MODIFY_DOS_INFO structure */ #define DM_ATTRIBUTES (ntohl(0x02000000L)) @@ -154,26 +154,26 @@ #define DM_INHERITED_RIGHTS_MASK (ntohl #define DM_MAXIMUM_SPACE (ntohl(0x00200000L)) struct nw_modify_dos_info { - __u32 attributes __attribute__((packed)); - __u16 creationDate __attribute__((packed)); - __u16 creationTime __attribute__((packed)); - __u32 creatorID __attribute__((packed)); - __u16 modifyDate __attribute__((packed)); - __u16 modifyTime __attribute__((packed)); - __u32 modifierID __attribute__((packed)); - __u16 archiveDate __attribute__((packed)); - __u16 archiveTime __attribute__((packed)); - __u32 archiverID __attribute__((packed)); - __u16 lastAccessDate __attribute__((packed)); - __u16 inheritanceGrantMask __attribute__((packed)); - __u16 inheritanceRevokeMask __attribute__((packed)); - __u32 maximumSpace __attribute__((packed)); -}; + __u32 attributes; + __u16 creationDate; + __u16 creationTime; + __u32 creatorID; + __u16 modifyDate; + __u16 modifyTime; + __u32 modifierID; + __u16 archiveDate; + __u16 archiveTime; + __u32 archiverID; + __u16 lastAccessDate; + __u16 inheritanceGrantMask; + __u16 inheritanceRevokeMask; + __u32 maximumSpace; +} __attribute__((packed)); struct nw_search_sequence { - __u8 volNumber __attribute__((packed)); - __u32 dirBase __attribute__((packed)); - __u32 sequence __attribute__((packed)); -}; + __u8 volNumber; + __u32 dirBase; + __u32 sequence; +} __attribute__((packed)); #endif /* _LINUX_NCP_H */ diff --git a/include/linux/ncp_fs.h b/include/linux/ncp_fs.h index 919fc65..9bf0b6b 100644 --- a/include/linux/ncp_fs.h +++ b/include/linux/ncp_fs.h @@ -180,9 +180,9 @@ struct ncp_entry_info { ino_t ino; int opened; int access; - __u32 server_file_handle __attribute__((packed)); - __u8 open_create_action __attribute__((packed)); - __u8 file_handle[6] __attribute__((packed)); + __u32 server_file_handle; + __u8 open_create_action; + __u8 file_handle[6]; }; /* Guess, what 0x564c is :-) */ diff --git a/include/linux/ncp_fs_i.h b/include/linux/ncp_fs_i.h index ffdf49f..04f9552 100644 --- a/include/linux/ncp_fs_i.h +++ b/include/linux/ncp_fs_i.h @@ -15,16 +15,16 @@ #ifdef __KERNEL__ * all the information we need to work with an inode after creation. */ struct ncp_inode_info { - __u32 dirEntNum __attribute__((packed)); - __u32 DosDirNum __attribute__((packed)); - __u32 volNumber __attribute__((packed)); + __u32 dirEntNum; + __u32 DosDirNum; + __u32 volNumber; __u32 nwattr; struct semaphore open_sem; atomic_t opened; int access; - __u32 server_file_handle __attribute__((packed)); - __u8 open_create_action __attribute__((packed)); - __u8 file_handle[6] __attribute__((packed)); + __u32 server_file_handle; + __u8 open_create_action; + __u8 file_handle[6]; }; #endif /* __KERNEL__ */ diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index f776030..11f5738 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h @@ -555,7 +555,6 @@ extern struct buffer_head * ufs_bread (s extern struct file_operations ufs_dir_operations; /* super.c */ -extern struct file_system_type ufs_fs_type; extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); diff --git a/include/linux/usb.h b/include/linux/usb.h index b94720e..a83a797 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -252,14 +252,14 @@ struct usb_device_descriptor { /* Endpoint descriptor */ struct usb_endpoint_descriptor { - __u8 bLength __attribute__ ((packed)); - __u8 bDescriptorType __attribute__ ((packed)); - __u8 bEndpointAddress __attribute__ ((packed)); - __u8 bmAttributes __attribute__ ((packed)); - __u16 wMaxPacketSize __attribute__ ((packed)); - __u8 bInterval __attribute__ ((packed)); - __u8 bRefresh __attribute__ ((packed)); - __u8 bSynchAddress __attribute__ ((packed)); + __u8 bLength; + __u8 bDescriptorType; + __u8 bEndpointAddress; + __u8 bmAttributes; + __u16 wMaxPacketSize; + __u8 bInterval; + __u8 bRefresh; + __u8 bSynchAddress; unsigned char *extra; /* Extra descriptors */ int extralen; @@ -267,15 +267,15 @@ struct usb_endpoint_descriptor { /* Interface descriptor */ struct usb_interface_descriptor { - __u8 bLength __attribute__ ((packed)); - __u8 bDescriptorType __attribute__ ((packed)); - __u8 bInterfaceNumber __attribute__ ((packed)); - __u8 bAlternateSetting __attribute__ ((packed)); - __u8 bNumEndpoints __attribute__ ((packed)); - __u8 bInterfaceClass __attribute__ ((packed)); - __u8 bInterfaceSubClass __attribute__ ((packed)); - __u8 bInterfaceProtocol __attribute__ ((packed)); - __u8 iInterface __attribute__ ((packed)); + __u8 bLength; + __u8 bDescriptorType; + __u8 bInterfaceNumber; + __u8 bAlternateSetting; + __u8 bNumEndpoints; + __u8 bInterfaceClass; + __u8 bInterfaceSubClass; + __u8 bInterfaceProtocol; + __u8 iInterface; struct usb_endpoint_descriptor *endpoint; @@ -296,14 +296,14 @@ struct usb_interface { /* Configuration descriptor information.. */ struct usb_config_descriptor { - __u8 bLength __attribute__ ((packed)); - __u8 bDescriptorType __attribute__ ((packed)); - __u16 wTotalLength __attribute__ ((packed)); - __u8 bNumInterfaces __attribute__ ((packed)); - __u8 bConfigurationValue __attribute__ ((packed)); - __u8 iConfiguration __attribute__ ((packed)); - __u8 bmAttributes __attribute__ ((packed)); - __u8 MaxPower __attribute__ ((packed)); + __u8 bLength; + __u8 bDescriptorType; + __u16 wTotalLength; + __u8 bNumInterfaces; + __u8 bConfigurationValue; + __u8 iConfiguration; + __u8 bmAttributes; + __u8 MaxPower; struct usb_interface *interface; diff --git a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h index a555e6c..c362a4e 100644 --- a/include/linux/usbdevice_fs.h +++ b/include/linux/usbdevice_fs.h @@ -185,8 +185,6 @@ extern struct file_operations usbdevfs_d extern struct file_operations usbdevfs_devices_fops; extern struct file_operations usbdevfs_device_file_operations; extern struct inode_operations usbdevfs_device_inode_operations; -extern struct inode_operations usbdevfs_bus_inode_operations; -extern struct file_operations usbdevfs_bus_file_operations; extern void usbdevfs_conn_disc_event(void); #endif /* __KERNEL__ */ diff --git a/include/net/icmp.h b/include/net/icmp.h index 460cb2c..318c3a8 100644 --- a/include/net/icmp.h +++ b/include/net/icmp.h @@ -23,6 +23,7 @@ #include #include #include +#include struct icmp_err { int errno; diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 5e4d27f..337a761 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -101,6 +101,7 @@ struct frag_hdr { #ifdef __KERNEL__ #include +#include /* sysctls */ extern int sysctl_ipv6_bindv6only; diff --git a/init/main.c b/init/main.c index dea01bf..7a949dc 100644 --- a/init/main.c +++ b/init/main.c @@ -87,9 +87,6 @@ #endif /* * gcc >= 4 is not supported by kernel 2.4 */ -#if __GNUC__ > 3 -#error Sorry, your GCC is too recent for kernel 2.4 -#endif extern char _stext, _etext; extern char *linux_banner; -- 1.4.2