Okuji, Here is a patch against grub legacy to make it compile with gcc 4.0 do you think it could be applied to CVS?
Thanks. ----- Forwarded message from Y Giridhar Appaji Nag <[EMAIL PROTECTED]> ----- > Date: Sun, 7 Aug 2005 05:30:00 +0530 > From: Y Giridhar Appaji Nag <[EMAIL PROTECTED]> > To: Daniel Schepler <[EMAIL PROTECTED]>, [EMAIL PROTECTED] > Subject: Bug#318539: grub: FTBFS: Invalid storage class for function > > On 05/07/15 20:31 -0700, Daniel Schepler said ... > > builtins.c: In function 'blocklist_func': > > builtins.c:145: error: invalid storage class for function > > 'disk_read_blocklist_func' > > builtins.c:145: warning: no previous prototype for > > 'disk_read_blocklist_func' > > builtins.c: In function 'color_func': > > builtins.c:609: error: invalid storage class for function 'color_number' > > builtins.c:609: warning: no previous prototype for 'color_number' > > There were multiple issues in getting grub compiled with gcc 4.0. The > patches and explanation for some of these included here. > > 1. static vars in smp-imps.c are extern in smp-imps.h and smp-imps.h is > #included in smp-imps.c. > > 2. subfuctions used in builtins.c, char_io.c, device.c and asmstub.c are > static. The savedefault_helper should be declared before use. > > 3. console_current_color variable is extern from term.h but declared as > static and initialised in asmstub.c > > gcc4.0 doesn't allow any of these with the current flags used to compile > grub. > > smp-imps.diff, static_subfunc.diff and console_current_color.diff fix > the above three respectively. And can be included from debian/patches > with 00list.patch applied. > > However, there are a few more issues: > > 1. -fwritable-strings is used by grub ... > > and from ChangeLog > > 1999-03-26 OKUJI Yoshinori <[EMAIL PROTECTED]> > [snip] > * grub/Makefile.am (CPPFLAGS): Use -fwritable-strings, because > grub assumes that all strings resides at the data section. > > ... but gcc 4.0 no longer accepts the -fwritable-strings option. It is > recommended that character arrays be used for writable strings. > > With the above patches applied I was able to compile, and after removing > -fwritable-strings from {grub,stage2}/Makefile.{am,in}, I managed to > successfully build a grub_0.95+cvs20040624-17_i386.deb using > 'dpkg-buildpackage -B -uc -rfakeroot'. > > 2. 'dpkg-buildpackage -b -uc -rfakeroot' doesn't work inspite of the > above patches. > > Giridhar > > -- > Y Giridhar Appaji Nag | http://www.appaji.net/ > diff -Nur grub-0.95+cvs20040624.orig/stage2/smp-imps.c > grub-0.95+cvs20040624/stage2/smp-imps.c > --- grub-0.95+cvs20040624.orig/stage2/smp-imps.c 2001-12-11 > 13:19:16.000000000 +0530 > +++ grub-0.95+cvs20040624/stage2/smp-imps.c 2005-08-07 03:25:57.000000000 > +0530 > @@ -246,19 +246,45 @@ > }; > > /* > - * Exported globals here. > + * Private globals here. > + */ > + > +/* > + * "imps_any_new_apics" is non-zero if any of the APICS (local or I/O) > + * are *not* an 82489DX. This is useful to determine if more than 15 > + * CPUs can be supported (true if zero). > */ > > static int imps_any_new_apics = 0; > -#if 0 > -volatile int imps_release_cpus = 0; > -#endif > + > +/* > + * "imps_enabled" is non-zero if the probe sequence found IMPS > + * information and was successful. > + */ > + > static int imps_enabled = 0; > -static int imps_num_cpus = 1; > + > +/* > + * This contains the local APIC hardware address. > + */ > + > static unsigned imps_lapic_addr = ((unsigned) (&lapic_dummy)) - LAPIC_ID; > + > +/* > + * This represents the number of CPUs found. > + */ > + > +static int imps_num_cpus = 1; > + > +/* > + * These map from virtual cpu numbers to APIC id's and back. > + */ > static unsigned char imps_cpu_apic_map[IMPS_MAX_CPUS]; > static unsigned char imps_apic_cpu_map[IMPS_MAX_CPUS]; > > +#if 0 > +volatile int imps_release_cpus = 0; > +#endif > > /* > * MPS checksum function > diff -Nur grub-0.95+cvs20040624.orig/stage2/smp-imps.h > grub-0.95+cvs20040624/stage2/smp-imps.h > --- grub-0.95+cvs20040624.orig/stage2/smp-imps.h 1999-06-24 > 05:33:28.000000000 +0530 > +++ grub-0.95+cvs20040624/stage2/smp-imps.h 2005-08-07 03:25:57.000000000 > +0530 > @@ -177,41 +177,6 @@ > unsigned char dest_apic_intin; > }; > > - > -/* > - * Exported globals here. > - */ > - > -/* > - * "imps_any_new_apics" is non-zero if any of the APICS (local or I/O) > - * are *not* an 82489DX. This is useful to determine if more than 15 > - * CPUs can be supported (true if zero). > - */ > -extern int imps_any_new_apics; > - > -/* > - * "imps_enabled" is non-zero if the probe sequence found IMPS > - * information and was successful. > - */ > -extern int imps_enabled; > - > -/* > - * This contains the local APIC hardware address. > - */ > -extern unsigned imps_lapic_addr; > - > -/* > - * This represents the number of CPUs found. > - */ > -extern int imps_num_cpus; > - > -/* > - * These map from virtual cpu numbers to APIC id's and back. > - */ > -extern unsigned char imps_cpu_apic_map[IMPS_MAX_CPUS]; > -extern unsigned char imps_apic_cpu_map[IMPS_MAX_CPUS]; > - > - > /* > * This is the primary function for probing for Intel MPS 1.1/1.4 > * compatible hardware and BIOS information. While probing the CPUs > --- grub-0.95+cvs20040624.orig/stage2/builtins.c 2005-08-07 > 03:40:20.000000000 +0530 > +++ grub-0.95+cvs20040624/stage2/builtins.c 2005-08-07 03:39:26.000000000 > +0530 > @@ -141,7 +141,7 @@ > > /* Collect contiguous blocks into one entry as many as possible, > and print the blocklist notation on the screen. */ > - static void disk_read_blocklist_func (int sector, int offset, int length) > + void disk_read_blocklist_func (int sector, int offset, int length) > { > if (num_sectors > 0) > { > @@ -605,7 +605,7 @@ > }; > > /* Convert the color name STR into the magical number. */ > - static int color_number (char *str) > + int color_number (char *str) > { > char *ptr; > int i; > @@ -773,13 +773,15 @@ > > > /* default */ > +#ifndef GRUB_UTIL > +static int savedefault_helper(int); > +#endif > static int > default_func (char *arg, int flags) > { > #ifndef SUPPORT_DISKLESS > #ifndef GRUB_UTIL > /* Has a forced once-only default been specified? */ > - static int savedefault_helper(int); > if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) > { > default_entry = saved_entryno & ~STAGE2_ONCEONLY_ENTRY; > @@ -1906,7 +1908,7 @@ > #endif /* GRUB_UTIL */ > > /* Save the first sector of Stage2 in STAGE2_SECT. */ > - static void disk_read_savesect_func (int sector, int offset, int length) > + void disk_read_savesect_func (int sector, int offset, int length) > { > if (debug) > printf ("[%d]", sector); > @@ -1922,7 +1924,7 @@ > > /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and > INSTALLSECT. */ > - static void disk_read_blocklist_func (int sector, int offset, int length) > + void disk_read_blocklist_func (int sector, int offset, int length) > { > if (debug) > printf("[%d]", sector); > @@ -3767,7 +3769,7 @@ > int to_code, from_code; > int map_in_interrupt = 0; > > - static int find_key_code (char *key) > + int find_key_code (char *key) > { > int i; > > @@ -3784,7 +3786,7 @@ > return 0; > } > > - static int find_ascii_code (char *key) > + int find_ascii_code (char *key) > { > int i; > > --- grub-0.95+cvs20040624.orig/stage2/char_io.c 2005-08-07 > 03:40:20.000000000 +0530 > +++ grub-0.95+cvs20040624/stage2/char_io.c 2005-08-07 03:48:34.000000000 > +0530 > @@ -1206,7 +1206,7 @@ > memcheck (unsigned long addr, unsigned long len) > { > #ifdef GRUB_UTIL > - static unsigned long start_addr (void) > + unsigned long start_addr (void) > { > int ret; > # if defined(HAVE_START_SYMBOL) > @@ -1217,7 +1217,7 @@ > return ret; > } > > - static unsigned long end_addr (void) > + unsigned long end_addr (void) > { > int ret; > # if defined(HAVE_END_SYMBOL) > --- grub-0.95+cvs20040624.orig/lib/device.c 2005-08-07 03:40:20.000000000 > +0530 > +++ grub-0.95+cvs20040624/lib/device.c 2005-08-07 03:57:45.000000000 > +0530 > @@ -505,12 +505,12 @@ > static int > read_device_map (FILE *fp, char **map, const char *map_file) > { > - static void show_error (int no, const char *msg) > + void show_error (int no, const char *msg) > { > fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg); > } > > - static void show_warning (int no, const char *msg, ...) > + void show_warning (int no, const char *msg, ...) > { > va_list ap; > > --- grub-0.95+cvs20040624.orig/grub/asmstub.c 2004-03-12 23:01:51.000000000 > +0530 > +++ grub-0.95+cvs20040624/grub/asmstub.c 2005-08-07 04:04:26.000000000 > +0530 > @@ -115,7 +115,7 @@ > > /* We need a nested function so that we get a clean stack frame, > regardless of how the code is optimized. */ > - static volatile void doit () > + volatile void doit () > { > /* Make sure our stack lives in the simulated memory area. */ > asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" > --- grub-0.95+cvs20040624.orig/grub/asmstub.c 2004-03-12 23:01:51.000000000 > +0530 > +++ grub-0.95+cvs20040624/grub/asmstub.c 2005-08-07 04:25:32.000000000 > +0530 > @@ -90,7 +90,7 @@ > static jmp_buf env_for_exit; > > /* The current color for console. */ > -static int console_current_color = A_NORMAL; > +console_current_color = A_NORMAL; > > /* The file descriptor for a serial device. */ > static int serial_fd = -1; > --- grub-0.95+cvs20040624.orig/debian/patches/00list 2005-08-07 > 04:54:47.000000000 +0530 > +++ grub-0.95+cvs20040624/debian/patches/00list 2005-08-07 > 04:55:00.000000000 +0530 > @@ -10,3 +10,6 @@ > 2gb_limit.diff > kfreebsd.diff > grub-special_device_names.diff > +smp-imps.diff > +static_subfunc.diff > +console_current_color.diff > _______________________________________________ > Pkg-grub-devel mailing list > [EMAIL PROTECTED] > http://lists.alioth.debian.org/mailman/listinfo/pkg-grub-devel ----- End forwarded message ----- -- Jason Thomas Link Innovations - 02 9634 0400 http://www.linkinnovations.com/ _______________________________________________ Bug-grub mailing list Bug-grub@gnu.org http://lists.gnu.org/mailman/listinfo/bug-grub