[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
address@hidden: Bug#318539: grub: FTBFS: Invalid storage class for funct
From: |
Jason Thomas |
Subject: |
address@hidden: Bug#318539: grub: FTBFS: Invalid storage class for function] |
Date: |
Mon, 8 Aug 2005 12:47:23 +1000 |
User-agent: |
Mutt/1.5.9i |
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 <address@hidden> -----
> Date: Sun, 7 Aug 2005 05:30:00 +0530
> From: Y Giridhar Appaji Nag <address@hidden>
> To: Daniel Schepler <address@hidden>, address@hidden
> 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 <address@hidden>
> [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
> address@hidden
> http://lists.alioth.debian.org/mailman/listinfo/pkg-grub-devel
----- End forwarded message -----
--
Jason Thomas
Link Innovations - 02 9634 0400
http://www.linkinnovations.com/
- address@hidden: Bug#318539: grub: FTBFS: Invalid storage class for function],
Jason Thomas <=