From: Michael Tremer Date: Mon, 20 Aug 2012 10:15:42 +0000 (+0200) Subject: grub: Replace patchset. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=98603963381ca8c7396d68786ddf4f1e32f650e5;p=people%2Fmfischer%2Fipfire-2.x.git grub: Replace patchset. --- diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index e466ff0f57..3e1ec189fd 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -7,11 +7,13 @@ boot/grub/stage2 #usr/info/grub.info #usr/info/multiboot.info #usr/man/man1/mbchk.1 +#usr/man/man8/grub-crypt.8 #usr/man/man8/grub-install.8 #usr/man/man8/grub-md5-crypt.8 #usr/man/man8/grub-terminfo.8 #usr/man/man8/grub.8 usr/sbin/grub +usr/sbin/grub-crypt usr/sbin/grub-install usr/sbin/grub-md5-crypt usr/sbin/grub-terminfo diff --git a/lfs/grub b/lfs/grub index ad6e304aa6..56935f0f7e 100644 --- a/lfs/grub +++ b/lfs/grub @@ -32,7 +32,8 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) SUP_ARCH = i586 -CFLAGS = +CFLAGS = -O0 -fno-reorder-functions -fno-strict-aliasing -Wall -Werror \ + -Wno-shadow -Wno-unused -Wno-pointer-sign CXXFLAGS = ############################################################################### @@ -73,54 +74,15 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-disk_geometry-1.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.90-append.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.90-symlinkmenulst.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.91-splashimagehelp.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.93-configfile.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/grub-0.93-endedit.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.93-graphics-bootterm.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.93-special-device-names.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.94-i2o.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-graphics.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-hiddenmenu-tweak.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-md.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-md-rework.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-md-mbr.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-moreraid.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-nonmbr.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-odirect.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-recheck-bad.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-staticcurses.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-xpmjunk.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-cmdline-size.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-datadir.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-dmraid.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-dmraid-partition-names.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-install.in.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-mactel-kbd.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-mpath.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-nxstack.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-nx-multiinstall.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-once.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.95-splash-error-term.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.94-installcopyonly.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-prototypes.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-stderr.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-bz429187-cciss.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-dmraid-recheck-bad.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97-mdadm-path.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97_grub-install_virtio.patch - - # XXX Does not work anymore - #cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-0.97_grub-install_virtio.patch - - cd $(DIR_APP) && perl -pi -e 's,/usr/lib/grub/i386-pc,/usr/share/grub/i386-pc,' docs/grub.texi - cd $(DIR_APP) && sed -i 's/AM_INIT_AUTOMAKE/&\nAM_PROG_AS/' configure.ac - - cd $(DIR_APP) && aclocal && autoheader && autoconf && automake --add-missing - cd $(DIR_APP) && CFLAGS="-Os -s -fno-strict-aliasing" ./configure --prefix=/usr + # Applying patches. + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-fedora-18.patch + cd $(DIR_APP) && autoreconf + cd $(DIR_APP) && autoconf + + # Build. + cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr \ + --disable-auto-linux-mem-opt cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install diff --git a/src/patches/grub-0.90-append.patch b/src/patches/grub-0.90-append.patch deleted file mode 100644 index 88f79d0fdb..0000000000 --- a/src/patches/grub-0.90-append.patch +++ /dev/null @@ -1,111 +0,0 @@ ---- grub-0.90/stage2/stage2.c.append Thu Dec 20 08:20:48 2001 -+++ grub-0.90/stage2/stage2.c Thu Dec 20 17:01:20 2001 -@@ -500,7 +500,8 @@ - if (config_entries) - printf ("\ - Press enter to boot the selected OS, \'e\' to edit the\n\ -- commands before booting, or \'c\' for a command-line."); -+ commands before booting, \'a\' to modify the kernel arguments\n\ -+ before booting, or \'c\' for a command-line."); - else - printf ("\ - Press \'b\' to boot, \'e\' to edit the selected command in the\n\ -@@ -787,6 +788,98 @@ - enter_cmdline (heap, 0); - goto restart; - } -+ if (config_entries && c == 'a') -+ { -+ int new_num_entries = 0, i = 0, j; -+ int needs_padding, amount; -+ char *new_heap; -+ char * entries; -+ char * entry_copy; -+ char * append_line; -+ char * start; -+ -+ entry_copy = new_heap = heap; -+ cur_entry = get_entry (config_entries, first_entry + entryno, -+ 1); -+ -+ do -+ { -+ while ((*(new_heap++) = cur_entry[i++]) != 0); -+ new_num_entries++; -+ } -+ while (config_entries && cur_entry[i]); -+ -+ /* this only needs to be done if config_entries is non-NULL, -+ but it doesn't hurt to do it always */ -+ *(new_heap++) = 0; -+ -+ new_heap = heap + NEW_HEAPSIZE + 1; -+ -+ entries = entry_copy; -+ while (*entries) -+ { -+ if ((strstr(entries, "kernel") == entries) && -+ isspace(entries[6])) -+ break; -+ -+ while (*entries) entries++; -+ entries++; -+ } -+ -+ if (!*entries) -+ goto restart; -+ -+ start = entries + 6; -+ -+ /* skip the white space */ -+ while (*start && isspace(*start)) start++; -+ /* skip the kernel name */ -+ while (*start && !isspace(*start)) start++; -+ -+ /* skip the white space */ -+ needs_padding = (!*start || !isspace(*start)); -+ while (*start && isspace(*start)) start++; -+ -+ append_line = new_heap; -+ grub_strcpy(append_line, start); -+ -+ cls(); -+ print_cmdline_message (CMDLINE_EDIT_MODE); -+ -+ if (get_cmdline(PACKAGE " append> ", -+ append_line, NEW_HEAPSIZE + 1, -+ 0, 1)) -+ goto restart; -+ -+ /* have new args; append_line points to the -+ new args and start points to the old -+ args */ -+ -+ i = grub_strlen(start); -+ j = grub_strlen(append_line); -+ -+ if (i > (j + needs_padding)) -+ amount = i; -+ else -+ amount = j + needs_padding; -+ -+ /* align rest of commands properly */ -+ memmove (start + j + needs_padding, start + i, -+ ((int) append_line) - ((int) start) - (amount)); -+ -+ if (needs_padding) -+ *start = ' '; -+ -+ /* copy command to correct area */ -+ memmove (start + needs_padding, append_line, j); -+ -+ /* set up this entry to boot */ -+ config_entries = NULL; -+ cur_entry = entry_copy; -+ heap = new_heap; -+ -+ break; -+ } - #ifdef GRUB_UTIL - if (c == 'q') - { diff --git a/src/patches/grub-0.90-symlinkmenulst.patch b/src/patches/grub-0.90-symlinkmenulst.patch deleted file mode 100644 index 553d15a6c0..0000000000 --- a/src/patches/grub-0.90-symlinkmenulst.patch +++ /dev/null @@ -1,16 +0,0 @@ -Only in grub: ChangeLog~ -diff -ur grub-0.90/util/grub-install.in grub/util/grub-install.in ---- grub-0.90/util/grub-install.in Wed Sep 5 15:50:06 2001 -+++ grub/util/grub-install.in Wed Sep 5 15:50:24 2001 -@@ -320,6 +320,10 @@ - exit 1 - fi - -+if ! test -e ${grubdir}/grub.conf ; then -+ test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf -+fi -+ - # Create a safe temporary file. - test -x /bin/mktemp && log_file=`/bin/mktemp /tmp/grub-install.log.XXXXXX` - -Only in grub/util: grub-install.in.orig diff --git a/src/patches/grub-0.91-splashimagehelp.patch b/src/patches/grub-0.91-splashimagehelp.patch deleted file mode 100644 index cc78073504..0000000000 --- a/src/patches/grub-0.91-splashimagehelp.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff -ur grub-0.91/docs/grub.texi grub/docs/grub.texi ---- grub-0.91/docs/grub.texi Mon Jan 21 22:57:46 2002 -+++ grub/docs/grub.texi Mon Jan 21 22:57:51 2002 -@@ -1891,6 +1891,7 @@ - * rarp:: Initialize a network device via RARP - * serial:: Set up a serial device - * setkey:: Configure the key map -+* splashimage:: Use a splash image - * terminal:: Choose a terminal - * tftpserver:: Specify a TFTP server - * unhide:: Unhide a partition -@@ -2260,6 +2261,16 @@ - @end deffn - - -+@node splashimage -+@subsection splashimage -+ -+@deffn Command splashimage file -+Select an image to use as the background image. This should be -+specified using normal GRUB device naming syntax. The format of the -+file is a gzipped xpm which is 640x480 with a 14 color palette. -+@end deffn -+ -+ - @node terminal - @subsection terminal - diff --git a/src/patches/grub-0.93-configfile.patch b/src/patches/grub-0.93-configfile.patch deleted file mode 100644 index 9cb1182471..0000000000 --- a/src/patches/grub-0.93-configfile.patch +++ /dev/null @@ -1,75 +0,0 @@ ---- grub-0.93/stage2/asm.S.config 2002-12-02 18:18:56.000000000 -0500 -+++ grub-0.93/stage2/asm.S 2002-12-28 22:01:24.000000000 -0500 -@@ -97,7 +97,7 @@ - .string VERSION - VARIABLE(config_file) - #ifndef STAGE1_5 -- .string "/boot/grub/menu.lst" -+ .string "/boot/grub/grub.conf" - #else /* STAGE1_5 */ - .long 0xffffffff - .string "/boot/grub/stage2" ---- grub-0.93/stage2/builtins.c.config 2002-12-03 23:41:57.000000000 -0500 -+++ grub-0.93/stage2/builtins.c 2002-12-28 22:01:24.000000000 -0500 -@@ -3838,7 +3838,7 @@ - - /* The prefix was determined. */ - grub_sprintf (stage2, "%s%s", prefix, "/stage2"); -- grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst"); -+ grub_sprintf (config_filename, "%s%s", prefix, "/grub.conf"); - *real_config_filename = 0; - - /* Check if stage2 exists. */ ---- grub-0.93/grub/asmstub.c.config 2002-12-02 18:20:45.000000000 -0500 -+++ grub-0.93/grub/asmstub.c 2002-12-28 22:01:24.000000000 -0500 -@@ -71,7 +71,7 @@ - unsigned long boot_drive = 0; - int saved_entryno = 0; - char version_string[] = VERSION; --char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */ -+char config_file[128] = "/boot/grub/grub.conf"; /* FIXME: arbitrary */ - unsigned long linux_text_len = 0; - char *linux_data_tmp_addr = 0; - char *linux_data_real_addr = 0; ---- grub-0.93/docs/grub.8.config 2002-12-07 22:17:59.000000000 -0500 -+++ grub-0.93/docs/grub.8 2002-12-28 22:01:24.000000000 -0500 -@@ -15,7 +15,7 @@ - specify stage2 boot_drive [default=0x0] - .TP - \fB\-\-config\-file\fR=\fIFILE\fR --specify stage2 config_file [default=/boot/grub/menu.lst] -+specify stage2 config_file [default=/boot/grub/grub.conf] - .TP - \fB\-\-device\-map\fR=\fIFILE\fR - use the device map file FILE ---- grub-0.93/docs/grub.texi.config 2002-12-02 17:35:28.000000000 -0500 -+++ grub-0.93/docs/grub.texi 2002-12-28 22:01:24.000000000 -0500 -@@ -989,7 +989,7 @@ - keys) that will do everything to boot an OS. - - To enable the menu, you need a configuration file, --@file{menu.lst} under the boot directory. We'll analyze an example -+@file{grub.conf} under the boot directory. We'll analyze an example - file. - - The file first contains some general settings, the menu interface -@@ -1596,8 +1596,8 @@ - - An absolute file name resembles a Unix absolute file name, using - @samp{/} for the directory separator (not @samp{\} as in DOS). One --example is @samp{(hd0,0)/boot/grub/menu.lst}. This means the file --@file{/boot/grub/menu.lst} in the first partition of the first hard -+example is @samp{(hd0,0)/boot/grub/grub.conf}. This means the file -+@file{/boot/grub/grub.conf} in the first partition of the first hard - disk. If you omit the device name in an absolute file name, GRUB uses - GRUB's @dfn{root device} implicitly. So if you set the root device to, - say, @samp{(hd1,0)} by the command @command{root} (@pxref{root}), then -@@ -3249,7 +3249,7 @@ - - @item --config-file=@var{file} - Read the configuration file @var{file} instead of --@file{/boot/grub/menu.lst}. The format is the same as the normal GRUB -+@file{/boot/grub/grub.conf}. The format is the same as the normal GRUB - syntax. See @ref{Filesystem}, for more information. - - @item --boot-drive=@var{drive} diff --git a/src/patches/grub-0.93-endedit.patch b/src/patches/grub-0.93-endedit.patch deleted file mode 100644 index eb0463cb22..0000000000 --- a/src/patches/grub-0.93-endedit.patch +++ /dev/null @@ -1,77 +0,0 @@ -Index: stage2/cmdline.c -=================================================================== -RCS file: /cvsroot/grub/grub/stage2/cmdline.c,v -retrieving revision 1.27 -diff -u -r1.27 cmdline.c ---- stage2/cmdline.c 3 Dec 2002 00:02:53 -0000 1.27 -+++ stage2/cmdline.c 6 Jan 2003 05:33:33 -0000 -@@ -48,12 +48,17 @@ - - /* Print a helpful message for the command-line interface. */ - void --print_cmdline_message (int forever) -+print_cmdline_message (int type) - { - printf (" [ Minimal BASH-like line editing is supported. For the first word, TAB\n" - " lists possible command completions. Anywhere else TAB lists the possible\n" -- " completions of a device/filename.%s ]\n", -- (forever ? "" : " ESC at any time exits.")); -+ " completions of a device/filename."); -+ if (type == CMDLINE_NORMAL_MODE) -+ printf(" ESC at any time exits."); -+ if (type == CMDLINE_EDIT_MODE) -+ printf(" ESC at any time cancels. ENTER \n" -+ " at any time accepts your changes."); -+ printf("]\n"); - } - - /* Find the builtin whose command name is COMMAND and return the -@@ -128,7 +133,7 @@ - print_network_configuration (); - grub_putchar ('\n'); - #endif -- print_cmdline_message (forever); -+ print_cmdline_message (forever ? CMDLINE_FOREVER_MODE : CMDLINE_NORMAL_MODE); - - while (1) - { -Index: stage2/shared.h -=================================================================== -RCS file: /cvsroot/grub/grub/stage2/shared.h,v -retrieving revision 1.90 -diff -u -r1.90 shared.h ---- stage2/shared.h 3 Dec 2002 00:02:53 -0000 1.90 -+++ stage2/shared.h 6 Jan 2003 05:33:33 -0000 -@@ -843,9 +843,15 @@ - void init_config (void); - char *skip_to (int after_equal, char *cmdline); - struct builtin *find_command (char *command); --void print_cmdline_message (int forever); - void enter_cmdline (char *heap, int forever); - int run_script (char *script, char *heap); -+ -+/* the flags for the cmdline message */ -+#define CMDLINE_FOREVER_MODE 0x0 -+#define CMDLINE_NORMAL_MODE 0x1 -+#define CMDLINE_EDIT_MODE 0x2 -+ -+void print_cmdline_message (int type); - #endif - - /* C library replacement functions with identical semantics. */ -Index: stage2/stage2.c -=================================================================== -RCS file: /cvsroot/grub/grub/stage2/stage2.c,v -retrieving revision 1.42 -diff -u -r1.42 stage2.c ---- stage2/stage2.c 4 Dec 2002 00:55:45 -0000 1.42 -+++ stage2/stage2.c 6 Jan 2003 05:33:33 -0000 -@@ -655,7 +655,7 @@ - else - { - cls (); -- print_cmdline_message (0); -+ print_cmdline_message (CMDLINE_EDIT_MODE); - - new_heap = heap + NEW_HEAPSIZE + 1; - diff --git a/src/patches/grub-0.93-graphics-bootterm.patch b/src/patches/grub-0.93-graphics-bootterm.patch deleted file mode 100644 index 1e2be9aacd..0000000000 --- a/src/patches/grub-0.93-graphics-bootterm.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- grub-0.93/stage2/builtins.c.bootterm 2002-12-29 02:01:50.000000000 -0500 -+++ grub-0.93/stage2/builtins.c 2002-12-29 02:01:07.000000000 -0500 -@@ -233,12 +233,22 @@ - static int - boot_func (char *arg, int flags) - { -+ struct term_entry *prev_term = current_term; - /* Clear the int15 handler if we can boot the kernel successfully. - This assumes that the boot code never fails only if KERNEL_TYPE is - not KERNEL_TYPE_NONE. Is this assumption is bad? */ - if (kernel_type != KERNEL_TYPE_NONE) - unset_int15_handler (); - -+ /* if our terminal needed initialization, we should shut it down -+ * before booting the kernel, but we want to save what it was so -+ * we can come back if needed */ -+ if (current_term->shutdown) -+ { -+ (*current_term->shutdown)(); -+ current_term = term_table; /* assumption: console is first */ -+ } -+ - #ifdef SUPPORT_NETBOOT - /* Shut down the networking. */ - cleanup_net (); -@@ -302,6 +312,13 @@ - return 1; - } - -+ /* if we get back here, we should go back to what our term was before */ -+ current_term = prev_term; -+ if (current_term->startup) -+ /* if our terminal fails to initialize, fall back to console since -+ * it should always work */ -+ if ((*current_term->startup)() == 0) -+ current_term = term_table; /* we know that console is first */ - return 0; - } - diff --git a/src/patches/grub-0.93-special-device-names.patch b/src/patches/grub-0.93-special-device-names.patch deleted file mode 100644 index 894f3e8872..0000000000 --- a/src/patches/grub-0.93-special-device-names.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- grub-0.93/lib/device.c.raid 2002-05-20 05:53:46.000000000 -0400 -+++ grub-0.93/lib/device.c 2002-12-28 23:24:10.000000000 -0500 -@@ -689,7 +689,14 @@ - if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) - strcpy (dev + strlen(dev) - 5, "/part"); - } -- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); -+ -+ sprintf (dev + strlen(dev), "%s%d", -+ /* Compaq smart and others */ -+ (strncmp(dev, "/dev/ida/", 9) == 0 || -+ strncmp(dev, "/dev/ataraid/", 13) == 0 || -+ strncmp(dev, "/dev/cciss/", 11) == 0 || -+ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "", -+ ((partition >> 16) & 0xFF) + 1); - - /* Open the partition. */ - fd = open (dev, O_RDWR); diff --git a/src/patches/grub-0.94-i2o.patch b/src/patches/grub-0.94-i2o.patch deleted file mode 100644 index 2af846c90f..0000000000 --- a/src/patches/grub-0.94-i2o.patch +++ /dev/null @@ -1,45 +0,0 @@ -Only in grub-0.94/docs: grub.info -Only in grub-0.94/docs: multiboot.info -diff -ur grub-0.94/lib/device.c grub-0.94.new/lib/device.c ---- grub-0.94/lib/device.c 2004-05-07 04:50:36.375238696 +0200 -+++ grub-0.94.new/lib/device.c 2004-05-07 04:48:57.611253104 +0200 -@@ -419,6 +419,12 @@ - { - sprintf (name, "/dev/rd/c%dd%d", controller, drive); - } -+ -+static void -+get_i2o_disk_name (char *name, int unit) -+{ -+ sprintf (name, "/dev/i2o/hd%c", unit + 'a'); -+} - #endif - - /* Check if DEVICE can be read. If an error occurs, return zero, -@@ -789,6 +795,26 @@ - } - } - } -+ -+ /* I2O disks. */ -+ for (i = 0; i < 8; i++) -+ { -+ char name[16]; -+ -+ get_i2o_disk_name (name, i); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ - #endif /* __linux__ */ - - /* OK, close the device map file if opened. */ diff --git a/src/patches/grub-0.94-installcopyonly.patch b/src/patches/grub-0.94-installcopyonly.patch deleted file mode 100644 index a2e38fbd5e..0000000000 --- a/src/patches/grub-0.94-installcopyonly.patch +++ /dev/null @@ -1,85 +0,0 @@ ---- grub-0.94/util/grub-install.in.copyonly 2004-02-02 16:33:29.172127985 -0500 -+++ grub-0.94/util/grub-install.in 2004-02-02 16:34:26.027454320 -0500 -@@ -40,6 +40,7 @@ - force_lba= - recheck=no - debug=no -+justcopy=no - - # look for secure tempfile creation wrappers on this platform - if test -x /bin/tempfile; then -@@ -221,6 +222,17 @@ - echo "$tmp_fname" - } - -+copy_images() { -+ # Copy the GRUB images to the GRUB directory. -+ for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -+ rm -f $file || exit 1 -+ done -+ for file in \ -+ ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do -+ cp -f $file ${grubdir} || exit 1 -+ done -+} -+ - # Check the arguments. - for option in "$@"; do - case "$option" in -@@ -240,6 +252,8 @@ - force_lba="--force-lba" ;; - --recheck) - recheck=yes ;; -+ --just-copy) -+ justcopy=yes ;; - # This is an undocumented feature... - --debug) - debug=yes ;; -@@ -258,12 +272,6 @@ - esac - done - --if test "x$install_device" = x; then -- echo "install_device not specified." 1>&2 -- usage -- exit 1 --fi -- - # If the debugging feature is enabled, print commands. - if test $debug = yes; then - set -x -@@ -286,6 +294,18 @@ - grubdir=${bootdir}/grub - device_map=${grubdir}/device.map - -+# if they just want the images copied, copy the images and then exit -+if test $justcopy = yes; then -+ copy_images -+ exit 0 -+fi -+ -+if test "x$install_device" = x; then -+ echo "install_device not specified." 1>&2 -+ usage -+ exit 1 -+fi -+ - # Check if GRUB is installed. - # This is necessary, because the user can specify "grub --read-only". - set $grub_shell dummy -@@ -317,14 +337,7 @@ - test -d "$bootdir" || mkdir "$bootdir" || exit 1 - test -d "$grubdir" || mkdir "$grubdir" || exit 1 - --# Copy the GRUB images to the GRUB directory. --for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -- rm -f $file || exit 1 --done --for file in \ -- ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do -- cp -f $file ${grubdir} || exit 1 --done -+copy_images - - # If --recheck is specified, remove the device map, if present. - if test $recheck = yes; then diff --git a/src/patches/grub-0.95-graphics.patch b/src/patches/grub-0.95-graphics.patch deleted file mode 100644 index 0c62b77f20..0000000000 --- a/src/patches/grub-0.95-graphics.patch +++ /dev/null @@ -1,1283 +0,0 @@ ---- grub-0.95/stage2/asm.S.graphics 2004-06-18 17:35:51.932054040 -0400 -+++ grub-0.95/stage2/asm.S 2004-06-18 17:35:52.473971656 -0400 -@@ -2215,6 +2215,156 @@ - pop %ebx - pop %ebp - ret -+ -+/* graphics mode functions */ -+#ifdef SUPPORT_GRAPHICS -+VARIABLE(cursorX) -+.word 0 -+VARIABLE(cursorY) -+.word 0 -+VARIABLE(cursorCount) -+.word 0 -+VARIABLE(cursorBuf) -+.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -+ -+ -+/* -+ * int set_videomode(mode) -+ * BIOS call "INT 10H Function 0h" to set video mode -+ * Call with %ah = 0x0 -+ * %al = video mode -+ * Returns old videomode. -+ */ -+ENTRY(set_videomode) -+ push %ebp -+ push %ebx -+ push %ecx -+ -+ movb 0x10(%esp), %cl -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ xorw %bx, %bx -+ movb $0xf, %ah -+ int $0x10 /* Get Current Video mode */ -+ movb %al, %ch -+ xorb %ah, %ah -+ movb %cl, %al -+ int $0x10 /* Set Video mode */ -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ xorb %ah, %ah -+ movb %ch, %al -+ -+ pop %ecx -+ pop %ebx -+ pop %ebp -+ ret -+ -+ -+/* -+ * unsigned char * graphics_get_font() -+ * BIOS call "INT 10H Function 11h" to set font -+ * Call with %ah = 0x11 -+ */ -+ENTRY(graphics_get_font) -+ push %ebp -+ push %ebx -+ push %ecx -+ push %edx -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ movw $0x1130, %ax -+ movb $6, %bh /* font 8x16 */ -+ int $0x10 -+ movw %bp, %dx -+ movw %es, %cx -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ xorl %eax, %eax -+ movw %cx, %ax -+ shll $4, %eax -+ movw %dx, %ax -+ -+ pop %edx -+ pop %ecx -+ pop %ebx -+ pop %ebp -+ ret -+ -+ -+ -+/* -+ * graphics_set_palette(index, red, green, blue) -+ * BIOS call "INT 10H Function 10h" to set individual dac register -+ * Call with %ah = 0x10 -+ * %bx = register number -+ * %ch = new value for green (0-63) -+ * %cl = new value for blue (0-63) -+ * %dh = new value for red (0-63) -+ */ -+ -+ENTRY(graphics_set_palette) -+ push %ebp -+ push %eax -+ push %ebx -+ push %ecx -+ push %edx -+ -+ movw $0x3c8, %bx /* address write mode register */ -+ -+ /* wait vertical retrace */ -+ -+ movw $0x3da, %dx -+l1b: inb %dx, %al /* wait vertical active display */ -+ test $8, %al -+ jnz l1b -+ -+l2b: inb %dx, %al /* wait vertical retrace */ -+ test $8, %al -+ jnz l2b -+ -+ mov %bx, %dx -+ movb 0x18(%esp), %al /* index */ -+ outb %al, %dx -+ inc %dx -+ -+ movb 0x1c(%esp), %al /* red */ -+ outb %al, %dx -+ -+ movb 0x20(%esp), %al /* green */ -+ outb %al, %dx -+ -+ movb 0x24(%esp), %al /* blue */ -+ outb %al, %dx -+ -+ movw 0x18(%esp), %bx -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ movb %bl, %bh -+ movw $0x1000, %ax -+ int $0x10 -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ pop %edx -+ pop %ecx -+ pop %ebx -+ pop %eax -+ pop %ebp -+ ret -+ -+#endif /* SUPPORT_GRAPHICS */ - - /* - * getrtsecs() ---- grub-0.95/stage2/stage2.c.graphics 2004-06-18 17:35:52.314995824 -0400 -+++ grub-0.95/stage2/stage2.c 2004-06-18 17:35:52.494968464 -0400 -@@ -233,6 +233,7 @@ - { - int c, time1, time2 = -1, first_entry = 0; - char *cur_entry = 0; -+ struct term_entry *prev_term = NULL; - - /* - * Main loop for menu UI. -@@ -807,6 +808,15 @@ - - cls (); - setcursor (1); -+ /* if our terminal needed initialization, we should shut it down -+ * before booting the kernel, but we want to save what it was so -+ * we can come back if needed */ -+ prev_term = current_term; -+ if (current_term->shutdown) -+ { -+ (*current_term->shutdown)(); -+ current_term = term_table; /* assumption: console is first */ -+ } - - while (1) - { -@@ -838,6 +848,13 @@ - break; - } - -+ /* if we get back here, we should go back to what our term was before */ -+ current_term = prev_term; -+ if (current_term->startup) -+ /* if our terminal fails to initialize, fall back to console since -+ * it should always work */ -+ if ((*current_term->startup)() == 0) -+ current_term = term_table; /* we know that console is first */ - show_menu = 1; - goto restart; - } -@@ -1082,6 +1099,10 @@ - while (is_preset); - } - -+ /* go ahead and make sure the terminal is setup */ -+ if (current_term->startup) -+ (*current_term->startup)(); -+ - if (! num_entries) - { - /* If no acceptable config file, goto command-line, starting ---- grub-0.95/stage2/builtins.c.graphics 2004-06-18 17:35:52.370987312 -0400 -+++ grub-0.95/stage2/builtins.c 2004-06-18 17:35:52.482970288 -0400 -@@ -858,6 +858,138 @@ - }; - #endif /* SUPPORT_NETBOOT */ - -+static int terminal_func (char *arg, int flags); -+ -+#ifdef SUPPORT_GRAPHICS -+ -+static int splashimage_func(char *arg, int flags) { -+ char splashimage[64]; -+ int i; -+ -+ /* filename can only be 64 characters due to our buffer size */ -+ if (strlen(arg) > 63) -+ return 1; -+ if (flags == BUILTIN_CMDLINE) { -+ if (!grub_open(arg)) -+ return 1; -+ grub_close(); -+ } -+ -+ strcpy(splashimage, arg); -+ -+ /* get rid of TERM_NEED_INIT from the graphics terminal. */ -+ for (i = 0; term_table[i].name; i++) { -+ if (grub_strcmp (term_table[i].name, "graphics") == 0) { -+ term_table[i].flags &= ~TERM_NEED_INIT; -+ break; -+ } -+ } -+ -+ graphics_set_splash(splashimage); -+ -+ if (flags == BUILTIN_CMDLINE && graphics_inited) { -+ graphics_end(); -+ graphics_init(); -+ graphics_cls(); -+ } -+ -+ /* FIXME: should we be explicitly switching the terminal as a -+ * side effect here? */ -+ terminal_func("graphics", flags); -+ -+ return 0; -+} -+ -+static struct builtin builtin_splashimage = -+{ -+ "splashimage", -+ splashimage_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, -+ "splashimage FILE", -+ "Load FILE as the background image when in graphics mode." -+}; -+ -+ -+/* foreground */ -+static int -+foreground_func(char *arg, int flags) -+{ -+ if (grub_strlen(arg) == 6) { -+ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; -+ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; -+ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; -+ -+ foreground = (r << 16) | (g << 8) | b; -+ if (graphics_inited) -+ graphics_set_palette(15, r, g, b); -+ -+ return (0); -+ } -+ -+ return (1); -+} -+ -+static struct builtin builtin_foreground = -+{ -+ "foreground", -+ foreground_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, -+ "foreground RRGGBB", -+ "Sets the foreground color when in graphics mode." -+ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." -+}; -+ -+ -+/* background */ -+static int -+background_func(char *arg, int flags) -+{ -+ if (grub_strlen(arg) == 6) { -+ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; -+ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; -+ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; -+ -+ background = (r << 16) | (g << 8) | b; -+ if (graphics_inited) -+ graphics_set_palette(0, r, g, b); -+ return (0); -+ } -+ -+ return (1); -+} -+ -+static struct builtin builtin_background = -+{ -+ "background", -+ background_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, -+ "background RRGGBB", -+ "Sets the background color when in graphics mode." -+ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." -+}; -+ -+#endif /* SUPPORT_GRAPHICS */ -+ -+ -+/* clear */ -+static int -+clear_func() -+{ -+ if (current_term->cls) -+ current_term->cls(); -+ -+ return 0; -+} -+ -+static struct builtin builtin_clear = -+{ -+ "clear", -+ clear_func, -+ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -+ "clear", -+ "Clear the screen" -+}; -+ - - /* displayapm */ - static int -@@ -4090,7 +4222,7 @@ - }; - - --#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) -+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) - /* terminal */ - static int - terminal_func (char *arg, int flags) -@@ -4249,17 +4381,21 @@ - end: - current_term = term_table + default_term; - current_term->flags = term_flags; -- -+ - if (lines) - max_lines = lines; - else -- /* 24 would be a good default value. */ -- max_lines = 24; -- -+ max_lines = current_term->max_lines; -+ - /* If the interface is currently the command-line, - restart it to repaint the screen. */ -- if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) -+ if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){ -+ if (prev_term->shutdown) -+ prev_term->shutdown(); -+ if (current_term->startup) -+ current_term->startup(); - grub_longjmp (restart_cmdline_env, 0); -+ } - - return 0; - } -@@ -4269,7 +4405,7 @@ - "terminal", - terminal_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -- "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]", -+ "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]", - "Select a terminal. When multiple terminals are specified, wait until" - " you push any key to continue. If both console and serial are specified," - " the terminal to which you input a key first will be selected. If no" -@@ -4281,7 +4417,7 @@ - " seconds. The option --lines specifies the maximum number of lines." - " The option --silent is used to suppress messages." - }; --#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ -+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ - - - #ifdef SUPPORT_SERIAL -@@ -4809,6 +4945,9 @@ - /* The table of builtin commands. Sorted in dictionary order. */ - struct builtin *builtin_table[] = - { -+#ifdef SUPPORT_GRAPHICS -+ &builtin_background, -+#endif - &builtin_blocklist, - &builtin_boot, - #ifdef SUPPORT_NETBOOT -@@ -4816,6 +4955,7 @@ - #endif /* SUPPORT_NETBOOT */ - &builtin_cat, - &builtin_chainloader, -+ &builtin_clear, - &builtin_cmp, - &builtin_color, - &builtin_configfile, -@@ -4835,6 +4975,9 @@ - &builtin_embed, - &builtin_fallback, - &builtin_find, -+#ifdef SUPPORT_GRAPHICS -+ &builtin_foreground, -+#endif - &builtin_fstest, - &builtin_geometry, - &builtin_halt, -@@ -4878,9 +5021,12 @@ - #endif /* SUPPORT_SERIAL */ - &builtin_setkey, - &builtin_setup, --#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) -+#ifdef SUPPORT_GRAPHICS -+ &builtin_splashimage, -+#endif /* SUPPORT_GRAPHICS */ -+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) - &builtin_terminal, --#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ -+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ - #ifdef SUPPORT_SERIAL - &builtin_terminfo, - #endif /* SUPPORT_SERIAL */ ---- /dev/null 2004-02-23 16:02:56.000000000 -0500 -+++ grub-0.95/stage2/graphics.c 2004-06-18 17:35:52.488969376 -0400 -@@ -0,0 +1,552 @@ -+/* graphics.c - graphics mode support for GRUB */ -+/* Implemented as a terminal type by Jeremy Katz based -+ * on a patch by Paulo César Pereira de Andrade -+ */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2001,2002 Red Hat, Inc. -+ * Portions copyright (C) 2000 Conectiva, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+ -+ -+#ifdef SUPPORT_GRAPHICS -+ -+#include -+#include -+#include -+ -+int saved_videomode; -+unsigned char *font8x16; -+ -+int graphics_inited = 0; -+static char splashimage[64]; -+ -+#define VSHADOW VSHADOW1 -+unsigned char VSHADOW1[38400]; -+unsigned char VSHADOW2[38400]; -+unsigned char VSHADOW4[38400]; -+unsigned char VSHADOW8[38400]; -+ -+/* constants to define the viewable area */ -+const int x0 = 0; -+const int x1 = 80; -+const int y0 = 0; -+const int y1 = 30; -+ -+/* text buffer has to be kept around so that we can write things as we -+ * scroll and the like */ -+unsigned short text[80 * 30]; -+ -+/* why do these have to be kept here? */ -+int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0; -+ -+/* current position */ -+static int fontx = 0; -+static int fonty = 0; -+ -+/* global state so that we don't try to recursively scroll or cursor */ -+static int no_scroll = 0; -+ -+/* color state */ -+static int graphics_standard_color = A_NORMAL; -+static int graphics_normal_color = A_NORMAL; -+static int graphics_highlight_color = A_REVERSE; -+static int graphics_current_color = A_NORMAL; -+static color_state graphics_color_state = COLOR_STATE_STANDARD; -+ -+ -+/* graphics local functions */ -+static void graphics_setxy(int col, int row); -+static void graphics_scroll(); -+ -+/* FIXME: where do these really belong? */ -+static inline void outb(unsigned short port, unsigned char val) -+{ -+ __asm __volatile ("outb %0,%1"::"a" (val), "d" (port)); -+} -+ -+static void MapMask(int value) { -+ outb(0x3c4, 2); -+ outb(0x3c5, value); -+} -+ -+/* bit mask register */ -+static void BitMask(int value) { -+ outb(0x3ce, 8); -+ outb(0x3cf, value); -+} -+ -+ -+ -+/* Set the splash image */ -+void graphics_set_splash(char *splashfile) { -+ grub_strcpy(splashimage, splashfile); -+} -+ -+/* Get the current splash image */ -+char *graphics_get_splash(void) { -+ return splashimage; -+} -+ -+/* Initialize a vga16 graphics display with the palette based off of -+ * the image in splashimage. If the image doesn't exist, leave graphics -+ * mode. */ -+int graphics_init() -+{ -+ if (!graphics_inited) { -+ saved_videomode = set_videomode(0x12); -+ } -+ -+ if (!read_image(splashimage)) { -+ set_videomode(saved_videomode); -+ grub_printf("failed to read image\n"); -+ return 0; -+ } -+ -+ font8x16 = (unsigned char*)graphics_get_font(); -+ -+ graphics_inited = 1; -+ -+ /* make sure that the highlight color is set correctly */ -+ graphics_highlight_color = ((graphics_normal_color >> 4) | -+ ((graphics_normal_color & 0xf) << 4)); -+ -+ return 1; -+} -+ -+/* Leave graphics mode */ -+void graphics_end(void) -+{ -+ if (graphics_inited) { -+ set_videomode(saved_videomode); -+ graphics_inited = 0; -+ } -+} -+ -+/* Print ch on the screen. Handle any needed scrolling or the like */ -+void graphics_putchar(int ch) { -+ ch &= 0xff; -+ -+ graphics_cursor(0); -+ -+ if (ch == '\n') { -+ if (fonty + 1 < y1) -+ graphics_setxy(fontx, fonty + 1); -+ else -+ graphics_scroll(); -+ graphics_cursor(1); -+ return; -+ } else if (ch == '\r') { -+ graphics_setxy(x0, fonty); -+ graphics_cursor(1); -+ return; -+ } -+ -+ graphics_cursor(0); -+ -+ text[fonty * 80 + fontx] = ch; -+ text[fonty * 80 + fontx] &= 0x00ff; -+ if (graphics_current_color & 0xf0) -+ text[fonty * 80 + fontx] |= 0x100; -+ -+ graphics_cursor(0); -+ -+ if ((fontx + 1) >= x1) { -+ graphics_setxy(x0, fonty); -+ if (fonty + 1 < y1) -+ graphics_setxy(x0, fonty + 1); -+ else -+ graphics_scroll(); -+ } else { -+ graphics_setxy(fontx + 1, fonty); -+ } -+ -+ graphics_cursor(1); -+} -+ -+/* get the current location of the cursor */ -+int graphics_getxy(void) { -+ return (fontx << 8) | fonty; -+} -+ -+void graphics_gotoxy(int x, int y) { -+ graphics_cursor(0); -+ -+ graphics_setxy(x, y); -+ -+ graphics_cursor(1); -+} -+ -+void graphics_cls(void) { -+ int i; -+ unsigned char *mem, *s1, *s2, *s4, *s8; -+ -+ graphics_cursor(0); -+ graphics_gotoxy(x0, y0); -+ -+ mem = (unsigned char*)VIDEOMEM; -+ s1 = (unsigned char*)VSHADOW1; -+ s2 = (unsigned char*)VSHADOW2; -+ s4 = (unsigned char*)VSHADOW4; -+ s8 = (unsigned char*)VSHADOW8; -+ -+ for (i = 0; i < 80 * 30; i++) -+ text[i] = ' '; -+ graphics_cursor(1); -+ -+ BitMask(0xff); -+ -+ /* plano 1 */ -+ MapMask(1); -+ grub_memcpy(mem, s1, 38400); -+ -+ /* plano 2 */ -+ MapMask(2); -+ grub_memcpy(mem, s2, 38400); -+ -+ /* plano 3 */ -+ MapMask(4); -+ grub_memcpy(mem, s4, 38400); -+ -+ /* plano 4 */ -+ MapMask(8); -+ grub_memcpy(mem, s8, 38400); -+ -+ MapMask(15); -+ -+} -+ -+void graphics_setcolorstate (color_state state) { -+ switch (state) { -+ case COLOR_STATE_STANDARD: -+ graphics_current_color = graphics_standard_color; -+ break; -+ case COLOR_STATE_NORMAL: -+ graphics_current_color = graphics_normal_color; -+ break; -+ case COLOR_STATE_HIGHLIGHT: -+ graphics_current_color = graphics_highlight_color; -+ break; -+ default: -+ graphics_current_color = graphics_standard_color; -+ break; -+ } -+ -+ graphics_color_state = state; -+} -+ -+void graphics_setcolor (int normal_color, int highlight_color) { -+ graphics_normal_color = normal_color; -+ graphics_highlight_color = highlight_color; -+ -+ graphics_setcolorstate (graphics_color_state); -+} -+ -+void graphics_setcursor (int on) { -+ /* FIXME: we don't have a cursor in graphics */ -+ return; -+} -+ -+/* Read in the splashscreen image and set the palette up appropriately. -+ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and -+ * 640x480. */ -+int read_image(char *s) -+{ -+ char buf[32], pal[16]; -+ unsigned char c, base, mask, *s1, *s2, *s4, *s8; -+ unsigned i, len, idx, colors, x, y, width, height; -+ -+ if (!grub_open(s)) -+ return 0; -+ -+ /* read header */ -+ if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) { -+ grub_close(); -+ return 0; -+ } -+ -+ /* parse info */ -+ while (grub_read(&c, 1)) { -+ if (c == '"') -+ break; -+ } -+ -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ i = 0; -+ width = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ width = width * 10 + c - '0'; -+ else -+ break; -+ } -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ height = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ height = height * 10 + c - '0'; -+ else -+ break; -+ } -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ colors = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ colors = colors * 10 + c - '0'; -+ else -+ break; -+ } -+ -+ base = 0; -+ while (grub_read(&c, 1) && c != '"') -+ ; -+ -+ /* palette */ -+ for (i = 0, idx = 1; i < colors; i++) { -+ len = 0; -+ -+ while (grub_read(&c, 1) && c != '"') -+ ; -+ grub_read(&c, 1); /* char */ -+ base = c; -+ grub_read(buf, 4); /* \t c # */ -+ -+ while (grub_read(&c, 1) && c != '"') { -+ if (len < sizeof(buf)) -+ buf[len++] = c; -+ } -+ -+ if (len == 6 && idx < 15) { -+ int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2; -+ int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2; -+ int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2; -+ -+ pal[idx] = base; -+ graphics_set_palette(idx, r, g, b); -+ ++idx; -+ } -+ } -+ -+ x = y = len = 0; -+ -+ s1 = (unsigned char*)VSHADOW1; -+ s2 = (unsigned char*)VSHADOW2; -+ s4 = (unsigned char*)VSHADOW4; -+ s8 = (unsigned char*)VSHADOW8; -+ -+ for (i = 0; i < 38400; i++) -+ s1[i] = s2[i] = s4[i] = s8[i] = 0; -+ -+ /* parse xpm data */ -+ while (y < height) { -+ while (1) { -+ if (!grub_read(&c, 1)) { -+ grub_close(); -+ return 0; -+ } -+ if (c == '"') -+ break; -+ } -+ -+ while (grub_read(&c, 1) && c != '"') { -+ for (i = 1; i < 15; i++) -+ if (pal[i] == c) { -+ c = i; -+ break; -+ } -+ -+ mask = 0x80 >> (x & 7); -+ if (c & 1) -+ s1[len + (x >> 3)] |= mask; -+ if (c & 2) -+ s2[len + (x >> 3)] |= mask; -+ if (c & 4) -+ s4[len + (x >> 3)] |= mask; -+ if (c & 8) -+ s8[len + (x >> 3)] |= mask; -+ -+ if (++x >= 640) { -+ x = 0; -+ -+ if (y < 480) -+ len += 80; -+ ++y; -+ } -+ } -+ } -+ -+ grub_close(); -+ -+ graphics_set_palette(0, (background >> 16), (background >> 8) & 63, -+ background & 63); -+ graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, -+ foreground & 63); -+ graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, -+ border & 63); -+ -+ return 1; -+} -+ -+ -+/* Convert a character which is a hex digit to the appropriate integer */ -+int hex(int v) -+{ -+ if (v >= 'A' && v <= 'F') -+ return (v - 'A' + 10); -+ if (v >= 'a' && v <= 'f') -+ return (v - 'a' + 10); -+ return (v - '0'); -+} -+ -+ -+/* move the graphics cursor location to col, row */ -+static void graphics_setxy(int col, int row) { -+ if (col >= x0 && col < x1) { -+ fontx = col; -+ cursorX = col << 3; -+ } -+ if (row >= y0 && row < y1) { -+ fonty = row; -+ cursorY = row << 4; -+ } -+} -+ -+/* scroll the screen */ -+static void graphics_scroll() { -+ int i, j; -+ -+ /* we don't want to scroll recursively... that would be bad */ -+ if (no_scroll) -+ return; -+ no_scroll = 1; -+ -+ /* move everything up a line */ -+ for (j = y0 + 1; j < y1; j++) { -+ graphics_gotoxy(x0, j - 1); -+ for (i = x0; i < x1; i++) { -+ graphics_putchar(text[j * 80 + i]); -+ } -+ } -+ -+ /* last line should be blank */ -+ graphics_gotoxy(x0, y1 - 1); -+ for (i = x0; i < x1; i++) -+ graphics_putchar(' '); -+ graphics_setxy(x0, y1 - 1); -+ -+ no_scroll = 0; -+} -+ -+ -+void graphics_cursor(int set) { -+ unsigned char *pat, *mem, *ptr, chr[16 << 2]; -+ int i, ch, invert, offset; -+ -+ if (set && no_scroll) -+ return; -+ -+ offset = cursorY * 80 + fontx; -+ ch = text[fonty * 80 + fontx] & 0xff; -+ invert = (text[fonty * 80 + fontx] & 0xff00) != 0; -+ pat = font8x16 + (ch << 4); -+ -+ mem = (unsigned char*)VIDEOMEM + offset; -+ -+ if (!set) { -+ for (i = 0; i < 16; i++) { -+ unsigned char mask = pat[i]; -+ -+ if (!invert) { -+ chr[i ] = ((unsigned char*)VSHADOW1)[offset]; -+ chr[16 + i] = ((unsigned char*)VSHADOW2)[offset]; -+ chr[32 + i] = ((unsigned char*)VSHADOW4)[offset]; -+ chr[48 + i] = ((unsigned char*)VSHADOW8)[offset]; -+ -+ /* FIXME: if (shade) */ -+ if (1) { -+ if (ch == DISP_VERT || ch == DISP_LL || -+ ch == DISP_UR || ch == DISP_LR) { -+ unsigned char pmask = ~(pat[i] >> 1); -+ -+ chr[i ] &= pmask; -+ chr[16 + i] &= pmask; -+ chr[32 + i] &= pmask; -+ chr[48 + i] &= pmask; -+ } -+ if (i > 0 && ch != DISP_VERT) { -+ unsigned char pmask = ~(pat[i - 1] >> 1); -+ -+ chr[i ] &= pmask; -+ chr[16 + i] &= pmask; -+ chr[32 + i] &= pmask; -+ chr[48 + i] &= pmask; -+ if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) { -+ pmask = ~pat[i - 1]; -+ -+ chr[i ] &= pmask; -+ chr[16 + i] &= pmask; -+ chr[32 + i] &= pmask; -+ chr[48 + i] &= pmask; -+ } -+ } -+ } -+ chr[i ] |= mask; -+ chr[16 + i] |= mask; -+ chr[32 + i] |= mask; -+ chr[48 + i] |= mask; -+ -+ offset += 80; -+ } -+ else { -+ chr[i ] = mask; -+ chr[16 + i] = mask; -+ chr[32 + i] = mask; -+ chr[48 + i] = mask; -+ } -+ } -+ } -+ else { -+ MapMask(15); -+ ptr = mem; -+ for (i = 0; i < 16; i++, ptr += 80) { -+ cursorBuf[i] = pat[i]; -+ *ptr = ~pat[i]; -+ } -+ return; -+ } -+ -+ offset = 0; -+ for (i = 1; i < 16; i <<= 1, offset += 16) { -+ int j; -+ -+ MapMask(i); -+ ptr = mem; -+ for (j = 0; j < 16; j++, ptr += 80) -+ *ptr = chr[j + offset]; -+ } -+ -+ MapMask(15); -+} -+ -+#endif /* SUPPORT_GRAPHICS */ ---- grub-0.95/stage2/Makefile.am.graphics 2004-06-13 13:57:27.000000000 -0400 -+++ grub-0.95/stage2/Makefile.am 2004-06-18 17:36:58.289966104 -0400 -@@ -7,7 +7,7 @@ - fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ - imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ - nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ -- terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h -+ terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h - EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) - - # For . -@@ -19,7 +19,7 @@ - disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ - fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ - fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ -- terminfo.c tparm.c -+ terminfo.c tparm.c graphics.c - libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ - -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ -@@ -80,8 +80,14 @@ - HERCULES_FLAGS = - endif - -+if GRAPHICS_SUPPORT -+GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 -+else -+GRAPHICS_FLAGS = -+endif -+ - STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) -+ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) - - STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 - STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 -@@ -91,7 +97,8 @@ - cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ - fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ -- hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c -+ hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c \ -+ graphics.c - pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) - pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) - pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) ---- grub-0.95/stage2/term.h.graphics 2003-07-09 07:45:53.000000000 -0400 -+++ grub-0.95/stage2/term.h 2004-06-18 17:35:52.496968160 -0400 -@@ -60,6 +60,8 @@ - const char *name; - /* The feature flags defined above. */ - unsigned long flags; -+ /* Default for maximum number of lines if not specified */ -+ unsigned short max_lines; - /* Put a character. */ - void (*putchar) (int c); - /* Check if any input character is available. */ -@@ -79,6 +81,11 @@ - void (*setcolor) (int normal_color, int highlight_color); - /* Turn on/off the cursor. */ - int (*setcursor) (int on); -+ -+ /* function to start a terminal */ -+ int (*startup) (void); -+ /* function to use to shutdown a terminal */ -+ void (*shutdown) (void); - }; - - /* This lists up available terminals. */ -@@ -124,4 +131,23 @@ - int hercules_setcursor (int on); - #endif - -+#ifdef SUPPORT_GRAPHICS -+extern int foreground, background, border, graphics_inited; -+ -+void graphics_set_splash(char *splashfile); -+int set_videomode (int mode); -+void graphics_putchar (int c); -+int graphics_getxy(void); -+void graphics_gotoxy(int x, int y); -+void graphics_cls(void); -+void graphics_setcolorstate (color_state state); -+void graphics_setcolor (int normal_color, int highlight_color); -+void graphics_setcursor (int on); -+int graphics_init(void); -+void graphics_end(void); -+ -+int hex(int v); -+void graphics_set_palette(int idx, int red, int green, int blue); -+#endif /* SUPPORT_GRAPHICS */ -+ - #endif /* ! GRUB_TERM_HEADER */ ---- /dev/null 2004-02-23 16:02:56.000000000 -0500 -+++ grub-0.95/stage2/graphics.h 2004-06-18 17:35:52.490969072 -0400 -@@ -0,0 +1,42 @@ -+/* graphics.h - graphics console interface */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002 Free Software Foundation, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#ifndef GRAPHICS_H -+#define GRAPHICS_H -+ -+/* magic constant */ -+#define VIDEOMEM 0xA0000 -+ -+/* function prototypes */ -+char *graphics_get_splash(void); -+ -+int read_image(char *s); -+void graphics_cursor(int set); -+ -+/* function prototypes for asm functions */ -+void * graphics_get_font(); -+void graphics_set_palette(int idx, int red, int green, int blue); -+void set_int1c_handler(); -+void unset_int1c_handler(); -+ -+extern short cursorX, cursorY; -+extern char cursorBuf[16]; -+ -+#endif /* GRAPHICS_H */ ---- grub-0.95/stage2/shared.h.graphics 2004-06-18 17:35:52.372987008 -0400 -+++ grub-0.95/stage2/shared.h 2004-06-18 17:35:52.492968768 -0400 -@@ -873,6 +873,7 @@ - int grub_tolower (int c); - int grub_isspace (int c); - int grub_strncat (char *s1, const char *s2, int n); -+void grub_memcpy(void *dest, const void *src, int len); - void *grub_memmove (void *to, const void *from, int len); - void *grub_memset (void *start, int c, int len); - int grub_strncat (char *s1, const char *s2, int n); ---- grub-0.95/stage2/char_io.c.graphics 2004-05-23 12:45:43.000000000 -0400 -+++ grub-0.95/stage2/char_io.c 2004-06-18 17:35:52.485969832 -0400 -@@ -35,6 +35,7 @@ - { - "console", - 0, -+ 24, - console_putchar, - console_checkkey, - console_getkey, -@@ -43,13 +44,16 @@ - console_cls, - console_setcolorstate, - console_setcolor, -- console_setcursor -+ console_setcursor, -+ 0, -+ 0 - }, - #ifdef SUPPORT_SERIAL - { - "serial", - /* A serial device must be initialized. */ - TERM_NEED_INIT, -+ 24, - serial_putchar, - serial_checkkey, - serial_getkey, -@@ -58,6 +62,8 @@ - serial_cls, - serial_setcolorstate, - 0, -+ 0, -+ 0, - 0 - }, - #endif /* SUPPORT_SERIAL */ -@@ -65,6 +71,7 @@ - { - "hercules", - 0, -+ 24, - hercules_putchar, - console_checkkey, - console_getkey, -@@ -73,9 +80,28 @@ - hercules_cls, - hercules_setcolorstate, - hercules_setcolor, -- hercules_setcursor -+ hercules_setcursor, -+ 0, -+ 0 - }, - #endif /* SUPPORT_HERCULES */ -+#ifdef SUPPORT_GRAPHICS -+ { "graphics", -+ TERM_NEED_INIT, /* flags */ -+ 30, /* number of lines */ -+ graphics_putchar, /* putchar */ -+ console_checkkey, /* checkkey */ -+ console_getkey, /* getkey */ -+ graphics_getxy, /* getxy */ -+ graphics_gotoxy, /* gotoxy */ -+ graphics_cls, /* cls */ -+ graphics_setcolorstate, /* setcolorstate */ -+ graphics_setcolor, /* setcolor */ -+ graphics_setcursor, /* nocursor */ -+ graphics_init, /* initialize */ -+ graphics_end /* shutdown */ -+ }, -+#endif /* SUPPORT_GRAPHICS */ - /* This must be the last entry. */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - }; -@@ -1046,13 +1072,15 @@ - the following grub_printf call will print newlines. */ - count_lines = -1; - -+ grub_printf("\n"); - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); - -- grub_printf ("\n[Hit return to continue]"); -+ grub_printf ("[Hit return to continue]"); - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_NORMAL); -+ - - do - { -@@ -1090,7 +1118,7 @@ - cls (void) - { - /* If the terminal is dumb, there is no way to clean the terminal. */ -- if (current_term->flags & TERM_DUMB) -+ if (current_term->flags & TERM_DUMB) - grub_putchar ('\n'); - else - current_term->cls (); -@@ -1214,6 +1242,16 @@ - return ! errnum; - } - -+void -+grub_memcpy(void *dest, const void *src, int len) -+{ -+ int i; -+ register char *d = (char*)dest, *s = (char*)src; -+ -+ for (i = 0; i < len; i++) -+ d[i] = s[i]; -+} -+ - void * - grub_memmove (void *to, const void *from, int len) - { ---- grub-0.95/configure.ac.graphics 2004-06-18 17:35:52.211011632 -0400 -+++ grub-0.95/configure.ac 2004-06-18 17:35:52.498967856 -0400 -@@ -595,6 +595,11 @@ - [ --enable-diskless enable diskless support]) - AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes) - -+dnl Graphical splashscreen support -+AC_ARG_ENABLE(graphics, -+ [ --disable-graphics disable graphics terminal support]) -+AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno) -+ - dnl Hercules terminal - AC_ARG_ENABLE(hercules, - [ --disable-hercules disable hercules terminal support]) diff --git a/src/patches/grub-0.95-hiddenmenu-tweak.patch b/src/patches/grub-0.95-hiddenmenu-tweak.patch deleted file mode 100644 index 56fb083e7d..0000000000 --- a/src/patches/grub-0.95-hiddenmenu-tweak.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- grub-0.95/stage2/stage2.c.hidden 2004-09-30 16:39:38.028893664 -0400 -+++ grub-0.95/stage2/stage2.c 2004-09-30 16:42:07.981097464 -0400 -@@ -235,6 +235,8 @@ - char *cur_entry = 0; - struct term_entry *prev_term = NULL; - -+ cls(); -+ - /* - * Main loop for menu UI. - */ -@@ -262,14 +264,16 @@ - /* Get current time. */ - while ((time1 = getrtsecs ()) == 0xFF) - ; -+ grub_printf("\rPress any key to enter the menu\n\n\n"); - - while (1) - { - /* Check if ESC is pressed. */ -- if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e') -+ if (checkkey () != -1) - { - grub_timeout = -1; - show_menu = 1; -+ getkey (); - break; - } - -@@ -288,7 +292,8 @@ - grub_timeout--; - - /* Print a message. */ -- grub_printf ("\rPress `ESC' to enter the menu... %d ", -+ grub_printf ("\rBooting %s in %d seconds...", -+ get_entry(menu_entries, first_entry + entryno, 0), - grub_timeout); - } - } diff --git a/src/patches/grub-0.95-md-mbr.patch b/src/patches/grub-0.95-md-mbr.patch deleted file mode 100644 index 1aaa3e9ff2..0000000000 --- a/src/patches/grub-0.95-md-mbr.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- grub-0.95/util/grub-install.in.md-mbr 2005-02-20 17:56:48.000000000 -0500 -+++ grub-0.95/util/grub-install.in 2005-02-20 17:57:12.000000000 -0500 -@@ -444,7 +444,7 @@ - /dev/*) - install_device=`resolve_symlink "$install_device"` - for install_drive in `find_real_devs $install_device` ; do -- install_drive=`convert $install_drive` -+ install_drive=`convert $install_drive | sed 's/,[0-9]*)/)/'` - if [ "x$install_drive" = "x" ]; then - exit 1 - fi diff --git a/src/patches/grub-0.95-md-rework.patch b/src/patches/grub-0.95-md-rework.patch deleted file mode 100644 index cff1977d2f..0000000000 --- a/src/patches/grub-0.95-md-rework.patch +++ /dev/null @@ -1,183 +0,0 @@ ---- grub-0.95/util/grub-install.in.md2 2005-01-03 14:49:18.133866107 -0500 -+++ grub-0.95/util/grub-install.in 2005-01-03 16:35:44.923732271 -0500 -@@ -35,6 +35,7 @@ - rootdir= - grub_prefix=/boot/grub - -+install_drives= - install_device= - no_floppy= - force_lba= -@@ -272,6 +273,30 @@ - done - } - -+ -+dump_boot_block () { -+ sync -+ $grub_shell --batch $no_floppy --device-map=$device_map <$log_file -+dump ${root_drive}${tmp} ${img_file} -+quit -+EOF -+} -+ -+ -+install_boot_block () { -+ # Before all invocations of the grub shell, call sync to make sure -+ # the raw device is in sync with any bufferring in filesystems. -+ sync -+ -+ # Now perform the installation. -+ $grub_shell --batch $no_floppy --device-map=$device_map <>$log_file -+root $1 -+setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $2 -+quit -+EOF -+} -+ -+ - # Check the arguments. - for option in "$@"; do - case "$option" in -@@ -416,28 +441,32 @@ - # Check for INSTALL_DEVICE. - case "$install_device" in - /dev/*) -- # If we are running md on a Linux box, just use the first physical device -- # at this point. - install_device=`resolve_symlink "$install_device"` -- install_device=`find_real_devs $install_device | awk '{print $1}'` -- -- install_drive=`convert "$install_device"` -- # I don't know why, but some shells wouldn't die if exit is -- # called in a function. -- if test "x$install_drive" = x; then -+ for install_drive in `find_real_devs $install_device` ; do -+ install_drive=`convert $install_drive` -+ if [ "x$install_drive" = "x" ]; then -+ exit 1 -+ fi -+ install_drives="${install_drives} ${install_drive}" -+ done -+ unset install_drive -+ -+ if test "x$install_drives" = x ; then - exit 1 - fi ;; - \([hf]d[0-9]*\)) -- install_drive="$install_device" ;; -+ install_drives="$install_device" ;; - [hf]d[0-9]*) - # The GRUB format with no parenthesis. -- install_drive="($install_device)" ;; -+ install_drives="($install_device)" ;; - *) - echo "Format of install_device not recognized." 1>&2 - usage - exit 1 ;; - esac - -+unset install_device -+ - # Get the root drive. - root_device=`find_device ${rootdir}` - bootdir_device=`find_device ${bootdir}` -@@ -465,41 +494,39 @@ - test -n "$mkimg" && img_file=`$mkimg` - test -n "$mklog" && log_file=`$mklog` - --for real_device in `find_real_devs $root_device`; do -- # Convert the root deviceto a GRUB drive. -- root_drive=`convert "$real_device"` -- if [ "x$root_drive" = x ]; then -- exit 1 -- fi -+# There's not a real root device, so just pick the first -+if is_raid1_device $root_device ; then -+ root_device=`find_real_devs $root_device | awk '{print $1}'` -+fi - -- for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -- count=5 -- tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` -- while test $count -gt 0; do -- sync -- $grub_shell --batch $no_floppy --device-map=$device_map \ -- <$log_file --dump ${root_drive}${tmp} ${img_file} --quit --EOF -- if grep "Error [0-9]*: " $log_file >/dev/null; then -- : -- elif cmp $file $img_file >/dev/null; then -- break -- fi -- sleep 1 -- count=`expr $count - 1` -- done -- if test $count -eq 0; then -- echo "The file $file not read correctly." 1>&2 -- exit 1 -- fi -- done -+# Convert the root deviceto a GRUB drive. -+root_drive=`convert "$root_device"` -+if [ "x$root_drive" = x ]; then -+ exit 1 -+fi - -- rm -f $img_file -- rm -f $log_file -+for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -+ count=5 -+ tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` -+ while test $count -gt 0; do -+ dump_boot_block $root_drive $img_file -+ if grep "Error [0-9]*: " $log_file >/dev/null; then -+ : -+ elif cmp $file $img_file >/dev/null; then -+ break -+ fi -+ sleep 1 -+ count=`expr $count - 1` -+ done -+ if test $count -eq 0; then -+ echo "The file $file not read correctly." 1>&2 -+ exit 1 -+ fi - done - -+rm -f $img_file -+rm -f $log_file -+ - if ! test -e ${grubdir}/grub.conf ; then - test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf - fi -@@ -507,24 +534,13 @@ - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - --for real_device in `find_real_devs $root_device`; do -+for install_drive in $install_drives; do - # Convert the root deviceto a GRUB drive. -- root_drive=`convert "$real_device"` -+ root_drive=`convert "$root_device"` - if [ "x$root_drive" = x ]; then - exit 1 - fi -- -- # Before all invocations of the grub shell, call sync to make sure -- # the raw device is in sync with any bufferring in filesystems. -- sync -- -- # Now perform the installation. -- $grub_shell --batch $no_floppy --device-map=$device_map <>$log_file --root $root_drive --setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $root_drive --quit --EOF -- -+ install_boot_block $root_drive $install_drive - done - - if grep "Error [0-9]*: " $log_file >/dev/null ; then diff --git a/src/patches/grub-0.95-md.patch b/src/patches/grub-0.95-md.patch deleted file mode 100644 index 9e4ff895c5..0000000000 --- a/src/patches/grub-0.95-md.patch +++ /dev/null @@ -1,183 +0,0 @@ ---- grub-0.95/util/grub-install.in.support_md 2004-12-17 17:50:45.000000000 -0500 -+++ grub-0.95/util/grub-install.in 2004-12-19 19:19:20.509409160 -0500 -@@ -207,6 +207,43 @@ - echo "$tmp_fname" - } - -+# Usage: is_raid1_device devicename -+# Returns 0 if devicename is a raid1 md device, 1 if it is not. -+is_raid1_device () { -+ case "$host_os" in -+ linux*) -+ level=`mdadm --query --detail $1 2>/dev/null | \ -+ awk '/Raid Level :/ {print $4}'` -+ if [ "$level" = "raid1" ]; then -+ return 0 -+ fi -+ ;; -+ esac -+ return 1 -+} -+ -+# Usage: find_real_devs device -+# Returns space separated list of devices for linux if device is -+# a raid1 device. In all other cases, the provided value is returned. -+find_real_devs () { -+ source_device=$1 -+ case "$host_os" in -+ linux*) -+ if is_raid1_device $source_device ; then -+ list="" -+ for device in `mdadm --query --detail "${source_device}" | \ -+ awk '/\/dev\/[^(md)]/ {print $7}'` ; do -+ list="$list $device" -+ done -+ echo $list -+ return 0 -+ fi -+ ;; -+ esac -+ echo $source_device -+ return 0 -+} -+ - # Usage: find_device file - # Find block device on which the file resides. - find_device () { -@@ -219,7 +256,7 @@ - exit 1 - fi - -- tmp_fname=`resolve_symlink $tmp_fname` -+ tmp_fname=`resolve_symlink $tmp_fname` - - echo "$tmp_fname" - } -@@ -379,7 +416,11 @@ - # Check for INSTALL_DEVICE. - case "$install_device" in - /dev/*) -+ # If we are running md on a Linux box, just use the first physical device -+ # at this point. - install_device=`resolve_symlink "$install_device"` -+ install_device=`find_real_devs $install_device | awk '{print $1}'` -+ - install_drive=`convert "$install_device"` - # I don't know why, but some shells wouldn't die if exit is - # called in a function. -@@ -408,14 +449,7 @@ - grub_prefix="/grub" - fi - --# Convert the root device to a GRUB drive. --root_drive=`convert "$root_device"` --if test "x$root_drive" = x; then -- exit 1 --fi -- --# Check if the root directory exists in the same device as the grub --# directory. -+# Check if the root directory exists in the same device as the grub directory. - grubdir_device=`find_device ${grubdir}` - - if test "x$grubdir_device" != "x$root_device"; then -@@ -431,30 +465,40 @@ - test -n "$mkimg" && img_file=`$mkimg` - test -n "$mklog" && log_file=`$mklog` - --for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -- count=5 -- tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` -- while test $count -gt 0; do -- $grub_shell --batch $no_floppy --device-map=$device_map <$log_file -+for real_device in `find_real_devs $root_device`; do -+ # Convert the root deviceto a GRUB drive. -+ root_drive=`convert "$real_device"` -+ if [ "x$root_drive" = x ]; then -+ exit 1 -+ fi -+ -+ for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -+ count=5 -+ tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` -+ while test $count -gt 0; do -+ sync -+ $grub_shell --batch $no_floppy --device-map=$device_map \ -+ <$log_file - dump ${root_drive}${tmp} ${img_file} - quit - EOF -- if grep "Error [0-9]*: " $log_file >/dev/null; then -- : -- elif cmp $file $img_file >/dev/null; then -- break -+ if grep "Error [0-9]*: " $log_file >/dev/null; then -+ : -+ elif cmp $file $img_file >/dev/null; then -+ break -+ fi -+ sleep 1 -+ count=`expr $count - 1` -+ done -+ if test $count -eq 0; then -+ echo "The file $file not read correctly." 1>&2 -+ exit 1 - fi -- sleep 1 -- count=`expr $count - 1` - done -- if test $count -eq 0; then -- echo "The file $file not read correctly." 1>&2 -- exit 1 -- fi --done - --rm -f $img_file --rm -f $log_file -+ rm -f $img_file -+ rm -f $log_file -+done - - if ! test -e ${grubdir}/grub.conf ; then - test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf -@@ -463,21 +507,33 @@ - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - --# Before all invocations of the grub shell, call sync to make sure --# the raw device is in sync with any bufferring in filesystems. --sync -+for real_device in `find_real_devs $root_device`; do -+ # Convert the root deviceto a GRUB drive. -+ root_drive=`convert "$real_device"` -+ if [ "x$root_drive" = x ]; then -+ exit 1 -+ fi -+ -+ # Before all invocations of the grub shell, call sync to make sure -+ # the raw device is in sync with any bufferring in filesystems. -+ sync - --# Now perform the installation. --$grub_shell --batch $no_floppy --device-map=$device_map <$log_file -+ # Now perform the installation. -+ $grub_shell --batch $no_floppy --device-map=$device_map <>$log_file - root $root_drive --setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive -+setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $root_drive - quit - EOF - --if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then -+done -+ -+if grep "Error [0-9]*: " $log_file >/dev/null ; then - cat $log_file 1>&2 - exit 1 - fi -+if test $debug = yes; then -+ cat $log_file 1>&2 -+fi - - rm -f $log_file - diff --git a/src/patches/grub-0.95-moreraid.patch b/src/patches/grub-0.95-moreraid.patch deleted file mode 100644 index 39db23474b..0000000000 --- a/src/patches/grub-0.95-moreraid.patch +++ /dev/null @@ -1,100 +0,0 @@ ---- grub-0.95/lib/device.c.moreraid 2004-11-30 17:09:36.736099360 -0500 -+++ grub-0.95/lib/device.c 2004-11-30 17:12:17.319686944 -0500 -@@ -544,6 +544,17 @@ - } - - static void -+get_cciss_disk_name (char * name, int controller, int drive) -+{ -+ sprintf (name, "/dev/cciss/c%dd%d", controller, drive); -+} -+ -+static void -+get_cpqarray_disk_name (char * name, int controller, int drive) -+{ -+ sprintf (name, "/dev/ida/c%dd%d", controller, drive); -+} -+static void - get_ataraid_disk_name (char *name, int unit) - { - sprintf (name, "/dev/ataraid/d%c", unit + '0'); -@@ -920,7 +931,7 @@ - - for (controller = 0; controller < 8; controller++) - { -- for (drive = 0; drive < 15; drive++) -+ for (drive = 0; drive < 32; drive++) - { - char name[24]; - -@@ -940,6 +951,70 @@ - } - } - #endif /* __linux__ */ -+ -+#ifdef __linux__ -+ /* This is for cciss - we have -+ /dev/cciss/cdp. -+ -+ cciss driver currently supports up to 8 controllers, 16 logical -+ drives, and 7 partitions. */ -+ { -+ int controller, drive; -+ -+ for (controller = 0; controller < 8; controller++) -+ { -+ for (drive = 0; drive < 16; drive++) -+ { -+ char name[24]; -+ -+ get_cciss_disk_name (name, controller, drive); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ } -+ } -+#endif /* __linux__ */ -+ -+#ifdef __linux__ -+ /* This is for cpqarray - we have -+ /dev/ida/cdp. -+ -+ cpqarray driver currently supports up to 8 controllers, 16 logical -+ drives, and 15 partitions. */ -+ { -+ int controller, drive; -+ -+ for (controller = 0; controller < 8; controller++) -+ { -+ for (drive = 0; drive < 15; drive++) -+ { -+ char name[24]; -+ -+ get_cpqarray_disk_name (name, controller, drive); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ } -+ } -+#endif /* __linux__ */ - - /* OK, close the device map file if opened. */ - if (fp) diff --git a/src/patches/grub-0.95-nonmbr.patch b/src/patches/grub-0.95-nonmbr.patch deleted file mode 100644 index 35bd5f3b30..0000000000 --- a/src/patches/grub-0.95-nonmbr.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- grub-0.95/util/grub-install.in.nonmbr 2005-03-16 10:02:50.000000000 -0500 -+++ grub-0.95/util/grub-install.in 2005-03-16 10:02:13.000000000 -0500 -@@ -444,7 +444,10 @@ - /dev/*) - install_device=`resolve_symlink "$install_device"` - for install_drive in `find_real_devs $install_device` ; do -- install_drive=`convert $install_drive | sed 's/,[0-9]*)/)/'` -+ install_drive=`convert $install_drive` -+ if is_raid1_device $install_device; then -+ install_drive=`echo $install_drive | sed 's/,[0-9]*)/)/'` -+ fi - if [ "x$install_drive" = "x" ]; then - exit 1 - fi diff --git a/src/patches/grub-0.95-odirect.patch b/src/patches/grub-0.95-odirect.patch deleted file mode 100644 index 12dd9d9794..0000000000 --- a/src/patches/grub-0.95-odirect.patch +++ /dev/null @@ -1,115 +0,0 @@ ---- grub-0.95/grub/asmstub.c.odirect 2004-11-30 16:58:06.577019488 -0500 -+++ grub-0.95/grub/asmstub.c 2004-11-30 16:59:56.057375944 -0500 -@@ -53,6 +53,9 @@ - # ifndef BLKFLSBUF - # define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ - # endif /* ! BLKFLSBUF */ -+# ifndef O_DIRECT -+# define O_DIRECT 040000 -+# endif /* ! O_DIRECT */ - #endif /* __linux__ */ - - /* We want to prevent any circularararity in our stubs, as well as -@@ -764,7 +767,7 @@ - { - /* The unpartitioned device name: /dev/XdX */ - char *devname = device_map[drive]; -- char buf[512]; -+ char * buf, * buf_unaligned; - - if (! devname) - return -1; -@@ -775,13 +778,13 @@ - - /* Open read/write, or read-only if that failed. */ - if (! read_only) -- disks[drive].flags = open (devname, O_RDWR); -+ disks[drive].flags = open (devname, O_RDWR | O_DIRECT); - - if (disks[drive].flags == -1) - { - if (read_only || errno == EACCES || errno == EROFS || errno == EPERM) - { -- disks[drive].flags = open (devname, O_RDONLY); -+ disks[drive].flags = open (devname, O_RDONLY | O_DIRECT); - if (disks[drive].flags == -1) - { - assign_device_name (drive, 0); -@@ -795,6 +798,10 @@ - } - } - -+ buf_unaligned = malloc((512 * sizeof(char)) + 4095); -+ buf = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); -+ - /* Attempt to read the first sector. */ - if (read (disks[drive].flags, buf, 512) != 512) - { -@@ -806,6 +813,7 @@ - - if (disks[drive].flags != -1) - get_drive_geometry (&disks[drive], device_map, drive); -+ free(buf_unaligned); - } - - if (disks[drive].flags == -1) -@@ -827,24 +835,34 @@ - nread (int fd, char *buf, size_t len) - { - int size = len; -+ char * buf_unaligned, * buff, * obuff; -+ int ret; -+ -+ buf_unaligned = malloc((len * sizeof(char)) + 4095); -+ obuff = buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); -+ - - while (len) - { -- int ret = read (fd, buf, len); -+ ret = read (fd, buff, len); - - if (ret <= 0) - { - if (errno == EINTR) - continue; - else -- return ret; -+ break; - } - - len -= ret; -- buf += ret; -+ buff += ret; - } - -- return size; -+ if (!len) ret = size; -+ -+ buf = memcpy(buf, obuff, size); -+ return ret; - } - - /* Write LEN bytes from BUF to FD. Return less than or equal to zero if an -@@ -853,10 +871,18 @@ - nwrite (int fd, char *buf, size_t len) - { - int size = len; -+ char * buf_unaligned, * buff; -+ -+ buf_unaligned = malloc((len * sizeof(char)) + 4095); -+ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); - - while (len) - { -- int ret = write (fd, buf, len); -+ int ret; -+ -+ memcpy(buff, buf, len); -+ ret = write (fd, buff, len); - - if (ret <= 0) - { diff --git a/src/patches/grub-0.95-recheck-bad.patch b/src/patches/grub-0.95-recheck-bad.patch deleted file mode 100644 index b55c6aec14..0000000000 --- a/src/patches/grub-0.95-recheck-bad.patch +++ /dev/null @@ -1,83 +0,0 @@ ---- grub-0.95/docs/grub.texi.recheck-bad 2005-07-25 17:55:57.000000000 -0400 -+++ grub-0.95/docs/grub.texi 2005-07-25 17:58:00.000000000 -0400 -@@ -3417,8 +3417,9 @@ - - @item --recheck - Recheck the device map, even if @file{/boot/grub/device.map} already --exists. You should use this option whenever you add/remove a disk --into/from your computer. -+exists. -+ -+This option is unreliable and its use is strongly discouraged. - @end table - - ---- grub-0.95/util/grub-install.in.recheck-bad 2005-07-25 17:58:19.000000000 -0400 -+++ grub-0.95/util/grub-install.in 2005-07-25 18:05:14.000000000 -0400 -@@ -68,6 +68,8 @@ - --force-lba force GRUB to use LBA mode even for a buggy - BIOS - --recheck probe a device map even if it already exists -+ This flag is unreliable and its use is -+ strongly discouraged. - - INSTALL_DEVICE can be a GRUB device name or a system device filename. - -@@ -328,7 +330,7 @@ - - # If --recheck is specified, remove the device map, if present. - if test $recheck = yes; then -- rm -f $device_map -+ mv $device_map ${device_map}.backup - fi - - # Create the device map file if it is not present. -@@ -357,7 +359,22 @@ - tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \ - | sort | uniq -d | sed -n 1p` - if test -n "$tmp"; then -- echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 -+ echo "The drive $tmp is defined multiple times in the new device map." 1>&2 -+ if test $recheck = yes; then -+ echo "Reverting to backed up copy." 1>&2 -+ mv ${device_map}.backup $device_map -+ fi -+ exit 1 -+fi -+ -+# Make sure device.map has at least one hd device -+grep -q "^(hd[0-9]\+)" $device_map -+if [ "x$?" != "x0" ]; then -+ echo "No suitable drive was found in the generated device map." 1>&2 -+ if test $recheck = yes; then -+ echo "Reverting to backed up copy." 1>&2 -+ mv ${device_map}.backup $device_map -+ fi - exit 1 - fi - ---- grub-0.95/docs/grub-install.8.recheck-bad 2004-06-13 13:44:59.000000000 -0400 -+++ grub-0.95/docs/grub-install.8 2005-07-25 18:15:02.000000000 -0400 -@@ -30,6 +30,8 @@ - .TP - \fB\-\-recheck\fR - probe a device map even if it already exists -+ -+This option is unreliable and its use is strongly discouraged. - .PP - INSTALL_DEVICE can be a GRUB device name or a system device filename. - .SH "REPORTING BUGS" ---- grub-0.95/docs/grub.info.recheck-bad 2004-05-11 08:22:54.000000000 -0400 -+++ grub-0.95/docs/grub.info 2005-07-25 18:16:09.000000000 -0400 -@@ -3373,9 +3373,9 @@ - - `--recheck' - Recheck the device map, even if `/boot/grub/device.map' already -- exists. You should use this option whenever you add/remove a disk -- into/from your computer. -+ exists. - -+ This option is unreliable and its use is strongly discouraged. -  - File: grub.info, Node: Invoking grub-md5-crypt, Next: Invoking grub-terminfo, Prev: Invoking grub-install, Up: Top - diff --git a/src/patches/grub-0.95-splash-error-term.patch b/src/patches/grub-0.95-splash-error-term.patch deleted file mode 100644 index 71b036aa7e..0000000000 --- a/src/patches/grub-0.95-splash-error-term.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- grub-0.95/stage2/graphics.c.old 2005-01-11 09:34:17.125451981 -0500 -+++ grub-0.95/stage2/graphics.c 2005-01-11 09:34:03.743949015 -0500 -@@ -108,12 +108,8 @@ - * mode. */ - int graphics_init() - { -- if (!graphics_inited) { -- saved_videomode = set_videomode(0x12); -- } -- - if (!read_image(splashimage)) { -- set_videomode(saved_videomode); -+ current_term = term_table; - grub_printf("failed to read image\n"); - return 0; - } -@@ -303,6 +299,8 @@ - if (!xpm_open(s)) - return 0; - -+ saved_videomode = set_videomode(0x12); -+ - /* parse info */ - while (grub_read(&c, 1)) { - if (c == '"') diff --git a/src/patches/grub-0.95-staticcurses.patch b/src/patches/grub-0.95-staticcurses.patch deleted file mode 100644 index ff87dd3e42..0000000000 --- a/src/patches/grub-0.95-staticcurses.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- grub-0.95/configure.ac.static 2004-06-13 13:38:17.000000000 -0400 -+++ grub-0.95/configure.ac 2004-06-18 17:35:23.513374336 -0400 -@@ -207,9 +207,9 @@ - - # Unless the user specify --without-curses, check for curses. - if test "x$with_curses" != "xno"; then -- AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lncurses" -+ AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lncurses -Wl,-Bdynamic" - AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])], -- [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lcurses" -+ [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lcurses -Wl,-Bdynamic" - AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])])]) - fi - diff --git a/src/patches/grub-0.95-xpmjunk.patch b/src/patches/grub-0.95-xpmjunk.patch deleted file mode 100644 index de02897f9c..0000000000 --- a/src/patches/grub-0.95-xpmjunk.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- grub-0.95/stage2/graphics.c.xpmjunk 2005-01-04 17:01:35.492804523 -0500 -+++ grub-0.95/stage2/graphics.c 2005-01-04 17:02:52.722495885 -0500 -@@ -262,6 +262,35 @@ - return; - } - -+/* Open the file, and search for a valid XPM header. Return 1 if one is found, -+ * leaving the current position as the start of the next line. Else, -+ * return 0. -+ */ -+int xpm_open(const char *s) { -+ char buf, prev, target[]="/* XPM */\n"; -+ int pos=0; -+ -+ if (!grub_open(s)) -+ return 0; -+ -+ prev='\n'; -+ buf=0; -+ do { -+ if (grub_read(&buf, 1) != 1) { -+ grub_close(); -+ return 0; -+ } -+ if ((pos == 0 && prev == '\n') || pos > 0) { -+ if (buf == target[pos]) -+ pos++; -+ else -+ pos=0; -+ } -+ prev=buf; -+ } while (target[pos]); -+ return 1; -+} -+ - /* Read in the splashscreen image and set the palette up appropriately. - * Format of splashscreen is an xpm (can be gzipped) with 16 colors and - * 640x480. */ -@@ -271,15 +300,9 @@ - unsigned char c, base, mask, *s1, *s2, *s4, *s8; - unsigned i, len, idx, colors, x, y, width, height; - -- if (!grub_open(s)) -+ if (!xpm_open(s)) - return 0; - -- /* read header */ -- if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) { -- grub_close(); -- return 0; -- } -- - /* parse info */ - while (grub_read(&c, 1)) { - if (c == '"') diff --git a/src/patches/grub-0.97-bz429187-cciss.patch b/src/patches/grub-0.97-bz429187-cciss.patch deleted file mode 100644 index 32f18bcc71..0000000000 --- a/src/patches/grub-0.97-bz429187-cciss.patch +++ /dev/null @@ -1,75 +0,0 @@ -diff -up grub-0.97/util/grub-install.in.cciss grub-0.97/util/grub-install.in ---- grub-0.97/util/grub-install.in.cciss 2008-02-04 14:30:31.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2008-02-07 18:34:14.000000000 -0500 -@@ -100,25 +100,56 @@ convert () { - # Break the device name into the disk part and the partition part. - case "$host_os" in - linux*) -+ # formats that need to be handled (disk name -> partition name): -+ # floppies: /dev/fd0 -+ # normal sd/hd devices: /dev/hda -> /dev/hda3 -+ # md: /dev/md0 -> /dev/md0p0 -+ # ide raid devs: /dev/ide/host0/bus0/target0/lun0/disc -+ # -> /dev/ide/host0/bus0/target0/lun0/part1 -+ # cciss: /dev/cciss/c0d0 -> /dev/cciss/c0d0p1 -+ # mpath devs: /dev/mapper/mpath0 -> /dev/mapper/mpath0p1 -+ # /dev/mapper/lalala -> /dev/mapper/lalalap1 -+ # dmraid devs: /dev/mapper/via_abcdef -> /dev/mapper/via_abcdefp1 -+ # /dev/mapper/isw_Volume0_abcdef -> /dev/mapper/isw_Volume0_abcdefp1 -+ # the known list (to me) is (X means we should handle it): -+ # X asr_[unfettered crap] -+ # hpt[0-9]+x_[0-9]+-[0-9]+ -+ # X hpt[0-9]+x_[0-9]+ -+ # hpt[0-9]+x_SPARE -+ # isw_[a-z]+_[a-z]+[0-9]+ -+ # X isw_[a-z]+ -+ # jm_[0-9]+-[0-9]+ -+ # X jm_[0-9]+ -+ # lsi_[0-9]+-[0-9]+ -+ # X lsi_[0-9]+ -+ # nvidia_[a-z]+-[0-9]+ -+ # X nvidia_[a-z]+ -+ # pdc_[a-z]+-[0-9]+ -+ # X pdc_[a-z]+ -+ # sil_[0-9]+-[0-9]+ -+ # X sil_[0-9]+ -+ # via_[a-z]+-[0-9]+ -+ # X via_[a-z]+ -+ # -+ # more? - tmp_disk=`echo "$1" | grep -v '/mapper/control$' | -- grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | -+ grep -v '/mapper/[[:alnum:]_]\+-[[:digit:]]\+$' | uniq | - sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ -- -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ -- -e 's%\(fd[0-9]*\)$%\1%' \ -- -e 's%/part[0-9]*$%/disc%' \ -- -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ -- -e 's%\(/mapper/[[:alpha:]]\+[[:digit:]]\+\)p[[:digit:]]\+$%\1%' \ -- -e 's%\(/mapper/[[:alpha:]]\+_[[:alpha:]]\+\)[[:digit:]]\+$%\1%'` -+ -e 's%\(/c[0-9]\+d[0-9]\+\).*$%\1%' \ -+ -e 's%\(fd[0-9]*\)$%\1%' \ -+ -e 's%/part[0-9]*$%/disc%' \ -+ -e 's%\(/mapper/[[:alnum:]_-]\+\)\+p[[:digit:]]\+$%\1%'\ -+ -e 's%\(/mapper/[[:alnum:]]\+\(_[[:alnum:]]\+\)\+\)\p[[:digit:]]\+$%\1%'` - tmp_part=`echo "$1" | grep -v '/mapper/control$' | -- grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | -+ grep -v '/mapper/[[:alnum:]_]\+-[[:digit:]]\+$' | uniq | - sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ -- -e 's%.*d[0-9]*p%%' \ -- -e 's%.*/fd[0-9]*$%%' \ -- -e 's%.*/floppy/[0-9]*$%%' \ -- -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ -- -e 's%.*c[0-7]d[0-9]*p%%' \ -- -e 's%.*/mapper/[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \ -- -e 's%.*/mapper/[[:alpha:]]\+_[[:alpha:]]\+\([[:digit:]]\+\)$%\1%' | -+ -e 's%.*/c[0-9]\+d[0-9]\+p\([[:digit:]]\+\)%\1%' \ -+ -e 's%.*/c[0-9]\+d[0-9]\+$%%' \ -+ -e 's%.*/fd[0-9]\+$%%' \ -+ -e 's%.*/floppy/[0-9]*$%%' \ -+ -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ -+ -e 's%.*/mapper/[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \ -+ -e 's%.*/mapper/[[:alnum:]]\+\(_[[:alpha:]]\+[[:digit:]]*\)\+p\([[:digit:]]\+\)$%\2%' | - grep -v '.*/mapper/.*'` - ;; - gnu*) diff --git a/src/patches/grub-0.97-cmdline-size.patch b/src/patches/grub-0.97-cmdline-size.patch deleted file mode 100644 index e93aa98634..0000000000 --- a/src/patches/grub-0.97-cmdline-size.patch +++ /dev/null @@ -1,45 +0,0 @@ -diff --git a/stage2/boot.c b/stage2/boot.c -index bf442e1..a6872e0 100644 ---- a/stage2/boot.c -+++ b/stage2/boot.c -@@ -241,6 +241,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - } - - if (lh->version >= 0x0202) -+ /* version 0x0202 and higher can handle 4096 */ - lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; - else - { -@@ -403,8 +404,10 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - { - char *src = skip_to (0, arg); - char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET; -- -- while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) -+ unsigned long cl_end_offset = lh->version < 0x0202 ? -+ LINUX_CL_END_OFFSET : LINUX_CL_END_OFFSET_202; -+ -+ while (dest < linux_data_tmp_addr + cl_end_offset && *src) - *(dest++) = *(src++); - - /* Old Linux kernels have problems determining the amount of -diff --git a/stage2/shared.h b/stage2/shared.h -index d05644b..c052480 100644 ---- a/stage2/shared.h -+++ b/stage2/shared.h -@@ -160,10 +160,13 @@ extern void *grub_scratch_mem; - #define LINUX_VID_MODE_ASK 0xFFFD - - #define LINUX_CL_OFFSET 0x9000 --#define LINUX_CL_END_OFFSET 0x90FF --#define LINUX_SETUP_MOVE_SIZE 0x9100 - #define LINUX_CL_MAGIC 0xA33F - -+#define LINUX_CL_END_OFFSET 0x90FF -+#define LINUX_CL_END_OFFSET_202 0x9FFF /* version 0x0202 or higher */ -+#define LINUX_SETUP_MOVE_SIZE 0xA000 /* where am I putting it? */ -+ -+ - /* - * General disk stuff - */ diff --git a/src/patches/grub-0.97-datadir.patch b/src/patches/grub-0.97-datadir.patch deleted file mode 100644 index eaa89f0d36..0000000000 --- a/src/patches/grub-0.97-datadir.patch +++ /dev/null @@ -1,229 +0,0 @@ ---- grub-0.97/stage1/Makefile.am.datadir 2005-12-14 11:07:01.000000000 -0500 -+++ grub-0.97/stage1/Makefile.am 2005-12-14 11:07:21.000000000 -0500 -@@ -1,7 +1,7 @@ --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) --nodist_pkglib_DATA = stage1 -+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+nodist_pkgdata_DATA = stage1 - --CLEANFILES = $(nodist_pkglib_DATA) -+CLEANFILES = $(nodist_pkgdata_DATA) - - # We can't use builtins or standard includes. - AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc ---- grub-0.97/stage1/Makefile.in.datadir 2005-05-07 22:42:36.000000000 -0400 -+++ grub-0.97/stage1/Makefile.in 2005-12-14 11:08:13.000000000 -0500 -@@ -1,8 +1,8 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. -+# Makefile.in generated by automake 1.9.6 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. -+# 2003, 2004, 2005 Free Software Foundation, Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -15,8 +15,6 @@ - @SET_MAKE@ - - --SOURCES = $(stage1_exec_SOURCES) -- - srcdir = @srcdir@ - top_srcdir = @top_srcdir@ - VPATH = @srcdir@ -@@ -67,13 +65,13 @@ - *) f=$$p;; \ - esac; - am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; --am__installdirs = "$(DESTDIR)$(pkglibdir)" --nodist_pkglibDATA_INSTALL = $(INSTALL_DATA) --DATA = $(nodist_pkglib_DATA) -+am__installdirs = "$(DESTDIR)$(pkgdatadir)" -+nodist_pkgdataDATA_INSTALL = $(INSTALL_DATA) -+DATA = $(nodist_pkgdata_DATA) - ETAGS = etags - CTAGS = ctags - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) - ACLOCAL = @ACLOCAL@ - AMDEP_FALSE = @AMDEP_FALSE@ - AMDEP_TRUE = @AMDEP_TRUE@ -@@ -102,6 +100,8 @@ - EGREP = @EGREP@ - EXEEXT = @EXEEXT@ - FSYS_CFLAGS = @FSYS_CFLAGS@ -+GRAPHICS_SUPPORT_FALSE = @GRAPHICS_SUPPORT_FALSE@ -+GRAPHICS_SUPPORT_TRUE = @GRAPHICS_SUPPORT_TRUE@ - GRUB_CFLAGS = @GRUB_CFLAGS@ - GRUB_LIBS = @GRUB_LIBS@ - HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -@@ -172,6 +172,7 @@ - infodir = @infodir@ - install_sh = @install_sh@ - libdir = @libdir@ -+datadir = @datadir@ - libexecdir = @libexecdir@ - localstatedir = @localstatedir@ - mandir = @mandir@ -@@ -183,8 +184,8 @@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ - target_alias = @target_alias@ --nodist_pkglib_DATA = stage1 --CLEANFILES = $(nodist_pkglib_DATA) -+nodist_pkgdata_DATA = stage1 -+CLEANFILES = $(nodist_pkgdata_DATA) - - # We can't use builtins or standard includes. - AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc -@@ -242,22 +243,22 @@ - .S.obj: - $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` - uninstall-info-am: --install-nodist_pkglibDATA: $(nodist_pkglib_DATA) -+install-nodist_pkgdataDATA: $(nodist_pkgdata_DATA) - @$(NORMAL_INSTALL) -- test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" -- @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ -+ test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)" -+ @list='$(nodist_pkgdata_DATA)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ -- echo " $(nodist_pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ -- $(nodist_pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ -+ echo " $(nodist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ -+ $(nodist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ - done - --uninstall-nodist_pkglibDATA: -+uninstall-nodist_pkgdataDATA: - @$(NORMAL_UNINSTALL) -- @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ -+ @list='$(nodist_pkgdata_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ -- rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ -+ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ -+ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ - done - - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -@@ -339,7 +340,7 @@ - check: check-am - all-am: Makefile $(PROGRAMS) $(DATA) - installdirs: -- for dir in "$(DESTDIR)$(pkglibdir)"; do \ -+ for dir in "$(DESTDIR)$(pkgdatadir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done - install: install-am -@@ -388,7 +389,7 @@ - - install-data-am: - --install-exec-am: install-nodist_pkglibDATA -+install-exec-am: install-nodist_pkgdataDATA - - install-info: install-info-am - -@@ -412,19 +413,19 @@ - - ps-am: - --uninstall-am: uninstall-info-am uninstall-nodist_pkglibDATA -+uninstall-am: uninstall-info-am uninstall-nodist_pkgdataDATA - - .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstPROGRAMS ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ -- install-info-am install-man install-nodist_pkglibDATA \ -+ install-info-am install-man install-nodist_pkgdataDATA \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am \ -- uninstall-nodist_pkglibDATA -+ uninstall-nodist_pkgdataDATA - - .exec: - $(OBJCOPY) -O binary $< $@ ---- grub-0.97/util/grub-install.in.datadir 2005-12-14 11:00:21.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2005-12-14 11:00:21.000000000 -0500 -@@ -21,13 +21,13 @@ - prefix=@prefix@ - exec_prefix=@exec_prefix@ - sbindir=@sbindir@ --libdir=@libdir@ -+datadir=@datadir@ - PACKAGE=@PACKAGE@ - VERSION=@VERSION@ - host_cpu=@host_cpu@ - host_os=@host_os@ - host_vendor=@host_vendor@ --pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} -+pkgdatadir=${datadir}/${PACKAGE}/${host_cpu}-${host_vendor} - - grub_shell=${sbindir}/grub - mdadm=${sbindir}/mdadm -@@ -388,17 +388,17 @@ - exit 1 - fi - --if test -f "$pkglibdir/stage1"; then -+if test -f "$pkgdatadir/stage1"; then - : - else -- echo "${pkglibdir}/stage1: Not found." 1>&2 -+ echo "${pkgdatadir}/stage1: Not found." 1>&2 - exit 1 - fi - --if test -f "$pkglibdir/stage2"; then -+if test -f "$pkgdatadir/stage2"; then - : - else -- echo "${pkglibdir}/stage2: Not found." 1>&2 -+ echo "${pkgdatadir}/stage2: Not found." 1>&2 - exit 1 - fi - ---- grub-0.97/stage2/Makefile.am.datadir 2005-12-14 11:03:54.000000000 -0500 -+++ grub-0.97/stage2/Makefile.am 2005-12-14 11:05:04.000000000 -0500 -@@ -27,12 +27,12 @@ - -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 - - # Stage 2 and Stage 1.5's. --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) - - EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec - - if DISKLESS_SUPPORT --pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ -+pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ - ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ - reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ - nbgrub pxegrub -@@ -43,7 +43,7 @@ - reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ - xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec - else --pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ -+pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ - ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ - reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 - noinst_DATA = pre_stage2 start start_eltorito -@@ -112,7 +112,7 @@ - BUILT_SOURCES = stage2_size.h - endif - --CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) -+CLEANFILES = $(pkgdata_DATA) $(noinst_DATA) $(BUILT_SOURCES) - - stage2_size.h: pre_stage2 - -rm -f stage2_size.h diff --git a/src/patches/grub-0.97-disk_geometry-1.patch b/src/patches/grub-0.97-disk_geometry-1.patch deleted file mode 100644 index e09686dd7a..0000000000 --- a/src/patches/grub-0.97-disk_geometry-1.patch +++ /dev/null @@ -1,892 +0,0 @@ -Submitted By: Jim Gifford -Date: 05-28-2006 -Initial Package Version: 0.97 -Upstream Status: Unknown -Origin: Fedora and Mandriva -Description: This patch fixes issues with disk geometry not being - detected properly. Part of this patch also fixes - gcc 4 compile errors, which are a part of the issue. - -diff -Naur grub-0.97.orig/configure grub-0.97/configure ---- grub-0.97.orig/configure 2005-05-07 19:48:12.000000000 -0700 -+++ grub-0.97/configure 2006-05-28 20:29:36.025466751 -0700 -@@ -3485,9 +3485,9 @@ - echo "$as_me:$LINENO: result: $size_flag" >&5 - echo "${ECHO_T}$size_flag" >&6 - if test "x$size_flag" = xyes; then -- STAGE2_CFLAGS="-Os" -+ STAGE2_CFLAGS="-Os -fno-strict-aliasing" - else -- STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" -+ STAGE2_CFLAGS="-O2 -fno-strict-aliasing -fno-strength-reduce -fno-unroll-loops" - fi - # OpenBSD has a GCC extension for protecting applications from - # stack smashing attacks, but GRUB doesn't want this feature. -diff -Naur grub-0.97.orig/configure.ac grub-0.97/configure.ac ---- grub-0.97.orig/configure.ac 2005-05-07 19:36:03.000000000 -0700 -+++ grub-0.97/configure.ac 2006-05-28 20:28:41.538819726 -0700 -@@ -93,9 +93,9 @@ - CFLAGS=$saved_CFLAGS - ]) - if test "x$size_flag" = xyes; then -- STAGE2_CFLAGS="-Os" -+ STAGE2_CFLAGS="-Os -fno-strict-aliasing" - else -- STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" -+ STAGE2_CFLAGS="-O2 -fno-strict-aliasing -fno-strength-reduce -fno-unroll-loops" - fi - # OpenBSD has a GCC extension for protecting applications from - # stack smashing attacks, but GRUB doesn't want this feature. -diff -Naur grub-0.97.orig/lib/device.c grub-0.97/lib/device.c ---- grub-0.97.orig/lib/device.c 2005-03-27 15:14:25.000000000 -0800 -+++ grub-0.97/lib/device.c 2006-05-28 20:34:03.546804777 -0700 -@@ -131,6 +131,152 @@ - #include - #include - -+#if defined(__linux__) -+/* The 2.6 kernel has removed all of the geometry handling for IDE drives -+ * that did fixups for LBA, etc. This means that the geometry we get -+ * with the ioctl has a good chance of being wrong. So, we get to -+ * also know about partition tables and try to read what the geometry -+ * is there. *grumble* Very closely based on code from cfdisk -+ */ -+static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) { -+ struct hd_geometry hdg; -+ -+ if (ioctl (fd, HDIO_GETGEO, &hdg)) -+ return; -+ -+ *cyl = hdg.cylinders; -+ *heads = hdg.heads; -+ *sectors = hdg.sectors; -+} -+ -+struct partition { -+ unsigned char boot_ind; /* 0x80 - active */ -+ unsigned char head; /* starting head */ -+ unsigned char sector; /* starting sector */ -+ unsigned char cyl; /* starting cylinder */ -+ unsigned char sys_ind; /* What partition type */ -+ unsigned char end_head; /* end head */ -+ unsigned char end_sector; /* end sector */ -+ unsigned char end_cyl; /* end cylinder */ -+ unsigned char start4[4]; /* starting sector counting from 0 */ -+ unsigned char size4[4]; /* nr of sectors in partition */ -+}; -+ -+#define ALIGNMENT 2 -+typedef union { -+ struct { -+ unsigned char align[ALIGNMENT]; -+ unsigned char b[SECTOR_SIZE]; -+ } c; -+ struct { -+ unsigned char align[ALIGNMENT]; -+ unsigned char buffer[0x1BE]; -+ struct partition part[4]; -+ unsigned char magicflag[2]; -+ } p; -+} partition_table; -+ -+#define PART_TABLE_FLAG0 0x55 -+#define PART_TABLE_FLAG1 0xAA -+ -+static void -+get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, -+ int *sectors) { -+ struct partition *p; -+ int i,h,s,hh,ss; -+ int first = 1; -+ int bad = 0; -+ -+ if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 || -+ bufp->p.magicflag[1] != PART_TABLE_FLAG1) { -+ /* Matthew Wilcox: slightly friendlier version of -+ fatal(_("Bad signature on partition table"), 3); -+ */ -+ fprintf(stderr, "Unknown partition table signature\n"); -+ return; -+ } -+ -+ hh = ss = 0; -+ for (i=0; i<4; i++) { -+ p = &(bufp->p.part[i]); -+ if (p->sys_ind != 0) { -+ h = p->end_head + 1; -+ s = (p->end_sector & 077); -+ if (first) { -+ hh = h; -+ ss = s; -+ first = 0; -+ } else if (hh != h || ss != s) -+ bad = 1; -+ } -+ } -+ -+ if (!first && !bad) { -+ *heads = hh; -+ *sectors = ss; -+ } -+} -+ -+static long long my_lseek (unsigned int fd, long long offset, -+ unsigned int origin) -+{ -+#if defined(__linux__) && (!defined(__GLIBC__) || \ -+ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) -+ /* Maybe libc doesn't have large file support. */ -+ loff_t offset, result; -+ static int _llseek (uint filedes, ulong hi, ulong lo, -+ loff_t *res, uint wh); -+ _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, -+ loff_t *, res, uint, wh); -+ -+ if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0) -+ return (long long) -1; -+ return result; -+#else -+ return lseek(fd, offset, SEEK_SET); -+#endif -+} -+ -+static void get_linux_geometry (int fd, struct geometry *geom) { -+ long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0; -+ long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0; -+ partition_table bufp; -+ char *buff, *buf_unaligned; -+ -+ buf_unaligned = malloc(sizeof(partition_table) + 4095); -+ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); -+ -+ get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors); -+ -+ if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) { -+ fprintf(stderr, "Unable to seek"); -+ } -+ -+ if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) { -+ memcpy(bufp.c.b, buff, SECTOR_SIZE); -+ get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors); -+ } else { -+ fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno)); -+ } -+ -+ if (pt_head && pt_sectors) { -+ int cyl_size; -+ -+ geom->heads = pt_head; -+ geom->sectors = pt_sectors; -+ cyl_size = pt_head * pt_sectors; -+ geom->cylinders = geom->total_sectors/cyl_size; -+ } else { -+ geom->heads = kern_head; -+ geom->sectors = kern_sectors; -+ geom->cylinders = kern_cyl; -+ } -+ -+ return; -+} -+#endif -+ - /* Get the geometry of a drive DRIVE. */ - void - get_drive_geometry (struct geometry *geom, char **map, int drive) -@@ -151,21 +297,16 @@ - #if defined(__linux__) - /* Linux */ - { -- struct hd_geometry hdg; - unsigned long nr; -- -- if (ioctl (fd, HDIO_GETGEO, &hdg)) -- goto fail; - - if (ioctl (fd, BLKGETSIZE, &nr)) - goto fail; - - /* Got the geometry, so save it. */ -- geom->cylinders = hdg.cylinders; -- geom->heads = hdg.heads; -- geom->sectors = hdg.sectors; - geom->total_sectors = nr; -- -+ get_linux_geometry(fd, geom); -+ if (!geom->heads && !geom->cylinders && !geom->sectors) -+ goto fail; - goto success; - } - -@@ -844,6 +985,7 @@ - { - char dev[PATH_MAX]; /* XXX */ - int fd; -+ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; - - if ((partition & 0x00FF00) != 0x00FF00) - { -@@ -870,35 +1012,13 @@ - errnum = ERR_NO_PART; - return 0; - } -- --#if defined(__linux__) && (!defined(__GLIBC__) || \ -- ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) -- /* Maybe libc doesn't have large file support. */ -- { -- loff_t offset, result; -- static int _llseek (uint filedes, ulong hi, ulong lo, -- loff_t *res, uint wh); -- _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, -- loff_t *, res, uint, wh); - -- offset = (loff_t) sector * (loff_t) SECTOR_SIZE; -- if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) -- { -- errnum = ERR_DEV_VALUES; -- return 0; -- } -- } --#else -- { -- off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; - -- if (lseek (fd, offset, SEEK_SET) != offset) -- { -- errnum = ERR_DEV_VALUES; -- return 0; -- } -- } --#endif -+ if (my_lseek(fd, offset, SEEK_SET) != offset) -+ { -+ errnum = ERR_DEV_VALUES; -+ return 0; -+ } - - if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE)) - { -diff -Naur grub-0.97.orig/stage2/Makefile.am grub-0.97/stage2/Makefile.am ---- grub-0.97.orig/stage2/Makefile.am 2005-02-02 12:37:35.000000000 -0800 -+++ grub-0.97/stage2/Makefile.am 2006-05-28 20:28:41.590818435 -0700 -@@ -24,7 +24,8 @@ - -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ - -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ -- -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -+ -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 \ -+ -fno-strict-aliasing - - # Stage 2 and Stage 1.5's. - pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -diff -Naur grub-0.97.orig/stage2/boot.c grub-0.97/stage2/boot.c ---- grub-0.97.orig/stage2/boot.c 2004-03-30 03:44:08.000000000 -0800 -+++ grub-0.97/stage2/boot.c 2006-05-28 20:33:30.123638792 -0700 -@@ -55,7 +55,7 @@ - pu; - /* presuming that MULTIBOOT_SEARCH is large enough to encompass an - executable header */ -- unsigned char buffer[MULTIBOOT_SEARCH]; -+ char buffer[MULTIBOOT_SEARCH]; - - /* sets the header pointer to point to the beginning of the - buffer by default */ -@@ -98,7 +98,7 @@ - /* ELF loading supported if multiboot, FreeBSD and NetBSD. */ - if ((type == KERNEL_TYPE_MULTIBOOT - || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD -- || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0 -+ || grub_strcmp ((char *) pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0 - || suggested_type == KERNEL_TYPE_NETBSD) - && len > sizeof (Elf32_Ehdr) - && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer)))) -@@ -824,8 +824,12 @@ - moveto = (mbi.mem_upper + 0x400) << 10; - - moveto = (moveto - len) & 0xfffff000; -+#if 0 - max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 - ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); -+#else -+ max_addr = LINUX_INITRD_MAX_ADDRESS; -+#endif - if (moveto + len >= max_addr) - moveto = (max_addr - len) & 0xfffff000; - -diff -Naur grub-0.97.orig/stage2/disk_io.c grub-0.97/stage2/disk_io.c ---- grub-0.97.orig/stage2/disk_io.c 2004-05-23 09:35:24.000000000 -0700 -+++ grub-0.97/stage2/disk_io.c 2006-05-28 20:28:41.582818634 -0700 -@@ -127,12 +127,19 @@ - int filepos; - int filemax; - --static inline unsigned long --log2 (unsigned long word) -+#define log2(n) ffz(~(n)) -+ -+/* include/asm-i386/bitops.h */ -+/* -+ * ffz = Find First Zero in word. Undefined if no zero exists, -+ * so code should check against ~0UL first.. -+ */ -+static __inline__ unsigned long -+ffz (unsigned long word) - { -- asm volatile ("bsfl %1,%0" -- : "=r" (word) -- : "r" (word)); -+ __asm__ ("bsfl %1,%0" -+: "=r" (word) -+: "r" (~word)); - return word; - } - -diff -Naur grub-0.97.orig/stage2/freebsd.h grub-0.97/stage2/freebsd.h ---- grub-0.97.orig/stage2/freebsd.h 2003-07-09 04:45:52.000000000 -0700 -+++ grub-0.97/stage2/freebsd.h 2006-05-28 20:28:41.582818634 -0700 -@@ -78,7 +78,7 @@ - struct bootinfo - { - unsigned int bi_version; -- unsigned char *bi_kernelname; -+ char *bi_kernelname; - struct nfs_diskless *bi_nfs_diskless; - /* End of fields that are always present. */ - #define bi_endcommon bi_n_bios_used -diff -Naur grub-0.97.orig/stage2/fsys_fat.c grub-0.97/stage2/fsys_fat.c ---- grub-0.97.orig/stage2/fsys_fat.c 2005-03-15 08:52:00.000000000 -0800 -+++ grub-0.97/stage2/fsys_fat.c 2006-05-28 20:28:41.582818634 -0700 -@@ -54,12 +54,19 @@ - - #define FAT_CACHE_SIZE 2048 - -+#define log2(n) ffz(~(n)) -+ -+/* include/asm-i386/bitops.h */ -+/* -+ * ffz = Find First Zero in word. Undefined if no zero exists, -+ * so code should check against ~0UL first.. -+ */ - static __inline__ unsigned long --log2 (unsigned long word) -+ffz (unsigned long word) - { - __asm__ ("bsfl %1,%0" -- : "=r" (word) -- : "r" (word)); -+: "=r" (word) -+: "r" (~word)); - return word; - } - -diff -Naur grub-0.97.orig/stage2/fsys_iso9660.c grub-0.97/stage2/fsys_iso9660.c ---- grub-0.97.orig/stage2/fsys_iso9660.c 2004-05-11 05:11:19.000000000 -0700 -+++ grub-0.97/stage2/fsys_iso9660.c 2006-05-28 20:28:41.582818634 -0700 -@@ -55,13 +55,19 @@ - #define RRCONT_BUF ((unsigned char *)(FSYS_BUF + 6144)) - #define NAME_BUF ((unsigned char *)(FSYS_BUF + 8192)) - -+#define log2(n) ffz(~(n)) - --static inline unsigned long --log2 (unsigned long word) -+/* include/asm-i386/bitops.h */ -+/* -+ * ffz = Find First Zero in word. Undefined if no zero exists, -+ * so code should check against ~0UL first.. -+ */ -+static __inline__ unsigned long -+ffz (unsigned long word) - { -- asm volatile ("bsfl %1,%0" -- : "=r" (word) -- : "r" (word)); -+ __asm__ ("bsfl %1,%0" -+: "=r" (word) -+: "r" (~word)); - return word; - } - -@@ -120,7 +126,7 @@ - break; - /* check ISO_VD_PRIMARY and ISO_STANDARD_ID */ - if (PRIMDESC->type.l == ISO_VD_PRIMARY -- && !memcmp(PRIMDESC->id, ISO_STANDARD_ID, sizeof(PRIMDESC->id))) -+ && !memcmp((char *) PRIMDESC->id, ISO_STANDARD_ID, sizeof(PRIMDESC->id))) - { - ISO_SUPER->vol_sector = sector; - INODE->file_start = 0; -@@ -175,7 +181,7 @@ - for (; idr->length.l > 0; - idr = (struct iso_directory_record *)((char *)idr + idr->length.l) ) - { -- const char *name = idr->name; -+ const u_int8_t *name = idr->name; - unsigned int name_len = idr->name_len.l; - - file_type = (idr->flags.l & 2) ? ISO_DIRECTORY : ISO_REGULAR; -@@ -198,7 +204,7 @@ - rr_len = (idr->length.l - idr->name_len.l - - sizeof(struct iso_directory_record) - + sizeof(idr->name)); -- rr_ptr.ptr = ((unsigned char *)idr + idr->name_len.l -+ rr_ptr.ptr = ((char *)idr + idr->name_len.l - + sizeof(struct iso_directory_record) - - sizeof(idr->name)); - if (rr_ptr.i & 1) -@@ -331,9 +337,9 @@ - memcpy(NAME_BUF, name, name_len); - name = NAME_BUF; - } -- rr_ptr.ptr = RRCONT_BUF + ce_ptr->u.ce.offset.l; -+ rr_ptr.ptr = (char *) RRCONT_BUF + ce_ptr->u.ce.offset.l; - rr_len = ce_ptr->u.ce.size.l; -- if (!iso9660_devread(ce_ptr->u.ce.extent.l, 0, ISO_SECTOR_SIZE, RRCONT_BUF)) -+ if (!iso9660_devread(ce_ptr->u.ce.extent.l, 0, ISO_SECTOR_SIZE, (char *) RRCONT_BUF)) - { - errnum = 0; /* this is not fatal. */ - break; -@@ -344,7 +350,7 @@ - - filemax = MAXINT; - if (name_len >= pathlen -- && !memcmp(name, dirname, pathlen)) -+ && !memcmp((char *) name, dirname, pathlen)) - { - if (dirname[pathlen] == '/' || !print_possibilities) - { -@@ -381,7 +387,7 @@ - print_possibilities = -print_possibilities; - memcpy(NAME_BUF, name, name_len); - NAME_BUF[name_len] = '\0'; -- print_a_completion (NAME_BUF); -+ print_a_completion ((char *) NAME_BUF); - #endif - } - } -diff -Naur grub-0.97.orig/stage2/fsys_reiserfs.c grub-0.97/stage2/fsys_reiserfs.c ---- grub-0.97.orig/stage2/fsys_reiserfs.c 2004-02-18 14:09:10.000000000 -0800 -+++ grub-0.97/stage2/fsys_reiserfs.c 2006-05-28 20:28:41.586818535 -0700 -@@ -365,13 +365,19 @@ - #define JOURNAL_START ((__u32 *) (INFO + 1)) - #define JOURNAL_END ((__u32 *) (FSYS_BUF + FSYS_BUFLEN)) - -+#define log2(n) ffz(~(n)) - -+/* include/asm-i386/bitops.h */ -+/* -+ * ffz = Find First Zero in word. Undefined if no zero exists, -+ * so code should check against ~0UL first.. -+ */ - static __inline__ unsigned long --log2 (unsigned long word) -+ffz (unsigned long word) - { - __asm__ ("bsfl %1,%0" -- : "=r" (word) -- : "r" (word)); -+: "=r" (word) -+: "r" (~word)); - return word; - } - -diff -Naur grub-0.97.orig/stage2/fsys_vstafs.c grub-0.97/stage2/fsys_vstafs.c ---- grub-0.97.orig/stage2/fsys_vstafs.c 2003-07-09 04:45:53.000000000 -0700 -+++ grub-0.97/stage2/fsys_vstafs.c 2006-05-28 20:28:41.586818535 -0700 -@@ -186,35 +186,35 @@ - int - vstafs_read (char *addr, int len) - { -- struct alloc *a; -+ struct alloc *b; - int size, ret = 0, offset, curr_len = 0; -- int curr_ext; -+ int curr_exten; - char extent; - int ext_size; - char *curr_pos; - - get_file_info (f_sector); - size = FILE_INFO->len-VSTAFS_START_DATA; -- a = FILE_INFO->blocks; -+ b = FILE_INFO->blocks; - - if (filepos > 0) - { -- if (filepos < a[0].a_len * 512 - VSTAFS_START_DATA) -+ if (filepos < b[0].a_len * 512 - VSTAFS_START_DATA) - { - offset = filepos + VSTAFS_START_DATA; - extent = 0; -- curr_len = a[0].a_len * 512 - offset - filepos; -+ curr_len = b[0].a_len * 512 - offset - filepos; - } - else - { -- ext_size = a[0].a_len * 512 - VSTAFS_START_DATA; -+ ext_size = b[0].a_len * 512 - VSTAFS_START_DATA; - offset = filepos - ext_size; - extent = 1; - do - { - curr_len -= ext_size; - offset -= ext_size; -- ext_size = a[extent+1].a_len * 512; -+ ext_size = b[extent+1].a_len * 512; - } - while (extent < FILE_INFO->extents && offset>ext_size); - } -@@ -223,16 +223,16 @@ - { - offset = VSTAFS_START_DATA; - extent = 0; -- curr_len = a[0].a_len * 512 - offset; -+ curr_len = b[0].a_len * 512 - offset; - } - - curr_pos = addr; - if (curr_len > len) - curr_len = len; - -- for (curr_ext=extent; -- curr_ext < FILE_INFO->extents; -- curr_len = a[curr_ext].a_len * 512, curr_pos += curr_len, curr_ext++) -+ for (curr_exten = extent; -+ curr_exten < FILE_INFO->extents; -+ curr_len = b[curr_exten].a_len * 512, curr_pos += curr_len, curr_exten++) - { - ret += curr_len; - size -= curr_len; -@@ -242,7 +242,7 @@ - curr_len += size; - } - -- devread (a[curr_ext].a_start,offset, curr_len, curr_pos); -+ devread (b[curr_exten].a_start, offset, curr_len, curr_pos); - offset = 0; - } - -diff -Naur grub-0.97.orig/stage2/fsys_xfs.c grub-0.97/stage2/fsys_xfs.c ---- grub-0.97.orig/stage2/fsys_xfs.c 2005-05-07 19:15:55.000000000 -0700 -+++ grub-0.97/stage2/fsys_xfs.c 2006-05-28 20:28:41.586818535 -0700 -@@ -97,7 +97,7 @@ - return ino & XFS_INO_MASK(XFS_INO_OFFSET_BITS); - } - --static inline __const__ xfs_uint16_t -+static inline __attribute__((const)) xfs_uint16_t - le16 (xfs_uint16_t x) - { - __asm__("xchgb %b0,%h0" \ -@@ -106,7 +106,7 @@ - return x; - } - --static inline __const__ xfs_uint32_t -+static inline __attribute__((const)) xfs_uint32_t - le32 (xfs_uint32_t x) - { - #if 0 -@@ -122,7 +122,7 @@ - return x; - } - --static inline __const__ xfs_uint64_t -+static inline __attribute__((const)) xfs_uint64_t - le64 (xfs_uint64_t x) - { - xfs_uint32_t h = x >> 32; -@@ -368,7 +368,7 @@ - default: - namelen = sfe->namelen; - *ino = sf_ino ((char *)sfe, namelen); -- name = sfe->name; -+ name = (char *) sfe->name; - sfe = (xfs_dir2_sf_entry_t *) - ((char *)sfe + namelen + 11 - xfs.i8param); - } -diff -Naur grub-0.97.orig/stage2/gunzip.c grub-0.97/stage2/gunzip.c ---- grub-0.97.orig/stage2/gunzip.c 2003-07-09 04:45:53.000000000 -0700 -+++ grub-0.97/stage2/gunzip.c 2006-05-28 20:28:41.586818535 -0700 -@@ -277,7 +277,7 @@ - * is a compressed file, and simply mark it as such. - */ - if (no_decompression -- || grub_read (buf, 10) != 10 -+ || grub_read ((char *) buf, 10) != 10 - || ((*((unsigned short *) buf) != GZIP_HDR_LE) - && (*((unsigned short *) buf) != OLD_GZIP_HDR_LE))) - { -@@ -293,7 +293,7 @@ - if (buf[2] != DEFLATED - || (buf[3] & UNSUPP_FLAGS) - || ((buf[3] & EXTRA_FIELD) -- && (grub_read (buf, 2) != 2 -+ && (grub_read ((char *) buf, 2) != 2 - || bad_field (*((unsigned short *) buf)))) - || ((buf[3] & ORIG_NAME) && bad_field (-1)) - || ((buf[3] & COMMENT) && bad_field (-1))) -@@ -308,7 +308,7 @@ - - filepos = filemax - 8; - -- if (grub_read (buf, 8) != 8) -+ if (grub_read ((char *) buf, 8) != 8) - { - if (! errnum) - errnum = ERR_BAD_GZIP_HEADER; -@@ -485,8 +485,8 @@ - - #define INBUFSIZ 0x2000 - --static uch inbuf[INBUFSIZ]; --static int bufloc; -+static unsigned char inbuf[INBUFSIZ]; -+static int bufloc; - - static int - get_byte (void) -@@ -494,7 +494,7 @@ - if (filepos == gzip_data_offset || bufloc == INBUFSIZ) - { - bufloc = 0; -- grub_read (inbuf, INBUFSIZ); -+ grub_read ((char *) inbuf, INBUFSIZ); - } - - return inbuf[bufloc++]; -@@ -925,7 +925,7 @@ - unsigned m; /* mask for bit lengths table */ - unsigned n; /* number of lengths to get */ - unsigned nb; /* number of bit length codes */ -- unsigned nl; /* number of literal/length codes */ -+ unsigned nc; /* number of literal/length codes */ - unsigned nd; /* number of distance codes */ - unsigned ll[286 + 30]; /* literal/length and distance code lengths */ - register ulg b; /* bit buffer */ -@@ -937,7 +937,7 @@ - - /* read in table lengths */ - NEEDBITS (5); -- nl = 257 + ((unsigned) b & 0x1f); /* number of literal/length codes */ -+ nc = 257 + ((unsigned) b & 0x1f); /* number of literal/length codes */ - DUMPBITS (5); - NEEDBITS (5); - nd = 1 + ((unsigned) b & 0x1f); /* number of distance codes */ -@@ -945,7 +945,7 @@ - NEEDBITS (4); - nb = 4 + ((unsigned) b & 0xf); /* number of bit length codes */ - DUMPBITS (4); -- if (nl > 286 || nd > 30) -+ if (nc > 286 || nd > 30) - { - errnum = ERR_BAD_GZIP_DATA; - return; -@@ -970,7 +970,7 @@ - } - - /* read in literal and distance code lengths */ -- n = nl + nd; -+ n = nc + nd; - m = mask_bits[bl]; - i = l = 0; - while ((unsigned) i < n) -@@ -1034,7 +1034,7 @@ - - /* build the decoding tables for literal/length and distance codes */ - bl = lbits; -- if ((i = huft_build (ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) -+ if ((i = huft_build (ll, nc, 257, cplens, cplext, &tl, &bl)) != 0) - { - #if 0 - if (i == 1) -@@ -1045,7 +1045,7 @@ - return; - } - bd = dbits; -- if ((i = huft_build (ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) -+ if ((i = huft_build (ll + nc, nd, 0, cpdist, cpdext, &td, &bd)) != 0) - { - #if 0 - if (i == 1) -diff -Naur grub-0.97.orig/stage2/md5.c grub-0.97/stage2/md5.c ---- grub-0.97.orig/stage2/md5.c 2003-07-09 04:45:53.000000000 -0700 -+++ grub-0.97/stage2/md5.c 2006-05-28 20:28:41.590818435 -0700 -@@ -166,7 +166,7 @@ - inputlen -= 64 - buflen; - while (inputlen >= 64) - { -- md5_transform (input); -+ md5_transform ((unsigned char *) input); - input += 64; - inputlen -= 64; - } -@@ -211,7 +211,7 @@ - char *p; - int saltlen; - int i, n; -- unsigned char alt_result[16]; -+ char alt_result[16]; - unsigned char *digest; - - if (check) -diff -Naur grub-0.97.orig/stage2/start_eltorito.S grub-0.97/stage2/start_eltorito.S ---- grub-0.97.orig/stage2/start_eltorito.S 2004-03-27 08:14:20.000000000 -0800 -+++ grub-0.97/stage2/start_eltorito.S 2006-05-28 20:31:17.770936712 -0700 -@@ -40,9 +40,9 @@ - #define ABS(x) (x-_start+BOOTSEC_LOCATION) - - #ifdef STAGE1_5 --# define STAGE_ADDR 0x2000 -+# define STAGE_ADDR 0x2200 - #else --# define STAGE_ADDR 0x8000 -+# define STAGE_ADDR 0x8200 - #endif /* STAGE1_5 */ - - /* Print message string */ -@@ -71,12 +71,14 @@ - . = _start + 8 /* Pad to file offset 8 */ - - /* This table gets filled in by mkisofs using the -- -boot-info-table option */ --bi_pvd: .long 0xDEADBEEF /* LBA of primary volume descript */ --bi_file: .long 0xDEADBEEF /* LBA of boot file */ --bi_length: .long 0xDEADBEEF /* Length of boot file */ --bi_csum: .long 0xDEADBEEF /* Checksum of boot file */ --bi_reserved: .space (10*4) /* Reserved */ -+ -boot-info-table option If not, the values in this -+ table are default values that we can use to get us -+ what we need, at least under a certain set of assumptions. */ -+bi_pvd: .long 16 /* LBA of primary volume descript */ -+bi_file: .long 0 /* LBA of boot file */ -+bi_length: .long 0xDEADBEEF /* Length of boot file */ -+bi_csum: .long 0xDEADBEEF /* Checksum of boot file */ -+bi_reserved: .space (10*4) /* Reserved */ - - real_start: - xor %ax, %ax -@@ -92,10 +94,28 @@ - /* save drive reference first thing! */ - mov %dl, ABS(BootDrive) - -- /* print a notification message on the screen */ -- MSG(notification_string) -+ /* check if machine support IBM/MS int 13h extensions */ -+ mov $0x41, %ah -+ mov $0x55AA, %bx -+ int $0x13 -+ jnc load_image -+ -+ /* bios doesn't support int 13h extensions, print error messages */ -+ MSG(int13_error_string1) -+ MSG(notification_done) -+ MSG(int13_error_string2) -+ MSG(notification_done) -+ MSG(int13_error_string3) -+ MSG(notification_done) -+ /* even when bios says that it doesn't support int 13h -+ extensions, do not stop here and try to load image anyway, -+ because some bioses says that there isn't support for -+ extended functions but have the needed extended read function -+ (int 13h, function AH=42h) */ - - load_image: -+ /* print a notification message on the screen */ -+ MSG(notification_string) - /* Set up boot file sector, size, load address */ - mov ABS(bi_length), %eax - add $(ISO_SECTOR_SIZE-1), %eax -@@ -105,6 +125,8 @@ - mov %bx, %es - xor %bx, %bx - mov ABS(bi_file), %eax -+ inc %eax /* do not reload the first sector (this code) */ -+ dec %bp /* this way we have more room for code in stage1 */ - call getlinsec - mov %ds, %ax - mov %ax, %es -@@ -115,7 +137,7 @@ - mov $ABS(firstlist - BOOTSEC_LISTSIZE), %si - mov (%si), %ebp - mov ABS(BootDrive), %dl /* this makes sure %dl is our "boot" drive */ -- ljmp $0, $(STAGE_ADDR+SECTOR_SIZE) /* jump to main() in asm.S */ -+ ljmp $0, $(STAGE_ADDR) /* jump to main() in asm.S */ - - /* go here when you need to stop the machine hard after an error condition */ - stop: jmp stop -@@ -171,11 +193,11 @@ - */ - xint13: - movb $6, ABS(RetryCount) -- pushal - .try: -+ pushal - int $0x13 - jc 1f -- add $(8*4), %sp /* Clean up stack */ -+ popal /* Clean up stack */ - ret - 1: - mov %ah, %dl /* Save error code */ -@@ -276,6 +298,10 @@ - - read_error_string: .string "Read error 0x" - -+int13_error_string1: .string "Support for IBM/MS INT 13h extensions not found" -+int13_error_string2: .string "GRUB cannot be loaded if int 13h/function AH=42h isn't present" -+int13_error_string3: .string "Trying to load stage 2 anyway..." -+ - /* - * EBIOS disk address packet - */ -@@ -306,7 +332,8 @@ - .word 0 - .word 0 - -- . = _start + SECTOR_SIZE - BOOTSEC_LISTSIZE -+ /* size of the code we can place between main body and fixed top location */ -+ . = _start + 1536 - BOOTSEC_LISTSIZE - - /* fill the first data listing with the default */ - blocklist_default_start:/* this is the sector start parameter, in logical -@@ -321,6 +348,12 @@ - #endif - blocklist_default_seg: /* this is the segment of the starting address - to load the data into */ -- .word (STAGE_ADDR + SECTOR_SIZE) >> 4 -+ .word (STAGE_ADDR) >> 4 - - firstlist: /* this label has to be after the list data!!! */ -+ -+ /* this is a workaround to allow more code to be added in stage1, -+ it allows more code to be added for this stage, but for this -+ we can't reload the first sector. So we have to align the code -+ to ISO_SECTOR_SIZE. */ -+ . = _start + ISO_SECTOR_SIZE -diff -Naur grub-0.97.orig/util/grub-install.in grub-0.97/util/grub-install.in ---- grub-0.97.orig/util/grub-install.in 2004-07-24 11:57:31.000000000 -0700 -+++ grub-0.97/util/grub-install.in 2006-05-28 20:30:31.484088268 -0700 -@@ -336,6 +336,10 @@ - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - -+ # Before all invocations of the grub shell, call sync to make sure -+ # the raw device is in sync with any bufferring in filesystems. -+ sync -+ - $grub_shell --batch $no_floppy --device-map=$device_map <$log_file - quit - EOF -@@ -450,6 +454,10 @@ - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - -+# Before all invocations of the grub shell, call sync to make sure -+# the raw device is in sync with any bufferring in filesystems. -+sync -+ - # Now perform the installation. - $grub_shell --batch $no_floppy --device-map=$device_map <$log_file - root $root_drive diff --git a/src/patches/grub-0.97-dmraid-partition-names.patch b/src/patches/grub-0.97-dmraid-partition-names.patch deleted file mode 100644 index 9390b29ace..0000000000 --- a/src/patches/grub-0.97-dmraid-partition-names.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- grub-0.97/lib/device.c.dmraid-partition-names 2006-02-13 18:53:59.000000000 -0500 -+++ grub-0.97/lib/device.c 2006-02-13 18:56:04.000000000 -0500 -@@ -1106,6 +1106,7 @@ - /* Compaq smart and others */ - (strncmp(dev, "/dev/ida/", 9) == 0 || - strncmp(dev, "/dev/ataraid/", 13) == 0 || -+ strncmp(dev, "/dev/mapper/", 12) == 0 || - strncmp(dev, "/dev/cciss/", 11) == 0 || - strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "", - ((partition >> 16) & 0xFF) + 1); diff --git a/src/patches/grub-0.97-dmraid-recheck-bad.patch b/src/patches/grub-0.97-dmraid-recheck-bad.patch deleted file mode 100644 index 49b33ae250..0000000000 --- a/src/patches/grub-0.97-dmraid-recheck-bad.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- grub-0.97/util/grub-install.in.dmraid-recheck-bad 2006-01-13 17:04:26.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2006-01-13 17:05:00.000000000 -0500 -@@ -415,6 +415,14 @@ - grubdir=${bootdir}/grub - device_map=${grubdir}/device.map - -+if [ "$recheck" == "yes" ]; then -+ if grep 'mapper' ${device_map} >/dev/null; then -+ echo 'grub-install does not support reprobing of device.map when' 1>&2 -+ echo 'using a device-mapper based boot device.' 1>&2 -+ exit 1 -+ fi -+fi -+ - # if they just want the images copied, copy the images and then exit - if test $justcopy = yes; then - copy_images diff --git a/src/patches/grub-0.97-dmraid.patch b/src/patches/grub-0.97-dmraid.patch deleted file mode 100644 index 5aad8c4814..0000000000 --- a/src/patches/grub-0.97-dmraid.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- grub-0.97/util/grub-install.in.dmraid 2006-01-13 16:40:24.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2006-01-13 16:40:37.000000000 -0500 -@@ -101,17 +101,24 @@ - # Break the device name into the disk part and the partition part. - case "$host_os" in - linux*) -- tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ -+ tmp_disk=`echo "$1" | grep -v '/mapper/control$' | -+ grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | -+ sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ - -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ - -e 's%\(fd[0-9]*\)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ -- -e 's%\(c[0-7]d[0-9]*\).*$%\1%'` -- tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ -+ -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ -+ -e 's%\(/mapper/[[:alpha:]]\+_[[:alpha:]]\+\)[[:digit:]]\+$%\1%'` -+ tmp_part=`echo "$1" | grep -v '/mapper/control$' | -+ grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | -+ sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ - -e 's%.*d[0-9]*p%%' \ - -e 's%.*/fd[0-9]*$%%' \ - -e 's%.*/floppy/[0-9]*$%%' \ - -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ -- -e 's%.*c[0-7]d[0-9]*p%%'` -+ -e 's%.*c[0-7]d[0-9]*p%%' \ -+ -e 's%.*/mapper/[[:alpha:]]\+_[[:alpha:]]\+\([[:digit:]]\+\)$%\1%' | -+ grep -v '.*/mapper/.*'` - ;; - gnu*) - tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` -@@ -253,6 +260,43 @@ - return 0 - } - -+# Usage: stat_device file -+# Find major:minor of a device node. -+stat_device() { -+ majmin=`stat -c "%t:%T" "$1" 2>/dev/null` -+ if test -z "$majmin"; then -+ echo "Could not find device for $1" 2>&1 -+ exit 1 -+ fi -+ -+ echo "$majmin" -+} -+ -+# Usage: find_mapper_device file -+# Find a file in /dev/mapper with the same major:minor as the specified node. -+find_mapper_device() { -+ if [ -b "$1" ]; then -+ dev="$1" -+ else -+ mntpnt=`echo "$1" | sed 's,/,\\\\/,g'` -+ dev=`awk '($2 ~ /'$mntpnt'/) { print $1 }' /etc/mtab` -+ fi -+ if test -z "$dev"; then -+ echo "Could not find device for $1" 2>&1 -+ exit 1 -+ fi -+ -+ majmin=`stat_device $dev` -+ for x in /dev/mapper/* ; do -+ devmajmin=`stat_device "$x"` -+ if [ "$majmin" == "$devmajmin" ]; then -+ echo "$x" -+ return 0 -+ fi -+ done -+ return 1 -+} -+ - # Usage: find_device file - # Find block device on which the file resides. - find_device () { -@@ -265,9 +309,14 @@ - exit 1 - fi - -- tmp_fname=`resolve_symlink $tmp_fname` -+ ret_fname=`resolve_symlink $tmp_fname` -+ tmp_fname=`find_mapper_device $ret_fname` -+ if test -n "$tmp_fname"; then -+ ret_fname="$tmp_fname" -+ fi - -- echo "$tmp_fname" -+ echo "$ret_fname" -+ return 0 - } - - copy_images() { diff --git a/src/patches/grub-0.97-install.in.patch b/src/patches/grub-0.97-install.in.patch deleted file mode 100644 index a9f2aefdc4..0000000000 --- a/src/patches/grub-0.97-install.in.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- grub-0.97/util/grub-install.in.install 2005-12-12 18:15:45.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2005-12-12 18:18:11.000000000 -0500 -@@ -324,6 +324,15 @@ - test -d "$bootdir" || mkdir "$bootdir" || exit 1 - test -d "$grubdir" || mkdir "$grubdir" || exit 1 - -+# Copy the GRUB images to the GRUB directory. -+for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -+ rm -f $file || exit 1 -+done -+for file in \ -+ ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do -+ cp -f $file ${grubdir} || exit 1 -+done -+ - # If --recheck is specified, remove the device map, if present. - if test $recheck = yes; then - rm -f $device_map -@@ -406,15 +415,6 @@ - exit 1 - fi - --# Copy the GRUB images to the GRUB directory. --for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -- rm -f $file || exit 1 --done --for file in \ -- ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do -- cp -f $file ${grubdir} || exit 1 --done -- - # Make a default file. - ${grub_set_default} --root-directory=${rootdir} default - diff --git a/src/patches/grub-0.97-mactel-kbd.patch b/src/patches/grub-0.97-mactel-kbd.patch deleted file mode 100644 index f1de19fe90..0000000000 --- a/src/patches/grub-0.97-mactel-kbd.patch +++ /dev/null @@ -1,100 +0,0 @@ ---- grub-0.97/stage2/asm.S.mactel-kbd 2006-06-12 17:00:10.000000000 -0400 -+++ grub-0.97/stage2/asm.S 2006-06-12 17:03:38.000000000 -0400 -@@ -1651,7 +1651,30 @@ - jnz 3f - ret - --3: /* use keyboard controller */ -+3: /* -+ * try to switch gateA20 using PORT92, the "Fast A20 and Init" -+ * register -+ */ -+ mov $0x92, %dx -+ inb %dx, %al -+ /* skip the port92 code if it's unimplemented (read returns 0xff) */ -+ cmpb $0xff, %al -+ jz 6f -+ -+ /* set or clear bit1, the ALT_A20_GATE bit */ -+ movb 4(%esp), %ah -+ testb %ah, %ah -+ jz 4f -+ orb $2, %al -+ jmp 5f -+4: and $0xfd, %al -+ -+ /* clear the INIT_NOW bit; don't accidently reset the machine */ -+5: and $0xfe, %al -+ outb %al, %dx -+ -+ -+6: /* use keyboard controller */ - pushl %eax - - call gloop1 -@@ -1661,9 +1684,12 @@ - - gloopint1: - inb $K_STATUS -+ cmpb $0xff, %al -+ jz gloopint1_done - andb $K_IBUF_FUL, %al - jnz gloopint1 - -+gloopint1_done: - movb $KB_OUTPUT_MASK, %al - cmpb $0, 0x8(%esp) - jz gdoit -@@ -1684,6 +1710,8 @@ - - gloop1: - inb $K_STATUS -+ cmpb $0xff, %al -+ jz gloop2ret - andb $K_IBUF_FUL, %al - jnz gloop1 - -@@ -1994,8 +2022,25 @@ - call EXT_C(prot_to_real) - .code16 - -+.again: -+ mov $0x11, %ah /* poll kbd */ - int $0x16 - -+ jz .again -+#if 0 -+/* XXX handle serial here? -- pj */ -+ jnz .kbd -+#endif -+.kbd: -+ mov $0x10, %ah -+ int $0x16 -+ cmp $0xe0, %al -+ jnz .not_ext -+ xor %al, %al -+.not_ext: -+ and %al, %al -+ jz .func_key -+.func_key: - movw %ax, %dx /* real_to_prot uses %eax */ - call translate_keycode - call remap_ascii_char -@@ -2003,7 +2048,7 @@ - DATA32 call EXT_C(real_to_prot) - .code32 - -- movw %dx, %ax -+ mov %dx, %ax - - pop %ebp - ret -@@ -2029,7 +2074,7 @@ - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - -- movb $0x1, %ah -+ movb $0x11, %ah - int $0x16 - - DATA32 jz notpending diff --git a/src/patches/grub-0.97-mdadm-path.patch b/src/patches/grub-0.97-mdadm-path.patch deleted file mode 100644 index fff301c279..0000000000 --- a/src/patches/grub-0.97-mdadm-path.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- grub-0.97/util/grub-install.in.mdadm-path 2005-12-12 18:42:23.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2005-12-12 18:44:15.000000000 -0500 -@@ -30,5 +30,6 @@ - pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} - - grub_shell=${sbindir}/grub -+mdadm=${sbindir}/mdadm - log_file=/tmp/grub-install.log.$$ - img_file=/tmp/grub-install.img.$$ -@@ -217,7 +218,7 @@ - is_raid1_device () { - case "$host_os" in - linux*) -- level=`mdadm --query --detail $1 2>/dev/null | \ -+ level=`$mdadm --query --detail $1 2>/dev/null | \ - awk '/Raid Level :/ {print $4}'` - if [ "$level" = "raid1" ]; then - return 0 -@@ -236,7 +237,7 @@ - linux*) - if is_raid1_device $source_device ; then - list="" -- for device in `mdadm --query --detail "${source_device}" | \ -+ for device in `$mdadm --query --detail "${source_device}" | \ - awk '/\/dev\/[^(md)]/ {print $7}'` ; do - list="$list $device" - done diff --git a/src/patches/grub-0.97-mpath.patch b/src/patches/grub-0.97-mpath.patch deleted file mode 100644 index 4b7edf3ac2..0000000000 --- a/src/patches/grub-0.97-mpath.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- grub-0.97/util/grub-install.in.mpath 2006-08-02 17:21:53.000000000 -0400 -+++ grub-0.97/util/grub-install.in 2006-08-02 17:23:23.000000000 -0400 -@@ -107,6 +107,7 @@ - -e 's%\(fd[0-9]*\)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ - -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ -+ -e 's%\(/mapper/[[:alpha:]]\+[[:digit:]]\+\)p[[:digit:]]\+$%\1%' \ - -e 's%\(/mapper/[[:alpha:]]\+_[[:alpha:]]\+\)[[:digit:]]\+$%\1%'` - tmp_part=`echo "$1" | grep -v '/mapper/control$' | - grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | -@@ -116,6 +117,7 @@ - -e 's%.*/floppy/[0-9]*$%%' \ - -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ - -e 's%.*c[0-7]d[0-9]*p%%' \ -+ -e 's%.*/mapper/[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \ - -e 's%.*/mapper/[[:alpha:]]\+_[[:alpha:]]\+\([[:digit:]]\+\)$%\1%' | - grep -v '.*/mapper/.*'` - ;; diff --git a/src/patches/grub-0.97-nx-multiinstall.patch b/src/patches/grub-0.97-nx-multiinstall.patch deleted file mode 100644 index f0e4ec0f74..0000000000 --- a/src/patches/grub-0.97-nx-multiinstall.patch +++ /dev/null @@ -1,60 +0,0 @@ -2006-03-09 Alexandre Oliva - - * lib/builtins.c (install_blocklist_helper): Move static - last_lenght... - (install_func_context): ... here. - (install_func): Reset it. - -Index: grub-0.97/stage2/builtins.c -=================================================================== ---- grub-0.97.orig/stage2/builtins.c 2006-03-09 10:26:41.000000000 -0300 -+++ grub-0.97/stage2/builtins.c 2006-03-09 11:36:18.000000000 -0300 -@@ -1926,11 +1926,13 @@ static struct { - int saved_sector; - int installaddr; - int installlist; -+ int last_length; - char *stage2_first_buffer; - } install_func_context = { - .saved_sector = 0, - .installaddr = 0, - .installlist = 0, -+ .last_length = SECTOR_SIZE, - .stage2_first_buffer = NULL, - }; - -@@ -1960,19 +1962,19 @@ install_blocklist_helper (int sector, in - int *installlist = &install_func_context.installlist; - char **stage2_first_buffer = &install_func_context.stage2_first_buffer; - /* Was the last sector full? */ -- static int last_length = SECTOR_SIZE; -+ int *last_length = &install_func_context.last_length; - - if (debug) - printf("[%d]", sector); - -- if (offset != 0 || last_length != SECTOR_SIZE) -+ if (offset != 0 || *last_length != SECTOR_SIZE) - { - /* We found a non-sector-aligned data block. */ - errnum = ERR_UNALIGNED; - return; - } - -- last_length = length; -+ *last_length = length; - - if (*((unsigned long *) (*installlist - 4)) - + *((unsigned short *) *installlist) != sector -@@ -2027,7 +2029,11 @@ install_func (char *arg, int flags) - int is_open = 0; - /* If LBA is forced? */ - int is_force_lba = 0; -+ int *last_length = &install_func_context.last_length; - -+ /* Reset state. */ -+ *last_length = SECTOR_SIZE; -+ - *stage2_first_buffer = old_sect + SECTOR_SIZE; - #ifdef GRUB_UTIL - /* If the Stage 2 is in a partition mounted by an OS, this will store diff --git a/src/patches/grub-0.97-nxstack.patch b/src/patches/grub-0.97-nxstack.patch deleted file mode 100644 index 92742cd571..0000000000 --- a/src/patches/grub-0.97-nxstack.patch +++ /dev/null @@ -1,615 +0,0 @@ ---- grub-0.97/stage2/shared.h.nxstack 2005-12-12 18:31:41.000000000 -0500 -+++ grub-0.97/stage2/shared.h 2005-12-12 18:31:42.000000000 -0500 -@@ -36,8 +36,8 @@ - - /* Maybe redirect memory requests through grub_scratch_mem. */ - #ifdef GRUB_UTIL --extern char *grub_scratch_mem; --# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem) -+extern void *grub_scratch_mem; -+# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem) - # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4) - #else - # define RAW_ADDR(x) (x) ---- grub-0.97/stage2/builtins.c.nxstack 2005-12-12 18:31:41.000000000 -0500 -+++ grub-0.97/stage2/builtins.c 2005-12-12 18:41:47.000000000 -0500 -@@ -131,62 +131,97 @@ - } - - -+/* blocklist_read_helper nee disk_read_blocklist_func was a nested -+ * function, to which pointers were taken and exposed globally. Even -+ * in the GNU-C nested functions extension, they have local linkage, -+ * and aren't guaranteed to be accessable *at all* outside of their -+ * containing scope. -+ * -+ * Above and beyond all of that, the variables within blocklist_func_context -+ * are originally local variables, with local (not even static) linkage, -+ * from within blocklist_func. These were each referenced by -+ * disk_read_blocklist_func, which is only called from other functions -+ * through a globally scoped pointer. -+ * -+ * The documentation in GCC actually uses the words "all hell will break -+ * loose" to describe this scenario. -+ * -+ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn -+ * about it (possibly because of the scoping madness?) -+ */ -+ -+static struct { -+ int start_sector; -+ int num_sectors; -+ int num_entries; -+ int last_length; -+} blocklist_func_context = { -+ .start_sector = 0, -+ .num_sectors = 0, -+ .num_entries = 0, -+ .last_length = 0 -+}; -+ -+/* Collect contiguous blocks into one entry as many as possible, -+ and print the blocklist notation on the screen. */ -+static void -+blocklist_read_helper (int sector, int offset, int length) -+{ -+ int *start_sector = &blocklist_func_context.start_sector; -+ int *num_sectors = &blocklist_func_context.num_sectors; -+ int *num_entries = &blocklist_func_context.num_entries; -+ int *last_length = &blocklist_func_context.last_length; -+ -+ if (*num_sectors > 0) -+ { -+ if (*start_sector + *num_sectors == sector -+ && offset == 0 && *last_length == SECTOR_SIZE) -+ { -+ *num_sectors++; -+ *last_length = length; -+ return; -+ } -+ else -+ { -+ if (*last_length == SECTOR_SIZE) -+ grub_printf ("%s%d+%d", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors); -+ else if (*num_sectors > 1) -+ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors-1, -+ *start_sector + *num_sectors-1 - part_start, -+ *last_length); -+ else -+ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "", -+ *start_sector - part_start, *last_length); -+ *num_entries++; -+ *num_sectors = 0; -+ } -+ } -+ -+ if (offset > 0) -+ { -+ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "", -+ sector-part_start, offset, offset+length); -+ *num_entries++; -+ } -+ else -+ { -+ *start_sector = sector; -+ *num_sectors = 1; -+ *last_length = length; -+ } -+} -+ - /* blocklist */ - static int - blocklist_func (char *arg, int flags) - { - char *dummy = (char *) RAW_ADDR (0x100000); -- int start_sector; -- int num_sectors = 0; -- int num_entries = 0; -- int last_length = 0; - -- auto void disk_read_blocklist_func (int sector, int offset, int length); -- -- /* Collect contiguous blocks into one entry as many as possible, -- and print the blocklist notation on the screen. */ -- auto void disk_read_blocklist_func (int sector, int offset, int length) -- { -- if (num_sectors > 0) -- { -- if (start_sector + num_sectors == sector -- && offset == 0 && last_length == SECTOR_SIZE) -- { -- num_sectors++; -- last_length = length; -- return; -- } -- else -- { -- if (last_length == SECTOR_SIZE) -- grub_printf ("%s%d+%d", num_entries ? "," : "", -- start_sector - part_start, num_sectors); -- else if (num_sectors > 1) -- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", -- start_sector - part_start, num_sectors-1, -- start_sector + num_sectors-1 - part_start, -- last_length); -- else -- grub_printf ("%s%d[0-%d]", num_entries ? "," : "", -- start_sector - part_start, last_length); -- num_entries++; -- num_sectors = 0; -- } -- } -- -- if (offset > 0) -- { -- grub_printf("%s%d[%d-%d]", num_entries ? "," : "", -- sector-part_start, offset, offset+length); -- num_entries++; -- } -- else -- { -- start_sector = sector; -- num_sectors = 1; -- last_length = length; -- } -- } -+ int *start_sector = &blocklist_func_context.start_sector; -+ int *num_sectors = &blocklist_func_context.num_sectors; -+ int *num_entries = &blocklist_func_context.num_entries; - - /* Open the file. */ - if (! grub_open (arg)) -@@ -206,15 +241,15 @@ - grub_printf (")"); - - /* Read in the whole file to DUMMY. */ -- disk_read_hook = disk_read_blocklist_func; -+ disk_read_hook = blocklist_read_helper; - if (! grub_read (dummy, -1)) - goto fail; - - /* The last entry may not be printed yet. Don't check if it is a - * full sector, since it doesn't matter if we read too much. */ -- if (num_sectors > 0) -- grub_printf ("%s%d+%d", num_entries ? "," : "", -- start_sector - part_start, num_sectors); -+ if (*num_sectors > 0) -+ grub_printf ("%s%d+%d", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors); - - grub_printf ("\n"); - -@@ -1889,6 +1924,77 @@ - - - /* install */ -+static struct { -+ int saved_sector; -+ int installaddr; -+ int installlist; -+ char *stage2_first_buffer; -+} install_func_context = { -+ .saved_sector = 0, -+ .installaddr = 0, -+ .installlist = 0, -+ .stage2_first_buffer = NULL, -+}; -+ -+/* Save the first sector of Stage2 in STAGE2_SECT. */ -+/* Formerly disk_read_savesect_func with local scope inside install_func */ -+static void -+install_savesect_helper(int sector, int offset, int length) -+{ -+ if (debug) -+ printf ("[%d]", sector); -+ -+ /* ReiserFS has files which sometimes contain data not aligned -+ on sector boundaries. Returning an error is better than -+ silently failing. */ -+ if (offset != 0 || length != SECTOR_SIZE) -+ errnum = ERR_UNALIGNED; -+ -+ install_func_context.saved_sector = sector; -+} -+ -+/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ -+/* Formerly disk_read_blocklist_func with local scope inside install_func */ -+static void -+install_blocklist_helper (int sector, int offset, int length) -+{ -+ int *installaddr = &install_func_context.installaddr; -+ int *installlist = &install_func_context.installlist; -+ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; -+ /* Was the last sector full? */ -+ static int last_length = SECTOR_SIZE; -+ -+ if (debug) -+ printf("[%d]", sector); -+ -+ if (offset != 0 || last_length != SECTOR_SIZE) -+ { -+ /* We found a non-sector-aligned data block. */ -+ errnum = ERR_UNALIGNED; -+ return; -+ } -+ -+ last_length = length; -+ -+ if (*((unsigned long *) (*installlist - 4)) -+ + *((unsigned short *) *installlist) != sector -+ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4) -+ { -+ *installlist -= 8; -+ -+ if (*((unsigned long *) (*installlist - 8))) -+ errnum = ERR_WONT_FIT; -+ else -+ { -+ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4); -+ *((unsigned long *) (*installlist - 4)) = sector; -+ } -+ } -+ -+ *((unsigned short *) *installlist) += 1; -+ *installaddr += 512; -+} -+ - static int - install_func (char *arg, int flags) - { -@@ -1896,8 +2002,12 @@ - char *stage1_buffer = (char *) RAW_ADDR (0x100000); - char *stage2_buffer = stage1_buffer + SECTOR_SIZE; - char *old_sect = stage2_buffer + SECTOR_SIZE; -- char *stage2_first_buffer = old_sect + SECTOR_SIZE; -- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; -+ /* stage2_first_buffer used to be defined as: -+ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */ -+ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; -+ /* and stage2_second_buffer was: -+ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */ -+ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE; - /* XXX: Probably SECTOR_SIZE is reasonable. */ - char *config_filename = stage2_second_buffer + SECTOR_SIZE; - char *dummy = config_filename + SECTOR_SIZE; -@@ -1906,10 +2016,11 @@ - int src_drive, src_partition, src_part_start; - int i; - struct geometry dest_geom, src_geom; -- int saved_sector; -+ int *saved_sector = &install_func_context.saved_sector; - int stage2_first_sector, stage2_second_sector; - char *ptr; -- int installaddr, installlist; -+ int *installaddr = &install_func_context.installaddr; -+ int *installlist = &install_func_context.installlist; - /* Point to the location of the name of a configuration file in Stage 2. */ - char *config_file_location; - /* If FILE is a Stage 1.5? */ -@@ -1918,68 +2029,14 @@ - int is_open = 0; - /* If LBA is forced? */ - int is_force_lba = 0; -- /* Was the last sector full? */ -- int last_length = SECTOR_SIZE; - -+ *stage2_first_buffer = old_sect + SECTOR_SIZE; - #ifdef GRUB_UTIL - /* If the Stage 2 is in a partition mounted by an OS, this will store - the filename under the OS. */ - char *stage2_os_file = 0; - #endif /* GRUB_UTIL */ - -- auto void disk_read_savesect_func (int sector, int offset, int length); -- auto void disk_read_blocklist_func (int sector, int offset, int length); -- -- /* Save the first sector of Stage2 in STAGE2_SECT. */ -- auto void disk_read_savesect_func (int sector, int offset, int length) -- { -- if (debug) -- printf ("[%d]", sector); -- -- /* ReiserFS has files which sometimes contain data not aligned -- on sector boundaries. Returning an error is better than -- silently failing. */ -- if (offset != 0 || length != SECTOR_SIZE) -- errnum = ERR_UNALIGNED; -- -- saved_sector = sector; -- } -- -- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and -- INSTALLSECT. */ -- auto void disk_read_blocklist_func (int sector, int offset, int length) -- { -- if (debug) -- printf("[%d]", sector); -- -- if (offset != 0 || last_length != SECTOR_SIZE) -- { -- /* We found a non-sector-aligned data block. */ -- errnum = ERR_UNALIGNED; -- return; -- } -- -- last_length = length; -- -- if (*((unsigned long *) (installlist - 4)) -- + *((unsigned short *) installlist) != sector -- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) -- { -- installlist -= 8; -- -- if (*((unsigned long *) (installlist - 8))) -- errnum = ERR_WONT_FIT; -- else -- { -- *((unsigned short *) (installlist + 2)) = (installaddr >> 4); -- *((unsigned long *) (installlist - 4)) = sector; -- } -- } -- -- *((unsigned short *) installlist) += 1; -- installaddr += 512; -- } -- - /* First, check the GNU-style long option. */ - while (1) - { -@@ -2011,10 +2068,10 @@ - addr = skip_to (0, file); - - /* Get the installation address. */ -- if (! safe_parse_maxint (&addr, &installaddr)) -+ if (! safe_parse_maxint (&addr, installaddr)) - { - /* ADDR is not specified. */ -- installaddr = 0; -+ *installaddr = 0; - ptr = addr; - errnum = 0; - } -@@ -2110,17 +2167,17 @@ - = 0x9090; - - /* Read the first sector of Stage 2. */ -- disk_read_hook = disk_read_savesect_func; -- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) -+ disk_read_hook = install_savesect_helper; -+ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -- stage2_first_sector = saved_sector; -+ stage2_first_sector = *saved_sector; - - /* Read the second sector of Stage 2. */ - if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -- stage2_second_sector = saved_sector; -+ stage2_second_sector = *saved_sector; - - /* Check for the version of Stage 2. */ - if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) -@@ -2136,27 +2193,27 @@ - - /* If INSTALLADDR is not specified explicitly in the command-line, - determine it by the Stage 2 id. */ -- if (! installaddr) -+ if (! *installaddr) - { - if (! is_stage1_5) - /* Stage 2. */ -- installaddr = 0x8000; -+ *installaddr = 0x8000; - else - /* Stage 1.5. */ -- installaddr = 0x2000; -+ *installaddr = 0x2000; - } - - *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) - = stage2_first_sector; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) -- = installaddr; -+ = *installaddr; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) -- = installaddr >> 4; -+ = *installaddr >> 4; - -- i = (int) stage2_first_buffer + SECTOR_SIZE - 4; -+ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4; - while (*((unsigned long *) i)) - { -- if (i < (int) stage2_first_buffer -+ if (i < (int) *stage2_first_buffer - || (*((int *) (i - 4)) & 0x80000000) - || *((unsigned short *) i) >= 0xA00 - || *((short *) (i + 2)) == 0) -@@ -2170,13 +2227,13 @@ - i -= 8; - } - -- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; -- installaddr += SECTOR_SIZE; -+ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4; -+ *installaddr += SECTOR_SIZE; - - /* Read the whole of Stage2 except for the first sector. */ - grub_seek (SECTOR_SIZE); - -- disk_read_hook = disk_read_blocklist_func; -+ disk_read_hook = install_blocklist_helper; - if (! grub_read (dummy, -1)) - goto fail; - -@@ -2259,7 +2316,7 @@ - /* Skip the first sector. */ - grub_seek (SECTOR_SIZE); - -- disk_read_hook = disk_read_savesect_func; -+ disk_read_hook = install_savesect_helper; - if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -@@ -2329,7 +2386,7 @@ - else - #endif /* GRUB_UTIL */ - { -- if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) -+ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer)) - goto fail; - } - } -@@ -2351,7 +2408,7 @@ - goto fail; - } - -- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) - { - fclose (fp); - errnum = ERR_WRITE; -@@ -2378,7 +2435,7 @@ - goto fail; - - if (! devwrite (stage2_first_sector - src_part_start, 1, -- stage2_first_buffer)) -+ *stage2_first_buffer)) - goto fail; - - if (! devwrite (stage2_second_sector - src_part_start, 1, ---- grub-0.97/grub/asmstub.c.nxstack 2005-12-12 18:31:41.000000000 -0500 -+++ grub-0.97/grub/asmstub.c 2005-12-12 18:31:42.000000000 -0500 -@@ -42,6 +42,7 @@ - #include - #include - #include -+#include - - #ifdef __linux__ - # include /* ioctl */ -@@ -82,7 +83,7 @@ - struct apm_info apm_bios_info; - - /* Emulation requirements. */ --char *grub_scratch_mem = 0; -+void *grub_scratch_mem = 0; - - struct geometry *disks = 0; - -@@ -106,14 +107,62 @@ - static unsigned int serial_speed; - #endif /* SIMULATE_SLOWNESS_OF_SERIAL */ - -+/* This allocates page-aligned storage of the specified size, which must be -+ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE) -+ */ -+#ifdef __linux__ -+static void * -+grub_mmap_alloc(size_t len) -+{ -+ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE; -+ -+#ifdef MAP_32BIT -+ mmap_flags |= MAP_32BIT; -+#endif -+ /* Mark the simulated stack executable, as GCC uses stack trampolines -+ * to implement nested functions. */ -+ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0); -+} -+#else /* !defined(__linux__) */ -+static void * -+grub_mmap_alloc(size_t len) -+{ -+ int fd = 0, offset = 0, ret = 0; -+ void *pa = MAP_FAILED; -+ char template[] = "/tmp/grub_mmap_alloc_XXXXXX"; -+ errno_t e; -+ -+ fd = mkstemp(template); -+ if (fd < 0) -+ return pa; -+ -+ unlink(template); -+ -+ ret = ftruncate(fd, len); -+ if (ret < 0) -+ return pa; -+ -+ /* Mark the simulated stack executable, as GCC uses stack trampolines -+ * to implement nested functions. */ -+ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, -+ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset); -+ -+ e = errno; -+ close(fd); -+ errno = e; -+ return pa; -+} -+#endif /* defined(__linux__) */ -+ - /* The main entry point into this mess. */ - int - grub_stage2 (void) - { - /* These need to be static, because they survive our stack transitions. */ - static int status = 0; -- static char *realstack; -- char *scratch, *simstack; -+ static void *realstack; -+ void *simstack_alloc_base, *simstack; -+ size_t simstack_size, page_size; - int i; - - auto void doit (void); -@@ -145,9 +194,35 @@ - } - - assert (grub_scratch_mem == 0); -- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); -- assert (scratch); -- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); -+ -+ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and -+ * make sure the memory is aligned to a multiple of the system's -+ * page size */ -+ page_size = sysconf (_SC_PAGESIZE); -+ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15); -+ if (simstack_size % page_size) -+ { -+ /* If we're not on a page_size boundary, round up to the next one */ -+ simstack_size &= ~(page_size-1); -+ simstack_size += page_size; -+ } -+ -+ /* Add one for a PROT_NONE boundary page at each end. */ -+ simstack_size += 2 * page_size; -+ -+ simstack_alloc_base = grub_mmap_alloc(simstack_size); -+ assert (simstack_alloc_base != MAP_FAILED); -+ -+ /* mark pages above and below our simstack area as innaccessable. -+ * If the implementation we're using doesn't support that, then the -+ * new protection modes are undefined. It's safe to just ignore -+ * them, though. It'd be nice if we knew that we'd get a SEGV for -+ * touching the area, but that's all. it'd be nice to have. */ -+ mprotect (simstack_alloc_base, page_size, PROT_NONE); -+ mprotect ((void *)((unsigned long)simstack_alloc_base + -+ simstack_size - page_size), page_size, PROT_NONE); -+ -+ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size); - - /* FIXME: simulate the memory holes using mprot, if available. */ - -@@ -220,7 +295,7 @@ - device_map = 0; - free (disks); - disks = 0; -- free (scratch); -+ munmap(simstack_alloc_base, simstack_size); - grub_scratch_mem = 0; - - if (serial_device) diff --git a/src/patches/grub-0.97-once.patch b/src/patches/grub-0.97-once.patch deleted file mode 100644 index 6fb9a8ddc5..0000000000 --- a/src/patches/grub-0.97-once.patch +++ /dev/null @@ -1,513 +0,0 @@ ---- grub-0.97/stage2/builtins.c.bootonce 2005-12-12 18:23:12.000000000 -0500 -+++ grub-0.97/stage2/builtins.c 2005-12-12 18:29:20.000000000 -0500 -@@ -3217,146 +3217,175 @@ - }; - - --/* savedefault */ -+ -+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) -+/* Write specified default entry number into stage2 file. */ - static int --savedefault_func (char *arg, int flags) -+savedefault_helper(int new_default) - { --#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) -- unsigned long tmp_drive = saved_drive; -- unsigned long tmp_partition = saved_partition; -- char *default_file = (char *) DEFAULT_FILE_BUF; -- char buf[10]; -- char sect[SECTOR_SIZE]; -- int entryno; -- int sector_count = 0; -- int saved_sectors[2]; -- int saved_offsets[2]; -- int saved_lengths[2]; -- -- /* Save sector information about at most two sectors. */ -- auto void disk_read_savesect_func (int sector, int offset, int length); -- void disk_read_savesect_func (int sector, int offset, int length) -- { -- if (sector_count < 2) -- { -- saved_sectors[sector_count] = sector; -- saved_offsets[sector_count] = offset; -- saved_lengths[sector_count] = length; -- } -- sector_count++; -- } -- -- /* This command is only useful when you boot an entry from the menu -- interface. */ -- if (! (flags & BUILTIN_SCRIPT)) -+ char buffer[512]; -+ int *entryno_ptr; -+ -+ /* Get the geometry of the boot drive (i.e. the disk which contains -+ this stage2). */ -+ if (get_diskinfo (boot_drive, &buf_geom)) - { -- errnum = ERR_UNRECOGNIZED; -+ errnum = ERR_NO_DISK; - return 1; - } - -- /* Determine a saved entry number. */ -- if (*arg) -+ /* Load the second sector of this stage2. */ -+ if (! rawread (boot_drive, install_second_sector, 0, SECTOR_SIZE, buffer)) - { -- if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0) -- { -- int i; -- int index = 0; -- -- for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) -- { -- if (fallback_entries[i] < 0) -- break; -- if (fallback_entries[i] == current_entryno) -- { -- index = i + 1; -- break; -- } -- } -- -- if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0) -- { -- /* This is the last. */ -- errnum = ERR_BAD_ARGUMENT; -- return 1; -- } -+ return 1; -+ } - -- entryno = fallback_entries[index]; -- } -- else if (! safe_parse_maxint (&arg, &entryno)) -- return 1; -+ /* Sanity check. */ -+ if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2 -+ || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) -+ { -+ errnum = ERR_BAD_VERSION; -+ return 1; - } -- else -- entryno = current_entryno; -+ -+ entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO); - -- /* Open the default file. */ -- saved_drive = boot_drive; -- saved_partition = install_partition; -- if (grub_open (default_file)) -+ /* Check if the saved entry number differs from current entry number. */ -+ if (*entryno_ptr != new_default) - { -- int len; -+ /* Overwrite the saved entry number. */ -+ *entryno_ptr = new_default; - -- disk_read_hook = disk_read_savesect_func; -- len = grub_read (buf, sizeof (buf)); -- disk_read_hook = 0; -- grub_close (); -+ /* Save the image in the disk. */ -+ if (! rawwrite (boot_drive, install_second_sector, buffer)) -+ return 1; - -- if (len != sizeof (buf)) -- { -- /* This is too small. Do not modify the file manually, please! */ -- errnum = ERR_READ; -- goto fail; -- } -+ /* Clear the cache. */ -+ buf_track = -1; -+ } - -- if (sector_count > 2) -- { -- /* Is this possible?! Too fragmented! */ -- errnum = ERR_FSYS_CORRUPT; -- goto fail; -- } -- -- /* Set up a string to be written. */ -- grub_memset (buf, '\n', sizeof (buf)); -- grub_sprintf (buf, "%d", entryno); -- -- if (saved_lengths[0] < sizeof (buf)) -- { -- /* The file is anchored to another file and the first few bytes -- are spanned in two sectors. Uggh... */ -- if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, -- sect)) -- goto fail; -- grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]); -- if (! rawwrite (current_drive, saved_sectors[0], sect)) -- goto fail; -+ return 0; -+} -+#endif - -- if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE, -- sect)) -- goto fail; -- grub_memmove (sect + saved_offsets[1], -- buf + saved_lengths[0], -- sizeof (buf) - saved_lengths[0]); -- if (! rawwrite (current_drive, saved_sectors[1], sect)) -- goto fail; -- } -+#if !defined(SUPPORT_DISKLESS) && defined(GRUB_UTIL) -+/* -+ * Full implementation of new `savedefault' for GRUB shell. -+ * XXX This needs fixing for stage2 files which aren't accessible -+ * through a mounted filesystem. -+ */ -+static int -+savedefault_shell(char *arg, int flags) -+{ -+ char *stage2_os_file = "/boot/grub/stage2"; /* Default filename */ -+ FILE *fp; -+ char buffer[512]; -+ int *entryno_ptr; -+ int new_default = 0; -+ int old_default = 0; -+ -+ while (1) -+ { -+ if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) -+ { -+ stage2_os_file = arg + sizeof ("--stage2=") - 1; -+ arg = skip_to (0, arg); -+ nul_terminate (stage2_os_file); -+ } -+ else if (grub_memcmp ("--default=", arg, sizeof ("--default=") - 1) == 0) -+ { -+ char *p = arg + sizeof ("--default=") - 1; -+ if (! safe_parse_maxint (&p, &new_default)) -+ return 1; -+ arg = skip_to (0, arg); -+ } -+ else if (grub_memcmp ("--once", arg, sizeof ("--once") - 1) == 0) -+ { -+ new_default <<= 8; -+ new_default |= STAGE2_ONCEONLY_ENTRY; -+ arg = skip_to (0, arg); -+ } - else -- { -- /* This is a simple case. It fits into a single sector. */ -- if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, -- sect)) -- goto fail; -- grub_memmove (sect + saved_offsets[0], buf, sizeof (buf)); -- if (! rawwrite (current_drive, saved_sectors[0], sect)) -- goto fail; -- } -+ break; -+ } - -- /* Clear the cache. */ -- buf_track = -1; -+ if (! (fp = fopen(stage2_os_file, "r+"))) -+ { -+ errnum = ERR_FILE_NOT_FOUND; -+ return 1; -+ } -+ -+ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) -+ { -+ fclose (fp); -+ errnum = ERR_BAD_VERSION; -+ return 1; -+ } -+ -+ if (fread (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ { -+ fclose (fp); -+ errnum = ERR_READ; -+ return 1; - } - -- fail: -- saved_drive = tmp_drive; -- saved_partition = tmp_partition; -- return errnum; -+ /* Sanity check. */ -+ if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2 -+ || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) -+ { -+ errnum = ERR_BAD_VERSION; -+ return 1; -+ } -+ -+ entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO); -+ if (new_default & STAGE2_ONCEONLY_ENTRY) -+ { -+ old_default=*entryno_ptr; -+ *entryno_ptr = new_default + (old_default & 0xFF); -+ } -+ else -+ { -+ *entryno_ptr = new_default; -+ } -+ -+ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) -+ { -+ fclose (fp); -+ errnum = ERR_BAD_VERSION; -+ return 1; -+ } -+ -+ if (fwrite (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ { -+ fclose (fp); -+ errnum = ERR_WRITE; -+ return 1; -+ } -+ -+ (void)fflush (fp); -+ fclose (fp); -+ return 0; -+} -+#endif -+ -+/* savedefault */ -+static int -+savedefault_func (char *arg, int flags) -+{ -+#if !defined(SUPPORT_DISKLESS) -+#if !defined(GRUB_UTIL) -+ /* This command is only useful when you boot an entry from the menu -+ interface. */ -+ if (! (flags & BUILTIN_SCRIPT)) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ return 1; -+ } -+ -+ return savedefault_helper(current_entryno); -+#else /* defined(GRUB_UTIL) */ -+ return savedefault_shell(arg, flags); -+#endif - #else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ - errnum = ERR_UNRECOGNIZED; - return 1; -@@ -3368,10 +3397,14 @@ - "savedefault", - savedefault_func, - BUILTIN_CMDLINE, -- "savedefault [NUM | `fallback']", -- "Save the current entry as the default boot entry if no argument is" -- " specified. If a number is specified, this number is saved. If" -- " `fallback' is used, next fallback entry is saved." -+#ifdef GRUB_UTIL -+ "savedefault [--stage2=STAGE2_FILE] [--default=DEFAULT] [--once]", -+ "Save DEFAULT as the default boot entry in STAGE2_FILE. If '--once'" -+ " is specified, the default is reset after the next reboot." -+#else -+ "savedefault", -+ "Save the current entry as the default boot entry." -+#endif - }; - - -@@ -4598,6 +4631,15 @@ - static int - timeout_func (char *arg, int flags) - { -+ /* One-shot default shenanigans -- don't piss around with the menu! */ -+ if (grub_timeout != -1) -+ return 0; -+ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) -+ { -+ grub_timeout = 0; -+ return 0; -+ } -+ - if (! safe_parse_maxint (&arg, &grub_timeout)) - return 1; - ---- grub-0.97/stage2/shared.h.bootonce 2005-12-12 18:23:13.000000000 -0500 -+++ grub-0.97/stage2/shared.h 2005-12-12 18:23:13.000000000 -0500 -@@ -200,6 +200,8 @@ - #define STAGE2_FORCE_LBA 0x11 - #define STAGE2_VER_STR_OFFS 0x12 - -+#define STAGE2_ONCEONLY_ENTRY 0x10000 -+ - /* Stage 2 identifiers */ - #define STAGE2_ID_STAGE2 0 - #define STAGE2_ID_FFS_STAGE1_5 1 ---- grub-0.97/stage2/builtins.c.bootonce 2006-03-13 16:55:11.000000000 -0500 -+++ grub-0.97/stage2/builtins.c 2006-03-13 16:56:01.000000000 -0500 -@@ -761,11 +761,25 @@ - }; - - -+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) -+static int savedefault_helper(int); -+#endif - /* default */ - static int - default_func (char *arg, int flags) - { - #ifndef SUPPORT_DISKLESS -+#ifndef GRUB_UTIL -+ /* Has a forced once-only default been specified? */ -+ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) -+ { -+ int old_defaults=saved_entryno & ~STAGE2_ONCEONLY_ENTRY; -+ grub_timeout = 0; -+ default_entry = old_defaults >> 8; -+ savedefault_helper(old_defaults & 0xff); -+ return 0; -+ } -+#endif - if (grub_strcmp (arg, "saved") == 0) - { - default_entry = saved_entryno; ---- grub-0.97/stage2/stage2.c.bootonce 2006-03-13 17:27:40.000000000 -0500 -+++ grub-0.97/stage2/stage2.c 2006-03-13 17:29:11.000000000 -0500 -@@ -960,38 +960,8 @@ - if (use_config_file) - #endif /* GRUB_UTIL */ - { -- char *default_file = (char *) DEFAULT_FILE_BUF; - int i; -- -- /* Get a saved default entry if possible. */ -- saved_entryno = 0; -- *default_file = 0; -- grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN); -- for (i = grub_strlen(default_file); i >= 0; i--) -- if (default_file[i] == '/') -- { -- i++; -- break; -- } -- default_file[i] = 0; -- grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i); -- if (grub_open (default_file)) -- { -- char buf[10]; /* This is good enough. */ -- char *p = buf; -- int len; -- -- len = grub_read (buf, sizeof (buf)); -- if (len > 0) -- { -- buf[sizeof (buf) - 1] = 0; -- safe_parse_maxint (&p, &saved_entryno); -- } - -- grub_close (); -- } -- errnum = ERR_NONE; -- - do - { - /* STATE 0: Before any title command. ---- grub-0.97/util/grub-install.in.bootonce 2006-03-13 17:39:35.000000000 -0500 -+++ grub-0.97/util/grub-install.in 2006-03-13 17:39:50.000000000 -0500 -@@ -30,7 +30,6 @@ - pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} - - grub_shell=${sbindir}/grub --grub_set_default=${sbindir}/grub-set-default - log_file=/tmp/grub-install.log.$$ - img_file=/tmp/grub-install.img.$$ - rootdir= -@@ -432,9 +431,6 @@ - exit 1 - fi - --# Make a default file. --${grub_set_default} --root-directory=${rootdir} default -- - # Make sure that GRUB reads the same images as the host OS. - test -n "$mkimg" && img_file=`$mkimg` - test -n "$mklog" && log_file=`$mklog` ---- grub-0.97/configure.bootonce 2006-03-13 17:49:05.000000000 -0500 -+++ grub-0.97/configure 2006-03-13 17:49:16.000000000 -0500 -@@ -6135,7 +6135,7 @@ - - - -- ac_config_files="$ac_config_files Makefile stage1/Makefile stage2/Makefile docs/Makefile lib/Makefile util/Makefile grub/Makefile netboot/Makefile util/grub-image util/grub-install util/grub-md5-crypt util/grub-terminfo util/grub-set-default" -+ ac_config_files="$ac_config_files Makefile stage1/Makefile stage2/Makefile docs/Makefile lib/Makefile util/Makefile grub/Makefile netboot/Makefile util/grub-image util/grub-install util/grub-md5-crypt util/grub-terminfo" - - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure -@@ -6754,7 +6754,6 @@ - "util/grub-install" ) CONFIG_FILES="$CONFIG_FILES util/grub-install" ;; - "util/grub-md5-crypt" ) CONFIG_FILES="$CONFIG_FILES util/grub-md5-crypt" ;; - "util/grub-terminfo" ) CONFIG_FILES="$CONFIG_FILES util/grub-terminfo" ;; -- "util/grub-set-default" ) CONFIG_FILES="$CONFIG_FILES util/grub-set-default" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 ---- grub-0.97/configure.ac.bootonce 2006-03-13 17:47:24.000000000 -0500 -+++ grub-0.97/configure.ac 2006-03-13 17:47:37.000000000 -0500 -@@ -666,5 +666,5 @@ - docs/Makefile lib/Makefile util/Makefile \ - grub/Makefile netboot/Makefile util/grub-image \ - util/grub-install util/grub-md5-crypt \ -- util/grub-terminfo util/grub-set-default]) -+ util/grub-terminfo]) - AC_OUTPUT ---- grub-0.97/util/Makefile.am.bootonce 2006-03-13 17:48:39.000000000 -0500 -+++ grub-0.97/util/Makefile.am 2006-03-13 17:48:45.000000000 -0500 -@@ -1,6 +1,5 @@ - bin_PROGRAMS = mbchk --sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ -- grub-set-default -+sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo - noinst_SCRIPTS = grub-image mkbimage - - EXTRA_DIST = mkbimage ---- grub-0.97/util/Makefile.in.bootonce 2006-03-13 17:47:56.000000000 -0500 -+++ grub-0.97/util/Makefile.in 2006-03-13 17:48:34.000000000 -0500 -@@ -43,8 +43,7 @@ - subdir = util - DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/grub-image.in $(srcdir)/grub-install.in \ -- $(srcdir)/grub-md5-crypt.in $(srcdir)/grub-set-default.in \ -- $(srcdir)/grub-terminfo.in -+ $(srcdir)/grub-md5-crypt.in $(srcdir)/grub-terminfo.in - ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 - am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -@@ -52,8 +51,7 @@ - $(ACLOCAL_M4) - mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs - CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = grub-image grub-install grub-md5-crypt \ -- grub-terminfo grub-set-default -+CONFIG_CLEAN_FILES = grub-image grub-install grub-md5-crypt grub-terminfo - am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" - binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) - PROGRAMS = $(bin_PROGRAMS) -@@ -183,8 +181,7 @@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ - target_alias = @target_alias@ --sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ -- grub-set-default -+sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo - - noinst_SCRIPTS = grub-image mkbimage - EXTRA_DIST = mkbimage -@@ -234,8 +231,6 @@ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - grub-terminfo: $(top_builddir)/config.status $(srcdir)/grub-terminfo.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ --grub-set-default: $(top_builddir)/config.status $(srcdir)/grub-set-default.in -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" diff --git a/src/patches/grub-0.97-prototypes.patch b/src/patches/grub-0.97-prototypes.patch deleted file mode 100644 index 21d65d5883..0000000000 --- a/src/patches/grub-0.97-prototypes.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- grub-0.97/acinclude.m4.prototypes 2005-12-12 19:07:24.000000000 -0500 -+++ grub-0.97/acinclude.m4 2005-12-12 19:07:56.000000000 -0500 -@@ -44,6 +44,8 @@ - [AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses]) - AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, - [cat > conftest.c <<\EOF -+void cmain(void); -+ - void - cmain (void) - { diff --git a/src/patches/grub-0.97-stderr.patch b/src/patches/grub-0.97-stderr.patch deleted file mode 100644 index 71d20ada5b..0000000000 --- a/src/patches/grub-0.97-stderr.patch +++ /dev/null @@ -1,102 +0,0 @@ ---- grub-0.97/util/grub-install.in.stderr 2006-07-07 10:56:37.000000000 -0400 -+++ grub-0.97/util/grub-install.in 2006-07-07 11:01:35.000000000 -0400 -@@ -207,7 +207,7 @@ - while test -L $tmp_fname; do - tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'` - if test -z "$tmp_new_fname"; then -- echo "Unrecognized ls output" 2>&1 -+ echo "Unrecognized ls output" 1>&2 - exit 1 - fi - -@@ -264,7 +264,7 @@ - stat_device() { - majmin=`stat -c "%t:%T" "$1" 2>/dev/null` - if test -z "$majmin"; then -- echo "Could not find device for $1" 2>&1 -+ echo "Could not find device for $1" 1>&2 - exit 1 - fi - -@@ -281,7 +281,7 @@ - dev=`awk '($2 ~ /'$mntpnt'/) { print $1 }' /etc/mtab` - fi - if test -z "$dev"; then -- echo "Could not find device for $1" 2>&1 -+ echo "Could not find device for $1" 1>&2 - exit 1 - fi - -@@ -304,11 +304,11 @@ - tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^ ]*\).*%\1%p'` - - if test -z "$tmp_fname"; then -- echo "Could not find device for $1" 2>&1 -+ echo "Could not find device for $1" 1>&2 - exit 1 - fi - -- ret_fname=`resolve_symlink $tmp_fname` -+ ret_fname=`resolve_symlink $tmp_fname` || exit 1 - tmp_fname=`find_mapper_device $ret_fname` - if test -n "$tmp_fname"; then - ret_fname="$tmp_fname" -@@ -325,7 +325,7 @@ - done - for file in \ - ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do -- cp -f $file ${grubdir} || exit 1 -+ cp -f $file ${grubdir} 1>&2 || exit 1 - done - } - -@@ -520,9 +520,9 @@ - # Check for INSTALL_DEVICE. - case "$install_device" in - /dev/*) -- install_device=`resolve_symlink "$install_device"` -+ install_device=`resolve_symlink "$install_device"` || exit 1 - for install_drive in `find_real_devs $install_device` ; do -- install_drive=`convert $install_drive` -+ install_drive=`convert $install_drive` || exit 1 - if is_raid1_device $install_device; then - install_drive=`echo $install_drive | sed 's/,[0-9]*)/)/'` - fi -@@ -550,8 +550,8 @@ - unset install_device - - # Get the root drive. --root_device=`find_device ${rootdir}` --bootdir_device=`find_device ${bootdir}` -+root_device=`find_device ${rootdir}` || exit 1 -+bootdir_device=`find_device ${bootdir}` || exit 1 - - # Check if the boot directory is in the same device as the root directory. - if test "x$root_device" != "x$bootdir_device"; then -@@ -561,7 +561,7 @@ - fi - - # Check if the root directory exists in the same device as the grub directory. --grubdir_device=`find_device ${grubdir}` -+grubdir_device=`find_device ${grubdir}` || exit 1 - - if test "x$grubdir_device" != "x$root_device"; then - # For now, cannot deal with this situation. -@@ -582,7 +582,7 @@ - fi - - # Convert the root deviceto a GRUB drive. --root_drive=`convert "$root_device"` -+root_drive=`convert "$root_device"` || exit 1 - if [ "x$root_drive" = x ]; then - exit 1 - fi -@@ -618,7 +618,7 @@ - - for install_drive in $install_drives; do - # Convert the root deviceto a GRUB drive. -- root_drive=`convert "$root_device"` -+ root_drive=`convert "$root_device"` || exit 1 - if [ "x$root_drive" = x ]; then - exit 1 - fi diff --git a/src/patches/grub-0.97_grub-install_virtio.patch b/src/patches/grub-0.97_grub-install_virtio.patch deleted file mode 100644 index 86afba9939..0000000000 --- a/src/patches/grub-0.97_grub-install_virtio.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- grub-0.97/util/grub-install.in 2010-06-24 08:47:23.000000000 +0200 -+++ grub-0.97/util/grub-install.in 2010-06-24 09:20:42.000000000 +0200 -@@ -102,7 +102,7 @@ - linux*) - # formats that need to be handled (disk name -> partition name): - # floppies: /dev/fd0 -- # normal sd/hd devices: /dev/hda -> /dev/hda3 -+ # normal sd/hd/vd devices: /dev/hda -> /dev/hda3 - # md: /dev/md0 -> /dev/md0p0 - # ide raid devs: /dev/ide/host0/bus0/target0/lun0/disc - # -> /dev/ide/host0/bus0/target0/lun0/part1 -@@ -134,7 +134,7 @@ - # more? - tmp_disk=`echo "$1" | grep -v '/mapper/control$' | - grep -v '/mapper/[[:alnum:]_]\+-[[:digit:]]\+$' | uniq | -- sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ -+ sed -e 's%\([shv]d[a-z]\)[0-9]*$%\1%' \ - -e 's%\(/c[0-9]\+d[0-9]\+\).*$%\1%' \ - -e 's%\(fd[0-9]*\)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ -@@ -142,7 +142,7 @@ - -e 's%\(/mapper/[[:alnum:]]\+\(_[[:alnum:]]\+\)\+\)\p[[:digit:]]\+$%\1%'` - tmp_part=`echo "$1" | grep -v '/mapper/control$' | - grep -v '/mapper/[[:alnum:]_]\+-[[:digit:]]\+$' | uniq | -- sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ -+ sed -e 's%.*/[shv]d[a-z]\([0-9]*\)$%\1%' \ - -e 's%.*/c[0-9]\+d[0-9]\+p\([[:digit:]]\+\)%\1%' \ - -e 's%.*/c[0-9]\+d[0-9]\+$%%' \ - -e 's%.*/fd[0-9]\+$%%' \ -@@ -509,6 +509,10 @@ - if test -f "$device_map"; then - : - else -+ -+ tmp_disk=`echo "$install_device" | grep "/dev/vd"` -+ if test "x$tmp_disk" = x; then -+ - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - -@@ -525,6 +529,11 @@ - fi - - rm -f $log_file -+ -+ else -+ echo "Create fake device.map for virtio device $1" 1>&2 -+ echo "(hd0) $install_device" > $device_map -+ fi - fi - - # Make sure that there is no duplicated entry. diff --git a/src/patches/grub-fedora-18.patch b/src/patches/grub-fedora-18.patch new file mode 100644 index 0000000000..e87c180daa --- /dev/null +++ b/src/patches/grub-fedora-18.patch @@ -0,0 +1,48870 @@ +From: Peter Jones " +Date: Wed Apr 18 12:53:49 EDT 2012 +Subject: [PATCH] Changes from grub-0.97 to master + +This patch is a bundle of the changes between grub-0.97 and master. +It can be reginerated from the git repository at: + +git://github.com/vathpela/grub-fedora.git + +Using the command: + +git diff grub-0.97 master + + .gitignore | 10 + ChangeLog | 48 + Makefile.am | 7 + Makefile.in | 605 --- + acinclude.m4 | 4 + aclocal.m4 | 1061 ----- + config.h.in | 106 + configure | 7639 ----------------------------------------- + configure.in | 113 + docs/.gitignore | 3 + docs/Makefile.am | 9 + docs/Makefile.in | 770 ---- + docs/grub-crypt.8 | 39 + docs/grub-install.8 | 2 + docs/grub.8 | 2 + docs/grub.info | 370 + + docs/grub.texi | 79 + docs/stamp-vti | 4 + docs/version.texi | 4 + efi/.gitignore | 7 + efi/Makefile.am | 76 + efi/byteswap.h | 37 + efi/dhcp.h | 133 + efi/efichainloader.c | 265 + + efi/eficon.c | 306 + + efi/eficore.c | 241 + + efi/efidisk.c | 801 ++++ + efi/efidp.c | 999 +++++ + efi/efigraph.c | 1501 ++++++++ + efi/efimain.c | 129 + efi/efimisc.c | 665 +++ + efi/efimm.c | 539 ++ + efi/efiserial.c | 265 + + efi/efitftp.c | 228 + + efi/efiuga.c | 982 +++++ + efi/font_8x16.c | 4638 ++++++++++++++++++++++++ + efi/graphics.c | 666 +++ + efi/graphics.h | 81 + efi/grub/.gitignore | 1 + efi/grub/efi/api.h | 1716 +++++++++ + efi/grub/efi/console_control.h | 59 + efi/grub/efi/efi.h | 85 + efi/grub/efi/eficall.h | 162 + efi/grub/efi/misc.h | 60 + efi/grub/efi/time.h | 31 + efi/grub/i386/linux.h | 226 + + efi/grub/i386/types.h | 32 + efi/grub/misc.h | 71 + efi/grub/symbol.h | 34 + efi/grub/types.h | 158 + efi/grub/x86_64/linux.h | 234 + + efi/grub/x86_64/types.h | 32 + efi/ia32/callwrap.S | 1 + efi/ia32/callwrap.c | 131 + efi/ia32/loader/bin_to_h.c | 29 + efi/ia32/loader/linux.c | 648 +++ + efi/ia32/loader/switch.S | 118 + efi/ia32/loader/switch.h | 19 + efi/ia32/reloc.c | 79 + efi/ia32/setjmp.S | 86 + efi/pxe.c | 460 ++ + efi/pxe.h | 237 + + efi/ugadebug.h | 201 + + efi/x86_64/callwrap.S | 274 + + efi/x86_64/crt0-efi.S | 63 + efi/x86_64/elf_efi.lds | 58 + efi/x86_64/loader/Makefile | 20 + efi/x86_64/loader/bin_to_h.c | 29 + efi/x86_64/loader/linux.c | 760 ++++ + efi/x86_64/loader/switch.S | 92 + efi/x86_64/loader/switch.h | 25 + efi/x86_64/reloc.c | 79 + efi/x86_64/setjmp.S | 56 + efi/xpm.c | 231 + + efi/xpm.h | 36 + grub.spec | 438 ++ + grub/.gitignore | 2 + grub/Makefile.am | 2 + grub/Makefile.in | 445 -- + grub/asmstub.c | 194 - + grub/efitftp.c | 34 + grub/main.c | 2 + lib/.gitignore | 2 + lib/Makefile.in | 416 -- + lib/device.c | 360 + + makediff | 21 + netboot/.gitignore | 2 + netboot/Makefile.in | 1091 ----- + netboot/etherboot.h | 34 + netboot/main.c | 6 + netboot/misc.c | 58 + netboot/osdep.h | 24 + stage1/.gitignore | 2 + stage1/Makefile.am | 15 + stage1/Makefile.in | 433 -- + stage1/stage1.S | 4 + stage2/.gitignore | 5 + stage2/Makefile.am | 77 + stage2/Makefile.in | 3250 ----------------- + stage2/asm.S | 284 + + stage2/boot.c | 114 + stage2/builtins.c | 1368 +++++-- + stage2/char_io.c | 609 ++- + stage2/cmdline.c | 19 + stage2/common.c | 16 + stage2/disk_io.c | 213 - + stage2/efistubs.c | 7 + stage2/efistubs.h | 8 + stage2/fat.h | 2 + stage2/filesys.h | 28 + stage2/fsys_ext2fs.c | 394 +- + stage2/fsys_fat.c | 41 + stage2/fsys_iso9660.c | 8 + stage2/fsys_jfs.c | 12 + stage2/fsys_minix.c | 10 + stage2/fsys_reiserfs.c | 44 + stage2/fsys_uefi.c | 265 + + stage2/fsys_vstafs.c | 28 + stage2/fsys_xfs.c | 22 + stage2/gpt.h | 69 + stage2/graphics.c | 573 +++ + stage2/graphics.h | 42 + stage2/gunzip.c | 15 + stage2/iso9660.h | 4 + stage2/mb_info.h | 4 + stage2/pc_slice.h | 51 + stage2/serial.c | 4 + stage2/sha256crypt.c | 723 +++ + stage2/sha512crypt.c | 795 ++++ + stage2/shared.h | 126 + stage2/smp-imps.h | 1 + stage2/stage1_5.c | 3 + stage2/stage2.c | 203 - + stage2/start.S | 13 + stage2/term.h | 35 + stage2/tparm.c | 14 + test | 1 + util/.gitignore | 7 + util/Makefile.am | 11 + util/Makefile.in | 478 -- + util/grub-crypt.in | 80 + util/grub-install.in | 334 + + 142 files changed, 26410 insertions(+), 17652 deletions(-) + +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..3d7295a +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1,10 @@ ++Makefile.in ++Makefile ++configure ++aclocal.m4 ++autom4te.cache ++config.h ++config.h.in ++config.log ++config.status ++stamp-h1 +diff --git a/ChangeLog b/ChangeLog +index 0f93033..9602fb9 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -772,6 +772,18 @@ + DATA_LEN is less than or equal to MULTIBOOT_SEARCH. + Reported by Neelkanth Natu . + ++2003-03-12 Leonid Lisovskiy ++ ++ * lib/device.c (get_drive_geometry): grub utility didn't work ++ due to uninitialized 'sector_size' struct geometry member. ++ * stage1/stage1.h (GRUB_NO_DRIVE): Constant moved from ++ stage2/shared.h and its value rolled back to 0xFF for backward ++ compatibility with original grub. ++ * stage1/stage1.S (boot_drive): Use GRUB_NO_DRIVE instead of ++ constant. ++ * stage2/bios.c (get_diskinfo): Workaround for BIOS'es that ++ has CD-ROM drive number = last harddisk + 1. ++ + 2003-03-10 Yoshinori K. Okuji + + From Andrew Walrond : +@@ -816,6 +828,42 @@ + thus corrupts the stack. This is why we specify the exactly + necessary size of 0x42 bytes. + ++2003-01-28 Leonid Lisovskiy ++ ++ ISO9660 support is added. ++ ++ * stage2/fsys_iso9660.c: New file - a lot of code stolen from ++ GRUB/98 0.5. ++ * stage2/iso9660.h: Likewise. ++ * stage2/start_torito.S: New file - El Torito boot sector. ++ * stage2/Makefile.am (noinst_HEADERS): iso9660.h added. ++ (libgrub_a_SOURCES): fsys_iso9660.c added. ++ (pkgdata_DATA): iso9660_stage1_5 added. ++ (noinst_PROGRAMS): iso9660_stage1_5.exec added. ++ * configure.in (--disable-iso9660): New option. ++ * stage2/builtins.c (setup_func): Add item for ISO9660 into ++ STAGE1_5_MAP. ++ * stage2/disk_io.c (rawread): Ability to read devices with ++ sector size other than 512 added. ++ (fsys_table): Added entry for ISO9660. ++ (check_and_print_mount): Don't print error when probing ++ partition. ++ (real_open_partition): Cleanup globals after probing. ++ * stage2/filesys.h [FSYS_ISO9660]: Add entries for ISO9660 ++ functions. ++ (NUM_FSYS): Added FSYS_ISO9660_NUM. ++ * stage2/shared.h (STAGE2_ID_ISO9660_STAGE1_5): New macro. ++ (GRUB_NO_DRIVE): New constant. ++ (struct geometry): New member 'sector_size'. ++ * stage2/bios.c (get_diskinfo): Request 1.xx version of ++ int13 extensions only since higher version request can ++ destroy El Torito emulation on some BIOS'es. ++ (get_cdinfo): New function - get El Torito emulation parameters. ++ * stage2/asm.S (biosdisk_int13_extensions): pass AX, instead ++ of AH for universality, save EBX,ECX,EDX registers content to ++ avoid data corruption in caller functions. ++ (get_diskinfo_int13_extensions): Removed. ++ + 2003-01-25 Yoshinori K. Okuji + + From Steven Dick : +diff --git a/Makefile.am b/Makefile.am +index 63a9a4f..9bde872 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,4 +1,9 @@ + # Do not change this order if you don't know what you are doing. + AUTOMAKE_OPTIONS = 1.7 gnu +-SUBDIRS = netboot stage2 stage1 lib grub util docs ++SUBDIRS = netboot stage2 stage1 lib util docs ++if PLATFORM_EFI ++SUBDIRS += efi ++else ++SUBDIRS += grub ++endif + EXTRA_DIST = BUGS MAINTENANCE +diff --git a/Makefile.in b/Makefile.in +deleted file mode 100644 +index 6652366..0000000 +--- a/Makefile.in ++++ /dev/null +@@ -1,605 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = . +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ +- $(srcdir)/Makefile.in $(srcdir)/config.h.in \ +- $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ +- THANKS TODO compile config.guess config.sub depcomp install-sh \ +- missing mkinstalldirs +-subdir = . +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ +- configure.lineno configure.status.lineno +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = config.h +-CONFIG_CLEAN_FILES = +-SOURCES = +-DIST_SOURCES = +-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +- html-recursive info-recursive install-data-recursive \ +- install-exec-recursive install-info-recursive \ +- install-recursive installcheck-recursive installdirs-recursive \ +- pdf-recursive ps-recursive uninstall-info-recursive \ +- uninstall-recursive +-ETAGS = etags +-CTAGS = ctags +-DIST_SUBDIRS = $(SUBDIRS) +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-distdir = $(PACKAGE)-$(VERSION) +-top_distdir = $(distdir) +-am__remove_distdir = \ +- { test ! -d $(distdir) \ +- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ +- && rm -fr $(distdir); }; } +-DIST_ARCHIVES = $(distdir).tar.gz +-GZIP_ENV = --best +-distuninstallcheck_listfiles = find . -type f -print +-distcleancheck_listfiles = find . -type f -print +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +- +-# Do not change this order if you don't know what you are doing. +-AUTOMAKE_OPTIONS = 1.7 gnu +-SUBDIRS = netboot stage2 stage1 lib grub util docs +-EXTRA_DIST = BUGS MAINTENANCE +-all: config.h +- $(MAKE) $(AM_MAKEFLAGS) all-recursive +- +-.SUFFIXES: +-am--refresh: +- @: +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ +- cd $(srcdir) && $(AUTOMAKE) --gnu \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- echo ' $(SHELL) ./config.status'; \ +- $(SHELL) ./config.status;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- $(SHELL) ./config.status --recheck +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(srcdir) && $(AUTOCONF) +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +- +-config.h: stamp-h1 +- @if test ! -f $@; then \ +- rm -f stamp-h1; \ +- $(MAKE) stamp-h1; \ +- else :; fi +- +-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status +- @rm -f stamp-h1 +- cd $(top_builddir) && $(SHELL) ./config.status config.h +-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_srcdir) && $(AUTOHEADER) +- rm -f stamp-h1 +- touch $@ +- +-distclean-hdr: +- -rm -f config.h stamp-h1 +-uninstall-info-am: +- +-# This directory's subdirectories are mostly independent; you can cd +-# into them and run `make' without going through this Makefile. +-# To change the values of `make' variables: instead of editing Makefiles, +-# (1) if the variable is set in `config.status', edit `config.status' +-# (which will cause the Makefiles to be regenerated when you run `make'); +-# (2) otherwise, pass the desired values on the `make' command line. +-$(RECURSIVE_TARGETS): +- @set fnord $$MAKEFLAGS; amf=$$2; \ +- dot_seen=no; \ +- target=`echo $@ | sed s/-recursive//`; \ +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- echo "Making $$target in $$subdir"; \ +- if test "$$subdir" = "."; then \ +- dot_seen=yes; \ +- local_target="$$target-am"; \ +- else \ +- local_target="$$target"; \ +- fi; \ +- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ +- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ +- done; \ +- if test "$$dot_seen" = "no"; then \ +- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ +- fi; test -z "$$fail" +- +-mostlyclean-recursive clean-recursive distclean-recursive \ +-maintainer-clean-recursive: +- @set fnord $$MAKEFLAGS; amf=$$2; \ +- dot_seen=no; \ +- case "$@" in \ +- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ +- *) list='$(SUBDIRS)' ;; \ +- esac; \ +- rev=''; for subdir in $$list; do \ +- if test "$$subdir" = "."; then :; else \ +- rev="$$subdir $$rev"; \ +- fi; \ +- done; \ +- rev="$$rev ."; \ +- target=`echo $@ | sed s/-recursive//`; \ +- for subdir in $$rev; do \ +- echo "Making $$target in $$subdir"; \ +- if test "$$subdir" = "."; then \ +- local_target="$$target-am"; \ +- else \ +- local_target="$$target"; \ +- fi; \ +- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ +- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ +- done && test -z "$$fail" +-tags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ +- done +-ctags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ +- done +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ +- include_option=--etags-include; \ +- empty_fix=.; \ +- else \ +- include_option=--include; \ +- empty_fix=; \ +- fi; \ +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- if test "$$subdir" = .; then :; else \ +- test ! -f $$subdir/TAGS || \ +- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ +- fi; \ +- done; \ +- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- $(am__remove_distdir) +- mkdir $(distdir) +- $(mkdir_p) $(distdir)/util +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ +- if test "$$subdir" = .; then :; else \ +- test -d "$(distdir)/$$subdir" \ +- || $(mkdir_p) "$(distdir)/$$subdir" \ +- || exit 1; \ +- distdir=`$(am__cd) $(distdir) && pwd`; \ +- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ +- (cd $$subdir && \ +- $(MAKE) $(AM_MAKEFLAGS) \ +- top_distdir="$$top_distdir" \ +- distdir="$$distdir/$$subdir" \ +- distdir) \ +- || exit 1; \ +- fi; \ +- done +- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ +- ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ +- ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ +- ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ +- || chmod -R a+r $(distdir) +-dist-gzip: distdir +- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz +- $(am__remove_distdir) +- +-dist-bzip2: distdir +- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 +- $(am__remove_distdir) +- +-dist-tarZ: distdir +- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z +- $(am__remove_distdir) +- +-dist-shar: distdir +- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz +- $(am__remove_distdir) +- +-dist-zip: distdir +- -rm -f $(distdir).zip +- zip -rq $(distdir).zip $(distdir) +- $(am__remove_distdir) +- +-dist dist-all: distdir +- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz +- $(am__remove_distdir) +- +-# This target untars the dist file and tries a VPATH configuration. Then +-# it guarantees that the distribution is self-contained by making another +-# tarfile. +-distcheck: dist +- case '$(DIST_ARCHIVES)' in \ +- *.tar.gz*) \ +- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ +- *.tar.bz2*) \ +- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ +- *.tar.Z*) \ +- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ +- *.shar.gz*) \ +- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ +- *.zip*) \ +- unzip $(distdir).zip ;;\ +- esac +- chmod -R a-w $(distdir); chmod a+w $(distdir) +- mkdir $(distdir)/_build +- mkdir $(distdir)/_inst +- chmod a-w $(distdir) +- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ +- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ +- && cd $(distdir)/_build \ +- && ../configure --srcdir=.. --prefix="$$dc_install_base" \ +- $(DISTCHECK_CONFIGURE_FLAGS) \ +- && $(MAKE) $(AM_MAKEFLAGS) \ +- && $(MAKE) $(AM_MAKEFLAGS) dvi \ +- && $(MAKE) $(AM_MAKEFLAGS) check \ +- && $(MAKE) $(AM_MAKEFLAGS) install \ +- && $(MAKE) $(AM_MAKEFLAGS) installcheck \ +- && $(MAKE) $(AM_MAKEFLAGS) uninstall \ +- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ +- distuninstallcheck \ +- && chmod -R a-w "$$dc_install_base" \ +- && ({ \ +- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ +- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ +- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ +- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ +- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ +- } || { rm -rf "$$dc_destdir"; exit 1; }) \ +- && rm -rf "$$dc_destdir" \ +- && $(MAKE) $(AM_MAKEFLAGS) dist \ +- && rm -rf $(DIST_ARCHIVES) \ +- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck +- $(am__remove_distdir) +- @(echo "$(distdir) archives ready for distribution: "; \ +- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ +- sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +-distuninstallcheck: +- @cd $(distuninstallcheck_dir) \ +- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ +- || { echo "ERROR: files left after uninstall:" ; \ +- if test -n "$(DESTDIR)"; then \ +- echo " (check DESTDIR support)"; \ +- fi ; \ +- $(distuninstallcheck_listfiles) ; \ +- exit 1; } >&2 +-distcleancheck: distclean +- @if test '$(srcdir)' = . ; then \ +- echo "ERROR: distcleancheck can only run from a VPATH build" ; \ +- exit 1 ; \ +- fi +- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ +- || { echo "ERROR: files left in build directory after distclean:" ; \ +- $(distcleancheck_listfiles) ; \ +- exit 1; } >&2 +-check-am: all-am +-check: check-recursive +-all-am: Makefile config.h +-installdirs: installdirs-recursive +-installdirs-am: +-install: install-recursive +-install-exec: install-exec-recursive +-install-data: install-data-recursive +-uninstall: uninstall-recursive +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-recursive +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-recursive +- +-clean-am: clean-generic mostlyclean-am +- +-distclean: distclean-recursive +- -rm -f $(am__CONFIG_DISTCLEAN_FILES) +- -rm -f Makefile +-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags +- +-dvi: dvi-recursive +- +-dvi-am: +- +-html: html-recursive +- +-info: info-recursive +- +-info-am: +- +-install-data-am: +- +-install-exec-am: +- +-install-info: install-info-recursive +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-recursive +- -rm -f $(am__CONFIG_DISTCLEAN_FILES) +- -rm -rf $(top_srcdir)/autom4te.cache +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-recursive +- +-mostlyclean-am: mostlyclean-generic +- +-pdf: pdf-recursive +- +-pdf-am: +- +-ps: ps-recursive +- +-ps-am: +- +-uninstall-am: uninstall-info-am +- +-uninstall-info: uninstall-info-recursive +- +-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ +- check-am clean clean-generic clean-recursive ctags \ +- ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ +- dist-tarZ dist-zip distcheck distclean distclean-generic \ +- distclean-hdr distclean-recursive distclean-tags \ +- distcleancheck distdir distuninstallcheck dvi dvi-am html \ +- html-am info info-am install install-am install-data \ +- install-data-am install-exec install-exec-am install-info \ +- install-info-am install-man install-strip installcheck \ +- installcheck-am installdirs installdirs-am maintainer-clean \ +- maintainer-clean-generic maintainer-clean-recursive \ +- mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ +- pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ +- uninstall-info-am +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/acinclude.m4 b/acinclude.m4 +index 368839c..1cf1d67 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -44,6 +44,8 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE], + [AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses]) + AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, + [cat > conftest.c <<\EOF ++void cmain(void); ++ + void + cmain (void) + { +@@ -57,7 +59,7 @@ else + fi + grub_cv_prog_objcopy_absolute=yes + for link_addr in 2000 8000 7C00; do +- if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : ++ if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr -Wl,--build-id=none conftest.o -o conftest.exec]); then : + else + AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) + fi +diff --git a/aclocal.m4 b/aclocal.m4 +deleted file mode 100644 +index aa691f6..0000000 +--- a/aclocal.m4 ++++ /dev/null +@@ -1,1061 +0,0 @@ +-# generated automatically by aclocal 1.9.4 -*- Autoconf -*- +- +-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +-# Free Software Foundation, Inc. +-# This file is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-# -*- Autoconf -*- +-# Copyright (C) 2002, 2003 Free Software Foundation, Inc. +-# Generated from amversion.in; do not edit by hand. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +- +-# AM_AUTOMAKE_VERSION(VERSION) +-# ---------------------------- +-# Automake X.Y traces this macro to ensure aclocal.m4 has been +-# generated from the m4 files accompanying Automake X.Y. +-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +- +-# AM_SET_CURRENT_AUTOMAKE_VERSION +-# ------------------------------- +-# Call AM_AUTOMAKE_VERSION so it can be traced. +-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +- [AM_AUTOMAKE_VERSION([1.9.4])]) +- +-# AM_AUX_DIR_EXPAND +- +-# Copyright (C) 2001, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +-# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +-# +-# Of course, Automake must honor this variable whenever it calls a +-# tool from the auxiliary directory. The problem is that $srcdir (and +-# therefore $ac_aux_dir as well) can be either absolute or relative, +-# depending on how configure is run. This is pretty annoying, since +-# it makes $ac_aux_dir quite unusable in subdirectories: in the top +-# source directory, any form will work fine, but in subdirectories a +-# relative path needs to be adjusted first. +-# +-# $ac_aux_dir/missing +-# fails when called from a subdirectory if $ac_aux_dir is relative +-# $top_srcdir/$ac_aux_dir/missing +-# fails if $ac_aux_dir is absolute, +-# fails when called from a subdirectory in a VPATH build with +-# a relative $ac_aux_dir +-# +-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +-# are both prefixed by $srcdir. In an in-source build this is usually +-# harmless because $srcdir is `.', but things will broke when you +-# start a VPATH build or use an absolute $srcdir. +-# +-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +-# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +-# and then we would define $MISSING as +-# MISSING="\${SHELL} $am_aux_dir/missing" +-# This will work as long as MISSING is not called from configure, because +-# unfortunately $(top_srcdir) has no meaning in configure. +-# However there are other variables, like CC, which are often used in +-# configure, and could therefore not use this "fixed" $ac_aux_dir. +-# +-# Another solution, used here, is to always expand $ac_aux_dir to an +-# absolute PATH. The drawback is that using absolute paths prevent a +-# configured tree to be moved without reconfiguration. +- +-AC_DEFUN([AM_AUX_DIR_EXPAND], +-[dnl Rely on autoconf to set up CDPATH properly. +-AC_PREREQ([2.50])dnl +-# expand $ac_aux_dir to an absolute path +-am_aux_dir=`cd $ac_aux_dir && pwd` +-]) +- +-# AM_CONDITIONAL -*- Autoconf -*- +- +-# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 6 +- +-# AM_CONDITIONAL(NAME, SHELL-CONDITION) +-# ------------------------------------- +-# Define a conditional. +-AC_DEFUN([AM_CONDITIONAL], +-[AC_PREREQ(2.52)dnl +- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], +- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +-AC_SUBST([$1_TRUE]) +-AC_SUBST([$1_FALSE]) +-if $2; then +- $1_TRUE= +- $1_FALSE='#' +-else +- $1_TRUE='#' +- $1_FALSE= +-fi +-AC_CONFIG_COMMANDS_PRE( +-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then +- AC_MSG_ERROR([[conditional "$1" was never defined. +-Usually this means the macro was only invoked conditionally.]]) +-fi])]) +- +-# serial 7 -*- Autoconf -*- +- +-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +-# Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +- +-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +-# written in clear, in which case automake, when reading aclocal.m4, +-# will think it sees a *use*, and therefore will trigger all it's +-# C support machinery. Also note that it means that autoscan, seeing +-# CC etc. in the Makefile, will ask for an AC_PROG_CC use... +- +- +- +-# _AM_DEPENDENCIES(NAME) +-# ---------------------- +-# See how the compiler implements dependency checking. +-# NAME is "CC", "CXX", "GCJ", or "OBJC". +-# We try a few techniques and use that to set a single cache variable. +-# +-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +-# dependency, and given that the user is not expected to run this macro, +-# just rely on AC_PROG_CC. +-AC_DEFUN([_AM_DEPENDENCIES], +-[AC_REQUIRE([AM_SET_DEPDIR])dnl +-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +-AC_REQUIRE([AM_MAKE_INCLUDE])dnl +-AC_REQUIRE([AM_DEP_TRACK])dnl +- +-ifelse([$1], CC, [depcc="$CC" am_compiler_list=], +- [$1], CXX, [depcc="$CXX" am_compiler_list=], +- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], +- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], +- [depcc="$$1" am_compiler_list=]) +- +-AC_CACHE_CHECK([dependency style of $depcc], +- [am_cv_$1_dependencies_compiler_type], +-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then +- # We make a subdir and do the tests there. Otherwise we can end up +- # making bogus files that we don't know about and never remove. For +- # instance it was reported that on HP-UX the gcc test will end up +- # making a dummy file named `D' -- because `-MD' means `put the output +- # in D'. +- mkdir conftest.dir +- # Copy depcomp to subdir because otherwise we won't find it if we're +- # using a relative directory. +- cp "$am_depcomp" conftest.dir +- cd conftest.dir +- # We will build objects and dependencies in a subdirectory because +- # it helps to detect inapplicable dependency modes. For instance +- # both Tru64's cc and ICC support -MD to output dependencies as a +- # side effect of compilation, but ICC will put the dependencies in +- # the current directory while Tru64 will put them in the object +- # directory. +- mkdir sub +- +- am_cv_$1_dependencies_compiler_type=none +- if test "$am_compiler_list" = ""; then +- am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` +- fi +- for depmode in $am_compiler_list; do +- # Setup a source with many dependencies, because some compilers +- # like to wrap large dependency lists on column 80 (with \), and +- # we should not choose a depcomp mode which is confused by this. +- # +- # We need to recreate these files for each test, as the compiler may +- # overwrite some of them when testing with obscure command lines. +- # This happens at least with the AIX C compiler. +- : > sub/conftest.c +- for i in 1 2 3 4 5 6; do +- echo '#include "conftst'$i'.h"' >> sub/conftest.c +- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with +- # Solaris 8's {/usr,}/bin/sh. +- touch sub/conftst$i.h +- done +- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf +- +- case $depmode in +- nosideeffect) +- # after this tag, mechanisms are not by side-effect, so they'll +- # only be used when explicitly requested +- if test "x$enable_dependency_tracking" = xyes; then +- continue +- else +- break +- fi +- ;; +- none) break ;; +- esac +- # We check with `-c' and `-o' for the sake of the "dashmstdout" +- # mode. It turns out that the SunPro C++ compiler does not properly +- # handle `-M -o', and we need to detect this. +- if depmode=$depmode \ +- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ +- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ +- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ +- >/dev/null 2>conftest.err && +- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && +- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && +- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then +- # icc doesn't choke on unknown options, it will just issue warnings +- # or remarks (even with -Werror). So we grep stderr for any message +- # that says an option was ignored or not supported. +- # When given -MP, icc 7.0 and 7.1 complain thusly: +- # icc: Command line warning: ignoring option '-M'; no argument required +- # The diagnosis changed in icc 8.0: +- # icc: Command line remark: option '-MP' not supported +- if (grep 'ignoring option' conftest.err || +- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else +- am_cv_$1_dependencies_compiler_type=$depmode +- break +- fi +- fi +- done +- +- cd .. +- rm -rf conftest.dir +-else +- am_cv_$1_dependencies_compiler_type=none +-fi +-]) +-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +-AM_CONDITIONAL([am__fastdep$1], [ +- test "x$enable_dependency_tracking" != xno \ +- && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +-]) +- +- +-# AM_SET_DEPDIR +-# ------------- +-# Choose a directory name for dependency files. +-# This macro is AC_REQUIREd in _AM_DEPENDENCIES +-AC_DEFUN([AM_SET_DEPDIR], +-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +-]) +- +- +-# AM_DEP_TRACK +-# ------------ +-AC_DEFUN([AM_DEP_TRACK], +-[AC_ARG_ENABLE(dependency-tracking, +-[ --disable-dependency-tracking speeds up one-time build +- --enable-dependency-tracking do not reject slow dependency extractors]) +-if test "x$enable_dependency_tracking" != xno; then +- am_depcomp="$ac_aux_dir/depcomp" +- AMDEPBACKSLASH='\' +-fi +-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +-AC_SUBST([AMDEPBACKSLASH]) +-]) +- +-# Generate code to set up dependency tracking. -*- Autoconf -*- +- +-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +-# Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-#serial 2 +- +-# _AM_OUTPUT_DEPENDENCY_COMMANDS +-# ------------------------------ +-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +-[for mf in $CONFIG_FILES; do +- # Strip MF so we end up with the name of the file. +- mf=`echo "$mf" | sed -e 's/:.*$//'` +- # Check whether this is an Automake generated Makefile or not. +- # We used to match only the files named `Makefile.in', but +- # some people rename them; so instead we look at the file content. +- # Grep'ing the first line is not enough: some people post-process +- # each Makefile.in and add a new line on top of each file to say so. +- # So let's grep whole file. +- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`AS_DIRNAME("$mf")` +- else +- continue +- fi +- # Extract the definition of DEPDIR, am__include, and am__quote +- # from the Makefile without running `make'. +- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` +- test -z "$DEPDIR" && continue +- am__include=`sed -n 's/^am__include = //p' < "$mf"` +- test -z "am__include" && continue +- am__quote=`sed -n 's/^am__quote = //p' < "$mf"` +- # When using ansi2knr, U may be empty or an underscore; expand it +- U=`sed -n 's/^U = //p' < "$mf"` +- # Find all dependency output files, they are included files with +- # $(DEPDIR) in their names. We invoke sed twice because it is the +- # simplest approach to changing $(DEPDIR) to its actual value in the +- # expansion. +- for file in `sed -n " +- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ +- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do +- # Make sure the directory exists. +- test -f "$dirpart/$file" && continue +- fdir=`AS_DIRNAME(["$file"])` +- AS_MKDIR_P([$dirpart/$fdir]) +- # echo "creating $dirpart/$file" +- echo '# dummy' > "$dirpart/$file" +- done +-done +-])# _AM_OUTPUT_DEPENDENCY_COMMANDS +- +- +-# AM_OUTPUT_DEPENDENCY_COMMANDS +-# ----------------------------- +-# This macro should only be invoked once -- use via AC_REQUIRE. +-# +-# This code is only required when automatic dependency tracking +-# is enabled. FIXME. This creates each `.P' file that we will +-# need in order to bootstrap the dependency handling code. +-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +-[AC_CONFIG_COMMANDS([depfiles], +- [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], +- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +-]) +- +-# Do all the work for Automake. -*- Autoconf -*- +- +-# This macro actually does too much some checks are only needed if +-# your package does certain things. But this isn't really a big deal. +- +-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +-# Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 11 +- +-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +-# AM_INIT_AUTOMAKE([OPTIONS]) +-# ----------------------------------------------- +-# The call with PACKAGE and VERSION arguments is the old style +-# call (pre autoconf-2.50), which is being phased out. PACKAGE +-# and VERSION should now be passed to AC_INIT and removed from +-# the call to AM_INIT_AUTOMAKE. +-# We support both call styles for the transition. After +-# the next Automake release, Autoconf can make the AC_INIT +-# arguments mandatory, and then we can depend on a new Autoconf +-# release and drop the old call support. +-AC_DEFUN([AM_INIT_AUTOMAKE], +-[AC_PREREQ([2.58])dnl +-dnl Autoconf wants to disallow AM_ names. We explicitly allow +-dnl the ones we care about. +-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +-AC_REQUIRE([AC_PROG_INSTALL])dnl +-# test to see if srcdir already configured +-if test "`cd $srcdir && pwd`" != "`pwd`" && +- test -f $srcdir/config.status; then +- AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +-fi +- +-# test whether we have cygpath +-if test -z "$CYGPATH_W"; then +- if (cygpath --version) >/dev/null 2>/dev/null; then +- CYGPATH_W='cygpath -w' +- else +- CYGPATH_W=echo +- fi +-fi +-AC_SUBST([CYGPATH_W]) +- +-# Define the identity of the package. +-dnl Distinguish between old-style and new-style calls. +-m4_ifval([$2], +-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +- AC_SUBST([PACKAGE], [$1])dnl +- AC_SUBST([VERSION], [$2])], +-[_AM_SET_OPTIONS([$1])dnl +- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl +- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl +- +-_AM_IF_OPTION([no-define],, +-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl +- +-# Some tools Automake needs. +-AC_REQUIRE([AM_SANITY_CHECK])dnl +-AC_REQUIRE([AC_ARG_PROGRAM])dnl +-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +-AM_MISSING_PROG(AUTOCONF, autoconf) +-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +-AM_MISSING_PROG(AUTOHEADER, autoheader) +-AM_MISSING_PROG(MAKEINFO, makeinfo) +-AM_PROG_INSTALL_SH +-AM_PROG_INSTALL_STRIP +-AC_REQUIRE([AM_PROG_MKDIR_P])dnl +-# We need awk for the "check" target. The system "awk" is bad on +-# some platforms. +-AC_REQUIRE([AC_PROG_AWK])dnl +-AC_REQUIRE([AC_PROG_MAKE_SET])dnl +-AC_REQUIRE([AM_SET_LEADING_DOT])dnl +-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], +- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], +- [_AM_PROG_TAR([v7])])]) +-_AM_IF_OPTION([no-dependencies],, +-[AC_PROVIDE_IFELSE([AC_PROG_CC], +- [_AM_DEPENDENCIES(CC)], +- [define([AC_PROG_CC], +- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +-AC_PROVIDE_IFELSE([AC_PROG_CXX], +- [_AM_DEPENDENCIES(CXX)], +- [define([AC_PROG_CXX], +- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +-]) +-]) +- +- +-# When config.status generates a header, we must update the stamp-h file. +-# This file resides in the same directory as the config header +-# that is generated. The stamp files are numbered to have different names. +- +-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +-# loop where config.status creates the headers, so we can generate +-# our stamp files there. +-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +-[# Compute $1's index in $config_headers. +-_am_stamp_count=1 +-for _am_header in $config_headers :; do +- case $_am_header in +- $1 | $1:* ) +- break ;; +- * ) +- _am_stamp_count=`expr $_am_stamp_count + 1` ;; +- esac +-done +-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +- +-# AM_PROG_INSTALL_SH +-# ------------------ +-# Define $install_sh. +- +-# Copyright (C) 2001, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-AC_DEFUN([AM_PROG_INSTALL_SH], +-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +-install_sh=${install_sh-"$am_aux_dir/install-sh"} +-AC_SUBST(install_sh)]) +- +-# -*- Autoconf -*- +-# Copyright (C) 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 1 +- +-# Check whether the underlying file-system supports filenames +-# with a leading dot. For instance MS-DOS doesn't. +-AC_DEFUN([AM_SET_LEADING_DOT], +-[rm -rf .tst 2>/dev/null +-mkdir .tst 2>/dev/null +-if test -d .tst; then +- am__leading_dot=. +-else +- am__leading_dot=_ +-fi +-rmdir .tst 2>/dev/null +-AC_SUBST([am__leading_dot])]) +- +-# Add --enable-maintainer-mode option to configure. +-# From Jim Meyering +- +-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004 +-# Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 3 +- +-AC_DEFUN([AM_MAINTAINER_MODE], +-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) +- dnl maintainer-mode is disabled by default +- AC_ARG_ENABLE(maintainer-mode, +-[ --enable-maintainer-mode enable make rules and dependencies not useful +- (and sometimes confusing) to the casual installer], +- USE_MAINTAINER_MODE=$enableval, +- USE_MAINTAINER_MODE=no) +- AC_MSG_RESULT([$USE_MAINTAINER_MODE]) +- AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) +- MAINT=$MAINTAINER_MODE_TRUE +- AC_SUBST(MAINT)dnl +-] +-) +- +-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) +- +-# Check to see how 'make' treats includes. -*- Autoconf -*- +- +-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 2 +- +-# AM_MAKE_INCLUDE() +-# ----------------- +-# Check to see how make treats includes. +-AC_DEFUN([AM_MAKE_INCLUDE], +-[am_make=${MAKE-make} +-cat > confinc << 'END' +-am__doit: +- @echo done +-.PHONY: am__doit +-END +-# If we don't find an include directive, just comment out the code. +-AC_MSG_CHECKING([for style of include used by $am_make]) +-am__include="#" +-am__quote= +-_am_result=none +-# First try GNU make style include. +-echo "include confinc" > confmf +-# We grep out `Entering directory' and `Leaving directory' +-# messages which can occur if `w' ends up in MAKEFLAGS. +-# In particular we don't look at `^make:' because GNU make might +-# be invoked under some other name (usually "gmake"), in which +-# case it prints its new name instead of `make'. +-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then +- am__include=include +- am__quote= +- _am_result=GNU +-fi +-# Now try BSD make style include. +-if test "$am__include" = "#"; then +- echo '.include "confinc"' > confmf +- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then +- am__include=.include +- am__quote="\"" +- _am_result=BSD +- fi +-fi +-AC_SUBST([am__include]) +-AC_SUBST([am__quote]) +-AC_MSG_RESULT([$_am_result]) +-rm -f confinc confmf +-]) +- +-# -*- Autoconf -*- +- +- +-# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 3 +- +-# AM_MISSING_PROG(NAME, PROGRAM) +-# ------------------------------ +-AC_DEFUN([AM_MISSING_PROG], +-[AC_REQUIRE([AM_MISSING_HAS_RUN]) +-$1=${$1-"${am_missing_run}$2"} +-AC_SUBST($1)]) +- +- +-# AM_MISSING_HAS_RUN +-# ------------------ +-# Define MISSING if not defined so far and test if it supports --run. +-# If it does, set am_missing_run to use it, otherwise, to nothing. +-AC_DEFUN([AM_MISSING_HAS_RUN], +-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +-# Use eval to expand $SHELL +-if eval "$MISSING --run true"; then +- am_missing_run="$MISSING --run " +-else +- am_missing_run= +- AC_MSG_WARN([`missing' script is too old or missing]) +-fi +-]) +- +-# AM_PROG_MKDIR_P +-# --------------- +-# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +- +-# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +-# created by `make install' are always world readable, even if the +-# installer happens to have an overly restrictive umask (e.g. 077). +-# This was a mistake. There are at least two reasons why we must not +-# use `-m 0755': +-# - it causes special bits like SGID to be ignored, +-# - it may be too restrictive (some setups expect 775 directories). +-# +-# Do not use -m 0755 and let people choose whatever they expect by +-# setting umask. +-# +-# We cannot accept any implementation of `mkdir' that recognizes `-p'. +-# Some implementations (such as Solaris 8's) are not thread-safe: if a +-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +-# concurrently, both version can detect that a/ is missing, but only +-# one can create it and the other will error out. Consequently we +-# restrict ourselves to GNU make (using the --version option ensures +-# this.) +-AC_DEFUN([AM_PROG_MKDIR_P], +-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then +- # We used to keeping the `.' as first argument, in order to +- # allow $(mkdir_p) to be used without argument. As in +- # $(mkdir_p) $(somedir) +- # where $(somedir) is conditionally defined. However this is wrong +- # for two reasons: +- # 1. if the package is installed by a user who cannot write `.' +- # make install will fail, +- # 2. the above comment should most certainly read +- # $(mkdir_p) $(DESTDIR)$(somedir) +- # so it does not work when $(somedir) is undefined and +- # $(DESTDIR) is not. +- # To support the latter case, we have to write +- # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), +- # so the `.' trick is pointless. +- mkdir_p='mkdir -p --' +-else +- # On NextStep and OpenStep, the `mkdir' command does not +- # recognize any option. It will interpret all options as +- # directories to create, and then abort because `.' already +- # exists. +- for d in ./-p ./--version; +- do +- test -d $d && rmdir $d +- done +- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. +- if test -f "$ac_aux_dir/mkinstalldirs"; then +- mkdir_p='$(mkinstalldirs)' +- else +- mkdir_p='$(install_sh) -d' +- fi +-fi +-AC_SUBST([mkdir_p])]) +- +-# Helper functions for option handling. -*- Autoconf -*- +- +-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 2 +- +-# _AM_MANGLE_OPTION(NAME) +-# ----------------------- +-AC_DEFUN([_AM_MANGLE_OPTION], +-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +- +-# _AM_SET_OPTION(NAME) +-# ------------------------------ +-# Set option NAME. Presently that only means defining a flag for this option. +-AC_DEFUN([_AM_SET_OPTION], +-[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +- +-# _AM_SET_OPTIONS(OPTIONS) +-# ---------------------------------- +-# OPTIONS is a space-separated list of Automake options. +-AC_DEFUN([_AM_SET_OPTIONS], +-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +- +-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +-# ------------------------------------------- +-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +-AC_DEFUN([_AM_IF_OPTION], +-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +- +-# +-# Check to make sure that the build environment is sane. +-# +- +-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 3 +- +-# AM_SANITY_CHECK +-# --------------- +-AC_DEFUN([AM_SANITY_CHECK], +-[AC_MSG_CHECKING([whether build environment is sane]) +-# Just in case +-sleep 1 +-echo timestamp > conftest.file +-# Do `set' in a subshell so we don't clobber the current shell's +-# arguments. Must try -L first in case configure is actually a +-# symlink; some systems play weird games with the mod time of symlinks +-# (eg FreeBSD returns the mod time of the symlink's containing +-# directory). +-if ( +- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` +- if test "$[*]" = "X"; then +- # -L didn't work. +- set X `ls -t $srcdir/configure conftest.file` +- fi +- rm -f conftest.file +- if test "$[*]" != "X $srcdir/configure conftest.file" \ +- && test "$[*]" != "X conftest.file $srcdir/configure"; then +- +- # If neither matched, then we have a broken ls. This can happen +- # if, for instance, CONFIG_SHELL is bash and it inherits a +- # broken ls alias from the environment. This has actually +- # happened. Such a system could not be considered "sane". +- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +-alias in your environment]) +- fi +- +- test "$[2]" = conftest.file +- ) +-then +- # Ok. +- : +-else +- AC_MSG_ERROR([newly created file is older than distributed files! +-Check your system clock]) +-fi +-AC_MSG_RESULT(yes)]) +- +-# AM_PROG_INSTALL_STRIP +- +-# Copyright (C) 2001, 2003 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# One issue with vendor `install' (even GNU) is that you can't +-# specify the program used to strip binaries. This is especially +-# annoying in cross-compiling environments, where the build's strip +-# is unlikely to handle the host's binaries. +-# Fortunately install-sh will honor a STRIPPROG variable, so we +-# always use install-sh in `make install-strip', and initialize +-# STRIPPROG with the value of the STRIP variable (set by the user). +-AC_DEFUN([AM_PROG_INSTALL_STRIP], +-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +-# Installed binaries are usually stripped using `strip' when the user +-# run `make install-strip'. However `strip' might not be the right +-# tool to use in cross-compilation environments, therefore Automake +-# will honor the `STRIP' environment variable to overrule this program. +-dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +-if test "$cross_compiling" != no; then +- AC_CHECK_TOOL([STRIP], [strip], :) +-fi +-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +-AC_SUBST([INSTALL_STRIP_PROGRAM])]) +- +-# Check how to create a tarball. -*- Autoconf -*- +- +-# Copyright (C) 2004 Free Software Foundation, Inc. +- +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +- +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +-# 02111-1307, USA. +- +-# serial 1 +- +- +-# _AM_PROG_TAR(FORMAT) +-# -------------------- +-# Check how to create a tarball in format FORMAT. +-# FORMAT should be one of `v7', `ustar', or `pax'. +-# +-# Substitute a variable $(am__tar) that is a command +-# writing to stdout a FORMAT-tarball containing the directory +-# $tardir. +-# tardir=directory && $(am__tar) > result.tar +-# +-# Substitute a variable $(am__untar) that extract such +-# a tarball read from stdin. +-# $(am__untar) < result.tar +-AC_DEFUN([_AM_PROG_TAR], +-[# Always define AMTAR for backward compatibility. +-AM_MISSING_PROG([AMTAR], [tar]) +-m4_if([$1], [v7], +- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], +- [m4_case([$1], [ustar],, [pax],, +- [m4_fatal([Unknown tar format])]) +-AC_MSG_CHECKING([how to create a $1 tar archive]) +-# Loop over all known methods to create a tar archive until one works. +-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +-_am_tools=${am_cv_prog_tar_$1-$_am_tools} +-# Do not fold the above two line into one, because Tru64 sh and +-# Solaris sh will not grok spaces in the rhs of `-'. +-for _am_tool in $_am_tools +-do +- case $_am_tool in +- gnutar) +- for _am_tar in tar gnutar gtar; +- do +- AM_RUN_LOG([$_am_tar --version]) && break +- done +- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' +- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' +- am__untar="$_am_tar -xf -" +- ;; +- plaintar) +- # Must skip GNU tar: if it does not support --format= it doesn't create +- # ustar tarball either. +- (tar --version) >/dev/null 2>&1 && continue +- am__tar='tar chf - "$$tardir"' +- am__tar_='tar chf - "$tardir"' +- am__untar='tar xf -' +- ;; +- pax) +- am__tar='pax -L -x $1 -w "$$tardir"' +- am__tar_='pax -L -x $1 -w "$tardir"' +- am__untar='pax -r' +- ;; +- cpio) +- am__tar='find "$$tardir" -print | cpio -o -H $1 -L' +- am__tar_='find "$tardir" -print | cpio -o -H $1 -L' +- am__untar='cpio -i -H $1 -d' +- ;; +- none) +- am__tar=false +- am__tar_=false +- am__untar=false +- ;; +- esac +- +- # If the value was cached, stop now. We just wanted to have am__tar +- # and am__untar set. +- test -n "${am_cv_prog_tar_$1}" && break +- +- # tar/untar a dummy directory, and stop if the command works +- rm -rf conftest.dir +- mkdir conftest.dir +- echo GrepMe > conftest.dir/file +- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) +- rm -rf conftest.dir +- if test -s conftest.tar; then +- AM_RUN_LOG([$am__untar /dev/null 2>&1 && break +- fi +-done +-rm -rf conftest.dir +- +-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +-AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +-AC_SUBST([am__tar]) +-AC_SUBST([am__untar]) +-]) # _AM_PROG_TAR +- +-m4_include([acinclude.m4]) +diff --git a/config.h.in b/config.h.in +deleted file mode 100644 +index 68d7c8c..0000000 +--- a/config.h.in ++++ /dev/null +@@ -1,106 +0,0 @@ +-/* config.h.in. Generated from configure.ac by autoheader. */ +- +-/* Define if an absolute indirect call/jump must NOT be prefixed with `*' */ +-#undef ABSOLUTE_WITHOUT_ASTERISK +- +-/* Define it to \"addr32\" or \"addr32;\" to make GAS happy */ +-#undef ADDR32 +- +-/* Define if you don't want to pass the mem= option to Linux */ +-#undef AUTO_LINUX_MEM_OPT +- +-/* Define it to \"data32\" or \"data32;\" to make GAS happy */ +-#undef DATA32 +- +-/* Define if C symbols get an underscore after compilation */ +-#undef HAVE_ASM_USCORE +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_CURSES_H +- +-/* Define if edata is defined */ +-#undef HAVE_EDATA_SYMBOL +- +-/* Define if end is defined */ +-#undef HAVE_END_SYMBOL +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_INTTYPES_H +- +-/* Define if you have a curses library */ +-#undef HAVE_LIBCURSES +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_MEMORY_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_NCURSES_CURSES_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_NCURSES_H +- +-/* Define if opendisk() in -lutil can be used */ +-#undef HAVE_OPENDISK +- +-/* Define if start is defined */ +-#undef HAVE_START_SYMBOL +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STDINT_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STDLIB_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STRINGS_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STRING_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_STAT_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_TYPES_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_UNISTD_H +- +-/* Define if _edata is defined */ +-#undef HAVE_USCORE_EDATA_SYMBOL +- +-/* Define if end is defined */ +-#undef HAVE_USCORE_END_SYMBOL +- +-/* Define if _start is defined */ +-#undef HAVE_USCORE_START_SYMBOL +- +-/* Define if __bss_start is defined */ +-#undef HAVE_USCORE_USCORE_BSS_START_SYMBOL +- +-/* Name of package */ +-#undef PACKAGE +- +-/* Define to the address where bug reports for this package should be sent. */ +-#undef PACKAGE_BUGREPORT +- +-/* Define to the full name of this package. */ +-#undef PACKAGE_NAME +- +-/* Define to the full name and version of this package. */ +-#undef PACKAGE_STRING +- +-/* Define to the one symbol short name of this package. */ +-#undef PACKAGE_TARNAME +- +-/* Define to the version of this package. */ +-#undef PACKAGE_VERSION +- +-/* Define if there is user specified preset menu string */ +-#undef PRESET_MENU_STRING +- +-/* Define to 1 if you have the ANSI C header files. */ +-#undef STDC_HEADERS +- +-/* Version number of package */ +-#undef VERSION +diff --git a/configure b/configure +deleted file mode 100755 +index 537ab89..0000000 +--- a/configure ++++ /dev/null +@@ -1,7639 +0,0 @@ +-#! /bin/sh +-# Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.59 for GRUB 0.97. +-# +-# Report bugs to . +-# +-# Copyright (C) 2003 Free Software Foundation, Inc. +-# This configure script is free software; the Free Software Foundation +-# gives unlimited permission to copy, distribute and modify it. +-## --------------------- ## +-## M4sh Initialization. ## +-## --------------------- ## +- +-# Be Bourne compatible +-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +- emulate sh +- NULLCMD=: +- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which +- # is contrary to our usage. Disable this feature. +- alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix +-fi +-DUALCASE=1; export DUALCASE # for MKS sh +- +-# Support unset when possible. +-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +- as_unset=unset +-else +- as_unset=false +-fi +- +- +-# Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH +-PS1='$ ' +-PS2='> ' +-PS4='+ ' +- +-# NLS nuisances. +-for as_var in \ +- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ +- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ +- LC_TELEPHONE LC_TIME +-do +- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then +- eval $as_var=C; export $as_var +- else +- $as_unset $as_var +- fi +-done +- +-# Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then +- as_expr=expr +-else +- as_expr=false +-fi +- +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +- as_basename=basename +-else +- as_basename=false +-fi +- +- +-# Name of the executable. +-as_me=`$as_basename "$0" || +-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ +- X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- +- +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits +- +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi +- +- +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done +- +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac +- +- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO +- # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. +- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | +- sed ' +- N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, +- t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, +- ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 +- { (exit 1); exit 1; }; } +- +- # Don't try to exec as it changes $[0], causing all sort of problems +- # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno +- # Exit status is that of the last command. +- exit +-} +- +- +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +-esac +- +-if expr a : '\(a\)' >/dev/null 2>&1; then +- as_expr=expr +-else +- as_expr=false +-fi +- +-rm -f conf$$ conf$$.exe conf$$.file +-echo >conf$$.file +-if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links +- as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi +-elif ln conf$$.file conf$$ 2>/dev/null; then +- as_ln_s=ln +-else +- as_ln_s='cp -p' +-fi +-rm -f conf$$ conf$$.exe conf$$.file +- +-if mkdir -p . 2>/dev/null; then +- as_mkdir_p=: +-else +- test -d ./-p && rmdir ./-p +- as_mkdir_p=false +-fi +- +-as_executable_p="test -f" +- +-# Sed expression to map a string onto a valid CPP name. +-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +- +-# Sed expression to map a string onto a valid variable name. +-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +- +- +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- +- +-# Name of the host. +-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +-# so uname gets run too. +-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` +- +-exec 6>&1 +- +-# +-# Initializations. +-# +-ac_default_prefix=/usr/local +-ac_config_libobj_dir=. +-cross_compiling=no +-subdirs= +-MFLAGS= +-MAKEFLAGS= +-SHELL=${CONFIG_SHELL-/bin/sh} +- +-# Maximum number of lines to put in a shell here document. +-# This variable seems obsolete. It should probably be removed, and +-# only ac_max_sed_lines should be used. +-: ${ac_max_here_lines=38} +- +-# Identity of this package. +-PACKAGE_NAME='GRUB' +-PACKAGE_TARNAME='grub' +-PACKAGE_VERSION='0.97' +-PACKAGE_STRING='GRUB 0.97' +-PACKAGE_BUGREPORT='bug-grub@gnu.org' +- +-ac_unique_file="stage2/stage2.c" +-# Factoring default headers for most tests. +-ac_includes_default="\ +-#include +-#if HAVE_SYS_TYPES_H +-# include +-#endif +-#if HAVE_SYS_STAT_H +-# include +-#endif +-#if STDC_HEADERS +-# include +-# include +-#else +-# if HAVE_STDLIB_H +-# include +-# endif +-#endif +-#if HAVE_STRING_H +-# if !STDC_HEADERS && HAVE_MEMORY_H +-# include +-# endif +-# include +-#endif +-#if HAVE_STRINGS_H +-# include +-#endif +-#if HAVE_INTTYPES_H +-# include +-#else +-# if HAVE_STDINT_H +-# include +-# endif +-#endif +-#if HAVE_UNISTD_H +-# include +-#endif" +- +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT PERL CC ac_ct_CC CFLAGS LDFLAGS CPPFLAGS EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CCAS RANLIB ac_ct_RANLIB STAGE1_CFLAGS STAGE2_CFLAGS GRUB_CFLAGS OBJCOPY ac_ct_OBJCOPY GRUB_LIBS CPP EGREP NETBOOT_SUPPORT_TRUE NETBOOT_SUPPORT_FALSE DISKLESS_SUPPORT_TRUE DISKLESS_SUPPORT_FALSE HERCULES_SUPPORT_TRUE HERCULES_SUPPORT_FALSE SERIAL_SUPPORT_TRUE SERIAL_SUPPORT_FALSE SERIAL_SPEED_SIMULATION_TRUE SERIAL_SPEED_SIMULATION_FALSE BUILD_EXAMPLE_KERNEL_TRUE BUILD_EXAMPLE_KERNEL_FALSE FSYS_CFLAGS NET_CFLAGS NET_EXTRAFLAGS NETBOOT_DRIVERS CCASFLAGS LIBOBJS LTLIBOBJS' +-ac_subst_files='' +- +-# Initialize some variables set by options. +-ac_init_help= +-ac_init_version=false +-# The variables have the same names as the options, with +-# dashes changed to underlines. +-cache_file=/dev/null +-exec_prefix=NONE +-no_create= +-no_recursion= +-prefix=NONE +-program_prefix=NONE +-program_suffix=NONE +-program_transform_name=s,x,x, +-silent= +-site= +-srcdir= +-verbose= +-x_includes=NONE +-x_libraries=NONE +- +-# Installation directory options. +-# These are left unexpanded so users can "make install exec_prefix=/foo" +-# and all the variables that are supposed to be based on exec_prefix +-# by default will actually change. +-# Use braces instead of parens because sh, perl, etc. also accept them. +-bindir='${exec_prefix}/bin' +-sbindir='${exec_prefix}/sbin' +-libexecdir='${exec_prefix}/libexec' +-datadir='${prefix}/share' +-sysconfdir='${prefix}/etc' +-sharedstatedir='${prefix}/com' +-localstatedir='${prefix}/var' +-libdir='${exec_prefix}/lib' +-includedir='${prefix}/include' +-oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' +- +-ac_prev= +-for ac_option +-do +- # If the previous option needs an argument, assign it. +- if test -n "$ac_prev"; then +- eval "$ac_prev=\$ac_option" +- ac_prev= +- continue +- fi +- +- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` +- +- # Accept the important Cygnus configure options, so we can diagnose typos. +- +- case $ac_option in +- +- -bindir | --bindir | --bindi | --bind | --bin | --bi) +- ac_prev=bindir ;; +- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) +- bindir=$ac_optarg ;; +- +- -build | --build | --buil | --bui | --bu) +- ac_prev=build_alias ;; +- -build=* | --build=* | --buil=* | --bui=* | --bu=*) +- build_alias=$ac_optarg ;; +- +- -cache-file | --cache-file | --cache-fil | --cache-fi \ +- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) +- ac_prev=cache_file ;; +- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ +- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) +- cache_file=$ac_optarg ;; +- +- --config-cache | -C) +- cache_file=config.cache ;; +- +- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) +- ac_prev=datadir ;; +- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ +- | --da=*) +- datadir=$ac_optarg ;; +- +- -disable-* | --disable-*) +- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` +- # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && +- { echo "$as_me: error: invalid feature name: $ac_feature" >&2 +- { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- eval "enable_$ac_feature=no" ;; +- +- -enable-* | --enable-*) +- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` +- # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && +- { echo "$as_me: error: invalid feature name: $ac_feature" >&2 +- { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "enable_$ac_feature='$ac_optarg'" ;; +- +- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ +- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ +- | --exec | --exe | --ex) +- ac_prev=exec_prefix ;; +- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ +- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ +- | --exec=* | --exe=* | --ex=*) +- exec_prefix=$ac_optarg ;; +- +- -gas | --gas | --ga | --g) +- # Obsolete; use --with-gas. +- with_gas=yes ;; +- +- -help | --help | --hel | --he | -h) +- ac_init_help=long ;; +- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) +- ac_init_help=recursive ;; +- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) +- ac_init_help=short ;; +- +- -host | --host | --hos | --ho) +- ac_prev=host_alias ;; +- -host=* | --host=* | --hos=* | --ho=*) +- host_alias=$ac_optarg ;; +- +- -includedir | --includedir | --includedi | --included | --include \ +- | --includ | --inclu | --incl | --inc) +- ac_prev=includedir ;; +- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ +- | --includ=* | --inclu=* | --incl=* | --inc=*) +- includedir=$ac_optarg ;; +- +- -infodir | --infodir | --infodi | --infod | --info | --inf) +- ac_prev=infodir ;; +- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) +- infodir=$ac_optarg ;; +- +- -libdir | --libdir | --libdi | --libd) +- ac_prev=libdir ;; +- -libdir=* | --libdir=* | --libdi=* | --libd=*) +- libdir=$ac_optarg ;; +- +- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ +- | --libexe | --libex | --libe) +- ac_prev=libexecdir ;; +- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ +- | --libexe=* | --libex=* | --libe=*) +- libexecdir=$ac_optarg ;; +- +- -localstatedir | --localstatedir | --localstatedi | --localstated \ +- | --localstate | --localstat | --localsta | --localst \ +- | --locals | --local | --loca | --loc | --lo) +- ac_prev=localstatedir ;; +- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ +- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ +- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) +- localstatedir=$ac_optarg ;; +- +- -mandir | --mandir | --mandi | --mand | --man | --ma | --m) +- ac_prev=mandir ;; +- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) +- mandir=$ac_optarg ;; +- +- -nfp | --nfp | --nf) +- # Obsolete; use --without-fp. +- with_fp=no ;; +- +- -no-create | --no-create | --no-creat | --no-crea | --no-cre \ +- | --no-cr | --no-c | -n) +- no_create=yes ;; +- +- -no-recursion | --no-recursion | --no-recursio | --no-recursi \ +- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) +- no_recursion=yes ;; +- +- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ +- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ +- | --oldin | --oldi | --old | --ol | --o) +- ac_prev=oldincludedir ;; +- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ +- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ +- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) +- oldincludedir=$ac_optarg ;; +- +- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) +- ac_prev=prefix ;; +- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) +- prefix=$ac_optarg ;; +- +- -program-prefix | --program-prefix | --program-prefi | --program-pref \ +- | --program-pre | --program-pr | --program-p) +- ac_prev=program_prefix ;; +- -program-prefix=* | --program-prefix=* | --program-prefi=* \ +- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) +- program_prefix=$ac_optarg ;; +- +- -program-suffix | --program-suffix | --program-suffi | --program-suff \ +- | --program-suf | --program-su | --program-s) +- ac_prev=program_suffix ;; +- -program-suffix=* | --program-suffix=* | --program-suffi=* \ +- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) +- program_suffix=$ac_optarg ;; +- +- -program-transform-name | --program-transform-name \ +- | --program-transform-nam | --program-transform-na \ +- | --program-transform-n | --program-transform- \ +- | --program-transform | --program-transfor \ +- | --program-transfo | --program-transf \ +- | --program-trans | --program-tran \ +- | --progr-tra | --program-tr | --program-t) +- ac_prev=program_transform_name ;; +- -program-transform-name=* | --program-transform-name=* \ +- | --program-transform-nam=* | --program-transform-na=* \ +- | --program-transform-n=* | --program-transform-=* \ +- | --program-transform=* | --program-transfor=* \ +- | --program-transfo=* | --program-transf=* \ +- | --program-trans=* | --program-tran=* \ +- | --progr-tra=* | --program-tr=* | --program-t=*) +- program_transform_name=$ac_optarg ;; +- +- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ +- | -silent | --silent | --silen | --sile | --sil) +- silent=yes ;; +- +- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) +- ac_prev=sbindir ;; +- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ +- | --sbi=* | --sb=*) +- sbindir=$ac_optarg ;; +- +- -sharedstatedir | --sharedstatedir | --sharedstatedi \ +- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ +- | --sharedst | --shareds | --shared | --share | --shar \ +- | --sha | --sh) +- ac_prev=sharedstatedir ;; +- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ +- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ +- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ +- | --sha=* | --sh=*) +- sharedstatedir=$ac_optarg ;; +- +- -site | --site | --sit) +- ac_prev=site ;; +- -site=* | --site=* | --sit=*) +- site=$ac_optarg ;; +- +- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) +- ac_prev=srcdir ;; +- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) +- srcdir=$ac_optarg ;; +- +- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ +- | --syscon | --sysco | --sysc | --sys | --sy) +- ac_prev=sysconfdir ;; +- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ +- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) +- sysconfdir=$ac_optarg ;; +- +- -target | --target | --targe | --targ | --tar | --ta | --t) +- ac_prev=target_alias ;; +- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) +- target_alias=$ac_optarg ;; +- +- -v | -verbose | --verbose | --verbos | --verbo | --verb) +- verbose=yes ;; +- +- -version | --version | --versio | --versi | --vers | -V) +- ac_init_version=: ;; +- +- -with-* | --with-*) +- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` +- # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && +- { echo "$as_me: error: invalid package name: $ac_package" >&2 +- { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package| sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "with_$ac_package='$ac_optarg'" ;; +- +- -without-* | --without-*) +- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` +- # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && +- { echo "$as_me: error: invalid package name: $ac_package" >&2 +- { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package | sed 's/-/_/g'` +- eval "with_$ac_package=no" ;; +- +- --x) +- # Obsolete; use --with-x. +- with_x=yes ;; +- +- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ +- | --x-incl | --x-inc | --x-in | --x-i) +- ac_prev=x_includes ;; +- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ +- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) +- x_includes=$ac_optarg ;; +- +- -x-libraries | --x-libraries | --x-librarie | --x-librari \ +- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) +- ac_prev=x_libraries ;; +- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ +- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) +- x_libraries=$ac_optarg ;; +- +- -*) { echo "$as_me: error: unrecognized option: $ac_option +-Try \`$0 --help' for more information." >&2 +- { (exit 1); exit 1; }; } +- ;; +- +- *=*) +- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` +- # Reject names that are not valid shell variable names. +- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && +- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 +- { (exit 1); exit 1; }; } +- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` +- eval "$ac_envvar='$ac_optarg'" +- export $ac_envvar ;; +- +- *) +- # FIXME: should be removed in autoconf 3.0. +- echo "$as_me: WARNING: you should use --build, --host, --target" >&2 +- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && +- echo "$as_me: WARNING: invalid host type: $ac_option" >&2 +- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} +- ;; +- +- esac +-done +- +-if test -n "$ac_prev"; then +- ac_option=--`echo $ac_prev | sed 's/_/-/g'` +- { echo "$as_me: error: missing argument to $ac_option" >&2 +- { (exit 1); exit 1; }; } +-fi +- +-# Be sure to have absolute paths. +-for ac_var in exec_prefix prefix +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# Be sure to have absolute paths. +-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ +- localstatedir libdir includedir oldincludedir infodir mandir +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# There might be people who depend on the old broken behavior: `$host' +-# used to hold the argument of --host etc. +-# FIXME: To remove some day. +-build=$build_alias +-host=$host_alias +-target=$target_alias +- +-# FIXME: To remove some day. +-if test "x$host_alias" != x; then +- if test "x$build_alias" = x; then +- cross_compiling=maybe +- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. +- If a cross compiler is detected then cross compile mode will be used." >&2 +- elif test "x$build_alias" != "x$host_alias"; then +- cross_compiling=yes +- fi +-fi +- +-ac_tool_prefix= +-test -n "$host_alias" && ac_tool_prefix=$host_alias- +- +-test "$silent" = yes && exec 6>/dev/null +- +- +-# Find the source files, if location was not specified. +-if test -z "$srcdir"; then +- ac_srcdir_defaulted=yes +- # Try the directory containing this script, then its parent. +- ac_confdir=`(dirname "$0") 2>/dev/null || +-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$0" : 'X\(//\)[^/]' \| \ +- X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$0" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- srcdir=$ac_confdir +- if test ! -r $srcdir/$ac_unique_file; then +- srcdir=.. +- fi +-else +- ac_srcdir_defaulted=no +-fi +-if test ! -r $srcdir/$ac_unique_file; then +- if test "$ac_srcdir_defaulted" = yes; then +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +- { (exit 1); exit 1; }; } +- else +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 +- { (exit 1); exit 1; }; } +- fi +-fi +-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || +- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +- { (exit 1); exit 1; }; } +-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +-ac_env_build_alias_set=${build_alias+set} +-ac_env_build_alias_value=$build_alias +-ac_cv_env_build_alias_set=${build_alias+set} +-ac_cv_env_build_alias_value=$build_alias +-ac_env_host_alias_set=${host_alias+set} +-ac_env_host_alias_value=$host_alias +-ac_cv_env_host_alias_set=${host_alias+set} +-ac_cv_env_host_alias_value=$host_alias +-ac_env_target_alias_set=${target_alias+set} +-ac_env_target_alias_value=$target_alias +-ac_cv_env_target_alias_set=${target_alias+set} +-ac_cv_env_target_alias_value=$target_alias +-ac_env_CC_set=${CC+set} +-ac_env_CC_value=$CC +-ac_cv_env_CC_set=${CC+set} +-ac_cv_env_CC_value=$CC +-ac_env_CFLAGS_set=${CFLAGS+set} +-ac_env_CFLAGS_value=$CFLAGS +-ac_cv_env_CFLAGS_set=${CFLAGS+set} +-ac_cv_env_CFLAGS_value=$CFLAGS +-ac_env_LDFLAGS_set=${LDFLAGS+set} +-ac_env_LDFLAGS_value=$LDFLAGS +-ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +-ac_cv_env_LDFLAGS_value=$LDFLAGS +-ac_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_env_CPPFLAGS_value=$CPPFLAGS +-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_cv_env_CPPFLAGS_value=$CPPFLAGS +-ac_env_CPP_set=${CPP+set} +-ac_env_CPP_value=$CPP +-ac_cv_env_CPP_set=${CPP+set} +-ac_cv_env_CPP_value=$CPP +- +-# +-# Report the --help message. +-# +-if test "$ac_init_help" = "long"; then +- # Omit some internal or obsolete options to make the list less imposing. +- # This message is too long to be a string in the A/UX 3.1 sh. +- cat <<_ACEOF +-\`configure' configures GRUB 0.97 to adapt to many kinds of systems. +- +-Usage: $0 [OPTION]... [VAR=VALUE]... +- +-To assign environment variables (e.g., CC, CFLAGS...), specify them as +-VAR=VALUE. See below for descriptions of some of the useful variables. +- +-Defaults for the options are specified in brackets. +- +-Configuration: +- -h, --help display this help and exit +- --help=short display options specific to this package +- --help=recursive display the short help of all the included packages +- -V, --version display version information and exit +- -q, --quiet, --silent do not print \`checking...' messages +- --cache-file=FILE cache test results in FILE [disabled] +- -C, --config-cache alias for \`--cache-file=config.cache' +- -n, --no-create do not create output files +- --srcdir=DIR find the sources in DIR [configure dir or \`..'] +- +-_ACEOF +- +- cat <<_ACEOF +-Installation directories: +- --prefix=PREFIX install architecture-independent files in PREFIX +- [$ac_default_prefix] +- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX +- [PREFIX] +- +-By default, \`make install' will install all the files in +-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +-an installation prefix other than \`$ac_default_prefix' using \`--prefix', +-for instance \`--prefix=\$HOME'. +- +-For better control, use the options below. +- +-Fine tuning of the installation directories: +- --bindir=DIR user executables [EPREFIX/bin] +- --sbindir=DIR system admin executables [EPREFIX/sbin] +- --libexecdir=DIR program executables [EPREFIX/libexec] +- --datadir=DIR read-only architecture-independent data [PREFIX/share] +- --sysconfdir=DIR read-only single-machine data [PREFIX/etc] +- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] +- --localstatedir=DIR modifiable single-machine data [PREFIX/var] +- --libdir=DIR object code libraries [EPREFIX/lib] +- --includedir=DIR C header files [PREFIX/include] +- --oldincludedir=DIR C header files for non-gcc [/usr/include] +- --infodir=DIR info documentation [PREFIX/info] +- --mandir=DIR man documentation [PREFIX/man] +-_ACEOF +- +- cat <<\_ACEOF +- +-Program names: +- --program-prefix=PREFIX prepend PREFIX to installed program names +- --program-suffix=SUFFIX append SUFFIX to installed program names +- --program-transform-name=PROGRAM run sed PROGRAM on installed program names +- +-System types: +- --build=BUILD configure for building on BUILD [guessed] +- --host=HOST cross-compile to build programs to run on HOST [BUILD] +-_ACEOF +-fi +- +-if test -n "$ac_init_help"; then +- case $ac_init_help in +- short | recursive ) echo "Configuration of GRUB 0.97:";; +- esac +- cat <<\_ACEOF +- +-Optional Features: +- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) +- --enable-FEATURE[=ARG] include FEATURE [ARG=yes] +- --enable-maintainer-mode enable make rules and dependencies not useful +- (and sometimes confusing) to the casual installer +- --disable-dependency-tracking speeds up one-time build +- --enable-dependency-tracking do not reject slow dependency extractors +- --disable-ext2fs disable ext2fs support in Stage 2 +- --disable-fat disable FAT support in Stage 2 +- --disable-ffs disable FFS support in Stage 2 +- --disable-ufs2 disable UFS2 support in Stage 2 +- --disable-minix disable Minix fs support in Stage 2 +- --disable-reiserfs disable ReiserFS support in Stage 2 +- --disable-vstafs disable VSTa FS support in Stage 2 +- --disable-jfs disable IBM JFS support in Stage 2 +- --disable-xfs disable SGI XFS support in Stage 2 +- --disable-iso9660 disable ISO9660 support in Stage 2 +- --disable-gunzip disable decompression in Stage 2 +- --disable-md5-password disable MD5 password support in Stage 2 +- --disable-packet-retransmission +- turn off packet retransmission +- --enable-pci-direct access PCI directly instead of using BIOS +- --enable-3c509 enable 3Com509 driver +- --enable-3c529 enable 3Com529 driver +- --enable-3c595 enable 3Com595 driver +- --enable-3c90x enable 3Com90x driver +- --enable-cs89x0 enable CS89x0 driver +- --enable-davicom enable Davicom driver +- --enable-depca enable DEPCA and EtherWORKS driver +- --enable-eepro enable Etherexpress Pro/10 driver +- --enable-eepro100 enable Etherexpress Pro/100 driver +- --enable-epic100 enable SMC 83c170 EPIC/100 driver +- --enable-3c507 enable 3Com507 driver +- --enable-exos205 enable EXOS205 driver +- --enable-ni5210 enable Racal-Interlan NI5210 driver +- --enable-lance enable Lance PCI PCNet/32 driver +- --enable-ne2100 enable Novell NE2100 driver +- --enable-ni6510 enable Racal-Interlan NI6510 driver +- --enable-natsemi enable NatSemi DP8381x driver +- --enable-ni5010 enable Racal-Interlan NI5010 driver +- --enable-3c503 enable 3Com503 driver +- --enable-ne enable NE1000/2000 ISA driver +- --enable-ns8390 enable NE2000 PCI driver +- --enable-wd enable WD8003/8013, SMC8216/8416 driver +- --enable-otulip enable old Tulip driver +- --enable-rtl8139 enable Realtek 8139 driver +- --enable-sis900 enable SIS 900 and SIS 7016 driver +- --enable-sk-g16 enable Schneider and Koch G16 driver +- --enable-smc9000 enable SMC9000 driver +- --enable-tiara enable Tiara driver +- --enable-tulip enable Tulip driver +- --enable-via-rhine enable Rhine-I/II driver +- --enable-w89c840 enable Winbond W89c840, Compex RL100-ATX driver +- --enable-3c503-shmem use 3c503 shared memory mode +- --enable-3c503-aui use AUI by default on 3c503 cards +- --enable-compex-rl2000-fix +- specify this if you have a Compex RL2000 PCI +- --enable-smc9000-scan=LIST +- probe for SMC9000 I/O addresses using LIST +- --enable-ne-scan=LIST probe for NE base address using LIST +- --enable-wd-default-mem=MEM +- set the default memory location for WD/SMC +- --enable-cs-scan=LIST probe for CS89x0 base address using LIST +- --enable-diskless enable diskless support +- --disable-hercules disable hercules terminal support +- --disable-serial disable serial terminal support +- --enable-serial-speed-simulation +- simulate the slowness of a serial device +- --enable-preset-menu=FILE +- preset a menu file FILE in Stage 2 +- --enable-example-kernel +- build the example Multiboot kernel +- --disable-auto-linux-mem-opt +- don't pass Linux mem= option automatically +- +-Optional Packages: +- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] +- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) +- --with-binutils=DIR search the directory DIR to find binutils +- --without-curses do not use curses +- +-Some influential environment variables: +- CC C compiler command +- CFLAGS C compiler flags +- LDFLAGS linker flags, e.g. -L if you have libraries in a +- nonstandard directory +- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have +- headers in a nonstandard directory +- CPP C preprocessor +- +-Use these variables to override the choices made by `configure' or to help +-it to find libraries and programs with nonstandard names/locations. +- +-Report bugs to . +-_ACEOF +-fi +- +-if test "$ac_init_help" = "recursive"; then +- # If there are subdirs, report their specific --help. +- ac_popdir=`pwd` +- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue +- test -d $ac_dir || continue +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- cd $ac_dir +- # Check for guested configure; otherwise get Cygnus style configure. +- if test -f $ac_srcdir/configure.gnu; then +- echo +- $SHELL $ac_srcdir/configure.gnu --help=recursive +- elif test -f $ac_srcdir/configure; then +- echo +- $SHELL $ac_srcdir/configure --help=recursive +- elif test -f $ac_srcdir/configure.ac || +- test -f $ac_srcdir/configure.in; then +- echo +- $ac_configure --help +- else +- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 +- fi +- cd $ac_popdir +- done +-fi +- +-test -n "$ac_init_help" && exit 0 +-if $ac_init_version; then +- cat <<\_ACEOF +-GRUB configure 0.97 +-generated by GNU Autoconf 2.59 +- +-Copyright (C) 2003 Free Software Foundation, Inc. +-This configure script is free software; the Free Software Foundation +-gives unlimited permission to copy, distribute and modify it. +-_ACEOF +- exit 0 +-fi +-exec 5>config.log +-cat >&5 <<_ACEOF +-This file contains any messages produced by compilers while +-running configure, to aid debugging if configure makes a mistake. +- +-It was created by GRUB $as_me 0.97, which was +-generated by GNU Autoconf 2.59. Invocation command line was +- +- $ $0 $@ +- +-_ACEOF +-{ +-cat <<_ASUNAME +-## --------- ## +-## Platform. ## +-## --------- ## +- +-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +-uname -m = `(uname -m) 2>/dev/null || echo unknown` +-uname -r = `(uname -r) 2>/dev/null || echo unknown` +-uname -s = `(uname -s) 2>/dev/null || echo unknown` +-uname -v = `(uname -v) 2>/dev/null || echo unknown` +- +-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` +- +-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +-hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +- +-_ASUNAME +- +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- echo "PATH: $as_dir" +-done +- +-} >&5 +- +-cat >&5 <<_ACEOF +- +- +-## ----------- ## +-## Core tests. ## +-## ----------- ## +- +-_ACEOF +- +- +-# Keep a trace of the command line. +-# Strip out --no-create and --no-recursion so they do not pile up. +-# Strip out --silent because we don't want to record it for future runs. +-# Also quote any args containing shell meta-characters. +-# Make two passes to allow for proper duplicate-argument suppression. +-ac_configure_args= +-ac_configure_args0= +-ac_configure_args1= +-ac_sep= +-ac_must_keep_next=false +-for ac_pass in 1 2 +-do +- for ac_arg +- do +- case $ac_arg in +- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; +- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ +- | -silent | --silent | --silen | --sile | --sil) +- continue ;; +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; +- esac +- case $ac_pass in +- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; +- 2) +- ac_configure_args1="$ac_configure_args1 '$ac_arg'" +- if test $ac_must_keep_next = true; then +- ac_must_keep_next=false # Got value, back to normal. +- else +- case $ac_arg in +- *=* | --config-cache | -C | -disable-* | --disable-* \ +- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ +- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ +- | -with-* | --with-* | -without-* | --without-* | --x) +- case "$ac_configure_args0 " in +- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; +- esac +- ;; +- -* ) ac_must_keep_next=true ;; +- esac +- fi +- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" +- # Get rid of the leading space. +- ac_sep=" " +- ;; +- esac +- done +-done +-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +- +-# When interrupted or exit'd, cleanup temporary files, and complete +-# config.log. We remove comments because anyway the quotes in there +-# would cause problems or look ugly. +-# WARNING: Be sure not to use single quotes in there, as some shells, +-# such as our DU 5.0 friend, will then `close' the trap. +-trap 'exit_status=$? +- # Save into config.log some information that might help in debugging. +- { +- echo +- +- cat <<\_ASBOX +-## ---------------- ## +-## Cache variables. ## +-## ---------------- ## +-_ASBOX +- echo +- # The following way of writing the cache mishandles newlines in values, +-{ +- (set) 2>&1 | +- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in +- *ac_space=\ *) +- sed -n \ +- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" +- ;; +- *) +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" +- ;; +- esac; +-} +- echo +- +- cat <<\_ASBOX +-## ----------------- ## +-## Output variables. ## +-## ----------------- ## +-_ASBOX +- echo +- for ac_var in $ac_subst_vars +- do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" +- done | sort +- echo +- +- if test -n "$ac_subst_files"; then +- cat <<\_ASBOX +-## ------------- ## +-## Output files. ## +-## ------------- ## +-_ASBOX +- echo +- for ac_var in $ac_subst_files +- do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" +- done | sort +- echo +- fi +- +- if test -s confdefs.h; then +- cat <<\_ASBOX +-## ----------- ## +-## confdefs.h. ## +-## ----------- ## +-_ASBOX +- echo +- sed "/^$/d" confdefs.h | sort +- echo +- fi +- test "$ac_signal" != 0 && +- echo "$as_me: caught signal $ac_signal" +- echo "$as_me: exit $exit_status" +- } >&5 +- rm -f core *.core && +- rm -rf conftest* confdefs* conf$$* $ac_clean_files && +- exit $exit_status +- ' 0 +-for ac_signal in 1 2 13 15; do +- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +-done +-ac_signal=0 +- +-# confdefs.h avoids OS command line length limits that DEFS can exceed. +-rm -rf conftest* confdefs.h +-# AIX cpp loses on an empty file, so make sure it contains at least a newline. +-echo >confdefs.h +- +-# Predefined preprocessor variables. +- +-cat >>confdefs.h <<_ACEOF +-#define PACKAGE_NAME "$PACKAGE_NAME" +-_ACEOF +- +- +-cat >>confdefs.h <<_ACEOF +-#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +-_ACEOF +- +- +-cat >>confdefs.h <<_ACEOF +-#define PACKAGE_VERSION "$PACKAGE_VERSION" +-_ACEOF +- +- +-cat >>confdefs.h <<_ACEOF +-#define PACKAGE_STRING "$PACKAGE_STRING" +-_ACEOF +- +- +-cat >>confdefs.h <<_ACEOF +-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +-_ACEOF +- +- +-# Let the site file select an alternate cache file if it wants to. +-# Prefer explicitly selected file to automatically selected ones. +-if test -z "$CONFIG_SITE"; then +- if test "x$prefix" != xNONE; then +- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" +- else +- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +- fi +-fi +-for ac_site_file in $CONFIG_SITE; do +- if test -r "$ac_site_file"; then +- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +-echo "$as_me: loading site script $ac_site_file" >&6;} +- sed 's/^/| /' "$ac_site_file" >&5 +- . "$ac_site_file" +- fi +-done +- +-if test -r "$cache_file"; then +- # Some versions of bash will fail to source /dev/null (special +- # files actually), so we avoid doing that. +- if test -f "$cache_file"; then +- { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +-echo "$as_me: loading cache $cache_file" >&6;} +- case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; +- esac +- fi +-else +- { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +-echo "$as_me: creating cache $cache_file" >&6;} +- >$cache_file +-fi +- +-# Check that the precious variables saved in the cache have kept the same +-# value. +-ac_cache_corrupted=false +-for ac_var in `(set) 2>&1 | +- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +- eval ac_old_set=\$ac_cv_env_${ac_var}_set +- eval ac_new_set=\$ac_env_${ac_var}_set +- eval ac_old_val="\$ac_cv_env_${ac_var}_value" +- eval ac_new_val="\$ac_env_${ac_var}_value" +- case $ac_old_set,$ac_new_set in +- set,) +- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} +- ac_cache_corrupted=: ;; +- ,set) +- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} +- ac_cache_corrupted=: ;; +- ,);; +- *) +- if test "x$ac_old_val" != "x$ac_new_val"; then +- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} +- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +-echo "$as_me: former value: $ac_old_val" >&2;} +- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +-echo "$as_me: current value: $ac_new_val" >&2;} +- ac_cache_corrupted=: +- fi;; +- esac +- # Pass precious variables to config.status. +- if test "$ac_new_set" = set; then +- case $ac_new_val in +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; +- *) ac_arg=$ac_var=$ac_new_val ;; +- esac +- case " $ac_configure_args " in +- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. +- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; +- esac +- fi +-done +-if $ac_cache_corrupted; then +- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +-echo "$as_me: error: changes in the environment can compromise the build" >&2;} +- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ac_config_headers="$ac_config_headers config.h" +- +-am__api_version="1.9" +-ac_aux_dir= +-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do +- if test -f $ac_dir/install-sh; then +- ac_aux_dir=$ac_dir +- ac_install_sh="$ac_aux_dir/install-sh -c" +- break +- elif test -f $ac_dir/install.sh; then +- ac_aux_dir=$ac_dir +- ac_install_sh="$ac_aux_dir/install.sh -c" +- break +- elif test -f $ac_dir/shtool; then +- ac_aux_dir=$ac_dir +- ac_install_sh="$ac_aux_dir/shtool install -c" +- break +- fi +-done +-if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} +- { (exit 1); exit 1; }; } +-fi +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" +-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. +- +-# Find a good install program. We prefer a C program (faster), +-# so one script is as good as another. But avoid the broken or +-# incompatible versions: +-# SysV /etc/install, /usr/sbin/install +-# SunOS /usr/etc/install +-# IRIX /sbin/install +-# AIX /bin/install +-# AmigaOS /C/install, which installs bootblocks on floppy discs +-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +-# AFS /usr/afsws/bin/install, which mishandles nonexistent args +-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +-# OS/2's system install, which has a completely different semantic +-# ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +-if test -z "$INSTALL"; then +-if test "${ac_cv_path_install+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- # Account for people who put trailing slashes in PATH elements. +-case $as_dir/ in +- ./ | .// | /cC/* | \ +- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ +- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ +- /usr/ucb/* ) ;; +- *) +- # OSF1 and SCO ODT 3.0 have their own names for install. +- # Don't use installbsd from OSF since it installs stuff as root +- # by default. +- for ac_prog in ginstall scoinst install; do +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then +- if test $ac_prog = install && +- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then +- # AIX install. It has an incompatible calling convention. +- : +- elif test $ac_prog = install && +- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then +- # program-specific install script used by HP pwplus--don't use. +- : +- else +- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" +- break 3 +- fi +- fi +- done +- done +- ;; +-esac +-done +- +- +-fi +- if test "${ac_cv_path_install+set}" = set; then +- INSTALL=$ac_cv_path_install +- else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will +- # break other packages using the cache if that directory is +- # removed, or if the path is relative. +- INSTALL=$ac_install_sh +- fi +-fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 +- +-# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +-# It thinks the first close brace ends the variable substitution. +-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' +- +-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' +- +-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' +- +-echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +-# Just in case +-sleep 1 +-echo timestamp > conftest.file +-# Do `set' in a subshell so we don't clobber the current shell's +-# arguments. Must try -L first in case configure is actually a +-# symlink; some systems play weird games with the mod time of symlinks +-# (eg FreeBSD returns the mod time of the symlink's containing +-# directory). +-if ( +- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` +- if test "$*" = "X"; then +- # -L didn't work. +- set X `ls -t $srcdir/configure conftest.file` +- fi +- rm -f conftest.file +- if test "$*" != "X $srcdir/configure conftest.file" \ +- && test "$*" != "X conftest.file $srcdir/configure"; then +- +- # If neither matched, then we have a broken ls. This can happen +- # if, for instance, CONFIG_SHELL is bash and it inherits a +- # broken ls alias from the environment. This has actually +- # happened. Such a system could not be considered "sane". +- { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +-alias in your environment" >&5 +-echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +-alias in your environment" >&2;} +- { (exit 1); exit 1; }; } +- fi +- +- test "$2" = conftest.file +- ) +-then +- # Ok. +- : +-else +- { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +-Check your system clock" >&5 +-echo "$as_me: error: newly created file is older than distributed files! +-Check your system clock" >&2;} +- { (exit 1); exit 1; }; } +-fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 +-test "$program_prefix" != NONE && +- program_transform_name="s,^,$program_prefix,;$program_transform_name" +-# Use a double $ so make ignores it. +-test "$program_suffix" != NONE && +- program_transform_name="s,\$,$program_suffix,;$program_transform_name" +-# Double any \ or $. echo might interpret backslashes. +-# By default was `s,x,x', remove it if useless. +-cat <<\_ACEOF >conftest.sed +-s/[\\$]/&&/g;s/;s,x,x,$// +-_ACEOF +-program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +-rm conftest.sed +- +-# expand $ac_aux_dir to an absolute path +-am_aux_dir=`cd $ac_aux_dir && pwd` +- +-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +-# Use eval to expand $SHELL +-if eval "$MISSING --run true"; then +- am_missing_run="$MISSING --run " +-else +- am_missing_run= +- { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +-fi +- +-if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then +- # We used to keeping the `.' as first argument, in order to +- # allow $(mkdir_p) to be used without argument. As in +- # $(mkdir_p) $(somedir) +- # where $(somedir) is conditionally defined. However this is wrong +- # for two reasons: +- # 1. if the package is installed by a user who cannot write `.' +- # make install will fail, +- # 2. the above comment should most certainly read +- # $(mkdir_p) $(DESTDIR)$(somedir) +- # so it does not work when $(somedir) is undefined and +- # $(DESTDIR) is not. +- # To support the latter case, we have to write +- # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), +- # so the `.' trick is pointless. +- mkdir_p='mkdir -p --' +-else +- # On NextStep and OpenStep, the `mkdir' command does not +- # recognize any option. It will interpret all options as +- # directories to create, and then abort because `.' already +- # exists. +- for d in ./-p ./--version; +- do +- test -d $d && rmdir $d +- done +- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. +- if test -f "$ac_aux_dir/mkinstalldirs"; then +- mkdir_p='$(mkinstalldirs)' +- else +- mkdir_p='$(install_sh) -d' +- fi +-fi +- +-for ac_prog in gawk mawk nawk awk +-do +- # Extract the first word of "$ac_prog", so it can be a program name with args. +-set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_AWK+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$AWK"; then +- ac_cv_prog_AWK="$AWK" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_AWK="$ac_prog" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-AWK=$ac_cv_prog_AWK +-if test -n "$AWK"; then +- echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- test -n "$AWK" && break +-done +- +-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.make <<\_ACEOF +-all: +- @echo 'ac_maketemp="$(MAKE)"' +-_ACEOF +-# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +-if test -n "$ac_maketemp"; then +- eval ac_cv_prog_make_${ac_make}_set=yes +-else +- eval ac_cv_prog_make_${ac_make}_set=no +-fi +-rm -f conftest.make +-fi +-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 +- SET_MAKE= +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +- SET_MAKE="MAKE=${MAKE-make}" +-fi +- +-rm -rf .tst 2>/dev/null +-mkdir .tst 2>/dev/null +-if test -d .tst; then +- am__leading_dot=. +-else +- am__leading_dot=_ +-fi +-rmdir .tst 2>/dev/null +- +-# test to see if srcdir already configured +-if test "`cd $srcdir && pwd`" != "`pwd`" && +- test -f $srcdir/config.status; then +- { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-# test whether we have cygpath +-if test -z "$CYGPATH_W"; then +- if (cygpath --version) >/dev/null 2>/dev/null; then +- CYGPATH_W='cygpath -w' +- else +- CYGPATH_W=echo +- fi +-fi +- +- +-# Define the identity of the package. +- PACKAGE='grub' +- VERSION='0.97' +- +- +-cat >>confdefs.h <<_ACEOF +-#define PACKAGE "$PACKAGE" +-_ACEOF +- +- +-cat >>confdefs.h <<_ACEOF +-#define VERSION "$VERSION" +-_ACEOF +- +-# Some tools Automake needs. +- +-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} +- +- +-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} +- +- +-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} +- +- +-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} +- +- +-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} +- +-install_sh=${install_sh-"$am_aux_dir/install-sh"} +- +-# Installed binaries are usually stripped using `strip' when the user +-# run `make install-strip'. However `strip' might not be the right +-# tool to use in cross-compilation environments, therefore Automake +-# will honor the `STRIP' environment variable to overrule this program. +-if test "$cross_compiling" != no; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +-set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_STRIP+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$STRIP"; then +- ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_STRIP="${ac_tool_prefix}strip" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-STRIP=$ac_cv_prog_STRIP +-if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_STRIP"; then +- ac_ct_STRIP=$STRIP +- # Extract the first word of "strip", so it can be a program name with args. +-set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_STRIP"; then +- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_STRIP="strip" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +-fi +-fi +-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +-if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- STRIP=$ac_ct_STRIP +-else +- STRIP="$ac_cv_prog_STRIP" +-fi +- +-fi +-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +- +-# We need awk for the "check" target. The system "awk" is bad on +-# some platforms. +-# Always define AMTAR for backward compatibility. +- +-AMTAR=${AMTAR-"${am_missing_run}tar"} +- +-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' +- +- +- +- +- +- +-# Make sure we can run config.sub. +-$ac_config_sub sun4 >/dev/null 2>&1 || +- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +-echo "$as_me: error: cannot run $ac_config_sub" >&2;} +- { (exit 1); exit 1; }; } +- +-echo "$as_me:$LINENO: checking build system type" >&5 +-echo $ECHO_N "checking build system type... $ECHO_C" >&6 +-if test "${ac_cv_build+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_build_alias=$build_alias +-test -z "$ac_cv_build_alias" && +- ac_cv_build_alias=`$ac_config_guess` +-test -z "$ac_cv_build_alias" && +- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +-echo "$as_me: error: cannot guess build type; you must specify one" >&2;} +- { (exit 1); exit 1; }; } +-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} +- { (exit 1); exit 1; }; } +- +-fi +-echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +-echo "${ECHO_T}$ac_cv_build" >&6 +-build=$ac_cv_build +-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +- +- +-echo "$as_me:$LINENO: checking host system type" >&5 +-echo $ECHO_N "checking host system type... $ECHO_C" >&6 +-if test "${ac_cv_host+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_host_alias=$host_alias +-test -z "$ac_cv_host_alias" && +- ac_cv_host_alias=$ac_cv_build_alias +-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} +- { (exit 1); exit 1; }; } +- +-fi +-echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +-echo "${ECHO_T}$ac_cv_host" >&6 +-host=$ac_cv_host +-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +- +- +- +-case "$host_cpu" in +-i[3456]86) host_cpu=i386 ;; +-x86_64) host_cpu=x86_64 ;; +-*) { { echo "$as_me:$LINENO: error: unsupported CPU type" >&5 +-echo "$as_me: error: unsupported CPU type" >&2;} +- { (exit 1); exit 1; }; } ;; +-esac +- +- +- +- +-# +-# Options +-# +- +-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 +- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +-if test "${enable_maintainer_mode+set}" = set; then +- enableval="$enable_maintainer_mode" +- USE_MAINTAINER_MODE=$enableval +-else +- USE_MAINTAINER_MODE=no +-fi; +- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 +- +- +-if test $USE_MAINTAINER_MODE = yes; then +- MAINTAINER_MODE_TRUE= +- MAINTAINER_MODE_FALSE='#' +-else +- MAINTAINER_MODE_TRUE='#' +- MAINTAINER_MODE_FALSE= +-fi +- +- MAINT=$MAINTAINER_MODE_TRUE +- +- +-if test "x$enable_maintainer_mode" = xyes; then +- # Extract the first word of "perl", so it can be a program name with args. +-set dummy perl; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_path_PERL+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- case $PERL in +- [\\/]* | ?:[\\/]*) +- ac_cv_path_PERL="$PERL" # Let the user override the test with a path. +- ;; +- *) +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +- ;; +-esac +-fi +-PERL=$ac_cv_path_PERL +- +-if test -n "$PERL"; then +- echo "$as_me:$LINENO: result: $PERL" >&5 +-echo "${ECHO_T}$PERL" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- if test -z "$PERL"; then +- { { echo "$as_me:$LINENO: error: perl not found" >&5 +-echo "$as_me: error: perl not found" >&2;} +- { (exit 1); exit 1; }; } +- fi +-fi +- +-# This should be checked before AC_PROG_CC +-if test "x$CFLAGS" = x; then +- default_CFLAGS=yes +-fi +- +-if test "x$host_cpu" = xx86_64; then +- CFLAGS="-m32 $CFLAGS" +-fi +- +-# +-# Programs +-# +- +-if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +-set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$CC"; then +- ac_cv_prog_CC="$CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_CC="${ac_tool_prefix}gcc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-CC=$ac_cv_prog_CC +-if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "gcc", so it can be a program name with args. +-set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="gcc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi +- +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +-if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +-set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$CC"; then +- ac_cv_prog_CC="$CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_CC="${ac_tool_prefix}gcc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-CC=$ac_cv_prog_CC +-if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "gcc", so it can be a program name with args. +-set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="gcc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi +- +-if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +-set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$CC"; then +- ac_cv_prog_CC="$CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_CC="${ac_tool_prefix}cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-CC=$ac_cv_prog_CC +-if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi +- +-fi +-if test -z "$CC"; then +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$CC"; then +- ac_cv_prog_CC="$CC" # Let the user override the test. +-else +- ac_prog_rejected=no +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then +- ac_prog_rejected=yes +- continue +- fi +- ac_cv_prog_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-if test $ac_prog_rejected = yes; then +- # We found a bogon in the path, so make sure we never use it. +- set dummy $ac_cv_prog_CC +- shift +- if test $# != 0; then +- # We chose a different compiler from the bogus one. +- # However, it has the same basename, so the bogon will be chosen +- # first if we set CC to just the basename; use the full file name. +- shift +- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" +- fi +-fi +-fi +-fi +-CC=$ac_cv_prog_CC +-if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- for ac_prog in cl +- do +- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +-set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$CC"; then +- ac_cv_prog_CC="$CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_CC="$ac_tool_prefix$ac_prog" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-CC=$ac_cv_prog_CC +-if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- test -n "$CC" && break +- done +-fi +-if test -z "$CC"; then +- ac_ct_CC=$CC +- for ac_prog in cl +-do +- # Extract the first word of "$ac_prog", so it can be a program name with args. +-set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="$ac_prog" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- test -n "$ac_ct_CC" && break +-done +- +- CC=$ac_ct_CC +-fi +- +-fi +- +- +-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +-See \`config.log' for more details." >&5 +-echo "$as_me: error: no acceptable C compiler found in \$PATH +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +- +-# Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 +-ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } +- +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-ac_clean_files_save=$ac_clean_files +-ac_clean_files="$ac_clean_files a.out a.exe b.out" +-# Try to create an executable without -o first, disregard a.out. +-# It will help us diagnose broken compilers, and finding out an intuition +-# of exeext. +-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 +- (eval $ac_link_default) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; then +- # Find the output, starting from the most likely. This scheme is +-# not robust to junk in `.', hence go to wildcards (a.*) only as a last +-# resort. +- +-# Be careful to initialize this variable, since it used to be cached. +-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +-ac_cv_exeext= +-# b.out is created by i960 compilers. +-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +-do +- test -f "$ac_file" || continue +- case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) +- ;; +- conftest.$ac_ext ) +- # This is the source file. +- ;; +- [ab].out ) +- # We found the default executable, but exeext='' is most +- # certainly right. +- break;; +- *.* ) +- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- # FIXME: I believe we export ac_cv_exeext for Libtool, +- # but it would be cool to find out if it's true. Does anybody +- # maintain Libtool? --akim. +- export ac_cv_exeext +- break;; +- * ) +- break;; +- esac +-done +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +-See \`config.log' for more details." >&5 +-echo "$as_me: error: C compiler cannot create executables +-See \`config.log' for more details." >&2;} +- { (exit 77); exit 77; }; } +-fi +- +-ac_exeext=$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_file" >&5 +-echo "${ECHO_T}$ac_file" >&6 +- +-# Check the compiler produces executables we can run. If not, either +-# the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +-# If not cross compiling, check that we can run a simple program. +-if test "$cross_compiling" != yes; then +- if { ac_try='./$ac_file' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- cross_compiling=no +- else +- if test "$cross_compiling" = maybe; then +- cross_compiling=yes +- else +- { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +-If you meant to cross compile, use \`--host'. +-See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot run C compiled programs. +-If you meant to cross compile, use \`--host'. +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +- fi +- fi +-fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 +- +-rm -f a.out a.exe conftest$ac_cv_exeext b.out +-ac_clean_files=$ac_clean_files_save +-# Check the compiler produces executables we can run. If not, either +-# the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +-echo "$as_me:$LINENO: result: $cross_compiling" >&5 +-echo "${ECHO_T}$cross_compiling" >&6 +- +-echo "$as_me:$LINENO: checking for suffix of executables" >&5 +-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; then +- # If both `conftest.exe' and `conftest' are `present' (well, observable) +-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +-# work properly (i.e., refer to `conftest.exe'), while it won't with +-# `rm'. +-for ac_file in conftest.exe conftest conftest.*; do +- test -f "$ac_file" || continue +- case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; +- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- export ac_cv_exeext +- break;; +- * ) break;; +- esac +-done +-else +- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +-See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-rm -f conftest$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +-echo "${ECHO_T}$ac_cv_exeext" >&6 +- +-rm -f conftest.$ac_ext +-EXEEXT=$ac_cv_exeext +-ac_exeext=$EXEEXT +-echo "$as_me:$LINENO: checking for suffix of object files" >&5 +-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +-if test "${ac_cv_objext+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.o conftest.obj +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; then +- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do +- case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; +- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` +- break;; +- esac +-done +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +-See \`config.log' for more details." >&5 +-echo "$as_me: error: cannot compute suffix of object files: cannot compile +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-rm -f conftest.$ac_cv_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +-echo "${ECHO_T}$ac_cv_objext" >&6 +-OBJEXT=$ac_cv_objext +-ac_objext=$OBJEXT +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +-if test "${ac_cv_c_compiler_gnu+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-#ifndef __GNUC__ +- choke me +-#endif +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_compiler_gnu=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_compiler_gnu=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_cv_c_compiler_gnu=$ac_compiler_gnu +- +-fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +-GCC=`test $ac_compiler_gnu = yes && echo yes` +-ac_test_CFLAGS=${CFLAGS+set} +-ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_g+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_g=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_cv_prog_cc_g=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +-if test "$ac_test_CFLAGS" = set; then +- CFLAGS=$ac_save_CFLAGS +-elif test $ac_cv_prog_cc_g = yes; then +- if test "$GCC" = yes; then +- CFLAGS="-g -O2" +- else +- CFLAGS="-g" +- fi +-else +- if test "$GCC" = yes; then +- CFLAGS="-O2" +- else +- CFLAGS= +- fi +-fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_prog_cc_stdc=no +-ac_save_CC=$CC +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-#include +-#include +-#include +-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +-struct buf { int x; }; +-FILE * (*rcsopen) (struct buf *, struct stat *, int); +-static char *e (p, i) +- char **p; +- int i; +-{ +- return p[i]; +-} +-static char *f (char * (*g) (char **, int), char **p, ...) +-{ +- char *s; +- va_list v; +- va_start (v,p); +- s = g (p, va_arg (v,int)); +- va_end (v); +- return s; +-} +- +-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has +- function prototypes and stuff, but not '\xHH' hex character constants. +- These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get +- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an +- array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ +-int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +- +-int test (int i, double x); +-struct s1 {int (*f) (int a);}; +-struct s2 {int (*f) (double a);}; +-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +-int argc; +-char **argv; +-int +-main () +-{ +-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; +- ; +- return 0; +-} +-_ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +-do +- CC="$ac_save_CC $ac_arg" +- rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext +-done +-rm -f conftest.$ac_ext conftest.$ac_objext +-CC=$ac_save_CC +- +-fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; +- *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; +-esac +- +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. +-cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-#include +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +-DEPDIR="${am__leading_dot}deps" +- +- ac_config_commands="$ac_config_commands depfiles" +- +- +-am_make=${MAKE-make} +-cat > confinc << 'END' +-am__doit: +- @echo done +-.PHONY: am__doit +-END +-# If we don't find an include directive, just comment out the code. +-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +-am__include="#" +-am__quote= +-_am_result=none +-# First try GNU make style include. +-echo "include confinc" > confmf +-# We grep out `Entering directory' and `Leaving directory' +-# messages which can occur if `w' ends up in MAKEFLAGS. +-# In particular we don't look at `^make:' because GNU make might +-# be invoked under some other name (usually "gmake"), in which +-# case it prints its new name instead of `make'. +-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then +- am__include=include +- am__quote= +- _am_result=GNU +-fi +-# Now try BSD make style include. +-if test "$am__include" = "#"; then +- echo '.include "confinc"' > confmf +- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then +- am__include=.include +- am__quote="\"" +- _am_result=BSD +- fi +-fi +- +- +-echo "$as_me:$LINENO: result: $_am_result" >&5 +-echo "${ECHO_T}$_am_result" >&6 +-rm -f confinc confmf +- +-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +-if test "${enable_dependency_tracking+set}" = set; then +- enableval="$enable_dependency_tracking" +- +-fi; +-if test "x$enable_dependency_tracking" != xno; then +- am_depcomp="$ac_aux_dir/depcomp" +- AMDEPBACKSLASH='\' +-fi +- +- +-if test "x$enable_dependency_tracking" != xno; then +- AMDEP_TRUE= +- AMDEP_FALSE='#' +-else +- AMDEP_TRUE='#' +- AMDEP_FALSE= +-fi +- +- +- +- +-depcc="$CC" am_compiler_list= +- +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then +- # We make a subdir and do the tests there. Otherwise we can end up +- # making bogus files that we don't know about and never remove. For +- # instance it was reported that on HP-UX the gcc test will end up +- # making a dummy file named `D' -- because `-MD' means `put the output +- # in D'. +- mkdir conftest.dir +- # Copy depcomp to subdir because otherwise we won't find it if we're +- # using a relative directory. +- cp "$am_depcomp" conftest.dir +- cd conftest.dir +- # We will build objects and dependencies in a subdirectory because +- # it helps to detect inapplicable dependency modes. For instance +- # both Tru64's cc and ICC support -MD to output dependencies as a +- # side effect of compilation, but ICC will put the dependencies in +- # the current directory while Tru64 will put them in the object +- # directory. +- mkdir sub +- +- am_cv_CC_dependencies_compiler_type=none +- if test "$am_compiler_list" = ""; then +- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` +- fi +- for depmode in $am_compiler_list; do +- # Setup a source with many dependencies, because some compilers +- # like to wrap large dependency lists on column 80 (with \), and +- # we should not choose a depcomp mode which is confused by this. +- # +- # We need to recreate these files for each test, as the compiler may +- # overwrite some of them when testing with obscure command lines. +- # This happens at least with the AIX C compiler. +- : > sub/conftest.c +- for i in 1 2 3 4 5 6; do +- echo '#include "conftst'$i'.h"' >> sub/conftest.c +- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with +- # Solaris 8's {/usr,}/bin/sh. +- touch sub/conftst$i.h +- done +- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf +- +- case $depmode in +- nosideeffect) +- # after this tag, mechanisms are not by side-effect, so they'll +- # only be used when explicitly requested +- if test "x$enable_dependency_tracking" = xyes; then +- continue +- else +- break +- fi +- ;; +- none) break ;; +- esac +- # We check with `-c' and `-o' for the sake of the "dashmstdout" +- # mode. It turns out that the SunPro C++ compiler does not properly +- # handle `-M -o', and we need to detect this. +- if depmode=$depmode \ +- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ +- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ +- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ +- >/dev/null 2>conftest.err && +- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && +- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && +- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then +- # icc doesn't choke on unknown options, it will just issue warnings +- # or remarks (even with -Werror). So we grep stderr for any message +- # that says an option was ignored or not supported. +- # When given -MP, icc 7.0 and 7.1 complain thusly: +- # icc: Command line warning: ignoring option '-M'; no argument required +- # The diagnosis changed in icc 8.0: +- # icc: Command line remark: option '-MP' not supported +- if (grep 'ignoring option' conftest.err || +- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else +- am_cv_CC_dependencies_compiler_type=$depmode +- break +- fi +- fi +- done +- +- cd .. +- rm -rf conftest.dir +-else +- am_cv_CC_dependencies_compiler_type=none +-fi +- +-fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type +- +- +- +-if +- test "x$enable_dependency_tracking" != xno \ +- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then +- am__fastdepCC_TRUE= +- am__fastdepCC_FALSE='#' +-else +- am__fastdepCC_TRUE='#' +- am__fastdepCC_FALSE= +-fi +- +- +-# We need this for older versions of Autoconf. +- +-depcc="$CC" am_compiler_list= +- +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then +- # We make a subdir and do the tests there. Otherwise we can end up +- # making bogus files that we don't know about and never remove. For +- # instance it was reported that on HP-UX the gcc test will end up +- # making a dummy file named `D' -- because `-MD' means `put the output +- # in D'. +- mkdir conftest.dir +- # Copy depcomp to subdir because otherwise we won't find it if we're +- # using a relative directory. +- cp "$am_depcomp" conftest.dir +- cd conftest.dir +- # We will build objects and dependencies in a subdirectory because +- # it helps to detect inapplicable dependency modes. For instance +- # both Tru64's cc and ICC support -MD to output dependencies as a +- # side effect of compilation, but ICC will put the dependencies in +- # the current directory while Tru64 will put them in the object +- # directory. +- mkdir sub +- +- am_cv_CC_dependencies_compiler_type=none +- if test "$am_compiler_list" = ""; then +- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` +- fi +- for depmode in $am_compiler_list; do +- # Setup a source with many dependencies, because some compilers +- # like to wrap large dependency lists on column 80 (with \), and +- # we should not choose a depcomp mode which is confused by this. +- # +- # We need to recreate these files for each test, as the compiler may +- # overwrite some of them when testing with obscure command lines. +- # This happens at least with the AIX C compiler. +- : > sub/conftest.c +- for i in 1 2 3 4 5 6; do +- echo '#include "conftst'$i'.h"' >> sub/conftest.c +- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with +- # Solaris 8's {/usr,}/bin/sh. +- touch sub/conftst$i.h +- done +- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf +- +- case $depmode in +- nosideeffect) +- # after this tag, mechanisms are not by side-effect, so they'll +- # only be used when explicitly requested +- if test "x$enable_dependency_tracking" = xyes; then +- continue +- else +- break +- fi +- ;; +- none) break ;; +- esac +- # We check with `-c' and `-o' for the sake of the "dashmstdout" +- # mode. It turns out that the SunPro C++ compiler does not properly +- # handle `-M -o', and we need to detect this. +- if depmode=$depmode \ +- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ +- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ +- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ +- >/dev/null 2>conftest.err && +- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && +- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && +- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then +- # icc doesn't choke on unknown options, it will just issue warnings +- # or remarks (even with -Werror). So we grep stderr for any message +- # that says an option was ignored or not supported. +- # When given -MP, icc 7.0 and 7.1 complain thusly: +- # icc: Command line warning: ignoring option '-M'; no argument required +- # The diagnosis changed in icc 8.0: +- # icc: Command line remark: option '-MP' not supported +- if (grep 'ignoring option' conftest.err || +- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else +- am_cv_CC_dependencies_compiler_type=$depmode +- break +- fi +- fi +- done +- +- cd .. +- rm -rf conftest.dir +-else +- am_cv_CC_dependencies_compiler_type=none +-fi +- +-fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type +- +- +- +-if +- test "x$enable_dependency_tracking" != xno \ +- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then +- am__fastdepCC_TRUE= +- am__fastdepCC_FALSE='#' +-else +- am__fastdepCC_TRUE='#' +- am__fastdepCC_FALSE= +-fi +- +- +- +-CCAS="$CC" +- +- +- +-# Check whether --with-binutils or --without-binutils was given. +-if test "${with_binutils+set}" = set; then +- withval="$with_binutils" +- +-fi; +- +-if test "x$with_binutils" != x; then +- # Extract the first word of "ranlib", so it can be a program name with args. +-set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_path_RANLIB+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- case $RANLIB in +- [\\/]* | ?:[\\/]*) +- ac_cv_path_RANLIB="$RANLIB" # Let the user override the test with a path. +- ;; +- *) +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-as_dummy=""$with_binutils:$PATH"" +-for as_dir in $as_dummy +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_path_RANLIB="$as_dir/$ac_word$ac_exec_ext" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +- test -z "$ac_cv_path_RANLIB" && ac_cv_path_RANLIB=":" +- ;; +-esac +-fi +-RANLIB=$ac_cv_path_RANLIB +- +-if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-else +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +-set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_RANLIB+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$RANLIB"; then +- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-RANLIB=$ac_cv_prog_RANLIB +-if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_RANLIB"; then +- ac_ct_RANLIB=$RANLIB +- # Extract the first word of "ranlib", so it can be a program name with args. +-set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_RANLIB"; then +- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_RANLIB="ranlib" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +-fi +-fi +-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +-if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- RANLIB=$ac_ct_RANLIB +-else +- RANLIB="$ac_cv_prog_RANLIB" +-fi +- +-fi +- +-# optimization flags +-if test "x$ac_cv_c_compiler_gnu" = xyes; then +- if test "x$default_CFLAGS" = xyes; then +- # Autoconf may set CFLAGS to -O2 and/or -g. So eliminate them. +- CFLAGS="`echo $CFLAGS | sed -e 's/-g//g' -e 's/-O[0-9]//g'` -g" +- # If the user specify the directory for binutils, add the option `-B'. +- if test "x$with_binutils" != x; then +- CFLAGS="-B$with_binutils/ $CFLAGS" +- fi +- STAGE1_CFLAGS="-O2" +- GRUB_CFLAGS="-O2" +- +-echo "$as_me:$LINENO: checking whether optimization for size works" >&5 +-echo $ECHO_N "checking whether optimization for size works... $ECHO_C" >&6 +-if test "${size_flag+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- +- saved_CFLAGS=$CFLAGS +- CFLAGS="-Os -g" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- size_flag=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-size_flag=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- CFLAGS=$saved_CFLAGS +- +-fi +-echo "$as_me:$LINENO: result: $size_flag" >&5 +-echo "${ECHO_T}$size_flag" >&6 +- if test "x$size_flag" = xyes; then +- STAGE2_CFLAGS="-Os" +- else +- STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" +- fi +- # OpenBSD has a GCC extension for protecting applications from +- # stack smashing attacks, but GRUB doesn't want this feature. +- echo "$as_me:$LINENO: checking whether gcc has -fno-stack-protector" >&5 +-echo $ECHO_N "checking whether gcc has -fno-stack-protector... $ECHO_C" >&6 +-if test "${no_stack_protector_flag+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- +- saved_CFLAGS=$CFLAGS +- CFLAGS="-fno-stack-protector" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- no_stack_protector_flag=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-no_stack_protector_flag=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- CFLAGS=$saved_CFLAGS +- +-fi +-echo "$as_me:$LINENO: result: $no_stack_protector_flag" >&5 +-echo "${ECHO_T}$no_stack_protector_flag" >&6 +- if test "x$no_stack_protector_flag" = xyes; then +- STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector" +- fi +- fi +-fi +- +- +- +- +- +-# Enforce coding standards. +-CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow" +-CPPFLAGS="$CPPFLAGS -Wpointer-arith" +- +-echo "$as_me:$LINENO: checking whether -Wundef works" >&5 +-echo $ECHO_N "checking whether -Wundef works... $ECHO_C" >&6 +-if test "${undef_flag+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- +- saved_CPPFLAGS="$CPPFLAGS" +- CPPFLAGS="-Wundef" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- undef_flag=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-undef_flag=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- CPPFLAGS="$saved_CPPFLAGS" +- +-fi +-echo "$as_me:$LINENO: result: $undef_flag" >&5 +-echo "${ECHO_T}$undef_flag" >&6 +- +-# The options `-falign-*' are supported by gcc 3.0 or later. +-# Probably it is sufficient to only check for -falign-loops. +-echo "$as_me:$LINENO: checking whether -falign-loops works" >&5 +-echo $ECHO_N "checking whether -falign-loops works... $ECHO_C" >&6 +-if test "${falign_loop_flag+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- +- saved_CPPFLAGS="$CPPFLAGS" +- CPPFLAGS="-falign-loops=1" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- falign_loop_flag=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-falign_loop_flag=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- CPPFLAGS="$saved_CPPFLAGS" +- +-fi +-echo "$as_me:$LINENO: result: $falign_loop_flag" >&5 +-echo "${ECHO_T}$falign_loop_flag" >&6 +- +-# Force no alignment to save space. +-if test "x$falign_loop_flag" = xyes; then +- CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" +-else +- CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" +-fi +- +-if test "x$undef_flag" = xyes; then +- CPPFLAGS="$CPPFLAGS -Wundef" +-fi +- +-if test "x$with_binutils" != x; then +- # Extract the first word of "objcopy", so it can be a program name with args. +-set dummy objcopy; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_path_OBJCOPY+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- case $OBJCOPY in +- [\\/]* | ?:[\\/]*) +- ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. +- ;; +- *) +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-as_dummy=""$with_binutils:$PATH"" +-for as_dir in $as_dummy +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +- ;; +-esac +-fi +-OBJCOPY=$ac_cv_path_OBJCOPY +- +-if test -n "$OBJCOPY"; then +- echo "$as_me:$LINENO: result: $OBJCOPY" >&5 +-echo "${ECHO_T}$OBJCOPY" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-else +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +-set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_OBJCOPY+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$OBJCOPY"; then +- ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-OBJCOPY=$ac_cv_prog_OBJCOPY +-if test -n "$OBJCOPY"; then +- echo "$as_me:$LINENO: result: $OBJCOPY" >&5 +-echo "${ECHO_T}$OBJCOPY" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_OBJCOPY"; then +- ac_ct_OBJCOPY=$OBJCOPY +- # Extract the first word of "objcopy", so it can be a program name with args. +-set dummy objcopy; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_OBJCOPY"; then +- ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_OBJCOPY="objcopy" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +-if test -n "$ac_ct_OBJCOPY"; then +- echo "$as_me:$LINENO: result: $ac_ct_OBJCOPY" >&5 +-echo "${ECHO_T}$ac_ct_OBJCOPY" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +- OBJCOPY=$ac_ct_OBJCOPY +-else +- OBJCOPY="$ac_cv_prog_OBJCOPY" +-fi +- +-fi +- +-# Defined in acinclude.m4. +- +-echo "$as_me:$LINENO: checking if C symbols get an underscore after compilation" >&5 +-echo $ECHO_N "checking if C symbols get an underscore after compilation... $ECHO_C" >&6 +-if test "${grub_cv_asm_uscore+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat > conftest.c <<\EOF +-int +-func (int *list) +-{ +- *list = 0; +- return *list; +-} +-EOF +- +-if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest.s; then +- true +-else +- { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce assembly code" >&5 +-echo "$as_me: error: ${CC-cc} failed to produce assembly code" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-if grep _func conftest.s >/dev/null 2>&1; then +- grub_cv_asm_uscore=yes +-else +- grub_cv_asm_uscore=no +-fi +- +-rm -f conftest* +-fi +- +- +-if test "x$grub_cv_asm_uscore" = xyes; then +- +-cat >>confdefs.h <<_ACEOF +-#define HAVE_ASM_USCORE $grub_cv_asm_uscore +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_asm_uscore" >&5 +-echo "${ECHO_T}$grub_cv_asm_uscore" >&6 +- +-echo "$as_me:$LINENO: checking whether ${OBJCOPY} works for absolute addresses" >&5 +-echo $ECHO_N "checking whether ${OBJCOPY} works for absolute addresses... $ECHO_C" >&6 +-if test "${grub_cv_prog_objcopy_absolute+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat > conftest.c <<\EOF +-void +-cmain (void) +-{ +- *((int *) 0x1000) = 2; +-} +-EOF +- +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && test -s conftest.o; then : +-else +- { { echo "$as_me:$LINENO: error: ${CC-cc} cannot compile C source code" >&5 +-echo "$as_me: error: ${CC-cc} cannot compile C source code" >&2;} +- { (exit 1); exit 1; }; } +-fi +-grub_cv_prog_objcopy_absolute=yes +-for link_addr in 2000 8000 7C00; do +- if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then : +- else +- { { echo "$as_me:$LINENO: error: ${CC-cc} cannot link at address $link_addr" >&5 +-echo "$as_me: error: ${CC-cc} cannot link at address $link_addr" >&2;} +- { (exit 1); exit 1; }; } +- fi +- if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then : +- else +- { { echo "$as_me:$LINENO: error: ${OBJCOPY-objcopy} cannot create binary files" >&5 +-echo "$as_me: error: ${OBJCOPY-objcopy} cannot create binary files" >&2;} +- { (exit 1); exit 1; }; } +- fi +- if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- mv -f conftest conftest.old +- else +- grub_cv_prog_objcopy_absolute=no +- break +- fi +-done +-rm -f conftest* +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_prog_objcopy_absolute" >&5 +-echo "${ECHO_T}$grub_cv_prog_objcopy_absolute" >&6 +-if test "x$grub_cv_prog_objcopy_absolute" != xyes; then +- { { echo "$as_me:$LINENO: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&5 +-echo "$as_me: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +- +-echo "$as_me:$LINENO: checking whether addr32 must be in the same line as the instruction" >&5 +-echo $ECHO_N "checking whether addr32 must be in the same line as the instruction... $ECHO_C" >&6 +-if test "${grub_cv_asm_prefix_requirement+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat > conftest.s <<\EOF +- .code16 +-l1: addr32 movb %al, l1 +-EOF +- +-if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest.o; then +- grub_cv_asm_prefix_requirement=yes +-else +- grub_cv_asm_prefix_requirement=no +-fi +- +-rm -f conftest* +-fi +- +- +-if test "x$grub_cv_asm_prefix_requirement" = xyes; then +- grub_tmp_addr32="addr32" +- grub_tmp_data32="data32" +-else +- grub_tmp_addr32="addr32;" +- grub_tmp_data32="data32;" +-fi +- +- +-cat >>confdefs.h <<_ACEOF +-#define ADDR32 $grub_tmp_addr32 +-_ACEOF +- +- +-cat >>confdefs.h <<_ACEOF +-#define DATA32 $grub_tmp_data32 +-_ACEOF +- +- +-echo "$as_me:$LINENO: result: $grub_cv_asm_prefix_requirement" >&5 +-echo "${ECHO_T}$grub_cv_asm_prefix_requirement" >&6 +- +- +- +-echo "$as_me:$LINENO: checking for .code16 addr32 assembler support" >&5 +-echo $ECHO_N "checking for .code16 addr32 assembler support... $ECHO_C" >&6 +-if test "${grub_cv_asm_addr32+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat > conftest.s.in <<\EOF +- .code16 +-l1: @ADDR32@ movb %al, l1 +-EOF +- +-if test "x$grub_cv_asm_prefix_requirement" = xyes; then +- sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s +-else +- sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s +-fi +- +-if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest.o; then +- grub_cv_asm_addr32=yes +-else +- grub_cv_asm_addr32=no +-fi +- +-rm -f conftest* +-fi +- +- +-echo "$as_me:$LINENO: result: $grub_cv_asm_addr32" >&5 +-echo "${ECHO_T}$grub_cv_asm_addr32" >&6 +-if test "x$grub_cv_asm_addr32" != xyes; then +- { { echo "$as_me:$LINENO: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&5 +-echo "$as_me: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +- +-echo "$as_me:$LINENO: checking whether an absolute indirect call/jump must not be prefixed with an asterisk" >&5 +-echo $ECHO_N "checking whether an absolute indirect call/jump must not be prefixed with an asterisk... $ECHO_C" >&6 +-if test "${grub_cv_asm_absolute_without_asterisk+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat > conftest.s <<\EOF +- lcall *(offset) +-offset: +- .long 0 +- .word 0 +-EOF +- +-if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest.o; then +- grub_cv_asm_absolute_without_asterisk=no +-else +- grub_cv_asm_absolute_without_asterisk=yes +-fi +- +-rm -f conftest* +-fi +- +- +-if test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define ABSOLUTE_WITHOUT_ASTERISK 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_asm_absolute_without_asterisk" >&5 +-echo "${ECHO_T}$grub_cv_asm_absolute_without_asterisk" >&6 +- +- +-echo "$as_me:$LINENO: checking if start is defined by the compiler" >&5 +-echo $ECHO_N "checking if start is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_start_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl start") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_start_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_start_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_start_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_START_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_start_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_start_symbol" >&6 +- +- +-echo "$as_me:$LINENO: checking if _start is defined by the compiler" >&5 +-echo $ECHO_N "checking if _start is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_uscore_start_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl _start") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_uscore_start_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_uscore_start_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_uscore_start_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_USCORE_START_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_uscore_start_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_uscore_start_symbol" >&6 +- +-if test "x$grub_cv_check_start_symbol" != "xyes" \ +- -a "x$grub_cv_check_uscore_start_symbol" != "xyes"; then +- { { echo "$as_me:$LINENO: error: Neither start nor _start is defined" >&5 +-echo "$as_me: error: Neither start nor _start is defined" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +- +-echo "$as_me:$LINENO: checking if __bss_start is defined by the compiler" >&5 +-echo $ECHO_N "checking if __bss_start is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_uscore_uscore_bss_start_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl __bss_start") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_uscore_uscore_bss_start_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_uscore_uscore_bss_start_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_USCORE_USCORE_BSS_START_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_uscore_uscore_bss_start_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_uscore_uscore_bss_start_symbol" >&6 +- +- +-echo "$as_me:$LINENO: checking if _edata is defined by the compiler" >&5 +-echo $ECHO_N "checking if _edata is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_uscore_edata_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl _edata") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_uscore_edata_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_uscore_edata_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_uscore_edata_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_USCORE_EDATA_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_uscore_edata_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_uscore_edata_symbol" >&6 +- +- +-echo "$as_me:$LINENO: checking if edata is defined by the compiler" >&5 +-echo $ECHO_N "checking if edata is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_edata_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl edata") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_edata_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_edata_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_edata_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_EDATA_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_edata_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_edata_symbol" >&6 +- +-if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \ +- -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \ +- -a "x$grub_cv_check_edata_symbol" != "xyes"; then +- { { echo "$as_me:$LINENO: error: None of __bss_start, _edata, edata defined" >&5 +-echo "$as_me: error: None of __bss_start, _edata, edata defined" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +- +-echo "$as_me:$LINENO: checking if end is defined by the compiler" >&5 +-echo $ECHO_N "checking if end is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_end_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl end") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_end_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_end_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_end_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_END_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_end_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_end_symbol" >&6 +- +- +-echo "$as_me:$LINENO: checking if _end is defined by the compiler" >&5 +-echo $ECHO_N "checking if _end is defined by the compiler... $ECHO_C" >&6 +-if test "${grub_cv_check_uscore_end_symbol+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +-asm ("incl _end") +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- grub_cv_check_uscore_end_symbol=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-grub_cv_check_uscore_end_symbol=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-fi +- +- +-if test "x$grub_cv_check_uscore_end_symbol" = xyes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_USCORE_END_SYMBOL 1 +-_ACEOF +- +-fi +- +-echo "$as_me:$LINENO: result: $grub_cv_check_uscore_end_symbol" >&5 +-echo "${ECHO_T}$grub_cv_check_uscore_end_symbol" >&6 +- +-if test "x$grub_cv_check_end_symbol" != "xyes" \ +- -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then +- { { echo "$as_me:$LINENO: error: Neither end nor _end is defined" >&5 +-echo "$as_me: error: Neither end nor _end is defined" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-# Check for curses libraries. +- +-# Check whether --with-curses or --without-curses was given. +-if test "${with_curses+set}" = set; then +- withval="$with_curses" +- +-fi; +- +-# Get the filename or the whole disk and open it. +-# Known to work on NetBSD. +-echo "$as_me:$LINENO: checking for opendisk in -lutil" >&5 +-echo $ECHO_N "checking for opendisk in -lutil... $ECHO_C" >&6 +-if test "${ac_cv_lib_util_opendisk+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lutil $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char opendisk (); +-int +-main () +-{ +-opendisk (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_util_opendisk=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_cv_lib_util_opendisk=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_util_opendisk" >&5 +-echo "${ECHO_T}$ac_cv_lib_util_opendisk" >&6 +-if test $ac_cv_lib_util_opendisk = yes; then +- GRUB_LIBS="$GRUB_LIBS -lutil" +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_OPENDISK 1 +-_ACEOF +- +-fi +- +- +-# Unless the user specify --without-curses, check for curses. +-if test "x$with_curses" != "xno"; then +- echo "$as_me:$LINENO: checking for wgetch in -lncurses" >&5 +-echo $ECHO_N "checking for wgetch in -lncurses... $ECHO_C" >&6 +-if test "${ac_cv_lib_ncurses_wgetch+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lncurses $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char wgetch (); +-int +-main () +-{ +-wgetch (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_ncurses_wgetch=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_cv_lib_ncurses_wgetch=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_wgetch" >&5 +-echo "${ECHO_T}$ac_cv_lib_ncurses_wgetch" >&6 +-if test $ac_cv_lib_ncurses_wgetch = yes; then +- GRUB_LIBS="$GRUB_LIBS -lncurses" +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_LIBCURSES 1 +-_ACEOF +- +-else +- echo "$as_me:$LINENO: checking for wgetch in -lcurses" >&5 +-echo $ECHO_N "checking for wgetch in -lcurses... $ECHO_C" >&6 +-if test "${ac_cv_lib_curses_wgetch+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lcurses $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char wgetch (); +-int +-main () +-{ +-wgetch (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_curses_wgetch=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_cv_lib_curses_wgetch=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_curses_wgetch" >&5 +-echo "${ECHO_T}$ac_cv_lib_curses_wgetch" >&6 +-if test $ac_cv_lib_curses_wgetch = yes; then +- GRUB_LIBS="$GRUB_LIBS -lcurses" +- +-cat >>confdefs.h <<\_ACEOF +-#define HAVE_LIBCURSES 1 +-_ACEOF +- +-fi +- +-fi +- +-fi +- +- +- +-# Check for headers. +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +-# On Suns, sometimes $CPP names a directory. +-if test -n "$CPP" && test -d "$CPP"; then +- CPP= +-fi +-if test -z "$CPP"; then +- if test "${ac_cv_prog_CPP+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- # Double quotes because CPP needs to be expanded +- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" +- do +- ac_preproc_ok=false +-for ac_c_preproc_warn_flag in '' yes +-do +- # Use a header file that comes with gcc, so configuring glibc +- # with a fresh cross-compiler works. +- # Prefer to if __STDC__ is defined, since +- # exists even on freestanding compilers. +- # On the NeXT, cc -E runs the code through the compiler's parser, +- # not just through cpp. "Syntax error" is here to catch this case. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#ifdef __STDC__ +-# include +-#else +-# include +-#endif +- Syntax error +-_ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then +- : +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- # Broken: fails on valid input. +-continue +-fi +-rm -f conftest.err conftest.$ac_ext +- +- # OK, works on sane cases. Now check whether non-existent headers +- # can be detected and how. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-_ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then +- # Broken: success on invalid input. +-continue +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- # Passes both tests. +-ac_preproc_ok=: +-break +-fi +-rm -f conftest.err conftest.$ac_ext +- +-done +-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +-rm -f conftest.err conftest.$ac_ext +-if $ac_preproc_ok; then +- break +-fi +- +- done +- ac_cv_prog_CPP=$CPP +- +-fi +- CPP=$ac_cv_prog_CPP +-else +- ac_cv_prog_CPP=$CPP +-fi +-echo "$as_me:$LINENO: result: $CPP" >&5 +-echo "${ECHO_T}$CPP" >&6 +-ac_preproc_ok=false +-for ac_c_preproc_warn_flag in '' yes +-do +- # Use a header file that comes with gcc, so configuring glibc +- # with a fresh cross-compiler works. +- # Prefer to if __STDC__ is defined, since +- # exists even on freestanding compilers. +- # On the NeXT, cc -E runs the code through the compiler's parser, +- # not just through cpp. "Syntax error" is here to catch this case. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#ifdef __STDC__ +-# include +-#else +-# include +-#endif +- Syntax error +-_ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then +- : +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- # Broken: fails on valid input. +-continue +-fi +-rm -f conftest.err conftest.$ac_ext +- +- # OK, works on sane cases. Now check whether non-existent headers +- # can be detected and how. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-_ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then +- # Broken: success on invalid input. +-continue +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- # Passes both tests. +-ac_preproc_ok=: +-break +-fi +-rm -f conftest.err conftest.$ac_ext +- +-done +-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +-rm -f conftest.err conftest.$ac_ext +-if $ac_preproc_ok; then +- : +-else +- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +-See \`config.log' for more details." >&5 +-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +-See \`config.log' for more details." >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +-echo "$as_me:$LINENO: checking for egrep" >&5 +-echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +-if test "${ac_cv_prog_egrep+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 +- then ac_cv_prog_egrep='grep -E' +- else ac_cv_prog_egrep='egrep' +- fi +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +-echo "${ECHO_T}$ac_cv_prog_egrep" >&6 +- EGREP=$ac_cv_prog_egrep +- +- +-echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +-if test "${ac_cv_header_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-#include +-#include +-#include +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_header_stdc=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_cv_header_stdc=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- +-if test $ac_cv_header_stdc = yes; then +- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +- +-_ACEOF +-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | +- $EGREP "memchr" >/dev/null 2>&1; then +- : +-else +- ac_cv_header_stdc=no +-fi +-rm -f conftest* +- +-fi +- +-if test $ac_cv_header_stdc = yes; then +- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +- +-_ACEOF +-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | +- $EGREP "free" >/dev/null 2>&1; then +- : +-else +- ac_cv_header_stdc=no +-fi +-rm -f conftest* +- +-fi +- +-if test $ac_cv_header_stdc = yes; then +- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +- if test "$cross_compiling" = yes; then +- : +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include +-#if ((' ' & 0x0FF) == 0x020) +-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +-#else +-# define ISLOWER(c) \ +- (('a' <= (c) && (c) <= 'i') \ +- || ('j' <= (c) && (c) <= 'r') \ +- || ('s' <= (c) && (c) <= 'z')) +-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +-#endif +- +-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +-int +-main () +-{ +- int i; +- for (i = 0; i < 256; i++) +- if (XOR (islower (i), ISLOWER (i)) +- || toupper (i) != TOUPPER (i)) +- exit(2); +- exit (0); +-} +-_ACEOF +-rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : +-else +- echo "$as_me: program exited with status $ac_status" >&5 +-echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-( exit $ac_status ) +-ac_cv_header_stdc=no +-fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +-fi +-fi +-fi +-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +-echo "${ECHO_T}$ac_cv_header_stdc" >&6 +-if test $ac_cv_header_stdc = yes; then +- +-cat >>confdefs.h <<\_ACEOF +-#define STDC_HEADERS 1 +-_ACEOF +- +-fi +- +-# On IRIX 5.3, sys/types and inttypes.h are conflicting. +- +- +- +- +- +- +- +- +- +-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ +- inttypes.h stdint.h unistd.h +-do +-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_includes_default +- +-#include <$ac_header> +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- eval "$as_ac_Header=yes" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-eval "$as_ac_Header=no" +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +-if test `eval echo '${'$as_ac_Header'}'` = yes; then +- cat >>confdefs.h <<_ACEOF +-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +-_ACEOF +- +-fi +- +-done +- +- +- +- +- +- +- +-for ac_header in string.h strings.h ncurses/curses.h ncurses.h curses.h +-do +-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +-else +- # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_includes_default +-#include <$ac_header> +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_header_compiler=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-ac_header_compiler=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 +- +-# Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-#include <$ac_header> +-_ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then +- ac_header_preproc=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- ac_header_preproc=no +-fi +-rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 +- +-# So? What about this header? +-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +- yes:no: ) +- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} +- ac_header_preproc=yes +- ;; +- no:yes:* ) +- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} +- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------- ## +-## Report this to bug-grub@gnu.org ## +-## ------------------------------- ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 +- ;; +-esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- eval "$as_ac_Header=\$ac_header_preproc" +-fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +- +-fi +-if test `eval echo '${'$as_ac_Header'}'` = yes; then +- cat >>confdefs.h <<_ACEOF +-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +-_ACEOF +- +-fi +- +-done +- +- +-# Check for user options. +- +-# filesystems support. +-# Check whether --enable-ext2fs or --disable-ext2fs was given. +-if test "${enable_ext2fs+set}" = set; then +- enableval="$enable_ext2fs" +- +-fi; +- +-if test x"$enable_ext2fs" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_EXT2FS=1" +-fi +- +-# Check whether --enable-fat or --disable-fat was given. +-if test "${enable_fat+set}" = set; then +- enableval="$enable_fat" +- +-fi; +- +-if test x"$enable_fat" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FAT=1" +-fi +- +-# Check whether --enable-ffs or --disable-ffs was given. +-if test "${enable_ffs+set}" = set; then +- enableval="$enable_ffs" +- +-fi; +- +-if test x"$enable_ffs" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1" +-fi +- +-# Check whether --enable-ufs2 or --disable-ufs2 was given. +-if test "${enable_ufs2+set}" = set; then +- enableval="$enable_ufs2" +- +-fi; +- +-if test x"$enable_ufs2" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_UFS2=1" +-fi +- +-# Check whether --enable-minix or --disable-minix was given. +-if test "${enable_minix+set}" = set; then +- enableval="$enable_minix" +- +-fi; +- +-if test x"$enable_minix" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1" +-fi +- +-# Check whether --enable-reiserfs or --disable-reiserfs was given. +-if test "${enable_reiserfs+set}" = set; then +- enableval="$enable_reiserfs" +- +-fi; +- +-if test x"$enable_reiserfs" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_REISERFS=1" +-fi +- +-# Check whether --enable-vstafs or --disable-vstafs was given. +-if test "${enable_vstafs+set}" = set; then +- enableval="$enable_vstafs" +- +-fi; +- +-if test x"$enable_vstafs" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_VSTAFS=1" +-fi +- +-# Check whether --enable-jfs or --disable-jfs was given. +-if test "${enable_jfs+set}" = set; then +- enableval="$enable_jfs" +- +-fi; +- +-if test x"$enable_jfs" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_JFS=1" +-fi +- +-# Check whether --enable-xfs or --disable-xfs was given. +-if test "${enable_xfs+set}" = set; then +- enableval="$enable_xfs" +- +-fi; +- +-if test x"$enable_xfs" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1" +-fi +- +-# Check whether --enable-iso9660 or --disable-iso9660 was given. +-if test "${enable_iso9660+set}" = set; then +- enableval="$enable_iso9660" +- +-fi; +- +-if test x"$enable_iso9660" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1" +-fi +- +- +-# Check whether --enable-gunzip or --disable-gunzip was given. +-if test "${enable_gunzip+set}" = set; then +- enableval="$enable_gunzip" +- +-fi; +- +-if test x"$enable_gunzip" = xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DNO_DECOMPRESSION=1" +-fi +- +-# Check whether --enable-md5-password or --disable-md5-password was given. +-if test "${enable_md5_password+set}" = set; then +- enableval="$enable_md5_password" +- +-fi; +-if test "x$enable_md5_password" != xno; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DUSE_MD5_PASSWORDS=1" +-fi +- +-# Check whether --enable-packet-retransmission or --disable-packet-retransmission was given. +-if test "${enable_packet_retransmission+set}" = set; then +- enableval="$enable_packet_retransmission" +- +-fi; +-if test "x$enable_packet_retransmission" != xno; then +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONGESTED=1" +-fi +- +-# Check whether --enable-pci-direct or --disable-pci-direct was given. +-if test "${enable_pci_direct+set}" = set; then +- enableval="$enable_pci_direct" +- +-fi; +-if test "x$enable_pci_direct" = xyes; then +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONFIG_PCI_DIRECT=1" +-fi +- +-# Check whether --enable-3c509 or --disable-3c509 was given. +-if test "${enable_3c509+set}" = set; then +- enableval="$enable_3c509" +- +-fi; +-if test "x$enable_3c509" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C509" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c509.o" +-fi +- +-# Check whether --enable-3c529 or --disable-3c529 was given. +-if test "${enable_3c529+set}" = set; then +- enableval="$enable_3c529" +- +-fi; +-if test "x$enable_3c529" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C529=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c529.o" +-fi +- +-# Check whether --enable-3c595 or --disable-3c595 was given. +-if test "${enable_3c595+set}" = set; then +- enableval="$enable_3c595" +- +-fi; +-if test "x$enable_3c595" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C595=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c595.o" +-fi +- +-# Check whether --enable-3c90x or --disable-3c90x was given. +-if test "${enable_3c90x+set}" = set; then +- enableval="$enable_3c90x" +- +-fi; +-if test "x$enable_3c90x" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C90X=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c90x.o" +-fi +- +-# Check whether --enable-cs89x0 or --disable-cs89x0 was given. +-if test "${enable_cs89x0+set}" = set; then +- enableval="$enable_cs89x0" +- +-fi; +-if test "x$enable_cs89x0" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_CS89X0=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS cs89x0.o" +-fi +- +-# Check whether --enable-davicom or --disable-davicom was given. +-if test "${enable_davicom+set}" = set; then +- enableval="$enable_davicom" +- +-fi; +-if test "x$enable_davicom" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DAVICOM=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS davicom.o" +-fi +- +-# Check whether --enable-depca or --disable-depca was given. +-if test "${enable_depca+set}" = set; then +- enableval="$enable_depca" +- +-fi; +-if test "x$enable_depca" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DEPCA=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS depca.o" +-fi +- +-# Check whether --enable-eepro or --disable-eepro was given. +-if test "${enable_eepro+set}" = set; then +- enableval="$enable_eepro" +- +-fi; +-if test "x$enable_eepro" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro.o" +-fi +- +-# Check whether --enable-eepro100 or --disable-eepro100 was given. +-if test "${enable_eepro100+set}" = set; then +- enableval="$enable_eepro100" +- +-fi; +-if test "x$enable_eepro100" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO100=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro100.o" +-fi +- +-# Check whether --enable-epic100 or --disable-epic100 was given. +-if test "${enable_epic100+set}" = set; then +- enableval="$enable_epic100" +- +-fi; +-if test "x$enable_epic100" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EPIC100=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS epic100.o" +-fi +- +-# Check whether --enable-3c507 or --disable-3c507 was given. +-if test "${enable_3c507+set}" = set; then +- enableval="$enable_3c507" +- +-fi; +-if test "x$enable_3c507" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C507=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c507.o" +-fi +- +-# Check whether --enable-exos205 or --disable-exos205 was given. +-if test "${enable_exos205+set}" = set; then +- enableval="$enable_exos205" +- +-fi; +-if test "x$enable_exos205" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EXOS205=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS exos205.o" +-fi +- +-# Check whether --enable-ni5210 or --disable-ni5210 was given. +-if test "${enable_ni5210+set}" = set; then +- enableval="$enable_ni5210" +- +-fi; +-if test "x$enable_ni5210" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5210=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5210.o" +-fi +- +-# Check whether --enable-lance or --disable-lance was given. +-if test "${enable_lance+set}" = set; then +- enableval="$enable_lance" +- +-fi; +-if test "x$enable_lance" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_LANCE=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS lance.o" +-fi +- +-# Check whether --enable-ne2100 or --disable-ne2100 was given. +-if test "${enable_ne2100+set}" = set; then +- enableval="$enable_ne2100" +- +-fi; +-if test "x$enable_ne2100" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE2100=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne2100.o" +-fi +- +-# Check whether --enable-ni6510 or --disable-ni6510 was given. +-if test "${enable_ni6510+set}" = set; then +- enableval="$enable_ni6510" +- +-fi; +-if test "x$enable_ni6510" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI6510=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni6510.o" +-fi +- +-# Check whether --enable-natsemi or --disable-natsemi was given. +-if test "${enable_natsemi+set}" = set; then +- enableval="$enable_natsemi" +- +-fi; +-if test "x$enable_natsemi" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NATSEMI=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS natsemi.o" +-fi +- +-# Check whether --enable-ni5010 or --disable-ni5010 was given. +-if test "${enable_ni5010+set}" = set; then +- enableval="$enable_ni5010" +- +-fi; +-if test "x$enable_ni5010" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5010=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5010.o" +-fi +- +-# Check whether --enable-3c503 or --disable-3c503 was given. +-if test "${enable_3c503+set}" = set; then +- enableval="$enable_3c503" +- +-fi; +-if test "x$enable_3c503" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C503=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c503.o" +-fi +- +-# Check whether --enable-ne or --disable-ne was given. +-if test "${enable_ne+set}" = set; then +- enableval="$enable_ne" +- +-fi; +-if test "x$enable_ne" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne.o" +-fi +- +-# Check whether --enable-ns8390 or --disable-ns8390 was given. +-if test "${enable_ns8390+set}" = set; then +- enableval="$enable_ns8390" +- +-fi; +-if test "x$enable_ns8390" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NS8390=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ns8390.o" +-fi +- +-# Check whether --enable-wd or --disable-wd was given. +-if test "${enable_wd+set}" = set; then +- enableval="$enable_wd" +- +-fi; +-if test "x$enable_wd" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_WD=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS wd.o" +-fi +- +-# Check whether --enable-otulip or --disable-otulip was given. +-if test "${enable_otulip+set}" = set; then +- enableval="$enable_otulip" +- +-fi; +-if test "x$enable_otulip" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_OTULIP=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS otulip.o" +-fi +- +-# Check whether --enable-rtl8139 or --disable-rtl8139 was given. +-if test "${enable_rtl8139+set}" = set; then +- enableval="$enable_rtl8139" +- +-fi; +-if test "x$enable_rtl8139" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_RTL8139=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS rtl8139.o" +-fi +- +-# Check whether --enable-sis900 or --disable-sis900 was given. +-if test "${enable_sis900+set}" = set; then +- enableval="$enable_sis900" +- +-fi; +-if test "x$enable_sis900" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SIS900=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS sis900.o" +-fi +- +-# Check whether --enable-sk-g16 or --disable-sk-g16 was given. +-if test "${enable_sk_g16+set}" = set; then +- enableval="$enable_sk_g16" +- +-fi; +-if test "x$enable_sk_g16" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SK_G16=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS sk_g16.o" +-fi +- +-# Check whether --enable-smc9000 or --disable-smc9000 was given. +-if test "${enable_smc9000+set}" = set; then +- enableval="$enable_smc9000" +- +-fi; +-if test "x$enable_smc9000" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SMC9000=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS smc9000.o" +-fi +- +-# Check whether --enable-tiara or --disable-tiara was given. +-if test "${enable_tiara+set}" = set; then +- enableval="$enable_tiara" +- +-fi; +-if test "x$enable_tiara" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TIARA=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS tiara.o" +-fi +- +-# Check whether --enable-tulip or --disable-tulip was given. +-if test "${enable_tulip+set}" = set; then +- enableval="$enable_tulip" +- +-fi; +-if test "x$enable_tulip" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TULIP=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS tulip.o" +-fi +- +-# Check whether --enable-via-rhine or --disable-via-rhine was given. +-if test "${enable_via_rhine+set}" = set; then +- enableval="$enable_via_rhine" +- +-fi; +-if test "x$enable_via_rhine" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_VIA_RHINE=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS via_rhine.o" +-fi +- +-# Check whether --enable-w89c840 or --disable-w89c840 was given. +-if test "${enable_w89c840+set}" = set; then +- enableval="$enable_w89c840" +- +-fi; +-if test "x$enable_w89c840" = xyes; then +- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_W89C840=1" +- NETBOOT_DRIVERS="$NETBOOT_DRIVERS w89c840.o" +-fi +- +- +- +-if test "x$NET_CFLAGS" != x; then +- NETBOOT_SUPPORT_TRUE= +- NETBOOT_SUPPORT_FALSE='#' +-else +- NETBOOT_SUPPORT_TRUE='#' +- NETBOOT_SUPPORT_FALSE= +-fi +- +-if test "x$NET_CFLAGS" != x; then +- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_TFTP=1" +-fi +- +-# Check whether --enable-3c503-shmem or --disable-3c503-shmem was given. +-if test "${enable_3c503_shmem+set}" = set; then +- enableval="$enable_3c503_shmem" +- +-fi; +-if test "x$enable_3c503_shmem" = xyes; then +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_SHMEM=1" +-fi +- +-# Check whether --enable-3c503-aui or --disable-3c503-aui was given. +-if test "${enable_3c503_aui+set}" = set; then +- enableval="$enable_3c503_aui" +- +-fi; +-if test "x$enable_3c503_aui" = xyes; then +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_AUI=1" +-fi +- +-# Check whether --enable-compex-rl2000-fix or --disable-compex-rl2000-fix was given. +-if test "${enable_compex_rl2000_fix+set}" = set; then +- enableval="$enable_compex_rl2000_fix" +- +-fi; +-if test "x$enable_compex_rl2000_fix" = xyes; then +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCOMPEX_RL2000_FIX=1" +-fi +- +-# Check whether --enable-smc9000-scan or --disable-smc9000-scan was given. +-if test "${enable_smc9000_scan+set}" = set; then +- enableval="$enable_smc9000_scan" +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DSMC9000_SCAN=$enable_smc9000_scan" +-fi; +- +-# Check whether --enable-ne-scan or --disable-ne-scan was given. +-if test "${enable_ne_scan+set}" = set; then +- enableval="$enable_ne_scan" +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=$enable_ne_scan" +-else +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=0x280,0x300,0x320,0x340" +-fi; +- +-# Check whether --enable-wd-default-mem or --disable-wd-default-mem was given. +-if test "${enable_wd_default_mem+set}" = set; then +- enableval="$enable_wd_default_mem" +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=$enable_wd_default_mem" +-else +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=0xCC000" +-fi; +- +-# Check whether --enable-cs-scan or --disable-cs-scan was given. +-if test "${enable_cs_scan+set}" = set; then +- enableval="$enable_cs_scan" +- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCS_SCAN=$enable_cs_scan" +-fi; +- +-# Check whether --enable-diskless or --disable-diskless was given. +-if test "${enable_diskless+set}" = set; then +- enableval="$enable_diskless" +- +-fi; +- +- +-if test "x$enable_diskless" = xyes; then +- DISKLESS_SUPPORT_TRUE= +- DISKLESS_SUPPORT_FALSE='#' +-else +- DISKLESS_SUPPORT_TRUE='#' +- DISKLESS_SUPPORT_FALSE= +-fi +- +- +-# Check whether --enable-hercules or --disable-hercules was given. +-if test "${enable_hercules+set}" = set; then +- enableval="$enable_hercules" +- +-fi; +- +- +-if test "x$enable_hercules" != xno; then +- HERCULES_SUPPORT_TRUE= +- HERCULES_SUPPORT_FALSE='#' +-else +- HERCULES_SUPPORT_TRUE='#' +- HERCULES_SUPPORT_FALSE= +-fi +- +- +-# Check whether --enable-serial or --disable-serial was given. +-if test "${enable_serial+set}" = set; then +- enableval="$enable_serial" +- +-fi; +- +- +-if test "x$enable_serial" != xno; then +- SERIAL_SUPPORT_TRUE= +- SERIAL_SUPPORT_FALSE='#' +-else +- SERIAL_SUPPORT_TRUE='#' +- SERIAL_SUPPORT_FALSE= +-fi +- +- +-# Check whether --enable-serial-speed-simulation or --disable-serial-speed-simulation was given. +-if test "${enable_serial_speed_simulation+set}" = set; then +- enableval="$enable_serial_speed_simulation" +- +-fi; +- +- +-if test "x$enable_serial_speed_simulation" = xyes; then +- SERIAL_SPEED_SIMULATION_TRUE= +- SERIAL_SPEED_SIMULATION_FALSE='#' +-else +- SERIAL_SPEED_SIMULATION_TRUE='#' +- SERIAL_SPEED_SIMULATION_FALSE= +-fi +- +- +-# Sanity check. +-if test "x$enable_diskless" = xyes; then +- if test "x$NET_CFLAGS" = x; then +- { { echo "$as_me:$LINENO: error: You must enable at least one network driver" >&5 +-echo "$as_me: error: You must enable at least one network driver" >&2;} +- { (exit 1); exit 1; }; } +- fi +-fi +- +-# Check whether --enable-preset-menu or --disable-preset-menu was given. +-if test "${enable_preset_menu+set}" = set; then +- enableval="$enable_preset_menu" +- +-fi; +-if test "x$enable_preset_menu" = x; then +- : +-else +- if test -r $enable_preset_menu; then +- +-# Because early versions of GNU sed 3.x are too buggy, use a C program +-# instead of shell commands. *sigh* +-cat >conftest.c <<\EOF +-#include +- +-int +-main (void) +-{ +- int c; +- +- while ((c = getchar ()) != EOF) +- { +- switch (c) +- { +- case '\n': +- fputs ("\\n", stdout); +- break; +- case '\r': +- fputs ("\\r", stdout); +- break; +- case '\\': +- fputs ("\\\\", stdout); +- break; +- case '"': +- fputs ("\\\"", stdout); +- break; +- default: +- putchar (c); +- } +- } +- +- return 0; +-} +-EOF +- +-if { ac_try='${CC-cc} ${CFLAGS} conftest.c -o conftest' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && test -s conftest; then +- grub_tmp_value=`./conftest < "$enable_preset_menu"` +-else +- { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce an executable file" >&5 +-echo "$as_me: error: ${CC-cc} failed to produce an executable file" >&2;} +- { (exit 1); exit 1; }; } +-fi +- +- +-cat >>confdefs.h <<_ACEOF +-#define PRESET_MENU_STRING "$grub_tmp_value" +-_ACEOF +- +-rm -f conftest* +- +- else +- { { echo "$as_me:$LINENO: error: Cannot read the preset menu file $enable_preset_menu" >&5 +-echo "$as_me: error: Cannot read the preset menu file $enable_preset_menu" >&2;} +- { (exit 1); exit 1; }; } +- fi +-fi +- +-# Check whether --enable-example-kernel or --disable-example-kernel was given. +-if test "${enable_example_kernel+set}" = set; then +- enableval="$enable_example_kernel" +- +-fi; +- +- +-if test "x$enable_example_kernel" = xyes; then +- BUILD_EXAMPLE_KERNEL_TRUE= +- BUILD_EXAMPLE_KERNEL_FALSE='#' +-else +- BUILD_EXAMPLE_KERNEL_TRUE='#' +- BUILD_EXAMPLE_KERNEL_FALSE= +-fi +- +- +-# Check whether --enable-auto-linux-mem-opt or --disable-auto-linux-mem-opt was given. +-if test "${enable_auto_linux_mem_opt+set}" = set; then +- enableval="$enable_auto_linux_mem_opt" +- +-fi; +-if test "x$enable_auto_linux_mem_opt" = xno; then +- : +-else +- +-cat >>confdefs.h <<\_ACEOF +-#define AUTO_LINUX_MEM_OPT 1 +-_ACEOF +- +-fi +- +- +- +- +- +- +-CCASFLAGS='$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)' +- +- +- +- ac_config_files="$ac_config_files Makefile stage1/Makefile stage2/Makefile docs/Makefile lib/Makefile util/Makefile grub/Makefile netboot/Makefile util/grub-image util/grub-install util/grub-md5-crypt util/grub-terminfo util/grub-set-default" +- +-cat >confcache <<\_ACEOF +-# This file is a shell script that caches the results of configure +-# tests run on this system so they can be shared between configure +-# scripts and configure runs, see configure's option --config-cache. +-# It is not useful on other systems. If it contains results you don't +-# want to keep, you may remove or edit it. +-# +-# config.status only pays attention to the cache file if you give it +-# the --recheck option to rerun configure. +-# +-# `ac_cv_env_foo' variables (set or unset) will be overridden when +-# loading this file, other *unset* `ac_cv_foo' will be assigned the +-# following values. +- +-_ACEOF +- +-# The following way of writing the cache mishandles newlines in values, +-# but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. +-# Ultrix sh set writes to stderr and can't be redirected directly, +-# and sets the high bit in the cache file unless we assign to the vars. +-{ +- (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) +- # `set' does not quote correctly, so add quotes (double-quote +- # substitution turns \\\\ into \\, and sed turns \\ into \). +- sed -n \ +- "s/'/'\\\\''/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; +- *) +- # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" +- ;; +- esac; +-} | +- sed ' +- t clear +- : clear +- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ +- t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" +- cat confcache >$cache_file +- else +- echo "not updating unwritable cache $cache_file" +- fi +-fi +-rm -f confcache +- +-test "x$prefix" = xNONE && prefix=$ac_default_prefix +-# Let make expand exec_prefix. +-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' +- +-# VPATH may cause trouble with some makes, so we remove $(srcdir), +-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +-# trailing colons and then remove the whole line if VPATH becomes empty +-# (actually we leave an empty line to preserve line numbers). +-if test "x$srcdir" = x.; then +- ac_vpsub='/^[ ]*VPATH[ ]*=/{ +-s/:*\$(srcdir):*/:/; +-s/:*\${srcdir}:*/:/; +-s/:*@srcdir@:*/:/; +-s/^\([^=]*=[ ]*\):*/\1/; +-s/:*$//; +-s/^[^=]*=[ ]*$//; +-}' +-fi +- +-DEFS=-DHAVE_CONFIG_H +- +-ac_libobjs= +-ac_ltlibobjs= +-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue +- # 1. Remove the extension, and $U if already installed. +- ac_i=`echo "$ac_i" | +- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` +- # 2. Add them. +- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" +- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +-done +-LIBOBJS=$ac_libobjs +- +-LTLIBOBJS=$ac_ltlibobjs +- +- +-if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"AMDEP\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${NETBOOT_SUPPORT_TRUE}" && test -z "${NETBOOT_SUPPORT_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"NETBOOT_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"NETBOOT_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${DISKLESS_SUPPORT_TRUE}" && test -z "${DISKLESS_SUPPORT_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"DISKLESS_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"DISKLESS_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${HERCULES_SUPPORT_TRUE}" && test -z "${HERCULES_SUPPORT_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"HERCULES_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"HERCULES_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${SERIAL_SUPPORT_TRUE}" && test -z "${SERIAL_SUPPORT_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"SERIAL_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"SERIAL_SUPPORT\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${SERIAL_SPEED_SIMULATION_TRUE}" && test -z "${SERIAL_SPEED_SIMULATION_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"SERIAL_SPEED_SIMULATION\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"SERIAL_SPEED_SIMULATION\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +-if test -z "${BUILD_EXAMPLE_KERNEL_TRUE}" && test -z "${BUILD_EXAMPLE_KERNEL_FALSE}"; then +- { { echo "$as_me:$LINENO: error: conditional \"BUILD_EXAMPLE_KERNEL\" was never defined. +-Usually this means the macro was only invoked conditionally." >&5 +-echo "$as_me: error: conditional \"BUILD_EXAMPLE_KERNEL\" was never defined. +-Usually this means the macro was only invoked conditionally." >&2;} +- { (exit 1); exit 1; }; } +-fi +- +-: ${CONFIG_STATUS=./config.status} +-ac_clean_files_save=$ac_clean_files +-ac_clean_files="$ac_clean_files $CONFIG_STATUS" +-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +-echo "$as_me: creating $CONFIG_STATUS" >&6;} +-cat >$CONFIG_STATUS <<_ACEOF +-#! $SHELL +-# Generated by $as_me. +-# Run this file to recreate the current configuration. +-# Compiler output produced by configure, useful for debugging +-# configure, is in config.log if it exists. +- +-debug=false +-ac_cs_recheck=false +-ac_cs_silent=false +-SHELL=\${CONFIG_SHELL-$SHELL} +-_ACEOF +- +-cat >>$CONFIG_STATUS <<\_ACEOF +-## --------------------- ## +-## M4sh Initialization. ## +-## --------------------- ## +- +-# Be Bourne compatible +-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +- emulate sh +- NULLCMD=: +- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which +- # is contrary to our usage. Disable this feature. +- alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix +-fi +-DUALCASE=1; export DUALCASE # for MKS sh +- +-# Support unset when possible. +-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +- as_unset=unset +-else +- as_unset=false +-fi +- +- +-# Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH +-PS1='$ ' +-PS2='> ' +-PS4='+ ' +- +-# NLS nuisances. +-for as_var in \ +- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ +- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ +- LC_TELEPHONE LC_TIME +-do +- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then +- eval $as_var=C; export $as_var +- else +- $as_unset $as_var +- fi +-done +- +-# Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then +- as_expr=expr +-else +- as_expr=false +-fi +- +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +- as_basename=basename +-else +- as_basename=false +-fi +- +- +-# Name of the executable. +-as_me=`$as_basename "$0" || +-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ +- X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- +- +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits +- +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi +- +- +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done +- +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac +- +- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO +- # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. +- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | +- sed ' +- N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, +- t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, +- ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} +- { (exit 1); exit 1; }; } +- +- # Don't try to exec as it changes $[0], causing all sort of problems +- # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno +- # Exit status is that of the last command. +- exit +-} +- +- +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +-esac +- +-if expr a : '\(a\)' >/dev/null 2>&1; then +- as_expr=expr +-else +- as_expr=false +-fi +- +-rm -f conf$$ conf$$.exe conf$$.file +-echo >conf$$.file +-if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links +- as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi +-elif ln conf$$.file conf$$ 2>/dev/null; then +- as_ln_s=ln +-else +- as_ln_s='cp -p' +-fi +-rm -f conf$$ conf$$.exe conf$$.file +- +-if mkdir -p . 2>/dev/null; then +- as_mkdir_p=: +-else +- test -d ./-p && rmdir ./-p +- as_mkdir_p=false +-fi +- +-as_executable_p="test -f" +- +-# Sed expression to map a string onto a valid CPP name. +-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +- +-# Sed expression to map a string onto a valid variable name. +-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +- +- +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- +-exec 6>&1 +- +-# Open the log real soon, to keep \$[0] and so on meaningful, and to +-# report actual input values of CONFIG_FILES etc. instead of their +-# values after options handling. Logging --version etc. is OK. +-exec 5>>config.log +-{ +- echo +- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +-## Running $as_me. ## +-_ASBOX +-} >&5 +-cat >&5 <<_CSEOF +- +-This file was extended by GRUB $as_me 0.97, which was +-generated by GNU Autoconf 2.59. Invocation command line was +- +- CONFIG_FILES = $CONFIG_FILES +- CONFIG_HEADERS = $CONFIG_HEADERS +- CONFIG_LINKS = $CONFIG_LINKS +- CONFIG_COMMANDS = $CONFIG_COMMANDS +- $ $0 $@ +- +-_CSEOF +-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +-echo >&5 +-_ACEOF +- +-# Files that config.status was made for. +-if test -n "$ac_config_files"; then +- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_headers"; then +- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_links"; then +- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_commands"; then +- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +-fi +- +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-ac_cs_usage="\ +-\`$as_me' instantiates files from templates according to the +-current configuration. +- +-Usage: $0 [OPTIONS] [FILE]... +- +- -h, --help print this help, then exit +- -V, --version print version number, then exit +- -q, --quiet do not print progress messages +- -d, --debug don't remove temporary files +- --recheck update $as_me by reconfiguring in the same conditions +- --file=FILE[:TEMPLATE] +- instantiate the configuration file FILE +- --header=FILE[:TEMPLATE] +- instantiate the configuration header FILE +- +-Configuration files: +-$config_files +- +-Configuration headers: +-$config_headers +- +-Configuration commands: +-$config_commands +- +-Report bugs to ." +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +-ac_cs_version="\\ +-GRUB config.status 0.97 +-configured by $0, generated by GNU Autoconf 2.59, +- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +- +-Copyright (C) 2003 Free Software Foundation, Inc. +-This config.status script is free software; the Free Software Foundation +-gives unlimited permission to copy, distribute and modify it." +-srcdir=$srcdir +-INSTALL="$INSTALL" +-_ACEOF +- +-cat >>$CONFIG_STATUS <<\_ACEOF +-# If no file are specified by the user, then we need to provide default +-# value. By we need to know if files were specified by the user. +-ac_need_defaults=: +-while test $# != 0 +-do +- case $1 in +- --*=*) +- ac_option=`expr "x$1" : 'x\([^=]*\)='` +- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` +- ac_shift=: +- ;; +- -*) +- ac_option=$1 +- ac_optarg=$2 +- ac_shift=shift +- ;; +- *) # This is not an option, so the user has probably given explicit +- # arguments. +- ac_option=$1 +- ac_need_defaults=false;; +- esac +- +- case $ac_option in +- # Handling of the options. +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) +- ac_cs_recheck=: ;; +- --version | --vers* | -V ) +- echo "$ac_cs_version"; exit 0 ;; +- --he | --h) +- # Conflict between --help and --header +- { { echo "$as_me:$LINENO: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; };; +- --help | --hel | -h ) +- echo "$ac_cs_usage"; exit 0 ;; +- --debug | --d* | -d ) +- debug=: ;; +- --file | --fil | --fi | --f ) +- $ac_shift +- CONFIG_FILES="$CONFIG_FILES $ac_optarg" +- ac_need_defaults=false;; +- --header | --heade | --head | --hea ) +- $ac_shift +- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" +- ac_need_defaults=false;; +- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ +- | -silent | --silent | --silen | --sile | --sil | --si | --s) +- ac_cs_silent=: ;; +- +- # This is an error. +- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; } ;; +- +- *) ac_config_targets="$ac_config_targets $1" ;; +- +- esac +- shift +-done +- +-ac_configure_extra_args= +- +-if $ac_cs_silent; then +- exec 6>/dev/null +- ac_configure_extra_args="$ac_configure_extra_args --silent" +-fi +- +-_ACEOF +-cat >>$CONFIG_STATUS <<_ACEOF +-if \$ac_cs_recheck; then +- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 +- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +-fi +- +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +-# +-# INIT-COMMANDS section. +-# +- +-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +- +-_ACEOF +- +- +- +-cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_config_target in $ac_config_targets +-do +- case "$ac_config_target" in +- # Handling of arguments. +- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; +- "stage1/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage1/Makefile" ;; +- "stage2/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage2/Makefile" ;; +- "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; +- "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; +- "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; +- "grub/Makefile" ) CONFIG_FILES="$CONFIG_FILES grub/Makefile" ;; +- "netboot/Makefile" ) CONFIG_FILES="$CONFIG_FILES netboot/Makefile" ;; +- "util/grub-image" ) CONFIG_FILES="$CONFIG_FILES util/grub-image" ;; +- "util/grub-install" ) CONFIG_FILES="$CONFIG_FILES util/grub-install" ;; +- "util/grub-md5-crypt" ) CONFIG_FILES="$CONFIG_FILES util/grub-md5-crypt" ;; +- "util/grub-terminfo" ) CONFIG_FILES="$CONFIG_FILES util/grub-terminfo" ;; +- "util/grub-set-default" ) CONFIG_FILES="$CONFIG_FILES util/grub-set-default" ;; +- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; +- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; +- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +-echo "$as_me: error: invalid argument: $ac_config_target" >&2;} +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# If the user did not use the arguments to specify the items to instantiate, +-# then the envvar interface is used. Set only those that are not. +-# We use the long form for the default assignment because of an extremely +-# bizarre bug on SunOS 4.1.3. +-if $ac_need_defaults; then +- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +-fi +- +-# Have a temporary directory for convenience. Make it in the build tree +-# simply because there is no reason to put it here, and in addition, +-# creating and moving files from /tmp can sometimes cause problems. +-# Create a temporary directory, and hook for its removal unless debugging. +-$debug || +-{ +- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 +- trap '{ (exit 1); exit 1; }' 1 2 13 15 +-} +- +-# Create a (secure) tmp directory for tmp files. +- +-{ +- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && +- test -n "$tmp" && test -d "$tmp" +-} || +-{ +- tmp=./confstat$$-$RANDOM +- (umask 077 && mkdir $tmp) +-} || +-{ +- echo "$me: cannot create a temporary directory in ." >&2 +- { (exit 1); exit 1; } +-} +- +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +- +-# +-# CONFIG_FILES section. +-# +- +-# No need to generate the scripts if there are no CONFIG_FILES. +-# This happens for instance when ./config.status config.h +-if test -n "\$CONFIG_FILES"; then +- # Protect against being on the right side of a sed subst in config.status. +- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; +- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +-s,@SHELL@,$SHELL,;t t +-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +-s,@exec_prefix@,$exec_prefix,;t t +-s,@prefix@,$prefix,;t t +-s,@program_transform_name@,$program_transform_name,;t t +-s,@bindir@,$bindir,;t t +-s,@sbindir@,$sbindir,;t t +-s,@libexecdir@,$libexecdir,;t t +-s,@datadir@,$datadir,;t t +-s,@sysconfdir@,$sysconfdir,;t t +-s,@sharedstatedir@,$sharedstatedir,;t t +-s,@localstatedir@,$localstatedir,;t t +-s,@libdir@,$libdir,;t t +-s,@includedir@,$includedir,;t t +-s,@oldincludedir@,$oldincludedir,;t t +-s,@infodir@,$infodir,;t t +-s,@mandir@,$mandir,;t t +-s,@build_alias@,$build_alias,;t t +-s,@host_alias@,$host_alias,;t t +-s,@target_alias@,$target_alias,;t t +-s,@DEFS@,$DEFS,;t t +-s,@ECHO_C@,$ECHO_C,;t t +-s,@ECHO_N@,$ECHO_N,;t t +-s,@ECHO_T@,$ECHO_T,;t t +-s,@LIBS@,$LIBS,;t t +-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +-s,@INSTALL_DATA@,$INSTALL_DATA,;t t +-s,@CYGPATH_W@,$CYGPATH_W,;t t +-s,@PACKAGE@,$PACKAGE,;t t +-s,@VERSION@,$VERSION,;t t +-s,@ACLOCAL@,$ACLOCAL,;t t +-s,@AUTOCONF@,$AUTOCONF,;t t +-s,@AUTOMAKE@,$AUTOMAKE,;t t +-s,@AUTOHEADER@,$AUTOHEADER,;t t +-s,@MAKEINFO@,$MAKEINFO,;t t +-s,@install_sh@,$install_sh,;t t +-s,@STRIP@,$STRIP,;t t +-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +-s,@mkdir_p@,$mkdir_p,;t t +-s,@AWK@,$AWK,;t t +-s,@SET_MAKE@,$SET_MAKE,;t t +-s,@am__leading_dot@,$am__leading_dot,;t t +-s,@AMTAR@,$AMTAR,;t t +-s,@am__tar@,$am__tar,;t t +-s,@am__untar@,$am__untar,;t t +-s,@build@,$build,;t t +-s,@build_cpu@,$build_cpu,;t t +-s,@build_vendor@,$build_vendor,;t t +-s,@build_os@,$build_os,;t t +-s,@host@,$host,;t t +-s,@host_cpu@,$host_cpu,;t t +-s,@host_vendor@,$host_vendor,;t t +-s,@host_os@,$host_os,;t t +-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +-s,@MAINT@,$MAINT,;t t +-s,@PERL@,$PERL,;t t +-s,@CC@,$CC,;t t +-s,@ac_ct_CC@,$ac_ct_CC,;t t +-s,@CFLAGS@,$CFLAGS,;t t +-s,@LDFLAGS@,$LDFLAGS,;t t +-s,@CPPFLAGS@,$CPPFLAGS,;t t +-s,@EXEEXT@,$EXEEXT,;t t +-s,@OBJEXT@,$OBJEXT,;t t +-s,@DEPDIR@,$DEPDIR,;t t +-s,@am__include@,$am__include,;t t +-s,@am__quote@,$am__quote,;t t +-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +-s,@CCDEPMODE@,$CCDEPMODE,;t t +-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +-s,@CCAS@,$CCAS,;t t +-s,@RANLIB@,$RANLIB,;t t +-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +-s,@STAGE1_CFLAGS@,$STAGE1_CFLAGS,;t t +-s,@STAGE2_CFLAGS@,$STAGE2_CFLAGS,;t t +-s,@GRUB_CFLAGS@,$GRUB_CFLAGS,;t t +-s,@OBJCOPY@,$OBJCOPY,;t t +-s,@ac_ct_OBJCOPY@,$ac_ct_OBJCOPY,;t t +-s,@GRUB_LIBS@,$GRUB_LIBS,;t t +-s,@CPP@,$CPP,;t t +-s,@EGREP@,$EGREP,;t t +-s,@NETBOOT_SUPPORT_TRUE@,$NETBOOT_SUPPORT_TRUE,;t t +-s,@NETBOOT_SUPPORT_FALSE@,$NETBOOT_SUPPORT_FALSE,;t t +-s,@DISKLESS_SUPPORT_TRUE@,$DISKLESS_SUPPORT_TRUE,;t t +-s,@DISKLESS_SUPPORT_FALSE@,$DISKLESS_SUPPORT_FALSE,;t t +-s,@HERCULES_SUPPORT_TRUE@,$HERCULES_SUPPORT_TRUE,;t t +-s,@HERCULES_SUPPORT_FALSE@,$HERCULES_SUPPORT_FALSE,;t t +-s,@SERIAL_SUPPORT_TRUE@,$SERIAL_SUPPORT_TRUE,;t t +-s,@SERIAL_SUPPORT_FALSE@,$SERIAL_SUPPORT_FALSE,;t t +-s,@SERIAL_SPEED_SIMULATION_TRUE@,$SERIAL_SPEED_SIMULATION_TRUE,;t t +-s,@SERIAL_SPEED_SIMULATION_FALSE@,$SERIAL_SPEED_SIMULATION_FALSE,;t t +-s,@BUILD_EXAMPLE_KERNEL_TRUE@,$BUILD_EXAMPLE_KERNEL_TRUE,;t t +-s,@BUILD_EXAMPLE_KERNEL_FALSE@,$BUILD_EXAMPLE_KERNEL_FALSE,;t t +-s,@FSYS_CFLAGS@,$FSYS_CFLAGS,;t t +-s,@NET_CFLAGS@,$NET_CFLAGS,;t t +-s,@NET_EXTRAFLAGS@,$NET_EXTRAFLAGS,;t t +-s,@NETBOOT_DRIVERS@,$NETBOOT_DRIVERS,;t t +-s,@CCASFLAGS@,$CCASFLAGS,;t t +-s,@LIBOBJS@,$LIBOBJS,;t t +-s,@LTLIBOBJS@,$LTLIBOBJS,;t t +-CEOF +- +-_ACEOF +- +- cat >>$CONFIG_STATUS <<\_ACEOF +- # Split the substitutions into bite-sized pieces for seds with +- # small command number limits, like on Digital OSF/1 and HP-UX. +- ac_max_sed_lines=48 +- ac_sed_frag=1 # Number of current file. +- ac_beg=1 # First line for current file. +- ac_end=$ac_max_sed_lines # Line after last line for current file. +- ac_more_lines=: +- ac_sed_cmds= +- while $ac_more_lines; do +- if test $ac_beg -gt 1; then +- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- else +- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- fi +- if test ! -s $tmp/subs.frag; then +- ac_more_lines=false +- else +- # The purpose of the label and of the branching condition is to +- # speed up the sed processing (if there are no `@' at all, there +- # is no need to browse any of the substitutions). +- # These are the two extra sed commands mentioned above. +- (echo ':t +- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" +- else +- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" +- fi +- ac_sed_frag=`expr $ac_sed_frag + 1` +- ac_beg=$ac_end +- ac_end=`expr $ac_end + $ac_max_sed_lines` +- fi +- done +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds=cat +- fi +-fi # test -n "$CONFIG_FILES" +- +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; +- esac +- +- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- +- case $INSTALL in +- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; +- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; +- esac +- +- if test x"$ac_file" != x-; then +- { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- rm -f "$ac_file" +- fi +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- configure_input= +- else +- configure_input="$ac_file. " +- fi +- configure_input=$configure_input"Generated from `echo $ac_file_in | +- sed 's,.*/,,'` by configure." +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +-_ACEOF +-cat >>$CONFIG_STATUS <<_ACEOF +- sed "$ac_vpsub +-$extrasub +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +-:t +-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +-s,@configure_input@,$configure_input,;t t +-s,@srcdir@,$ac_srcdir,;t t +-s,@abs_srcdir@,$ac_abs_srcdir,;t t +-s,@top_srcdir@,$ac_top_srcdir,;t t +-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +-s,@builddir@,$ac_builddir,;t t +-s,@abs_builddir@,$ac_abs_builddir,;t t +-s,@top_builddir@,$ac_top_builddir,;t t +-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +-s,@INSTALL@,$ac_INSTALL,;t t +-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out +- rm -f $tmp/stdin +- if test x"$ac_file" != x-; then +- mv $tmp/out $ac_file +- else +- cat $tmp/out +- rm -f $tmp/out +- fi +- +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_HEADER section. +-# +- +-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +-# NAME is the cpp macro being defined and VALUE is the value it is being given. +-# +-# ac_d sets the value in "#define NAME VALUE" lines. +-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +-ac_dB='[ ].*$,\1#\2' +-ac_dC=' ' +-ac_dD=',;t' +-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +-ac_uB='$,\1#\2define\3' +-ac_uC=' ' +-ac_uD=',;t' +- +-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; +- esac +- +- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- # Do quote $f, to prevent DOS paths from being IFS'd. +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +- # Remove the trailing spaces. +- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in +- +-_ACEOF +- +-# Transform confdefs.h into two sed scripts, `conftest.defines' and +-# `conftest.undefs', that substitutes the proper values into +-# config.h.in to produce config.h. The first handles `#define' +-# templates, and the second `#undef' templates. +-# And first: Protect against being on the right side of a sed subst in +-# config.status. Protect against being in an unquoted here document +-# in config.status. +-rm -f conftest.defines conftest.undefs +-# Using a here document instead of a string reduces the quoting nightmare. +-# Putting comments in sed scripts is not portable. +-# +-# `end' is used to avoid that the second main sed command (meant for +-# 0-ary CPP macros) applies to n-ary macro definitions. +-# See the Autoconf documentation for `clear'. +-cat >confdef2sed.sed <<\_ACEOF +-s/[\\&,]/\\&/g +-s,[\\$`],\\&,g +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +-t end +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +-: end +-_ACEOF +-# If some macros were called several times there might be several times +-# the same #defines, which is useless. Nevertheless, we may not want to +-# sort them, since we want the *last* AC-DEFINE to be honored. +-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +-rm -f confdef2sed.sed +- +-# This sed command replaces #undef with comments. This is necessary, for +-# example, in the case of _POSIX_SOURCE, which is predefined and required +-# on some systems where configure will not decide to define it. +-cat >>conftest.undefs <<\_ACEOF +-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +-_ACEOF +- +-# Break up conftest.defines because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +-echo ' :' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.defines >/dev/null +-do +- # Write a limited-size here document to $tmp/defines.sed. +- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#define' lines. +- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/defines.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail +- rm -f conftest.defines +- mv conftest.tail conftest.defines +-done +-rm -f conftest.defines +-echo ' fi # grep' >>$CONFIG_STATUS +-echo >>$CONFIG_STATUS +- +-# Break up conftest.undefs because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.undefs >/dev/null +-do +- # Write a limited-size here document to $tmp/undefs.sed. +- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#undef' +- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/undefs.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail +- rm -f conftest.undefs +- mv conftest.tail conftest.undefs +-done +-rm -f conftest.undefs +- +-cat >>$CONFIG_STATUS <<\_ACEOF +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- echo "/* Generated by configure. */" >$tmp/config.h +- else +- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h +- fi +- cat $tmp/in >>$tmp/config.h +- rm -f $tmp/in +- if test x"$ac_file" != x-; then +- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then +- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +-echo "$as_me: $ac_file is unchanged" >&6;} +- else +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- rm -f $ac_file +- mv $tmp/config.h $ac_file +- fi +- else +- cat $tmp/config.h +- rm -f $tmp/config.h +- fi +-# Compute $ac_file's index in $config_headers. +-_am_stamp_count=1 +-for _am_header in $config_headers :; do +- case $_am_header in +- $ac_file | $ac_file:* ) +- break ;; +- * ) +- _am_stamp_count=`expr $_am_stamp_count + 1` ;; +- esac +-done +-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X$ac_file : 'X\(//\)[^/]' \| \ +- X$ac_file : 'X\(//\)$' \| \ +- X$ac_file : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X$ac_file | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'`/stamp-h$_am_stamp_count +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_COMMANDS section. +-# +-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue +- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` +- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_dir=`(dirname "$ac_dest") 2>/dev/null || +-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_dest" : 'X\(//\)[^/]' \| \ +- X"$ac_dest" : 'X\(//\)$' \| \ +- X"$ac_dest" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_dest" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- +- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +-echo "$as_me: executing $ac_dest commands" >&6;} +- case $ac_dest in +- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do +- # Strip MF so we end up with the name of the file. +- mf=`echo "$mf" | sed -e 's/:.*$//'` +- # Check whether this is an Automake generated Makefile or not. +- # We used to match only the files named `Makefile.in', but +- # some people rename them; so instead we look at the file content. +- # Grep'ing the first line is not enough: some people post-process +- # each Makefile.in and add a new line on top of each file to say so. +- # So let's grep whole file. +- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`(dirname "$mf") 2>/dev/null || +-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$mf" : 'X\(//\)[^/]' \| \ +- X"$mf" : 'X\(//\)$' \| \ +- X"$mf" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$mf" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- else +- continue +- fi +- # Extract the definition of DEPDIR, am__include, and am__quote +- # from the Makefile without running `make'. +- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` +- test -z "$DEPDIR" && continue +- am__include=`sed -n 's/^am__include = //p' < "$mf"` +- test -z "am__include" && continue +- am__quote=`sed -n 's/^am__quote = //p' < "$mf"` +- # When using ansi2knr, U may be empty or an underscore; expand it +- U=`sed -n 's/^U = //p' < "$mf"` +- # Find all dependency output files, they are included files with +- # $(DEPDIR) in their names. We invoke sed twice because it is the +- # simplest approach to changing $(DEPDIR) to its actual value in the +- # expansion. +- for file in `sed -n " +- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ +- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do +- # Make sure the directory exists. +- test -f "$dirpart/$file" && continue +- fdir=`(dirname "$file") 2>/dev/null || +-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$file" : 'X\(//\)[^/]' \| \ +- X"$file" : 'X\(//\)$' \| \ +- X"$file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p $dirpart/$fdir +- else +- as_dir=$dirpart/$fdir +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} +- { (exit 1); exit 1; }; }; } +- +- # echo "creating $dirpart/$file" +- echo '# dummy' > "$dirpart/$file" +- done +-done +- ;; +- esac +-done +-_ACEOF +- +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-{ (exit 0); exit 0; } +-_ACEOF +-chmod +x $CONFIG_STATUS +-ac_clean_files=$ac_clean_files_save +- +- +-# configure is writing to config.log, and then calls config.status. +-# config.status does its own redirection, appending to config.log. +-# Unfortunately, on DOS this fails, as config.log is still kept open +-# by configure, so config.status won't be able to write to it; its +-# output is simply discarded. So we exec the FD to /dev/null, +-# effectively closing config.log, so it can be properly (re)opened and +-# appended to by config.status. When coming back to configure, we +-# need to make the FD available again. +-if test "$no_create" != yes; then +- ac_cs_success=: +- ac_config_status_args= +- test "$silent" = yes && +- ac_config_status_args="$ac_config_status_args --quiet" +- exec 5>/dev/null +- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false +- exec 5>>config.log +- # Use ||, not &&, to avoid exiting from the if with $? = 1, which +- # would make configure fail if this is the last instruction. +- $ac_cs_success || { (exit 1); exit 1; } +-fi +- +diff --git a/configure.ac b/configure.in +similarity index 86% +rename from configure.ac +rename to configure.in +index bb9e1d9..e5970af 100644 +--- a/configure.ac ++++ b/configure.in +@@ -29,6 +29,65 @@ esac + AC_SUBST(host_cpu) + AC_SUBST(host_vendor) + ++# Specify the platform (such as firmware). ++AC_ARG_WITH([platform], ++ AS_HELP_STRING([--with-platform=PLATFORM], ++ [select the host platform [[guessed]]])) ++ ++# Guess the platform if not specified. ++if test "x$with_platform" = x; then ++ case "$host_cpu"-"$host_vendor" in ++ i386-*) platform=pc ;; ++ x86_64-*) platform=pc ;; ++ *) AC_MSG_ERROR([unsupported machine type $host_cpu-$host_vendor]) ;; ++ esac ++else ++ platform="$with_platform" ++fi ++ ++# Sanity check. ++case "$host_cpu"-"$platform" in ++ i386-pc) ;; ++ i386-efi) ;; ++ x86_64-pc) ;; ++ x86_64-efi) ;; ++ *) AC_MSG_ERROR([unsupported machine type "$host_cpu"-"$platform"]) ;; ++esac ++ ++if test "x$platform" = xefi; then ++ case "$host_cpu" in ++ i386) EFI_ARCH=ia32 ;; ++ x86_64) EFI_ARCH=x86_64 ;; ++ *) AC_MSG_ERROR([unsupported machine type "$host_cpu"]) ;; ++ esac ++ AC_SUBST(EFI_ARCH) ++fi ++ ++gnuefi_path=${libdir}/gnuefi ++gnuefi_crt0=${gnuefi_path}/crt0-efi-${EFI_ARCH}.o ++if ! test -f $gnuefi_crt0 ; then ++ gnuefi_crt0=crt0-efi.o ++fi ++GNUEFI_CRT0=${gnuefi_crt0} ++AC_SUBST(GNUEFI_CRT0) ++gnuefi_lds=${gnuefi_path}/elf_${EFI_ARCH}_efi.lds ++if ! test -f $gnuefi_lds ; then ++ gnuefi_lds=${EFI_ARCH}/elf_efi.lds ++fi ++GNUEFI_LDS=${gnuefi_lds} ++AC_SUBST(GNUEFI_LDS) ++LIBGNUEFI=${libdir}/libgnuefi.a ++AC_SUBST(LIBGNUEFI) ++LIBEFI=${libdir}/libefi.a ++AC_SUBST(LIBEFI) ++ ++AC_SUBST(platform) ++AM_CONDITIONAL(PLATFORM_EFI, test "x$platform" = xefi) ++ ++if test "x$platform" = xefi; then ++ AC_DEFINE(PLATFORM_EFI, 1, [Define if you run on EFI platform.]) ++fi ++ + # + # Options + # +@@ -46,7 +105,7 @@ if test "x$CFLAGS" = x; then + default_CFLAGS=yes + fi + +-if test "x$host_cpu" = xx86_64; then ++if test "x$platform" = xpc -a "x$host_cpu" = xx86_64; then + CFLAGS="-m32 $CFLAGS" + fi + +@@ -63,6 +122,8 @@ dnl Because recent automake complains about AS, set it here. + CCAS="$CC" + AC_SUBST(CCAS) + ++_AM_DEPENDENCIES(CCAS) ++ + AC_ARG_WITH(binutils, + [ --with-binutils=DIR search the directory DIR to find binutils]) + +@@ -114,6 +175,20 @@ if test "x$ac_cv_prog_gcc" = xyes; then + fi + fi + fi ++STAGE2_CFLAGS="$STAGE2_CFLAGS -isystem `$CC -print-file-name=include`" ++ ++LIBGCC=$(gcc $CFLAGS -static-libgcc -print-libgcc-file-name) ++AC_SUBST(LIBGCC) ++ ++LOADER_LDFLAGS="-Wl,--build-id=none ${LIBGCC}" ++AC_SUBST(LOADER_LDFLAGS) ++ ++if test "x$platform" = xefi; then ++ STAGE2_CFLAGS="$STAGE2_CFLAGS -fpic -fshort-wchar -fno-strict-aliasing -fno-merge-constants -fno-reorder-functions" ++ if test "x$EFI_ARCH" = xx86_64; then ++ STAGE2_CFLAGS="$STAGE2_CFLAGS -DEFI_FUNCTION_WRAPPER" ++ fi ++fi + + AC_SUBST(STAGE1_CFLAGS) + AC_SUBST(STAGE2_CFLAGS) +@@ -159,9 +234,12 @@ fi + + # Defined in acinclude.m4. + grub_ASM_USCORE +-grub_PROG_OBJCOPY_ABSOLUTE +-if test "x$grub_cv_prog_objcopy_absolute" != xyes; then +- AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils]) ++ ++if test "x$platform" != xefi; then ++ grub_PROG_OBJCOPY_ABSOLUTE ++ if test "x$grub_cv_prog_objcopy_absolute" != xyes; then ++ AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils]) ++ fi + fi + + grub_ASM_PREFIX_REQUIREMENT +@@ -207,9 +285,9 @@ AC_CHECK_LIB(util, opendisk, [GRUB_LIBS="$GRUB_LIBS -lutil" + + # Unless the user specify --without-curses, check for curses. + if test "x$with_curses" != "xno"; then +- AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lncurses" ++ AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lncurses -ltinfo -Wl,-Bdynamic" + AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])], +- [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lcurses" ++ [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lcurses -Wl,-Bdynamic" + AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])])]) + fi + +@@ -595,9 +673,18 @@ AC_ARG_ENABLE(diskless, + [ --enable-diskless enable diskless support]) + AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes) + ++dnl Graphical splashscreen support ++AC_ARG_ENABLE(graphics, ++ [ --disable-graphics disable graphics terminal support]) ++AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno) ++ + dnl Hercules terminal +-AC_ARG_ENABLE(hercules, +- [ --disable-hercules disable hercules terminal support]) ++if test "x$platform" = xefi; then ++ enable_hercules=no ++else ++ AC_ARG_ENABLE(hercules, ++ [ --disable-hercules disable hercules terminal support]) ++fi + AM_CONDITIONAL(HERCULES_SUPPORT, test "x$enable_hercules" != xno) + + dnl Serial terminal +@@ -662,9 +749,13 @@ AC_SUBST(CCASFLAGS) + + + dnl Output. ++if test "x$platform" = xefi; then ++ AC_CONFIG_FILES([efi/Makefile]) ++ AC_CONFIG_LINKS([efi/grub/cpu:efi/grub/$host_cpu]) ++fi + AC_CONFIG_FILES([Makefile stage1/Makefile stage2/Makefile \ + docs/Makefile lib/Makefile util/Makefile \ +- grub/Makefile netboot/Makefile util/grub-image \ +- util/grub-install util/grub-md5-crypt \ +- util/grub-terminfo util/grub-set-default]) ++ grub/Makefile netboot/Makefile util/grub-crypt \ ++ util/grub-image util/grub-install util/grub-md5-crypt \ ++ util/grub-terminfo]) + AC_OUTPUT +diff --git a/docs/.gitignore b/docs/.gitignore +new file mode 100644 +index 0000000..e440faf +--- /dev/null ++++ b/docs/.gitignore +@@ -0,0 +1,3 @@ ++Makefile.in ++Makefile ++.deps +diff --git a/docs/Makefile.am b/docs/Makefile.am +index db99e2d..fe6b22b 100644 +--- a/docs/Makefile.am ++++ b/docs/Makefile.am +@@ -2,7 +2,8 @@ info_TEXINFOS = grub.texi multiboot.texi + grub_TEXINFOS = internals.texi + EXAMPLES = boot.S kernel.c multiboot.h + multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi +-man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8 ++man_MANS = grub.8 mbchk.1 grub-crypt.8 grub-install.8 grub-md5-crypt.8 \ ++ grub-terminfo.8 + HELP2MAN = help2man + SRC2TEXI = src2texi + noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI) +@@ -51,6 +52,12 @@ $(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN) + --name="check the format of a Multiboot kernel" \ + --section=1 --output=$@ $< + ++$(srcdir)/grub-crypt.8: ../util/grub-crypt $(srcdir)/$(HELP2MAN) ++ chmod 755 $< ++ $(PERL) $(srcdir)/$(HELP2MAN) \ ++ --name="Encrypt a password" \ ++ --section=8 --output=$@ $< ++ + $(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN) + chmod 755 $< + $(PERL) $(srcdir)/$(HELP2MAN) \ +diff --git a/docs/Makefile.in b/docs/Makefile.in +deleted file mode 100644 +index 3e2de4b..0000000 +--- a/docs/Makefile.in ++++ /dev/null +@@ -1,770 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +- +-SOURCES = $(kernel_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-EXTRA_PROGRAMS = kernel$(EXEEXT) +-@BUILD_EXAMPLE_KERNEL_TRUE@noinst_PROGRAMS = kernel$(EXEEXT) +-subdir = docs +-DIST_COMMON = $(grub_TEXINFOS) $(multiboot_TEXINFOS) \ +- $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ +- $(srcdir)/stamp-vti $(srcdir)/version.texi mdate-sh \ +- texinfo.tex +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-PROGRAMS = $(noinst_PROGRAMS) +-am__kernel_SOURCES_DIST = boot.S kernel.c multiboot.h +-am__objects_1 = boot.$(OBJEXT) kernel-kernel.$(OBJEXT) +-@BUILD_EXAMPLE_KERNEL_TRUE@am_kernel_OBJECTS = $(am__objects_1) +-kernel_OBJECTS = $(am_kernel_OBJECTS) +-kernel_LDADD = $(LDADD) +-SCRIPTS = $(noinst_SCRIPTS) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(kernel_SOURCES) +-DIST_SOURCES = $(am__kernel_SOURCES_DIST) +-INFO_DEPS = $(srcdir)/grub.info $(srcdir)/multiboot.info +-am__TEXINFO_TEX_DIR = $(srcdir) +-DVIS = grub.dvi multiboot.dvi +-PDFS = grub.pdf multiboot.pdf +-PSS = grub.ps multiboot.ps +-HTMLS = grub.html multiboot.html +-TEXINFOS = grub.texi multiboot.texi +-TEXI2DVI = texi2dvi +-TEXI2PDF = $(TEXI2DVI) --pdf --batch +-MAKEINFOHTML = $(MAKEINFO) --html +-AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +-DVIPS = dvips +-am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ +- "$(DESTDIR)$(man8dir)" +-man1dir = $(mandir)/man1 +-man8dir = $(mandir)/man8 +-NROFF = nroff +-MANS = $(man_MANS) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-info_TEXINFOS = grub.texi multiboot.texi +-grub_TEXINFOS = internals.texi +-EXAMPLES = boot.S kernel.c multiboot.h +-multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi +-man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8 +-HELP2MAN = help2man +-SRC2TEXI = src2texi +-noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI) +-@BUILD_EXAMPLE_KERNEL_TRUE@kernel_SOURCES = $(EXAMPLES) +-@BUILD_EXAMPLE_KERNEL_TRUE@kernel_CFLAGS = -fno-builtin -nostdinc -O -g -Wall \ +-@BUILD_EXAMPLE_KERNEL_TRUE@ -imacros $(top_builddir)/config.h +- +-@BUILD_EXAMPLE_KERNEL_TRUE@kernel_LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000 +-EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS) \ +- $(EXAMPLES) $(multiboot_TEXINFOS) +- +-CLEANFILES = $(noinst_PROGRAMS) +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .S .c .dvi .html .info .o .obj .pdf .ps .texi +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu docs/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-clean-noinstPROGRAMS: +- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +-kernel$(EXEEXT): $(kernel_OBJECTS) $(kernel_DEPENDENCIES) +- @rm -f kernel$(EXEEXT) +- $(LINK) $(kernel_LDFLAGS) $(kernel_OBJECTS) $(kernel_LDADD) $(LIBS) +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel-kernel.Po@am__quote@ +- +-.S.o: +- $(CCASCOMPILE) -c $< +- +-.S.obj: +- $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` +- +-.c.o: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< +- +-.c.obj: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +- +-kernel-kernel.o: kernel.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.o -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kernel.c' object='kernel-kernel.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c +- +-kernel-kernel.obj: kernel.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.obj -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kernel.c' object='kernel-kernel.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi` +- +-.texi.info: +- restore=: && backupdir="$(am__leading_dot)am$$$$" && \ +- am__cwd=`pwd` && cd $(srcdir) && \ +- rm -rf $$backupdir && mkdir $$backupdir && \ +- for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ +- if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ +- done; \ +- cd "$$am__cwd"; \ +- if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ +- -o $@ $<; \ +- then \ +- rc=0; \ +- cd $(srcdir); \ +- else \ +- rc=$$?; \ +- cd $(srcdir) && \ +- $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ +- fi; \ +- rm -rf $$backupdir; exit $$rc +- +-.texi.dvi: +- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ +- MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ +- $(TEXI2DVI) $< +- +-.texi.pdf: +- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ +- MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ +- $(TEXI2PDF) $< +- +-.texi.html: +- rm -rf $(@:.html=.htp) +- if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ +- -o $(@:.html=.htp) $<; \ +- then \ +- rm -rf $@; \ +- if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ +- mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ +- else \ +- if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ +- rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ +- exit 1; \ +- fi +-$(srcdir)/grub.info: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +-grub.dvi: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +-grub.pdf: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +-grub.html: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +-$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti +-$(srcdir)/stamp-vti: grub.texi $(top_srcdir)/configure +- @(dir=.; test -f ./grub.texi || dir=$(srcdir); \ +- set `$(SHELL) $(srcdir)/mdate-sh $$dir/grub.texi`; \ +- echo "@set UPDATED $$1 $$2 $$3"; \ +- echo "@set UPDATED-MONTH $$2 $$3"; \ +- echo "@set EDITION $(VERSION)"; \ +- echo "@set VERSION $(VERSION)") > vti.tmp +- @cmp -s vti.tmp $(srcdir)/version.texi \ +- || (echo "Updating $(srcdir)/version.texi"; \ +- cp vti.tmp $(srcdir)/version.texi) +- -@rm -f vti.tmp +- @cp $(srcdir)/version.texi $@ +- +-mostlyclean-vti: +- -rm -f vti.tmp +- +-maintainer-clean-vti: +-@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +-$(srcdir)/multiboot.info: multiboot.texi $(multiboot_TEXINFOS) +-multiboot.dvi: multiboot.texi $(multiboot_TEXINFOS) +-multiboot.pdf: multiboot.texi $(multiboot_TEXINFOS) +-multiboot.html: multiboot.texi $(multiboot_TEXINFOS) +-.dvi.ps: +- $(DVIPS) -o $@ $< +- +-uninstall-info-am: +- $(PRE_UNINSTALL) +- @if (install-info --version && \ +- install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ +- list='$(INFO_DEPS)'; \ +- for file in $$list; do \ +- relfile=`echo "$$file" | sed 's|^.*/||'`; \ +- echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ +- install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ +- done; \ +- else :; fi +- @$(NORMAL_UNINSTALL) +- @list='$(INFO_DEPS)'; \ +- for file in $$list; do \ +- relfile=`echo "$$file" | sed 's|^.*/||'`; \ +- relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ +- (if cd "$(DESTDIR)$(infodir)"; then \ +- echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \ +- rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ +- else :; fi); \ +- done +- +-dist-info: $(INFO_DEPS) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- list='$(INFO_DEPS)'; \ +- for base in $$list; do \ +- case $$base in \ +- $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ +- esac; \ +- if test -f $$base; then d=.; else d=$(srcdir); fi; \ +- for file in $$d/$$base*; do \ +- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ +- test -f $(distdir)/$$relfile || \ +- cp -p $$file $(distdir)/$$relfile; \ +- done; \ +- done +- +-mostlyclean-aminfo: +- -rm -rf grub.aux grub.cp grub.cps grub.fn grub.ky grub.log grub.pg grub.tmp \ +- grub.toc grub.tp grub.vr grub.dvi grub.pdf grub.ps grub.html \ +- multiboot.aux multiboot.cp multiboot.cps multiboot.fn \ +- multiboot.ky multiboot.log multiboot.pg multiboot.tmp \ +- multiboot.toc multiboot.tp multiboot.vr multiboot.dvi \ +- multiboot.pdf multiboot.ps multiboot.html +- +-maintainer-clean-aminfo: +- @list='$(INFO_DEPS)'; for i in $$list; do \ +- i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ +- echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ +- rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ +- done +-install-man1: $(man1_MANS) $(man_MANS) +- @$(NORMAL_INSTALL) +- test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" +- @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ +- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ +- for i in $$l2; do \ +- case "$$i" in \ +- *.1*) list="$$list $$i" ;; \ +- esac; \ +- done; \ +- for i in $$list; do \ +- if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ +- else file=$$i; fi; \ +- ext=`echo $$i | sed -e 's/^.*\\.//'`; \ +- case "$$ext" in \ +- 1*) ;; \ +- *) ext='1' ;; \ +- esac; \ +- inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ +- inst=`echo $$inst | sed -e 's/^.*\///'`; \ +- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ +- echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ +- $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ +- done +-uninstall-man1: +- @$(NORMAL_UNINSTALL) +- @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ +- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ +- for i in $$l2; do \ +- case "$$i" in \ +- *.1*) list="$$list $$i" ;; \ +- esac; \ +- done; \ +- for i in $$list; do \ +- ext=`echo $$i | sed -e 's/^.*\\.//'`; \ +- case "$$ext" in \ +- 1*) ;; \ +- *) ext='1' ;; \ +- esac; \ +- inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ +- inst=`echo $$inst | sed -e 's/^.*\///'`; \ +- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ +- echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ +- rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ +- done +-install-man8: $(man8_MANS) $(man_MANS) +- @$(NORMAL_INSTALL) +- test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)" +- @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ +- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ +- for i in $$l2; do \ +- case "$$i" in \ +- *.8*) list="$$list $$i" ;; \ +- esac; \ +- done; \ +- for i in $$list; do \ +- if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ +- else file=$$i; fi; \ +- ext=`echo $$i | sed -e 's/^.*\\.//'`; \ +- case "$$ext" in \ +- 8*) ;; \ +- *) ext='8' ;; \ +- esac; \ +- inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ +- inst=`echo $$inst | sed -e 's/^.*\///'`; \ +- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ +- echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ +- $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ +- done +-uninstall-man8: +- @$(NORMAL_UNINSTALL) +- @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ +- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ +- for i in $$l2; do \ +- case "$$i" in \ +- *.8*) list="$$list $$i" ;; \ +- esac; \ +- done; \ +- for i in $$list; do \ +- ext=`echo $$i | sed -e 's/^.*\\.//'`; \ +- case "$$ext" in \ +- 8*) ;; \ +- *) ext='8' ;; \ +- esac; \ +- inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ +- inst=`echo $$inst | sed -e 's/^.*\///'`; \ +- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ +- echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ +- rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ +- done +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +- $(MAKE) $(AM_MAKEFLAGS) \ +- top_distdir="$(top_distdir)" distdir="$(distdir)" \ +- dist-info +-check-am: all-am +-check: check-am +-all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(SCRIPTS) $(MANS) +-installdirs: +- for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; do \ +- test -z "$$dir" || $(mkdir_p) "$$dir"; \ +- done +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: $(DVIS) +- +-html: html-am +- +-html-am: $(HTMLS) +- +-info: info-am +- +-info-am: $(INFO_DEPS) +- +-install-data-am: install-info-am install-man +- +-install-exec-am: +- +-install-info: install-info-am +- +-install-info-am: $(INFO_DEPS) +- @$(NORMAL_INSTALL) +- test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- list='$(INFO_DEPS)'; \ +- for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- esac; \ +- if test -f $$file; then d=.; else d=$(srcdir); fi; \ +- file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ +- for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ +- $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ +- if test -f $$ifile; then \ +- relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ +- echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ +- $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ +- else : ; fi; \ +- done; \ +- done +- @$(POST_INSTALL) +- @if (install-info --version && \ +- install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ +- list='$(INFO_DEPS)'; \ +- for file in $$list; do \ +- relfile=`echo "$$file" | sed 's|^.*/||'`; \ +- echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ +- install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ +- done; \ +- else : ; fi +-install-man: install-man1 install-man8 +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-aminfo \ +- maintainer-clean-generic maintainer-clean-vti +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ +- mostlyclean-generic mostlyclean-vti +- +-pdf: pdf-am +- +-pdf-am: $(PDFS) +- +-ps: ps-am +- +-ps-am: $(PSS) +- +-uninstall-am: uninstall-info-am uninstall-man +- +-uninstall-man: uninstall-man1 uninstall-man8 +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +- clean-noinstPROGRAMS ctags dist-info distclean \ +- distclean-compile distclean-generic distclean-tags distdir dvi \ +- dvi-am html html-am info info-am install install-am \ +- install-data install-data-am install-exec install-exec-am \ +- install-info install-info-am install-man install-man1 \ +- install-man8 install-strip installcheck installcheck-am \ +- installdirs maintainer-clean maintainer-clean-aminfo \ +- maintainer-clean-generic maintainer-clean-vti mostlyclean \ +- mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ +- mostlyclean-vti pdf pdf-am ps ps-am tags uninstall \ +- uninstall-am uninstall-info-am uninstall-man uninstall-man1 \ +- uninstall-man8 +- +- +-@BUILD_EXAMPLE_KERNEL_TRUE@boot.o: multiboot.h +- +-# Cancel the rule %.texi -> %. This rule may confuse make to determine +-# the dependecies. +-.texi: +- +-%.c.texi: %.c $(srcdir)/$(SRC2TEXI) +- $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ +- +-%.h.texi: %.h $(srcdir)/$(SRC2TEXI) +- $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ +- +-%.S.texi: %.S $(srcdir)/$(SRC2TEXI) +- $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ +- +-@MAINTAINER_MODE_TRUE@$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) +-@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \ +-@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< +- +-@MAINTAINER_MODE_TRUE@$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN) +-@MAINTAINER_MODE_TRUE@ chmod 755 $< +-@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \ +-@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< +- +-@MAINTAINER_MODE_TRUE@$(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN) +-@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ +-@MAINTAINER_MODE_TRUE@ --name="check the format of a Multiboot kernel" \ +-@MAINTAINER_MODE_TRUE@ --section=1 --output=$@ $< +- +-@MAINTAINER_MODE_TRUE@$(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN) +-@MAINTAINER_MODE_TRUE@ chmod 755 $< +-@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ +-@MAINTAINER_MODE_TRUE@ --name="Encrypt a password in MD5 format" \ +-@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< +- +-@MAINTAINER_MODE_TRUE@$(srcdir)/grub-terminfo.8: ../util/grub-terminfo $(srcdir)/$(HELP2MAN) +-@MAINTAINER_MODE_TRUE@ chmod 755 $< +-@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ +-@MAINTAINER_MODE_TRUE@ --name="Generate a terminfo command from a terminfo name" \ +-@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/docs/grub-crypt.8 b/docs/grub-crypt.8 +new file mode 100644 +index 0000000..eb132d7 +--- /dev/null ++++ b/docs/grub-crypt.8 +@@ -0,0 +1,39 @@ ++.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. ++.TH GRUB-CRYPT "1" "January 2010" "grub-crypt (GNU GRUB 0.97)" FSF ++.SH NAME ++grub-crypt \- manual page for grub-crypt (GNU GRUB 0.97) ++.SH SYNOPSIS ++.B grub-crypt ++[\fIOPTION\fR]... ++.SH DESCRIPTION ++Encrypt a password. ++.TP ++\fB\-h\fR, \fB\-\-help\fR ++Print this message and exit ++.TP ++\fB\-v\fR, \fB\-\-version\fR ++Print the version information and exit ++.TP ++\fB\-\-md5\fR ++Use MD5 to encrypt the password ++.TP ++\fB\-\-sha\-256\fR ++Use SHA-256 to encrypt the password ++.TP ++\fB\-\-sha\-512\fR ++Use SHA-512 to encrypt the password (default) ++.SH "REPORTING BUGS" ++Report bugs to . ++EOF ++.SH "SEE ALSO" ++The full documentation for ++.B grub-crypt ++is maintained as a Texinfo manual. If the ++.B info ++and ++.B grub-crypt ++programs are properly installed at your site, the command ++.IP ++.B info grub-crypt ++.PP ++should give you access to the complete manual. +diff --git a/docs/grub-install.8 b/docs/grub-install.8 +index ac588a3..accff22 100644 +--- a/docs/grub-install.8 ++++ b/docs/grub-install.8 +@@ -30,6 +30,8 @@ BIOS + .TP + \fB\-\-recheck\fR + probe a device map even if it already exists ++ ++This option is unreliable and its use is strongly discouraged. + .PP + INSTALL_DEVICE can be a GRUB device name or a system device filename. + .PP +diff --git a/docs/grub.8 b/docs/grub.8 +index 92149f7..7a087d6 100644 +--- a/docs/grub.8 ++++ b/docs/grub.8 +@@ -15,7 +15,7 @@ turn on batch mode for non-interactive use + specify stage2 boot_drive [default=0x0] + .TP + \fB\-\-config\-file\fR=\fIFILE\fR +-specify stage2 config_file [default=/boot/grub/menu.lst] ++specify stage2 config_file [default=/boot/grub/grub.conf] + .TP + \fB\-\-device\-map\fR=\fIFILE\fR + use the device map file FILE +diff --git a/docs/grub.info b/docs/grub.info +index f48783c..7692f31 100644 +--- a/docs/grub.info ++++ b/docs/grub.info +@@ -1,5 +1,4 @@ +-This is ../../docs/grub.info, produced by makeinfo version 4.8 from +-../../docs/grub.texi. ++This is grub.info, produced by makeinfo version 4.9 from grub.texi. + + INFO-DIR-SECTION Kernel + START-INFO-DIR-ENTRY +@@ -1147,7 +1146,7 @@ your OS. There's a solution to that - GRUB provides a menu interface + (*note Menu interface::) from which you can select an item (using arrow + keys) that will do everything to boot an OS. + +- To enable the menu, you need a configuration file, `menu.lst' under ++ To enable the menu, you need a configuration file, `grub.conf' under + the boot directory. We'll analyze an example file. + + The file first contains some general settings, the menu interface +@@ -1693,12 +1692,12 @@ There are two ways to specify files, by "absolute file name" and by + + An absolute file name resembles a Unix absolute file name, using `/' + for the directory separator (not `\' as in DOS). One example is +-`(hd0,0)/boot/grub/menu.lst'. This means the file `/boot/grub/menu.lst' +-in the first partition of the first hard disk. If you omit the device +-name in an absolute file name, GRUB uses GRUB's "root device" +-implicitly. So if you set the root device to, say, `(hd1,0)' by the +-command `root' (*note root::), then `/boot/kernel' is the same as +-`(hd1,0)/boot/kernel'. ++`(hd0,0)/boot/grub/grub.conf'. This means the file ++`/boot/grub/grub.conf' in the first partition of the first hard disk. ++If you omit the device name in an absolute file name, GRUB uses GRUB's ++"root device" implicitly. So if you set the root device to, say, ++`(hd1,0)' by the command `root' (*note root::), then `/boot/kernel' is ++the same as `(hd1,0)/boot/kernel'. + +  + File: grub.info, Node: Block list syntax, Prev: File name syntax, Up: Filesystem +@@ -2023,6 +2022,7 @@ Commands usable anywhere in the menu and in the command-line. + * rarp:: Initialize a network device via RARP + * serial:: Set up a serial device + * setkey:: Configure the key map ++* splashimage:: Use a splash image + * terminal:: Choose a terminal + * terminfo:: Define escape sequences for a terminal + * tftpserver:: Specify a TFTP server +@@ -2258,7 +2258,7 @@ File: grub.info, Node: serial, Next: setkey, Prev: rarp, Up: General command + support. See also *Note Serial terminal::. + +  +-File: grub.info, Node: setkey, Next: terminal, Prev: serial, Up: General commands ++File: grub.info, Node: setkey, Next: splashimage, Prev: serial, Up: General commands + + 13.2.13 setkey + -------------- +@@ -2384,9 +2384,20 @@ File: grub.info, Node: setkey, Next: terminal, Prev: serial, Up: General com + ` ' + +  +-File: grub.info, Node: terminal, Next: terminfo, Prev: setkey, Up: General commands ++File: grub.info, Node: splashimage, Next: terminal, Prev: setkey, Up: General commands + +-13.2.14 terminal ++13.2.14 splashimage ++------------------- ++ ++ -- Command: splashimage file ++ Select an image to use as the background image. This should be ++ specified using normal GRUB device naming syntax. The format of ++ the file is a gzipped xpm which is 640x480 with a 14 color palette. ++ ++ ++File: grub.info, Node: terminal, Next: terminfo, Prev: splashimage, Up: General commands ++ ++13.2.15 terminal + ---------------- + + -- Command: terminal [`--dumb'] [`--no-echo'] [`--no-edit'] +@@ -2421,7 +2432,7 @@ File: grub.info, Node: terminal, Next: terminfo, Prev: setkey, Up: General c +  + File: grub.info, Node: terminfo, Next: tftpserver, Prev: terminal, Up: General commands + +-13.2.15 terminfo ++13.2.16 terminfo + ---------------- + + -- Command: terminfo `--name=name' `--cursor-address=seq' +@@ -2439,7 +2450,7 @@ File: grub.info, Node: terminfo, Next: tftpserver, Prev: terminal, Up: Gener +  + File: grub.info, Node: tftpserver, Next: unhide, Prev: terminfo, Up: General commands + +-13.2.16 tftpserver ++13.2.17 tftpserver + ------------------ + + -- Command: tftpserver ipaddr +@@ -2454,7 +2465,7 @@ File: grub.info, Node: tftpserver, Next: unhide, Prev: terminfo, Up: General +  + File: grub.info, Node: unhide, Prev: tftpserver, Up: General commands + +-13.2.17 unhide ++13.2.18 unhide + -------------- + + -- Command: unhide partition +@@ -3405,9 +3416,9 @@ calls with UNIX system calls and libc functions. + grub shell just ignores this option. + + `--config-file=FILE' +- Read the configuration file FILE instead of `/boot/grub/menu.lst'. +- The format is the same as the normal GRUB syntax. See *Note +- Filesystem::, for more information. ++ Read the configuration file FILE instead of ++ `/boot/grub/grub.conf'. The format is the same as the normal GRUB ++ syntax. See *Note Filesystem::, for more information. + + `--boot-drive=DRIVE' + Set the stage2 BOOT_DRIVE to DRIVE. This argument should be an +@@ -3551,8 +3562,9 @@ name. + + `--recheck' + Recheck the device map, even if `/boot/grub/device.map' already +- exists. You should use this option whenever you add/remove a disk +- into/from your computer. ++ exists. ++ ++ This option is unreliable and its use is strongly discouraged. + +  + File: grub.info, Node: Invoking grub-md5-crypt, Next: Invoking grub-terminfo, Prev: Invoking grub-install, Up: Top +@@ -4279,6 +4291,7 @@ Index + * serial: serial. (line 9) + * setkey: setkey. (line 7) + * setup: setup. (line 8) ++* splashimage: splashimage. (line 7) + * terminal: terminal. (line 9) + * terminfo: terminfo. (line 9) + * testload: testload. (line 7) +@@ -4293,163 +4306,164 @@ Index + +  + Tag Table: +-Node: Top1487 +-Node: Introduction3266 +-Node: Overview3643 +-Node: Overview-Footnotes5865 +-Ref: Overview-Footnote-15926 +-Node: History6087 +-Node: Features7208 +-Node: Features-Footnotes12976 +-Ref: Features-Footnote-113037 +-Node: Role of a boot loader13182 +-Node: Role of a boot loader-Footnotes14520 +-Ref: Role of a boot loader-Footnote-114607 +-Node: Naming convention14686 +-Node: Installation17621 +-Node: Creating a GRUB boot floppy19363 +-Node: Installing GRUB natively20181 +-Node: Installing GRUB natively-Footnotes22461 +-Ref: Installing GRUB natively-Footnote-122554 +-Node: Installing GRUB using grub-install22739 +-Node: Making a GRUB bootable CD-ROM25685 +-Node: Making a GRUB bootable CD-ROM-Footnotes27730 +-Ref: Making a GRUB bootable CD-ROM-Footnote-127833 +-Node: Booting27908 +-Node: General boot methods28363 +-Node: Loading an operating system directly29104 +-Node: Chain-loading30408 +-Node: Chain-loading-Footnotes31718 +-Ref: Chain-loading-Footnote-131789 +-Node: OS-specific notes31861 +-Node: GNU/Hurd32237 +-Node: GNU/Linux32856 +-Node: FreeBSD34104 +-Node: NetBSD34617 +-Node: OpenBSD35275 +-Node: DOS/Windows35475 +-Node: SCO UnixWare37301 +-Node: QNX37719 +-Node: Making your system robust37969 +-Node: Booting once-only39294 +-Node: Booting fallback systems41219 +-Node: Configuration44066 +-Node: Network48495 +-Node: General usage of network support48989 +-Node: General usage of network support-Footnotes50850 +-Ref: General usage of network support-Footnote-150959 +-Node: Diskless51027 +-Node: Serial terminal53211 +-Node: Preset Menu55444 +-Node: Security57812 +-Node: Images60620 +-Node: Filesystem63131 +-Node: Device syntax63814 +-Node: File name syntax65308 +-Node: Block list syntax66051 +-Node: Interface66784 +-Node: Command-line interface67661 +-Node: Command-line interface-Footnotes69602 +-Ref: Command-line interface-Footnote-169691 +-Node: Menu interface69786 +-Node: Menu entry editor70796 +-Node: Hidden menu interface71875 +-Node: Commands72452 +-Node: Menu-specific commands73029 +-Node: default74200 +-Node: fallback74678 +-Node: hiddenmenu75229 +-Node: timeout75717 +-Node: title75995 +-Node: General commands76266 +-Node: bootp77579 +-Node: color78058 +-Node: device79532 +-Node: dhcp80104 +-Node: hide80689 +-Node: ifconfig81066 +-Node: pager81642 +-Node: partnew81976 +-Node: parttype82412 +-Node: password82779 +-Node: rarp83598 +-Node: serial83899 +-Node: setkey85172 +-Node: terminal87341 +-Node: terminfo88878 +-Node: tftpserver89565 +-Node: unhide90111 +-Node: Command-line and menu entry commands90486 +-Node: blocklist93017 +-Node: boot93259 +-Node: cat93580 +-Node: chainloader93884 +-Node: cmp94500 +-Node: configfile95051 +-Node: debug95265 +-Node: displayapm95649 +-Node: displaymem95860 +-Node: embed96562 +-Node: embed-Footnotes97096 +-Ref: embed-Footnote-197151 +-Node: find97208 +-Node: fstest97588 +-Node: geometry98273 +-Node: halt98885 +-Node: help99212 +-Node: impsprobe99833 +-Node: initrd100232 +-Node: install100571 +-Node: install-Footnotes103415 +-Ref: install-Footnote-1103474 +-Node: ioprobe103571 +-Node: kernel103896 +-Node: lock105016 +-Node: makeactive105591 +-Node: map105903 +-Node: md5crypt106470 +-Node: module106817 +-Node: modulenounzip107394 +-Node: pause107687 +-Node: quit108101 +-Node: reboot108377 +-Node: read108558 +-Node: root108800 +-Node: rootnoverify109677 +-Node: savedefault110232 +-Node: setup111208 +-Node: testload112274 +-Node: testvbe112884 +-Node: uppermem113255 +-Node: vbeprobe113837 +-Node: Troubleshooting114220 +-Node: Stage1 errors114758 +-Node: Stage1.5 errors116135 +-Node: Stage2 errors116573 +-Node: Invoking the grub shell124033 +-Node: Basic usage124786 +-Node: Installation under UNIX127073 +-Node: Device map128748 +-Node: Invoking grub-install129896 +-Node: Invoking grub-md5-crypt131484 +-Node: Invoking grub-terminfo132133 +-Node: Invoking grub-set-default132899 +-Node: Invoking mbchk134700 +-Node: Obtaining and Building GRUB135214 +-Node: Reporting bugs136631 +-Node: Future139435 +-Node: Internals139926 +-Node: Memory map141149 +-Node: Embedded data142627 +-Node: Filesystem interface144644 +-Node: Command interface148077 +-Node: Bootstrap tricks149392 +-Node: I/O ports detection151541 +-Node: Memory detection151813 +-Node: Low-level disk I/O152105 +-Node: MBR152374 +-Node: Partition table152571 +-Node: Submitting patches152844 +-Node: Index154332 ++Node: Top1465 ++Node: Introduction3244 ++Node: Overview3621 ++Node: Overview-Footnotes5843 ++Ref: Overview-Footnote-15904 ++Node: History6065 ++Node: Features7186 ++Node: Features-Footnotes12954 ++Ref: Features-Footnote-113015 ++Node: Role of a boot loader13160 ++Node: Role of a boot loader-Footnotes14498 ++Ref: Role of a boot loader-Footnote-114585 ++Node: Naming convention14664 ++Node: Installation17599 ++Node: Creating a GRUB boot floppy19341 ++Node: Installing GRUB natively20159 ++Node: Installing GRUB natively-Footnotes22439 ++Ref: Installing GRUB natively-Footnote-122532 ++Node: Installing GRUB using grub-install22717 ++Node: Making a GRUB bootable CD-ROM25663 ++Node: Making a GRUB bootable CD-ROM-Footnotes27708 ++Ref: Making a GRUB bootable CD-ROM-Footnote-127811 ++Node: Booting27886 ++Node: General boot methods28341 ++Node: Loading an operating system directly29082 ++Node: Chain-loading30386 ++Node: Chain-loading-Footnotes31696 ++Ref: Chain-loading-Footnote-131767 ++Node: OS-specific notes31839 ++Node: GNU/Hurd32215 ++Node: GNU/Linux32834 ++Node: FreeBSD34082 ++Node: NetBSD34595 ++Node: OpenBSD35253 ++Node: DOS/Windows35453 ++Node: SCO UnixWare37279 ++Node: QNX37697 ++Node: Making your system robust37947 ++Node: Booting once-only39272 ++Node: Booting fallback systems41197 ++Node: Configuration44044 ++Node: Network48474 ++Node: General usage of network support48968 ++Node: General usage of network support-Footnotes50829 ++Ref: General usage of network support-Footnote-150938 ++Node: Diskless51006 ++Node: Serial terminal53190 ++Node: Preset Menu55423 ++Node: Security57791 ++Node: Images60599 ++Node: Filesystem63110 ++Node: Device syntax63793 ++Node: File name syntax65287 ++Node: Block list syntax66032 ++Node: Interface66765 ++Node: Command-line interface67642 ++Node: Command-line interface-Footnotes69583 ++Ref: Command-line interface-Footnote-169672 ++Node: Menu interface69767 ++Node: Menu entry editor70777 ++Node: Hidden menu interface71856 ++Node: Commands72433 ++Node: Menu-specific commands73010 ++Node: default74181 ++Node: fallback74659 ++Node: hiddenmenu75210 ++Node: timeout75698 ++Node: title75976 ++Node: General commands76247 ++Node: bootp77611 ++Node: color78090 ++Node: device79564 ++Node: dhcp80136 ++Node: hide80721 ++Node: ifconfig81098 ++Node: pager81674 ++Node: partnew82008 ++Node: parttype82444 ++Node: password82811 ++Node: rarp83630 ++Node: serial83931 ++Node: setkey85204 ++Node: splashimage87376 ++Node: terminal87754 ++Node: terminfo89296 ++Node: tftpserver89983 ++Node: unhide90529 ++Node: Command-line and menu entry commands90904 ++Node: blocklist93435 ++Node: boot93677 ++Node: cat93998 ++Node: chainloader94302 ++Node: cmp94918 ++Node: configfile95469 ++Node: debug95683 ++Node: displayapm96067 ++Node: displaymem96278 ++Node: embed96980 ++Node: embed-Footnotes97514 ++Ref: embed-Footnote-197569 ++Node: find97626 ++Node: fstest98006 ++Node: geometry98691 ++Node: halt99303 ++Node: help99630 ++Node: impsprobe100251 ++Node: initrd100650 ++Node: install100989 ++Node: install-Footnotes103833 ++Ref: install-Footnote-1103892 ++Node: ioprobe103989 ++Node: kernel104314 ++Node: lock105434 ++Node: makeactive106009 ++Node: map106321 ++Node: md5crypt106888 ++Node: module107235 ++Node: modulenounzip107812 ++Node: pause108105 ++Node: quit108519 ++Node: reboot108795 ++Node: read108976 ++Node: root109218 ++Node: rootnoverify110095 ++Node: savedefault110650 ++Node: setup111626 ++Node: testload112692 ++Node: testvbe113302 ++Node: uppermem113673 ++Node: vbeprobe114255 ++Node: Troubleshooting114638 ++Node: Stage1 errors115176 ++Node: Stage1.5 errors116553 ++Node: Stage2 errors116991 ++Node: Invoking the grub shell124451 ++Node: Basic usage125204 ++Node: Installation under UNIX127492 ++Node: Device map129167 ++Node: Invoking grub-install130315 ++Node: Invoking grub-md5-crypt131884 ++Node: Invoking grub-terminfo132533 ++Node: Invoking grub-set-default133299 ++Node: Invoking mbchk135100 ++Node: Obtaining and Building GRUB135614 ++Node: Reporting bugs137031 ++Node: Future139835 ++Node: Internals140326 ++Node: Memory map141549 ++Node: Embedded data143027 ++Node: Filesystem interface145044 ++Node: Command interface148477 ++Node: Bootstrap tricks149792 ++Node: I/O ports detection151941 ++Node: Memory detection152213 ++Node: Low-level disk I/O152505 ++Node: MBR152774 ++Node: Partition table152971 ++Node: Submitting patches153244 ++Node: Index154732 +  + End Tag Table +diff --git a/docs/grub.texi b/docs/grub.texi +index 51d330a..5fd324d 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -21,6 +21,7 @@ + @dircategory Kernel + @direntry + * GRUB: (grub). The GRand Unified Bootloader ++* grub-crypt: (grub)Invoking grub-crypt. Encrypt a password + * grub-install: (grub)Invoking grub-install. Install GRUB on your drive + * grub-md5-crypt: (grub)Invoking grub-md5-crypt. Encrypt a password + in MD5 format +@@ -115,8 +116,9 @@ This edition documents version @value{VERSION}. + * Commands:: The list of available builtin commands + * Troubleshooting:: Error messages produced by GRUB + * Invoking the grub shell:: How to use the grub shell ++* Invoking grub-crypt:: How to generate an encrypted password + * Invoking grub-install:: How to use the GRUB installer +-* Invoking grub-md5-crypt:: How to generate a cryptic password ++* Invoking grub-md5-crypt:: How to generate an MD5-encrypted password + * Invoking grub-terminfo:: How to generate a terminfo command + * Invoking grub-set-default:: How to set a default boot entry + * Invoking mbchk:: How to use the Multiboot checker +@@ -1265,7 +1267,7 @@ OS. There's a solution to that - GRUB provides a menu interface + keys) that will do everything to boot an OS. + + To enable the menu, you need a configuration file, +-@file{menu.lst} under the boot directory. We'll analyze an example ++@file{grub.conf} under the boot directory. We'll analyze an example + file. + + The file first contains some general settings, the menu interface +@@ -1685,27 +1687,17 @@ run the command @command{password} in your configuration file + (@pxref{password}), like this: + + @example +-password --md5 PASSWORD ++password --encrypted PASSWORD + @end example + + If this is specified, GRUB disallows any interactive control, until you + press the key @key{p} and enter a correct password. The option +-@option{--md5} tells GRUB that @samp{PASSWORD} is in MD5 format. If it ++@option{--encrypted} tells GRUB that @samp{PASSWORD} is encrypted format. If it + is omitted, GRUB assumes the @samp{PASSWORD} is in clear text. + +-You can encrypt your password with the command @command{md5crypt} +-(@pxref{md5crypt}). For example, run the grub shell (@pxref{Invoking the +-grub shell}), and enter your password: +- +-@example +-@group +-grub> md5crypt +-Password: ********** +-Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb. +-@end group +-@end example +- +-Then, cut and paste the encrypted password to your configuration file. ++You can encrypt your password with the program @command{grub-crypt} ++(@pxref{Invoking grub-crypt}). Then, cut and paste the encrypted password to ++your configuration file. + + Also, you can specify an optional argument to @command{password}. See + this example: +@@ -1882,8 +1874,8 @@ There are two ways to specify files, by @dfn{absolute file name} and by + + An absolute file name resembles a Unix absolute file name, using + @samp{/} for the directory separator (not @samp{\} as in DOS). One +-example is @samp{(hd0,0)/boot/grub/menu.lst}. This means the file +-@file{/boot/grub/menu.lst} in the first partition of the first hard ++example is @samp{(hd0,0)/boot/grub/grub.conf}. This means the file ++@file{/boot/grub/grub.conf} in the first partition of the first hard + disk. If you omit the device name in an absolute file name, GRUB uses + GRUB's @dfn{root device} implicitly. So if you set the root device to, + say, @samp{(hd1,0)} by the command @command{root} (@pxref{root}), then +@@ -2199,6 +2191,7 @@ Commands usable anywhere in the menu and in the command-line. + * rarp:: Initialize a network device via RARP + * serial:: Set up a serial device + * setkey:: Configure the key map ++* splashimage:: Use a splash image + * terminal:: Choose a terminal + * terminfo:: Define escape sequences for a terminal + * tftpserver:: Specify a TFTP server +@@ -2398,7 +2391,7 @@ is the new partition type and must be a number in the range 0-0xff. + @node password + @subsection password + +-@deffn Command password [@option{--md5}] passwd [new-config-file] ++@deffn Command password [@option{--md5}] [@option{--encrypted}] passwd [new-config-file] + If used in the first section of a menu file, disable all interactive + editing control (menu entry editor and command-line) and entries + protected by the command @command{lock}. If the password @var{passwd} is +@@ -2408,7 +2401,9 @@ specified. Otherwise, GRUB will just unlock the privileged instructions. + You can also use this command in the script section, in which case it + will ask for the password, before continuing. The option + @option{--md5} tells GRUB that @var{passwd} is encrypted with +-@command{md5crypt} (@pxref{md5crypt}). ++@command{md5crypt} (@pxref{md5crypt}), the option @option{--encrypted} ++tells GRUB that @var{passwd} is using one of the crypt formats (GRUB currently ++supports MD5, SHA-256 and SHA-512 encryption). + @end deffn + + +@@ -2578,6 +2573,16 @@ character each of the symbols corresponds: + @end deffn + + ++@node splashimage ++@subsection splashimage ++ ++@deffn Command splashimage file ++Select an image to use as the background image. This should be ++specified using normal GRUB device naming syntax. The format of the ++file is a gzipped xpm which is 640x480 with a 14 color palette. ++@end deffn ++ ++ + @node terminal + @subsection terminal + +@@ -3542,7 +3547,7 @@ ignores this option. + + @item --config-file=@var{file} + Read the configuration file @var{file} instead of +-@file{/boot/grub/menu.lst}. The format is the same as the normal GRUB ++@file{/boot/grub/grub.conf}. The format is the same as the normal GRUB + syntax. See @ref{Filesystem}, for more information. + + @item --boot-drive=@var{drive} +@@ -3653,6 +3658,31 @@ comments in the file if needed, as the grub shell assumes that a line is + just a comment if the first character is @samp{#}. + + ++@node Invoking grub-crypt ++@chapter Invoking grub-crypt ++ ++The program @command{grub-crypt} encrypts a password in one of the specified ++formats. Passwords encrypted by this program can be used with the ++command @command{password} (@pxref{password}). ++ ++@command{grub-crypt} accepts the following options: ++ ++@table @option ++@item --help ++Print a summary of the command-line options and exit. ++ ++@item --version ++Print the version information and exit. ++ ++@item --md5 ++Use MD5 for password encryption. ++@item --sha-256 ++Use SHA-256 for password encryption. ++@item --sha-512 ++Use SHA-512 for password encryption. This is the default. ++@end table ++ ++ + @node Invoking grub-install + @chapter Invoking grub-install + +@@ -3702,8 +3732,9 @@ Use @var{file} as the grub shell. You can append arbitrary options to + + @item --recheck + Recheck the device map, even if @file{/boot/grub/device.map} already +-exists. You should use this option whenever you add/remove a disk +-into/from your computer. ++exists. ++ ++This option is unreliable and its use is strongly discouraged. + @end table + + +diff --git a/docs/stamp-vti b/docs/stamp-vti +index b97de24..eb5144d 100644 +--- a/docs/stamp-vti ++++ b/docs/stamp-vti +@@ -1,4 +1,4 @@ +-@set UPDATED 8 May 2005 +-@set UPDATED-MONTH May 2005 ++@set UPDATED 7 August 2007 ++@set UPDATED-MONTH August 2007 + @set EDITION 0.97 + @set VERSION 0.97 +diff --git a/docs/version.texi b/docs/version.texi +index b97de24..eb5144d 100644 +--- a/docs/version.texi ++++ b/docs/version.texi +@@ -1,4 +1,4 @@ +-@set UPDATED 8 May 2005 +-@set UPDATED-MONTH May 2005 ++@set UPDATED 7 August 2007 ++@set UPDATED-MONTH August 2007 + @set EDITION 0.97 + @set VERSION 0.97 +diff --git a/efi/.gitignore b/efi/.gitignore +new file mode 100644 +index 0000000..a0e4294 +--- /dev/null ++++ b/efi/.gitignore +@@ -0,0 +1,7 @@ ++.deps ++Makefile.in ++Makefile ++*.a ++*.o ++*.so ++*.efi +diff --git a/efi/Makefile.am b/efi/Makefile.am +new file mode 100644 +index 0000000..1d5bd15 +--- /dev/null ++++ b/efi/Makefile.am +@@ -0,0 +1,76 @@ ++ ++pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++ ++if PLATFORM_EFI ++ ++if NETBOOT_SUPPORT ++NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 ++else ++NETBOOT_FLAGS = ++endif ++ ++if SERIAL_SUPPORT ++SERIAL_FLAGS = -DSUPPORT_SERIAL=1 ++else ++SERIAL_FLAGS = ++endif ++ ++if HERCULES_SUPPORT ++HERCULES_FLAGS = -DSUPPORT_HERCULES=1 ++else ++HERCULES_FLAGS = ++endif ++ ++if GRAPHICS_SUPPORT ++GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 ++else ++GRAPHICS_FLAGS = ++endif ++ ++GRUBEFI_FORMAT = efi-app-$(EFI_ARCH) ++GRUBSO_LD_SCRIPT = @GNUEFI_LDS@ ++GRUBSO_LD_FLAGS = -T $(GRUBSO_LD_SCRIPT) -nostdlib -shared -Bsymbolic ++ ++GRUBSO_OBJS = efimain.o ++GRUBSO_LIBS = @GNUEFI_CRT0@ $(top_srcdir)/stage2/libstage2.a \ ++ libgrubefi.a @LIBGCC@ ++ ++if NETBOOT_SUPPORT ++GRUBSO_LIBS += $(top_srcdir)/netboot/libdrivers.a ++endif ++ ++pkgdata_DATA = grub.efi ++ ++grub.efi: grub.so ++ $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ ++ -j .rela -j .reloc --target=$(GRUBEFI_FORMAT) $^ $@ ++ ++grub.so: $(GRUBSO_OBJS) $(GRUBSO_LIBS) @LIBGNUEFI@ ++ $(LD) -o $@ $(GRUBSO_LD_FLAGS) $^ ++ echo '-------------- unresolved symbols ---------------------' ++ ! nm $@ | grep -iw u ++ echo '-------------------------------------------------------' ++ ++crt0-efi.o: $(EFI_ARCH)/crt0-efi.S ++ $(CC) -o $@ -c $(libgrubefi_a_CFLAGS) $^ ++ ++efimain.o: efimain.c ++ $(CC) -o $@ -c $(libgrubefi_a_CFLAGS) $^ ++ ++clean-local: ++ -rm -rf grub.so grub.efi ++ ++RELOC_FLAGS = $(STAGE2_CFLAGS) -I$(top_srcdir)/stage1 \ ++ -I$(top_srcdir)/lib -I. -I$(top_srcdir) -I$(top_srcdir)/stage2 \ ++ -fno-builtin $(NETBOOT_FLAGS) $(SERIAL_FLAGS) \ ++ $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) ++ ++noinst_LIBRARIES = libgrubefi.a ++libgrubefi_a_SOURCES = $(EFI_ARCH)/callwrap.S eficore.c efimm.c efimisc.c \ ++ eficon.c efidisk.c graphics.c efigraph.c efiuga.c efidp.c \ ++ font_8x16.c efiserial.c $(EFI_ARCH)/loader/linux.c efichainloader.c \ ++ xpm.c pxe.c efitftp.c ++libgrubefi_a_CFLAGS = $(RELOC_FLAGS) -nostdinc ++ ++endif +diff --git a/efi/byteswap.h b/efi/byteswap.h +new file mode 100644 +index 0000000..5a057c4 +--- /dev/null ++++ b/efi/byteswap.h +@@ -0,0 +1,37 @@ ++#ifndef BYTESWAP_H ++#define BYTESWAP_H 1 ++ ++#if defined(__i386__) ++#define LITTLE_ENDIAN 1 ++#elif defined(__x86_64__) ++#define LITTLE_ENDIAN 1 ++#else ++#error endian not defined ++#endif ++ ++#define bswap_16(x) \ ++ ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) ++ ++#define bswap_32(x) \ ++ ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ ++ (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) ++ ++static inline grub_efi_uint16_t htons(grub_efi_uint16_t hostshort) ++{ ++#ifdef LITTLE_ENDIAN ++ return bswap_16(hostshort); ++#else ++ return hostshort; ++#endif ++} ++ ++static inline grub_efi_uint32_t htonl(grub_efi_uint32_t hostshort) ++{ ++#ifdef LITTLE_ENDIAN ++ return bswap_32(hostshort); ++#else ++ return hostshort; ++#endif ++} ++ ++#endif /* BYTESWAP_H */ +diff --git a/efi/dhcp.h b/efi/dhcp.h +new file mode 100644 +index 0000000..a82a522 +--- /dev/null ++++ b/efi/dhcp.h +@@ -0,0 +1,133 @@ ++#ifndef DHCP_H ++#define DHCP_H 1 ++ ++#include "pxe.h" ++ ++#define EFI_DHCP4_PROTOCOL_GUID \ ++{ 0x8a219718, 0x4ef5, 0x4761, {0x91,0xc8,0xc0,0xf0,0x4b,0xda,0x9e,0x56} } ++static grub_efi_guid_t DHCP4Protocol = EFI_DHCP4_PROTOCOL_GUID; ++ ++#define EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID \ ++{ 0x9d9a39d8, 0xbd42, 0x4a73, {0xa4,0xd5,0x8e,0xe9,0x4b,0xe1,0x13,0x80} } ++static grub_efi_guid_t DHCP4SbProtocol = EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID; ++ ++#define EFI_PXE_DHCP4_PROTOCOL_GUID \ ++{ 0x03c4e624, 0xac28, 0x11d3, {0x9a,0x2d,0x00,0x90,0x29,0x3f,0xc1,0x4d} } ++static grub_efi_guid_t PxeDHCP4Protocol = EFI_PXE_DHCP4_PROTOCOL_GUID; ++ ++ ++typedef EFI_STATUS (*EFI_DHCP4_GET_MODE_DATA)(); ++typedef EFI_STATUS (*EFI_DHCP4_CONFIGURE)(); ++typedef EFI_STATUS (*EFI_DHCP4_START)(); ++typedef EFI_STATUS (*EFI_DHCP4_RENEW_REBIND)(); ++typedef EFI_STATUS (*EFI_DHCP4_RELEASE)(); ++typedef EFI_STATUS (*EFI_DHCP4_STOP)(); ++typedef EFI_STATUS (*EFI_DHCP4_BUILD)(); ++typedef EFI_STATUS (*EFI_DHCP4_TRANSMIT_RECIEVE)(); ++typedef EFI_STATUS (*EFI_DHCP4_PARSE)(); ++ ++typedef struct _EFI_DHCP4_PROTOCOL { ++ EFI_DHCP4_GET_MODE_DATA GetModeData; ++ EFI_DHCP4_CONFIGURE Configure; ++ EFI_DHCP4_START Start; ++ EFI_DHCP4_RENEW_REBIND RenewRebind; ++ EFI_DHCP4_RELEASE Release; ++ EFI_DHCP4_STOP Stop; ++ EFI_DHCP4_BUILD Build; ++ EFI_DHCP4_TRANSMIT_RECIEVE TransmitReceive; ++ EFI_DHCP4_PARSE Parse; ++} EFI_DHCP4_PROTOCOL; ++ ++typedef enum { ++ Dhcp4Stopped, ++ Dhcp4Init, ++ Dhcp4Selecting, ++ Dhcp4Requesting, ++ Dhcp4Bound, ++ Dhcp4Renewing, ++ Dhcp4Rebinding, ++ Dhcp4InitReboot, ++ Dhcp4Rebooting, ++} EFI_DHCP4_STATE; ++ ++typedef enum { ++ Dhcp4SendDiscover = 0x1, ++ Dhcp4RcvdOffer, ++ Dhcp4SelectOffer, ++ Dhcp4SendRequest, ++ Dhcp4RcvdAck, ++ Dhcp4RcvdNak, ++ Dhcp4SendDecline, ++ Dhcp4BoundCompleted, ++ Dhcp4EnterRenewing, ++ Dhcp4EnterRebinding, ++ Dhcp4AddressLost, ++ Dhcp4Fail, ++} EFI_DHCP4_EVENT; ++ ++typedef struct { ++ grub_efi_uint8_t OpCode; ++ grub_efi_uint8_t HwType; ++ grub_efi_uint8_t HwAddrLen; ++ grub_efi_uint8_t Hops; ++ grub_efi_uint32_t xid; ++ grub_efi_uint16_t Seconds; ++ grub_efi_uint16_t reserved; ++ EFI_IPv4_ADDRESS ClientAddr; ++ EFI_IPv4_ADDRESS YourAddr; ++ EFI_IPv4_ADDRESS ServerAddr; ++ EFI_IPv4_ADDRESS GatewayAddr; ++ grub_efi_uint8_t ClientHwAddr[16]; ++ char ServerName[64]; ++ char BootFileName[128]; ++} EFI_DHCP4_HEADER; ++ ++typedef struct { ++ grub_efi_uint32_t Size; ++ grub_efi_uint32_t Length; ++ struct { ++ EFI_DHCP4_HEADER Header; ++ grub_efi_uint32_t Magik; ++ grub_efi_uint8_t option[]; ++ } Dhcp4; ++} EFI_DHCP4_PACKET; ++ ++typedef struct { ++ grub_efi_uint8_t OpCode; ++ grub_efi_uint8_t Length; ++ grub_efi_uint8_t Data[1]; ++} EFI_DHCP4_PACKET_OPTION; ++ ++typedef EFI_STATUS (*EFI_DHCP4_CALLBACK) ( ++ EFI_DHCP4_PROTOCOL *This, ++ void *Context, ++ EFI_DHCP4_STATE CurrentState, ++ EFI_DHCP4_EVENT Dhcp4Event, ++ EFI_DHCP4_PACKET *Packet, ++ EFI_DHCP4_PACKET **NewPacket); ++ ++typedef struct { ++ grub_efi_uint32_t DiscoverTryCount; ++ grub_efi_uint32_t *DiscoverTimeout; ++ grub_efi_uint32_t RequestTryCount; ++ grub_efi_uint32_t *RequestTimeout; ++ EFI_IPv4_ADDRESS ClientAddress; ++ EFI_DHCP4_CALLBACK Dhcp4Callback; ++ void *CallbackContext; ++ grub_efi_uint32_t OptionCount; ++ EFI_DHCP4_PACKET_OPTION **OptionList; ++} EFI_DHCP4_CONFIG_DATA; ++ ++typedef struct { ++ EFI_DHCP4_STATE State; ++ EFI_DHCP4_CONFIG_DATA ConfigData; ++ EFI_IPv4_ADDRESS ClientAddress; ++ EFI_MAC_ADDRESS ClientMacAddress; ++ EFI_IPv4_ADDRESS ServerAddress; ++ EFI_IPv4_ADDRESS RouterAddress; ++ EFI_IPv4_ADDRESS SubnetMask; ++ grub_efi_uint32_t LeaseTime; ++ EFI_DHCP4_PACKET *ReplyPacket; ++} EFI_DHCP4_MODE_DATA; ++ ++#endif /* DHCP_H */ +diff --git a/efi/efichainloader.c b/efi/efichainloader.c +new file mode 100644 +index 0000000..016636c +--- /dev/null ++++ b/efi/efichainloader.c +@@ -0,0 +1,265 @@ ++/* efichainloader.c - boot another boot loader */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2004,2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define grub_file_size() filemax ++ ++static grub_efi_physical_address_t address; ++static grub_efi_uintn_t pages; ++static grub_efi_device_path_t *file_path; ++static grub_efi_handle_t image_handle; ++ ++static int ++grub_chainloader_unload (void) ++{ ++ grub_efi_boot_services_t *b; ++ ++ b = grub_efi_system_table->boot_services; ++ Call_Service_1 (b->unload_image, image_handle); ++ Call_Service_2 (b->free_pages, address, pages); ++ grub_free (file_path); ++ ++ return 0; ++} ++ ++static int ++grub_chainloader_boot (void) ++{ ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; ++ grub_efi_uintn_t exit_data_size = 0; ++ grub_efi_char16_t *exit_data = NULL; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_3 (b->start_image, image_handle, ++ &exit_data_size, &exit_data); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ if (exit_data) ++ { ++ char *buf; ++ ++ buf = grub_malloc (exit_data_size * 4 + 1); ++ if (buf) ++ { ++ *grub_utf16_to_utf8 ((grub_uint8_t *) buf, ++ exit_data, exit_data_size) = 0; ++ ++ grub_printf (buf); ++ grub_free (buf); ++ } ++ else ++ grub_printf ("unknown error\n"); ++ } ++ errnum = ERR_UNRECOGNIZED; ++ } ++ ++ if (exit_data) ++ Call_Service_1 (b->free_pool, exit_data); ++ ++ grub_chainloader_unload (); ++ ++ return 0; ++} ++ ++static void ++copy_file_path (grub_efi_file_path_device_path_t *fp, ++ const char *str, grub_efi_uint16_t len) ++{ ++ grub_efi_char16_t *p; ++ grub_efi_uint16_t size; ++ ++ fp->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; ++ fp->header.subtype = GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE; ++ size = len * sizeof (grub_efi_char16_t) + sizeof (*fp); ++ fp->header.length[0] = (grub_efi_uint8_t) (size & 0xff); ++ fp->header.length[1] = (grub_efi_uint8_t) (size >> 8); ++ for (p = fp->path_name; len > 0; len--, p++, str++) ++ { ++ *p = (grub_efi_char16_t) (*str == '/' ? '\\' : *str); ++ } ++} ++ ++static grub_efi_device_path_t * ++make_file_path (const char *filename) ++{ ++ char *dir_start; ++ char *dir_end; ++ grub_size_t size; ++ grub_efi_device_path_t *d; ++ ++ dir_start = grub_strchr (filename, ')'); ++ if (! dir_start) ++ dir_start = (char *) filename; ++ else ++ dir_start++; ++ ++ dir_end = grub_strrchr (dir_start, '/'); ++ if (! dir_end) ++ { ++ errnum = ERR_BAD_FILENAME; ++ grub_printf ("invalid EFI file path"); ++ return 0; ++ } ++ ++ size = 0; ++ file_path = grub_malloc ((grub_strlen (dir_start) + 1) ++ * sizeof (grub_efi_char16_t) ++ + sizeof (grub_efi_file_path_device_path_t) * 2); ++ if (! file_path) ++ return 0; ++ ++ /* Fill the file path for the directory. */ ++ d = (grub_efi_device_path_t *) file_path; ++ ++ if (dir_end - dir_start) ++ { ++ copy_file_path ((grub_efi_file_path_device_path_t *) d, ++ dir_start, dir_end - dir_start); ++ d = GRUB_EFI_NEXT_DEVICE_PATH (d); ++ /* Fill the file path for the file. */ ++ copy_file_path ((grub_efi_file_path_device_path_t *) d, ++ dir_end + 1, grub_strlen (dir_end + 1)); ++ } ++ else ++ { ++ /* Fill the file path for the file. */ ++ copy_file_path ((grub_efi_file_path_device_path_t *) d, ++ dir_end, grub_strlen (dir_end)); ++ } ++ ++ /* Fill the end of device path nodes. */ ++ d = GRUB_EFI_NEXT_DEVICE_PATH (d); ++ d->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ d->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ d->length[0] = sizeof (*d); ++ d->length[1] = 0; ++ ++ return file_path; ++} ++ ++int ++grub_chainloader (char *filename) ++{ ++ grub_ssize_t size; ++ grub_efi_status_t status; ++ grub_efi_boot_services_t *b; ++ grub_efi_handle_t dev_handle = 0; ++ grub_efi_loaded_image_t *loaded_image; ++ ++ /* Initialize some global variables. */ ++ address = 0xffffffff; ++ image_handle = 0; ++ ++ b = grub_efi_system_table->boot_services; ++ ++ if (! grub_open (filename)) ++ goto fail1; ++ ++ dev_handle = grub_efidisk_get_current_bdev_handle (); ++ if (! dev_handle) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("not a valid root device\n"); ++ goto fail; ++ } ++ ++ file_path = make_file_path (filename); ++ if (! file_path) ++ goto fail; ++ ++ grub_printf ("file path: "); ++ grub_efi_print_device_path (file_path); ++ ++ size = grub_file_size (); ++ pages = (((grub_efi_uintn_t) size + ((1 << 12) - 1)) >> 12); ++ ++ status = Call_Service_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ANY_PAGES, ++ GRUB_EFI_LOADER_CODE, pages, &address); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("cannot allocate %u pages", pages); ++ goto fail; ++ } ++ ++ if (grub_read ((void *) ((grub_addr_t) address), size) != size) ++ { ++ if (errnum == ERR_NONE) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("too small"); ++ } ++ goto fail; ++ } ++ ++ status = Call_Service_6 (b->load_image, 0, grub_efi_image_handle, file_path, ++ (void *) ((grub_addr_t) address), size, ++ &image_handle); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ if (status == GRUB_EFI_OUT_OF_RESOURCES) ++ grub_printf ("out of resources"); ++ else ++ grub_printf ("cannot load image"); ++ ++ goto fail; ++ } ++ ++ /* LoadImage does not set a device handler when the image is ++ loaded from memory, so it is necessary to set it explicitly here. ++ This is a mess. */ ++ loaded_image = grub_efi_get_loaded_image (image_handle); ++ if (! loaded_image) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("no loaded image available"); ++ goto fail; ++ } ++ loaded_image->device_handle = dev_handle; ++ ++ grub_close (); ++ return KERNEL_TYPE_CHAINLOADER; ++ ++ fail: ++ grub_close (); ++ fail1: ++ if (address) ++ b->free_pages (address, pages); ++ ++ return KERNEL_TYPE_NONE; ++} ++ ++/* calls for direct boot-loader chaining */ ++void ++chain_stage1 (unsigned long segment, unsigned long offset, ++ unsigned long part_table_addr) ++{ ++ grub_chainloader_boot (); ++ for (;;); ++} +diff --git a/efi/eficon.c b/efi/eficon.c +new file mode 100644 +index 0000000..037f050 +--- /dev/null ++++ b/efi/eficon.c +@@ -0,0 +1,306 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++static int ++grub_console_standard_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_YELLOW, ++ GRUB_EFI_BACKGROUND_BLACK); ++static int ++grub_console_normal_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_LIGHTGRAY, ++ GRUB_EFI_BACKGROUND_BLACK); ++static int ++grub_console_highlight_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_BLACK, ++ GRUB_EFI_BACKGROUND_LIGHTGRAY); ++ ++static int read_key = -1; ++ ++void ++console_putchar (int c) ++{ ++ grub_efi_char16_t str[2]; ++ grub_efi_simple_text_output_interface_t *o; ++ ++ o = grub_efi_system_table->con_out; ++ ++ switch (c) ++ { ++ case DISP_LEFT: ++ c = '<'; ++ break; ++ ++ case DISP_UP: ++ c = '^'; ++ break; ++ ++ case DISP_RIGHT: ++ c = '>'; ++ break; ++ ++ case DISP_DOWN: ++ c = 'v'; ++ break; ++ ++ case DISP_HORIZ: ++ c = '-'; ++ break; ++ ++ case DISP_VERT: ++ c = '|'; ++ break; ++ ++ case DISP_UL: ++ case DISP_UR: ++ case DISP_LL: ++ case DISP_LR: ++ c = '+'; ++ break; ++ } ++ ++ /* For now, do not try to use a surrogate pair. */ ++ if (c > 0xffff) ++ c = '?'; ++ ++ str[0] = (grub_efi_char16_t) (c & 0xffff); ++ str[1] = 0; ++ ++ /* Should this test be cached? */ ++ if (c > 0x7f && Call_Service_2 (o->test_string, o, str) != GRUB_EFI_SUCCESS) ++ return; ++ ++ Call_Service_2 (o->output_string, o, str); ++} ++ ++int ++console_checkkey (void) ++{ ++ grub_efi_simple_input_interface_t *i; ++ grub_efi_input_key_t key; ++ grub_efi_status_t status; ++ ++ if (read_key >= 0) ++ return 1; ++ ++ i = grub_efi_system_table->con_in; ++ status = Call_Service_2 (i->read_key_stroke ,i, &key); ++#if 0 ++ switch (status) ++ { ++ case GRUB_EFI_SUCCESS: ++ { ++ int xy; ++ ++ xy = console_getxy (); ++ console_gotoxy (0, 0); ++ grub_printf ("scan_code=%x,unicode_char=%x ", ++ (unsigned) key.scan_code, ++ (unsigned) key.unicode_char); ++ console_gotoxy (xy >> 8, xy & 0xff); ++ } ++ break; ++ ++ case GRUB_EFI_NOT_READY: ++ grub_printf ("not ready "); ++ break; ++ ++ default: ++ grub_printf ("device error "); ++ break; ++ } ++#endif ++ ++ if (status == GRUB_EFI_SUCCESS) ++ { ++ switch (key.scan_code) ++ { ++ case 0x00: ++ read_key = key.unicode_char; ++ break; ++ case 0x01: ++ read_key = 16; ++ break; ++ case 0x02: ++ read_key = 14; ++ break; ++ case 0x03: ++ read_key = 6; ++ break; ++ case 0x04: ++ read_key = 2; ++ break; ++ case 0x05: ++ read_key = 1; ++ break; ++ case 0x06: ++ read_key = 5; ++ break; ++ case 0x07: ++ break; ++ case 0x08: ++ read_key = 4; ++ break; ++ case 0x09: ++ break; ++ case 0x0a: ++ break; ++ case 0x17: ++ read_key = '\e'; ++ break; ++ default: ++ break; ++ } ++ } ++ ++ return read_key; ++} ++ ++int ++console_getkey (void) ++{ ++ grub_efi_simple_input_interface_t *i; ++ grub_efi_boot_services_t *b; ++ grub_efi_uintn_t index; ++ grub_efi_status_t status; ++ int key; ++ ++ if (read_key >= 0) ++ { ++ key = read_key; ++ read_key = -1; ++ return key; ++ } ++ ++ i = grub_efi_system_table->con_in; ++ b = grub_efi_system_table->boot_services; ++ ++ do ++ { ++ status = Call_Service_3 (b->wait_for_event , 1, &(i->wait_for_key), &index); ++ if (status != GRUB_EFI_SUCCESS) ++ return -1; ++ ++ console_checkkey (); ++ } ++ while (read_key < 0); ++ ++ key = read_key; ++ read_key = -1; ++ return key; ++} ++ ++int ++console_keystatus (void) ++{ ++ /* Doesn't look like EFI can support this... */ ++ return 0; ++} ++ ++int ++console_getxy (void) ++{ ++ grub_efi_simple_text_output_interface_t *o; ++ ++ o = grub_efi_system_table->con_out; ++ return ((o->mode->cursor_column << 8) | o->mode->cursor_row); ++} ++ ++void ++console_gotoxy (int x, int y) ++{ ++ grub_efi_simple_text_output_interface_t *o; ++ ++ o = grub_efi_system_table->con_out; ++ Call_Service_3 (o->set_cursor_position , o, x, y); ++} ++ ++void ++console_cls (void) ++{ ++ grub_efi_simple_text_output_interface_t *o; ++ grub_efi_int32_t orig_attr; ++ ++ o = grub_efi_system_table->con_out; ++ orig_attr = o->mode->attribute; ++ Call_Service_2 (o->set_attributes, o, GRUB_EFI_BACKGROUND_BLACK); ++ Call_Service_1 (o->clear_screen , o); ++ Call_Service_2 (o->set_attributes , o, orig_attr); ++} ++ ++void ++console_setcolorstate (color_state state) ++{ ++ grub_efi_simple_text_output_interface_t *o; ++ ++ o = grub_efi_system_table->con_out; ++ ++ switch (state) { ++ case COLOR_STATE_STANDARD: ++ Call_Service_2 (o->set_attributes, o, grub_console_standard_color); ++ break; ++ case COLOR_STATE_NORMAL: ++ Call_Service_2 (o->set_attributes, o, grub_console_normal_color); ++ break; ++ case COLOR_STATE_HIGHLIGHT: ++ Call_Service_2 (o->set_attributes, o, grub_console_highlight_color); ++ break; ++ default: ++ break; ++ } ++} ++ ++void ++console_setcolor (int normal_color, int highlight_color) ++{ ++ grub_console_normal_color = normal_color; ++ grub_console_highlight_color = highlight_color; ++} ++ ++int ++console_setcursor (int on) ++{ ++ grub_efi_simple_text_output_interface_t *o; ++ ++ o = grub_efi_system_table->con_out; ++ Call_Service_2 (o->enable_cursor, o, on); ++ return on; ++} ++ ++void ++grub_console_init (void) ++{ ++ /* FIXME: it is necessary to consider the case where no console control ++ is present but the default is already in text mode. */ ++ if (! grub_efi_set_text_mode (1)) ++ { ++ grub_printf ("cannot set text mode"); ++ return; ++ } ++} ++ ++void ++grub_console_fini (void) ++{ ++} +diff --git a/efi/eficore.c b/efi/eficore.c +new file mode 100644 +index 0000000..8abea7d +--- /dev/null ++++ b/efi/eficore.c +@@ -0,0 +1,241 @@ ++/* eficore.c - generic EFI support */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++/* The handle of GRUB itself. Filled in by the startup code. */ ++grub_efi_handle_t grub_efi_image_handle; ++ ++/* The pointer to a system table. Filled in by the startup code. */ ++grub_efi_system_table_t *grub_efi_system_table; ++ ++static grub_efi_guid_t console_control_guid = GRUB_EFI_CONSOLE_CONTROL_GUID; ++static grub_efi_guid_t loaded_image_guid = GRUB_EFI_LOADED_IMAGE_GUID; ++static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID; ++ ++/* temporary, until we're using gnu-efi's include files --pjones */ ++extern int setjmp(grub_jmp_buf env); ++int grub_setjmp(grub_jmp_buf env) ++{ ++ return setjmp(env); ++} ++ ++extern void longjmp(grub_jmp_buf env, int val); ++void grub_longjmp(grub_jmp_buf env, int val) ++{ ++ longjmp(env, val); ++} ++ ++grub_efi_status_t ++grub_efi_locate_device_path (grub_efi_guid_t *protocol, ++ grub_efi_device_path_t **dp, ++ grub_efi_handle_t *handle) ++{ ++ return Call_Service_3( ++ grub_efi_system_table->boot_services->locate_device_path, ++ protocol, dp, handle); ++} ++ ++grub_efi_status_t ++grub_efi_locate_handle_buffer (grub_efi_locate_search_type_t search_type, ++ grub_efi_guid_t *protocol, ++ void *search_key, ++ grub_efi_uintn_t *no_handles, ++ grub_efi_handle_t **buffer) ++{ ++ return Call_Service_5( ++ grub_efi_system_table->boot_services->locate_handle_buffer, ++ search_type, protocol, search_key, no_handles, buffer); ++} ++ ++void * ++grub_efi_locate_protocol (grub_efi_guid_t *protocol, void *registration) ++{ ++ void *interface; ++ grub_efi_status_t status; ++ ++ status = Call_Service_3 (grub_efi_system_table->boot_services->locate_protocol, ++ protocol, ++ registration, ++ &interface); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ return interface; ++} ++ ++/* Return the array of handles which meet the requirement. If successful, ++ the number of handles is stored in NUM_HANDLES. The array is allocated ++ from the heap. */ ++grub_efi_handle_t * ++grub_efi_locate_handle (grub_efi_locate_search_type_t search_type, ++ grub_efi_guid_t *protocol, ++ void *search_key, ++ grub_efi_uintn_t *num_handles) ++{ ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; ++ grub_efi_handle_t *buffer; ++ grub_efi_uintn_t buffer_size = 8 * sizeof (grub_efi_handle_t); ++ ++ buffer = grub_malloc (buffer_size); ++ if (! buffer) ++ return 0; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_5 (b->locate_handle, search_type, protocol, ++ search_key, &buffer_size, buffer); ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL) ++ { ++ grub_free (buffer); ++ buffer = grub_malloc (buffer_size); ++ if (! buffer) ++ return 0; ++ ++ status = Call_Service_5 (b->locate_handle, search_type, protocol, ++ search_key, &buffer_size, buffer); ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (buffer); ++ return 0; ++ } ++ ++ *num_handles = buffer_size / sizeof (grub_efi_handle_t); ++ return buffer; ++} ++ ++void * ++grub_efi_open_protocol (grub_efi_handle_t handle, ++ grub_efi_guid_t *protocol, ++ grub_efi_uint32_t attributes) ++{ ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; ++ void *interface; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_6 ( b->open_protocol, ++ handle, ++ protocol, ++ &interface, ++ grub_efi_image_handle, ++ 0, ++ attributes); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ return interface; ++} ++ ++int ++grub_efi_set_text_mode (int on) ++{ ++ grub_efi_console_control_protocol_t *c; ++ grub_efi_screen_mode_t mode, new_mode; ++ ++ c = grub_efi_locate_protocol (&console_control_guid, 0); ++ if (! c) ++ /* No console control protocol instance available, assume it is ++ already in text mode. */ ++ return 1; ++ ++ if (Call_Service_4 (c->get_mode , c, &mode, 0, 0) != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ new_mode = on ? GRUB_EFI_SCREEN_TEXT : GRUB_EFI_SCREEN_GRAPHICS; ++ if (mode != new_mode) ++ if (Call_Service_2 (c->set_mode , c, new_mode) != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ return 1; ++} ++ ++void ++grub_efi_stall (grub_efi_uintn_t microseconds) ++{ ++ Call_Service_1 (grub_efi_system_table->boot_services->stall , microseconds); ++} ++ ++grub_efi_loaded_image_t * ++grub_efi_get_loaded_image (grub_efi_handle_t image_handle) ++{ ++ return grub_efi_open_protocol (image_handle, ++ &loaded_image_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++} ++ ++void ++grub_exit (void) ++{ ++ grub_efi_fini (); ++ Call_Service_4(grub_efi_system_table->boot_services->exit, ++ grub_efi_image_handle, ++ GRUB_EFI_SUCCESS, ++ 0, ++ 0 ); ++ for (;;); ++} ++ ++int ++grub_efi_exit_boot_services (grub_efi_uintn_t map_key) ++{ ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_2 (b->exit_boot_services , ++ grub_efi_image_handle, ++ map_key); ++ return status == GRUB_EFI_SUCCESS; ++} ++ ++grub_uint32_t ++grub_get_rtc (void) ++{ ++ grub_efi_time_t time; ++ grub_efi_runtime_services_t *r; ++ ++ r = grub_efi_system_table->runtime_services; ++ if (Call_Service_2(r->get_time , &time, 0) != GRUB_EFI_SUCCESS) ++ /* What is possible in this case? */ ++ return 0; ++ ++ return (((time.minute * 60 + time.second) * 1000 ++ + time.nanosecond / 1000000) ++ * GRUB_TICKS_PER_SECOND / 1000); ++} ++ ++grub_efi_device_path_t * ++grub_efi_get_device_path (grub_efi_handle_t handle) ++{ ++ return grub_efi_open_protocol (handle, &device_path_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++} ++ +diff --git a/efi/efidisk.c b/efi/efidisk.c +new file mode 100644 +index 0000000..6a505f3 +--- /dev/null ++++ b/efi/efidisk.c +@@ -0,0 +1,801 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++struct grub_efidisk_data ++{ ++ grub_efi_handle_t handle; ++ grub_efi_device_path_t *device_path; ++ grub_efi_device_path_t *last_device_path; ++ grub_efi_block_io_t *block_io; ++ grub_efi_disk_io_t *disk_io; ++ struct grub_efidisk_data *next; ++}; ++ ++/* GUIDs. */ ++static grub_efi_guid_t disk_io_guid = GRUB_EFI_DISK_IO_GUID; ++static grub_efi_guid_t block_io_guid = GRUB_EFI_BLOCK_IO_GUID; ++static grub_efi_guid_t device_path_from_text_guid = GRUB_EFI_DEVICE_PATH_FROM_TEXT_GUID; ++ ++static struct grub_efidisk_data *fd_devices; ++static struct grub_efidisk_data *hd_devices; ++static struct grub_efidisk_data *cd_devices; ++ ++static int get_device_sector_bits(struct grub_efidisk_data *device); ++static int get_device_sector_size(struct grub_efidisk_data *device); ++static struct grub_efidisk_data *get_device_from_drive (int drive); ++ ++static struct grub_efidisk_data * ++make_devices (void) ++{ ++ grub_efi_uintn_t num_handles; ++ grub_efi_handle_t *handles; ++ grub_efi_handle_t *handle; ++ struct grub_efidisk_data *devices = 0; ++ ++ /* Find handles which support the disk io interface. */ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &disk_io_guid, ++ 0, &num_handles); ++ if (! handles) ++ return 0; ++ ++ /* Make a linked list of devices. */ ++ for (handle = handles; num_handles--; handle++) ++ { ++ grub_efi_device_path_t *dp; ++ grub_efi_device_path_t *ldp; ++ struct grub_efidisk_data *d; ++ grub_efi_block_io_t *bio; ++ grub_efi_disk_io_t *dio; ++ ++ dp = grub_efi_get_device_path (*handle); ++ if (! dp) ++ continue; ++ ++ ldp = find_last_device_path (dp); ++ if (! ldp) ++ /* This is empty. Why? */ ++ continue; ++ ++ bio = grub_efi_open_protocol (*handle, &block_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ dio = grub_efi_open_protocol (*handle, &disk_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ if (! bio || ! dio) ++ /* This should not happen... Why? */ ++ continue; ++ ++ d = grub_malloc (sizeof (*d)); ++ if (! d) ++ { ++ /* Uggh. */ ++ grub_free (handles); ++ return 0; ++ } ++ ++ d->handle = *handle; ++ d->device_path = dp; ++ d->last_device_path = ldp; ++ d->block_io = bio; ++ d->disk_io = dio; ++ d->next = devices; ++ devices = d; ++ } ++ ++ grub_free (handles); ++ ++ return devices; ++} ++ ++static int ++iterate_child_devices (struct grub_efidisk_data *devices, ++ struct grub_efidisk_data *d, ++ int (*hook) (struct grub_efidisk_data *child)) ++{ ++ struct grub_efidisk_data *p; ++ ++ for (p = devices; p; p = p->next) ++ { ++ grub_efi_device_path_t *dp, *ldp; ++ ++ dp = duplicate_device_path (p->device_path); ++ if (! dp) ++ return 0; ++ ++ ldp = find_last_device_path (dp); ++ ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ ldp->length[0] = sizeof (*ldp); ++ ldp->length[1] = 0; ++ ++ if (compare_device_paths (dp, d->device_path) == 0) ++ if (hook (p)) ++ { ++ grub_free (dp); ++ return 1; ++ } ++ ++ grub_free (dp); ++ } ++ ++ return 0; ++} ++ ++/* Add a device into a list of devices in an ascending order. */ ++static void ++add_device (struct grub_efidisk_data **devices, struct grub_efidisk_data *d) ++{ ++ struct grub_efidisk_data **p; ++ struct grub_efidisk_data *n; ++ ++ for (p = devices; *p; p = &((*p)->next)) ++ { ++ int ret; ++ ++ ret = compare_device_paths (find_last_device_path ((*p)->device_path), ++ find_last_device_path (d->device_path)); ++ if (ret == 0) ++ ret = compare_device_paths ((*p)->device_path, ++ d->device_path); ++ if (ret == 0) ++ return; ++ else if (ret > 0) ++ break; ++ } ++ ++ n = grub_malloc (sizeof (*n)); ++ if (! n) ++ return; ++ ++ grub_memcpy (n, d, sizeof (*n)); ++ n->next = (*p); ++ (*p) = n; ++} ++ ++/* Name the devices. */ ++static void ++name_devices (struct grub_efidisk_data *devices) ++{ ++ struct grub_efidisk_data *d; ++ ++ /* Let's see what can be added more. */ ++ for (d = devices; d; d = d->next) ++ { ++ grub_efi_device_path_t *dp; ++ grub_efi_block_io_media_t *m; ++ ++ dp = d->last_device_path; ++ if (! dp) ++ continue; ++ ++ m = d->block_io->media; ++ if (GRUB_EFI_DEVICE_PATH_TYPE(dp) == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE) ++ { ++ /* XXX FIXME this won't work if we see write-protected disks with ++ * 4k sectors */ ++ if (m->read_only && m->block_size > 0x200) ++ { ++ add_device (&cd_devices, d); ++ } else ++ { ++ add_device (&hd_devices, d); ++ } ++ } ++ if (GRUB_EFI_DEVICE_PATH_TYPE(dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE) ++ { ++ add_device (&fd_devices, d); ++ } ++ } ++} ++ ++static void ++free_devices (struct grub_efidisk_data *devices) ++{ ++ struct grub_efidisk_data *p, *q; ++ ++ for (p = devices; p; p = q) ++ { ++ q = p->next; ++ grub_free (p); ++ } ++} ++ ++/* Enumerate all disks to name devices. */ ++static void ++enumerate_disks (void) ++{ ++ struct grub_efidisk_data *devices; ++ ++ devices = make_devices (); ++ if (! devices) ++ return; ++ ++ name_devices (devices); ++ free_devices (devices); ++} ++ ++static struct grub_efidisk_data * ++get_device (struct grub_efidisk_data *devices, int num) ++{ ++ struct grub_efidisk_data *d; ++ ++ for (d = devices; d && num; d = d->next, num--) ++ ; ++ ++ if (num == 0) ++ return d; ++ ++ return 0; ++} ++ ++static int ++grub_efidisk_read (struct grub_efidisk_data *d, grub_disk_addr_t sector, ++ grub_size_t size, char *buf) ++{ ++ /* For now, use the disk io interface rather than the block io's. */ ++ grub_efi_disk_io_t *dio; ++ grub_efi_block_io_t *bio; ++ grub_efi_status_t status; ++ grub_efi_uint64_t sector_size = get_device_sector_size(d); ++ ++ dio = d->disk_io; ++ bio = d->block_io; ++ ++ status = Call_Service_5 (dio->read, ++ dio, bio->media->media_id, ++ sector * sector_size, ++ size * sector_size, ++ buf); ++ if (status != GRUB_EFI_SUCCESS) ++ return -1; ++ ++ return 0; ++} ++ ++static int ++grub_efidisk_write (struct grub_efidisk_data *d, grub_disk_addr_t sector, ++ grub_size_t size, const char *buf) ++{ ++ /* For now, use the disk io interface rather than the block io's. */ ++ grub_efi_disk_io_t *dio; ++ grub_efi_block_io_t *bio; ++ grub_efi_status_t status; ++ grub_efi_uint64_t sector_size = get_device_sector_size(d); ++ ++ dio = d->disk_io; ++ bio = d->block_io; ++ ++ grub_dprintf ("efidisk", ++ "writing 0x%x sectors at the sector 0x%x to ??\n", ++ (unsigned) size, (unsigned int) sector); ++ ++ status = Call_Service_5 (dio->write , ++ dio, bio->media->media_id, ++ sector * sector_size, ++ size * sector_size, ++ (void *) buf); ++ if (status != GRUB_EFI_SUCCESS) ++ return -1; ++ ++ return 0; ++} ++ ++void ++grub_efidisk_init (void) ++{ ++ enumerate_disks (); ++} ++ ++void ++grub_efidisk_fini (void) ++{ ++ free_devices (fd_devices); ++ free_devices (hd_devices); ++ free_devices (cd_devices); ++} ++ ++static int ++get_device_sector_size(struct grub_efidisk_data *device) ++{ ++ return device->block_io->media->block_size; ++} ++ ++int ++get_sector_size(int drive) ++{ ++ struct grub_efidisk_data *device = get_device_from_drive(drive); ++ return get_device_sector_size(device); ++} ++ ++/* ++ * ffz = Find First Zero in word. Undefined if no zero exists, ++ * so code should check against ~0UL first.. ++ */ ++static __inline__ unsigned int ++ffz (unsigned int word) ++{ ++ __asm__ ("bsfl %1,%0" ++: "=r" (word) ++: "r" (~word)); ++ return word; ++} ++#define log2(n) ffz(~(n)) ++ ++static int ++get_device_sector_bits(struct grub_efidisk_data *device) ++{ ++ int sector_size = get_device_sector_size(device); ++ return log2(sector_size); ++} ++ ++int ++get_sector_bits(int drive) ++{ ++ int sector_size = get_sector_size(drive); ++ return log2(sector_size); ++} ++ ++static struct grub_efidisk_data * ++get_device_from_drive (int drive) ++{ ++#ifdef SUPPORT_NETBOOT ++ /* Not supported */ ++ if (drive == NETWORK_DRIVE) ++ return NULL; ++#endif ++ if (drive == GRUB_INVALID_DRIVE) ++ return NULL; ++ if (drive == cdrom_drive) ++ return get_device (cd_devices, 0); ++ /* Hard disk */ ++ if (drive & 0x80) ++ return get_device (hd_devices, drive - 0x80); ++ /* Floppy disk */ ++ else ++ return get_device (fd_devices, drive); ++} ++ ++/* Low-level disk I/O. Our stubbed version just returns a file ++ descriptor, not the actual geometry. */ ++int ++get_diskinfo (int drive, struct geometry *geometry) ++{ ++ struct grub_efidisk_data *d; ++ ++ d = get_device_from_drive (drive); ++ if (!d) ++ return -1; ++ geometry->total_sectors = d->block_io->media->last_block+1; ++ geometry->sector_size = d->block_io->media->block_size; ++ geometry->flags = BIOSDISK_FLAG_LBA_EXTENSION; ++ geometry->sectors = 63; ++ if (geometry->total_sectors / 63 < 255) ++ geometry->heads = 1; ++ else ++ geometry->heads = 255; ++ geometry->cylinders = geometry->total_sectors / 63 / geometry->heads; ++ return 0; ++} ++ ++int ++biosdisk (int subfunc, int drive, struct geometry *geometry, ++ int sector, int nsec, int segment) ++{ ++ char *buf; ++ struct grub_efidisk_data *d; ++ int ret; ++ ++ d = get_device_from_drive (drive); ++ if (!d) ++ return -1; ++ buf = (char *) ((unsigned long) segment << 4); ++ switch (subfunc) ++ { ++ case BIOSDISK_READ: ++ ret = grub_efidisk_read (d, sector, nsec, buf); ++ break; ++ case BIOSDISK_WRITE: ++ ret = grub_efidisk_write (d, sector, nsec, buf); ++ break; ++ default: ++ return -1; ++ } ++ ++ return 0; ++} ++ ++/* Some utility functions to map GRUB devices with EFI devices. */ ++grub_efi_handle_t ++grub_efidisk_get_current_bdev_handle (void) ++{ ++ struct grub_efidisk_data *d; ++ ++ d = get_device_from_drive (current_drive); ++ if (d == NULL) ++ return NULL; ++ ++ if (current_drive == GRUB_INVALID_DRIVE) ++ return NULL; ++ ++ if (current_drive == cdrom_drive) ++ return d->handle; ++ ++ if (! (current_drive & 0x80)) ++ return d->handle; ++ /* If this is the whole disk, just return its own data. */ ++ else if (current_partition == 0xFFFFFF) ++ return d->handle; ++ /* Otherwise, we must query the corresponding device to the firmware. */ ++ else ++ { ++ struct grub_efidisk_data *devices; ++ grub_efi_handle_t handle = 0; ++ auto int find_partition (struct grub_efidisk_data *c); ++ ++ int find_partition (struct grub_efidisk_data *c) ++ { ++ grub_efi_hard_drive_device_path_t hd; ++ ++ grub_memcpy (&hd, c->last_device_path, sizeof (hd)); ++ ++ if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path) ++ == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) ++ && (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path) ++ == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) ++ && (part_start == hd.partition_start)) ++ { ++ handle = c->handle; ++ return 1; ++ } ++ ++ return 0; ++ } ++ ++ devices = make_devices (); ++ iterate_child_devices (devices, d, find_partition); ++ free_devices (devices); ++ ++ if (handle != 0) ++ return handle; ++ } ++ ++ return 0; ++} ++ ++int ++grub_get_drive_partition_from_bdev_handle (grub_efi_handle_t handle, ++ unsigned long *drive, ++ unsigned long *partition) ++{ ++ grub_efi_device_path_t *dp, *dp1; ++ struct grub_efidisk_data *d, *devices; ++ int drv; ++ unsigned long part; ++ grub_efi_hard_drive_device_path_t hd; ++ int found; ++ int part_type, part_entry; ++ unsigned long partition_start, partition_len, part_offset, part_extoffset; ++ unsigned long gpt_offset; ++ int gpt_count, gpt_size; ++ auto int find_bdev (struct grub_efidisk_data *c); ++ ++ int find_bdev (struct grub_efidisk_data *c) ++ { ++ if (! compare_device_paths (c->device_path, dp)) ++ { ++ grub_memcpy (&hd, c->last_device_path, sizeof (hd)); ++ found = 1; ++ return 1; ++ } ++ return 0; ++ } ++ ++ dp = grub_efi_get_device_path (handle); ++ if (! dp) ++ return 0; ++ ++ dp1 = dp; ++ while (1) ++ { ++ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp1); ++ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE(dp1); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ ++ if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE && ++ subtype == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE) ++ { ++ dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ dp1->length[0] = 4; ++ dp1->length[1] = 0; ++ } ++ ++ if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE && ++ subtype == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) ++ { ++ grub_efi_hard_drive_device_path_t temp_hd; ++ grub_memcpy (&temp_hd, dp1, len); ++ if (temp_hd.signature_type == 0 && temp_hd.mbr_type >= 0x10) { ++ /* ++ * Apple Parttion Map CDs appear as hard drives with non-spec ++ * partition type fields. Fix them up. ++ */ ++ dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ dp1->length[0] = 4; ++ dp1->length[1] = 0; ++ } ++ } ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) ++ break; ++ ++ dp1 = GRUB_EFI_NEXT_DEVICE_PATH(dp1); ++ } ++ ++ drv = 0; ++ for (d = fd_devices; d; d = d->next, drv++) ++ { ++ if (! compare_device_paths (d->device_path, dp)) ++ { ++ *partition = 0xFFFFFF; ++ *drive = drv; ++ return 1; ++ } ++ } ++ ++ drv = cdrom_drive; ++ if (cd_devices && ! compare_device_paths (cd_devices->device_path, dp)) ++ { ++ *partition = 0xFFFFFF; ++ *drive = drv; ++ return 1; ++ } ++ ++ drv = 0x80; ++ for (d = hd_devices; d; d = d->next, drv++) ++ { ++ if (! compare_device_paths (d->device_path, dp)) ++ { ++ *partition = 0xFFFFFF; ++ *drive = drv; ++ return 1; ++ } ++ } ++ ++ devices = make_devices (); ++ ++ drv = 0x80; ++ found = 0; ++ for (d = hd_devices; d; d = d->next, drv++) ++ { ++ iterate_child_devices (devices, d, find_bdev); ++ if (found) ++ break; ++ } ++ ++ free_devices (devices); ++ ++ if (! found) ++ return 0; ++ ++ char buf[get_sector_size(drv)]; ++ part = 0xFFFFFF; ++ while (next_partition (drv, 0, &part, &part_type, ++ &partition_start, &partition_len, ++ &part_offset, &part_entry, ++ &part_extoffset, &gpt_offset, &gpt_count, ++ &gpt_size, buf)) ++ { ++ if (part_type ++ && partition_start == hd.partition_start) ++ { ++ *drive = drv; ++ *partition = part; ++ return 1; ++ } ++ } ++ ++ return 0; ++} ++ ++int ++check_device (const char *device) ++{ ++ grub_efi_device_path_t *dp; ++ ++ dp = device_path_from_utf8(device); ++ if (dp == NULL) ++ return 0; ++ ++ grub_free(dp); ++ return 1; ++} ++ ++static void ++swap_devices (struct grub_efidisk_data *d0, ++ struct grub_efidisk_data *d1) ++{ ++ struct grub_efidisk_data tmp; ++ ++ if (!d0 || !d1) ++ return; ++ ++ memcpy(&tmp, d1, sizeof(*d1)); ++ ++ memcpy(&d0->handle, &d1->handle, sizeof(d1->handle)); ++ d0->device_path = d1->device_path; ++ d0->last_device_path = d1->last_device_path; ++ d0->block_io = d1->block_io; ++ d0->disk_io = d1->disk_io; ++ ++ memcpy(d1->handle, tmp.handle, sizeof(tmp.handle)); ++ d1->device_path = tmp.device_path; ++ d1->last_device_path = tmp.last_device_path; ++ d1->block_io = tmp.block_io; ++ d1->disk_io = tmp.disk_io; ++} ++ ++static int ++compare_hd_device_paths(grub_efi_hard_drive_device_path_t *hd0, ++ grub_efi_hard_drive_device_path_t *hd1) ++{ ++ grub_efi_uint64_t x; ++ int sigsize; ++ ++ if ((x = hd1->partition_number - hd0->partition_number)) ++ return x; ++ ++ if ((x = hd1->partition_start - hd0->partition_start)) ++ return x; ++ ++ ++ if ((x = hd1->partition_size - hd0->partition_size)) ++ return x; ++ ++ if ((x = hd1->signature_type - hd0->signature_type)) ++ return x; ++ ++ switch (hd0->signature_type) ++ { ++ case 1: ++ sigsize = 4; ++ break; ++ case 2: ++ sigsize = 16; ++ break; ++ default: ++ sigsize = 0; ++ break; ++ } ++ x = grub_memcmp((char *)hd0->partition_signature, ++ (char *)hd1->partition_signature, sigsize); ++ return x; ++} ++ ++static grub_efi_device_path_t * ++get_parent_of_disk(grub_efi_device_path_t *hd) ++{ ++ grub_efi_uintn_t num_handles; ++ grub_efi_handle_t *handles; ++ grub_efi_handle_t *handle; ++ grub_efi_device_path_t *ret; ++ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, ++ &simple_file_system_guid, ++ 0, &num_handles); ++ for (handle = handles; num_handles--; handle++) ++ { ++ grub_efi_device_path_t *fsdp, *hddp; ++ ++ fsdp = grub_efi_get_device_path (*handle); ++ if (!fsdp) ++ continue; ++ hddp = find_last_device_path(fsdp); ++ ++ if (compare_hd_device_paths((grub_efi_hard_drive_device_path_t *)hddp, ++ (grub_efi_hard_drive_device_path_t *)hd) == 0) ++ { ++ grub_efi_device_path_t *p; ++ ret = duplicate_device_path((grub_efi_device_path_t *)fsdp); ++ if (!ret) ++ return NULL; ++ for (p = ret; ; p = GRUB_EFI_NEXT_DEVICE_PATH(p)) ++ { ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH(p)) ++ break; ++ if ((GRUB_EFI_DEVICE_PATH_TYPE(p) == ++ GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) ++ && (GRUB_EFI_DEVICE_PATH_SUBTYPE(p) == ++ GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)) ++ { ++ p->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ p->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ p->length[0] = 4; ++ p->length[1] = 0; ++ break; ++ } ++ } ++ return ret; ++ } ++ } ++ return NULL; ++} ++ ++void ++assign_device_name (int drive, const char *device) ++{ ++ grub_efi_device_path_t *dp0, *dp1; ++ struct grub_efidisk_data *devices; ++ struct grub_efidisk_data *d, *d0 = NULL, *d1 = NULL; ++ int n = -1; ++ ++ dp0 = device_path_from_utf8(device); ++ if (!dp0) ++ return; ++ ++ dp1 = get_parent_of_disk(dp0); ++ grub_free(dp0); ++ if (!dp1) ++ return; ++ ++ if (drive & 0x80) ++ { ++ drive -= 0x80; ++ devices = hd_devices; ++ } ++ else ++ { ++ devices = cd_devices; ++ drive -= 0x100; ++ } ++ ++ for (d = devices; d; d = d->next) ++ { ++ if (!d->device_path) ++ continue; ++ ++ if (++n == drive) ++ d0 = d; ++ ++ int x; ++ if (!(x = compare_device_paths(dp1, d->device_path))) ++ d1 = d; ++ ++ if (d0 && d1) ++ { ++ /* if they're the same node, that just means it's already at ++ * the right position. */ ++ if (d0 != d1) ++ { ++ swap_devices(d0, d1); ++ grub_free(dp1); ++ return; ++ } ++ } ++ } ++ grub_free(dp1); ++} +diff --git a/efi/efidp.c b/efi/efidp.c +new file mode 100644 +index 0000000..d8ca03d +--- /dev/null ++++ b/efi/efidp.c +@@ -0,0 +1,999 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2010 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++/* Duplicate a device path. */ ++grub_efi_device_path_t * ++duplicate_device_path (const grub_efi_device_path_t *dp) ++{ ++ grub_efi_device_path_t *p; ++ grub_size_t total_size = 0; ++ ++ for (p = (grub_efi_device_path_t *) dp; ++ ; ++ p = GRUB_EFI_NEXT_DEVICE_PATH (p)) ++ { ++ total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p); ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p)) ++ break; ++ } ++ ++ p = grub_malloc (total_size); ++ if (! p) ++ return 0; ++ ++ grub_memcpy (p, dp, total_size); ++ return p; ++} ++ ++/* Return the device path node right before the end node. */ ++grub_efi_device_path_t * ++find_last_device_path (const grub_efi_device_path_t *dp) ++{ ++ grub_efi_device_path_t *next, *p; ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) ++ return 0; ++ ++ for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p); ++ ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next); ++ p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next)) ++ ; ++ ++ return p; ++} ++ ++/* Return the parent device path node. Must be freed */ ++grub_efi_device_path_t * ++find_parent_device_path (const grub_efi_device_path_t *dp) ++{ ++ grub_efi_device_path_t *final, *dup; ++ ++ dup = duplicate_device_path(dp); ++ final = find_last_device_path(dup); ++ ++ final->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ final->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ ++ return dup; ++} ++ ++/* Compare device paths. */ ++int ++compare_device_paths (const grub_efi_device_path_t *dp1, ++ const grub_efi_device_path_t *dp2) ++{ ++ if (! dp1 || ! dp2) ++ /* Return non-zero. */ ++ return 1; ++ ++ while (1) ++ { ++ grub_efi_uint8_t type1, type2; ++ grub_efi_uint8_t subtype1, subtype2; ++ grub_efi_uint16_t len1, len2; ++ int ret; ++ ++ type1 = GRUB_EFI_DEVICE_PATH_TYPE (dp1); ++ type2 = GRUB_EFI_DEVICE_PATH_TYPE (dp2); ++ ++ if (type1 != type2) ++ return (int) type2 - (int) type1; ++ ++ subtype1 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp1); ++ subtype2 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp2); ++ ++ if (subtype1 != subtype2) ++ return (int) subtype1 - (int) subtype2; ++ ++ len1 = GRUB_EFI_DEVICE_PATH_LENGTH (dp1); ++ len2 = GRUB_EFI_DEVICE_PATH_LENGTH (dp2); ++ ++ if (len1 != len2) ++ return (int) len1 - (int) len2; ++ ++ ret = grub_memcmp ((char *)dp1, (char *)dp2, len1); ++ if (ret != 0) ++ return ret; ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) ++ break; ++ ++ dp1 = (grub_efi_device_path_t *) ((char *) dp1 + len1); ++ dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2); ++ } ++ ++ return 0; ++} ++ ++/* Print the chain of Device Path nodes. This is mainly for debugging. */ ++void ++grub_efi_print_device_path (grub_efi_device_path_t *dp) ++{ ++ while (1) ++ { ++ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); ++ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ ++ switch (type) ++ { ++ case GRUB_EFI_END_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE: ++ grub_printf ("/EndEntire\n"); ++ //grub_putchar ('\n'); ++ break; ++ case GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE: ++ grub_printf ("/EndThis\n"); ++ //grub_putchar ('\n'); ++ break; ++ default: ++ grub_printf ("/EndUnknown(%x)\n", (unsigned) subtype); ++ break; ++ } ++ break; ++ ++ case GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_pci_device_path_t pci; ++ grub_memcpy (&pci, dp, len); ++ grub_printf ("/PCI(%x,%x)", ++ (unsigned) pci.function, (unsigned) pci.device); ++ } ++ break; ++ case GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_pccard_device_path_t pccard; ++ grub_memcpy (&pccard, dp, len); ++ grub_printf ("/PCCARD(%x)", ++ (unsigned) pccard.function); ++ } ++ break; ++ case GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_memory_mapped_device_path_t mmapped; ++ grub_memcpy (&mmapped, dp, len); ++ grub_printf ("/MMap(%x,%llx,%llx)", ++ (unsigned) mmapped.memory_type, ++ mmapped.start_address, ++ mmapped.end_address); ++ } ++ break; ++ case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_vendor_device_path_t vendor; ++ grub_memcpy (&vendor, dp, sizeof (vendor)); ++ grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", ++ (unsigned) vendor.vendor_guid.data1, ++ (unsigned) vendor.vendor_guid.data2, ++ (unsigned) vendor.vendor_guid.data3, ++ (unsigned) vendor.vendor_guid.data4[0], ++ (unsigned) vendor.vendor_guid.data4[1], ++ (unsigned) vendor.vendor_guid.data4[2], ++ (unsigned) vendor.vendor_guid.data4[3], ++ (unsigned) vendor.vendor_guid.data4[4], ++ (unsigned) vendor.vendor_guid.data4[5], ++ (unsigned) vendor.vendor_guid.data4[6], ++ (unsigned) vendor.vendor_guid.data4[7]); ++ } ++ break; ++ case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_controller_device_path_t controller; ++ grub_memcpy (&controller, dp, len); ++ grub_printf ("/Ctrl(%x)", ++ (unsigned) controller.controller_number); ++ } ++ break; ++ default: ++ grub_printf ("/UnknownHW(%x)", (unsigned) subtype); ++ break; ++ } ++ break; ++ ++ case GRUB_EFI_ACPI_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_acpi_device_path_t acpi; ++ grub_memcpy (&acpi, dp, len); ++ grub_printf ("/ACPI(%x,%x)", ++ (unsigned) acpi.hid, ++ (unsigned) acpi.uid); ++ } ++ break; ++ case GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_expanded_acpi_device_path_t eacpi; ++ grub_memcpy (&eacpi, dp, sizeof (eacpi)); ++ grub_printf ("/ACPI("); ++ ++ if (GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)[0] == '\0') ++ grub_printf ("%x,", (unsigned) eacpi.hid); ++ else ++ grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)); ++ ++ if (GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)[0] == '\0') ++ grub_printf ("%x,", (unsigned) eacpi.uid); ++ else ++ grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)); ++ ++ if (GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)[0] == '\0') ++ grub_printf ("%x)", (unsigned) eacpi.cid); ++ else ++ grub_printf ("%s)", GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)); ++ } ++ break; ++ default: ++ grub_printf ("/UnknownACPI(%x)", (unsigned) subtype); ++ break; ++ } ++ break; ++ ++ case GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_atapi_device_path_t atapi; ++ grub_memcpy (&atapi, dp, len); ++ grub_printf ("/ATAPI(%x,%x,%x)", ++ (unsigned) atapi.primary_secondary, ++ (unsigned) atapi.slave_master, ++ (unsigned) atapi.lun); ++ } ++ break; ++ case GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_scsi_device_path_t scsi; ++ grub_memcpy (&scsi, dp, len); ++ grub_printf ("/SCSI(%x,%x)", ++ (unsigned) scsi.pun, ++ (unsigned) scsi.lun); ++ } ++ break; ++ case GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_fibre_channel_device_path_t fc; ++ grub_memcpy (&fc, dp, len); ++ grub_printf ("/FibreChannel(%llx,%llx)", ++ fc.wwn, fc.lun); ++ } ++ break; ++ case GRUB_EFI_1394_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_1394_device_path_t firewire; ++ grub_memcpy (&firewire, dp, len); ++ grub_printf ("/1394(%llx)", firewire.guid); ++ } ++ break; ++ case GRUB_EFI_USB_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_usb_device_path_t usb; ++ grub_memcpy (&usb, dp, len); ++ grub_printf ("/USB(%x,%x)", ++ (unsigned) usb.parent_port_number, ++ (unsigned) usb.interface); ++ } ++ break; ++ case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_usb_class_device_path_t usb_class; ++ grub_memcpy (&usb_class, dp, len); ++ grub_printf ("/USBClass(%x,%x,%x,%x,%x)", ++ (unsigned) usb_class.vendor_id, ++ (unsigned) usb_class.product_id, ++ (unsigned) usb_class.device_class, ++ (unsigned) usb_class.device_subclass, ++ (unsigned) usb_class.device_protocol); ++ } ++ break; ++ case GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_i2o_device_path_t i2o; ++ grub_memcpy (&i2o, dp, len); ++ grub_printf ("/I2O(%x)", (unsigned) i2o.tid); ++ } ++ break; ++ case GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_mac_address_device_path_t mac; ++ grub_memcpy (&mac, dp, len); ++ grub_printf ("/MacAddr(%x:%x:%x:%x:%x:%x,%x)", ++ (unsigned) mac.mac_address[0], ++ (unsigned) mac.mac_address[1], ++ (unsigned) mac.mac_address[2], ++ (unsigned) mac.mac_address[3], ++ (unsigned) mac.mac_address[4], ++ (unsigned) mac.mac_address[5], ++ (unsigned) mac.if_type); ++ } ++ break; ++ case GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_ipv4_device_path_t ipv4; ++ grub_memcpy (&ipv4, dp, len); ++ grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)", ++ (unsigned) ipv4.local_ip_address[0], ++ (unsigned) ipv4.local_ip_address[1], ++ (unsigned) ipv4.local_ip_address[2], ++ (unsigned) ipv4.local_ip_address[3], ++ (unsigned) ipv4.remote_ip_address[0], ++ (unsigned) ipv4.remote_ip_address[1], ++ (unsigned) ipv4.remote_ip_address[2], ++ (unsigned) ipv4.remote_ip_address[3], ++ (unsigned) ipv4.local_port, ++ (unsigned) ipv4.remote_port, ++ (unsigned) ipv4.protocol, ++ (unsigned) ipv4.static_ip_address); ++ } ++ break; ++ case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_ipv6_device_path_t ipv6; ++ grub_memcpy (&ipv6, dp, len); ++ grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)", ++ (unsigned) ipv6.local_ip_address[0], ++ (unsigned) ipv6.local_ip_address[1], ++ (unsigned) ipv6.local_ip_address[2], ++ (unsigned) ipv6.local_ip_address[3], ++ (unsigned) ipv6.local_ip_address[4], ++ (unsigned) ipv6.local_ip_address[5], ++ (unsigned) ipv6.local_ip_address[6], ++ (unsigned) ipv6.local_ip_address[7], ++ (unsigned) ipv6.remote_ip_address[0], ++ (unsigned) ipv6.remote_ip_address[1], ++ (unsigned) ipv6.remote_ip_address[2], ++ (unsigned) ipv6.remote_ip_address[3], ++ (unsigned) ipv6.remote_ip_address[4], ++ (unsigned) ipv6.remote_ip_address[5], ++ (unsigned) ipv6.remote_ip_address[6], ++ (unsigned) ipv6.remote_ip_address[7], ++ (unsigned) ipv6.local_port, ++ (unsigned) ipv6.remote_port, ++ (unsigned) ipv6.protocol, ++ (unsigned) ipv6.static_ip_address); ++ } ++ break; ++ case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_infiniband_device_path_t ib; ++ grub_memcpy (&ib, dp, len); ++ grub_printf ("/InfiniBand(%x,%llx,%llx,%llx)", ++ (unsigned) ib.port_gid[0], /* XXX */ ++ ib.remote_id, ++ ib.target_port_id, ++ ib.device_id); ++ } ++ break; ++ case GRUB_EFI_UART_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_uart_device_path_t uart; ++ grub_memcpy (&uart, dp, len); ++ grub_printf ("/UART(%llu,%u,%x,%x)", ++ uart.baud_rate, ++ uart.data_bits, ++ uart.parity, ++ uart.stop_bits); ++ } ++ break; ++ case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_vendor_messaging_device_path_t vendor; ++ grub_memcpy (&vendor, dp, sizeof (vendor)); ++ grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", ++ (unsigned) vendor.vendor_guid.data1, ++ (unsigned) vendor.vendor_guid.data2, ++ (unsigned) vendor.vendor_guid.data3, ++ (unsigned) vendor.vendor_guid.data4[0], ++ (unsigned) vendor.vendor_guid.data4[1], ++ (unsigned) vendor.vendor_guid.data4[2], ++ (unsigned) vendor.vendor_guid.data4[3], ++ (unsigned) vendor.vendor_guid.data4[4], ++ (unsigned) vendor.vendor_guid.data4[5], ++ (unsigned) vendor.vendor_guid.data4[6], ++ (unsigned) vendor.vendor_guid.data4[7]); ++ } ++ break; ++ default: ++ grub_printf ("/UnknownMessaging(%x)", (unsigned) subtype); ++ break; ++ } ++ break; ++ ++ case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_hard_drive_device_path_t hd; ++ grub_memcpy (&hd, dp, len); ++ grub_printf ("/HD(%u,%llx,%llx,%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x)", ++ hd.partition_number, ++ hd.partition_start, ++ hd.partition_size, ++ (unsigned) hd.partition_signature[3], ++ (unsigned) hd.partition_signature[2], ++ (unsigned) hd.partition_signature[1], ++ (unsigned) hd.partition_signature[0], ++ (unsigned) hd.partition_signature[5], ++ (unsigned) hd.partition_signature[4], ++ (unsigned) hd.partition_signature[7], ++ (unsigned) hd.partition_signature[6], ++ (unsigned) hd.partition_signature[9], ++ (unsigned) hd.partition_signature[8], ++ (unsigned) hd.partition_signature[10], ++ (unsigned) hd.partition_signature[11], ++ (unsigned) hd.partition_signature[12], ++ (unsigned) hd.partition_signature[13], ++ (unsigned) hd.partition_signature[14], ++ (unsigned) hd.partition_signature[15]); ++ } ++ break; ++ case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_cdrom_device_path_t cd; ++ grub_memcpy (&cd, dp, len); ++ grub_printf ("/CD(%u,%llx,%llx)", ++ cd.boot_entry, ++ cd.partition_start, ++ cd.partition_size); ++ } ++ break; ++ case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_vendor_media_device_path_t vendor; ++ grub_memcpy (&vendor, dp, sizeof (vendor)); ++ grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", ++ (unsigned) vendor.vendor_guid.data1, ++ (unsigned) vendor.vendor_guid.data2, ++ (unsigned) vendor.vendor_guid.data3, ++ (unsigned) vendor.vendor_guid.data4[0], ++ (unsigned) vendor.vendor_guid.data4[1], ++ (unsigned) vendor.vendor_guid.data4[2], ++ (unsigned) vendor.vendor_guid.data4[3], ++ (unsigned) vendor.vendor_guid.data4[4], ++ (unsigned) vendor.vendor_guid.data4[5], ++ (unsigned) vendor.vendor_guid.data4[6], ++ (unsigned) vendor.vendor_guid.data4[7]); ++ } ++ break; ++ case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_file_path_device_path_t *fp; ++ grub_uint8_t buf[(len - 4) * 2 + 1]; ++ fp = (grub_efi_file_path_device_path_t *) dp; ++ *grub_utf16_to_utf8 (buf, fp->path_name, ++ (len - 4) / sizeof (grub_efi_char16_t)) ++ = '\0'; ++ grub_printf ("/File(%s)", buf); ++ } ++ break; ++ case GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_protocol_device_path_t proto; ++ grub_memcpy (&proto, dp, sizeof (proto)); ++ grub_printf ("/Protocol(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", ++ (unsigned) proto.guid.data1, ++ (unsigned) proto.guid.data2, ++ (unsigned) proto.guid.data3, ++ (unsigned) proto.guid.data4[0], ++ (unsigned) proto.guid.data4[1], ++ (unsigned) proto.guid.data4[2], ++ (unsigned) proto.guid.data4[3], ++ (unsigned) proto.guid.data4[4], ++ (unsigned) proto.guid.data4[5], ++ (unsigned) proto.guid.data4[6], ++ (unsigned) proto.guid.data4[7]); ++ } ++ break; ++ default: ++ grub_printf ("/UnknownMedia(%x)", (unsigned) subtype); ++ break; ++ } ++ break; ++ ++ case GRUB_EFI_BIOS_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_bios_device_path_t bios; ++ grub_memcpy (&bios, dp, sizeof (bios)); ++ grub_printf ("/BIOS(%x,%x,%s)", ++ (unsigned) bios.device_type, ++ (unsigned) bios.status_flags, ++ (char *) (dp + 1)); ++ } ++ break; ++ default: ++ grub_printf ("/UnknownBIOS(%x)", (unsigned) subtype); ++ break; ++ } ++ break; ++ ++ default: ++ grub_printf ("/UnknownType(%x,%x)\n", ++ (unsigned) type, ++ (unsigned) subtype); ++ return; ++ break; ++ } ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) ++ break; ++ ++ dp = (grub_efi_device_path_t *) ((char *) dp + len); ++ } ++} ++ ++static inline int ++dpname_matches(char *str, char *candidate) ++{ ++ grub_size_t clen = grub_strlen(candidate); ++ char scratch[clen + 2]; ++ int rc; ++ ++ grub_strncpy(scratch, candidate, clen); ++ scratch[clen+1] = '\0'; ++ if (scratch[clen-1] == '$') ++ { ++ scratch[--clen] = '\0'; ++ rc = !grub_strncasecmp(str, scratch, clen); ++ return rc; ++ } ++ ++ grub_strncpy(scratch+clen, "(", 2); ++ clen = grub_strlen(scratch); ++ rc = !grub_strncasecmp(str, scratch, clen); ++ return rc; ++} ++ ++static void ++finish_param_parse(char *pos, char **end, char *tmp) ++{ ++ if (!pos || !end || !tmp) ++ return; ++ ++ if (*end) ++ **end = *tmp; ++} ++ ++static char * ++get_next_param(char *pos, char **end, char *tmp) ++{ ++ char *comma = NULL; ++ char *openparen = NULL; ++ char *closeparen = NULL; ++ ++ if (!pos || !end || !tmp) ++ return NULL; ++ ++ if (*end) ++ **end = *tmp; ++ ++ openparen = grub_strchr(pos, '('); ++ if (openparen && *openparen) ++ { ++ pos = grub_strnchr(openparen + 1, ' '); ++ comma = grub_strchr(pos, ','); ++ closeparen = grub_strchr(pos, ')'); ++ ++ if (comma && *comma) ++ { ++ *tmp = *comma; ++ *comma = '\0'; ++ *end = comma; ++ } ++ else if (closeparen && *closeparen) ++ { ++ *tmp = *closeparen; ++ *closeparen = '\0'; ++ *end = closeparen; ++ } ++ return pos; ++ } ++ ++ comma = grub_strchr(pos, ','); ++ if (comma && *comma) ++ { ++ pos = grub_strnchr(comma + 1, ' '); ++ comma = grub_strchr(pos, ','); ++ closeparen = grub_strchr(pos, ')'); ++ ++ if (comma && *comma) ++ { ++ *tmp = *comma; ++ *comma = '\0'; ++ *end = comma; ++ } ++ else if (closeparen && *closeparen) ++ { ++ *tmp = *closeparen; ++ *closeparen = '\0'; ++ *end = closeparen; ++ } ++ return pos; ++ } ++ ++ closeparen = grub_strchr(pos, ')'); ++ if (closeparen && *closeparen) ++ pos = grub_strnchr(closeparen + 1, ' '); ++ ++ return pos; ++} ++ ++struct generic_device_path ++ { ++ grub_efi_uint8_t type; ++ grub_efi_uint8_t subtype; ++ grub_efi_uint16_t length; ++ } __attribute__((packed)); ++ ++struct hd_media_device_path ++ { ++ grub_efi_uint8_t type; ++ grub_efi_uint8_t subtype; ++ grub_efi_uint16_t length; ++ grub_efi_uint32_t partition; ++ grub_efi_uint64_t startlba; ++ grub_efi_uint64_t size; ++ grub_efi_uint8_t signature[16]; ++ grub_efi_uint8_t mbr_type; ++ grub_efi_uint8_t signature_type; ++ } __attribute__((packed)); ++ ++static inline int ++parse_device_path_component(const char *orig_str, void *data) ++{ ++ int orig_str_len = strlen(orig_str) + 1; ++ char str[orig_str_len]; ++ char tmp; ++ char *pos = str; ++ int ret = 0; ++ ++ grub_strcpy(str, orig_str); ++ if (dpname_matches(str, "pci")) ++ { ++ } ++ else if (dpname_matches(str, "pccard")) ++ { ++ } ++ else if (dpname_matches(str, "mmap")) ++ { ++ } ++ else if (dpname_matches(str, "ctrl")) ++ { ++ } ++ else if (dpname_matches(str, "acpi")) ++ { ++ } ++ /* XXX what about _ADR? */ ++ /* messaging device paths */ ++ else if (dpname_matches(str, "atapi")) ++ { ++ } ++ else if (dpname_matches(str, "scsi")) ++ { ++ } ++ else if (dpname_matches(str, "fibrechannel")) ++ { ++ } ++ else if (dpname_matches(str, "1394")) ++ { ++ } ++ else if (dpname_matches(str, "usb")) ++ { ++ } ++ else if (dpname_matches(str, "sata")) ++ { ++ } ++ /* XXX what about usb-wwid */ ++ /* XXX what about lun */ ++ else if (dpname_matches(str, "usbclass")) ++ { ++ } ++ else if (dpname_matches(str, "i2o")) ++ { ++ } ++ else if (dpname_matches(str, "macaddr")) ++ { ++ } ++ else if (dpname_matches(str, "ipv4")) ++ { ++ } ++ else if (dpname_matches(str, "ipv6")) ++ { ++ } ++ /* XXX what about vlan */ ++ else if (dpname_matches(str, "infiniband")) ++ { ++ } ++ else if (dpname_matches(str, "uart")) ++ { ++ } ++ else if (dpname_matches(str, "uartflowctrl")) ++ { ++ } ++ else if (dpname_matches(str, "sas")) ++ { ++ } ++ else if (dpname_matches(str, "iscsi")) ++ { ++ } ++ /* media device paths */ ++ else if (dpname_matches(str, "hd")) ++ { ++ /* these look roughly like: ++ * HD(Partition,Type,Signature,Start, Size) ++ * but: ++ * - type may be optional. 1 or "MBR" means MBR. 2 or "GPT" means GPT. ++ * - start and size are optional ++ * - there can be random spaces ++ */ ++ struct hd_media_device_path hddp; ++ unsigned long tmpul; ++ char *end = NULL, c; ++ char tmps[19] = "0x"; ++ char *tmpsp; ++ ++ ret = 42; ++ ++ hddp.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; ++ hddp.subtype = GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE; ++ hddp.length = ret; ++ ++ //pos += grub_strcspn(pos, '('); ++ pos = get_next_param(pos, &end, &c); ++ if (!*pos) ++ { ++broken_hd: ++ finish_param_parse(pos, &end, &c); ++ return 0; ++ } ++ grub_strncpy(tmps+2, pos, 16); ++ tmps[18] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ hddp.partition = tmpul; ++ ++ pos = get_next_param(pos, &end, &c); ++ if (!*pos) ++ goto broken_hd; ++ grub_strcpy(tmps+2, pos); ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ hddp.startlba = tmpul; ++ ++ pos = get_next_param(pos, &end, &c); ++ if (!*pos) ++ goto broken_hd; ++ grub_strcpy(tmps+2, pos); ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ hddp.size = tmpul; ++ ++ pos = get_next_param(pos, &end, &c); ++ if (!*pos) ++ goto broken_hd; ++ if (!grub_strcmp(pos, "None")) ++ { ++ hddp.signature_type = 0; ++ grub_memset(hddp.signature, '\0', sizeof(hddp.signature)); ++ } ++ else if (grub_strnlen(pos, 36) == 8) ++ { ++ grub_efi_uint32_t tmpu32; ++ grub_strncpy(tmps+2, pos, 8); ++ tmps[10] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu32 = tmpul; ++ hddp.signature_type = 1; ++ grub_memcpy(hddp.signature, &tmpu32, sizeof(tmpu32)); ++ } ++ else if (grub_strnlen(pos, 36) == 36) ++ { ++ grub_efi_uint32_t tmpu32; ++ grub_efi_uint16_t tmpu16; ++ grub_efi_uint8_t tmpu8; ++ ++ grub_strncpy(tmps+2, pos, 8); ++ tmps[10] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu32 = tmpul; ++ grub_memcpy(hddp.signature, &tmpu32, sizeof(tmpu32)); ++ ++ grub_strncpy(tmps+2, pos+9, 4); ++ tmps[6] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu16 = tmpul; ++ grub_memcpy(hddp.signature + 4, &tmpu16, sizeof(tmpu16)); ++ ++ grub_strncpy(tmps+2, pos+14, 4); ++ tmps[6] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu16 = tmpul; ++ grub_memcpy(hddp.signature + 6, &tmpu16, sizeof(tmpu16)); ++ ++ /* these are displayed like a u16, but they're a u8. thanks. */ ++ grub_strncpy(tmps+2, pos+19, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 8, &tmpu8, sizeof(tmpu8)); ++ grub_strncpy(tmps+2, pos+21, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 9, &tmpu8, sizeof(tmpu8)); ++ ++ grub_strncpy(tmps+2, pos+24, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 10, &tmpu8, sizeof(tmpu8)); ++ ++ grub_strncpy(tmps+2, pos+26, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 11, &tmpu8, sizeof(tmpu8)); ++ ++ grub_strncpy(tmps+2, pos+28, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 12, &tmpu8, sizeof(tmpu8)); ++ ++ grub_strncpy(tmps+2, pos+30, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 13, &tmpu8, sizeof(tmpu8)); ++ ++ grub_strncpy(tmps+2, pos+32, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 14, &tmpu8, sizeof(tmpu8)); ++ ++ grub_strncpy(tmps+2, pos+34, 2); ++ tmps[4] = '\0'; ++ tmpsp = tmps; ++ safe_parse_maxulong(&tmpsp, &tmpul); ++ tmpu8 = tmpul; ++ grub_memcpy(hddp.signature + 15, &tmpu8, sizeof(tmpu8)); ++ ++ hddp.signature_type = 2; ++ } ++ else ++ goto broken_hd; ++ ++ hddp.mbr_type = hddp.signature_type; ++ ++ if (data) ++ grub_memcpy(data, &hddp, sizeof(hddp)); ++ } ++ else if (dpname_matches(str, "cd")) ++ { ++ } ++ else if (dpname_matches(str, "file")) ++ { ++ } ++ else if (dpname_matches(str, "protocol")) ++ { ++ } ++ /* what about piwg firmware file? */ ++ /* what about piwg firmware volume? */ ++ /* what about relative offset media */ ++ else if (dpname_matches(str, "bios")) ++ { ++ } ++ /* This is the end beautiful friend */ ++ else if (dpname_matches(str, "EndEntire$")) ++ { ++ struct generic_device_path gdp = { ++ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, ++ .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE, ++ .length = 4 ++ }; ++ ret = 4; ++ if (data) ++ grub_memmove(data, &gdp, sizeof(gdp)); ++ } ++ else if (dpname_matches(str, "EndThis$")) ++ { ++ struct generic_device_path gdp = { ++ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, ++ .subtype = GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE, ++ .length = 4 ++ }; ++ ret = 4; ++ if (data) ++ grub_memmove(data, &gdp, sizeof(gdp)); ++ } ++ else if (dpname_matches(str, "EndUnknown$")) ++ { ++ struct generic_device_path gdp = { ++ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, ++ .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE, ++ .length = 4 ++ }; ++ ret = 4; ++ if (data) ++ grub_memmove(data, &gdp, sizeof(gdp)); ++ } ++ /* handle anything we didn't recognize */ ++ else if (dpname_matches(str, "vendor")) ++ { ++ /* needs to handle: ++ * 1) hw vendor ++ * 2) messaging vendor ++ * 3) media vendor ++ */ ++ } ++ else ++ { ++ } ++ ++ return ret; ++} ++ ++grub_efi_device_path_t * ++device_path_from_utf8 (const char *device) ++{ ++ grub_size_t device_len; ++ grub_efi_device_path_t *dp = NULL; ++ ++ device_len = parse_device_path_component(device, dp); ++ device_len += parse_device_path_component("EndEntire", dp); ++ dp = grub_malloc(device_len); ++ if (!dp) ++ return NULL; ++ device_len = parse_device_path_component(device, dp); ++ device_len += parse_device_path_component("EndEntire", ++ (void *)((unsigned long)dp + device_len)); ++ ++ ++ return dp; ++} +diff --git a/efi/efigraph.c b/efi/efigraph.c +new file mode 100644 +index 0000000..6905e07 +--- /dev/null ++++ b/efi/efigraph.c +@@ -0,0 +1,1501 @@ ++/* efigraph.c - EFI "graphics output" support for GRUB/EFI */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright 2007 Red Hat, Inc. ++ * Copyright (C) 2007 Intel Corp. ++ * Copyright (C) 2001,2002 Red Hat, Inc. ++ * Portions copyright (C) 2000 Conectiva, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifdef SUPPORT_GRAPHICS ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "graphics.h" ++#include "xpm.h" ++ ++#define dbgdelay(_f, _l) ({\ ++ if (debug_graphics) { \ ++ do { \ ++ grub_efi_stall(1000); \ ++ } while (console_getkey() < 0); \ ++ } \ ++ }) ++ ++#define dprintf(format, args...) ({ \ ++ if (debug_graphics) { \ ++ struct term_entry *_tt = current_term; \ ++ current_term = term_table; \ ++ grub_printf(format, ##args); \ ++ current_term = _tt; \ ++ } \ ++ }) ++ ++struct grub_pixel_info ++{ ++ char depth_bits; ++ char depth_bytes; ++ unsigned char red_size; ++ unsigned char red_pos; ++ unsigned char green_size; ++ unsigned char green_pos; ++ unsigned char blue_size; ++ unsigned char blue_pos; ++ unsigned char reserved_size; ++ unsigned char reserved_pos; ++ int line_length; ++}; ++ ++typedef struct grub_pixel_info grub_pixel_info_t; ++ ++ ++static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID; ++static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; ++ ++#ifndef MIN ++#define MIN(x,y) ( ((x) < (y)) ? (x) : (y)) ++#endif ++#ifndef MAX ++#define MAX(x,y) ( ((x) < (y)) ? (y) : (x)) ++#endif ++ ++#define pixel_equal(x,y) ((x).bgrr.red == (y).bgrr.red && \ ++ (x).bgrr.green == (y).bgrr.green && \ ++ (x).bgrr.blue == (y).bgrr.blue && \ ++ (x).bgrr.reserved == (y).bgrr.reserved) ++ ++struct video_mode { ++ grub_efi_uint32_t number; ++ grub_efi_uintn_t size; ++ grub_efi_graphics_output_mode_information_t *info; ++}; ++ ++#define MAX_PALETTE 16 ++struct eg { ++ struct graphics_backend *backend; ++ grub_efi_graphics_output_t *output_intf; ++ struct video_mode **modes; ++ int max_mode; ++ grub_efi_uint32_t text_mode; ++ grub_efi_uint32_t graphics_mode; ++ grub_pixel_info_t pixel_info; ++ enum { TEXT, GRAPHICS } current_mode; ++ ++ position_t screen_size; ++ position_t screen_pos; ++ ++ struct bltbuf *background; ++ ++ grub_efi_graphics_output_pixel_t palette[MAX_PALETTE + 1]; ++}; ++ ++#define RGB(r,g,b) { .bgrr.red = r, .bgrr.green = g, .bgrr.blue = b } ++ ++static grub_efi_graphics_output_pixel_t cga_colors[] = { ++ RGB(0x00,0x00,0x00), // 0 Black ++ RGB(0x7f,0x00,0x00), // 1 Dark Red ++ RGB(0x00,0x7f,0x00), // 2 Dark Green ++ RGB(0x7f,0x7f,0x00), // 3 Dark Yellow ++ RGB(0x00,0x00,0x7f), // 4 Dark Blue ++ RGB(0x7f,0x00,0x7f), // 5 Dark Magenta ++ RGB(0x00,0x7f,0x7f), // 6 Dark Cyan ++ RGB(0xc0,0xc0,0xc0), // 7 Light Grey ++ RGB(0x7f,0x7f,0x7f), // 8 Dark Grey ++ RGB(0xff,0x00,0x00), // 9 Red ++ RGB(0x00,0xff,0x00), // 10 Green ++ RGB(0xff,0xff,0x00), // 11 Yellow ++ RGB(0x00,0x00,0xff), // 12 Blue ++ RGB(0xff,0x00,0xff), // 13 Magenta ++ RGB(0x00,0xff,0xff), // 14 Cyan ++ RGB(0xff,0xff,0xff), // 15 White ++ RGB(0xff,0xff,0xff), // 16 Also white ;) ++}; ++ ++static const int n_cga_colors = sizeof (cga_colors) / sizeof (cga_colors[0]); ++ ++static void ++find_bits (unsigned long mask, unsigned char *first, ++ unsigned char* len) ++{ ++ unsigned char bit_pos = 0, bit_len = 0; ++ *first =0; ++ *len = 0; ++ if (mask == 0) ++ return; ++ while (! (mask & 0x1)) { ++ mask = mask >> 1; ++ bit_pos++; ++ } ++ while (mask & 0x1) { ++ mask = mask >> 1; ++ bit_len++; ++ } ++ *first = bit_pos; ++ *len = bit_len; ++} ++ ++static grub_efi_graphics_output_mode_information_t * ++get_graphics_mode_info_for_mode(struct eg *eg, int mode) ++{ ++ int i; ++ ++ for (i = 0; i < eg->max_mode; i++) { ++ if (eg->modes[i] == NULL) ++ continue; ++ if (eg->modes[i]->number == mode) ++ return eg->modes[i]->info; ++ } ++ return NULL; ++} ++ ++static grub_efi_graphics_output_mode_information_t * ++get_graphics_mode_info(struct eg *eg) ++{ ++ return get_graphics_mode_info_for_mode(eg, eg->graphics_mode); ++} ++ ++static void ++print_mode_info(struct video_mode *mode) ++{ ++ grub_efi_graphics_output_mode_information_t *info = mode->info; ++ dprintf("mode %d (%dx%d, pitch %d, ", ++ mode->number, ++ info->horizontal_resolution, ++ info->vertical_resolution, ++ info->pixels_per_scan_line); ++ switch(info->pixel_format) { ++ case GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR: ++ dprintf("rgbr 8bpc"); ++ break; ++ case GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR: ++ dprintf("bgrr 8bpc"); ++ break; ++ case GRUB_EFI_PIXEL_BIT_MASK: ++ dprintf("bitmask color"); ++ break; ++ case GRUB_EFI_PIXEL_BLT_ONLY: ++ dprintf("blt only"); ++ break; ++ } ++ dprintf(")\n"); ++ if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { ++ dprintf("red: %08x green: %08x blue: %08x res: %08x\n", ++ info->pixel_information.red_mask, ++ info->pixel_information.green_mask, ++ info->pixel_information.blue_mask, ++ info->pixel_information.reserved_mask); ++ } ++} ++ ++static void ++set_kernel_params(struct graphics_backend *backend, ++ struct linux_kernel_params *params) ++{ ++ struct eg *eg; ++ ++ if (!backend || !backend->priv) ++ return; ++ ++ eg = backend->priv; ++ grub_efi_graphics_output_t *gop_intf = NULL; ++ grub_efi_graphics_output_mode_t *gop_mode = NULL; ++ grub_efi_status_t efi_status = GRUB_EFI_SUCCESS; ++ grub_efi_graphics_output_mode_information_t *gop_info = NULL; ++ grub_efi_uintn_t size; ++ ++ gop_intf = grub_efi_locate_protocol (&graphics_output_guid, NULL); ++ if (gop_intf == NULL) ++ return; ++ ++ gop_mode = gop_intf->mode; ++ ++ efi_status = Call_Service_4 (gop_intf->query_mode, ++ gop_intf, gop_mode->mode, &size, &gop_info); ++ ++ ++ if (efi_status == GRUB_EFI_SUCCESS) { ++ /* No VBE on EFI. */ ++ params->lfb_width = gop_info->horizontal_resolution; ++ params->lfb_height = gop_info->vertical_resolution; ++ params->lfb_base = gop_mode->frame_buffer_base; ++ params->lfb_size = gop_mode->frame_buffer_size; ++ params->lfb_pages = 1; ++ params->vesapm_segment = 0; ++ params->vesapm_offset = 0; ++ params->vesa_attrib = 0; ++ if (gop_info->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) { ++ params->lfb_depth = 32; ++ params->red_mask_size = 8; ++ params->red_field_pos = 0; ++ params->green_mask_size = 8; ++ params->green_field_pos = 8; ++ params->blue_mask_size = 8; ++ params->blue_field_pos = 16; ++ params->reserved_mask_size = 8; ++ params->reserved_field_pos = 24; ++ params->lfb_line_len = gop_info->pixels_per_scan_line * 4; ++ } else if (gop_info->pixel_format == ++ GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) { ++ params->lfb_depth = 32; ++ params->red_mask_size = 8; ++ params->red_field_pos = 16; ++ params->green_mask_size = 8; ++ params->green_field_pos = 8; ++ params->blue_mask_size = 8; ++ params->blue_field_pos = 0; ++ params->reserved_mask_size = 8; ++ params->reserved_field_pos = 24; ++ params->lfb_line_len = gop_info->pixels_per_scan_line * 4; ++ } else if (gop_info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { ++ find_bits (gop_info->pixel_information.red_mask, ++ ¶ms->red_field_pos, ¶ms->red_mask_size); ++ find_bits (gop_info->pixel_information.green_mask, ++ ¶ms->green_field_pos, ¶ms->green_mask_size); ++ find_bits (gop_info->pixel_information.blue_mask, ++ ¶ms->blue_field_pos, ¶ms->blue_mask_size); ++ find_bits (gop_info->pixel_information.reserved_mask, ++ ¶ms->reserved_field_pos, ¶ms->reserved_mask_size); ++ params->lfb_depth = params->red_mask_size ++ + params->green_mask_size ++ + params->blue_mask_size ++ + params->reserved_mask_size; ++ params->lfb_line_len = ++ (gop_info->pixels_per_scan_line * params->lfb_depth) / 8; ++ } else { ++ params->lfb_depth = 4; ++ params->red_mask_size = 0; ++ params->red_field_pos = 0; ++ params->green_mask_size = 0; ++ params->green_field_pos = 0; ++ params->blue_mask_size = 0; ++ params->blue_field_pos = 0; ++ params->reserved_mask_size = 0; ++ params->reserved_field_pos = 0; ++ params->lfb_line_len = params->lfb_width / 2; ++ } ++#if 0 ++ params->video_cursor_x = 0; ++ params->video_cursor_y = 0; ++ params->video_page = 0; ++ params->video_mode = 0; ++ params->video_width = 0; ++ params->video_ega_bx = 0; ++ params->video_height = 0; ++ params->have_vga = 0x70; ++ params->font_size = 0; ++#else ++ params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column; ++ params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row; ++ params->video_page = 0; /* ??? */ ++ params->video_mode = grub_efi_system_table->con_out->mode->mode; ++ params->video_width = (grub_console_getwh () >> 8); ++ params->video_ega_bx = 0; ++ params->video_height = (grub_console_getwh () & 0xff); ++ params->have_vga = VIDEO_TYPE_EFI; ++ params->font_size = 16; /* XXX */ ++#endif ++ } ++} ++ ++static void ++pixel_to_rgb(grub_efi_graphics_output_pixel_t *pixel, ++ int *red, int *green, int *blue) ++{ ++ *red = pixel->bgrr.red; ++ *green = pixel->bgrr.green; ++ *blue = pixel->bgrr.blue; ++} ++ ++static void ++rgb_to_pixel(int red, int green, int blue, ++ grub_efi_graphics_output_pixel_t *pixel) ++{ ++ pixel->bgrr.red = red; ++ pixel->bgrr.green = green; ++ pixel->bgrr.blue = blue; ++} ++ ++static void ++position_to_phys(struct eg *eg, position_t *virt, position_t *phys) ++{ ++ phys->x = virt->x + eg->screen_pos.x; ++ phys->y = virt->y + eg->screen_pos.y; ++} ++ ++static int ++abs_paddr(struct eg *eg, position_t *virt) ++{ ++ position_t phys; ++ position_to_phys(eg, virt, &phys); ++ return phys.x + phys.y * eg->screen_size.x; ++} ++ ++struct bltbuf { ++ grub_efi_uintn_t width; ++ grub_efi_uintn_t height; ++ grub_efi_graphics_output_pixel_t pixbuf[]; ++}; ++ ++static struct bltbuf *alloc_bltbuf(grub_efi_uintn_t width, ++ grub_efi_uintn_t height) ++{ ++ struct bltbuf *buf = NULL; ++ grub_efi_uintn_t pixbuf_size = width * height * ++ sizeof (grub_efi_graphics_output_pixel_t); ++ ++ if (!(buf = grub_malloc(sizeof(buf->width) + sizeof(buf->height) + ++ pixbuf_size))) ++ return NULL; ++ ++ buf->width = width; ++ buf->height = height; ++ grub_memset(buf->pixbuf, '\0', pixbuf_size); ++ return buf; ++} ++ ++ ++static void ++hw_blt_pos_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, ++ position_t *bltpos, position_t *bltsz, position_t *pos) ++{ ++ position_t phys; ++ ++ position_to_phys(eg, pos, &phys); ++ ++ Call_Service_10(eg->output_intf->blt, eg->output_intf, (void *)bltbuf->pixbuf, ++ GRUB_EFI_BLT_BUFFER_TO_VIDEO, ++ bltpos->x, bltpos->y, ++ phys.x, phys.y, ++ bltsz->x, bltsz->y, ++ 0); ++} ++ ++static void ++blt_pos_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, ++ position_t *bltpos, position_t *bltsz, position_t *pos) ++{ ++ grub_efi_graphics_output_mode_information_t *info = get_graphics_mode_info(eg); ++ grub_efi_graphics_output_pixel_t *pixel; ++ position_t phys; ++ const int pxlstride = info->pixels_per_scan_line; ++ const int bytestride = pxlstride * sizeof (*pixel); ++ ++ position_to_phys(eg, pos, &phys); ++ ++ if (info->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY || 1) { ++ hw_blt_pos_to_screen_pos(eg, bltbuf, bltpos, bltsz, pos); ++#if 0 ++ } else if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { ++ int y; ++ grub_pixel_info_t *pinfo = &eg->pixel_info; ++ const int maxpixels = ++ MIN(info->horizontal_resolution - pos->x, bltsz->x); ++ ++ for (y = bltpos->y; y < bltpos->y + bltsz->y; y++, phys.y++) { ++ char raw_pixels[maxpixels * pinfo->depth_bytes]; ++ char *fb = (char *)(unsigned long)eg->output_intf->mode->frame_buffer_base; ++ int x; ++ ++ pixel = (void *)&bltbuf->pixbuf[y * bltbuf->width + bltpos->x]; ++ fb += phys.y * pinfo->line_length + phys.x * pinfo->depth_bytes; ++ ++ for (x = 0; x < maxpixels; x++) { ++ char depth_bytes = pinfo->depth_bytes; ++ char *raw_pixel = raw_pixels + x * depth_bytes; ++ ++ int red, green, blue, color; ++ char *colorp; ++ ++#if 0 ++ red = pixel[x].bgrr.red & 0x3f; ++ green = pixel[x].bgrr.green & 0x3f; ++ blue = pixel[x].bgrr.blue & 0x3f; ++ red = red * ((1 << pinfo->red_size) - 1) / 0x3f; ++ green = green * ((1 << pinfo->green_size) - 1) / 0x3f; ++ blue = blue * ((1 << pinfo->blue_size) - 1) / 0x3f; ++#else ++ red = pixel[x].bgrr.red; ++ green = pixel[x].bgrr.green; ++ blue = pixel[x].bgrr.blue; ++ ++ red >>= 8 - pinfo->red_size; ++ green >>= 8 - pinfo->green_size; ++ blue >>= 8 - pinfo->blue_size; ++#endif ++ ++ color = (red << pinfo->red_pos) | ++ (green << pinfo->green_pos) | ++ (blue << pinfo->blue_pos); ++ colorp = (void *)&color; ++ while (depth_bytes--) ++ *raw_pixel++ = *colorp++; ++ } ++ memmove(fb, raw_pixels, maxpixels * pinfo->depth_bytes); ++ } ++#endif ++ } else { ++ int y; ++ grub_pixel_info_t *pinfo = &eg->pixel_info; ++ const int maxpixels = ++ MIN(info->horizontal_resolution - pos->x, bltsz->x); ++ ++ //char *line = &fb[phys.y * bytestride + phys.x * sizeof(*pixel)]; ++ for (y = bltpos->y; y < bltpos->y + bltsz->y; y++, phys.y++) { ++ char raw_pixels[maxpixels * sizeof(*pixel)]; ++ char *fb = (char *)(unsigned long)eg->output_intf->mode->frame_buffer_base; ++ int x; ++ ++ pixel = (void *)&bltbuf->pixbuf[y * bltbuf->width + bltpos->x]; ++ fb += phys.y * pinfo->line_length + phys.x * pinfo->depth_bytes; ++ ++ if (info->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) { ++ memmove(raw_pixels, pixel, maxpixels * sizeof (*pixel)); ++ continue; ++ } else if (info->pixel_format==GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) { ++ grub_efi_graphics_output_pixel_t shadow[maxpixels]; ++ for (x = 0; x < maxpixels; x++) { ++ shadow[x].rgbr.red = pixel[x].bgrr.red; ++ shadow[x].rgbr.green = pixel[x].bgrr.green; ++ shadow[x].rgbr.blue = pixel[x].bgrr.blue; ++ } ++ ++ memmove(raw_pixels, shadow, maxpixels * sizeof (*pixel)); ++ } else if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { ++ for (x = 0; x < maxpixels; x++) { ++ char depth_bytes = pinfo->depth_bytes; ++ char *raw_pixel = raw_pixels + x * depth_bytes; ++ ++ int red, green, blue, color; ++ char *colorp; ++ ++#if 0 ++ red = pixel[x].bgrr.red & 0x3f; ++ green = pixel[x].bgrr.green & 0x3f; ++ blue = pixel[x].bgrr.blue & 0x3f; ++ red = red * ((1 << pinfo->red_size) - 1) / 0x3f; ++ green = green * ((1 << pinfo->green_size) - 1) / 0x3f; ++ blue = blue * ((1 << pinfo->blue_size) - 1) / 0x3f; ++#else ++ red = pixel[x].bgrr.red; ++ green = pixel[x].bgrr.green; ++ blue = pixel[x].bgrr.blue; ++ ++ red >>= 8 - pinfo->red_size; ++ green >>= 8 - pinfo->green_size; ++ blue >>= 8 - pinfo->blue_size; ++#endif ++ ++ color = (red << pinfo->red_pos) | ++ (green << pinfo->green_pos) | ++ (blue << pinfo->blue_pos); ++ colorp = (void *)&color; ++ while (depth_bytes--) ++ *raw_pixel++ = *colorp++; ++ } ++ } ++ memmove(fb, raw_pixels, maxpixels * pinfo->depth_bytes); ++ } ++ } ++} ++ ++static void ++blt_to_screen(struct eg *eg, struct bltbuf *bltbuf) ++{ ++#if 0 ++ position_t addr = {0, 0}; ++ ++ position_to_phys(eg, &addr, &addr); ++ ++ Call_Service_10(eg->output_intf->blt, eg->output_intf, bltbuf->pixbuf, ++ GRUB_EFI_BLT_BUFFER_TO_VIDEO, ++ 0, 0, ++ addr.x, addr.y, ++ bltbuf->width, bltbuf->height, ++ 0); ++#else ++ const int pxlstride = eg->output_intf->mode->info->pixels_per_scan_line; ++ position_t bltsz, bltpos = { 0, 0 }, pos = { 0, 0 }; ++ bltsz.x = MIN(bltbuf->width, pxlstride); ++ bltsz.y = MIN(bltbuf->height, eg->output_intf->mode->info->vertical_resolution); ++ ++ blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, &pos); ++#endif ++} ++ ++static void ++blt_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, position_t *pos) ++{ ++ position_t bltpos = {0, 0}; ++ position_t bltsz = { bltbuf->width, bltbuf->height }; ++ blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, pos); ++} ++ ++static int ++save_video_mode(struct eg *eg, struct video_mode *mode) ++{ ++ grub_efi_status_t status; ++ ++ ++ ++ status = Call_Service_4(eg->output_intf->query_mode, eg->output_intf, ++ mode->number, &mode->size, &mode->info); ++ return status == GRUB_EFI_SUCCESS; ++} ++ ++static void ++get_screen_size(struct graphics_backend *backend, position_t *size) ++{ ++ struct eg *eg = backend->priv; ++ grub_efi_graphics_output_mode_information_t *info; ++ ++ info = get_graphics_mode_info(eg); ++ ++ size->x = info->horizontal_resolution; ++ size->y = info->vertical_resolution; ++} ++ ++static void ++bltbuf_set_pixel(struct bltbuf *bltbuf, position_t *pos, ++ grub_efi_graphics_output_pixel_t *pixel) ++{ ++ if (pos->x < 0 || pos->x >= bltbuf->width) ++ return; ++ if (pos->x < 0 || pos->y >= bltbuf->height) ++ return; ++ grub_memmove(&bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], pixel, ++ sizeof *pixel); ++} ++ ++static void ++bltbuf_get_pixel(struct bltbuf *bltbuf, position_t *pos, ++ grub_efi_graphics_output_pixel_t *pixel) ++{ ++ if (bltbuf && pos->x < bltbuf->width && pos->y < bltbuf->height) { ++ grub_memmove(pixel, &bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], ++ sizeof *pixel); ++ } else { ++ pixel->bgrr.red = 0x00; ++ pixel->bgrr.green = 0x00; ++ pixel->bgrr.blue = 0x00; ++ } ++} ++ ++static void ++bltbuf_set_pixel_rgb(struct bltbuf *bltbuf, position_t *pos, ++ int red, int green, int blue) ++{ ++ grub_efi_graphics_output_pixel_t pixel; ++ rgb_to_pixel(red, green, blue, &pixel); ++ bltbuf_set_pixel(bltbuf, pos, &pixel); ++} ++ ++static void ++bltbuf_set_pixel_idx(struct eg *eg, struct bltbuf *bltbuf, ++ position_t *pos, int idx) ++{ ++ bltbuf_set_pixel(bltbuf, pos, &eg->palette[idx]); ++} ++ ++static void ++bltbuf_get_pixel_idx(struct bltbuf *bltbuf, position_t *pos, int *idx) ++{ ++ grub_efi_graphics_output_pixel_t pixel; ++ ++ rgb_to_pixel(0, 0, 0, &pixel); ++ bltbuf_get_pixel(bltbuf, pos, &pixel); ++ for (*idx = 0; *idx < 16; (*idx)++) { ++ if (pixel_equal(cga_colors[*idx], pixel)) ++ break; ++ } ++} ++ ++static struct bltbuf * ++xpm_to_bltbuf(struct xpm *xpm) ++{ ++ struct bltbuf *bltbuf = NULL; ++ position_t pos; ++ ++ if (!(bltbuf = alloc_bltbuf(xpm->width, xpm->height))) ++ return NULL; ++ ++ for (pos.y = 0; pos.y < xpm->height; pos.y++) { ++ for (pos.x = 0; pos.x < xpm->width; pos.x++) { ++ xpm_pixel_t xpl; ++ unsigned char idx; ++ ++ idx = xpm_get_pixel_idx(xpm, pos.x, pos.y); ++ xpm_get_idx(xpm, idx, &xpl); ++ ++ bltbuf_set_pixel_rgb(bltbuf, &pos, xpl.red, xpl.green, xpl.blue); ++ } ++ } ++ ++ return bltbuf; ++} ++ ++static void ++cursor(struct graphics_backend *backend, int set) ++{ ++ struct eg *eg; ++ int ch, invert; ++ unsigned short *text; ++ position_t fpos, screensz; ++ int offset; ++ ++ eg = backend->priv; ++ ++ if (set && !graphics_get_scroll()) ++ return; ++ ++ text = graphics_get_text_buf(); ++ graphics_get_font_position(&fpos); ++ graphics_get_screen_rowscols(&screensz); ++ ++ offset = fpos.y * screensz.x + fpos.x; ++ ++ if (set) ++ text[offset] |= 0x0200; ++ ++ graphics_clbl(fpos.x, fpos.y, 1, 1, 1); ++ ++ if (set) ++ text[offset] &= 0xfdff; ++} ++ ++static void blank(struct graphics_backend *backend); ++ ++static void ++reset_screen_geometry(struct graphics_backend *backend) ++{ ++ struct eg *eg = backend->priv; ++ struct xpm *xpm = graphics_get_splash_xpm(); ++ grub_efi_graphics_output_mode_information_t *info; ++ position_t screensz; ++ ++ info = get_graphics_mode_info(eg); ++ ++ if (xpm) { ++ eg->screen_pos.x = ++ (info->horizontal_resolution - xpm->width) / 2; ++ eg->screen_pos.y = ++ (info->vertical_resolution - xpm->height) / 2; ++ } else { ++ eg->screen_pos.x = 0; ++ eg->screen_pos.y = 0; ++ } ++ ++ blank(backend); ++ graphics_get_screen_rowscols(&screensz); ++ graphics_clbl(0, 0, screensz.x, screensz.y, 0); ++ graphics_clbl(0, 0, screensz.x, screensz.y, 1); ++} ++ ++static void ++setxy(struct graphics_backend *backend, position_t *pos) ++{ ++ position_t fpos; ++ ++ fpos.x = pos->x; ++ fpos.y = pos->y; ++ graphics_set_font_position(&fpos); ++} ++ ++static void ++eg_getxy(struct graphics_backend *backend, position_t *pos) ++{ ++ graphics_get_font_position(pos); ++} ++ ++static void ++draw_pixel(struct graphics_backend *backend, position_t *pos, pixel_t *pixel) ++{ ++ struct bltbuf *bltbuf = NULL; ++ grub_efi_graphics_output_pixel_t *eup = (grub_efi_graphics_output_pixel_t *)pixel; ++ ++ bltbuf = alloc_bltbuf(1,1); ++ if (!bltbuf) ++ return; ++ ++ grub_memmove(&bltbuf->pixbuf[0], eup, sizeof (*eup)); ++ ++ blt_to_screen_pos(backend->priv, bltbuf, pos); ++ ++ grub_free(bltbuf); ++} ++ ++static pixel_t * ++get_pixel_idx(struct graphics_backend *backend, int idx) ++{ ++ static grub_efi_graphics_output_pixel_t pixel; ++ struct eg *eg = backend->priv; ++ if (idx < 0 || idx > MAX_PALETTE) ++ return NULL; ++ pixel.bgrr.red = eg->palette[idx].bgrr.red; ++ pixel.bgrr.green = eg->palette[idx].bgrr.green; ++ pixel.bgrr.blue = eg->palette[idx].bgrr.blue; ++ return (pixel_t *)&pixel; ++} ++ ++static pixel_t * ++get_pixel_rgb(struct graphics_backend *backend, int red, int green, int blue) ++{ ++ static grub_efi_graphics_output_pixel_t pixel; ++ rgb_to_pixel(red, green, blue, &pixel); ++ return &pixel; ++} ++ ++static void ++set_palette(struct graphics_backend *backend, int idx, ++ int red, int green, int blue) ++{ ++ grub_efi_graphics_output_pixel_t pixel; ++ struct eg *eg = backend->priv; ++ ++ if (idx > MAX_PALETTE) ++ return; ++ rgb_to_pixel(red, green, blue, &pixel); ++ grub_memmove(&eg->palette[idx], &pixel, sizeof pixel); ++} ++ ++static void ++blank(struct graphics_backend *backend) ++{ ++ struct eg *eg = backend->priv; ++ struct bltbuf *bltbuf; ++ position_t pos = {0, 0}; ++ grub_efi_graphics_output_mode_information_t *info; ++ grub_efi_uintn_t x, y, i, j; ++ unsigned char r = 0 ,g = 0; ++ ++ info = get_graphics_mode_info(eg); ++ x = info->horizontal_resolution; ++ y = info->vertical_resolution; ++ ++ if (x == 0 || y == 0) ++ return; ++ ++ bltbuf = alloc_bltbuf(x, y); ++ for (j = 0; j < y; j++) { ++ if (debug_graphics && j % 16 == 0) { ++ g = g == 0 ? 7 : 0; ++ r = g == 0 ? 7 : 0; ++ } ++ for (i = 0; i < x; i++) { ++ if (debug_graphics && i % 16 == 0) { ++ g = g == 0 ? 7 : 0; ++ r = g == 0 ? 7 : 0; ++ } ++ pos.x = i; ++ pos.y = j; ++ bltbuf_set_pixel_rgb(bltbuf, &pos, r * 16, g * 16, 0x0); ++ } ++ } ++ ++ blt_to_screen(eg, bltbuf); ++ ++ grub_free(bltbuf); ++} ++ ++ ++static void ++draw_white_box(struct graphics_backend *backend) ++{ ++ struct eg *eg = backend->priv; ++ struct bltbuf *bltbuf; ++ position_t pos = {0, 0}, bltpos = {0, 0}, bltsz = {100,100}; ++ ++ bltbuf = alloc_bltbuf(bltsz.x, bltsz.y); ++ for (pos.y = 0; pos.y < bltsz.y; pos.y++) { ++ for (pos.x = 0; pos.x < bltsz.x; pos.x++) { ++ bltbuf_set_pixel_rgb(bltbuf, &pos, 0xff, 0xff, 0xff); ++ } ++ } ++ ++ blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, &pos); ++ ++#if 0 ++ Call_Service_10(eg->output_intf->blt, eg->output_intf, bltbuf->pixbuf, ++ GRUB_EFI_BLT_BUFFER_TO_VIDEO, 0, 0, 100, 100, x, y, 0); ++#endif ++ ++ grub_free(bltbuf); ++} ++ ++static void ++bltbuf_cp_bl(struct bltbuf *d, position_t dpos, ++ struct bltbuf *s, position_t spos) ++{ ++ grub_efi_graphics_output_pixel_t *dp, *sp; ++ ++ const int xavail = MAX(0, s ? s->width - spos.x : 0); ++ const int xtotal = MAX(0, d->width - dpos.x); ++ const int xcp = MAX(0, MIN(xtotal, xavail)); ++ const int xcl = MAX(0, xtotal - xcp); ++ ++ const int yavail = MAX(0, s ? s->height - spos.y : 0); ++ const int ytotal = MAX(0, d->height - dpos.y); ++ const int ycp = MAX(0, MIN(ytotal, yavail)); ++ const int ycl = MAX(0, ytotal - ycp); ++ ++ int y, x; ++ ++ for (y = 0; y < ytotal; y++) { ++ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x]; ++ ++ if (y < yavail) { ++ sp = &s->pixbuf[(spos.y + y) * s->width + spos.x]; ++ memmove(dp, sp, xcp * sizeof (*dp)); ++ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x + xcp]; ++ memset(dp, '\0', xcl * sizeof (*dp)); ++ } else { ++ memset(dp, '\0', xtotal * sizeof (*dp)); ++ } ++ } ++} ++ ++/* copy a region the size of bltbuf from the background into bltbuf, ++ * starting at offset bgpos ++ */ ++static void ++bltbuf_draw_bg(struct graphics_backend *backend, struct bltbuf *bltbuf, ++ position_t bgpos) ++{ ++ struct eg *eg = backend->priv; ++ position_t blpos = { 0, 0 }; ++ ++ bltbuf_cp_bl(bltbuf, blpos, eg->background, bgpos); ++} ++ ++static void ++dbg_dump_palette(struct graphics_backend *backend) ++{ ++ struct eg *eg; ++ int i; ++ if (!backend || !backend->priv) ++ return; ++ eg = backend->priv; ++ if (!eg->palette) ++ return; ++} ++ ++static int ++is_shadow_pixel(position_t screensz, position_t textpos, position_t bitpos, ++ position_t fontsz) ++{ ++ unsigned short *text = graphics_get_text_buf(); ++ const unsigned char *glyph; ++ position_t glyphpos = { textpos.x, textpos.y }; ++ position_t glyphbit = { bitpos.x, bitpos.y }; ++ unsigned short ch; ++ ++ if (glyphbit.x == 0) { ++ glyphbit.x = fontsz.x; ++ glyphpos.x--; ++ } ++ if (glyphbit.y == 0) { ++ glyphbit.y = fontsz.y; ++ glyphpos.y--; ++ } ++ glyphbit.x--; ++ glyphbit.y--; ++ ++ if (glyphpos.x < 0 || glyphpos.y < 0) ++ return 0; ++ ++ ch = text[glyphpos.y * screensz.x + glyphpos.x] & 0xff; ++ glyph = font8x16 + (ch << 4); ++ return glyph[glyphbit.y] & (1 << ((fontsz.x-1) - glyphbit.x)); ++} ++ ++static void ++bltbuf_draw_character(struct graphics_backend *backend, ++ struct bltbuf *bltbuf, /* the bltbuf to draw into */ ++ position_t target, /* the position in the bltbuf to draw to */ ++ position_t fontsz, /* the size of the font, in pixels */ ++ position_t charpos, /* the position of the character in the text ++ screen buffer */ ++ position_t screensz, /* the size of the screen in characters */ ++ unsigned short ch /* the character to draw, plus flags */ ++ ) ++{ ++ struct eg *eg = backend->priv; ++ position_t blpos; ++ position_t glyphpos; ++ ++ blpos.y = target.y; ++ for (glyphpos.y = 0; glyphpos.y < fontsz.y; glyphpos.y++, blpos.y++) { ++ blpos.x = target.x; ++ for (glyphpos.x = 0; glyphpos.x < fontsz.x; glyphpos.x++, blpos.x++) { ++ int invert = (ch & 0x0100) != 0; ++ int set = (ch & 0x0200) != 0; ++ const unsigned char *glyph = font8x16 + ((ch & 0xff) << 4); ++ int bit = glyph[glyphpos.y] & (1 << ((fontsz.x-1) - glyphpos.x)); ++ int idx = -1; ++ ++ if (!set) { ++ if (invert) ++ idx = bit ? 0 : 15; ++ else if (bit) ++ idx = 15; ++ ++ if (idx == -1) { ++ if (is_shadow_pixel(screensz, charpos, glyphpos, fontsz) || ++ !eg->background) ++ idx = invert ? 15 : 0; ++ } ++ } else { ++ idx = bit ? 0 : 15; ++ } ++ ++ if (idx != -1) ++ bltbuf_set_pixel_idx(eg, bltbuf, &blpos, idx); ++ } ++ } ++} ++ ++static void ++bltbuf_draw_text(struct graphics_backend *backend, ++ struct bltbuf *bltbuf, /* the buffer to draw into */ ++ position_t screensz, /* the size of the screen in characters */ ++ position_t fontsz, /* the size of the font in pixels */ ++ position_t txtpos, /* the position of the text on the screen ++ (in characters) */ ++ position_t txtsz /* the size of the block to fill in ++ (in characters) */ ++ ) ++{ ++ struct eg *eg = backend->priv; ++ unsigned short *text = graphics_get_text_buf(); ++ position_t charpos; ++ ++ for (charpos.y = txtpos.y; charpos.y < txtpos.y + txtsz.y; charpos.y++) { ++ for (charpos.x = txtpos.x; charpos.x < txtpos.x + txtsz.x; charpos.x++){ ++ int offset = charpos.y * screensz.x + charpos.x; ++ position_t blpos = { (charpos.x-txtpos.x)*fontsz.x, ++ (charpos.y-txtpos.y)*fontsz.y }; ++ ++ bltbuf_draw_character(backend, bltbuf, blpos, fontsz, charpos, ++ screensz, text[offset]); ++ } ++ } ++} ++ ++static void ++clbl(struct graphics_backend *backend, int col, int row, int width, int height, ++ int draw_text) ++{ ++ struct eg *eg = backend->priv; ++ struct xpm *xpm; ++ ++ struct bltbuf *bltbuf; ++ position_t fontsz, blpos, blsz, screensz; ++ unsigned short *text; ++ ++// blank(backend); ++// ++ xpm = graphics_get_splash_xpm(); ++ if (xpm && !eg->background) ++ eg->background = xpm_to_bltbuf(xpm); ++ ++ graphics_get_screen_rowscols(&screensz); ++ width = MIN(width, screensz.x - col); ++ height = MIN(height, screensz.y - row); ++ graphics_get_font_size(&fontsz); ++ ++ blsz.x = width * fontsz.x; ++ blsz.y = height * fontsz.y; ++ ++ bltbuf = alloc_bltbuf(blsz.x, blsz.y); ++ if (!bltbuf) ++ return; ++ ++ blsz.x = col * fontsz.x; ++ blsz.y = row * fontsz.y; ++ ++ text = graphics_get_text_buf(); ++ bltbuf_draw_bg(backend, bltbuf, blsz); ++ ++ if (draw_text) { ++ blsz.x = width; ++ blsz.y = height; ++ blpos.x = col; ++ blpos.y = row; ++ ++ bltbuf_draw_text(backend, bltbuf, screensz, fontsz, blpos, blsz); ++ } ++ ++ blpos.x = col * fontsz.x; ++ blpos.y = row * fontsz.y; ++ ++ blt_to_screen_pos(eg, bltbuf, &blpos); ++} ++ ++static void ++setup_cga_palette(struct eg *eg) ++{ ++ rgb_to_pixel(0x00,0x00,0x00, &eg->palette[0]); // 0 Black ++ rgb_to_pixel(0x7f,0x00,0x00, &eg->palette[1]); // 1 Dark Red ++ rgb_to_pixel(0x00,0x7f,0x00, &eg->palette[2]); // 2 Dark Green ++ rgb_to_pixel(0x7f,0x7f,0x00, &eg->palette[3]); // 3 Dark Yellow ++ rgb_to_pixel(0x00,0x00,0x7f, &eg->palette[4]); // 4 Dark Blue ++ rgb_to_pixel(0x7f,0x00,0x7f, &eg->palette[5]); // 5 Dark Magenta ++ rgb_to_pixel(0x00,0x7f,0x7f, &eg->palette[6]); // 6 Dark Cyan ++ rgb_to_pixel(0xc0,0xc0,0xc0, &eg->palette[7]); // 7 Light Grey ++ rgb_to_pixel(0x7f,0x7f,0x7f, &eg->palette[8]); // 8 Dark Grey ++ rgb_to_pixel(0xff,0x00,0x00, &eg->palette[9]); // 9 Red ++ rgb_to_pixel(0x00,0xff,0x00, &eg->palette[10]); // 10 Green ++ rgb_to_pixel(0xff,0xff,0x00, &eg->palette[11]); // 11 Yellow ++ rgb_to_pixel(0x00,0x00,0xff, &eg->palette[12]); // 12 Blue ++ rgb_to_pixel(0xff,0x00,0xff, &eg->palette[13]); // 13 Magenta ++ rgb_to_pixel(0x00,0xff,0xff, &eg->palette[14]); // 14 Cyan ++ rgb_to_pixel(0xff,0xff,0xff, &eg->palette[15]); // 15 White ++ rgb_to_pixel(0xff,0xff,0xff, &eg->palette[16]); // 16 Also white ;) ++} ++ ++static grub_efi_status_t ++set_video_mode(struct eg *eg, int mode) ++{ ++ grub_efi_status_t efi_status; ++ efi_status = Call_Service_2(eg->output_intf->set_mode, eg->output_intf, mode); ++ return efi_status; ++} ++ ++static void disable(struct graphics_backend *backend) ++{ ++ struct eg *eg; ++ ++ if (!backend) ++ return; ++ ++ eg = backend->priv; ++ if (!eg || eg->current_mode != GRAPHICS) ++ return; ++ ++#if 0 ++ blank(backend); ++ ++ set_video_mode(eg, eg->text_mode); ++ grub_efi_set_text_mode(1); ++#endif ++ eg->current_mode = TEXT; ++} ++ ++static int ++fill_pixel_info (grub_pixel_info_t *pixel_info, ++ grub_efi_graphics_output_mode_information_t *mode_info) ++{ ++ if (mode_info->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) ++ { ++ pixel_info->depth_bits = 32; ++ pixel_info->depth_bytes = 4; ++ pixel_info->red_size = 8; ++ pixel_info->red_pos = 0; ++ pixel_info->green_size = 8; ++ pixel_info->green_pos = 8; ++ pixel_info->blue_size = 8; ++ pixel_info->blue_pos = 16; ++ pixel_info->reserved_size = 8; ++ pixel_info->reserved_pos = 24; ++ pixel_info->line_length = mode_info->pixels_per_scan_line * 4; ++ } ++ else if (mode_info->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) ++ { ++ pixel_info->depth_bits = 32; ++ pixel_info->depth_bytes = 4; ++ pixel_info->red_size = 8; ++ pixel_info->red_pos = 16; ++ pixel_info->green_size = 8; ++ pixel_info->green_pos = 8; ++ pixel_info->blue_size = 8; ++ pixel_info->blue_pos = 0; ++ pixel_info->reserved_size = 8; ++ pixel_info->reserved_pos = 24; ++ pixel_info->line_length = mode_info->pixels_per_scan_line * 4; ++ } ++ else if (mode_info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) ++ { ++ find_bits (mode_info->pixel_information.red_mask, ++ &pixel_info->red_pos, &pixel_info->red_size); ++ find_bits (mode_info->pixel_information.green_mask, ++ &pixel_info->green_pos, &pixel_info->green_size); ++ find_bits (mode_info->pixel_information.blue_mask, ++ &pixel_info->blue_pos, &pixel_info->blue_size); ++ find_bits (mode_info->pixel_information.reserved_mask, ++ &pixel_info->reserved_pos, &pixel_info->reserved_size); ++ pixel_info->depth_bits = pixel_info->red_size + pixel_info->green_size + ++ pixel_info->blue_size + pixel_info->reserved_size; ++ pixel_info->depth_bytes = (pixel_info->depth_bits + 7) / 8; ++ pixel_info->line_length = mode_info->pixels_per_scan_line * ++ pixel_info->depth_bytes; ++ } ++ else ++ return 0; ++ return 1; ++} ++ ++/* 1 = prefer a ++ * 0 = prefer neither ++ * -1 = prefer b ++ */ ++static int ++modecmp_helper(struct eg *eg, struct video_mode *amode, struct video_mode *bmode) ++{ ++ grub_efi_graphics_output_mode_information_t *a = amode->info; ++ grub_efi_graphics_output_mode_information_t *b = bmode->info; ++ ++ if (a != NULL && b == NULL) ++ return 1; ++ if (a == NULL && b == NULL) ++ return 0; ++ if (a == NULL && b != NULL) ++ return -1; ++ ++#if 0 ++ if (amode->number == eg->graphics_mode && bmode->number != eg->graphics_mode) ++ return 1; ++ if (amode->number == eg->graphics_mode && bmode->number == eg->graphics_mode) ++ return 0; ++ if (amode->number != eg->graphics_mode && bmode->number == eg->graphics_mode) ++ return -1; ++#endif ++ ++ ++ /* kernel doesn't deal with blt only modes, so prefer against them. */ ++ if (a->pixel_format != GRUB_EFI_PIXEL_BLT_ONLY && ++ b->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY) ++ return 1; ++ if (b->pixel_format != GRUB_EFI_PIXEL_BLT_ONLY && ++ a->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY) ++ return -1; ++ ++ /* XXX PJFIX there's something wrong with what we're passing to the ++ * kernel for stride in the bgrr/rgbr modes, and I haven't figured out ++ * just what yet, so for now, prefer bitmask modes. ++ */ ++ if (a->pixel_format == GRUB_EFI_PIXEL_BIT_MASK && ++ b->pixel_format != GRUB_EFI_PIXEL_BIT_MASK) ++ return 1; ++ if (a->pixel_format != GRUB_EFI_PIXEL_BIT_MASK && ++ b->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) ++ return -1; ++ ++ if (a->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR && ++ b->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) ++ return 1; ++ if (a->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR && ++ b->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) ++ return -1; ++ ++ if (a->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR && ++ b->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) ++ return 1; ++ if (a->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR && ++ b->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) ++ return -1; ++ ++ if (a->horizontal_resolution > b->horizontal_resolution && ++ a->vertical_resolution > b->vertical_resolution) ++ return 1; ++ if (a->horizontal_resolution < b->horizontal_resolution && ++ a->vertical_resolution < b->vertical_resolution) ++ return -1; ++ return 0; ++} ++ ++static int ++modecmp(struct eg *eg, struct video_mode *amode, struct video_mode *bmode) ++{ ++ int rc; ++#if 0 ++ grub_efi_graphics_output_mode_information_t *a = amode->info; ++ grub_efi_graphics_output_mode_information_t *b = bmode->info; ++#endif ++ rc = modecmp_helper(eg, amode, bmode); ++#if 0 ++ grub_printf("comparing nodes:\n"); ++ print_mode_info(amode); ++ print_mode_info(bmode); ++ if (rc > 0) ++ grub_printf("result: a > b\n"); ++ else if (rc < 0) ++ grub_printf("result: a < b\n"); ++ else ++ grub_printf("result: a == b\n"); ++ ++ //dbgdelay(__FILE__, __LINE__); ++#endif ++ return rc; ++} ++ ++static void ++modeswap(struct video_mode *amode, struct video_mode *bmode) ++{ ++ struct video_mode tmp; ++ ++ memcpy(&tmp, amode, sizeof (tmp)); ++ memcpy(amode, bmode, sizeof (tmp)); ++ memcpy(bmode, &tmp, sizeof(tmp)); ++} ++ ++static void ++sort_modes(struct eg *eg, int p, int r) ++{ ++ struct video_mode **modes = eg->modes; ++ ++ int i, j; ++ for (i = 0; i < eg->max_mode; i++) { ++ for (j = i + 1; j < eg->max_mode; j++) { ++ if (modecmp(eg, modes[j], modes[i]) < 0) ++ modeswap(modes[j], modes[i]); ++ } ++ } ++} ++ ++static int ++try_enable(struct graphics_backend *backend) ++{ ++ struct eg *eg = backend->priv; ++ grub_efi_status_t efi_status = GRUB_EFI_UNSUPPORTED; ++ int i; ++ ++ if (eg->text_mode == 0xffffffff) { ++ grub_efi_set_text_mode(1); ++ eg->text_mode = eg->output_intf->mode->mode; ++ } ++ ++ if (eg->graphics_mode == 0xffffffff) { ++ grub_efi_graphics_output_mode_information_t *info; ++ ++ if (!graphics_alloc_text_buf()) ++ return 0; ++ ++ grub_efi_set_text_mode(0); ++ eg->graphics_mode = eg->output_intf->mode->mode; ++ grub_efi_set_text_mode(1); ++#if 0 ++ dprintf("graphics mode is %d\n", eg->graphics_mode); ++ /* this is okay here because we haven't sorted yet.*/ ++ print_mode_info(eg->modes[eg->graphics_mode]); ++ dprintf("text mode is %d\n", eg->text_mode); ++ print_mode_info(eg->modes[eg->text_mode]); ++#endif ++ ++ sort_modes(eg, 0, eg->max_mode-1); ++ ++#if 0 ++ for (i = eg->max_mode - 1; i >= 0; i--) ++ print_mode_info(eg->modes[i]); ++ dbgdelay(__FILE__, __LINE__); ++#endif ++ ++ efi_status = GRUB_EFI_UNSUPPORTED; ++ ++ for (i = eg->max_mode - 1; i >= 0; i--) { ++ if (!eg->modes[i]) ++ continue; ++ ++ info = eg->modes[i]->info; ++ ++#if 0 ++ if (info->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR && ++ info->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR && ++ info->pixel_format != GRUB_EFI_PIXEL_BIT_MASK) { ++ continue; ++ } ++#endif ++ ++ grub_efi_set_text_mode(0); ++ efi_status = set_video_mode(eg, eg->modes[i]->number); ++ if (efi_status == GRUB_EFI_SUCCESS) { ++#if 0 ++ grub_efi_set_text_mode(1); ++ dprintf("switched to mode %d successfully\n", ++ eg->modes[i]->number); ++ dbgdelay(__FILE__,__LINE__); ++ grub_efi_set_text_mode(0); ++#endif ++ eg->graphics_mode = eg->modes[i]->number; ++ fill_pixel_info(&eg->pixel_info, info); ++ break; ++ } else { ++#if 0 ++ set_video_mode(eg, eg->text_mode); ++ grub_efi_set_text_mode(1); ++ dprintf("return code was %d\n", efi_status); ++#endif ++ } ++ } ++ if (efi_status != GRUB_EFI_SUCCESS) { ++#if 1 ++ grub_efi_set_text_mode(1); ++ set_video_mode(eg, eg->text_mode); ++#endif ++ return 0; ++ } ++ ++ } ++ ++ eg->current_mode = GRAPHICS; ++ return 1; ++} ++ ++static int ++enable(struct graphics_backend *backend) ++{ ++ struct eg *eg = backend->priv; ++ int i; ++ ++ if (eg) { ++ if (eg->current_mode == GRAPHICS) { ++ return 1; ++ } ++ } else { ++ grub_efi_status_t efi_status; ++ grub_efi_handle_t *handle, *handles; ++ grub_efi_uintn_t num_handles; ++ grub_efi_pci_io_t *pci_proto; ++ ++ if (!(eg = grub_malloc(sizeof (*eg)))) ++ return 0; ++ ++ grub_memset(eg, '\0', sizeof (*eg)); ++ ++ eg->backend = backend; ++ eg->current_mode = TEXT; ++ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, ++ &graphics_output_guid, ++ NULL, &num_handles); ++ ++ if (!num_handles || !handles) ++ goto fail; ++ ++ for (handle = handles; num_handles--; handle++) ++ { ++ pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (!pci_proto) ++ continue; ++ ++ eg->output_intf = grub_efi_open_protocol (*handle, ++ &graphics_output_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (eg->output_intf) ++ { ++ grub_efi_setup_gfx_pci(*handle); ++ break; ++ } ++ } ++ ++ grub_free(handles); ++ ++ if (!eg->output_intf) ++ eg->output_intf = grub_efi_locate_protocol(&graphics_output_guid, NULL); ++ ++ if (!eg->output_intf) ++ goto fail; ++ ++ eg->text_mode = eg->graphics_mode = 0xffffffff; ++ ++ eg->max_mode = eg->output_intf->mode->max_mode; ++ eg->modes = grub_malloc(eg->max_mode * sizeof (void *)); ++ if (!eg->modes) ++ goto fail; ++ memset(eg->modes, '\0', eg->max_mode * sizeof (void *)); ++ ++ for (i = 0; i < eg->max_mode; i++) { ++ eg->modes[i] = grub_malloc(sizeof *(eg->modes[0])); ++ if (!eg->modes[i]) ++ goto fail; ++ memset(eg->modes[i], '\0', sizeof *(eg->modes[0])); ++ eg->modes[i]->number = i; ++ ++ efi_status = Call_Service_4(eg->output_intf->query_mode, ++ eg->output_intf, i, &eg->modes[i]->size, ++ &eg->modes[i]->info); ++ if (efi_status == GRUB_EFI_NOT_STARTED) { ++ /* The firmware didn't turn on GRAPHICS_OUTPUT_PROTOCOL, so ++ * try to do so ourselves. Thanks, Intel. */ ++ set_video_mode(eg, eg->output_intf->mode->mode); ++ efi_status = Call_Service_4(eg->output_intf->query_mode, ++ eg->output_intf, i, &eg->modes[i]->size, ++ &eg->modes[i]->info); ++ } ++ if (efi_status != GRUB_EFI_SUCCESS) { ++ grub_free(eg->modes[i]); ++ eg->modes[i] = NULL; ++ //eg->max_mode = i; ++ break; ++ } ++ } ++ ++ backend->priv = eg; ++ setup_cga_palette(eg); ++ for (i = 0; i < n_cga_colors; i++) { ++ eg->palette[i].bgrr.red = cga_colors[i].bgrr.red; ++ eg->palette[i].bgrr.green = cga_colors[i].bgrr.green; ++ eg->palette[i].bgrr.blue = cga_colors[i].bgrr.blue; ++ } ++ } ++ ++ if (try_enable(backend)) { ++ reset_screen_geometry(backend); ++ return 1; ++ } ++ ++fail: ++ backend->priv = NULL; ++ if (eg->modes) { ++ for (i = 0; i < eg->max_mode; i++) { ++ if (eg->modes[i]) ++ grub_free(eg->modes[i]); ++ } ++ grub_free(eg->modes); ++ } ++ grub_free(eg); ++ return 0; ++} ++ ++struct graphics_backend eg_backend = { ++ .name = "eg", ++ .enable = enable, ++ .disable = disable, ++ .set_kernel_params = set_kernel_params, ++ .clbl = clbl, ++ .set_palette = set_palette, ++ .get_pixel_idx = get_pixel_idx, ++ .get_pixel_rgb = get_pixel_rgb, ++ .draw_pixel = draw_pixel, ++ .reset_screen_geometry = reset_screen_geometry, ++ .get_screen_size = get_screen_size, ++ .getxy = eg_getxy, ++ .setxy = setxy, ++ .gotoxy = NULL, ++ .cursor = cursor, ++}; ++ ++#endif /* SUPPORT_GRAPHICS */ +diff --git a/efi/efimain.c b/efi/efimain.c +new file mode 100644 +index 0000000..e1a1e66 +--- /dev/null ++++ b/efi/efimain.c +@@ -0,0 +1,129 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2007 Intel Corp. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "pxe.h" ++ ++#define GRUB_SCRATCH_MEM_PAGES (GRUB_SCRATCH_MEM_SIZE >> 12) ++ ++/* Emulation requirements. */ ++void *grub_scratch_mem = NULL; ++ ++#define LOW_STACK_SIZE 0x100000 ++#define LOW_STACK_PAGES (LOW_STACK_SIZE >> 12) ++static void *low_stack, *real_stack; ++ ++extern int grub_test_pxe(grub_efi_loaded_image_t *loaded_image); ++ ++static void ++real_main (void) ++{ ++ grub_efi_loaded_image_t *loaded_image; ++ char *path_name = NULL; ++ ++ loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle); ++ ++ path_name = grub_efi_pxe_get_config_path(loaded_image); ++ ++ if (path_name) { ++ network_ready = 1; ++ ++ grub_set_config_file (path_name); ++ grub_free (path_name); ++ } else { ++ grub_get_drive_partition_from_bdev_handle (loaded_image->device_handle, ++ &boot_drive, ++ &install_partition); ++ path_name = grub_efi_file_path_to_path_name (loaded_image->file_path); ++ ++ if (path_name) ++ { ++ grub_set_config_file (path_name); ++ grub_free (path_name); ++ } ++ ++ grub_load_saved_default (loaded_image->device_handle); ++ } ++ ++ init_bios_info (); ++ while (console_getkey() < 0) ++ grub_efi_stall(1000); ++} ++ ++grub_efi_status_t ++efi_main (grub_efi_handle_t image_handle, grub_efi_system_table_t *sys_tab) ++{ ++ grub_efi_image_handle = image_handle; ++ grub_efi_system_table = sys_tab; ++ grub_efi_init (); ++ ++ grub_scratch_mem = grub_efi_allocate_pages (0, GRUB_SCRATCH_MEM_PAGES); ++ if (! grub_scratch_mem) ++ { ++ grub_printf ("Failed to allocate scratch mem!\n"); ++ return GRUB_EFI_OUT_OF_RESOURCES; ++ } ++ ++ /* If current stack reside in memory region > 2G, switch stack to a ++ memory region < 2G */ ++ if ((unsigned long)&image_handle >= 0x80000000UL) ++ { ++ low_stack = grub_efi_allocate_pages (0, LOW_STACK_PAGES); ++ if (! low_stack) ++ { ++ grub_printf("Failed to allocate low memory stack!\n"); ++ return GRUB_EFI_OUT_OF_RESOURCES; ++ } ++ ++#ifdef __x86_64__ ++ asm volatile ("movq %%rsp, %0\n\tmovq %1, %%rsp\n" ++ : "=&r" (real_stack) : "r" (low_stack+LOW_STACK_SIZE)); ++#else ++ asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" ++ : "=&r" (real_stack) : "r" (low_stack+LOW_STACK_SIZE)); ++#endif ++ } ++ ++ real_main (); ++ ++ if (real_stack) { ++#ifdef __x86_64__ ++ asm volatile ("movq %0, %%rsp\n" : : "r" (real_stack)); ++#else ++ asm volatile ("movl %0, %%esp\n" : : "r" (real_stack)); ++#endif ++ ++ grub_efi_free_pages ((grub_efi_physical_address_t)(unsigned long) low_stack, ++ LOW_STACK_PAGES); ++ } ++ ++ grub_efi_free_pages ((grub_efi_physical_address_t)(unsigned long)grub_scratch_mem, ++ GRUB_SCRATCH_MEM_PAGES); ++ grub_efi_fini (); ++ ++ return GRUB_EFI_SUCCESS; ++} +diff --git a/efi/efimisc.c b/efi/efimisc.c +new file mode 100644 +index 0000000..480ba25 +--- /dev/null ++++ b/efi/efimisc.c +@@ -0,0 +1,665 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++unsigned long install_partition = 0x20000; ++unsigned long boot_drive = 0x80; ++int saved_entryno = 0; ++char version_string[] = VERSION; ++char config_file[128] = "/boot/grub/menu.lst"; ++unsigned short io_map[IO_MAP_SIZE]; ++struct apm_info apm_bios_info; ++/* The key map. */ ++unsigned short bios_key_map[KEY_MAP_SIZE + 1]; ++unsigned short ascii_key_map[KEY_MAP_SIZE + 1]; ++ ++void ++grub_efi_init (void) ++{ ++ /* First of all, initialize the console so that GRUB can display ++ messages. */ ++ grub_console_init (); ++ /* Initialize the memory management system. */ ++ grub_efi_mm_init (); ++ grub_efidisk_init (); ++} ++ ++void ++grub_efi_fini (void) ++{ ++ grub_efidisk_fini (); ++ grub_efi_mm_fini (); ++ grub_console_fini (); ++} ++ ++void * ++grub_malloc (grub_size_t size) ++{ ++ return grub_efi_allocate_pool (size); ++} ++ ++void ++grub_free (void *p) ++{ ++ grub_efi_free_pool (p); ++} ++ ++char * ++grub_stpcpy (char *dest, const char *src) ++{ ++ char *d = dest; ++ const char *s = src; ++ ++ do ++ *d++ = *s; ++ while (*s++ != '\0'); ++ ++ return d - 1; ++} ++ ++void ++grub_fatal (const char *fmt, ...) ++{ ++ va_list ap; ++ ++ va_start (ap, fmt); ++ grub_vsprintf (NULL, fmt, ap); ++ va_end (ap); ++ ++ grub_exit (); ++} ++ ++void ++grub_real_dprintf (const char *file, const int line, const char *condition, ++ const char *fmt, ...) ++{ ++ va_list args; ++ ++ if (! debug) ++ return; ++ ++ grub_printf ("%s:%d: ", file, line); ++ va_start (args, fmt); ++ grub_vsprintf (0, fmt, args); ++ va_end (args); ++} ++ ++grub_size_t ++grub_utf8_char_len(grub_uint8_t ch) ++{ ++ return ((0xe5000000 >> ((ch >> 3) & 0x1e)) & 3) + 1; ++} ++ ++#define UTF8_SHIFT_AND_MASK(unicode, byte) (unicode)<<=6; (unicode) |= (0x3f & (byte)) ++ ++/* convert utf8 to utf32 */ ++grub_uint32_t ++grub_utf8_to_utf32(const grub_uint8_t *src, grub_size_t length) ++{ ++ grub_uint32_t unicode; ++ ++ switch (length) ++ { ++ case 1: ++ return src[0]; ++ case 2: ++ unicode = src[0] & 0x1f; ++ UTF8_SHIFT_AND_MASK(unicode, src[1]); ++ return unicode; ++ case 3: ++ unicode = src[0] & 0x0f; ++ UTF8_SHIFT_AND_MASK(unicode, src[1]); ++ UTF8_SHIFT_AND_MASK(unicode, src[2]); ++ return unicode; ++ case 4: ++ unicode = src[0] & 0x07; ++ UTF8_SHIFT_AND_MASK(unicode, src[1]); ++ UTF8_SHIFT_AND_MASK(unicode, src[2]); ++ UTF8_SHIFT_AND_MASK(unicode, src[3]); ++ return unicode; ++ default: ++ return 0xffff; ++ } ++} ++ ++/* convert utf8 to utf16 */ ++void ++grub_utf8_to_utf16(const grub_uint8_t *src, grub_size_t srclen, ++ grub_uint16_t *dst, grub_size_t dstlen) ++{ ++ const grub_uint8_t *end = src + srclen; ++ grub_efi_char16_t *dstend = dst + dstlen; ++ ++ while (src < end && dst < dstend) ++ { ++ grub_size_t len = grub_utf8_char_len(*src); ++ /* get the utf32 codepoint */ ++ grub_uint32_t codepoint = grub_utf8_to_utf32(src, len); ++ ++ /* convert that codepoint to utf16 codepoints */ ++ if (codepoint <= 0xffff) ++ { ++ /* it's a single utf16 character */ ++ *dst++ = (grub_efi_char16_t) codepoint; ++ } ++ else ++ { ++ /* it's multiple utf16 characters, with surrogate pairs */ ++ codepoint = codepoint - 0x10000; ++ *dst++ = (grub_efi_char16_t) ((codepoint >> 10) + 0xd800); ++ *dst++ = (grub_efi_char16_t) ((codepoint & 0x3ff) + 0xdc00); ++ } ++ ++ src += len; ++ } ++ ++ if (dst < dstend) ++ *dst = 0; ++} ++ ++/* Convert UTF-16 to UTF-8. */ ++grub_uint8_t * ++grub_utf16_to_utf8 (grub_uint8_t *dest, grub_uint16_t *src, ++ grub_size_t size) ++{ ++ grub_uint32_t code_high = 0; ++ ++ while (size--) ++ { ++ grub_uint32_t code = *src++; ++ ++ if (code_high) ++ { ++ if (code >= 0xDC00 && code <= 0xDFFF) ++ { ++ /* Surrogate pair. */ ++ code = ((code_high - 0xD800) << 12) + (code - 0xDC00) + 0x10000; ++ ++ *dest++ = (code >> 18) | 0xF0; ++ *dest++ = ((code >> 12) & 0x3F) | 0x80; ++ *dest++ = ((code >> 6) & 0x3F) | 0x80; ++ *dest++ = (code & 0x3F) | 0x80; ++ } ++ else ++ { ++ /* Error... */ ++ *dest++ = '?'; ++ } ++ ++ code_high = 0; ++ } ++ else ++ { ++ if (code <= 0x007F) ++ *dest++ = code; ++ else if (code <= 0x07FF) ++ { ++ *dest++ = (code >> 6) | 0xC0; ++ *dest++ = (code & 0x3F) | 0x80; ++ } ++ else if (code >= 0xD800 && code <= 0xDBFF) ++ { ++ code_high = code; ++ continue; ++ } ++ else if (code >= 0xDC00 && code <= 0xDFFF) ++ { ++ /* Error... */ ++ *dest++ = '?'; ++ } ++ else ++ { ++ *dest++ = (code >> 16) | 0xE0; ++ *dest++ = ((code >> 12) & 0x3F) | 0x80; ++ *dest++ = (code & 0x3F) | 0x80; ++ } ++ } ++ } ++ ++ return dest; ++} ++ ++/* low-level timing info */ ++int ++getrtsecs (void) ++{ ++ return grub_get_rtc() / GRUB_TICKS_PER_SECOND; ++} ++ ++void ++grub_reboot (void) ++{ ++ grub_efi_runtime_services_t *r; ++ ++ r = grub_efi_system_table->runtime_services; ++ Call_Service_4 (r->reset_system, GRUB_EFI_RESET_COLD, ++ GRUB_EFI_SUCCESS, 0, NULL); ++ for (;;); ++} ++ ++void ++grub_halt (int no_apm) ++{ ++ grub_efi_runtime_services_t *r; ++ ++ r = grub_efi_system_table->runtime_services; ++ Call_Service_4 (r->reset_system, GRUB_EFI_RESET_SHUTDOWN, ++ GRUB_EFI_SUCCESS, 0, NULL); ++ for (;;); ++} ++ ++void ++stop (void) ++{ ++ grub_exit (); ++} ++ ++/* booting a multiboot executable */ ++void ++multi_boot (int start, int mb_info) ++{ ++ stop (); ++} ++ ++/* sets it to linear or wired A20 operation */ ++void ++gateA20 (int linear) ++{ ++} ++ ++/* Set up the int15 handler. */ ++void ++set_int15_handler (void) ++{ ++} ++ ++/* Restore the original int15 handler. */ ++void ++unset_int15_handler (void) ++{ ++} ++ ++/* Copy MAP to the drive map and set up the int13 handler. */ ++void ++set_int13_handler (unsigned short *map) ++{ ++} ++ ++/* Get the ROM configuration table. */ ++unsigned long ++get_rom_config_table (void) ++{ ++ return 0; ++} ++ ++/* Get APM BIOS information. */ ++void ++get_apm_info (void) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++void ++stop_floppy (void) ++{ ++ /* NOTUSED */ ++} ++ ++char * ++grub_strndup (const char *s, int n) ++{ ++ int l = grub_strnlen(s, n); ++ char *new = grub_malloc(l + 1); ++ ++ if (new == NULL) ++ return NULL; ++ ++ new[l] = '\0'; ++ return grub_strncpy(new, s, l); ++} ++ ++int ++safe_parse_maxulong (char **str_ptr, unsigned long *myulong_ptr) ++{ ++ char *ptr = *str_ptr; ++ unsigned long myulong = 0; ++ unsigned int mult = 10, found = 0; ++ ++ /* ++ * Is this a hex number? ++ */ ++ if (*ptr == '0' && tolower (*(ptr + 1)) == 'x') ++ { ++ ptr += 2; ++ mult = 16; ++ } ++ ++ while (1) ++ { ++ /* A bit tricky. This below makes use of the equivalence: ++ (A >= B && A <= C) <=> ((A - B) <= (C - B)) ++ when C > B and A is unsigned. */ ++ unsigned int digit; ++ ++ digit = tolower (*ptr) - '0'; ++ if (digit > 9) ++ { ++ digit -= 'a' - '0'; ++ if (mult == 10 || digit > 5) ++ break; ++ digit += 10; ++ } ++ ++ found = 1; ++ if (myulong > ((~0UL - digit) / mult)) ++ { ++ errnum = ERR_NUMBER_OVERFLOW; ++ return 0; ++ } ++ myulong = (myulong * mult) + digit; ++ ptr++; ++ } ++ ++ if (!found) ++ { ++ errnum = ERR_NUMBER_PARSING; ++ return 0; ++ } ++ ++ *str_ptr = ptr; ++ *myulong_ptr = myulong; ++ ++ return 1; ++} ++ ++int ++currticks (void) ++{ ++ return grub_get_rtc (); ++} ++ ++static char * ++fix_path_name (char *path_name) ++{ ++ char *p1, *p2; ++ ++ p1 = path_name; ++ p2 = p1 + 1; ++ if (*p1 == '\\') ++ *p1 = '/'; ++ while (*p1) ++ { ++ switch (*p2) ++ { ++ case '\0': ++ *++p1 = *p2; ++ break; ++ case '.': ++ if (*p1 == '/' && *(p2+1) == '\\') ++ p2 += 2; ++ else ++ *++p1=*p2++; ++ break; ++ case '\\': ++ if (*p1 == '/') ++ p2++; ++ else ++ *++p1 = '/'; ++ break; ++ default: ++ *++p1=*p2++; ++ break; ++ } ++ } ++ return path_name; ++} ++ ++char * ++grub_efi_file_path_to_path_name (grub_efi_device_path_t *file_path) ++{ ++ char *str; ++ grub_efi_uint32_t str_len = 16; ++ grub_efi_uint32_t str_pos = 0; ++ ++ str = grub_malloc (str_len); ++ if (! str) ++ return NULL; ++ str[0] = '\0'; ++ ++ while (1) ++ { ++ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (file_path); ++ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (file_path); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (file_path); ++ ++ switch (type) ++ { ++ case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE: ++ switch (subtype) ++ { ++ case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_file_path_device_path_t *fp; ++ grub_uint8_t buf[(len - 4) * 2 + 2]; ++ grub_uint32_t path_name_len; ++ char *tmp_str; ++ ++ fp = (grub_efi_file_path_device_path_t *) file_path; ++ *grub_utf16_to_utf8 (buf, fp->path_name, ++ (len - 4) / sizeof (grub_efi_char16_t)) ++ = '\0'; ++ path_name_len = strlen ((char *)buf) + 1; ++ if ((str_len - str_pos) <= path_name_len) ++ { ++ do ++ str_len *= 2; ++ while ((str_len - str_pos) <= path_name_len); ++ tmp_str = grub_malloc (str_len); ++ if (tmp_str == NULL) ++ goto fail; ++ grub_memmove (tmp_str, str, str_pos); ++ grub_free (str); ++ str = tmp_str; ++ } ++ str[str_pos] = '\\'; ++ strcpy (str + str_pos + 1, (char *)buf); ++ str_pos += path_name_len; ++ } ++ break; ++ default: ++ break; ++ } ++ break; ++ default: ++ break; ++ } ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (file_path)) ++ break; ++ ++ file_path = (grub_efi_device_path_t *) ((char *) file_path + len); ++ } ++ return fix_path_name (str); ++ ++ fail: ++ grub_free (str); ++ return NULL; ++} ++ ++#define DEFAULT_SAVED_DEFAULT_FILE_NAME "grub.default" ++#define DEFAULT_CONFIG_FILE_NAME "grub.conf" ++ ++static char saved_default_file[128] = "/boot/grub/grub.default"; ++ ++void ++grub_set_config_file (char *path_name) ++{ ++ char *dir_end; ++ grub_uint32_t path_name_len; ++ ++ path_name_len = strlen (path_name); ++ if (path_name_len > 4 ++ && path_name[path_name_len - 4] == '.' ++ && grub_tolower (path_name[path_name_len - 3]) == 'e' ++ && grub_tolower (path_name[path_name_len - 2]) == 'f' ++ && grub_tolower (path_name[path_name_len - 1]) == 'i') ++ { ++ /* Bigger than buffer of config_file */ ++ if (path_name_len + 1 > 127) ++ return; ++ grub_memmove (config_file, path_name, path_name_len - 4); ++ grub_strcpy (config_file + path_name_len - 4, ".conf"); ++ /* Bigger than buffer of default file */ ++ if (path_name_len + 4 > 127) ++ return; ++ grub_memmove (saved_default_file, path_name, path_name_len - 4); ++ grub_strcpy (saved_default_file + path_name_len - 4, ".default"); ++ return; ++ } ++ dir_end = grub_strrchr (path_name, '/'); ++ if (! dir_end) ++ { ++ grub_strcpy (config_file, DEFAULT_CONFIG_FILE_NAME); ++ grub_strcpy (saved_default_file, DEFAULT_SAVED_DEFAULT_FILE_NAME); ++ return; ++ } ++ if (strlen(dir_end) == 1) { ++ path_name_len = dir_end + 1 - path_name; ++ if (path_name_len + sizeof (DEFAULT_CONFIG_FILE_NAME) > 128) ++ return; ++ grub_memmove (config_file, path_name, path_name_len); ++ grub_strcpy (config_file + path_name_len, DEFAULT_CONFIG_FILE_NAME); ++ } else { ++ grub_memmove (config_file, path_name, path_name_len+1); ++ } ++ if (path_name_len + sizeof (DEFAULT_SAVED_DEFAULT_FILE_NAME) > 128) ++ return; ++ path_name_len = dir_end + 1 - path_name; ++ grub_memmove (saved_default_file, path_name, path_name_len); ++ grub_strcpy (saved_default_file + path_name_len, ++ DEFAULT_SAVED_DEFAULT_FILE_NAME); ++} ++ ++grub_efi_guid_t simple_file_system_guid = GRUB_EFI_SIMPLE_FILE_SYSTEM_GUID; ++ ++static grub_efi_file_t * ++simple_open_file(grub_efi_handle_t dev_handle, ++ char *file_name, ++ int for_write) ++{ ++ grub_efi_simple_file_system_t *file_system; ++ grub_efi_file_t *root; ++ grub_efi_file_t *file = NULL; ++ grub_efi_status_t status; ++ grub_efi_char16_t *file_name_w = NULL; ++ grub_efi_char16_t *chp_w; ++ grub_efi_uint64_t open_mode; ++ ++ file_system = grub_efi_open_protocol (dev_handle, ++ &simple_file_system_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ if (! file_system) ++ return NULL; ++ status = Call_Service_2 (file_system->open_volume, file_system, &root); ++ if (status != GRUB_EFI_SUCCESS) ++ return NULL; ++ file_name_w = grub_malloc (2 * strlen(file_name) + 2); ++ if (! file_name_w) ++ goto done; ++ for (chp_w = file_name_w; *file_name; chp_w++, file_name++) ++ if (*file_name == '/') ++ *chp_w = '\\'; ++ else ++ *chp_w = *file_name; ++ *chp_w = '\0'; ++ open_mode = for_write ? GRUB_EFI_FILE_MODE_READ | GRUB_EFI_FILE_MODE_WRITE \ ++ | GRUB_EFI_FILE_MODE_CREATE : GRUB_EFI_FILE_MODE_READ; ++ status = Call_Service_5 (root->open, root, &file, file_name_w, ++ open_mode, 0); ++ done: ++ if (file_name_w) ++ grub_free (file_name_w); ++ Call_Service_1 (root->close, root); ++ return file; ++} ++ ++void ++grub_load_saved_default (grub_efi_handle_t dev_handle) ++{ ++ grub_efi_file_t *file; ++ char buf[16]; ++ char *ptr = buf; ++ grub_efi_status_t status; ++ int val; ++ grub_efi_uintn_t buf_size = sizeof(buf); ++ ++ file = simple_open_file (dev_handle, saved_default_file, 0); ++ if (! file) ++ return; ++ status = Call_Service_3 (file->read, file, &buf_size, buf); ++ if (status != GRUB_EFI_SUCCESS) ++ goto done; ++ if (buf_size >= sizeof(buf)) ++ buf_size = sizeof(buf) - 1; ++ buf[buf_size] = '\0'; ++ if (safe_parse_maxint (&ptr, &val)) ++ saved_entryno = val; ++ done: ++ Call_Service_1 (file->close, file); ++} ++ ++int ++grub_save_saved_default (int new_default) ++{ ++ grub_efi_loaded_image_t *loaded_image; ++ grub_efi_file_t *file; ++ char buf[16]; ++ grub_efi_status_t status; ++ grub_efi_uintn_t buf_size; ++ int ret = 0; ++ ++ loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle); ++ file = simple_open_file (loaded_image->device_handle, ++ saved_default_file, 1); ++ if (! file) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++ } ++ sprintf (buf, "%d", new_default); ++ buf_size = strlen (buf); ++ status = Call_Service_3 (file->write, file, &buf_size, buf); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ errnum = ERR_WRITE; ++ ret = 1; ++ goto done; ++ } ++ done: ++ Call_Service_1 (file->close, file); ++ return ret; ++} +diff --git a/efi/efimm.c b/efi/efimm.c +new file mode 100644 +index 0000000..836188d +--- /dev/null ++++ b/efi/efimm.c +@@ -0,0 +1,539 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ ++ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) ++ ++#define BYTES_TO_PAGES(bytes) ((bytes) >> 12) ++#define PAGES_TO_BYTES(pages) ((pages) << 12) ++ ++/* Global variables used to store memory map, its size, and the number of ++ * pages allocated for the buffer. */ ++void *mmap_buf; ++grub_efi_uintn_t mmap_size; ++grub_efi_uintn_t mmap_pages; ++ ++/* Maintain the list of allocated pages. */ ++struct allocated_page ++{ ++ grub_efi_physical_address_t addr; ++ grub_efi_uint64_t num_pages; ++}; ++ ++#define ALLOCATED_PAGES_SIZE 0x1000 ++#define MAX_ALLOCATED_PAGES \ ++ (ALLOCATED_PAGES_SIZE / sizeof (struct allocated_page)) ++ ++static struct allocated_page *allocated_pages = 0; ++ ++/* The minimum and maximum heap size for GRUB itself. */ ++#define MIN_HEAP_SIZE 0x100000 ++#define MAX_HEAP_SIZE (16 * 0x100000) ++ ++ ++void * ++grub_efi_allocate_pool (grub_efi_uintn_t size) ++{ ++ grub_efi_status_t status; ++ void *p; ++ grub_efi_boot_services_t *b; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_3(b->allocate_pool, GRUB_EFI_LOADER_DATA, size, &p); ++ if (status != GRUB_EFI_SUCCESS) ++ return NULL; ++ ++ return p; ++} ++ ++void ++grub_efi_free_pool (void *buffer) ++{ ++ grub_efi_boot_services_t *b; ++ ++ b = grub_efi_system_table->boot_services; ++ Call_Service_1(b->free_pool, buffer); ++} ++ ++void * ++grub_efi_allocate_anypages(grub_efi_uintn_t pages) ++{ ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; ++ grub_efi_physical_address_t address; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_4 (b->allocate_pages, ++ GRUB_EFI_ALLOCATE_ANY_PAGES, ++ GRUB_EFI_LOADER_DATA, ++ pages, ++ &address); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ if (allocated_pages) ++ { ++ unsigned i; ++ ++ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) ++ if (allocated_pages[i].addr == 0) ++ { ++ allocated_pages[i].addr = address; ++ allocated_pages[i].num_pages = pages; ++ break; ++ } ++ ++ if (i == MAX_ALLOCATED_PAGES) ++ { ++ grub_printf ("too many page allocations"); ++ return NULL; ++ } ++ } ++ ++ return (void *) ((grub_addr_t) address); ++ ++} ++ ++/* Allocate pages. Return the pointer to the first of allocated pages. */ ++static void * ++grub_efi_allocate_pages_real (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages, ++ grub_efi_memory_type_t memtype) ++{ ++ grub_efi_allocate_type_t type; ++ grub_efi_status_t status; ++ grub_efi_boot_services_t *b; ++ ++ /* Limit the memory access to less than 2GB to avoid 64bit ++ * compatible problem of grub */ ++ if (address > 0x7fffffff) ++ return 0; ++ ++ if (address == 0) ++ { ++ type = GRUB_EFI_ALLOCATE_MAX_ADDRESS; ++ address = 0x7fffffff; ++ } ++ else ++ type = GRUB_EFI_ALLOCATE_ADDRESS; ++ ++ b = grub_efi_system_table->boot_services; ++ status = Call_Service_4 (b->allocate_pages, type, ++ memtype, pages, &address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ /* EFI_NOT_FOUND means the region was unavailable, which means we can ++ probably just use it. This is only for hacks to start with */ ++ if (memtype == GRUB_EFI_RUNTIME_SERVICES_DATA && ++ status == GRUB_EFI_NOT_FOUND) ++ return (void *) ((grub_addr_t) address); ++ else ++ return 0; ++ } ++ ++ if (address == 0) ++ { ++ /* Uggh, the address 0 was allocated... This is too annoying, ++ so reallocate another one. */ ++ address = 0x7fffffff; ++ status = Call_Service_4 (b->allocate_pages, ++ type, GRUB_EFI_LOADER_DATA, pages, &address); ++ grub_efi_free_pages (0, pages); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ } ++ ++ /* We don't want to free anything we've allocated for runtime */ ++ if (allocated_pages && memtype != GRUB_EFI_RUNTIME_SERVICES_DATA) ++ { ++ unsigned i; ++ ++ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) ++ if (allocated_pages[i].addr == 0) ++ { ++ allocated_pages[i].addr = address; ++ allocated_pages[i].num_pages = pages; ++ break; ++ } ++ ++ if (i == MAX_ALLOCATED_PAGES) ++ { ++ grub_printf ("too many page allocations"); ++ return NULL; ++ } ++ } ++ ++ return (void *) ((grub_addr_t) address); ++} ++ ++void * ++grub_efi_allocate_pages (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages) ++ ++{ ++ return grub_efi_allocate_pages_real(address, pages, GRUB_EFI_LOADER_DATA); ++} ++ ++void * ++grub_efi_allocate_runtime_pages (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages) ++ ++{ ++ return grub_efi_allocate_pages_real(address, pages, ++ GRUB_EFI_RUNTIME_SERVICES_DATA); ++} ++/* Free pages starting from ADDRESS. */ ++void ++grub_efi_free_pages (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages) ++{ ++ grub_efi_boot_services_t *b; ++ ++ if (allocated_pages ++ && ((grub_efi_physical_address_t) ((grub_addr_t) allocated_pages) ++ != address)) ++ { ++ unsigned i; ++ ++ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) ++ if (allocated_pages[i].addr == address) ++ { ++ allocated_pages[i].addr = 0; ++ break; ++ } ++ } ++ ++ b = grub_efi_system_table->boot_services; ++ Call_Service_2 (b->free_pages ,address, pages); ++} ++ ++/* Get the memory map as defined in the EFI spec. Return 1 if successful, ++ return 0 if partial, or return -1 if an error occurs. ++ ++ This function will allocate memory for (global) mmap_buf if there isn't ++ already a buffer allocated, and will free & reallocate if it needs to ++ be larger. */ ++ ++int ++grub_efi_get_memory_map (grub_efi_uintn_t *map_key, ++ grub_efi_uintn_t *descriptor_size, ++ grub_efi_uint32_t *descriptor_version) ++{ ++ grub_efi_status_t status; ++ grub_efi_boot_services_t *b; ++ grub_efi_uintn_t key; ++ grub_efi_uint32_t version; ++ grub_efi_uintn_t tmp_mmap_size; ++ ++ /* Allow some parameters to be missing. */ ++ if (! map_key) ++ map_key = &key; ++ if (! descriptor_version) ++ descriptor_version = &version; ++ ++ while (1) ++ { ++ b = grub_efi_system_table->boot_services; ++ tmp_mmap_size = PAGES_TO_BYTES(mmap_pages); ++ status = Call_Service_5 (b->get_memory_map, ++ &tmp_mmap_size, mmap_buf, map_key, ++ descriptor_size, descriptor_version); ++ if (status == GRUB_EFI_SUCCESS) ++ { ++ mmap_size = tmp_mmap_size; ++ return 1; ++ } ++ else if (status != GRUB_EFI_BUFFER_TOO_SMALL) ++ return -1; ++ ++ /* we need a larger buffer */ ++ if (mmap_buf) ++ grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages); ++ ++ /* get 1 more page than we need, just in case */ ++ mmap_pages = BYTES_TO_PAGES(tmp_mmap_size + 4095) + 1; ++ mmap_buf = grub_efi_allocate_pages (0, mmap_pages); ++ if (! mmap_buf) ++ { ++ mmap_pages = 0; ++ grub_printf ("cannot allocate memory for memory map"); ++ return -1; ++ } ++ } ++} ++ ++#define MMAR_DESC_LENGTH 20 ++ ++/* ++ * Add a memory region to the kernel e820 map. ++ * ++ * Convert EFI memory map to E820 map for the operating system ++ * This code is based on a Linux kernel patch submitted by Edgar Hucek ++ */ ++static void ++add_memory_region (struct e820_entry *e820_map, ++ int *e820_nr_map, ++ unsigned long long start, ++ unsigned long long size, ++ unsigned int type) ++{ ++ int x = *e820_nr_map; ++ static unsigned long long estart = 0ULL; ++ static unsigned long esize = 0L; ++ static unsigned int etype = -1; ++ static int merge = 0; ++ ++ /* merge adjacent regions of same type */ ++ if ((x > 0) && e820_map[x-1].addr + e820_map[x-1].size == start ++ && e820_map[x-1].type == type) ++ { ++ e820_map[x-1].size += size; ++ estart = e820_map[x-1].addr; ++ esize = e820_map[x-1].size; ++ etype = e820_map[x-1].type; ++ merge++; ++ return; ++ } ++ ++ /* fill up to E820_MAX */ ++ if ( x < E820_MAX ) ++ { ++ e820_map[x].addr = start; ++ e820_map[x].size = size; ++ e820_map[x].type = type; ++ (*e820_nr_map)++; ++ merge=0; ++ return; ++ } ++ ++ /* different type means another region didn't fit */ ++ /* or same type, but there's a hole */ ++ if (etype != type || (estart + esize) != start) ++ { ++ merge = 0; ++ estart = start; ++ esize = size; ++ etype = type; ++ return; ++ } ++ ++ /* same type and no hole, merge it */ ++ estart += esize; ++ esize += size; ++ merge++; ++} ++ ++/* ++ * Make a e820 memory map ++ */ ++void ++e820_map_from_efi_map (struct e820_entry *e820_map, ++ int *e820_nr_map, ++ grub_efi_memory_descriptor_t *memory_map, ++ grub_efi_uintn_t desc_size, ++ grub_efi_uintn_t memory_map_size) ++{ ++ grub_efi_memory_descriptor_t *desc; ++ unsigned long long start = 0; ++ unsigned long long end = 0; ++ unsigned long long size = 0; ++ grub_efi_memory_descriptor_t *memory_map_end; ++ ++ memory_map_end = NEXT_MEMORY_DESCRIPTOR (memory_map, memory_map_size); ++ *e820_nr_map = 0; ++ for (desc = memory_map; ++ desc < memory_map_end; ++ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) ++ { ++ switch (desc->type) ++ { ++ case GRUB_EFI_ACPI_RECLAIM_MEMORY: ++ add_memory_region (e820_map, e820_nr_map, ++ desc->physical_start, desc->num_pages << 12, ++ E820_ACPI); ++ break; ++ case GRUB_EFI_RUNTIME_SERVICES_CODE: ++ case GRUB_EFI_RUNTIME_SERVICES_DATA: ++ case GRUB_EFI_RESERVED_MEMORY_TYPE: ++ case GRUB_EFI_MEMORY_MAPPED_IO: ++ case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE: ++ case GRUB_EFI_UNUSABLE_MEMORY: ++ case GRUB_EFI_PAL_CODE: ++ add_memory_region (e820_map, e820_nr_map, ++ desc->physical_start, desc->num_pages << 12, ++ E820_RESERVED); ++ break; ++ case GRUB_EFI_LOADER_CODE: ++ case GRUB_EFI_LOADER_DATA: ++ case GRUB_EFI_BOOT_SERVICES_CODE: ++ case GRUB_EFI_BOOT_SERVICES_DATA: ++ case GRUB_EFI_CONVENTIONAL_MEMORY: ++ start = desc->physical_start; ++ size = desc->num_pages << 12; ++ end = start + size; ++ if (start < 0x100000ULL && end > 0xA0000ULL) ++ { ++ if (start < 0xA0000ULL) ++ add_memory_region (e820_map, e820_nr_map, ++ start, 0xA0000ULL-start, ++ E820_RAM); ++ if (end <= 0x100000ULL) ++ continue; ++ start = 0x100000ULL; ++ size = end - start; ++ } ++ add_memory_region (e820_map, e820_nr_map, ++ start, size, E820_RAM); ++ break; ++ case GRUB_EFI_ACPI_MEMORY_NVS: ++ add_memory_region (e820_map, e820_nr_map, ++ desc->physical_start, desc->num_pages << 12, ++ E820_NVS); ++ break; ++ } ++ } ++} ++ ++static void ++update_e820_map (struct e820_entry *e820_map, ++ int *e820_nr_map) ++{ ++ grub_efi_uintn_t desc_size; ++ ++ if (grub_efi_get_memory_map (0, &desc_size, 0) < 0) ++ { ++ grub_printf ("cannot get memory map"); ++ return; ++ } ++ ++ e820_map_from_efi_map (e820_map, e820_nr_map, ++ mmap_buf, desc_size, mmap_size); ++} ++ ++/* Simulated memory sizes. */ ++#define EXTENDED_MEMSIZE (3 * 1024 * 1024) /* 3MB */ ++#define CONVENTIONAL_MEMSIZE (640 * 1024) /* 640kB */ ++ ++int ++get_code_end (void) ++{ ++ /* Just return a little area for simulation. */ ++ return BOOTSEC_LOCATION + (60 * 1024); ++} ++ ++/* memory probe routines */ ++int ++get_memsize (int type) ++{ ++ if (! type) ++ return CONVENTIONAL_MEMSIZE >> 10; ++ else ++ return EXTENDED_MEMSIZE >> 10; ++} ++ ++/* get_eisamemsize() : return packed EISA memory map, lower 16 bits is ++ * memory between 1M and 16M in 1K parts, upper 16 bits is ++ * memory above 16M in 64K parts. If error, return -1. ++ */ ++int ++get_eisamemsize (void) ++{ ++ return (EXTENDED_MEMSIZE >> 10); ++} ++ ++static int grub_e820_nr_map; ++static struct e820_entry grub_e820_map[E820_MAX]; ++ ++/* Fetch the next entry in the memory map and return the continuation ++ value. DESC is a pointer to the descriptor buffer, and CONT is the ++ previous continuation value (0 to get the first entry in the ++ map). */ ++int ++get_mmap_entry (struct mmar_desc *desc, int cont) ++{ ++ if (cont < 0 || cont >= grub_e820_nr_map) ++ { ++ /* Should not happen. */ ++ desc->desc_len = 0; ++ } ++ else ++ { ++ struct e820_entry *entry; ++ /* Copy the entry. */ ++ desc->desc_len = MMAR_DESC_LENGTH; ++ entry = &grub_e820_map[cont++]; ++ desc->addr = entry->addr; ++ desc->length = entry->size; ++ desc->type = entry->type; ++ ++ /* If the next entry exists, return the index. */ ++ if (cont < grub_e820_nr_map) ++ return cont; ++ } ++ ++ return 0; ++} ++ ++void ++grub_efi_mm_init (void) ++{ ++ /* First of all, allocate pages to maintain allocations. */ ++ allocated_pages ++ = grub_efi_allocate_pages (0, BYTES_TO_PAGES (ALLOCATED_PAGES_SIZE)); ++ if (! allocated_pages) ++ { ++ grub_printf ("cannot allocate memory"); ++ return; ++ } ++ ++ grub_memset (allocated_pages, 0, ALLOCATED_PAGES_SIZE); ++ ++ update_e820_map (grub_e820_map, &grub_e820_nr_map); ++} ++ ++void ++grub_efi_mm_fini (void) ++{ ++ if (allocated_pages) ++ { ++ unsigned i; ++ ++ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) ++ { ++ struct allocated_page *p; ++ ++ p = allocated_pages + i; ++ if (p->addr != 0) ++ grub_efi_free_pages ((grub_addr_t) p->addr, p->num_pages); ++ } ++ ++ grub_efi_free_pages ((grub_addr_t) allocated_pages, ++ BYTES_TO_PAGES (ALLOCATED_PAGES_SIZE)); ++ } ++} +diff --git a/efi/efinic.c b/efi/efinic.c +new file mode 100644 +index 0000000..e69de29 +diff --git a/efi/efiserial.c b/efi/efiserial.c +new file mode 100644 +index 0000000..32898a9 +--- /dev/null ++++ b/efi/efiserial.c +@@ -0,0 +1,265 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2007 Intel Corp. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifdef SUPPORT_SERIAL ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++struct grub_efiserial_data ++{ ++ grub_efi_handle_t handle; ++ grub_efi_serial_io_t *serial_io; ++ struct grub_efiserial_data *next; ++}; ++ ++/* GUIDs. */ ++static grub_efi_guid_t serial_io_guid = GRUB_EFI_SERIAL_IO_GUID; ++ ++static grub_efi_serial_io_t *serial_device = NULL; ++ ++static struct grub_efiserial_data * ++make_devices (void) ++{ ++ grub_efi_uintn_t num_handles; ++ grub_efi_handle_t *handles; ++ grub_efi_handle_t *handle; ++ struct grub_efiserial_data *devices = 0; ++ ++ /* Find handles which support the serial io interface. */ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &serial_io_guid, ++ 0, &num_handles); ++ if (! handles) ++ return 0; ++ ++ /* Make a linked list of devices. */ ++ for (handle = handles; num_handles--; handle++) ++ { ++ struct grub_efiserial_data *s; ++ grub_efi_serial_io_t *sio; ++ ++ sio = grub_efi_open_protocol (*handle, &serial_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ if (! sio) ++ /* This should not happen... Why? */ ++ continue; ++ ++ s = grub_malloc (sizeof (*s)); ++ if (! s) ++ { ++ /* Uggh. */ ++ grub_free (handles); ++ return 0; ++ } ++ ++ s->handle = *handle; ++ s->serial_io = sio; ++ s->next = devices; ++ devices = s; ++ } ++ ++ grub_free (handles); ++ ++ return devices; ++} ++ ++static void ++free_devices (struct grub_efiserial_data *devices) ++{ ++ struct grub_efiserial_data *p, *q; ++ ++ for (p = devices; p; p = q) ++ { ++ q = p->next; ++ grub_free (p); ++ } ++} ++ ++static struct grub_efiserial_data * ++get_device (struct grub_efiserial_data *devices, int num) ++{ ++ struct grub_efiserial_data *s; ++ ++ for (s = devices; s && num; s = s->next, num--) ++ ; ++ ++ if (num == 0) ++ return s; ++ ++ return 0; ++} ++ ++/* Fetch a key from a serial device. */ ++int ++serial_hw_fetch (void) ++{ ++ grub_efi_status_t status; ++ char buf[1]; ++ grub_efi_uintn_t buf_siz = sizeof (buf); ++ grub_efi_uint32_t control; ++ ++ if (! serial_device) ++ return -1; ++ ++ status = Call_Service_2 (serial_device->get_control_bits, serial_device, &control); ++ if (status != GRUB_EFI_SUCCESS) ++ return -1; ++ if (control & GRUB_EFI_SERIAL_INPUT_BUFFER_EMPTY) ++ return -1; ++ status = Call_Service_3 (serial_device->read, serial_device, &buf_siz, buf); ++ if (status != GRUB_EFI_SUCCESS) ++ return -1; ++ ++ return buf[0]; ++} ++ ++/* Put a character to a serial device. */ ++void ++serial_hw_put (int c) ++{ ++ grub_efi_status_t status; ++ char ch = c; ++ grub_efi_uintn_t buf_size = sizeof (ch); ++ ++ if (! serial_device) ++ return; ++ ++ status = Call_Service_3 (serial_device->write, serial_device, &buf_size, &ch); ++} ++ ++void ++serial_hw_delay (void) ++{ ++} ++ ++/* Get the port number of the unit UNIT, the port number is same as ++ serial port unit number in EFI. */ ++unsigned short ++serial_hw_get_port (int unit) ++{ ++ return unit; ++} ++ ++static inline grub_efi_uint8_t ++efi_data_bits_from_8250_LCR (int word_len) ++{ ++ switch (word_len & 0x3) ++ { ++ case 0: ++ return 5; ++ case 1: ++ return 6; ++ case 2: ++ return 7; ++ case 3: ++ return 8; ++ default: ++ return 0; ++ } ++} ++ ++static inline grub_efi_stop_bits_t ++efi_stop_bits_from_8250_LCR (int stop_bit_len) ++{ ++ switch (stop_bit_len & 0x4) ++ { ++ case 0x0: ++ return GRUB_EFI_ONE_STOP_BIT; ++ case 0x4: ++ return GRUB_EFI_TWO_STOP_BITS; ++ default: ++ return GRUB_EFI_DEFAULT_STOP_BITS; ++ } ++} ++ ++static inline grub_efi_parity_t ++efi_parity_from_8250_LCR (int parity_8250) ++{ ++ if (! (parity_8250 & 0x8)) ++ return GRUB_EFI_NO_PARITY; ++ ++ switch (parity_8250 & 0x30) ++ { ++ case 0x00: ++ return GRUB_EFI_ODD_PARITY; ++ case 0x10: ++ return GRUB_EFI_EVEN_PARITY; ++ case 0x20: ++ return GRUB_EFI_MARK_PARITY; ++ case 0x30: ++ return GRUB_EFI_SPACE_PARITY; ++ default: ++ return GRUB_EFI_DEFAULT_PARITY; ++ } ++} ++ ++/* Initialize a serial device. In EFI, PORT is used to assign ++ serial port unit number. */ ++int ++serial_hw_init (unsigned short port, unsigned int speed, ++ int word_len, int parity, int stop_bit_len) ++{ ++ grub_efi_serial_io_t *sio; ++ struct grub_efiserial_data *devices, *s; ++ grub_efi_parity_t efi_parity; ++ grub_efi_stop_bits_t efi_stop_bits; ++ grub_efi_uint8_t efi_data_bits; ++ grub_efi_status_t status; ++ int i; ++ ++ devices = make_devices (); ++ s = get_device (devices, port); ++ if (!s) ++ return 0; ++ sio = s->serial_io; ++ free_devices (devices); ++ ++ efi_data_bits = efi_data_bits_from_8250_LCR (word_len); ++ efi_parity = efi_parity_from_8250_LCR (parity); ++ efi_stop_bits = efi_stop_bits_from_8250_LCR (stop_bit_len); ++ ++ status = Call_Service_1 (sio->reset, sio); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ status = Call_Service_7 (sio->set_attributes, sio, speed, 0, 0, ++ efi_parity, efi_data_bits, efi_stop_bits); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ serial_device = sio; ++ /* Get rid of TERM_NEED_INIT from the serial terminal. */ ++ for (i = 0; term_table[i].name; i++) ++ if (grub_strcmp (term_table[i].name, "serial") == 0) ++ { ++ term_table[i].flags &= ~TERM_NEED_INIT; ++ break; ++ } ++ ++ return 1; ++} ++ ++#endif /* SUPPORT_SERIAL */ +diff --git a/efi/efitftp.c b/efi/efitftp.c +new file mode 100644 +index 0000000..ba6918f +--- /dev/null ++++ b/efi/efitftp.c +@@ -0,0 +1,228 @@ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include "pxe.h" ++ ++struct tftp_info tftp_info = { ++ .LoadedImage = NULL, ++ .Pxe = NULL, ++ .ServerIp = NULL, ++ .BasePath = NULL ++}; ++ ++/* ++ * CLIENT MAC ADDR: 00 15 17 4C E6 74 ++ * CLIENT IP: 10.16.52.158 MASK: 255.255.255.0 DHCP IP: 10.16.52.16 ++ * GATEWAY IP: 10.16.52.254 ++ * ++ * TSize.Running LoadFile() ++ * ++ * TFTP.status: 5 ++ * got to grub_efi_pxe_get_config_path ++ * SiAddr: 10.16.52.16 ++ * BootpHwAddr: 00:15:17:4c:e6:74:00:00:00:00:00:00:00:00:00:00 ++ * BootpSrvName: ++ * BootpBootFile: X86PC/UNDI/pxelinux/bootx64.efi ++ */ ++ ++static grub_efi_status_t tftp_get_file_size_defective_buffer_fallback( ++ char *Filename, ++ grub_efi_uintn_t *Size) ++{ ++ EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_READ_FILE; ++ char *Buffer = NULL; ++ grub_efi_boolean_t Overwrite = 0; ++ grub_efi_boolean_t DontUseBuffer = 0; ++ grub_efi_uint64_t BufferSize = 4096; ++ grub_efi_uintn_t BlockSize = 512; ++ grub_efi_status_t rc = GRUB_EFI_BUFFER_TOO_SMALL; ++ char *FullPath = NULL; ++ ++ while (rc == GRUB_EFI_BUFFER_TOO_SMALL) { ++ char *NewBuffer; ++ ++ if (Buffer) { ++ grub_free(Buffer); ++ Buffer = NULL; ++ } ++ BufferSize *= 2; ++ NewBuffer = grub_malloc(BufferSize); ++ if (!NewBuffer) ++ return GRUB_EFI_OUT_OF_RESOURCES; ++ Buffer = NewBuffer; ++ ++ if (tftp_info.BasePath) { ++ int PathSize = 0; ++ PathSize = strlen(tftp_info.BasePath) + 2 + ++ strlen(Filename); ++ FullPath = grub_malloc(PathSize); ++ grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, ++ Filename); ++ } else { ++ FullPath = grub_malloc(strlen(Filename)); ++ strcpy(FullPath, Filename); ++ } ++ ++ rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, ++ OpCode, Buffer, Overwrite, &BufferSize, &BlockSize, ++ tftp_info.ServerIp, FullPath, NULL, DontUseBuffer); ++ if (rc == GRUB_EFI_SUCCESS || rc == GRUB_EFI_BUFFER_TOO_SMALL) ++ *Size = BufferSize; ++ } ++ grub_free(FullPath); ++ grub_free(Buffer); ++ return rc; ++} ++ ++grub_efi_status_t tftp_get_file_size( ++ char *Filename, ++ grub_efi_uintn_t *Size) ++{ ++ EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE; ++ char Buffer[8192]; ++ grub_efi_boolean_t Overwrite = 0; ++ grub_efi_boolean_t DontUseBuffer = 0; ++ grub_efi_uint64_t BufferSize = 8192; ++ grub_efi_uintn_t BlockSize = 512; ++ grub_efi_status_t rc; ++ char *FullPath = NULL; ++ ++ if (tftp_info.BasePath) { ++ int PathSize = 0; ++ PathSize = strlen(tftp_info.BasePath) + 2 + strlen(Filename); ++ FullPath = grub_malloc(PathSize); ++ grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, Filename); ++ } else { ++ FullPath = grub_malloc(strlen(Filename)); ++ strcpy(FullPath, Filename); ++ } ++ ++ rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, OpCode, ++ Buffer, Overwrite, &BufferSize, &BlockSize, tftp_info.ServerIp, ++ FullPath, NULL, DontUseBuffer); ++ if (rc == GRUB_EFI_BUFFER_TOO_SMALL) ++ rc = tftp_get_file_size_defective_buffer_fallback(Filename, Size); ++ if (rc == GRUB_EFI_SUCCESS) ++ *Size = BufferSize; ++ grub_free(FullPath); ++ return rc; ++} ++ ++static grub_efi_status_t tftp_read_file( ++ char *Filename, ++ char *Buffer, ++ grub_efi_uint64_t BufferSize) ++{ ++ EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_READ_FILE; ++ grub_efi_boolean_t Overwrite = 0; ++ grub_efi_boolean_t DontUseBuffer = 0; ++ grub_efi_uintn_t BlockSize = 512; ++ grub_efi_status_t rc; ++ char *FullPath = NULL; ++ ++ if (tftp_info.BasePath) { ++ int PathSize = 0; ++ PathSize = strlen(tftp_info.BasePath) + 2 + strlen(Filename); ++ FullPath = grub_malloc(PathSize); ++ grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, Filename); ++ } else { ++ FullPath = grub_malloc(strlen(Filename)); ++ strcpy(FullPath, Filename); ++ } ++ ++ rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, OpCode, ++ Buffer, Overwrite, &BufferSize, &BlockSize, tftp_info.ServerIp, ++ FullPath, NULL, DontUseBuffer); ++ grub_free(FullPath); ++ return rc; ++} ++ ++int ++efi_tftp_mount (void) ++{ ++ if (current_drive != NETWORK_DRIVE) { ++ return 0; ++ } ++ return 1; ++} ++ ++int ++efi_tftp_read (char *addr, int size) ++{ ++ int rc; ++ ++ if (tftp_info.LastPath == NULL) { ++ grub_printf(" = 0 (no path known)\n"); ++ return 0; ++ } ++ if (tftp_info.Buffer == NULL) { ++ grub_printf(" = 0 (no file open)\n"); ++ return 0; ++ } ++ if (filemax == -1) { ++ grub_printf(" = 0 (file not found)\n"); ++ return 0; ++ } ++ if (filepos == 0) { ++ rc = tftp_read_file(tftp_info.LastPath, tftp_info.Buffer, ++ filemax); ++ } ++ ++ grub_memmove(addr, tftp_info.Buffer+filepos, size); ++ filepos += size; ++ ++ return size; ++} ++ ++int ++efi_tftp_dir (char *dirname) ++{ ++ int rc; ++ int ch; ++ grub_efi_uintn_t size; ++ int len; ++ char *name; ++ ++ ch = nul_terminate(dirname); ++ len = strlen(dirname); ++ ++ name = grub_malloc(len + 1); ++ grub_memmove(name, dirname, len); ++ name[len] = '\0'; ++ dirname[len] = ch; ++ ++#if 0 ++ if (print_possibilities) ++ return 1; ++#endif ++ ++ filemax = -1; ++ ++ rc = tftp_get_file_size(name, &size); ++ if (rc == GRUB_EFI_SUCCESS) { ++ tftp_info.LastPath = grub_malloc(strlen(name) + 1); ++ sprintf(tftp_info.LastPath, "%s", name); ++ filemax = size; ++ filepos = 0; ++ ++ tftp_info.Buffer = grub_malloc(filemax); ++ ++ return 1; ++ } ++ return 0; ++} ++ ++void ++efi_tftp_close (void) ++{ ++ filepos = 0; ++ filemax = -1; ++ grub_free(tftp_info.LastPath); ++ tftp_info.LastPath = NULL; ++ grub_free(tftp_info.Buffer); ++ tftp_info.Buffer = NULL; ++} +diff --git a/efi/efiuga.c b/efi/efiuga.c +new file mode 100644 +index 0000000..b27500b +--- /dev/null ++++ b/efi/efiuga.c +@@ -0,0 +1,982 @@ ++/* efiuga.c - "univeral graphics adapter" support for GRUB/EFI */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright 2007 Red Hat, Inc. ++ * Copyright (C) 2007 Intel Corp. ++ * Copyright (C) 2001,2002 Red Hat, Inc. ++ * Portions copyright (C) 2000 Conectiva, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifdef SUPPORT_GRAPHICS ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "graphics.h" ++#include "xpm.h" ++ ++static grub_efi_guid_t draw_guid = GRUB_EFI_UGA_DRAW_GUID; ++static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; ++ ++#if 0 ++#define UGA ++#include "ugadebug.h" ++#endif ++ ++#ifndef MIN ++#define MIN(x,y) ( ((x) < (y)) ? (x) : (y)) ++#endif ++#ifndef MAX ++#define MAX(x,y) ( ((x) < (y)) ? (y) : (x)) ++#endif ++ ++#define pixel_equal(x,y) ((x).red == (y).red && \ ++ (x).green == (y).green && \ ++ (x).blue == (y).blue) ++ ++struct video_mode { ++ grub_efi_uint32_t horizontal_resolution; ++ grub_efi_uint32_t vertical_resolution; ++ grub_efi_uint32_t color_depth; ++ grub_efi_uint32_t refresh_rate; ++}; ++ ++static void ++xpnd_6_to_8(grub_efi_uga_pixel_t *pixel) ++{ ++ if (!((pixel->red | pixel->green | pixel->blue) & 0xc0)) { ++ pixel->red <<= 2; ++ pixel->red |= ((pixel->red & 0xc0) >> 6); ++ pixel->red &= 0xff; ++ pixel->green <<= 2; ++ pixel->green |= ((pixel->green & 0xc0) >> 6); ++ pixel->green &= 0xff; ++ pixel->blue <<= 2; ++ pixel->blue |= ((pixel->blue & 0xc0) >> 6); ++ pixel->blue &= 0xff; ++ } ++} ++ ++ ++ ++#define MAX_PALETTE 16 ++struct uga { ++ grub_efi_uga_draw_t *draw_intf; ++ struct video_mode graphics_mode; ++ struct video_mode text_mode; ++ enum { TEXT, GRAPHICS } current_mode; ++ ++ position_t screen_size; ++ position_t screen_pos; ++ ++ struct bltbuf *background; ++ ++ grub_efi_uga_pixel_t palette[MAX_PALETTE + 1]; ++}; ++ ++#define RGB(r,g,b) { .red = r, .green = g, .blue = b } ++ ++static grub_efi_uga_pixel_t cga_colors[] = { ++ RGB(0x00,0x00,0x00), // 0 Black ++ RGB(0x7f,0x00,0x00), // 1 Dark Red ++ RGB(0x00,0x7f,0x00), // 2 Dark Green ++ RGB(0x7f,0x7f,0x00), // 3 Dark Yellow ++ RGB(0x00,0x00,0x7f), // 4 Dark Blue ++ RGB(0x7f,0x00,0x7f), // 5 Dark Magenta ++ RGB(0x00,0x7f,0x7f), // 6 Dark Cyan ++ RGB(0xc0,0xc0,0xc0), // 7 Light Grey ++ RGB(0x7f,0x7f,0x7f), // 8 Dark Grey ++ RGB(0xff,0x00,0x00), // 9 Red ++ RGB(0x00,0xff,0x00), // 10 Green ++ RGB(0xff,0xff,0x00), // 11 Yellow ++ RGB(0x00,0x00,0xff), // 12 Blue ++ RGB(0xff,0x00,0xff), // 13 Magenta ++ RGB(0x00,0xff,0xff), // 14 Cyan ++ RGB(0xff,0xff,0xff), // 15 White ++ RGB(0xff,0xff,0xff), // 16 Also white ;) ++}; ++ ++static const int n_cga_colors = sizeof (cga_colors) / sizeof (cga_colors[0]); ++ ++static void ++set_kernel_params(struct graphics_backend *backend, ++ struct linux_kernel_params *params) ++{ ++ struct uga *uga; ++ ++ if (!backend || !backend->priv) ++ return; ++ ++ uga = backend->priv; ++ ++ params->lfb_width = uga->graphics_mode.horizontal_resolution; ++ params->lfb_height = uga->graphics_mode.vertical_resolution; ++ params->lfb_depth = 32; ++ params->red_mask_size = 8; ++ params->red_field_pos = 16; ++ params->green_mask_size = 8; ++ params->green_field_pos = 8; ++ params->blue_mask_size = 8; ++ params->blue_field_pos = 0; ++ params->reserved_mask_size = 8; ++ params->reserved_field_pos = 24; ++ params->have_vga = VIDEO_TYPE_EFI; ++} ++ ++static void ++pixel_to_rgb(grub_efi_uga_pixel_t *pixel, int *red, int *green, int *blue) ++{ ++ *red = pixel->red; ++ *green = pixel->green; ++ *blue = pixel->blue; ++} ++ ++static void ++rgb_to_pixel(int red, int green, int blue, grub_efi_uga_pixel_t *pixel) ++{ ++ pixel->red = red; ++ pixel->green = green; ++ pixel->blue = blue; ++} ++ ++static void ++position_to_phys(struct uga *uga, position_t *virt, position_t *phys) ++{ ++ phys->x = virt->x + uga->screen_pos.x; ++ phys->y = virt->y + uga->screen_pos.y; ++} ++ ++static int ++abs_paddr(struct uga *uga, position_t *virt) ++{ ++ position_t phys; ++ position_to_phys(uga, virt, &phys); ++ return phys.x + phys.y * uga->screen_size.x; ++} ++ ++struct bltbuf { ++ grub_efi_uintn_t width; ++ grub_efi_uintn_t height; ++ grub_efi_uga_pixel_t pixbuf[]; ++}; ++ ++static struct bltbuf *alloc_bltbuf(grub_efi_uintn_t width, ++ grub_efi_uintn_t height) ++{ ++ struct bltbuf *buf = NULL; ++ grub_efi_uintn_t pixbuf_size = width * height * ++ sizeof (grub_efi_uga_pixel_t); ++ ++ if (!(buf = grub_malloc(sizeof(buf->width) + sizeof(buf->height) + ++ pixbuf_size))) ++ return NULL; ++ ++ buf->width = width; ++ buf->height = height; ++ grub_memset(buf->pixbuf, '\0', pixbuf_size); ++ return buf; ++} ++ ++static void ++blt_to_screen(struct uga *uga, struct bltbuf *bltbuf) ++{ ++ position_t addr = {0, 0}; ++ ++ position_to_phys(uga, &addr, &addr); ++ ++ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, ++ EfiUgaBltBufferToVideo, ++ 0, 0, ++ addr.x, addr.y, ++ bltbuf->width, bltbuf->height, ++ 0); ++} ++ ++static void ++blt_pos_to_screen_pos(struct uga *uga, struct bltbuf *bltbuf, ++ position_t *bltpos, position_t *bltsz, position_t *pos) ++{ ++ position_t phys; ++ ++ position_to_phys(uga, pos, &phys); ++ ++ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, ++ EfiUgaBltBufferToVideo, ++ bltpos->x, bltpos->y, ++ phys.x, phys.y, ++ bltsz->x, bltsz->y, ++ 0); ++} ++ ++static void ++blt_to_screen_pos(struct uga *uga, struct bltbuf *bltbuf, position_t *pos) ++{ ++ position_t bltpos = {0, 0}; ++ position_t bltsz = { bltbuf->width, bltbuf->height }; ++ blt_pos_to_screen_pos(uga, bltbuf, &bltpos, &bltsz, pos); ++} ++ ++static int ++blt_from_screen_pos(struct uga *uga, struct bltbuf **retbuf, ++ position_t *pos, position_t *size) ++{ ++ struct bltbuf *bltbuf = NULL; ++ position_t phys; ++ ++ if (!retbuf) ++ return 0; ++ ++ if (*retbuf) ++ grub_free(*retbuf); ++ ++ bltbuf = alloc_bltbuf(size->x, size->y); ++ if (!bltbuf) ++ return 0; ++ ++ position_to_phys(uga, pos, &phys); ++ ++ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, ++ EfiUgaVideoToBltBuffer, ++ phys.x, phys.y, ++ 0, 0, ++ size->x, size->y, 0); ++ *retbuf = bltbuf; ++ return 1; ++} ++ ++static int ++save_video_mode(struct uga *uga, struct video_mode *mode) ++{ ++ grub_efi_status_t status; ++ ++ status = Call_Service_5(uga->draw_intf->get_mode, uga->draw_intf, ++ &mode->horizontal_resolution, &mode->vertical_resolution, ++ &mode->color_depth, &mode->refresh_rate); ++ return status == GRUB_EFI_SUCCESS; ++} ++ ++static grub_efi_status_t ++set_video_mode(struct uga *uga, struct video_mode *mode) ++{ ++ grub_efi_status_t status; ++ ++ status = Call_Service_5(uga->draw_intf->set_mode, uga->draw_intf, ++ mode->horizontal_resolution, ++ mode->vertical_resolution, ++ mode->color_depth, ++ mode->refresh_rate); ++ return status; ++} ++ ++static int ++cmp_video_modes(struct video_mode *vm0, struct video_mode *vm1) ++{ ++ if (vm0->horizontal_resolution == vm1->horizontal_resolution && ++ vm0->vertical_resolution == vm1->vertical_resolution) ++ return 0; ++ if (vm0->horizontal_resolution >= vm1->horizontal_resolution && ++ vm0->vertical_resolution >= vm1->vertical_resolution) ++ return 1; ++ return -1; ++} ++ ++static int ++blt_from_screen(struct uga *uga, struct bltbuf **retbuf) ++{ ++ struct bltbuf *bltbuf = NULL; ++ position_t pos = {0 ,0}; ++ position_t size = { ++ .x = uga->graphics_mode.horizontal_resolution, ++ .y = uga->graphics_mode.vertical_resolution ++ }; ++ ++ return blt_from_screen_pos(uga, retbuf, &pos, &size); ++} ++ ++static void ++bltbuf_set_pixel(struct bltbuf *bltbuf, position_t *pos, ++ grub_efi_uga_pixel_t *pixel) ++{ ++ if (pos->x < 0 || pos->x >= bltbuf->width) ++ return; ++ if (pos->x < 0 || pos->y >= bltbuf->height) ++ return; ++ grub_memmove(&bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], pixel, ++ sizeof *pixel); ++} ++ ++static void ++bltbuf_get_pixel(struct bltbuf *bltbuf, position_t *pos, ++ grub_efi_uga_pixel_t *pixel) ++{ ++ if (bltbuf && pos->x < bltbuf->width && pos->y < bltbuf->height) { ++ grub_memmove(pixel, &bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], ++ sizeof *pixel); ++ } else { ++ pixel->red = 0x00; ++ pixel->green = 0x00; ++ pixel->blue = 0x00; ++ } ++} ++ ++static void ++bltbuf_set_pixel_rgb(struct bltbuf *bltbuf, position_t *pos, ++ int red, int green, int blue) ++{ ++ grub_efi_uga_pixel_t pixel; ++ rgb_to_pixel(red, green, blue, &pixel); ++ bltbuf_set_pixel(bltbuf, pos, &pixel); ++} ++ ++static void ++bltbuf_set_pixel_idx(struct uga *uga, struct bltbuf *bltbuf, ++ position_t *pos, int idx) ++{ ++ bltbuf_set_pixel(bltbuf, pos, &uga->palette[idx]); ++} ++ ++static void ++bltbuf_get_pixel_idx(struct bltbuf *bltbuf, position_t *pos, int *idx) ++{ ++ grub_efi_uga_pixel_t pixel; ++ ++ rgb_to_pixel(0, 0, 0, &pixel); ++ bltbuf_get_pixel(bltbuf, pos, &pixel); ++ for (*idx = 0; *idx < 16; (*idx)++) { ++ if (pixel_equal(cga_colors[*idx], pixel)) ++ break; ++ } ++} ++ ++static struct bltbuf * ++xpm_to_bltbuf(struct xpm *xpm) ++{ ++ struct bltbuf *bltbuf = NULL; ++ position_t pos; ++ ++ if (!(bltbuf = alloc_bltbuf(xpm->width, xpm->height))) ++ return NULL; ++ ++ for (pos.y = 0; pos.y < xpm->height; pos.y++) { ++ for (pos.x = 0; pos.x < xpm->width; pos.x++) { ++ xpm_pixel_t xpl; ++ unsigned char idx; ++ ++ idx = xpm_get_pixel_idx(xpm, pos.x, pos.y); ++ xpm_get_idx(xpm, idx, &xpl); ++ ++ bltbuf_set_pixel_rgb(bltbuf, &pos, xpl.red, xpl.green, xpl.blue); ++ } ++ } ++ ++ return bltbuf; ++} ++ ++static void ++cursor(struct graphics_backend *backend, int set) ++{ ++ struct uga *uga; ++ int ch, invert; ++ unsigned short *text; ++ position_t fpos, screensz; ++ int offset; ++ ++ uga = backend->priv; ++ ++ if (set && !graphics_get_scroll()) ++ return; ++ ++ text = graphics_get_text_buf(); ++ graphics_get_font_position(&fpos); ++ graphics_get_screen_rowscols(&screensz); ++ ++ offset = fpos.y * screensz.x + fpos.x; ++ ++ if (set) ++ text[offset] |= 0x200; ++ ++ graphics_clbl(fpos.x, fpos.y, 1, 1, 1); ++ ++ if (set) ++ text[offset] &= 0xfdff; ++} ++ ++static void blank(struct graphics_backend *backend); ++ ++static void ++reset_screen_geometry(struct graphics_backend *backend) ++{ ++ struct uga *uga = backend->priv; ++ struct xpm *xpm = graphics_get_splash_xpm(); ++ position_t screensz = { .x = 640, .y = 480 }; ++ ++ if (xpm) { ++ screensz.x = xpm->width; ++ screensz.y = xpm->height; ++ } ++ ++ uga->screen_pos.x = ++ (uga->graphics_mode.horizontal_resolution - screensz.x) / 2; ++ uga->screen_pos.y = ++ (uga->graphics_mode.vertical_resolution - screensz.y) / 2; ++ ++ blank(backend); ++ graphics_get_screen_rowscols(&screensz); ++ graphics_clbl(0, 0, screensz.x, screensz.y, 0); ++ graphics_clbl(0, 0, screensz.x, screensz.y, 1); ++} ++ ++static void ++get_screen_size(struct graphics_backend *backend, position_t *size) ++{ ++ struct uga *uga = backend->priv; ++ size->x = uga->graphics_mode.horizontal_resolution; ++ size->y = uga->graphics_mode.vertical_resolution; ++} ++ ++static void ++setxy(struct graphics_backend *backend, position_t *pos) ++{ ++ position_t fpos; ++ ++ fpos.x = pos->x; ++ fpos.y = pos->y; ++ graphics_set_font_position(&fpos); ++} ++ ++static void ++uga_getxy(struct graphics_backend *backend, position_t *pos) ++{ ++ graphics_get_font_position(pos); ++} ++ ++static void ++draw_pixel(struct graphics_backend *backend, position_t *pos, pixel_t *pixel) ++{ ++ struct bltbuf *bltbuf = NULL; ++ grub_efi_uga_pixel_t *eup = (grub_efi_uga_pixel_t *)pixel; ++ ++ bltbuf = alloc_bltbuf(1,1); ++ if (!bltbuf) ++ return; ++ ++ grub_memmove(&bltbuf->pixbuf[0], eup, sizeof (*eup)); ++ ++ blt_to_screen_pos(backend->priv, bltbuf, pos); ++ ++ grub_free(bltbuf); ++} ++ ++static pixel_t * ++get_pixel_idx(struct graphics_backend *backend, int idx) ++{ ++ static grub_efi_uga_pixel_t pixel; ++ struct uga *uga = backend->priv; ++ if (idx < 0 || idx > MAX_PALETTE) ++ return NULL; ++ pixel.red = uga->palette[idx].red; ++ pixel.green = uga->palette[idx].green; ++ pixel.blue = uga->palette[idx].blue; ++ return (pixel_t *)&pixel; ++} ++ ++static pixel_t * ++get_pixel_rgb(struct graphics_backend *backend, int red, int green, int blue) ++{ ++ static grub_efi_uga_pixel_t pixel; ++ rgb_to_pixel(red, green, blue, &pixel); ++ return &pixel; ++} ++ ++static void ++set_palette(struct graphics_backend *backend, int idx, ++ int red, int green, int blue) ++{ ++ grub_efi_uga_pixel_t pixel; ++ struct uga *uga = backend->priv; ++ ++ if (idx > MAX_PALETTE) ++ return; ++ rgb_to_pixel(red, green, blue, &pixel); ++ grub_memmove(&uga->palette[idx], &pixel, sizeof pixel); ++} ++ ++static void ++blank(struct graphics_backend *backend) ++{ ++ struct uga *uga = backend->priv; ++ struct bltbuf *bltbuf; ++ position_t pos = {0, 0}; ++ grub_efi_uintn_t x, y, i, j; ++ unsigned char r = 0 ,g = 0; ++ ++ x = uga->graphics_mode.horizontal_resolution; ++ y = uga->graphics_mode.vertical_resolution; ++ ++ if (x == 0 || y == 0) ++ return; ++ ++ bltbuf = alloc_bltbuf(x, y); ++ for (j = 0; j < y; j++) { ++ if (debug_graphics && j % 16 == 0) { ++ g = g == 0 ? 7 : 0; ++ r = g == 0 ? 7 : 0; ++ } ++ for (i = 0; i < x; i++) { ++ if (debug_graphics && i % 16 == 0) { ++ g = g == 0 ? 7 : 0; ++ r = g == 0 ? 7 : 0; ++ } ++ pos.x = i; ++ pos.y = j; ++ bltbuf_set_pixel_rgb(bltbuf, &pos, r * 16, g * 16, 0x0); ++ } ++ } ++ ++ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, ++ EfiUgaBltBufferToVideo, 0, 0, 0, 0, x, y, 0); ++ ++ grub_free(bltbuf); ++} ++ ++static void ++bltbuf_cp_bl(struct bltbuf *d, position_t dpos, ++ struct bltbuf *s, position_t spos) ++{ ++ grub_efi_uga_pixel_t *dp, *sp; ++ ++ const int xavail = MAX(0, s ? s->width - spos.x : 0); ++ const int xtotal = MAX(0, d->width - dpos.x); ++ const int xcp = MAX(0, MIN(xtotal, xavail)); ++ const int xcl = MAX(0, xtotal - xcp); ++ ++ const int yavail = MAX(0, s ? s->height - spos.y : 0); ++ const int ytotal = MAX(0, d->height - dpos.y); ++ const int ycp = MAX(0, MIN(ytotal, yavail)); ++ const int ycl = MAX(0, ytotal - ycp); ++ ++ int y, x; ++ ++ for (y = 0; y < ytotal; y++) { ++ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x]; ++ ++ if (y < yavail) { ++ sp = &s->pixbuf[(spos.y + y) * s->width + spos.x]; ++ memmove(dp, sp, xcp * sizeof (*dp)); ++ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x + xcp]; ++ memset(dp, '\0', xcl * sizeof (*dp)); ++ } else { ++ memset(dp, '\0', xtotal * sizeof (*dp)); ++ } ++ } ++} ++ ++/* copy a region the size of bltbuf from the background into bltbuf, ++ * starting at offset bgpos ++ */ ++static void ++bltbuf_draw_bg(struct graphics_backend *backend, struct bltbuf *bltbuf, ++ position_t bgpos) ++{ ++ struct uga *uga = backend->priv; ++ position_t blpos = { 0, 0 }; ++ ++ bltbuf_cp_bl(bltbuf, blpos, uga->background, bgpos); ++} ++ ++static void ++dbg_dump_palette(struct graphics_backend *backend) ++{ ++ struct uga *uga; ++ int i; ++ if (!backend || !backend->priv) ++ return; ++ uga = backend->priv; ++ if (!uga->palette) ++ return; ++} ++ ++static int ++is_shadow_pixel(position_t screensz, position_t textpos, position_t bitpos, ++ position_t fontsz) ++{ ++ unsigned short *text = graphics_get_text_buf(); ++ const unsigned char *glyph; ++ position_t glyphpos = { textpos.x, textpos.y }; ++ position_t glyphbit = { bitpos.x, bitpos.y }; ++ unsigned short ch; ++ ++ if (glyphbit.x == 0) { ++ glyphbit.x = fontsz.x; ++ glyphpos.x--; ++ } ++ if (glyphbit.y == 0) { ++ glyphbit.y = fontsz.y; ++ glyphpos.y--; ++ } ++ glyphbit.x--; ++ glyphbit.y--; ++ ++ if (glyphpos.x < 0 || glyphpos.y < 0) ++ return 0; ++ ++ ch = text[glyphpos.y * screensz.x + glyphpos.x] & 0xff; ++ glyph = font8x16 + (ch << 4); ++ return glyph[glyphbit.y] & (1 << ((fontsz.x-1) - glyphbit.x)); ++} ++ ++static void ++bltbuf_draw_character(struct graphics_backend *backend, ++ struct bltbuf *bltbuf, /* the bltbuf to draw into */ ++ position_t target, /* the position in the bltbuf to draw to */ ++ position_t fontsz, /* the size of the font, in pixels */ ++ position_t charpos, /* the position of the character in the text ++ screen buffer */ ++ position_t screensz, /* the size of the screen in characters */ ++ unsigned short ch /* the character to draw, plus flags */ ++ ) ++{ ++ struct uga *uga = backend->priv; ++ position_t blpos; ++ position_t glyphpos; ++ ++ blpos.y = target.y; ++ for (glyphpos.y = 0; glyphpos.y < fontsz.y; glyphpos.y++, blpos.y++) { ++ blpos.x = target.x; ++ for (glyphpos.x = 0; glyphpos.x < fontsz.x; glyphpos.x++, blpos.x++) { ++ int invert = (ch & 0x0100) != 0; ++ int set = (ch & 0x0200) != 0; ++ const unsigned char *glyph = font8x16 + ((ch & 0xff) << 4); ++ int bit = glyph[glyphpos.y] & (1 << ((fontsz.x-1) - glyphpos.x)); ++ int idx = -1; ++ ++ if (!set) { ++ if (invert) ++ idx = bit ? 0 : 15; ++ else if (bit) ++ idx = 15; ++ ++ if (idx == -1) { ++ if (is_shadow_pixel(screensz, charpos, glyphpos, fontsz) || ++ !uga->background) ++ idx = invert ? 15 : 0; ++ } ++ } else { ++ idx = bit ? 0 : 15; ++ } ++ ++ if (idx != -1) ++ bltbuf_set_pixel_idx(uga, bltbuf, &blpos, idx); ++ } ++ } ++} ++ ++static void ++bltbuf_draw_text(struct graphics_backend *backend, ++ struct bltbuf *bltbuf, /* the buffer to draw into */ ++ position_t screensz, /* the size of the screen in characters */ ++ position_t fontsz, /* the size of the font in pixels */ ++ position_t txtpos, /* the position of the text on the screen ++ (in characters) */ ++ position_t txtsz /* the size of the block to fill in ++ (in characters) */ ++ ) ++{ ++ struct uga *uga = backend->priv; ++ unsigned short *text = graphics_get_text_buf(); ++ position_t charpos; ++ ++ for (charpos.y = txtpos.y; charpos.y < txtpos.y + txtsz.y; charpos.y++) { ++ for (charpos.x = txtpos.x; charpos.x < txtpos.x + txtsz.x; charpos.x++){ ++ int offset = charpos.y * screensz.x + charpos.x; ++ position_t blpos = { (charpos.x-txtpos.x)*fontsz.x, ++ (charpos.y-txtpos.y)*fontsz.y }; ++ ++ bltbuf_draw_character(backend, bltbuf, blpos, fontsz, charpos, ++ screensz, text[offset]); ++ } ++ } ++} ++ ++static void ++clbl(struct graphics_backend *backend, int col, int row, int width, int height, ++ int draw_text) ++{ ++ struct uga *uga = backend->priv; ++ struct xpm *xpm; ++ ++ struct bltbuf *bltbuf; ++ position_t fontsz, blpos, blsz, screensz; ++ unsigned short *text; ++ ++// blank(backend); ++// ++ xpm = graphics_get_splash_xpm(); ++ if (xpm && !uga->background) ++ uga->background = xpm_to_bltbuf(xpm); ++ ++ graphics_get_screen_rowscols(&screensz); ++ width = MIN(width, screensz.x - col); ++ height = MIN(height, screensz.y - row); ++ graphics_get_font_size(&fontsz); ++ ++ blsz.x = width * fontsz.x; ++ blsz.y = height * fontsz.y; ++ ++ bltbuf = alloc_bltbuf(blsz.x, blsz.y); ++ if (!bltbuf) ++ return; ++ ++ blsz.x = col * fontsz.x; ++ blsz.y = row * fontsz.y; ++ ++ text = graphics_get_text_buf(); ++ bltbuf_draw_bg(backend, bltbuf, blsz); ++ ++ if (draw_text) { ++ blsz.x = width; ++ blsz.y = height; ++ blpos.x = col; ++ blpos.y = row; ++ ++ bltbuf_draw_text(backend, bltbuf, screensz, fontsz, blpos, blsz); ++ } ++ ++ blpos.x = col * fontsz.x; ++ blpos.y = row * fontsz.y; ++ ++ blt_to_screen_pos(uga, bltbuf, &blpos); ++} ++ ++static void ++setup_cga_palette(void) ++{ ++/* ++ * Nov 27 15:53:19 ping? ++ * Nov 27 15:54:13 pong? ++ * Nov 27 15:54:16 say I've got a color channel in 6 bits, and it's ++ * stored in an 8-bit value. let's call it white. ++ * now let's say I've got hardware with 8 bits per ++ * channel that I'm blitting to. What's the right ++ * way to expand 0x3f to 0xff? ++ * Nov 27 15:55:17 (my naive idea, which I haven't tried yet, is ++ * "x <<= 2; if (x) x |= 3;") ++ * Nov 27 15:55:35 no. ++ * Nov 27 15:55:43 yeah, figured I'd ask instead of doing that. ++ * Nov 27 15:56:15 x <<= 2; x |= ((x & 0xc0) >> 6); ++ */ ++ int i; ++ for (i = 0; i < n_cga_colors; i++) { ++ grub_efi_uga_pixel_t *pixel = &cga_colors[i]; ++ ++ if ((pixel->red | pixel->green | pixel->blue) & 0xc0) ++ continue; ++ pixel->red <<= 2; ++ pixel->red |= ((pixel->red & 0xc0) >> 6); ++ pixel->red &= 0xff; ++ pixel->green <<= 2; ++ pixel->green |= ((pixel->green & 0xc0) >> 6); ++ pixel->green &= 0xff; ++ pixel->blue <<= 2; ++ pixel->blue |= ((pixel->blue & 0xc0) >> 6); ++ pixel->blue &= 0xff; ++ } ++} ++ ++static int ++try_enable(struct graphics_backend *backend) ++{ ++ struct uga *uga = backend->priv; ++ struct video_mode modes[] = { ++ { 1440, 900, 32, 60 }, ++ { 640, 480, 32, 60 }, ++ { 800, 600, 32, 60 }, ++ { 640, 480, 16, 60 }, ++ { 800, 600, 16, 60 }, ++ { 640, 480, 8, 60 }, ++ { 800, 600, 8, 60 } ++ }; ++ struct video_mode mode; ++ position_t font_size; ++ int i; ++ ++ if (uga->text_mode.horizontal_resolution == 0) { ++ grub_efi_set_text_mode(1); ++ save_video_mode(uga, &uga->text_mode); ++ } ++ ++ if (uga->graphics_mode.horizontal_resolution == 0) { ++ grub_efi_set_text_mode(0); ++ save_video_mode(uga, &uga->graphics_mode); ++ ++ if (cmp_video_modes(&uga->graphics_mode, &modes[0]) >= 0) { ++ uga->current_mode = GRAPHICS; ++ graphics_alloc_text_buf(); ++ return 1; ++ } ++ for (i = 0; i < sizeof (modes) / sizeof (modes[0]); i++) { ++ set_video_mode(uga, &modes[i]); ++ save_video_mode(uga, &mode); ++ if (!cmp_video_modes(&modes[i], &mode)) { ++ grub_memmove(&uga->graphics_mode, &mode, sizeof (mode)); ++ uga->current_mode = GRAPHICS; ++ graphics_alloc_text_buf(); ++ return 1; ++ } ++ } ++ set_video_mode(uga, &uga->graphics_mode); ++ save_video_mode(uga, &mode); ++ if (!cmp_video_modes(&uga->graphics_mode, &mode)) { ++ uga->current_mode = GRAPHICS; ++ graphics_alloc_text_buf(); ++ return 1; ++ } ++ grub_efi_set_text_mode(1); ++ return 0; ++ } ++ set_video_mode(uga, &uga->graphics_mode); ++ ++ uga->current_mode = GRAPHICS; ++ return 1; ++} ++ ++static int ++enable(struct graphics_backend *backend) ++{ ++ struct uga *uga = backend->priv; ++ grub_efi_handle_t *handle, *handles; ++ grub_efi_uintn_t num_handles; ++ grub_efi_pci_io_t *pci_proto; ++ int i; ++ ++ if (uga) { ++ if (uga->current_mode == GRAPHICS) { ++ return 1; ++ } ++ } else { ++ if (!(uga = grub_malloc(sizeof (*uga)))) { ++ return 0; ++ } ++ grub_memset(uga, '\0', sizeof (*uga)); ++ ++ uga->current_mode = TEXT; ++ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, ++ &draw_guid, NULL, &num_handles); ++ ++ if (!num_handles || !handles) ++ { ++ grub_free(uga); ++ return 0; ++ } ++ ++ for (handle = handles; num_handles--; handle++) ++ { ++ pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (!pci_proto) ++ continue; ++ ++ uga->draw_intf = grub_efi_open_protocol (*handle, &draw_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (uga->draw_intf) ++ { ++ grub_efi_setup_gfx_pci(*handle); ++ break; ++ } ++ } ++ ++ grub_free(handles); ++ ++ if (!uga->draw_intf) ++ uga->draw_intf = grub_efi_locate_protocol(&draw_guid, NULL); ++ ++ if (!uga->draw_intf) { ++ grub_free(uga); ++ return 0; ++ } ++ grub_memset(&uga->graphics_mode, '\0', sizeof (uga->graphics_mode)); ++ grub_memset(&uga->text_mode, '\0', sizeof (uga->text_mode)); ++ backend->priv = uga; ++ ++ setup_cga_palette(); ++ for (i = 0; i < n_cga_colors; i++) { ++ uga->palette[i].red = cga_colors[i].red; ++ uga->palette[i].green = cga_colors[i].green; ++ uga->palette[i].blue = cga_colors[i].blue; ++ } ++ } ++ ++ if (try_enable(backend)) { ++ reset_screen_geometry(backend); ++ return 1; ++ } ++ ++ backend->priv = NULL; ++ grub_free(uga); ++ return 0; ++} ++ ++static void disable(struct graphics_backend *backend) ++{ ++ struct uga *uga; ++ ++ if (!backend) ++ return; ++ ++ uga = backend->priv; ++ if (!uga || uga->current_mode != GRAPHICS) ++ return; ++ ++#if 0 ++ blank(backend); ++ ++ set_video_mode(uga, &uga->text_mode); ++ grub_efi_set_text_mode(1); ++#endif ++ uga->current_mode = TEXT; ++} ++ ++struct graphics_backend uga_backend = { ++ .name = "uga", ++ .enable = enable, ++ .disable = disable, ++ .set_kernel_params = set_kernel_params, ++ .clbl = clbl, ++ .set_palette = set_palette, ++ .get_pixel_idx = get_pixel_idx, ++ .get_pixel_rgb = get_pixel_rgb, ++ .draw_pixel = draw_pixel, ++ .reset_screen_geometry = reset_screen_geometry, ++ .get_screen_size = get_screen_size, ++ .getxy = uga_getxy, ++ .setxy = setxy, ++ .gotoxy = NULL, ++ .cursor = cursor, ++}; ++ ++#endif /* SUPPORT_GRAPHICS */ +diff --git a/efi/font_8x16.c b/efi/font_8x16.c +new file mode 100644 +index 0000000..94829ec +--- /dev/null ++++ b/efi/font_8x16.c +@@ -0,0 +1,4638 @@ ++/* font_8x16.c - 8x16 font for GRUB/EFI */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copied from Linux kernel drivers/video/console/font_8x16.c, ++ * which is generated by cpi2fnt. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifdef SUPPORT_GRAPHICS ++ ++#define FONTDATAMAX 4096 ++ ++const unsigned char font8x16[FONTDATAMAX] = { ++ ++ /* 0 0x00 '^@' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 1 0x01 '^A' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x81, /* 10000001 */ ++ 0xa5, /* 10100101 */ ++ 0x81, /* 10000001 */ ++ 0x81, /* 10000001 */ ++ 0xbd, /* 10111101 */ ++ 0x99, /* 10011001 */ ++ 0x81, /* 10000001 */ ++ 0x81, /* 10000001 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 2 0x02 '^B' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0xff, /* 11111111 */ ++ 0xdb, /* 11011011 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xc3, /* 11000011 */ ++ 0xe7, /* 11100111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 3 0x03 '^C' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x6c, /* 01101100 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0x7c, /* 01111100 */ ++ 0x38, /* 00111000 */ ++ 0x10, /* 00010000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 4 0x04 '^D' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x7c, /* 01111100 */ ++ 0xfe, /* 11111110 */ ++ 0x7c, /* 01111100 */ ++ 0x38, /* 00111000 */ ++ 0x10, /* 00010000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 5 0x05 '^E' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x3c, /* 00111100 */ ++ 0xe7, /* 11100111 */ ++ 0xe7, /* 11100111 */ ++ 0xe7, /* 11100111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 6 0x06 '^F' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x7e, /* 01111110 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 7 0x07 '^G' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 8 0x08 '^H' */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xe7, /* 11100111 */ ++ 0xc3, /* 11000011 */ ++ 0xc3, /* 11000011 */ ++ 0xe7, /* 11100111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ ++ /* 9 0x09 '^I' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0x42, /* 01000010 */ ++ 0x42, /* 01000010 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 10 0x0a '^J' */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xc3, /* 11000011 */ ++ 0x99, /* 10011001 */ ++ 0xbd, /* 10111101 */ ++ 0xbd, /* 10111101 */ ++ 0x99, /* 10011001 */ ++ 0xc3, /* 11000011 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ ++ /* 11 0x0b '^K' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1e, /* 00011110 */ ++ 0x0e, /* 00001110 */ ++ 0x1a, /* 00011010 */ ++ 0x32, /* 00110010 */ ++ 0x78, /* 01111000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x78, /* 01111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 12 0x0c '^L' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 13 0x0d '^M' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3f, /* 00111111 */ ++ 0x33, /* 00110011 */ ++ 0x3f, /* 00111111 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x70, /* 01110000 */ ++ 0xf0, /* 11110000 */ ++ 0xe0, /* 11100000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 14 0x0e '^N' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7f, /* 01111111 */ ++ 0x63, /* 01100011 */ ++ 0x7f, /* 01111111 */ ++ 0x63, /* 01100011 */ ++ 0x63, /* 01100011 */ ++ 0x63, /* 01100011 */ ++ 0x63, /* 01100011 */ ++ 0x67, /* 01100111 */ ++ 0xe7, /* 11100111 */ ++ 0xe6, /* 11100110 */ ++ 0xc0, /* 11000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 15 0x0f '^O' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xdb, /* 11011011 */ ++ 0x3c, /* 00111100 */ ++ 0xe7, /* 11100111 */ ++ 0x3c, /* 00111100 */ ++ 0xdb, /* 11011011 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 16 0x10 '^P' */ ++ 0x00, /* 00000000 */ ++ 0x80, /* 10000000 */ ++ 0xc0, /* 11000000 */ ++ 0xe0, /* 11100000 */ ++ 0xf0, /* 11110000 */ ++ 0xf8, /* 11111000 */ ++ 0xfe, /* 11111110 */ ++ 0xf8, /* 11111000 */ ++ 0xf0, /* 11110000 */ ++ 0xe0, /* 11100000 */ ++ 0xc0, /* 11000000 */ ++ 0x80, /* 10000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 17 0x11 '^Q' */ ++ 0x00, /* 00000000 */ ++ 0x02, /* 00000010 */ ++ 0x06, /* 00000110 */ ++ 0x0e, /* 00001110 */ ++ 0x1e, /* 00011110 */ ++ 0x3e, /* 00111110 */ ++ 0xfe, /* 11111110 */ ++ 0x3e, /* 00111110 */ ++ 0x1e, /* 00011110 */ ++ 0x0e, /* 00001110 */ ++ 0x06, /* 00000110 */ ++ 0x02, /* 00000010 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 18 0x12 '^R' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 19 0x13 '^S' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 20 0x14 '^T' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7f, /* 01111111 */ ++ 0xdb, /* 11011011 */ ++ 0xdb, /* 11011011 */ ++ 0xdb, /* 11011011 */ ++ 0x7b, /* 01111011 */ ++ 0x1b, /* 00011011 */ ++ 0x1b, /* 00011011 */ ++ 0x1b, /* 00011011 */ ++ 0x1b, /* 00011011 */ ++ 0x1b, /* 00011011 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 21 0x15 '^U' */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0x60, /* 01100000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x0c, /* 00001100 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 22 0x16 '^V' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 23 0x17 '^W' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 24 0x18 '^X' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 25 0x19 '^Y' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 26 0x1a '^Z' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0xfe, /* 11111110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 27 0x1b '^[' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xfe, /* 11111110 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 28 0x1c '^\' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 29 0x1d '^]' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x28, /* 00101000 */ ++ 0x6c, /* 01101100 */ ++ 0xfe, /* 11111110 */ ++ 0x6c, /* 01101100 */ ++ 0x28, /* 00101000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 30 0x1e '^^' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x38, /* 00111000 */ ++ 0x7c, /* 01111100 */ ++ 0x7c, /* 01111100 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 31 0x1f '^_' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0x7c, /* 01111100 */ ++ 0x7c, /* 01111100 */ ++ 0x38, /* 00111000 */ ++ 0x38, /* 00111000 */ ++ 0x10, /* 00010000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 32 0x20 ' ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 33 0x21 '!' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x3c, /* 00111100 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 34 0x22 '"' */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x24, /* 00100100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 35 0x23 '#' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0xfe, /* 11111110 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0xfe, /* 11111110 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 36 0x24 '$' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc2, /* 11000010 */ ++ 0xc0, /* 11000000 */ ++ 0x7c, /* 01111100 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x86, /* 10000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 37 0x25 '%' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc2, /* 11000010 */ ++ 0xc6, /* 11000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc6, /* 11000110 */ ++ 0x86, /* 10000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 38 0x26 '&' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 39 0x27 ''' */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 40 0x28 '(' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 41 0x29 ')' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 42 0x2a '*' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0xff, /* 11111111 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 43 0x2b '+' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 44 0x2c ',' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 45 0x2d '-' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 46 0x2e '.' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 47 0x2f '/' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x02, /* 00000010 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc0, /* 11000000 */ ++ 0x80, /* 10000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 48 0x30 '0' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 49 0x31 '1' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x38, /* 00111000 */ ++ 0x78, /* 01111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 50 0x32 '2' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 51 0x33 '3' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x3c, /* 00111100 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 52 0x34 '4' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x0c, /* 00001100 */ ++ 0x1c, /* 00011100 */ ++ 0x3c, /* 00111100 */ ++ 0x6c, /* 01101100 */ ++ 0xcc, /* 11001100 */ ++ 0xfe, /* 11111110 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x1e, /* 00011110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 53 0x35 '5' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xfc, /* 11111100 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 54 0x36 '6' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x60, /* 01100000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xfc, /* 11111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 55 0x37 '7' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 56 0x38 '8' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 57 0x39 '9' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7e, /* 01111110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x78, /* 01111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 58 0x3a ':' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 59 0x3b ';' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 60 0x3c '<' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x06, /* 00000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 61 0x3d '=' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 62 0x3e '>' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 63 0x3f '?' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 64 0x40 '@' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xde, /* 11011110 */ ++ 0xde, /* 11011110 */ ++ 0xde, /* 11011110 */ ++ 0xdc, /* 11011100 */ ++ 0xc0, /* 11000000 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 65 0x41 'A' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 66 0x42 'B' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfc, /* 11111100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x7c, /* 01111100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0xfc, /* 11111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 67 0x43 'C' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0xc2, /* 11000010 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc2, /* 11000010 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 68 0x44 'D' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xf8, /* 11111000 */ ++ 0x6c, /* 01101100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x6c, /* 01101100 */ ++ 0xf8, /* 11111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 69 0x45 'E' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x66, /* 01100110 */ ++ 0x62, /* 01100010 */ ++ 0x68, /* 01101000 */ ++ 0x78, /* 01111000 */ ++ 0x68, /* 01101000 */ ++ 0x60, /* 01100000 */ ++ 0x62, /* 01100010 */ ++ 0x66, /* 01100110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 70 0x46 'F' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x66, /* 01100110 */ ++ 0x62, /* 01100010 */ ++ 0x68, /* 01101000 */ ++ 0x78, /* 01111000 */ ++ 0x68, /* 01101000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0xf0, /* 11110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 71 0x47 'G' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0xc2, /* 11000010 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xde, /* 11011110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x66, /* 01100110 */ ++ 0x3a, /* 00111010 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 72 0x48 'H' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 73 0x49 'I' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 74 0x4a 'J' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1e, /* 00011110 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x78, /* 01111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 75 0x4b 'K' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xe6, /* 11100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x6c, /* 01101100 */ ++ 0x78, /* 01111000 */ ++ 0x78, /* 01111000 */ ++ 0x6c, /* 01101100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0xe6, /* 11100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 76 0x4c 'L' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xf0, /* 11110000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x62, /* 01100010 */ ++ 0x66, /* 01100110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 77 0x4d 'M' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xee, /* 11101110 */ ++ 0xfe, /* 11111110 */ ++ 0xfe, /* 11111110 */ ++ 0xd6, /* 11010110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 78 0x4e 'N' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xe6, /* 11100110 */ ++ 0xf6, /* 11110110 */ ++ 0xfe, /* 11111110 */ ++ 0xde, /* 11011110 */ ++ 0xce, /* 11001110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 79 0x4f 'O' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 80 0x50 'P' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfc, /* 11111100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x7c, /* 01111100 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0xf0, /* 11110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 81 0x51 'Q' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xd6, /* 11010110 */ ++ 0xde, /* 11011110 */ ++ 0x7c, /* 01111100 */ ++ 0x0c, /* 00001100 */ ++ 0x0e, /* 00001110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 82 0x52 'R' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfc, /* 11111100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x7c, /* 01111100 */ ++ 0x6c, /* 01101100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0xe6, /* 11100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 83 0x53 'S' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x60, /* 01100000 */ ++ 0x38, /* 00111000 */ ++ 0x0c, /* 00001100 */ ++ 0x06, /* 00000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 84 0x54 'T' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x5a, /* 01011010 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 85 0x55 'U' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 86 0x56 'V' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x10, /* 00010000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 87 0x57 'W' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xfe, /* 11111110 */ ++ 0xee, /* 11101110 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 88 0x58 'X' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x7c, /* 01111100 */ ++ 0x38, /* 00111000 */ ++ 0x38, /* 00111000 */ ++ 0x7c, /* 01111100 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 89 0x59 'Y' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 90 0x5a 'Z' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0x86, /* 10000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc2, /* 11000010 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 91 0x5b '[' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 92 0x5c '\' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x80, /* 10000000 */ ++ 0xc0, /* 11000000 */ ++ 0xe0, /* 11100000 */ ++ 0x70, /* 01110000 */ ++ 0x38, /* 00111000 */ ++ 0x1c, /* 00011100 */ ++ 0x0e, /* 00001110 */ ++ 0x06, /* 00000110 */ ++ 0x02, /* 00000010 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 93 0x5d ']' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 94 0x5e '^' */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 95 0x5f '_' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 96 0x60 '`' */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 97 0x61 'a' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0x0c, /* 00001100 */ ++ 0x7c, /* 01111100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 98 0x62 'b' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xe0, /* 11100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x78, /* 01111000 */ ++ 0x6c, /* 01101100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 99 0x63 'c' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 100 0x64 'd' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1c, /* 00011100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x3c, /* 00111100 */ ++ 0x6c, /* 01101100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 101 0x65 'e' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 102 0x66 'f' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1c, /* 00011100 */ ++ 0x36, /* 00110110 */ ++ 0x32, /* 00110010 */ ++ 0x30, /* 00110000 */ ++ 0x78, /* 01111000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x78, /* 01111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 103 0x67 'g' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x7c, /* 01111100 */ ++ 0x0c, /* 00001100 */ ++ 0xcc, /* 11001100 */ ++ 0x78, /* 01111000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 104 0x68 'h' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xe0, /* 11100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x6c, /* 01101100 */ ++ 0x76, /* 01110110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0xe6, /* 11100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 105 0x69 'i' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 106 0x6a 'j' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x00, /* 00000000 */ ++ 0x0e, /* 00001110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ ++ /* 107 0x6b 'k' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xe0, /* 11100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x66, /* 01100110 */ ++ 0x6c, /* 01101100 */ ++ 0x78, /* 01111000 */ ++ 0x78, /* 01111000 */ ++ 0x6c, /* 01101100 */ ++ 0x66, /* 01100110 */ ++ 0xe6, /* 11100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 108 0x6c 'l' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 109 0x6d 'm' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xec, /* 11101100 */ ++ 0xfe, /* 11111110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 110 0x6e 'n' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xdc, /* 11011100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 111 0x6f 'o' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 112 0x70 'p' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xdc, /* 11011100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x7c, /* 01111100 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0xf0, /* 11110000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 113 0x71 'q' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x7c, /* 01111100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x1e, /* 00011110 */ ++ 0x00, /* 00000000 */ ++ ++ /* 114 0x72 'r' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xdc, /* 11011100 */ ++ 0x76, /* 01110110 */ ++ 0x66, /* 01100110 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0xf0, /* 11110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 115 0x73 's' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0x60, /* 01100000 */ ++ 0x38, /* 00111000 */ ++ 0x0c, /* 00001100 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 116 0x74 't' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0xfc, /* 11111100 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x36, /* 00110110 */ ++ 0x1c, /* 00011100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 117 0x75 'u' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 118 0x76 'v' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 119 0x77 'w' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xd6, /* 11010110 */ ++ 0xfe, /* 11111110 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 120 0x78 'x' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x38, /* 00111000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 121 0x79 'y' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7e, /* 01111110 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0xf8, /* 11111000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 122 0x7a 'z' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xcc, /* 11001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 123 0x7b '{' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x0e, /* 00001110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x70, /* 01110000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x0e, /* 00001110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 124 0x7c '|' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 125 0x7d '}' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x70, /* 01110000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x0e, /* 00001110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x70, /* 01110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 126 0x7e '~' */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 127 0x7f '' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 128 0x80 '€' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0xc2, /* 11000010 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc2, /* 11000010 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x70, /* 01110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 129 0x81 '' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 130 0x82 '‚' */ ++ 0x00, /* 00000000 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 131 0x83 'ƒ' */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0x0c, /* 00001100 */ ++ 0x7c, /* 01111100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 132 0x84 '„' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0x0c, /* 00001100 */ ++ 0x7c, /* 01111100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 133 0x85 '…' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0x0c, /* 00001100 */ ++ 0x7c, /* 01111100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 134 0x86 '†' */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0x0c, /* 00001100 */ ++ 0x7c, /* 01111100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 135 0x87 '‡' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x18, /* 00011000 */ ++ 0x70, /* 01110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 136 0x88 'ˆ' */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 137 0x89 '‰' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 138 0x8a 'Š' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 139 0x8b '‹' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 140 0x8c 'Œ' */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 141 0x8d '' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 142 0x8e 'Ž' */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 143 0x8f '' */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 144 0x90 '' */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x66, /* 01100110 */ ++ 0x62, /* 01100010 */ ++ 0x68, /* 01101000 */ ++ 0x78, /* 01111000 */ ++ 0x68, /* 01101000 */ ++ 0x62, /* 01100010 */ ++ 0x66, /* 01100110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 145 0x91 '‘' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xec, /* 11101100 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x7e, /* 01111110 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0x6e, /* 01101110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 146 0x92 '’' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3e, /* 00111110 */ ++ 0x6c, /* 01101100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xfe, /* 11111110 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xce, /* 11001110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 147 0x93 '“' */ ++ 0x00, /* 00000000 */ ++ 0x10, /* 00010000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 148 0x94 '”' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 149 0x95 '•' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 150 0x96 '–' */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x78, /* 01111000 */ ++ 0xcc, /* 11001100 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 151 0x97 '—' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 152 0x98 '˜' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7e, /* 01111110 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x78, /* 01111000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 153 0x99 '™' */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 154 0x9a 'š' */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 155 0x9b '›' */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 156 0x9c 'œ' */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x64, /* 01100100 */ ++ 0x60, /* 01100000 */ ++ 0xf0, /* 11110000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0xe6, /* 11100110 */ ++ 0xfc, /* 11111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 157 0x9d '' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 158 0x9e 'ž' */ ++ 0x00, /* 00000000 */ ++ 0xf8, /* 11111000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xf8, /* 11111000 */ ++ 0xc4, /* 11000100 */ ++ 0xcc, /* 11001100 */ ++ 0xde, /* 11011110 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 159 0x9f 'Ÿ' */ ++ 0x00, /* 00000000 */ ++ 0x0e, /* 00001110 */ ++ 0x1b, /* 00011011 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xd8, /* 11011000 */ ++ 0x70, /* 01110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 160 0xa0 ' ' */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0x0c, /* 00001100 */ ++ 0x7c, /* 01111100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 161 0xa1 '¡' */ ++ 0x00, /* 00000000 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 162 0xa2 '¢' */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 163 0xa3 '£' */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x00, /* 00000000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 164 0xa4 '¤' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0x00, /* 00000000 */ ++ 0xdc, /* 11011100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 165 0xa5 '¥' */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0x00, /* 00000000 */ ++ 0xc6, /* 11000110 */ ++ 0xe6, /* 11100110 */ ++ 0xf6, /* 11110110 */ ++ 0xfe, /* 11111110 */ ++ 0xde, /* 11011110 */ ++ 0xce, /* 11001110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 166 0xa6 '¦' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x3e, /* 00111110 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 167 0xa7 '§' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 168 0xa8 '¨' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc0, /* 11000000 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x7c, /* 01111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 169 0xa9 '©' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 170 0xaa 'ª' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 171 0xab '«' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0xe0, /* 11100000 */ ++ 0x62, /* 01100010 */ ++ 0x66, /* 01100110 */ ++ 0x6c, /* 01101100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xdc, /* 11011100 */ ++ 0x86, /* 10000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x3e, /* 00111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 172 0xac '¬' */ ++ 0x00, /* 00000000 */ ++ 0x60, /* 01100000 */ ++ 0xe0, /* 11100000 */ ++ 0x62, /* 01100010 */ ++ 0x66, /* 01100110 */ ++ 0x6c, /* 01101100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x66, /* 01100110 */ ++ 0xce, /* 11001110 */ ++ 0x9a, /* 10011010 */ ++ 0x3f, /* 00111111 */ ++ 0x06, /* 00000110 */ ++ 0x06, /* 00000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 173 0xad '­' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x3c, /* 00111100 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 174 0xae '®' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x36, /* 00110110 */ ++ 0x6c, /* 01101100 */ ++ 0xd8, /* 11011000 */ ++ 0x6c, /* 01101100 */ ++ 0x36, /* 00110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 175 0xaf '¯' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xd8, /* 11011000 */ ++ 0x6c, /* 01101100 */ ++ 0x36, /* 00110110 */ ++ 0x6c, /* 01101100 */ ++ 0xd8, /* 11011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 176 0xb0 '°' */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ 0x11, /* 00010001 */ ++ 0x44, /* 01000100 */ ++ ++ /* 177 0xb1 '±' */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ 0x55, /* 01010101 */ ++ 0xaa, /* 10101010 */ ++ ++ /* 178 0xb2 '²' */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ 0xdd, /* 11011101 */ ++ 0x77, /* 01110111 */ ++ ++ /* 179 0xb3 '³' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 180 0xb4 '´' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 181 0xb5 'µ' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 182 0xb6 '¶' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xf6, /* 11110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 183 0xb7 '·' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 184 0xb8 '¸' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 185 0xb9 '¹' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xf6, /* 11110110 */ ++ 0x06, /* 00000110 */ ++ 0xf6, /* 11110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 186 0xba 'º' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 187 0xbb '»' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x06, /* 00000110 */ ++ 0xf6, /* 11110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 188 0xbc '¼' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xf6, /* 11110110 */ ++ 0x06, /* 00000110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 189 0xbd '½' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 190 0xbe '¾' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 191 0xbf '¿' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xf8, /* 11111000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 192 0xc0 'À' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 193 0xc1 'Á' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 194 0xc2 'Â' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 195 0xc3 'Ã' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 196 0xc4 'Ä' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 197 0xc5 'Å' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xff, /* 11111111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 198 0xc6 'Æ' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 199 0xc7 'Ç' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x37, /* 00110111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 200 0xc8 'È' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x37, /* 00110111 */ ++ 0x30, /* 00110000 */ ++ 0x3f, /* 00111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 201 0xc9 'É' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3f, /* 00111111 */ ++ 0x30, /* 00110000 */ ++ 0x37, /* 00110111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 202 0xca 'Ê' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xf7, /* 11110111 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 203 0xcb 'Ë' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0xf7, /* 11110111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 204 0xcc 'Ì' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x37, /* 00110111 */ ++ 0x30, /* 00110000 */ ++ 0x37, /* 00110111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 205 0xcd 'Í' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 206 0xce 'Î' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xf7, /* 11110111 */ ++ 0x00, /* 00000000 */ ++ 0xf7, /* 11110111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 207 0xcf 'Ï' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 208 0xd0 'Ð' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 209 0xd1 'Ñ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 210 0xd2 'Ò' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 211 0xd3 'Ó' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x3f, /* 00111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 212 0xd4 'Ô' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 213 0xd5 'Õ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 214 0xd6 'Ö' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x3f, /* 00111111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 215 0xd7 '×' */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0xff, /* 11111111 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ ++ /* 216 0xd8 'Ø' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xff, /* 11111111 */ ++ 0x18, /* 00011000 */ ++ 0xff, /* 11111111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 217 0xd9 'Ù' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xf8, /* 11111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 218 0xda 'Ú' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1f, /* 00011111 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 219 0xdb 'Û' */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ ++ /* 220 0xdc 'Ü' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ ++ /* 221 0xdd 'Ý' */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ 0xf0, /* 11110000 */ ++ ++ /* 222 0xde 'Þ' */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ 0x0f, /* 00001111 */ ++ ++ /* 223 0xdf 'ß' */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0xff, /* 11111111 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 224 0xe0 'à' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0xdc, /* 11011100 */ ++ 0x76, /* 01110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 225 0xe1 'á' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x78, /* 01111000 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xcc, /* 11001100 */ ++ 0xd8, /* 11011000 */ ++ 0xcc, /* 11001100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xcc, /* 11001100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 226 0xe2 'â' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0xc0, /* 11000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 227 0xe3 'ã' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 228 0xe4 'ä' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 229 0xe5 'å' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0x70, /* 01110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 230 0xe6 'æ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x7c, /* 01111100 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0xc0, /* 11000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 231 0xe7 'ç' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 232 0xe8 'è' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 233 0xe9 'é' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xfe, /* 11111110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 234 0xea 'ê' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0xee, /* 11101110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 235 0xeb 'ë' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1e, /* 00011110 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x3e, /* 00111110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x66, /* 01100110 */ ++ 0x3c, /* 00111100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 236 0xec 'ì' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0xdb, /* 11011011 */ ++ 0xdb, /* 11011011 */ ++ 0xdb, /* 11011011 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 237 0xed 'í' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x03, /* 00000011 */ ++ 0x06, /* 00000110 */ ++ 0x7e, /* 01111110 */ ++ 0xdb, /* 11011011 */ ++ 0xdb, /* 11011011 */ ++ 0xf3, /* 11110011 */ ++ 0x7e, /* 01111110 */ ++ 0x60, /* 01100000 */ ++ 0xc0, /* 11000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 238 0xee 'î' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x1c, /* 00011100 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x7c, /* 01111100 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x1c, /* 00011100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 239 0xef 'ï' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7c, /* 01111100 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0xc6, /* 11000110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 240 0xf0 'ð' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0xfe, /* 11111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 241 0xf1 'ñ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x7e, /* 01111110 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 242 0xf2 'ò' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x06, /* 00000110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 243 0xf3 'ó' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x30, /* 00110000 */ ++ 0x60, /* 01100000 */ ++ 0x30, /* 00110000 */ ++ 0x18, /* 00011000 */ ++ 0x0c, /* 00001100 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 244 0xf4 'ô' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x0e, /* 00001110 */ ++ 0x1b, /* 00011011 */ ++ 0x1b, /* 00011011 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ ++ /* 245 0xf5 'õ' */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0xd8, /* 11011000 */ ++ 0x70, /* 01110000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 246 0xf6 'ö' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 247 0xf7 '÷' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0x00, /* 00000000 */ ++ 0x76, /* 01110110 */ ++ 0xdc, /* 11011100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 248 0xf8 'ø' */ ++ 0x00, /* 00000000 */ ++ 0x38, /* 00111000 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x38, /* 00111000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 249 0xf9 'ù' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 250 0xfa 'ú' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x18, /* 00011000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 251 0xfb 'û' */ ++ 0x00, /* 00000000 */ ++ 0x0f, /* 00001111 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0x0c, /* 00001100 */ ++ 0xec, /* 11101100 */ ++ 0x6c, /* 01101100 */ ++ 0x6c, /* 01101100 */ ++ 0x3c, /* 00111100 */ ++ 0x1c, /* 00011100 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 252 0xfc 'ü' */ ++ 0x00, /* 00000000 */ ++ 0x6c, /* 01101100 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x36, /* 00110110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 253 0xfd 'ý' */ ++ 0x00, /* 00000000 */ ++ 0x3c, /* 00111100 */ ++ 0x66, /* 01100110 */ ++ 0x0c, /* 00001100 */ ++ 0x18, /* 00011000 */ ++ 0x32, /* 00110010 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 254 0xfe 'þ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x7e, /* 01111110 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++ /* 255 0xff 'ÿ' */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ 0x00, /* 00000000 */ ++ ++}; ++ ++#endif +diff --git a/efi/graphics.c b/efi/graphics.c +new file mode 100644 +index 0000000..eb98d8a +--- /dev/null ++++ b/efi/graphics.c +@@ -0,0 +1,666 @@ ++#ifdef SUPPORT_GRAPHICS ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "graphics.h" ++ ++#if 0 ++#include "ugadebug.h" ++#endif ++ ++int foreground = 0x00ffffff, background = 0; ++int graphics_inited = 0; ++ ++/* Convert a character which is a hex digit to the appropriate integer */ ++int ++hex (int v) ++{ ++ if (v >= 'A' && v <= 'F') ++ return (v - 'A' + 10); ++ if (v >= 'a' && v <= 'f') ++ return (v - 'a' + 10); ++ return (v - '0'); ++} ++ ++grub_uint16_t ++grub_console_getwh (void) ++{ ++ grub_efi_simple_text_output_interface_t *o; ++ grub_efi_uintn_t columns, rows; ++ ++ o = grub_efi_system_table->con_out; ++ if (Call_Service_4 (o->query_mode , o, o->mode->mode, &columns, &rows) ++ != GRUB_EFI_SUCCESS) ++ { ++ /* Why does this fail? */ ++ columns = 80; ++ rows = 25; ++ } ++ ++ return ((columns << 8) | rows); ++} ++ ++extern struct graphics_backend uga_backend; ++extern struct graphics_backend eg_backend; ++ ++static struct graphics_backend *backends[] = { ++ &eg_backend, ++ &uga_backend, ++ NULL ++}; ++static struct graphics_backend *backend; ++ ++struct graphics { ++ int scroll; ++ int fontx; ++ int fonty; ++ ++ int standard_color; ++ int normal_color; ++ int highlight_color; ++ int current_color; ++ color_state color_state; ++ ++ char splashpath[64]; ++ struct xpm *splashimage; ++ ++ unsigned short *text; ++}; ++ ++static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID; ++static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; ++static grub_efi_guid_t pci_root_io_guid = GRUB_EFI_PCI_ROOT_IO_GUID; ++ ++static void ++grub_efi_configure_pci(grub_efi_handle_t handle) ++{ ++ grub_efi_device_path_t *path, *parent; ++ grub_efi_handle_t parent_handle; ++ grub_efi_pci_io_t *pci_proto; ++ grub_efi_pci_root_io_t *pci_root_proto; ++ grub_efi_status_t status; ++ ++ path = grub_efi_get_device_path(handle); ++ parent = find_parent_device_path(path); ++ ++ if (!parent) ++ return; ++ ++ status = grub_efi_locate_device_path (&device_path_guid, &parent, ++ &parent_handle); ++ if (status != GRUB_EFI_SUCCESS) ++ return; ++ ++ pci_proto = grub_efi_open_protocol (parent_handle, &pci_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ pci_root_proto = grub_efi_open_protocol (parent_handle, &pci_root_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ ++ if (pci_proto || pci_root_proto) ++ { ++ if (pci_proto) ++ { ++ Call_Service_4 (pci_proto->attributes, pci_proto, ++ grub_efi_pci_io_attribute_operation_enable, ++ GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | ++ GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO | ++ GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO, NULL); ++ ++ grub_efi_configure_pci (parent_handle); ++ } ++ else ++ { ++ grub_uint8_t value = 0x33; ++ grub_uint16_t vendor; ++ ++ Call_Service_5 (pci_root_proto->pci.read, pci_root_proto, ++ grub_efi_pci_io_width_uint16, 0x00, 1, &vendor); ++ ++ if (vendor == 0x8086) { ++ Call_Service_5 (pci_root_proto->pci.write, pci_root_proto, ++ grub_efi_pci_io_width_uint8, 0x91, 1, &value); ++ Call_Service_5 (pci_root_proto->pci.write, pci_root_proto, ++ grub_efi_pci_io_width_uint8, 0x92, 1, &value); ++ } ++ } ++ } ++ grub_free(parent); ++} ++ ++void ++grub_efi_setup_gfx_pci(grub_efi_handle_t handle) ++{ ++ grub_efi_uint64_t romsize; ++ grub_efi_uint16_t *header; ++ void *vrom; ++ grub_efi_pci_io_t *pci_proto; ++ ++ pci_proto = grub_efi_open_protocol (handle, &pci_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (!pci_proto) ++ return; ++ ++ romsize = pci_proto->rom_size; ++ ++ if (!romsize || romsize > 65536 || !pci_proto->rom_image) ++ return; ++ ++ /* Copy the ROM */ ++ vrom = grub_efi_allocate_runtime_pages(0xc0000, 16); ++ ++ if (!vrom) ++ return; ++ ++ header = vrom; ++ ++ if (*header == 0xaa55) ++ return; ++ ++ grub_efi_configure_pci(handle); ++ ++ grub_memcpy(vrom, pci_proto->rom_image, romsize); ++} ++ ++void ++graphics_set_kernel_params(struct linux_kernel_params *params) ++{ ++ params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column; ++ params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row; ++ params->video_page = 0; /* ??? */ ++ params->video_mode = grub_efi_system_table->con_out->mode->mode; ++ params->video_width = (grub_console_getwh () >> 8); ++ params->video_ega_bx = 0; ++ params->video_height = (grub_console_getwh () & 0xff); ++ params->have_vga = 0; ++ params->font_size = 16; /* XXX */ ++ ++ /* No VBE. */ ++ params->lfb_width = 0; ++ params->lfb_height = 0; ++ params->lfb_depth = 0; ++ params->lfb_base = 0; ++ params->lfb_size = 0; ++ params->lfb_line_len = 0; ++ params->red_mask_size = 0; ++ params->red_field_pos = 0; ++ params->green_mask_size = 0; ++ params->green_field_pos = 0; ++ params->blue_mask_size = 0; ++ params->blue_field_pos = 0; ++ params->reserved_mask_size = 0; ++ params->reserved_field_pos = 0; ++ params->vesapm_segment = 0; ++ params->vesapm_offset = 0; ++ params->lfb_pages = 0; ++ params->vesa_attrib = 0; ++ ++ if (backend && backend->set_kernel_params) ++ backend->set_kernel_params(backend, params); ++} ++ ++int ++graphics_alloc_text_buf(void) ++{ ++ if (backend) { ++ struct graphics *graphics = backend->graphics; ++ position_t screen_size; ++ ++ if (graphics->text) { ++ grub_free(graphics->text); ++ graphics->text = NULL; ++ } ++ graphics_get_screen_rowscols(&screen_size); ++ graphics->text = grub_malloc(screen_size.x ++ * screen_size.y ++ * sizeof (graphics->text[0])); ++ if (graphics->text) { ++ int x, y; ++ for (y = 0; y < screen_size.y; y++) ++ for (x = 0; x < screen_size.x; x++) ++ graphics->text[y * screen_size.x + x] = ' '; ++ return 1; ++ } ++ } ++ return 0; ++} ++ ++unsigned short * ++graphics_get_text_buf(void) ++{ ++ return backend ? backend->graphics->text : NULL; ++ return NULL; ++} ++ ++int ++graphics_get_screen_rowscols(position_t *size) ++{ ++#if 0 ++ if (backend && backend->get_screen_size) { ++ backend->get_screen_size(backend, size); ++ size->x >>= 3; ++ size->y >>= 4; ++ return 1; ++ } ++ size->x = -1; ++ size->y = -1; ++ return 0; ++#else ++ size->x = 80; ++ size->y = 30; ++ return 1; ++#endif ++} ++ ++int ++graphics_get_scroll(void) ++{ ++ return backend ? backend->graphics->scroll : 1; ++} ++ ++void ++graphics_set_palette(int idx, int red, int green, int blue) ++{ ++ if (backend && backend->set_palette) { ++ backend->set_palette(backend, idx, red, green, blue); ++ backend->set_palette(backend, 0, 0x00, 0x00, 0x00); ++ backend->set_palette(backend, 15, 0xff, 0xff, 0xff); ++ backend->set_palette(backend, 16, 0x00, 0x00, 0x00); ++ } ++} ++ ++static char splashpath[64] = ""; ++ ++static void ++graphics_set_splash_helper(void) ++{ ++ if (backend) { ++ struct xpm *xpm = NULL; ++ ++ if (backend->graphics->splashimage) ++ xpm_free(backend->graphics->splashimage); ++ ++ if (splashpath[0]) ++ xpm = xpm_open(splashpath); ++ ++ if (xpm) { ++ backend->graphics->splashimage = xpm; ++ grub_strcpy(backend->graphics->splashpath, splashpath); ++ } else { ++ backend->graphics->splashimage = NULL; ++ backend->graphics->splashpath[0] = '\0'; ++ } ++ backend->reset_screen_geometry(backend); ++ } ++} ++ ++void ++graphics_set_splash(char *s) ++{ ++ if (s && s[0] != '\0') ++ grub_strcpy(splashpath, s); ++ else ++ splashpath[0] = '\0'; ++ graphics_set_splash_helper(); ++} ++ ++char * ++graphics_get_splash(void) ++{ ++ if (backend) ++ return backend->graphics->splashpath; ++ if (splashpath[0] != '\0') ++ return splashpath; ++ return NULL; ++} ++ ++struct xpm * ++graphics_get_splash_xpm(void) ++{ ++ if (backend) ++ return backend->graphics->splashimage; ++ return NULL; ++} ++ ++void ++graphics_putchar(int ch) ++{ ++ struct graphics *graphics; ++ position_t screensz; ++ int offset; ++ ++ void *old_term = current_term; ++ ++ if (!backend) ++ return; ++ ++ graphics = backend->graphics; ++ graphics_get_screen_rowscols(&screensz); ++ ++ ch &= 0xff; ++ ++ graphics_cursor(0); ++ ++ if (ch == '\n') { ++ if (graphics->fonty + 1 < screensz.y) { ++ graphics_setxy(graphics->fontx, graphics->fonty + 1); ++ } else ++ graphics_scroll(); ++ graphics_cursor(1); ++ return; ++ } else if (ch == '\r') { ++ graphics_setxy(0, graphics->fonty); ++ graphics_cursor(1); ++ return; ++ } ++ ++ graphics_cursor(0); ++ ++ offset = graphics->fontx + graphics->fonty * screensz.x; ++ graphics->text[offset] = ch; ++ graphics->text[offset] &= 0x00ff; ++ if (graphics->current_color & 0xf0) ++ graphics->text[offset] |= 0x100; ++ ++ graphics_cursor(0); ++ ++ if ((graphics->fontx + 1) >= screensz.x) { ++ graphics_setxy(0, graphics->fonty); ++ if (graphics->fonty + 1 < screensz.y) ++ graphics_setxy(0, graphics->fonty + 1); ++ else ++ graphics_scroll(); ++ } else { ++ graphics_setxy(graphics->fontx + 1, graphics->fonty); ++ } ++ ++ graphics_cursor(1); ++} ++ ++void ++graphics_set_font_position(position_t *pos) ++{ ++ if (backend) { ++ backend->graphics->fontx = pos->x; ++ backend->graphics->fonty = pos->y; ++ } ++} ++ ++void ++graphics_get_font_position(position_t *pos) ++{ ++ if (backend) { ++ pos->x = backend->graphics->fontx; ++ pos->y = backend->graphics->fonty; ++ return; ++ } ++ pos->x = -1; ++ pos->y = -1; ++} ++ ++void ++graphics_get_font_size(position_t *size) ++{ ++ size->x = 8; ++ size->y = 16; ++} ++ ++void ++graphics_setxy(int x, int y) ++{ ++ if (!backend) ++ return; ++ ++ if (backend->setxy) { ++ position_t pos = {x, y}; ++ backend->setxy(backend, &pos); ++ return; ++ } ++} ++ ++int ++graphics_getxy(void) ++{ ++ int ret = 0; ++ if (backend) { ++ if (backend->getxy) { ++ position_t pos; ++ backend->getxy(backend, &pos); ++ ret = ((pos.x & 0xff) << 8) | (pos.y & 0xff); ++ } else { ++ ret = ((backend->graphics->fontx & 0xff) << 8) | (backend->graphics->fonty & 0xff); ++ } ++ } ++ return ret; ++} ++ ++void ++graphics_scroll (void) ++{ ++ struct graphics *graphics; ++ position_t screensz; ++ int i; ++ unsigned short *text; ++ int linesz; ++ ++ if (!backend) ++ return; ++ ++ graphics = backend->graphics; ++ ++ /* we don't want to scroll recursively... that would be bad */ ++ if (!graphics->scroll) ++ return; ++ graphics->scroll = 0; ++ graphics_get_screen_rowscols(&screensz); ++ ++ text = graphics_get_text_buf(); ++ linesz = screensz.x * sizeof (text[0]); ++ for (i = 1; i < screensz.y; i++) { ++ unsigned short *prev = &text[(i-1) * screensz.x]; ++ unsigned short *this = prev + screensz.x; ++ ++ memmove(prev, this, linesz); ++ prev = this; ++ this += screensz.x; ++ } ++ graphics_setxy(0, screensz.y - 1); ++ for (i = 0; i < screensz.x; i++) { ++ graphics_putchar(' '); ++ //text[(screensz.y-1) + i] = ' '; ++ } ++ ++ graphics_clbl(0, 0, screensz.x, screensz.y, 1); ++ graphics_setxy(0, screensz.y - 1); ++ graphics->scroll = 1; ++} ++ ++void ++graphics_cursor(int set) ++{ ++ if (backend && backend->cursor) ++ backend->cursor(backend, set); ++} ++ ++void ++graphics_gotoxy(int x, int y) ++{ ++ position_t pos = {x,y}; ++ if (backend) { ++ if (backend->gotoxy) { ++ backend->gotoxy(backend, &pos); ++ } else { ++ graphics_cursor(0); ++ graphics_setxy(x, y); ++ graphics_cursor(1); ++ } ++ } ++} ++ ++void ++graphics_cls(void) ++{ ++ int x = 0, y = 0, xy; ++ unsigned short *text; ++ position_t screensz; ++ ++ graphics_get_screen_rowscols(&screensz); ++ text = graphics_get_text_buf(); ++ for (y = 0; y < screensz.y; y++) ++ for (x = 0; x < screensz.x; x++) ++ text[x + y * screensz.x] = ' '; ++ ++ if (backend) { ++ //int xy = graphics_getxy(); ++ ++ graphics_clbl(0, 0, screensz.x, screensz.y, 0); ++ //graphics_gotoxy(xy & 0xf0 >> 8, xy & 0xf); ++ graphics_gotoxy(0, 0); ++ } ++} ++ ++void ++graphics_clbl(int col, int row, int width, int height, int draw_text) ++{ ++ if (backend) { ++ int x = 0, y = 0, xy; ++ unsigned short *text; ++ position_t screensz; ++ ++ graphics_get_screen_rowscols(&screensz); ++ ++#if 0 ++ xy = graphics_getxy(); ++#endif ++ if (backend->clbl) { ++ backend->clbl(backend, col, row, width, height, draw_text); ++ } else { ++ for (y = 0; y < screensz.y; y++) { ++ for (x = 0; x < screensz.x; x++) { ++ graphics_setxy(x, y); ++ graphics_cursor(0); ++ } ++ } ++ } ++#if 0 ++ graphics_gotoxy(xy >> 8, xy & 0xf); ++#endif ++ } ++} ++ ++void ++graphics_setcolorstate (color_state state) ++{ ++ struct graphics *graphics; ++ if (!backend) ++ return; ++ ++ graphics = backend->graphics; ++ ++ switch (state) { ++ case COLOR_STATE_STANDARD: ++ graphics->current_color = graphics->standard_color; ++ break; ++ case COLOR_STATE_NORMAL: ++ graphics->current_color = graphics->normal_color; ++ break; ++ case COLOR_STATE_HIGHLIGHT: ++ graphics->current_color = graphics->highlight_color; ++ break; ++ default: ++ graphics->current_color = graphics->standard_color; ++ break; ++ } ++ ++ graphics->color_state = state; ++} ++ ++void ++graphics_setcolor (int normal_color, int highlight_color) ++{ ++ backend->graphics->normal_color = normal_color; ++ backend->graphics->highlight_color = highlight_color; ++ ++ graphics_setcolorstate (backend->graphics->color_state); ++} ++ ++int ++graphics_setcursor(int on) ++{ ++ /* FIXME: we don't have a cursor in graphics */ ++ return 0; ++} ++ ++int ++graphics_init(void) ++{ ++ struct graphics *graphics; ++ int i; ++ ++ if (graphics_inited) ++ return 1; ++ ++ if (backend) { ++ if (backend->enable(backend)) { ++ graphics_inited = 1; ++ graphics_set_splash_helper(); ++ return 1; ++ } ++ return 0; ++ } ++ ++ graphics = grub_malloc(sizeof (*graphics)); ++ if (!graphics) ++ return 0; ++ ++ grub_memset(graphics, '\0', sizeof (*graphics)); ++ ++ graphics->scroll = 1; ++ graphics->fontx = 0; ++ graphics->fonty = 0; ++ ++ graphics->standard_color = A_NORMAL; ++ graphics->normal_color = A_NORMAL; ++ graphics->highlight_color = A_REVERSE; ++ graphics->current_color = A_NORMAL; ++ graphics->color_state = COLOR_STATE_STANDARD; ++ ++ grub_memset(graphics->splashpath, '\0', sizeof (graphics->splashpath)); ++ ++ for(i = 0; backends[i] != NULL; i++) { ++ backend = backends[i]; ++ backend->graphics = graphics; ++ if (backend->enable(backend)) { ++ graphics_inited = 1; ++ graphics_set_splash_helper(); ++ return 1; ++ } ++ backend->graphics = NULL; ++ } ++ current_term = term_table; ++ grub_free(graphics->text); ++ grub_free(graphics); ++ return 0; ++} ++ ++void ++graphics_end(void) ++{ ++ if (backend && graphics_inited) { ++ graphics_inited = 0; ++ backend->disable(backend); ++ } ++} ++ ++#endif /* SUPPORT_GRAPHICS */ +diff --git a/efi/graphics.h b/efi/graphics.h +new file mode 100644 +index 0000000..ecf9e0e +--- /dev/null ++++ b/efi/graphics.h +@@ -0,0 +1,81 @@ ++#ifndef GRUB_EFI_GRAPHICS_H ++#define GRUB_EFI_GRAPHICS_H ++ ++#ifdef SUPPORT_GRAPHICS ++ ++#include ++#include "xpm.h" ++ ++#define VIDEO_TYPE_EFI 0x70 ++ ++typedef void pixel_t; ++struct graphics; ++ ++struct position { ++ int x; ++ int y; ++}; ++typedef struct position position_t; ++ ++extern void grub_efi_setup_gfx_pci (grub_efi_handle_t handle); ++ ++extern grub_uint16_t grub_console_getwh (void); ++extern void graphics_set_kernel_params(struct linux_kernel_params *params); ++extern void graphics_set_font_position(position_t *pos); ++extern void graphics_get_font_position(position_t *pos); ++extern void graphics_get_font_size(position_t *size); ++extern int graphics_get_screen_rowscols(position_t *size); ++extern int graphics_alloc_text_buf(void); ++extern unsigned short *graphics_get_text_buf(void); ++ ++extern int graphics_get_scroll(void); ++ ++extern char *graphics_get_splash(void); ++extern void graphics_setxy(int x, int y); ++extern void graphics_cls(void); ++extern void graphics_clbl(int x, int y, int width, int height, int draw_text); ++extern void graphics_setcolorstate (color_state state); ++extern void graphics_setcolor (int normal_color, int highlight_color); ++extern int graphics_setcursor(int on); ++extern int graphics_init(void); ++extern void graphics_end(void); ++extern struct xpm *graphics_get_splash_xpm(void); ++extern void graphics_cursor(int set); ++extern void graphics_scroll(void); ++ ++struct graphics_backend { ++ char *name; ++ struct graphics *graphics; ++ void *priv; ++ ++ int (*enable)(struct graphics_backend *backend); ++ void (*disable)(struct graphics_backend *backend); ++ ++ void (*set_kernel_params)(struct graphics_backend *backend, ++ struct linux_kernel_params *params); ++ ++ void (*clbl)(struct graphics_backend *backend, int col, int row, ++ int width, int height, ++ int draw_text); ++ ++ void (*set_palette)(struct graphics_backend *backend, ++ int idx, int red, int green, int blue); ++ pixel_t *(*get_pixel_idx)(struct graphics_backend *backend, int idx); ++ pixel_t *(*get_pixel_rgb)(struct graphics_backend *backend, ++ int red, int green, int blue); ++ void (*draw_pixel)(struct graphics_backend *backend, ++ position_t *pos, pixel_t *pixel); ++ ++ void (*reset_screen_geometry)(struct graphics_backend *backend); ++ void (*get_screen_size)(struct graphics_backend *backend, position_t *size); ++ void (*getxy)(struct graphics_backend *backend, position_t *pos); ++ void (*setxy)(struct graphics_backend *backend, position_t *pos); ++ void (*gotoxy)(struct graphics_backend *backend, position_t *pos); ++ void (*cursor)(struct graphics_backend *backend, int set); ++// void (*putchar)(struct graphics_backend *backend, int ch); ++}; ++ ++extern const unsigned char font8x16[]; ++ ++#endif /* SUPPORT_GRAPHCIS */ ++#endif /* GRUB_EFI_GRAPHICS_H */ +diff --git a/efi/grub/.gitignore b/efi/grub/.gitignore +new file mode 100644 +index 0000000..40a991e +--- /dev/null ++++ b/efi/grub/.gitignore +@@ -0,0 +1 @@ ++cpu +diff --git a/efi/grub/efi/api.h b/efi/grub/efi/api.h +new file mode 100644 +index 0000000..81a0b3f +--- /dev/null ++++ b/efi/grub/efi/api.h +@@ -0,0 +1,1716 @@ ++/* efi.h - declare EFI types and functions */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_EFI_API_HEADER ++#define GRUB_EFI_API_HEADER 1 ++ ++#include ++#include ++ ++/* For consistency and safety, we name the EFI-defined types differently. ++ All names are transformed into lower case, _t appended, and ++ grub_efi_ prepended. */ ++ ++/* Constants. */ ++#define GRUB_EFI_EVT_TIMER 0x80000000 ++#define GRUB_EFI_EVT_RUNTIME 0x40000000 ++#define GRUB_EFI_EVT_RUNTIME_CONTEXT 0x20000000 ++#define GRUB_EFI_EVT_NOTIFY_WAIT 0x00000100 ++#define GRUB_EFI_EVT_NOTIFY_SIGNAL 0x00000200 ++#define GRUB_EFI_EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 ++#define GRUB_EFI_EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 ++ ++#define GRUB_EFI_TPL_APPLICATION 4 ++#define GRUB_EFI_TPL_CALLBACK 8 ++#define GRUB_EFI_TPL_NOTIFY 16 ++#define GRUB_EFI_TPL_HIGH_LEVEL 31 ++ ++#define GRUB_EFI_MEMORY_UC 0x0000000000000001 ++#define GRUB_EFI_MEMORY_WC 0x0000000000000002 ++#define GRUB_EFI_MEMORY_WT 0x0000000000000004 ++#define GRUB_EFI_MEMORY_WB 0x0000000000000008 ++#define GRUB_EFI_MEMORY_UCE 0x0000000000000010 ++#define GRUB_EFI_MEMORY_WP 0x0000000000001000 ++#define GRUB_EFI_MEMORY_RP 0x0000000000002000 ++#define GRUB_EFI_MEMORY_XP 0x0000000000004000 ++#define GRUB_EFI_MEMORY_RUNTIME 0x8000000000000000 ++ ++#define GRUB_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 ++#define GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 ++#define GRUB_EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 ++#define GRUB_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 ++#define GRUB_EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 ++#define GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE 0x00000020 ++ ++#define GRUB_EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 ++#define GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 ++#define GRUB_EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004 ++ ++#define GRUB_EFI_TIME_ADJUST_DAYLIGHT 0x01 ++#define GRUB_EFI_TIME_IN_DAYLIGHT 0x02 ++ ++#define GRUB_EFI_UNSPECIFIED_TIMEZONE 0x07FF ++ ++#define GRUB_EFI_OPTIONAL_PTR 0x00000001 ++ ++#define GRUB_EFI_PCI_IO_GUID \ ++ { 0x4cf5b200, 0x68b8, 0x4ca5, \ ++ { 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a } \ ++ } ++ ++#define GRUB_EFI_PCI_ROOT_IO_GUID \ ++ { 0x2F707EBB, 0x4A1A, 0x11d4, \ ++ { 0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } \ ++ } ++ ++#define GRUB_EFI_LOADED_IMAGE_GUID \ ++ { 0x5b1b31a1, 0x9562, 0x11d2, \ ++ { 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ ++ } ++ ++#define GRUB_EFI_DISK_IO_GUID \ ++ { 0xce345171, 0xba0b, 0x11d2, \ ++ { 0x8e, 0x4f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ ++ } ++ ++#define GRUB_EFI_BLOCK_IO_GUID \ ++ { 0x964e5b21, 0x6459, 0x11d2, \ ++ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ ++ } ++ ++#define GRUB_EFI_DEVICE_PATH_GUID \ ++ { 0x09576e91, 0x6d3f, 0x11d2, \ ++ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ ++ } ++ ++#define GRUB_EFI_DEVICE_PATH_FROM_TEXT_GUID \ ++ { 0x05c99a21, 0xc70f, 0x4ad2, \ ++ { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } \ ++ } ++ ++#define GRUB_EFI_GRAPHICS_OUTPUT_GUID \ ++ { 0x9042a9de, 0x23dc, 0x4a38, \ ++ { 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \ ++ } ++ ++#define GRUB_EFI_UGA_DRAW_GUID \ ++ { 0x982c298b, 0xf4fa, 0x41cb, \ ++ { 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39 } \ ++ } ++ ++#define GRUB_EFI_UGA_IO_GUID \ ++ { 0x61a4d49e, 0x6f68, 0x4f1b, \ ++ { 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0xb, 0x7, 0xa2 } \ ++ } ++ ++#define GRUB_EFI_SIMPLE_FILE_SYSTEM_GUID \ ++ { 0x964e5b22, 0x6459, 0x11d2, \ ++ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ ++ } ++ ++#define GRUB_EFI_SERIAL_IO_GUID \ ++ { 0xbb25cf6f, 0xf1d4, 0x11d2, \ ++ { 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3F, 0xc1, 0xfd } \ ++ } ++ ++/* Enumerations. */ ++enum grub_efi_timer_delay ++{ ++ GRUB_EFI_TIMER_CANCEL, ++ GRUB_EFI_TIMER_PERIODIC, ++ GRUB_EFI_TIMER_RELATIVE ++}; ++typedef enum grub_efi_timer_delay grub_efi_timer_delay_t; ++ ++enum grub_efi_allocate_type ++{ ++ GRUB_EFI_ALLOCATE_ANY_PAGES, ++ GRUB_EFI_ALLOCATE_MAX_ADDRESS, ++ GRUB_EFI_ALLOCATE_ADDRESS, ++ GRUB_EFI_MAX_ALLOCATION_TYPE ++}; ++typedef enum grub_efi_allocate_type grub_efi_allocate_type_t; ++ ++enum grub_efi_memory_type ++{ ++ GRUB_EFI_RESERVED_MEMORY_TYPE, ++ GRUB_EFI_LOADER_CODE, ++ GRUB_EFI_LOADER_DATA, ++ GRUB_EFI_BOOT_SERVICES_CODE, ++ GRUB_EFI_BOOT_SERVICES_DATA, ++ GRUB_EFI_RUNTIME_SERVICES_CODE, ++ GRUB_EFI_RUNTIME_SERVICES_DATA, ++ GRUB_EFI_CONVENTIONAL_MEMORY, ++ GRUB_EFI_UNUSABLE_MEMORY, ++ GRUB_EFI_ACPI_RECLAIM_MEMORY, ++ GRUB_EFI_ACPI_MEMORY_NVS, ++ GRUB_EFI_MEMORY_MAPPED_IO, ++ GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE, ++ GRUB_EFI_PAL_CODE, ++ GRUB_EFI_MAX_MEMORY_TYPE ++}; ++typedef enum grub_efi_memory_type grub_efi_memory_type_t; ++ ++enum grub_efi_interface_type ++{ ++ GRUB_EFI_NATIVE_INTERFACE ++}; ++typedef enum grub_efi_interface_type grub_efi_interface_type_t; ++ ++enum grub_efi_locate_search_type ++{ ++ GRUB_EFI_ALL_HANDLES, ++ GRUB_EFI_BY_REGISTER_NOTIFY, ++ GRUB_EFI_BY_PROTOCOL ++}; ++typedef enum grub_efi_locate_search_type grub_efi_locate_search_type_t; ++ ++enum grub_efi_reset_type ++{ ++ GRUB_EFI_RESET_COLD, ++ GRUB_EFI_RESET_WARM, ++ GRUB_EFI_RESET_SHUTDOWN ++}; ++typedef enum grub_efi_reset_type grub_efi_reset_type_t; ++ ++/* Types. */ ++typedef char grub_efi_boolean_t; ++typedef long grub_efi_intn_t; ++typedef unsigned long grub_efi_uintn_t; ++typedef grub_int8_t grub_efi_int8_t; ++typedef grub_uint8_t grub_efi_uint8_t; ++typedef grub_int16_t grub_efi_int16_t; ++typedef grub_uint16_t grub_efi_uint16_t; ++typedef grub_int32_t grub_efi_int32_t; ++typedef grub_uint32_t grub_efi_uint32_t; ++typedef grub_int64_t grub_efi_int64_t; ++typedef grub_uint64_t grub_efi_uint64_t; ++typedef grub_uint8_t grub_efi_char8_t; ++typedef grub_uint16_t grub_efi_char16_t; ++ ++typedef grub_efi_intn_t grub_efi_status_t; ++ ++#define GRUB_EFI_ERROR_CODE(value) \ ++ ((1L << (sizeof (grub_efi_status_t) * 8 - 1)) | (value)) ++ ++#define GRUB_EFI_WARNING_CODE(value) (value) ++ ++#define GRUB_EFI_SUCCESS 0 ++ ++#define GRUB_EFI_LOAD_ERROR GRUB_EFI_ERROR_CODE (1) ++#define GRUB_EFI_INVALID_PARAMETER GRUB_EFI_ERROR_CODE (2) ++#define GRUB_EFI_UNSUPPORTED GRUB_EFI_ERROR_CODE (3) ++#define GRUB_EFI_BAD_BUFFER_SIZE GRUB_EFI_ERROR_CODE (4) ++#define GRUB_EFI_BUFFER_TOO_SMALL GRUB_EFI_ERROR_CODE (5) ++#define GRUB_EFI_NOT_READY GRUB_EFI_ERROR_CODE (6) ++#define GRUB_EFI_DEVICE_ERROR GRUB_EFI_ERROR_CODE (7) ++#define GRUB_EFI_WRITE_PROTECTED GRUB_EFI_ERROR_CODE (8) ++#define GRUB_EFI_OUT_OF_RESOURCES GRUB_EFI_ERROR_CODE (9) ++#define GRUB_EFI_VOLUME_CORRUPTED GRUB_EFI_ERROR_CODE (10) ++#define GRUB_EFI_VOLUME_FULL GRUB_EFI_ERROR_CODE (11) ++#define GRUB_EFI_NO_MEDIA GRUB_EFI_ERROR_CODE (12) ++#define GRUB_EFI_MEDIA_CHANGED GRUB_EFI_ERROR_CODE (13) ++#define GRUB_EFI_NOT_FOUND GRUB_EFI_ERROR_CODE (14) ++#define GRUB_EFI_ACCESS_DENIED GRUB_EFI_ERROR_CODE (15) ++#define GRUB_EFI_NO_RESPONSE GRUB_EFI_ERROR_CODE (16) ++#define GRUB_EFI_NO_MAPPING GRUB_EFI_ERROR_CODE (17) ++#define GRUB_EFI_TIMEOUT GRUB_EFI_ERROR_CODE (18) ++#define GRUB_EFI_NOT_STARTED GRUB_EFI_ERROR_CODE (19) ++#define GRUB_EFI_ALREADY_STARTED GRUB_EFI_ERROR_CODE (20) ++#define GRUB_EFI_ABORTED GRUB_EFI_ERROR_CODE (21) ++#define GRUB_EFI_ICMP_ERROR GRUB_EFI_ERROR_CODE (22) ++#define GRUB_EFI_TFTP_ERROR GRUB_EFI_ERROR_CODE (23) ++#define GRUB_EFI_PROTOCOL_ERROR GRUB_EFI_ERROR_CODE (24) ++#define GRUB_EFI_INCOMPATIBLE_VERSION GRUB_EFI_ERROR_CODE (25) ++#define GRUB_EFI_SECURITY_VIOLATION GRUB_EFI_ERROR_CODE (26) ++#define GRUB_EFI_CRC_ERROR GRUB_EFI_ERROR_CODE (27) ++ ++#define GRUB_EFI_WARN_UNKNOWN_GLYPH GRUB_EFI_WARNING_CODE (1) ++#define GRUB_EFI_WARN_DELETE_FAILURE GRUB_EFI_WARNING_CODE (2) ++#define GRUB_EFI_WARN_WRITE_FAILURE GRUB_EFI_WARNING_CODE (3) ++#define GRUB_EFI_WARN_BUFFER_TOO_SMALL GRUB_EFI_WARNING_CODE (4) ++ ++typedef void *grub_efi_handle_t; ++typedef void *grub_efi_event_t; ++typedef grub_efi_uint64_t grub_efi_lba_t; ++typedef grub_efi_uintn_t grub_efi_tpl_t; ++typedef grub_uint8_t grub_efi_mac_address_t[32]; ++typedef grub_uint8_t grub_efi_ipv4_address_t[4]; ++typedef grub_uint16_t grub_efi_ipv6_address_t[8]; ++typedef grub_uint8_t grub_efi_ip_address_t[8] __attribute__ ((aligned (4))); ++typedef grub_efi_uint64_t grub_efi_physical_address_t; ++typedef grub_efi_uint64_t grub_efi_virtual_address_t; ++ ++struct grub_efi_guid ++{ ++ grub_uint32_t data1; ++ grub_uint16_t data2; ++ grub_uint16_t data3; ++ grub_uint8_t data4[8]; ++} __attribute__ ((aligned (8))); ++typedef struct grub_efi_guid grub_efi_guid_t; ++ ++/* XXX although the spec does not specify the padding, this actually ++ must have the padding! */ ++struct grub_efi_memory_descriptor ++{ ++ grub_efi_uint32_t type; ++ grub_efi_uint32_t padding; ++ grub_efi_physical_address_t physical_start; ++ grub_efi_virtual_address_t virtual_start; ++ grub_efi_uint64_t num_pages; ++ grub_efi_uint64_t attribute; ++}; ++typedef struct grub_efi_memory_descriptor grub_efi_memory_descriptor_t; ++ ++/* Device Path definitions. */ ++struct grub_efi_device_path ++{ ++ grub_efi_uint8_t type; ++ grub_efi_uint8_t subtype; ++ grub_efi_uint8_t length[2]; ++}; ++typedef struct grub_efi_device_path grub_efi_device_path_t; ++/* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it. ++ It seems to be identical to EFI_DEVICE_PATH. */ ++typedef struct grub_efi_device_path grub_efi_device_path_protocol_t; ++ ++#define GRUB_EFI_DEVICE_PATH_TYPE(dp) ((dp)->type & 0x7f) ++#define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp) ((dp)->subtype) ++#define GRUB_EFI_DEVICE_PATH_LENGTH(dp) \ ++ ((dp)->length[0] | ((grub_efi_uint16_t) ((dp)->length[1]) << 8)) ++ ++/* The End of Device Path nodes. */ ++#define GRUB_EFI_END_DEVICE_PATH_TYPE (0xff & 0x7f) ++ ++#define GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff ++#define GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE 0x01 ++ ++#define GRUB_EFI_END_ENTIRE_DEVICE_PATH(dp) \ ++ (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_END_DEVICE_PATH_TYPE \ ++ && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) \ ++ == GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE)) ++ ++#define GRUB_EFI_NEXT_DEVICE_PATH(dp) \ ++ ((grub_efi_device_path_t *) ((char *) (dp) \ ++ + GRUB_EFI_DEVICE_PATH_LENGTH (dp))) ++ ++/* Hardware Device Path. */ ++#define GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE 1 ++ ++#define GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE 1 ++ ++struct grub_efi_pci_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint8_t function; ++ grub_efi_uint8_t device; ++}; ++typedef struct grub_efi_pci_device_path grub_efi_pci_device_path_t; ++ ++#define GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE 2 ++ ++struct grub_efi_pccard_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint8_t function; ++}; ++typedef struct grub_efi_pccard_device_path grub_efi_pccard_device_path_t; ++ ++#define GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE 3 ++ ++struct grub_efi_memory_mapped_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_memory_type_t memory_type; ++ grub_efi_physical_address_t start_address; ++ grub_efi_physical_address_t end_address; ++}; ++typedef struct grub_efi_memory_mapped_device_path ++ grub_efi_memory_mapped_device_path_t; ++ ++#define GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE 4 ++ ++struct grub_efi_vendor_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_guid_t vendor_guid; ++ grub_efi_uint8_t vendor_defined_data[0]; ++}; ++typedef struct grub_efi_vendor_device_path grub_efi_vendor_device_path_t; ++ ++#define GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE 5 ++ ++struct grub_efi_controller_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t controller_number; ++}; ++typedef struct grub_efi_controller_device_path ++ grub_efi_controller_device_path_t; ++ ++/* ACPI Device Path. */ ++#define GRUB_EFI_ACPI_DEVICE_PATH_TYPE 2 ++ ++#define GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE 1 ++ ++struct grub_efi_acpi_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t hid; ++ grub_efi_uint32_t uid; ++}; ++typedef struct grub_efi_acpi_device_path grub_efi_acpi_device_path_t; ++ ++#define GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE 2 ++ ++struct grub_efi_expanded_acpi_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t hid; ++ grub_efi_uint32_t uid; ++ grub_efi_uint32_t cid; ++ char hidstr[1]; ++}; ++typedef struct grub_efi_expanded_acpi_device_path ++ grub_efi_expanded_acpi_device_path_t; ++ ++#define GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \ ++ (((grub_efi_expanded_acpi_device_path_t *) dp)->hidstr) ++#define GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \ ++ (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \ ++ + grub_strlen (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp)) + 1) ++#define GRUB_EFI_EXPANDED_ACPI_CIDSTR(dp) \ ++ (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \ ++ + grub_strlen (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp)) + 1) ++ ++/* Messaging Device Path. */ ++#define GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE 3 ++ ++#define GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE 1 ++ ++struct grub_efi_atapi_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint8_t primary_secondary; ++ grub_efi_uint8_t slave_master; ++ grub_efi_uint16_t lun; ++}; ++typedef struct grub_efi_atapi_device_path grub_efi_atapi_device_path_t; ++ ++#define GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE 2 ++ ++struct grub_efi_scsi_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint16_t pun; ++ grub_efi_uint16_t lun; ++}; ++typedef struct grub_efi_scsi_device_path grub_efi_scsi_device_path_t; ++ ++#define GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE 3 ++ ++struct grub_efi_fibre_channel_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t reserved; ++ grub_efi_uint64_t wwn; ++ grub_efi_uint64_t lun; ++}; ++typedef struct grub_efi_fibre_channel_device_path ++ grub_efi_fibre_channel_device_path_t; ++ ++#define GRUB_EFI_1394_DEVICE_PATH_SUBTYPE 4 ++ ++struct grub_efi_1394_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t reserved; ++ grub_efi_uint64_t guid; ++}; ++typedef struct grub_efi_1394_device_path grub_efi_1394_device_path_t; ++ ++#define GRUB_EFI_USB_DEVICE_PATH_SUBTYPE 5 ++ ++struct grub_efi_usb_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint8_t parent_port_number; ++ grub_efi_uint8_t interface; ++}; ++typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t; ++ ++#define GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE 15 ++ ++struct grub_efi_usb_class_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint16_t vendor_id; ++ grub_efi_uint16_t product_id; ++ grub_efi_uint8_t device_class; ++ grub_efi_uint8_t device_subclass; ++ grub_efi_uint8_t device_protocol; ++}; ++typedef struct grub_efi_usb_class_device_path ++ grub_efi_usb_class_device_path_t; ++ ++#define GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE 6 ++ ++struct grub_efi_i2o_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t tid; ++}; ++typedef struct grub_efi_i2o_device_path grub_efi_i2o_device_path_t; ++ ++#define GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE 11 ++ ++struct grub_efi_mac_address_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_mac_address_t mac_address; ++ grub_efi_uint8_t if_type; ++}; ++typedef struct grub_efi_mac_address_device_path ++ grub_efi_mac_address_device_path_t; ++ ++#define GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE 12 ++ ++struct grub_efi_ipv4_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_ipv4_address_t local_ip_address; ++ grub_efi_ipv4_address_t remote_ip_address; ++ grub_efi_uint16_t local_port; ++ grub_efi_uint16_t remote_port; ++ grub_efi_uint16_t protocol; ++ grub_efi_uint8_t static_ip_address; ++}; ++typedef struct grub_efi_ipv4_device_path grub_efi_ipv4_device_path_t; ++ ++#define GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE 13 ++ ++struct grub_efi_ipv6_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_ipv6_address_t local_ip_address; ++ grub_efi_ipv6_address_t remote_ip_address; ++ grub_efi_uint16_t local_port; ++ grub_efi_uint16_t remote_port; ++ grub_efi_uint16_t protocol; ++ grub_efi_uint8_t static_ip_address; ++}; ++typedef struct grub_efi_ipv6_device_path grub_efi_ipv6_device_path_t; ++ ++#define GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE 9 ++ ++struct grub_efi_infiniband_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t resource_flags; ++ grub_efi_uint8_t port_gid[16]; ++ grub_efi_uint64_t remote_id; ++ grub_efi_uint64_t target_port_id; ++ grub_efi_uint64_t device_id; ++}; ++typedef struct grub_efi_infiniband_device_path ++ grub_efi_infiniband_device_path_t; ++ ++#define GRUB_EFI_UART_DEVICE_PATH_SUBTYPE 14 ++ ++struct grub_efi_uart_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t reserved; ++ grub_efi_uint64_t baud_rate; ++ grub_efi_uint8_t data_bits; ++ grub_efi_uint8_t parity; ++ grub_efi_uint8_t stop_bits; ++}; ++typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t; ++ ++#define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10 ++ ++struct grub_efi_vendor_messaging_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_guid_t vendor_guid; ++ grub_efi_uint8_t vendor_defined_data[0]; ++}; ++typedef struct grub_efi_vendor_messaging_device_path ++ grub_efi_vendor_messaging_device_path_t; ++ ++/* Media Device Path. */ ++#define GRUB_EFI_MEDIA_DEVICE_PATH_TYPE 4 ++ ++#define GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE 1 ++ ++struct grub_efi_hard_drive_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t partition_number; ++ grub_efi_lba_t partition_start; ++ grub_efi_lba_t partition_size; ++ grub_efi_uint8_t partition_signature[16]; ++ grub_efi_uint8_t mbr_type; ++ grub_efi_uint8_t signature_type; ++}; ++typedef struct grub_efi_hard_drive_device_path ++ grub_efi_hard_drive_device_path_t; ++ ++#define GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE 2 ++ ++struct grub_efi_cdrom_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint32_t boot_entry; ++ grub_efi_lba_t partition_start; ++ grub_efi_lba_t partition_size; ++}; ++typedef struct grub_efi_cdrom_device_path grub_efi_cdrom_device_path_t; ++ ++#define GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE 3 ++ ++struct grub_efi_vendor_media_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_guid_t vendor_guid; ++ grub_efi_uint8_t vendor_defined_data[0]; ++}; ++typedef struct grub_efi_vendor_media_device_path ++ grub_efi_vendor_media_device_path_t; ++ ++#define GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE 4 ++ ++struct grub_efi_file_path_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_char16_t path_name[0]; ++}; ++typedef struct grub_efi_file_path_device_path ++ grub_efi_file_path_device_path_t; ++ ++#define GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE 5 ++ ++struct grub_efi_protocol_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_guid_t guid; ++}; ++typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t; ++ ++/* BIOS Boot Specification Device Path. */ ++#define GRUB_EFI_BIOS_DEVICE_PATH_TYPE 5 ++ ++#define GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE 1 ++ ++struct grub_efi_bios_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint16_t device_type; ++ grub_efi_uint16_t status_flags; ++ char description[0]; ++}; ++typedef struct grub_efi_bios_device_path grub_efi_bios_device_path_t; ++ ++struct grub_efi_device_path_from_text ++{ ++ grub_efi_device_path_t * (*convert_text_to_device_node) (const grub_efi_char16_t *text_device_node); ++ grub_efi_device_path_t * (*convert_text_to_device_path) (const grub_efi_char16_t *text_device_path); ++}; ++typedef struct grub_efi_device_path_from_text grub_efi_device_path_from_text_t; ++ ++struct grub_efi_open_protocol_information_entry ++{ ++ grub_efi_handle_t agent_handle; ++ grub_efi_handle_t controller_handle; ++ grub_efi_uint32_t attributes; ++ grub_efi_uint32_t open_count; ++}; ++typedef struct grub_efi_open_protocol_information_entry ++ grub_efi_open_protocol_information_entry_t; ++ ++struct grub_efi_time ++{ ++ grub_efi_uint16_t year; ++ grub_efi_uint8_t month; ++ grub_efi_uint8_t day; ++ grub_efi_uint8_t hour; ++ grub_efi_uint8_t minute; ++ grub_efi_uint8_t second; ++ grub_efi_uint8_t pad1; ++ grub_efi_uint32_t nanosecond; ++ grub_efi_int16_t time_zone; ++ grub_efi_uint8_t daylight; ++ grub_efi_uint8_t pad2; ++}; ++typedef struct grub_efi_time grub_efi_time_t; ++ ++struct grub_efi_time_capabilities ++{ ++ grub_efi_uint32_t resolution; ++ grub_efi_uint32_t accuracy; ++ grub_efi_boolean_t sets_to_zero; ++}; ++typedef struct grub_efi_time_capabilities grub_efi_time_capabilities_t; ++ ++struct grub_efi_input_key ++{ ++ grub_efi_uint16_t scan_code; ++ grub_efi_char16_t unicode_char; ++}; ++typedef struct grub_efi_input_key grub_efi_input_key_t; ++ ++struct grub_efi_simple_text_output_mode ++{ ++ grub_efi_int32_t max_mode; ++ grub_efi_int32_t mode; ++ grub_efi_int32_t attribute; ++ grub_efi_int32_t cursor_column; ++ grub_efi_int32_t cursor_row; ++ grub_efi_boolean_t cursor_visible; ++}; ++typedef struct grub_efi_simple_text_output_mode ++ grub_efi_simple_text_output_mode_t; ++ ++/* Tables. */ ++struct grub_efi_table_header ++{ ++ grub_efi_uint64_t signature; ++ grub_efi_uint32_t revision; ++ grub_efi_uint32_t header_size; ++ grub_efi_uint32_t crc32; ++ grub_efi_uint32_t reserved; ++}; ++typedef struct grub_efi_table_header grub_efi_table_header_t; ++ ++struct grub_efi_boot_services ++{ ++ grub_efi_table_header_t hdr; ++ ++ grub_efi_tpl_t (*raise_tpl) (grub_efi_tpl_t new_tpl); ++ ++ void (*restore_tpl) (grub_efi_tpl_t old_tpl); ++ ++ grub_efi_status_t ++ (*allocate_pages) (grub_efi_allocate_type_t type, ++ grub_efi_memory_type_t memory_type, ++ grub_efi_uintn_t pages, ++ grub_efi_physical_address_t * memory); ++ ++ grub_efi_status_t ++ (*free_pages) (grub_efi_physical_address_t memory, ++ grub_efi_uintn_t pages); ++ ++ grub_efi_status_t ++ (*get_memory_map) (grub_efi_uintn_t * memory_map_size, ++ grub_efi_memory_descriptor_t * memory_map, ++ grub_efi_uintn_t * map_key, ++ grub_efi_uintn_t * descriptor_size, ++ grub_efi_uint32_t * descriptor_version); ++ ++ grub_efi_status_t ++ (*allocate_pool) (grub_efi_memory_type_t pool_type, ++ grub_efi_uintn_t size, void **buffer); ++ ++ grub_efi_status_t (*free_pool) (void *buffer); ++ ++ grub_efi_status_t ++ (*create_event) (grub_efi_uint32_t type, ++ grub_efi_tpl_t notify_tpl, ++ void (*notify_function) (grub_efi_event_t event, ++ void *context), ++ void *notify_context, grub_efi_event_t * event); ++ ++ grub_efi_status_t ++ (*set_timer) (grub_efi_event_t event, ++ grub_efi_timer_delay_t type, ++ grub_efi_uint64_t trigger_time); ++ ++ grub_efi_status_t ++ (*wait_for_event) (grub_efi_uintn_t num_events, ++ grub_efi_event_t * event, grub_efi_uintn_t * index); ++ ++ grub_efi_status_t (*signal_event) (grub_efi_event_t event); ++ ++ grub_efi_status_t (*close_event) (grub_efi_event_t event); ++ ++ grub_efi_status_t (*check_event) (grub_efi_event_t event); ++ ++ grub_efi_status_t ++ (*install_protocol_interface) (grub_efi_handle_t * handle, ++ grub_efi_guid_t * protocol, ++ grub_efi_interface_type_t interface_type, ++ void *interface); ++ ++ grub_efi_status_t ++ (*reinstall_protocol_interface) (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, ++ void *old_interface, void *new_inteface); ++ ++ grub_efi_status_t ++ (*uninstall_protocol_interface) (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, ++ void *interface); ++ ++ grub_efi_status_t ++ (*handle_protocol) (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, void **interface); ++ ++ void *reserved; ++ ++ grub_efi_status_t ++ (*register_protocol_notify) (grub_efi_guid_t * protocol, ++ grub_efi_event_t event, void **registration); ++ ++ grub_efi_status_t ++ (*locate_handle) (grub_efi_locate_search_type_t search_type, ++ grub_efi_guid_t * protocol, ++ void *search_key, ++ grub_efi_uintn_t * buffer_size, ++ grub_efi_handle_t * buffer); ++ ++ grub_efi_status_t ++ (*locate_device_path) (grub_efi_guid_t * protocol, ++ grub_efi_device_path_t ** device_path, ++ grub_efi_handle_t * device); ++ ++ grub_efi_status_t ++ (*install_configuration_table) (grub_efi_guid_t * guid, void *table); ++ ++ grub_efi_status_t ++ (*load_image) (grub_efi_boolean_t boot_policy, ++ grub_efi_handle_t parent_image_handle, ++ grub_efi_device_path_t * file_path, ++ void *source_buffer, ++ grub_efi_uintn_t source_size, ++ grub_efi_handle_t * image_handle); ++ ++ grub_efi_status_t ++ (*start_image) (grub_efi_handle_t image_handle, ++ grub_efi_uintn_t * exit_data_size, ++ grub_efi_char16_t ** exit_data); ++ ++ grub_efi_status_t ++ (*exit) (grub_efi_handle_t image_handle, ++ grub_efi_status_t exit_status, ++ grub_efi_uintn_t exit_data_size, ++ grub_efi_char16_t * exit_data) __attribute__ ((noreturn)); ++ ++ grub_efi_status_t (*unload_image) (grub_efi_handle_t image_handle); ++ ++ grub_efi_status_t ++ (*exit_boot_services) (grub_efi_handle_t image_handle, ++ grub_efi_uintn_t map_key); ++ ++ grub_efi_status_t (*get_next_monotonic_count) (grub_efi_uint64_t * count); ++ ++ grub_efi_status_t (*stall) (grub_efi_uintn_t microseconds); ++ ++ grub_efi_status_t ++ (*set_watchdog_timer) (grub_efi_uintn_t timeout, ++ grub_efi_uint64_t watchdog_code, ++ grub_efi_uintn_t data_size, ++ grub_efi_char16_t * watchdog_data); ++ ++ grub_efi_status_t ++ (*connect_controller) (grub_efi_handle_t controller_handle, ++ grub_efi_handle_t * driver_image_handle, ++ grub_efi_device_path_protocol_t * ++ remaining_device_path, ++ grub_efi_boolean_t recursive); ++ ++ grub_efi_status_t ++ (*disconnect_controller) (grub_efi_handle_t controller_handle, ++ grub_efi_handle_t driver_image_handle, ++ grub_efi_handle_t child_handle); ++ ++ grub_efi_status_t ++ (*open_protocol) (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, ++ void **interface, ++ grub_efi_handle_t agent_handle, ++ grub_efi_handle_t controller_handle, ++ grub_efi_uint32_t attributes); ++ ++ grub_efi_status_t ++ (*close_protocol) (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, ++ grub_efi_handle_t agent_handle, ++ grub_efi_handle_t controller_handle); ++ ++ grub_efi_status_t ++ (*open_protocol_information) (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, ++ grub_efi_open_protocol_information_entry_t ++ ** entry_buffer, ++ grub_efi_uintn_t * entry_count); ++ ++ grub_efi_status_t ++ (*protocols_per_handle) (grub_efi_handle_t handle, ++ grub_efi_guid_t *** protocol_buffer, ++ grub_efi_uintn_t * protocol_buffer_count); ++ ++ grub_efi_status_t ++ (*locate_handle_buffer) (grub_efi_locate_search_type_t search_type, ++ grub_efi_guid_t * protocol, ++ void *search_key, ++ grub_efi_uintn_t * no_handles, ++ grub_efi_handle_t ** buffer); ++ ++ grub_efi_status_t ++ (*locate_protocol) (grub_efi_guid_t * protocol, ++ void *registration, void **interface); ++ ++ grub_efi_status_t ++ (*install_multiple_protocol_interfaces) (grub_efi_handle_t * handle, ...); ++ ++ grub_efi_status_t ++ (*uninstall_multiple_protocol_interfaces) (grub_efi_handle_t handle, ...); ++ ++ grub_efi_status_t ++ (*calculate_crc32) (void *data, ++ grub_efi_uintn_t data_size, ++ grub_efi_uint32_t * crc32); ++ ++ void (*copy_mem) (void *destination, void *source, grub_efi_uintn_t length); ++ ++ void ++ (*set_mem) (void *buffer, grub_efi_uintn_t size, grub_efi_uint8_t value); ++}; ++typedef struct grub_efi_boot_services grub_efi_boot_services_t; ++ ++struct grub_efi_runtime_services ++{ ++ grub_efi_table_header_t hdr; ++ ++ grub_efi_status_t ++ (*get_time) (grub_efi_time_t * time, ++ grub_efi_time_capabilities_t * capabilities); ++ ++ grub_efi_status_t (*set_time) (grub_efi_time_t * time); ++ ++ grub_efi_status_t ++ (*get_wakeup_time) (grub_efi_boolean_t * enabled, ++ grub_efi_boolean_t * pending, grub_efi_time_t * time); ++ ++ grub_efi_status_t ++ (*set_wakeup_time) (grub_efi_boolean_t enabled, grub_efi_time_t * time); ++ ++ grub_efi_status_t ++ (*set_virtual_address_map) (grub_efi_uintn_t memory_map_size, ++ grub_efi_uintn_t descriptor_size, ++ grub_efi_uint32_t descriptor_version, ++ grub_efi_memory_descriptor_t * virtual_map); ++ ++ grub_efi_status_t ++ (*convert_pointer) (grub_efi_uintn_t debug_disposition, void **address); ++ ++ grub_efi_status_t ++ (*get_variable) (grub_efi_char16_t * variable_name, ++ grub_efi_guid_t * vendor_guid, ++ grub_efi_uint32_t * attributes, ++ grub_efi_uintn_t * data_size, void *data); ++ ++ grub_efi_status_t ++ (*get_next_variable_name) (grub_efi_uintn_t * variable_name_size, ++ grub_efi_char16_t * variable_name, ++ grub_efi_guid_t * vendor_guid); ++ ++ grub_efi_status_t ++ (*set_variable) (grub_efi_char16_t * variable_name, ++ grub_efi_guid_t * vendor_guid, ++ grub_efi_uint32_t attributes, ++ grub_efi_uintn_t data_size, void *data); ++ ++ grub_efi_status_t ++ (*get_next_high_monotonic_count) (grub_efi_uint32_t * high_count); ++ ++ void ++ (*reset_system) (grub_efi_reset_type_t reset_type, ++ grub_efi_status_t reset_status, ++ grub_efi_uintn_t data_size, ++ grub_efi_char16_t * reset_data); ++}; ++typedef struct grub_efi_runtime_services grub_efi_runtime_services_t; ++ ++struct grub_efi_configuration_table ++{ ++ grub_efi_guid_t vendor_guid; ++ void *vendor_table; ++}; ++typedef struct grub_efi_configuration_table grub_efi_configuration_table_t; ++ ++struct grub_efi_simple_input_interface ++{ ++ grub_efi_status_t ++ (*reset) (struct grub_efi_simple_input_interface * this, ++ grub_efi_boolean_t extended_verification); ++ ++ grub_efi_status_t ++ (*read_key_stroke) (struct grub_efi_simple_input_interface * this, ++ grub_efi_input_key_t * key); ++ ++ grub_efi_event_t wait_for_key; ++}; ++typedef struct grub_efi_simple_input_interface ++ grub_efi_simple_input_interface_t; ++ ++struct grub_efi_simple_text_output_interface ++{ ++ grub_efi_status_t ++ (*reset) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_boolean_t extended_verification); ++ ++ grub_efi_status_t ++ (*output_string) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_char16_t * string); ++ ++ grub_efi_status_t ++ (*test_string) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_char16_t * string); ++ ++ grub_efi_status_t ++ (*query_mode) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_uintn_t mode_number, ++ grub_efi_uintn_t * columns, grub_efi_uintn_t * rows); ++ ++ grub_efi_status_t ++ (*set_mode) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_uintn_t mode_number); ++ ++ grub_efi_status_t ++ (*set_attributes) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_uintn_t attribute); ++ ++ grub_efi_status_t ++ (*clear_screen) (struct grub_efi_simple_text_output_interface * this); ++ ++ grub_efi_status_t ++ (*set_cursor_position) (struct grub_efi_simple_text_output_interface * ++ this, grub_efi_uintn_t column, ++ grub_efi_uintn_t row); ++ ++ grub_efi_status_t ++ (*enable_cursor) (struct grub_efi_simple_text_output_interface * this, ++ grub_efi_boolean_t visible); ++ ++ grub_efi_simple_text_output_mode_t *mode; ++}; ++typedef struct grub_efi_simple_text_output_interface ++ grub_efi_simple_text_output_interface_t; ++ ++#define GRUB_EFI_BLACK 0x00 ++#define GRUB_EFI_BLUE 0x01 ++#define GRUB_EFI_GREEN 0x02 ++#define GRUB_EFI_CYAN 0x03 ++#define GRUB_EFI_RED 0x04 ++#define GRUB_EFI_MAGENTA 0x05 ++#define GRUB_EFI_BROWN 0x06 ++#define GRUB_EFI_LIGHTGRAY 0x07 ++#define GRUB_EFI_BRIGHT 0x08 ++#define GRUB_EFI_DARKGRAY 0x08 ++#define GRUB_EFI_LIGHTBLUE 0x09 ++#define GRUB_EFI_LIGHTGREEN 0x0A ++#define GRUB_EFI_LIGHTCYAN 0x0B ++#define GRUB_EFI_LIGHTRED 0x0C ++#define GRUB_EFI_LIGHTMAGENTA 0x0D ++#define GRUB_EFI_YELLOW 0x0E ++#define GRUB_EFI_WHITE 0x0F ++ ++#define GRUB_EFI_BACKGROUND_BLACK 0x00 ++#define GRUB_EFI_BACKGROUND_BLUE 0x10 ++#define GRUB_EFI_BACKGROUND_GREEN 0x20 ++#define GRUB_EFI_BACKGROUND_CYAN 0x30 ++#define GRUB_EFI_BACKGROUND_RED 0x40 ++#define GRUB_EFI_BACKGROUND_MAGENTA 0x50 ++#define GRUB_EFI_BACKGROUND_BROWN 0x60 ++#define GRUB_EFI_BACKGROUND_LIGHTGRAY 0x70 ++ ++#define GRUB_EFI_TEXT_ATTR(fg, bg) ((fg) | ((bg))) ++ ++struct grub_efi_system_table ++{ ++ grub_efi_table_header_t hdr; ++ grub_efi_char16_t *firmware_vendor; ++ grub_efi_uint32_t firmware_revision; ++ grub_efi_handle_t console_in_handler; ++ grub_efi_simple_input_interface_t *con_in; ++ grub_efi_handle_t console_out_handler; ++ grub_efi_simple_text_output_interface_t *con_out; ++ grub_efi_handle_t standard_error_handle; ++ grub_efi_simple_text_output_interface_t *std_err; ++ grub_efi_runtime_services_t *runtime_services; ++ grub_efi_boot_services_t *boot_services; ++ grub_efi_uintn_t num_table_entries; ++ grub_efi_configuration_table_t *configuration_table; ++}; ++typedef struct grub_efi_system_table grub_efi_system_table_t; ++ ++struct grub_efi_loaded_image ++{ ++ grub_efi_uint32_t revision; ++ grub_efi_handle_t parent_handle; ++ grub_efi_system_table_t *system_table; ++ ++ grub_efi_handle_t device_handle; ++ grub_efi_device_path_t *file_path; ++ void *reserved; ++ ++ grub_efi_uint32_t load_options_size; ++ void *load_options; ++ ++ void *image_base; ++ grub_efi_uint64_t image_size; ++ grub_efi_memory_type_t image_code_type; ++ grub_efi_memory_type_t image_data_type; ++ ++ grub_efi_status_t (*unload) (grub_efi_handle_t image_handle); ++}; ++typedef struct grub_efi_loaded_image grub_efi_loaded_image_t; ++ ++struct grub_efi_disk_io ++{ ++ grub_efi_uint64_t revision; ++ grub_efi_status_t (*read) (struct grub_efi_disk_io * this, ++ grub_efi_uint32_t media_id, ++ grub_efi_uint64_t offset, ++ grub_efi_uintn_t buffer_size, void *buffer); ++ grub_efi_status_t (*write) (struct grub_efi_disk_io * this, ++ grub_efi_uint32_t media_id, ++ grub_efi_uint64_t offset, ++ grub_efi_uintn_t buffer_size, void *buffer); ++}; ++typedef struct grub_efi_disk_io grub_efi_disk_io_t; ++ ++struct grub_efi_block_io_media ++{ ++ grub_efi_uint32_t media_id; ++ grub_efi_boolean_t removable_media; ++ grub_efi_boolean_t media_present; ++ grub_efi_boolean_t logical_partition; ++ grub_efi_boolean_t read_only; ++ grub_efi_boolean_t write_caching; ++ grub_efi_uint8_t pad[3]; ++ grub_efi_uint32_t block_size; ++ grub_efi_uint32_t io_align; ++ grub_efi_uint8_t pad2[4]; ++ grub_efi_lba_t last_block; ++}; ++typedef struct grub_efi_block_io_media grub_efi_block_io_media_t; ++ ++struct grub_efi_block_io ++{ ++ grub_efi_uint64_t revision; ++ grub_efi_block_io_media_t *media; ++ grub_efi_status_t (*reset) (struct grub_efi_block_io * this, ++ grub_efi_boolean_t extended_verification); ++ grub_efi_status_t (*read_blocks) (struct grub_efi_block_io * this, ++ grub_efi_uint32_t media_id, ++ grub_efi_lba_t lba, ++ grub_efi_uintn_t buffer_size, ++ void *buffer); ++ grub_efi_status_t (*write_blocks) (struct grub_efi_block_io * this, ++ grub_efi_uint32_t media_id, ++ grub_efi_lba_t lba, ++ grub_efi_uintn_t buffer_size, ++ void *buffer); ++ grub_efi_status_t (*flush_blocks) (struct grub_efi_block_io * this); ++}; ++typedef struct grub_efi_block_io grub_efi_block_io_t; ++ ++struct grub_efi_pixel_bitmask ++{ ++ grub_efi_uint32_t red_mask; ++ grub_efi_uint32_t green_mask; ++ grub_efi_uint32_t blue_mask; ++ grub_efi_uint32_t reserved_mask; ++}; ++typedef struct grub_efi_pixel_bitmask grub_efi_pixel_bitmask_t; ++ ++enum grub_efi_graphics_pixel_format ++{ ++ GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR, ++ GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR, ++ GRUB_EFI_PIXEL_BIT_MASK, ++ GRUB_EFI_PIXEL_BLT_ONLY, ++}; ++typedef enum grub_efi_graphics_pixel_format grub_efi_graphics_pixel_format_t; ++ ++struct grub_efi_graphics_output_mode_information ++{ ++ grub_efi_uint32_t version; ++ grub_efi_uint32_t horizontal_resolution; ++ grub_efi_uint32_t vertical_resolution; ++ grub_efi_graphics_pixel_format_t pixel_format; ++ grub_efi_pixel_bitmask_t pixel_information; ++ grub_efi_uint32_t pixels_per_scan_line; ++}; ++typedef struct grub_efi_graphics_output_mode_information ++ grub_efi_graphics_output_mode_information_t; ++ ++struct grub_efi_graphics_output_bgrr_pixel ++{ ++ grub_efi_uint8_t blue; ++ grub_efi_uint8_t green; ++ grub_efi_uint8_t red; ++ grub_efi_uint8_t reserved; ++}; ++typedef struct grub_efi_graphics_output_bgrr_pixel ++ grub_efi_graphics_output_bgrr_pixel_t; ++typedef struct grub_efi_graphics_output_bgrr_pixel ++ grub_efi_graphics_output_blt_pixel_t; ++typedef struct grub_efi_graphics_output_bgrr_pixel ++ grub_efi_uga_pixel_t; ++ ++struct grub_efi_graphics_output_rgbr_pixel ++{ ++ grub_efi_uint8_t red; ++ grub_efi_uint8_t green; ++ grub_efi_uint8_t blue; ++ grub_efi_uint8_t reserved; ++}; ++typedef struct grub_efi_graphics_output_rgbr_pixel ++ grub_efi_graphics_output_rgbr_pixel_t; ++ ++union grub_efi_graphics_output_pixel ++{ ++ grub_efi_graphics_output_rgbr_pixel_t rgbr; ++ grub_efi_graphics_output_bgrr_pixel_t bgrr; ++ grub_efi_uint32_t raw; ++}; ++typedef union grub_efi_graphics_output_pixel ++ grub_efi_graphics_output_pixel_t; ++ ++enum grub_efi_graphics_output_blt_operation ++{ ++ GRUB_EFI_BLT_VIDEO_FILL, ++ GRUB_EFI_BLT_VIDEO_TO_BLT_BUFFER, ++ GRUB_EFI_BLT_BUFFER_TO_VIDEO, ++ GRUB_EFI_BLT_VIDEO_TO_VIDEO, ++}; ++typedef enum grub_efi_graphics_output_blt_operation ++ grub_efi_graphics_output_blt_operation_t; ++ ++struct grub_efi_graphics_output_mode ++{ ++ grub_efi_uint32_t max_mode; ++ grub_efi_uint32_t mode; ++ grub_efi_graphics_output_mode_information_t *info; ++ grub_efi_uintn_t size_of_info; ++ grub_efi_physical_address_t frame_buffer_base; ++ grub_efi_uintn_t frame_buffer_size; ++}; ++typedef struct grub_efi_graphics_output_mode grub_efi_graphics_output_mode_t; ++ ++struct grub_efi_graphics_output ++{ ++ grub_efi_status_t (*query_mode) (struct grub_efi_graphics_output * this, ++ grub_efi_uint32_t mode_number, ++ grub_efi_uintn_t * size_of_info, ++ grub_efi_graphics_output_mode_information_t ++ ** info); ++ grub_efi_status_t (*set_mode) (struct grub_efi_graphics_output * this, ++ grub_efi_uint32_t mode_number); ++ ++ grub_efi_status_t (*blt) (struct grub_efi_graphics_output * this, ++ grub_efi_graphics_output_blt_pixel_t * blt_buffer, ++ grub_efi_graphics_output_blt_operation_t ++ blt_operation, grub_efi_uintn_t src_x, ++ grub_efi_uintn_t src_y, grub_efi_uintn_t dest_x, ++ grub_efi_uintn_t dest_y, grub_efi_uintn_t width, ++ grub_efi_uintn_t height, grub_efi_uintn_t delta); ++ grub_efi_graphics_output_mode_t *mode; ++}; ++typedef struct grub_efi_graphics_output grub_efi_graphics_output_t; ++ ++typedef enum { ++ EfiUgaVideoFill, ++ EfiUgaVideoToBltBuffer, ++ EfiUgaBltBufferToVideo, ++ EfiUgaVideoToVideo, ++ EfiUgaBltMax ++} grub_efi_uga_blt_operation_t; ++ ++typedef enum { ++ grub_efi_pci_io_width_uint8, ++ grub_efi_pci_io_width_uint16, ++ grub_efi_pci_io_width_uint32, ++ grub_efi_pci_io_width_uint64, ++ grub_efi_pci_io_width_fifo_uint8, ++ grub_efi_pci_io_width_fifo_uint16, ++ grub_efi_pci_io_width_fifo_uint32, ++ grub_efi_pci_io_width_fifo_uint64, ++ grub_efi_pci_io_width_fill_uint8, ++ grub_efi_pci_io_width_fill_uint16, ++ grub_efi_pci_io_width_fill_uint32, ++ grub_efi_pci_io_width_fill_uint64, ++ grub_efi_pci_io_width_maximum ++} grub_efi_pci_io_width; ++ ++struct grub_efi_pci_io; ++ ++typedef struct ++{ ++ grub_efi_status_t(*read) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint8_t bar_index, ++ grub_efi_uint64_t offset, ++ grub_efi_uintn_t count, ++ void *buffer); ++ grub_efi_status_t(*write) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint8_t bar_index, ++ grub_efi_uint64_t offset, ++ grub_efi_uintn_t count, ++ void *buffer); ++} grub_efi_pci_io_access_t; ++ ++typedef struct ++{ ++ grub_efi_status_t( *read) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint32_t offset, ++ grub_efi_uintn_t count, ++ void *buffer); ++ grub_efi_status_t( *write) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint32_t offset, ++ grub_efi_uintn_t count, ++ void *buffer); ++} grub_efi_pci_io_config_access_t; ++ ++typedef enum { ++ grub_efi_pci_io_operation_bus_masterread, ++ grub_efi_pci_io_operation_bus_masterwrite, ++ grub_efi_pci_io_operation_bus_master_common_buffer, ++ grub_efi_pci_io_operation_maximum ++} grub_efi_pci_io_operation_t; ++ ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_IO 0x0100 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 ++#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 ++ ++typedef enum { ++ grub_efi_pci_io_attribute_operation_get, ++ grub_efi_pci_io_attribute_operation_set, ++ grub_efi_pci_io_attribute_operation_enable, ++ grub_efi_pci_io_attribute_operation_disable, ++ grub_efi_pci_io_attribute_operation_supported, ++ grub_efi_pci_io_attribute_operation_maximum ++} grub_efi_pci_io_attribute_operation_t; ++ ++struct grub_efi_pci_io { ++ grub_efi_status_t (*poll_mem) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint8_t bar_ndex, ++ grub_efi_uint64_t offset, ++ grub_efi_uint64_t mask, ++ grub_efi_uint64_t value, ++ grub_efi_uint64_t delay, ++ grub_efi_uint64_t *result); ++ grub_efi_status_t (*poll_io) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width Width, ++ grub_efi_uint8_t bar_index, ++ grub_efi_uint64_t offset, ++ grub_efi_uint64_t mask, ++ grub_efi_uint64_t value, ++ grub_efi_uint64_t delay, ++ grub_efi_uint64_t *result); ++ grub_efi_pci_io_access_t mem; ++ grub_efi_pci_io_access_t io; ++ grub_efi_pci_io_config_access_t pci; ++ grub_efi_status_t (*copy_mem) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint8_t dest_bar_index, ++ grub_efi_uint64_t dest_offset, ++ grub_efi_uint8_t src_bar_index, ++ grub_efi_uint64_t src_offset, ++ grub_efi_uintn_t count); ++ grub_efi_status_t (*map) ( struct grub_efi_pci_io *this, ++ grub_efi_pci_io_operation_t operation, ++ void *host_address, ++ grub_efi_uintn_t *number_of_bytes, ++ grub_efi_uint64_t *device_address, ++ void **mapping); ++ grub_efi_status_t (*unmap) (struct grub_efi_pci_io *this, ++ void *mapping); ++ grub_efi_status_t (*allocate_buffer) (struct grub_efi_pci_io *this, ++ grub_efi_allocate_type_t type, ++ grub_efi_memory_type_t memory_type, ++ grub_efi_uintn_t pages, ++ void **host_address, ++ grub_efi_uint64_t attributes); ++ grub_efi_status_t (*free_buffer) (struct grub_efi_pci_io *this, ++ grub_efi_allocate_type_t type, ++ grub_efi_memory_type_t memory_type, ++ grub_efi_uintn_t pages, ++ void **host_address, ++ grub_efi_uint64_t attributes); ++ grub_efi_status_t (*flush) (struct grub_efi_pci_io *this); ++ grub_efi_status_t (*get_location) (struct grub_efi_pci_io *this, ++ grub_efi_uintn_t *segment_number, ++ grub_efi_uintn_t *bus_number, ++ grub_efi_uintn_t *device_number, ++ grub_efi_uintn_t *function_number); ++ grub_efi_status_t (*attributes) (struct grub_efi_pci_io *this, ++ grub_efi_pci_io_attribute_operation_t operation, ++ grub_efi_uint64_t attributes, ++ grub_efi_uint64_t *result); ++ grub_efi_status_t (*get_bar_attributes) (struct grub_efi_pci_io *this, ++ grub_efi_uint8_t bar_index, ++ grub_efi_uint64_t *supports, ++ void **resources); ++ grub_efi_status_t (*set_bar_attributes) (struct grub_efi_pci_io *this, ++ grub_efi_uint64_t attributes, ++ grub_efi_uint8_t bar_index, ++ grub_efi_uint64_t *offset, ++ grub_efi_uint64_t *length); ++ grub_efi_uint64_t rom_size; ++ void *rom_image; ++}; ++typedef struct grub_efi_pci_io grub_efi_pci_io_t; ++ ++struct grub_efi_pci_root_io; ++ ++typedef struct ++{ ++ grub_efi_status_t(*read) (struct grub_efi_pci_root_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint64_t address, ++ grub_efi_uintn_t count, ++ void *buffer); ++ grub_efi_status_t(*write) (struct grub_efi_pci_root_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint64_t address, ++ grub_efi_uintn_t count, ++ void *buffer); ++} grub_efi_pci_root_io_access_t; ++ ++typedef enum { ++ grub_efi_pci_root_io_operation_bus_master_read, ++ grub_efi_pci_root_io_operation_bus_master_write, ++ grub_efi_pci_root_io_operation_bus_master_common_buffer, ++ grub_efi_pci_root_io_operation_bus_master_read_64, ++ grub_efi_pci_root_io_operation_bus_master_write_64, ++ grub_efi_pci_root_io_operation_bus_master_common_buffer_64, ++ grub_efi_pci_root_io_operation_maximum ++} grub_efi_pci_root_io_operation_t; ++ ++struct grub_efi_pci_root_io { ++ grub_efi_handle_t parent; ++ grub_efi_status_t (*poll_mem) (struct grub_efi_pci_root_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint64_t address, ++ grub_efi_uint64_t mask, ++ grub_efi_uint64_t value, ++ grub_efi_uint64_t delay, ++ grub_efi_uint64_t *result); ++ grub_efi_status_t (*poll_io) (struct grub_efi_pci_root_io *this, ++ grub_efi_pci_io_width Width, ++ grub_efi_uint64_t address, ++ grub_efi_uint64_t mask, ++ grub_efi_uint64_t value, ++ grub_efi_uint64_t delay, ++ grub_efi_uint64_t *result); ++ grub_efi_pci_root_io_access_t mem; ++ grub_efi_pci_root_io_access_t io; ++ grub_efi_pci_root_io_access_t pci; ++ grub_efi_status_t (*copy_mem) (struct grub_efi_pci_root_io *this, ++ grub_efi_pci_io_width width, ++ grub_efi_uint64_t dest_offset, ++ grub_efi_uint64_t src_offset, ++ grub_efi_uintn_t count); ++ grub_efi_status_t (*map) ( struct grub_efi_pci_root_io *this, ++ grub_efi_pci_root_io_operation_t operation, ++ void *host_address, ++ grub_efi_uintn_t *number_of_bytes, ++ grub_efi_uint64_t *device_address, ++ void **mapping); ++ grub_efi_status_t (*unmap) (struct grub_efi_pci_root_io *this, ++ void *mapping); ++ grub_efi_status_t (*allocate_buffer) (struct grub_efi_pci_root_io *this, ++ grub_efi_allocate_type_t type, ++ grub_efi_memory_type_t memory_type, ++ grub_efi_uintn_t pages, ++ void **host_address, ++ grub_efi_uint64_t attributes); ++ grub_efi_status_t (*free_buffer) (struct grub_efi_pci_root_io *this, ++ grub_efi_uintn_t pages, ++ void **host_address); ++ grub_efi_status_t (*flush) (struct grub_efi_pci_root_io *this); ++ grub_efi_status_t (*get_attributes) (struct grub_efi_pci_root_io *this, ++ grub_efi_uint64_t *supports, ++ void **resources); ++ grub_efi_status_t (*set_attributes) (struct grub_efi_pci_root_io *this, ++ grub_efi_uint64_t attributes, ++ grub_efi_uint64_t *offset, ++ grub_efi_uint64_t *length); ++ grub_efi_status_t (*configuration) (struct grub_efi_pci_root_io *this, ++ void **resources); ++}; ++ ++typedef struct grub_efi_pci_root_io grub_efi_pci_root_io_t; ++ ++struct grub_efi_uga_draw ++{ ++ grub_efi_status_t (*get_mode) (struct grub_efi_uga_draw * this, ++ grub_efi_uint32_t *horizontal_resolution, ++ grub_efi_uint32_t *vertical_resolution, ++ grub_efi_uint32_t *color_depth, ++ grub_efi_uint32_t *refresh_rate); ++ grub_efi_status_t (*set_mode) (struct grub_efi_uga_draw * this, ++ grub_efi_uint32_t horizontal_resolution, ++ grub_efi_uint32_t vertical_resolution, ++ grub_efi_uint32_t color_depth, ++ grub_efi_uint32_t refresh_rate); ++ grub_efi_status_t (*blt) (struct grub_efi_uga_draw * this, ++ grub_efi_uga_pixel_t *blt_buffer, ++ grub_efi_uga_blt_operation_t blt_operation, ++ grub_efi_uintn_t source_x, ++ grub_efi_uintn_t source_y, ++ grub_efi_uintn_t destination_x, ++ grub_efi_uintn_t destination_y, ++ grub_efi_uintn_t width, ++ grub_efi_uintn_t height, ++ grub_efi_uintn_t delta); ++}; ++typedef struct grub_efi_uga_draw grub_efi_uga_draw_t; ++ ++typedef grub_uint32_t grub_uga_status_t; ++ ++typedef enum { ++ UgaDtParentBus = 1, ++ UgaDtGraphicsController, ++ UgaDtOutputController, ++ UgaDtOutputPort, ++ UgaDtOther ++} grub_uga_device_type_t; ++ ++typedef grub_efi_uint32_t grub_uga_device_id_t; ++ ++struct grub_uga_device_data { ++ grub_uga_device_type_t device_type; ++ grub_uga_device_id_t device_id; ++ grub_efi_uint32_t device_context_size; ++ grub_efi_uint32_t shared_context_size; ++}; ++typedef struct grub_uga_device_data grub_uga_device_data_t; ++ ++struct grub_uga_device { ++ void *device_context; ++ void *shared_context; ++ void *runtime_context; ++ struct grub_uga_device *parent_device; ++ void *bus_io_services; ++ void *stdio_services; ++ grub_uga_device_data_t device_data; ++}; ++typedef struct grub_uga_device grub_uga_device_t; ++ ++typedef enum { ++ UgaIoGetVersion = 1, ++ UgaIoGetChildDevice, ++ UgaIoStartDevice, ++ UgaIoStopDevice, ++ UgaIoFlushDevice, ++ UgaIoResetDevice, ++ UgaIoGetDeviceState, ++ UgaIoSetDeviceState, ++ UgaIoSetPowerState, ++ UgaIoGetMemoryConfiguration, ++ UgaIoSetVideoMode, ++ UgaIoCopyRectangle, ++ UgaIoGetEdidSegment, ++ UgaIoDeviceChannelOpen, ++ UgaIoDeviceChannelClose, ++ UgaIoDeviceChannelRead, ++ UgaIoDeviceChannelWrite, ++ UgaIoGetPersistentDataSize, ++ UgaIoGetPersistentData, ++ UgaIoSetPersistentData, ++ UgaIoGetDevicePropertySize, ++ UgaIoGetDeviceProperty, ++ UgaIoBtPrivateInterface ++} grub_uga_io_request_code_t; ++ ++struct grub_uga_io_request { ++ grub_uga_io_request_code_t io_request_code; ++ void *in_buffer; ++ grub_efi_uint64_t in_buffer_size; ++ grub_efi_uint64_t bytes_returned; ++}; ++typedef struct grub_uga_io_request grub_uga_io_request_t; ++ ++struct grub_efi_uga_io ++{ ++ grub_efi_status_t (*create_device) (struct grub_efi_uga_io * this, ++ grub_uga_device_t *parent_device, ++ grub_uga_device_data_t *device_data, ++ void *runtime_context, ++ grub_uga_device_t **device); ++ grub_efi_status_t (*delete_device) (struct grub_efi_uga_io * this, ++ grub_uga_device_t *device); ++ grub_uga_status_t (*dispatch_service) (grub_uga_device_t *device, ++ grub_uga_io_request_t *io_request); ++}; ++typedef struct grub_efi_uga_io grub_efi_uga_io_t; ++ ++/* XXX PJFIX add uga driver handoff stuff */ ++ ++// File Open Modes ++#define GRUB_EFI_FILE_MODE_READ 0x0000000000000001ULL ++#define GRUB_EFI_FILE_MODE_WRITE 0x0000000000000002ULL ++#define GRUB_EFI_FILE_MODE_CREATE 0x8000000000000000ULL ++ ++// File Attributes ++#define GRUB_EFI_FILE_READ_ONLY 0x0000000000000001ULL ++#define GRUB_EFI_FILE_HIDDEN 0x0000000000000002ULL ++#define GRUB_EFI_FILE_SYSTEM 0x0000000000000004ULL ++#define GRUB_EFI_FILE_RESERVED 0x0000000000000008ULL ++#define GRUB_EFI_FILE_DIRECTORY 0x0000000000000010ULL ++#define GRUB_EFI_FILE_ARCHIVE 0x0000000000000020ULL ++#define GRUB_EFI_FILE_VALID_ATTR 0x0000000000000037ULL ++ ++struct grub_efi_file ++{ ++ grub_efi_uint64_t revision; ++ grub_efi_status_t (*open) (struct grub_efi_file * this, ++ struct grub_efi_file ** new_handle, ++ grub_efi_char16_t * file_name, ++ grub_efi_uint64_t open_mode, ++ grub_efi_uint64_t attributes); ++ grub_efi_status_t (*close) (struct grub_efi_file * this); ++ grub_efi_status_t (*delete) (struct grub_efi_file * this); ++ grub_efi_status_t (*read) (struct grub_efi_file * this, ++ grub_efi_uintn_t * buffer_size, ++ void * buffer); ++ grub_efi_status_t (*write) (struct grub_efi_file * this, ++ grub_efi_uintn_t * buffer_size, ++ void * buffer); ++ grub_efi_status_t (*get_position) (struct grub_efi_file * this, ++ grub_efi_uint64_t * position); ++ grub_efi_status_t (*set_position) (struct grub_efi_file * this, ++ grub_efi_uint64_t position); ++ grub_efi_status_t (*get_info) (struct grub_efi_file * this, ++ grub_efi_guid_t * information_type, ++ grub_efi_uintn_t * buffer_size, ++ void * buffer); ++ grub_efi_status_t (*set_info) (struct grub_efi_file * this, ++ grub_efi_guid_t * information_type, ++ grub_efi_uintn_t buffer_size, ++ void * buffer); ++ grub_efi_status_t (*flush) (struct grub_efi_file * this); ++}; ++typedef struct grub_efi_file grub_efi_file_t; ++ ++struct grub_efi_simple_file_system ++{ ++ grub_efi_uint64_t revision; ++ grub_efi_status_t (*open_volume) (struct grub_efi_simple_file_system * this, ++ grub_efi_file_t ** root); ++}; ++typedef struct grub_efi_simple_file_system grub_efi_simple_file_system_t; ++ ++struct grub_efi_serial_io_mode ++{ ++ grub_efi_uint32_t control_mask; ++ grub_efi_uint32_t timeout; ++ grub_efi_uint64_t baud_rate; ++ grub_efi_uint32_t receive_fifo_depth; ++ grub_efi_uint32_t data_bits; ++ grub_efi_uint32_t parity; ++ grub_efi_uint32_t stop_bits; ++}; ++typedef struct grub_efi_serial_io_mode grub_efi_serial_io_mode_t; ++ ++enum grub_efi_parity ++{ ++ GRUB_EFI_DEFAULT_PARITY, ++ GRUB_EFI_NO_PARITY, ++ GRUB_EFI_EVEN_PARITY, ++ GRUB_EFI_ODD_PARITY, ++ GRUB_EFI_MARK_PARITY, ++ GRUB_EFI_SPACE_PARITY ++}; ++typedef enum grub_efi_parity grub_efi_parity_t; ++ ++enum grub_efi_stop_bits ++{ ++ GRUB_EFI_DEFAULT_STOP_BITS, ++ GRUB_EFI_ONE_STOP_BIT, ++ GRUB_EFI_ONE_FIVE_STOP_BITS, ++ GRUB_EFI_TWO_STOP_BITS ++}; ++typedef enum grub_efi_stop_bits grub_efi_stop_bits_t; ++ ++#define GRUB_EFI_SERIAL_CLEAR_TO_SEND 0x0010 ++#define GRUB_EFI_SERIAL_DATA_SET_READY 0x0020 ++#define GRUB_EFI_SERIAL_RING_INDICATE 0x0040 ++#define GRUB_EFI_SERIAL_CARRIER_DETECT 0x0080 ++#define GRUB_EFI_SERIAL_REQUEST_TO_SEND 0x0002 ++#define GRUB_EFI_SERIAL_DATA_TERMINAL_READY 0x0001 ++#define GRUB_EFI_SERIAL_INPUT_BUFFER_EMPTY 0x0100 ++#define GRUB_EFI_SERIAL_OUTPUT_BUFFER_EMPTY 0x0200 ++#define GRUB_EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE 0x1000 ++#define GRUB_EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE 0x2000 ++#define GRUB_EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE 0x4000 ++ ++struct grub_efi_serial_io ++{ ++ grub_efi_uint32_t revision; ++ grub_efi_status_t (*reset) (struct grub_efi_serial_io * this); ++ grub_efi_status_t (*set_attributes) (struct grub_efi_serial_io * this, ++ grub_efi_uint64_t baud_rate, ++ grub_efi_uint32_t receive_fifo_depth, ++ grub_efi_uint32_t timeout, ++ grub_efi_parity_t parity, ++ grub_efi_uint8_t data_bits, ++ grub_efi_stop_bits_t stop_bits); ++ grub_efi_status_t (*set_control_bits) (struct grub_efi_serial_io * this, ++ grub_efi_uint32_t control); ++ grub_efi_status_t (*get_control_bits) (struct grub_efi_serial_io * this, ++ grub_efi_uint32_t * control); ++ grub_efi_status_t (*write) (struct grub_efi_serial_io * this, ++ grub_efi_uintn_t * buffer_size, ++ void * buffer); ++ grub_efi_status_t (*read) (struct grub_efi_serial_io * this, ++ grub_efi_uintn_t * buffer_size, ++ void * buffer); ++ grub_efi_serial_io_mode_t *mode; ++}; ++typedef struct grub_efi_serial_io grub_efi_serial_io_t; ++ ++#endif /* ! GRUB_EFI_API_HEADER */ +diff --git a/efi/grub/efi/console_control.h b/efi/grub/efi/console_control.h +new file mode 100644 +index 0000000..ffc4305 +--- /dev/null ++++ b/efi/grub/efi/console_control.h +@@ -0,0 +1,59 @@ ++/* console_control.h - definitions of the console control protocol */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++/* The console control protocol is not a part of the EFI spec, ++ but defined in Intel's Sample Implementation. */ ++ ++#ifndef GRUB_EFI_CONSOLE_CONTROL_HEADER ++#define GRUB_EFI_CONSOLE_CONTROL_HEADER 1 ++ ++#define GRUB_EFI_CONSOLE_CONTROL_GUID \ ++ { 0xf42f7782, 0x12e, 0x4c12, \ ++ { 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 } \ ++ } ++ ++enum grub_efi_screen_mode ++{ ++ GRUB_EFI_SCREEN_TEXT, ++ GRUB_EFI_SCREEN_GRAPHICS, ++ GRUB_EFI_SCREEN_TEXT_MAX_VALUE ++}; ++typedef enum grub_efi_screen_mode grub_efi_screen_mode_t; ++ ++struct grub_efi_console_control_protocol ++{ ++ grub_efi_status_t ++ (*get_mode) (struct grub_efi_console_control_protocol * this, ++ grub_efi_screen_mode_t * mode, ++ grub_efi_boolean_t * uga_exists, ++ grub_efi_boolean_t * std_in_locked); ++ ++ grub_efi_status_t ++ (*set_mode) (struct grub_efi_console_control_protocol * this, ++ grub_efi_screen_mode_t mode); ++ ++ grub_efi_status_t ++ (*lock_std_in) (struct grub_efi_console_control_protocol * this, ++ grub_efi_char16_t * password); ++}; ++typedef struct grub_efi_console_control_protocol ++ grub_efi_console_control_protocol_t; ++ ++#endif /* ! GRUB_EFI_CONSOLE_CONTROL_HEADER */ +diff --git a/efi/grub/efi/efi.h b/efi/grub/efi/efi.h +new file mode 100644 +index 0000000..301f9d9 +--- /dev/null ++++ b/efi/grub/efi/efi.h +@@ -0,0 +1,85 @@ ++/* efi.h - declare variables and functions for EFI support */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_EFI_EFI_HEADER ++#define GRUB_EFI_EFI_HEADER 1 ++ ++#include ++#include ++ ++/* Functions. */ ++grub_efi_status_t ++grub_efi_locate_device_path (grub_efi_guid_t *protocol, ++ grub_efi_device_path_t **dp, ++ grub_efi_handle_t *handle); ++grub_efi_status_t ++grub_efi_locate_handle_buffer (grub_efi_locate_search_type_t search_type, ++ grub_efi_guid_t *protocol, ++ void *search_key, ++ grub_efi_uintn_t *no_handles, ++ grub_efi_handle_t **buffer); ++void *grub_efi_locate_protocol (grub_efi_guid_t * protocol, ++ void *registration); ++grub_efi_handle_t *grub_efi_locate_handle (grub_efi_locate_search_type_t ++ search_type, ++ grub_efi_guid_t * protocol, ++ void *search_key, ++ grub_efi_uintn_t * num_handles); ++void *grub_efi_open_protocol (grub_efi_handle_t handle, ++ grub_efi_guid_t * protocol, ++ grub_efi_uint32_t attributes); ++int grub_efi_set_text_mode (int on); ++void grub_efi_stall (grub_efi_uintn_t microseconds); ++void *grub_efi_allocate_pool (grub_efi_uintn_t size); ++void grub_efi_free_pool (void *buffer); ++void *grub_efi_allocate_anypages (grub_efi_uintn_t pages); ++void *grub_efi_allocate_pages (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages); ++void *grub_efi_allocate_runtime_pages (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages); ++void ++grub_efi_free_pages (grub_efi_physical_address_t address, ++ grub_efi_uintn_t pages); ++int ++grub_efi_get_memory_map (grub_efi_uintn_t * map_key, ++ grub_efi_uintn_t * descriptor_size, ++ grub_efi_uint32_t * descriptor_version); ++grub_efi_loaded_image_t *grub_efi_get_loaded_image (grub_efi_handle_t ++ image_handle); ++void grub_efi_print_device_path (grub_efi_device_path_t * dp); ++char *grub_efi_get_filename (grub_efi_device_path_t * dp); ++grub_efi_device_path_t *grub_efi_get_device_path (grub_efi_handle_t handle); ++int grub_efi_exit_boot_services (grub_efi_uintn_t map_key); ++ ++void grub_efi_mm_init (void); ++void grub_efi_mm_fini (void); ++void grub_efi_init (void); ++void grub_efi_fini (void); ++void grub_efi_set_prefix (void); ++ ++/* Variables. */ ++extern void *mmap_buf; ++extern grub_efi_uintn_t mmap_size; ++extern grub_efi_uintn_t mmap_pages; ++ ++extern grub_efi_system_table_t *grub_efi_system_table; ++extern grub_efi_handle_t grub_efi_image_handle; ++ ++#endif /* ! GRUB_EFI_EFI_HEADER */ +diff --git a/efi/grub/efi/eficall.h b/efi/grub/efi/eficall.h +new file mode 100644 +index 0000000..2e79e04 +--- /dev/null ++++ b/efi/grub/efi/eficall.h +@@ -0,0 +1,162 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef _EFI_CALL_INCLUDE_ ++#define _EFI_CALL_INCLUDE_ 1 ++ ++#include ++ ++#ifndef __x86_64__ ++#ifdef EFI_FUNCTION_WRAPPER ++#undef EFI_FUNCTION_WRAPPER ++#endif ++#endif ++ ++#ifdef EFI_FUNCTION_WRAPPER ++typedef long EFI_STATUS; ++ ++EFI_STATUS x64_call0 (unsigned long func); ++EFI_STATUS x64_call1 (unsigned long func, unsigned long a); ++EFI_STATUS x64_call2 (unsigned long func, unsigned long a, unsigned long b); ++EFI_STATUS x64_call3 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c); ++EFI_STATUS x64_call4 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, unsigned long d); ++EFI_STATUS x64_call5 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, ++ unsigned long d, unsigned long e); ++EFI_STATUS x64_call6 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, ++ unsigned long d, unsigned long e, unsigned long f); ++EFI_STATUS x64_call7 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, ++ unsigned long d, unsigned long e, ++ unsigned long f, unsigned long g); ++EFI_STATUS x64_call8 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, ++ unsigned long d, unsigned long e, ++ unsigned long f, unsigned long g, ++ unsigned long h); ++EFI_STATUS x64_call9 (unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, ++ unsigned long d, unsigned long e, ++ unsigned long f, unsigned long g, ++ unsigned long h, unsigned long i); ++EFI_STATUS x64_call10(unsigned long func, unsigned long a, ++ unsigned long b, unsigned long c, ++ unsigned long d, unsigned long e, ++ unsigned long f, unsigned long g, ++ unsigned long h, unsigned long i, ++ unsigned long j); ++ ++#define Call_Service(func) x64_call0((unsigned long)func) ++ ++#define Call_Service_1(func,a) x64_call1((unsigned long)func, \ ++ (unsigned long)a) ++ ++#define Call_Service_2(func,a,b) x64_call2((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b) ++ ++#define Call_Service_3(func,a,b,c) x64_call3((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c) ++ ++#define Call_Service_4(func,a,b,c,d) x64_call4((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d) ++ ++#define Call_Service_5(func,a,b,c,d,e) x64_call5((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d, \ ++ (unsigned long)e) ++ ++#define Call_Service_6(func,a,b,c,d,e,f) x64_call6((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d, \ ++ (unsigned long)e, \ ++ (unsigned long)f) ++ ++#define Call_Service_7(func,a,b,c,d,e,f,g) x64_call7((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d, \ ++ (unsigned long)e, \ ++ (unsigned long)f, \ ++ (unsigned long)g) ++ ++#define Call_Service_8(func,a,b,c,d,e,f,g,h) x64_call8((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d, \ ++ (unsigned long)e, \ ++ (unsigned long)f, \ ++ (unsigned long)g, \ ++ (unsigned long)h) ++ ++#define Call_Service_9(func,a,b,c,d,e,f,g,h,i) x64_call9((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d, \ ++ (unsigned long)e, \ ++ (unsigned long)f, \ ++ (unsigned long)g, \ ++ (unsigned long)h, \ ++ (unsigned long)i) ++ ++#define Call_Service_10(func,a,b,c,d,e,f,g,h,i,j) \ ++ x64_call10((unsigned long)func, \ ++ (unsigned long)a, \ ++ (unsigned long)b, \ ++ (unsigned long)c, \ ++ (unsigned long)d, \ ++ (unsigned long)e, \ ++ (unsigned long)f, \ ++ (unsigned long)g, \ ++ (unsigned long)h, \ ++ (unsigned long)i, \ ++ (unsigned long)j) ++ ++#else ++ ++typedef long EFI_STATUS; ++#define Call_Service(func) func() ++#define Call_Service_1(func,a) func(a) ++#define Call_Service_2(func,a,b) func(a,b) ++#define Call_Service_3(func,a,b,c) func(a,b,c) ++#define Call_Service_4(func,a,b,c,d) func(a,b,c,d) ++#define Call_Service_5(func,a,b,c,d,e) func(a,b,c,d,e) ++#define Call_Service_6(func,a,b,c,d,e,f) func(a,b,c,d,e,f) ++#define Call_Service_7(func,a,b,c,d,e,f,g) func(a,b,c,d,e,f,g) ++#define Call_Service_8(func,a,b,c,d,e,f,g,h) func(a,b,c,d,e,f,g,h) ++#define Call_Service_9(func,a,b,c,d,e,f,g,h,i) func(a,b,c,d,e,f,g,h,i) ++#define Call_Service_10(func,a,b,c,d,e,f,g,h,i,j) func(a,b,c,d,e,f,g,h,i,j) ++#endif ++ ++#endif +diff --git a/efi/grub/efi/misc.h b/efi/grub/efi/misc.h +new file mode 100644 +index 0000000..e06a2fb +--- /dev/null ++++ b/efi/grub/efi/misc.h +@@ -0,0 +1,60 @@ ++/* misc.h - prototypes for misc EFI functions */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2003,2005,2006 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_EFI_MISC_HEADER ++#define GRUB_EFI_MISC_HEADER 1 ++ ++struct e820_entry; ++void e820_map_from_efi_map (struct e820_entry *e820_map, ++ int *e820_nr_map, ++ grub_efi_memory_descriptor_t *memory_map, ++ grub_efi_uintn_t desc_size, ++ grub_efi_uintn_t memory_map_size); ++ ++/* Initialize the console system. */ ++void grub_console_init (void); ++/* Finish the console system. */ ++void grub_console_fini (void); ++ ++void grub_efidisk_init (void); ++void grub_efidisk_fini (void); ++grub_efi_handle_t grub_efidisk_get_current_bdev_handle (void); ++int grub_get_drive_partition_from_bdev_handle (grub_efi_handle_t handle, ++ unsigned long *drive, ++ unsigned long *partition); ++ ++char *grub_efi_file_path_to_path_name (grub_efi_device_path_t *file_path); ++void grub_load_saved_default (grub_efi_handle_t dev_handle); ++ ++grub_efi_device_path_t * ++find_last_device_path (const grub_efi_device_path_t *dp); ++grub_efi_device_path_t * ++find_parent_device_path (const grub_efi_device_path_t *dp); ++grub_efi_device_path_t * ++duplicate_device_path (const grub_efi_device_path_t *dp); ++int ++compare_device_paths (const grub_efi_device_path_t *dp1, ++ const grub_efi_device_path_t *dp2); ++grub_efi_device_path_t * ++device_path_from_utf8 (const char *device); ++ ++extern grub_efi_guid_t simple_file_system_guid; ++ ++#endif /* ! GRUB_EFI_MISC_HEADER */ +diff --git a/efi/grub/efi/net.h b/efi/grub/efi/net.h +new file mode 100644 +index 0000000..e69de29 +diff --git a/efi/grub/efi/time.h b/efi/grub/efi/time.h +new file mode 100644 +index 0000000..55bfe68 +--- /dev/null ++++ b/efi/grub/efi/time.h +@@ -0,0 +1,31 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301, USA. ++ */ ++ ++#ifndef GRUB_EFI_TIME_HEADER ++#define GRUB_EFI_TIME_HEADER 1 ++ ++#include ++ ++#define GRUB_TICKS_PER_SECOND 18 ++ ++/* Return the real time in ticks. */ ++grub_uint32_t grub_get_rtc (void); ++ ++#endif /* ! GRUB_EFI_TIME_HEADER */ +diff --git a/efi/grub/i386/linux.h b/efi/grub/i386/linux.h +new file mode 100644 +index 0000000..1545a7a +--- /dev/null ++++ b/efi/grub/i386/linux.h +@@ -0,0 +1,226 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_LINUX_MACHINE_HEADER ++#define GRUB_LINUX_MACHINE_HEADER 1 ++ ++#define GRUB_LINUX_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */ ++#define GRUB_LINUX_DEFAULT_SETUP_SECTS 4 ++#define GRUB_LINUX_FLAG_CAN_USE_HEAP 0x80 ++#define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF ++#define GRUB_LINUX_MAX_SETUP_SECTS 64 ++#define GRUB_LINUX_BOOT_LOADER_TYPE 0x72 ++#define GRUB_LINUX_HEAP_END_OFFSET (0x9000 - 0x200) ++ ++#define GRUB_LINUX_BZIMAGE_ADDR 0x100000 ++#define GRUB_LINUX_ZIMAGE_ADDR 0x10000 ++#define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000 ++#define GRUB_LINUX_SETUP_STACK 0x9000 ++ ++#define GRUB_LINUX_FLAG_BIG_KERNEL 0x1 ++ ++/* Linux's video mode selection support. Actually I hate it! */ ++#define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF ++#define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE ++#define GRUB_LINUX_VID_MODE_ASK 0xFFFD ++ ++#define GRUB_LINUX_CL_OFFSET 0x9000 ++#define GRUB_LINUX_CL_END_OFFSET 0x90FF ++#define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 ++#define GRUB_LINUX_CL_MAGIC 0xA33F ++ ++#if 0 ++#define GRUB_LINUX_EFI_SIGNATURE_X64 \ ++ ('4' << 24 | '6' << 16 | 'L' << 8 | 'E') ++#else ++#define GRUB_LINUX_EFI_SIGNATURE_X64 \ ++ ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E') ++#endif ++ ++#ifndef ASM_FILE ++ ++/* For the Linux/i386 boot protocol version 2.07. */ ++struct grub_linux_kernel_header ++{ ++ grub_uint8_t setup_sects; /* The size of the setup in sectors */ ++ grub_uint16_t root_flags; /* If the root is mounted readonly */ ++ grub_uint32_t syssize; /* obsolete */ ++ grub_uint16_t ram_size; /* obsolete */ ++ grub_uint16_t vid_mode; /* Video mode control */ ++ grub_uint16_t root_dev; /* Default root device number */ ++ grub_uint16_t boot_flag; /* 0xAA55 magic number */ ++ grub_uint8_t jump_ins; /* Jump instruction */ ++ grub_uint8_t jump_off; /* Jump offset */ ++ grub_uint32_t header; /* Magic signature "HdrS" */ ++ grub_uint16_t version; /* Boot protocol version supported */ ++ grub_uint32_t realmode_swtch; /* Boot loader hook */ ++ grub_uint16_t start_sys; /* The load-low segment (obsolete) */ ++ grub_uint16_t kernel_version; /* Points to kernel version string */ ++ grub_uint8_t type_of_loader; /* Boot loader identifier */ ++ grub_uint8_t loadflags; /* Boot protocol option flags */ ++ grub_uint16_t setup_move_size;/* Move to high memory size */ ++ grub_uint32_t code32_start; /* Boot loader hook */ ++ grub_uint32_t ramdisk_image; /* initrd load address */ ++ grub_uint32_t ramdisk_size; /* initrd size */ ++ grub_uint32_t bootsect_kludge;/* obsolete */ ++ grub_uint16_t heap_end_ptr; /* Free memory after setup end */ ++ grub_uint16_t pad1; /* Unused */ ++ grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ ++ grub_uint32_t initrd_addr_max;/* Highest address for initrd */ ++ grub_uint32_t kernel_alignment; ++ grub_uint8_t relocatable_kernel; ++ grub_uint8_t pad2[3]; ++ grub_uint32_t hardware_subarch; ++ grub_uint64_t hardware_subarch_data; ++} __attribute__ ((packed)); ++ ++/* Boot parameters for Linux based on 2.6.12. This is used by the setup ++ sectors of Linux, and must be simulated by GRUB on EFI, because ++ the setup sectors depend on BIOS. */ ++struct linux_kernel_params ++{ ++ grub_uint8_t video_cursor_x; /* 0 */ ++ grub_uint8_t video_cursor_y; ++ ++ grub_uint16_t ext_mem; /* 2 */ ++ ++ grub_uint16_t video_page; /* 4 */ ++ grub_uint8_t video_mode; /* 6 */ ++ grub_uint8_t video_width; /* 7 */ ++ ++ grub_uint8_t padding1[0xa - 0x8]; ++ ++ grub_uint16_t video_ega_bx; /* a */ ++ ++ grub_uint8_t padding2[0xe - 0xc]; ++ ++ grub_uint8_t video_height; /* e */ ++ grub_uint8_t have_vga; /* f */ ++ grub_uint16_t font_size; /* 10 */ ++ ++ grub_uint16_t lfb_width; /* 12 */ ++ grub_uint16_t lfb_height; /* 14 */ ++ grub_uint16_t lfb_depth; /* 16 */ ++ grub_uint32_t lfb_base; /* 18 */ ++ grub_uint32_t lfb_size; /* 1c */ ++ ++ grub_uint16_t cl_magic; /* 20 */ ++ grub_uint16_t cl_offset; ++ ++ grub_uint16_t lfb_line_len; /* 24 */ ++ grub_uint8_t red_mask_size; /* 26 */ ++ grub_uint8_t red_field_pos; ++ grub_uint8_t green_mask_size; ++ grub_uint8_t green_field_pos; ++ grub_uint8_t blue_mask_size; ++ grub_uint8_t blue_field_pos; ++ grub_uint8_t reserved_mask_size; ++ grub_uint8_t reserved_field_pos; ++ grub_uint16_t vesapm_segment; /* 2e */ ++ grub_uint16_t vesapm_offset; /* 30 */ ++ grub_uint16_t lfb_pages; /* 32 */ ++ grub_uint16_t vesa_attrib; /* 34 */ ++ ++ grub_uint8_t padding3[0x40 - 0x36]; ++ ++ grub_uint16_t apm_version; /* 40 */ ++ grub_uint16_t apm_code_segment; /* 42 */ ++ grub_uint32_t apm_entry; /* 44 */ ++ grub_uint16_t apm_16bit_code_segment; /* 48 */ ++ grub_uint16_t apm_data_segment; /* 4a */ ++ grub_uint16_t apm_flags; /* 4c */ ++ grub_uint32_t apm_code_len; /* 4e */ ++ grub_uint16_t apm_data_len; /* 52 */ ++ ++ grub_uint8_t padding4[0x60 - 0x54]; ++ ++ grub_uint32_t ist_signature; /* 60 */ ++ grub_uint32_t ist_command; /* 64 */ ++ grub_uint32_t ist_event; /* 68 */ ++ grub_uint32_t ist_perf_level; /* 6c */ ++ ++ grub_uint8_t padding5[0x80 - 0x70]; ++ ++ grub_uint8_t hd0_drive_info[0x10]; /* 80 */ ++ grub_uint8_t hd1_drive_info[0x10]; /* 90 */ ++ grub_uint16_t rom_config_len; /* a0 */ ++ ++ grub_uint8_t padding6[0x1b8 - 0xa2]; ++ ++ union { ++ struct { ++ grub_uint32_t padding7_1; /* 0x1b8 */ ++ grub_uint32_t padding7_2; /* 0x1bc */ ++ ++ grub_uint32_t efi_signature; /* 1c0 */ ++ grub_uint32_t efi_system_table; /* 1c4 */ ++ grub_uint32_t efi_mem_desc_size; /* 1c8 */ ++ grub_uint32_t efi_mem_desc_version; /* 1cc */ ++ grub_uint32_t efi_mmap; /* 1d0 */ ++ grub_uint32_t efi_mmap_size; /* 1d4 */ ++ grub_uint32_t efi_system_table_hi; /* 1d8 */ ++ grub_uint32_t efi_mmap_hi; /* 1dc */ ++ } dunno; ++ struct { ++ grub_uint32_t efi_system_table; /* 1b8 */ ++ ++ grub_uint32_t padding7_1; /* 0x1bc */ ++ ++ grub_uint32_t efi_signature; /* 1c0 */ ++ grub_uint32_t efi_mem_desc_size; /* 1c4 */ ++ grub_uint32_t efi_mem_desc_version; /* 1c8 */ ++ grub_uint32_t efi_mmap_size; /* 1cc */ ++ grub_uint32_t efi_mmap; /* 1d0 */ ++ ++ grub_uint8_t padding7_2[0x1e0 - 0x1d4]; /* 1d4 */ ++ } version_0204; ++ struct { ++ grub_uint32_t padding7_1; /* 0x1b8 */ ++ grub_uint32_t padding7_2; /* 0x1bc */ ++ grub_uint32_t padding7_3; /* 0x1c0 */ ++ grub_uint32_t efi_system_table; /* 0x1c4 */ ++ grub_uint32_t efi_mem_desc_size; /* 0x1c8 */ ++ grub_uint32_t efi_mem_desc_version; /* 0x1cc */ ++ grub_uint32_t efi_mmap; /* 0x1d0 */ ++ grub_uint32_t efi_mmap_size; /* 0x1d4 */ ++ grub_uint8_t padding7_4[0x1e0 - 0x1d8]; /* 0x1d8 */ ++ } version_0206; ++ }; ++ ++ grub_uint32_t alt_mem; /* 1e0 */ ++ ++ grub_uint8_t padding8[0x1e8 - 0x1e4]; /* 1e4 */ ++ ++ grub_uint8_t e820_nr_map; /* 1e8 */ ++ grub_uint8_t eddbuf_entries; /* 1e9 */ ++ grub_uint8_t edd_mbr_sig_buf_entries; /* 1ea */ ++ ++ grub_uint8_t padding9[0x1f1 - 0x1eb]; ++ ++ struct grub_linux_kernel_header hdr; /* 0x1f1 */ ++ ++ grub_uint8_t padding10[0x2d0-0x1f1-sizeof(struct grub_linux_kernel_header)]; ++ ++ grub_uint8_t e820_map[2560]; /* 0x2d0 */ ++ ++ grub_uint8_t padding11[0x1000 - 0xcd0]; ++} __attribute__ ((packed)); ++#endif /* ! ASM_FILE */ ++ ++#endif /* ! GRUB_LINUX_MACHINE_HEADER */ +diff --git a/efi/grub/i386/types.h b/efi/grub/i386/types.h +new file mode 100644 +index 0000000..ec4174e +--- /dev/null ++++ b/efi/grub/i386/types.h +@@ -0,0 +1,32 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2006 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_TYPES_CPU_HEADER ++#define GRUB_TYPES_CPU_HEADER 1 ++ ++/* The size of void *. */ ++#define GRUB_TARGET_SIZEOF_VOID_P 4 ++ ++/* The size of long. */ ++#define GRUB_TARGET_SIZEOF_LONG 4 ++ ++/* x64_64 is little-endian. */ ++#undef GRUB_TARGET_WORDS_BIGENDIAN ++ ++#endif /* ! GRUB_TYPES_CPU_HEADER */ +diff --git a/efi/grub/misc.h b/efi/grub/misc.h +new file mode 100644 +index 0000000..5ef2226 +--- /dev/null ++++ b/efi/grub/misc.h +@@ -0,0 +1,71 @@ ++/* misc.h - prototypes for misc functions */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2003,2005,2006 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_MISC_HEADER ++#define GRUB_MISC_HEADER 1 ++ ++#include ++#include ++ ++#define grub_dprintf(condition, fmt, args...) \ ++ grub_real_dprintf(__FILE__, __LINE__, condition, fmt, ## args) ++ ++char *grub_stpcpy (char *dest, const char *src); ++void grub_real_dprintf (const char *file, ++ const int line, ++ const char *condition, ++ const char *fmt, ...) ++ __attribute__ ((format (printf, 4, 5))); ++void grub_exit (void) __attribute__ ((noreturn)); ++void grub_abort (void) __attribute__ ((noreturn)); ++void grub_fatal (const char *fmt, ...) __attribute__ ((noreturn)); ++grub_size_t grub_utf8_char_len(grub_uint8_t ch); ++grub_uint32_t grub_utf8_to_utf32(const grub_uint8_t *src, grub_size_t length); ++void grub_utf8_to_utf16(const grub_uint8_t *src, grub_size_t srclen, ++ grub_uint16_t *dst, grub_size_t dstlen); ++grub_uint8_t *grub_utf16_to_utf8 (grub_uint8_t * dest, ++ grub_uint16_t * src, grub_size_t size); ++ ++void *grub_malloc (grub_size_t size); ++void grub_free (void *ptr); ++ ++char *grub_strndup (const char *s, int n); ++#define strndup grub_strndup ++ ++int safe_parse_maxulong (char **str_ptr, unsigned long *myulong_ptr); ++ ++#define E820_RAM 1 ++#define E820_RESERVED 2 ++#define E820_ACPI 3 ++#define E820_NVS 4 ++#define E820_EXEC_CODE 5 ++#define E820_MAX 128 ++ ++struct e820_entry ++{ ++ grub_uint64_t addr; /* start of memory segment */ ++ grub_uint64_t size; /* size of memory segment */ ++ grub_uint32_t type; /* type of memory segment */ ++} __attribute__ ((packed)); ++ ++int grub_load_linux (char *kernel, char *arg); ++int grub_load_initrd (char *initrd); ++ ++#endif /* ! GRUB_MISC_HEADER */ +diff --git a/efi/grub/symbol.h b/efi/grub/symbol.h +new file mode 100644 +index 0000000..5204c54 +--- /dev/null ++++ b/efi/grub/symbol.h +@@ -0,0 +1,34 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2006 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_SYMBOL_HEADER ++#define GRUB_SYMBOL_HEADER 1 ++ ++#include ++ ++/* Add an underscore to a C symbol in assembler code if needed. */ ++#ifdef HAVE_ASM_USCORE ++# define EXT_C(sym) _ ## sym ++#else ++# define EXT_C(sym) sym ++#endif ++ ++#define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x): ++ ++#endif /* ! GRUB_SYMBOL_HEADER */ +diff --git a/efi/grub/types.h b/efi/grub/types.h +new file mode 100644 +index 0000000..173adb4 +--- /dev/null ++++ b/efi/grub/types.h +@@ -0,0 +1,158 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2005,2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_TYPES_HEADER ++#define GRUB_TYPES_HEADER 1 ++ ++#include ++#include ++ ++#define UNUSED __attribute__ ((unused)) ++ ++#ifdef GRUB_UTIL ++# define GRUB_CPU_SIZEOF_VOID_P SIZEOF_VOID_P ++# define GRUB_CPU_SIZEOF_LONG SIZEOF_LONG ++# ifdef WORDS_BIGENDIAN ++# define GRUB_CPU_WORDS_BIGENDIAN 1 ++# else ++# undef GRUB_CPU_WORDS_BIGENDIAN ++# endif ++#else /* ! GRUB_UTIL */ ++# define GRUB_CPU_SIZEOF_VOID_P GRUB_TARGET_SIZEOF_VOID_P ++# define GRUB_CPU_SIZEOF_LONG GRUB_TARGET_SIZEOF_LONG ++# ifdef GRUB_TARGET_WORDS_BIGENDIAN ++# define GRUB_CPU_WORDS_BIGENDIAN 1 ++# else ++# undef GRUB_CPU_WORDS_BIGENDIAN ++# endif ++#endif /* ! GRUB_UTIL */ ++ ++#if GRUB_CPU_SIZEOF_VOID_P != GRUB_CPU_SIZEOF_LONG ++# error "This architecture is not supported because sizeof(void *) != sizeof(long)" ++#endif ++ ++#if GRUB_CPU_SIZEOF_VOID_P != 4 && GRUB_CPU_SIZEOF_VOID_P != 8 ++# error "This architecture is not supported because sizeof(void *) != 4 and sizeof(void *) != 8" ++#endif ++ ++/* Define various wide integers. */ ++typedef signed char grub_int8_t; ++typedef short grub_int16_t; ++typedef int grub_int32_t; ++#if GRUB_CPU_SIZEOF_VOID_P == 8 ++typedef long grub_int64_t; ++#else ++typedef long long grub_int64_t; ++#endif ++ ++typedef unsigned char grub_uint8_t; ++typedef unsigned short grub_uint16_t; ++typedef unsigned grub_uint32_t; ++#if GRUB_CPU_SIZEOF_VOID_P == 8 ++typedef unsigned long grub_uint64_t; ++#else ++typedef unsigned long long grub_uint64_t; ++#endif ++ ++/* Misc types. */ ++#if GRUB_TARGET_SIZEOF_VOID_P == 8 ++typedef grub_uint64_t grub_target_addr_t; ++typedef grub_uint64_t grub_target_off_t; ++typedef grub_uint64_t grub_target_size_t; ++typedef grub_int64_t grub_target_ssize_t; ++#else ++typedef grub_uint32_t grub_target_addr_t; ++typedef grub_uint32_t grub_target_off_t; ++typedef grub_uint32_t grub_target_size_t; ++typedef grub_int32_t grub_target_ssize_t; ++#endif ++ ++typedef unsigned long grub_addr_t; ++#if GRUB_CPU_SIZEOF_VOID_P == 8 ++typedef grub_uint64_t grub_size_t; ++typedef grub_int64_t grub_ssize_t; ++#else ++typedef grub_uint32_t grub_size_t; ++typedef grub_int32_t grub_ssize_t; ++#endif ++ ++/* The type for representing a file offset. */ ++typedef grub_uint64_t grub_off_t; ++ ++/* The type for representing a disk block address. */ ++typedef grub_uint64_t grub_disk_addr_t; ++ ++/* Byte-orders. */ ++#define grub_swap_bytes16(x) \ ++({ \ ++ grub_uint16_t _x = (x); \ ++ (grub_uint16_t) ((_x << 8) | (_x >> 8)); \ ++}) ++ ++#define grub_swap_bytes32(x) \ ++({ \ ++ grub_uint32_t _x = (x); \ ++ (grub_uint32_t) ((_x << 24) \ ++ | ((_x & (grub_uint32_t) 0xFF00UL) << 8) \ ++ | ((_x & (grub_uint32_t) 0xFF0000UL) >> 8) \ ++ | (_x >> 24)); \ ++}) ++ ++#define grub_swap_bytes64(x) \ ++({ \ ++ grub_uint64_t _x = (x); \ ++ (grub_uint64_t) ((_x << 56) \ ++ | ((_x & (grub_uint64_t) 0xFF00ULL) << 40) \ ++ | ((_x & (grub_uint64_t) 0xFF0000ULL) << 24) \ ++ | ((_x & (grub_uint64_t) 0xFF000000ULL) << 8) \ ++ | ((_x & (grub_uint64_t) 0xFF00000000ULL) >> 8) \ ++ | ((_x & (grub_uint64_t) 0xFF0000000000ULL) >> 24) \ ++ | ((_x & (grub_uint64_t) 0xFF000000000000ULL) >> 40) \ ++ | (_x >> 56)); \ ++}) ++ ++#ifdef GRUB_CPU_WORDS_BIGENDIAN ++# define grub_cpu_to_le16(x) grub_swap_bytes16(x) ++# define grub_cpu_to_le32(x) grub_swap_bytes32(x) ++# define grub_cpu_to_le64(x) grub_swap_bytes64(x) ++# define grub_le_to_cpu16(x) grub_swap_bytes16(x) ++# define grub_le_to_cpu32(x) grub_swap_bytes32(x) ++# define grub_le_to_cpu64(x) grub_swap_bytes64(x) ++# define grub_cpu_to_be16(x) ((grub_uint16_t) (x)) ++# define grub_cpu_to_be32(x) ((grub_uint32_t) (x)) ++# define grub_cpu_to_be64(x) ((grub_uint64_t) (x)) ++# define grub_be_to_cpu16(x) ((grub_uint16_t) (x)) ++# define grub_be_to_cpu32(x) ((grub_uint32_t) (x)) ++# define grub_be_to_cpu64(x) ((grub_uint64_t) (x)) ++#else /* ! WORDS_BIGENDIAN */ ++# define grub_cpu_to_le16(x) ((grub_uint16_t) (x)) ++# define grub_cpu_to_le32(x) ((grub_uint32_t) (x)) ++# define grub_cpu_to_le64(x) ((grub_uint64_t) (x)) ++# define grub_le_to_cpu16(x) ((grub_uint16_t) (x)) ++# define grub_le_to_cpu32(x) ((grub_uint32_t) (x)) ++# define grub_le_to_cpu64(x) ((grub_uint64_t) (x)) ++# define grub_cpu_to_be16(x) grub_swap_bytes16(x) ++# define grub_cpu_to_be32(x) grub_swap_bytes32(x) ++# define grub_cpu_to_be64(x) grub_swap_bytes64(x) ++# define grub_be_to_cpu16(x) grub_swap_bytes16(x) ++# define grub_be_to_cpu32(x) grub_swap_bytes32(x) ++# define grub_be_to_cpu64(x) grub_swap_bytes64(x) ++#endif /* ! WORDS_BIGENDIAN */ ++ ++#endif /* ! GRUB_TYPES_HEADER */ +diff --git a/efi/grub/x86_64/linux.h b/efi/grub/x86_64/linux.h +new file mode 100644 +index 0000000..4e81ca6 +--- /dev/null ++++ b/efi/grub/x86_64/linux.h +@@ -0,0 +1,234 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_LINUX_MACHINE_HEADER ++#define GRUB_LINUX_MACHINE_HEADER 1 ++ ++#define GRUB_LINUX_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */ ++#define GRUB_LINUX_DEFAULT_SETUP_SECTS 4 ++#define GRUB_LINUX_FLAG_CAN_USE_HEAP 0x80 ++#define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF ++#define GRUB_LINUX_MAX_SETUP_SECTS 64 ++#define GRUB_LINUX_BOOT_LOADER_TYPE 0x72 ++#define GRUB_LINUX_HEAP_END_OFFSET (0x9000 - 0x200) ++ ++#define GRUB_LINUX_BZIMAGE_ADDR 0x100000 ++#define GRUB_LINUX_ZIMAGE_ADDR 0x10000 ++#define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000 ++#define GRUB_LINUX_SETUP_STACK 0x9000 ++ ++#define GRUB_LINUX_FLAG_BIG_KERNEL 0x1 ++ ++/* Linux's video mode selection support. Actually I hate it! */ ++#define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF ++#define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE ++#define GRUB_LINUX_VID_MODE_ASK 0xFFFD ++ ++#define GRUB_LINUX_CL_OFFSET 0x9000 ++#define GRUB_LINUX_CL_END_OFFSET 0x90FF ++#define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 ++#define GRUB_LINUX_CL_MAGIC 0xA33F ++ ++#if 0 ++#define GRUB_LINUX_EFI_SIGNATURE_X64 \ ++ ('4' << 24 | '6' << 16 | 'L' << 8 | 'E') ++#else ++#define GRUB_LINUX_EFI_SIGNATURE_X64 \ ++ ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E') ++#endif ++ ++#ifndef ASM_FILE ++ ++/* For the Linux/i386 boot protocol version 2.07. */ ++struct grub_linux_kernel_header ++{ ++ grub_uint8_t setup_sects; /* The size of the setup in sectors */ ++ grub_uint16_t root_flags; /* If the root is mounted readonly */ ++ grub_uint32_t syssize; /* obsolete */ ++ grub_uint16_t ram_size; /* obsolete */ ++ grub_uint16_t vid_mode; /* Video mode control */ ++ grub_uint16_t root_dev; /* Default root device number */ ++ grub_uint16_t boot_flag; /* 0xAA55 magic number */ ++ grub_uint8_t jump_ins; /* Jump instruction */ ++ grub_uint8_t jump_off; /* Jump offset */ ++ grub_uint32_t header; /* Magic signature "HdrS" */ ++ grub_uint16_t version; /* Boot protocol version supported */ ++ grub_uint32_t realmode_swtch; /* Boot loader hook */ ++ grub_uint16_t start_sys; /* The load-low segment (obsolete) */ ++ grub_uint16_t kernel_version; /* Points to kernel version string */ ++ grub_uint8_t type_of_loader; /* Boot loader identifier */ ++ grub_uint8_t loadflags; /* Boot protocol option flags */ ++ grub_uint16_t setup_move_size;/* Move to high memory size */ ++ grub_uint32_t code32_start; /* Boot loader hook */ ++ grub_uint32_t ramdisk_image; /* initrd load address */ ++ grub_uint32_t ramdisk_size; /* initrd size */ ++ grub_uint32_t bootsect_kludge;/* obsolete */ ++ grub_uint16_t heap_end_ptr; /* Free memory after setup end */ ++ grub_uint16_t pad1; /* Unused */ ++ grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ ++ grub_uint32_t initrd_addr_max;/* Highest address for initrd */ ++ grub_uint32_t kernel_alignment; ++ grub_uint8_t relocatable_kernel; ++ grub_uint8_t min_alignment; ++ grub_uint8_t pad2[2]; ++ grub_uint32_t cmdline_size; ++ grub_uint32_t hardware_subarch; ++ grub_uint64_t hardware_subarch_data; ++ grub_uint32_t payload_offset; ++ grub_uint32_t payload_length; ++ grub_uint64_t setup_data; ++ grub_uint64_t pref_address; ++ grub_uint32_t init_size; ++} __attribute__ ((packed)); ++ ++/* Boot parameters for Linux based on 2.6.12. This is used by the setup ++ sectors of Linux, and must be simulated by GRUB on EFI, because ++ the setup sectors depend on BIOS. */ ++struct linux_kernel_params ++{ ++ grub_uint8_t video_cursor_x; /* 0 */ ++ grub_uint8_t video_cursor_y; ++ ++ grub_uint16_t ext_mem; /* 2 */ ++ ++ grub_uint16_t video_page; /* 4 */ ++ grub_uint8_t video_mode; /* 6 */ ++ grub_uint8_t video_width; /* 7 */ ++ ++ grub_uint8_t padding1[0xa - 0x8]; ++ ++ grub_uint16_t video_ega_bx; /* a */ ++ ++ grub_uint8_t padding2[0xe - 0xc]; ++ ++ grub_uint8_t video_height; /* e */ ++ grub_uint8_t have_vga; /* f */ ++ grub_uint16_t font_size; /* 10 */ ++ ++ grub_uint16_t lfb_width; /* 12 */ ++ grub_uint16_t lfb_height; /* 14 */ ++ grub_uint16_t lfb_depth; /* 16 */ ++ grub_uint32_t lfb_base; /* 18 */ ++ grub_uint32_t lfb_size; /* 1c */ ++ ++ grub_uint16_t cl_magic; /* 20 */ ++ grub_uint16_t cl_offset; ++ ++ grub_uint16_t lfb_line_len; /* 24 */ ++ grub_uint8_t red_mask_size; /* 26 */ ++ grub_uint8_t red_field_pos; ++ grub_uint8_t green_mask_size; ++ grub_uint8_t green_field_pos; ++ grub_uint8_t blue_mask_size; ++ grub_uint8_t blue_field_pos; ++ grub_uint8_t reserved_mask_size; ++ grub_uint8_t reserved_field_pos; ++ grub_uint16_t vesapm_segment; /* 2e */ ++ grub_uint16_t vesapm_offset; /* 30 */ ++ grub_uint16_t lfb_pages; /* 32 */ ++ grub_uint16_t vesa_attrib; /* 34 */ ++ grub_uint32_t capabilities; /* 36 */ ++ ++ grub_uint8_t padding3[0x40 - 0x3a]; ++ ++ grub_uint16_t apm_version; /* 40 */ ++ grub_uint16_t apm_code_segment; /* 42 */ ++ grub_uint32_t apm_entry; /* 44 */ ++ grub_uint16_t apm_16bit_code_segment; /* 48 */ ++ grub_uint16_t apm_data_segment; /* 4a */ ++ grub_uint16_t apm_flags; /* 4c */ ++ grub_uint32_t apm_code_len; /* 4e */ ++ grub_uint16_t apm_data_len; /* 52 */ ++ ++ grub_uint8_t padding4[0x60 - 0x54]; ++ ++ grub_uint32_t ist_signature; /* 60 */ ++ grub_uint32_t ist_command; /* 64 */ ++ grub_uint32_t ist_event; /* 68 */ ++ grub_uint32_t ist_perf_level; /* 6c */ ++ ++ grub_uint8_t padding5[0x80 - 0x70]; ++ ++ grub_uint8_t hd0_drive_info[0x10]; /* 80 */ ++ grub_uint8_t hd1_drive_info[0x10]; /* 90 */ ++ grub_uint16_t rom_config_len; /* a0 */ ++ ++ grub_uint8_t padding6[0x1b8 - 0xa2]; ++ ++ union { ++ struct { ++ grub_uint32_t padding7_1; /* 0x1b8 */ ++ grub_uint32_t padding7_2; /* 0x1bc */ ++ ++ grub_uint32_t efi_signature; /* 1c0 */ ++ grub_uint32_t efi_system_table; /* 1c4 */ ++ grub_uint32_t efi_mem_desc_size; /* 1c8 */ ++ grub_uint32_t efi_mem_desc_version; /* 1cc */ ++ grub_uint32_t efi_mmap; /* 1d0 */ ++ grub_uint32_t efi_mmap_size; /* 1d4 */ ++ grub_uint32_t efi_system_table_hi; /* 1d8 */ ++ grub_uint32_t efi_mmap_hi; /* 1dc */ ++ } dunno; ++ struct { ++ grub_uint32_t efi_system_table; /* 1b8 */ ++ ++ grub_uint32_t padding7_1; /* 0x1bc */ ++ ++ grub_uint32_t efi_signature; /* 1c0 */ ++ grub_uint32_t efi_mem_desc_size; /* 1c4 */ ++ grub_uint32_t efi_mem_desc_version; /* 1c8 */ ++ grub_uint32_t efi_mmap_size; /* 1cc */ ++ grub_uint32_t efi_mmap; /* 1d0 */ ++ ++ grub_uint8_t padding7_2[0x1e0 - 0x1d4]; /* 1d4 */ ++ } version_0204; ++ struct { ++ grub_uint32_t padding7_1; /* 0x1b8 */ ++ grub_uint32_t padding7_2; /* 0x1bc */ ++ grub_uint32_t padding7_3; /* 0x1c0 */ ++ grub_uint32_t efi_system_table; /* 0x1c4 */ ++ grub_uint32_t efi_mem_desc_size; /* 0x1c8 */ ++ grub_uint32_t efi_mem_desc_version; /* 0x1cc */ ++ grub_uint32_t efi_mmap; /* 0x1d0 */ ++ grub_uint32_t efi_mmap_size; /* 0x1d4 */ ++ grub_uint8_t padding7_4[0x1e0 - 0x1d8]; /* 0x1d8 */ ++ } version_0206; ++ }; ++ ++ grub_uint32_t alt_mem; /* 1e0 */ ++ ++ grub_uint8_t padding8[0x1e8 - 0x1e4]; /* 1e4 */ ++ ++ grub_uint8_t e820_nr_map; /* 1e8 */ ++ grub_uint8_t eddbuf_entries; /* 1e9 */ ++ grub_uint8_t edd_mbr_sig_buf_entries; /* 1ea */ ++ ++ grub_uint8_t padding9[0x1f1 - 0x1eb]; ++ ++ struct grub_linux_kernel_header hdr; /* 0x1f1 */ ++ ++ grub_uint8_t padding10[0x2d0-0x1f1-sizeof(struct grub_linux_kernel_header)]; ++ ++ grub_uint8_t e820_map[2560]; /* 0x2d0 */ ++ ++ grub_uint8_t padding11[0x1000 - 0xcd0]; ++} __attribute__ ((packed)); ++#endif /* ! ASM_FILE */ ++ ++#endif /* ! GRUB_LINUX_MACHINE_HEADER */ +diff --git a/efi/grub/x86_64/types.h b/efi/grub/x86_64/types.h +new file mode 100644 +index 0000000..0c077f6 +--- /dev/null ++++ b/efi/grub/x86_64/types.h +@@ -0,0 +1,32 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2006 Free Software Foundation, Inc. ++ * ++ * GRUB is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRUB_TYPES_CPU_HEADER ++#define GRUB_TYPES_CPU_HEADER 1 ++ ++/* The size of void *. */ ++#define GRUB_TARGET_SIZEOF_VOID_P 8 ++ ++/* The size of long. */ ++#define GRUB_TARGET_SIZEOF_LONG 8 ++ ++/* x64_64 is little-endian. */ ++#undef GRUB_TARGET_WORDS_BIGENDIAN ++ ++#endif /* ! GRUB_TYPES_CPU_HEADER */ +diff --git a/efi/ia32/callwrap.S b/efi/ia32/callwrap.S +new file mode 100644 +index 0000000..50d737f +--- /dev/null ++++ b/efi/ia32/callwrap.S +@@ -0,0 +1 @@ ++/* This file is a stub for ia32 building */ +diff --git a/efi/ia32/callwrap.c b/efi/ia32/callwrap.c +new file mode 100644 +index 0000000..56df899 +--- /dev/null ++++ b/efi/ia32/callwrap.c +@@ -0,0 +1,131 @@ ++ ++#define ENTRY(name) \ ++ ".globl " #name ";" \ ++ ".align 16;" \ ++ #name ":" ++ ++asm( ++ENTRY(i386_call0) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $8, %esp \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_call1) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $20, %esp \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_call2) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $16, %esp \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_call3) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $12, %esp \n" ++ "pushl 20(%ebp) \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_call4) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $8, %esp \n" ++ "pushl 24(%ebp) \n" ++ "pushl 20(%ebp) \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_call5) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $20, %esp \n" ++ "pushl 28(%ebp) \n" ++ "pushl 24(%ebp) \n" ++ "pushl 20(%ebp) \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_64_call5) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $12, %esp \n" ++ "pushl 36(%ebp) \n" ++ "pushl 32(%ebp) \n" ++ "pushl 28(%ebp) \n" ++ "pushl 24(%ebp) \n" ++ "pushl 20(%ebp) \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++ ++asm( ++ENTRY(i386_call6) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $16, %esp \n" ++ "pushl 32(%ebp) \n" ++ "pushl 28(%ebp) \n" ++ "pushl 24(%ebp) \n" ++ "pushl 20(%ebp) \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); ++ ++asm( ++ENTRY(i386_call7) ++ "pushl %ebp \n" ++ "movl %esp,%ebp \n" ++ "subl $12, %esp \n" ++ "pushl 36(%ebp) \n" ++ "pushl 32(%ebp) \n" ++ "pushl 28(%ebp) \n" ++ "pushl 24(%ebp) \n" ++ "pushl 20(%ebp) \n" ++ "pushl 16(%ebp) \n" ++ "pushl 12(%ebp) \n" ++ "call *8(%ebp) \n" ++ "leave \n" ++ "ret \n" ++ ); +diff --git a/efi/ia32/loader/bin_to_h.c b/efi/ia32/loader/bin_to_h.c +new file mode 100644 +index 0000000..4cff104 +--- /dev/null ++++ b/efi/ia32/loader/bin_to_h.c +@@ -0,0 +1,29 @@ ++#include ++#include ++ ++int ++main (void) ++{ ++ unsigned n = 0; ++ int c; ++ ++ printf ("unsigned char switch_image[] = {\n"); ++ ++ while ((c = getchar ()) != EOF) ++ { ++ printf("0x%02x,%s", ++ c & 0xFF, ++ (++n & 0x07) ? " " : "\n"); ++ } ++ ++ if (n & 0x07) ++ { ++ printf("\n"); ++ } ++ ++ printf("};\n" ++ "int switch_size = sizeof switch_image;\n"); ++ ++ return 0; ++} ++ +diff --git a/efi/ia32/loader/linux.c b/efi/ia32/loader/linux.c +new file mode 100644 +index 0000000..d795d28 +--- /dev/null ++++ b/efi/ia32/loader/linux.c +@@ -0,0 +1,648 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "switch.h" ++ ++#include ++ ++#include "graphics.h" ++ ++#define grub_file_size() filemax ++ ++#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ ++ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) ++ ++#define PTR_HI(x) ((grub_uint32_t) ((unsigned long long)((unsigned long)(x)) >> 32)) ++ ++#ifndef SECTOR_SIZE ++#define SECTOR_SIZE 0x200 ++#endif /* defined(SECTOR_SIZE) */ ++#ifndef SECTOR_BITS ++#define SECTOR_BITS 9 ++#endif /* defined(SECTOR_BITS) */ ++ ++static unsigned long linux_mem_size; ++static int loaded; ++static void *real_mode_mem; ++static void *prot_mode_mem; ++static void *initrd_mem; ++static grub_efi_uintn_t real_mode_pages; ++static grub_efi_uintn_t prot_mode_pages; ++static grub_efi_uintn_t initrd_pages; ++static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID; ++ ++static inline grub_size_t ++page_align (grub_size_t size) ++{ ++ return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); ++} ++ ++static void ++free_pages (void) ++{ ++ if (real_mode_mem) ++ { ++ grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages); ++ real_mode_mem = 0; ++ } ++ ++ if (prot_mode_mem) ++ { ++ grub_efi_free_pages ((grub_addr_t) prot_mode_mem, prot_mode_pages); ++ prot_mode_mem = 0; ++ } ++ ++ if (initrd_mem) ++ { ++ grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages); ++ initrd_mem = 0; ++ } ++ ++ if (mmap_buf) ++ { ++ grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages); ++ mmap_buf = 0; ++ } ++} ++ ++/* Allocate pages for the real mode code and the protected mode code ++ for linux as well as a memory map buffer. */ ++static int ++allocate_pages (grub_size_t real_size, grub_size_t prot_size) ++{ ++ grub_efi_uintn_t desc_size; ++ grub_efi_memory_descriptor_t *mmap_end; ++ grub_efi_memory_descriptor_t *desc; ++ grub_efi_physical_address_t addr; ++ ++ /* Make sure that each size is aligned to a page boundary. */ ++ real_size = page_align (real_size + SECTOR_SIZE); ++ prot_size = page_align (prot_size); ++ ++ grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", ++ (unsigned int) real_size, (unsigned int) prot_size, ++ (unsigned int) mmap_size); ++ ++ /* Calculate the number of pages; Combine the real mode code with ++ the memory map buffer for simplicity. */ ++ real_mode_pages = (real_size >> 12); ++ prot_mode_pages = (prot_size >> 12); ++ ++ /* Initialize the memory pointers with NULL for convenience. */ ++ real_mode_mem = 0; ++ prot_mode_mem = 0; ++ ++ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ addr = 0; ++ mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); ++ /* First, find free pages for the real mode code ++ and the memory map buffer. */ ++ for (desc = mmap_buf; ++ desc < mmap_end; ++ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) ++ { ++ if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY ++ && desc->num_pages >= real_mode_pages) ++ { ++ grub_efi_physical_address_t physical_end; ++ ++ physical_end = desc->physical_start + (desc->num_pages << 12); ++ ++ grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n", ++ (unsigned) desc->physical_start, ++ (unsigned) physical_end); ++ addr = physical_end - real_size; ++ if (addr < 0x10000) ++ continue; ++ ++ grub_dprintf ("linux", "trying to allocate %u pages at %x\n", ++ (unsigned) real_mode_pages, (unsigned) addr); ++ real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages); ++ if (! real_mode_mem) ++ grub_fatal ("cannot allocate pages"); ++ ++ desc->num_pages -= real_mode_pages; ++ break; ++ } ++ } ++ ++ if (! real_mode_mem) ++ { ++ grub_printf ("cannot allocate real mode pages"); ++ errnum = ERR_WONT_FIT; ++ goto fail; ++ } ++ ++ /* Next, find free pages for the protected mode code. */ ++ /* XXX what happens if anything is using this address? */ ++ prot_mode_mem = grub_efi_allocate_pages (0x100000, prot_mode_pages); ++ if (! prot_mode_mem) ++ grub_fatal("Cannot allocate pages for VMLINUZ"); ++ ++ return 1; ++ ++ fail: ++ free_pages (); ++ return 0; ++} ++ ++/* do some funky stuff, then boot linux */ ++void ++linux_boot (void) ++{ ++ grub_printf ("zImage is not supported under EFI.\n"); ++ for (;;); ++} ++ ++#ifndef __x86_64__ ++struct { ++ unsigned short limit; ++ unsigned int base; ++} __attribute__ ((packed)) ++ gdt_addr = { 0x800, 0x94000 }, ++ idt_addr = { 0, 0 }; ++ ++unsigned short init_gdt[] = { ++ /* gdt[0]: dummy */ ++ 0, 0, 0, 0, ++ ++ /* gdt[1]: unused */ ++ 0, 0, 0, 0, ++ ++ /* gdt[2]: code */ ++ 0xFFFF, /* 4Gb - (0x100000*0x1000 = 4Gb) */ ++ 0x0000, /* base address=0 */ ++ 0x9A00, /* code read/exec */ ++ 0x00CF, /* granularity=4096, 386 (+5th nibble of limit) */ ++ ++ /* gdt[3]: data */ ++ 0xFFFF, /* 4Gb - (0x100000*0x1000 = 4Gb) */ ++ 0x0000, /* base address=0 */ ++ 0x9200, /* data read/write */ ++ 0x00CF, /* granularity=4096, 386 (+5th nibble of limit) */ ++}; ++#endif ++ ++void ++big_linux_boot (void) ++{ ++ struct linux_kernel_params *params; ++ struct grub_linux_kernel_header *lh; ++ grub_efi_uintn_t map_key; ++ grub_efi_uintn_t desc_size; ++ grub_efi_uint32_t desc_version; ++ int e820_nr_map; ++ int i; ++ ++ params = real_mode_mem; ++ ++ graphics_set_kernel_params (params); ++ ++ if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ /* Pass e820 memmap. */ ++ e820_map_from_efi_map ((struct e820_entry *) params->e820_map, &e820_nr_map, ++ mmap_buf, desc_size, mmap_size); ++ params->e820_nr_map = e820_nr_map; ++ ++ grub_dprintf(__func__,"got to ExitBootServices...\n"); ++ if (! grub_efi_exit_boot_services (map_key)) ++ grub_fatal ("cannot exit boot services"); ++ /* Note that no boot services are available from here. */ ++ ++ lh = ¶ms->hdr; ++ /* Pass EFI parameters. */ ++ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { ++ params->version_0206.efi_mem_desc_size = desc_size; ++ params->version_0206.efi_mem_desc_version = desc_version; ++ params->version_0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; ++ params->version_0206.efi_mmap_size = mmap_size; ++ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { ++ params->version_0204.efi_mem_desc_size = desc_size; ++ params->version_0204.efi_mem_desc_version = desc_version; ++ params->version_0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; ++ params->version_0204.efi_mmap_size = mmap_size; ++ } else /* dunno */ { ++ params->dunno.efi_mem_desc_size = desc_size; ++ params->dunno.efi_mem_desc_version = desc_version; ++ params->dunno.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; ++ params->dunno.efi_mmap_size = mmap_size; ++ params->dunno.efi_mmap_hi = PTR_HI(mmap_buf); ++ } ++ ++#ifdef __x86_64__ ++ /* copy our real mode transition code to 0x700 */ ++ memcpy ((void *) 0x700, switch_image, switch_size); ++ asm volatile ( "mov $0x700, %%rdi" : :); ++ ++ /* Pass parameters. */ ++ asm volatile ("mov %0, %%rsi" : : "m" (real_mode_mem)); ++ asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start)); ++ ++ /* Enter Linux, switch from 64-bit long mode ++ * to 32-bit protect mode, this code end address ++ * must not exceed 0x1000, because linux kernel bootstrap ++ * code will flush this area ++ */ ++ asm volatile ( "jmp *%%rdi" : :); ++#else ++ ++ asm volatile ( "cli" : : ); ++ ++ grub_memset((void *)gdt_addr.base, gdt_addr.limit, 0); ++ grub_memcpy((void *)gdt_addr.base, init_gdt, sizeof (init_gdt)); ++ ++ if (0) { ++ /* copy our real mode transition code to 0x7C00 */ ++ memcpy ((void *) 0x7C00, switch_image, switch_size); ++ asm volatile ( "mov $0x7C00, %%ebx" : : ); ++ asm volatile ( "jmp *%%ebx" : : ); ++ } else { ++ ++ /* load descriptor table pointers */ ++ // asm volatile ( "lidt %0" : : "m" (idt_addr) ); ++ asm volatile ( "lgdt %0" : : "m" (gdt_addr) ); ++ ++ /* ++ * ebx := 0 (%%TBD - do not know why, yet) ++ * ecx := kernel entry point ++ * esi := address of boot sector and setup data ++ */ ++ ++ asm volatile ( "movl %0, %%esi" : : "m" (real_mode_mem) ); ++ asm volatile ( "movl %0, %%ecx" : : "m" (params->hdr.code32_start) ); ++ asm volatile ( "xorl %%ebx, %%ebx" : : ); ++ ++ /* ++ * Jump to kernel entry point. ++ */ ++ ++ asm volatile ( "jmp *%%ecx" : : ); ++ } ++#endif ++ ++ /* Never reach here. */ ++ for (;;); ++} ++ ++int ++grub_load_linux (char *kernel, char *arg) ++{ ++ struct grub_linux_kernel_header *lh; ++ struct linux_kernel_params *params; ++ static struct linux_kernel_params params_buf; ++ grub_uint8_t setup_sects; ++ grub_size_t real_size, prot_size; ++ grub_ssize_t len; ++ char *dest; ++ ++ if (kernel == NULL) ++ { ++ errnum = ERR_BAD_FILENAME; ++ grub_printf ("no kernel specified"); ++ goto fail1; ++ } ++ ++ if (! grub_open (kernel)) ++ goto fail1; ++ ++ if (grub_read ((char *) ¶ms_buf, sizeof (params_buf)) ++ != sizeof (params_buf)) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_close(); ++ grub_printf ("cannot read the linux header"); ++ goto fail; ++ } ++ ++ lh = ¶ms_buf.hdr; ++ ++ if (lh->boot_flag != grub_cpu_to_le16 (0xaa55)) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_close(); ++ grub_printf ("invalid magic number: %x", lh->boot_flag); ++ goto fail; ++ } ++ ++ /* EFI support is quite new, so reject old versions. */ ++ if (lh->header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) ++ || grub_le_to_cpu16 (lh->version) < 0x0203) ++ { ++ grub_close(); ++ errnum = ERR_EXEC_FORMAT; ++ grub_printf ("too old version"); ++ goto fail; ++ } ++ ++ /* I'm not sure how to support zImage on EFI. */ ++ if (! (lh->loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_printf ("zImage is not supported"); ++ goto fail; ++ } ++ ++ setup_sects = lh->setup_sects; ++ ++ real_size = 0x1000 + grub_strlen(arg); ++ prot_size = grub_file_size () - (setup_sects << SECTOR_BITS) - SECTOR_SIZE; ++ ++ if (! allocate_pages (real_size, prot_size)) ++ goto fail; ++ ++ /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ ++ lh->type_of_loader = 0x50; ++ ++ lh->cmd_line_ptr = (grub_uint32_t) (unsigned long) real_mode_mem + 0x1000; ++ ++ lh->heap_end_ptr = LINUX_HEAP_END_OFFSET; ++ lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP; ++ ++ lh->ramdisk_image = 0; ++ lh->ramdisk_size = 0; ++ ++ grub_memset(real_mode_mem, 0, real_size); ++ ++ params = (struct linux_kernel_params *) real_mode_mem; ++ ++ grub_memmove(¶ms->hdr, lh, 0x202 + lh->jump_off - 0x1f1); ++ ++ params->cl_magic = GRUB_LINUX_CL_MAGIC; ++ params->cl_offset = 0x1000; ++ ++ /* These are not needed to be precise, because Linux uses these values ++ only to raise an error when the decompression code cannot find good ++ space. */ ++ params->ext_mem = ((32 * 0x100000) >> 10); ++ params->alt_mem = ((32 * 0x100000) >> 10); ++ ++ /* No APM on EFI. */ ++ params->apm_version = 0; ++ params->apm_code_segment = 0; ++ params->apm_entry = 0; ++ params->apm_16bit_code_segment = 0; ++ params->apm_data_segment = 0; ++ params->apm_flags = 0; ++ params->apm_code_len = 0; ++ params->apm_data_len = 0; ++ ++ /* XXX is there any way to use SpeedStep on EFI? */ ++ params->ist_signature = 0; ++ params->ist_command = 0; ++ params->ist_event = 0; ++ params->ist_perf_level = 0; ++ ++ /* Let the kernel probe the information. */ ++ grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info)); ++ grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info)); ++ ++ /* No MCA on EFI. */ ++ params->rom_config_len = 0; ++ ++ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { ++ grub_memcpy(¶ms->version_0204.efi_signature, "EL32", 4); ++ params->version_0206.efi_system_table = \ ++ (grub_uint32_t) (unsigned long) grub_efi_system_table; ++ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { ++ grub_memcpy(¶ms->version_0204.efi_signature, "EFIL", 4); ++ params->version_0204.efi_system_table = \ ++ (grub_uint32_t) (unsigned long) grub_efi_system_table; ++ } else /* dunno */ { ++ params->dunno.efi_signature = GRUB_LINUX_EFI_SIGNATURE_X64; ++ params->dunno.efi_system_table = \ ++ (grub_uint32_t) (unsigned long) grub_efi_system_table; ++ params->dunno.efi_system_table_hi = PTR_HI(grub_efi_system_table); ++ } ++ /* The other EFI parameters are filled when booting. */ ++ ++ /* No EDD */ ++ params->eddbuf_entries = 0; ++ params->edd_mbr_sig_buf_entries = 0; ++ ++ /* XXX there is no way to know if the kernel really supports EFI. */ ++ grub_printf ("[Linux-EFI, setup=0x%x, size=0x%x]\n", (unsigned int)real_size, ++ (unsigned int)prot_size); ++ ++ /* Check the mem= option to limit memory used for initrd. */ ++ { ++ char *mem; ++ ++ mem = grub_strstr (arg, "mem="); ++ if (mem) ++ { ++ char *value = mem + 4; ++ ++ safe_parse_maxulong (&value, &linux_mem_size); ++ switch (errnum) ++ { ++ case ERR_NUMBER_OVERFLOW: ++ /* If an overflow occurs, use the maximum address for ++ initrd instead. This is good, because MAXINT is ++ greater than LINUX_INITRD_MAX_ADDRESS. */ ++ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; ++ errnum = ERR_NONE; ++ break; ++ ++ case ERR_NONE: ++ { ++ int shift = 0; ++ ++ switch (grub_tolower (*value)) ++ { ++ case 'g': ++ shift += 10; ++ case 'm': ++ shift += 10; ++ case 'k': ++ shift += 10; ++ default: ++ break; ++ } ++ ++ /* Check an overflow. */ ++ if (linux_mem_size > (~0UL >> shift)) ++ linux_mem_size = 0; ++ else ++ linux_mem_size <<= shift; ++ } ++ break; ++ ++ default: ++ linux_mem_size = 0; ++ errnum = ERR_NONE; ++ break; ++ } ++ } ++ else ++ linux_mem_size = 0; ++ } ++ ++ dest = grub_stpcpy ((char *) real_mode_mem + 0x1000, skip_to(0, arg)); ++ ++ grub_seek ((setup_sects << SECTOR_BITS) + SECTOR_SIZE); ++ len = prot_size; ++ if (grub_read ((char *) GRUB_LINUX_BZIMAGE_ADDR, len) != len) ++ grub_printf ("Couldn't read file"); ++ ++ if (errnum == ERR_NONE) ++ { ++ loaded = 1; ++ } ++ ++ fail: ++ ++ grub_close (); ++ ++ fail1: ++ ++ if (errnum != ERR_NONE) ++ { ++ loaded = 0; ++ } ++ return errnum ? KERNEL_TYPE_NONE : KERNEL_TYPE_BIG_LINUX; ++} ++ ++int ++grub_load_initrd (char *initrd) ++{ ++ grub_ssize_t size; ++ grub_addr_t addr_min, addr_max; ++ grub_addr_t addr; ++ grub_efi_uintn_t map_key; ++ grub_efi_memory_descriptor_t *mmap_end; ++ grub_efi_memory_descriptor_t *desc; ++ grub_efi_memory_descriptor_t tdesc; ++ grub_efi_uintn_t desc_size; ++ grub_efi_uint32_t desc_version; ++ struct linux_kernel_params *params; ++ ++ if (initrd == NULL) ++ { ++ errnum = ERR_BAD_FILENAME; ++ grub_printf ("No module specified"); ++ goto fail1; ++ } ++ ++ if (! loaded) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("You need to load the kernel first."); ++ goto fail1; ++ } ++ ++ if (! grub_open (initrd)) ++ goto fail1; ++ ++ size = grub_file_size (); ++ initrd_pages = (page_align (size) >> 12); ++ ++ params = (struct linux_kernel_params *) real_mode_mem; ++ grub_dprintf(__func__, "initrd_pages: %lu\n", initrd_pages); ++ ++ addr_max = grub_cpu_to_le32 (params->hdr.initrd_addr_max); ++ if (linux_mem_size != 0 && linux_mem_size < addr_max) ++ addr_max = linux_mem_size; ++ addr_max &= ~((1 << 12)-1); ++ ++ /* Linux 2.3.xx has a bug in the memory range check, so avoid ++ the last page. ++ Linux 2.2.xx has a bug in the memory range check, which is ++ worse than that of Linux 2.3.xx, so avoid the last 64kb. */ ++ //addr_max -= 0x10000; ++ ++ /* Usually, the compression ratio is about 50%. */ ++ addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12); ++ grub_dprintf(__func__, "prot_mode_mem=%p prot_mode_pages=%lu\n", prot_mode_mem, prot_mode_pages); ++ ++ /* Find the highest address to put the initrd. */ ++ if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); ++ addr = 0; ++ for (desc = mmap_buf; ++ desc < mmap_end; ++ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) ++ { ++ if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) ++ continue; ++ memcpy(&tdesc, desc, sizeof (tdesc)); ++ if (tdesc.physical_start < addr_min ++ && tdesc.num_pages > ((addr_min - tdesc.physical_start) >> 12)) ++ { ++ tdesc.num_pages -= ((addr_min - tdesc.physical_start) >> 12); ++ tdesc.physical_start = addr_min; ++ } ++ ++ grub_dprintf(__func__, "desc = {type=%d,ps=0x%llx,vs=0x%llx,sz=%llu,attr=%llu}\n", desc->type, (unsigned long long)desc->physical_start, (unsigned long long)desc->virtual_start, (unsigned long long)desc->num_pages, (unsigned long long)desc->attribute); ++ if (tdesc.physical_start >= addr_min ++ && tdesc.physical_start + page_align (size) <= addr_max ++ && tdesc.num_pages >= initrd_pages) ++ { ++ grub_efi_physical_address_t physical_end; ++ ++ physical_end = tdesc.physical_start + (tdesc.num_pages << 12); ++ if (physical_end > addr_max) ++ physical_end = addr_max; ++ ++ if (physical_end <= 0x7fffffffUL && physical_end > addr) ++ addr = physical_end - page_align (size); ++ } ++ } ++ ++ if (addr == 0) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("no free pages available"); ++ goto fail; ++ } ++ ++ initrd_mem = grub_efi_allocate_pages (addr, initrd_pages); ++ if (! initrd_mem) ++ grub_fatal ("cannot allocate pages: %x@%x", (unsigned)initrd_pages, ++ (unsigned)addr); ++ ++ if (grub_read (initrd_mem, size) != size) ++ { ++ grub_printf ("Couldn't read file"); ++ goto fail; ++ } ++ ++ grub_printf (" [Initrd, addr=0x%x, size=0x%x]\n", (unsigned int) addr, ++ (unsigned int) size); ++ ++ params->hdr.ramdisk_image = addr; ++ params->hdr.ramdisk_size = size; ++ ++ fail: ++ grub_close (); ++ fail1: ++ return !errnum; ++} +diff --git a/efi/ia32/loader/switch.S b/efi/ia32/loader/switch.S +new file mode 100644 +index 0000000..14142e9 +--- /dev/null ++++ b/efi/ia32/loader/switch.S +@@ -0,0 +1,118 @@ ++# ++# Switch from protected mode to real mode and jump to setup.S ++# image located at %cx:0. ++# ++# This module must be placed into physical memory at 0:7C00h. ++# EFI has some real mode thunking code at 2000:0h. ++# ++# Processor and non-maskable interrupts should be disabled ++# before control is passed to this module. ++# ++ ++.global _start ++ ++.code32 ++.text ++_start: ++ # ++ # Load identity mapped GDT & real mode IDT. ++ # Add 7C00h to the addresses since this is linked to start ++ # at 0h and it is being placed at 7C00h. ++ # ++ ++ lgdt %cs:gdt_48 + 0x7C00 ++ lidt %cs:idt_48 + 0x7C00 ++ ++ # ++ # Turn off PG bit in CR0 and set CR3 to zero. ++ # ++ ++ movl %cr0, %eax ++ andl $0x7FFFFFFF, %eax ++ movl %eax, %cr0 ++ ++ xorl %eax, %eax ++ movl %eax, %cr3 ++ ++ # ++ # Reload CS. ++ # Now we add 7B00h because we need to force the segment ++ # address and selector to be the same. ++ # ++ ++ .byte 0xEA ++ .long pm_reload + 0x7B00 ++ .word 0x10 ++ ++pm_reload: ++ ++.code16 ++ ++ # ++ # Reload DS, ES, FS, GS & SS. ++ # ++ ++ movw $0x18, %ax ++ movw %ax, %ds ++ movw %ax, %es ++ movw %ax, %fs ++ movw %ax, %gs ++ movw %ax, %ss ++ ++ # ++ # Switch to real mode. Clear PE bit in CR0. ++ # ++ ++ movl %cr0, %eax ++ andl $0xFFFFFFFE, %eax ++ movl %eax, %cr0 ++ ++ # ++ # Reload CS. ++ # ++ ++ .byte 0xEA ++ .word rm_reload + 0x7C00 ++ .word 0 ++ ++rm_reload: ++ ++ # ++ # Reload SS & SP. ++ # ++ ++ xorw %ax, %ax ++ movw %ax, %ss ++ movw $0x7BFE, %sp ++ ++ # ++ # Start running setup.S ++ # ++ ++ .byte 0xEA ++ .word 0 ++ .word 0x9020 ++ ++ # ++ # GDT & IDT stuff for switching into real mode. ++ # ++ ++gdt: .word 0, 0, 0, 0 # unused (00h) ++ .word 0, 0, 0, 0 # dummy (08h) ++ .word 0xFFFF, 0x100 # code (10h) ++ .word 0x9A00, 0 ++ .word 0xFFFF, 0x180 # data (18h) ++ .word 0x9200, 0 ++ ++gdt_48: .word 0x08 * 0x400 ++ .long gdt + 0x7C00 ++ ++idt_48: .word 0x400 ++ .long 0 ++ ++ # ++ # Be careful not to exceed 1F0h or the the bootsect.S ++ # parameters will be lost! ++ # ++ ++.end +diff --git a/efi/ia32/loader/switch.h b/efi/ia32/loader/switch.h +new file mode 100644 +index 0000000..4e18dde +--- /dev/null ++++ b/efi/ia32/loader/switch.h +@@ -0,0 +1,19 @@ ++unsigned char switch_image[] = { ++0x2e, 0x0f, 0x01, 0x15, 0x6f, 0x7c, 0x00, 0x00, ++0x2e, 0x0f, 0x01, 0x1d, 0x75, 0x7c, 0x00, 0x00, ++0x0f, 0x20, 0xc0, 0x25, 0xff, 0xff, 0xff, 0x7f, ++0x0f, 0x22, 0xc0, 0x31, 0xc0, 0x0f, 0x22, 0xd8, ++0xea, 0x27, 0x7b, 0x00, 0x00, 0x10, 0x00, 0xb8, ++0x18, 0x00, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e, 0xe0, ++0x8e, 0xe8, 0x8e, 0xd0, 0x0f, 0x20, 0xc0, 0x66, ++0x83, 0xe0, 0xfe, 0x0f, 0x22, 0xc0, 0xea, 0x43, ++0x7c, 0x00, 0x00, 0x31, 0xc0, 0x8e, 0xd0, 0xbc, ++0xfe, 0x7b, 0xea, 0x00, 0x00, 0x20, 0x90, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, ++0xff, 0x00, 0x01, 0x00, 0x9a, 0x00, 0x00, 0xff, ++0xff, 0x80, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, ++0x20, 0x4f, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, ++0x00, 0x00, 0x00, ++}; ++int switch_size = sizeof switch_image; +diff --git a/efi/ia32/reloc.c b/efi/ia32/reloc.c +new file mode 100644 +index 0000000..72db0f6 +--- /dev/null ++++ b/efi/ia32/reloc.c +@@ -0,0 +1,79 @@ ++/* reloc_x86_64.c - position independent x86_64 ELF shared object relocator ++ Copyright (C) 1999 Hewlett-Packard Co. ++ Contributed by David Mosberger . ++ Copyright (C) 2005 Intel Co. ++ Contributed by Fenghua Yu . ++ ++ This file is part of GNU-EFI, the GNU EFI development environment. ++ ++ GNU EFI is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GNU EFI is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GNU EFI; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include ++#include ++#include ++ ++grub_efi_status_t _relocate (long ldbase, ElfW(Dyn) *dyn, ++ grub_efi_handle_t image_handle, ++ grub_efi_system_table_t *sys_tab) ++{ ++ //extern EFI_STATUS efi_main (EFI_HANDLE, EFI_SYSTEM_TABLE *); ++ long relsz = 0, relent = 0; ++ ElfW(Rel) *rel = 0; ++ unsigned long *addr; ++ int i; ++ ++ for (i = 0; dyn[i].d_tag != DT_NULL; ++i) { ++ switch (dyn[i].d_tag) { ++ case DT_REL: ++ rel = (ElfW(Rel)*) ((long) dyn[i].d_un.d_ptr + ldbase); ++ break; ++ ++ case DT_RELSZ: ++ relsz = dyn[i].d_un.d_val; ++ break; ++ ++ case DT_RELENT: ++ relent = dyn[i].d_un.d_val; ++ break; ++ ++ default: ++ continue; ++ } ++ } ++ ++ if (!rel || relent == 0){ ++ return GRUB_EFI_LOAD_ERROR; ++ } ++ while (relsz > 0) { ++ /* apply the relocs */ ++ switch (ELF64_R_TYPE (rel->r_info)) { ++ case R_386_NONE: ++ break; ++ ++ case R_386_RELATIVE: ++ addr = (unsigned long *) (ldbase + rel->r_offset); ++ *addr += ldbase; ++ break; ++ ++ default: ++ break; ++ } ++ rel = (ElfW(Rel)*) ((char *) rel + relent); ++ relsz -= relent; ++ } ++ return GRUB_EFI_SUCCESS; ++} ++ +diff --git a/efi/ia32/setjmp.S b/efi/ia32/setjmp.S +new file mode 100644 +index 0000000..38c33af +--- /dev/null ++++ b/efi/ia32/setjmp.S +@@ -0,0 +1,86 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2000 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++/* This is stolen from libc/x86/setjmp.S in the OSKit */ ++/* ++ * Mach Operating System ++ * Copyright (c) 1991,1990,1989 Carnegie Mellon University ++ * All Rights Reserved. ++ * ++ * Permission to use, copy, modify and distribute this software and its ++ * documentation is hereby granted, provided that both the copyright ++ * notice and this permission notice appear in all copies of the ++ * software, derivative works or modified versions, and any portions ++ * thereof, and that both notices appear in supporting documentation. ++ * ++ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ++ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ++ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ++ * ++ * Carnegie Mellon requests users of this software to return to ++ * ++ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU ++ * School of Computer Science ++ * Carnegie Mellon University ++ * Pittsburgh PA 15213-3890 ++ * ++ * any improvements or extensions that they make and grant Carnegie Mellon ++ * the rights to redistribute these changes. ++ */ ++/* ++ * C library -- _setjmp, _longjmp ++ * ++ * _longjmp(a,v) ++ * will generate a "return(v)" from ++ * the last call to ++ * _setjmp(a) ++ * by restoring registers from the stack, ++ * The previous signal state is NOT restored. ++ * ++ */ ++#include ++ ++ .file "setjmp.S" ++ ++ .text ++ ++FUNCTION(grub_setjmp) ++ movl 4(%esp), %ecx /* fetch buffer */ ++ movl %ebx, 0(%ecx) ++ movl %esi, 4(%ecx) ++ movl %edi, 8(%ecx) ++ movl %ebp, 12(%ecx) /* save frame pointer of caller */ ++ popl %edx ++ movl %esp, 16(%ecx) /* save stack pointer of caller */ ++ movl %edx, 20(%ecx) /* save pc of caller */ ++ xorl %eax, %eax ++ jmp *%edx ++ ++FUNCTION(grub_longjmp) ++ movl 8(%esp), %eax /* return(v) */ ++ movl 4(%esp), %ecx /* fetch buffer */ ++ movl 0(%ecx), %ebx ++ movl 4(%ecx), %esi ++ movl 8(%ecx), %edi ++ movl 12(%ecx), %ebp ++ movl 16(%ecx), %esp ++ orl %eax, %eax ++ jnz 0f ++ incl %eax ++0: jmp *20(%ecx) /* done, return.... */ +diff --git a/efi/pxe.c b/efi/pxe.c +new file mode 100644 +index 0000000..59f0d0d +--- /dev/null ++++ b/efi/pxe.c +@@ -0,0 +1,460 @@ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "pxe.h" ++#include "dhcp.h" ++ ++/* Search path is: ++ * ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/1902dcf5-7190-d811-bbd6-6ef21c690030 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/01-00-30-6e-f2-1c-69 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A103437 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A10343 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A1034 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A103 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A10 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A1 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/0 ++ * X86PC/UNDI/pxelinux/pxelinux.cfg/default ++ * ++ * The paths we get from uefi are like: ++ * .BootBootFile: X86PC/UNDI/pxelinux/bootx64.efi ++ * .BootCiAddr: 0.0.0.0 ++ * .BootYiAddr: 10.16.52.158 ++ * .BootSiAddr: 10.16.52.16 ++ */ ++ ++typedef struct { ++ char *options; ++ EFI_DHCP4_PACKET_OPTION *current_option; ++} dhcp_option_parser; ++ ++static void dhcp_option_parser_reset(dhcp_option_parser *parser, ++ EFI_PXE_BASE_CODE_PACKET *packet) ++{ ++ char *addr; ++ ++ addr = (char *)packet; ++ addr += offsetof(EFI_PXE_BASE_CODE_DHCPV4_PACKET, DhcpOptions); ++ parser->current_option = (void *)addr; ++ parser->options = (void *)addr; ++} ++ ++static int dhcp_option_parser_next(dhcp_option_parser *parser, ++ EFI_DHCP4_PACKET_OPTION **option) ++{ ++ char *current_option; ++ if (parser->current_option->OpCode == 255) { ++ *option = NULL; ++ return 0; ++ } ++ current_option = (char *)parser->current_option; ++ current_option += 2 + parser->current_option->Length; ++ parser->current_option = (EFI_DHCP4_PACKET_OPTION *)current_option; ++ ++ *option = parser->current_option; ++ return 1; ++} ++ ++#define DHCPMAGIK "\x63\x82\x53\x63" ++ ++static int get_dhcp_client_id(EFI_PXE_BASE_CODE_PACKET *packet, uuid_t *uuid) ++{ ++ dhcp_option_parser parser; ++ EFI_DHCP4_PACKET_OPTION *option; ++ ++ dhcp_option_parser_reset(&parser, packet); ++ ++ if (memcmp((char *)&packet->Dhcpv4.DhcpMagik, DHCPMAGIK, 4)) ++ return 0; ++ ++ while (dhcp_option_parser_next(&parser, &option)) { ++ int i; ++ char data[option->Length]; ++ ++ if (option->OpCode != 97) ++ continue; ++ ++ if (option->Length != 17) ++ continue; ++ ++ memcpy(data, option->Data, option->Length); ++ if (data[0] != 0) ++ continue; ++ ++ /* 97[17]: 009cfe245ed0c8bd45a79f54ea5fbd3d97 ++ * ^^^^^^^^^^^^ uint8_t[] ++ * ^^ uint8_t ++ * ^^ uint8_t ++ * ^^^^ BE uint16_t ++ * ^^^^ BE uint16_t ++ * ^^^^^^^^ BE uint32_t ++ * ^^ "type". 0 means UUID. ++ */ ++ memcpy(uuid, data+1, 16); ++ uuid->time_low = htonl(uuid->time_low); ++ uuid->time_mid = htons(uuid->time_mid); ++ uuid->time_hi_ver = htons(uuid->time_hi_ver); ++ ++ return 1; ++ } ++ return 0; ++} ++ ++#if 0 ++static void grub_dump_dhcp_options(EFI_PXE_BASE_CODE_PACKET *packet) ++{ ++ dhcp_option_parser parser; ++ EFI_DHCP4_PACKET_OPTION *option; ++ char hex[] = "0123456789abcdef"; ++ int i; ++ int j = 0; ++ ++ dhcp_option_parser_reset(&parser, packet); ++ ++ if (memcmp((char *)&packet->Dhcpv4.DhcpMagik, DHCPMAGIK, 4)) ++ return; ++ ++ /* 54[4]: a0014301 ++ * 51[4]: 00004506 ++ * 1[4]: ffffff00 ++ * 3[4]: a00143ef ++ * 6[8]: a001ff20a001ff30 ++ * 15[48]: 96e6374716c6c6e226f637e2275646861647e236f6d60226f637e2275646861647e236f6d602275646861647e236f6d6 ++ * 28[4]: a00143ff ++ * 40[10]: 275646861647e236f6d6 ++ * 41[8]: a001ff20a001ff30 ++ * 58[4]: 0000a203 ++ * 59[4]: 0000944d ++ * this is the one we want: ++ * 97[17]: 009cfe245ed0c8bd45a79f54ea5fbd3d97 ++ * ^^^^^^^^^^^^ in order ++ * ^^ ++ * ^^ ++ * ^^^^ out of order ++ * ^^^^ out of order ++ * ^^^^^^^^ out of order ++ * ^^ "type". 0 means UUID. ++ * 255[0]: ++ */ ++ while (dhcp_option_parser_next(&parser, &option)) { ++ char data[option->Length + 1]; ++ ++ memcpy(data, option->Data, option->Length); ++ data[option->Length] = '\0'; ++ ++ grub_printf("%d[%d]: ", option->OpCode, option->Length); ++ for (i = 0; i < option->Length; i++) { ++ grub_printf("%c%c", hex[data[i] & 0xf], ++ hex[(data[i] & 0xf0) >> 4]); ++ } ++ printf("\n"); ++ } ++ ++} ++ ++void grub_print_dhcp_info(grub_efi_loaded_image_t *loaded_image) ++{ ++ EFI_PXE_BASE_CODE *pxe = NULL; ++ EFI_PXE_BASE_CODE_PACKET *packet; ++ ++ grub_printf("got to %s\n", __func__); ++ ++ pxe = grub_efi_locate_protocol(&PxeBaseCodeProtocol, NULL); ++ if (pxe == NULL) ++ return; ++ ++ printf("DhcpDiscover options:\n"); ++ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->DhcpDiscover.Dhcpv4; ++ grub_dump_dhcp_options(packet); ++ ++ printf("DhcpAck options:\n"); ++ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->DhcpAck.Dhcpv4; ++ grub_dump_dhcp_options(packet); ++ ++ printf("PxeDiscover options:\n"); ++ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->PxeDiscover.Dhcpv4; ++ grub_dump_dhcp_options(packet); ++ ++ printf("PxeReply options:\n"); ++ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->PxeReply.Dhcpv4; ++ grub_dump_dhcp_options(packet); ++ ++#if 0 ++ printf("pxe->Mode->DhcpAck.Dhcpv4: \n"); ++ printf("\t.BootSrvName: %s\n", pxe->Mode->DhcpAck.Dhcpv4.BootpSrvName); ++ printf("\t.BootBootFile: %s\n", pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile); ++ printf("\t.BootCiAddr: %d.%d.%d.%d\n", ++ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[0], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[1], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[2], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[3]); ++ printf("\t.BootYiAddr: %d.%d.%d.%d\n", ++ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[0], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[1], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[2], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[3]); ++ printf("\t.BootSiAddr: %d.%d.%d.%d\n", ++ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[0], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[1], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[2], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[3]); ++ printf("\t.BootGiAddr: %d.%d.%d.%d\n", ++ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[0], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[1], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[2], ++ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[3]); ++ } ++ printf("\n"); ++#endif ++ ++ ++} ++#endif ++ ++static void icmp_print_error(EFI_PXE_BASE_CODE *pxe) ++{ ++ EFI_PXE_BASE_CODE_ICMP_ERROR *err = &pxe->Mode->IcmpError; ++ int i; ++ //char hex[] = "0123456789abcdef"; ++ ++ printf("icmp error\n"); ++ printf("type: %d code: %d\n", err->Type, err->Code); ++ printf("data: \n"); ++ for(i = 0; i < 464; i+=16) { ++ int x; ++ for (x = i; x < i+4; x++) ++ printf("%02x ", err->Data[x]); ++ printf(" "); ++ for (x = i+4; x < i+8; x++) ++ printf("%02x ", err->Data[x]); ++ printf(" "); ++ printf(" "); ++ for (x = i+8; x < i+12; x++) ++ printf("%02x ", err->Data[x]); ++ printf(" "); ++ for (x = i+12; x < i+16; x++) ++ printf("%02x ", err->Data[x]); ++ printf("\n"); ++ } ++} ++ ++static int grub_efi_pxe_check_for_file( ++ EFI_PXE_BASE_CODE *pxe, ++ EFI_IP_ADDRESS *ServerIp, ++ char *BootpBootFile, ++ char *configname, ++ char **returnpath) ++{ ++ size_t bplen = strlen(BootpBootFile); ++ char *Filename = grub_malloc(24 + bplen + 40); ++ char *lastslash = Filename + bplen; ++ grub_efi_uintn_t size; ++ int i; ++ EFI_STATUS rc; ++ char Buffer[8192]; ++ ++ memcpy(Filename, BootpBootFile, bplen); ++ ++ for (i = 0; i < bplen; i++) { ++ if (Filename[i] == '/') ++ lastslash = Filename + i; ++ } ++ if (*lastslash) { ++ *lastslash++ = '/'; ++ *lastslash = '\0'; ++ } ++ ++ sprintf(lastslash, configname); ++ ++ printf("tftp://%d.%d.%d.%d/%s\n", ++ ServerIp->v4.Addr[0], ServerIp->v4.Addr[1], ++ ServerIp->v4.Addr[2], ServerIp->v4.Addr[3], ++ Filename); ++ ++ rc = tftp_get_file_size(Filename, &size); ++ if (rc == GRUB_EFI_ICMP_ERROR) ++ icmp_print_error(pxe); ++ ++ if (rc == GRUB_EFI_SUCCESS) { ++ *returnpath = Filename; ++ return size; ++ } ++ grub_free(Filename); ++ return 0; ++} ++ ++static void get_pxe_server(EFI_PXE_BASE_CODE *pxe, EFI_IP_ADDRESS **Address) ++{ ++ EFI_IP_ADDRESS *tmp = grub_malloc(sizeof *tmp); ++ if (tmp) { ++ memset(tmp, '\0', sizeof (*tmp)); ++ memcpy(&tmp->Addr[0], pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr, 4); ++ *Address = tmp; ++ } ++} ++ ++static char *get_pxe_file_dir(EFI_PXE_BASE_CODE *pxe) ++{ ++ char *FileDir = NULL; ++ char *DirEnd = NULL; ++ char *BootpBootFile; ++ size_t bplen; ++ ++ BootpBootFile = pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile; ++ bplen = strlen(BootpBootFile); ++ FileDir = grub_malloc(bplen + 1); ++ memcpy(FileDir, BootpBootFile, bplen); ++ FileDir[bplen] = '\0'; ++ ++ DirEnd = grub_strrchr(FileDir, '/'); ++ if (!DirEnd) ++ DirEnd = FileDir; ++ ++ *DirEnd = '\0'; ++ ++ return FileDir; ++} ++ ++static void set_pxe_info(grub_efi_loaded_image_t *LoadedImage, ++ EFI_PXE_BASE_CODE *pxe) ++{ ++ tftp_info.LoadedImage = LoadedImage; ++ tftp_info.Pxe = pxe; ++ get_pxe_server(pxe, &tftp_info.ServerIp); ++ tftp_info.BasePath = get_pxe_file_dir(pxe); ++} ++ ++char *grub_efi_pxe_get_config_path(grub_efi_loaded_image_t *LoadedImage) ++{ ++ EFI_PXE_BASE_CODE *pxe = NULL; ++ EFI_IP_ADDRESS ServerIp; ++ char *FileName = NULL; ++ EFI_PXE_BASE_CODE_DHCPV4_PACKET *packet; ++ uuid_t uuid; ++ grub_efi_uintn_t FileSize = 0; ++ grub_efi_status_t rc = GRUB_EFI_SUCCESS; ++ char *ConfigPath = NULL; ++ char hex[] = "0123456789ABCDEF"; ++ char hexip[9]; ++ int hexiplen; ++ ++ grub_efi_handle_t *handle, *handles; ++ grub_efi_uintn_t num_handles; ++ ++ handles = grub_efi_locate_handle(GRUB_EFI_BY_PROTOCOL, ++ &PxeBaseCodeProtocol, ++ NULL, &num_handles); ++ ++ if (!handles) ++ return NULL; ++ ++ for (handle = handles; num_handles--; handle++) { ++ pxe = grub_efi_open_protocol(*handle, &PxeBaseCodeProtocol, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ if (!pxe || !pxe->Mode) ++ continue; ++ if (pxe->Mode->Started && pxe->Mode->DhcpAckReceived) ++ break; ++ } ++ grub_free(handles); ++ ++ if (!pxe) ++ return NULL; ++ ++ set_pxe_info(LoadedImage, pxe); ++ ++ FileName = grub_malloc(strlen("1902dcf5-7190-d811-bbd6-6ef21c690030")); ++ ++ packet = &pxe->Mode->DhcpDiscover.Dhcpv4; ++ ++ if (get_dhcp_client_id((EFI_PXE_BASE_CODE_PACKET *)packet, &uuid)) { ++ ++ uuid.time_mid = 0x0011; ++ sprintf(FileName, ++ "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", ++ uuid.time_low, uuid.time_mid, uuid.time_hi_ver, ++ uuid.clock_seq_hi, uuid.clock_seq_low, ++ uuid.node[0], uuid.node[1], uuid.node[2], ++ uuid.node[3], uuid.node[4], uuid.node[5]); ++ ++ rc = tftp_get_file_size(FileName, &FileSize); ++ if (rc == GRUB_EFI_SUCCESS) { ++ char *ReturnFile = grub_malloc(strlen("(nd)/") + ++ strlen(FileName) + 1); ++ sprintf(ReturnFile, "(nd)/%s", FileName); ++ grub_free(FileName); ++ //sprintf(tftp_info.LastPath, FileName); ++ return ReturnFile; ++ } ++ } ++ ++ packet = &pxe->Mode->DhcpAck.Dhcpv4; ++ ++ if (!memcmp(packet->BootpHwAddr + 6, "\x00\x00\x00\x00\x00" ++ "\x00\x00\x00\x00\x00", 10) && ++ memcmp(packet->BootpHwAddr, "\x00\x00\x00\x00\x00\x00", ++ 6)) { ++ char mac[21]; ++ sprintf(mac, "01-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c", ++ hex[(packet->BootpHwAddr[0] & 0xf0) >> 4], ++ hex[packet->BootpHwAddr[0] & 0xf], ++ hex[(packet->BootpHwAddr[1] & 0xf0) >> 4], ++ hex[packet->BootpHwAddr[1] & 0xf], ++ hex[(packet->BootpHwAddr[2] & 0xf0) >> 4], ++ hex[packet->BootpHwAddr[2] & 0xf], ++ hex[(packet->BootpHwAddr[3] & 0xf0) >> 4], ++ hex[packet->BootpHwAddr[3] & 0xf], ++ hex[(packet->BootpHwAddr[4] & 0xf0) >> 4], ++ hex[packet->BootpHwAddr[4] & 0xf], ++ hex[(packet->BootpHwAddr[5] & 0xf0) >> 4], ++ hex[packet->BootpHwAddr[5] & 0xf]); ++ ++ rc = tftp_get_file_size(mac, &FileSize); ++ if (rc == GRUB_EFI_SUCCESS) { ++ char *ReturnFile = grub_malloc(strlen("(nd)/") + ++ strlen(mac) + 1); ++ sprintf(ReturnFile, "(nd)/%s", mac); ++ return ReturnFile; ++ } ++ ++ } ++ ++ sprintf(hexip, "%c%c%c%c%c%c%c%c", ++ hex[(packet->BootpYiAddr[0] & 0xf0) >> 4], ++ hex[packet->BootpYiAddr[0] & 0xf], ++ hex[(packet->BootpYiAddr[1] & 0xf0) >> 4], ++ hex[packet->BootpYiAddr[1] & 0xf], ++ hex[(packet->BootpYiAddr[2] & 0xf0) >> 4], ++ hex[packet->BootpYiAddr[2] & 0xf], ++ hex[(packet->BootpYiAddr[3] & 0xf0) >> 4], ++ hex[packet->BootpYiAddr[3] & 0xf]); ++ ++ for (hexiplen = strlen(hexip); hexiplen > 0; hexiplen--) ++ { ++ hexip[hexiplen] = '\0'; ++ rc = tftp_get_file_size(hexip, &FileSize); ++ if (rc == GRUB_EFI_SUCCESS) { ++ char *ReturnFile = grub_malloc(strlen("(nd)/") + ++ strlen(hexip) + 1); ++ sprintf(ReturnFile, "(nd)/%s", hexip); ++ return ReturnFile; ++ } ++ } ++ ++ rc = tftp_get_file_size("efidefault", &FileSize); ++ if (rc == GRUB_EFI_SUCCESS) { ++ char *ReturnFile = grub_malloc(strlen("(nd)/efidefault")+1); ++ sprintf(ReturnFile, "(nd)/efidefault"); ++ return ReturnFile; ++ } ++ ++ return NULL; ++} +diff --git a/efi/pxe.h b/efi/pxe.h +new file mode 100644 +index 0000000..0a68007 +--- /dev/null ++++ b/efi/pxe.h +@@ -0,0 +1,237 @@ ++#ifndef PXE_H ++#define PXE_H 1 ++ ++#include "byteswap.h" ++ ++extern char *grub_efi_pxe_get_config_path(grub_efi_loaded_image_t *LoadedImage); ++extern void grub_print_dhcp_info(grub_efi_loaded_image_t *loaded_image); ++extern char *grub_efi_pxe_path_to_path_name(void); ++ ++ ++#define EFI_PXE_BASE_CODE_PROTOCOL \ ++ { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } ++static grub_efi_guid_t PxeBaseCodeProtocol = EFI_PXE_BASE_CODE_PROTOCOL; ++ ++struct _EFI_PXE_BASE_CODE; ++ ++typedef enum { ++ EFI_PXE_BASE_CODE_TFTP_FIRST, ++ EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, ++ EFI_PXE_BASE_CODE_TFTP_READ_FILE, ++ EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, ++ EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, ++ EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, ++ EFI_PXE_BASE_CODE_MTFTP_READ_FILE, ++ EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, ++ EFI_PXE_BASE_CODE_MTFTP_LAST ++} EFI_PXE_BASE_CODE_TFTP_OPCODE; ++ ++typedef struct { ++ grub_efi_uint8_t Addr[4]; ++} EFI_IPv4_ADDRESS; ++ ++typedef struct { ++ grub_efi_uint8_t Addr[16]; ++} EFI_IPv6_ADDRESS; ++ ++typedef struct { ++ grub_efi_uint8_t Addr[32]; ++} EFI_MAC_ADDRESS; ++ ++typedef union { ++ grub_efi_uint32_t Addr[4]; ++ EFI_IPv4_ADDRESS v4; ++ EFI_IPv6_ADDRESS v6; ++} EFI_IP_ADDRESS; ++ ++typedef grub_efi_uint16_t EFI_PXE_BASE_CODE_UDP_PORT; ++ ++typedef struct { ++ EFI_IP_ADDRESS MCastIp; ++ EFI_PXE_BASE_CODE_UDP_PORT CPort; ++ EFI_PXE_BASE_CODE_UDP_PORT SPort; ++ grub_efi_uint16_t ListenTimeout; ++ grub_efi_uint16_t TransmitTimeout; ++} EFI_PXE_BASE_CODE_MTFTP_INFO; ++ ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_MTFTP)( ++ struct _EFI_PXE_BASE_CODE *This, ++ EFI_PXE_BASE_CODE_TFTP_OPCODE Operation, ++ void *BufferPtr, ++ grub_efi_boolean_t Overwrite, ++ grub_efi_uint64_t *BufferSize, ++ grub_efi_uintn_t *BlockSize, ++ EFI_IP_ADDRESS *ServerIp, ++ grub_efi_uint8_t *Filename, ++ EFI_PXE_BASE_CODE_MTFTP_INFO *Info, ++ grub_efi_boolean_t DontUseBuffer); ++ ++typedef struct { ++ grub_efi_uint8_t BootpOpcode; ++ grub_efi_uint8_t BootpHwType; ++ grub_efi_uint8_t BootpHwAddrLen; ++ grub_efi_uint8_t BootpGateHops; ++ grub_efi_uint32_t BootpIdent; ++ grub_efi_uint16_t BootpSeconds; ++ grub_efi_uint16_t BootpFlags; ++ grub_efi_uint8_t BootpCiAddr[4]; ++ grub_efi_uint8_t BootpYiAddr[4]; ++ grub_efi_uint8_t BootpSiAddr[4]; ++ grub_efi_uint8_t BootpGiAddr[4]; ++ grub_efi_uint8_t BootpHwAddr[16]; ++ grub_efi_uint8_t BootpSrvName[64]; ++ grub_efi_uint8_t BootpBootFile[128]; ++ grub_efi_uint32_t DhcpMagik; ++ grub_efi_uint8_t DhcpOptions[56]; ++} EFI_PXE_BASE_CODE_DHCPV4_PACKET; ++ ++// TBD in EFI v1.1 ++//typedef struct { ++// grub_efi_uint8_t reserved; ++//} EFI_PXE_BASE_CODE_DHCPV6_PACKET; ++ ++typedef union { ++ grub_efi_uint8_t Raw[1472]; ++ EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; ++// EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; ++} EFI_PXE_BASE_CODE_PACKET; ++ ++typedef struct { ++ grub_efi_uint8_t Type; ++ grub_efi_uint8_t Code; ++ grub_efi_uint16_t Checksum; ++ union { ++ grub_efi_uint32_t reserved; ++ grub_efi_uint32_t Mtu; ++ grub_efi_uint32_t Pointer; ++ struct { ++ grub_efi_uint16_t Identifier; ++ grub_efi_uint16_t Sequence; ++ } Echo; ++ } u; ++ grub_efi_uint8_t Data[494]; ++} EFI_PXE_BASE_CODE_ICMP_ERROR; ++ ++typedef struct { ++ grub_efi_uint8_t ErrorCode; ++ grub_efi_char8_t ErrorString[127]; ++} EFI_PXE_BASE_CODE_TFTP_ERROR; ++ ++ ++#define EFI_PXE_BASE_CODE_MAX_IPCNT 8 ++typedef struct { ++ grub_efi_uint8_t Filters; ++ grub_efi_uint8_t IpCnt; ++ grub_efi_uint16_t reserved; ++ EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; ++} EFI_PXE_BASE_CODE_IP_FILTER; ++ ++#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001 ++#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002 ++#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004 ++#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008 ++ ++typedef struct { ++ EFI_IP_ADDRESS IpAddr; ++ EFI_MAC_ADDRESS MacAddr; ++} EFI_PXE_BASE_CODE_ARP_ENTRY; ++ ++typedef struct { ++ EFI_IP_ADDRESS IpAddr; ++ EFI_IP_ADDRESS SubnetMask; ++ EFI_IP_ADDRESS GwAddr; ++} EFI_PXE_BASE_CODE_ROUTE_ENTRY; ++ ++#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8 ++#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8 ++ ++typedef struct { ++ grub_efi_boolean_t Started; ++ grub_efi_boolean_t Ipv6Available; ++ grub_efi_boolean_t Ipv6Supported; ++ grub_efi_boolean_t UsingIpv6; ++ grub_efi_boolean_t BisSupported; ++ grub_efi_boolean_t BisDetected; ++ grub_efi_boolean_t AutoArp; ++ grub_efi_boolean_t SendGUID; ++ grub_efi_boolean_t DhcpDiscoverValid; ++ grub_efi_boolean_t DhcpAckReceived; ++ grub_efi_boolean_t ProxyOfferReceived; ++ grub_efi_boolean_t PxeDiscoverValid; ++ grub_efi_boolean_t PxeReplyReceived; ++ grub_efi_boolean_t PxeBisReplyReceived; ++ grub_efi_boolean_t IcmpErrorReceived; ++ grub_efi_boolean_t TftpErrorReceived; ++ grub_efi_boolean_t MakeCallbacks; ++ grub_efi_uint8_t TTL; ++ grub_efi_uint8_t ToS; ++ EFI_IP_ADDRESS StationIp; ++ EFI_IP_ADDRESS SubnetMask; ++ EFI_PXE_BASE_CODE_PACKET DhcpDiscover; ++ EFI_PXE_BASE_CODE_PACKET DhcpAck; ++ EFI_PXE_BASE_CODE_PACKET ProxyOffer; ++ EFI_PXE_BASE_CODE_PACKET PxeDiscover; ++ EFI_PXE_BASE_CODE_PACKET PxeReply; ++ EFI_PXE_BASE_CODE_PACKET PxeBisReply; ++ EFI_PXE_BASE_CODE_IP_FILTER IpFilter; ++ grub_efi_uint32_t ArpCacheEntries; ++ EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; ++ grub_efi_uint32_t RouteTableEntries; ++ EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES]; ++ EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError; ++ EFI_PXE_BASE_CODE_TFTP_ERROR TftpError; ++} EFI_PXE_BASE_CODE_MODE; ++ ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_START)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_STOP)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_DHCP)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_DISCOVER)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_UDP_WRITE)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_UDP_READ)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_IP_FILTER)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_ARP)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_PARAMETERS)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_STATION_IP)(); ++typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_PACKETS)(); ++ ++typedef struct _EFI_PXE_BASE_CODE{ ++ grub_efi_uint64_t Revision; ++ EFI_PXE_BASE_CODE_START Start; ++ EFI_PXE_BASE_CODE_STOP Stop; ++ EFI_PXE_BASE_CODE_DHCP Dhcp; ++ EFI_PXE_BASE_CODE_DISCOVER Discover; ++ EFI_PXE_BASE_CODE_MTFTP Mtftp; ++ EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite; ++ EFI_PXE_BASE_CODE_UDP_READ UdpRead; ++ EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter; ++ EFI_PXE_BASE_CODE_ARP Arp; ++ EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters; ++ EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp; ++ EFI_PXE_BASE_CODE_SET_PACKETS SetPackets; ++ EFI_PXE_BASE_CODE_MODE *Mode; ++} EFI_PXE_BASE_CODE; ++ ++typedef struct { ++ grub_efi_uint32_t time_low; ++ grub_efi_uint16_t time_mid; ++ grub_efi_uint16_t time_hi_ver; ++ grub_efi_uint8_t clock_seq_hi; ++ grub_efi_uint8_t clock_seq_low; ++ grub_efi_uint8_t node[6]; ++} uuid_t; ++ ++struct tftp_info { ++ grub_efi_loaded_image_t *LoadedImage; ++ EFI_PXE_BASE_CODE *Pxe; ++ EFI_IP_ADDRESS *ServerIp; ++ char *BasePath; ++ char *LastPath; ++ char *Buffer; ++}; ++ ++extern struct tftp_info tftp_info; ++extern grub_efi_status_t tftp_get_file_size( ++ char *Filename, ++ grub_efi_uintn_t *Size); ++ ++#endif /* PXE_H */ +diff --git a/efi/ugadebug.h b/efi/ugadebug.h +new file mode 100644 +index 0000000..f461c8b +--- /dev/null ++++ b/efi/ugadebug.h +@@ -0,0 +1,201 @@ ++#ifndef UGA_DEBUG_H ++#define UGA_DEBUG_H ++ ++extern void dc(char *file, int line); ++extern void gm(char *file, int line, char *fmt, ...); ++ ++#ifdef UGA ++ ++extern const unsigned char font8x16[]; ++ ++extern grub_efi_guid_t draw_guid; ++ ++static void *tmp_term; ++ ++#define SCREEN_WIDTH 80 ++ ++#define LINE_SIZE_X ( 8 * 100 ) ++#define LINE_START_X(x) (1280 + (x)) ++#define LINE_END_X(x) (LINE_START_X(0) + LINE_SIZE_X - 1) ++ ++#define POS_X(x) (LINE_START_X(x) + (8 * (x))) ++ ++#define LINE_SIZE_Y 16 ++#define LINE_START_Y(y) ((y) * LINE_SIZE_Y) ++#define LINE_END_Y(y) ( (((y)+1) * LINE_SIZE_Y ) - 1) ++ ++#define POS_Y(y) LINE_START_Y(y) ++ ++#define FIRST_LINE 0 ++#define LAST_LINE 75 ++ ++#define format_ascii(buf, val, is_hex, is_cap) ({ \ ++ int _n = sizeof ((buf)) - 2; \ ++ typeof(val) _nval = (val); \ ++ int _negative = 0; \ ++ int _mult = is_hex ? 16 : 10; \ ++ char _a = is_cap ? 'A' : 'a'; \ ++ grub_memset((buf), '\0', sizeof ((buf))); \ ++ if (!(_nval > 0LL)) \ ++ _negative = 1; \ ++ if (_nval == 0LL) \ ++ _negative = 0; \ ++ if (_negative) \ ++ _nval = (_nval ^ -1); \ ++ do { \ ++ int _dig = _nval % _mult; \ ++ (buf)[_n--] = ((_dig > 9) ? _dig + _a - 10 : '0'+_dig); \ ++ } while (_nval /= _mult); \ ++ if (_negative) \ ++ (buf)[_n--] = '-'; \ ++ _mult = 0; \ ++ _n++; \ ++ while (_n < sizeof ((buf))) \ ++ (buf)[_mult++] = (buf)[_n++]; \ ++ if (_negative && _mult > 1) \ ++ ((buf)[_mult-2])++; \ ++ }) ++ ++static grub_efi_uga_draw_t *debug_draw_intf; ++static void debug_putchar(int i, int j, int ch) ++{ ++ grub_efi_uga_pixel_t pixbuf[8 * 16]; ++ grub_efi_uga_pixel_t black = { .red = 0x00, .green = 0x00, .blue = 0x00 }, ++ white = { .red = 0xff, .green = 0xff, .blue = 0xff }; ++ const unsigned char *pat; ++ int x, y; ++ ++ if (!debug_draw_intf) ++ debug_draw_intf = grub_efi_locate_protocol(&draw_guid, NULL); ++ if (!debug_draw_intf) ++ return; ++ ++ pat = font8x16 + (ch << 4); ++ ++ for (y = 0; y < 16; y++) { ++ for (x = 0; x < 8; x++) { ++ int bit = pat[y] & (1 << (7 - x)); ++ ++ grub_memmove(&pixbuf[x + y * 8], bit ? &white : &black, ++ sizeof (pixbuf[0])); ++ } ++ } ++ ++ Call_Service_10(debug_draw_intf->blt, debug_draw_intf, pixbuf, ++ EfiUgaBltBufferToVideo, ++ 0, 0, ++ POS_X(i), POS_Y(j), ++ 8, 16, ++ 0); ++ ++} ++ ++static void dputs(const char *s) ++{ ++ static int row = -1; ++ int col = 89; ++ return; ++ ++ if (s && *s) { ++ do { ++ if (col > 190) { ++ row++; ++ col = 89; ++ } ++ if (row > 50) { ++ row = 0; ++ col = 89; ++ } ++ col++; ++ ++ if (*s == '\n') { ++ col = 1; ++ row++; ++ } else { ++ debug_putchar(col, row, *s); ++ } ++ } while (*(++s)); ++ } ++ row++; ++} ++ ++static int dbg_row = 0; ++static int dbg_col = 0; ++ ++static void dbg_scroll(int new_dbg_col) ++{ ++ grub_efi_uga_pixel_t black[1] ={{.red = 0x00, .green = 0x00, .blue = 0x00}}; ++ ++ if (dbg_row == LAST_LINE) { ++ dbg_col = new_dbg_col; ++ Call_Service_10(debug_draw_intf->blt, debug_draw_intf, NULL, ++ EfiUgaVideoToVideo, ++ 640, LINE_START_Y(1), ++ 640, LINE_START_Y(0), ++ LINE_SIZE_X, LINE_END_Y(LAST_LINE)+1, ++ 0); ++ Call_Service_10(debug_draw_intf->blt, debug_draw_intf, black, ++ EfiUgaVideoFill, ++ 0, 0, ++ 640, LINE_START_Y(LAST_LINE), ++ LINE_END_X(SCREEN_WIDTH)+1, LINE_END_Y(LAST_LINE)+1, ++ 0); ++ } else { ++ dbg_row++; ++ dbg_col = new_dbg_col; ++ } ++// grub_efi_stall(1000000); ++} ++ ++static void dc_backend(char *file, int line) ++{ ++ char linebuf[9] = " "; ++ int pos; ++ ++ linebuf[8] = '\0'; ++ ++ format_ascii(linebuf, line, 0, 0); ++ for (dbg_col=0, pos=0; linebuf[pos]; dbg_col++, pos++) ++ debug_putchar(dbg_col, dbg_row, linebuf[pos]); ++ ++ for (dbg_col=5, pos=0; file[pos]; dbg_col++, pos++) { ++ if (dbg_col > 15) ++ dbg_scroll(0); ++ ++ debug_putchar(dbg_col, dbg_row, file[pos]); ++ } ++} ++ ++void dc(char *file, int line) ++{ ++ dc_backend(file, line); ++ dbg_scroll(0); ++} ++ ++void ++gm(char *file, int line, char *fmt, ...) ++{ ++ va_list ap; ++ char buf[1024]=""; ++ int pos; ++ ++ va_start(ap, fmt); ++ grub_vsprintf(buf, fmt, ap); ++ va_end(ap); ++ ++ dc_backend(file, line); ++ for (dbg_col=16, pos=0; buf[pos]; dbg_col++, pos++) { ++ if (buf[pos] == '\n') ++ continue; ++ if (dbg_col > SCREEN_WIDTH-1) ++ dbg_scroll(16); ++ debug_putchar(dbg_col, dbg_row, buf[pos]); ++ } ++ dbg_scroll(0); ++} ++ ++#define dm() ({ tmp_term = current_term; current_term = term_table; grub_dprintf(__func__, "got here\n"); current_term = tmp_term; }) ++ ++#endif ++ ++#endif /* UGA_DEBUG_H */ +diff --git a/efi/x86_64/callwrap.S b/efi/x86_64/callwrap.S +new file mode 100644 +index 0000000..f574ad0 +--- /dev/null ++++ b/efi/x86_64/callwrap.S +@@ -0,0 +1,274 @@ ++/* ++ * Function calling ABI conversion from Linux to EFI for x86_64 ++ * ++ * Copyright (C) 2007 Intel Corp ++ * Bibo Mao ++ * Huang Ying ++ */ ++ ++/* ++ * EFI calling conventions are documented at: ++ * http://msdn.microsoft.com/en-us/library/ms235286%28v=vs.80%29.aspx ++ * ELF calling conventions are documented at: ++ * http://www.x86-64.org/documentation/abi.pdf ++ * ++ * Basically here are the conversion rules: ++ * a) our function pointer is in %rdi ++ * b) ELF gives us 8-byte aligned %rsp, so we need to pad out to 16-byte ++ * alignment. ++ * c) inside each call thunker, we can only adjust the stack by ++ * multiples of 16 bytes. "offset" below refers to however much ++ * we allocate inside a thunker. ++ * d) rsi through r8 (elf) aka rcx through r9 (ms) require stack space ++ * on the MS side even though it's not getting used at all. ++ * e) arguments are as follows: (elf -> ms) ++ * 1) rdi -> rcx (32 saved) ++ * 2) rsi -> rdx (32 saved) ++ * 3) rdx -> r8 ( 32 saved) ++ * 4) rcx -> r9 (32 saved) ++ * 5) r8 -> 32(%rsp) (48 saved) ++ * 6) r9 -> 40(%rsp) (48 saved) ++ * 7) pad+offset+0(%rsp) -> 48(%rsp) (64 saved) ++ * 8) pad+offset+8(%rsp) -> 56(%rsp) (64 saved) ++ * 9) pad+offset+16(%rsp) -> 64(%rsp) (80 saved) ++ * 10) pad+offset+24(%rsp) -> 72(%rsp) (80 saved) ++ * 11) pad+offset+32(%rsp) -> 80(%rsp) (96 saved) ++ * 12) pad+offset+40(%rsp) -> 88(%rsp) (96 saved) ++ * f) because the first argument we recieve in a thunker is actually the ++ * function to be called, arguments are offset as such: ++ * 0) rdi -> caller ++ * 1) rsi -> rcx (32 saved) ++ * 2) rdx -> rdx (32 saved) ++ * 3) rcx -> r8 (32 saved) ++ * 4) r8 -> r9 (32 saved) ++ * 5) r9 -> 32(%rsp) (48 saved) ++ * 6) pad+offset+0(%rsp) -> 40(%rsp) (48 saved) ++ * 7) pad+offset+8(%rsp) -> 48(%rsp) (64 saved) ++ * 8) pad+offset+16(%rsp) -> 56(%rsp) (64 saved) ++ * 9) pad+offset+24(%rsp) -> 64(%rsp) (80 saved) ++ * 10) pad+offset+32(%rsp) -> 72(%rsp) (80 saved) ++ * 11) pad+offset+40(%rsp) -> 80(%rsp) (96 saved) ++ * 12) pad+offset+48(%rsp) -> 88(%rsp) (96 saved) ++ * e) arguments need to be moved in opposite order to avoid clobbering ++ * f) pad_stack leaves the amount of padding it added in %r11 for functions ++ * to use ++ * g) efi -> elf calls don't need to pad the stack, because the 16-byte ++ * alignment is also always 8-byte aligned. ++ */ ++ ++#define ENTRY(name) \ ++ .globl name; \ ++ name: ++ ++#define out(val) \ ++ push %rax ; \ ++ mov val, %rax ; \ ++ out %al, $128 ; \ ++ pop %rax ++ ++#define pad_stack \ ++ subq $8, %rsp ; /* must be a multiple of 16 - sizeof(%rip) */ \ ++ /* stash some handy integers */ \ ++ mov $0x8, %rax ; \ ++ mov $0x10, %r10 ; \ ++ /* see if we need padding */ \ ++ and %rsp, %rax ; \ ++ /* store the pad amount in %r11 */ \ ++ cmovnz %rax, %r11 ; \ ++ cmovz %r10, %r11 ; \ ++ /* insert the padding */ \ ++ subq %r11, %rsp ; \ ++ /* add the $8 we saved above in %r11 */ \ ++ addq $8, %r11 ; \ ++ /* store the pad amount */ \ ++ mov %r11, (%rsp) ; \ ++ /* compensate for %rip being stored on the stack by call */ \ ++ addq $8, %r11 ++ ++#define unpad_stack \ ++ /* fetch the pad amount we saved (%r11 has been clobbered) */ \ ++ mov (%rsp), %r11 ; \ ++ /* remove the padding */ \ ++ addq %r11, %rsp ++ ++ENTRY(x64_call0) ++ pad_stack ++ subq $32, %rsp ++ call *%rdi ++ addq $32, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call1) ++ pad_stack ++ subq $32, %rsp ++ mov %rsi, %rcx ++ call *%rdi ++ addq $32, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call2) ++ pad_stack ++ subq $32, %rsp ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $32, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call3) ++ pad_stack ++ subq $32, %rsp ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $32, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call4) ++ pad_stack ++ subq $32, %rsp ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $32, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call5) ++ pad_stack ++ subq $48, %rsp ++ mov %r9, 32(%rsp) ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $48, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call6) ++ pad_stack ++ subq $48, %rsp ++ addq $48, %r11 ++ addq %rsp, %r11 ++ mov (%r11), %rax ++ mov %rax, 40(%rsp) ++ mov %r9, 32(%rsp) ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $48, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call7) ++ pad_stack ++ subq $64, %rsp ++ addq $64, %r11 ++ addq $8, %r11 ++ addq %rsp, %r11 ++ mov (%r11), %rax ++ mov %rax, 48(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 40(%rsp) ++ mov %r9, 32(%rsp) ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $64, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call8) ++ pad_stack ++ subq $64, %rsp ++ addq $64, %r11 ++ addq $16, %r11 ++ addq %rsp, %r11 ++ mov (%r11), %rax ++ mov %rax, 56(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 48(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 40(%rsp) ++ mov %r9, 32(%rsp) ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $64, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call9) ++ pad_stack ++ subq $80, %rsp ++ addq $80, %r11 ++ addq $24, %r11 ++ addq %rsp, %r11 ++ mov (%r11), %rax ++ mov %rax, 64(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 56(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 48(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 40(%rsp) ++ mov %r9, 32(%rsp) ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $80, %rsp ++ unpad_stack ++ ret ++ ++ENTRY(x64_call10) ++ pad_stack ++ subq $80, %rsp ++ addq $80, %r11 ++ addq $32, %r11 ++ addq %rsp, %r11 ++ mov (%r11), %rax ++ mov %rax, 72(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 64(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 56(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 48(%rsp) ++ subq $8, %r11 ++ mov (%r11), %rax ++ mov %rax, 40(%rsp) ++ mov %r9, 32(%rsp) ++ mov %r8, %r9 ++ mov %rcx, %r8 ++ /* mov %rdx, %rdx */ ++ mov %rsi, %rcx ++ call *%rdi ++ addq $80, %rsp ++ unpad_stack ++ ret +diff --git a/efi/x86_64/crt0-efi.S b/efi/x86_64/crt0-efi.S +new file mode 100644 +index 0000000..8667694 +--- /dev/null ++++ b/efi/x86_64/crt0-efi.S +@@ -0,0 +1,63 @@ ++/* crt0-efi-x86_64.S - x86_64 EFI startup code. ++ Copyright (C) 1999 Hewlett-Packard Co. ++ Contributed by David Mosberger . ++ Copyright (C) 2005 Intel Co. ++ Contributed by Fenghua Yu . ++ ++ This file is part of GNU-EFI, the GNU EFI development environment. ++ ++ GNU EFI is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GNU EFI is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GNU EFI; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++ .text ++ .align 4 ++ ++ .globl _start ++_start: ++ subq $8, %rsp ++ pushq %rcx ++ pushq %rdx ++ ++0: ++ lea ImageBase(%rip), %rdi ++ lea _DYNAMIC(%rip), %rsi ++ ++ popq %rcx ++ popq %rdx ++ pushq %rcx ++ pushq %rdx ++ call _relocate ++ ++ popq %rdi ++ popq %rsi ++ ++ call efi_main ++ addq $8, %rsp ++ ++.exit: ++ ret ++ ++ // hand-craft a dummy .reloc section so EFI knows it's a relocatable executable: ++ ++ .data ++dummy: .long 0 ++ ++#define IMAGE_REL_ABSOLUTE 0 ++ .section .reloc, "a" ++label1: ++ .long dummy-label1 // Page RVA ++ .long 10 // Block Size (2*4+2) ++ .word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy ++ +diff --git a/efi/x86_64/elf_efi.lds b/efi/x86_64/elf_efi.lds +new file mode 100644 +index 0000000..18a9ab9 +--- /dev/null ++++ b/efi/x86_64/elf_efi.lds +@@ -0,0 +1,58 @@ ++OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") ++OUTPUT_ARCH(i386:x86-64) ++ENTRY(_start) ++SECTIONS ++{ ++ . = 0; ++ ImageBase = .; ++ .hash : { *(.hash) } /* this MUST come first! */ ++ . = ALIGN(4096); ++ .eh_frame : ++ { ++ *(.eh_frame) ++ } ++ . = ALIGN(4096); ++ .text : ++ { ++ *(.text) ++ } ++ .reloc : ++ { ++ *(.reloc) ++ } ++ . = ALIGN(4096); ++ .data : ++ { ++ *(.rodata*) ++ *(.got.plt) ++ *(.got) ++ *(.data*) ++ *(.sdata) ++ /* the EFI loader doesn't seem to like a .bss section, so we stick ++ it all into .data: */ ++ *(.sbss) ++ *(.scommon) ++ *(.dynbss) ++ *(.bss) ++ *(COMMON) ++ *(.rel.local) ++ } ++ . = ALIGN(4096); ++ .dynamic : { *(.dynamic) } ++ . = ALIGN(4096); ++ .rela : ++ { ++ *(.rela.data*) ++ *(.rela.got) ++ *(.rela.stab) ++ } ++ . = ALIGN(4096); ++ .dynsym : { *(.dynsym) } ++ . = ALIGN(4096); ++ .dynstr : { *(.dynstr) } ++ . = ALIGN(4096); ++ .ignored.reloc : ++ { ++ *(.rela.reloc) ++ } ++} +diff --git a/efi/x86_64/loader/Makefile b/efi/x86_64/loader/Makefile +new file mode 100644 +index 0000000..0d8b888 +--- /dev/null ++++ b/efi/x86_64/loader/Makefile +@@ -0,0 +1,20 @@ ++ ++all : switch.h ++ ++bin_to_h: bin_to_h.c ++ $(CC) $(CFLAGS) -o $@ $< ++ ++switch.h : switch.bin bin_to_h ++ ./bin_to_h < $< > $@ ++ ++switch.bin : switch ++ objcopy -O binary $< $@ ++ ++switch : switch.o ++ ld.bfd -Ttext-segment=0x688 --init _start -o $@ $< ++ ++switch.o : switch.S ++ as -march=generic64 -defsym _start=0 -o $@ $< ++ ++clean : ++ @rm -vf switch.o switch switch.bin switch.h bin_to_h +diff --git a/efi/x86_64/loader/bin_to_h.c b/efi/x86_64/loader/bin_to_h.c +new file mode 100644 +index 0000000..4cff104 +--- /dev/null ++++ b/efi/x86_64/loader/bin_to_h.c +@@ -0,0 +1,29 @@ ++#include ++#include ++ ++int ++main (void) ++{ ++ unsigned n = 0; ++ int c; ++ ++ printf ("unsigned char switch_image[] = {\n"); ++ ++ while ((c = getchar ()) != EOF) ++ { ++ printf("0x%02x,%s", ++ c & 0xFF, ++ (++n & 0x07) ? " " : "\n"); ++ } ++ ++ if (n & 0x07) ++ { ++ printf("\n"); ++ } ++ ++ printf("};\n" ++ "int switch_size = sizeof switch_image;\n"); ++ ++ return 0; ++} ++ +diff --git a/efi/x86_64/loader/linux.c b/efi/x86_64/loader/linux.c +new file mode 100644 +index 0000000..49a668e +--- /dev/null ++++ b/efi/x86_64/loader/linux.c +@@ -0,0 +1,760 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "switch.h" ++ ++#include ++ ++#include "graphics.h" ++ ++#define grub_file_size() filemax ++ ++#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ ++ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) ++ ++#define PTR_HI(x) ((grub_uint32_t) ((unsigned long long)((unsigned long)(x)) >> 32)) ++ ++#ifndef SECTOR_SIZE ++#define SECTOR_SIZE 0x200 ++#endif /* defined(SECTOR_SIZE) */ ++#ifndef SECTOR_BITS ++#define SECTOR_BITS 9 ++#endif /* defined(SECTOR_BITS) */ ++ ++static unsigned long linux_mem_size; ++static int loaded; ++static void *real_mode_mem; ++static void *prot_mode_mem; ++static grub_size_t prot_kernel_size; ++static void *initrd_mem; ++static grub_efi_uintn_t real_mode_pages; ++static grub_efi_uintn_t prot_mode_pages; ++static grub_efi_uintn_t initrd_pages; ++static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID; ++ ++static inline grub_size_t ++page_align (grub_size_t size) ++{ ++ return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); ++} ++ ++static void ++free_pages (void) ++{ ++ if (real_mode_mem) ++ { ++ grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages); ++ real_mode_mem = 0; ++ } ++ ++ if (initrd_mem) ++ { ++ grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages); ++ initrd_mem = 0; ++ } ++ ++ if (mmap_buf) ++ { ++ grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages); ++ mmap_buf = 0; ++ } ++} ++ ++/* Allocate pages for the real mode code and the protected mode code ++ for linux as well as a memory map buffer. */ ++static int ++allocate_pages (grub_size_t real_size, grub_size_t prot_size) ++{ ++ grub_efi_uintn_t desc_size; ++ grub_efi_memory_descriptor_t *mmap_end; ++ grub_efi_memory_descriptor_t *desc; ++ grub_efi_physical_address_t addr; ++ ++ /* Make sure that each size is aligned to a page boundary. */ ++ real_size = page_align (real_size + SECTOR_SIZE); ++ prot_size = page_align (prot_size); ++ ++ grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", ++ (unsigned int) real_size, (unsigned int) prot_size, ++ (unsigned int) mmap_size); ++ ++ /* Calculate the number of pages; Combine the real mode code with ++ the memory map buffer for simplicity. */ ++ real_mode_pages = (real_size >> 12); ++ prot_mode_pages = (prot_size >> 12); ++ ++ /* Initialize the memory pointers with NULL for convenience. */ ++ real_mode_mem = 0; ++ prot_mode_mem = 0; ++ ++ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ addr = 0; ++ mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); ++ /* First, find free pages for the real mode code ++ and the memory map buffer. */ ++ for (desc = mmap_buf; ++ desc < mmap_end; ++ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) ++ { ++ if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY ++ && desc->num_pages >= real_mode_pages) ++ { ++ grub_efi_physical_address_t physical_end; ++ ++ physical_end = desc->physical_start + (desc->num_pages << 12); ++ ++ grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n", ++ (unsigned) desc->physical_start, ++ (unsigned) physical_end); ++ addr = physical_end - real_size; ++ if (addr < 0x100000) ++ continue; ++ ++ /* the kernel wants this address to be under 1 gig.*/ ++ if (desc->physical_start > 0x40000000 - real_size) ++ continue; ++ ++ if (addr > 0x40000000 - real_size) ++ addr = 0x40000000 - real_size; ++ ++ grub_dprintf ("linux", "trying to allocate %u pages at %x\n", ++ (unsigned) real_mode_pages, (unsigned) addr); ++ real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages); ++ if (! real_mode_mem) ++ grub_fatal ("cannot allocate pages"); ++ ++ desc->num_pages -= real_mode_pages; ++ break; ++ } ++ } ++ ++ if (! real_mode_mem) ++ { ++ grub_printf ("cannot allocate real mode pages"); ++ errnum = ERR_WONT_FIT; ++ goto fail; ++ } ++ ++ grub_printf("Trying to allocate %u pages for VMLINUZ\n", ++ (unsigned) prot_mode_pages); ++ prot_mode_mem = grub_efi_allocate_anypages(prot_mode_pages); ++ ++ if (!prot_mode_mem) ++ grub_fatal("Cannot allocate pages for VMLINUZ"); ++ grub_printf("Got pages at %p\n", prot_mode_mem); ++ ++ return 1; ++ ++ fail: ++ free_pages (); ++ return 0; ++} ++ ++/* do some funky stuff, then boot linux */ ++void ++linux_boot (void) ++{ ++ grub_printf ("zImage is not supported under EFI.\n"); ++ for (;;); ++} ++ ++static void ++grub_efi_disable_network (void) ++{ ++ grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; ++ grub_efi_pci_io_t *pci_proto; ++ grub_efi_uintn_t num_handles; ++ grub_efi_handle_t *handle, *handles; ++ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, ++ &pci_io_guid, ++ NULL, &num_handles); ++ if (!handles || !num_handles) ++ return; ++ ++ for (handle = handles; num_handles--; handle++) ++ { ++ grub_efi_uint8_t class, pos, id, pm = 0; ++ grub_efi_uint16_t pm_state, vendor; ++ int ttl = 48; ++ ++ pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (!pci_proto) ++ continue; ++ ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint8, 0x0b, 1, &class); ++ ++ /* Not a network device */ ++ if (class != 0x02) ++ continue; ++ ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint16, 0x00, 1, &vendor); ++ ++ /* Not a Broadcom */ ++ if (vendor != 0x14e4) ++ continue; ++ ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint16, 0x2c, 1, &vendor); ++ ++ /* Not an Apple */ ++ if (vendor != 0x106b) ++ continue; ++ ++ pos = 0x34; ++ ++ /* Find the power management registers */ ++ while (ttl--) ++ { ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint8, pos, 1, &pos); ++ ++ if (pos < 0x40) ++ break; ++ ++ pos &= ~3; ++ ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint8, pos, 1, &id); ++ ++ if (id == 0xff) ++ break; ++ ++ if (id == 0x01) ++ { ++ pm = pos; ++ break; ++ } ++ ++ pos += 1; ++ } ++ ++ if (pm) ++ { ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint16, pm + 4, 1, &pm_state); ++ ++ pm_state &= ~0x03; ++ pm_state |= 0x03; ++ ++ /* Set to D3 */ ++ ++ Call_Service_5 (pci_proto->pci.write, pci_proto, ++ grub_efi_pci_io_width_uint16, pm + 4, 1, &pm_state); ++ ++ Call_Service_5 (pci_proto->pci.read, pci_proto, ++ grub_efi_pci_io_width_uint16, pm + 4, 1, ++ &pm_state); ++ } ++ } ++} ++ ++void ++big_linux_boot (void) ++{ ++ struct linux_kernel_params *params; ++ struct grub_linux_kernel_header *lh; ++ grub_efi_uintn_t map_key; ++ grub_efi_uintn_t desc_size; ++ grub_efi_uint32_t desc_version; ++ int e820_nr_map; ++ ++ params = real_mode_mem; ++ ++ graphics_set_kernel_params (params); ++ ++ if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ /* Pass e820 memmap. */ ++ e820_map_from_efi_map ((struct e820_entry *) params->e820_map, &e820_nr_map, ++ mmap_buf, desc_size, mmap_size); ++ params->e820_nr_map = e820_nr_map; ++ ++ grub_efi_disable_network(); ++ ++ if (! grub_efi_exit_boot_services (map_key)) ++ grub_fatal ("cannot exit boot services"); ++ ++ /* Note that no boot services are available from here. */ ++ ++ /* copy vmlinuz image to hdr.code32_start */ ++ memcpy ((char *)(unsigned long)(params->hdr.code32_start), (char *)prot_mode_mem, ++ prot_kernel_size); ++ /* copy switch image */ ++ memcpy ((void *) 0x700, switch_image, switch_size); ++ ++ lh = ¶ms->hdr; ++ /* Pass EFI parameters. */ ++ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { ++ params->version_0206.efi_mem_desc_size = desc_size; ++ params->version_0206.efi_mem_desc_version = desc_version; ++ params->version_0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; ++ params->version_0206.efi_mmap_size = mmap_size; ++ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { ++ params->version_0204.efi_mem_desc_size = desc_size; ++ params->version_0204.efi_mem_desc_version = desc_version; ++ params->version_0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; ++ params->version_0204.efi_mmap_size = mmap_size; ++ } else /* dunno */ { ++ params->dunno.efi_mem_desc_size = desc_size; ++ params->dunno.efi_mem_desc_version = desc_version; ++ params->dunno.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; ++ params->dunno.efi_mmap_size = mmap_size; ++ params->dunno.efi_mmap_hi = PTR_HI(mmap_buf); ++ } ++ ++#ifdef __x86_64__ ++ /* Pass parameters. */ ++ asm volatile ("mov %0, %%rsi" : : "m" (real_mode_mem)); ++ asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start)); ++ ++ /* Enter Linux, switch from 64-bit long mode ++ * to 32-bit protect mode, this code end address ++ * must not exceed 0x1000, because linux kernel bootstrap ++ * code will flush this area ++ */ ++ asm volatile ( "mov $0x700, %%rdi" : :); ++ asm volatile ( "jmp *%%rdi" : :); ++#else ++ /* Pass parameters. */ ++ asm volatile ("mov %0, %%esi" : : "m" (real_mode_mem)); ++ asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start)); ++ ++ /* Enter Linux, switch from 64-bit long mode ++ * to 32-bit protect mode, this code end address ++ * must not exceed 0x1000, because linux kernel bootstrap ++ * code will flush this area ++ */ ++ asm volatile ( "mov $0x700, %%edi" : :); ++ asm volatile ( "jmp *%%edi" : :); ++#endif ++ ++ /* Never reach here. */ ++ for (;;); ++} ++ ++int ++grub_load_linux (char *kernel, char *arg) ++{ ++ struct grub_linux_kernel_header *lh; ++ struct linux_kernel_params *params; ++ static struct linux_kernel_params params_buf; ++ grub_uint8_t setup_sects; ++ grub_size_t real_size, prot_size; ++ grub_uint64_t kernel_base, kernel_length, kernel_pages; ++ grub_ssize_t len; ++ char *dest; ++ int align, min_alignment; ++ int relocatable = 0; ++ ++ if (kernel == NULL) ++ { ++ errnum = ERR_BAD_FILENAME; ++ grub_printf ("no kernel specified"); ++ goto fail1; ++ } ++ ++ if (! grub_open (kernel)) ++ goto fail1; ++ ++ if (grub_read ((char *) ¶ms_buf, sizeof (params_buf)) ++ != sizeof (params_buf)) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_printf ("cannot read the linux header"); ++ goto fail; ++ } ++ ++ lh = ¶ms_buf.hdr; ++ ++ if (lh->boot_flag != grub_cpu_to_le16 (0xaa55)) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_printf ("invalid magic number: %x", lh->boot_flag); ++ goto fail; ++ } ++ ++ /* EFI support is quite new, so reject old versions. */ ++ if (lh->header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) ++ || grub_le_to_cpu16 (lh->version) < 0x0203) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_printf ("too old version"); ++ goto fail; ++ } ++ ++ /* I'm not sure how to support zImage on EFI. */ ++ if (! (lh->loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ grub_printf ("zImage is not supported"); ++ goto fail; ++ } ++ ++ setup_sects = lh->setup_sects; ++ ++ real_size = 0x1000 + grub_strlen(arg); ++ prot_size = grub_file_size () - (setup_sects << SECTOR_BITS) - SECTOR_SIZE; ++ prot_kernel_size = prot_size; ++ ++ if (! allocate_pages (real_size, prot_size)) ++ goto fail; ++ ++ /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ ++ lh->type_of_loader = 0x50; ++ ++ lh->cmd_line_ptr = (grub_uint32_t) (unsigned long) real_mode_mem + 0x1000; ++ lh->ramdisk_image = 0; ++ lh->ramdisk_size = 0; ++ ++ grub_memset(real_mode_mem, 0, real_size); ++ ++ params = (struct linux_kernel_params *) real_mode_mem; ++ ++ grub_memmove(¶ms->hdr, lh, 0x202 + lh->jump_off - 0x1f1); ++ ++ params->cl_magic = GRUB_LINUX_CL_MAGIC; ++ params->cl_offset = 0x1000; ++ ++ /* These are not needed to be precise, because Linux uses these values ++ only to raise an error when the decompression code cannot find good ++ space. */ ++ params->ext_mem = ((32 * 0x100000) >> 10); ++ params->alt_mem = ((32 * 0x100000) >> 10); ++ ++ /* No APM on EFI. */ ++ params->apm_version = 0; ++ params->apm_code_segment = 0; ++ params->apm_entry = 0; ++ params->apm_16bit_code_segment = 0; ++ params->apm_data_segment = 0; ++ params->apm_flags = 0; ++ params->apm_code_len = 0; ++ params->apm_data_len = 0; ++ ++ /* XXX is there any way to use SpeedStep on EFI? */ ++ params->ist_signature = 0; ++ params->ist_command = 0; ++ params->ist_event = 0; ++ params->ist_perf_level = 0; ++ ++ /* Let the kernel probe the information. */ ++ grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info)); ++ grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info)); ++ ++ /* No MCA on EFI. */ ++ params->rom_config_len = 0; ++ ++ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { ++ grub_memcpy(¶ms->version_0204.efi_signature, "EL64", 4); ++ params->version_0206.efi_system_table = \ ++ (grub_uint32_t) (unsigned long) grub_efi_system_table; ++ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { ++ grub_memcpy(¶ms->version_0204.efi_signature, "EFIL", 4); ++ params->version_0204.efi_system_table = \ ++ (grub_uint32_t) (unsigned long) grub_efi_system_table; ++ } else /* dunno */ { ++ params->dunno.efi_signature = GRUB_LINUX_EFI_SIGNATURE_X64; ++ params->dunno.efi_system_table = \ ++ (grub_uint32_t) (unsigned long) grub_efi_system_table; ++ params->dunno.efi_system_table_hi = PTR_HI(grub_efi_system_table); ++ } ++ /* The other EFI parameters are filled when booting. */ ++ ++ /* No EDD */ ++ params->eddbuf_entries = 0; ++ params->edd_mbr_sig_buf_entries = 0; ++ ++ /* XXX there is no way to know if the kernel really supports EFI. */ ++ grub_printf ("[Linux-EFI, setup=0x%x, size=0x%x]\n", (unsigned int)real_size, ++ (unsigned int)prot_size); ++ ++ /* Check the mem= option to limit memory used for initrd. */ ++ { ++ char *mem; ++ ++ mem = grub_strstr (arg, "mem="); ++ if (mem) ++ { ++ char *value = mem + 4; ++ ++ safe_parse_maxulong (&value, &linux_mem_size); ++ switch (errnum) ++ { ++ case ERR_NUMBER_OVERFLOW: ++ /* If an overflow occurs, use the maximum address for ++ initrd instead. This is good, because MAXINT is ++ greater than LINUX_INITRD_MAX_ADDRESS. */ ++ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; ++ errnum = ERR_NONE; ++ break; ++ ++ case ERR_NONE: ++ { ++ int shift = 0; ++ ++ switch (grub_tolower (*value)) ++ { ++ case 'g': ++ shift += 10; ++ case 'm': ++ shift += 10; ++ case 'k': ++ shift += 10; ++ default: ++ break; ++ } ++ ++ /* Check an overflow. */ ++ if (linux_mem_size > (~0UL >> shift)) ++ linux_mem_size = 0; ++ else ++ linux_mem_size <<= shift; ++ } ++ break; ++ ++ default: ++ linux_mem_size = 0; ++ errnum = ERR_NONE; ++ break; ++ } ++ } ++ else ++ linux_mem_size = 0; ++ } ++ ++ dest = grub_stpcpy ((char *) real_mode_mem + 0x1000, skip_to(0, arg)); ++ ++ grub_seek ((setup_sects << SECTOR_BITS) + SECTOR_SIZE); ++ len = prot_size; ++ if (grub_read ((char *)prot_mode_mem, len) != len) ++ grub_printf ("Couldn't read file"); ++ ++ if (lh->version >= 0x205) { ++ for (align = lh->min_alignment; align < 32; align++) { ++ if (lh->kernel_alignment & (1 << align)) { ++ break; ++ } ++ } ++ relocatable = lh->relocatable_kernel; ++ } ++ ++ if (lh->version >= 0x20a) { ++ kernel_base = lh->pref_address; ++ kernel_length = lh->init_size; ++ min_alignment = lh->min_alignment; ++ } else { ++ kernel_base = lh->code32_start; ++ kernel_length = prot_kernel_size; ++ min_alignment = 0; ++ } ++ ++ kernel_pages = (kernel_length + 4095) >> 12; ++ ++ /* Attempt to allocate address space for the kernel */ ++ kernel_base = (grub_uint64_t)grub_efi_allocate_pages(kernel_base, kernel_pages); ++ ++ if (!kernel_base && relocatable) { ++ grub_efi_memory_descriptor_t *desc; ++ grub_efi_memory_descriptor_t tdesc; ++ grub_efi_uintn_t desc_size; ++ ++ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ while (align >= min_alignment) { ++ for (desc = mmap_buf; ++ desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); ++ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) ++ { ++ grub_uint64_t addr; ++ grub_uint64_t alignval = (1 << align) - 1; ++ ++ if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) ++ continue; ++ ++ memcpy(&tdesc, desc, sizeof(tdesc)); ++ ++ addr = (tdesc.physical_start + alignval) & ~(alignval); ++ ++ if ((addr + kernel_length) > ++ (tdesc.physical_start + (tdesc.num_pages << 12))) ++ continue; ++ ++ kernel_base = (grub_uint64_t)grub_efi_allocate_pages(addr, kernel_pages); ++ ++ if (kernel_base) { ++ lh->kernel_alignment = 1 << align; ++ break; ++ } ++ } ++ align--; ++ if (kernel_base) ++ break; ++ } ++ } ++ ++ if (!kernel_base) { ++ grub_printf("Failed to allocate kernel memory"); ++ errnum = ERR_UNRECOGNIZED; ++ goto fail; ++ } ++ ++ lh->code32_start = kernel_base; ++ ++ if (errnum == ERR_NONE) ++ { ++ loaded = 1; ++ } ++ ++ fail: ++ ++ grub_close (); ++ ++ fail1: ++ ++ if (errnum != ERR_NONE) ++ { ++ loaded = 0; ++ } ++ return errnum ? KERNEL_TYPE_NONE : KERNEL_TYPE_BIG_LINUX; ++} ++ ++int ++grub_load_initrd (char *initrd) ++{ ++ grub_ssize_t size; ++ grub_addr_t addr_min, addr_max; ++ grub_addr_t addr; ++ grub_efi_memory_descriptor_t *desc; ++ grub_efi_memory_descriptor_t tdesc; ++ grub_efi_uintn_t desc_size; ++ struct linux_kernel_params *params; ++ ++ if (initrd == NULL) ++ { ++ errnum = ERR_BAD_FILENAME; ++ grub_printf ("No module specified"); ++ goto fail1; ++ } ++ ++ if (! loaded) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("You need to load the kernel first."); ++ goto fail1; ++ } ++ ++ if (! grub_open (initrd)) ++ goto fail1; ++ ++ size = grub_file_size (); ++ initrd_pages = (page_align (size) >> 12); ++ ++ params = (struct linux_kernel_params *) real_mode_mem; ++ grub_dprintf(__func__, "initrd_pages: %lu\n", initrd_pages); ++ ++ addr_max = grub_cpu_to_le32 (params->hdr.initrd_addr_max); ++ if (linux_mem_size != 0 && linux_mem_size < addr_max) ++ addr_max = linux_mem_size; ++ addr_max &= ~((1 << 12)-1); ++ ++ /* Usually, the compression ratio is about 50%. */ ++ addr_min = 0; ++ ++ /* Find the highest address to put the initrd. */ ++ grub_dprintf(__func__, "addr_min: 0x%lx addr_max: 0x%lx mmap_size: %lu\n", addr_min, addr_max, mmap_size); ++ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) ++ grub_fatal ("cannot get memory map"); ++ ++ addr = 0; ++ for (desc = mmap_buf; ++ desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); ++ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) ++ { ++ if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) ++ continue; ++ memcpy(&tdesc, desc, sizeof (tdesc)); ++ if (tdesc.physical_start < addr_min ++ && tdesc.num_pages > ((addr_min - tdesc.physical_start) >> 12)) ++ { ++ tdesc.num_pages -= ((addr_min - tdesc.physical_start) >> 12); ++ tdesc.physical_start = addr_min; ++ } ++ ++ grub_dprintf(__func__, "desc = {type=%d,ps=0x%llx,vs=0x%llx,sz=%llu,attr=%llu}\n", desc->type, (unsigned long long)desc->physical_start, (unsigned long long)desc->virtual_start, (unsigned long long)desc->num_pages, (unsigned long long)desc->attribute); ++ if (tdesc.physical_start >= addr_min ++ && tdesc.physical_start + page_align (size) <= addr_max ++ && tdesc.num_pages >= initrd_pages) ++ { ++ grub_efi_physical_address_t physical_end; ++ ++ physical_end = tdesc.physical_start + (tdesc.num_pages << 12); ++ if (physical_end > addr_max) ++ physical_end = addr_max; ++ ++ if (physical_end <= 0x7fffffffUL && physical_end > addr) ++ addr = physical_end - page_align (size); ++ } ++ } ++ ++ if (addr == 0) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ grub_printf ("no free pages available"); ++ goto fail; ++ } ++ ++ initrd_mem = grub_efi_allocate_pages (addr, initrd_pages); ++ if (! initrd_mem) ++ grub_fatal ("cannot allocate pages: %x@%x", (unsigned)initrd_pages, ++ (unsigned)addr); ++ ++ if (grub_read (initrd_mem, size) != size) ++ { ++ grub_printf ("Couldn't read file"); ++ goto fail; ++ } ++ ++ grub_printf (" [Initrd, addr=0x%x, size=0x%x]\n", (unsigned int) addr, ++ (unsigned int) size); ++ ++ params->hdr.ramdisk_image = addr; ++ params->hdr.ramdisk_size = size; ++ params->hdr.root_dev = 0x0100; /* XXX */ ++ ++ fail: ++ grub_close (); ++ fail1: ++ return !errnum; ++} +diff --git a/efi/x86_64/loader/switch.S b/efi/x86_64/loader/switch.S +new file mode 100644 +index 0000000..d0d8dca +--- /dev/null ++++ b/efi/x86_64/loader/switch.S +@@ -0,0 +1,92 @@ ++# ++# Switch from protected mode to real mode and jump to setup.S ++# image located at %cx:0. ++# ++# This module must be placed into physical memory at 0:7C00h. ++# EFI has some real mode thunking code at 2000:0h. ++# ++# Processor and non-maskable interrupts should be disabled ++# before control is passed to this module. ++# ++ ++#define __KERNEL_CS 0x38 ++#define MSR_EFER 0xc0000080 ++#define _EFER_LME 8 /* Long mode enable */ ++ ++.global _start ++ ++.text ++_start: ++ # ++ # Load identity mapped GDT & real mode IDT. ++ # Add 7C00h to the addresses since this is linked to start ++ # at 0h and it is being placed at 7C00h. ++ # ++ ++ # fixme here EFI bios cs segment is 0x38 ++ # switch to IA32e compatible mode ++ # esi point to kernel parameter ++ # ebx point to kernel entry point ++.code64 ++ cli ++ cld ++ lgdt gdt_64 ++ lidt idt_64 ++ ljmp *exit_ia32e ++ ++ /* switch to IA32e compatible mode */ ++.code32 ++mode32: ++ # ++ # Turn off PG bit in CR0 and set CR3 to zero. ++ # ++ movl %cr0, %eax ++ andl $0x7FFFFFFF, %eax ++ movl %eax, %cr0 ++ ++ /* Setup EFER (Extended Feature Enable Register) */ ++ nop ++ nop ++ movl $0xc0000080, %ecx ++ rdmsr ++ /* Enable Long Mode */ ++ andl $0xFFFFFEFF, %eax ++ /* Make changes effective */ ++ wrmsr ++ ++ /* Disable PAE */ ++ xorl %eax, %eax ++ movl %eax, %cr4 ++ ++ jmp 2f ++2: ++ jmp *%ebx ++//jmp to kernel entry ++ ++.align 8 ++exit_ia32e: ++ .long mode32 ++ .long 0x10 ++ ++gdt_64: .word 0x08 * 9 -1 ++ .quad gdt ++ ++ .word 0, 0, 0 ++idt_64: .word 0 ++ .quad 0 ++ # ++ # GDT & IDT stuff for switching into 32 bit protected mode. ++ # ++ .word 0,0,0 ++gdt: ++ .quad 0x0000000000000000 /* NULL descriptor 0*/ ++ .quad 0x0 /* unused 0x08 */ ++ .quad 0x00cf9a000000ffff /* __KERNEL_CS 0x10 */ ++ .quad 0x00cf92000000ffff /* __KERNEL_DS 0x18 */ ++ .quad 0x00cf92000000ffff ++ .quad 0x00cf92000000ffff ++ .quad 0x00cf92000000ffff ++ .quad 0x00cf9a000000ffff /* __KERNEL32_CS 0x38*/ ++ .quad 0 /* unused */ ++.end ++ +diff --git a/efi/x86_64/loader/switch.h b/efi/x86_64/loader/switch.h +new file mode 100644 +index 0000000..b5dc39a +--- /dev/null ++++ b/efi/x86_64/loader/switch.h +@@ -0,0 +1,25 @@ ++unsigned char switch_image[] = { ++0xfa, 0xfc, 0x0f, 0x01, 0x14, 0x25, 0x48, 0x07, ++0x00, 0x00, 0x0f, 0x01, 0x1c, 0x25, 0x58, 0x07, ++0x00, 0x00, 0xff, 0x2c, 0x25, 0x40, 0x07, 0x00, ++0x00, 0x0f, 0x20, 0xc0, 0x25, 0xff, 0xff, 0xff, ++0x7f, 0x0f, 0x22, 0xc0, 0x90, 0x90, 0xb9, 0x80, ++0x00, 0x00, 0xc0, 0x0f, 0x32, 0x25, 0xff, 0xfe, ++0xff, 0xff, 0x0f, 0x30, 0x31, 0xc0, 0x0f, 0x22, ++0xe0, 0xeb, 0x00, 0xff, 0xe3, 0x8d, 0x76, 0x00, ++0x19, 0x07, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, ++0x47, 0x00, 0x68, 0x07, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, ++0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, ++0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, ++0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, ++0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, ++0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, ++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++}; ++int switch_size = sizeof switch_image; +diff --git a/efi/x86_64/reloc.c b/efi/x86_64/reloc.c +new file mode 100644 +index 0000000..b53eb63 +--- /dev/null ++++ b/efi/x86_64/reloc.c +@@ -0,0 +1,79 @@ ++/* reloc_x86_64.c - position independent x86_64 ELF shared object relocator ++ Copyright (C) 1999 Hewlett-Packard Co. ++ Contributed by David Mosberger . ++ Copyright (C) 2005 Intel Co. ++ Contributed by Fenghua Yu . ++ ++ This file is part of GNU-EFI, the GNU EFI development environment. ++ ++ GNU EFI is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GNU EFI is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GNU EFI; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#include ++#include ++#include ++ ++grub_efi_status_t _relocate (long ldbase, ElfW(Dyn) *dyn, ++ grub_efi_handle_t image_handle, ++ grub_efi_system_table_t *sys_tab) ++{ ++ //extern EFI_STATUS efi_main (EFI_HANDLE, EFI_SYSTEM_TABLE *); ++ long relsz = 0, relent = 0; ++ ElfW(Rel) *rel = 0; ++ unsigned long *addr; ++ int i; ++ ++ for (i = 0; dyn[i].d_tag != DT_NULL; ++i) { ++ switch (dyn[i].d_tag) { ++ case DT_RELA: ++ rel = (ElfW(Rel)*) ((long) dyn[i].d_un.d_ptr + ldbase); ++ break; ++ ++ case DT_RELASZ: ++ relsz = dyn[i].d_un.d_val; ++ break; ++ ++ case DT_RELAENT: ++ relent = dyn[i].d_un.d_val; ++ break; ++ ++ default: ++ break; ++ } ++ } ++ ++ if (!rel || relent == 0){ ++ return GRUB_EFI_LOAD_ERROR; ++ } ++ while (relsz > 0) { ++ /* apply the relocs */ ++ switch (ELF64_R_TYPE (rel->r_info)) { ++ case R_X86_64_NONE: ++ break; ++ ++ case R_X86_64_RELATIVE: ++ addr = (unsigned long *) (ldbase + rel->r_offset); ++ *addr += ldbase; ++ break; ++ ++ default: ++ break; ++ } ++ rel = (ElfW(Rel)*) ((char *) rel + relent); ++ relsz -= relent; ++ } ++ return GRUB_EFI_SUCCESS; ++} ++ +diff --git a/efi/x86_64/setjmp.S b/efi/x86_64/setjmp.S +new file mode 100644 +index 0000000..e042a14 +--- /dev/null ++++ b/efi/x86_64/setjmp.S +@@ -0,0 +1,56 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2003 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++ ++ .file "setjmp.S" ++ ++ .text ++ ++/* ++ * int grub_setjmp (grub_jmp_buf env) ++ */ ++FUNCTION(grub_setjmp) ++ pop %rsi /* Return address, and adjust the stack */ ++ xor %rax, %rax ++ movq %rbx, 0(%rdi) /* RBX */ ++ movq %rsp, 8(%rdi) /* RSP */ ++ push %rsi ++ movq %rbp, 16(%rdi) /* RBP */ ++ movq %r12, 24(%rdi) /* R12 */ ++ movq %r13, 32(%rdi) /* R13 */ ++ movq %r14, 40(%rdi) /* R14 */ ++ movq %r15, 48(%rdi) /* R15 */ ++ movq %rsi, 56(%rdi) /* RSI */ ++ ret ++ ++/* ++ * int grub_longjmp (grub_jmp_buf env, int val) ++ */ ++FUNCTION(grub_longjmp) ++ movl %esi, %eax ++ movq (%rdi), %rbx ++ movq 8(%rdi), %rsp ++ movq 16(%rdi), %rbp ++ movq 24(%rdi), %r12 ++ movq 32(%rdi), %r13 ++ movq 40(%rdi), %r14 ++ movq 48(%rdi), %r15 ++ jmp *56(%rdi) ++ +diff --git a/efi/xpm.c b/efi/xpm.c +new file mode 100644 +index 0000000..085a10c +--- /dev/null ++++ b/efi/xpm.c +@@ -0,0 +1,231 @@ ++ ++#if defined(SUPPORT_GRAPHICS) || defined(PLATFORM_EFI) || 1 ++ ++#include ++#include ++#include ++ ++#include "xpm.h" ++ ++unsigned char ++xpm_get_pixel_idx(struct xpm *xpm, int x, int y) ++{ ++ if (x < 0 || x >= xpm->width) ++ return -1; ++ if (y < 0 || y >= xpm->width) ++ return -1; ++ return xpm->image[x + (y * xpm->width)]; ++} ++ ++void ++xpm_set_pixel_idx(struct xpm *xpm, int x, int y, unsigned char idx) ++{ ++ xpm->image[y * xpm->width + x] = idx; ++} ++ ++void ++xpm_get_idx(struct xpm *xpm, unsigned char idx, xpm_pixel_t *pixel) ++{ ++ xpm_pixel_t *xpl; ++ if (!pixel) ++ return; ++ if (idx >= xpm->colors) { ++ pixel->red = pixel->green = pixel->blue = 0; ++ return; ++ } ++ xpl = &xpm->palette[idx]; ++ memcpy(pixel, xpl, sizeof (*pixel)); ++// pixel->red = xpl->red; ++// pixel->green = xpl->green; ++// pixel->blue = xpl->blue; ++} ++ ++int ++xpm_get_pixel(struct xpm *xpm, int x, int y, xpm_pixel_t *pixel) ++{ ++ unsigned char idx; ++ idx = xpm_get_pixel_idx(xpm, x, y); ++ xpm_get_idx(xpm, idx, pixel); ++ return 1; ++} ++ ++static int ++hex_to_int(int v) ++{ ++ if (v >= 'A' && v <= 'F') ++ return (v - 'A' + 10); ++ if (v >= 'a' && v <= 'f') ++ return (v - 'a' + 10); ++ return (v - '0'); ++} ++ ++struct xpm * ++xpm_open(char *path) ++{ ++ char c, prev, target[]="/* XPM */\n", base; ++ char buf[32]; ++ int pos = 0; ++ unsigned int i, idx, len, x, y; ++ unsigned char pal[XPM_MAX_COLORS]; ++ struct xpm *xpm; ++ ++ xpm = grub_malloc(sizeof (*xpm)); ++ if (!xpm) ++ return NULL; ++ ++ if (!grub_open(path)) { ++ grub_free(xpm); ++ grub_printf("grub_open(\"%s\") failed\n", path); ++ return NULL; ++ } ++ ++ grub_memset(xpm, '\0', sizeof (*xpm)); ++ ++ prev = '\n'; ++ c = 0; ++ do { ++ if (grub_read(&c, 1) != 1) { ++ grub_printf("grub_read() failed\n"); ++ grub_free(xpm); ++ grub_close(); ++ return NULL; ++ } ++ if ((pos == 0 && prev == '\n') || pos > 0) { ++ if (c == target[pos]) ++ pos++; ++ else ++ pos = 0; ++ } ++ prev = c; ++ } while (target[pos]); ++ ++ /* parse info */ ++ while (grub_read(&c, 1)) { ++ if (c == '"') ++ break; ++ } ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ i = 0; ++ xpm->width = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ xpm->width = xpm->width * 10 + c - '0'; ++ else ++ break; ++ } ++ if (xpm->width > XPM_MAX_WIDTH) { ++ grub_printf("xpm->width (%d) was greater than XPM_MAX_WIDTH (%d)\n", ++ xpm->width, XPM_MAX_WIDTH); ++ grub_free(xpm); ++ grub_close(); ++ return NULL; ++ } ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ xpm->height = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ xpm->height = xpm->height * 10 + c - '0'; ++ else ++ break; ++ } ++ if (xpm->height > XPM_MAX_HEIGHT) { ++ grub_printf("xpm->height (%d) was greater than XPM_MAX_HEIGHT (%d)\n", ++ xpm->height, XPM_MAX_HEIGHT); ++ grub_free(xpm); ++ grub_close(); ++ return NULL; ++ } ++ ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ xpm->colors = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ xpm->colors = xpm->colors * 10 + c - '0'; ++ else ++ break; ++ } ++ ++ base = 0; ++ while (grub_read(&c, 1) && c != '"') ++ ; ++ ++ /* palette */ ++ for (i = 0, idx = 1; i < xpm->colors; i++) { ++ len = 0; ++ ++ while (grub_read(&c, 1) && c != '"') ++ ; ++ grub_read(&c, 1); /* char */ ++ base = c; ++ grub_read(buf, 4); /* \t c # */ ++ ++ while (grub_read(&c, 1) && c != '"') { ++ if (len < sizeof(buf)) ++ buf[len++] = c; ++ } ++ ++ if (len == 6 && idx < xpm->colors) { ++ unsigned char r, g, b; ++ ++ r = (hex_to_int(buf[0]) << 4) | hex_to_int(buf[1]); ++ g = (hex_to_int(buf[2]) << 4) | hex_to_int(buf[3]); ++ b = (hex_to_int(buf[4]) << 4) | hex_to_int(buf[5]); ++ ++ pal[idx] = base; ++ xpm->palette[idx].red = r; ++ xpm->palette[idx].green = g; ++ xpm->palette[idx].blue = b; ++ ++idx; ++ } ++ } ++ ++ /* parse xpm data */ ++ x = y = 0; ++ while (y < xpm->height) { ++ xpm_pixel_t *pixel = NULL; ++ while (1) { ++ if (!grub_read(&c, 1)) { ++ grub_printf("%s %s:%d grub_read() failed\n", __FILE__, __func__, __LINE__); ++ grub_free(xpm); ++ grub_close(); ++ return NULL; ++ } ++ if (c == '"') ++ break; ++ } ++ ++ while (grub_read(&c, 1) && c != '"') { ++ unsigned char *iaddr = NULL; ++ for (i = 1; i < xpm->colors; i++) ++ if (pal[i] == c) { ++ idx = i; ++ break; ++ } ++ ++ xpm_set_pixel_idx(xpm, x, y, idx); ++ ++ if (++x >= xpm->width) { ++ x = 0; ++ ++ ++y; ++ } ++ } ++ } ++ grub_close(); ++ return xpm; ++} ++ ++void ++xpm_free(struct xpm *xpm) ++{ ++ grub_free(xpm); ++} ++ ++ ++#endif /* SUPPORT_GRAPHICS || PLATFORM_EFI */ +diff --git a/efi/xpm.h b/efi/xpm.h +new file mode 100644 +index 0000000..258abc1 +--- /dev/null ++++ b/efi/xpm.h +@@ -0,0 +1,36 @@ ++#ifndef GRUB_XPM_H ++#define GRUB_XPM_H ++ ++#include ++ ++#define XPM_MAX_COLORS 31 ++#define XPM_MAX_WIDTH 640 ++#define XPM_MAX_HEIGHT 480 ++ ++struct xpm_pixel { ++ unsigned char reserved; ++ unsigned char red; ++ unsigned char green; ++ unsigned char blue; ++}; ++typedef struct xpm_pixel xpm_pixel_t; ++ ++struct xpm { ++ int colors; ++ xpm_pixel_t palette[32]; ++ ++ int width; ++ int height; ++ unsigned char image[XPM_MAX_WIDTH * XPM_MAX_HEIGHT]; ++}; ++ ++extern struct xpm *xpm_open(char *path); ++extern void xpm_free(struct xpm *xpm); ++ ++extern unsigned char xpm_get_pixel_idx(struct xpm *xpm, int x, int y); ++extern void xpm_set_pixel_idx(struct xpm *xpm, int x, int y, unsigned char idx); ++extern int xpm_get_pixel(struct xpm *xpm, int x, int y, xpm_pixel_t *pixel); ++ ++extern void xpm_get_idx(struct xpm *xpm, unsigned char idx, xpm_pixel_t *pixel); ++ ++#endif /* GRUB_XPM_H */ +diff --git a/grub.spec b/grub.spec +new file mode 100644 +index 0000000..7e5982d +--- /dev/null ++++ b/grub.spec +@@ -0,0 +1,438 @@ ++Name: grub ++Version: 0.97 ++Release: 20%{?dist} ++Summary: GRUB - the Grand Unified Boot Loader. ++Group: System Environment/Base ++License: GPLv2+ ++ ++ExclusiveArch: i386 x86_64 ++BuildRequires: binutils >= 2.9.1.0.23, ncurses-devel, ncurses-static, texinfo ++BuildRequires: autoconf /usr/lib/crt1.o automake ++PreReq: /sbin/install-info ++Requires: mktemp ++Requires: /usr/bin/cmp ++Requires: system-logos ++BuildRoot: %{_tmppath}/%{name}-%{version}-root ++ ++URL: http://www.gnu.org/software/%{name}/ ++Source0: ftp://alpha.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz ++Patch0: grub-fedora-9.patch ++ ++%description ++GRUB (Grand Unified Boot Loader) is an experimental boot loader ++capable of booting into most free operating systems - Linux, FreeBSD, ++NetBSD, GNU Mach, and others as well as most commercial operating ++systems. ++ ++%prep ++%setup -q ++%patch0 -p1 -b .fedora-9 ++ ++%build ++autoreconf ++autoconf ++GCCVERS=$(gcc --version | head -1 | cut -d\ -f3 | cut -d. -f1) ++CFLAGS="-Os -g -fno-strict-aliasing -Wall -Werror -Wno-shadow -Wno-unused" ++if [ "$GCCVERS" == "4" ]; then ++ CFLAGS="$CFLAGS -Wno-pointer-sign" ++fi ++export CFLAGS ++%ifarch x86_64 ++%configure --sbindir=/sbin --disable-auto-linux-mem-opt --datarootdir=%{_datadir} --with-platform=efi ++make ++rm -fr $RPM_BUILD_ROOT ++%makeinstall sbindir=${RPM_BUILD_ROOT}/sbin ++mv ${RPM_BUILD_ROOT}/sbin/grub ${RPM_BUILD_ROOT}/sbin/grub-efi ++make clean ++autoreconf ++autoconf ++CFLAGS="$CFLAGS -static" ++export CFLAGS ++%endif ++%configure --sbindir=/sbin --disable-auto-linux-mem-opt --datarootdir=%{_datadir} ++make ++ ++%install ++%makeinstall sbindir=${RPM_BUILD_ROOT}/sbin ++mkdir -p ${RPM_BUILD_ROOT}/boot/grub ++ ++rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir ++ ++%clean ++rm -fr $RPM_BUILD_ROOT ++ ++%post ++if [ "$1" = 1 ]; then ++ /sbin/install-info --info-dir=%{_infodir} %{_infodir}/grub.info.gz || : ++ /sbin/install-info --info-dir=%{_infodir} %{_infodir}/multiboot.info.gz || : ++fi ++ ++%preun ++if [ "$1" = 0 ] ;then ++ /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/grub.info.gz || : ++ /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/multiboot.info.gz || : ++fi ++ ++%files ++%defattr(-,root,root) ++%doc AUTHORS ChangeLog NEWS README COPYING TODO docs/menu.lst ++/boot/grub ++/sbin/grub ++/sbin/grub-install ++/sbin/grub-terminfo ++/sbin/grub-md5-crypt ++%{_bindir}/mbchk ++%{_infodir}/grub* ++%{_infodir}/multiboot* ++%{_mandir}/man*/* ++%{_datadir}/grub ++%ifarch x86_64 ++/sbin/grub-efi ++%endif ++ ++%changelog ++* Mon Nov 05 2007 Peter Jones - 0.97-20 ++- Add EFI support from Intel on x86_64 ++ ++* Thu Sep 20 2007 Peter Jones - 0.97-19 ++- Fix dmraid detection on Intel (isw) controllers in grub-install . ++ ++* Wed Aug 22 2007 Peter Jones - 0.97-18 ++- Fix license tag. ++ ++* Mon Aug 20 2007 Peter Jones - 0.97-17 ++- Use --build-id=none instead of stripping out the build-id notes in the ++ first and second stage loaders. ++ ++* Tue Aug 7 2007 Peter Jones - 0.97-16 ++- Add ext[23] large inode support (patch from Eric Sandeen) ++- Fix auto* breakage that happened when we switched from autoreconf to autoconf ++- Move to original tarball + patch generated from git ++ ++* Mon Jul 16 2007 Peter Jones - 0.97-15 ++- Support booting from GPT ++ ++* Fri Feb 23 2007 Bill Nottingham - 0.97-14 ++- fix scriplet errors when installed with --nodocs ++- coax grub into building (-ltinfo, autoconf instead of autoreconf) ++ ++* Sun Oct 01 2006 Jesse Keating - 0.97-13 ++- rebuilt for unwind info generation, broken in gcc-4.1.1-21 ++ ++* Thu Sep 21 2006 Peter Jones - 0.97-12 ++- Reenable patch 505, which fixes #116311 ++ ++* Tue Aug 15 2006 Peter Jones - 0.97-11 ++- Disable patch 505 (#164497) ++ ++* Wed Aug 2 2006 Peter Jones - 0.97-10 ++- Fix grub-install for multipath ++ ++* Wed Jul 12 2006 Jesse Keating - 0.97-9.1 ++- rebuild ++ ++* Fri Jul 7 2006 Peter Jones - 0.97-9 ++- fix broken error reporting from helper functions ++ ++* Mon Jun 12 2006 Peter Jones - 0.97-8 ++- Fix BIOS keyboard handler to use extended keyboard interrupts, so the ++ Mac Mini works. ++ ++* Mon Jun 5 2006 Jesse Keating - 0.97-7 ++- Added BuildRequires on a 32bit library ++ ++* Sat May 27 2006 Peter Jones - 0.97-6 ++- Fix mactel keyboard problems, patch from Juergen Keil, forwarded by Linus. ++ ++* Mon Mar 13 2006 Peter Jones - 0.97-5 ++- Fix merge error for "bootonce" patch (broken in 0.95->0.97 update) ++- Get rid of the 0.97 "default" stuff, since it conflicts with our working ++ method. ++ ++* Mon Mar 9 2006 Peter Jones - 0.97-4 ++- Fix running "install" multiple times on the same fs in the same invocation ++ of grub. (bz #158426 , patch from lxo@redhat.com) ++ ++* Mon Feb 13 2006 Peter Jones - 0.97-3 ++- fix partition names on dmraid ++ ++* Tue Feb 07 2006 Jesse Keating - 0.97-2.1 ++- rebuilt for new gcc4.1 snapshot and glibc changes ++ ++* Fri Jan 13 2006 Peter Jones - 0.97-2 ++- add dmraid support ++ ++* Wed Dec 14 2005 Peter Jones - 0.97-1 ++- update to grub 0.97 ++ ++* Mon Dec 5 2005 Peter Jones - 0.95-17 ++- fix configure conftest.c bugs ++- add -Wno-unused to defeat gcc41 "unused" checking when there are aliases. ++ ++* Mon Aug 1 2005 Peter Jones - 0.95-16 ++- minor fix to the --recheck fix. ++ ++* Mon Jul 25 2005 Peter Jones 0.95-15 ++- Make "grub-install --recheck" warn the user about how bad it is, ++ and keep a backup file, which it reverts to upon detecting some errors. ++ ++* Wed Jul 6 2005 Peter Jones 0.95-14 ++- Fix changelog to be UTF-8 ++ ++* Thu May 19 2005 Peter Jones 0.95-13 ++- Make the spec work with gcc3 and gcc4, so people can test on existing ++ installations. ++- don't treat i2o like a cciss device, since its partition names aren't done ++ that way. (#158158) ++ ++* Wed Mar 16 2005 Peter Jones 0.95-12 ++- Make installing on a partition work again when not using raid ++ ++* Thu Mar 3 2005 Peter Jones 0.95-11 ++- Make it build with gcc4 ++ ++* Sun Feb 20 2005 Peter Jones 0.95-10 ++- Always install in MBR for raid1 /boot/ ++ ++* Sun Feb 20 2005 Peter Jones 0.95-9 ++- Always use full path for mdadm in grub-install ++ ++* Tue Feb 8 2005 Peter Jones 0.95-8 ++- Mark the simulation stack executable ++- Eliminate the use of inline functions in stage2/builtins.c ++ ++* Wed Jan 11 2005 Peter Jones 0.95-7 ++- Make grub ignore everything before the XPM header in the splash image, ++ fixing #143879 ++- If the boot splash image is missing, use console mode instead ++ of graphics mode. ++- Don't print out errors using the graphics terminal code if we're not ++ actually in graphics mode. ++ ++* Mon Jan 3 2005 Peter Jones 0.95-6 ++- reworked much of how the RAID1 support in grub-install works. This version ++ does not require all the devices in the raid to be listed in device.map, ++ as long as you specify a physical device or partition rather than an md ++ device. It should also work with a windows dual-boot on the first partition. ++ ++* Fri Dec 17 2004 Peter Jones 0.95-5 ++- added support for RAID1 devices to grub-install, partly based on a ++ patch from David Knierim. (#114690) ++ ++* Tue Nov 30 2004 Jeremy Katz 0.95-4 ++- add patch from upstream CVS to handle sparse files on ext[23] ++- make geometry detection a little bit more robust/correct ++- use O_DIRECT when reading/writing from devices. use aligned buffers as ++ needed for read/write (#125808) ++- actually apply the i2o patch ++- detect cciss/cpqarray devices better (#123249) ++ ++* Thu Sep 30 2004 Jeremy Katz - 0.95-3 ++- don't act on the keypress for the menu (#134029) ++ ++* Mon Jun 28 2004 Jeremy Katz - 0.95-2 ++- add patch from Nicholas Miell to make hiddenmenu work more ++ nicely with splashimage mode (#126764) ++ ++* Fri Jun 18 2004 Jeremy Katz - 0.95-1 ++- update to 0.95 ++- drop emd patch, E-MD isn't making forward progress upstream ++- fix static build for x86_64 (#121095) ++ ++* Tue Jun 15 2004 Elliot Lee ++- rebuilt ++ ++* Wed Jun 9 2004 Jeremy Katz ++- require system-logos (#120837) ++ ++* Fri Jun 4 2004 Jeremy Katz ++- buildrequire automake (#125326) ++ ++* Thu May 06 2004 Warren Togami - 0.94-5 ++- i2o patch from Markus Lidel ++ ++* Wed Apr 14 2004 Jeremy Katz - 0.94-4 ++- read geometry off of the disk since HDIO_GETGEO doesn't actually ++ return correct data with a 2.6 kernel ++ ++* Fri Mar 12 2004 Jeremy Katz ++- add texinfo buildrequires (#118146) ++ ++* Wed Feb 25 2004 Jeremy Katz 0.94-3 ++- don't use initrd_max_address ++ ++* Fri Feb 13 2004 Elliot Lee 0.94-2 ++- rebuilt ++ ++* Thu Feb 12 2004 Jeremy Katz 0.94-1 ++- update to 0.94, patch merging and updating as necessary ++ ++* Sat Jan 3 2004 Jeremy Katz 0.93-8 ++- new bootonce patch from Padraig Brady so that you don't lose ++ the old default (#112775) ++ ++* Mon Nov 24 2003 Jeremy Katz ++- add ncurses-devel as a buildrequires (#110732) ++ ++* Tue Oct 14 2003 Jeremy Katz 0.93-7 ++- rebuild ++ ++* Wed Jul 2 2003 Jeremy Katz ++- Requires: /usr/bin/cmp (#98325) ++ ++* Thu May 22 2003 Jeremy Katz 0.93-6 ++- add patch from upstream to fix build with gcc 3.3 ++ ++* Wed Apr 2 2003 Jeremy Katz 0.93-5 ++- add patch to fix support for serial terminfo (#85595) ++ ++* Wed Jan 22 2003 Tim Powers ++- rebuilt ++ ++* Fri Jan 17 2003 Jeremy Katz 0.93-3 ++- add patch from HJ Lu to support large disks (#80980, #63848) ++- add patch to make message when ending edit clearer (#53846) ++ ++* Sun Dec 29 2002 Jeremy Katz 0.93-2 ++- add a patch to reset the terminal type to console before doing 'boot' from ++ the command line (#61069) ++ ++* Sat Dec 28 2002 Jeremy Katz 0.93-1 ++- update to 0.93 ++- update configfile patch ++- graphics patch rework to fit in as a terminal type as present in 0.93 ++- use CFLAGS="-Os -g" ++- patch configure.in to allow building if host_cpu=x86_64, include -m32 in ++ CFLAGS if building on x86_64 ++- link glibc static on x86_64 to not require glibc32 ++- include multiboot info pages ++- drop obsolete patches, reorder remaining patches into some semblance of order ++ ++* Thu Sep 5 2002 Jeremy Katz 0.92-7 ++- splashscreen is in redhat-logos now ++ ++* Tue Sep 3 2002 Jeremy Katz 0.92-6 ++- update splashscreen again ++ ++* Mon Sep 2 2002 Jeremy Katz 0.92-5 ++- update splashscreen ++ ++* Fri Jun 21 2002 Tim Powers 0.92-4 ++- automated rebuild ++ ++* Thu May 23 2002 Tim Powers 0.92-3 ++- automated rebuild ++ ++* Fri May 3 2002 Jeremy Katz 0.92-2 ++- add patch from Grant Edwards to make vga16 + serial happier (#63491) ++ ++* Wed May 1 2002 Jeremy Katz 0.92-1 ++- update to 0.92 ++- back to autoreconf ++- make it work with automake 1.6/autoconf 2.53 ++- use "-falign-jumps=1 -falign-loops=1 -falign-functions=1" instead of ++ "-malign-jumps=1 -malign-loops=1 -malign-functions=1" to not use ++ deprecated gcc options ++ ++* Tue Apr 9 2002 Jeremy Katz 0.91-4 ++- new splash screen ++ ++* Fri Mar 8 2002 Jeremy Katz 0.91-3 ++- include patch from Denis Kitzmen to fix typo causing several options to ++ never be defined (in upstream CVS) ++- include patch from upstream CVS to make displaymem always use hex for ++ consistency ++- add patch from GRUB mailing list from Keir Fraser to add a --once flag to ++ savedefault function so that you can have the equivalent of lilo -R ++ functionality (use 'savedefault --default=N --once' from the grub shell) ++- back to autoconf ++ ++* Sun Jan 27 2002 Jeremy Katz ++- change to use $grubdir instead of /boot/grub in the symlink patch (#58771) ++ ++* Fri Jan 25 2002 Jeremy Katz 0.91-2 ++- don't ifdef out the auto memory passing, use the configure flag instead ++- add a patch so that grub respects mem= from the kernel command line when ++ deciding where to place the initrd (#52558) ++ ++* Mon Jan 21 2002 Jeremy Katz 0.91-1 ++- update to 0.91 final ++- add documentation on splashimage param (#51609) ++ ++* Wed Jan 2 2002 Jeremy Katz 0.91-0.20020102cvs ++- update to current CVS snapshot to fix some of the hangs on boot related ++ to LBA probing (#57503, #55868, and others) ++ ++* Fri Dec 21 2001 Erik Troan 0.90-14 ++- fixed append patch to not require arguments to begin with ++- changed to autoreconf from autoconf ++ ++* Wed Oct 31 2001 Jeremy Katz 0.90-13 ++- include additional patch from Erich to add sync calls in grub-install to ++ work around updated images not being synced to disk ++- fix segfault in grub shell if 'password --md5' is used without specifying ++ a password (#55008) ++ ++* Fri Oct 26 2001 Jeremy Katz 0.90-12 ++- Include Erich Boleyn 's patch to disconnect from the ++ BIOS after APM operations. Should fix #54375 ++ ++* Wed Sep 12 2001 Erik Troan ++- added patch for 'a' option in grub boot menu ++ ++* Wed Sep 5 2001 Jeremy Katz 0.90-11 ++- grub-install: if /boot/grub/grub.conf doesn't exist but /boot/grub/menu.lst ++ does, create a symlink ++ ++* Fri Aug 24 2001 Jeremy Katz ++- pull in patch from upstream CVS to fix md5crypt in grub shell (#52220) ++- use mktemp in grub-install to avoid tmp races ++ ++* Fri Aug 3 2001 Jeremy Katz ++- link curses statically (#49519) ++ ++* Thu Aug 2 2001 Jeremy Katz ++- fix segfault with using the serial device before initialization (#50219) ++ ++* Thu Jul 19 2001 Jeremy Katz ++- add --copy-only flag to grub-install ++ ++* Thu Jul 19 2001 Jeremy Katz ++- copy files in grub-install prior to device probe ++ ++* Thu Jul 19 2001 Jeremy Katz ++- original images don't go in /boot and then grub-install does the right ++ thing ++ ++* Thu Jul 19 2001 Jeremy Katz ++- fix the previous patch ++- put the password prompt in the proper location ++ ++* Thu Jul 19 2001 Jeremy Katz ++- reset the screen when the countdown is cancelled so text will disappear ++ in vga16 mode ++ ++* Mon Jul 16 2001 Jeremy Katz ++- change configfile defaults to grub.conf ++ ++* Sun Jul 15 2001 Jeremy Katz ++- updated to grub 0.90 final ++ ++* Fri Jul 6 2001 Matt Wilson ++- modifed splash screen to a nice shade of blue ++ ++* Tue Jul 3 2001 Matt Wilson ++- added a first cut at a splash screen ++ ++* Sun Jul 1 2001 Nalin Dahyabhai ++- fix datadir mismatch between build and install phases ++ ++* Mon Jun 25 2001 Jeremy Katz ++- update to current CVS ++- forward port VGA16 patch from Paulo César Pereira de ++ Andrade ++- add patch for cciss, ida, and rd raid controllers ++- don't pass mem= to the kernel ++ ++* Wed May 23 2001 Erik Troan ++- initial build for Red Hat +diff --git a/grub/.gitignore b/grub/.gitignore +new file mode 100644 +index 0000000..5d89f6d +--- /dev/null ++++ b/grub/.gitignore +@@ -0,0 +1,2 @@ ++Makefile.in ++.deps +diff --git a/grub/Makefile.am b/grub/Makefile.am +index 7eb2eaa..d4353f7 100644 +--- a/grub/Makefile.am ++++ b/grub/Makefile.am +@@ -15,5 +15,5 @@ AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ + + AM_CFLAGS = $(GRUB_CFLAGS) + +-grub_SOURCES = main.c asmstub.c ++grub_SOURCES = main.c asmstub.c efitftp.c + grub_LDADD = ../stage2/libgrub.a ../lib/libcommon.a $(GRUB_LIBS) +diff --git a/grub/Makefile.in b/grub/Makefile.in +deleted file mode 100644 +index 136c38f..0000000 +--- a/grub/Makefile.in ++++ /dev/null +@@ -1,445 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +-SOURCES = $(grub_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-sbin_PROGRAMS = grub$(EXEEXT) +-subdir = grub +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-am__installdirs = "$(DESTDIR)$(sbindir)" +-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +-PROGRAMS = $(sbin_PROGRAMS) +-am_grub_OBJECTS = main.$(OBJEXT) asmstub.$(OBJEXT) +-grub_OBJECTS = $(am_grub_OBJECTS) +-am__DEPENDENCIES_1 = +-grub_DEPENDENCIES = ../stage2/libgrub.a ../lib/libcommon.a \ +- $(am__DEPENDENCIES_1) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(grub_SOURCES) +-DIST_SOURCES = $(grub_SOURCES) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-@SERIAL_SPEED_SIMULATION_FALSE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 +-@SERIAL_SPEED_SIMULATION_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -DSIMULATE_SLOWNESS_OF_SERIAL=1 +-AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ +- -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ +- -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ +- -DUSE_MD5_PASSWORDS=1 -DSUPPORT_HERCULES=1 \ +- $(SERIAL_FLAGS) -I$(top_srcdir)/stage2 \ +- -I$(top_srcdir)/stage1 -I$(top_srcdir)/lib +- +-AM_CFLAGS = $(GRUB_CFLAGS) +-grub_SOURCES = main.c asmstub.c +-grub_LDADD = ../stage2/libgrub.a ../lib/libcommon.a $(GRUB_LIBS) +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .c .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grub/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu grub/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-install-sbinPROGRAMS: $(sbin_PROGRAMS) +- @$(NORMAL_INSTALL) +- test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)" +- @list='$(sbin_PROGRAMS)'; for p in $$list; do \ +- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ +- if test -f $$p \ +- ; then \ +- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ +- echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ +- $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \ +- else :; fi; \ +- done +- +-uninstall-sbinPROGRAMS: +- @$(NORMAL_UNINSTALL) +- @list='$(sbin_PROGRAMS)'; for p in $$list; do \ +- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ +- echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ +- rm -f "$(DESTDIR)$(sbindir)/$$f"; \ +- done +- +-clean-sbinPROGRAMS: +- -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) +-grub$(EXEEXT): $(grub_OBJECTS) $(grub_DEPENDENCIES) +- @rm -f grub$(EXEEXT) +- $(LINK) $(grub_LDFLAGS) $(grub_OBJECTS) $(grub_LDADD) $(LIBS) +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asmstub.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +- +-.c.o: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< +- +-.c.obj: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +-uninstall-info-am: +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(PROGRAMS) +-installdirs: +- for dir in "$(DESTDIR)$(sbindir)"; do \ +- test -z "$$dir" || $(mkdir_p) "$$dir"; \ +- done +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-exec-am: install-sbinPROGRAMS +- +-install-info: install-info-am +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-info-am uninstall-sbinPROGRAMS +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +- clean-sbinPROGRAMS ctags distclean distclean-compile \ +- distclean-generic distclean-tags distdir dvi dvi-am html \ +- html-am info info-am install install-am install-data \ +- install-data-am install-exec install-exec-am install-info \ +- install-info-am install-man install-sbinPROGRAMS install-strip \ +- installcheck installcheck-am installdirs maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-compile \ +- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ +- uninstall-am uninstall-info-am uninstall-sbinPROGRAMS +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/grub/asmstub.c b/grub/asmstub.c +index ab95b4b..818be75 100644 +--- a/grub/asmstub.c ++++ b/grub/asmstub.c +@@ -42,6 +42,7 @@ int grub_stage2 (void); + #include + #include + #include ++#include + + #ifdef __linux__ + # include /* ioctl */ +@@ -53,6 +54,9 @@ int grub_stage2 (void); + # ifndef BLKFLSBUF + # define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ + # endif /* ! BLKFLSBUF */ ++# ifndef O_DIRECT ++# define O_DIRECT 040000 ++# endif /* ! O_DIRECT */ + #endif /* __linux__ */ + + /* We want to prevent any circularararity in our stubs, as well as +@@ -71,7 +75,7 @@ unsigned long install_partition = 0x20000; + unsigned long boot_drive = 0; + int saved_entryno = 0; + char version_string[] = VERSION; +-char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */ ++char config_file[128] = "/boot/grub/grub.conf"; /* FIXME: arbitrary */ + unsigned long linux_text_len = 0; + char *linux_data_tmp_addr = 0; + char *linux_data_real_addr = 0; +@@ -79,7 +83,7 @@ unsigned short io_map[IO_MAP_SIZE]; + struct apm_info apm_bios_info; + + /* Emulation requirements. */ +-char *grub_scratch_mem = 0; ++void *grub_scratch_mem = 0; + + struct geometry *disks = 0; + +@@ -103,14 +107,73 @@ static char *serial_device = 0; + static unsigned int serial_speed; + #endif /* SIMULATE_SLOWNESS_OF_SERIAL */ + ++#ifdef GRUB_UTIL ++int get_sector_size (int drive) ++{ ++ return 0x200; ++} ++int get_sector_bits (int drive) ++{ ++ return 9; ++} ++#endif /* GRUB_UTIL */ ++ ++/* This allocates page-aligned storage of the specified size, which must be ++ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE) ++ */ ++#ifdef __linux__ ++static void * ++grub_mmap_alloc(size_t len) ++{ ++ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE; ++ ++#ifdef MAP_32BIT ++ mmap_flags |= MAP_32BIT; ++#endif ++ /* Mark the simulated stack executable, as GCC uses stack trampolines ++ * to implement nested functions. */ ++ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0); ++} ++#else /* !defined(__linux__) */ ++static void * ++grub_mmap_alloc(size_t len) ++{ ++ int fd = 0, offset = 0, ret = 0; ++ void *pa = MAP_FAILED; ++ char template[] = "/tmp/grub_mmap_alloc_XXXXXX"; ++ errno_t e; ++ ++ fd = mkstemp(template); ++ if (fd < 0) ++ return pa; ++ ++ unlink(template); ++ ++ ret = ftruncate(fd, len); ++ if (ret < 0) ++ return pa; ++ ++ /* Mark the simulated stack executable, as GCC uses stack trampolines ++ * to implement nested functions. */ ++ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, ++ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset); ++ ++ e = errno; ++ close(fd); ++ errno = e; ++ return pa; ++} ++#endif /* defined(__linux__) */ ++ + /* The main entry point into this mess. */ + int + grub_stage2 (void) + { + /* These need to be static, because they survive our stack transitions. */ + static int status = 0; +- static char *realstack; +- char *scratch, *simstack; ++ static void *realstack; ++ void *simstack_alloc_base, *simstack; ++ size_t simstack_size, page_size; + int i; + + auto void doit (void); +@@ -120,8 +183,13 @@ grub_stage2 (void) + void doit (void) + { + /* Make sure our stack lives in the simulated memory area. */ ++#ifdef __x86_64 ++ asm volatile ("movq %%rsp, %0\n\tmovq %1, %%rsp\n" ++ : "=&r" (realstack) : "r" (simstack)); ++#else + asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" + : "=&r" (realstack) : "r" (simstack)); ++#endif + + /* Do a setjmp here for the stop command. */ + if (! setjmp (env_for_exit)) +@@ -138,13 +206,43 @@ grub_stage2 (void) + } + + /* Replace our stack before we use any local variables. */ ++#ifdef __x86_64 ++ asm volatile ("movq %0, %%rsp\n" : : "r" (realstack)); ++#else + asm volatile ("movl %0, %%esp\n" : : "r" (realstack)); ++#endif + } + + assert (grub_scratch_mem == 0); +- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); +- assert (scratch); +- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); ++ ++ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and ++ * make sure the memory is aligned to a multiple of the system's ++ * page size */ ++ page_size = sysconf (_SC_PAGESIZE); ++ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15); ++ if (simstack_size % page_size) ++ { ++ /* If we're not on a page_size boundary, round up to the next one */ ++ simstack_size &= ~(page_size-1); ++ simstack_size += page_size; ++ } ++ ++ /* Add one for a PROT_NONE boundary page at each end. */ ++ simstack_size += 2 * page_size; ++ ++ simstack_alloc_base = grub_mmap_alloc(simstack_size); ++ assert (simstack_alloc_base != MAP_FAILED); ++ ++ /* mark pages above and below our simstack area as innaccessable. ++ * If the implementation we're using doesn't support that, then the ++ * new protection modes are undefined. It's safe to just ignore ++ * them, though. It'd be nice if we knew that we'd get a SEGV for ++ * touching the area, but that's all. it'd be nice to have. */ ++ mprotect (simstack_alloc_base, page_size, PROT_NONE); ++ mprotect ((void *)((unsigned long)simstack_alloc_base + ++ simstack_size - page_size), page_size, PROT_NONE); ++ ++ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size); + + /* FIXME: simulate the memory holes using mprot, if available. */ + +@@ -217,7 +315,7 @@ grub_stage2 (void) + device_map = 0; + free (disks); + disks = 0; +- free (scratch); ++ munmap(simstack_alloc_base, simstack_size); + grub_scratch_mem = 0; + + if (serial_device) +@@ -699,6 +797,13 @@ console_getkey (void) + return console_translate_key (c); + } + ++/* returns modifier status */ ++int ++console_keystatus (void) ++{ ++ return 0; ++} ++ + /* returns packed values, LSB+1 is x, LSB is y */ + int + console_getxy (void) +@@ -766,7 +871,7 @@ get_diskinfo (int drive, struct geometry *geometry) + { + /* The unpartitioned device name: /dev/XdX */ + char *devname = device_map[drive]; +- char buf[512]; ++ char * buf, * buf_unaligned; + + if (! devname) + return -1; +@@ -777,13 +882,13 @@ get_diskinfo (int drive, struct geometry *geometry) + + /* Open read/write, or read-only if that failed. */ + if (! read_only) +- disks[drive].flags = open (devname, O_RDWR); ++ disks[drive].flags = open (devname, O_RDWR | O_DIRECT); + + if (disks[drive].flags == -1) + { + if (read_only || errno == EACCES || errno == EROFS || errno == EPERM) + { +- disks[drive].flags = open (devname, O_RDONLY); ++ disks[drive].flags = open (devname, O_RDONLY | O_DIRECT); + if (disks[drive].flags == -1) + { + assign_device_name (drive, 0); +@@ -797,6 +902,10 @@ get_diskinfo (int drive, struct geometry *geometry) + } + } + ++ buf_unaligned = malloc((512 * sizeof(char)) + 4095); ++ buf = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & ++ (~(4096-1))); ++ + /* Attempt to read the first sector. */ + if (read (disks[drive].flags, buf, 512) != 512) + { +@@ -808,6 +917,7 @@ get_diskinfo (int drive, struct geometry *geometry) + + if (disks[drive].flags != -1) + get_drive_geometry (&disks[drive], device_map, drive); ++ free(buf_unaligned); + } + + if (disks[drive].flags == -1) +@@ -829,24 +939,34 @@ static int + nread (int fd, char *buf, size_t len) + { + int size = len; ++ char * buf_unaligned, * buff, * obuff; ++ int ret; ++ ++ buf_unaligned = malloc((len * sizeof(char)) + 4095); ++ obuff = buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & ++ (~(4096-1))); ++ + + while (len) + { +- int ret = read (fd, buf, len); ++ ret = read (fd, buff, len); + + if (ret <= 0) + { + if (errno == EINTR) + continue; + else +- return ret; ++ break; + } + + len -= ret; +- buf += ret; ++ buff += ret; + } + +- return size; ++ if (!len) ret = size; ++ ++ buf = memcpy(buf, obuff, size); ++ return ret; + } + + /* Write LEN bytes from BUF to FD. Return less than or equal to zero if an +@@ -855,10 +975,18 @@ static int + nwrite (int fd, char *buf, size_t len) + { + int size = len; ++ char * buf_unaligned, * buff; ++ ++ buf_unaligned = malloc((len * sizeof(char)) + 4095); ++ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & ++ (~(4096-1))); + + while (len) + { +- int ret = write (fd, buf, len); ++ int ret; ++ ++ memcpy(buff, buf, len); ++ ret = write (fd, buff, len); + + if (ret <= 0) + { +@@ -946,20 +1074,20 @@ biosdisk (int subfunc, int drive, struct geometry *geometry, + _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, + loff_t *, res, uint, wh); + +- offset = (loff_t) sector * (loff_t) SECTOR_SIZE; ++ offset = (loff_t) sector * (loff_t) get_sector_size(drive); + if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) + return -1; + } + #else + { +- off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; ++ off_t offset = (off_t) sector * (off_t) get_sector_size(drive); + + if (lseek (fd, offset, SEEK_SET) != offset) + return -1; + } + #endif + +- buf = (char *) (segment << 4); ++ buf = (char *) (unsigned long) (segment << 4); + + switch (subfunc) + { +@@ -971,13 +1099,13 @@ biosdisk (int subfunc, int drive, struct geometry *geometry, + sectors that are read together with the MBR in one read. It + should only remap the MBR, so we split the read in two + parts. -jochen */ +- if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE) ++ if (nread (fd, buf, get_sector_size(drive)) != get_sector_size(drive)) + return -1; +- buf += SECTOR_SIZE; ++ buf += get_sector_size(drive); + nsec--; + } + #endif +- if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) ++ if (nread (fd, buf, nsec * get_sector_size(drive)) != nsec * get_sector_size(drive)) + return -1; + break; + +@@ -987,10 +1115,10 @@ biosdisk (int subfunc, int drive, struct geometry *geometry, + grub_printf ("Write %d sectors starting from %d sector" + " to drive 0x%x (%s)\n", + nsec, sector, drive, device_map[drive]); +- hex_dump (buf, nsec * SECTOR_SIZE); ++ hex_dump (buf, nsec * get_sector_size(drive)); + } + if (! read_only) +- if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) ++ if (nwrite (fd, buf, nsec * get_sector_size(drive)) != nsec * get_sector_size(drive)) + return -1; + break; + +@@ -1273,3 +1401,21 @@ hercules_setcursor (int on) + { + return 1; + } ++ ++int ++grub_load_linux (char *kernel, char *arg) ++{ ++ return 0; ++} ++ ++int ++grub_load_initrd (char *initrd) ++{ ++ return 0; ++} ++ ++int ++grub_chainloader (char *filename) ++{ ++ return 0; ++} +diff --git a/grub/efitftp.c b/grub/efitftp.c +new file mode 100644 +index 0000000..5355dec +--- /dev/null ++++ b/grub/efitftp.c +@@ -0,0 +1,34 @@ ++#include ++#include ++ ++int efi_tftp_mount (void); ++int efi_tftp_read (char *buf, int len); ++int efi_tftp_dir (char *dirname); ++void efi_tftp_close (void); ++ ++int ++efi_tftp_mount (void) ++{ ++ grub_printf("non-efi efi_tftp_mount()\n"); ++ return 0; ++} ++ ++int ++efi_tftp_read (char *addr, int size) ++{ ++ grub_printf ("non-efi efi_tftp_read (0x%x, %d)\n", (long) addr, size); ++ return 0; ++} ++ ++int ++efi_tftp_dir (char *dirname) ++{ ++ grub_printf ("non-efi efi_ftp_dir (%s)\n", dirname); ++ return 0; ++} ++ ++void ++efi_tftp_close (void) ++{ ++ grub_printf ("non-efi efi_tftp_close ()\n"); ++} +diff --git a/grub/main.c b/grub/main.c +index dfe847e..6083641 100644 +--- a/grub/main.c ++++ b/grub/main.c +@@ -140,7 +140,7 @@ main (int argc, char **argv) + program_name = argv[0]; + default_boot_drive = boot_drive; + default_install_partition = install_partition; +- if (config_file) ++ if (config_file[0]) + default_config_file = config_file; + else + default_config_file = "NONE"; +diff --git a/lib/.gitignore b/lib/.gitignore +new file mode 100644 +index 0000000..5d89f6d +--- /dev/null ++++ b/lib/.gitignore +@@ -0,0 +1,2 @@ ++Makefile.in ++.deps +diff --git a/lib/Makefile.in b/lib/Makefile.in +deleted file mode 100644 +index 3dae206..0000000 +--- a/lib/Makefile.in ++++ /dev/null +@@ -1,416 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +-SOURCES = $(libcommon_a_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-subdir = lib +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-LIBRARIES = $(noinst_LIBRARIES) +-AR = ar +-ARFLAGS = cru +-libcommon_a_AR = $(AR) $(ARFLAGS) +-libcommon_a_LIBADD = +-am_libcommon_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) \ +- device.$(OBJEXT) +-libcommon_a_OBJECTS = $(am_libcommon_a_OBJECTS) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(libcommon_a_SOURCES) +-DIST_SOURCES = $(libcommon_a_SOURCES) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-noinst_LIBRARIES = libcommon.a +-AM_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/stage2 \ +- -I$(top_srcdir)/stage1 +- +-libcommon_a_SOURCES = getopt.c getopt1.c getopt.h device.c device.h +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .c .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu lib/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-clean-noinstLIBRARIES: +- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +-libcommon.a: $(libcommon_a_OBJECTS) $(libcommon_a_DEPENDENCIES) +- -rm -f libcommon.a +- $(libcommon_a_AR) libcommon.a $(libcommon_a_OBJECTS) $(libcommon_a_LIBADD) +- $(RANLIB) libcommon.a +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/device.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ +- +-.c.o: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< +- +-.c.obj: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +-uninstall-info-am: +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(LIBRARIES) +-installdirs: +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-exec-am: +- +-install-info: install-info-am +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-info-am +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +- clean-noinstLIBRARIES ctags distclean distclean-compile \ +- distclean-generic distclean-tags distdir dvi dvi-am html \ +- html-am info info-am install install-am install-data \ +- install-data-am install-exec install-exec-am install-info \ +- install-info-am install-man install-strip installcheck \ +- installcheck-am installdirs maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-compile \ +- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ +- uninstall-am uninstall-info-am +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/lib/device.c b/lib/device.c +index d0663b3..50540bc 100644 +--- a/lib/device.c ++++ b/lib/device.c +@@ -36,6 +36,9 @@ + #include + #include + ++#define SECTOR_SIZE 0x200 ++#define SECTOR_BITS 9 ++ + #ifdef __linux__ + # if !defined(__GLIBC__) || \ + ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) +@@ -131,6 +134,152 @@ get_kfreebsd_version () + #include + #include + ++#if defined(__linux__) ++/* The 2.6 kernel has removed all of the geometry handling for IDE drives ++ * that did fixups for LBA, etc. This means that the geometry we get ++ * with the ioctl has a good chance of being wrong. So, we get to ++ * also know about partition tables and try to read what the geometry ++ * is there. *grumble* Very closely based on code from cfdisk ++ */ ++static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) { ++ struct hd_geometry hdg; ++ ++ if (ioctl (fd, HDIO_GETGEO, &hdg)) ++ return; ++ ++ *cyl = hdg.cylinders; ++ *heads = hdg.heads; ++ *sectors = hdg.sectors; ++} ++ ++struct partition { ++ unsigned char boot_ind; /* 0x80 - active */ ++ unsigned char head; /* starting head */ ++ unsigned char sector; /* starting sector */ ++ unsigned char cyl; /* starting cylinder */ ++ unsigned char sys_ind; /* What partition type */ ++ unsigned char end_head; /* end head */ ++ unsigned char end_sector; /* end sector */ ++ unsigned char end_cyl; /* end cylinder */ ++ unsigned char start4[4]; /* starting sector counting from 0 */ ++ unsigned char size4[4]; /* nr of sectors in partition */ ++}; ++ ++#define ALIGNMENT 2 ++typedef union { ++ struct { ++ unsigned char align[ALIGNMENT]; ++ unsigned char b[SECTOR_SIZE]; ++ } c; ++ struct { ++ unsigned char align[ALIGNMENT]; ++ unsigned char buffer[0x1BE]; ++ struct partition part[4]; ++ unsigned char magicflag[2]; ++ } p; ++} partition_table; ++ ++#define PART_TABLE_FLAG0 0x55 ++#define PART_TABLE_FLAG1 0xAA ++ ++static void ++get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, ++ int *sectors) { ++ struct partition *p; ++ int i,h,s,hh,ss; ++ int first = 1; ++ int bad = 0; ++ ++ if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 || ++ bufp->p.magicflag[1] != PART_TABLE_FLAG1) { ++ /* Matthew Wilcox: slightly friendlier version of ++ fatal(_("Bad signature on partition table"), 3); ++ */ ++ fprintf(stderr, "Unknown partition table signature\n"); ++ return; ++ } ++ ++ hh = ss = 0; ++ for (i=0; i<4; i++) { ++ p = &(bufp->p.part[i]); ++ if (p->sys_ind != 0) { ++ h = p->end_head + 1; ++ s = (p->end_sector & 077); ++ if (first) { ++ hh = h; ++ ss = s; ++ first = 0; ++ } else if (hh != h || ss != s) ++ bad = 1; ++ } ++ } ++ ++ if (!first && !bad) { ++ *heads = hh; ++ *sectors = ss; ++ } ++} ++ ++static long long my_lseek (unsigned int fd, long long offset, ++ unsigned int origin) ++{ ++#if defined(__linux__) && (!defined(__GLIBC__) || \ ++ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) ++ /* Maybe libc doesn't have large file support. */ ++ loff_t offset, result; ++ static int _llseek (uint filedes, ulong hi, ulong lo, ++ loff_t *res, uint wh); ++ _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, ++ loff_t *, res, uint, wh); ++ ++ if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0) ++ return (long long) -1; ++ return result; ++#else ++ return lseek(fd, offset, SEEK_SET); ++#endif ++} ++ ++static void get_linux_geometry (int fd, struct geometry *geom) { ++ long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0; ++ long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0; ++ partition_table bufp; ++ char *buff, *buf_unaligned; ++ ++ buf_unaligned = malloc(sizeof(partition_table) + 4095); ++ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & ++ (~(4096-1))); ++ ++ get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors); ++ ++ if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) { ++ fprintf(stderr, "Unable to seek"); ++ } ++ ++ if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) { ++ memcpy(bufp.c.b, buff, SECTOR_SIZE); ++ get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors); ++ } else { ++ fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno)); ++ } ++ ++ if (pt_head && pt_sectors) { ++ int cyl_size; ++ ++ geom->heads = pt_head; ++ geom->sectors = pt_sectors; ++ cyl_size = pt_head * pt_sectors; ++ geom->cylinders = geom->total_sectors/cyl_size; ++ } else { ++ geom->heads = kern_head; ++ geom->sectors = kern_sectors; ++ geom->cylinders = kern_cyl; ++ } ++ ++ return; ++} ++#endif ++ + /* Get the geometry of a drive DRIVE. */ + void + get_drive_geometry (struct geometry *geom, char **map, int drive) +@@ -151,21 +300,16 @@ get_drive_geometry (struct geometry *geom, char **map, int drive) + #if defined(__linux__) + /* Linux */ + { +- struct hd_geometry hdg; + unsigned long nr; +- +- if (ioctl (fd, HDIO_GETGEO, &hdg)) +- goto fail; + + if (ioctl (fd, BLKGETSIZE, &nr)) + goto fail; + + /* Got the geometry, so save it. */ +- geom->cylinders = hdg.cylinders; +- geom->heads = hdg.heads; +- geom->sectors = hdg.sectors; + geom->total_sectors = nr; +- ++ get_linux_geometry(fd, geom); ++ if (!geom->heads && !geom->cylinders && !geom->sectors) ++ goto fail; + goto success; + } + +@@ -403,10 +547,27 @@ get_dac960_disk_name (char *name, int controller, int drive) + } + + static void ++get_cciss_disk_name (char * name, int controller, int drive) ++{ ++ sprintf (name, "/dev/cciss/c%dd%d", controller, drive); ++} ++ ++static void ++get_cpqarray_disk_name (char * name, int controller, int drive) ++{ ++ sprintf (name, "/dev/ida/c%dd%d", controller, drive); ++} ++static void + get_ataraid_disk_name (char *name, int unit) + { + sprintf (name, "/dev/ataraid/d%c", unit + '0'); + } ++ ++static void ++get_i2o_disk_name (char *name, int unit) ++{ ++ sprintf (name, "/dev/i2o/hd%c", unit + 'a'); ++} + #endif + + /* Check if DEVICE can be read. If an error occurs, return zero, +@@ -490,27 +651,24 @@ check_device (const char *device) + } + + /* Read mapping information from FP, and write it to MAP. */ ++static void rdm_show_error (const char *map_file, int no, const char *msg) ++{ ++ fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg); ++} ++ ++static void rdm_show_warning (const char *map_file,int no, const char *msg, ...) ++{ ++ va_list ap; ++ ++ va_start (ap, msg); ++ fprintf (stderr, "%s:%d: warning: ", map_file, no); ++ vfprintf (stderr, msg, ap); ++ va_end (ap); ++} ++ + static int + read_device_map (FILE *fp, char **map, const char *map_file) + { +- auto void show_error (int no, const char *msg); +- auto void show_warning (int no, const char *msg, ...); +- +- auto void show_error (int no, const char *msg) +- { +- fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg); +- } +- +- auto void show_warning (int no, const char *msg, ...) +- { +- va_list ap; +- +- va_start (ap, msg); +- fprintf (stderr, "%s:%d: warning: ", map_file, no); +- vfprintf (stderr, msg, ap); +- va_end (ap); +- } +- + /* If there is the device map file, use the data in it instead of + probing devices. */ + char buf[1024]; /* XXX */ +@@ -540,14 +698,14 @@ read_device_map (FILE *fp, char **map, const char *map_file) + + if (*ptr != '(') + { +- show_error (line_number, "No open parenthesis found"); ++ rdm_show_error (map_file, line_number, "No open parenthesis found"); + return 0; + } + + ptr++; + if ((*ptr != 'f' && *ptr != 'h') || *(ptr + 1) != 'd') + { +- show_error (line_number, "Bad drive name"); ++ rdm_show_error (map_file, line_number, "Bad drive name"); + return 0; + } + +@@ -558,12 +716,12 @@ read_device_map (FILE *fp, char **map, const char *map_file) + drive = strtoul (ptr, &ptr, 10); + if (drive < 0) + { +- show_error (line_number, "Bad device number"); ++ rdm_show_error (map_file, line_number, "Bad device number"); + return 0; + } + else if (drive > 127) + { +- show_warning (line_number, ++ rdm_show_warning (map_file, line_number, + "Ignoring %cd%d due to a BIOS limitation", + is_floppy ? 'f' : 'h', drive); + continue; +@@ -574,7 +732,7 @@ read_device_map (FILE *fp, char **map, const char *map_file) + + if (*ptr != ')') + { +- show_error (line_number, "No close parenthesis found"); ++ rdm_show_error (map_file, line_number, "No close parenthesis found"); + return 0; + } + +@@ -585,7 +743,7 @@ read_device_map (FILE *fp, char **map, const char *map_file) + + if (! *ptr) + { +- show_error (line_number, "No filename found"); ++ rdm_show_error (map_file, line_number, "No filename found"); + return 0; + } + +@@ -598,7 +756,7 @@ read_device_map (FILE *fp, char **map, const char *map_file) + /* Multiple entries for a given drive is not allowed. */ + if (map[drive]) + { +- show_error (line_number, "Duplicated entry found"); ++ rdm_show_error (map_file, line_number, "Duplicated entry found"); + return 0; + } + +@@ -782,7 +940,7 @@ init_device_map (char ***map, const char *map_file, int floppy_disks) + + for (controller = 0; controller < 8; controller++) + { +- for (drive = 0; drive < 15; drive++) ++ for (drive = 0; drive < 32; drive++) + { + char name[24]; + +@@ -801,6 +959,90 @@ init_device_map (char ***map, const char *map_file, int floppy_disks) + } + } + } ++ ++ /* I2O disks. */ ++ for (i = 0; i < 8; i++) ++ { ++ char name[16]; ++ ++ get_i2o_disk_name (name, i); ++ if (check_device (name)) ++ { ++ (*map)[num_hd + 0x80] = strdup (name); ++ assert ((*map)[num_hd + 0x80]); ++ ++ /* If the device map file is opened, write the map. */ ++ if (fp) ++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); ++ ++ num_hd++; ++ } ++ } ++ ++#endif /* __linux__ */ ++ ++#ifdef __linux__ ++ /* This is for cciss - we have ++ /dev/cciss/cdp. ++ ++ cciss driver currently supports up to 8 controllers, 16 logical ++ drives, and 7 partitions. */ ++ { ++ int controller, drive; ++ ++ for (controller = 0; controller < 8; controller++) ++ { ++ for (drive = 0; drive < 16; drive++) ++ { ++ char name[24]; ++ ++ get_cciss_disk_name (name, controller, drive); ++ if (check_device (name)) ++ { ++ (*map)[num_hd + 0x80] = strdup (name); ++ assert ((*map)[num_hd + 0x80]); ++ ++ /* If the device map file is opened, write the map. */ ++ if (fp) ++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); ++ ++ num_hd++; ++ } ++ } ++ } ++ } ++#endif /* __linux__ */ ++ ++#ifdef __linux__ ++ /* This is for cpqarray - we have ++ /dev/ida/cdp. ++ ++ cpqarray driver currently supports up to 8 controllers, 16 logical ++ drives, and 15 partitions. */ ++ { ++ int controller, drive; ++ ++ for (controller = 0; controller < 8; controller++) ++ { ++ for (drive = 0; drive < 15; drive++) ++ { ++ char name[24]; ++ ++ get_cpqarray_disk_name (name, controller, drive); ++ if (check_device (name)) ++ { ++ (*map)[num_hd + 0x80] = strdup (name); ++ assert ((*map)[num_hd + 0x80]); ++ ++ /* If the device map file is opened, write the map. */ ++ if (fp) ++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); ++ ++ num_hd++; ++ } ++ } ++ } ++ } + #endif /* __linux__ */ + + /* OK, close the device map file if opened. */ +@@ -844,6 +1086,7 @@ write_to_partition (char **map, int drive, int partition, + { + char dev[PATH_MAX]; /* XXX */ + int fd; ++ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; + + if ((partition & 0x00FF00) != 0x00FF00) + { +@@ -861,44 +1104,35 @@ write_to_partition (char **map, int drive, int partition, + if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) + strcpy (dev + strlen(dev) - 5, "/part"); + } +- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); ++ ++ sprintf (dev + strlen(dev), "%s%d", ++ /* Compaq smart and others */ ++ (strncmp(dev, "/dev/ida/", 9) == 0 || ++ strncmp(dev, "/dev/ataraid/", 13) == 0 || ++ strncmp(dev, "/dev/mapper/", 12) == 0 || ++ strncmp(dev, "/dev/md", 7) == 0 || ++ strncmp(dev, "/dev/cciss/", 11) == 0 || ++ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "", ++ ((partition >> 16) & 0xFF) + 1); + + /* Open the partition. */ + fd = open (dev, O_RDWR); + if (fd < 0) + { ++ /* No partition file, pass thru and not worry about ++ * cache inconsistency. */ ++ if (errno == ENOENT) ++ return -1; + errnum = ERR_NO_PART; + return 0; + } +- +-#if defined(__linux__) && (!defined(__GLIBC__) || \ +- ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) +- /* Maybe libc doesn't have large file support. */ +- { +- loff_t offset, result; +- static int _llseek (uint filedes, ulong hi, ulong lo, +- loff_t *res, uint wh); +- _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, +- loff_t *, res, uint, wh); +- +- offset = (loff_t) sector * (loff_t) SECTOR_SIZE; +- if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) +- { +- errnum = ERR_DEV_VALUES; +- return 0; +- } +- } +-#else +- { +- off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; + +- if (lseek (fd, offset, SEEK_SET) != offset) +- { +- errnum = ERR_DEV_VALUES; +- return 0; +- } +- } +-#endif ++ ++ if (my_lseek(fd, offset, SEEK_SET) != offset) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 0; ++ } + + if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE)) + { +diff --git a/makediff b/makediff +new file mode 100755 +index 0000000..a82b448 +--- /dev/null ++++ b/makediff +@@ -0,0 +1,21 @@ ++#!/bin/bash ++( ++cat << EOF ++From: Peter Jones " ++Date: $(date) ++Subject: [PATCH] Changes from grub-0.97 to master ++ ++This patch is a bundle of the changes between grub-0.97 and master. ++It can be reginerated from the git repository at: ++ ++git://github.com/vathpela/grub-fedora.git ++ ++Using the command: ++ ++git diff grub-0.97 master ++ ++EOF ++git diff grub-0.97 master | diffstat -p1 ++echo ++git diff grub-0.97 master ++) | cat +diff --git a/netboot/.gitignore b/netboot/.gitignore +new file mode 100644 +index 0000000..5d89f6d +--- /dev/null ++++ b/netboot/.gitignore +@@ -0,0 +1,2 @@ ++Makefile.in ++.deps +diff --git a/netboot/Makefile.in b/netboot/Makefile.in +deleted file mode 100644 +index 75ac299..0000000 +--- a/netboot/Makefile.in ++++ /dev/null +@@ -1,1091 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +-SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-subdir = netboot +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-LIBRARIES = $(noinst_LIBRARIES) +-AR = ar +-ARFLAGS = cru +-libdrivers_a_AR = $(AR) $(ARFLAGS) +-am_libdrivers_a_OBJECTS = libdrivers_a-config.$(OBJEXT) \ +- libdrivers_a-fsys_tftp.$(OBJEXT) libdrivers_a-main.$(OBJEXT) \ +- libdrivers_a-misc.$(OBJEXT) libdrivers_a-pci.$(OBJEXT) \ +- libdrivers_a-timer.$(OBJEXT) +-libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) +-DIST_SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +- +-# For and . +-INCLUDES = -I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1 +-@NETBOOT_SUPPORT_FALSE@LIBDRIVERS = +- +-# Don't build the netboot support by default. +-@NETBOOT_SUPPORT_TRUE@LIBDRIVERS = libdrivers.a +-noinst_LIBRARIES = $(LIBDRIVERS) +-libdrivers_a_SOURCES = cards.h config.c etherboot.h \ +- fsys_tftp.c linux-asm-io.h linux-asm-string.h \ +- main.c misc.c nic.h osdep.h pci.c pci.h timer.c timer.h +- +-EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c595.c 3c595.h 3c90x.c \ +- cs89x0.c cs89x0.h davicom.c depca.c eepro.c eepro100.c \ +- epic100.c epic100.h fa311.c i82586.c lance.c natsemi.c \ +- ni5010.c ns8390.c ns8390.h otulip.c otulip.h rtl8139.c \ +- sis900.c sis900.h sk_g16.c sk_g16.h smc9000.c smc9000.h \ +- tiara.c tlan.c tulip.c via-rhine.c w89c840.c +- +-libdrivers_a_CFLAGS = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- -DFSYS_TFTP=1 $(NET_CFLAGS) $(NET_EXTRAFLAGS) +- +-# Filled by configure. +-libdrivers_a_LIBADD = @NETBOOT_DRIVERS@ +-libdrivers_a_DEPENDENCIES = $(libdrivers_a_LIBADD) +-EXTRA_DIST = README.netboot 3c90x.txt cs89x0.txt sis900.txt tulip.txt +- +-# These below are several special rules for the device drivers. +-# We cannot use a simple rule for them... +- +-# What objects are derived from a driver? +-3c509_drivers = 3c509.o 3c529.o +-3c595_drivers = 3c595.o +-3c90x_drivers = 3c90x.o +-cs89x0_drivers = cs89x0.o +-davicom_drivers = davicom.o +-depca_drivers = depca.o +-eepro_drivers = eepro.o +-eepro100_drivers = eepro100.o +-epic100_drivers = epic100.o +-#fa311_drivers = fa311.o +-i82586_drivers = 3c507.o exos205.o ni5210.o +-lance_drivers = lance.o ne2100.o ni6510.o +-natsemi_drivers = natsemi.o +-ni5010_drivers = ni5010.o +-ns8390_drivers = 3c503.o ne.o ns8390.o wd.o +-otulip_drivers = otulip.o +-rtl8139_drivers = rtl8139.o +-sis900_drivers = sis900.o +-sk_g16_drivers = sk_g16.o +-smc9000_drivers = smc9000.o +-tiara_drivers = tiara.o +-#tlan_drivers = tlan.o +-tulip_drivers = tulip.o +-via_rhine_drivers = via_rhine.o +-w89c840_drivers = w89c840.o +- +-# Per-object flags. +-3c509_o_CFLAGS = -DINCLUDE_3C509=1 +-3c529_o_CFLAGS = -DINCLUDE_3C529=1 +-3c595_o_CFLAGS = -DINCLUDE_3C595=1 +-3c90x_o_CFLAGS = -DINCLUDE_3C90X=1 +-cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1 +-davicom_o_CFLAGS = -DINCLUDE_DAVICOM=1 +-depca_o_CFLAGS = -DINCLUDE_DEPCA=1 +-eepro_o_CFLAGS = -DINCLUDE_EEPRO=1 +-eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=1 +-epic100_o_CFLAGS = -DINCLUDE_EPIC100=1 +-#fa311_o_CFLAGS = -DINCLUDE_FA311=1 +-3c507_o_CFLAGS = -DINCLUDE_3C507=1 +-exos205_o_CFLAGS = -DINCLUDE_EXOS205=1 +-ni5210_o_CFLAGS = -DINCLUDE_NI5210=1 +-lance_o_CFLAGS = -DINCLUDE_LANCE=1 +-ne2100_o_CFLAGS = -DINCLUDE_NE2100=1 +-ni6510_o_CFLAGS = -DINCLUDE_NI6510=1 +-natsemi_o_CFLAGS = -DINCLUDE_NATSEMI=1 +-ni5010_o_CFLAGS = -DINCLUDE_NI5010=1 +-3c503_o_CFLAGS = -DINCLUDE_3C503=1 +-ne_o_CFLAGS = -DINCLUDE_NE=1 +-ns8390_o_CFLAGS = -DINCLUDE_NS8390=1 +-wd_o_CFLAGS = -DINCLUDE_WD=1 +-otulip_o_CFLAGS = -DINCLUDE_OTULIP=1 +-rtl8139_o_CFLAGS = -DINCLUDE_RTL8139=1 +-sis900_o_CFLAGS = -DINCLUDE_SIS900=1 +-sk_g16_o_CFLAGS = -DINCLUDE_SK_G16=1 +-smc9000_o_CFLAGS = -DINCLUDE_SMC9000=1 +-tiara_o_CFLAGS = -DINCLUDE_TIARA=1 +-#tlan_o_CFLAGS = -DINCLUDE_TLAN=1 +-tulip_o_CFLAGS = -DINCLUDE_TULIP=1 +-via_rhine_o_CFLAGS = -DINCLUDE_VIA_RHINE=1 +-w89c840_o_CFLAGS = -DINCLUDE_W89C840=1 +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .c .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu netboot/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu netboot/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-clean-noinstLIBRARIES: +- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +-libdrivers.a: $(libdrivers_a_OBJECTS) $(libdrivers_a_DEPENDENCIES) +- -rm -f libdrivers.a +- $(libdrivers_a_AR) libdrivers.a $(libdrivers_a_OBJECTS) $(libdrivers_a_LIBADD) +- $(RANLIB) libdrivers.a +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c509.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c595.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c90x.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-config.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-cs89x0.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-davicom.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-depca.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro100.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-epic100.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fa311.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fsys_tftp.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-i82586.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-lance.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-main.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-misc.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-natsemi.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ni5010.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ns8390.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-otulip.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-pci.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-rtl8139.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sis900.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sk_g16.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-smc9000.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tiara.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-timer.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tlan.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tulip.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-via-rhine.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-w89c840.Po@am__quote@ +- +-.c.o: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< +- +-.c.obj: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +- +-libdrivers_a-config.o: config.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config.c' object='libdrivers_a-config.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c +- +-libdrivers_a-config.obj: config.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config.c' object='libdrivers_a-config.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi` +- +-libdrivers_a-fsys_tftp.o: fsys_tftp.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c +- +-libdrivers_a-fsys_tftp.obj: fsys_tftp.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi` +- +-libdrivers_a-main.o: main.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libdrivers_a-main.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c +- +-libdrivers_a-main.obj: main.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libdrivers_a-main.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` +- +-libdrivers_a-misc.o: misc.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libdrivers_a-misc.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c +- +-libdrivers_a-misc.obj: misc.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libdrivers_a-misc.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi` +- +-libdrivers_a-pci.o: pci.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pci.c' object='libdrivers_a-pci.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c +- +-libdrivers_a-pci.obj: pci.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pci.c' object='libdrivers_a-pci.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi` +- +-libdrivers_a-timer.o: timer.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='libdrivers_a-timer.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c +- +-libdrivers_a-timer.obj: timer.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='libdrivers_a-timer.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi` +- +-libdrivers_a-3c509.o: 3c509.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c509.c' object='libdrivers_a-3c509.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c +- +-libdrivers_a-3c509.obj: 3c509.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c509.c' object='libdrivers_a-3c509.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi` +- +-libdrivers_a-3c595.o: 3c595.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c595.c' object='libdrivers_a-3c595.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c +- +-libdrivers_a-3c595.obj: 3c595.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c595.c' object='libdrivers_a-3c595.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi` +- +-libdrivers_a-3c90x.o: 3c90x.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c90x.c' object='libdrivers_a-3c90x.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c +- +-libdrivers_a-3c90x.obj: 3c90x.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c90x.c' object='libdrivers_a-3c90x.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi` +- +-libdrivers_a-cs89x0.o: cs89x0.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cs89x0.c' object='libdrivers_a-cs89x0.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c +- +-libdrivers_a-cs89x0.obj: cs89x0.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cs89x0.c' object='libdrivers_a-cs89x0.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi` +- +-libdrivers_a-davicom.o: davicom.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='davicom.c' object='libdrivers_a-davicom.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c +- +-libdrivers_a-davicom.obj: davicom.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='davicom.c' object='libdrivers_a-davicom.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi` +- +-libdrivers_a-depca.o: depca.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='depca.c' object='libdrivers_a-depca.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c +- +-libdrivers_a-depca.obj: depca.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='depca.c' object='libdrivers_a-depca.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi` +- +-libdrivers_a-eepro.o: eepro.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro.c' object='libdrivers_a-eepro.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c +- +-libdrivers_a-eepro.obj: eepro.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro.c' object='libdrivers_a-eepro.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi` +- +-libdrivers_a-eepro100.o: eepro100.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro100.c' object='libdrivers_a-eepro100.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c +- +-libdrivers_a-eepro100.obj: eepro100.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro100.c' object='libdrivers_a-eepro100.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi` +- +-libdrivers_a-epic100.o: epic100.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epic100.c' object='libdrivers_a-epic100.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c +- +-libdrivers_a-epic100.obj: epic100.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epic100.c' object='libdrivers_a-epic100.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi` +- +-libdrivers_a-fa311.o: fa311.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fa311.c' object='libdrivers_a-fa311.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c +- +-libdrivers_a-fa311.obj: fa311.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fa311.c' object='libdrivers_a-fa311.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi` +- +-libdrivers_a-i82586.o: i82586.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='i82586.c' object='libdrivers_a-i82586.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c +- +-libdrivers_a-i82586.obj: i82586.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='i82586.c' object='libdrivers_a-i82586.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi` +- +-libdrivers_a-lance.o: lance.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lance.c' object='libdrivers_a-lance.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c +- +-libdrivers_a-lance.obj: lance.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lance.c' object='libdrivers_a-lance.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi` +- +-libdrivers_a-natsemi.o: natsemi.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='natsemi.c' object='libdrivers_a-natsemi.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c +- +-libdrivers_a-natsemi.obj: natsemi.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='natsemi.c' object='libdrivers_a-natsemi.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi` +- +-libdrivers_a-ni5010.o: ni5010.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ni5010.c' object='libdrivers_a-ni5010.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c +- +-libdrivers_a-ni5010.obj: ni5010.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ni5010.c' object='libdrivers_a-ni5010.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi` +- +-libdrivers_a-ns8390.o: ns8390.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ns8390.c' object='libdrivers_a-ns8390.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c +- +-libdrivers_a-ns8390.obj: ns8390.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ns8390.c' object='libdrivers_a-ns8390.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi` +- +-libdrivers_a-otulip.o: otulip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='otulip.c' object='libdrivers_a-otulip.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c +- +-libdrivers_a-otulip.obj: otulip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='otulip.c' object='libdrivers_a-otulip.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi` +- +-libdrivers_a-rtl8139.o: rtl8139.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtl8139.c' object='libdrivers_a-rtl8139.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c +- +-libdrivers_a-rtl8139.obj: rtl8139.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtl8139.c' object='libdrivers_a-rtl8139.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi` +- +-libdrivers_a-sis900.o: sis900.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sis900.c' object='libdrivers_a-sis900.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c +- +-libdrivers_a-sis900.obj: sis900.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sis900.c' object='libdrivers_a-sis900.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi` +- +-libdrivers_a-sk_g16.o: sk_g16.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sk_g16.c' object='libdrivers_a-sk_g16.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c +- +-libdrivers_a-sk_g16.obj: sk_g16.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sk_g16.c' object='libdrivers_a-sk_g16.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi` +- +-libdrivers_a-smc9000.o: smc9000.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smc9000.c' object='libdrivers_a-smc9000.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c +- +-libdrivers_a-smc9000.obj: smc9000.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smc9000.c' object='libdrivers_a-smc9000.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi` +- +-libdrivers_a-tiara.o: tiara.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tiara.c' object='libdrivers_a-tiara.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c +- +-libdrivers_a-tiara.obj: tiara.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tiara.c' object='libdrivers_a-tiara.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi` +- +-libdrivers_a-tlan.o: tlan.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tlan.c' object='libdrivers_a-tlan.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c +- +-libdrivers_a-tlan.obj: tlan.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tlan.c' object='libdrivers_a-tlan.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi` +- +-libdrivers_a-tulip.o: tulip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tulip.c' object='libdrivers_a-tulip.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c +- +-libdrivers_a-tulip.obj: tulip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tulip.c' object='libdrivers_a-tulip.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi` +- +-libdrivers_a-via-rhine.o: via-rhine.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='via-rhine.c' object='libdrivers_a-via-rhine.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c +- +-libdrivers_a-via-rhine.obj: via-rhine.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='via-rhine.c' object='libdrivers_a-via-rhine.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi` +- +-libdrivers_a-w89c840.o: w89c840.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w89c840.c' object='libdrivers_a-w89c840.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c +- +-libdrivers_a-w89c840.obj: w89c840.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w89c840.c' object='libdrivers_a-w89c840.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi` +-uninstall-info-am: +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(LIBRARIES) +-installdirs: +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-exec-am: +- +-install-info: install-info-am +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-info-am +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +- clean-noinstLIBRARIES ctags distclean distclean-compile \ +- distclean-generic distclean-tags distdir dvi dvi-am html \ +- html-am info info-am install install-am install-data \ +- install-data-am install-exec install-exec-am install-info \ +- install-info-am install-man install-strip installcheck \ +- installcheck-am installdirs maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-compile \ +- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ +- uninstall-am uninstall-info-am +- +- +-# Is it really necessary to specify dependecies explicitly? +-$(3c509_drivers): 3c509.c 3c509.h +-$(3c509_drivers): %.o: 3c509.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(3c595_drivers): 3c595.c 3c595.h +-$(3c595_drivers): %.o: 3c595.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(3c90x_drivers): 3c90x.c +-$(3c90x_drivers): %.o: 3c90x.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(cs89x0_drivers): cs89x0.c cs89x0.h +-$(cs89x0_drivers): %.o: cs89x0.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(davicom_drivers): davicom.c +-$(davicom_drivers): %.o: davicom.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(depca_drivers): depca.c +-$(depca_drivers): %.o: depca.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(eepro_drivers): eepro.c +-$(eepro_drivers): %.o: eepro.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(eepro100_drivers): eepro100.c +-$(eepro100_drivers): %.o: eepro100.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(epic100_drivers): epic100.c epic100.h +-$(epic100_drivers): %.o: epic100.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-#$(fa311_drivers): fa311.c +-#$(fa311_drivers): %.o: fa311.c +-# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +-# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(i82586_drivers): i82586.c +-$(i82586_drivers): %.o: i82586.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(lance_drivers): lance.c +-$(lance_drivers): %.o: lance.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(natsemi_drivers): natsemi.c +-$(natsemi_drivers): %.o: natsemi.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(ni5010_drivers): ni5010.c +-$(ni5010_drivers): %.o: ni5010.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(ns8390_drivers): ns8390.c ns8390.h +-$(ns8390_drivers): %.o: ns8390.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(otulip_drivers): otulip.c otulip.h +-$(otulip_drivers): %.o: otulip.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(rtl8139_drivers): rtl8139.c +-$(rtl8139_drivers): %.o: rtl8139.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(sis900_drivers): sis900.c +-$(sis900_drivers): %.o: sis900.c sis900.h +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(sk_g16_drivers): sk_g16.c sk_g16.h +-$(sk_g16_drivers): %.o: sk_g16.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(smc9000_drivers): smc9000.c smc9000.h +-$(smc9000_drivers): %.o: smc9000.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(tiara_drivers): tiara.c +-$(tiara_drivers): %.o: tiara.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-#$(tlan_drivers): tlan.c +-#$(tlan_drivers): %.o: tlan.c +-# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +-# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(tulip_drivers): tulip.c +-$(tulip_drivers): %.o: tulip.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(via_rhine_drivers): via-rhine.c +-$(via_rhine_drivers): %.o: via-rhine.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +- +-$(w89c840_drivers): w89c840.c +-$(w89c840_drivers): %.o: w89c840.c +- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/netboot/etherboot.h b/netboot/etherboot.h +index 74ca16f..9c02b25 100644 +--- a/netboot/etherboot.h ++++ b/netboot/etherboot.h +@@ -246,7 +246,7 @@ Author: Martin Renters + + typedef struct + { +- unsigned long s_addr; ++ unsigned int s_addr; + } + in_addr; + +@@ -302,7 +302,7 @@ struct bootp_t + char bp_htype; + char bp_hlen; + char bp_hops; +- unsigned long bp_xid; ++ unsigned int bp_xid; + unsigned short bp_secs; + unsigned short unused; + in_addr bp_ciaddr; +@@ -411,25 +411,25 @@ struct rpc_t + + struct + { +- long id; +- long type; +- long rpcvers; +- long prog; +- long vers; +- long proc; +- long data[1]; ++ int id; ++ int type; ++ int rpcvers; ++ int prog; ++ int vers; ++ int proc; ++ int data[1]; + } + call; + + struct + { +- long id; +- long type; +- long rstatus; +- long verifier; +- long v2; +- long astatus; +- long data[1]; ++ int id; ++ int type; ++ int rstatus; ++ int verifier; ++ int v2; ++ int astatus; ++ int data[1]; + } + reply; + } +@@ -531,9 +531,7 @@ extern int ip_abort; + extern int network_ready; + extern struct rom_info rom; + extern struct arptable_t arptable[MAX_ARP]; +-extern struct bootpd_t bootp_data; + #define BOOTP_DATA_ADDR (&bootp_data) +-extern unsigned char *end_of_rfc1533; + + /* config.c */ + extern struct nic nic; +diff --git a/netboot/main.c b/netboot/main.c +index 82759b6..b8ba920 100644 +--- a/netboot/main.c ++++ b/netboot/main.c +@@ -53,9 +53,9 @@ int network_ready = 0; + struct rom_info rom; + + static int vendorext_isvalid; +-static unsigned long netmask; ++static unsigned int netmask; + static struct bootpd_t bootp_data; +-static unsigned long xid; ++static unsigned int xid; + static unsigned char *end_of_rfc1533 = NULL; + + #ifndef NO_DHCP_SUPPORT +@@ -773,7 +773,7 @@ await_reply (int type, int ival, void *ptr, int timeout) + if (nic.packetlen >= ETH_HLEN + sizeof (struct arprequest) + && ptype == ARP) + { +- unsigned long tmp; ++ unsigned int tmp; + + arpreply = (struct arprequest *) &nic.packet[ETH_HLEN]; + +diff --git a/netboot/misc.c b/netboot/misc.c +index 28614fd..6ea9a8e 100644 +--- a/netboot/misc.c ++++ b/netboot/misc.c +@@ -21,6 +21,7 @@ + + #define GRUB 1 + #include ++#include + + void + sleep (int secs) +@@ -71,9 +72,10 @@ PRINTF and friends + Note: width specification not supported + **************************************************************************/ + static int +-etherboot_vsprintf (char *buf, const char *fmt, const int *dp) ++etherboot_vsprintf (char *buf, const char *fmt, va_list args) + { + char *p, *s; ++ int n; + + s = buf; + for ( ; *fmt != '\0'; ++fmt) +@@ -86,7 +88,7 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) + + if (*++fmt == 's') + { +- for (p = (char *) *dp++; *p != '\0'; p++) ++ for (p = va_arg (args, char *); *p != '\0'; p++) + buf ? *s++ = *p : grub_putchar (*p); + } + else +@@ -120,46 +122,44 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) + */ + if ((*fmt | 0x20) == 'x') + { +- /* With x86 gcc, sizeof(long) == sizeof(int) */ +- const long *lp = (const long *) dp; +- long h = *lp++; + int ncase = (*fmt & 0x20); ++ ++ n = va_arg (args, int); + +- dp = (const int *) lp; + if (alt) + { + *q++ = '0'; + *q++ = 'X' | ncase; + } + for (; shift >= 0; shift -= 4) +- *q++ = "0123456789ABCDEF"[(h >> shift) & 0xF] | ncase; ++ *q++ = "0123456789ABCDEF"[(n >> shift) & 0xF] | ncase; + } + else if (*fmt == 'd') + { +- int i = *dp++; + char *r; +- +- if (i < 0) ++ ++ n = va_arg (args, int); ++ if (n < 0) + { + *q++ = '-'; +- i = -i; ++ n = -n; + } + + p = q; /* save beginning of digits */ + do + { +- *q++ = '0' + (i % 10); +- i /= 10; ++ *q++ = '0' + (n % 10); ++ n /= 10; + } +- while (i); ++ while (n); + + /* reverse digits, stop in middle */ + r = q; /* don't alter q */ + while (--r > p) + { +- i = *r; ++ n = *r; + *r = *p; +- *p++ = i; ++ *p++ = n; + } + } + else if (*fmt == '@') +@@ -167,14 +167,12 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) + unsigned char *r; + union + { +- long l; ++ int l; + unsigned char c[4]; + } + u; +- const long *lp = (const long *) dp; + +- u.l = *lp++; +- dp = (const int *) lp; ++ u.l = va_arg (args, int); + + for (r = &u.c[0]; r < &u.c[4]; ++r) + q += etherboot_sprintf (q, "%d.", *r); +@@ -184,15 +182,15 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) + else if (*fmt == '!') + { + char *r; +- p = (char *) *dp++; +- ++ ++ p = va_arg (args, char *); + for (r = p + ETH_ALEN; p < r; ++p) + q += etherboot_sprintf (q, "%hhX:", *p); + + --q; + } + else if (*fmt == 'c') +- *q++ = *dp++; ++ *q++ = va_arg (args, int); + else + *q++ = *fmt; + +@@ -211,13 +209,23 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) + int + etherboot_sprintf (char *buf, const char *fmt, ...) + { +- return etherboot_vsprintf (buf, fmt, ((const int *) &fmt) + 1); ++ va_list ap; ++ int ret; ++ ++ va_start (ap, fmt); ++ ret = etherboot_vsprintf (buf, fmt, ap); ++ va_end (ap); ++ return ret; + } + + void + etherboot_printf (const char *fmt, ...) + { +- (void) etherboot_vsprintf (0, fmt, ((const int *) &fmt) + 1); ++ va_list ap; ++ ++ va_start (ap, fmt); ++ (void) etherboot_vsprintf (0, fmt, ap); ++ va_end (ap); + } + + int +diff --git a/netboot/osdep.h b/netboot/osdep.h +index 57218bf..881141b 100644 +--- a/netboot/osdep.h ++++ b/netboot/osdep.h +@@ -21,10 +21,10 @@ + #elif defined(__LITTLE_ENDIAN) + # if !defined(__constant_htonl) + # define __constant_htonl(x) \ +- ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \ +- (((unsigned long int)(x) & 0x0000ff00U) << 8) | \ +- (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \ +- (((unsigned long int)(x) & 0xff000000U) >> 24))) ++ ((unsigned int)((((unsigned int)(x) & 0x000000ffU) << 24) | \ ++ (((unsigned int)(x) & 0x0000ff00U) << 8) | \ ++ (((unsigned int)(x) & 0x00ff0000U) >> 8) | \ ++ (((unsigned int)(x) & 0xff000000U) >> 24))) + # endif + # if !defined(__constant_htons) + # define __constant_htons(x) \ +@@ -36,11 +36,11 @@ + #endif + + #define ntohl(x) \ +-(__builtin_constant_p(x) ? \ ++(__builtin_constant_p((unsigned int)x) ? \ + __constant_htonl((x)) : \ + __swap32(x)) + #define htonl(x) \ +-(__builtin_constant_p(x) ? \ ++(__builtin_constant_p((unsigned int)x) ? \ + __constant_htonl((x)) : \ + __swap32(x)) + #define ntohs(x) \ +@@ -52,21 +52,29 @@ + __constant_htons((x)) : \ + __swap16(x)) + +-static inline unsigned long int __swap32(unsigned long int x) ++static inline unsigned int __swap32(unsigned int x) + { ++#ifdef PLATFORM_EFI ++ __asm__("bswapl %0" : "=r" (x) : "0" (x)); ++#else + __asm__("xchgb %b0,%h0\n\t" + "rorl $16,%0\n\t" + "xchgb %b0,%h0" + : "=q" (x) + : "0" (x)); ++#endif + return x; + } + + static inline unsigned short int __swap16(unsigned short int x) + { ++#ifdef PLATFORM_EFI ++ return __constant_htons(x); ++#else + __asm__("xchgb %b0,%h0" + : "=q" (x) + : "0" (x)); ++#endif + return x; + } + +@@ -76,7 +84,7 @@ static inline unsigned short int __swap16(unsigned short int x) + + #include "linux-asm-io.h" + +-typedef unsigned long Address; ++typedef unsigned int Address; + + /* ANSI prototyping macro */ + #ifdef __STDC__ +diff --git a/stage1/.gitignore b/stage1/.gitignore +new file mode 100644 +index 0000000..5d89f6d +--- /dev/null ++++ b/stage1/.gitignore +@@ -0,0 +1,2 @@ ++Makefile.in ++.deps +diff --git a/stage1/Makefile.am b/stage1/Makefile.am +index 0afc285..cbae397 100644 +--- a/stage1/Makefile.am ++++ b/stage1/Makefile.am +@@ -1,11 +1,14 @@ +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) +-nodist_pkglib_DATA = stage1 +- +-CLEANFILES = $(nodist_pkglib_DATA) ++pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) + + # We can't use builtins or standard includes. + AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc +-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 ++LDFLAGS = $(LOADER_LDFLAGS) -nostdlib -Wl,-N,-Ttext,7C00 ++ ++if !PLATFORM_EFI ++ ++nodist_pkgdata_DATA = stage1 ++ ++CLEANFILES = $(nodist_pkgdata_DATA) + + noinst_PROGRAMS = stage1.exec + stage1_exec_SOURCES = stage1.S stage1.h +@@ -13,3 +16,5 @@ stage1_exec_SOURCES = stage1.S stage1.h + SUFFIXES = .exec + .exec: + $(OBJCOPY) -O binary $< $@ ++ ++endif +diff --git a/stage1/Makefile.in b/stage1/Makefile.in +deleted file mode 100644 +index 7134bdf..0000000 +--- a/stage1/Makefile.in ++++ /dev/null +@@ -1,433 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +- +-SOURCES = $(stage1_exec_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-noinst_PROGRAMS = stage1.exec$(EXEEXT) +-subdir = stage1 +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-PROGRAMS = $(noinst_PROGRAMS) +-am_stage1_exec_OBJECTS = stage1.$(OBJEXT) +-stage1_exec_OBJECTS = $(am_stage1_exec_OBJECTS) +-stage1_exec_LDADD = $(LDADD) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(stage1_exec_SOURCES) +-DIST_SOURCES = $(stage1_exec_SOURCES) +-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +-am__vpath_adj = case $$p in \ +- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +- *) f=$$p;; \ +- esac; +-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +-am__installdirs = "$(DESTDIR)$(pkglibdir)" +-nodist_pkglibDATA_INSTALL = $(INSTALL_DATA) +-DATA = $(nodist_pkglib_DATA) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-nodist_pkglib_DATA = stage1 +-CLEANFILES = $(nodist_pkglib_DATA) +- +-# We can't use builtins or standard includes. +-AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc +-stage1_exec_SOURCES = stage1.S stage1.h +-SUFFIXES = .exec +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .exec .S .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu stage1/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu stage1/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-clean-noinstPROGRAMS: +- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +-stage1.exec$(EXEEXT): $(stage1_exec_OBJECTS) $(stage1_exec_DEPENDENCIES) +- @rm -f stage1.exec$(EXEEXT) +- $(LINK) $(stage1_exec_LDFLAGS) $(stage1_exec_OBJECTS) $(stage1_exec_LDADD) $(LIBS) +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-.S.o: +- $(CCASCOMPILE) -c $< +- +-.S.obj: +- $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` +-uninstall-info-am: +-install-nodist_pkglibDATA: $(nodist_pkglib_DATA) +- @$(NORMAL_INSTALL) +- test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" +- @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ +- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ +- f=$(am__strip_dir) \ +- echo " $(nodist_pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ +- $(nodist_pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ +- done +- +-uninstall-nodist_pkglibDATA: +- @$(NORMAL_UNINSTALL) +- @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ +- f=$(am__strip_dir) \ +- echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ +- rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ +- done +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(PROGRAMS) $(DATA) +-installdirs: +- for dir in "$(DESTDIR)$(pkglibdir)"; do \ +- test -z "$$dir" || $(mkdir_p) "$$dir"; \ +- done +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am +- +-distclean: distclean-am +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-exec-am: install-nodist_pkglibDATA +- +-install-info: install-info-am +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-info-am uninstall-nodist_pkglibDATA +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +- clean-noinstPROGRAMS ctags distclean distclean-compile \ +- distclean-generic distclean-tags distdir dvi dvi-am html \ +- html-am info info-am install install-am install-data \ +- install-data-am install-exec install-exec-am install-info \ +- install-info-am install-man install-nodist_pkglibDATA \ +- install-strip installcheck installcheck-am installdirs \ +- maintainer-clean maintainer-clean-generic mostlyclean \ +- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ +- tags uninstall uninstall-am uninstall-info-am \ +- uninstall-nodist_pkglibDATA +- +-.exec: +- $(OBJCOPY) -O binary $< $@ +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/stage1/stage1.S b/stage1/stage1.S +index 985963d..3a896be 100644 +--- a/stage1/stage1.S ++++ b/stage1/stage1.S +@@ -31,6 +31,8 @@ + + /* Print message string */ + #define MSG(x) movw $ABS(x), %si; call message ++ /* Print verbose message string */ ++#define VMSG(x) + + /* XXX: binutils-2.9.1.0.x doesn't produce a short opcode for this. */ + #define MOV_MEM_TO_AL(x) .byte 0xa0; .word x +@@ -151,7 +153,7 @@ real_start: + pushw %dx + + /* print a notification message on the screen */ +- MSG(notification_string) ++ VMSG(notification_string) + + /* do not probe LBA if the drive is a floppy */ + testb $STAGE1_BIOS_HD_FLAG, %dl +diff --git a/stage2/.gitignore b/stage2/.gitignore +new file mode 100644 +index 0000000..e0480a0 +--- /dev/null ++++ b/stage2/.gitignore +@@ -0,0 +1,5 @@ ++Makefile.in ++Makefile ++.deps ++*.a ++*.o +diff --git a/stage2/Makefile.am b/stage2/Makefile.am +index f8e6d42..04ff165 100644 +--- a/stage2/Makefile.am ++++ b/stage2/Makefile.am +@@ -7,19 +7,23 @@ noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ + fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ + imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ + nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ +- terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h ++ terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h gpt.h + EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) + + # For . +-INCLUDES = -I$(top_srcdir)/stage1 ++INCLUDES = -I$(top_srcdir)/stage1 -I$(top_srcdir)/efi + + # The library for /sbin/grub. ++if PLATFORM_EFI ++noinst_LIBRARIES = libgrub.a libstage2.a ++else + noinst_LIBRARIES = libgrub.a ++endif + libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ + disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ +- fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ +- fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ +- terminfo.c tparm.c ++ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_uefi.c fsys_ufs2.c \ ++ fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c sha256crypt.c \ ++ sha512crypt.c stage2.c terminfo.c tparm.c graphics.c efistubs.c + libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ + -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ + -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ +@@ -27,12 +31,14 @@ libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ + -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 + + # Stage 2 and Stage 1.5's. +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++ ++if !PLATFORM_EFI + + EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec + + if DISKLESS_SUPPORT +-pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ ++pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ + ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ + reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ + nbgrub pxegrub +@@ -43,7 +49,7 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ + reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ + xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec + else +-pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ ++pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ + ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ + reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 + noinst_DATA = pre_stage2 start start_eltorito +@@ -55,11 +61,13 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ + endif + MOSTLYCLEANFILES = $(noinst_PROGRAMS) + +-PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 +-START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 +-NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 +-PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 +-START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 ++endif ++ ++PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 $(LOADER_LDFLAGS) ++START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 $(LOADER_LDFLAGS) ++NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 $(LOADER_LDFLAGS) ++PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS) ++START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS) + + if NETBOOT_SUPPORT + NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 +@@ -79,10 +87,25 @@ else + HERCULES_FLAGS = + endif + ++if GRAPHICS_SUPPORT ++GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 ++else ++GRAPHICS_FLAGS = ++endif ++ + STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) ++ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) ++ ++libstage2_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ ++ disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ ++ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_uefi.c fsys_ufs2.c \ ++ fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c sha256crypt.c \ ++ sha512crypt.c stage2.c terminfo.c tparm.c efistubs.c ++libstage2_a_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) + +-STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 ++if !PLATFORM_EFI ++ ++STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 $(LOADER_LDFLAGS) + STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 + + # For stage2 target. +@@ -90,13 +113,15 @@ pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ + cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ + fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ + fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ +- hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c ++ hercules.c md5.c serial.c smp-imps.c sha256crypt.c sha512crypt.c \ ++ stage2.c terminfo.c tparm.c graphics.c + pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) + pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) + pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) + ++pre_stage2_exec_LDADD = @LIBGCC@ + if NETBOOT_SUPPORT +-pre_stage2_exec_LDADD = ../netboot/libdrivers.a ++pre_stage2_exec_LDADD += ../netboot/libdrivers.a + endif + + if DISKLESS_SUPPORT +@@ -105,7 +130,7 @@ else + BUILT_SOURCES = stage2_size.h + endif + +-CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) ++CLEANFILES = $(pkgdata_DATA) $(noinst_DATA) $(BUILT_SOURCES) + + stage2_size.h: pre_stage2 + -rm -f stage2_size.h +@@ -115,6 +140,7 @@ stage2_size.h: pre_stage2 + start_exec_SOURCES = start.S + start_exec_CCASFLAGS = $(STAGE2_COMPILE) + start_exec_LDFLAGS = $(START_LINK) ++start_exec_LDADD = @LIBGCC@ + + # XXX: automake doesn't provide a way to specify dependencies for object + # files explicitly, so we must write this by a general Makefile scheme. +@@ -129,6 +155,7 @@ stage2: pre_stage2 start + start_eltorito_exec_SOURCES = start_eltorito.S + start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) + start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) ++start_eltorito_exec_LDADD = @LIBGCC@ + + start_eltorito_exec-start.$(OBJEXT): stage2_size.h + +@@ -144,6 +171,7 @@ e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ + e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ + -DNO_BLOCK_FILES=1 + e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++e2fs_stage1_5_exec_LDADD = @LIBGCC@ + + # For fat_stage1_5 target. + fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +@@ -153,6 +181,7 @@ fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ + fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ + -DNO_BLOCK_FILES=1 + fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++fat_stage1_5_exec_LDADD = @LIBGCC@ + + # For ffs_stage1_5 target. + ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +@@ -162,6 +191,7 @@ ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ + ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ + -DNO_BLOCK_FILES=1 + ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ffs_stage1_5_exec_LDADD = @LIBGCC@ + + # For ufs2_stage1_5 target. + ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +@@ -171,6 +201,7 @@ ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ + ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ + -DNO_BLOCK_FILES=1 + ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ufs2_stage1_5_exec_LDADD = @LIBGCC@ + + # For minix_stage1_5 target. + minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +@@ -180,6 +211,7 @@ minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ + minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ + -DNO_BLOCK_FILES=1 + minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++minix_stage1_5_exec_LDADD = @LIBGCC@ + + # For reiserfs_stage1_5 target. + reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +@@ -189,6 +221,7 @@ reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ + reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ + -DNO_BLOCK_FILES=1 + reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++reiserfs_stage1_5_exec_LDADD = @LIBGCC@ + + # For vstafs_stage1_5 target. + vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +@@ -198,6 +231,7 @@ vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ + vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ + -DNO_BLOCK_FILES=1 + vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++vstafs_stage1_5_exec_LDADD = @LIBGCC@ + + # For jfs_stage1_5 target. + jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +@@ -207,6 +241,7 @@ jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ + jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ + -DNO_BLOCK_FILES=1 + jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++jfs_stage1_5_exec_LDADD = @LIBGCC@ + + # For xfs_stage1_5 target. + xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +@@ -216,6 +251,7 @@ xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ + xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ + -DNO_BLOCK_FILES=1 + xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++xfs_stage1_5_exec_LDADD = @LIBGCC@ + + # For iso9660_stage1_5 target. + iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ +@@ -225,6 +261,7 @@ iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ + iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ + -DNO_BLOCK_FILES=1 + iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++iso9660_stage1_5_exec_LDADD = @LIBGCC@ + + # For diskless target. + diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) +@@ -233,7 +270,7 @@ diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ + diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ + -DSUPPORT_DISKLESS=1 + diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) +-diskless_exec_LDADD = ../netboot/libdrivers.a ++diskless_exec_LDADD = ../netboot/libdrivers.a @LIBGCC@ + + diskless_size.h: diskless + -rm -f $@ +@@ -270,3 +307,5 @@ pxegrub: pxeloader diskless + SUFFIXES = .exec + .exec: + $(OBJCOPY) -O binary $< $@ ++ ++endif +diff --git a/stage2/Makefile.in b/stage2/Makefile.in +deleted file mode 100644 +index d0062bd..0000000 +--- a/stage2/Makefile.in ++++ /dev/null +@@ -1,3250 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +- +- +- +- +-SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.exec$(EXEEXT) \ +- diskless.exec$(EXEEXT) +-@DISKLESS_SUPPORT_FALSE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ start.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ start_eltorito.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ e2fs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ fat_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ ffs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ iso9660_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ jfs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ minix_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ ufs2_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ vstafs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_FALSE@ xfs_stage1_5.exec$(EXEEXT) +-@DISKLESS_SUPPORT_TRUE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ start.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ start_eltorito.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ e2fs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ fat_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ ffs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ iso9660_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ jfs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ minix_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ ufs2_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ vstafs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ xfs_stage1_5.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ nbloader.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ pxeloader.exec$(EXEEXT) \ +-@DISKLESS_SUPPORT_TRUE@ diskless.exec$(EXEEXT) +-subdir = stage2 +-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ +- $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-LIBRARIES = $(noinst_LIBRARIES) +-AR = ar +-ARFLAGS = cru +-libgrub_a_AR = $(AR) $(ARFLAGS) +-libgrub_a_LIBADD = +-am_libgrub_a_OBJECTS = libgrub_a-boot.$(OBJEXT) \ +- libgrub_a-builtins.$(OBJEXT) libgrub_a-char_io.$(OBJEXT) \ +- libgrub_a-cmdline.$(OBJEXT) libgrub_a-common.$(OBJEXT) \ +- libgrub_a-disk_io.$(OBJEXT) libgrub_a-fsys_ext2fs.$(OBJEXT) \ +- libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_ffs.$(OBJEXT) \ +- libgrub_a-fsys_iso9660.$(OBJEXT) libgrub_a-fsys_jfs.$(OBJEXT) \ +- libgrub_a-fsys_minix.$(OBJEXT) \ +- libgrub_a-fsys_reiserfs.$(OBJEXT) \ +- libgrub_a-fsys_ufs2.$(OBJEXT) libgrub_a-fsys_vstafs.$(OBJEXT) \ +- libgrub_a-fsys_xfs.$(OBJEXT) libgrub_a-gunzip.$(OBJEXT) \ +- libgrub_a-md5.$(OBJEXT) libgrub_a-serial.$(OBJEXT) \ +- libgrub_a-stage2.$(OBJEXT) libgrub_a-terminfo.$(OBJEXT) \ +- libgrub_a-tparm.$(OBJEXT) +-libgrub_a_OBJECTS = $(am_libgrub_a_OBJECTS) +-PROGRAMS = $(noinst_PROGRAMS) +-am__objects_1 = diskless_exec-asm.$(OBJEXT) \ +- diskless_exec-bios.$(OBJEXT) diskless_exec-boot.$(OBJEXT) \ +- diskless_exec-builtins.$(OBJEXT) \ +- diskless_exec-char_io.$(OBJEXT) \ +- diskless_exec-cmdline.$(OBJEXT) diskless_exec-common.$(OBJEXT) \ +- diskless_exec-console.$(OBJEXT) \ +- diskless_exec-disk_io.$(OBJEXT) \ +- diskless_exec-fsys_ext2fs.$(OBJEXT) \ +- diskless_exec-fsys_fat.$(OBJEXT) \ +- diskless_exec-fsys_ffs.$(OBJEXT) \ +- diskless_exec-fsys_iso9660.$(OBJEXT) \ +- diskless_exec-fsys_jfs.$(OBJEXT) \ +- diskless_exec-fsys_minix.$(OBJEXT) \ +- diskless_exec-fsys_reiserfs.$(OBJEXT) \ +- diskless_exec-fsys_ufs2.$(OBJEXT) \ +- diskless_exec-fsys_vstafs.$(OBJEXT) \ +- diskless_exec-fsys_xfs.$(OBJEXT) \ +- diskless_exec-gunzip.$(OBJEXT) \ +- diskless_exec-hercules.$(OBJEXT) diskless_exec-md5.$(OBJEXT) \ +- diskless_exec-serial.$(OBJEXT) \ +- diskless_exec-smp-imps.$(OBJEXT) \ +- diskless_exec-stage2.$(OBJEXT) \ +- diskless_exec-terminfo.$(OBJEXT) diskless_exec-tparm.$(OBJEXT) +-am_diskless_exec_OBJECTS = $(am__objects_1) +-diskless_exec_OBJECTS = $(am_diskless_exec_OBJECTS) +-diskless_exec_DEPENDENCIES = ../netboot/libdrivers.a +-am_e2fs_stage1_5_exec_OBJECTS = e2fs_stage1_5_exec-start.$(OBJEXT) \ +- e2fs_stage1_5_exec-asm.$(OBJEXT) \ +- e2fs_stage1_5_exec-common.$(OBJEXT) \ +- e2fs_stage1_5_exec-char_io.$(OBJEXT) \ +- e2fs_stage1_5_exec-disk_io.$(OBJEXT) \ +- e2fs_stage1_5_exec-stage1_5.$(OBJEXT) \ +- e2fs_stage1_5_exec-fsys_ext2fs.$(OBJEXT) \ +- e2fs_stage1_5_exec-bios.$(OBJEXT) +-e2fs_stage1_5_exec_OBJECTS = $(am_e2fs_stage1_5_exec_OBJECTS) +-e2fs_stage1_5_exec_LDADD = $(LDADD) +-am_fat_stage1_5_exec_OBJECTS = fat_stage1_5_exec-start.$(OBJEXT) \ +- fat_stage1_5_exec-asm.$(OBJEXT) \ +- fat_stage1_5_exec-common.$(OBJEXT) \ +- fat_stage1_5_exec-char_io.$(OBJEXT) \ +- fat_stage1_5_exec-disk_io.$(OBJEXT) \ +- fat_stage1_5_exec-stage1_5.$(OBJEXT) \ +- fat_stage1_5_exec-fsys_fat.$(OBJEXT) \ +- fat_stage1_5_exec-bios.$(OBJEXT) +-fat_stage1_5_exec_OBJECTS = $(am_fat_stage1_5_exec_OBJECTS) +-fat_stage1_5_exec_LDADD = $(LDADD) +-am_ffs_stage1_5_exec_OBJECTS = ffs_stage1_5_exec-start.$(OBJEXT) \ +- ffs_stage1_5_exec-asm.$(OBJEXT) \ +- ffs_stage1_5_exec-common.$(OBJEXT) \ +- ffs_stage1_5_exec-char_io.$(OBJEXT) \ +- ffs_stage1_5_exec-disk_io.$(OBJEXT) \ +- ffs_stage1_5_exec-stage1_5.$(OBJEXT) \ +- ffs_stage1_5_exec-fsys_ffs.$(OBJEXT) \ +- ffs_stage1_5_exec-bios.$(OBJEXT) +-ffs_stage1_5_exec_OBJECTS = $(am_ffs_stage1_5_exec_OBJECTS) +-ffs_stage1_5_exec_LDADD = $(LDADD) +-am_iso9660_stage1_5_exec_OBJECTS = \ +- iso9660_stage1_5_exec-start_eltorito.$(OBJEXT) \ +- iso9660_stage1_5_exec-asm.$(OBJEXT) \ +- iso9660_stage1_5_exec-common.$(OBJEXT) \ +- iso9660_stage1_5_exec-char_io.$(OBJEXT) \ +- iso9660_stage1_5_exec-disk_io.$(OBJEXT) \ +- iso9660_stage1_5_exec-stage1_5.$(OBJEXT) \ +- iso9660_stage1_5_exec-fsys_iso9660.$(OBJEXT) \ +- iso9660_stage1_5_exec-bios.$(OBJEXT) +-iso9660_stage1_5_exec_OBJECTS = $(am_iso9660_stage1_5_exec_OBJECTS) +-iso9660_stage1_5_exec_LDADD = $(LDADD) +-am_jfs_stage1_5_exec_OBJECTS = jfs_stage1_5_exec-start.$(OBJEXT) \ +- jfs_stage1_5_exec-asm.$(OBJEXT) \ +- jfs_stage1_5_exec-common.$(OBJEXT) \ +- jfs_stage1_5_exec-char_io.$(OBJEXT) \ +- jfs_stage1_5_exec-disk_io.$(OBJEXT) \ +- jfs_stage1_5_exec-stage1_5.$(OBJEXT) \ +- jfs_stage1_5_exec-fsys_jfs.$(OBJEXT) \ +- jfs_stage1_5_exec-bios.$(OBJEXT) +-jfs_stage1_5_exec_OBJECTS = $(am_jfs_stage1_5_exec_OBJECTS) +-jfs_stage1_5_exec_LDADD = $(LDADD) +-am_minix_stage1_5_exec_OBJECTS = minix_stage1_5_exec-start.$(OBJEXT) \ +- minix_stage1_5_exec-asm.$(OBJEXT) \ +- minix_stage1_5_exec-common.$(OBJEXT) \ +- minix_stage1_5_exec-char_io.$(OBJEXT) \ +- minix_stage1_5_exec-disk_io.$(OBJEXT) \ +- minix_stage1_5_exec-stage1_5.$(OBJEXT) \ +- minix_stage1_5_exec-fsys_minix.$(OBJEXT) \ +- minix_stage1_5_exec-bios.$(OBJEXT) +-minix_stage1_5_exec_OBJECTS = $(am_minix_stage1_5_exec_OBJECTS) +-minix_stage1_5_exec_LDADD = $(LDADD) +-am_nbloader_exec_OBJECTS = nbloader_exec-nbloader.$(OBJEXT) +-nbloader_exec_OBJECTS = $(am_nbloader_exec_OBJECTS) +-nbloader_exec_LDADD = $(LDADD) +-am_pre_stage2_exec_OBJECTS = pre_stage2_exec-asm.$(OBJEXT) \ +- pre_stage2_exec-bios.$(OBJEXT) pre_stage2_exec-boot.$(OBJEXT) \ +- pre_stage2_exec-builtins.$(OBJEXT) \ +- pre_stage2_exec-char_io.$(OBJEXT) \ +- pre_stage2_exec-cmdline.$(OBJEXT) \ +- pre_stage2_exec-common.$(OBJEXT) \ +- pre_stage2_exec-console.$(OBJEXT) \ +- pre_stage2_exec-disk_io.$(OBJEXT) \ +- pre_stage2_exec-fsys_ext2fs.$(OBJEXT) \ +- pre_stage2_exec-fsys_fat.$(OBJEXT) \ +- pre_stage2_exec-fsys_ffs.$(OBJEXT) \ +- pre_stage2_exec-fsys_iso9660.$(OBJEXT) \ +- pre_stage2_exec-fsys_jfs.$(OBJEXT) \ +- pre_stage2_exec-fsys_minix.$(OBJEXT) \ +- pre_stage2_exec-fsys_reiserfs.$(OBJEXT) \ +- pre_stage2_exec-fsys_ufs2.$(OBJEXT) \ +- pre_stage2_exec-fsys_vstafs.$(OBJEXT) \ +- pre_stage2_exec-fsys_xfs.$(OBJEXT) \ +- pre_stage2_exec-gunzip.$(OBJEXT) \ +- pre_stage2_exec-hercules.$(OBJEXT) \ +- pre_stage2_exec-md5.$(OBJEXT) pre_stage2_exec-serial.$(OBJEXT) \ +- pre_stage2_exec-smp-imps.$(OBJEXT) \ +- pre_stage2_exec-stage2.$(OBJEXT) \ +- pre_stage2_exec-terminfo.$(OBJEXT) \ +- pre_stage2_exec-tparm.$(OBJEXT) +-pre_stage2_exec_OBJECTS = $(am_pre_stage2_exec_OBJECTS) +-@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_DEPENDENCIES = \ +-@NETBOOT_SUPPORT_TRUE@ ../netboot/libdrivers.a +-am_pxeloader_exec_OBJECTS = pxeloader_exec-pxeloader.$(OBJEXT) +-pxeloader_exec_OBJECTS = $(am_pxeloader_exec_OBJECTS) +-pxeloader_exec_LDADD = $(LDADD) +-am_reiserfs_stage1_5_exec_OBJECTS = \ +- reiserfs_stage1_5_exec-start.$(OBJEXT) \ +- reiserfs_stage1_5_exec-asm.$(OBJEXT) \ +- reiserfs_stage1_5_exec-common.$(OBJEXT) \ +- reiserfs_stage1_5_exec-char_io.$(OBJEXT) \ +- reiserfs_stage1_5_exec-disk_io.$(OBJEXT) \ +- reiserfs_stage1_5_exec-stage1_5.$(OBJEXT) \ +- reiserfs_stage1_5_exec-fsys_reiserfs.$(OBJEXT) \ +- reiserfs_stage1_5_exec-bios.$(OBJEXT) +-reiserfs_stage1_5_exec_OBJECTS = $(am_reiserfs_stage1_5_exec_OBJECTS) +-reiserfs_stage1_5_exec_LDADD = $(LDADD) +-am_start_exec_OBJECTS = start_exec-start.$(OBJEXT) +-start_exec_OBJECTS = $(am_start_exec_OBJECTS) +-start_exec_LDADD = $(LDADD) +-am_start_eltorito_exec_OBJECTS = \ +- start_eltorito_exec-start_eltorito.$(OBJEXT) +-start_eltorito_exec_OBJECTS = $(am_start_eltorito_exec_OBJECTS) +-start_eltorito_exec_LDADD = $(LDADD) +-am_ufs2_stage1_5_exec_OBJECTS = ufs2_stage1_5_exec-start.$(OBJEXT) \ +- ufs2_stage1_5_exec-asm.$(OBJEXT) \ +- ufs2_stage1_5_exec-common.$(OBJEXT) \ +- ufs2_stage1_5_exec-char_io.$(OBJEXT) \ +- ufs2_stage1_5_exec-disk_io.$(OBJEXT) \ +- ufs2_stage1_5_exec-stage1_5.$(OBJEXT) \ +- ufs2_stage1_5_exec-fsys_ufs2.$(OBJEXT) \ +- ufs2_stage1_5_exec-bios.$(OBJEXT) +-ufs2_stage1_5_exec_OBJECTS = $(am_ufs2_stage1_5_exec_OBJECTS) +-ufs2_stage1_5_exec_LDADD = $(LDADD) +-am_vstafs_stage1_5_exec_OBJECTS = \ +- vstafs_stage1_5_exec-start.$(OBJEXT) \ +- vstafs_stage1_5_exec-asm.$(OBJEXT) \ +- vstafs_stage1_5_exec-common.$(OBJEXT) \ +- vstafs_stage1_5_exec-char_io.$(OBJEXT) \ +- vstafs_stage1_5_exec-disk_io.$(OBJEXT) \ +- vstafs_stage1_5_exec-stage1_5.$(OBJEXT) \ +- vstafs_stage1_5_exec-fsys_vstafs.$(OBJEXT) \ +- vstafs_stage1_5_exec-bios.$(OBJEXT) +-vstafs_stage1_5_exec_OBJECTS = $(am_vstafs_stage1_5_exec_OBJECTS) +-vstafs_stage1_5_exec_LDADD = $(LDADD) +-am_xfs_stage1_5_exec_OBJECTS = xfs_stage1_5_exec-start.$(OBJEXT) \ +- xfs_stage1_5_exec-asm.$(OBJEXT) \ +- xfs_stage1_5_exec-common.$(OBJEXT) \ +- xfs_stage1_5_exec-char_io.$(OBJEXT) \ +- xfs_stage1_5_exec-disk_io.$(OBJEXT) \ +- xfs_stage1_5_exec-stage1_5.$(OBJEXT) \ +- xfs_stage1_5_exec-fsys_xfs.$(OBJEXT) \ +- xfs_stage1_5_exec-bios.$(OBJEXT) +-xfs_stage1_5_exec_OBJECTS = $(am_xfs_stage1_5_exec_OBJECTS) +-xfs_stage1_5_exec_LDADD = $(LDADD) +-SCRIPTS = $(noinst_SCRIPTS) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \ +- $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \ +- $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \ +- $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \ +- $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \ +- $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \ +- $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \ +- $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \ +- $(xfs_stage1_5_exec_SOURCES) +-DIST_SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \ +- $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \ +- $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \ +- $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \ +- $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \ +- $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \ +- $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \ +- $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \ +- $(xfs_stage1_5_exec_SOURCES) +-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +-am__vpath_adj = case $$p in \ +- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +- *) f=$$p;; \ +- esac; +-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +-am__installdirs = "$(DESTDIR)$(pkglibdir)" +-pkglibDATA_INSTALL = $(INSTALL_DATA) +-DATA = $(noinst_DATA) $(pkglib_DATA) +-HEADERS = $(noinst_HEADERS) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +- +-# Stage 2 and Stage 1.5's. +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +- +-# For test target. +-TESTS = size_test +-noinst_SCRIPTS = $(TESTS) +- +-# For dist target. +-noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ +- fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ +- imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ +- nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ +- terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h +- +-EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) +- +-# For . +-INCLUDES = -I$(top_srcdir)/stage1 +- +-# The library for /sbin/grub. +-noinst_LIBRARIES = libgrub.a +-libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ +- disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ +- fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ +- fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ +- terminfo.c tparm.c +- +-libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ +- -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ +- -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ +- -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ +- -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 +- +-@DISKLESS_SUPPORT_FALSE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ +-@DISKLESS_SUPPORT_FALSE@ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ +-@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 +- +-@DISKLESS_SUPPORT_TRUE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ +-@DISKLESS_SUPPORT_TRUE@ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ +-@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ +-@DISKLESS_SUPPORT_TRUE@ nbgrub pxegrub +- +-@DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start start_eltorito +-@DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless +-MOSTLYCLEANFILES = $(noinst_PROGRAMS) +-PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 +-START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 +-NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 +-PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 +-START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 +-@NETBOOT_SUPPORT_FALSE@NETBOOT_FLAGS = +-@NETBOOT_SUPPORT_TRUE@NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 +-@SERIAL_SUPPORT_FALSE@SERIAL_FLAGS = +-@SERIAL_SUPPORT_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 +-@HERCULES_SUPPORT_FALSE@HERCULES_FLAGS = +-@HERCULES_SUPPORT_TRUE@HERCULES_FLAGS = -DSUPPORT_HERCULES=1 +-STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) +- +-STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 +-STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 +- +-# For stage2 target. +-pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ +- cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ +- fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ +- fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ +- hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c +- +-pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) +-pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) +-pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) +-@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_LDADD = ../netboot/libdrivers.a +-@DISKLESS_SUPPORT_FALSE@BUILT_SOURCES = stage2_size.h +-@DISKLESS_SUPPORT_TRUE@BUILT_SOURCES = stage2_size.h diskless_size.h +-CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) +-start_exec_SOURCES = start.S +-start_exec_CCASFLAGS = $(STAGE2_COMPILE) +-start_exec_LDFLAGS = $(START_LINK) +-start_eltorito_exec_SOURCES = start_eltorito.S +-start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) +-start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) +- +-# For e2fs_stage1_5 target. +-e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +- stage1_5.c fsys_ext2fs.c bios.c +- +-e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ +- -DNO_BLOCK_FILES=1 +- +-e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ +- -DNO_BLOCK_FILES=1 +- +-e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For fat_stage1_5 target. +-fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +- stage1_5.c fsys_fat.c bios.c +- +-fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ +- -DNO_BLOCK_FILES=1 +- +-fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ +- -DNO_BLOCK_FILES=1 +- +-fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For ffs_stage1_5 target. +-ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +- stage1_5.c fsys_ffs.c bios.c +- +-ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For ufs2_stage1_5 target. +-ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +- stage1_5.c fsys_ufs2.c bios.c +- +-ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ +- -DNO_BLOCK_FILES=1 +- +-ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ +- -DNO_BLOCK_FILES=1 +- +-ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For minix_stage1_5 target. +-minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ +- stage1_5.c fsys_minix.c bios.c +- +-minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ +- -DNO_BLOCK_FILES=1 +- +-minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ +- -DNO_BLOCK_FILES=1 +- +-minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For reiserfs_stage1_5 target. +-reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +- disk_io.c stage1_5.c fsys_reiserfs.c bios.c +- +-reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For vstafs_stage1_5 target. +-vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +- disk_io.c stage1_5.c fsys_vstafs.c bios.c +- +-vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For jfs_stage1_5 target. +-jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +- disk_io.c stage1_5.c fsys_jfs.c bios.c +- +-jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For xfs_stage1_5 target. +-xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ +- disk_io.c stage1_5.c fsys_xfs.c bios.c +- +-xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ +- -DNO_BLOCK_FILES=1 +- +-xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For iso9660_stage1_5 target. +-iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ +- disk_io.c stage1_5.c fsys_iso9660.c bios.c +- +-iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ +- -DNO_BLOCK_FILES=1 +- +-iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ +- -DNO_BLOCK_FILES=1 +- +-iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +- +-# For diskless target. +-diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) +-diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ +- -DSUPPORT_DISKLESS=1 +- +-diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ +- -DSUPPORT_DISKLESS=1 +- +-diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) +-diskless_exec_LDADD = ../netboot/libdrivers.a +- +-# For nbloader target. +-nbloader_exec_SOURCES = nbloader.S +-nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) +-nbloader_exec_LDFLAGS = $(NBLOADER_LINK) +- +-# For pxeloader target. +-pxeloader_exec_SOURCES = pxeloader.S +-pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) +-pxeloader_exec_LDFLAGS = $(PXELOADER_LINK) +- +-# General rule for making a raw binary. +-SUFFIXES = .exec +-all: $(BUILT_SOURCES) +- $(MAKE) $(AM_MAKEFLAGS) all-am +- +-.SUFFIXES: +-.SUFFIXES: .exec .S .c .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu stage2/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu stage2/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-clean-noinstLIBRARIES: +- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +-libgrub.a: $(libgrub_a_OBJECTS) $(libgrub_a_DEPENDENCIES) +- -rm -f libgrub.a +- $(libgrub_a_AR) libgrub.a $(libgrub_a_OBJECTS) $(libgrub_a_LIBADD) +- $(RANLIB) libgrub.a +- +-clean-noinstPROGRAMS: +- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +-diskless.exec$(EXEEXT): $(diskless_exec_OBJECTS) $(diskless_exec_DEPENDENCIES) +- @rm -f diskless.exec$(EXEEXT) +- $(LINK) $(diskless_exec_LDFLAGS) $(diskless_exec_OBJECTS) $(diskless_exec_LDADD) $(LIBS) +-e2fs_stage1_5.exec$(EXEEXT): $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_DEPENDENCIES) +- @rm -f e2fs_stage1_5.exec$(EXEEXT) +- $(LINK) $(e2fs_stage1_5_exec_LDFLAGS) $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_LDADD) $(LIBS) +-fat_stage1_5.exec$(EXEEXT): $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_DEPENDENCIES) +- @rm -f fat_stage1_5.exec$(EXEEXT) +- $(LINK) $(fat_stage1_5_exec_LDFLAGS) $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_LDADD) $(LIBS) +-ffs_stage1_5.exec$(EXEEXT): $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_DEPENDENCIES) +- @rm -f ffs_stage1_5.exec$(EXEEXT) +- $(LINK) $(ffs_stage1_5_exec_LDFLAGS) $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_LDADD) $(LIBS) +-iso9660_stage1_5.exec$(EXEEXT): $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_DEPENDENCIES) +- @rm -f iso9660_stage1_5.exec$(EXEEXT) +- $(LINK) $(iso9660_stage1_5_exec_LDFLAGS) $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_LDADD) $(LIBS) +-jfs_stage1_5.exec$(EXEEXT): $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_DEPENDENCIES) +- @rm -f jfs_stage1_5.exec$(EXEEXT) +- $(LINK) $(jfs_stage1_5_exec_LDFLAGS) $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_LDADD) $(LIBS) +-minix_stage1_5.exec$(EXEEXT): $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_DEPENDENCIES) +- @rm -f minix_stage1_5.exec$(EXEEXT) +- $(LINK) $(minix_stage1_5_exec_LDFLAGS) $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_LDADD) $(LIBS) +-nbloader.exec$(EXEEXT): $(nbloader_exec_OBJECTS) $(nbloader_exec_DEPENDENCIES) +- @rm -f nbloader.exec$(EXEEXT) +- $(LINK) $(nbloader_exec_LDFLAGS) $(nbloader_exec_OBJECTS) $(nbloader_exec_LDADD) $(LIBS) +-pre_stage2.exec$(EXEEXT): $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_DEPENDENCIES) +- @rm -f pre_stage2.exec$(EXEEXT) +- $(LINK) $(pre_stage2_exec_LDFLAGS) $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_LDADD) $(LIBS) +-pxeloader.exec$(EXEEXT): $(pxeloader_exec_OBJECTS) $(pxeloader_exec_DEPENDENCIES) +- @rm -f pxeloader.exec$(EXEEXT) +- $(LINK) $(pxeloader_exec_LDFLAGS) $(pxeloader_exec_OBJECTS) $(pxeloader_exec_LDADD) $(LIBS) +-reiserfs_stage1_5.exec$(EXEEXT): $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_DEPENDENCIES) +- @rm -f reiserfs_stage1_5.exec$(EXEEXT) +- $(LINK) $(reiserfs_stage1_5_exec_LDFLAGS) $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_LDADD) $(LIBS) +-start.exec$(EXEEXT): $(start_exec_OBJECTS) $(start_exec_DEPENDENCIES) +- @rm -f start.exec$(EXEEXT) +- $(LINK) $(start_exec_LDFLAGS) $(start_exec_OBJECTS) $(start_exec_LDADD) $(LIBS) +-start_eltorito.exec$(EXEEXT): $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_DEPENDENCIES) +- @rm -f start_eltorito.exec$(EXEEXT) +- $(LINK) $(start_eltorito_exec_LDFLAGS) $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_LDADD) $(LIBS) +-ufs2_stage1_5.exec$(EXEEXT): $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_DEPENDENCIES) +- @rm -f ufs2_stage1_5.exec$(EXEEXT) +- $(LINK) $(ufs2_stage1_5_exec_LDFLAGS) $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_LDADD) $(LIBS) +-vstafs_stage1_5.exec$(EXEEXT): $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_DEPENDENCIES) +- @rm -f vstafs_stage1_5.exec$(EXEEXT) +- $(LINK) $(vstafs_stage1_5_exec_LDFLAGS) $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_LDADD) $(LIBS) +-xfs_stage1_5.exec$(EXEEXT): $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_DEPENDENCIES) +- @rm -f xfs_stage1_5.exec$(EXEEXT) +- $(LINK) $(xfs_stage1_5_exec_LDFLAGS) $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_LDADD) $(LIBS) +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-boot.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-builtins.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-cmdline.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-console.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ext2fs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_fat.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ffs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_iso9660.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_jfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_minix.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_reiserfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ufs2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_vstafs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_xfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-gunzip.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-hercules.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-md5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-serial.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-smp-imps.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-stage2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-terminfo.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-tparm.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-boot.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-builtins.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-cmdline.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ext2fs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_fat.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ffs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_iso9660.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_jfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_minix.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_reiserfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ufs2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_vstafs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_xfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-gunzip.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-md5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-serial.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-stage2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-terminfo.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-tparm.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-boot.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-builtins.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-cmdline.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-console.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_fat.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_minix.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-gunzip.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-hercules.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-md5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-serial.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-smp-imps.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-stage2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-terminfo.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-tparm.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-bios.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-char_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-common.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po@am__quote@ +- +-.S.o: +- $(CCASCOMPILE) -c $< +- +-.S.obj: +- $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` +- +-diskless_exec-asm.o: asm.S +- $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-diskless_exec-asm.obj: asm.S +- $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-e2fs_stage1_5_exec-start.o: start.S +- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-e2fs_stage1_5_exec-start.obj: start.S +- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-e2fs_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-e2fs_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-fat_stage1_5_exec-start.o: start.S +- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-fat_stage1_5_exec-start.obj: start.S +- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-fat_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-fat_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-ffs_stage1_5_exec-start.o: start.S +- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-ffs_stage1_5_exec-start.obj: start.S +- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-ffs_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-ffs_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-iso9660_stage1_5_exec-start_eltorito.o: start_eltorito.S +- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S +- +-iso9660_stage1_5_exec-start_eltorito.obj: start_eltorito.S +- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` +- +-iso9660_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-iso9660_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-jfs_stage1_5_exec-start.o: start.S +- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-jfs_stage1_5_exec-start.obj: start.S +- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-jfs_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-jfs_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-minix_stage1_5_exec-start.o: start.S +- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-minix_stage1_5_exec-start.obj: start.S +- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-minix_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-minix_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-nbloader_exec-nbloader.o: nbloader.S +- $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.o `test -f 'nbloader.S' || echo '$(srcdir)/'`nbloader.S +- +-nbloader_exec-nbloader.obj: nbloader.S +- $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.obj `if test -f 'nbloader.S'; then $(CYGPATH_W) 'nbloader.S'; else $(CYGPATH_W) '$(srcdir)/nbloader.S'; fi` +- +-pre_stage2_exec-asm.o: asm.S +- $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-pre_stage2_exec-asm.obj: asm.S +- $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-pxeloader_exec-pxeloader.o: pxeloader.S +- $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.o `test -f 'pxeloader.S' || echo '$(srcdir)/'`pxeloader.S +- +-pxeloader_exec-pxeloader.obj: pxeloader.S +- $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.obj `if test -f 'pxeloader.S'; then $(CYGPATH_W) 'pxeloader.S'; else $(CYGPATH_W) '$(srcdir)/pxeloader.S'; fi` +- +-reiserfs_stage1_5_exec-start.o: start.S +- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-reiserfs_stage1_5_exec-start.obj: start.S +- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-reiserfs_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-reiserfs_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-start_exec-start.o: start.S +- $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-start_exec-start.obj: start.S +- $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-start_eltorito_exec-start_eltorito.o: start_eltorito.S +- $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S +- +-start_eltorito_exec-start_eltorito.obj: start_eltorito.S +- $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` +- +-ufs2_stage1_5_exec-start.o: start.S +- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-ufs2_stage1_5_exec-start.obj: start.S +- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-ufs2_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-ufs2_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-vstafs_stage1_5_exec-start.o: start.S +- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-vstafs_stage1_5_exec-start.obj: start.S +- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-vstafs_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-vstafs_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-xfs_stage1_5_exec-start.o: start.S +- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S +- +-xfs_stage1_5_exec-start.obj: start.S +- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` +- +-xfs_stage1_5_exec-asm.o: asm.S +- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S +- +-xfs_stage1_5_exec-asm.obj: asm.S +- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +- +-.c.o: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< +- +-.c.obj: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +- +-libgrub_a-boot.o: boot.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.o -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='libgrub_a-boot.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c +- +-libgrub_a-boot.obj: boot.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='libgrub_a-boot.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` +- +-libgrub_a-builtins.o: builtins.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.o -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='libgrub_a-builtins.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c +- +-libgrub_a-builtins.obj: builtins.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='libgrub_a-builtins.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` +- +-libgrub_a-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='libgrub_a-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-libgrub_a-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='libgrub_a-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-libgrub_a-cmdline.o: cmdline.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.o -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='libgrub_a-cmdline.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c +- +-libgrub_a-cmdline.obj: cmdline.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='libgrub_a-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` +- +-libgrub_a-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.o -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='libgrub_a-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-libgrub_a-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='libgrub_a-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-libgrub_a-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='libgrub_a-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-libgrub_a-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='libgrub_a-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-libgrub_a-fsys_ext2fs.o: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c +- +-libgrub_a-fsys_ext2fs.obj: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` +- +-libgrub_a-fsys_fat.o: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='libgrub_a-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c +- +-libgrub_a-fsys_fat.obj: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='libgrub_a-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` +- +-libgrub_a-fsys_ffs.o: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='libgrub_a-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c +- +-libgrub_a-fsys_ffs.obj: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='libgrub_a-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` +- +-libgrub_a-fsys_iso9660.o: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c +- +-libgrub_a-fsys_iso9660.obj: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` +- +-libgrub_a-fsys_jfs.o: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c +- +-libgrub_a-fsys_jfs.obj: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` +- +-libgrub_a-fsys_minix.o: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c +- +-libgrub_a-fsys_minix.obj: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` +- +-libgrub_a-fsys_reiserfs.o: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c +- +-libgrub_a-fsys_reiserfs.obj: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` +- +-libgrub_a-fsys_ufs2.o: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c +- +-libgrub_a-fsys_ufs2.obj: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` +- +-libgrub_a-fsys_vstafs.o: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c +- +-libgrub_a-fsys_vstafs.obj: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` +- +-libgrub_a-fsys_xfs.o: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c +- +-libgrub_a-fsys_xfs.obj: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` +- +-libgrub_a-gunzip.o: gunzip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.o -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='libgrub_a-gunzip.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c +- +-libgrub_a-gunzip.obj: gunzip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='libgrub_a-gunzip.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` +- +-libgrub_a-md5.o: md5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.o -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libgrub_a-md5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c +- +-libgrub_a-md5.obj: md5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libgrub_a-md5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` +- +-libgrub_a-serial.o: serial.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.o -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='libgrub_a-serial.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c +- +-libgrub_a-serial.obj: serial.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='libgrub_a-serial.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` +- +-libgrub_a-stage2.o: stage2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='libgrub_a-stage2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c +- +-libgrub_a-stage2.obj: stage2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='libgrub_a-stage2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` +- +-libgrub_a-terminfo.o: terminfo.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.o -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='libgrub_a-terminfo.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c +- +-libgrub_a-terminfo.obj: terminfo.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='libgrub_a-terminfo.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` +- +-libgrub_a-tparm.o: tparm.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.o -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='libgrub_a-tparm.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c +- +-libgrub_a-tparm.obj: tparm.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='libgrub_a-tparm.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` +- +-diskless_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.o -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='diskless_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-diskless_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='diskless_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-diskless_exec-boot.o: boot.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.o -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='diskless_exec-boot.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c +- +-diskless_exec-boot.obj: boot.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='diskless_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` +- +-diskless_exec-builtins.o: builtins.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.o -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='diskless_exec-builtins.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c +- +-diskless_exec-builtins.obj: builtins.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='diskless_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` +- +-diskless_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='diskless_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-diskless_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='diskless_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-diskless_exec-cmdline.o: cmdline.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='diskless_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c +- +-diskless_exec-cmdline.obj: cmdline.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='diskless_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` +- +-diskless_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.o -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='diskless_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-diskless_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='diskless_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-diskless_exec-console.o: console.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.o -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='diskless_exec-console.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c +- +-diskless_exec-console.obj: console.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='diskless_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi` +- +-diskless_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='diskless_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-diskless_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='diskless_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-diskless_exec-fsys_ext2fs.o: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c +- +-diskless_exec-fsys_ext2fs.obj: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` +- +-diskless_exec-fsys_fat.o: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='diskless_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c +- +-diskless_exec-fsys_fat.obj: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='diskless_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` +- +-diskless_exec-fsys_ffs.o: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='diskless_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c +- +-diskless_exec-fsys_ffs.obj: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='diskless_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` +- +-diskless_exec-fsys_iso9660.o: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c +- +-diskless_exec-fsys_iso9660.obj: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` +- +-diskless_exec-fsys_jfs.o: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c +- +-diskless_exec-fsys_jfs.obj: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` +- +-diskless_exec-fsys_minix.o: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c +- +-diskless_exec-fsys_minix.obj: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` +- +-diskless_exec-fsys_reiserfs.o: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c +- +-diskless_exec-fsys_reiserfs.obj: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` +- +-diskless_exec-fsys_ufs2.o: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c +- +-diskless_exec-fsys_ufs2.obj: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` +- +-diskless_exec-fsys_vstafs.o: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c +- +-diskless_exec-fsys_vstafs.obj: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` +- +-diskless_exec-fsys_xfs.o: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c +- +-diskless_exec-fsys_xfs.obj: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` +- +-diskless_exec-gunzip.o: gunzip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='diskless_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c +- +-diskless_exec-gunzip.obj: gunzip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='diskless_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` +- +-diskless_exec-hercules.o: hercules.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.o -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='diskless_exec-hercules.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c +- +-diskless_exec-hercules.obj: hercules.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='diskless_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi` +- +-diskless_exec-md5.o: md5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.o -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='diskless_exec-md5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c +- +-diskless_exec-md5.obj: md5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='diskless_exec-md5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` +- +-diskless_exec-serial.o: serial.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.o -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='diskless_exec-serial.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c +- +-diskless_exec-serial.obj: serial.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='diskless_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` +- +-diskless_exec-smp-imps.o: smp-imps.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='diskless_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c +- +-diskless_exec-smp-imps.obj: smp-imps.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='diskless_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi` +- +-diskless_exec-stage2.o: stage2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='diskless_exec-stage2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c +- +-diskless_exec-stage2.obj: stage2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='diskless_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` +- +-diskless_exec-terminfo.o: terminfo.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='diskless_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c +- +-diskless_exec-terminfo.obj: terminfo.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='diskless_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` +- +-diskless_exec-tparm.o: tparm.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.o -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='diskless_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c +- +-diskless_exec-tparm.obj: tparm.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='diskless_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` +- +-e2fs_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='e2fs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-e2fs_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='e2fs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-e2fs_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='e2fs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-e2fs_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='e2fs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-e2fs_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-e2fs_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-e2fs_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-e2fs_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-e2fs_stage1_5_exec-fsys_ext2fs.o: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c +- +-e2fs_stage1_5_exec-fsys_ext2fs.obj: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` +- +-e2fs_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='e2fs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-e2fs_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='e2fs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-fat_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='fat_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-fat_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='fat_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-fat_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='fat_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-fat_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='fat_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-fat_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='fat_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-fat_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='fat_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-fat_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-fat_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-fat_stage1_5_exec-fsys_fat.o: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c +- +-fat_stage1_5_exec-fsys_fat.obj: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` +- +-fat_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='fat_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-fat_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='fat_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-ffs_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ffs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-ffs_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ffs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-ffs_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ffs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-ffs_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ffs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-ffs_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ffs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-ffs_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ffs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-ffs_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-ffs_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-ffs_stage1_5_exec-fsys_ffs.o: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c +- +-ffs_stage1_5_exec-fsys_ffs.obj: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` +- +-ffs_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ffs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-ffs_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ffs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-iso9660_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-iso9660_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-iso9660_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='iso9660_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-iso9660_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='iso9660_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-iso9660_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-iso9660_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-iso9660_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-iso9660_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-iso9660_stage1_5_exec-fsys_iso9660.o: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c +- +-iso9660_stage1_5_exec-fsys_iso9660.obj: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` +- +-iso9660_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-iso9660_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-jfs_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='jfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-jfs_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='jfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-jfs_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-jfs_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-jfs_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-jfs_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-jfs_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-jfs_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-jfs_stage1_5_exec-fsys_jfs.o: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c +- +-jfs_stage1_5_exec-fsys_jfs.obj: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` +- +-jfs_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='jfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-jfs_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='jfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-minix_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='minix_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-minix_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='minix_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-minix_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='minix_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-minix_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='minix_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-minix_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='minix_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-minix_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='minix_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-minix_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-minix_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-minix_stage1_5_exec-fsys_minix.o: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c +- +-minix_stage1_5_exec-fsys_minix.obj: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` +- +-minix_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='minix_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-minix_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='minix_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-pre_stage2_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='pre_stage2_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-pre_stage2_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='pre_stage2_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-pre_stage2_exec-boot.o: boot.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='pre_stage2_exec-boot.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c +- +-pre_stage2_exec-boot.obj: boot.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='pre_stage2_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` +- +-pre_stage2_exec-builtins.o: builtins.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='pre_stage2_exec-builtins.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c +- +-pre_stage2_exec-builtins.obj: builtins.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='pre_stage2_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` +- +-pre_stage2_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='pre_stage2_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-pre_stage2_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='pre_stage2_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-pre_stage2_exec-cmdline.o: cmdline.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='pre_stage2_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c +- +-pre_stage2_exec-cmdline.obj: cmdline.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='pre_stage2_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` +- +-pre_stage2_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='pre_stage2_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-pre_stage2_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='pre_stage2_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-pre_stage2_exec-console.o: console.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='pre_stage2_exec-console.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c +- +-pre_stage2_exec-console.obj: console.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='pre_stage2_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi` +- +-pre_stage2_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='pre_stage2_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-pre_stage2_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='pre_stage2_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-pre_stage2_exec-fsys_ext2fs.o: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c +- +-pre_stage2_exec-fsys_ext2fs.obj: fsys_ext2fs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` +- +-pre_stage2_exec-fsys_fat.o: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c +- +-pre_stage2_exec-fsys_fat.obj: fsys_fat.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` +- +-pre_stage2_exec-fsys_ffs.o: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c +- +-pre_stage2_exec-fsys_ffs.obj: fsys_ffs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` +- +-pre_stage2_exec-fsys_iso9660.o: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c +- +-pre_stage2_exec-fsys_iso9660.obj: fsys_iso9660.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` +- +-pre_stage2_exec-fsys_jfs.o: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c +- +-pre_stage2_exec-fsys_jfs.obj: fsys_jfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` +- +-pre_stage2_exec-fsys_minix.o: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c +- +-pre_stage2_exec-fsys_minix.obj: fsys_minix.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` +- +-pre_stage2_exec-fsys_reiserfs.o: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c +- +-pre_stage2_exec-fsys_reiserfs.obj: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` +- +-pre_stage2_exec-fsys_ufs2.o: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c +- +-pre_stage2_exec-fsys_ufs2.obj: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` +- +-pre_stage2_exec-fsys_vstafs.o: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c +- +-pre_stage2_exec-fsys_vstafs.obj: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` +- +-pre_stage2_exec-fsys_xfs.o: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c +- +-pre_stage2_exec-fsys_xfs.obj: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` +- +-pre_stage2_exec-gunzip.o: gunzip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='pre_stage2_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c +- +-pre_stage2_exec-gunzip.obj: gunzip.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='pre_stage2_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` +- +-pre_stage2_exec-hercules.o: hercules.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='pre_stage2_exec-hercules.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c +- +-pre_stage2_exec-hercules.obj: hercules.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='pre_stage2_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi` +- +-pre_stage2_exec-md5.o: md5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='pre_stage2_exec-md5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c +- +-pre_stage2_exec-md5.obj: md5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='pre_stage2_exec-md5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` +- +-pre_stage2_exec-serial.o: serial.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='pre_stage2_exec-serial.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c +- +-pre_stage2_exec-serial.obj: serial.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='pre_stage2_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` +- +-pre_stage2_exec-smp-imps.o: smp-imps.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='pre_stage2_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c +- +-pre_stage2_exec-smp-imps.obj: smp-imps.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='pre_stage2_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi` +- +-pre_stage2_exec-stage2.o: stage2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='pre_stage2_exec-stage2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c +- +-pre_stage2_exec-stage2.obj: stage2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='pre_stage2_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` +- +-pre_stage2_exec-terminfo.o: terminfo.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='pre_stage2_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c +- +-pre_stage2_exec-terminfo.obj: terminfo.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='pre_stage2_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` +- +-pre_stage2_exec-tparm.o: tparm.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='pre_stage2_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c +- +-pre_stage2_exec-tparm.obj: tparm.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='pre_stage2_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` +- +-reiserfs_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='reiserfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-reiserfs_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='reiserfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-reiserfs_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='reiserfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-reiserfs_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='reiserfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-reiserfs_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-reiserfs_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-reiserfs_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-reiserfs_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-reiserfs_stage1_5_exec-fsys_reiserfs.o: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c +- +-reiserfs_stage1_5_exec-fsys_reiserfs.obj: fsys_reiserfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` +- +-reiserfs_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='reiserfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-reiserfs_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='reiserfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-ufs2_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ufs2_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-ufs2_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ufs2_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-ufs2_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ufs2_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-ufs2_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ufs2_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-ufs2_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-ufs2_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-ufs2_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-ufs2_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-ufs2_stage1_5_exec-fsys_ufs2.o: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c +- +-ufs2_stage1_5_exec-fsys_ufs2.obj: fsys_ufs2.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` +- +-ufs2_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ufs2_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-ufs2_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ufs2_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-vstafs_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='vstafs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-vstafs_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='vstafs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-vstafs_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='vstafs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-vstafs_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='vstafs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-vstafs_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-vstafs_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-vstafs_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-vstafs_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-vstafs_stage1_5_exec-fsys_vstafs.o: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c +- +-vstafs_stage1_5_exec-fsys_vstafs.obj: fsys_vstafs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` +- +-vstafs_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='vstafs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-vstafs_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='vstafs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +- +-xfs_stage1_5_exec-common.o: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='xfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c +- +-xfs_stage1_5_exec-common.obj: common.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='xfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` +- +-xfs_stage1_5_exec-char_io.o: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c +- +-xfs_stage1_5_exec-char_io.obj: char_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` +- +-xfs_stage1_5_exec-disk_io.o: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c +- +-xfs_stage1_5_exec-disk_io.obj: disk_io.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` +- +-xfs_stage1_5_exec-stage1_5.o: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c +- +-xfs_stage1_5_exec-stage1_5.obj: stage1_5.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` +- +-xfs_stage1_5_exec-fsys_xfs.o: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c +- +-xfs_stage1_5_exec-fsys_xfs.obj: fsys_xfs.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` +- +-xfs_stage1_5_exec-bios.o: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='xfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c +- +-xfs_stage1_5_exec-bios.obj: bios.c +-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='xfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` +-uninstall-info-am: +-install-pkglibDATA: $(pkglib_DATA) +- @$(NORMAL_INSTALL) +- test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" +- @list='$(pkglib_DATA)'; for p in $$list; do \ +- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ +- f=$(am__strip_dir) \ +- echo " $(pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ +- $(pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ +- done +- +-uninstall-pkglibDATA: +- @$(NORMAL_UNINSTALL) +- @list='$(pkglib_DATA)'; for p in $$list; do \ +- f=$(am__strip_dir) \ +- echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ +- rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ +- done +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-check-TESTS: $(TESTS) +- @failed=0; all=0; xfail=0; xpass=0; skip=0; \ +- srcdir=$(srcdir); export srcdir; \ +- list='$(TESTS)'; \ +- if test -n "$$list"; then \ +- for tst in $$list; do \ +- if test -f ./$$tst; then dir=./; \ +- elif test -f $$tst; then dir=; \ +- else dir="$(srcdir)/"; fi; \ +- if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ +- all=`expr $$all + 1`; \ +- case " $(XFAIL_TESTS) " in \ +- *" $$tst "*) \ +- xpass=`expr $$xpass + 1`; \ +- failed=`expr $$failed + 1`; \ +- echo "XPASS: $$tst"; \ +- ;; \ +- *) \ +- echo "PASS: $$tst"; \ +- ;; \ +- esac; \ +- elif test $$? -ne 77; then \ +- all=`expr $$all + 1`; \ +- case " $(XFAIL_TESTS) " in \ +- *" $$tst "*) \ +- xfail=`expr $$xfail + 1`; \ +- echo "XFAIL: $$tst"; \ +- ;; \ +- *) \ +- failed=`expr $$failed + 1`; \ +- echo "FAIL: $$tst"; \ +- ;; \ +- esac; \ +- else \ +- skip=`expr $$skip + 1`; \ +- echo "SKIP: $$tst"; \ +- fi; \ +- done; \ +- if test "$$failed" -eq 0; then \ +- if test "$$xfail" -eq 0; then \ +- banner="All $$all tests passed"; \ +- else \ +- banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ +- fi; \ +- else \ +- if test "$$xpass" -eq 0; then \ +- banner="$$failed of $$all tests failed"; \ +- else \ +- banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ +- fi; \ +- fi; \ +- dashes="$$banner"; \ +- skipped=""; \ +- if test "$$skip" -ne 0; then \ +- skipped="($$skip tests were not run)"; \ +- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ +- dashes="$$skipped"; \ +- fi; \ +- report=""; \ +- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ +- report="Please report to $(PACKAGE_BUGREPORT)"; \ +- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ +- dashes="$$report"; \ +- fi; \ +- dashes=`echo "$$dashes" | sed s/./=/g`; \ +- echo "$$dashes"; \ +- echo "$$banner"; \ +- test -z "$$skipped" || echo "$$skipped"; \ +- test -z "$$report" || echo "$$report"; \ +- echo "$$dashes"; \ +- test "$$failed" -eq 0; \ +- else :; fi +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +- $(MAKE) $(AM_MAKEFLAGS) check-TESTS +-check: $(BUILT_SOURCES) +- $(MAKE) $(AM_MAKEFLAGS) check-am +-all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ +- $(HEADERS) +-installdirs: +- for dir in "$(DESTDIR)$(pkglibdir)"; do \ +- test -z "$$dir" || $(mkdir_p) "$$dir"; \ +- done +-install: $(BUILT_SOURCES) +- $(MAKE) $(AM_MAKEFLAGS) install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) +- +-clean-generic: +- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +-clean: clean-am +- +-clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ +- mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-exec-am: install-pkglibDATA +- +-install-info: install-info-am +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-info-am uninstall-pkglibDATA +- +-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ +- clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ +- distclean distclean-compile distclean-generic distclean-tags \ +- distdir dvi dvi-am html html-am info info-am install \ +- install-am install-data install-data-am install-exec \ +- install-exec-am install-info install-info-am install-man \ +- install-pkglibDATA install-strip installcheck installcheck-am \ +- installdirs maintainer-clean maintainer-clean-generic \ +- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ +- ps ps-am tags uninstall uninstall-am uninstall-info-am \ +- uninstall-pkglibDATA +- +- +-stage2_size.h: pre_stage2 +- -rm -f stage2_size.h +- set dummy `ls -l pre_stage2`; \ +- echo "#define STAGE2_SIZE $$6" > stage2_size.h +- +-# XXX: automake doesn't provide a way to specify dependencies for object +-# files explicitly, so we must write this by a general Makefile scheme. +-# If automake change the naming scheme for per-executable objects, this +-# will be broken. +-start_exec-start.$(OBJEXT): stage2_size.h +- +-stage2: pre_stage2 start +- -rm -f stage2 +- cat start pre_stage2 > stage2 +- +-start_eltorito_exec-start.$(OBJEXT): stage2_size.h +- +-stage2_eltorito: pre_stage2 start_eltorito +- -rm -f stage2_eltorito +- cat start_eltorito pre_stage2 > stage2_eltorito +- +-diskless_size.h: diskless +- -rm -f $@ +- set dummy `ls -l $^`; \ +- echo "#define DISKLESS_SIZE $$6" > $@ +- +-# XXX: See the comment for start_exec-start.o. +-nbloader_exec-nbloader.$(OBJEXT): diskless_size.h +- +-# For nbgrub target. +-nbgrub: nbloader diskless +- -rm -f $@ +- cat $^ > $@ +- +-# XXX: See the comment for start_exec-start.o. +-pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h +- +-# For pxegrub target. +-pxegrub: pxeloader diskless +- -rm -f $@ +- cat $^ > $@ +-.exec: +- $(OBJCOPY) -O binary $< $@ +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/stage2/asm.S b/stage2/asm.S +index 34b6e7d..5c4dd5e 100644 +--- a/stage2/asm.S ++++ b/stage2/asm.S +@@ -98,7 +98,7 @@ VARIABLE(version_string) + .string VERSION + VARIABLE(config_file) + #ifndef STAGE1_5 +- .string "/boot/grub/menu.lst" ++ .string "/boot/grub/grub.conf" + #else /* STAGE1_5 */ + .long 0xffffffff + .string "/boot/grub/stage2" +@@ -1622,36 +1622,78 @@ ENTRY(set_vbe_mode) + */ + + ENTRY(gateA20) ++ pushl %ebx ++ pushl %edx ++ call testA20 ++ jnz 1f ++ call A20_BIOS ++ call testA20 ++ jnz 1f ++ call A20_PORT92 ++ call testA20 ++ jnz 1f ++ call A20_KBDCTL ++ call testA20 ++ jnz 1f ++ movl $0,%eax ++ jmp 2f ++1: ++ movl $-1,%eax ++2: ++ popl %edx ++ popl %ebx ++ ret ++ ++testA20: ++ movl 0x500,%eax ++ movl 0x100500,%ebx ++ notl %eax ++ movl %eax,0x100500 ++ cmpl %eax,0x500 ++ pushfl ++ movl %ebx,0x100500 ++ notl %eax ++ movl %eax,0x500 ++ popfl ++ ret ++ ++A20_BIOS: + /* first, try a BIOS call */ +- pushl %ebp +- movl 8(%esp), %edx + + call EXT_C(prot_to_real) + + .code16 +- movw $0x2400, %ax +- testw %dx, %dx +- jz 1f +- incw %ax ++ movw $0x2401, %ax + 1: stc + int $0x15 +- jnc 2f +- +- /* set non-zero if failed */ +- movb $1, %ah +- +- /* save the status */ +-2: movb %ah, %dl + + DATA32 call EXT_C(real_to_prot) + .code32 ++ ret + +- popl %ebp +- testb %dl, %dl +- jnz 3f ++A20_PORT92: ++ /* ++ * try to switch gateA20 using PORT92, the "Fast A20 and Init" ++ * register ++ */ ++ mov $0x92, %dx ++ inb %dx, %al ++ /* skip the port92 code if it's unimplemented (read returns 0xff) */ ++ cmpb $0xff, %al ++ jz 6f ++ ++ /* set bit1, the ALT_A20_GATE bit */ ++ orb $2, %al ++ /* and $0xfd, %al */ ++ ++ /* clear the INIT_NOW bit; don't accidently reset the machine */ ++ and $0xfe, %al ++ outb %al, %dx ++6: + ret + +-3: /* use keyboard controller */ ++A20_KBDCTL: ++ /* use keyboard controller */ + pushl %eax + + call gloop1 +@@ -1665,11 +1707,7 @@ gloopint1: + jnz gloopint1 + + movb $KB_OUTPUT_MASK, %al +- cmpb $0, 0x8(%esp) +- jz gdoit +- + orb $KB_A20_ENABLE, %al +-gdoit: + outb $K_RDWR + + call gloop1 +@@ -1994,8 +2032,25 @@ ENTRY(console_getkey) + call EXT_C(prot_to_real) + .code16 + ++.again: ++ mov $0x11, %ah /* poll kbd */ + int $0x16 + ++ jz .again ++#if 0 ++/* XXX handle serial here? -- pj */ ++ jnz .kbd ++#endif ++.kbd: ++ mov $0x10, %ah ++ int $0x16 ++ cmp $0xe0, %al ++ jnz .not_ext ++ xor %al, %al ++.not_ext: ++ and %al, %al ++ jz .func_key ++.func_key: + movw %ax, %dx /* real_to_prot uses %eax */ + call translate_keycode + call remap_ascii_char +@@ -2003,7 +2058,7 @@ ENTRY(console_getkey) + DATA32 call EXT_C(real_to_prot) + .code32 + +- movw %dx, %ax ++ mov %dx, %ax + + pop %ebp + ret +@@ -2029,7 +2084,7 @@ ENTRY(console_checkkey) + call EXT_C(prot_to_real) /* enter real mode */ + .code16 + +- movb $0x1, %ah ++ movb $0x11, %ah + int $0x16 + + DATA32 jz notpending +@@ -2051,6 +2106,37 @@ pending: + pop %ebp + ret + ++ ++/* ++ * int console_keystatus (void) ++ * BIOS call "INT 16H Function 02H" to get keyboard modifier status ++ * Call with %ah = 0x2 ++ * Return: %al = keyboard state: ++ * bit 3: alt key down ++ * bit 2: ctrl key down ++ * bit 1: left shift key down ++ * bit 0: right shift key down ++ */ ++ENTRY(console_keystatus) ++ push %ebp ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ movb $0x12, %ah ++ int $0x16 ++ movw %ax, %dx ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ movw %dx, %ax ++ ++ /* Mask out numlock, capslock and insert state. */ ++ andl $0x0f0f, %eax ++ pop %ebp ++ ret ++ + + /* + * int console_getxy (void) +@@ -2216,6 +2302,156 @@ ENTRY(console_setcursor) + pop %ebx + pop %ebp + ret ++ ++/* graphics mode functions */ ++#ifdef SUPPORT_GRAPHICS ++VARIABLE(cursorX) ++.word 0 ++VARIABLE(cursorY) ++.word 0 ++VARIABLE(cursorCount) ++.word 0 ++VARIABLE(cursorBuf) ++.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ ++ ++/* ++ * int set_videomode(mode) ++ * BIOS call "INT 10H Function 0h" to set video mode ++ * Call with %ah = 0x0 ++ * %al = video mode ++ * Returns old videomode. ++ */ ++ENTRY(set_videomode) ++ push %ebp ++ push %ebx ++ push %ecx ++ ++ movb 0x10(%esp), %cl ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ xorw %bx, %bx ++ movb $0xf, %ah ++ int $0x10 /* Get Current Video mode */ ++ movb %al, %ch ++ xorb %ah, %ah ++ movb %cl, %al ++ int $0x10 /* Set Video mode */ ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ xorb %ah, %ah ++ movb %ch, %al ++ ++ pop %ecx ++ pop %ebx ++ pop %ebp ++ ret ++ ++ ++/* ++ * unsigned char * graphics_get_font() ++ * BIOS call "INT 10H Function 11h" to set font ++ * Call with %ah = 0x11 ++ */ ++ENTRY(graphics_get_font) ++ push %ebp ++ push %ebx ++ push %ecx ++ push %edx ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ movw $0x1130, %ax ++ movb $6, %bh /* font 8x16 */ ++ int $0x10 ++ movw %bp, %dx ++ movw %es, %cx ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ xorl %eax, %eax ++ movw %cx, %ax ++ shll $4, %eax ++ movw %dx, %ax ++ ++ pop %edx ++ pop %ecx ++ pop %ebx ++ pop %ebp ++ ret ++ ++ ++ ++/* ++ * graphics_set_palette(index, red, green, blue) ++ * BIOS call "INT 10H Function 10h" to set individual dac register ++ * Call with %ah = 0x10 ++ * %bx = register number ++ * %ch = new value for green (0-63) ++ * %cl = new value for blue (0-63) ++ * %dh = new value for red (0-63) ++ */ ++ ++ENTRY(graphics_set_palette) ++ push %ebp ++ push %eax ++ push %ebx ++ push %ecx ++ push %edx ++ ++ movw $0x3c8, %bx /* address write mode register */ ++ ++ /* wait vertical retrace */ ++ ++ movw $0x3da, %dx ++l1b: inb %dx, %al /* wait vertical active display */ ++ test $8, %al ++ jnz l1b ++ ++l2b: inb %dx, %al /* wait vertical retrace */ ++ test $8, %al ++ jnz l2b ++ ++ mov %bx, %dx ++ movb 0x18(%esp), %al /* index */ ++ outb %al, %dx ++ inc %dx ++ ++ movb 0x1c(%esp), %al /* red */ ++ outb %al, %dx ++ ++ movb 0x20(%esp), %al /* green */ ++ outb %al, %dx ++ ++ movb 0x24(%esp), %al /* blue */ ++ outb %al, %dx ++ ++ movw 0x18(%esp), %bx ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ movb %bl, %bh ++ movw $0x1000, %ax ++ int $0x10 ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ pop %edx ++ pop %ecx ++ pop %ebx ++ pop %eax ++ pop %ebp ++ ret ++ ++#endif /* SUPPORT_GRAPHICS */ + + /* + * getrtsecs() +diff --git a/stage2/boot.c b/stage2/boot.c +index 4185d23..e30daf8 100644 +--- a/stage2/boot.c ++++ b/stage2/boot.c +@@ -25,10 +25,14 @@ + #include "imgact_aout.h" + #include "i386-elf.h" + ++#ifndef PLATFORM_EFI + static int cur_addr; ++#endif + entry_func entry_addr; ++#ifndef PLATFORM_EFI + static struct mod_list mll[99]; + static int linux_mem_size; ++#endif + + /* + * The next two functions, 'load_image' and 'load_module', are the building +@@ -40,6 +44,9 @@ kernel_t + load_image (char *kernel, char *arg, kernel_t suggested_type, + unsigned long load_flags) + { ++#ifdef PLATFORM_EFI ++ return grub_load_linux (kernel, arg); ++#else + int len, i, exec_type = 0, align_4k = 1; + entry_func real_entry_addr = 0; + kernel_t type = KERNEL_TYPE_NONE; +@@ -221,6 +228,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + { + int big_linux = 0; + int setup_sects = lh->setup_sects; ++ int cmdline_size = 0xff; + + if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200) + { +@@ -248,6 +256,14 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + lh->cl_offset = LINUX_CL_OFFSET; + lh->setup_move_size = LINUX_SETUP_MOVE_SIZE; + } ++ ++ if (lh->version >= 0x0206) ++ { ++ cmdline_size = lh->cmdline_size; ++ if (cmdline_size > (LINUX_CL_END_OFFSET - LINUX_CL_OFFSET)) ++ cmdline_size = LINUX_CL_END_OFFSET - LINUX_CL_OFFSET; ++ } ++ + } + else + { +@@ -265,7 +281,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + setup_sects = LINUX_DEFAULT_SETUP_SECTS; + + data_len = setup_sects << 9; +- text_len = filemax - data_len - SECTOR_SIZE; ++ text_len = filemax - data_len - get_sector_size(current_drive); + + linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len; + +@@ -280,8 +296,12 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + errnum = ERR_WONT_FIT; + else + { +- grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", +- (big_linux ? "bzImage" : "zImage"), data_len, text_len); ++ grub_verbose_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", ++ (big_linux ? "bzImage" : "zImage"), ++ data_len, text_len); ++ ++ if (silent_grub) ++ lh->vid_mode = 0x0f04; + + /* Video mode selection support. What a mess! */ + /* NOTE: Even the word "mess" is not still enough to +@@ -375,14 +395,15 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + + /* It is possible that DATA_LEN + SECTOR_SIZE is greater than + MULTIBOOT_SEARCH, so the data may have been read partially. */ +- if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH) ++ if (data_len + get_sector_size(current_drive) <= MULTIBOOT_SEARCH) + grub_memmove (linux_data_tmp_addr, buffer, +- data_len + SECTOR_SIZE); ++ data_len + get_sector_size(current_drive)); + else + { + grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH); + grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH, +- data_len + SECTOR_SIZE - MULTIBOOT_SEARCH); ++ data_len + get_sector_size(current_drive) ++ - MULTIBOOT_SEARCH); + } + + if (lh->header != LINUX_MAGIC_SIGNATURE || +@@ -404,7 +425,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + char *src = skip_to (0, arg); + char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET; + +- while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) ++ while (dest < linux_data_tmp_addr + LINUX_CL_OFFSET + cmdline_size && *src) + *(dest++) = *(src++); + + /* Old Linux kernels have problems determining the amount of +@@ -425,7 +446,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + if (! grub_strstr (arg, "mem=") + && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION) + && lh->version < 0x0203 /* kernel version < 2.4.18 */ +- && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET) ++ && dest + 15 < linux_data_tmp_addr + LINUX_CL_OFFSET + cmdline_size) + { + *dest++ = ' '; + *dest++ = 'm'; +@@ -441,7 +462,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + } + + /* offset into file */ +- grub_seek (data_len + SECTOR_SIZE); ++ grub_seek (data_len + get_sector_size(current_drive)); + + cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE; + grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len); +@@ -487,7 +508,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + mbi.syms.a.addr = 0; + mbi.syms.a.pad = 0; + +- printf (" [%s-%s", str2, str); ++ verbose_printf (" [%s-%s", str2, str); + + str = ""; + +@@ -496,7 +517,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + if (flags & MULTIBOOT_AOUT_KLUDGE) + str = "-and-data"; + +- printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len); ++ verbose_printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len); + + /* read text, then read data */ + if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len) +@@ -509,9 +530,9 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + if (align_4k) + cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; + else +- printf (", C"); ++ verbose_printf (", C"); + +- printf (", data=0x%x", data_len); ++ verbose_printf (", data=0x%x", data_len); + + if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len) + != data_len) +@@ -525,7 +546,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + memset ((char *) RAW_ADDR (cur_addr), 0, bss_len); + cur_addr += bss_len; + +- printf (", bss=0x%x", bss_len); ++ verbose_printf (", bss=0x%x", bss_len); + } + } + else if (!errnum) +@@ -545,7 +566,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms; + cur_addr += sizeof (int); + +- printf (", symtab=0x%x", pu.aout->a_syms); ++ verbose_printf (", symtab=0x%x", pu.aout->a_syms); + + if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms) + == pu.aout->a_syms) +@@ -562,7 +583,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + + i -= sizeof (int); + +- printf (", strtab=0x%x", i); ++ verbose_printf (", strtab=0x%x", i); + + symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i) + != i); +@@ -576,7 +597,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + + if (symtab_err) + { +- printf ("(bad)"); ++ verbose_printf ("(bad)"); + cur_addr = orig_addr; + mbi.syms.a.tabsize = 0; + mbi.syms.a.strsize = 0; +@@ -630,7 +651,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + /* mark memory as used */ + if (cur_addr < memaddr + memsiz) + cur_addr = memaddr + memsiz; +- printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, ++ verbose_printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, + memsiz - filesiz); + /* increment number of segments */ + loaded++; +@@ -676,7 +697,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + shdr = (Elf32_Shdr *) mbi.syms.e.addr; + cur_addr += tab_size; + +- printf (", shtab=0x%x", cur_addr); ++ verbose_printf (", shtab=0x%x", cur_addr); + + for (i = 0; i < mbi.syms.e.num; i++) + { +@@ -718,7 +739,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + + if (symtab_err) + { +- printf ("(bad)"); ++ verbose_printf ("(bad)"); + mbi.syms.e.num = 0; + mbi.syms.e.size = 0; + mbi.syms.e.addr = 0; +@@ -733,7 +754,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + + if (! errnum) + { +- grub_printf (", entry=0x%x]\n", (unsigned) entry_addr); ++ grub_verbose_printf (", entry=0x%x]\n", (unsigned) entry_addr); + + /* If the entry address is physically different from that of the ELF + header, correct it here. */ +@@ -756,8 +777,10 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, + } + + return type; ++#endif + } + ++#ifndef PLATFORM_EFI + int + load_module (char *module, char *arg) + { +@@ -776,7 +799,7 @@ load_module (char *module, char *arg) + return 0; + } + +- printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len); ++ verbose_printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len); + + /* these two simply need to be set if any modules are loaded at all */ + mbi.flags |= MB_INFO_MODS; +@@ -794,11 +817,19 @@ load_module (char *module, char *arg) + grub_close (); + return 1; + } ++#endif + + int + load_initrd (char *initrd) + { +- int len; ++#ifdef PLATFORM_EFI ++#ifndef NO_DECOMPRESSION ++ no_decompression = 1; ++#endif ++ return grub_load_initrd (initrd); ++#else ++ int len, next_addr; ++ char *singleimage, *pos; + unsigned long moveto; + unsigned long max_addr; + struct linux_kernel_header *lh +@@ -807,16 +838,24 @@ load_initrd (char *initrd) + #ifndef NO_DECOMPRESSION + no_decompression = 1; + #endif +- +- if (! grub_open (initrd)) +- goto fail; ++ len = 0; ++ next_addr = cur_addr; + +- len = grub_read ((char *) cur_addr, -1); +- if (! len) +- { +- grub_close (); +- goto fail; +- } ++ /* loop over all initrd images and concatenate them in memory */ ++ singleimage = strtok_r(initrd," \t",&pos); ++ while (singleimage) { ++ if (! grub_open (singleimage)) ++ continue; ++ ++ len += grub_read ((char *) next_addr, -1); ++ grub_close (); ++ ++ next_addr = cur_addr + len; ++ singleimage = strtok_r(NULL," \t",&pos); ++ } ++ ++ if (!len) ++ goto fail; + + if (linux_mem_size) + moveto = linux_mem_size; +@@ -824,8 +863,12 @@ load_initrd (char *initrd) + moveto = (mbi.mem_upper + 0x400) << 10; + + moveto = (moveto - len) & 0xfffff000; ++#if 0 + max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 + ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); ++#else ++ max_addr = LINUX_INITRD_MAX_ADDRESS; ++#endif + if (moveto + len >= max_addr) + moveto = (max_addr - len) & 0xfffff000; + +@@ -836,13 +879,12 @@ load_initrd (char *initrd) + moveto -= 0x10000; + memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len); + +- printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len); ++ verbose_printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len); + + /* FIXME: Should check if the kernel supports INITRD. */ + lh->ramdisk_image = RAW_ADDR (moveto); + lh->ramdisk_size = len; + +- grub_close (); + + fail: + +@@ -851,9 +893,11 @@ load_initrd (char *initrd) + #endif + + return ! errnum; ++#endif + } + + ++#ifndef PLATFORM_EFI + #ifdef GRUB_UTIL + /* Dummy function to fake the *BSD boot. */ + static void +@@ -1018,3 +1062,5 @@ bsd_boot (kernel_t type, int bootdev, char *arg) + extended_memory, mbi.mem_lower); + } + } ++#endif ++ +diff --git a/stage2/builtins.c b/stage2/builtins.c +index 3e08a86..b95b181 100644 +--- a/stage2/builtins.c ++++ b/stage2/builtins.c +@@ -56,6 +56,9 @@ static int bootdev; + /* True when the debug mode is turned on, and false + when it is turned off. */ + int debug = 0; ++int debug_graphics = 0; ++/* Print what we're booting */ ++int grub_verbose = 0; + /* The default entry. */ + int default_entry = 0; + /* The fallback entry. */ +@@ -117,6 +120,27 @@ check_password (char *entered, char* expected, password_t type) + case PASSWORD_MD5: + return check_md5_password (entered, expected); + #endif ++ ++ case PASSWORD_ENCRYPTED: ++ if (grub_memcmp (expected, "$1$", 3) == 0) ++ return check_md5_password (entered, expected); ++ else if (grub_memcmp (expected, "$5$", 3) == 0) ++ { ++ char *hashed; ++ ++ hashed = sha256_crypt (entered, expected); ++ return hashed == NULL || strcmp (expected, hashed); ++ } ++ else if (grub_memcmp (expected, "$6$", 3) == 0) ++ { ++ char *hashed; ++ ++ hashed = sha512_crypt (entered, expected); ++ return hashed == NULL || strcmp (expected, hashed); ++ } ++ else ++ return strcmp (entered, expected); ++ + default: + /* unsupported password type: be secure */ + return 1; +@@ -131,62 +155,98 @@ disk_read_print_func (int sector, int offset, int length) + } + + ++/* blocklist_read_helper nee disk_read_blocklist_func was a nested ++ * function, to which pointers were taken and exposed globally. Even ++ * in the GNU-C nested functions extension, they have local linkage, ++ * and aren't guaranteed to be accessable *at all* outside of their ++ * containing scope. ++ * ++ * Above and beyond all of that, the variables within blocklist_func_context ++ * are originally local variables, with local (not even static) linkage, ++ * from within blocklist_func. These were each referenced by ++ * disk_read_blocklist_func, which is only called from other functions ++ * through a globally scoped pointer. ++ * ++ * The documentation in GCC actually uses the words "all hell will break ++ * loose" to describe this scenario. ++ * ++ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn ++ * about it (possibly because of the scoping madness?) ++ */ ++ ++static struct { ++ int start_sector; ++ int num_sectors; ++ int num_entries; ++ int last_length; ++} blocklist_func_context = { ++ .start_sector = 0, ++ .num_sectors = 0, ++ .num_entries = 0, ++ .last_length = 0 ++}; ++ ++/* Collect contiguous blocks into one entry as many as possible, ++ and print the blocklist notation on the screen. */ ++static void ++blocklist_read_helper (int sector, int offset, int length) ++{ ++ int *start_sector = &blocklist_func_context.start_sector; ++ int *num_sectors = &blocklist_func_context.num_sectors; ++ int *num_entries = &blocklist_func_context.num_entries; ++ int *last_length = &blocklist_func_context.last_length; ++ int sector_size = get_sector_size(current_drive); ++ ++ if (*num_sectors > 0) ++ { ++ if (*start_sector + *num_sectors == sector ++ && offset == 0 && *last_length == sector_size) ++ { ++ *num_sectors++; ++ *last_length = length; ++ return; ++ } ++ else ++ { ++ if (*last_length == sector_size) ++ grub_printf ("%s%d+%d", *num_entries ? "," : "", ++ *start_sector - part_start, *num_sectors); ++ else if (*num_sectors > 1) ++ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "", ++ *start_sector - part_start, *num_sectors-1, ++ *start_sector + *num_sectors-1 - part_start, ++ *last_length); ++ else ++ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "", ++ *start_sector - part_start, *last_length); ++ *num_entries++; ++ *num_sectors = 0; ++ } ++ } ++ ++ if (offset > 0) ++ { ++ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "", ++ sector-part_start, offset, offset+length); ++ *num_entries++; ++ } ++ else ++ { ++ *start_sector = sector; ++ *num_sectors = 1; ++ *last_length = length; ++ } ++} ++ + /* blocklist */ + static int + blocklist_func (char *arg, int flags) + { + char *dummy = (char *) RAW_ADDR (0x100000); +- int start_sector; +- int num_sectors = 0; +- int num_entries = 0; +- int last_length = 0; + +- auto void disk_read_blocklist_func (int sector, int offset, int length); +- +- /* Collect contiguous blocks into one entry as many as possible, +- and print the blocklist notation on the screen. */ +- auto void disk_read_blocklist_func (int sector, int offset, int length) +- { +- if (num_sectors > 0) +- { +- if (start_sector + num_sectors == sector +- && offset == 0 && last_length == SECTOR_SIZE) +- { +- num_sectors++; +- last_length = length; +- return; +- } +- else +- { +- if (last_length == SECTOR_SIZE) +- grub_printf ("%s%d+%d", num_entries ? "," : "", +- start_sector - part_start, num_sectors); +- else if (num_sectors > 1) +- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", +- start_sector - part_start, num_sectors-1, +- start_sector + num_sectors-1 - part_start, +- last_length); +- else +- grub_printf ("%s%d[0-%d]", num_entries ? "," : "", +- start_sector - part_start, last_length); +- num_entries++; +- num_sectors = 0; +- } +- } +- +- if (offset > 0) +- { +- grub_printf("%s%d[%d-%d]", num_entries ? "," : "", +- sector-part_start, offset, offset+length); +- num_entries++; +- } +- else +- { +- start_sector = sector; +- num_sectors = 1; +- last_length = length; +- } +- } ++ int *start_sector = &blocklist_func_context.start_sector; ++ int *num_sectors = &blocklist_func_context.num_sectors; ++ int *num_entries = &blocklist_func_context.num_entries; + + /* Open the file. */ + if (! grub_open (arg)) +@@ -206,15 +266,15 @@ blocklist_func (char *arg, int flags) + grub_printf (")"); + + /* Read in the whole file to DUMMY. */ +- disk_read_hook = disk_read_blocklist_func; ++ disk_read_hook = blocklist_read_helper; + if (! grub_read (dummy, -1)) + goto fail; + + /* The last entry may not be printed yet. Don't check if it is a + * full sector, since it doesn't matter if we read too much. */ +- if (num_sectors > 0) +- grub_printf ("%s%d+%d", num_entries ? "," : "", +- start_sector - part_start, num_sectors); ++ if (*num_sectors > 0) ++ grub_printf ("%s%d+%d", *num_entries ? "," : "", ++ *start_sector - part_start, *num_sectors); + + grub_printf ("\n"); + +@@ -237,12 +297,25 @@ static struct builtin builtin_blocklist = + static int + boot_func (char *arg, int flags) + { ++ struct term_entry *prev_term = current_term; + /* Clear the int15 handler if we can boot the kernel successfully. + This assumes that the boot code never fails only if KERNEL_TYPE is + not KERNEL_TYPE_NONE. Is this assumption is bad? */ + if (kernel_type != KERNEL_TYPE_NONE) + unset_int15_handler (); + ++ /* if our terminal needed initialization, we should shut it down ++ * before booting the kernel, but we want to save what it was so ++ * we can come back if needed */ ++ if (current_term->shutdown) ++ { ++ (*current_term->shutdown)(); ++ current_term = term_table; /* assumption: console is first */ ++ } ++ ++ if (silent_grub) ++ setcursor(0); ++ + #ifdef SUPPORT_NETBOOT + /* Shut down the networking. */ + cleanup_net (); +@@ -250,11 +323,13 @@ boot_func (char *arg, int flags) + + switch (kernel_type) + { ++#ifndef PLATFORM_EFI + case KERNEL_TYPE_FREEBSD: + case KERNEL_TYPE_NETBSD: + /* *BSD */ + bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline); + break; ++#endif + + case KERNEL_TYPE_LINUX: + /* Linux */ +@@ -296,16 +371,25 @@ boot_func (char *arg, int flags) + chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr); + break; + ++#ifndef PLATFORM_EFI + case KERNEL_TYPE_MULTIBOOT: + /* Multiboot */ + multi_boot ((int) entry_addr, (int) &mbi); + break; ++#endif + + default: + errnum = ERR_BOOT_COMMAND; + return 1; + } + ++ /* if we get back here, we should go back to what our term was before */ ++ current_term = prev_term; ++ if (current_term->startup) ++ /* if our terminal fails to initialize, fall back to console since ++ * it should always work */ ++ if ((*current_term->startup)() == 0) ++ current_term = term_table; /* we know that console is first */ + return 0; + } + +@@ -402,6 +486,10 @@ static struct builtin builtin_cat = + static int + chainloader_func (char *arg, int flags) + { ++#ifdef PLATFORM_EFI ++ kernel_type = grub_chainloader(arg); ++ return kernel_type == KERNEL_TYPE_NONE; ++#else + int force = 0; + char *file = arg; + +@@ -458,6 +546,7 @@ chainloader_func (char *arg, int flags) + errnum = ERR_NONE; + + return 0; ++#endif + } + + static struct builtin builtin_chainloader = +@@ -564,89 +653,88 @@ static struct builtin builtin_cmp = + /* Set new colors used for the menu interface. Support two methods to + specify a color name: a direct integer representation and a symbolic + color name. An example of the latter is "blink-light-gray/blue". */ +-static int +-color_func (char *arg, int flags) +-{ +- char *normal; +- char *highlight; +- int new_normal_color; +- int new_highlight_color; +- static char *color_list[16] = +- { +- "black", +- "blue", +- "green", +- "cyan", +- "red", +- "magenta", +- "brown", +- "light-gray", +- "dark-gray", +- "light-blue", +- "light-green", +- "light-cyan", +- "light-red", +- "light-magenta", +- "yellow", +- "white" +- }; ++static const char * const color_list[16] = ++{ ++ "black", ++ "blue", ++ "green", ++ "cyan", ++ "red", ++ "magenta", ++ "brown", ++ "light-gray", ++ "dark-gray", ++ "light-blue", ++ "light-green", ++ "light-cyan", ++ "light-red", ++ "light-magenta", ++ "yellow", ++ "white" ++}; + +- auto int color_number (char *str); ++/* Convert the color name STR into the magical number. */ ++static int color_number (char *str) ++{ ++ char *ptr; ++ int i; ++ int color = 0; + +- /* Convert the color name STR into the magical number. */ +- auto int color_number (char *str) +- { +- char *ptr; +- int i; +- int color = 0; +- +- /* Find the separator. */ +- for (ptr = str; *ptr && *ptr != '/'; ptr++) +- ; ++ /* Find the separator. */ ++ for (ptr = str; *ptr && *ptr != '/'; ptr++) ++ ; + +- /* If not found, return -1. */ +- if (! *ptr) +- return -1; ++ /* If not found, return -1. */ ++ if (! *ptr) ++ return -1; + +- /* Terminate the string STR. */ +- *ptr++ = 0; ++ /* Terminate the string STR. */ ++ *ptr++ = 0; + +- /* If STR contains the prefix "blink-", then set the `blink' bit +- in COLOR. */ +- if (substring ("blink-", str) <= 0) +- { +- color = 0x80; +- str += 6; +- } +- +- /* Search for the color name. */ +- for (i = 0; i < 16; i++) +- if (grub_strcmp (color_list[i], str) == 0) +- { +- color |= i; +- break; +- } ++ /* If STR contains the prefix "blink-", then set the `blink' bit ++ in COLOR. */ ++ if (substring ("blink-", str) <= 0) ++ { ++ color = 0x80; ++ str += 6; ++ } ++ ++ /* Search for the color name. */ ++ for (i = 0; i < 16; i++) ++ if (grub_strcmp (color_list[i], str) == 0) ++ { ++ color |= i; ++ break; ++ } + +- if (i == 16) +- return -1; ++ if (i == 16) ++ return -1; + +- str = ptr; +- nul_terminate (str); ++ str = ptr; ++ nul_terminate (str); + +- /* Search for the color name. */ +- for (i = 0; i < 8; i++) +- if (grub_strcmp (color_list[i], str) == 0) +- { +- color |= i << 4; +- break; +- } ++ /* Search for the color name. */ ++ for (i = 0; i < 8; i++) ++ if (grub_strcmp (color_list[i], str) == 0) ++ { ++ color |= i << 4; ++ break; ++ } + +- if (i == 8) +- return -1; ++ if (i == 8) ++ return -1; ++ ++ return color; ++} ++ ++static int ++color_func (char *arg, int flags) ++{ ++ char *normal; ++ char *highlight; ++ int new_normal_color; ++ int new_highlight_color; + +- return color; +- } +- + normal = arg; + highlight = skip_to (0, arg); + +@@ -690,7 +778,6 @@ static struct builtin builtin_color = + " But only the first eight names can be used for BG. You can prefix" + " \"blink-\" to FG if you want a blinking foreground color." + }; +- + + /* configfile */ + static int +@@ -737,14 +824,18 @@ static struct builtin builtin_configfile = + static int + debug_func (char *arg, int flags) + { +- if (debug) ++ int *whichdebug = &debug; ++ if (arg && !strcmp(arg, "--graphics")) ++ whichdebug = &debug_graphics; ++ ++ if (*whichdebug) + { +- debug = 0; ++ *whichdebug = 0; + grub_printf (" Debug mode is turned off\n"); + } + else + { +- debug = 1; ++ *whichdebug = 1; + grub_printf (" Debug mode is turned on\n"); + } + +@@ -755,17 +846,61 @@ static struct builtin builtin_debug = + { + "debug", + debug_func, +- BUILTIN_CMDLINE, ++ BUILTIN_CMDLINE | BUILTIN_MENU, + "debug", + "Turn on/off the debug mode." + }; + + ++/* verbose */ ++static int ++verbose_func (char *arg, int flags) ++{ ++ if (grub_verbose) ++ { ++ grub_verbose = 0; ++ grub_printf (" Verbose mode is turned off\n"); ++ } ++ else ++ { ++ grub_verbose = 1; ++ grub_printf (" Verbose mode is turned on\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_verbose = ++{ ++ "verbose", ++ verbose_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU, ++ "verbose", ++ "Turn on/off verbose output." ++}; ++ ++ ++#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI) ++static int savedefault_helper(int); ++#endif + /* default */ + static int + default_func (char *arg, int flags) + { + #ifndef SUPPORT_DISKLESS ++#ifndef GRUB_UTIL ++#ifndef PLATFORM_EFI ++ /* Has a forced once-only default been specified? */ ++ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) ++ { ++ int old_defaults=saved_entryno & ~STAGE2_ONCEONLY_ENTRY; ++ grub_timeout = 0; ++ default_entry = old_defaults >> 8; ++ savedefault_helper(old_defaults & 0xff); ++ return 0; ++ } ++#endif ++#endif + if (grub_strcmp (arg, "saved") == 0) + { + default_entry = saved_entryno; +@@ -792,7 +927,7 @@ static struct builtin builtin_default = + }; + + +-#ifdef GRUB_UTIL ++#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) + /* device */ + static int + device_func (char *arg, int flags) +@@ -800,16 +935,17 @@ device_func (char *arg, int flags) + char *drive = arg; + char *device; + +- /* Get the drive number from DRIVE. */ +- if (! set_device (drive)) +- return 1; +- + /* Get the device argument. */ + device = skip_to (0, drive); +- ++ ++ nul_terminate (drive); + /* Terminate DEVICE. */ + nul_terminate (device); + ++ /* Get the drive number from DRIVE. */ ++ if (! set_device (drive)) ++ return 1; ++ + if (! *device || ! check_device (device)) + { + errnum = ERR_FILE_NOT_FOUND; +@@ -817,7 +953,7 @@ device_func (char *arg, int flags) + } + + assign_device_name (current_drive, device); +- ++ + return 0; + } + +@@ -828,9 +964,20 @@ static struct builtin builtin_device = + BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, + "device DRIVE DEVICE", + "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command" +- " can be used only in the grub shell." ++ " can be used only in the grub shell and in EFI." + }; +-#endif /* GRUB_UTIL */ ++#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */ ++#ifdef PLATFORM_EFI ++static struct builtin builtin_efimap = ++{ ++ "efimap", ++ device_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "efimap DRIVE DEVICE", ++ "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command" ++ " can be used only in EFI." ++}; ++#endif /* PLATFORM_EFI */ + + + #ifdef SUPPORT_NETBOOT +@@ -852,6 +999,139 @@ static struct builtin builtin_dhcp = + }; + #endif /* SUPPORT_NETBOOT */ + ++static int terminal_func (char *arg, int flags); ++ ++#ifdef SUPPORT_GRAPHICS ++ ++static int splashimage_func(char *arg, int flags) { ++ char splashimage[64]; ++ int i; ++ ++ /* filename can only be 64 characters due to our buffer size */ ++ if (strlen(arg) > 63) ++ return 1; ++ if (flags == BUILTIN_CMDLINE) { ++ if (!grub_open(arg)) ++ return 1; ++ grub_close(); ++ } ++ ++ strcpy(splashimage, arg); ++ ++ /* get rid of TERM_NEED_INIT from the graphics terminal. */ ++ for (i = 0; term_table[i].name; i++) { ++ if (grub_strcmp (term_table[i].name, "graphics") == 0) { ++ term_table[i].flags &= ~TERM_NEED_INIT; ++ break; ++ } ++ } ++ ++ graphics_set_splash(splashimage); ++ ++ if (flags == BUILTIN_CMDLINE && graphics_inited) { ++ graphics_end(); ++ graphics_init(); ++ graphics_cls(); ++ } ++ ++ /* FIXME: should we be explicitly switching the terminal as a ++ * side effect here? */ ++ terminal_func("graphics", flags); ++ ++ return 0; ++} ++ ++static struct builtin builtin_splashimage = ++{ ++ "splashimage", ++ splashimage_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "splashimage FILE", ++ "Load FILE as the background image when in graphics mode." ++}; ++ ++ ++/* foreground */ ++static int ++foreground_func(char *arg, int flags) ++{ ++ if (grub_strlen(arg) == 6) { ++ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; ++ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; ++ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; ++ ++ foreground = (r << 16) | (g << 8) | b; ++ if (graphics_inited) ++ graphics_set_palette(15, r, g, b); ++ ++ return (0); ++ } ++ ++ return (1); ++} ++ ++static struct builtin builtin_foreground = ++{ ++ "foreground", ++ foreground_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "foreground RRGGBB", ++ "Sets the foreground color when in graphics mode." ++ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." ++}; ++ ++ ++/* background */ ++static int ++background_func(char *arg, int flags) ++{ ++ if (grub_strlen(arg) == 6) { ++ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; ++ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; ++ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; ++ ++ background = (r << 16) | (g << 8) | b; ++ if (graphics_inited) ++ graphics_set_palette(0, r, g, b); ++ return (0); ++ } ++ ++ return (1); ++} ++ ++static struct builtin builtin_background = ++{ ++ "background", ++ background_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "background RRGGBB", ++ "Sets the background color when in graphics mode." ++ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." ++}; ++ ++#endif /* SUPPORT_GRAPHICS */ ++ ++ ++/* clear */ ++static int ++clear_func() ++{ ++ if (current_term->cls) ++ current_term->cls(); ++ ++ return 0; ++} ++ ++static struct builtin builtin_clear = ++{ ++ "clear", ++ clear_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "clear", ++ "Clear the screen" ++}; ++ ++#ifndef PLATFORM_EFI + + /* displayapm */ + static int +@@ -893,6 +1173,7 @@ static struct builtin builtin_displayapm = + "displayapm", + "Display APM BIOS information." + }; ++#endif /* !PLATFORM_EFI */ + + + /* displaymem */ +@@ -912,11 +1193,11 @@ displaymem_func (char *arg, int flags) + if (mbi.flags & MB_INFO_MEM_MAP) + { + struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr; +- int end_addr = mbi.mmap_addr + mbi.mmap_length; ++ unsigned long end_addr = mbi.mmap_addr + mbi.mmap_length; + + grub_printf (" [Address Range Descriptor entries " + "immediately follow (values are 64-bit)]\n"); +- while (end_addr > (int) map) ++ while (end_addr > (unsigned long) map) + { + char *str; + +@@ -924,15 +1205,10 @@ displaymem_func (char *arg, int flags) + str = "Usable RAM"; + else + str = "Reserved"; +- grub_printf (" %s: Base Address: 0x%x X 4GB + 0x%x,\n" +- " Length: 0x%x X 4GB + 0x%x bytes\n", +- str, +- (unsigned long) (map->BaseAddr >> 32), +- (unsigned long) (map->BaseAddr & 0xFFFFFFFF), +- (unsigned long) (map->Length >> 32), +- (unsigned long) (map->Length & 0xFFFFFFFF)); +- +- map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size)); ++ grub_printf (" %s: Base Address: 0x%lx Length: 0x%lx bytes\n", ++ str, map->BaseAddr, map->Length); ++ ++ map = ((struct AddrRangeDesc *) (((unsigned long) map) + 4 + map->size)); + } + } + +@@ -1009,6 +1285,7 @@ static struct builtin builtin_dump = + }; + #endif /* GRUB_UTIL */ + ++#ifndef PLATFORM_EFI + + static char embed_info[32]; + /* embed */ +@@ -1143,6 +1420,7 @@ static struct builtin builtin_embed = + " is a drive, or in the \"bootloader\" area if DEVICE is a FFS partition." + " Print the number of sectors which STAGE1_5 occupies if successful." + }; ++#endif /* ! PLATFORM_EFI */ + + + /* fallback */ +@@ -1230,17 +1508,19 @@ find_func (char *arg, int flags) + } + + /* Hard disks. */ +- for (drive = 0x80; drive < 0x88; drive++) ++ for (drive = 0x80; drive < (0x80 + MAX_HD_NUM); drive++) + { + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int type, entry; +- char buf[SECTOR_SIZE]; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int type, entry, gpt_count, gpt_size; ++ int sector_size = get_sector_size(drive); ++ char buf[sector_size]; + + current_drive = drive; + while (next_partition (drive, 0xFFFFFF, &part, &type, + &start, &len, &offset, &entry, +- &ext_offset, buf)) ++ &ext_offset, &gpt_offset, ++ &gpt_count, &gpt_size, buf)) + { + if (type != PC_SLICE_TYPE_NONE + && ! IS_PC_SLICE_TYPE_BSD (type) +@@ -1301,6 +1581,59 @@ static struct builtin builtin_find = + "Search for the filename FILENAME in all of partitions and print the list of" + " the devices which contain the file." + }; ++ ++/* findiso */ ++ ++/* Search for an ISO 9660 partition. */ ++static int ++findiso_func (char *arg, int flags) ++{ ++ unsigned long drive; ++ unsigned long tmp_drive = saved_drive; ++ unsigned long tmp_partition = saved_partition; ++ ++ /* Hard disks. */ ++ for (drive = 0x80; drive < 0x89; drive++) ++ { ++ unsigned long part = 0xFFFFFF; ++ ++ if (drive == 0x88) ++ drive = 0x100; ++ ++ current_drive = drive; ++ current_partition = part; ++ ++ if (open_device ()) ++ { ++ char *type = get_fsys_type(); ++ if (!grub_strcmp(type, "iso9660")) ++ { ++ saved_drive = current_drive; ++ saved_partition = current_partition; ++ errnum = ERR_NONE; ++ return 0; ++ } ++ } ++ ++ /* We want to ignore any error here. */ ++ errnum = ERR_NONE; ++ } ++ ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++} ++ ++static struct builtin builtin_findiso = ++{ ++ "findiso", ++ findiso_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "findiso FILENAME", ++ "Set root to the first device with a valid ISO 9660 filesystem." ++}; + + + /* fstest */ +@@ -1679,6 +2012,7 @@ static struct builtin builtin_ifconfig = + }; + #endif /* SUPPORT_NETBOOT */ + ++#ifndef PLATFORM_EFI + + /* impsprobe */ + static int +@@ -1706,6 +2040,7 @@ static struct builtin builtin_impsprobe = + " configuration table and boot the various CPUs which are found into" + " a tight loop." + }; ++#endif /* ! PLATFORM_EFI */ + + + /* initrd */ +@@ -1738,8 +2073,82 @@ static struct builtin builtin_initrd = + " appropriate parameters in the Linux setup area in memory." + }; + ++#ifndef PLATFORM_EFI + + /* install */ ++static struct { ++ int saved_sector; ++ int installaddr; ++ int installlist; ++ int last_length; ++ char *stage2_first_buffer; ++} install_func_context = { ++ .saved_sector = 0, ++ .installaddr = 0, ++ .installlist = 0, ++ .last_length = SECTOR_SIZE, ++ .stage2_first_buffer = NULL, ++}; ++ ++/* Save the first sector of Stage2 in STAGE2_SECT. */ ++/* Formerly disk_read_savesect_func with local scope inside install_func */ ++static void ++install_savesect_helper(int sector, int offset, int length) ++{ ++ if (debug) ++ printf ("[%d]", sector); ++ ++ /* ReiserFS has files which sometimes contain data not aligned ++ on sector boundaries. Returning an error is better than ++ silently failing. */ ++ if (offset != 0 || length != SECTOR_SIZE) ++ errnum = ERR_UNALIGNED; ++ ++ install_func_context.saved_sector = sector; ++} ++ ++/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ ++/* Formerly disk_read_blocklist_func with local scope inside install_func */ ++static void ++install_blocklist_helper (int sector, int offset, int length) ++{ ++ int *installaddr = &install_func_context.installaddr; ++ int *installlist = &install_func_context.installlist; ++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; ++ /* Was the last sector full? */ ++ int *last_length = &install_func_context.last_length; ++ ++ if (debug) ++ printf("[%d]", sector); ++ ++ if (offset != 0 || *last_length != SECTOR_SIZE) ++ { ++ /* We found a non-sector-aligned data block. */ ++ errnum = ERR_UNALIGNED; ++ return; ++ } ++ ++ *last_length = length; ++ ++ if (*((unsigned long *) (*installlist - 4)) ++ + *((unsigned short *) *installlist) != sector ++ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4) ++ { ++ *installlist -= 8; ++ ++ if (*((unsigned long *) (*installlist - 8))) ++ errnum = ERR_WONT_FIT; ++ else ++ { ++ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4); ++ *((unsigned long *) (*installlist - 4)) = sector; ++ } ++ } ++ ++ *((unsigned short *) *installlist) += 1; ++ *installaddr += 512; ++} ++ + static int + install_func (char *arg, int flags) + { +@@ -1747,8 +2156,12 @@ install_func (char *arg, int flags) + char *stage1_buffer = (char *) RAW_ADDR (0x100000); + char *stage2_buffer = stage1_buffer + SECTOR_SIZE; + char *old_sect = stage2_buffer + SECTOR_SIZE; +- char *stage2_first_buffer = old_sect + SECTOR_SIZE; +- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; ++ /* stage2_first_buffer used to be defined as: ++ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */ ++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; ++ /* and stage2_second_buffer was: ++ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */ ++ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE; + /* XXX: Probably SECTOR_SIZE is reasonable. */ + char *config_filename = stage2_second_buffer + SECTOR_SIZE; + char *dummy = config_filename + SECTOR_SIZE; +@@ -1757,10 +2170,11 @@ install_func (char *arg, int flags) + int src_drive, src_partition, src_part_start; + int i; + struct geometry dest_geom, src_geom; +- int saved_sector; ++ int *saved_sector = &install_func_context.saved_sector; + int stage2_first_sector, stage2_second_sector; + char *ptr; +- int installaddr, installlist; ++ int *installaddr = &install_func_context.installaddr; ++ int *installlist = &install_func_context.installlist; + /* Point to the location of the name of a configuration file in Stage 2. */ + char *config_file_location; + /* If FILE is a Stage 1.5? */ +@@ -1769,68 +2183,18 @@ install_func (char *arg, int flags) + int is_open = 0; + /* If LBA is forced? */ + int is_force_lba = 0; +- /* Was the last sector full? */ +- int last_length = SECTOR_SIZE; ++ int *last_length = &install_func_context.last_length; + ++ /* Reset state. */ ++ *last_length = SECTOR_SIZE; ++ ++ *stage2_first_buffer = old_sect + SECTOR_SIZE; + #ifdef GRUB_UTIL + /* If the Stage 2 is in a partition mounted by an OS, this will store + the filename under the OS. */ + char *stage2_os_file = 0; + #endif /* GRUB_UTIL */ + +- auto void disk_read_savesect_func (int sector, int offset, int length); +- auto void disk_read_blocklist_func (int sector, int offset, int length); +- +- /* Save the first sector of Stage2 in STAGE2_SECT. */ +- auto void disk_read_savesect_func (int sector, int offset, int length) +- { +- if (debug) +- printf ("[%d]", sector); +- +- /* ReiserFS has files which sometimes contain data not aligned +- on sector boundaries. Returning an error is better than +- silently failing. */ +- if (offset != 0 || length != SECTOR_SIZE) +- errnum = ERR_UNALIGNED; +- +- saved_sector = sector; +- } +- +- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and +- INSTALLSECT. */ +- auto void disk_read_blocklist_func (int sector, int offset, int length) +- { +- if (debug) +- printf("[%d]", sector); +- +- if (offset != 0 || last_length != SECTOR_SIZE) +- { +- /* We found a non-sector-aligned data block. */ +- errnum = ERR_UNALIGNED; +- return; +- } +- +- last_length = length; +- +- if (*((unsigned long *) (installlist - 4)) +- + *((unsigned short *) installlist) != sector +- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) +- { +- installlist -= 8; +- +- if (*((unsigned long *) (installlist - 8))) +- errnum = ERR_WONT_FIT; +- else +- { +- *((unsigned short *) (installlist + 2)) = (installaddr >> 4); +- *((unsigned long *) (installlist - 4)) = sector; +- } +- } +- +- *((unsigned short *) installlist) += 1; +- installaddr += 512; +- } +- + /* First, check the GNU-style long option. */ + while (1) + { +@@ -1862,10 +2226,10 @@ install_func (char *arg, int flags) + addr = skip_to (0, file); + + /* Get the installation address. */ +- if (! safe_parse_maxint (&addr, &installaddr)) ++ if (! safe_parse_maxint (&addr, installaddr)) + { + /* ADDR is not specified. */ +- installaddr = 0; ++ *installaddr = 0; + ptr = addr; + errnum = 0; + } +@@ -1961,17 +2325,17 @@ install_func (char *arg, int flags) + = 0x9090; + + /* Read the first sector of Stage 2. */ +- disk_read_hook = disk_read_savesect_func; +- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) ++ disk_read_hook = install_savesect_helper; ++ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) + goto fail; + +- stage2_first_sector = saved_sector; ++ stage2_first_sector = *saved_sector; + + /* Read the second sector of Stage 2. */ + if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) + goto fail; + +- stage2_second_sector = saved_sector; ++ stage2_second_sector = *saved_sector; + + /* Check for the version of Stage 2. */ + if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) +@@ -1987,27 +2351,27 @@ install_func (char *arg, int flags) + + /* If INSTALLADDR is not specified explicitly in the command-line, + determine it by the Stage 2 id. */ +- if (! installaddr) ++ if (! *installaddr) + { + if (! is_stage1_5) + /* Stage 2. */ +- installaddr = 0x8000; ++ *installaddr = 0x8000; + else + /* Stage 1.5. */ +- installaddr = 0x2000; ++ *installaddr = 0x2000; + } + + *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) + = stage2_first_sector; + *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) +- = installaddr; ++ = *installaddr; + *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) +- = installaddr >> 4; ++ = *installaddr >> 4; + +- i = (int) stage2_first_buffer + SECTOR_SIZE - 4; ++ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4; + while (*((unsigned long *) i)) + { +- if (i < (int) stage2_first_buffer ++ if (i < (int) *stage2_first_buffer + || (*((int *) (i - 4)) & 0x80000000) + || *((unsigned short *) i) >= 0xA00 + || *((short *) (i + 2)) == 0) +@@ -2021,13 +2385,13 @@ install_func (char *arg, int flags) + i -= 8; + } + +- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; +- installaddr += SECTOR_SIZE; ++ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4; ++ *installaddr += SECTOR_SIZE; + + /* Read the whole of Stage2 except for the first sector. */ + grub_seek (SECTOR_SIZE); + +- disk_read_hook = disk_read_blocklist_func; ++ disk_read_hook = install_blocklist_helper; + if (! grub_read (dummy, -1)) + goto fail; + +@@ -2110,7 +2474,7 @@ install_func (char *arg, int flags) + /* Skip the first sector. */ + grub_seek (SECTOR_SIZE); + +- disk_read_hook = disk_read_savesect_func; ++ disk_read_hook = install_savesect_helper; + if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) + goto fail; + +@@ -2180,7 +2544,7 @@ install_func (char *arg, int flags) + else + #endif /* GRUB_UTIL */ + { +- if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) ++ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer)) + goto fail; + } + } +@@ -2202,7 +2566,7 @@ install_func (char *arg, int flags) + goto fail; + } + +- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) + { + fclose (fp); + errnum = ERR_WRITE; +@@ -2229,7 +2593,7 @@ install_func (char *arg, int flags) + goto fail; + + if (! devwrite (stage2_first_sector - src_part_start, 1, +- stage2_first_buffer)) ++ *stage2_first_buffer)) + goto fail; + + if (! devwrite (stage2_second_sector - src_part_start, 1, +@@ -2322,6 +2686,7 @@ static struct builtin builtin_ioprobe = + "ioprobe DRIVE", + "Probe I/O ports used for the drive DRIVE." + }; ++#endif /* ! PLATFORM_EFI */ + + + /* kernel */ +@@ -2456,6 +2821,7 @@ static struct builtin builtin_makeactive = + " This command is limited to _primary_ PC partitions on a hard disk." + }; + ++#ifndef PLATFORM_EFI + + /* map */ + /* Map FROM_DRIVE to TO_DRIVE. */ +@@ -2519,6 +2885,7 @@ static struct builtin builtin_map = + " when you chain-load some operating systems, such as DOS, if such an" + " OS resides at a non-first drive." + }; ++#endif /* ! PLATFORM_EFI */ + + + #ifdef USE_MD5_PASSWORDS +@@ -2579,6 +2946,7 @@ static struct builtin builtin_md5crypt = + }; + #endif /* USE_MD5_PASSWORDS */ + ++#ifndef PLATFORM_EFI + + /* module */ + static int +@@ -2656,6 +3024,7 @@ static struct builtin builtin_modulenounzip = + "The same as `module', except that automatic decompression is" + " disabled." + }; ++#endif /* !PLATFORM_EFI */ + + + /* pager [on|off] */ +@@ -2698,7 +3067,6 @@ partnew_func (char *arg, int flags) + int start_cl, start_ch, start_dh; + int end_cl, end_ch, end_dh; + int entry; +- char mbr[512]; + + /* Convert a LBA address to a CHS address in the INT 13 format. */ + auto void lba_to_chs (int lba, int *cl, int *ch, int *dh); +@@ -2729,6 +3097,9 @@ partnew_func (char *arg, int flags) + return 1; + } + ++ int sector_size = get_sector_size(current_drive); ++ char mbr[sector_size]; ++ + /* The partition must a primary partition. */ + if ((current_partition >> 16) > 3 + || (current_partition & 0xFFFF) != 0xFFFF) +@@ -2762,7 +3133,7 @@ partnew_func (char *arg, int flags) + return 1; + + /* Read the MBR. */ +- if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr)) ++ if (! rawread (current_drive, 0, 0, sector_size, mbr)) + return 1; + + /* Check if the new partition will fit in the disk. */ +@@ -2815,9 +3186,8 @@ parttype_func (char *arg, int flags) + { + int new_type; + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int entry, type; +- char mbr[512]; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int entry, type, gpt_count, gpt_size; + + /* Get the drive and the partition. */ + if (! set_device (arg)) +@@ -2829,6 +3199,9 @@ parttype_func (char *arg, int flags) + errnum = ERR_BAD_ARGUMENT; + return 1; + } ++ ++ int sector_size = get_sector_size(current_drive); ++ char mbr[sector_size]; + + /* The partition must be a PC slice. */ + if ((current_partition >> 16) == 0xFF +@@ -2853,8 +3226,15 @@ parttype_func (char *arg, int flags) + /* Look for the partition. */ + while (next_partition (current_drive, 0xFFFFFF, &part, &type, + &start, &len, &offset, &entry, +- &ext_offset, mbr)) ++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) + { ++ /* The partition may not be a GPT partition. */ ++ if (gpt_offset != 0) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ + if (part == current_partition) + { + /* Found. */ +@@ -2900,6 +3280,11 @@ password_func (char *arg, int flags) + arg = skip_to (0, arg); + } + #endif ++ else if (grub_memcmp (arg, "--encrypted", 5) == 0) ++ { ++ type = PASSWORD_ENCRYPTED; ++ arg = skip_to (0, arg); ++ } + if (grub_memcmp (arg, "--", 2) == 0) + { + type = PASSWORD_UNSUPPORTED; +@@ -2947,7 +3332,7 @@ static struct builtin builtin_password = + "password", + password_func, + BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO, +- "password [--md5] PASSWD [FILE]", ++ "password [--md5|--encrypted] PASSWD [FILE]", + "If used in the first section of a menu file, disable all" + " interactive editing control (menu entry editor and" + " command line). If the password PASSWD is entered, it loads the" +@@ -2956,7 +3341,8 @@ static struct builtin builtin_password = + " instructions. You can also use it in the script section, in" + " which case it will ask for the password, before continueing." + " The option --md5 tells GRUB that PASSWD is encrypted with" +- " md5crypt." ++ " md5crypt, --encrypted that PASSWD is encrypted (with algorithm" ++ " specified in PASSWD: supported is md5, sha-256, sha-512)." + }; + + +@@ -2982,8 +3368,8 @@ static struct builtin builtin_pause = + "Print MESSAGE, then wait until a key is pressed." + }; + ++#if defined (GRUB_UTIL) || defined (PLATFORM_EFI) + +-#ifdef GRUB_UTIL + /* quit */ + static int + quit_func (char *arg, int flags) +@@ -3002,7 +3388,7 @@ static struct builtin builtin_quit = + "quit", + "Exit from the GRUB shell." + }; +-#endif /* GRUB_UTIL */ ++#endif /* defined (GRUB_UTIL) || defined (PLATFORM_EFI) */ + + + #ifdef SUPPORT_NETBOOT +@@ -3165,7 +3551,8 @@ real_root_func (char *arg, int attempt_mount) + return 1; + + /* Print the type of the filesystem. */ +- print_fsys_type (); ++ if (grub_verbose) ++ print_fsys_type (); + } + + return 0; +@@ -3217,146 +3604,181 @@ static struct builtin builtin_rootnoverify = + }; + + +-/* savedefault */ ++ ++#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI) ++/* Write specified default entry number into stage2 file. */ + static int +-savedefault_func (char *arg, int flags) ++savedefault_helper(int new_default) + { +-#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) +- unsigned long tmp_drive = saved_drive; +- unsigned long tmp_partition = saved_partition; +- char *default_file = (char *) DEFAULT_FILE_BUF; +- char buf[10]; +- char sect[SECTOR_SIZE]; +- int entryno; +- int sector_count = 0; +- int saved_sectors[2]; +- int saved_offsets[2]; +- int saved_lengths[2]; +- +- /* Save sector information about at most two sectors. */ +- auto void disk_read_savesect_func (int sector, int offset, int length); +- void disk_read_savesect_func (int sector, int offset, int length) +- { +- if (sector_count < 2) +- { +- saved_sectors[sector_count] = sector; +- saved_offsets[sector_count] = offset; +- saved_lengths[sector_count] = length; +- } +- sector_count++; +- } +- +- /* This command is only useful when you boot an entry from the menu +- interface. */ +- if (! (flags & BUILTIN_SCRIPT)) ++ char buffer[512]; ++ int *entryno_ptr; ++ ++ /* Get the geometry of the boot drive (i.e. the disk which contains ++ this stage2). */ ++ if (get_diskinfo (boot_drive, &buf_geom)) + { +- errnum = ERR_UNRECOGNIZED; ++ errnum = ERR_NO_DISK; + return 1; + } + +- /* Determine a saved entry number. */ +- if (*arg) ++ /* Load the second sector of this stage2. */ ++ if (! rawread (boot_drive, install_second_sector, 0, SECTOR_SIZE, buffer)) + { +- if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0) +- { +- int i; +- int index = 0; +- +- for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) +- { +- if (fallback_entries[i] < 0) +- break; +- if (fallback_entries[i] == current_entryno) +- { +- index = i + 1; +- break; +- } +- } +- +- if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0) +- { +- /* This is the last. */ +- errnum = ERR_BAD_ARGUMENT; +- return 1; +- } ++ return 1; ++ } + +- entryno = fallback_entries[index]; +- } +- else if (! safe_parse_maxint (&arg, &entryno)) +- return 1; ++ /* Sanity check. */ ++ if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2 ++ || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) ++ { ++ errnum = ERR_BAD_VERSION; ++ return 1; + } +- else +- entryno = current_entryno; ++ ++ entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO); + +- /* Open the default file. */ +- saved_drive = boot_drive; +- saved_partition = install_partition; +- if (grub_open (default_file)) ++ /* Check if the saved entry number differs from current entry number. */ ++ if (*entryno_ptr != new_default) + { +- int len; ++ /* Overwrite the saved entry number. */ ++ *entryno_ptr = new_default; + +- disk_read_hook = disk_read_savesect_func; +- len = grub_read (buf, sizeof (buf)); +- disk_read_hook = 0; +- grub_close (); ++ /* Save the image in the disk. */ ++ if (! rawwrite (boot_drive, install_second_sector, buffer)) ++ return 1; + +- if (len != sizeof (buf)) +- { +- /* This is too small. Do not modify the file manually, please! */ +- errnum = ERR_READ; +- goto fail; +- } ++ /* Clear the cache. */ ++ buf_track = -1; ++ } + +- if (sector_count > 2) +- { +- /* Is this possible?! Too fragmented! */ +- errnum = ERR_FSYS_CORRUPT; +- goto fail; +- } +- +- /* Set up a string to be written. */ +- grub_memset (buf, '\n', sizeof (buf)); +- grub_sprintf (buf, "%d", entryno); +- +- if (saved_lengths[0] < sizeof (buf)) +- { +- /* The file is anchored to another file and the first few bytes +- are spanned in two sectors. Uggh... */ +- if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, +- sect)) +- goto fail; +- grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]); +- if (! rawwrite (current_drive, saved_sectors[0], sect)) +- goto fail; ++ return 0; ++} ++#endif + +- if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE, +- sect)) +- goto fail; +- grub_memmove (sect + saved_offsets[1], +- buf + saved_lengths[0], +- sizeof (buf) - saved_lengths[0]); +- if (! rawwrite (current_drive, saved_sectors[1], sect)) +- goto fail; +- } ++#if !defined(SUPPORT_DISKLESS) && defined(GRUB_UTIL) ++#define SECTOR_SIZE 0x200 ++/* ++ * Full implementation of new `savedefault' for GRUB shell. ++ * XXX This needs fixing for stage2 files which aren't accessible ++ * through a mounted filesystem. ++ */ ++static int ++savedefault_shell(char *arg, int flags) ++{ ++ char *stage2_os_file = "/boot/grub/stage2"; /* Default filename */ ++ FILE *fp; ++ char buffer[512]; ++ int *entryno_ptr; ++ int new_default = 0; ++ int old_default = 0; ++ ++ while (1) ++ { ++ if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) ++ { ++ stage2_os_file = arg + sizeof ("--stage2=") - 1; ++ arg = skip_to (0, arg); ++ nul_terminate (stage2_os_file); ++ } ++ else if (grub_memcmp ("--default=", arg, sizeof ("--default=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--default=") - 1; ++ if (! safe_parse_maxint (&p, &new_default)) ++ return 1; ++ arg = skip_to (0, arg); ++ } ++ else if (grub_memcmp ("--once", arg, sizeof ("--once") - 1) == 0) ++ { ++ new_default <<= 8; ++ new_default |= STAGE2_ONCEONLY_ENTRY; ++ arg = skip_to (0, arg); ++ } + else +- { +- /* This is a simple case. It fits into a single sector. */ +- if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, +- sect)) +- goto fail; +- grub_memmove (sect + saved_offsets[0], buf, sizeof (buf)); +- if (! rawwrite (current_drive, saved_sectors[0], sect)) +- goto fail; +- } ++ break; ++ } + +- /* Clear the cache. */ +- buf_track = -1; ++ if (! (fp = fopen(stage2_os_file, "r+"))) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++ } ++ ++ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) ++ { ++ fclose (fp); ++ errnum = ERR_BAD_VERSION; ++ return 1; ++ } ++ ++ if (fread (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_READ; ++ return 1; + } + +- fail: +- saved_drive = tmp_drive; +- saved_partition = tmp_partition; +- return errnum; ++ /* Sanity check. */ ++ if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2 ++ || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) ++ { ++ errnum = ERR_BAD_VERSION; ++ return 1; ++ } ++ ++ entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO); ++ if (new_default & STAGE2_ONCEONLY_ENTRY) ++ { ++ old_default=*entryno_ptr; ++ *entryno_ptr = new_default + (old_default & 0xFF); ++ } ++ else ++ { ++ *entryno_ptr = new_default; ++ } ++ ++ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) ++ { ++ fclose (fp); ++ errnum = ERR_BAD_VERSION; ++ return 1; ++ } ++ ++ if (fwrite (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ return 1; ++ } ++ ++ (void)fflush (fp); ++ fclose (fp); ++ return 0; ++} ++#undef SECTOR_SIZE ++#endif ++ ++/* savedefault */ ++static int ++savedefault_func (char *arg, int flags) ++{ ++#if !defined(SUPPORT_DISKLESS) ++#if !defined(GRUB_UTIL) ++#if !defined(PLATFORM_EFI) ++ /* This command is only useful when you boot an entry from the menu ++ interface. */ ++ if (! (flags & BUILTIN_SCRIPT)) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++ } ++ ++ return savedefault_helper(current_entryno); ++#else /* defined(PLATFORM_EFI) */ ++ return grub_save_saved_default (current_entryno); ++#endif ++#else /* defined(GRUB_UTIL) */ ++ return savedefault_shell(arg, flags); ++#endif + #else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ + errnum = ERR_UNRECOGNIZED; + return 1; +@@ -3368,10 +3790,14 @@ static struct builtin builtin_savedefault = + "savedefault", + savedefault_func, + BUILTIN_CMDLINE, +- "savedefault [NUM | `fallback']", +- "Save the current entry as the default boot entry if no argument is" +- " specified. If a number is specified, this number is saved. If" +- " `fallback' is used, next fallback entry is saved." ++#ifdef GRUB_UTIL ++ "savedefault [--stage2=STAGE2_FILE] [--default=DEFAULT] [--once]", ++ "Save DEFAULT as the default boot entry in STAGE2_FILE. If '--once'" ++ " is specified, the default is reset after the next reboot." ++#else ++ "savedefault", ++ "Save the current entry as the default boot entry." ++#endif + }; + + +@@ -3527,6 +3953,7 @@ static struct builtin builtin_serial = + }; + #endif /* SUPPORT_SERIAL */ + ++#ifndef PLATFORM_EFI + + /* setkey */ + struct keysym +@@ -3612,50 +4039,47 @@ static struct keysym keysym_table[] = + {"delete", 0, 0x7f, 0, 0x53} + }; + +-static int +-setkey_func (char *arg, int flags) ++static int find_key_code (char *key) + { +- char *to_key, *from_key; +- int to_code, from_code; +- int map_in_interrupt = 0; +- +- auto int find_key_code (char *key); +- auto int find_ascii_code (char *key); +- +- auto int find_key_code (char *key) +- { +- int i; ++ int i; + +- for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) +- { +- if (keysym_table[i].unshifted_name && +- grub_strcmp (key, keysym_table[i].unshifted_name) == 0) +- return keysym_table[i].keycode; +- else if (keysym_table[i].shifted_name && +- grub_strcmp (key, keysym_table[i].shifted_name) == 0) +- return keysym_table[i].keycode; +- } +- +- return 0; ++ for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) ++ { ++ if (keysym_table[i].unshifted_name && ++ grub_strcmp (key, keysym_table[i].unshifted_name) == 0) ++ return keysym_table[i].keycode; ++ else if (keysym_table[i].shifted_name && ++ grub_strcmp (key, keysym_table[i].shifted_name) == 0) ++ return keysym_table[i].keycode; + } + +- auto int find_ascii_code (char *key) ++ return 0; ++} ++ ++static int find_ascii_code (char *key) ++{ ++ int i; ++ ++ for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) + { +- int i; +- +- for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) +- { +- if (keysym_table[i].unshifted_name && +- grub_strcmp (key, keysym_table[i].unshifted_name) == 0) +- return keysym_table[i].unshifted_ascii; +- else if (keysym_table[i].shifted_name && +- grub_strcmp (key, keysym_table[i].shifted_name) == 0) +- return keysym_table[i].shifted_ascii; +- } +- +- return 0; ++ if (keysym_table[i].unshifted_name && ++ grub_strcmp (key, keysym_table[i].unshifted_name) == 0) ++ return keysym_table[i].unshifted_ascii; ++ else if (keysym_table[i].shifted_name && ++ grub_strcmp (key, keysym_table[i].shifted_name) == 0) ++ return keysym_table[i].shifted_ascii; + } + ++ return 0; ++} ++ ++static int ++setkey_func (char *arg, int flags) ++{ ++ char *to_key, *from_key; ++ int to_code, from_code; ++ int map_in_interrupt = 0; ++ + to_key = arg; + from_key = skip_to (0, to_key); + +@@ -3830,15 +4254,15 @@ setup_func (char *arg, int flags) + { + char tmp[16]; + grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); +- grub_strncat (device, tmp, 256); ++ grub_strncat (device, tmp, 16); + } + if ((partition & 0x00FF00) != 0x00FF00) + { + char tmp[16]; + grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); +- grub_strncat (device, tmp, 256); ++ grub_strncat (device, tmp, 16); + } +- grub_strncat (device, ")", 256); ++ grub_strncat (device, ")", 16); + } + + int embed_stage1_5 (char *stage1_5, int drive, int partition) +@@ -3973,7 +4397,7 @@ setup_func (char *arg, int flags) + + /* The prefix was determined. */ + grub_sprintf (stage2, "%s%s", prefix, "/stage2"); +- grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst"); ++ grub_sprintf (config_filename, "%s%s", prefix, "/grub.conf"); + *real_config_filename = 0; + + /* Check if stage2 exists. */ +@@ -4083,9 +4507,26 @@ static struct builtin builtin_setup = + " partition where GRUB images reside, specify the option `--stage2'" + " to tell GRUB the file name under your OS." + }; ++#endif /* ! PLATFORM_EFI */ ++ ++ ++static int ++silent_func (char *arg, int flags) ++{ ++ silent_grub = 1; ++ return 0; ++} ++ ++static struct builtin builtin_silent = ++{ ++ "silent", ++ silent_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "grub will attempt to avoid printing anything to the screen" ++}; + + +-#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) + /* terminal */ + static int + terminal_func (char *arg, int flags) +@@ -4244,17 +4685,21 @@ terminal_func (char *arg, int flags) + end: + current_term = term_table + default_term; + current_term->flags = term_flags; +- ++ + if (lines) + max_lines = lines; + else +- /* 24 would be a good default value. */ +- max_lines = 24; +- ++ max_lines = current_term->max_lines; ++ + /* If the interface is currently the command-line, + restart it to repaint the screen. */ +- if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) ++ if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){ ++ if (prev_term->shutdown) ++ prev_term->shutdown(); ++ if (current_term->startup) ++ current_term->startup(); + grub_longjmp (restart_cmdline_env, 0); ++ } + + return 0; + } +@@ -4264,7 +4709,7 @@ static struct builtin builtin_terminal = + "terminal", + terminal_func, + BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, +- "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]", ++ "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]", + "Select a terminal. When multiple terminals are specified, wait until" + " you push any key to continue. If both console and serial are specified," + " the terminal to which you input a key first will be selected. If no" +@@ -4276,7 +4721,7 @@ static struct builtin builtin_terminal = + " seconds. The option --lines specifies the maximum number of lines." + " The option --silent is used to suppress messages." + }; +-#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ + + + #ifdef SUPPORT_SERIAL +@@ -4462,6 +4907,7 @@ static struct builtin builtin_testload = + " step is to try loading a kernel." + }; + ++#ifndef PLATFORM_EFI + + /* testvbe MODE */ + static int +@@ -4566,6 +5012,7 @@ static struct builtin builtin_testvbe = + "testvbe MODE", + "Test the VBE mode MODE. Hit any key to return." + }; ++#endif /* !PLATFORM_EFI */ + + + #ifdef SUPPORT_NETBOOT +@@ -4598,6 +5045,15 @@ static struct builtin builtin_tftpserver = + static int + timeout_func (char *arg, int flags) + { ++ /* One-shot default shenanigans -- don't piss around with the menu! */ ++ if (grub_timeout != -1) ++ return 0; ++ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) ++ { ++ grub_timeout = 0; ++ return 0; ++ } ++ + if (! safe_parse_maxint (&arg, &grub_timeout)) + return 1; + +@@ -4661,6 +5117,7 @@ static struct builtin builtin_unhide = + " partition type code." + }; + ++#ifndef PLATFORM_EFI + + /* uppermem */ + static int +@@ -4790,11 +5247,34 @@ static struct builtin builtin_vbeprobe = + "Probe VBE information. If the mode number MODE is specified, show only" + " the information about only the mode." + }; +- ++#endif /* ! PLATFORM_EFI */ ++ ++ ++/* version */ ++static int ++version_func (char *arg, int flags) ++{ ++ grub_printf ("\n GNU GRUB version %s (%dK lower / %dK upper memory)\n\n", ++ version_string, mbi.mem_lower, mbi.mem_upper); ++ return 0; ++} ++ ++static struct builtin builtin_version = ++{ ++ "version", ++ version_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "version", ++ "Display grub version." ++}; ++ + + /* The table of builtin commands. Sorted in dictionary order. */ + struct builtin *builtin_table[] = + { ++#ifdef SUPPORT_GRAPHICS ++ &builtin_background, ++#endif + &builtin_blocklist, + &builtin_boot, + #ifdef SUPPORT_NETBOOT +@@ -4802,25 +5282,37 @@ struct builtin *builtin_table[] = + #endif /* SUPPORT_NETBOOT */ + &builtin_cat, + &builtin_chainloader, ++ &builtin_clear, + &builtin_cmp, + &builtin_color, + &builtin_configfile, + &builtin_debug, + &builtin_default, +-#ifdef GRUB_UTIL ++#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) + &builtin_device, +-#endif /* GRUB_UTIL */ ++#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */ + #ifdef SUPPORT_NETBOOT + &builtin_dhcp, + #endif /* SUPPORT_NETBOOT */ ++#ifndef PLATFORM_EFI + &builtin_displayapm, ++#endif + &builtin_displaymem, + #ifdef GRUB_UTIL + &builtin_dump, + #endif /* GRUB_UTIL */ ++#ifdef PLATFORM_EFI ++ &builtin_efimap, ++#endif ++#ifndef PLATFORM_EFI + &builtin_embed, ++#endif + &builtin_fallback, + &builtin_find, ++ &builtin_findiso, ++#ifdef SUPPORT_GRAPHICS ++ &builtin_foreground, ++#endif + &builtin_fstest, + &builtin_geometry, + &builtin_halt, +@@ -4830,27 +5322,35 @@ struct builtin *builtin_table[] = + #ifdef SUPPORT_NETBOOT + &builtin_ifconfig, + #endif /* SUPPORT_NETBOOT */ ++#ifndef PLATFORM_EFI + &builtin_impsprobe, ++#endif + &builtin_initrd, ++#ifndef PLATFORM_EFI + &builtin_install, + &builtin_ioprobe, ++#endif + &builtin_kernel, + &builtin_lock, + &builtin_makeactive, ++#ifndef PLATFORM_EFI + &builtin_map, ++#endif + #ifdef USE_MD5_PASSWORDS + &builtin_md5crypt, + #endif /* USE_MD5_PASSWORDS */ ++#ifndef PLATFORM_EFI + &builtin_module, + &builtin_modulenounzip, ++#endif + &builtin_pager, + &builtin_partnew, + &builtin_parttype, + &builtin_password, + &builtin_pause, +-#ifdef GRUB_UTIL ++#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) + &builtin_quit, +-#endif /* GRUB_UTIL */ ++#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */ + #ifdef SUPPORT_NETBOOT + &builtin_rarp, + #endif /* SUPPORT_NETBOOT */ +@@ -4862,23 +5362,35 @@ struct builtin *builtin_table[] = + #ifdef SUPPORT_SERIAL + &builtin_serial, + #endif /* SUPPORT_SERIAL */ ++#ifndef PLATFORM_EFI + &builtin_setkey, + &builtin_setup, +-#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++#endif ++ &builtin_silent, ++#ifdef SUPPORT_GRAPHICS ++ &builtin_splashimage, ++#endif /* SUPPORT_GRAPHICS */ ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) + &builtin_terminal, +-#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ + #ifdef SUPPORT_SERIAL + &builtin_terminfo, + #endif /* SUPPORT_SERIAL */ + &builtin_testload, ++#ifndef PLATFORM_EFI + &builtin_testvbe, ++#endif + #ifdef SUPPORT_NETBOOT + &builtin_tftpserver, + #endif /* SUPPORT_NETBOOT */ + &builtin_timeout, + &builtin_title, + &builtin_unhide, ++#ifndef PLATFORM_EFI + &builtin_uppermem, + &builtin_vbeprobe, ++#endif ++ &builtin_verbose, ++ &builtin_version, + 0 + }; +diff --git a/stage2/char_io.c b/stage2/char_io.c +index c86c240..073201a 100644 +--- a/stage2/char_io.c ++++ b/stage2/char_io.c +@@ -35,29 +35,37 @@ struct term_entry term_table[] = + { + "console", + 0, ++ 24, + console_putchar, + console_checkkey, + console_getkey, ++ console_keystatus, + console_getxy, + console_gotoxy, + console_cls, + console_setcolorstate, + console_setcolor, +- console_setcursor ++ console_setcursor, ++ 0, ++ 0 + }, + #ifdef SUPPORT_SERIAL + { + "serial", + /* A serial device must be initialized. */ + TERM_NEED_INIT, ++ 24, + serial_putchar, + serial_checkkey, + serial_getkey, ++ 0, + serial_getxy, + serial_gotoxy, + serial_cls, + serial_setcolorstate, + 0, ++ 0, ++ 0, + 0 + }, + #endif /* SUPPORT_SERIAL */ +@@ -65,17 +73,39 @@ struct term_entry term_table[] = + { + "hercules", + 0, ++ 24, + hercules_putchar, + console_checkkey, + console_getkey, ++ console_keystatus, + hercules_getxy, + hercules_gotoxy, + hercules_cls, + hercules_setcolorstate, + hercules_setcolor, +- hercules_setcursor ++ hercules_setcursor, ++ 0, ++ 0 + }, + #endif /* SUPPORT_HERCULES */ ++#ifdef SUPPORT_GRAPHICS ++ { "graphics", ++ TERM_NEED_INIT, /* flags */ ++ 30, /* number of lines */ ++ graphics_putchar, /* putchar */ ++ console_checkkey, /* checkkey */ ++ console_getkey, /* getkey */ ++ console_keystatus, /* keystatus */ ++ graphics_getxy, /* getxy */ ++ graphics_gotoxy, /* gotoxy */ ++ graphics_cls, /* cls */ ++ graphics_setcolorstate, /* setcolorstate */ ++ graphics_setcolor, /* setcolor */ ++ graphics_setcursor, /* nocursor */ ++ graphics_init, /* initialize */ ++ graphics_end /* shutdown */ ++ }, ++#endif /* SUPPORT_GRAPHICS */ + /* This must be the last entry. */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + }; +@@ -101,16 +131,16 @@ print_error (void) + } + + char * +-convert_to_ascii (char *buf, int c,...) ++convert_to_ascii (char *buf, int c, unsigned int num) + { +- unsigned long num = *((&c) + 1), mult = 10; ++ unsigned int mult = 10; + char *ptr = buf; + + #ifndef STAGE1_5 + if (c == 'x' || c == 'X') + mult = 16; + +- if ((num & 0x80000000uL) && c == 'd') ++ if ((int) num < 0 && c == 'd') + { + num = (~num) + 1; + *(ptr++) = '-'; +@@ -149,87 +179,266 @@ grub_putstr (const char *str) + grub_putchar (*str++); + } + +-void +-grub_printf (const char *format,...) ++static void write_char(char **str, char c, int *count) + { +- int *dataptr = (int *) &format; +- char c, str[16]; +- +- dataptr++; +- +- while ((c = *(format++)) != 0) +- { +- if (c != '%') +- grub_putchar (c); +- else +- switch (c = *(format++)) +- { +-#ifndef STAGE1_5 +- case 'd': +- case 'x': +- case 'X': +-#endif +- case 'u': +- *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; +- grub_putstr (str); +- break; +- +-#ifndef STAGE1_5 +- case 'c': +- grub_putchar ((*(dataptr++)) & 0xff); +- break; ++ if (str && *str) ++ *(*str)++ = c; ++ else ++ putchar(c); ++ (*count)++; ++} + +- case 's': +- grub_putstr ((char *) *(dataptr++)); +- break; +-#endif +- } ++static void write_str(char **str, char *s, int *count) ++{ ++ if (s) { ++ while (*s) ++ write_char(str, *s++, count); ++ } else { ++ write_str(str, "(nil)", count); + } + } + +-#ifndef STAGE1_5 ++#define format_ascii(buf, val, is_hex, is_cap, num_pad_chars) ({ \ ++ int _n = sizeof ((buf)) - 2; \ ++ typeof(val) _nval = (val); \ ++ int _negative = 0; \ ++ int _mult = is_hex ? 16 : 10; \ ++ char _a = is_cap ? 'A' : 'a'; \ ++ int _pad = num_pad_chars; \ ++ char hex[] = "0123456789abcdef"; \ ++ memset((buf), '\0', sizeof ((buf))); \ ++ if (!(_nval > 0LL)) \ ++ _negative = 1; \ ++ if (_nval == 0LL) \ ++ _negative = 0; \ ++ if (_negative) \ ++ _nval = (_nval ^ -1); \ ++ do { \ ++ int _dig = _nval % _mult; \ ++ (buf)[_n--] = ((_dig > 9) ? _dig + _a - 10 : '0'+_dig); \ ++ if (_pad > 0) _pad--; \ ++ } while (_nval /= _mult); \ ++ while (_pad--) \ ++ (buf)[_n--] = '0'; \ ++ if (_negative) \ ++ (buf)[_n--] = '-'; \ ++ _mult = 0; \ ++ _n++; \ ++ while (_n < sizeof ((buf))) \ ++ (buf)[_mult++] = (buf)[_n++]; \ ++ if (_negative && _mult > 1) \ ++ ((buf)[_mult-2])++; \ ++ }) ++ + int +-grub_sprintf (char *buffer, const char *format, ...) ++grub_vsprintf (char *str, const char *fmt, va_list args) + { +- /* XXX hohmuth +- ugly hack -- should unify with printf() */ +- int *dataptr = (int *) &format; +- char c, *ptr, str[16]; +- char *bp = buffer; +- +- dataptr++; +- +- while ((c = *format++) != 0) +- { +- if (c != '%') +- *bp++ = c; /* putchar(c); */ +- else +- switch (c = *(format++)) +- { +- case 'd': case 'u': case 'x': +- *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; +- +- ptr = str; ++ char c; ++ char buf[40]; ++ int pos = 0; ++ ++ int count = 0; ++ ++ char *str_arg; ++ int int_arg; ++ unsigned char uchar_arg; ++ unsigned ushort_arg; ++ unsigned int uint_arg; ++ signed long long_arg; ++ unsigned long ulong_arg; ++ signed long long longlong_arg; ++ unsigned long long ulonglong_arg; ++ ++ c = *fmt++; ++ if (!c) ++ return 0; ++ ++ int is_fmt = 0, is_long = 0, is_signed = 1, is_cap = 0, is_zero_padded = 0; ++ int num_pad_chars = 0; ++ int restart = 1; ++ do { ++ if (restart) { ++ restart = 0; ++ is_fmt = 0; ++ is_long = 0; ++ is_cap = 0; ++ is_signed = 1; ++ is_zero_padded = 0; ++ num_pad_chars = 0; ++ buf[0] = '\0'; ++ pos = 0; ++ } ++ ++ if (!is_fmt) { ++ if (c == '%') { ++ is_fmt = 1; ++ buf[pos++] = c; ++ buf[pos] = '\0'; ++ continue; ++ } else { ++ write_char(&str, c, &count); ++ continue; ++ } ++ } ++ ++ /* below here we only ever hit when is_fmt is 1 */ ++ switch (c) { ++ /* first, modifiers */ ++ case '%': ++ if (pos != 0) ++ write_str(&str, buf, &count); ++ write_char(&str, c, &count); ++ restart = 1; ++ continue; ++ case '0': ++ if (!is_zero_padded) { ++ buf[pos++] = c; ++ buf[pos] = '\0'; ++ is_zero_padded++; ++ continue; ++ } ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ buf[pos++] = c; ++ buf[pos] = '\0'; ++ num_pad_chars *= 10; ++ num_pad_chars += c - '0'; ++ continue; ++ case 'l': ++ buf[pos++] = c; ++ buf[pos] = '\0'; ++ is_long++; ++ continue; ++ case 'L': ++ buf[pos++] = c; ++ buf[pos] = '\0'; ++ is_long = 2; ++ continue; ++ ++ /* below here are things we actually have to print */ ++ case 'c': ++ int_arg = va_arg(args, int) & 0xff; ++ if (int_arg == 0) { ++ char *tmp_str = "\\x00"; ++ write_str(&tmp_str, buf, &count); ++ } else { ++ write_char(&str, int_arg, &count); ++ } ++ restart = 1; ++ continue; ++ case 'd': ++ if (is_long == 0) { ++ int_arg = va_arg(args, signed int); ++ format_ascii(buf, int_arg, 0, 0, 0); ++ } else if (is_long == 1) { ++ long_arg = va_arg(args, signed long); ++ format_ascii(buf, long_arg, 0, 0, 0); ++ } else { ++ longlong_arg = va_arg(args, signed long long); ++ format_ascii(buf, longlong_arg, 0, 0, 0); ++ } ++ write_str(&str, buf, &count); ++ restart = 1; ++ continue; ++ case 's': ++ str_arg = va_arg(args, char *); ++ write_str(&str, str_arg, &count); ++ restart = 1; ++ continue; ++ case 'u': ++ case 'U': ++ if (is_long == 0) { ++ uint_arg = va_arg(args, unsigned int); ++ format_ascii(buf, uint_arg, 0, 0, 0); ++ } else if (is_long == 1) { ++ ulong_arg = va_arg(args, unsigned long); ++ format_ascii(buf, ulong_arg, 0, 0, 0); ++ } else { ++ ulonglong_arg = va_arg(args, unsigned long long); ++ format_ascii(buf, ulonglong_arg, 0, 0, 0); ++ } ++ write_str(&str, buf, &count); ++ restart = 1; ++ continue; ++ case 'P': ++ is_cap = 1; ++ case 'p': ++ ulong_arg = va_arg(args, unsigned long); ++ is_zero_padded = 1; ++ format_ascii(buf, ulong_arg, 1, is_cap, sizeof(ulong_arg)); ++ write_str(&str, is_cap ? "0X" : "0x", &count); ++ write_str(&str, buf, &count); ++ restart = 1; ++ continue; ++ case 'X': ++ is_cap = 1; ++ case 'x': ++ if (num_pad_chars == 2) { ++ int i; ++ char hex[] = "0123456789abcdef"; ++ uint_arg = va_arg(args, unsigned int); ++ uchar_arg = uint_arg & 0xff; ++ format_ascii(buf, uchar_arg, 1, is_cap, num_pad_chars); ++ } else if (num_pad_chars == 4) { ++ uint_arg = va_arg(args, unsigned int); ++ ushort_arg = uint_arg & 0xffff; ++ format_ascii(buf, ushort_arg, 1, is_cap, num_pad_chars); ++ } else if (is_long == 0) { ++ uint_arg = va_arg(args, unsigned int); ++ format_ascii(buf, uint_arg, 1, is_cap, num_pad_chars); ++ } else if (is_long == 1) { ++ ulong_arg = va_arg(args, unsigned long); ++ format_ascii(buf, ulong_arg, 1, is_cap, num_pad_chars); ++ } else { ++ ulonglong_arg = va_arg(args, unsigned long long); ++ format_ascii(buf, ulonglong_arg, 1, is_cap, num_pad_chars); ++ } ++ write_str(&str, buf, &count); ++ restart = 1; ++ continue; ++ default: ++ buf[pos++] = c; ++ buf[pos] = '\0'; ++ write_str(&str, buf, &count); ++ restart = 1; ++ continue; ++ } ++ } while ((c = *fmt++)); ++ ++ if (str) ++ *str = '\0'; ++ return count; ++} + +- while (*ptr) +- *bp++ = *(ptr++); /* putchar(*(ptr++)); */ +- break; ++void ++grub_printf (char *fmt, ...) ++{ ++ va_list ap; + +- case 'c': *bp++ = (*(dataptr++))&0xff; +- /* putchar((*(dataptr++))&0xff); */ +- break; ++ va_start (ap, fmt); ++ grub_vsprintf (0, fmt, ap); ++ va_end (ap); ++} + +- case 's': +- ptr = (char *) (*(dataptr++)); ++#ifndef STAGE1_5 ++int ++grub_sprintf (char *str, const char *fmt, ...) ++{ ++ va_list ap; ++ int ret; + +- while ((c = *ptr++) != 0) +- *bp++ = c; /* putchar(c); */ +- break; +- } +- } ++ va_start (ap, fmt); ++ ret = grub_vsprintf (str, fmt, ap); ++ va_end (ap); + +- *bp = 0; +- return bp - buffer; ++ return ret; + } + + +@@ -898,7 +1107,6 @@ safe_parse_maxint (char **str_ptr, int *myint_ptr) + } + #endif /* STAGE1_5 */ + +-#if !defined(STAGE1_5) || defined(FSYS_FAT) + int + grub_tolower (int c) + { +@@ -907,7 +1115,6 @@ grub_tolower (int c) + + return c; + } +-#endif /* ! STAGE1_5 || FSYS_FAT */ + + int + grub_isspace (int c) +@@ -1004,6 +1211,16 @@ checkkey (void) + { + return current_term->checkkey (); + } ++ ++/* Return keyboard modifier status. */ ++int ++keystatus (void) ++{ ++ if (current_term->keystatus) ++ return current_term->keystatus (); ++ else ++ return 0; ++} + #endif /* ! STAGE1_5 */ + + /* Display an ASCII character. */ +@@ -1046,13 +1263,15 @@ grub_putchar (int c) + the following grub_printf call will print newlines. */ + count_lines = -1; + ++ grub_printf("\n"); + if (current_term->setcolorstate) + current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); + +- grub_printf ("\n[Hit return to continue]"); ++ grub_printf ("[Hit return to continue]"); + + if (current_term->setcolorstate) + current_term->setcolorstate (COLOR_STATE_NORMAL); ++ + + do + { +@@ -1090,7 +1309,7 @@ void + cls (void) + { + /* If the terminal is dumb, there is no way to clean the terminal. */ +- if (current_term->flags & TERM_DUMB) ++ if (current_term->flags & TERM_DUMB) + grub_putchar ('\n'); + else + current_term->cls (); +@@ -1125,6 +1344,26 @@ substring (const char *s1, const char *s2) + return 1; + } + ++int ++subcasestring (const char *s1, const char *s2) ++{ ++ while (tolower(*s1) == tolower(*s2)) ++ { ++ /* The strings match exactly. */ ++ if (! *(s1++)) ++ return 0; ++ s2 ++; ++ } ++ ++ /* S1 is a substring of S2. */ ++ if (*s1 == 0) ++ return -1; ++ ++ /* S1 isn't a substring. */ ++ return 1; ++} ++ ++ + #ifndef STAGE1_5 + /* Terminate the string STR with NUL. */ + int +@@ -1172,41 +1411,180 @@ grub_strlen (const char *str) + + return len; + } +-#endif /* ! STAGE1_5 */ + ++/* this function "borrowed" from dietlibc */ + int +-memcheck (int addr, int len) ++grub_strspn(const char *s, const char *accept) + { +-#ifdef GRUB_UTIL +- auto int start_addr (void); +- auto int end_addr (void); +- +- auto int start_addr (void) ++ int l=0; ++ int a=1,i,al=grub_strlen(accept); ++ ++ while((a)&&(*s)) ++ { ++ for(a=i=0;(!a)&&(i terminate it */ ++ } ++ *ptrptr=s; ++ return tmp; ++} ++ ++char * ++grub_strchr (const char *s, int c) ++{ ++ while (*s) + { +- int ret; ++ if (*s == c) ++ return (char *) s; ++ s++; ++ } ++ ++ return 0; ++} ++ ++char * ++grub_strnchr (const char *s, int c) ++{ ++ while (*s) ++ { ++ if (*s != c) ++ return (char *) s; ++ s++; ++ } ++ ++ return 0; ++} ++ ++char * ++grub_strrchr (const char *s, int c) ++{ ++ char *p = 0; ++ ++ while (*s) ++ { ++ if (*s == c) ++ p = (char *) s; ++ s++; ++ } ++ ++ return p; ++} ++ ++int ++grub_strnlen (const char *s, int n) ++{ ++ int i; ++ ++ if (n == 0) ++ return 0; ++ ++ for (i = 0; s[i] != '\0' && i < n; i++) ++ ; ++ return i; ++} ++ ++char * ++grub_strncpy(char *new, const char *s, int n) ++{ ++ int i; ++ ++ for (i = 0; s[i] != '\0' && i < n; i++) ++ new[i] = s[i]; ++ return new; ++} ++ ++int ++grub_strncasecmp(const char *s0, const char *s1, int n) ++{ ++ int c0, c1; ++ ++ if (s0 == s1 || n == 0) ++ return 0; ++ ++ do { ++ c0 = *s0 & ~0x20; ++ c1 = *s1 & ~0x20; ++ ++ if (--n == 0 || c0 == '\0') ++ break; ++ ++ *s0++; ++ *s1++; ++ } while (c0 == c1); ++ ++ return (c0 > c1 ? 1 : c0 < c1 ? -1 : 0); ++} ++ ++#endif /* ! STAGE1_5 */ ++ ++#ifdef GRUB_UTIL ++static int memcheck_start_addr (void) ++{ ++ int ret; + # if defined(HAVE_START_SYMBOL) +- asm volatile ("movl $start, %0" : "=a" (ret)); ++ asm volatile ("movl $start, %0" : "=a" (ret)); + # elif defined(HAVE_USCORE_START_SYMBOL) +- asm volatile ("movl $_start, %0" : "=a" (ret)); ++ asm volatile ("movl $_start, %0" : "=a" (ret)); + # endif +- return ret; +- } ++ return ret; ++} + +- auto int end_addr (void) +- { +- int ret; ++static int memcheck_end_addr (void) ++{ ++ int ret; + # if defined(HAVE_END_SYMBOL) +- asm volatile ("movl $end, %0" : "=a" (ret)); ++ asm volatile ("movl $end, %0" : "=a" (ret)); + # elif defined(HAVE_USCORE_END_SYMBOL) +- asm volatile ("movl $_end, %0" : "=a" (ret)); ++ asm volatile ("movl $_end, %0" : "=a" (ret)); + # endif +- return ret; +- } ++ return ret; ++} ++#endif /* GRUB_UTIL */ + +- if (start_addr () <= addr && end_addr () > addr + len) ++int ++memcheck (int addr, int len) ++{ ++#ifdef GRUB_UTIL ++ if (memcheck_start_addr () <= addr && memcheck_end_addr () > addr + len) + return ! errnum; + #endif /* GRUB_UTIL */ + ++#ifdef PLATFORM_EFI ++ return 1; ++#else + if ((addr < RAW_ADDR (0x1000)) + || (addr < RAW_ADDR (0x100000) + && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len)) +@@ -1215,12 +1593,23 @@ memcheck (int addr, int len) + errnum = ERR_WONT_FIT; + + return ! errnum; ++#endif ++} ++ ++void ++grub_memcpy(void *dest, const void *src, int len) ++{ ++ int i; ++ register char *d = (char*)dest, *s = (char*)src; ++ ++ for (i = 0; i < len; i++) ++ d[i] = s[i]; + } + + void * + grub_memmove (void *to, const void *from, int len) + { +- if (memcheck ((int) to, len)) ++ if (memcheck ((unsigned long) to, len)) + { + /* This assembly code is stolen from + linux-2.2.2/include/asm-i386/string.h. This is not very fast +@@ -1258,7 +1647,7 @@ grub_memset (void *start, int c, int len) + { + char *p = start; + +- if (memcheck ((int) start, len)) ++ if (memcheck ((unsigned long) start, len)) + { + while (len -- > 0) + *p ++ = c; +@@ -1274,6 +1663,26 @@ grub_strcpy (char *dest, const char *src) + grub_memmove (dest, src, grub_strlen (src) + 1); + return dest; + } ++ ++char * ++grub_stpncpy (char *dest, const char *src, int n) ++{ ++ char *res; ++ ++ res = NULL; ++ while (n != 0) { ++ *dest = *src; ++ if (*src != 0) ++ src++; ++ else if (res == NULL) ++ res = dest; ++ dest++; ++ n--; ++ } ++ if (res == NULL) ++ res = dest; ++ return res; ++} + #endif /* ! STAGE1_5 */ + + #ifndef GRUB_UTIL +diff --git a/stage2/cmdline.c b/stage2/cmdline.c +index a6ee309..cb41eda 100644 +--- a/stage2/cmdline.c ++++ b/stage2/cmdline.c +@@ -48,12 +48,17 @@ skip_to (int after_equal, char *cmdline) + + /* Print a helpful message for the command-line interface. */ + void +-print_cmdline_message (int forever) ++print_cmdline_message (int type) + { + printf (" [ Minimal BASH-like line editing is supported. For the first word, TAB\n" + " lists possible command completions. Anywhere else TAB lists the possible\n" +- " completions of a device/filename.%s ]\n", +- (forever ? "" : " ESC at any time exits.")); ++ " completions of a device/filename."); ++ if (type == CMDLINE_NORMAL_MODE) ++ printf(" ESC at any time exits."); ++ if (type == CMDLINE_EDIT_MODE) ++ printf(" ESC at any time cancels. ENTER \n" ++ " at any time accepts your changes."); ++ printf("]\n"); + } + + /* Find the builtin whose command name is COMMAND and return the +@@ -128,7 +133,7 @@ enter_cmdline (char *heap, int forever) + print_network_configuration (); + grub_putchar ('\n'); + #endif +- print_cmdline_message (forever); ++ print_cmdline_message (forever ? CMDLINE_FOREVER_MODE : CMDLINE_NORMAL_MODE); + + while (1) + { +@@ -215,7 +220,7 @@ run_script (char *script, char *heap) + while (*cur_entry++) + ; + +- grub_memmove (heap, old_entry, (int) cur_entry - (int) old_entry); ++ grub_memmove (heap, old_entry, cur_entry - old_entry); + if (! *heap) + { + /* If there is no more command in SCRIPT... */ +@@ -232,12 +237,12 @@ run_script (char *script, char *heap) + builtin = find_command (heap); + if (! builtin) + { +- grub_printf ("%s\n", old_entry); ++ grub_verbose_printf ("%s\n", old_entry); + continue; + } + + if (! (builtin->flags & BUILTIN_NO_ECHO)) +- grub_printf ("%s\n", old_entry); ++ grub_verbose_printf ("%s\n", old_entry); + + /* If BUILTIN cannot be run in the command-line, skip it. */ + if (! (builtin->flags & BUILTIN_CMDLINE)) +diff --git a/stage2/common.c b/stage2/common.c +index 09f9e31..e96bec2 100644 +--- a/stage2/common.c ++++ b/stage2/common.c +@@ -32,7 +32,7 @@ + struct multiboot_info mbi; + unsigned long saved_drive; + unsigned long saved_partition; +-unsigned long cdrom_drive; ++unsigned long cdrom_drive = 0x100; + #ifndef STAGE1_5 + unsigned long saved_mem_upper; + +@@ -114,7 +114,7 @@ mmap_avail_at (unsigned long bottom) + { + for (cont = 0, addr = mbi.mmap_addr; + addr < mbi.mmap_addr + mbi.mmap_length; +- addr += *((unsigned long *) addr) + 4) ++ addr += *((unsigned int *) addr) + 4) + { + struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr; + +@@ -183,11 +183,11 @@ init_bios_info (void) + cont = get_mmap_entry ((void *) addr, cont); + + /* If the returned buffer's length is zero, quit. */ +- if (! *((unsigned long *) addr)) ++ if (! *((unsigned int *) addr)) + break; + +- mbi.mmap_length += *((unsigned long *) addr) + 4; +- addr += *((unsigned long *) addr) + 4; ++ mbi.mmap_length += *((unsigned int *) addr) + 4; ++ addr += *((unsigned int *) addr) + 4; + } + while (cont); + +@@ -207,7 +207,7 @@ init_bios_info (void) + /* Find the maximum available address. Ignore any memory holes. */ + for (max_addr = 0, addr = mbi.mmap_addr; + addr < mbi.mmap_addr + mbi.mmap_length; +- addr += *((unsigned long *) addr) + 4) ++ addr += *((unsigned int *) addr) + 4) + { + struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr; + +@@ -322,6 +322,9 @@ init_bios_info (void) + + /* Set cdrom drive. */ + { ++#ifdef PLATFORM_EFI ++ cdrom_drive = 0x100; ++#else + struct geometry geom; + + /* Get the geometry. */ +@@ -330,6 +333,7 @@ init_bios_info (void) + cdrom_drive = GRUB_INVALID_DRIVE; + else + cdrom_drive = boot_drive; ++#endif + } + + /* Start main routine here. */ +diff --git a/stage2/disk_io.c b/stage2/disk_io.c +index b9bc526..f3fed0e 100644 +--- a/stage2/disk_io.c ++++ b/stage2/disk_io.c +@@ -21,12 +21,17 @@ + + #include + #include ++#include + + #ifdef SUPPORT_NETBOOT + # define GRUB 1 + # include + #endif + ++#ifdef PLATFORM_EFI ++#include "efistubs.h" ++#endif ++ + #ifdef GRUB_UTIL + # include + #endif +@@ -48,6 +53,9 @@ int fsmax; + struct fsys_entry fsys_table[NUM_FSYS + 1] = + { + /* TFTP should come first because others don't handle net device. */ ++# ifdef PLATFORM_EFI ++ {"efitftp", efi_tftp_mount, efi_tftp_read, efi_tftp_dir, efi_tftp_close, 0}, ++# endif + # ifdef FSYS_TFTP + {"tftp", tftp_mount, tftp_read, tftp_dir, tftp_close, 0}, + # endif +@@ -75,6 +83,9 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] = + # ifdef FSYS_UFS2 + {"ufs2", ufs2_mount, ufs2_read, ufs2_dir, 0, ufs2_embed}, + # endif ++# ifdef PLATFORM_EFI ++ {"uefi", uefi_mount, uefi_read, uefi_dir, uefi_close, 0}, ++# endif + # ifdef FSYS_ISO9660 + {"iso9660", iso9660_mount, iso9660_read, iso9660_dir, 0, 0}, + # endif +@@ -127,8 +138,8 @@ struct geometry buf_geom; + int filepos; + int filemax; + +-static inline unsigned long +-log2 (unsigned long word) ++static inline unsigned int ++grub_log2 (unsigned int word) + { + asm volatile ("bsfl %1,%0" + : "=r" (word) +@@ -140,7 +151,7 @@ int + rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) + { + int slen, sectors_per_vtrack; +- int sector_size_bits = log2 (buf_geom.sector_size); ++ int sector_size_bits = grub_log2 (buf_geom.sector_size); + + if (byte_len <= 0) + return 1; +@@ -163,7 +174,7 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) + } + buf_drive = drive; + buf_track = -1; +- sector_size_bits = log2 (buf_geom.sector_size); ++ sector_size_bits = grub_log2 (buf_geom.sector_size); + } + + /* Make sure that SECTOR is valid. */ +@@ -297,7 +308,7 @@ devread (int sector, int byte_offset, int byte_len, char *buf) + * Check partition boundaries + */ + if (sector < 0 +- || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) ++ || ((sector + ((byte_offset + byte_len - 1) >> get_sector_bits(current_drive))) + >= part_length)) + { + errnum = ERR_OUTSIDE_PART; +@@ -307,8 +318,8 @@ devread (int sector, int byte_offset, int byte_len, char *buf) + /* + * Get the read to the beginning of a partition. + */ +- sector += byte_offset >> SECTOR_BITS; +- byte_offset &= SECTOR_SIZE - 1; ++ sector += byte_offset >> get_sector_bits(current_drive); ++ byte_offset &= get_sector_size(current_drive) - 1; + + #if !defined(STAGE1_5) + if (disk_read_hook && debug) +@@ -347,7 +358,7 @@ rawwrite (int drive, int sector, char *buf) + sector = 1; + } + +- memmove ((char *) SCRATCHADDR, buf, SECTOR_SIZE); ++ memmove ((char *) SCRATCHADDR, buf, get_sector_size(drive)); + if (biosdisk (BIOSDISK_WRITE, drive, &buf_geom, + sector, 1, SCRATCHSEG)) + { +@@ -373,23 +384,23 @@ devwrite (int sector, int sector_count, char *buf) + embed a Stage 1.5 into a partition instead of a MBR, use system + calls directly instead of biosdisk, because of the bug in + Linux. *sigh* */ +- return write_to_partition (device_map, current_drive, current_partition, +- sector, sector_count, buf); ++ int ret; ++ ret = write_to_partition (device_map, current_drive, current_partition, ++ sector, sector_count, buf); ++ if (ret != -1) ++ return ret; + } +- else + #endif /* GRUB_UTIL && __linux__ */ +- { +- int i; +- +- for (i = 0; i < sector_count; i++) +- { +- if (! rawwrite (current_drive, part_start + sector + i, +- buf + (i << SECTOR_BITS))) +- return 0; ++ int i; + +- } +- return 1; +- } ++ for (i = 0; i < sector_count; i++) ++ { ++ if (! rawwrite (current_drive, part_start + sector + i, ++ buf + (i << get_sector_bits(current_drive)))) ++ return 0; ++ ++ } ++ return 1; + } + + static int +@@ -400,7 +411,7 @@ sane_partition (void) + return 1; + + if (!(current_partition & 0xFF000000uL) +- && ((current_drive & 0xFFFFFF7F) < 8 ++ && ((current_drive & 0xFFFFFF7F) < MAX_HD_NUM + || current_drive == cdrom_drive) + && (current_partition & 0xFF) == 0xFF + && ((current_partition & 0xFF00) == 0xFF00 +@@ -458,7 +469,7 @@ make_saved_active (void) + } + + /* Read the MBR in the scratch space. */ +- if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, mbr)) ++ if (! rawread (saved_drive, 0, 0, get_sector_size(saved_drive), mbr)) + return 0; + + /* If the partition is an extended partition, setting the active +@@ -502,8 +513,8 @@ int + set_partition_hidden_flag (int hidden) + { + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int entry, type; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int entry, type, gpt_count, gpt_size; + char mbr[512]; + + /* The drive must be a hard disk. */ +@@ -524,8 +535,15 @@ set_partition_hidden_flag (int hidden) + /* Look for the partition. */ + while (next_partition (current_drive, 0xFFFFFF, &part, &type, + &start, &len, &offset, &entry, +- &ext_offset, mbr)) +- { ++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) ++ { ++ /* The partition may not be a GPT partition. */ ++ if (gpt_offset != 0) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ + if (part == current_partition) + { + /* Found. */ +@@ -577,11 +595,14 @@ next_partition (unsigned long drive, unsigned long dest, + unsigned long *partition, int *type, + unsigned long *start, unsigned long *len, + unsigned long *offset, int *entry, +- unsigned long *ext_offset, char *buf) ++ unsigned long *ext_offset, ++ unsigned long *gpt_offset, int *gpt_count, ++ int *gpt_size, char *buf) + { + /* Forward declarations. */ + auto int next_bsd_partition (void); + auto int next_pc_slice (void); ++ auto int next_gpt_slice(void); + + /* Get next BSD partition in current PC slice. */ + int next_bsd_partition (void) +@@ -601,7 +622,7 @@ next_partition (unsigned long drive, unsigned long dest, + + /* Read the BSD label. */ + if (! rawread (drive, *start + BSD_LABEL_SECTOR, +- 0, SECTOR_SIZE, buf)) ++ 0, get_sector_size(drive), buf)) + return 0; + + /* Check if it is valid. */ +@@ -656,7 +677,7 @@ next_partition (unsigned long drive, unsigned long dest, + } + + /* Read the MBR or the boot sector of the extended partition. */ +- if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf)) ++ if (! rawread (drive, *offset, 0, get_sector_size(drive), buf)) + return 0; + + /* Check if it is valid. */ +@@ -666,6 +687,42 @@ next_partition (unsigned long drive, unsigned long dest, + return 0; + } + ++ /* If this is a GPT partition table, read it as such. */ ++ if (*entry == -1 && *offset == 0 && ++ (PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT || ++ PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_NONE)) ++ { ++ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf; ++ ++ /* Read in the GPT Partition table header. */ ++ if (! rawread (drive, 1, 0, get_sector_size(drive), buf)) ++ return 0; ++ ++ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000) ++ { ++ /* Let gpt_offset point to the first entry in the GPT ++ partition table. This can also be used by callers of ++ next_partition to determine if a entry comes from a ++ GPT partition table or not. */ ++ *gpt_offset = hdr->partitions; ++ *gpt_count = hdr->maxpart; ++ *gpt_size = hdr->partentry_size; ++ ++ return next_gpt_slice(); ++ } ++ else ++ { ++ /* This is not a valid header for a GPT partition table. ++ Re-read the MBR or the boot sector of the extended ++ partition. */ ++ if (! rawread (drive, *offset, 0, get_sector_size(drive), buf)) ++ return 0; ++ } ++ } ++ ++ /* Not a GPT partition. */ ++ *gpt_offset = 0; ++ + /* Increase the entry number. */ + (*entry)++; + +@@ -710,6 +767,43 @@ next_partition (unsigned long drive, unsigned long dest, + return 1; + } + ++ /* Get the next GPT slice. */ ++ int next_gpt_slice (void) ++ { ++ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf; ++ /* Make GPT partitions show up as PC slices. */ ++ int pc_slice_no = (*partition & 0xFF0000) >> 16; ++ ++ /* If this is the first time... */ ++ if (pc_slice_no == 0xFF) ++ { ++ pc_slice_no = -1; ++ *entry = -1; ++ } ++ ++ do { ++ (*entry)++; ++ ++ if (*entry >= *gpt_count) ++ { ++ errnum = ERR_NO_PART; ++ return 0; ++ } ++ /* Read in the GPT Partition table entry. */ ++ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (drive, *gpt_size, *entry), GPT_ENTRY_INDEX (drive, *gpt_size, *entry), *gpt_size, buf)) ++ return 0; ++ } while (! (gptentry->type1 && gptentry->type2)); ++ ++ pc_slice_no++; ++ *start = gptentry->start; ++ *len = gptentry->end - gptentry->start + 1; ++ *type = PC_SLICE_TYPE_EXT2FS; ++ *entry = pc_slice_no; ++ *partition = (*entry << 16) | 0xFFFF; ++ ++ return 1; ++ } ++ + /* Start the body of this function. */ + + #ifndef STAGE1_5 +@@ -717,6 +811,9 @@ next_partition (unsigned long drive, unsigned long dest, + return 0; + #endif + ++ if (*partition != 0xFFFFFF && *gpt_offset != 0) ++ return next_gpt_slice (); ++ + /* If previous partition is a BSD partition or a PC slice which + contains BSD partitions... */ + if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff)) +@@ -755,8 +852,11 @@ real_open_partition (int flags) + unsigned long dest_partition = current_partition; + unsigned long part_offset; + unsigned long ext_offset; ++ unsigned long gpt_offset; ++ int gpt_count; ++ int gpt_size; + int entry; +- char buf[SECTOR_SIZE]; ++ char buf[4096]; + int bsd_part, pc_slice; + + /* For simplicity. */ +@@ -766,7 +866,8 @@ real_open_partition (int flags) + int ret = next_partition (current_drive, dest_partition, + ¤t_partition, ¤t_slice, + &part_start, &part_length, +- &part_offset, &entry, &ext_offset, buf); ++ &part_offset, &entry, &ext_offset, ++ &gpt_offset, &gpt_count, &gpt_size, buf); + bsd_part = (current_partition >> 8) & 0xFF; + pc_slice = current_partition >> 16; + return ret; +@@ -926,6 +1027,17 @@ open_partition (void) + return real_open_partition (0); + } + ++#if !defined(PLATFORM_EFI) && !defined(GRUB_UTIL) ++int get_sector_size (int drive) ++{ ++ return SECTOR_SIZE; ++} ++int get_sector_bits (int drive) ++{ ++ return SECTOR_BITS; ++} ++#endif /* !defined(PLATFORM_EFI) && !defined(GRUB_UTIL) */ ++ + + #ifndef STAGE1_5 + /* XX used for device completion in 'set_device' and 'print_completions' */ +@@ -978,7 +1090,7 @@ set_device (char *device) + if (*device != ',' && *device != ')') + { + char ch = *device; +-#ifdef SUPPORT_NETBOOT ++#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) + if (*device == 'f' || *device == 'h' + || (*device == 'n' && network_ready) + || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) +@@ -1002,14 +1114,14 @@ set_device (char *device) + + if ((*device == 'f' + || *device == 'h' +-#ifdef SUPPORT_NETBOOT ++#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) + || (*device == 'n' && network_ready) + #endif + || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) + && (device += 2, (*(device - 1) != 'd'))) + errnum = ERR_NUMBER_PARSING; +- +-#ifdef SUPPORT_NETBOOT ++ ++#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) + if (ch == 'n' && network_ready) + current_drive = NETWORK_DRIVE; + else +@@ -1131,7 +1243,7 @@ set_bootdev (int hdbias) + if ((saved_drive & 0x80) && cur_part_addr) + { + if (rawread (saved_drive, cur_part_offset, +- 0, SECTOR_SIZE, (char *) SCRATCHADDR)) ++ 0, get_sector_size(saved_drive), (char *) SCRATCHADDR)) + { + char *dst, *src; + +@@ -1243,6 +1355,12 @@ setup_part (char *filename) + + + #ifndef STAGE1_5 ++char * ++get_fsys_type (void) ++{ ++ return fsys_table[fsys_type].name; ++} ++ + /* + * This prints the filesystem type or gives relevant information. + */ +@@ -1376,7 +1494,7 @@ print_completions (int is_filename, int is_completion) + + if (!ptr + || *(ptr-1) != 'd' +-#ifdef SUPPORT_NETBOOT ++#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) + || *(ptr-2) != 'n' + #endif /* SUPPORT_NETBOOT */ + || *(ptr-2) != 'c') +@@ -1385,7 +1503,7 @@ print_completions (int is_filename, int is_completion) + i < (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'f') ? 1:2); + i++) + { +- for (j = 0; j < 8; j++) ++ for (j = 0; j < MAX_HD_NUM; j++) + { + disk_no = (i * 0x80) + j; + if ((disk_choice || disk_no == current_drive) +@@ -1407,7 +1525,7 @@ print_completions (int is_filename, int is_completion) + || (*(ptr-1) == 'd' && *(ptr-2) == 'c'))) + print_a_completion ("cd"); + +-# ifdef SUPPORT_NETBOOT ++# if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) + if (network_ready + && (disk_choice || NETWORK_DRIVE == current_drive) + && (!ptr +@@ -1596,7 +1714,7 @@ grub_open (char *filename) + + BLK_BLKLENGTH (list_addr) = tmp; + +- filemax += (tmp * SECTOR_SIZE); ++ filemax += (tmp * get_sector_size(current_drive)); + list_addr += BLK_BLKLIST_INC_VAL; + + if (*ptr != ',') +@@ -1673,6 +1791,7 @@ grub_read (char *buf, int len) + if (block_file) + { + int size, off, ret = 0; ++ int sector_size = get_sector_size(current_drive); + + while (len && !errnum) + { +@@ -1687,10 +1806,10 @@ grub_read (char *buf, int len) + /* run BLK_CUR_FILEPOS up to filepos */ + while (filepos > BLK_CUR_FILEPOS) + { +- if ((filepos - (BLK_CUR_FILEPOS & ~(SECTOR_SIZE - 1))) +- >= SECTOR_SIZE) ++ if ((filepos - (BLK_CUR_FILEPOS & ~(sector_size - 1))) ++ >= sector_size) + { +- BLK_CUR_FILEPOS += SECTOR_SIZE; ++ BLK_CUR_FILEPOS += sector_size; + BLK_CUR_BLKNUM++; + + if (BLK_CUR_BLKNUM >= BLK_BLKLENGTH (BLK_CUR_BLKLIST)) +@@ -1703,9 +1822,9 @@ grub_read (char *buf, int len) + BLK_CUR_FILEPOS = filepos; + } + +- off = filepos & (SECTOR_SIZE - 1); ++ off = filepos & (sector_size - 1); + size = ((BLK_BLKLENGTH (BLK_CUR_BLKLIST) - BLK_CUR_BLKNUM) +- * SECTOR_SIZE) - off; ++ * sector_size) - off; + if (size > len) + size = len; + +diff --git a/stage2/efistubs.c b/stage2/efistubs.c +new file mode 100644 +index 0000000..29b086a +--- /dev/null ++++ b/stage2/efistubs.c +@@ -0,0 +1,7 @@ ++ ++#include "shared.h" ++#include "efistubs.h" ++ ++#if defined(PLATFORM_EFI) ++int network_ready = 0; ++#endif /* defined(PLATFORM_EFI) */ +diff --git a/stage2/efistubs.h b/stage2/efistubs.h +new file mode 100644 +index 0000000..97e407d +--- /dev/null ++++ b/stage2/efistubs.h +@@ -0,0 +1,8 @@ ++#ifndef EFISTUBS_H ++#define EFISTUBS_H 1 ++ ++#if defined(PLATFORM_EFI) ++extern int network_ready; ++#endif /* defined(PLATFORM_EFI) */ ++ ++#endif /* EFISTUBS_H */ +diff --git a/stage2/fat.h b/stage2/fat.h +index 7fed6ba..f154eed 100644 +--- a/stage2/fat.h ++++ b/stage2/fat.h +@@ -92,7 +92,7 @@ struct fat_bpb { + #define FAT_DIRENTRY_FIRST_CLUSTER(entry) \ + ((*((unsigned short *) (entry+26)))+(*((unsigned short *) (entry+20)) << 16)) + #define FAT_DIRENTRY_FILELENGTH(entry) \ +- (*((unsigned long *) (entry+28))) ++ (*((unsigned int *) (entry+28))) + + #define FAT_LONGDIR_ID(entry) \ + (*((unsigned char *) (entry))) +diff --git a/stage2/filesys.h b/stage2/filesys.h +index bbad8b9..79e5f1f 100644 +--- a/stage2/filesys.h ++++ b/stage2/filesys.h +@@ -40,6 +40,16 @@ int ufs2_embed (int *start_sector, int needed_sectors); + #define FSYS_UFS2_NUM 0 + #endif + ++#ifdef PLATFORM_EFI ++#define FSYS_UEFI_NUM 1 ++int uefi_mount (void); ++int uefi_read (char *buf, int len); ++int uefi_dir (char *dirname); ++void uefi_close (void); ++#else ++#define FSYS_UEFI_NUM 0 ++#endif ++ + #ifdef FSYS_FAT + #define FSYS_FAT_NUM 1 + int fat_mount (void); +@@ -115,6 +125,17 @@ void tftp_close (void); + #define FSYS_TFTP_NUM 0 + #endif + ++#ifdef PLATFORM_EFI ++#define FSYS_EFI_TFTP_NUM 1 ++int efi_tftp_mount (void); ++int efi_tftp_read (char *buf, int len); ++int efi_tftp_dir (char *dirname); ++void efi_tftp_close (void); ++#else ++#define FSYS_EFI_TFTP_NUM 0 ++#endif ++ ++ + #ifdef FSYS_ISO9660 + #define FSYS_ISO9660_NUM 1 + int iso9660_mount (void); +@@ -128,7 +149,8 @@ int iso9660_dir (char *dirname); + #define NUM_FSYS \ + (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM \ + + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM \ +- + FSYS_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM) ++ + FSYS_TFTP_NUM + FSYS_EFI_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM \ ++ + FSYS_UEFI_NUM) + #endif + + /* defines for the block filesystem info area */ +@@ -137,8 +159,8 @@ int iso9660_dir (char *dirname); + #define BLK_CUR_BLKLIST (*((int*)(FSYS_BUF+4))) + #define BLK_CUR_BLKNUM (*((int*)(FSYS_BUF+8))) + #define BLK_MAX_ADDR (FSYS_BUF+0x7FF9) +-#define BLK_BLKSTART(l) (*((int*)l)) +-#define BLK_BLKLENGTH(l) (*((int*)(l+4))) ++#define BLK_BLKSTART(l) (*((int*)(unsigned long)l)) ++#define BLK_BLKLENGTH(l) (*((int*)(unsigned long)(l+4))) + #define BLK_BLKLIST_START (FSYS_BUF+12) + #define BLK_BLKLIST_INC_VAL 8 + #endif /* NO_BLOCK_FILES */ +diff --git a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c +index 560048f..01386d1 100644 +--- a/stage2/fsys_ext2fs.c ++++ b/stage2/fsys_ext2fs.c +@@ -25,7 +25,7 @@ + static int mapblock1, mapblock2; + + /* sizes are always in bytes, BLOCK values are always in DEV_BSIZE (sectors) */ +-#define DEV_BSIZE 512 ++#define DEV_BSIZE get_sector_size(current_drive) + + /* include/linux/fs.h */ + #define BLOCK_SIZE 1024 /* initial block size for superblock read */ +@@ -33,6 +33,7 @@ static int mapblock1, mapblock2; + #define WHICH_SUPER 1 + /* kind of from fs/ext2/super.c */ + #define SBLOCK (WHICH_SUPER * BLOCK_SIZE / DEV_BSIZE) /* = 2 */ ++#define SBOFF ((WHICH_SUPER * BLOCK_SIZE) % DEV_BSIZE) + + /* include/asm-i386/types.h */ + typedef __signed__ char __s8; +@@ -41,6 +42,7 @@ typedef __signed__ short __s16; + typedef unsigned short __u16; + typedef __signed__ int __s32; + typedef unsigned int __u32; ++typedef unsigned long long __u64; + + /* + * Constants relative to the data blocks, from ext2_fs.h +@@ -51,7 +53,7 @@ typedef unsigned int __u32; + #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) + #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) + +-/* include/linux/ext2_fs.h */ ++/* lib/ext2fs/ext2_fs.h from e2fsprogs */ + struct ext2_super_block + { + __u32 s_inodes_count; /* Inodes count */ +@@ -61,9 +63,9 @@ struct ext2_super_block + __u32 s_free_inodes_count; /* Free inodes count */ + __u32 s_first_data_block; /* First Data Block */ + __u32 s_log_block_size; /* Block size */ +- __s32 s_log_frag_size; /* Fragment size */ ++ __s32 s_obso_log_frag_size; /* Obsoleted Fragment size */ + __u32 s_blocks_per_group; /* # Blocks per group */ +- __u32 s_frags_per_group; /* # Fragments per group */ ++ __u32 s_obso_frags_per_group; /* Obsoleted Fragments per group */ + __u32 s_inodes_per_group; /* # Inodes per group */ + __u32 s_mtime; /* Mount time */ + __u32 s_wtime; /* Write time */ +@@ -72,17 +74,76 @@ struct ext2_super_block + __u16 s_magic; /* Magic signature */ + __u16 s_state; /* File system state */ + __u16 s_errors; /* Behaviour when detecting errors */ +- __u16 s_pad; ++ __u16 s_minor_rev_level; /* minor revision level */ + __u32 s_lastcheck; /* time of last check */ + __u32 s_checkinterval; /* max. time between checks */ + __u32 s_creator_os; /* OS */ + __u32 s_rev_level; /* Revision level */ + __u16 s_def_resuid; /* Default uid for reserved blocks */ + __u16 s_def_resgid; /* Default gid for reserved blocks */ +- __u32 s_reserved[235]; /* Padding to the end of the block */ +- }; +- +-struct ext2_group_desc ++ /* ++ * These fields are for EXT2_DYNAMIC_REV superblocks only. ++ * ++ * Note: the difference between the compatible feature set and ++ * the incompatible feature set is that if there is a bit set ++ * in the incompatible feature set that the kernel doesn't ++ * know about, it should refuse to mount the filesystem. ++ * ++ * e2fsck's requirements are more strict; if it doesn't know ++ * about a feature in either the compatible or incompatible ++ * feature set, it must abort and not try to meddle with ++ * things it doesn't understand... ++ */ ++ __u32 s_first_ino; /* First non-reserved inode */ ++ __u16 s_inode_size; /* size of inode structure */ ++ __u16 s_block_group_nr; /* block group # of this superblock */ ++ __u32 s_feature_compat; /* compatible feature set */ ++ __u32 s_feature_incompat; /* incompatible feature set */ ++ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ ++ __u8 s_uuid[16]; /* 128-bit uuid for volume */ ++ char s_volume_name[16]; /* volume name */ ++ char s_last_mounted[64]; /* directory where last mounted */ ++ __u32 s_algorithm_usage_bitmap; /* For compression */ ++ /* ++ * Performance hints. Directory preallocation should only ++ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on. ++ */ ++ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ ++ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ ++ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */ ++ /* ++ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set. ++ */ ++ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ ++ __u32 s_journal_inum; /* inode number of journal file */ ++ __u32 s_journal_dev; /* device number of journal file */ ++ __u32 s_last_orphan; /* start of list of inodes to delete */ ++ __u32 s_hash_seed[4]; /* HTREE hash seed */ ++ __u8 s_def_hash_version; /* Default hash version to use */ ++ __u8 s_jnl_backup_type; /* Default type of journal backup */ ++ __u16 s_desc_size; /* size of group descriptor */ ++ __u32 s_default_mount_opts; ++ __u32 s_first_meta_bg; /* First metablock group */ ++ __u32 s_mkfs_time; /* When the filesystem was created */ ++ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */ ++ /* 64bit desc support valid if EXT4_FEATURE_INCOMPAT_64BIT */ ++ __u32 s_blocks_count_hi; /* Blocks count */ ++ __u32 s_r_blocks_count_hi; /* Reserved blocks count */ ++ __u32 s_free_blocks_count_hi; /* Free blocks count */ ++ __u16 s_min_extra_isize; /* All inodes have at least # bytes */ ++ __u16 s_max_extra_isize; /* New inodes should reverve # bytes */ ++ __u32 s_flags; /* Miscellaneous flags */ ++ __u16 s_raid_stride; /* Raid stride */ ++ __u16 s_mmp_interval; /* # seconds to wait MMP checking */ ++ __u64 s_mmp_block; /* Block for multi-mount protection */ ++ __u32 s_raid_stripe_width; /* Blocks on all data disks (N*stride)*/ ++ __u8 s_log_groups_per_flex;/* FLEX_BG group size*/ ++ __u8 s_reserved_char_pad; ++ __u16 s_reserved_pad; ++ __u32 s_reserved[162]; /* Padding to the end of the block */ ++}; ++ ++struct ext4_group_desc + { + __u32 bg_block_bitmap; /* Blocks bitmap block */ + __u32 bg_inode_bitmap; /* Inodes bitmap block */ +@@ -90,8 +151,18 @@ struct ext2_group_desc + __u16 bg_free_blocks_count; /* Free blocks count */ + __u16 bg_free_inodes_count; /* Free inodes count */ + __u16 bg_used_dirs_count; /* Directories count */ +- __u16 bg_pad; +- __u32 bg_reserved[3]; ++ __u16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */ ++ __u32 bg_reserved[2]; /* Likely block/inode bitmap checksum */ ++ __u16 bg_itable_unused; /* Unused inodes count */ ++ __u16 bg_checksum; /* crc16(sb_uuid+group+desc) */ ++ __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */ ++ __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */ ++ __u32 bg_inode_table_hi; /* Inodes table block MSB */ ++ __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */ ++ __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */ ++ __u16 bg_used_dirs_count_hi; /* Directories count MSB */ ++ __u16 bg_itable_unused_hi; /* Unused inodes count MSB */ ++ __u32 bg_reserved2[3]; + }; + + struct ext2_inode +@@ -129,22 +200,22 @@ struct ext2_inode + __u32 i_block[EXT2_N_BLOCKS]; /* 40: Pointers to blocks */ + __u32 i_version; /* File version (for NFS) */ + __u32 i_file_acl; /* File ACL */ +- __u32 i_dir_acl; /* Directory ACL */ +- __u32 i_faddr; /* Fragment address */ ++ __u32 i_size_high; ++ __u32 i_obso_faddr; /* Obsoleted fragment address */ + union + { + struct + { +- __u8 l_i_frag; /* Fragment number */ +- __u8 l_i_fsize; /* Fragment size */ +- __u16 i_pad1; +- __u32 l_i_reserved2[2]; ++ __u16 l_i_blocks_high; /* were l_i_reserved1 */ ++ __u16 l_i_file_acl_high; ++ __u16 l_i_uid_high; /* these 2 fields */ ++ __u16 l_i_gid_high; /* were reserved2[0] */ ++ __u32 l_i_reserved2; + } + linux2; + struct + { +- __u8 h_i_frag; /* Fragment number */ +- __u8 h_i_fsize; /* Fragment size */ ++ __u16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ + __u16 h_i_mode_high; + __u16 h_i_uid_high; + __u16 h_i_gid_high; +@@ -153,16 +224,36 @@ struct ext2_inode + hurd2; + struct + { +- __u8 m_i_frag; /* Fragment number */ +- __u8 m_i_fsize; /* Fragment size */ +- __u16 m_pad1; ++ __u16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ ++ __u16 m_i_file_acl_high; + __u32 m_i_reserved2[2]; + } + masix2; + } + osd2; /* OS dependent 2 */ ++ __u16 i_extra_isize; ++ __u16 i_pad1; ++ __u32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */ ++ __u32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */ ++ __u32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */ ++ __u32 i_crtime; /* File Creation time */ ++ __u32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */ ++ __u32 i_version_hi; /* high 32 bits for 64-bit version */ + }; + ++#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ ++#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 /* grub not supported*/ ++#define EXT4_FEATURE_INCOMPAT_MMP 0x0100 ++#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 ++ ++#define EXT4_HAS_INCOMPAT_FEATURE(sb,mask) \ ++ ( sb->s_feature_incompat & mask ) ++ ++#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ ++#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */ ++ ++#define EXT4_MIN_DESC_SIZE 32 ++ + /* linux/limits.h */ + #define NAME_MAX 255 /* # chars in a file name */ + +@@ -180,6 +271,57 @@ struct ext2_dir_entry + char name[EXT2_NAME_LEN]; /* File name */ + }; + ++/* linux/ext4_fs_extents.h */ ++/* This is the extent on-disk structure. ++ * It's used at the bottom of the tree. ++ */ ++struct ext4_extent ++ { ++ __u32 ee_block; /* first logical block extent covers */ ++ __u16 ee_len; /* number of blocks covered by extent */ ++ __u16 ee_start_hi; /* high 16 bits of physical block */ ++ __u32 ee_start_lo; /* low 32 bits of physical block */ ++ }; ++ ++/* ++ * This is index on-disk structure. ++ * It's used at all the levels except the bottom. ++ */ ++struct ext4_extent_idx ++ { ++ __u32 ei_block; /* index covers logical blocks from 'block' */ ++ __u32 ei_leaf_lo; /* pointer to the physical block of the next * ++ * level. leaf or next index could be there */ ++ __u16 ei_leaf_hi; /* high 16 bits of physical block */ ++ __u16 ei_unused; ++ }; ++ ++/* ++ * Each block (leaves and indexes), even inode-stored has header. ++ */ ++struct ext4_extent_header ++ { ++ __u16 eh_magic; /* probably will support different formats */ ++ __u16 eh_entries; /* number of valid entries */ ++ __u16 eh_max; /* capacity of store in entries */ ++ __u16 eh_depth; /* has tree real underlying blocks? */ ++ __u32 eh_generation; /* generation of the tree */ ++ }; ++ ++#define EXT4_EXT_MAGIC (0xf30a) ++#define EXT_FIRST_EXTENT(__hdr__) \ ++ ((struct ext4_extent *) (((char *) (__hdr__)) + \ ++ sizeof(struct ext4_extent_header))) ++#define EXT_FIRST_INDEX(__hdr__) \ ++ ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \ ++ sizeof(struct ext4_extent_header))) ++#define EXT_LAST_EXTENT(__hdr__) \ ++ (EXT_FIRST_EXTENT((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1) ++#define EXT_LAST_INDEX(__hdr__) \ ++ (EXT_FIRST_INDEX((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1) ++ ++ ++ + /* linux/ext2fs.h */ + /* + * EXT2_DIR_PAD defines the directory entries boundaries +@@ -206,25 +348,37 @@ struct ext2_dir_entry + ((struct ext2_super_block *)(FSYS_BUF)) + #define GROUP_DESC \ + ((struct ext2_group_desc *) \ +- ((int)SUPERBLOCK + sizeof(struct ext2_super_block))) ++ ((unsigned long)SUPERBLOCK + sizeof(struct ext2_super_block))) + #define INODE \ +- ((struct ext2_inode *)((int)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK))) ++ ((struct ext2_inode *)((unsigned long)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK))) + #define DATABLOCK1 \ +- ((int)((int)INODE + sizeof(struct ext2_inode))) ++ ((unsigned long)INODE + sizeof(struct ext2_inode)) + #define DATABLOCK2 \ +- ((int)((int)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK))) ++ ((unsigned long)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK)) + + /* linux/ext2_fs.h */ + #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32)) + #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s))) + ++#define EXT2_INODE_SIZE(s) (SUPERBLOCK->s_inode_size) ++#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s)) ++ + /* linux/ext2_fs.h */ + #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) + /* kind of from ext2/super.c */ + #define EXT2_BLOCK_SIZE(s) (1 << EXT2_BLOCK_SIZE_BITS(s)) + /* linux/ext2fs.h */ ++/* sizeof(struct ext2_group_desc) is changed in ext4 ++ * in kernel code, ext2/3 uses sizeof(struct ext2_group_desc) to calculate ++ * number of desc per block, while ext4 uses superblock->s_desc_size in stead ++ * superblock->s_desc_size is not available in ext2/3 ++ * */ ++#define EXT2_DESC_SIZE(s) \ ++ (EXT4_HAS_INCOMPAT_FEATURE(s,EXT4_FEATURE_INCOMPAT_64BIT)? \ ++ s->s_desc_size : EXT4_MIN_DESC_SIZE) + #define EXT2_DESC_PER_BLOCK(s) \ +- (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc)) ++ (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s)) ++ + /* linux/stat.h */ + #define S_IFMT 00170000 + #define S_IFLNK 0120000 +@@ -239,8 +393,8 @@ struct ext2_dir_entry + * ffz = Find First Zero in word. Undefined if no zero exists, + * so code should check against ~0UL first.. + */ +-static __inline__ unsigned long +-ffz (unsigned long word) ++static __inline__ unsigned int ++ffz (unsigned int word) + { + __asm__ ("bsfl %1,%0" + : "=r" (word) +@@ -260,7 +414,7 @@ ext2fs_mount (void) + && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_EXT2FS)) + && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER))) + || part_length < (SBLOCK + (sizeof (struct ext2_super_block) / DEV_BSIZE)) +- || !devread (SBLOCK, 0, sizeof (struct ext2_super_block), ++ || !devread (SBLOCK, SBOFF, sizeof (struct ext2_super_block), + (char *) SUPERBLOCK) + || SUPERBLOCK->s_magic != EXT2_SUPER_MAGIC) + retval = 0; +@@ -276,7 +430,7 @@ ext2_rdfsb (int fsblock, int buffer) + printf ("fsblock %d buffer %d\n", fsblock, buffer); + #endif /* E2DEBUG */ + return devread (fsblock * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), 0, +- EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) buffer); ++ EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) (unsigned long) buffer); + } + + /* from +@@ -386,6 +540,122 @@ ext2fs_block_map (int logical_block) + [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; + } + ++/* extent binary search index ++ * find closest index in the current level extent tree ++ * kind of from ext4_ext_binsearch_idx in ext4/extents.c ++ */ ++static struct ext4_extent_idx* ++ext4_ext_binsearch_idx(struct ext4_extent_header* eh, int logical_block) ++{ ++ struct ext4_extent_idx *r, *l, *m; ++ l = EXT_FIRST_INDEX(eh) + 1; ++ r = EXT_LAST_INDEX(eh); ++ while (l <= r) ++ { ++ m = l + (r - l) / 2; ++ if (logical_block < m->ei_block) ++ r = m - 1; ++ else ++ l = m + 1; ++ } ++ return (struct ext4_extent_idx*)(l - 1); ++} ++ ++/* extent binary search ++ * find closest extent in the leaf level ++ * kind of from ext4_ext_binsearch in ext4/extents.c ++ */ ++static struct ext4_extent* ++ext4_ext_binsearch(struct ext4_extent_header* eh, int logical_block) ++{ ++ struct ext4_extent *r, *l, *m; ++ l = EXT_FIRST_EXTENT(eh) + 1; ++ r = EXT_LAST_EXTENT(eh); ++ while (l <= r) ++ { ++ m = l + (r - l) / 2; ++ if (logical_block < m->ee_block) ++ r = m - 1; ++ else ++ l = m + 1; ++ } ++ return (struct ext4_extent*)(l - 1); ++} ++ ++/* Maps extents enabled logical block into physical block via an inode. ++ * EXT4_HUGE_FILE_FL should be checked before calling this. ++ */ ++static int ++ext4fs_block_map (int logical_block) ++{ ++ struct ext4_extent_header *eh; ++ struct ext4_extent *ex, *extent; ++ struct ext4_extent_idx *ei, *index; ++ int depth; ++ int i; ++ ++#ifdef E2DEBUG ++ unsigned char *i; ++ for (i = (unsigned char *) INODE; ++ i < ((unsigned char *) INODE + sizeof (struct ext2_inode)); ++ i++) ++ { ++ printf ("%c", "0123456789abcdef"[*i >> 4]); ++ printf ("%c", "0123456789abcdef"[*i % 16]); ++ if (!((i + 1 - (unsigned char *) INODE) % 16)) ++ { ++ printf ("\n"); ++ } ++ else ++ { ++ printf (" "); ++ } ++ } ++ printf ("logical block %d\n", logical_block); ++#endif /* E2DEBUG */ ++ eh = (struct ext4_extent_header*)INODE->i_block; ++ if (eh->eh_magic != EXT4_EXT_MAGIC) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ while((depth = eh->eh_depth) != 0) ++ { /* extent index */ ++ if (eh->eh_magic != EXT4_EXT_MAGIC) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ ei = ext4_ext_binsearch_idx(eh, logical_block); ++ if (ei->ei_leaf_hi) ++ {/* 64bit physical block number not supported */ ++ errnum = ERR_FILELENGTH; ++ return -1; ++ } ++ if (!ext2_rdfsb(ei->ei_leaf_lo, DATABLOCK1)) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ eh = (struct ext4_extent_header*)DATABLOCK1; ++ } ++ ++ /* depth==0, we come to the leaf */ ++ ex = ext4_ext_binsearch(eh, logical_block); ++ if (ex->ee_start_hi) ++ {/* 64bit physical block number not supported */ ++ errnum = ERR_FILELENGTH; ++ return -1; ++ } ++ if ((ex->ee_block + ex->ee_len) < logical_block) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ return ex->ee_start_lo + logical_block - ex->ee_block; ++ ++} ++ + /* preconditions: all preconds of ext2fs_block_map */ + int + ext2fs_read (char *buf, int len) +@@ -420,6 +690,11 @@ ext2fs_read (char *buf, int len) + /* find the (logical) block component of our location */ + logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); + offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1); ++ /* map extents enabled logical block number to physical fs on-disk block number */ ++ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) ++ && INODE->i_flags & EXT4_EXTENTS_FL) ++ map = ext4fs_block_map (logical_block); ++ else + map = ext2fs_block_map (logical_block); + #ifdef E2DEBUG + printf ("map=%d\n", map); +@@ -504,7 +779,7 @@ ext2fs_dir (char *dirname) + int desc; /* index within that group */ + int ino_blk; /* fs pointer of the inode's information */ + int str_chk = 0; /* used to hold the results of a string compare */ +- struct ext2_group_desc *gdp; ++ struct ext4_group_desc *ext4_gdp; + struct ext2_inode *raw_inode; /* inode info corresponding to current_ino */ + + char linkbuf[PATH_MAX]; /* buffer for following symbolic links */ +@@ -546,18 +821,25 @@ ext2fs_dir (char *dirname) + #endif /* E2DEBUG */ + if (!ext2_rdfsb ( + (WHICH_SUPER + group_desc + SUPERBLOCK->s_first_data_block), +- (int) GROUP_DESC)) ++ (unsigned long) GROUP_DESC)) + { + return 0; + } +- gdp = GROUP_DESC; +- ino_blk = gdp[desc].bg_inode_table + ++ ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC + ++ desc * EXT2_DESC_SIZE(SUPERBLOCK)); ++ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK, EXT4_FEATURE_INCOMPAT_64BIT) ++ && (! ext4_gdp->bg_inode_table_hi)) ++ {/* 64bit itable not supported */ ++ errnum = ERR_FILELENGTH; ++ return -1; ++ } ++ ino_blk = ext4_gdp->bg_inode_table + + (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group)) +- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode))); ++ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK))); + #ifdef E2DEBUG + printf ("inode table fsblock=%d\n", ino_blk); + #endif /* E2DEBUG */ +- if (!ext2_rdfsb (ino_blk, (int) INODE)) ++ if (!ext2_rdfsb (ino_blk, (unsigned long) INODE)) + { + return 0; + } +@@ -565,13 +847,12 @@ ext2fs_dir (char *dirname) + /* reset indirect blocks! */ + mapblock2 = mapblock1 = -1; + +- raw_inode = INODE + +- ((current_ino - 1) +- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1)); ++ raw_inode = (struct ext2_inode *)((char *)INODE + ++ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) * ++ EXT2_INODE_SIZE (SUPERBLOCK)); + #ifdef E2DEBUG + printf ("ipb=%d, sizeof(inode)=%d\n", +- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)), +- sizeof (struct ext2_inode)); ++ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK)); + printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode); + printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE); + for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode; +@@ -629,7 +910,10 @@ ext2fs_dir (char *dirname) + } + linkbuf[filemax + len] = '\0'; + +- /* Read the symlink data. */ ++ /* Read the symlink data. ++ * Slow symlink is extents enabled ++ * But since grub_read invokes ext2fs_read, nothing to change here ++ */ + if (! ext2_is_fast_symlink ()) + { + /* Read the necessary blocks, and reset the file pointer. */ +@@ -640,7 +924,9 @@ ext2fs_dir (char *dirname) + } + else + { +- /* Copy the data directly from the inode. */ ++ /* Copy the data directly from the inode. ++ * Fast symlink is not extents enabled ++ */ + len = filemax; + memmove (linkbuf, (char *) INODE->i_block, len); + } +@@ -674,6 +960,13 @@ ext2fs_dir (char *dirname) + errnum = ERR_BAD_FILETYPE; + return 0; + } ++ /* if file is too large, just stop and report an error*/ ++ if ( (INODE->i_flags & EXT4_HUGE_FILE_FL) && !(INODE->i_size_high)) ++ { ++ /* file too large, stop reading */ ++ errnum = ERR_FILELENGTH; ++ return 0; ++ } + + filemax = (INODE->i_size); + return 1; +@@ -728,17 +1021,28 @@ ext2fs_dir (char *dirname) + } + + /* else, find the (logical) block component of our location */ ++ /* ext4 logical block number the same as ext2/3 */ + blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); + + /* we know which logical block of the directory entry we are looking + for, now we have to translate that to the physical (fs) block on + the disk */ ++ /* map extents enabled logical block number to physical fs on-disk block number */ ++ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) ++ && INODE->i_flags & EXT4_EXTENTS_FL) ++ map = ext4fs_block_map (blk); ++ else + map = ext2fs_block_map (blk); + #ifdef E2DEBUG + printf ("fs block=%d\n", map); + #endif /* E2DEBUG */ + mapblock2 = -1; +- if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2)) ++ if (map < 0) ++ { ++ *rest = ch; ++ return 0; ++ } ++ if (!ext2_rdfsb (map, DATABLOCK2)) + { + errnum = ERR_FSYS_CORRUPT; + *rest = ch; +diff --git a/stage2/fsys_fat.c b/stage2/fsys_fat.c +index f40e658..f1157f4 100644 +--- a/stage2/fsys_fat.c ++++ b/stage2/fsys_fat.c +@@ -49,13 +49,13 @@ struct fat_superblock + /* pointer(s) into filesystem info buffer for DOS stuff */ + #define FAT_SUPER ( (struct fat_superblock *) \ + ( FSYS_BUF + 32256) )/* 512 bytes long */ +-#define FAT_BUF ( FSYS_BUF + 30208 ) /* 4 sector FAT buffer */ +-#define NAME_BUF ( FSYS_BUF + 29184 ) /* Filename buffer (833 bytes) */ ++#define FAT_BUF ( FSYS_BUF + 28160 ) /* 4 sector FAT buffer */ ++#define NAME_BUF ( FSYS_BUF + 27136 ) /* Filename buffer (833 bytes) */ + +-#define FAT_CACHE_SIZE 2048 ++#define FAT_CACHE_SIZE 4096 + +-static __inline__ unsigned long +-log2 (unsigned long word) ++static __inline__ unsigned int ++grub_log2 (unsigned int word) + { + __asm__ ("bsfl %1,%0" + : "=r" (word) +@@ -68,9 +68,12 @@ fat_mount (void) + { + struct fat_bpb bpb; + __u32 magic, first_fat; ++ int sector_size; + + /* Check partition type for harddisk */ + if (((current_drive & 0x80) || (current_slice != 0)) ++ && (current_slice != PC_SLICE_TYPE_EXT2FS) ++ && (current_slice != PC_SLICE_TYPE_LINUX_RAID) + && ! IS_PC_SLICE_TYPE_FAT (current_slice) + && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_MSDOS))) + return 0; +@@ -79,14 +82,16 @@ fat_mount (void) + if (! devread (0, 0, sizeof (bpb), (char *) &bpb)) + return 0; + ++ sector_size = get_sector_size(current_drive); ++ + /* Check if the number of sectors per cluster is zero here, to avoid + zero division. */ + if (bpb.sects_per_clust == 0) + return 0; + +- FAT_SUPER->sectsize_bits = log2 (FAT_CVT_U16 (bpb.bytes_per_sect)); ++ FAT_SUPER->sectsize_bits = grub_log2 (FAT_CVT_U16 (bpb.bytes_per_sect)); + FAT_SUPER->clustsize_bits +- = FAT_SUPER->sectsize_bits + log2 (bpb.sects_per_clust); ++ = FAT_SUPER->sectsize_bits + grub_log2 (bpb.sects_per_clust); + + /* Fill in info about super block */ + FAT_SUPER->num_sectors = FAT_CVT_U16 (bpb.short_sectors) +@@ -106,7 +111,7 @@ fat_mount (void) + FAT_SUPER->data_offset = + FAT_SUPER->root_offset + + ((FAT_SUPER->root_max - 1) >> FAT_SUPER->sectsize_bits) + 1; +- FAT_SUPER->num_clust = ++ FAT_SUPER->num_clust = + 2 + ((FAT_SUPER->num_sectors - FAT_SUPER->data_offset) + / bpb.sects_per_clust); + FAT_SUPER->sects_per_clust = bpb.sects_per_clust; +@@ -153,11 +158,11 @@ fat_mount (void) + /* Now do some sanity checks */ + + if (FAT_CVT_U16(bpb.bytes_per_sect) != (1 << FAT_SUPER->sectsize_bits) +- || FAT_CVT_U16(bpb.bytes_per_sect) != SECTOR_SIZE ++ || FAT_CVT_U16(bpb.bytes_per_sect) != sector_size + || bpb.sects_per_clust != (1 << (FAT_SUPER->clustsize_bits + - FAT_SUPER->sectsize_bits)) + || FAT_SUPER->num_clust <= 2 +- || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * SECTOR_SIZE) ++ || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * sector_size) + > FAT_SUPER->fat_length)) + return 0; + +@@ -201,6 +206,7 @@ fat_read (char *buf, int len) + int offset; + int ret = 0; + int size; ++ int sector_size = get_sector_size(current_drive); + + if (FAT_SUPER->file_cluster < 0) + { +@@ -236,10 +242,10 @@ fat_read (char *buf, int len) + if (cached_pos < 0 || + (cached_pos + FAT_SUPER->fat_size) > 2*FAT_CACHE_SIZE) + { +- FAT_SUPER->cached_fat = (fat_entry & ~(2*SECTOR_SIZE - 1)); ++ FAT_SUPER->cached_fat = (fat_entry & ~(2*sector_size - 1)); + cached_pos = (fat_entry - FAT_SUPER->cached_fat); + sector = FAT_SUPER->fat_offset +- + FAT_SUPER->cached_fat / (2*SECTOR_SIZE); ++ + FAT_SUPER->cached_fat / (2*sector_size); + if (!devread (sector, 0, FAT_CACHE_SIZE, (char*) FAT_BUF)) + return 0; + } +@@ -257,6 +263,8 @@ fat_read (char *buf, int len) + return ret; + if (next_cluster < 2 || next_cluster >= FAT_SUPER->num_clust) + { ++ grub_printf("next_cluster: %d FAT_SUPER->num_clust: %d\n", ++ next_cluster, FAT_SUPER->num_clust); + errnum = ERR_FSYS_CORRUPT; + return 0; + } +@@ -340,7 +348,8 @@ fat_dir (char *dirname) + /* Directories don't have a file size */ + filemax = MAXINT; + +- for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); ++ for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++) ++ *rest = tolower(*rest); + + *rest = 0; + +@@ -432,7 +441,7 @@ fat_dir (char *dirname) + goto print_filename; + # endif /* STAGE1_5 */ + +- if (substring (dirname, filename) == 0) ++ if (subcasestring (dirname, filename) == 0) + break; + } + } +@@ -459,7 +468,7 @@ fat_dir (char *dirname) + if (do_possibilities) + { + print_filename: +- if (substring (dirname, filename) <= 0) ++ if (subcasestring (dirname, filename) <= 0) + { + if (print_possibilities > 0) + print_possibilities = -print_possibilities; +@@ -469,7 +478,7 @@ fat_dir (char *dirname) + } + # endif /* STAGE1_5 */ + +- if (substring (dirname, filename) == 0) ++ if (subcasestring (dirname, filename) == 0) + break; + } + +diff --git a/stage2/fsys_iso9660.c b/stage2/fsys_iso9660.c +index 90e4aa8..858238b 100644 +--- a/stage2/fsys_iso9660.c ++++ b/stage2/fsys_iso9660.c +@@ -56,8 +56,8 @@ struct iso_inode_info { + #define NAME_BUF ((unsigned char *)(FSYS_BUF + 8192)) + + +-static inline unsigned long +-log2 (unsigned long word) ++static inline unsigned int ++grub_log2 (unsigned int word) + { + asm volatile ("bsfl %1,%0" + : "=r" (word) +@@ -68,7 +68,7 @@ log2 (unsigned long word) + static int + iso9660_devread (int sector, int byte_offset, int byte_len, char *buf) + { +- unsigned short sector_size_lg2 = log2(buf_geom.sector_size); ++ unsigned short sector_size_lg2 = grub_log2(buf_geom.sector_size); + + /* + * We have to use own devread() function since BIOS return wrong geometry +@@ -81,8 +81,6 @@ iso9660_devread (int sector, int byte_offset, int byte_len, char *buf) + if (byte_len <= 0) + return 1; + +- sector += (byte_offset >> sector_size_lg2); +- byte_offset &= (buf_geom.sector_size - 1); + asm volatile ("shl%L0 %1,%0" + : "=r"(sector) + : "Ic"((int8_t)(ISO_SECTOR_BITS - sector_size_lg2)), +diff --git a/stage2/fsys_jfs.c b/stage2/fsys_jfs.c +index 307f836..d63b1de 100644 +--- a/stage2/fsys_jfs.c ++++ b/stage2/fsys_jfs.c +@@ -207,19 +207,20 @@ int + jfs_mount (void) + { + struct jfs_superblock super; ++ int sector_bits = get_sector_bits(current_drive); + +- if (part_length < MINJFS >> SECTOR_BITS +- || !devread (SUPER1_OFF >> SECTOR_BITS, 0, ++ if (part_length < MINJFS >> sector_bits ++ || !devread (SUPER1_OFF >> sector_bits, 0, + sizeof(struct jfs_superblock), (char *)&super) + || (super.s_magic != JFS_MAGIC) +- || !devread ((AITBL_OFF >> SECTOR_BITS) + FILESYSTEM_I, ++ || !devread ((AITBL_OFF >> sector_bits) + FILESYSTEM_I, + 0, DISIZE, (char*)fileset)) { + return 0; + } + + jfs.bsize = super.s_bsize; + jfs.l2bsize = super.s_l2bsize; +- jfs.bdlog = jfs.l2bsize - SECTOR_BITS; ++ jfs.bdlog = jfs.l2bsize - sector_bits; + + return 1; + } +@@ -387,9 +388,10 @@ int + jfs_embed (int *start_sector, int needed_sectors) + { + struct jfs_superblock super; ++ int sector_bits = get_sector_bits(current_drive); + + if (needed_sectors > 63 +- || !devread (SUPER1_OFF >> SECTOR_BITS, 0, ++ || !devread (SUPER1_OFF >> sector_bits, 0, + sizeof (struct jfs_superblock), + (char *)&super) + || (super.s_magic != JFS_MAGIC)) { +diff --git a/stage2/fsys_minix.c b/stage2/fsys_minix.c +index 5c76796..175ecf2 100644 +--- a/stage2/fsys_minix.c ++++ b/stage2/fsys_minix.c +@@ -138,11 +138,11 @@ struct minix_dir_entry { + #define SUPERBLOCK \ + ((struct minix_super_block *)(FSYS_BUF)) + #define INODE \ +- ((struct minix_inode *)((int) SUPERBLOCK + BLOCK_SIZE)) ++ ((struct minix_inode *)((unsigned long) SUPERBLOCK + BLOCK_SIZE)) + #define DATABLOCK1 \ +- ((int)((int)INODE + sizeof(struct minix_inode))) ++ ((unsigned long)INODE + sizeof(struct minix_inode)) + #define DATABLOCK2 \ +- ((int)((int)DATABLOCK1 + BLOCK_SIZE)) ++ ((unsigned long)DATABLOCK1 + BLOCK_SIZE) + + /* linux/stat.h */ + #define S_IFMT 00170000 +@@ -193,7 +193,7 @@ static int + minix_rdfsb (int fsblock, int buffer) + { + return devread (fsblock * (BLOCK_SIZE / DEV_BSIZE), 0, +- BLOCK_SIZE, (char *) buffer); ++ BLOCK_SIZE, (char *) (unsigned long) buffer); + } + + /* Maps LOGICAL_BLOCK (the file offset divided by the blocksize) into +@@ -336,7 +336,7 @@ minix_dir (char *dirname) + + ino_blk = (2 + SUPERBLOCK->s_imap_blocks + SUPERBLOCK->s_zmap_blocks + + (current_ino - 1) / MINIX_INODES_PER_BLOCK); +- if (! minix_rdfsb (ino_blk, (int) INODE)) ++ if (! minix_rdfsb (ino_blk, (unsigned long) INODE)) + return 0; + + /* reset indirect blocks! */ +diff --git a/stage2/fsys_reiserfs.c b/stage2/fsys_reiserfs.c +index 93ec5f8..f46fcb2 100644 +--- a/stage2/fsys_reiserfs.c ++++ b/stage2/fsys_reiserfs.c +@@ -292,7 +292,6 @@ struct reiserfs_de_head + + /* The size of the node cache */ + #define FSYSREISER_CACHE_SIZE 24*1024 +-#define FSYSREISER_MIN_BLOCKSIZE SECTOR_SIZE + #define FSYSREISER_MAX_BLOCKSIZE FSYSREISER_CACHE_SIZE / 3 + + /* Info about currently opened file */ +@@ -341,19 +340,19 @@ struct fsys_reiser_info + /* The cached s+tree blocks in FSYS_BUF, see below + * for a more detailed description. + */ +-#define ROOT ((char *) ((int) FSYS_BUF)) ++#define ROOT ((char *) ((unsigned long) FSYS_BUF)) + #define CACHE(i) (ROOT + ((i) << INFO->fullblocksize_shift)) + #define LEAF CACHE (DISK_LEAF_NODE_LEVEL) + + #define BLOCKHEAD(cache) ((struct block_head *) cache) +-#define ITEMHEAD ((struct item_head *) ((int) LEAF + BLKH_SIZE)) +-#define KEY(cache) ((struct key *) ((int) cache + BLKH_SIZE)) ++#define ITEMHEAD ((struct item_head *) ((unsigned long) LEAF + BLKH_SIZE)) ++#define KEY(cache) ((struct key *) ((unsigned long) cache + BLKH_SIZE)) + #define DC(cache) ((struct disk_child *) \ +- ((int) cache + BLKH_SIZE + KEY_SIZE * nr_item)) ++ ((unsigned long) cache + BLKH_SIZE + KEY_SIZE * nr_item)) + /* The fsys_reiser_info block. + */ + #define INFO \ +- ((struct fsys_reiser_info *) ((int) FSYS_BUF + FSYSREISER_CACHE_SIZE)) ++ ((struct fsys_reiser_info *) ((unsigned long) FSYS_BUF + FSYSREISER_CACHE_SIZE)) + /* + * The journal cache. For each transaction it contains the number of + * blocks followed by the real block numbers of this transaction. +@@ -366,8 +365,8 @@ struct fsys_reiser_info + #define JOURNAL_END ((__u32 *) (FSYS_BUF + FSYS_BUFLEN)) + + +-static __inline__ unsigned long +-log2 (unsigned long word) ++static __inline__ unsigned int ++grub_log2 (unsigned int word) + { + __asm__ ("bsfl %1,%0" + : "=r" (word) +@@ -569,9 +568,11 @@ int + reiserfs_mount (void) + { + struct reiserfs_super_block super; +- int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS; ++ int sector_bits = get_sector_bits(current_drive); ++ int sector_size = get_sector_size(current_drive); ++ int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits; + +- if (part_length < superblock + (sizeof (super) >> SECTOR_BITS) ++ if (part_length < superblock + (sizeof (super) >> sector_bits) + || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), + (char *) &super) + || (substring (REISER3FS_SUPER_MAGIC_STRING, super.s_magic) > 0 +@@ -582,8 +583,8 @@ reiserfs_mount (void) + <= REISERFS_DISK_OFFSET_IN_BYTES)) + { + /* Try old super block position */ +- superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS; +- if (part_length < superblock + (sizeof (super) >> SECTOR_BITS) ++ superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> sector_bits; ++ if (part_length < superblock + (sizeof (super) >> sector_bits) + || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), + (char *) &super)) + return 0; +@@ -594,7 +595,7 @@ reiserfs_mount (void) + { + /* pre journaling super block ? */ + if (substring (REISERFS_SUPER_MAGIC_STRING, +- (char*) ((int) &super + 20)) > 0) ++ (char*) ((unsigned long) &super + 20)) > 0) + return 0; + + super.s_blocksize = REISERFS_OLD_BLOCKSIZE; +@@ -609,8 +610,8 @@ reiserfs_mount (void) + + INFO->version = super.s_version; + INFO->blocksize = super.s_blocksize; +- INFO->fullblocksize_shift = log2 (super.s_blocksize); +- INFO->blocksize_shift = INFO->fullblocksize_shift - SECTOR_BITS; ++ INFO->fullblocksize_shift = grub_log2 (super.s_blocksize); ++ INFO->blocksize_shift = INFO->fullblocksize_shift - sector_bits; + INFO->cached_slots = + (FSYSREISER_CACHE_SIZE >> INFO->fullblocksize_shift) - 1; + +@@ -622,9 +623,9 @@ reiserfs_mount (void) + /* Clear node cache. */ + memset (INFO->blocks, 0, sizeof (INFO->blocks)); + +- if (super.s_blocksize < FSYSREISER_MIN_BLOCKSIZE ++ if (super.s_blocksize < get_sector_size(current_drive) + || super.s_blocksize > FSYSREISER_MAX_BLOCKSIZE +- || (SECTOR_SIZE << INFO->blocksize_shift) != super.s_blocksize) ++ || (sector_size << INFO->blocksize_shift) != super.s_blocksize) + return 0; + + /* Initialize journal code. If something fails we end with zero +@@ -1215,9 +1216,10 @@ int + reiserfs_embed (int *start_sector, int needed_sectors) + { + struct reiserfs_super_block super; ++ int sector_bits = get_sector_bits(current_drive); + int num_sectors; +- +- if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS, 0, ++ ++ if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits, 0, + sizeof (struct reiserfs_super_block), (char *) &super)) + return 0; + +@@ -1229,9 +1231,9 @@ reiserfs_embed (int *start_sector, int needed_sectors) + * the journal log */ + super.s_journal_block * super.s_blocksize + > REISERFS_DISK_OFFSET_IN_BYTES)) +- num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1; ++ num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits) - 1; + else +- num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1; ++ num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> sector_bits) - 1; + + return (needed_sectors <= num_sectors); + } +diff --git a/stage2/fsys_uefi.c b/stage2/fsys_uefi.c +new file mode 100644 +index 0000000..58b7050 +--- /dev/null ++++ b/stage2/fsys_uefi.c +@@ -0,0 +1,265 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2001 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include "shared.h" ++#include "filesys.h" ++ ++#ifdef PLATFORM_EFI ++#undef GRUB_UTIL ++ ++#include ++#include ++#include ++#include ++#include ++ ++static grub_efi_simple_file_system_t *file_system; ++static grub_efi_guid_t fsinfo_guid = GRUB_EFI_DEVICE_PATH_GUID; ++grub_efi_file_t *root = NULL; ++grub_efi_file_t *file = NULL; ++ ++typedef struct { ++ grub_efi_uint64_t size; ++ grub_efi_uint64_t filesize; ++ grub_efi_uint64_t physicalsize; ++ grub_efi_time_t createtime; ++ grub_efi_time_t accesstime; ++ grub_efi_time_t modifytime; ++ grub_efi_uint64_t attribute; ++ grub_efi_char16_t filename[]; ++} grub_efi_file_info_t; ++ ++int ++uefi_mount (void) ++{ ++ grub_efi_handle_t dev_handle = grub_efidisk_get_current_bdev_handle(); ++ grub_efi_status_t status; ++ ++ if (!dev_handle) ++ return 0; ++ ++ file_system = grub_efi_open_protocol (dev_handle, &simple_file_system_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (!file_system) ++ return 0; ++ ++ status = Call_Service_2 (file_system->open_volume, file_system, &root); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ return 1; ++} ++ ++int ++uefi_dir (char *dirname) ++{ ++ grub_efi_status_t status; ++ grub_efi_char16_t *file_name_w = NULL; ++ grub_efi_char16_t *dir_name_w = NULL; ++ grub_efi_file_info_t *fileinfo = NULL; ++ grub_efi_uintn_t buffersize = 0; ++ grub_efi_file_t *directory = NULL; ++ int i, dirlen = 0, ret = 0; ++ ++ file_name_w = grub_malloc (2 * strlen(dirname) + 2); ++ if (!file_name_w) ++ goto done; ++ ++ for (i=0; iopen, root, &file, file_name_w, ++ GRUB_EFI_FILE_MODE_READ, 0); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ goto done; ++ ++ if (dirname[i-1] == '/') { ++ if (print_possibilities) ++ grub_printf("\n"); ++ ++ while (1) { ++ int filenamelen; ++ ++ status = Call_Service_3 (file->read, file, &buffersize, fileinfo); ++ ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL) { ++ fileinfo = grub_malloc(buffersize); ++ continue; ++ } else if (status) { ++ goto done; ++ } else if (buffersize == 0) { ++ ret = 1; ++ if (print_possibilities) ++ grub_printf("\n"); ++ goto done; ++ } ++ ++ filenamelen = fileinfo->size - sizeof(*fileinfo); ++ ++ if (print_possibilities) { ++ for (i=0; ifilename[i]); ++ } ++ grub_printf(" "); ++ } ++ } else { ++ char *data = NULL; ++ dir_name_w = grub_malloc (2 * dirlen + 2); ++ if (!dir_name_w) ++ goto done; ++ ++ for (i=0; iopen, root, &directory, dir_name_w, ++ GRUB_EFI_FILE_MODE_READ, 0); ++ ++ while (1) { ++ int filenamelen; ++ int invalid = 0; ++ ++ status = Call_Service_3 (directory->read, directory, &buffersize, fileinfo); ++ ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL) { ++ fileinfo = grub_malloc(buffersize); ++ continue; ++ } else if (status) { ++ goto done; ++ } else if (buffersize == 0) { ++ goto done; ++ } ++ ++ filenamelen = fileinfo->size - sizeof(*fileinfo); ++ ++ if (filenamelen != ((strlen(dirname) - dirlen) * 2)) ++ continue; ++ ++ for (i=0; ifilename[i] != file_name_w[i + dirlen + 1]) { ++ if (fileinfo->filename[i] > 0xff || ++ (grub_tolower(fileinfo->filename[i]) != ++ grub_tolower(file_name_w[i + dirlen + 1]))) ++ invalid = 1; ++ } ++ } ++ ++ if (!invalid) ++ break; ++ } ++ ++ if (fileinfo->filesize < 256 && fileinfo->filesize > 3) ++ { ++ data = grub_malloc(fileinfo->filesize); ++ filepos = 0; ++ ++ uefi_read(data, fileinfo->filesize); ++ ++ /* ++ * UEFI doesn't really support symlinks. Apple's UEFI driver exposes ++ * them as files containing the path of the target. This provides ++ * hacky support in the absence of a real driver. ++ */ ++ if (data[0] == '.' && data[1] == '.' && data[2] == '/') ++ { ++ int j; ++ char *tmpdir = grub_malloc(dirlen + fileinfo->filesize); ++ ++ for (j=0; jfilesize; j++) ++ tmpdir[j+dirlen+1] = data[j]; ++ tmpdir[j+dirlen+1] = '\0'; ++ ++ /* Open the new file */ ++ ret = uefi_dir(tmpdir); ++ grub_free (tmpdir); ++ grub_free (data); ++ goto done; ++ } ++ } ++ ++ if (data) ++ grub_free(data); ++ ret = 1; ++ filemax = fileinfo->filesize; ++ filepos = 0; ++ } ++ ++ done: ++ if (fileinfo) ++ grub_free (fileinfo); ++ if (dir_name_w) ++ grub_free (dir_name_w); ++ if (file_name_w) ++ grub_free (file_name_w); ++ ++ return ret; ++} ++ ++void ++uefi_close (void) ++{ ++ grub_efi_status_t status = 0; ++ ++ if (file) ++ status = Call_Service_1 (file->close, file); ++ ++ file = NULL; ++} ++ ++int ++uefi_read (char *addr, int len) ++{ ++ grub_efi_status_t status; ++ grub_efi_uintn_t length = len; ++ ++ errnum = 0; ++ ++ status = Call_Service_2 (file->set_position, file, filepos); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ goto out; ++ ++ status = Call_Service_3 (file->read, file, &length, addr); ++ ++ len = length; ++ ++ if (status == GRUB_EFI_SUCCESS) { ++ filepos += len; ++ return len; ++ } ++ ++ out: ++ errnum = ERR_FILE_NOT_FOUND; ++ ++ return 0; ++} ++#endif +diff --git a/stage2/fsys_vstafs.c b/stage2/fsys_vstafs.c +index a116717..652e784 100644 +--- a/stage2/fsys_vstafs.c ++++ b/stage2/fsys_vstafs.c +@@ -30,8 +30,8 @@ static struct dir_entry *vstafs_nextdir (void); + + + #define FIRST_SECTOR ((struct first_sector *) FSYS_BUF) +-#define FILE_INFO ((struct fs_file *) (int) FIRST_SECTOR + 8192) +-#define DIRECTORY_BUF ((struct dir_entry *) (int) FILE_INFO + 512) ++#define FILE_INFO ((struct fs_file *) (unsigned long) FIRST_SECTOR + 8192) ++#define DIRECTORY_BUF ((struct dir_entry *) (unsigned long) FILE_INFO + 512) + + #define ROOT_SECTOR 1 + +@@ -186,35 +186,35 @@ vstafs_dir (char *dirname) + int + vstafs_read (char *addr, int len) + { +- struct alloc *a; ++ struct alloc *al; + int size, ret = 0, offset, curr_len = 0; +- int curr_ext; ++ int this_ext; + char extent; + int ext_size; + char *curr_pos; + + get_file_info (f_sector); + size = FILE_INFO->len-VSTAFS_START_DATA; +- a = FILE_INFO->blocks; ++ al = FILE_INFO->blocks; + + if (filepos > 0) + { +- if (filepos < a[0].a_len * 512 - VSTAFS_START_DATA) ++ if (filepos < al[0].a_len * 512 - VSTAFS_START_DATA) + { + offset = filepos + VSTAFS_START_DATA; + extent = 0; +- curr_len = a[0].a_len * 512 - offset - filepos; ++ curr_len = al[0].a_len * 512 - offset - filepos; + } + else + { +- ext_size = a[0].a_len * 512 - VSTAFS_START_DATA; ++ ext_size = al[0].a_len * 512 - VSTAFS_START_DATA; + offset = filepos - ext_size; + extent = 1; + do + { + curr_len -= ext_size; + offset -= ext_size; +- ext_size = a[extent+1].a_len * 512; ++ ext_size = al[extent+1].a_len * 512; + } + while (extent < FILE_INFO->extents && offset>ext_size); + } +@@ -223,16 +223,16 @@ vstafs_read (char *addr, int len) + { + offset = VSTAFS_START_DATA; + extent = 0; +- curr_len = a[0].a_len * 512 - offset; ++ curr_len = al[0].a_len * 512 - offset; + } + + curr_pos = addr; + if (curr_len > len) + curr_len = len; + +- for (curr_ext=extent; +- curr_ext < FILE_INFO->extents; +- curr_len = a[curr_ext].a_len * 512, curr_pos += curr_len, curr_ext++) ++ for (this_ext=extent; ++ this_ext < FILE_INFO->extents; ++ curr_len = al[this_ext].a_len * 512, curr_pos += curr_len, this_ext++) + { + ret += curr_len; + size -= curr_len; +@@ -242,7 +242,7 @@ vstafs_read (char *addr, int len) + curr_len += size; + } + +- devread (a[curr_ext].a_start,offset, curr_len, curr_pos); ++ devread (al[this_ext].a_start,offset, curr_len, curr_pos); + offset = 0; + } + +diff --git a/stage2/fsys_xfs.c b/stage2/fsys_xfs.c +index 76c4c13..226e343 100644 +--- a/stage2/fsys_xfs.c ++++ b/stage2/fsys_xfs.c +@@ -97,19 +97,23 @@ ino2offset (xfs_ino_t ino) + return ino & XFS_INO_MASK(XFS_INO_OFFSET_BITS); + } + +-static inline __const__ xfs_uint16_t +-le16 (xfs_uint16_t x) ++static inline xfs_uint16_t __attribute__((__const__)) ++le16 (xfs_uint16_t x) + { ++#if 1 ++ return ((x & 0xff00) >> 8) | ((x & 0xff) << 8); ++#else + __asm__("xchgb %b0,%h0" \ + : "=q" (x) \ + : "0" (x)); \ + return x; ++#endif + } + +-static inline __const__ xfs_uint32_t ++static inline xfs_uint32_t __attribute__((__const__)) + le32 (xfs_uint32_t x) + { +-#if 0 ++#if 1 + /* 386 doesn't have bswap. */ + __asm__("bswap %0" : "=r" (x) : "0" (x)); + #else +@@ -122,7 +126,7 @@ le32 (xfs_uint32_t x) + return x; + } + +-static inline __const__ xfs_uint64_t ++static inline xfs_uint64_t __attribute__((__const__)) + le64 (xfs_uint64_t x) + { + xfs_uint32_t h = x >> 32; +@@ -187,12 +191,12 @@ fsb2daddr (xfs_fsblock_t fsbno) + } + + #undef offsetof +-#define offsetof(t,m) ((int)&(((t *)0)->m)) ++#define offsetof(t,m) __builtin_offsetof(t, m) + +-static inline int ++static inline xfs_uint64_t + btroot_maxrecs (void) + { +- int tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize; ++ xfs_uint64_t tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize; + + return (tmp - sizeof(xfs_bmdr_block_t) - offsetof(xfs_dinode_t, di_u)) / + (sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t)); +@@ -465,7 +469,7 @@ xfs_mount (void) + + xfs.bsize = le32 (super.sb_blocksize); + xfs.blklog = super.sb_blocklog; +- xfs.bdlog = xfs.blklog - SECTOR_BITS; ++ xfs.bdlog = xfs.blklog - get_sector_bits(current_drive); + xfs.rootino = le64 (super.sb_rootino); + xfs.isize = le16 (super.sb_inodesize); + xfs.agblocks = le32 (super.sb_agblocks); +diff --git a/stage2/gpt.h b/stage2/gpt.h +new file mode 100644 +index 0000000..ad6d8f1 +--- /dev/null ++++ b/stage2/gpt.h +@@ -0,0 +1,69 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2005,2006 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef _GPT_H ++#define _GPT_H ++ ++typedef signed char grub_int8_t; ++typedef signed short grub_int16_t; ++typedef signed int grub_int32_t; ++typedef signed long long int grub_int64_t; ++typedef unsigned char grub_uint8_t; ++typedef unsigned short grub_uint16_t; ++typedef unsigned int grub_uint32_t; ++typedef unsigned long long int grub_uint64_t; ++ ++struct grub_gpt_header ++{ ++ grub_uint64_t magic; ++ grub_uint32_t version; ++ grub_uint32_t headersize; ++ grub_uint32_t crc32; ++ grub_uint32_t unused1; ++ grub_uint64_t primary; ++ grub_uint64_t backup; ++ grub_uint64_t start; ++ grub_uint64_t end; ++ grub_uint8_t guid[16]; ++ grub_uint64_t partitions; ++ grub_uint32_t maxpart; ++ grub_uint32_t partentry_size; ++ grub_uint32_t partentry_crc32; ++} __attribute__ ((packed)); ++ ++struct grub_gpt_partentry ++{ ++ grub_uint64_t type1; ++ grub_uint64_t type2; ++ grub_uint8_t guid[16]; ++ grub_uint64_t start; ++ grub_uint64_t end; ++ grub_uint8_t attrib; ++ char name[72]; ++} __attribute__ ((packed)); ++ ++#define GPT_HEADER_MAGIC 0x5452415020494645ULL ++ ++#define GPT_ENTRY_SECTOR(drive,size,entry) \ ++ ((((entry) * (size) + 1) & ~(get_sector_size(drive) - 1)) \ ++ >> get_sector_bits(drive)) ++#define GPT_ENTRY_INDEX(drive, size,entry) \ ++ ((((entry) * (size) + 1) & (get_sector_size(drive) - 1)) - 1) ++ ++#endif /* _GPT_H */ +diff --git a/stage2/graphics.c b/stage2/graphics.c +new file mode 100644 +index 0000000..81109ae +--- /dev/null ++++ b/stage2/graphics.c +@@ -0,0 +1,573 @@ ++/* graphics.c - graphics mode support for GRUB */ ++/* Implemented as a terminal type by Jeremy Katz based ++ * on a patch by Paulo César Pereira de Andrade ++ */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2001,2002 Red Hat, Inc. ++ * Portions copyright (C) 2000 Conectiva, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++ ++ ++#ifdef SUPPORT_GRAPHICS ++ ++#include ++#include ++#include ++ ++int saved_videomode; ++unsigned char *font8x16; ++ ++int graphics_inited = 0; ++static char splashimage[64]; ++ ++#define VSHADOW VSHADOW1 ++unsigned char VSHADOW1[38400]; ++unsigned char VSHADOW2[38400]; ++unsigned char VSHADOW4[38400]; ++unsigned char VSHADOW8[38400]; ++ ++/* constants to define the viewable area */ ++const int x0 = 0; ++const int x1 = 80; ++const int y0 = 0; ++const int y1 = 30; ++ ++/* text buffer has to be kept around so that we can write things as we ++ * scroll and the like */ ++unsigned short text[80 * 30]; ++ ++/* why do these have to be kept here? */ ++int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0; ++ ++/* current position */ ++static int fontx = 0; ++static int fonty = 0; ++ ++/* global state so that we don't try to recursively scroll or cursor */ ++static int no_scroll = 0; ++ ++/* color state */ ++static int graphics_standard_color = A_NORMAL; ++static int graphics_normal_color = A_NORMAL; ++static int graphics_highlight_color = A_REVERSE; ++static int graphics_current_color = A_NORMAL; ++static color_state graphics_color_state = COLOR_STATE_STANDARD; ++ ++ ++/* graphics local functions */ ++static void graphics_setxy(int col, int row); ++static void graphics_scroll(void); ++ ++/* FIXME: where do these really belong? */ ++static inline void outb(unsigned short port, unsigned char val) ++{ ++ __asm __volatile ("outb %0,%1"::"a" (val), "d" (port)); ++} ++ ++static void MapMask(int value) { ++ outb(0x3c4, 2); ++ outb(0x3c5, value); ++} ++ ++/* bit mask register */ ++static void BitMask(int value) { ++ outb(0x3ce, 8); ++ outb(0x3cf, value); ++} ++ ++ ++ ++/* Set the splash image */ ++void graphics_set_splash(char *splashfile) { ++ grub_strcpy(splashimage, splashfile); ++} ++ ++/* Get the current splash image */ ++char *graphics_get_splash(void) { ++ return splashimage; ++} ++ ++/* Initialize a vga16 graphics display with the palette based off of ++ * the image in splashimage. If the image doesn't exist, leave graphics ++ * mode. */ ++int graphics_init() ++{ ++ if (!read_image(splashimage)) { ++ current_term = term_table; ++ grub_printf("failed to read image\n"); ++ return 0; ++ } ++ ++ font8x16 = (unsigned char*)graphics_get_font(); ++ ++ graphics_inited = 1; ++ ++ /* make sure that the highlight color is set correctly */ ++ graphics_highlight_color = ((graphics_normal_color >> 4) | ++ ((graphics_normal_color & 0xf) << 4)); ++ ++ return 1; ++} ++ ++/* Leave graphics mode */ ++void graphics_end(void) ++{ ++ if (graphics_inited) { ++ set_videomode(saved_videomode); ++ graphics_inited = 0; ++ } ++} ++ ++/* Print ch on the screen. Handle any needed scrolling or the like */ ++void graphics_putchar(int ch) { ++ ch &= 0xff; ++ ++ graphics_cursor(0); ++ ++ if (ch == '\n') { ++ if (fonty + 1 < y1) ++ graphics_setxy(fontx, fonty + 1); ++ else ++ graphics_scroll(); ++ graphics_cursor(1); ++ return; ++ } else if (ch == '\r') { ++ graphics_setxy(x0, fonty); ++ graphics_cursor(1); ++ return; ++ } ++ ++ graphics_cursor(0); ++ ++ text[fonty * 80 + fontx] = ch; ++ text[fonty * 80 + fontx] &= 0x00ff; ++ if (graphics_current_color & 0xf0) ++ text[fonty * 80 + fontx] |= 0x100; ++ ++ graphics_cursor(0); ++ ++ if ((fontx + 1) >= x1) { ++ graphics_setxy(x0, fonty); ++ if (fonty + 1 < y1) ++ graphics_setxy(x0, fonty + 1); ++ else ++ graphics_scroll(); ++ } else { ++ graphics_setxy(fontx + 1, fonty); ++ } ++ ++ graphics_cursor(1); ++} ++ ++/* get the current location of the cursor */ ++int graphics_getxy(void) { ++ return (fontx << 8) | fonty; ++} ++ ++void graphics_gotoxy(int x, int y) { ++ graphics_cursor(0); ++ ++ graphics_setxy(x, y); ++ ++ graphics_cursor(1); ++} ++ ++void graphics_cls(void) { ++ int i; ++ unsigned char *mem, *s1, *s2, *s4, *s8; ++ ++ graphics_cursor(0); ++ graphics_gotoxy(x0, y0); ++ ++ mem = (unsigned char*)VIDEOMEM; ++ s1 = (unsigned char*)VSHADOW1; ++ s2 = (unsigned char*)VSHADOW2; ++ s4 = (unsigned char*)VSHADOW4; ++ s8 = (unsigned char*)VSHADOW8; ++ ++ for (i = 0; i < 80 * 30; i++) ++ text[i] = ' '; ++ graphics_cursor(1); ++ ++ BitMask(0xff); ++ ++ /* plano 1 */ ++ MapMask(1); ++ grub_memcpy(mem, s1, 38400); ++ ++ /* plano 2 */ ++ MapMask(2); ++ grub_memcpy(mem, s2, 38400); ++ ++ /* plano 3 */ ++ MapMask(4); ++ grub_memcpy(mem, s4, 38400); ++ ++ /* plano 4 */ ++ MapMask(8); ++ grub_memcpy(mem, s8, 38400); ++ ++ MapMask(15); ++ ++} ++ ++void graphics_setcolorstate (color_state state) { ++ switch (state) { ++ case COLOR_STATE_STANDARD: ++ graphics_current_color = graphics_standard_color; ++ break; ++ case COLOR_STATE_NORMAL: ++ graphics_current_color = graphics_normal_color; ++ break; ++ case COLOR_STATE_HIGHLIGHT: ++ graphics_current_color = graphics_highlight_color; ++ break; ++ default: ++ graphics_current_color = graphics_standard_color; ++ break; ++ } ++ ++ graphics_color_state = state; ++} ++ ++void graphics_setcolor (int normal_color, int highlight_color) { ++ graphics_normal_color = normal_color; ++ graphics_highlight_color = highlight_color; ++ ++ graphics_setcolorstate (graphics_color_state); ++} ++ ++int graphics_setcursor (int on) { ++ /* FIXME: we don't have a cursor in graphics */ ++ return 0; ++} ++ ++/* Open the file, and search for a valid XPM header. Return 1 if one is found, ++ * leaving the current position as the start of the next line. Else, ++ * return 0. ++ */ ++static int xpm_open(char *s) { ++ char buf, prev, target[]="/* XPM */\n"; ++ int pos=0; ++ ++ if (!grub_open(s)) ++ return 0; ++ ++ prev='\n'; ++ buf=0; ++ do { ++ if (grub_read(&buf, 1) != 1) { ++ grub_close(); ++ return 0; ++ } ++ if ((pos == 0 && prev == '\n') || pos > 0) { ++ if (buf == target[pos]) ++ pos++; ++ else ++ pos=0; ++ } ++ prev=buf; ++ } while (target[pos]); ++ return 1; ++} ++ ++/* Read in the splashscreen image and set the palette up appropriately. ++ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and ++ * 640x480. */ ++int read_image(char *s) ++{ ++ char buf[32], pal[16]; ++ unsigned char c, base, mask, *s1, *s2, *s4, *s8; ++ unsigned i, len, idx, colors, x, y, width, height; ++ ++ if (!xpm_open(s)) ++ return 0; ++ ++ saved_videomode = set_videomode(0x12); ++ ++ /* parse info */ ++ while (grub_read(&c, 1)) { ++ if (c == '"') ++ break; ++ } ++ ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ i = 0; ++ width = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ width = width * 10 + c - '0'; ++ else ++ break; ++ } ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ height = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ height = height * 10 + c - '0'; ++ else ++ break; ++ } ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ colors = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ colors = colors * 10 + c - '0'; ++ else ++ break; ++ } ++ ++ base = 0; ++ while (grub_read(&c, 1) && c != '"') ++ ; ++ ++ /* palette */ ++ for (i = 0, idx = 1; i < colors; i++) { ++ len = 0; ++ ++ while (grub_read(&c, 1) && c != '"') ++ ; ++ grub_read(&c, 1); /* char */ ++ base = c; ++ grub_read(buf, 4); /* \t c # */ ++ ++ while (grub_read(&c, 1) && c != '"') { ++ if (len < sizeof(buf)) ++ buf[len++] = c; ++ } ++ ++ if (len == 6 && idx < 15) { ++ int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2; ++ int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2; ++ int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2; ++ ++ pal[idx] = base; ++ graphics_set_palette(idx, r, g, b); ++ ++idx; ++ } ++ } ++ ++ x = y = len = 0; ++ ++ s1 = (unsigned char*)VSHADOW1; ++ s2 = (unsigned char*)VSHADOW2; ++ s4 = (unsigned char*)VSHADOW4; ++ s8 = (unsigned char*)VSHADOW8; ++ ++ for (i = 0; i < 38400; i++) ++ s1[i] = s2[i] = s4[i] = s8[i] = 0; ++ ++ /* parse xpm data */ ++ while (y < height) { ++ while (1) { ++ if (!grub_read(&c, 1)) { ++ grub_close(); ++ return 0; ++ } ++ if (c == '"') ++ break; ++ } ++ ++ while (grub_read(&c, 1) && c != '"') { ++ for (i = 1; i < 15; i++) ++ if (pal[i] == c) { ++ c = i; ++ break; ++ } ++ ++ mask = 0x80 >> (x & 7); ++ if (c & 1) ++ s1[len + (x >> 3)] |= mask; ++ if (c & 2) ++ s2[len + (x >> 3)] |= mask; ++ if (c & 4) ++ s4[len + (x >> 3)] |= mask; ++ if (c & 8) ++ s8[len + (x >> 3)] |= mask; ++ ++ if (++x >= 640) { ++ x = 0; ++ ++ if (y < 480) ++ len += 80; ++ ++y; ++ } ++ } ++ } ++ ++ grub_close(); ++ ++ graphics_set_palette(0, (background >> 16), (background >> 8) & 63, ++ background & 63); ++ graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, ++ foreground & 63); ++ graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, ++ border & 63); ++ ++ return 1; ++} ++ ++ ++/* Convert a character which is a hex digit to the appropriate integer */ ++int hex(int v) ++{ ++ if (v >= 'A' && v <= 'F') ++ return (v - 'A' + 10); ++ if (v >= 'a' && v <= 'f') ++ return (v - 'a' + 10); ++ return (v - '0'); ++} ++ ++ ++/* move the graphics cursor location to col, row */ ++static void graphics_setxy(int col, int row) { ++ if (col >= x0 && col < x1) { ++ fontx = col; ++ cursorX = col << 3; ++ } ++ if (row >= y0 && row < y1) { ++ fonty = row; ++ cursorY = row << 4; ++ } ++} ++ ++/* scroll the screen */ ++static void graphics_scroll(void) { ++ int i, j; ++ ++ /* we don't want to scroll recursively... that would be bad */ ++ if (no_scroll) ++ return; ++ no_scroll = 1; ++ ++ /* move everything up a line */ ++ for (j = y0 + 1; j < y1; j++) { ++ graphics_gotoxy(x0, j - 1); ++ for (i = x0; i < x1; i++) { ++ graphics_putchar(text[j * 80 + i]); ++ } ++ } ++ ++ /* last line should be blank */ ++ graphics_gotoxy(x0, y1 - 1); ++ for (i = x0; i < x1; i++) ++ graphics_putchar(' '); ++ graphics_setxy(x0, y1 - 1); ++ ++ no_scroll = 0; ++} ++ ++ ++void graphics_cursor(int set) { ++ unsigned char *pat, *mem, *ptr, chr[16 << 2]; ++ int i, ch, invert, offset; ++ ++ if (set && no_scroll) ++ return; ++ ++ offset = cursorY * 80 + fontx; ++ ch = text[fonty * 80 + fontx] & 0xff; ++ invert = (text[fonty * 80 + fontx] & 0xff00) != 0; ++ pat = font8x16 + (ch << 4); ++ ++ mem = (unsigned char*)VIDEOMEM + offset; ++ ++ if (!set) { ++ for (i = 0; i < 16; i++) { ++ unsigned char mask = pat[i]; ++ ++ if (!invert) { ++ chr[i ] = ((unsigned char*)VSHADOW1)[offset]; ++ chr[16 + i] = ((unsigned char*)VSHADOW2)[offset]; ++ chr[32 + i] = ((unsigned char*)VSHADOW4)[offset]; ++ chr[48 + i] = ((unsigned char*)VSHADOW8)[offset]; ++ ++ /* FIXME: if (shade) */ ++ if (1) { ++ if (ch == DISP_VERT || ch == DISP_LL || ++ ch == DISP_UR || ch == DISP_LR) { ++ unsigned char pmask = ~(pat[i] >> 1); ++ ++ chr[i ] &= pmask; ++ chr[16 + i] &= pmask; ++ chr[32 + i] &= pmask; ++ chr[48 + i] &= pmask; ++ } ++ if (i > 0 && ch != DISP_VERT) { ++ unsigned char pmask = ~(pat[i - 1] >> 1); ++ ++ chr[i ] &= pmask; ++ chr[16 + i] &= pmask; ++ chr[32 + i] &= pmask; ++ chr[48 + i] &= pmask; ++ if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) { ++ pmask = ~pat[i - 1]; ++ ++ chr[i ] &= pmask; ++ chr[16 + i] &= pmask; ++ chr[32 + i] &= pmask; ++ chr[48 + i] &= pmask; ++ } ++ } ++ } ++ chr[i ] |= mask; ++ chr[16 + i] |= mask; ++ chr[32 + i] |= mask; ++ chr[48 + i] |= mask; ++ ++ offset += 80; ++ } ++ else { ++ chr[i ] = ~mask; ++ chr[16 + i] = ~mask; ++ chr[32 + i] = ~mask; ++ chr[48 + i] = ~mask; ++ } ++ } ++ } ++ else { ++ MapMask(15); ++ ptr = mem; ++ for (i = 0; i < 16; i++, ptr += 80) { ++ cursorBuf[i] = pat[i]; ++ *ptr = ~pat[i]; ++ } ++ return; ++ } ++ ++ offset = 0; ++ for (i = 1; i < 16; i <<= 1, offset += 16) { ++ int j; ++ ++ MapMask(i); ++ ptr = mem; ++ for (j = 0; j < 16; j++, ptr += 80) ++ *ptr = chr[j + offset]; ++ } ++ ++ MapMask(15); ++} ++ ++#endif /* SUPPORT_GRAPHICS */ +diff --git a/stage2/graphics.h b/stage2/graphics.h +new file mode 100644 +index 0000000..a4cd9e8 +--- /dev/null ++++ b/stage2/graphics.h +@@ -0,0 +1,42 @@ ++/* graphics.h - graphics console interface */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002 Free Software Foundation, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#ifndef GRAPHICS_H ++#define GRAPHICS_H ++ ++/* magic constant */ ++#define VIDEOMEM 0xA0000 ++ ++/* function prototypes */ ++char *graphics_get_splash(void); ++ ++int read_image(char *s); ++void graphics_cursor(int set); ++ ++/* function prototypes for asm functions */ ++void * graphics_get_font(); ++void graphics_set_palette(int idx, int red, int green, int blue); ++void set_int1c_handler(); ++void unset_int1c_handler(); ++ ++extern short cursorX, cursorY; ++extern char cursorBuf[16]; ++ ++#endif /* GRAPHICS_H */ +diff --git a/stage2/gunzip.c b/stage2/gunzip.c +index 8835089..45a2312 100644 +--- a/stage2/gunzip.c ++++ b/stage2/gunzip.c +@@ -141,7 +141,7 @@ static int gzip_filepos; + static int gzip_filemax; + static int gzip_fsmax; + static int saved_filepos; +-static unsigned long gzip_crc; ++static unsigned int gzip_crc; + + /* internal extra variables for use of inflate code */ + static int block_type; +@@ -169,7 +169,14 @@ linalloc (int size) + static void + reset_linalloc (void) + { ++#ifdef PLATFORM_EFI ++ unsigned int top = (mbi.mem_upper << 10) + 0x100000; ++ if (top > GRUB_SCRATCH_MEM_SIZE) ++ top = GRUB_SCRATCH_MEM_SIZE; ++ linalloc_topaddr = RAW_ADDR (top); ++#else + linalloc_topaddr = RAW_ADDR ((mbi.mem_upper << 10) + 0x100000); ++#endif + } + + +@@ -253,7 +260,7 @@ bad_field (int len) + + typedef unsigned char uch; + typedef unsigned short ush; +-typedef unsigned long ulg; ++typedef unsigned int ulg; + + /* + * Window Size +@@ -316,8 +323,8 @@ gunzip_test_header (void) + return 0; + } + +- gzip_crc = *((unsigned long *) buf); +- gzip_fsmax = gzip_filemax = *((unsigned long *) (buf + 4)); ++ gzip_crc = *((unsigned int *) buf); ++ gzip_fsmax = gzip_filemax = *((unsigned int *) (buf + 4)); + + initialize_tables (); + +diff --git a/stage2/iso9660.h b/stage2/iso9660.h +index 4a6a8cc..c311ecf 100644 +--- a/stage2/iso9660.h ++++ b/stage2/iso9660.h +@@ -73,11 +73,11 @@ typedef union { + + typedef struct __iso_16bit { + u_int16_t l, b; +-} iso_16bit_t __attribute__ ((packed)); ++} iso_16bit_t; + + typedef struct __iso_32bit { + u_int32_t l, b; +-} iso_32bit_t __attribute__ ((packed)); ++} iso_32bit_t; + + typedef u_int8_t iso_date_t[7]; + +diff --git a/stage2/mb_info.h b/stage2/mb_info.h +index 1e1e63b..3a8dcfb 100644 +--- a/stage2/mb_info.h ++++ b/stage2/mb_info.h +@@ -44,10 +44,10 @@ struct mod_list + + struct AddrRangeDesc + { +- unsigned long size; ++ unsigned int size; + unsigned long long BaseAddr; + unsigned long long Length; +- unsigned long Type; ++ unsigned int Type; + + /* unspecified optional padding... */ + } __attribute__ ((packed)); +diff --git a/stage2/pc_slice.h b/stage2/pc_slice.h +index a38d97f..2206e82 100644 +--- a/stage2/pc_slice.h ++++ b/stage2/pc_slice.h +@@ -38,50 +38,50 @@ + */ + + #define PC_MBR_CHECK_SIG(mbr_ptr) \ +- ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \ ++ ( *( (unsigned short *) (((unsigned long) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \ + == PC_MBR_SIGNATURE ) + + #define PC_MBR_SIG(mbr_ptr) \ +- ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) ) ++ ( *( (unsigned short *) (((unsigned long) mbr_ptr) + PC_MBR_SIG_OFFSET) ) ) + + #define PC_SLICE_FLAG(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET \ + + (part << 4)) ) ) + + #define PC_SLICE_HEAD(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 1 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 1 \ + + (part << 4)) ) ) + + #define PC_SLICE_SEC(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 2 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 2 \ + + (part << 4)) ) ) + + #define PC_SLICE_CYL(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 3 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 3 \ + + (part << 4)) ) ) + + #define PC_SLICE_TYPE(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 4 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 4 \ + + (part << 4)) ) ) + + #define PC_SLICE_EHEAD(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 5 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 5 \ + + (part << 4)) ) ) + + #define PC_SLICE_ESEC(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 6 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 6 \ + + (part << 4)) ) ) + + #define PC_SLICE_ECYL(mbr_ptr, part) \ +- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 7 \ ++ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 7 \ + + (part << 4)) ) ) + + #define PC_SLICE_START(mbr_ptr, part) \ +- ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 8 \ ++ ( *( (unsigned int *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 8 \ + + (part << 4)) ) ) + + #define PC_SLICE_LENGTH(mbr_ptr, part) \ +- ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 12 \ ++ ( *( (unsigned int *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 12 \ + + (part << 4)) ) ) + + +@@ -115,6 +115,8 @@ + #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85 + #define PC_SLICE_TYPE_VSTAFS 0x9e + #define PC_SLICE_TYPE_DELL_UTIL 0xde ++#define PC_SLICE_TYPE_GPT 0xee ++#define PC_SLICE_TYPE_EFI 0xef + #define PC_SLICE_TYPE_LINUX_RAID 0xfd + + +@@ -129,7 +131,8 @@ + || _type == PC_SLICE_TYPE_FAT16_LBA \ + || _type == PC_SLICE_TYPE_FAT32 \ + || _type == PC_SLICE_TYPE_FAT32_LBA \ +- || _type == PC_SLICE_TYPE_DELL_UTIL; }) ++ || _type == PC_SLICE_TYPE_DELL_UTIL \ ++ || _type == PC_SLICE_TYPE_EFI; }) + + #define IS_PC_SLICE_TYPE_EXTENDED(type) \ + (((type) == PC_SLICE_TYPE_EXTENDED) \ +@@ -177,40 +180,40 @@ + */ + + #define BSD_LABEL_CHECK_MAG(l_ptr) \ +- ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \ +- == ( (unsigned long) BSD_LABEL_MAGIC ) ) ++ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \ ++ == ( (unsigned int) BSD_LABEL_MAGIC ) ) + + #define BSD_LABEL_MAG(l_ptr) \ +- ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) ) ++ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET) ) ) + + #define BSD_LABEL_DTYPE(l_ptr) \ +- ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) ) ++ ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) ) + + #define BSD_LABEL_NPARTS(l_ptr) \ +- ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) ) ++ ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) ) + + #define BSD_PART_LENGTH(l_ptr, part) \ +- ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET \ ++ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET \ + + (part << 4)) ) ) + + #define BSD_PART_START(l_ptr, part) \ +- ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 4 \ ++ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 4 \ + + (part << 4)) ) ) + + #define BSD_PART_FRAG_SIZE(l_ptr, part) \ +- ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 8 \ ++ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 8 \ + + (part << 4)) ) ) + + #define BSD_PART_TYPE(l_ptr, part) \ +- ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 12 \ ++ ( *( (unsigned char *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 12 \ + + (part << 4)) ) ) + + #define BSD_PART_FRAGS_PER_BLOCK(l_ptr, part) \ +- ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 13 \ ++ ( *( (unsigned char *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 13 \ + + (part << 4)) ) ) + + #define BSD_PART_EXTRA(l_ptr, part) \ +- ( *( (unsigned short *) (((int) l_ptr) + BSD_PART_OFFSET + 14 \ ++ ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 14 \ + + (part << 4)) ) ) + + +diff --git a/stage2/serial.c b/stage2/serial.c +index 16c376f..37b9532 100644 +--- a/stage2/serial.c ++++ b/stage2/serial.c +@@ -37,7 +37,7 @@ static int keep_track = 1; + + /* Hardware-dependent definitions. */ + +-#ifndef GRUB_UTIL ++#if ! defined (GRUB_UTIL) && ! defined (PLATFORM_EFI) + /* The structure for speed vs. divisor. */ + struct divisor + { +@@ -187,7 +187,7 @@ serial_hw_init (unsigned short port, unsigned int speed, + + return 1; + } +-#endif /* ! GRUB_UTIL */ ++#endif /* ! defined (GRUB_UTIL) && ! defined (PLATFORM_EFI) */ + + + /* Generic definitions. */ +diff --git a/stage2/sha256crypt.c b/stage2/sha256crypt.c +new file mode 100644 +index 0000000..db168a2 +--- /dev/null ++++ b/stage2/sha256crypt.c +@@ -0,0 +1,723 @@ ++/* SHA256-based Unix crypt implementation. ++ Released into the Public Domain by Ulrich Drepper . ++ Adapted for grub by Miloslav Trmac . */ ++ ++#include ++#include ++ ++#include ++ ++typedef unsigned int uint32_t; ++typedef size_t uintptr_t; ++#define alloca(SIZE) (__builtin_alloca (SIZE)) ++#define MIN(A, B) ((A) < (B) ? (A) : (B)) ++#define MAX(A, B) ((A) > (B) ? (A) : (B)) ++ ++/* Structure to save state of computation between the single steps. */ ++struct sha256_ctx ++{ ++ uint32_t H[8]; ++ ++ uint32_t total[2]; ++ uint32_t buflen; ++ char buffer[128]; /* NB: always correctly aligned for uint32_t. */ ++}; ++ ++ ++#if 1 /* __BYTE_ORDER == __LITTLE_ENDIAN */ ++# define SWAP(n) \ ++ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) ++#else ++# define SWAP(n) (n) ++#endif ++ ++ ++/* This array contains the bytes used to pad the buffer to the next ++ 64-byte boundary. (FIPS 180-2:5.1.1) */ ++static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; ++ ++ ++/* Constants for SHA256 from FIPS 180-2:4.2.2. */ ++static const uint32_t K[64] = ++ { ++ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, ++ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, ++ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, ++ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, ++ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, ++ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, ++ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, ++ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, ++ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, ++ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, ++ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, ++ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, ++ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, ++ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, ++ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, ++ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ++ }; ++ ++ ++/* Process LEN bytes of BUFFER, accumulating context into CTX. ++ It is assumed that LEN % 64 == 0. */ ++static void ++sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx) ++{ ++ const uint32_t *words = buffer; ++ size_t nwords = len / sizeof (uint32_t); ++ uint32_t a = ctx->H[0]; ++ uint32_t b = ctx->H[1]; ++ uint32_t c = ctx->H[2]; ++ uint32_t d = ctx->H[3]; ++ uint32_t e = ctx->H[4]; ++ uint32_t f = ctx->H[5]; ++ uint32_t g = ctx->H[6]; ++ uint32_t h = ctx->H[7]; ++ ++ /* First increment the byte count. FIPS 180-2 specifies the possible ++ length of the file up to 2^64 bits. Here we only compute the ++ number of bytes. Do a double word increment. */ ++ ctx->total[0] += len; ++ if (ctx->total[0] < len) ++ ++ctx->total[1]; ++ ++ /* Process all bytes in the buffer with 64 bytes in each round of ++ the loop. */ ++ while (nwords > 0) ++ { ++ uint32_t W[64]; ++ uint32_t a_save = a; ++ uint32_t b_save = b; ++ uint32_t c_save = c; ++ uint32_t d_save = d; ++ uint32_t e_save = e; ++ uint32_t f_save = f; ++ uint32_t g_save = g; ++ uint32_t h_save = h; ++ unsigned int t; ++ ++ /* Operators defined in FIPS 180-2:4.1.2. */ ++#define Ch(x, y, z) ((x & y) ^ (~x & z)) ++#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) ++#define S0(x) (CYCLIC (x, 2) ^ CYCLIC (x, 13) ^ CYCLIC (x, 22)) ++#define S1(x) (CYCLIC (x, 6) ^ CYCLIC (x, 11) ^ CYCLIC (x, 25)) ++#define R0(x) (CYCLIC (x, 7) ^ CYCLIC (x, 18) ^ (x >> 3)) ++#define R1(x) (CYCLIC (x, 17) ^ CYCLIC (x, 19) ^ (x >> 10)) ++ ++ /* It is unfortunate that C does not provide an operator for ++ cyclic rotation. Hope the C compiler is smart enough. */ ++#define CYCLIC(w, s) ((w >> s) | (w << (32 - s))) ++ ++ /* Compute the message schedule according to FIPS 180-2:6.2.2 step 2. */ ++ for (t = 0; t < 16; ++t) ++ { ++ W[t] = SWAP (*words); ++ ++words; ++ } ++ for (t = 16; t < 64; ++t) ++ W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16]; ++ ++ /* The actual computation according to FIPS 180-2:6.2.2 step 3. */ ++ for (t = 0; t < 64; ++t) ++ { ++ uint32_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t]; ++ uint32_t T2 = S0 (a) + Maj (a, b, c); ++ h = g; ++ g = f; ++ f = e; ++ e = d + T1; ++ d = c; ++ c = b; ++ b = a; ++ a = T1 + T2; ++ } ++ ++ /* Add the starting values of the context according to FIPS 180-2:6.2.2 ++ step 4. */ ++ a += a_save; ++ b += b_save; ++ c += c_save; ++ d += d_save; ++ e += e_save; ++ f += f_save; ++ g += g_save; ++ h += h_save; ++ ++ /* Prepare for the next round. */ ++ nwords -= 16; ++ } ++ ++ /* Put checksum in context given as argument. */ ++ ctx->H[0] = a; ++ ctx->H[1] = b; ++ ctx->H[2] = c; ++ ctx->H[3] = d; ++ ctx->H[4] = e; ++ ctx->H[5] = f; ++ ctx->H[6] = g; ++ ctx->H[7] = h; ++} ++ ++ ++/* Initialize structure containing state of computation. ++ (FIPS 180-2:5.3.2) */ ++static void ++sha256_init_ctx (struct sha256_ctx *ctx) ++{ ++ ctx->H[0] = 0x6a09e667; ++ ctx->H[1] = 0xbb67ae85; ++ ctx->H[2] = 0x3c6ef372; ++ ctx->H[3] = 0xa54ff53a; ++ ctx->H[4] = 0x510e527f; ++ ctx->H[5] = 0x9b05688c; ++ ctx->H[6] = 0x1f83d9ab; ++ ctx->H[7] = 0x5be0cd19; ++ ++ ctx->total[0] = ctx->total[1] = 0; ++ ctx->buflen = 0; ++} ++ ++ ++/* Process the remaining bytes in the internal buffer and the usual ++ prolog according to the standard and write the result to RESBUF. ++ ++ IMPORTANT: On some systems it is required that RESBUF is correctly ++ aligned for a 32 bits value. */ ++static void * ++sha256_finish_ctx (struct sha256_ctx *ctx, void *resbuf) ++{ ++ /* Take yet unprocessed bytes into account. */ ++ uint32_t bytes = ctx->buflen; ++ size_t pad; ++ unsigned int i; ++ ++ /* Now count remaining bytes. */ ++ ctx->total[0] += bytes; ++ if (ctx->total[0] < bytes) ++ ++ctx->total[1]; ++ ++ pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; ++ memcpy (&ctx->buffer[bytes], fillbuf, pad); ++ ++ /* Put the 64-bit file length in *bits* at the end of the buffer. */ ++ *(uint32_t *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3); ++ *(uint32_t *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) | ++ (ctx->total[0] >> 29)); ++ ++ /* Process last bytes. */ ++ sha256_process_block (ctx->buffer, bytes + pad + 8, ctx); ++ ++ /* Put result from CTX in first 32 bytes following RESBUF. */ ++ for (i = 0; i < 8; ++i) ++ ((uint32_t *) resbuf)[i] = SWAP (ctx->H[i]); ++ ++ return resbuf; ++} ++ ++ ++static void ++sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx) ++{ ++ /* When we already have some bits in our internal buffer concatenate ++ both inputs first. */ ++ if (ctx->buflen != 0) ++ { ++ size_t left_over = ctx->buflen; ++ size_t add = 128 - left_over > len ? len : 128 - left_over; ++ ++ memcpy (&ctx->buffer[left_over], buffer, add); ++ ctx->buflen += add; ++ ++ if (ctx->buflen > 64) ++ { ++ sha256_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ++ ++ ctx->buflen &= 63; ++ /* The regions in the following copy operation cannot overlap. */ ++ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], ++ ctx->buflen); ++ } ++ ++ buffer = (const char *) buffer + add; ++ len -= add; ++ } ++ ++ /* Process available complete blocks. */ ++ if (len >= 64) ++ { ++/* To check alignment gcc has an appropriate operator. Other ++ compilers don't. */ ++#if __GNUC__ >= 2 ++# define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint32_t) != 0) ++#else ++# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint32_t) != 0) ++#endif ++ if (UNALIGNED_P (buffer)) ++ while (len > 64) ++ { ++ sha256_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); ++ buffer = (const char *) buffer + 64; ++ len -= 64; ++ } ++ else ++ { ++ sha256_process_block (buffer, len & ~63, ctx); ++ buffer = (const char *) buffer + (len & ~63); ++ len &= 63; ++ } ++ } ++ ++ /* Move remaining bytes into internal buffer. */ ++ if (len > 0) ++ { ++ size_t left_over = ctx->buflen; ++ ++ memcpy (&ctx->buffer[left_over], buffer, len); ++ left_over += len; ++ if (left_over >= 64) ++ { ++ sha256_process_block (ctx->buffer, 64, ctx); ++ left_over -= 64; ++ memcpy (ctx->buffer, &ctx->buffer[64], left_over); ++ } ++ ctx->buflen = left_over; ++ } ++} ++ ++ ++/* Define our magic string to mark salt for SHA256 "encryption" ++ replacement. */ ++static const char sha256_salt_prefix[] = "$5$"; ++ ++/* Prefix for optional rounds specification. */ ++static const char sha256_rounds_prefix[] = "rounds="; ++ ++/* Maximum salt string length. */ ++#define SALT_LEN_MAX 16 ++/* Default number of rounds if not explicitly specified. */ ++#define ROUNDS_DEFAULT 5000 ++/* Minimum number of rounds. */ ++#define ROUNDS_MIN 1000 ++/* Maximum number of rounds. */ ++#define ROUNDS_MAX 999999999 ++ ++/* Table with characters for base64 transformation. */ ++static const char b64t[64] = ++"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; ++ ++ ++static char * ++sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen) ++{ ++ unsigned char alt_result[32] ++ __attribute__ ((__aligned__ (__alignof__ (uint32_t)))); ++ unsigned char temp_result[32] ++ __attribute__ ((__aligned__ (__alignof__ (uint32_t)))); ++ struct sha256_ctx ctx; ++ struct sha256_ctx alt_ctx; ++ size_t salt_len; ++ size_t key_len; ++ size_t cnt; ++ char *cp; ++ char *copied_key = NULL; ++ char *copied_salt = NULL; ++ char *p_bytes; ++ char *s_bytes; ++ /* Default number of rounds. */ ++ size_t rounds = ROUNDS_DEFAULT; ++ bool rounds_custom = false; ++ ++ /* Find beginning of salt string. The prefix should normally always ++ be present. Just in case it is not. */ ++ if (grub_memcmp (sha256_salt_prefix, salt, ++ sizeof (sha256_salt_prefix) - 1) == 0) ++ /* Skip salt prefix. */ ++ salt += sizeof (sha256_salt_prefix) - 1; ++ ++ if (grub_memcmp (salt, sha256_rounds_prefix, ++ sizeof (sha256_rounds_prefix) - 1) == 0) ++ { ++ const char *num = salt + sizeof (sha256_rounds_prefix) - 1; ++ char *endp = (char *)num; ++ int srounds = 0; ++ if (*endp == '0' && tolower (endp[1]) == 'x') ++ /* This would be interpreted as hexadecimal by safe_parse_maxint(). */ ++ endp++; ++ else ++ /* On error, endp and srounds is not changed. */ ++ safe_parse_maxint(&endp, &srounds); ++ if (*endp == '$') ++ { ++ salt = endp + 1; ++ rounds = MAX (ROUNDS_MIN, MIN (srounds, ROUNDS_MAX)); ++ rounds_custom = true; ++ } ++ } ++ ++ salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX); ++ key_len = strlen (key); ++ ++ if ((key - (char *) 0) % __alignof__ (uint32_t) != 0) ++ { ++ char *tmp = (char *) alloca (key_len + __alignof__ (uint32_t)); ++ key = copied_key = ++ memcpy (tmp + __alignof__ (uint32_t) ++ - (tmp - (char *) 0) % __alignof__ (uint32_t), ++ key, key_len); ++ } ++ ++ if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0) ++ { ++ char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t)); ++ salt = copied_salt = ++ memcpy (tmp + __alignof__ (uint32_t) ++ - (tmp - (char *) 0) % __alignof__ (uint32_t), ++ salt, salt_len); ++ } ++ ++ /* Prepare for the real work. */ ++ sha256_init_ctx (&ctx); ++ ++ /* Add the key string. */ ++ sha256_process_bytes (key, key_len, &ctx); ++ ++ /* The last part is the salt string. This must be at most 16 ++ characters and it ends at the first `$' character (for ++ compatibility with existing implementations). */ ++ sha256_process_bytes (salt, salt_len, &ctx); ++ ++ ++ /* Compute alternate SHA256 sum with input KEY, SALT, and KEY. The ++ final result will be added to the first context. */ ++ sha256_init_ctx (&alt_ctx); ++ ++ /* Add key. */ ++ sha256_process_bytes (key, key_len, &alt_ctx); ++ ++ /* Add salt. */ ++ sha256_process_bytes (salt, salt_len, &alt_ctx); ++ ++ /* Add key again. */ ++ sha256_process_bytes (key, key_len, &alt_ctx); ++ ++ /* Now get result of this (32 bytes) and add it to the other ++ context. */ ++ sha256_finish_ctx (&alt_ctx, alt_result); ++ ++ /* Add for any character in the key one byte of the alternate sum. */ ++ for (cnt = key_len; cnt > 32; cnt -= 32) ++ sha256_process_bytes (alt_result, 32, &ctx); ++ sha256_process_bytes (alt_result, cnt, &ctx); ++ ++ /* Take the binary representation of the length of the key and for every ++ 1 add the alternate sum, for every 0 the key. */ ++ for (cnt = key_len; cnt > 0; cnt >>= 1) ++ if ((cnt & 1) != 0) ++ sha256_process_bytes (alt_result, 32, &ctx); ++ else ++ sha256_process_bytes (key, key_len, &ctx); ++ ++ /* Create intermediate result. */ ++ sha256_finish_ctx (&ctx, alt_result); ++ ++ /* Start computation of P byte sequence. */ ++ sha256_init_ctx (&alt_ctx); ++ ++ /* For every character in the password add the entire password. */ ++ for (cnt = 0; cnt < key_len; ++cnt) ++ sha256_process_bytes (key, key_len, &alt_ctx); ++ ++ /* Finish the digest. */ ++ sha256_finish_ctx (&alt_ctx, temp_result); ++ ++ /* Create byte sequence P. */ ++ cp = p_bytes = alloca (key_len); ++ for (cnt = key_len; cnt >= 32; cnt -= 32) ++ { ++ memcpy (cp, temp_result, 32); ++ cp += 32; ++ } ++ memcpy (cp, temp_result, cnt); ++ ++ /* Start computation of S byte sequence. */ ++ sha256_init_ctx (&alt_ctx); ++ ++ /* For every character in the password add the entire password. */ ++ for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt) ++ sha256_process_bytes (salt, salt_len, &alt_ctx); ++ ++ /* Finish the digest. */ ++ sha256_finish_ctx (&alt_ctx, temp_result); ++ ++ /* Create byte sequence S. */ ++ cp = s_bytes = alloca (salt_len); ++ for (cnt = salt_len; cnt >= 32; cnt -= 32) ++ { ++ memcpy (cp, temp_result, 32); ++ cp += 32; ++ } ++ memcpy (cp, temp_result, cnt); ++ ++ /* Repeatedly run the collected hash value through SHA256 to burn ++ CPU cycles. */ ++ for (cnt = 0; cnt < rounds; ++cnt) ++ { ++ /* New context. */ ++ sha256_init_ctx (&ctx); ++ ++ /* Add key or last result. */ ++ if ((cnt & 1) != 0) ++ sha256_process_bytes (p_bytes, key_len, &ctx); ++ else ++ sha256_process_bytes (alt_result, 32, &ctx); ++ ++ /* Add salt for numbers not divisible by 3. */ ++ if (cnt % 3 != 0) ++ sha256_process_bytes (s_bytes, salt_len, &ctx); ++ ++ /* Add key for numbers not divisible by 7. */ ++ if (cnt % 7 != 0) ++ sha256_process_bytes (p_bytes, key_len, &ctx); ++ ++ /* Add key or last result. */ ++ if ((cnt & 1) != 0) ++ sha256_process_bytes (alt_result, 32, &ctx); ++ else ++ sha256_process_bytes (p_bytes, key_len, &ctx); ++ ++ /* Create intermediate result. */ ++ sha256_finish_ctx (&ctx, alt_result); ++ } ++ ++ /* Now we can construct the result string. It consists of three ++ parts. */ ++ cp = stpncpy (buffer, sha256_salt_prefix, MAX (0, buflen)); ++ buflen -= sizeof (sha256_salt_prefix) - 1; ++ ++ if (rounds_custom) ++ { ++ char sbuf[64]; ++ grub_sprintf (sbuf, "%s%llu$", sha256_rounds_prefix, ++ (unsigned long long)rounds); ++ size_t n = strlen (sbuf); ++ memcpy (cp, sbuf, MIN (MAX (0, buflen), n)); ++ cp += n; ++ buflen -= n; ++ } ++ ++ cp = stpncpy (cp, salt, MIN ((size_t) MAX (0, buflen), salt_len)); ++ buflen -= MIN ((size_t) MAX (0, buflen), salt_len); ++ ++ if (buflen > 0) ++ { ++ *cp++ = '$'; ++ --buflen; ++ } ++ ++#define b64_from_24bit(B2, B1, B0, N) \ ++ do { \ ++ unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ ++ int n = (N); \ ++ while (n-- > 0 && buflen > 0) \ ++ { \ ++ *cp++ = b64t[w & 0x3f]; \ ++ --buflen; \ ++ w >>= 6; \ ++ } \ ++ } while (0) ++ ++ b64_from_24bit (alt_result[0], alt_result[10], alt_result[20], 4); ++ b64_from_24bit (alt_result[21], alt_result[1], alt_result[11], 4); ++ b64_from_24bit (alt_result[12], alt_result[22], alt_result[2], 4); ++ b64_from_24bit (alt_result[3], alt_result[13], alt_result[23], 4); ++ b64_from_24bit (alt_result[24], alt_result[4], alt_result[14], 4); ++ b64_from_24bit (alt_result[15], alt_result[25], alt_result[5], 4); ++ b64_from_24bit (alt_result[6], alt_result[16], alt_result[26], 4); ++ b64_from_24bit (alt_result[27], alt_result[7], alt_result[17], 4); ++ b64_from_24bit (alt_result[18], alt_result[28], alt_result[8], 4); ++ b64_from_24bit (alt_result[9], alt_result[19], alt_result[29], 4); ++ b64_from_24bit (0, alt_result[31], alt_result[30], 3); ++ if (buflen <= 0) ++ buffer = NULL; ++ else ++ *cp = '\0'; /* Terminate the string. */ ++ ++ /* Clear the buffer for the intermediate result so that people ++ attaching to processes or reading core dumps cannot get any ++ information. We do it in this way to clear correct_words[] ++ inside the SHA256 implementation as well. */ ++ sha256_init_ctx (&ctx); ++ sha256_finish_ctx (&ctx, alt_result); ++ memset (temp_result, '\0', sizeof (temp_result)); ++ memset (p_bytes, '\0', key_len); ++ memset (s_bytes, '\0', salt_len); ++ memset (&ctx, '\0', sizeof (ctx)); ++ memset (&alt_ctx, '\0', sizeof (alt_ctx)); ++ if (copied_key != NULL) ++ memset (copied_key, '\0', key_len); ++ if (copied_salt != NULL) ++ memset (copied_salt, '\0', salt_len); ++ ++ return buffer; ++} ++ ++ ++/* This entry point is equivalent to the `crypt' function in Unix ++ libcs. */ ++char * ++sha256_crypt (const char *key, const char *salt) ++{ ++ static char buffer[sizeof (sha256_salt_prefix) - 1 ++ + sizeof (sha256_rounds_prefix) + 9 + 1 ++ + 256 + 1 + 43 + 1]; /* 256 bytes for salt */ ++ int needed = (sizeof (sha256_salt_prefix) - 1 ++ + sizeof (sha256_rounds_prefix) + 9 + 1 ++ + strlen (salt) + 1 + 43 + 1); ++ ++ if (sizeof (buffer) < needed) ++ return NULL; ++ ++ return sha256_crypt_r (key, salt, buffer, sizeof (buffer)); ++} ++ ++ ++#ifdef TEST ++static const struct ++{ ++ const char *input; ++ const char result[32]; ++} tests[] = ++ { ++ /* Test vectors from FIPS 180-2: appendix B.1. */ ++ { "abc", ++ "\xba\x78\x16\xbf\x8f\x01\xcf\xea\x41\x41\x40\xde\x5d\xae\x22\x23" ++ "\xb0\x03\x61\xa3\x96\x17\x7a\x9c\xb4\x10\xff\x61\xf2\x00\x15\xad" }, ++ /* Test vectors from FIPS 180-2: appendix B.2. */ ++ { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", ++ "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39" ++ "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1" }, ++ /* Test vectors from the NESSIE project. */ ++ { "", ++ "\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9\x24" ++ "\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52\xb8\x55" }, ++ { "a", ++ "\xca\x97\x81\x12\xca\x1b\xbd\xca\xfa\xc2\x31\xb3\x9a\x23\xdc\x4d" ++ "\xa7\x86\xef\xf8\x14\x7c\x4e\x72\xb9\x80\x77\x85\xaf\xee\x48\xbb" }, ++ { "message digest", ++ "\xf7\x84\x6f\x55\xcf\x23\xe1\x4e\xeb\xea\xb5\xb4\xe1\x55\x0c\xad" ++ "\x5b\x50\x9e\x33\x48\xfb\xc4\xef\xa3\xa1\x41\x3d\x39\x3c\xb6\x50" }, ++ { "abcdefghijklmnopqrstuvwxyz", ++ "\x71\xc4\x80\xdf\x93\xd6\xae\x2f\x1e\xfa\xd1\x44\x7c\x66\xc9\x52" ++ "\x5e\x31\x62\x18\xcf\x51\xfc\x8d\x9e\xd8\x32\xf2\xda\xf1\x8b\x73" }, ++ { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", ++ "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39" ++ "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1" }, ++ { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ++ "\xdb\x4b\xfc\xbd\x4d\xa0\xcd\x85\xa6\x0c\x3c\x37\xd3\xfb\xd8\x80" ++ "\x5c\x77\xf1\x5f\xc6\xb1\xfd\xfe\x61\x4e\xe0\xa7\xc8\xfd\xb4\xc0" }, ++ { "123456789012345678901234567890123456789012345678901234567890" ++ "12345678901234567890", ++ "\xf3\x71\xbc\x4a\x31\x1f\x2b\x00\x9e\xef\x95\x2d\xd8\x3c\xa8\x0e" ++ "\x2b\x60\x02\x6c\x8e\x93\x55\x92\xd0\xf9\xc3\x08\x45\x3c\x81\x3e" } ++ }; ++#define ntests (sizeof (tests) / sizeof (tests[0])) ++ ++ ++static const struct ++{ ++ const char *salt; ++ const char *input; ++ const char *expected; ++} tests2[] = ++{ ++ { "$5$saltstring", "Hello world!", ++ "$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5" }, ++ { "$5$rounds=10000$saltstringsaltstring", "Hello world!", ++ "$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2." ++ "opqey6IcA" }, ++ { "$5$rounds=5000$toolongsaltstring", "This is just a test", ++ "$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8" ++ "mGRcvxa5" }, ++ { "$5$rounds=1400$anotherlongsaltstring", ++ "a very much longer text to encrypt. This one even stretches over more" ++ "than one line.", ++ "$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12" ++ "oP84Bnq1" }, ++ { "$5$rounds=77777$short", ++ "we have a short salt string but not a short password", ++ "$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/" }, ++ { "$5$rounds=123456$asaltof16chars..", "a short string", ++ "$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/" ++ "cZKmF/wJvD" }, ++ { "$5$rounds=10$roundstoolow", "the minimum number is still observed", ++ "$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL97" ++ "2bIC" }, ++}; ++#define ntests2 (sizeof (tests2) / sizeof (tests2[0])) ++ ++ ++int ++sha256_test (void) ++{ ++ struct sha256_ctx ctx; ++ char sum[32]; ++ int result = 0; ++ int cnt, i; ++ ++ for (cnt = 0; cnt < (int) ntests; ++cnt) ++ { ++ sha256_init_ctx (&ctx); ++ sha256_process_bytes (tests[cnt].input, strlen (tests[cnt].input), &ctx); ++ sha256_finish_ctx (&ctx, sum); ++ if (memcmp (tests[cnt].result, sum, 32) != 0) ++ { ++ printf ("test %d run %d failed\n", cnt, 1); ++ result = 1; ++ } ++ ++ sha256_init_ctx (&ctx); ++ for (i = 0; tests[cnt].input[i] != '\0'; ++i) ++ sha256_process_bytes (&tests[cnt].input[i], 1, &ctx); ++ sha256_finish_ctx (&ctx, sum); ++ if (memcmp (tests[cnt].result, sum, 32) != 0) ++ { ++ printf ("test %d run %d failed\n", cnt, 2); ++ result = 1; ++ } ++ } ++ ++ /* Test vector from FIPS 180-2: appendix B.3. */ ++ char buf[1000]; ++ memset (buf, 'a', sizeof (buf)); ++ sha256_init_ctx (&ctx); ++ for (i = 0; i < 1000; ++i) ++ sha256_process_bytes (buf, sizeof (buf), &ctx); ++ sha256_finish_ctx (&ctx, sum); ++ static const char expected[32] = ++ "\xcd\xc7\x6e\x5c\x99\x14\xfb\x92\x81\xa1\xc7\xe2\x84\xd7\x3e\x67" ++ "\xf1\x80\x9a\x48\xa4\x97\x20\x0e\x04\x6d\x39\xcc\xc7\x11\x2c\xd0"; ++ if (memcmp (expected, sum, 32) != 0) ++ { ++ printf ("test %d failed\n", cnt); ++ result = 1; ++ } ++ ++ for (cnt = 0; cnt < ntests2; ++cnt) ++ { ++ char *cp = sha256_crypt (tests2[cnt].input, tests2[cnt].salt); ++ ++ if (strcmp (cp, tests2[cnt].expected) != 0) ++ { ++ printf ("test %d: expected \"%s\", got \"%s\"\n", ++ cnt, tests2[cnt].expected, cp); ++ result = 1; ++ } ++ } ++ ++ if (result == 0) ++ printf ("all tests OK\n"); ++ ++ return result; ++} ++#endif +diff --git a/stage2/sha512crypt.c b/stage2/sha512crypt.c +new file mode 100644 +index 0000000..ff6cd26 +--- /dev/null ++++ b/stage2/sha512crypt.c +@@ -0,0 +1,795 @@ ++/* SHA512-based Unix crypt implementation. ++ Released into the Public Domain by Ulrich Drepper . ++ Adapted for grub by Miloslav Trmac . */ ++ ++#include ++#include ++ ++#include ++ ++typedef unsigned long long uint64_t; ++typedef size_t uintptr_t; ++#define alloca(SIZE) (__builtin_alloca (SIZE)) ++#define UINT64_C(X) X ## ULL ++#define MIN(a, b) ((a) < (b) ? (a) : (b)) ++#define MAX(a, b) ((a) > (b) ? (a) : (b)) ++ ++/* Structure to save state of computation between the single steps. */ ++struct sha512_ctx ++{ ++ uint64_t H[8]; ++ ++ uint64_t total[2]; ++ uint64_t buflen; ++ char buffer[256]; /* NB: always correctly aligned for uint64_t. */ ++}; ++ ++ ++#if 1 /* __BYTE_ORDER == __LITTLE_ENDIAN */ ++# define SWAP(n) \ ++ (((n) << 56) \ ++ | (((n) & 0xff00) << 40) \ ++ | (((n) & 0xff0000) << 24) \ ++ | (((n) & 0xff000000) << 8) \ ++ | (((n) >> 8) & 0xff000000) \ ++ | (((n) >> 24) & 0xff0000) \ ++ | (((n) >> 40) & 0xff00) \ ++ | ((n) >> 56)) ++#else ++# define SWAP(n) (n) ++#endif ++ ++ ++/* This array contains the bytes used to pad the buffer to the next ++ 64-byte boundary. (FIPS 180-2:5.1.2) */ ++static const unsigned char fillbuf[128] = { 0x80, 0 /* , 0, 0, ... */ }; ++ ++ ++/* Constants for SHA512 from FIPS 180-2:4.2.3. */ ++static const uint64_t K[80] = ++ { ++ UINT64_C (0x428a2f98d728ae22), UINT64_C (0x7137449123ef65cd), ++ UINT64_C (0xb5c0fbcfec4d3b2f), UINT64_C (0xe9b5dba58189dbbc), ++ UINT64_C (0x3956c25bf348b538), UINT64_C (0x59f111f1b605d019), ++ UINT64_C (0x923f82a4af194f9b), UINT64_C (0xab1c5ed5da6d8118), ++ UINT64_C (0xd807aa98a3030242), UINT64_C (0x12835b0145706fbe), ++ UINT64_C (0x243185be4ee4b28c), UINT64_C (0x550c7dc3d5ffb4e2), ++ UINT64_C (0x72be5d74f27b896f), UINT64_C (0x80deb1fe3b1696b1), ++ UINT64_C (0x9bdc06a725c71235), UINT64_C (0xc19bf174cf692694), ++ UINT64_C (0xe49b69c19ef14ad2), UINT64_C (0xefbe4786384f25e3), ++ UINT64_C (0x0fc19dc68b8cd5b5), UINT64_C (0x240ca1cc77ac9c65), ++ UINT64_C (0x2de92c6f592b0275), UINT64_C (0x4a7484aa6ea6e483), ++ UINT64_C (0x5cb0a9dcbd41fbd4), UINT64_C (0x76f988da831153b5), ++ UINT64_C (0x983e5152ee66dfab), UINT64_C (0xa831c66d2db43210), ++ UINT64_C (0xb00327c898fb213f), UINT64_C (0xbf597fc7beef0ee4), ++ UINT64_C (0xc6e00bf33da88fc2), UINT64_C (0xd5a79147930aa725), ++ UINT64_C (0x06ca6351e003826f), UINT64_C (0x142929670a0e6e70), ++ UINT64_C (0x27b70a8546d22ffc), UINT64_C (0x2e1b21385c26c926), ++ UINT64_C (0x4d2c6dfc5ac42aed), UINT64_C (0x53380d139d95b3df), ++ UINT64_C (0x650a73548baf63de), UINT64_C (0x766a0abb3c77b2a8), ++ UINT64_C (0x81c2c92e47edaee6), UINT64_C (0x92722c851482353b), ++ UINT64_C (0xa2bfe8a14cf10364), UINT64_C (0xa81a664bbc423001), ++ UINT64_C (0xc24b8b70d0f89791), UINT64_C (0xc76c51a30654be30), ++ UINT64_C (0xd192e819d6ef5218), UINT64_C (0xd69906245565a910), ++ UINT64_C (0xf40e35855771202a), UINT64_C (0x106aa07032bbd1b8), ++ UINT64_C (0x19a4c116b8d2d0c8), UINT64_C (0x1e376c085141ab53), ++ UINT64_C (0x2748774cdf8eeb99), UINT64_C (0x34b0bcb5e19b48a8), ++ UINT64_C (0x391c0cb3c5c95a63), UINT64_C (0x4ed8aa4ae3418acb), ++ UINT64_C (0x5b9cca4f7763e373), UINT64_C (0x682e6ff3d6b2b8a3), ++ UINT64_C (0x748f82ee5defb2fc), UINT64_C (0x78a5636f43172f60), ++ UINT64_C (0x84c87814a1f0ab72), UINT64_C (0x8cc702081a6439ec), ++ UINT64_C (0x90befffa23631e28), UINT64_C (0xa4506cebde82bde9), ++ UINT64_C (0xbef9a3f7b2c67915), UINT64_C (0xc67178f2e372532b), ++ UINT64_C (0xca273eceea26619c), UINT64_C (0xd186b8c721c0c207), ++ UINT64_C (0xeada7dd6cde0eb1e), UINT64_C (0xf57d4f7fee6ed178), ++ UINT64_C (0x06f067aa72176fba), UINT64_C (0x0a637dc5a2c898a6), ++ UINT64_C (0x113f9804bef90dae), UINT64_C (0x1b710b35131c471b), ++ UINT64_C (0x28db77f523047d84), UINT64_C (0x32caab7b40c72493), ++ UINT64_C (0x3c9ebe0a15c9bebc), UINT64_C (0x431d67c49c100d4c), ++ UINT64_C (0x4cc5d4becb3e42b6), UINT64_C (0x597f299cfc657e2a), ++ UINT64_C (0x5fcb6fab3ad6faec), UINT64_C (0x6c44198c4a475817) ++ }; ++ ++ ++/* Process LEN bytes of BUFFER, accumulating context into CTX. ++ It is assumed that LEN % 128 == 0. */ ++static void ++sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx) ++{ ++ const uint64_t *words = buffer; ++ size_t nwords = len / sizeof (uint64_t); ++ uint64_t a = ctx->H[0]; ++ uint64_t b = ctx->H[1]; ++ uint64_t c = ctx->H[2]; ++ uint64_t d = ctx->H[3]; ++ uint64_t e = ctx->H[4]; ++ uint64_t f = ctx->H[5]; ++ uint64_t g = ctx->H[6]; ++ uint64_t h = ctx->H[7]; ++ ++ /* First increment the byte count. FIPS 180-2 specifies the possible ++ length of the file up to 2^128 bits. Here we only compute the ++ number of bytes. Do a double word increment. */ ++ ctx->total[0] += len; ++ if (ctx->total[0] < len) ++ ++ctx->total[1]; ++ ++ /* Process all bytes in the buffer with 128 bytes in each round of ++ the loop. */ ++ while (nwords > 0) ++ { ++ uint64_t W[80]; ++ uint64_t a_save = a; ++ uint64_t b_save = b; ++ uint64_t c_save = c; ++ uint64_t d_save = d; ++ uint64_t e_save = e; ++ uint64_t f_save = f; ++ uint64_t g_save = g; ++ uint64_t h_save = h; ++ unsigned int t; ++ ++ /* Operators defined in FIPS 180-2:4.1.2. */ ++#define Ch(x, y, z) ((x & y) ^ (~x & z)) ++#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) ++#define S0(x) (CYCLIC (x, 28) ^ CYCLIC (x, 34) ^ CYCLIC (x, 39)) ++#define S1(x) (CYCLIC (x, 14) ^ CYCLIC (x, 18) ^ CYCLIC (x, 41)) ++#define R0(x) (CYCLIC (x, 1) ^ CYCLIC (x, 8) ^ (x >> 7)) ++#define R1(x) (CYCLIC (x, 19) ^ CYCLIC (x, 61) ^ (x >> 6)) ++ ++ /* It is unfortunate that C does not provide an operator for ++ cyclic rotation. Hope the C compiler is smart enough. */ ++#define CYCLIC(w, s) ((w >> s) | (w << (64 - s))) ++ ++ /* Compute the message schedule according to FIPS 180-2:6.3.2 step 2. */ ++ for (t = 0; t < 16; ++t) ++ { ++ W[t] = SWAP (*words); ++ ++words; ++ } ++ for (t = 16; t < 80; ++t) ++ W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16]; ++ ++ /* The actual computation according to FIPS 180-2:6.3.2 step 3. */ ++ for (t = 0; t < 80; ++t) ++ { ++ uint64_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t]; ++ uint64_t T2 = S0 (a) + Maj (a, b, c); ++ h = g; ++ g = f; ++ f = e; ++ e = d + T1; ++ d = c; ++ c = b; ++ b = a; ++ a = T1 + T2; ++ } ++ ++ /* Add the starting values of the context according to FIPS 180-2:6.3.2 ++ step 4. */ ++ a += a_save; ++ b += b_save; ++ c += c_save; ++ d += d_save; ++ e += e_save; ++ f += f_save; ++ g += g_save; ++ h += h_save; ++ ++ /* Prepare for the next round. */ ++ nwords -= 16; ++ } ++ ++ /* Put checksum in context given as argument. */ ++ ctx->H[0] = a; ++ ctx->H[1] = b; ++ ctx->H[2] = c; ++ ctx->H[3] = d; ++ ctx->H[4] = e; ++ ctx->H[5] = f; ++ ctx->H[6] = g; ++ ctx->H[7] = h; ++} ++ ++ ++/* Initialize structure containing state of computation. ++ (FIPS 180-2:5.3.3) */ ++static void ++sha512_init_ctx (struct sha512_ctx *ctx) ++{ ++ ctx->H[0] = UINT64_C (0x6a09e667f3bcc908); ++ ctx->H[1] = UINT64_C (0xbb67ae8584caa73b); ++ ctx->H[2] = UINT64_C (0x3c6ef372fe94f82b); ++ ctx->H[3] = UINT64_C (0xa54ff53a5f1d36f1); ++ ctx->H[4] = UINT64_C (0x510e527fade682d1); ++ ctx->H[5] = UINT64_C (0x9b05688c2b3e6c1f); ++ ctx->H[6] = UINT64_C (0x1f83d9abfb41bd6b); ++ ctx->H[7] = UINT64_C (0x5be0cd19137e2179); ++ ++ ctx->total[0] = ctx->total[1] = 0; ++ ctx->buflen = 0; ++} ++ ++ ++/* Process the remaining bytes in the internal buffer and the usual ++ prolog according to the standard and write the result to RESBUF. ++ ++ IMPORTANT: On some systems it is required that RESBUF is correctly ++ aligned for a 32 bits value. */ ++static void * ++sha512_finish_ctx (struct sha512_ctx *ctx, void *resbuf) ++{ ++ /* Take yet unprocessed bytes into account. */ ++ uint64_t bytes = ctx->buflen; ++ size_t pad; ++ unsigned int i; ++ ++ /* Now count remaining bytes. */ ++ ctx->total[0] += bytes; ++ if (ctx->total[0] < bytes) ++ ++ctx->total[1]; ++ ++ pad = bytes >= 112 ? 128 + 112 - bytes : 112 - bytes; ++ memcpy (&ctx->buffer[bytes], fillbuf, pad); ++ ++ /* Put the 128-bit file length in *bits* at the end of the buffer. */ ++ *(uint64_t *) &ctx->buffer[bytes + pad + 8] = SWAP (ctx->total[0] << 3); ++ *(uint64_t *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) | ++ (ctx->total[0] >> 61)); ++ ++ /* Process last bytes. */ ++ sha512_process_block (ctx->buffer, bytes + pad + 16, ctx); ++ ++ /* Put result from CTX in first 64 bytes following RESBUF. */ ++ for (i = 0; i < 8; ++i) ++ ((uint64_t *) resbuf)[i] = SWAP (ctx->H[i]); ++ ++ return resbuf; ++} ++ ++ ++static void ++sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx) ++{ ++ /* When we already have some bits in our internal buffer concatenate ++ both inputs first. */ ++ if (ctx->buflen != 0) ++ { ++ size_t left_over = ctx->buflen; ++ size_t add = 256 - left_over > len ? len : 256 - left_over; ++ ++ memcpy (&ctx->buffer[left_over], buffer, add); ++ ctx->buflen += add; ++ ++ if (ctx->buflen > 128) ++ { ++ sha512_process_block (ctx->buffer, ctx->buflen & ~127, ctx); ++ ++ ctx->buflen &= 127; ++ /* The regions in the following copy operation cannot overlap. */ ++ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~127], ++ ctx->buflen); ++ } ++ ++ buffer = (const char *) buffer + add; ++ len -= add; ++ } ++ ++ /* Process available complete blocks. */ ++ if (len >= 128) ++ { ++/* To check alignment gcc has an appropriate operator. Other ++ compilers don't. */ ++# if __GNUC__ >= 2 ++# define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint64_t) != 0) ++# else ++# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint64_t) != 0) ++# endif ++ if (UNALIGNED_P (buffer)) ++ while (len > 128) ++ { ++ sha512_process_block (memcpy (ctx->buffer, buffer, 128), 128, ++ ctx); ++ buffer = (const char *) buffer + 128; ++ len -= 128; ++ } ++ else ++ { ++ sha512_process_block (buffer, len & ~127, ctx); ++ buffer = (const char *) buffer + (len & ~127); ++ len &= 127; ++ } ++ } ++ ++ /* Move remaining bytes into internal buffer. */ ++ if (len > 0) ++ { ++ size_t left_over = ctx->buflen; ++ ++ memcpy (&ctx->buffer[left_over], buffer, len); ++ left_over += len; ++ if (left_over >= 128) ++ { ++ sha512_process_block (ctx->buffer, 128, ctx); ++ left_over -= 128; ++ memcpy (ctx->buffer, &ctx->buffer[128], left_over); ++ } ++ ctx->buflen = left_over; ++ } ++} ++ ++ ++/* Define our magic string to mark salt for SHA512 "encryption" ++ replacement. */ ++static const char sha512_salt_prefix[] = "$6$"; ++ ++/* Prefix for optional rounds specification. */ ++static const char sha512_rounds_prefix[] = "rounds="; ++ ++/* Maximum salt string length. */ ++#define SALT_LEN_MAX 16 ++/* Default number of rounds if not explicitly specified. */ ++#define ROUNDS_DEFAULT 5000 ++/* Minimum number of rounds. */ ++#define ROUNDS_MIN 1000 ++/* Maximum number of rounds. */ ++#define ROUNDS_MAX 999999999 ++ ++/* Table with characters for base64 transformation. */ ++static const char b64t[64] = ++"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; ++ ++ ++static char * ++sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen) ++{ ++ unsigned char alt_result[64] ++ __attribute__ ((__aligned__ (__alignof__ (uint64_t)))); ++ unsigned char temp_result[64] ++ __attribute__ ((__aligned__ (__alignof__ (uint64_t)))); ++ struct sha512_ctx ctx; ++ struct sha512_ctx alt_ctx; ++ size_t salt_len; ++ size_t key_len; ++ size_t cnt; ++ char *cp; ++ char *copied_key = NULL; ++ char *copied_salt = NULL; ++ char *p_bytes; ++ char *s_bytes; ++ /* Default number of rounds. */ ++ size_t rounds = ROUNDS_DEFAULT; ++ bool rounds_custom = false; ++ ++ /* Find beginning of salt string. The prefix should normally always ++ be present. Just in case it is not. */ ++ if (grub_memcmp (sha512_salt_prefix, salt, ++ sizeof (sha512_salt_prefix) - 1) == 0) ++ /* Skip salt prefix. */ ++ salt += sizeof (sha512_salt_prefix) - 1; ++ ++ if (grub_memcmp (salt, sha512_rounds_prefix, ++ sizeof (sha512_rounds_prefix) - 1) == 0) ++ { ++ const char *num = salt + sizeof (sha512_rounds_prefix) - 1; ++ char *endp = (char *)num; ++ int srounds = 0; ++ if (*endp == '0' && tolower (endp[1]) == 'x') ++ /* This would be interpreted as hexadecimal by safe_parse_maxint(). */ ++ endp++; ++ else ++ /* On error, endp and srounds is not changed. */ ++ safe_parse_maxint(&endp, &srounds); ++ if (*endp == '$') ++ { ++ salt = endp + 1; ++ rounds = MAX (ROUNDS_MIN, MIN (srounds, ROUNDS_MAX)); ++ rounds_custom = true; ++ } ++ } ++ ++ salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX); ++ key_len = strlen (key); ++ ++ if ((key - (char *) 0) % __alignof__ (uint64_t) != 0) ++ { ++ char *tmp = (char *) alloca (key_len + __alignof__ (uint64_t)); ++ key = copied_key = ++ memcpy (tmp + __alignof__ (uint64_t) ++ - (tmp - (char *) 0) % __alignof__ (uint64_t), ++ key, key_len); ++ } ++ ++ if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0) ++ { ++ char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t)); ++ salt = copied_salt = ++ memcpy (tmp + __alignof__ (uint64_t) ++ - (tmp - (char *) 0) % __alignof__ (uint64_t), ++ salt, salt_len); ++ } ++ ++ /* Prepare for the real work. */ ++ sha512_init_ctx (&ctx); ++ ++ /* Add the key string. */ ++ sha512_process_bytes (key, key_len, &ctx); ++ ++ /* The last part is the salt string. This must be at most 16 ++ characters and it ends at the first `$' character (for ++ compatibility with existing implementations). */ ++ sha512_process_bytes (salt, salt_len, &ctx); ++ ++ ++ /* Compute alternate SHA512 sum with input KEY, SALT, and KEY. The ++ final result will be added to the first context. */ ++ sha512_init_ctx (&alt_ctx); ++ ++ /* Add key. */ ++ sha512_process_bytes (key, key_len, &alt_ctx); ++ ++ /* Add salt. */ ++ sha512_process_bytes (salt, salt_len, &alt_ctx); ++ ++ /* Add key again. */ ++ sha512_process_bytes (key, key_len, &alt_ctx); ++ ++ /* Now get result of this (64 bytes) and add it to the other ++ context. */ ++ sha512_finish_ctx (&alt_ctx, alt_result); ++ ++ /* Add for any character in the key one byte of the alternate sum. */ ++ for (cnt = key_len; cnt > 64; cnt -= 64) ++ sha512_process_bytes (alt_result, 64, &ctx); ++ sha512_process_bytes (alt_result, cnt, &ctx); ++ ++ /* Take the binary representation of the length of the key and for every ++ 1 add the alternate sum, for every 0 the key. */ ++ for (cnt = key_len; cnt > 0; cnt >>= 1) ++ if ((cnt & 1) != 0) ++ sha512_process_bytes (alt_result, 64, &ctx); ++ else ++ sha512_process_bytes (key, key_len, &ctx); ++ ++ /* Create intermediate result. */ ++ sha512_finish_ctx (&ctx, alt_result); ++ ++ /* Start computation of P byte sequence. */ ++ sha512_init_ctx (&alt_ctx); ++ ++ /* For every character in the password add the entire password. */ ++ for (cnt = 0; cnt < key_len; ++cnt) ++ sha512_process_bytes (key, key_len, &alt_ctx); ++ ++ /* Finish the digest. */ ++ sha512_finish_ctx (&alt_ctx, temp_result); ++ ++ /* Create byte sequence P. */ ++ cp = p_bytes = alloca (key_len); ++ for (cnt = key_len; cnt >= 64; cnt -= 64) ++ { ++ memcpy (cp, temp_result, 64); ++ cp += 64; ++ } ++ memcpy (cp, temp_result, cnt); ++ ++ /* Start computation of S byte sequence. */ ++ sha512_init_ctx (&alt_ctx); ++ ++ /* For every character in the password add the entire password. */ ++ for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt) ++ sha512_process_bytes (salt, salt_len, &alt_ctx); ++ ++ /* Finish the digest. */ ++ sha512_finish_ctx (&alt_ctx, temp_result); ++ ++ /* Create byte sequence S. */ ++ cp = s_bytes = alloca (salt_len); ++ for (cnt = salt_len; cnt >= 64; cnt -= 64) ++ { ++ memcpy (cp, temp_result, 64); ++ cp += 64; ++ } ++ memcpy (cp, temp_result, cnt); ++ ++ /* Repeatedly run the collected hash value through SHA512 to burn ++ CPU cycles. */ ++ for (cnt = 0; cnt < rounds; ++cnt) ++ { ++ /* New context. */ ++ sha512_init_ctx (&ctx); ++ ++ /* Add key or last result. */ ++ if ((cnt & 1) != 0) ++ sha512_process_bytes (p_bytes, key_len, &ctx); ++ else ++ sha512_process_bytes (alt_result, 64, &ctx); ++ ++ /* Add salt for numbers not divisible by 3. */ ++ if (cnt % 3 != 0) ++ sha512_process_bytes (s_bytes, salt_len, &ctx); ++ ++ /* Add key for numbers not divisible by 7. */ ++ if (cnt % 7 != 0) ++ sha512_process_bytes (p_bytes, key_len, &ctx); ++ ++ /* Add key or last result. */ ++ if ((cnt & 1) != 0) ++ sha512_process_bytes (alt_result, 64, &ctx); ++ else ++ sha512_process_bytes (p_bytes, key_len, &ctx); ++ ++ /* Create intermediate result. */ ++ sha512_finish_ctx (&ctx, alt_result); ++ } ++ ++ /* Now we can construct the result string. It consists of three ++ parts. */ ++ cp = stpncpy (buffer, sha512_salt_prefix, MAX (0, buflen)); ++ buflen -= sizeof (sha512_salt_prefix) - 1; ++ ++ if (rounds_custom) ++ { ++ char sbuf[64]; ++ grub_sprintf (sbuf, "%s%llu$", sha512_rounds_prefix, ++ (unsigned long long)rounds); ++ size_t n = strlen (sbuf); ++ memcpy (cp, sbuf, MIN (MAX (0, buflen), n)); ++ cp += n; ++ buflen -= n; ++ } ++ ++ cp = stpncpy (cp, salt, MIN ((size_t) MAX (0, buflen), salt_len)); ++ buflen -= MIN ((size_t) MAX (0, buflen), salt_len); ++ ++ if (buflen > 0) ++ { ++ *cp++ = '$'; ++ --buflen; ++ } ++ ++#define b64_from_24bit(B2, B1, B0, N) \ ++ do { \ ++ unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ ++ int n = (N); \ ++ while (n-- > 0 && buflen > 0) \ ++ { \ ++ *cp++ = b64t[w & 0x3f]; \ ++ --buflen; \ ++ w >>= 6; \ ++ } \ ++ } while (0) ++ ++ b64_from_24bit (alt_result[0], alt_result[21], alt_result[42], 4); ++ b64_from_24bit (alt_result[22], alt_result[43], alt_result[1], 4); ++ b64_from_24bit (alt_result[44], alt_result[2], alt_result[23], 4); ++ b64_from_24bit (alt_result[3], alt_result[24], alt_result[45], 4); ++ b64_from_24bit (alt_result[25], alt_result[46], alt_result[4], 4); ++ b64_from_24bit (alt_result[47], alt_result[5], alt_result[26], 4); ++ b64_from_24bit (alt_result[6], alt_result[27], alt_result[48], 4); ++ b64_from_24bit (alt_result[28], alt_result[49], alt_result[7], 4); ++ b64_from_24bit (alt_result[50], alt_result[8], alt_result[29], 4); ++ b64_from_24bit (alt_result[9], alt_result[30], alt_result[51], 4); ++ b64_from_24bit (alt_result[31], alt_result[52], alt_result[10], 4); ++ b64_from_24bit (alt_result[53], alt_result[11], alt_result[32], 4); ++ b64_from_24bit (alt_result[12], alt_result[33], alt_result[54], 4); ++ b64_from_24bit (alt_result[34], alt_result[55], alt_result[13], 4); ++ b64_from_24bit (alt_result[56], alt_result[14], alt_result[35], 4); ++ b64_from_24bit (alt_result[15], alt_result[36], alt_result[57], 4); ++ b64_from_24bit (alt_result[37], alt_result[58], alt_result[16], 4); ++ b64_from_24bit (alt_result[59], alt_result[17], alt_result[38], 4); ++ b64_from_24bit (alt_result[18], alt_result[39], alt_result[60], 4); ++ b64_from_24bit (alt_result[40], alt_result[61], alt_result[19], 4); ++ b64_from_24bit (alt_result[62], alt_result[20], alt_result[41], 4); ++ b64_from_24bit (0, 0, alt_result[63], 2); ++ ++ if (buflen <= 0) ++ buffer = NULL; ++ else ++ *cp = '\0'; /* Terminate the string. */ ++ ++ /* Clear the buffer for the intermediate result so that people ++ attaching to processes or reading core dumps cannot get any ++ information. We do it in this way to clear correct_words[] ++ inside the SHA512 implementation as well. */ ++ sha512_init_ctx (&ctx); ++ sha512_finish_ctx (&ctx, alt_result); ++ memset (temp_result, '\0', sizeof (temp_result)); ++ memset (p_bytes, '\0', key_len); ++ memset (s_bytes, '\0', salt_len); ++ memset (&ctx, '\0', sizeof (ctx)); ++ memset (&alt_ctx, '\0', sizeof (alt_ctx)); ++ if (copied_key != NULL) ++ memset (copied_key, '\0', key_len); ++ if (copied_salt != NULL) ++ memset (copied_salt, '\0', salt_len); ++ ++ return buffer; ++} ++ ++ ++/* This entry point is equivalent to the `crypt' function in Unix ++ libcs. */ ++char * ++sha512_crypt (const char *key, const char *salt) ++{ ++ /* We don't want to have an arbitrary limit in the size of the ++ password. We can compute an upper bound for the size of the ++ result in advance and so we can prepare the buffer we pass to ++ `sha512_crypt_r'. */ ++ static char buffer[sizeof (sha512_salt_prefix) - 1 ++ + sizeof (sha512_rounds_prefix) + 9 + 1 ++ + 256 + 1 + 86 + 1]; /* 256 bytes for salt */ ++ int needed = (sizeof (sha512_salt_prefix) - 1 ++ + sizeof (sha512_rounds_prefix) + 9 + 1 ++ + strlen (salt) + 1 + 86 + 1); ++ ++ if (sizeof (buffer) < needed) ++ return NULL; ++ ++ return sha512_crypt_r (key, salt, buffer, sizeof (buffer)); ++} ++ ++ ++#ifdef TEST ++static const struct ++{ ++ const char *input; ++ const char result[64]; ++} tests[] = ++ { ++ /* Test vectors from FIPS 180-2: appendix C.1. */ ++ { "abc", ++ "\xdd\xaf\x35\xa1\x93\x61\x7a\xba\xcc\x41\x73\x49\xae\x20\x41\x31" ++ "\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2\x0a\x9e\xee\xe6\x4b\x55\xd3\x9a" ++ "\x21\x92\x99\x2a\x27\x4f\xc1\xa8\x36\xba\x3c\x23\xa3\xfe\xeb\xbd" ++ "\x45\x4d\x44\x23\x64\x3c\xe8\x0e\x2a\x9a\xc9\x4f\xa5\x4c\xa4\x9f" }, ++ /* Test vectors from FIPS 180-2: appendix C.2. */ ++ { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" ++ "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", ++ "\x8e\x95\x9b\x75\xda\xe3\x13\xda\x8c\xf4\xf7\x28\x14\xfc\x14\x3f" ++ "\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1\x72\x99\xae\xad\xb6\x88\x90\x18" ++ "\x50\x1d\x28\x9e\x49\x00\xf7\xe4\x33\x1b\x99\xde\xc4\xb5\x43\x3a" ++ "\xc7\xd3\x29\xee\xb6\xdd\x26\x54\x5e\x96\xe5\x5b\x87\x4b\xe9\x09" }, ++ /* Test vectors from the NESSIE project. */ ++ { "", ++ "\xcf\x83\xe1\x35\x7e\xef\xb8\xbd\xf1\x54\x28\x50\xd6\x6d\x80\x07" ++ "\xd6\x20\xe4\x05\x0b\x57\x15\xdc\x83\xf4\xa9\x21\xd3\x6c\xe9\xce" ++ "\x47\xd0\xd1\x3c\x5d\x85\xf2\xb0\xff\x83\x18\xd2\x87\x7e\xec\x2f" ++ "\x63\xb9\x31\xbd\x47\x41\x7a\x81\xa5\x38\x32\x7a\xf9\x27\xda\x3e" }, ++ { "a", ++ "\x1f\x40\xfc\x92\xda\x24\x16\x94\x75\x09\x79\xee\x6c\xf5\x82\xf2" ++ "\xd5\xd7\xd2\x8e\x18\x33\x5d\xe0\x5a\xbc\x54\xd0\x56\x0e\x0f\x53" ++ "\x02\x86\x0c\x65\x2b\xf0\x8d\x56\x02\x52\xaa\x5e\x74\x21\x05\x46" ++ "\xf3\x69\xfb\xbb\xce\x8c\x12\xcf\xc7\x95\x7b\x26\x52\xfe\x9a\x75" }, ++ { "message digest", ++ "\x10\x7d\xbf\x38\x9d\x9e\x9f\x71\xa3\xa9\x5f\x6c\x05\x5b\x92\x51" ++ "\xbc\x52\x68\xc2\xbe\x16\xd6\xc1\x34\x92\xea\x45\xb0\x19\x9f\x33" ++ "\x09\xe1\x64\x55\xab\x1e\x96\x11\x8e\x8a\x90\x5d\x55\x97\xb7\x20" ++ "\x38\xdd\xb3\x72\xa8\x98\x26\x04\x6d\xe6\x66\x87\xbb\x42\x0e\x7c" }, ++ { "abcdefghijklmnopqrstuvwxyz", ++ "\x4d\xbf\xf8\x6c\xc2\xca\x1b\xae\x1e\x16\x46\x8a\x05\xcb\x98\x81" ++ "\xc9\x7f\x17\x53\xbc\xe3\x61\x90\x34\x89\x8f\xaa\x1a\xab\xe4\x29" ++ "\x95\x5a\x1b\xf8\xec\x48\x3d\x74\x21\xfe\x3c\x16\x46\x61\x3a\x59" ++ "\xed\x54\x41\xfb\x0f\x32\x13\x89\xf7\x7f\x48\xa8\x79\xc7\xb1\xf1" }, ++ { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", ++ "\x20\x4a\x8f\xc6\xdd\xa8\x2f\x0a\x0c\xed\x7b\xeb\x8e\x08\xa4\x16" ++ "\x57\xc1\x6e\xf4\x68\xb2\x28\xa8\x27\x9b\xe3\x31\xa7\x03\xc3\x35" ++ "\x96\xfd\x15\xc1\x3b\x1b\x07\xf9\xaa\x1d\x3b\xea\x57\x78\x9c\xa0" ++ "\x31\xad\x85\xc7\xa7\x1d\xd7\x03\x54\xec\x63\x12\x38\xca\x34\x45" }, ++ { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ++ "\x1e\x07\xbe\x23\xc2\x6a\x86\xea\x37\xea\x81\x0c\x8e\xc7\x80\x93" ++ "\x52\x51\x5a\x97\x0e\x92\x53\xc2\x6f\x53\x6c\xfc\x7a\x99\x96\xc4" ++ "\x5c\x83\x70\x58\x3e\x0a\x78\xfa\x4a\x90\x04\x1d\x71\xa4\xce\xab" ++ "\x74\x23\xf1\x9c\x71\xb9\xd5\xa3\xe0\x12\x49\xf0\xbe\xbd\x58\x94" }, ++ { "123456789012345678901234567890123456789012345678901234567890" ++ "12345678901234567890", ++ "\x72\xec\x1e\xf1\x12\x4a\x45\xb0\x47\xe8\xb7\xc7\x5a\x93\x21\x95" ++ "\x13\x5b\xb6\x1d\xe2\x4e\xc0\xd1\x91\x40\x42\x24\x6e\x0a\xec\x3a" ++ "\x23\x54\xe0\x93\xd7\x6f\x30\x48\xb4\x56\x76\x43\x46\x90\x0c\xb1" ++ "\x30\xd2\xa4\xfd\x5d\xd1\x6a\xbb\x5e\x30\xbc\xb8\x50\xde\xe8\x43" } ++ }; ++#define ntests (sizeof (tests) / sizeof (tests[0])) ++ ++ ++static const struct ++{ ++ const char *salt; ++ const char *input; ++ const char *expected; ++} tests2[] = ++{ ++ { "$6$saltstring", "Hello world!", ++ "$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJu" ++ "esI68u4OTLiBFdcbYEdFCoEOfaS35inz1" }, ++ { "$6$rounds=10000$saltstringsaltstring", "Hello world!", ++ "$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sb" ++ "HbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v." }, ++ { "$6$rounds=5000$toolongsaltstring", "This is just a test", ++ "$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQ" ++ "zQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0" }, ++ { "$6$rounds=1400$anotherlongsaltstring", ++ "a very much longer text to encrypt. This one even stretches over more" ++ "than one line.", ++ "$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wP" ++ "vMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1" }, ++ { "$6$rounds=77777$short", ++ "we have a short salt string but not a short password", ++ "$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0g" ++ "ge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0" }, ++ { "$6$rounds=123456$asaltof16chars..", "a short string", ++ "$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwc" ++ "elCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1" }, ++ { "$6$rounds=10$roundstoolow", "the minimum number is still observed", ++ "$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1x" ++ "hLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX." }, ++}; ++#define ntests2 (sizeof (tests2) / sizeof (tests2[0])) ++ ++ ++int ++sha512_test (void) ++{ ++ struct sha512_ctx ctx; ++ char sum[64]; ++ int result = 0; ++ int cnt, i; ++ ++ for (cnt = 0; cnt < (int) ntests; ++cnt) ++ { ++ sha512_init_ctx (&ctx); ++ sha512_process_bytes (tests[cnt].input, strlen (tests[cnt].input), &ctx); ++ sha512_finish_ctx (&ctx, sum); ++ if (memcmp (tests[cnt].result, sum, 64) != 0) ++ { ++ printf ("test %d run %d failed\n", cnt, 1); ++ result = 1; ++ } ++ ++ sha512_init_ctx (&ctx); ++ for (i = 0; tests[cnt].input[i] != '\0'; ++i) ++ sha512_process_bytes (&tests[cnt].input[i], 1, &ctx); ++ sha512_finish_ctx (&ctx, sum); ++ if (memcmp (tests[cnt].result, sum, 64) != 0) ++ { ++ printf ("test %d run %d failed\n", cnt, 2); ++ result = 1; ++ } ++ } ++ ++ /* Test vector from FIPS 180-2: appendix C.3. */ ++ char buf[1000]; ++ memset (buf, 'a', sizeof (buf)); ++ sha512_init_ctx (&ctx); ++ for (i = 0; i < 1000; ++i) ++ sha512_process_bytes (buf, sizeof (buf), &ctx); ++ sha512_finish_ctx (&ctx, sum); ++ static const char expected[64] = ++ "\xe7\x18\x48\x3d\x0c\xe7\x69\x64\x4e\x2e\x42\xc7\xbc\x15\xb4\x63" ++ "\x8e\x1f\x98\xb1\x3b\x20\x44\x28\x56\x32\xa8\x03\xaf\xa9\x73\xeb" ++ "\xde\x0f\xf2\x44\x87\x7e\xa6\x0a\x4c\xb0\x43\x2c\xe5\x77\xc3\x1b" ++ "\xeb\x00\x9c\x5c\x2c\x49\xaa\x2e\x4e\xad\xb2\x17\xad\x8c\xc0\x9b"; ++ if (memcmp (expected, sum, 64) != 0) ++ { ++ printf ("test %d failed\n", cnt); ++ result = 1; ++ } ++ ++ for (cnt = 0; cnt < ntests2; ++cnt) ++ { ++ char *cp = sha512_crypt (tests2[cnt].input, tests2[cnt].salt); ++ ++ if (strcmp (cp, tests2[cnt].expected) != 0) ++ { ++ printf ("test %d: expected \"%s\", got \"%s\"\n", ++ cnt, tests2[cnt].expected, cp); ++ result = 1; ++ } ++ } ++ ++ if (result == 0) ++ printf ("all tests OK\n"); ++ ++ return result; ++} ++#endif +diff --git a/stage2/shared.h b/stage2/shared.h +index 77eef11..b56b44b 100644 +--- a/stage2/shared.h ++++ b/stage2/shared.h +@@ -35,9 +35,10 @@ + #endif + + /* Maybe redirect memory requests through grub_scratch_mem. */ +-#ifdef GRUB_UTIL +-extern char *grub_scratch_mem; +-# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem) ++#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) ++#define GRUB_SCRATCH_MEM_SIZE 0x400000 ++extern void *grub_scratch_mem; ++# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem) + # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4) + #else + # define RAW_ADDR(x) (x) +@@ -56,15 +57,15 @@ extern char *grub_scratch_mem; + #define NEW_HEAPSIZE 1500 + + /* 512-byte scratch area */ +-#define SCRATCHADDR RAW_ADDR (0x77e00) +-#define SCRATCHSEG RAW_SEG (0x77e0) ++#define SCRATCHADDR RAW_ADDR (0x77000) ++#define SCRATCHSEG RAW_SEG (0x7700) + + /* +- * This is the location of the raw device buffer. It is 31.5K ++ * This is the location of the raw device buffer. It is 28K + * in size. + */ + +-#define BUFFERLEN 0x7e00 ++#define BUFFERLEN 0x7000 + #define BUFFERADDR RAW_ADDR (0x70000) + #define BUFFERSEG RAW_SEG (0x7000) + +@@ -79,6 +80,8 @@ extern char *grub_scratch_mem; + #define BIOSDISK_FLAG_LBA_EXTENSION 0x1 + #define BIOSDISK_FLAG_CDROM 0x2 + ++#define MAX_HD_NUM 128 ++ + /* + * This is the filesystem (not raw device) buffer. + * It is 32K in size, do not overrun! +@@ -127,7 +130,7 @@ extern char *grub_scratch_mem; + #define MENU_BUFLEN (0x8000 + PASSWORD_BUF - MENU_BUF) + + /* The size of the drive map. */ +-#define DRIVE_MAP_SIZE 8 ++#define DRIVE_MAP_SIZE 128 + + /* The size of the key map. */ + #define KEY_MAP_SIZE 128 +@@ -160,16 +163,18 @@ extern char *grub_scratch_mem; + #define LINUX_VID_MODE_ASK 0xFFFD + + #define LINUX_CL_OFFSET 0x9000 +-#define LINUX_CL_END_OFFSET 0x90FF +-#define LINUX_SETUP_MOVE_SIZE 0x9100 ++#define LINUX_CL_END_OFFSET 0x97FF ++#define LINUX_SETUP_MOVE_SIZE 0x9800 + #define LINUX_CL_MAGIC 0xA33F + + /* + * General disk stuff + */ + ++#ifndef PLATFORM_EFI + #define SECTOR_SIZE 0x200 + #define SECTOR_BITS 9 ++#endif /* PLATFORM_EFI */ + #define BIOS_FLAG_FIXED_DISK 0x80 + + #define BOOTSEC_LOCATION RAW_ADDR (0x7C00) +@@ -200,6 +205,8 @@ extern char *grub_scratch_mem; + #define STAGE2_FORCE_LBA 0x11 + #define STAGE2_VER_STR_OFFS 0x12 + ++#define STAGE2_ONCEONLY_ENTRY 0x10000 ++ + /* Stage 2 identifiers */ + #define STAGE2_ID_STAGE2 0 + #define STAGE2_ID_FFS_STAGE1_5 1 +@@ -360,7 +367,7 @@ extern char *grub_scratch_mem; + #define memcpy grub_memmove /* we don't need a separate memcpy */ + #define memset grub_memset + #define isspace grub_isspace +-#define printf grub_printf ++#define printf(format...) grub_printf(format) + #define sprintf grub_sprintf + #undef putchar + #define putchar grub_putchar +@@ -371,14 +378,24 @@ extern char *grub_scratch_mem; + #define tolower grub_tolower + #define strlen grub_strlen + #define strcpy grub_strcpy ++#define stpncpy grub_stpncpy ++#define strspn grub_strspn ++#define strcspn grub_strcspn ++#define strtok_r grub_strtok_r ++#define strchr grub_strchr ++#define strrchr grub_strrchr ++#define strnchr grub_strnchr ++#define strncpy grub_strncpy ++#define strncasecmp grub_strncasecmp + #endif /* WITHOUT_LIBC_STUBS */ + +- + #ifndef ASM_FILE + /* + * Below this should be ONLY defines and other constructs for C code. + */ + ++#include ++ + /* multiboot stuff */ + + #include "mb_header.h" +@@ -400,30 +417,33 @@ struct linux_kernel_header + unsigned short root_dev; /* Default root device number */ + unsigned short boot_flag; /* 0xAA55 magic number */ + unsigned short jump; /* Jump instruction */ +- unsigned long header; /* Magic signature "HdrS" */ ++ unsigned int header; /* Magic signature "HdrS" */ + unsigned short version; /* Boot protocol version supported */ +- unsigned long realmode_swtch; /* Boot loader hook */ +- unsigned long start_sys; /* Points to kernel version string */ ++ unsigned int realmode_swtch; /* Boot loader hook */ ++ unsigned int start_sys; /* Points to kernel version string */ + unsigned char type_of_loader; /* Boot loader identifier */ + unsigned char loadflags; /* Boot protocol option flags */ + unsigned short setup_move_size; /* Move to high memory size */ +- unsigned long code32_start; /* Boot loader hook */ +- unsigned long ramdisk_image; /* initrd load address */ +- unsigned long ramdisk_size; /* initrd size */ +- unsigned long bootsect_kludge; /* obsolete */ ++ unsigned int code32_start; /* Boot loader hook */ ++ unsigned int ramdisk_image; /* initrd load address */ ++ unsigned int ramdisk_size; /* initrd size */ ++ unsigned int bootsect_kludge; /* obsolete */ + unsigned short heap_end_ptr; /* Free memory after setup end */ + unsigned short pad1; /* Unused */ + char *cmd_line_ptr; /* Points to the kernel command line */ +- unsigned long initrd_addr_max; /* The highest address of initrd */ ++ unsigned int initrd_addr_max; /* The highest address of initrd */ ++ unsigned int kernel_alignment; /* Physical addr alignment required for kernel */ ++ unsigned int relocatable_kernel; /* Whether kernel is relocatable or not */ ++ unsigned int cmdline_size; /* Maximum size of the kernel command line */ + } __attribute__ ((packed)); + + /* Memory map address range descriptor used by GET_MMAP_ENTRY. */ + struct mmar_desc + { +- unsigned long desc_len; /* Size of this descriptor. */ ++ unsigned int desc_len; /* Size of this descriptor. */ + unsigned long long addr; /* Base address. */ + unsigned long long length; /* Length in bytes. */ +- unsigned long type; /* Type of address range. */ ++ unsigned int type; /* Type of address range. */ + } __attribute__ ((packed)); + + /* VBE controller information. */ +@@ -600,6 +620,7 @@ typedef enum + { + PASSWORD_PLAIN, + PASSWORD_MD5, ++ PASSWORD_ENCRYPTED, + PASSWORD_UNSUPPORTED + } + password_t; +@@ -627,8 +648,16 @@ extern void (*disk_read_func) (int, int, int); + #ifndef STAGE1_5 + /* The flag for debug mode. */ + extern int debug; ++extern int debug_graphics; + #endif /* STAGE1_5 */ + ++/* Verbose mode flag. */ ++extern int grub_verbose; ++#define verbose_printf(format...) \ ++ do { if (grub_verbose) printf(format); } while (0) ++#define grub_verbose_printf(format...) \ ++ do { if (grub_verbose) grub_printf(format); } while (0) ++ + extern unsigned long current_drive; + extern unsigned long current_partition; + +@@ -666,6 +695,8 @@ extern struct geometry buf_geom; + extern int filepos; + extern int filemax; + ++extern int silent_grub; ++ + /* + * Common BIOS/boot data. + */ +@@ -804,11 +835,17 @@ int getkey (void); + available. */ + int checkkey (void); + ++/* Return keyboard modifier status. */ ++int ++keystatus (void); ++ + /* Low-level disk I/O */ + int get_diskinfo (int drive, struct geometry *geometry); + int biosdisk (int subfunc, int drive, struct geometry *geometry, + int sector, int nsec, int segment); + void stop_floppy (void); ++int get_sector_size (int drive); ++int get_sector_bits (int drive); + + /* Command-line interface functions. */ + #ifndef STAGE1_5 +@@ -860,17 +897,25 @@ void init_builtins (void); + void init_config (void); + char *skip_to (int after_equal, char *cmdline); + struct builtin *find_command (char *command); +-void print_cmdline_message (int forever); + void enter_cmdline (char *heap, int forever); + int run_script (char *script, char *heap); ++ ++/* the flags for the cmdline message */ ++#define CMDLINE_FOREVER_MODE 0x0 ++#define CMDLINE_NORMAL_MODE 0x1 ++#define CMDLINE_EDIT_MODE 0x2 ++ ++void print_cmdline_message (int type); + #endif + + /* C library replacement functions with identical semantics. */ +-void grub_printf (const char *format,...); ++int grub_vsprintf (char *str, const char *fmt, va_list args); ++void grub_printf (char *format,...); + int grub_sprintf (char *buffer, const char *format, ...); + int grub_tolower (int c); + int grub_isspace (int c); + int grub_strncat (char *s1, const char *s2, int n); ++void grub_memcpy(void *dest, const void *src, int len); + void *grub_memmove (void *to, const void *from, int len); + void *grub_memset (void *start, int c, int len); + int grub_strncat (char *s1, const char *s2, int n); +@@ -879,9 +924,19 @@ int grub_memcmp (const char *s1, const char *s2, int n); + int grub_strcmp (const char *s1, const char *s2); + int grub_strlen (const char *str); + char *grub_strcpy (char *dest, const char *src); ++char *grub_stpncpy (char *dest, const char *src, int n); ++int grub_strspn(const char *s, const char *accept); ++int grub_strcspn(const char *s, const char *reject); ++char *grub_strtok_r(char *s, const char *delim, char **ptrptr); ++char *grub_strchr (const char *s, int c); ++char *grub_strrchr (const char *s, int c); ++char *grub_strnchr (const char *s, int c); ++int grub_strnlen (const char *s, int n); ++char *grub_strncpy (char *new, const char *s, int n); ++int grub_strncasecmp(const char *s0, const char *s1, int n); + + #ifndef GRUB_UTIL +-typedef unsigned long grub_jmp_buf[6]; ++typedef unsigned long grub_jmp_buf[8]; + #else + /* In the grub shell, use the libc jmp_buf instead. */ + # include +@@ -904,10 +959,11 @@ extern grub_jmp_buf restart_cmdline_env; + /* misc */ + void init_page (void); + void print_error (void); +-char *convert_to_ascii (char *buf, int c, ...); ++char *convert_to_ascii (char *buf, int c, unsigned int num); + int get_cmdline (char *prompt, char *cmdline, int maxlen, + int echo_char, int history); + int substring (const char *s1, const char *s2); ++int subcasestring (const char *s1, const char *s2); + int nul_terminate (char *str); + int get_based_digit (int c, int base); + int safe_parse_maxint (char **str_ptr, int *myint_ptr); +@@ -934,7 +990,9 @@ int next_partition (unsigned long drive, unsigned long dest, + unsigned long *partition, int *type, + unsigned long *start, unsigned long *len, + unsigned long *offset, int *entry, +- unsigned long *ext_offset, char *buf); ++ unsigned long *ext_offset, ++ unsigned long *gpt_offset, int *gpt_count, ++ int *gpt_size, char *buf); + + /* Sets device to the one represented by the SAVED_* parameters. */ + int make_saved_active (void); +@@ -962,6 +1020,8 @@ int dir (char *dirname); + + int set_bootdev (int hdbias); + ++char *get_fsys_type (void); ++ + /* Display statistics on the current active device. */ + void print_fsys_type (void); + +@@ -987,10 +1047,22 @@ int load_module (char *module, char *arg); + int load_initrd (char *initrd); + + int check_password(char *entered, char* expected, password_t type); ++ ++char *sha256_crypt (const char *key, const char *salt); ++char *sha512_crypt (const char *key, const char *salt); + #endif + + void init_bios_info (void); + ++#ifdef PLATFORM_EFI ++void grub_set_config_file (char *path_name); ++int grub_save_saved_default (int new_default); ++extern int check_device (const char *device); ++extern void assign_device_name (int drive, const char *device); ++#endif ++int grub_load_linux (char *kernel, char *arg); ++int grub_load_initrd (char *initrd); ++int grub_chainloader (char *filename); + #endif /* ASM_FILE */ + + #endif /* ! GRUB_SHARED_HEADER */ +diff --git a/stage2/smp-imps.h b/stage2/smp-imps.h +index c0fdce3..bae9b77 100644 +--- a/stage2/smp-imps.h ++++ b/stage2/smp-imps.h +@@ -196,7 +196,6 @@ struct imps_interrupt + + int imps_probe (void); + +- + /* + * Defines that use variables + */ +diff --git a/stage2/stage1_5.c b/stage2/stage1_5.c +index 5c45d4c..c2d9632 100644 +--- a/stage2/stage1_5.c ++++ b/stage2/stage1_5.c +@@ -30,7 +30,8 @@ disk_read_savesect_func (int sector, int offset, int length) + void + cmain (void) + { +- grub_printf ("\n\nGRUB loading, please wait...\n"); ++ if (0) ++ grub_printf ("\n\nGRUB loading, please wait...\n"); + + /* + * Here load the true second-stage boot-loader. +diff --git a/stage2/stage2.c b/stage2/stage2.c +index 4dbf6f5..cca4332 100644 +--- a/stage2/stage2.c ++++ b/stage2/stage2.c +@@ -22,6 +22,8 @@ + + grub_jmp_buf restart_env; + ++int silent_grub = 0; ++ + #if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS) + + # if defined(PRESET_MENU_STRING) +@@ -233,6 +235,10 @@ run_menu (char *menu_entries, char *config_entries, int num_entries, + { + int c, time1, time2 = -1, first_entry = 0; + char *cur_entry = 0; ++ struct term_entry *prev_term = NULL; ++ ++ if (grub_verbose) ++ cls(); + + /* + * Main loop for menu UI. +@@ -254,18 +260,33 @@ restart: + interface. */ + if (grub_timeout < 0) + show_menu = 1; +- ++ + /* If SHOW_MENU is false, don't display the menu until ESC is pressed. */ + if (! show_menu) + { ++ /* Don't show the "Booting in blah seconds message" if the timeout is 0 */ ++ int print_message = grub_timeout != 0; ++ + /* Get current time. */ + while ((time1 = getrtsecs ()) == 0xFF) + ; + ++ if (print_message) ++ grub_printf("\rPress any key to enter the menu\n\n\n"); ++ + while (1) + { +- /* Check if ESC is pressed. */ +- if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e') ++ /* Check if any key is pressed */ ++ if (checkkey () != -1) ++ { ++ grub_timeout = -1; ++ show_menu = 1; ++ getkey (); ++ break; ++ } ++ ++ /* See if a modifier key is held down. */ ++ if (keystatus () != 0) + { + grub_timeout = -1; + show_menu = 1; +@@ -287,8 +308,10 @@ restart: + grub_timeout--; + + /* Print a message. */ +- grub_printf ("\rPress `ESC' to enter the menu... %d ", +- grub_timeout); ++ if (print_message) ++ grub_printf ("\rBooting %s in %d seconds...", ++ get_entry(menu_entries, first_entry + entryno, 0), ++ grub_timeout); + } + } + } +@@ -319,7 +342,8 @@ restart: + if (config_entries) + printf ("\ + Press enter to boot the selected OS, \'e\' to edit the\n\ +- commands before booting, or \'c\' for a command-line."); ++ commands before booting, \'a\' to modify the kernel arguments\n\ ++ before booting, or \'c\' for a command-line."); + else + printf ("\ + Press \'b\' to boot, \'e\' to edit the selected command in the\n\ +@@ -514,7 +538,7 @@ restart: + if (c == 'O') + { + grub_memmove (cur_entry + 2, cur_entry, +- ((int) heap) - ((int) cur_entry)); ++ heap - cur_entry); + + cur_entry[0] = ' '; + cur_entry[1] = 0; +@@ -530,8 +554,8 @@ restart: + 0); + + grub_memmove (cur_entry, ptr, +- ((int) heap) - ((int) ptr)); +- heap -= (((int) ptr) - ((int) cur_entry)); ++ heap - ptr); ++ heap -= ptr - cur_entry; + + num_entries--; + +@@ -655,7 +679,7 @@ restart: + else + { + cls (); +- print_cmdline_message (0); ++ print_cmdline_message (CMDLINE_EDIT_MODE); + + new_heap = heap + NEW_HEAPSIZE + 1; + +@@ -681,7 +705,7 @@ restart: + + /* align rest of commands properly */ + grub_memmove (cur_entry + j, cur_entry + i, +- (int) heap - ((int) cur_entry + i)); ++ (unsigned long) heap - ((unsigned long) cur_entry + i)); + + /* copy command to correct area */ + grub_memmove (cur_entry, new_heap, j); +@@ -697,6 +721,98 @@ restart: + enter_cmdline (heap, 0); + goto restart; + } ++ if (config_entries && c == 'a') ++ { ++ int new_num_entries = 0, i = 0, j; ++ int needs_padding, amount; ++ char *new_heap; ++ char * entries; ++ char * entry_copy; ++ char * append_line; ++ char * start; ++ ++ entry_copy = new_heap = heap; ++ cur_entry = get_entry (config_entries, first_entry + entryno, ++ 1); ++ ++ do ++ { ++ while ((*(new_heap++) = cur_entry[i++]) != 0); ++ new_num_entries++; ++ } ++ while (config_entries && cur_entry[i]); ++ ++ /* this only needs to be done if config_entries is non-NULL, ++ but it doesn't hurt to do it always */ ++ *(new_heap++) = 0; ++ ++ new_heap = heap + NEW_HEAPSIZE + 1; ++ ++ entries = entry_copy; ++ while (*entries) ++ { ++ if ((strstr(entries, "kernel") == entries) && ++ isspace(entries[6])) ++ break; ++ ++ while (*entries) entries++; ++ entries++; ++ } ++ ++ if (!*entries) ++ goto restart; ++ ++ start = entries + 6; ++ ++ /* skip the white space */ ++ while (*start && isspace(*start)) start++; ++ /* skip the kernel name */ ++ while (*start && !isspace(*start)) start++; ++ ++ /* skip the white space */ ++ needs_padding = (!*start || !isspace(*start)); ++ while (*start && isspace(*start)) start++; ++ ++ append_line = new_heap; ++ grub_strcpy(append_line, start); ++ ++ cls(); ++ print_cmdline_message (CMDLINE_EDIT_MODE); ++ ++ if (get_cmdline(PACKAGE " append> ", ++ append_line, NEW_HEAPSIZE + 1, ++ 0, 1)) ++ goto restart; ++ ++ /* have new args; append_line points to the ++ new args and start points to the old ++ args */ ++ ++ i = grub_strlen(start); ++ j = grub_strlen(append_line); ++ ++ if (i > (j + needs_padding)) ++ amount = i; ++ else ++ amount = j + needs_padding; ++ ++ /* align rest of commands properly */ ++ memmove (start + j + needs_padding, start + i, ++ ((unsigned long) append_line) - ((unsigned long) start) - (amount)); ++ ++ if (needs_padding) ++ *start = ' '; ++ ++ /* copy command to correct area */ ++ memmove (start + needs_padding, append_line, j); ++ ++ /* set up this entry to boot */ ++ config_entries = NULL; ++ cur_entry = entry_copy; ++ heap = new_heap; ++ ++ break; ++ } + #ifdef GRUB_UTIL + if (c == 'q') + { +@@ -712,16 +828,31 @@ restart: + + boot_entry: + +- cls (); +- setcursor (1); ++ if (grub_verbose || show_menu) ++ { ++ cls (); ++ setcursor (1); ++ } ++ /* if our terminal needed initialization, we should shut it down ++ * before booting the kernel, but we want to save what it was so ++ * we can come back if needed */ ++ prev_term = current_term; ++ if (current_term->shutdown) ++ { ++ (*current_term->shutdown)(); ++ current_term = term_table; /* assumption: console is first */ ++ } ++ ++ if (silent_grub) ++ setcursor(0); + + while (1) + { + if (config_entries) +- printf (" Booting \'%s\'\n\n", ++ verbose_printf (" Booting \'%s\'\n\n", + get_entry (menu_entries, first_entry + entryno, 0)); + else +- printf (" Booting command-list\n\n"); ++ verbose_printf (" Booting command-list\n\n"); + + if (! cur_entry) + cur_entry = get_entry (config_entries, first_entry + entryno, 1); +@@ -748,6 +879,13 @@ restart: + break; + } + ++ /* if we get back here, we should go back to what our term was before */ ++ current_term = prev_term; ++ if (current_term->startup) ++ /* if our terminal fails to initialize, fall back to console since ++ * it should always work */ ++ if ((*current_term->startup)() == 0) ++ current_term = term_table; /* we know that console is first */ + show_menu = 1; + goto restart; + } +@@ -867,38 +1005,8 @@ cmain (void) + if (use_config_file) + #endif /* GRUB_UTIL */ + { +- char *default_file = (char *) DEFAULT_FILE_BUF; + int i; +- +- /* Get a saved default entry if possible. */ +- saved_entryno = 0; +- *default_file = 0; +- grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN); +- for (i = grub_strlen(default_file); i >= 0; i--) +- if (default_file[i] == '/') +- { +- i++; +- break; +- } +- default_file[i] = 0; +- grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i); +- if (grub_open (default_file)) +- { +- char buf[10]; /* This is good enough. */ +- char *p = buf; +- int len; +- +- len = grub_read (buf, sizeof (buf)); +- if (len > 0) +- { +- buf[sizeof (buf) - 1] = 0; +- safe_parse_maxint (&p, &saved_entryno); +- } + +- grub_close (); +- } +- errnum = ERR_NONE; +- + do + { + /* STATE 0: Before any title command. +@@ -1050,11 +1158,16 @@ cmain (void) + while (is_preset); + } + ++ /* go ahead and make sure the terminal is setup */ ++ if (current_term->startup) ++ (*current_term->startup)(); ++ + if (! num_entries) + { + /* If no acceptable config file, goto command-line, starting + heap from where the config entries would have been stored + if there were any. */ ++ grub_verbose = 1; + enter_cmdline (config_entries, 1); + } + else +diff --git a/stage2/start.S b/stage2/start.S +index 9a7d504..7a6652f 100644 +--- a/stage2/start.S ++++ b/stage2/start.S +@@ -39,6 +39,9 @@ + + /* Print message string */ + #define MSG(x) movw $ABS(x), %si; call message ++ ++ /* Print verbose message string */ ++#define VMSG(x) + + .file "start.S" + +@@ -67,9 +70,9 @@ _start: + + /* print a notification message on the screen */ + pushw %si +- MSG(notification_string) ++ VMSG(notification_string) + popw %si +- ++ + /* this sets up for the first run through "bootloop" */ + movw $ABS(firstlist - BOOTSEC_LISTSIZE), %di + +@@ -291,9 +294,9 @@ copy_buffer: + movsb /* this runs the actual copy */ + + /* restore addressing regs and print a dot with correct DS +- (MSG modifies SI, which is saved, and unused AX and BX) */ ++ (VMSG modifies SI, which is saved, and unused AX and BX) */ + popw %ds +- MSG(notification_step) ++ VMSG(notification_step) + popa + + /* check if finished with this dataset */ +@@ -310,7 +313,7 @@ copy_buffer: + + bootit: + /* print a newline */ +- MSG(notification_done) ++ VMSG(notification_done) + popw %dx /* this makes sure %dl is our "boot" drive */ + #ifdef STAGE1_5 + ljmp $0, $0x2200 +diff --git a/stage2/term.h b/stage2/term.h +index 8261c7c..803de58 100644 +--- a/stage2/term.h ++++ b/stage2/term.h +@@ -54,18 +54,28 @@ typedef enum + /* Set when the terminal needs to be initialized. */ + #define TERM_NEED_INIT (1 << 16) + ++/* Bitmasks for modifier keys returned by term->keystatus(). */ ++#define TERM_STATUS_ALT (1 << 3) ++#define TERM_STATUS_CTRL (1 << 2) ++#define TERM_STATUS_LEFT_SHIFT (1 << 1) ++#define TERM_STATUS_RIGHT_SHIFT (1 << 0) ++ + struct term_entry + { + /* The name of a terminal. */ + const char *name; + /* The feature flags defined above. */ + unsigned long flags; ++ /* Default for maximum number of lines if not specified */ ++ unsigned short max_lines; + /* Put a character. */ + void (*putchar) (int c); + /* Check if any input character is available. */ + int (*checkkey) (void); + /* Get a character. */ + int (*getkey) (void); ++ /* Get keyboard modifier status. */ ++ int (*keystatus) (void); + /* Get the cursor position. The return value is ((X << 8) | Y). */ + int (*getxy) (void); + /* Go to the position (X, Y). */ +@@ -79,6 +89,11 @@ struct term_entry + void (*setcolor) (int normal_color, int highlight_color); + /* Turn on/off the cursor. */ + int (*setcursor) (int on); ++ ++ /* function to start a terminal */ ++ int (*startup) (void); ++ /* function to use to shutdown a terminal */ ++ void (*shutdown) (void); + }; + + /* This lists up available terminals. */ +@@ -96,6 +111,7 @@ void console_putchar (int c); + #ifndef STAGE1_5 + int console_checkkey (void); + int console_getkey (void); ++int console_keystatus (void); + int console_getxy (void); + void console_gotoxy (int x, int y); + void console_cls (void); +@@ -124,4 +140,23 @@ void hercules_setcolor (int normal_color, int highlight_color); + int hercules_setcursor (int on); + #endif + ++#ifdef SUPPORT_GRAPHICS ++extern int foreground, background, border, graphics_inited; ++ ++void graphics_set_splash(char *splashfile); ++int set_videomode (int mode); ++void graphics_putchar (int c); ++int graphics_getxy(void); ++void graphics_gotoxy(int x, int y); ++void graphics_cls(void); ++void graphics_setcolorstate (color_state state); ++void graphics_setcolor (int normal_color, int highlight_color); ++int graphics_setcursor (int on); ++int graphics_init(void); ++void graphics_end(void); ++ ++int hex(int v); ++void graphics_set_palette(int idx, int red, int green, int blue); ++#endif /* SUPPORT_GRAPHICS */ ++ + #endif /* ! GRUB_TERM_HEADER */ +diff --git a/stage2/tparm.c b/stage2/tparm.c +index ff78d53..408b284 100644 +--- a/stage2/tparm.c ++++ b/stage2/tparm.c +@@ -320,7 +320,7 @@ parse_format(const char *s, char *format, int *len) + #define isLOWER(c) ((c) >= 'a' && (c) <= 'z') + + static inline char * +-tparam_internal(const char *string, int *dataptr) ++tparam_internal(const char *string, va_list args) + { + #define NUM_VARS 26 + char *p_is_s[9]; +@@ -461,9 +461,9 @@ tparam_internal(const char *string, int *dataptr) + * a char* and an int may not be the same size on the stack. + */ + if (p_is_s[i] != 0) { +- p_is_s[i] = (char *)(*(dataptr++)); ++ p_is_s[i] = va_arg (args, char *); + } else { +- param[i] = (int)(*(dataptr++)); ++ param[i] = va_arg (args, int); + } + } + +@@ -716,11 +716,11 @@ char * + grub_tparm(const char *string,...) + { + char *result; +- int *dataptr = (int *) &string; ++ va_list ap; + +- dataptr++; +- +- result = tparam_internal(string, dataptr); ++ va_start (ap, string); ++ result = tparam_internal(string, ap); ++ va_end(ap); + + return result; + } +diff --git a/test b/test +new file mode 100644 +index 0000000..b182379 +--- /dev/null ++++ b/test +@@ -0,0 +1 @@ ++fo of fo +diff --git a/util/.gitignore b/util/.gitignore +new file mode 100644 +index 0000000..6687356 +--- /dev/null ++++ b/util/.gitignore +@@ -0,0 +1,7 @@ ++Makefile.in ++Makefile ++.deps ++grub-image ++grub-install ++grub-md5-crypt ++grub-terminfo +diff --git a/util/Makefile.am b/util/Makefile.am +index 2e04711..fa545b1 100644 +--- a/util/Makefile.am ++++ b/util/Makefile.am +@@ -1,6 +1,7 @@ ++if !PLATFORM_EFI ++ + bin_PROGRAMS = mbchk +-sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ +- grub-set-default ++sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo grub-crypt + noinst_SCRIPTS = grub-image mkbimage + + EXTRA_DIST = mkbimage +@@ -10,3 +11,9 @@ AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs + + mbchk_SOURCES = mbchk.c + mbchk_LDADD = ../lib/libcommon.a ++ ++else ++ ++sbin_SCRIPTS = grub-md5-crypt grub-terminfo grub-crypt ++ ++endif +diff --git a/util/Makefile.in b/util/Makefile.in +deleted file mode 100644 +index e700cf7..0000000 +--- a/util/Makefile.in ++++ /dev/null +@@ -1,478 +0,0 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004 Free Software Foundation, Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +- +-SOURCES = $(mbchk_SOURCES) +- +-srcdir = @srcdir@ +-top_srcdir = @top_srcdir@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-top_builddir = .. +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-INSTALL = @INSTALL@ +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-bin_PROGRAMS = mbchk$(EXEEXT) +-subdir = util +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ +- $(srcdir)/grub-image.in $(srcdir)/grub-install.in \ +- $(srcdir)/grub-md5-crypt.in $(srcdir)/grub-set-default.in \ +- $(srcdir)/grub-terminfo.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ +- $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = grub-image grub-install grub-md5-crypt \ +- grub-terminfo grub-set-default +-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" +-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +-PROGRAMS = $(bin_PROGRAMS) +-am_mbchk_OBJECTS = mbchk.$(OBJEXT) +-mbchk_OBJECTS = $(am_mbchk_OBJECTS) +-mbchk_DEPENDENCIES = ../lib/libcommon.a +-sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT) +-SCRIPTS = $(noinst_SCRIPTS) $(sbin_SCRIPTS) +-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +-SOURCES = $(mbchk_SOURCES) +-DIST_SOURCES = $(mbchk_SOURCES) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-AMDEP_FALSE = @AMDEP_FALSE@ +-AMDEP_TRUE = @AMDEP_TRUE@ +-AMTAR = @AMTAR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ +-BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ +-CC = @CC@ +-CCAS = @CCAS@ +-CCASFLAGS = @CCASFLAGS@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ +-DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FSYS_CFLAGS = @FSYS_CFLAGS@ +-GRUB_CFLAGS = @GRUB_CFLAGS@ +-GRUB_LIBS = @GRUB_LIBS@ +-HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ +-HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +-MAKEINFO = @MAKEINFO@ +-NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ +-NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ +-NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ +-NET_CFLAGS = @NET_CFLAGS@ +-NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ +-OBJCOPY = @OBJCOPY@ +-OBJEXT = @OBJEXT@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PERL = @PERL@ +-RANLIB = @RANLIB@ +-SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ +-SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ +-SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ +-SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STAGE1_CFLAGS = @STAGE1_CFLAGS@ +-STAGE2_CFLAGS = @STAGE2_CFLAGS@ +-STRIP = @STRIP@ +-VERSION = @VERSION@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ +-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-datadir = @datadir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ +- grub-set-default +- +-noinst_SCRIPTS = grub-image mkbimage +-EXTRA_DIST = mkbimage +- +-# XXX: Need to search for a header file in docs, because of multiboot.h. +-AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs +-mbchk_SOURCES = mbchk.c +-mbchk_LDADD = ../lib/libcommon.a +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .c .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu util/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-grub-image: $(top_builddir)/config.status $(srcdir)/grub-image.in +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +-grub-install: $(top_builddir)/config.status $(srcdir)/grub-install.in +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +-grub-md5-crypt: $(top_builddir)/config.status $(srcdir)/grub-md5-crypt.in +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +-grub-terminfo: $(top_builddir)/config.status $(srcdir)/grub-terminfo.in +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +-grub-set-default: $(top_builddir)/config.status $(srcdir)/grub-set-default.in +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +-install-binPROGRAMS: $(bin_PROGRAMS) +- @$(NORMAL_INSTALL) +- test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" +- @list='$(bin_PROGRAMS)'; for p in $$list; do \ +- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ +- if test -f $$p \ +- ; then \ +- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ +- echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ +- $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ +- else :; fi; \ +- done +- +-uninstall-binPROGRAMS: +- @$(NORMAL_UNINSTALL) +- @list='$(bin_PROGRAMS)'; for p in $$list; do \ +- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ +- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ +- rm -f "$(DESTDIR)$(bindir)/$$f"; \ +- done +- +-clean-binPROGRAMS: +- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +-mbchk$(EXEEXT): $(mbchk_OBJECTS) $(mbchk_DEPENDENCIES) +- @rm -f mbchk$(EXEEXT) +- $(LINK) $(mbchk_LDFLAGS) $(mbchk_OBJECTS) $(mbchk_LDADD) $(LIBS) +-install-sbinSCRIPTS: $(sbin_SCRIPTS) +- @$(NORMAL_INSTALL) +- test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)" +- @list='$(sbin_SCRIPTS)'; for p in $$list; do \ +- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ +- if test -f $$d$$p; then \ +- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ +- echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ +- $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \ +- else :; fi; \ +- done +- +-uninstall-sbinSCRIPTS: +- @$(NORMAL_UNINSTALL) +- @list='$(sbin_SCRIPTS)'; for p in $$list; do \ +- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ +- echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ +- rm -f "$(DESTDIR)$(sbindir)/$$f"; \ +- done +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchk.Po@am__quote@ +- +-.c.o: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< +- +-.c.obj: +-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +-uninstall-info-am: +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ +- list='$(DISTFILES)'; for file in $$list; do \ +- case $$file in \ +- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ +- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ +- esac; \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ +- dir="/$$dir"; \ +- $(mkdir_p) "$(distdir)$$dir"; \ +- else \ +- dir=''; \ +- fi; \ +- if test -d $$d/$$file; then \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ +- fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ +- else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(PROGRAMS) $(SCRIPTS) +-installdirs: +- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \ +- test -z "$$dir" || $(mkdir_p) "$$dir"; \ +- done +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-binPROGRAMS clean-generic mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-exec-am: install-binPROGRAMS install-sbinSCRIPTS +- +-install-info: install-info-am +- +-install-man: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ +- uninstall-sbinSCRIPTS +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ +- clean-generic ctags distclean distclean-compile \ +- distclean-generic distclean-tags distdir dvi dvi-am html \ +- html-am info info-am install install-am install-binPROGRAMS \ +- install-data install-data-am install-exec install-exec-am \ +- install-info install-info-am install-man install-sbinSCRIPTS \ +- install-strip installcheck installcheck-am installdirs \ +- maintainer-clean maintainer-clean-generic mostlyclean \ +- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ +- tags uninstall uninstall-am uninstall-binPROGRAMS \ +- uninstall-info-am uninstall-sbinSCRIPTS +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff --git a/util/grub-crypt.in b/util/grub-crypt.in +new file mode 100644 +index 0000000..e8783c8 +--- /dev/null ++++ b/util/grub-crypt.in +@@ -0,0 +1,80 @@ ++#! /usr/bin/python ++ ++'''Generate encrypted passwords for GRUB.''' ++ ++import crypt ++import getopt ++import getpass ++import sys ++ ++def usage(): ++ '''Output usage message to stderr and exit.''' ++ print >> sys.stderr, 'Usage: grub-crypt [OPTION]...' ++ print >> sys.stderr, 'Try `$progname --help\' for more information.' ++ sys.exit(1) ++ ++def gen_salt(): ++ '''Generate a random salt.''' ++ ret = '' ++ with open('/dev/urandom', 'rb') as urandom: ++ while True: ++ byte = urandom.read(1) ++ if byte in ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ++ './0123456789'): ++ ret += byte ++ if len(ret) == 16: ++ break ++ return ret ++ ++def main(): ++ '''Top level.''' ++ crypt_type = '$6$' # SHA-256 ++ try: ++ opts, args = getopt.getopt(sys.argv[1:], 'hv', ++ ('help', 'version', 'md5', 'sha-256', ++ 'sha-512')) ++ except getopt.GetoptError, err: ++ print >> sys.stderr, str(err) ++ usage() ++ if args: ++ print >> sys.stderr, 'Unexpected argument `%s\'' % (args[0],) ++ usage() ++ for (opt, _) in opts: ++ if opt in ('-h', '--help'): ++ print ( ++'''Usage: grub-crypt [OPTION]... ++Encrypt a password. ++ ++ -h, --help Print this message and exit ++ -v, --version Print the version information and exit ++ --md5 Use MD5 to encrypt the password ++ --sha-256 Use SHA-256 to encrypt the password ++ --sha-512 Use SHA-512 to encrypt the password (default) ++ ++Report bugs to . ++EOF''') ++ sys.exit(0) ++ elif opt in ('-v', '--version'): ++ print 'grub-crypt (GNU GRUB @VERSION@)' ++ sys.exit(0) ++ elif opt == '--md5': ++ crypt_type = '$1$' ++ elif opt == '--sha-256': ++ crypt_type = '$5$' ++ elif opt == '--sha-512': ++ crypt_type = '$6$' ++ else: ++ assert False, 'Unhandled option' ++ password = getpass.getpass('Password: ') ++ password2 = getpass.getpass('Retype password: ') ++ if not password: ++ print >> sys.stderr, 'Empty password is not permitted.' ++ sys.exit(1) ++ if password != password2: ++ print >> sys.stderr, 'Sorry, passwords do not match.' ++ sys.exit(1) ++ salt = crypt_type + gen_salt() ++ print crypt.crypt(password, salt) ++ ++if __name__ == '__main__': ++ main() +diff --git a/util/grub-install.in b/util/grub-install.in +index 2e598b0..12539b8 100644 +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -21,34 +21,36 @@ + prefix=@prefix@ + exec_prefix=@exec_prefix@ + sbindir=@sbindir@ +-libdir=@libdir@ ++datadir=@datadir@ + PACKAGE=@PACKAGE@ + VERSION=@VERSION@ + host_cpu=@host_cpu@ + host_os=@host_os@ + host_vendor=@host_vendor@ +-pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} ++pkgdatadir=${datadir}/${PACKAGE}/${host_cpu}-${host_vendor} + + grub_shell=${sbindir}/grub +-grub_set_default=${sbindir}/grub-set-default +-log_file=/tmp/grub-install.log.$$ +-img_file=/tmp/grub-install.img.$$ ++mdadm=${sbindir}/mdadm ++log_file=${TMPDIR:-/tmp}/grub-install.log.$$ ++img_file=${TMPDIR:-/tmp}/grub-install.img.$$ + rootdir= + grub_prefix=/boot/grub + ++install_drives= + install_device= + no_floppy= + force_lba= + recheck=no + debug=no ++justcopy=no + + # look for secure tempfile creation wrappers on this platform + if test -x /bin/tempfile; then + mklog="/bin/tempfile --prefix=grub" + mkimg="/bin/tempfile --prefix=grub" + elif test -x /bin/mktemp; then +- mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX" +- mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX" ++ mklog="/bin/mktemp ${TMPDIR:-/tmp}/grub-install.log.XXXXXX" ++ mkimg="/bin/mktemp ${TMPDIR:-/tmp}/grub-install.img.XXXXXX" + else + mklog="" + mkimg="" +@@ -70,6 +72,8 @@ Install GRUB on your drive. + --force-lba force GRUB to use LBA mode even for a buggy + BIOS + --recheck probe a device map even if it already exists ++ This flag is unreliable and its use is ++ strongly discouraged. + + INSTALL_DEVICE can be a GRUB device name or a system device filename. + +@@ -96,17 +100,28 @@ convert () { + # Break the device name into the disk part and the partition part. + case "$host_os" in + linux*) +- tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ ++ tmp_disk=`echo "$1" | grep -v '/mapper/control$' | ++ grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | ++ sed -e 's%\([shv]d[a-z]\)[0-9]*$%\1%' \ + -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ + -e 's%\(fd[0-9]*\)$%\1%' \ + -e 's%/part[0-9]*$%/disc%' \ +- -e 's%\(c[0-7]d[0-9]*\).*$%\1%'` +- tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ ++ -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ ++ -e 's%\(/mapper/[[:alpha:]]\+[[:digit:]]\+\)p[[:digit:]]\+$%\1%' \ ++ -e 's%\(/mapper/isw_[[:alpha:]_]\+[[:alpha:]]\+[[:digit:]]\+\)p[[:digit:]]\+$%\1%' \ ++ -e 's%\(/mapper/[[:alpha:]]\+_[[:alpha:]]\+\)[[:digit:]]\+$%\1%'` ++ tmp_part=`echo "$1" | grep -v '/mapper/control$' | ++ grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq | ++ sed -e 's%.*/[shv]d[a-z]\([0-9]*\)$%\1%' \ + -e 's%.*d[0-9]*p%%' \ + -e 's%.*/fd[0-9]*$%%' \ + -e 's%.*/floppy/[0-9]*$%%' \ + -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ +- -e 's%.*c[0-7]d[0-9]*p%%'` ++ -e 's%.*c[0-7]d[0-9]*p%%' \ ++ -e 's%.*/mapper/[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \ ++ -e 's%.*/mapper/isw_[[:alpha:]_]\+[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \ ++ -e 's%.*/mapper/[[:alpha:]]\+_[[:alpha:]]\+\([[:digit:]]\+\)$%\1%' | ++ grep -v '.*/mapper/.*'` + ;; + gnu*) + tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` +@@ -196,7 +211,7 @@ resolve_symlink () { + while test -L $tmp_fname; do + tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'` + if test -z "$tmp_new_fname"; then +- echo "Unrecognized ls output" 2>&1 ++ echo "Unrecognized ls output" 1>&2 + exit 1 + fi + +@@ -211,6 +226,80 @@ resolve_symlink () { + echo "$tmp_fname" + } + ++# Usage: is_raid1_device devicename ++# Returns 0 if devicename is a raid1 md device, 1 if it is not. ++is_raid1_device () { ++ case "$host_os" in ++ linux*) ++ level=`$mdadm --query --detail $1 2>/dev/null | \ ++ awk '/Raid Level :/ {print $4}'` ++ if [ "$level" = "raid1" ]; then ++ return 0 ++ fi ++ ;; ++ esac ++ return 1 ++} ++ ++# Usage: find_real_devs device ++# Returns space separated list of devices for linux if device is ++# a raid1 device. In all other cases, the provided value is returned. ++find_real_devs () { ++ source_device=$1 ++ case "$host_os" in ++ linux*) ++ if is_raid1_device $source_device ; then ++ list="" ++ for device in `$mdadm --query --detail "${source_device}" | \ ++ awk '/\/dev\/[^(md)]/ {print $7}'` ; do ++ list="$list $device" ++ done ++ echo $list ++ return 0 ++ fi ++ ;; ++ esac ++ echo $source_device ++ return 0 ++} ++ ++# Usage: stat_device file ++# Find major:minor of a device node. ++stat_device() { ++ majmin=`stat -c "%t:%T" "$1" 2>/dev/null` ++ if test -z "$majmin"; then ++ echo "Could not find device for $1" 1>&2 ++ exit 1 ++ fi ++ ++ echo "$majmin" ++} ++ ++# Usage: find_mapper_device file ++# Find a file in /dev/mapper with the same major:minor as the specified node. ++find_mapper_device() { ++ if [ -b "$1" ]; then ++ dev="$1" ++ else ++ mntpnt=`echo "$1" | sed 's,/,\\\\/,g'` ++ dev=`awk '($2 ~ /'$mntpnt'/) { print $1 }' /etc/mtab` ++ fi ++ if test -z "$dev"; then ++ echo "Could not find device for $1" 1>&2 ++ exit 1 ++ fi ++ ++ majmin=`stat_device $dev` ++ for x in /dev/mapper/* ; do ++ devmajmin=`stat_device "$x"` ++ if [ "$majmin" == "$devmajmin" ]; then ++ echo "$x" ++ return 0 ++ fi ++ done ++ return 1 ++} ++ + # Usage: find_device file + # Find block device on which the file resides. + find_device () { +@@ -219,15 +308,55 @@ find_device () { + tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^ ]*\).*%\1%p'` + + if test -z "$tmp_fname"; then +- echo "Could not find device for $1" 2>&1 ++ echo "Could not find device for $1" 1>&2 + exit 1 + fi + +- tmp_fname=`resolve_symlink $tmp_fname` ++ ret_fname=`resolve_symlink $tmp_fname` || exit 1 ++ tmp_fname=`find_mapper_device $ret_fname` ++ if test -n "$tmp_fname"; then ++ ret_fname="$tmp_fname" ++ fi ++ ++ echo "$ret_fname" ++ return 0 ++} ++ ++copy_images() { ++ # Copy the GRUB images to the GRUB directory. ++ for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do ++ rm -f $file || exit 1 ++ done ++ for file in \ ++ ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do ++ cp -f $file ${grubdir} 1>&2 || exit 1 ++ done ++} ++ ++ ++dump_boot_block () { ++ sync ++ $grub_shell --batch $no_floppy --device-map=$device_map <$log_file ++dump ${root_drive}${tmp} ${img_file} ++quit ++EOF ++} ++ ++ ++install_boot_block () { ++ # Before all invocations of the grub shell, call sync to make sure ++ # the raw device is in sync with any bufferring in filesystems. ++ sync + +- echo "$tmp_fname" ++ # Now perform the installation. ++ $grub_shell --batch $no_floppy --device-map=$device_map <>$log_file ++root $1 ++setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $2 ++quit ++EOF + } + ++ + # Check the arguments. + for option in "$@"; do + case "$option" in +@@ -247,6 +376,8 @@ for option in "$@"; do + force_lba="--force-lba" ;; + --recheck) + recheck=yes ;; ++ --just-copy) ++ justcopy=yes ;; + # This is an undocumented feature... + --debug) + debug=yes ;; +@@ -265,12 +396,6 @@ for option in "$@"; do + esac + done + +-if test "x$install_device" = x; then +- echo "install_device not specified." 1>&2 +- usage +- exit 1 +-fi +- + # If the debugging feature is enabled, print commands. + if test $debug = yes; then + set -x +@@ -293,6 +418,26 @@ esac + grubdir=${bootdir}/grub + device_map=${grubdir}/device.map + ++if [ "$recheck" == "yes" ]; then ++ if grep 'mapper' ${device_map} >/dev/null; then ++ echo 'grub-install does not support reprobing of device.map when' 1>&2 ++ echo 'using a device-mapper based boot device.' 1>&2 ++ exit 1 ++ fi ++fi ++ ++# if they just want the images copied, copy the images and then exit ++if test $justcopy = yes; then ++ copy_images ++ exit 0 ++fi ++ ++if test "x$install_device" = x; then ++ echo "install_device not specified." 1>&2 ++ usage ++ exit 1 ++fi ++ + # Check if GRUB is installed. + # This is necessary, because the user can specify "grub --read-only". + set $grub_shell dummy +@@ -303,17 +448,17 @@ else + exit 1 + fi + +-if test -f "$pkglibdir/stage1"; then ++if test -f "$pkgdatadir/stage1"; then + : + else +- echo "${pkglibdir}/stage1: Not found." 1>&2 ++ echo "${pkgdatadir}/stage1: Not found." 1>&2 + exit 1 + fi + +-if test -f "$pkglibdir/stage2"; then ++if test -f "$pkgdatadir/stage2"; then + : + else +- echo "${pkglibdir}/stage2: Not found." 1>&2 ++ echo "${pkgdatadir}/stage2: Not found." 1>&2 + exit 1 + fi + +@@ -324,9 +469,11 @@ fi + test -d "$bootdir" || mkdir "$bootdir" || exit 1 + test -d "$grubdir" || mkdir "$grubdir" || exit 1 + ++copy_images ++ + # If --recheck is specified, remove the device map, if present. + if test $recheck = yes; then +- rm -f $device_map ++ mv $device_map ${device_map}.backup + fi + + # Create the device map file if it is not present. +@@ -336,6 +483,10 @@ else + # Create a safe temporary file. + test -n "$mklog" && log_file=`$mklog` + ++ # Before all invocations of the grub shell, call sync to make sure ++ # the raw device is in sync with any bufferring in filesystems. ++ sync ++ + $grub_shell --batch $no_floppy --device-map=$device_map <$log_file + quit + EOF +@@ -351,34 +502,60 @@ fi + tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \ + | sort | uniq -d | sed -n 1p` + if test -n "$tmp"; then +- echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 ++ echo "The drive $tmp is defined multiple times in the new device map." 1>&2 ++ if test $recheck = yes; then ++ echo "Reverting to backed up copy." 1>&2 ++ mv ${device_map}.backup $device_map ++ fi ++ exit 1 ++fi ++ ++# Make sure device.map has at least one hd device ++grep -q "^(hd[0-9]\+)" $device_map ++if [ "x$?" != "x0" ]; then ++ echo "No suitable drive was found in the generated device map." 1>&2 ++ if test $recheck = yes; then ++ echo "Reverting to backed up copy." 1>&2 ++ mv ${device_map}.backup $device_map ++ fi + exit 1 + fi + + # Check for INSTALL_DEVICE. + case "$install_device" in + /dev/*) +- install_device=`resolve_symlink "$install_device"` +- install_drive=`convert "$install_device"` +- # I don't know why, but some shells wouldn't die if exit is +- # called in a function. +- if test "x$install_drive" = x; then ++ install_device=`resolve_symlink "$install_device"` || exit 1 ++ for install_drive in `find_real_devs $install_device` ; do ++ install_drive=`convert $install_drive` || exit 1 ++ if is_raid1_device $install_device; then ++ install_drive=`echo $install_drive | sed 's/,[0-9]*)/)/'` ++ fi ++ if [ "x$install_drive" = "x" ]; then ++ exit 1 ++ fi ++ install_drives="${install_drives} ${install_drive}" ++ done ++ unset install_drive ++ ++ if test "x$install_drives" = x ; then + exit 1 + fi ;; + \([hf]d[0-9]*\)) +- install_drive="$install_device" ;; ++ install_drives="$install_device" ;; + [hf]d[0-9]*) + # The GRUB format with no parenthesis. +- install_drive="($install_device)" ;; ++ install_drives="($install_device)" ;; + *) + echo "Format of install_device not recognized." 1>&2 + usage + exit 1 ;; + esac + ++unset install_device ++ + # Get the root drive. +-root_device=`find_device ${rootdir}` +-bootdir_device=`find_device ${bootdir}` ++root_device=`find_device ${rootdir}` || exit 1 ++bootdir_device=`find_device ${bootdir}` || exit 1 + + # Check if the boot directory is in the same device as the root directory. + if test "x$root_device" != "x$bootdir_device"; then +@@ -387,15 +564,8 @@ if test "x$root_device" != "x$bootdir_device"; then + grub_prefix="/grub" + fi + +-# Convert the root device to a GRUB drive. +-root_drive=`convert "$root_device"` +-if test "x$root_drive" = x; then +- exit 1 +-fi +- +-# Check if the root directory exists in the same device as the grub +-# directory. +-grubdir_device=`find_device ${grubdir}` ++# Check if the root directory exists in the same device as the grub directory. ++grubdir_device=`find_device ${grubdir}` || exit 1 + + if test "x$grubdir_device" != "x$root_device"; then + # For now, cannot deal with this situation. +@@ -406,61 +576,71 @@ EOF + exit 1 + fi + +-# Copy the GRUB images to the GRUB directory. +-for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do +- rm -f $file || exit 1 +-done +-for file in \ +- ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do +- cp -f $file ${grubdir} || exit 1 +-done +- +-# Make a default file. +-${grub_set_default} --root-directory=${rootdir} default +- + # Make sure that GRUB reads the same images as the host OS. + test -n "$mkimg" && img_file=`$mkimg` + test -n "$mklog" && log_file=`$mklog` + ++# There's not a real root device, so just pick the first ++if is_raid1_device $root_device ; then ++ root_device=`find_real_devs $root_device | awk '{print $1}'` ++fi ++ ++# Convert the root deviceto a GRUB drive. ++root_drive=`convert "$root_device"` || exit 1 ++if [ "x$root_drive" = x ]; then ++ exit 1 ++fi ++ + for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do + count=5 + tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` + while test $count -gt 0; do +- $grub_shell --batch $no_floppy --device-map=$device_map <$log_file +-dump ${root_drive}${tmp} ${img_file} +-quit +-EOF +- if grep "Error [0-9]*: " $log_file >/dev/null; then +- : +- elif cmp $file $img_file >/dev/null; then +- break +- fi +- sleep 1 +- count=`expr $count - 1` ++ dump_boot_block $root_drive $img_file ++ if grep "Error [0-9]*: " $log_file >/dev/null; then ++ : ++ else ++ # Use sha1sum instead of cmp to avoid a dependency on diffutils. ++ sha1=`sha1sum $file | cut -d' ' -f 1` ++ sha2=`sha1sum $img_file | cut -d' ' -f 1` ++ if test -f $file -a -f $img_file -a "$sha1" = "$sha2"; then ++ break ++ fi ++ fi ++ sleep 1 ++ count=`expr $count - 1` + done + if test $count -eq 0; then +- echo "The file $file not read correctly." 1>&2 +- exit 1 ++ echo "The file $file not read correctly." 1>&2 ++ exit 1 + fi + done + + rm -f $img_file + rm -f $log_file + ++if ! test -e ${grubdir}/grub.conf ; then ++ test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf ++fi ++ + # Create a safe temporary file. + test -n "$mklog" && log_file=`$mklog` + +-# Now perform the installation. +-$grub_shell --batch $no_floppy --device-map=$device_map <$log_file +-root $root_drive +-setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive +-quit +-EOF ++for install_drive in $install_drives; do ++ # Convert the root deviceto a GRUB drive. ++ root_drive=`convert "$root_device"` || exit 1 ++ if [ "x$root_drive" = x ]; then ++ exit 1 ++ fi ++ install_boot_block $root_drive $install_drive ++done + +-if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then ++if grep "Error [0-9]*: " $log_file >/dev/null ; then + cat $log_file 1>&2 + exit 1 + fi ++if test $debug = yes; then ++ cat $log_file 1>&2 ++fi + + rm -f $log_file +