On Fri, Jun 08, 2007 at 11:32:29AM -0700, Tom wrote: > From: Tom Enderes <[EMAIL PROTECTED]> > > The kernel build failed on cygwin hosts, because cygwin has slightly > different typedefs compared to linux: > scripts/mod/file2alias.c:518: error: dereferencing pointer to incomplete > type > Two files, scripts/mod/file2alias.c and scripts/mod/modpost.h, were > modified as follows: > Whever __CYGWIN__ is defined, __uint32 is defined as __uint32_t (instead > of uint_32_t) and the missing ElfxxSection definitions are added. > These changes have been tested both on cygwin 1.5.24, hostcc=gcc 3.4.4 > and on FC5, hostcc=gcc 4.1.1-1. Any tests on cygwin, with and without > this change, were executed with the following set for make: > HOST_LOADLIBES="-lcurses -lintl". > > Signed-off-by: Tom Enderes <[EMAIL PROTECTED]> > > > diff -Naur -r o21.1/scripts/mod/file2alias.c > 2.6.21.1/scripts/mod/file2alias.c > --- o21.1/scripts/mod/file2alias.c 2007-04-27 14:49:26.000000000 -0700 > +++ 2.6.21.1/scripts/mod/file2alias.c 2007-05-29 20:35:01.209115300 > -0700 > @@ -29,7 +29,11 @@ > > #include <ctype.h> > > +#ifdef __CYGWIN__ > +typedef __uint32_t __u32; > +#else > typedef uint32_t __u32; > +#endif > typedef uint16_t __u16; > typedef unsigned char __u8; This change is wrong. Somehow __uint32_t_defined gets defined and cygwin fails to define uint32_t.
So we have hit a bug in cygwin here. Browsing the code I think that including inttypes.h much sooner will fix it. In file2alias.c I moved include of inttypes.h up. > diff -Naur -r o21.1/scripts/mod/modpost.h 2.6.21.1/scripts/mod/modpost.h > --- o21.1/scripts/mod/modpost.h 2007-04-27 14:49:26.000000000 -0700 > +++ 2.6.21.1/scripts/mod/modpost.h 2007-05-29 20:35:01.599732800 > -0700 > @@ -9,6 +9,11 @@ > #include <unistd.h> > #include <elf.h> > > +#ifdef __CYGWIN__ > +typedef uint16_t Elf32_Section; > +typedef uint16_t Elf64_Section; > +#endif I did this in an alternative way. Replacing use of Elf32_section with Elf32_Half did the trick. Same for the 64 bit type. Let me know if this works on Cygwin. I have tested with a few architectures on Linux with success. (Needs to look into the lib part next). Thanks for keeping attention on this. Sam diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index f646381..5e017a9 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -10,6 +10,14 @@ * of the GNU General Public License, incorporated herein by reference. */ +#ifdef __sun__ +#include <inttypes.h> +#else +#include <stdint.h> +#endif + +#include <ctype.h> + #include "modpost.h" /* We use the ELF typedefs for kernel_ulong_t but bite the bullet and @@ -21,13 +29,6 @@ typedef Elf32_Addr kernel_ulong_t; typedef Elf64_Addr kernel_ulong_t; #define BITS_PER_LONG 64 #endif -#ifdef __sun__ -#include <inttypes.h> -#else -#include <stdint.h> -#endif - -#include <ctype.h> typedef uint32_t __u32; typedef uint16_t __u16; diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 4156dd3..0ffed17 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -17,7 +17,7 @@ #define Elf_Shdr Elf32_Shdr #define Elf_Sym Elf32_Sym #define Elf_Addr Elf32_Addr -#define Elf_Section Elf32_Section +#define Elf_Section Elf32_Half #define ELF_ST_BIND ELF32_ST_BIND #define ELF_ST_TYPE ELF32_ST_TYPE @@ -31,7 +31,7 @@ #define Elf_Shdr Elf64_Shdr #define Elf_Sym Elf64_Sym #define Elf_Addr Elf64_Addr -#define Elf_Section Elf64_Section +#define Elf_Section Elf64_Half #define ELF_ST_BIND ELF64_ST_BIND #define ELF_ST_TYPE ELF64_ST_TYPE - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/