Bug#318539: grub: FTBFS: Invalid storage class for function
Y Giridhar Appaji Nag
debian at appaji.net
Sun Aug 7 00:00:00 UTC 2005
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 <okuji at kuicr.kyoto-u.ac.jp>
[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/
-------------- next part --------------
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
-------------- next part --------------
--- 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"
-------------- next part --------------
--- 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;
-------------- next part --------------
--- 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
More information about the Pkg-grub-devel
mailing list